From fb9175fa1110b233803d4869e7643fbccb96f25b Mon Sep 17 00:00:00 2001 From: ethan Date: Fri, 23 Feb 2024 16:08:49 +0800 Subject: [PATCH] rm local cesium --- .../Assets/IAU2006_XYS/IAU2006_XYS_0.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_1.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_10.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_11.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_12.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_13.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_14.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_15.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_16.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_17.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_18.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_19.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_2.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_20.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_21.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_22.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_23.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_24.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_25.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_26.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_27.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_3.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_4.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_5.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_6.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_7.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_8.json | 1 - .../Assets/IAU2006_XYS/IAU2006_XYS_9.json | 1 - .../cesium/Assets/Images/bing_maps_credit.png | Bin 18831 -> 0 bytes debug/cesium/Assets/Images/cesium_credit.png | Bin 4242 -> 0 bytes .../Assets/Images/google_earth_credit.png | Bin 7703 -> 0 bytes debug/cesium/Assets/Images/ion-credit.png | Bin 6028 -> 0 bytes .../Assets/Textures/LensFlare/DirtMask.jpg | Bin 113718 -> 0 bytes .../Assets/Textures/LensFlare/StarBurst.jpg | Bin 195728 -> 0 bytes .../Assets/Textures/NaturalEarthII/0/0/0.jpg | Bin 12067 -> 0 bytes .../Assets/Textures/NaturalEarthII/0/1/0.jpg | Bin 14055 -> 0 bytes .../Assets/Textures/NaturalEarthII/1/0/0.jpg | Bin 7278 -> 0 bytes .../Assets/Textures/NaturalEarthII/1/0/1.jpg | Bin 11399 -> 0 bytes .../Assets/Textures/NaturalEarthII/1/1/0.jpg | Bin 10652 -> 0 bytes .../Assets/Textures/NaturalEarthII/1/1/1.jpg | Bin 13142 -> 0 bytes .../Assets/Textures/NaturalEarthII/1/2/0.jpg | Bin 9643 -> 0 bytes .../Assets/Textures/NaturalEarthII/1/2/1.jpg | Bin 15312 -> 0 bytes .../Assets/Textures/NaturalEarthII/1/3/0.jpg | Bin 10532 -> 0 bytes .../Assets/Textures/NaturalEarthII/1/3/1.jpg | Bin 13262 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/0/0.jpg | Bin 8157 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/0/1.jpg | Bin 9307 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/0/2.jpg | Bin 7891 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/0/3.jpg | Bin 10341 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/1/0.jpg | Bin 7852 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/1/1.jpg | Bin 6850 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/1/2.jpg | Bin 11581 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/1/3.jpg | Bin 15862 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/2/0.jpg | Bin 10657 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/2/1.jpg | Bin 12456 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/2/2.jpg | Bin 12262 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/2/3.jpg | Bin 14940 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/3/0.jpg | Bin 9531 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/3/1.jpg | Bin 10234 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/3/2.jpg | Bin 11678 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/3/3.jpg | Bin 10754 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/4/0.jpg | Bin 8474 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/4/1.jpg | Bin 12265 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/4/2.jpg | Bin 16477 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/4/3.jpg | Bin 11888 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/5/0.jpg | Bin 7540 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/5/1.jpg | Bin 10274 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/5/2.jpg | Bin 16112 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/5/3.jpg | Bin 11877 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/6/0.jpg | Bin 6636 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/6/1.jpg | Bin 11564 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/6/2.jpg | Bin 16411 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/6/3.jpg | Bin 12756 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/7/0.jpg | Bin 9032 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/7/1.jpg | Bin 12957 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/7/2.jpg | Bin 11362 -> 0 bytes .../Assets/Textures/NaturalEarthII/2/7/3.jpg | Bin 11859 -> 0 bytes .../NaturalEarthII/tilemapresource.xml | 14 - .../Assets/Textures/SkyBox/tycho2t3_80_mx.jpg | Bin 118775 -> 0 bytes .../Assets/Textures/SkyBox/tycho2t3_80_my.jpg | Bin 152501 -> 0 bytes .../Assets/Textures/SkyBox/tycho2t3_80_mz.jpg | Bin 167980 -> 0 bytes .../Assets/Textures/SkyBox/tycho2t3_80_px.jpg | Bin 122746 -> 0 bytes .../Assets/Textures/SkyBox/tycho2t3_80_py.jpg | Bin 152999 -> 0 bytes .../Assets/Textures/SkyBox/tycho2t3_80_pz.jpg | Bin 152537 -> 0 bytes .../cesium/Assets/Textures/maki/airfield.png | Bin 1188 -> 0 bytes debug/cesium/Assets/Textures/maki/airport.png | Bin 1554 -> 0 bytes .../Assets/Textures/maki/alcohol-shop.png | Bin 1293 -> 0 bytes .../Assets/Textures/maki/america-football.png | Bin 2595 -> 0 bytes .../Assets/Textures/maki/art-gallery.png | Bin 3159 -> 0 bytes debug/cesium/Assets/Textures/maki/bakery.png | Bin 2714 -> 0 bytes debug/cesium/Assets/Textures/maki/bank.png | Bin 936 -> 0 bytes debug/cesium/Assets/Textures/maki/bar.png | Bin 1435 -> 0 bytes .../cesium/Assets/Textures/maki/baseball.png | Bin 1838 -> 0 bytes .../Assets/Textures/maki/basketball.png | Bin 1318 -> 0 bytes debug/cesium/Assets/Textures/maki/beer.png | Bin 1403 -> 0 bytes debug/cesium/Assets/Textures/maki/bicycle.png | Bin 3989 -> 0 bytes .../cesium/Assets/Textures/maki/building.png | Bin 1765 -> 0 bytes debug/cesium/Assets/Textures/maki/bus.png | Bin 998 -> 0 bytes debug/cesium/Assets/Textures/maki/cafe.png | Bin 1518 -> 0 bytes debug/cesium/Assets/Textures/maki/camera.png | Bin 1976 -> 0 bytes .../cesium/Assets/Textures/maki/campsite.png | Bin 2411 -> 0 bytes debug/cesium/Assets/Textures/maki/car.png | Bin 1498 -> 0 bytes .../cesium/Assets/Textures/maki/cemetery.png | Bin 967 -> 0 bytes debug/cesium/Assets/Textures/maki/cesium.png | Bin 3610 -> 0 bytes debug/cesium/Assets/Textures/maki/chemist.png | Bin 1603 -> 0 bytes debug/cesium/Assets/Textures/maki/cinema.png | Bin 1492 -> 0 bytes .../Assets/Textures/maki/circle-stroked.png | Bin 2126 -> 0 bytes debug/cesium/Assets/Textures/maki/circle.png | Bin 1459 -> 0 bytes debug/cesium/Assets/Textures/maki/city.png | Bin 788 -> 0 bytes .../Assets/Textures/maki/clothing-store.png | Bin 2037 -> 0 bytes debug/cesium/Assets/Textures/maki/college.png | Bin 2502 -> 0 bytes .../Assets/Textures/maki/commercial.png | Bin 1002 -> 0 bytes debug/cesium/Assets/Textures/maki/cricket.png | Bin 1677 -> 0 bytes debug/cesium/Assets/Textures/maki/cross.png | Bin 1888 -> 0 bytes debug/cesium/Assets/Textures/maki/dam.png | Bin 1703 -> 0 bytes debug/cesium/Assets/Textures/maki/danger.png | Bin 2429 -> 0 bytes .../Assets/Textures/maki/disability.png | Bin 3437 -> 0 bytes .../cesium/Assets/Textures/maki/dog-park.png | Bin 3146 -> 0 bytes debug/cesium/Assets/Textures/maki/embassy.png | Bin 1680 -> 0 bytes .../Textures/maki/emergency-telephone.png | Bin 1533 -> 0 bytes .../cesium/Assets/Textures/maki/entrance.png | Bin 1307 -> 0 bytes debug/cesium/Assets/Textures/maki/farm.png | Bin 1686 -> 0 bytes .../cesium/Assets/Textures/maki/fast-food.png | Bin 2019 -> 0 bytes debug/cesium/Assets/Textures/maki/ferry.png | Bin 2879 -> 0 bytes .../Assets/Textures/maki/fire-station.png | Bin 2228 -> 0 bytes debug/cesium/Assets/Textures/maki/fuel.png | Bin 1741 -> 0 bytes debug/cesium/Assets/Textures/maki/garden.png | Bin 2057 -> 0 bytes debug/cesium/Assets/Textures/maki/gift.png | Bin 1606 -> 0 bytes debug/cesium/Assets/Textures/maki/golf.png | Bin 1999 -> 0 bytes debug/cesium/Assets/Textures/maki/grocery.png | Bin 1425 -> 0 bytes .../Assets/Textures/maki/hairdresser.png | Bin 3301 -> 0 bytes debug/cesium/Assets/Textures/maki/harbor.png | Bin 2048 -> 0 bytes debug/cesium/Assets/Textures/maki/heart.png | Bin 1745 -> 0 bytes .../cesium/Assets/Textures/maki/heliport.png | Bin 2059 -> 0 bytes .../cesium/Assets/Textures/maki/hospital.png | Bin 909 -> 0 bytes .../cesium/Assets/Textures/maki/ice-cream.png | Bin 1602 -> 0 bytes .../Assets/Textures/maki/industrial.png | Bin 1092 -> 0 bytes .../cesium/Assets/Textures/maki/land-use.png | Bin 1773 -> 0 bytes debug/cesium/Assets/Textures/maki/laundry.png | Bin 2407 -> 0 bytes debug/cesium/Assets/Textures/maki/library.png | Bin 1355 -> 0 bytes .../Assets/Textures/maki/lighthouse.png | Bin 1944 -> 0 bytes debug/cesium/Assets/Textures/maki/lodging.png | Bin 1362 -> 0 bytes debug/cesium/Assets/Textures/maki/logging.png | Bin 1378 -> 0 bytes .../Textures/maki/london-underground.png | Bin 2979 -> 0 bytes .../Assets/Textures/maki/marker-stroked.png | Bin 3414 -> 0 bytes debug/cesium/Assets/Textures/maki/marker.png | Bin 2448 -> 0 bytes .../cesium/Assets/Textures/maki/minefield.png | Bin 1907 -> 0 bytes .../Assets/Textures/maki/mobilephone.png | Bin 1474 -> 0 bytes .../cesium/Assets/Textures/maki/monument.png | Bin 1376 -> 0 bytes debug/cesium/Assets/Textures/maki/museum.png | Bin 2578 -> 0 bytes debug/cesium/Assets/Textures/maki/music.png | Bin 1371 -> 0 bytes .../cesium/Assets/Textures/maki/oil-well.png | Bin 3357 -> 0 bytes debug/cesium/Assets/Textures/maki/park.png | Bin 2059 -> 0 bytes debug/cesium/Assets/Textures/maki/park2.png | Bin 2284 -> 0 bytes .../Assets/Textures/maki/parking-garage.png | Bin 1563 -> 0 bytes debug/cesium/Assets/Textures/maki/parking.png | Bin 1250 -> 0 bytes .../cesium/Assets/Textures/maki/pharmacy.png | Bin 2258 -> 0 bytes debug/cesium/Assets/Textures/maki/pitch.png | Bin 3288 -> 0 bytes .../Assets/Textures/maki/place-of-worship.png | Bin 1111 -> 0 bytes .../Assets/Textures/maki/playground.png | Bin 3856 -> 0 bytes debug/cesium/Assets/Textures/maki/police.png | Bin 2194 -> 0 bytes .../Assets/Textures/maki/polling-place.png | Bin 1772 -> 0 bytes debug/cesium/Assets/Textures/maki/post.png | Bin 1273 -> 0 bytes debug/cesium/Assets/Textures/maki/prison.png | Bin 1371 -> 0 bytes .../Assets/Textures/maki/rail-above.png | Bin 2071 -> 0 bytes .../Assets/Textures/maki/rail-light.png | Bin 2816 -> 0 bytes .../Assets/Textures/maki/rail-metro.png | Bin 2249 -> 0 bytes .../Assets/Textures/maki/rail-underground.png | Bin 1996 -> 0 bytes debug/cesium/Assets/Textures/maki/rail.png | Bin 2073 -> 0 bytes .../Textures/maki/religious-christian.png | Bin 948 -> 0 bytes .../Assets/Textures/maki/religious-jewish.png | Bin 2384 -> 0 bytes .../Assets/Textures/maki/religious-muslim.png | Bin 3925 -> 0 bytes .../Assets/Textures/maki/restaurant.png | Bin 2499 -> 0 bytes .../cesium/Assets/Textures/maki/roadblock.png | Bin 1312 -> 0 bytes debug/cesium/Assets/Textures/maki/rocket.png | Bin 1653 -> 0 bytes debug/cesium/Assets/Textures/maki/school.png | Bin 3838 -> 0 bytes debug/cesium/Assets/Textures/maki/scooter.png | Bin 2942 -> 0 bytes debug/cesium/Assets/Textures/maki/shop.png | Bin 1544 -> 0 bytes debug/cesium/Assets/Textures/maki/skiing.png | Bin 3345 -> 0 bytes .../Assets/Textures/maki/slaughterhouse.png | Bin 2270 -> 0 bytes debug/cesium/Assets/Textures/maki/soccer.png | Bin 2420 -> 0 bytes .../Assets/Textures/maki/square-stroked.png | Bin 650 -> 0 bytes debug/cesium/Assets/Textures/maki/square.png | Bin 582 -> 0 bytes .../Assets/Textures/maki/star-stroked.png | Bin 3460 -> 0 bytes debug/cesium/Assets/Textures/maki/star.png | Bin 2703 -> 0 bytes .../cesium/Assets/Textures/maki/suitcase.png | Bin 1129 -> 0 bytes .../cesium/Assets/Textures/maki/swimming.png | Bin 2106 -> 0 bytes .../cesium/Assets/Textures/maki/telephone.png | Bin 1702 -> 0 bytes debug/cesium/Assets/Textures/maki/tennis.png | Bin 1658 -> 0 bytes debug/cesium/Assets/Textures/maki/theatre.png | Bin 3233 -> 0 bytes debug/cesium/Assets/Textures/maki/toilets.png | Bin 2917 -> 0 bytes .../cesium/Assets/Textures/maki/town-hall.png | Bin 2005 -> 0 bytes debug/cesium/Assets/Textures/maki/town.png | Bin 1125 -> 0 bytes .../Assets/Textures/maki/triangle-stroked.png | Bin 2837 -> 0 bytes .../cesium/Assets/Textures/maki/triangle.png | Bin 2137 -> 0 bytes debug/cesium/Assets/Textures/maki/village.png | Bin 2145 -> 0 bytes .../cesium/Assets/Textures/maki/warehouse.png | Bin 1908 -> 0 bytes .../Assets/Textures/maki/waste-basket.png | Bin 1917 -> 0 bytes debug/cesium/Assets/Textures/maki/water.png | Bin 2411 -> 0 bytes debug/cesium/Assets/Textures/maki/wetland.png | Bin 2151 -> 0 bytes debug/cesium/Assets/Textures/maki/zoo.png | Bin 2681 -> 0 bytes debug/cesium/Assets/Textures/moonSmall.jpg | Bin 18196 -> 0 bytes debug/cesium/Assets/Textures/pin.svg | 1 - debug/cesium/Assets/Textures/waterNormals.jpg | Bin 294196 -> 0 bytes .../Assets/Textures/waterNormalsSmall.jpg | Bin 34121 -> 0 bytes .../Assets/approximateTerrainHeights.json | 1 - .../ThirdParty/Workers/basis_transcoder.js | 2232 - .../Workers/draco_decoder_nodejs.js | 1828 - debug/cesium/ThirdParty/Workers/package.js | 1 - debug/cesium/ThirdParty/Workers/package.json | 1 - .../ThirdParty/Workers/pako_deflate.min.js | 605 - .../ThirdParty/Workers/pako_inflate.min.js | 800 - .../ThirdParty/Workers/z-worker-pako.js | 502 - debug/cesium/ThirdParty/basis_transcoder.wasm | Bin 500839 -> 0 bytes debug/cesium/ThirdParty/draco_decoder.wasm | Bin 285747 -> 0 bytes .../ThirdParty/google-earth-dbroot-parser.js | 8020 - .../google-earth-dbroot-parser.js.map | 7 - debug/cesium/Widgets/Animation/Animation.css | 128 - .../Widgets/Animation/Animation.css.map | 7 - debug/cesium/Widgets/Animation/lighter.css | 71 - .../cesium/Widgets/Animation/lighter.css.map | 7 - .../BaseLayerPicker/BaseLayerPicker.css | 109 - .../BaseLayerPicker/BaseLayerPicker.css.map | 7 - .../Widgets/BaseLayerPicker/lighter.css | 23 - .../Widgets/BaseLayerPicker/lighter.css.map | 7 - .../Cesium3DTilesInspector.css | 103 - .../Cesium3DTilesInspector.css.map | 7 - .../CesiumInspector/CesiumInspector.css | 114 - .../CesiumInspector/CesiumInspector.css.map | 7 - .../Widgets/CesiumWidget/CesiumWidget.css | 113 - .../Widgets/CesiumWidget/CesiumWidget.css.map | 7 - debug/cesium/Widgets/CesiumWidget/lighter.css | 14 - .../Widgets/CesiumWidget/lighter.css.map | 7 - .../FullscreenButton/FullscreenButton.css | 9 - .../FullscreenButton/FullscreenButton.css.map | 7 - debug/cesium/Widgets/Geocoder/Geocoder.css | 71 - .../cesium/Widgets/Geocoder/Geocoder.css.map | 7 - debug/cesium/Widgets/Geocoder/lighter.css | 18 - debug/cesium/Widgets/Geocoder/lighter.css.map | 7 - .../Images/ImageryProviders/bingAerial.png | Bin 9943 -> 0 bytes .../ImageryProviders/bingAerialLabels.png | Bin 10374 -> 0 bytes .../Images/ImageryProviders/bingRoads.png | Bin 8076 -> 0 bytes .../Images/ImageryProviders/blueMarble.png | Bin 7403 -> 0 bytes .../Images/ImageryProviders/earthAtNight.png | Bin 5836 -> 0 bytes .../esriNationalGeographic.png | Bin 11555 -> 0 bytes .../ImageryProviders/esriWorldImagery.png | Bin 11575 -> 0 bytes .../ImageryProviders/esriWorldStreetMap.png | Bin 8501 -> 0 bytes .../mapQuestOpenStreetMap.png | Bin 11342 -> 0 bytes .../ImageryProviders/mapboxSatellite.png | Bin 9242 -> 0 bytes .../Images/ImageryProviders/mapboxStreets.png | Bin 7270 -> 0 bytes .../Images/ImageryProviders/mapboxTerrain.png | Bin 8300 -> 0 bytes .../ImageryProviders/naturalEarthII.png | Bin 7491 -> 0 bytes .../Images/ImageryProviders/openStreetMap.png | Bin 2663 -> 0 bytes .../Images/ImageryProviders/sentinel-2.png | Bin 10086 -> 0 bytes .../Images/ImageryProviders/stamenToner.png | Bin 4119 -> 0 bytes .../ImageryProviders/stamenWatercolor.png | Bin 10806 -> 0 bytes .../Widgets/Images/NavigationHelp/Mouse.svg | 84 - .../Images/NavigationHelp/MouseLeft.svg | 76 - .../Images/NavigationHelp/MouseMiddle.svg | 76 - .../Images/NavigationHelp/MouseRight.svg | 76 - .../Widgets/Images/NavigationHelp/Touch.svg | 120 - .../Images/NavigationHelp/TouchDrag.svg | 129 - .../Images/NavigationHelp/TouchRotate.svg | 76 - .../Images/NavigationHelp/TouchTilt.svg | 135 - .../Images/NavigationHelp/TouchZoom.svg | 74 - .../TerrainProviders/CesiumWorldTerrain.png | Bin 10080 -> 0 bytes .../Images/TerrainProviders/Ellipsoid.png | Bin 6173 -> 0 bytes debug/cesium/Widgets/Images/TimelineIcons.png | Bin 781 -> 0 bytes debug/cesium/Widgets/Images/info-loading.gif | Bin 723 -> 0 bytes debug/cesium/Widgets/InfoBox/InfoBox.css | 93 - debug/cesium/Widgets/InfoBox/InfoBox.css.map | 7 - .../Widgets/InfoBox/InfoBoxDescription.css | 179 - .../InfoBox/InfoBoxDescription.css.map | 7 - .../NavigationHelpButton.css | 94 - .../NavigationHelpButton.css.map | 7 - .../Widgets/NavigationHelpButton/lighter.css | 39 - .../NavigationHelpButton/lighter.css.map | 7 - .../PerformanceWatchdog.css | 16 - .../PerformanceWatchdog.css.map | 7 - .../ProjectionPicker/ProjectionPicker.css | 39 - .../ProjectionPicker/ProjectionPicker.css.map | 7 - .../SceneModePicker/SceneModePicker.css | 57 - .../SceneModePicker/SceneModePicker.css.map | 7 - .../SelectionIndicator/SelectionIndicator.css | 21 - .../SelectionIndicator.css.map | 7 - debug/cesium/Widgets/Timeline/Timeline.css | 97 - .../cesium/Widgets/Timeline/Timeline.css.map | 7 - debug/cesium/Widgets/Timeline/lighter.css | 19 - debug/cesium/Widgets/Timeline/lighter.css.map | 7 - debug/cesium/Widgets/VRButton/VRButton.css | 9 - .../cesium/Widgets/VRButton/VRButton.css.map | 7 - debug/cesium/Widgets/Viewer/Viewer.css | 98 - debug/cesium/Widgets/Viewer/Viewer.css.map | 7 - debug/cesium/Widgets/lighter.css | 233 - debug/cesium/Widgets/lighter.css.map | 7 - debug/cesium/Widgets/lighterShared.css | 47 - debug/cesium/Widgets/lighterShared.css.map | 7 - debug/cesium/Widgets/shared.css | 104 - debug/cesium/Widgets/shared.css.map | 7 - debug/cesium/Widgets/widgets.css | 1277 - debug/cesium/Widgets/widgets.css.map | 7 - debug/cesium/Workers/ArcType-d608b872.js | 63 - debug/cesium/Workers/ArcType-d608b872.js.map | 1 - .../Workers/AttributeCompression-e9888cb8.js | 742 - .../AttributeCompression-e9888cb8.js.map | 1 - .../AxisAlignedBoundingBox-50342d27.js | 284 - .../AxisAlignedBoundingBox-50342d27.js.map | 1 - .../Workers/BoundingRectangle-6617ed83.js | 395 - .../Workers/BoundingRectangle-6617ed83.js.map | 1 - debug/cesium/Workers/BoxGeometry-2c7f2d2d.js | 910 - .../Workers/BoxGeometry-2c7f2d2d.js.map | 1 - debug/cesium/Workers/Check-d10e5f2e.js | 316 - debug/cesium/Workers/Check-d10e5f2e.js.map | 1 - debug/cesium/Workers/Color-c019c34b.js | 2288 - debug/cesium/Workers/Color-c019c34b.js.map | 1 - .../Workers/ComponentDatatype-13a5630b.js | 367 - .../Workers/ComponentDatatype-13a5630b.js.map | 1 - ...CoplanarPolygonGeometryLibrary-dfba6465.js | 158 - ...anarPolygonGeometryLibrary-dfba6465.js.map | 1 - .../CorridorGeometryLibrary-152d0356.js | 524 - .../CorridorGeometryLibrary-152d0356.js.map | 1 - .../Workers/CylinderGeometry-2b94e575.js | 493 - .../Workers/CylinderGeometry-2b94e575.js.map | 1 - .../CylinderGeometryLibrary-d951e1d0.js | 89 - .../CylinderGeometryLibrary-d951e1d0.js.map | 1 - .../Workers/EllipseGeometry-6f0c1448.js | 1330 - .../Workers/EllipseGeometry-6f0c1448.js.map | 1 - .../EllipseGeometryLibrary-d3f88cc2.js | 392 - .../EllipseGeometryLibrary-d3f88cc2.js.map | 1 - .../EllipseOutlineGeometry-ea3faee0.js | 469 - .../EllipseOutlineGeometry-ea3faee0.js.map | 1 - .../Workers/EllipsoidGeodesic-38d0ed4a.js | 546 - .../Workers/EllipsoidGeodesic-38d0ed4a.js.map | 1 - .../Workers/EllipsoidGeometry-66510462.js | 663 - .../Workers/EllipsoidGeometry-66510462.js.map | 1 - .../EllipsoidOutlineGeometry-c18e3c42.js | 480 - .../EllipsoidOutlineGeometry-c18e3c42.js.map | 1 - .../Workers/EllipsoidRhumbLine-48b4507b.js | 767 - .../EllipsoidRhumbLine-48b4507b.js.map | 1 - .../Workers/EllipsoidTangentPlane-c421b2cb.js | 399 - .../EllipsoidTangentPlane-c421b2cb.js.map | 1 - .../Workers/EncodedCartesian3-38e2691f.js | 197 - .../Workers/EncodedCartesian3-38e2691f.js.map | 1 - .../Workers/FrustumGeometry-f3f058a2.js | 2538 - .../Workers/FrustumGeometry-f3f058a2.js.map | 1 - .../Workers/GeometryAttribute-f2746b95.js | 645 - .../Workers/GeometryAttribute-f2746b95.js.map | 1 - .../Workers/GeometryAttributes-eb2609b7.js | 117 - .../GeometryAttributes-eb2609b7.js.map | 1 - .../Workers/GeometryInstance-b2be3e5a.js | 147 - .../Workers/GeometryInstance-b2be3e5a.js.map | 1 - .../GeometryOffsetAttribute-cc320d7d.js | 42 - .../GeometryOffsetAttribute-cc320d7d.js.map | 1 - .../Workers/GeometryPipeline-f28890f4.js | 3716 - .../Workers/GeometryPipeline-f28890f4.js.map | 1 - .../cesium/Workers/IndexDatatype-b4e5cf89.js | 226 - .../Workers/IndexDatatype-b4e5cf89.js.map | 1 - .../Workers/IntersectionTests-2c7928de.js | 1862 - .../Workers/IntersectionTests-2c7928de.js.map | 1 - debug/cesium/Workers/Math-9be8b918.js | 1356 - debug/cesium/Workers/Math-9be8b918.js.map | 1 - debug/cesium/Workers/Matrix2-036c77dd.js | 7110 - debug/cesium/Workers/Matrix2-036c77dd.js.map | 1 - debug/cesium/Workers/Matrix3-f22b0303.js | 4308 - debug/cesium/Workers/Matrix3-f22b0303.js.map | 1 - .../Workers/OrientedBoundingBox-7e2eebab.js | 1283 - .../OrientedBoundingBox-7e2eebab.js.map | 1 - debug/cesium/Workers/Plane-c9f1487d.js | 335 - debug/cesium/Workers/Plane-c9f1487d.js.map | 1 - .../PolygonGeometryLibrary-62266ab5.js | 1100 - .../PolygonGeometryLibrary-62266ab5.js.map | 1 - .../Workers/PolygonPipeline-313487c3.js | 1367 - .../Workers/PolygonPipeline-313487c3.js.map | 1 - .../Workers/PolylinePipeline-3c021236.js | 599 - .../Workers/PolylinePipeline-3c021236.js.map | 1 - .../PolylineVolumeGeometryLibrary-eed2bdf7.js | 807 - ...ylineVolumeGeometryLibrary-eed2bdf7.js.map | 1 - .../Workers/PrimitivePipeline-f6d2b3b0.js | 992 - .../Workers/PrimitivePipeline-f6d2b3b0.js.map | 1 - .../RectangleGeometryLibrary-94f83a5a.js | 306 - .../RectangleGeometryLibrary-94f83a5a.js.map | 1 - debug/cesium/Workers/RuntimeError-e5c6a8b9.js | 94 - .../Workers/RuntimeError-e5c6a8b9.js.map | 1 - .../Workers/TerrainEncoding-c7d764e4.js | 1253 - .../Workers/TerrainEncoding-c7d764e4.js.map | 1 - debug/cesium/Workers/Transforms-11fb6b0a.js | 14709 - .../cesium/Workers/Transforms-11fb6b0a.js.map | 1 - debug/cesium/Workers/VertexFormat-f2d74c96.js | 338 - .../Workers/VertexFormat-f2d74c96.js.map | 1 - .../Workers/WallGeometryLibrary-4f405b12.js | 237 - .../WallGeometryLibrary-4f405b12.js.map | 1 - .../cesium/Workers/WebGLConstants-f27a5e29.js | 646 - .../Workers/WebGLConstants-f27a5e29.js.map | 1 - .../Workers/WebMercatorProjection-306f7acc.js | 177 - .../WebMercatorProjection-306f7acc.js.map | 1 - .../Workers/arrayRemoveDuplicates-c3526030.js | 155 - .../arrayRemoveDuplicates-c3526030.js.map | 1 - .../Workers/cesiumWorkerBootstrapper.js | 1297 - debug/cesium/Workers/combine-4598d225.js | 108 - debug/cesium/Workers/combine-4598d225.js.map | 1 - debug/cesium/Workers/combineGeometry.js | 43 - debug/cesium/Workers/combineGeometry.js.map | 1 - debug/cesium/Workers/createBoxGeometry.js | 38 - debug/cesium/Workers/createBoxGeometry.js.map | 1 - .../Workers/createBoxOutlineGeometry.js | 339 - .../Workers/createBoxOutlineGeometry.js.map | 1 - debug/cesium/Workers/createCircleGeometry.js | 239 - .../Workers/createCircleGeometry.js.map | 1 - .../Workers/createCircleOutlineGeometry.js | 186 - .../createCircleOutlineGeometry.js.map | 1 - .../Workers/createCoplanarPolygonGeometry.js | 612 - .../createCoplanarPolygonGeometry.js.map | 1 - .../createCoplanarPolygonOutlineGeometry.js | 262 - ...reateCoplanarPolygonOutlineGeometry.js.map | 1 - .../cesium/Workers/createCorridorGeometry.js | 1433 - .../Workers/createCorridorGeometry.js.map | 1 - .../Workers/createCorridorOutlineGeometry.js | 629 - .../createCorridorOutlineGeometry.js.map | 1 - .../cesium/Workers/createCylinderGeometry.js | 38 - .../Workers/createCylinderGeometry.js.map | 1 - .../Workers/createCylinderOutlineGeometry.js | 291 - .../createCylinderOutlineGeometry.js.map | 1 - debug/cesium/Workers/createEllipseGeometry.js | 40 - .../Workers/createEllipseGeometry.js.map | 1 - .../Workers/createEllipseOutlineGeometry.js | 40 - .../createEllipseOutlineGeometry.js.map | 1 - .../cesium/Workers/createEllipsoidGeometry.js | 38 - .../Workers/createEllipsoidGeometry.js.map | 1 - .../Workers/createEllipsoidOutlineGeometry.js | 41 - .../createEllipsoidOutlineGeometry.js.map | 1 - debug/cesium/Workers/createFrustumGeometry.js | 38 - .../Workers/createFrustumGeometry.js.map | 1 - .../Workers/createFrustumOutlineGeometry.js | 277 - .../createFrustumOutlineGeometry.js.map | 1 - debug/cesium/Workers/createGeometry.js | 81 - debug/cesium/Workers/createGeometry.js.map | 1 - .../Workers/createGroundPolylineGeometry.js | 2161 - .../createGroundPolylineGeometry.js.map | 1 - debug/cesium/Workers/createPlaneGeometry.js | 276 - .../cesium/Workers/createPlaneGeometry.js.map | 1 - .../Workers/createPlaneOutlineGeometry.js | 141 - .../Workers/createPlaneOutlineGeometry.js.map | 1 - debug/cesium/Workers/createPolygonGeometry.js | 1446 - .../Workers/createPolygonGeometry.js.map | 1 - .../Workers/createPolygonOutlineGeometry.js | 709 - .../createPolygonOutlineGeometry.js.map | 1 - .../cesium/Workers/createPolylineGeometry.js | 597 - .../Workers/createPolylineGeometry.js.map | 1 - .../Workers/createPolylineVolumeGeometry.js | 437 - .../createPolylineVolumeGeometry.js.map | 1 - .../createPolylineVolumeOutlineGeometry.js | 327 - ...createPolylineVolumeOutlineGeometry.js.map | 1 - .../cesium/Workers/createRectangleGeometry.js | 1502 - .../Workers/createRectangleGeometry.js.map | 1 - .../Workers/createRectangleOutlineGeometry.js | 561 - .../createRectangleOutlineGeometry.js.map | 1 - .../Workers/createSimplePolylineGeometry.js | 484 - .../createSimplePolylineGeometry.js.map | 1 - debug/cesium/Workers/createSphereGeometry.js | 149 - .../Workers/createSphereGeometry.js.map | 1 - .../Workers/createSphereOutlineGeometry.js | 152 - .../createSphereOutlineGeometry.js.map | 1 - .../Workers/createTaskProcessorWorker.js | 153 - .../Workers/createTaskProcessorWorker.js.map | 1 - .../createVectorTileClampedPolylines.js | 561 - .../createVectorTileClampedPolylines.js.map | 1 - .../Workers/createVectorTileGeometries.js | 471 - .../Workers/createVectorTileGeometries.js.map | 1 - .../cesium/Workers/createVectorTilePoints.js | 105 - .../Workers/createVectorTilePoints.js.map | 1 - .../Workers/createVectorTilePolygons.js | 432 - .../Workers/createVectorTilePolygons.js.map | 1 - .../Workers/createVectorTilePolylines.js | 280 - .../Workers/createVectorTilePolylines.js.map | 1 - ...VerticesFromGoogleEarthEnterpriseBuffer.js | 666 - ...icesFromGoogleEarthEnterpriseBuffer.js.map | 1 - .../Workers/createVerticesFromHeightmap.js | 2733 - .../createVerticesFromHeightmap.js.map | 1 - .../createVerticesFromQuantizedTerrainMesh.js | 1020 - ...ateVerticesFromQuantizedTerrainMesh.js.map | 1 - debug/cesium/Workers/createWallGeometry.js | 649 - .../cesium/Workers/createWallGeometry.js.map | 1 - .../Workers/createWallOutlineGeometry.js | 458 - .../Workers/createWallOutlineGeometry.js.map | 1 - debug/cesium/Workers/decodeDraco.js | 407 - debug/cesium/Workers/decodeDraco.js.map | 1 - .../decodeGoogleEarthEnterprisePacket.js | 3713 - .../decodeGoogleEarthEnterprisePacket.js.map | 1 - debug/cesium/Workers/decodeI3S.js | 1066 - debug/cesium/Workers/decodeI3S.js.map | 1 - debug/cesium/Workers/defaultValue-0ab18f7d.js | 77 - .../Workers/defaultValue-0ab18f7d.js.map | 1 - debug/cesium/Workers/package.js | 26 - debug/cesium/Workers/package.json | 1 - debug/cesium/Workers/transcodeKTX2.js | 1542 - debug/cesium/Workers/transcodeKTX2.js.map | 1 - .../cesium/Workers/transferTypedArrayTest.js | 42 - .../Workers/upsampleQuantizedTerrainMesh.js | 1049 - .../upsampleQuantizedTerrainMesh.js.map | 1 - debug/cesium/index.js | 217485 --------------- 499 files changed, 324652 deletions(-) delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json delete mode 100644 debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json delete mode 100644 debug/cesium/Assets/Images/bing_maps_credit.png delete mode 100644 debug/cesium/Assets/Images/cesium_credit.png delete mode 100644 debug/cesium/Assets/Images/google_earth_credit.png delete mode 100644 debug/cesium/Assets/Images/ion-credit.png delete mode 100644 debug/cesium/Assets/Textures/LensFlare/DirtMask.jpg delete mode 100644 debug/cesium/Assets/Textures/LensFlare/StarBurst.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/0/0/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/1/0/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/0/2.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/0/3.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/1/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/1/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/1/2.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/2/2.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/3/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/3/3.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/4/3.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/5/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/5/2.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/7/2.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg delete mode 100644 debug/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml delete mode 100644 debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg delete mode 100644 debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg delete mode 100644 debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg delete mode 100644 debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_px.jpg delete mode 100644 debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg delete mode 100644 debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_pz.jpg delete mode 100644 debug/cesium/Assets/Textures/maki/airfield.png delete mode 100644 debug/cesium/Assets/Textures/maki/airport.png delete mode 100644 debug/cesium/Assets/Textures/maki/alcohol-shop.png delete mode 100644 debug/cesium/Assets/Textures/maki/america-football.png delete mode 100644 debug/cesium/Assets/Textures/maki/art-gallery.png delete mode 100644 debug/cesium/Assets/Textures/maki/bakery.png delete mode 100644 debug/cesium/Assets/Textures/maki/bank.png delete mode 100644 debug/cesium/Assets/Textures/maki/bar.png delete mode 100644 debug/cesium/Assets/Textures/maki/baseball.png delete mode 100644 debug/cesium/Assets/Textures/maki/basketball.png delete mode 100644 debug/cesium/Assets/Textures/maki/beer.png delete mode 100644 debug/cesium/Assets/Textures/maki/bicycle.png delete mode 100644 debug/cesium/Assets/Textures/maki/building.png delete mode 100644 debug/cesium/Assets/Textures/maki/bus.png delete mode 100644 debug/cesium/Assets/Textures/maki/cafe.png delete mode 100644 debug/cesium/Assets/Textures/maki/camera.png delete mode 100644 debug/cesium/Assets/Textures/maki/campsite.png delete mode 100644 debug/cesium/Assets/Textures/maki/car.png delete mode 100644 debug/cesium/Assets/Textures/maki/cemetery.png delete mode 100644 debug/cesium/Assets/Textures/maki/cesium.png delete mode 100644 debug/cesium/Assets/Textures/maki/chemist.png delete mode 100644 debug/cesium/Assets/Textures/maki/cinema.png delete mode 100644 debug/cesium/Assets/Textures/maki/circle-stroked.png delete mode 100644 debug/cesium/Assets/Textures/maki/circle.png delete mode 100644 debug/cesium/Assets/Textures/maki/city.png delete mode 100644 debug/cesium/Assets/Textures/maki/clothing-store.png delete mode 100644 debug/cesium/Assets/Textures/maki/college.png delete mode 100644 debug/cesium/Assets/Textures/maki/commercial.png delete mode 100644 debug/cesium/Assets/Textures/maki/cricket.png delete mode 100644 debug/cesium/Assets/Textures/maki/cross.png delete mode 100644 debug/cesium/Assets/Textures/maki/dam.png delete mode 100644 debug/cesium/Assets/Textures/maki/danger.png delete mode 100644 debug/cesium/Assets/Textures/maki/disability.png delete mode 100644 debug/cesium/Assets/Textures/maki/dog-park.png delete mode 100644 debug/cesium/Assets/Textures/maki/embassy.png delete mode 100644 debug/cesium/Assets/Textures/maki/emergency-telephone.png delete mode 100644 debug/cesium/Assets/Textures/maki/entrance.png delete mode 100644 debug/cesium/Assets/Textures/maki/farm.png delete mode 100644 debug/cesium/Assets/Textures/maki/fast-food.png delete mode 100644 debug/cesium/Assets/Textures/maki/ferry.png delete mode 100644 debug/cesium/Assets/Textures/maki/fire-station.png delete mode 100644 debug/cesium/Assets/Textures/maki/fuel.png delete mode 100644 debug/cesium/Assets/Textures/maki/garden.png delete mode 100644 debug/cesium/Assets/Textures/maki/gift.png delete mode 100644 debug/cesium/Assets/Textures/maki/golf.png delete mode 100644 debug/cesium/Assets/Textures/maki/grocery.png delete mode 100644 debug/cesium/Assets/Textures/maki/hairdresser.png delete mode 100644 debug/cesium/Assets/Textures/maki/harbor.png delete mode 100644 debug/cesium/Assets/Textures/maki/heart.png delete mode 100644 debug/cesium/Assets/Textures/maki/heliport.png delete mode 100644 debug/cesium/Assets/Textures/maki/hospital.png delete mode 100644 debug/cesium/Assets/Textures/maki/ice-cream.png delete mode 100644 debug/cesium/Assets/Textures/maki/industrial.png delete mode 100644 debug/cesium/Assets/Textures/maki/land-use.png delete mode 100644 debug/cesium/Assets/Textures/maki/laundry.png delete mode 100644 debug/cesium/Assets/Textures/maki/library.png delete mode 100644 debug/cesium/Assets/Textures/maki/lighthouse.png delete mode 100644 debug/cesium/Assets/Textures/maki/lodging.png delete mode 100644 debug/cesium/Assets/Textures/maki/logging.png delete mode 100644 debug/cesium/Assets/Textures/maki/london-underground.png delete mode 100644 debug/cesium/Assets/Textures/maki/marker-stroked.png delete mode 100644 debug/cesium/Assets/Textures/maki/marker.png delete mode 100644 debug/cesium/Assets/Textures/maki/minefield.png delete mode 100644 debug/cesium/Assets/Textures/maki/mobilephone.png delete mode 100644 debug/cesium/Assets/Textures/maki/monument.png delete mode 100644 debug/cesium/Assets/Textures/maki/museum.png delete mode 100644 debug/cesium/Assets/Textures/maki/music.png delete mode 100644 debug/cesium/Assets/Textures/maki/oil-well.png delete mode 100644 debug/cesium/Assets/Textures/maki/park.png delete mode 100644 debug/cesium/Assets/Textures/maki/park2.png delete mode 100644 debug/cesium/Assets/Textures/maki/parking-garage.png delete mode 100644 debug/cesium/Assets/Textures/maki/parking.png delete mode 100644 debug/cesium/Assets/Textures/maki/pharmacy.png delete mode 100644 debug/cesium/Assets/Textures/maki/pitch.png delete mode 100644 debug/cesium/Assets/Textures/maki/place-of-worship.png delete mode 100644 debug/cesium/Assets/Textures/maki/playground.png delete mode 100644 debug/cesium/Assets/Textures/maki/police.png delete mode 100644 debug/cesium/Assets/Textures/maki/polling-place.png delete mode 100644 debug/cesium/Assets/Textures/maki/post.png delete mode 100644 debug/cesium/Assets/Textures/maki/prison.png delete mode 100644 debug/cesium/Assets/Textures/maki/rail-above.png delete mode 100644 debug/cesium/Assets/Textures/maki/rail-light.png delete mode 100644 debug/cesium/Assets/Textures/maki/rail-metro.png delete mode 100644 debug/cesium/Assets/Textures/maki/rail-underground.png delete mode 100644 debug/cesium/Assets/Textures/maki/rail.png delete mode 100644 debug/cesium/Assets/Textures/maki/religious-christian.png delete mode 100644 debug/cesium/Assets/Textures/maki/religious-jewish.png delete mode 100644 debug/cesium/Assets/Textures/maki/religious-muslim.png delete mode 100644 debug/cesium/Assets/Textures/maki/restaurant.png delete mode 100644 debug/cesium/Assets/Textures/maki/roadblock.png delete mode 100644 debug/cesium/Assets/Textures/maki/rocket.png delete mode 100644 debug/cesium/Assets/Textures/maki/school.png delete mode 100644 debug/cesium/Assets/Textures/maki/scooter.png delete mode 100644 debug/cesium/Assets/Textures/maki/shop.png delete mode 100644 debug/cesium/Assets/Textures/maki/skiing.png delete mode 100644 debug/cesium/Assets/Textures/maki/slaughterhouse.png delete mode 100644 debug/cesium/Assets/Textures/maki/soccer.png delete mode 100644 debug/cesium/Assets/Textures/maki/square-stroked.png delete mode 100644 debug/cesium/Assets/Textures/maki/square.png delete mode 100644 debug/cesium/Assets/Textures/maki/star-stroked.png delete mode 100644 debug/cesium/Assets/Textures/maki/star.png delete mode 100644 debug/cesium/Assets/Textures/maki/suitcase.png delete mode 100644 debug/cesium/Assets/Textures/maki/swimming.png delete mode 100644 debug/cesium/Assets/Textures/maki/telephone.png delete mode 100644 debug/cesium/Assets/Textures/maki/tennis.png delete mode 100644 debug/cesium/Assets/Textures/maki/theatre.png delete mode 100644 debug/cesium/Assets/Textures/maki/toilets.png delete mode 100644 debug/cesium/Assets/Textures/maki/town-hall.png delete mode 100644 debug/cesium/Assets/Textures/maki/town.png delete mode 100644 debug/cesium/Assets/Textures/maki/triangle-stroked.png delete mode 100644 debug/cesium/Assets/Textures/maki/triangle.png delete mode 100644 debug/cesium/Assets/Textures/maki/village.png delete mode 100644 debug/cesium/Assets/Textures/maki/warehouse.png delete mode 100644 debug/cesium/Assets/Textures/maki/waste-basket.png delete mode 100644 debug/cesium/Assets/Textures/maki/water.png delete mode 100644 debug/cesium/Assets/Textures/maki/wetland.png delete mode 100644 debug/cesium/Assets/Textures/maki/zoo.png delete mode 100644 debug/cesium/Assets/Textures/moonSmall.jpg delete mode 100644 debug/cesium/Assets/Textures/pin.svg delete mode 100644 debug/cesium/Assets/Textures/waterNormals.jpg delete mode 100644 debug/cesium/Assets/Textures/waterNormalsSmall.jpg delete mode 100644 debug/cesium/Assets/approximateTerrainHeights.json delete mode 100644 debug/cesium/ThirdParty/Workers/basis_transcoder.js delete mode 100644 debug/cesium/ThirdParty/Workers/draco_decoder_nodejs.js delete mode 100644 debug/cesium/ThirdParty/Workers/package.js delete mode 100644 debug/cesium/ThirdParty/Workers/package.json delete mode 100644 debug/cesium/ThirdParty/Workers/pako_deflate.min.js delete mode 100644 debug/cesium/ThirdParty/Workers/pako_inflate.min.js delete mode 100644 debug/cesium/ThirdParty/Workers/z-worker-pako.js delete mode 100644 debug/cesium/ThirdParty/basis_transcoder.wasm delete mode 100644 debug/cesium/ThirdParty/draco_decoder.wasm delete mode 100644 debug/cesium/ThirdParty/google-earth-dbroot-parser.js delete mode 100644 debug/cesium/ThirdParty/google-earth-dbroot-parser.js.map delete mode 100644 debug/cesium/Widgets/Animation/Animation.css delete mode 100644 debug/cesium/Widgets/Animation/Animation.css.map delete mode 100644 debug/cesium/Widgets/Animation/lighter.css delete mode 100644 debug/cesium/Widgets/Animation/lighter.css.map delete mode 100644 debug/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css delete mode 100644 debug/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css.map delete mode 100644 debug/cesium/Widgets/BaseLayerPicker/lighter.css delete mode 100644 debug/cesium/Widgets/BaseLayerPicker/lighter.css.map delete mode 100644 debug/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css delete mode 100644 debug/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css.map delete mode 100644 debug/cesium/Widgets/CesiumInspector/CesiumInspector.css delete mode 100644 debug/cesium/Widgets/CesiumInspector/CesiumInspector.css.map delete mode 100644 debug/cesium/Widgets/CesiumWidget/CesiumWidget.css delete mode 100644 debug/cesium/Widgets/CesiumWidget/CesiumWidget.css.map delete mode 100644 debug/cesium/Widgets/CesiumWidget/lighter.css delete mode 100644 debug/cesium/Widgets/CesiumWidget/lighter.css.map delete mode 100644 debug/cesium/Widgets/FullscreenButton/FullscreenButton.css delete mode 100644 debug/cesium/Widgets/FullscreenButton/FullscreenButton.css.map delete mode 100644 debug/cesium/Widgets/Geocoder/Geocoder.css delete mode 100644 debug/cesium/Widgets/Geocoder/Geocoder.css.map delete mode 100644 debug/cesium/Widgets/Geocoder/lighter.css delete mode 100644 debug/cesium/Widgets/Geocoder/lighter.css.map delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/bingAerial.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/bingRoads.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/blueMarble.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/earthAtNight.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/esriNationalGeographic.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/mapboxTerrain.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/naturalEarthII.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/openStreetMap.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/sentinel-2.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/stamenToner.png delete mode 100644 debug/cesium/Widgets/Images/ImageryProviders/stamenWatercolor.png delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/Mouse.svg delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/MouseRight.svg delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/Touch.svg delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg delete mode 100644 debug/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg delete mode 100644 debug/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png delete mode 100644 debug/cesium/Widgets/Images/TerrainProviders/Ellipsoid.png delete mode 100644 debug/cesium/Widgets/Images/TimelineIcons.png delete mode 100644 debug/cesium/Widgets/Images/info-loading.gif delete mode 100644 debug/cesium/Widgets/InfoBox/InfoBox.css delete mode 100644 debug/cesium/Widgets/InfoBox/InfoBox.css.map delete mode 100644 debug/cesium/Widgets/InfoBox/InfoBoxDescription.css delete mode 100644 debug/cesium/Widgets/InfoBox/InfoBoxDescription.css.map delete mode 100644 debug/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css delete mode 100644 debug/cesium/Widgets/NavigationHelpButton/NavigationHelpButton.css.map delete mode 100644 debug/cesium/Widgets/NavigationHelpButton/lighter.css delete mode 100644 debug/cesium/Widgets/NavigationHelpButton/lighter.css.map delete mode 100644 debug/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css delete mode 100644 debug/cesium/Widgets/PerformanceWatchdog/PerformanceWatchdog.css.map delete mode 100644 debug/cesium/Widgets/ProjectionPicker/ProjectionPicker.css delete mode 100644 debug/cesium/Widgets/ProjectionPicker/ProjectionPicker.css.map delete mode 100644 debug/cesium/Widgets/SceneModePicker/SceneModePicker.css delete mode 100644 debug/cesium/Widgets/SceneModePicker/SceneModePicker.css.map delete mode 100644 debug/cesium/Widgets/SelectionIndicator/SelectionIndicator.css delete mode 100644 debug/cesium/Widgets/SelectionIndicator/SelectionIndicator.css.map delete mode 100644 debug/cesium/Widgets/Timeline/Timeline.css delete mode 100644 debug/cesium/Widgets/Timeline/Timeline.css.map delete mode 100644 debug/cesium/Widgets/Timeline/lighter.css delete mode 100644 debug/cesium/Widgets/Timeline/lighter.css.map delete mode 100644 debug/cesium/Widgets/VRButton/VRButton.css delete mode 100644 debug/cesium/Widgets/VRButton/VRButton.css.map delete mode 100644 debug/cesium/Widgets/Viewer/Viewer.css delete mode 100644 debug/cesium/Widgets/Viewer/Viewer.css.map delete mode 100644 debug/cesium/Widgets/lighter.css delete mode 100644 debug/cesium/Widgets/lighter.css.map delete mode 100644 debug/cesium/Widgets/lighterShared.css delete mode 100644 debug/cesium/Widgets/lighterShared.css.map delete mode 100644 debug/cesium/Widgets/shared.css delete mode 100644 debug/cesium/Widgets/shared.css.map delete mode 100644 debug/cesium/Widgets/widgets.css delete mode 100644 debug/cesium/Widgets/widgets.css.map delete mode 100644 debug/cesium/Workers/ArcType-d608b872.js delete mode 100644 debug/cesium/Workers/ArcType-d608b872.js.map delete mode 100644 debug/cesium/Workers/AttributeCompression-e9888cb8.js delete mode 100644 debug/cesium/Workers/AttributeCompression-e9888cb8.js.map delete mode 100644 debug/cesium/Workers/AxisAlignedBoundingBox-50342d27.js delete mode 100644 debug/cesium/Workers/AxisAlignedBoundingBox-50342d27.js.map delete mode 100644 debug/cesium/Workers/BoundingRectangle-6617ed83.js delete mode 100644 debug/cesium/Workers/BoundingRectangle-6617ed83.js.map delete mode 100644 debug/cesium/Workers/BoxGeometry-2c7f2d2d.js delete mode 100644 debug/cesium/Workers/BoxGeometry-2c7f2d2d.js.map delete mode 100644 debug/cesium/Workers/Check-d10e5f2e.js delete mode 100644 debug/cesium/Workers/Check-d10e5f2e.js.map delete mode 100644 debug/cesium/Workers/Color-c019c34b.js delete mode 100644 debug/cesium/Workers/Color-c019c34b.js.map delete mode 100644 debug/cesium/Workers/ComponentDatatype-13a5630b.js delete mode 100644 debug/cesium/Workers/ComponentDatatype-13a5630b.js.map delete mode 100644 debug/cesium/Workers/CoplanarPolygonGeometryLibrary-dfba6465.js delete mode 100644 debug/cesium/Workers/CoplanarPolygonGeometryLibrary-dfba6465.js.map delete mode 100644 debug/cesium/Workers/CorridorGeometryLibrary-152d0356.js delete mode 100644 debug/cesium/Workers/CorridorGeometryLibrary-152d0356.js.map delete mode 100644 debug/cesium/Workers/CylinderGeometry-2b94e575.js delete mode 100644 debug/cesium/Workers/CylinderGeometry-2b94e575.js.map delete mode 100644 debug/cesium/Workers/CylinderGeometryLibrary-d951e1d0.js delete mode 100644 debug/cesium/Workers/CylinderGeometryLibrary-d951e1d0.js.map delete mode 100644 debug/cesium/Workers/EllipseGeometry-6f0c1448.js delete mode 100644 debug/cesium/Workers/EllipseGeometry-6f0c1448.js.map delete mode 100644 debug/cesium/Workers/EllipseGeometryLibrary-d3f88cc2.js delete mode 100644 debug/cesium/Workers/EllipseGeometryLibrary-d3f88cc2.js.map delete mode 100644 debug/cesium/Workers/EllipseOutlineGeometry-ea3faee0.js delete mode 100644 debug/cesium/Workers/EllipseOutlineGeometry-ea3faee0.js.map delete mode 100644 debug/cesium/Workers/EllipsoidGeodesic-38d0ed4a.js delete mode 100644 debug/cesium/Workers/EllipsoidGeodesic-38d0ed4a.js.map delete mode 100644 debug/cesium/Workers/EllipsoidGeometry-66510462.js delete mode 100644 debug/cesium/Workers/EllipsoidGeometry-66510462.js.map delete mode 100644 debug/cesium/Workers/EllipsoidOutlineGeometry-c18e3c42.js delete mode 100644 debug/cesium/Workers/EllipsoidOutlineGeometry-c18e3c42.js.map delete mode 100644 debug/cesium/Workers/EllipsoidRhumbLine-48b4507b.js delete mode 100644 debug/cesium/Workers/EllipsoidRhumbLine-48b4507b.js.map delete mode 100644 debug/cesium/Workers/EllipsoidTangentPlane-c421b2cb.js delete mode 100644 debug/cesium/Workers/EllipsoidTangentPlane-c421b2cb.js.map delete mode 100644 debug/cesium/Workers/EncodedCartesian3-38e2691f.js delete mode 100644 debug/cesium/Workers/EncodedCartesian3-38e2691f.js.map delete mode 100644 debug/cesium/Workers/FrustumGeometry-f3f058a2.js delete mode 100644 debug/cesium/Workers/FrustumGeometry-f3f058a2.js.map delete mode 100644 debug/cesium/Workers/GeometryAttribute-f2746b95.js delete mode 100644 debug/cesium/Workers/GeometryAttribute-f2746b95.js.map delete mode 100644 debug/cesium/Workers/GeometryAttributes-eb2609b7.js delete mode 100644 debug/cesium/Workers/GeometryAttributes-eb2609b7.js.map delete mode 100644 debug/cesium/Workers/GeometryInstance-b2be3e5a.js delete mode 100644 debug/cesium/Workers/GeometryInstance-b2be3e5a.js.map delete mode 100644 debug/cesium/Workers/GeometryOffsetAttribute-cc320d7d.js delete mode 100644 debug/cesium/Workers/GeometryOffsetAttribute-cc320d7d.js.map delete mode 100644 debug/cesium/Workers/GeometryPipeline-f28890f4.js delete mode 100644 debug/cesium/Workers/GeometryPipeline-f28890f4.js.map delete mode 100644 debug/cesium/Workers/IndexDatatype-b4e5cf89.js delete mode 100644 debug/cesium/Workers/IndexDatatype-b4e5cf89.js.map delete mode 100644 debug/cesium/Workers/IntersectionTests-2c7928de.js delete mode 100644 debug/cesium/Workers/IntersectionTests-2c7928de.js.map delete mode 100644 debug/cesium/Workers/Math-9be8b918.js delete mode 100644 debug/cesium/Workers/Math-9be8b918.js.map delete mode 100644 debug/cesium/Workers/Matrix2-036c77dd.js delete mode 100644 debug/cesium/Workers/Matrix2-036c77dd.js.map delete mode 100644 debug/cesium/Workers/Matrix3-f22b0303.js delete mode 100644 debug/cesium/Workers/Matrix3-f22b0303.js.map delete mode 100644 debug/cesium/Workers/OrientedBoundingBox-7e2eebab.js delete mode 100644 debug/cesium/Workers/OrientedBoundingBox-7e2eebab.js.map delete mode 100644 debug/cesium/Workers/Plane-c9f1487d.js delete mode 100644 debug/cesium/Workers/Plane-c9f1487d.js.map delete mode 100644 debug/cesium/Workers/PolygonGeometryLibrary-62266ab5.js delete mode 100644 debug/cesium/Workers/PolygonGeometryLibrary-62266ab5.js.map delete mode 100644 debug/cesium/Workers/PolygonPipeline-313487c3.js delete mode 100644 debug/cesium/Workers/PolygonPipeline-313487c3.js.map delete mode 100644 debug/cesium/Workers/PolylinePipeline-3c021236.js delete mode 100644 debug/cesium/Workers/PolylinePipeline-3c021236.js.map delete mode 100644 debug/cesium/Workers/PolylineVolumeGeometryLibrary-eed2bdf7.js delete mode 100644 debug/cesium/Workers/PolylineVolumeGeometryLibrary-eed2bdf7.js.map delete mode 100644 debug/cesium/Workers/PrimitivePipeline-f6d2b3b0.js delete mode 100644 debug/cesium/Workers/PrimitivePipeline-f6d2b3b0.js.map delete mode 100644 debug/cesium/Workers/RectangleGeometryLibrary-94f83a5a.js delete mode 100644 debug/cesium/Workers/RectangleGeometryLibrary-94f83a5a.js.map delete mode 100644 debug/cesium/Workers/RuntimeError-e5c6a8b9.js delete mode 100644 debug/cesium/Workers/RuntimeError-e5c6a8b9.js.map delete mode 100644 debug/cesium/Workers/TerrainEncoding-c7d764e4.js delete mode 100644 debug/cesium/Workers/TerrainEncoding-c7d764e4.js.map delete mode 100644 debug/cesium/Workers/Transforms-11fb6b0a.js delete mode 100644 debug/cesium/Workers/Transforms-11fb6b0a.js.map delete mode 100644 debug/cesium/Workers/VertexFormat-f2d74c96.js delete mode 100644 debug/cesium/Workers/VertexFormat-f2d74c96.js.map delete mode 100644 debug/cesium/Workers/WallGeometryLibrary-4f405b12.js delete mode 100644 debug/cesium/Workers/WallGeometryLibrary-4f405b12.js.map delete mode 100644 debug/cesium/Workers/WebGLConstants-f27a5e29.js delete mode 100644 debug/cesium/Workers/WebGLConstants-f27a5e29.js.map delete mode 100644 debug/cesium/Workers/WebMercatorProjection-306f7acc.js delete mode 100644 debug/cesium/Workers/WebMercatorProjection-306f7acc.js.map delete mode 100644 debug/cesium/Workers/arrayRemoveDuplicates-c3526030.js delete mode 100644 debug/cesium/Workers/arrayRemoveDuplicates-c3526030.js.map delete mode 100644 debug/cesium/Workers/cesiumWorkerBootstrapper.js delete mode 100644 debug/cesium/Workers/combine-4598d225.js delete mode 100644 debug/cesium/Workers/combine-4598d225.js.map delete mode 100644 debug/cesium/Workers/combineGeometry.js delete mode 100644 debug/cesium/Workers/combineGeometry.js.map delete mode 100644 debug/cesium/Workers/createBoxGeometry.js delete mode 100644 debug/cesium/Workers/createBoxGeometry.js.map delete mode 100644 debug/cesium/Workers/createBoxOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createBoxOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createCircleGeometry.js delete mode 100644 debug/cesium/Workers/createCircleGeometry.js.map delete mode 100644 debug/cesium/Workers/createCircleOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createCircleOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createCoplanarPolygonGeometry.js delete mode 100644 debug/cesium/Workers/createCoplanarPolygonGeometry.js.map delete mode 100644 debug/cesium/Workers/createCoplanarPolygonOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createCoplanarPolygonOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createCorridorGeometry.js delete mode 100644 debug/cesium/Workers/createCorridorGeometry.js.map delete mode 100644 debug/cesium/Workers/createCorridorOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createCorridorOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createCylinderGeometry.js delete mode 100644 debug/cesium/Workers/createCylinderGeometry.js.map delete mode 100644 debug/cesium/Workers/createCylinderOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createCylinderOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createEllipseGeometry.js delete mode 100644 debug/cesium/Workers/createEllipseGeometry.js.map delete mode 100644 debug/cesium/Workers/createEllipseOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createEllipseOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createEllipsoidGeometry.js delete mode 100644 debug/cesium/Workers/createEllipsoidGeometry.js.map delete mode 100644 debug/cesium/Workers/createEllipsoidOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createEllipsoidOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createFrustumGeometry.js delete mode 100644 debug/cesium/Workers/createFrustumGeometry.js.map delete mode 100644 debug/cesium/Workers/createFrustumOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createFrustumOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createGeometry.js delete mode 100644 debug/cesium/Workers/createGeometry.js.map delete mode 100644 debug/cesium/Workers/createGroundPolylineGeometry.js delete mode 100644 debug/cesium/Workers/createGroundPolylineGeometry.js.map delete mode 100644 debug/cesium/Workers/createPlaneGeometry.js delete mode 100644 debug/cesium/Workers/createPlaneGeometry.js.map delete mode 100644 debug/cesium/Workers/createPlaneOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createPlaneOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createPolygonGeometry.js delete mode 100644 debug/cesium/Workers/createPolygonGeometry.js.map delete mode 100644 debug/cesium/Workers/createPolygonOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createPolygonOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createPolylineGeometry.js delete mode 100644 debug/cesium/Workers/createPolylineGeometry.js.map delete mode 100644 debug/cesium/Workers/createPolylineVolumeGeometry.js delete mode 100644 debug/cesium/Workers/createPolylineVolumeGeometry.js.map delete mode 100644 debug/cesium/Workers/createPolylineVolumeOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createPolylineVolumeOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createRectangleGeometry.js delete mode 100644 debug/cesium/Workers/createRectangleGeometry.js.map delete mode 100644 debug/cesium/Workers/createRectangleOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createRectangleOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createSimplePolylineGeometry.js delete mode 100644 debug/cesium/Workers/createSimplePolylineGeometry.js.map delete mode 100644 debug/cesium/Workers/createSphereGeometry.js delete mode 100644 debug/cesium/Workers/createSphereGeometry.js.map delete mode 100644 debug/cesium/Workers/createSphereOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createSphereOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/createTaskProcessorWorker.js delete mode 100644 debug/cesium/Workers/createTaskProcessorWorker.js.map delete mode 100644 debug/cesium/Workers/createVectorTileClampedPolylines.js delete mode 100644 debug/cesium/Workers/createVectorTileClampedPolylines.js.map delete mode 100644 debug/cesium/Workers/createVectorTileGeometries.js delete mode 100644 debug/cesium/Workers/createVectorTileGeometries.js.map delete mode 100644 debug/cesium/Workers/createVectorTilePoints.js delete mode 100644 debug/cesium/Workers/createVectorTilePoints.js.map delete mode 100644 debug/cesium/Workers/createVectorTilePolygons.js delete mode 100644 debug/cesium/Workers/createVectorTilePolygons.js.map delete mode 100644 debug/cesium/Workers/createVectorTilePolylines.js delete mode 100644 debug/cesium/Workers/createVectorTilePolylines.js.map delete mode 100644 debug/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js delete mode 100644 debug/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js.map delete mode 100644 debug/cesium/Workers/createVerticesFromHeightmap.js delete mode 100644 debug/cesium/Workers/createVerticesFromHeightmap.js.map delete mode 100644 debug/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js delete mode 100644 debug/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js.map delete mode 100644 debug/cesium/Workers/createWallGeometry.js delete mode 100644 debug/cesium/Workers/createWallGeometry.js.map delete mode 100644 debug/cesium/Workers/createWallOutlineGeometry.js delete mode 100644 debug/cesium/Workers/createWallOutlineGeometry.js.map delete mode 100644 debug/cesium/Workers/decodeDraco.js delete mode 100644 debug/cesium/Workers/decodeDraco.js.map delete mode 100644 debug/cesium/Workers/decodeGoogleEarthEnterprisePacket.js delete mode 100644 debug/cesium/Workers/decodeGoogleEarthEnterprisePacket.js.map delete mode 100644 debug/cesium/Workers/decodeI3S.js delete mode 100644 debug/cesium/Workers/decodeI3S.js.map delete mode 100644 debug/cesium/Workers/defaultValue-0ab18f7d.js delete mode 100644 debug/cesium/Workers/defaultValue-0ab18f7d.js.map delete mode 100644 debug/cesium/Workers/package.js delete mode 100644 debug/cesium/Workers/package.json delete mode 100644 debug/cesium/Workers/transcodeKTX2.js delete mode 100644 debug/cesium/Workers/transcodeKTX2.js.map delete mode 100644 debug/cesium/Workers/transferTypedArrayTest.js delete mode 100644 debug/cesium/Workers/upsampleQuantizedTerrainMesh.js delete mode 100644 debug/cesium/Workers/upsampleQuantizedTerrainMesh.js.map delete mode 100644 debug/cesium/index.js diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json deleted file mode 100644 index 0dbf157..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_0.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":0,"numberOfSamples":1000,"samples":[-0.002403025022753476,-2.5083047211757836e-5,-1.721638967214743e-8,-0.002402558217007106,-2.5020003017226545e-5,-1.7146589882925253e-8,-0.002402152743739069,-2.4908815008776256e-5,-1.7018183343380784e-8,-0.0024018177616850914,-2.4779340864272868e-5,-1.686693112266686e-8,-0.0024015512294922256,-2.4661265859267777e-5,-1.672851429567895e-8,-0.0024013415089134365,-2.4580601237402673e-5,-1.6634308307010567e-8,-0.0024011692853140917,-2.4557354638250633e-5,-1.660856911234815e-8,-0.0024010094083213077,-2.460379520847823e-5,-1.666634004388421e-8,-0.002400832781870665,-2.472274606391698e-5,-1.681138635859172e-8,-0.0024006088674261195,-2.490565851910724e-5,-1.7033840158805374e-8,-0.0024003096414815053,-2.513083477542098e-5,-1.7307985763326293e-8,-0.002399915678730765,-2.5363106308028472e-5,-1.759177707540246e-8,-0.0023994239684226163,-2.5557205638682287e-5,-1.7830822072448312e-8,-0.0023988549431304905,-2.566700881355288e-5,-1.7969488578482e-8,-0.0023982538707374547,-2.5660422954022525e-5,-1.7968844164137065e-8,-0.002397681821948537,-2.553480284678542e-5,-1.7825226886235993e-8,-0.0023971964165357008,-2.53237668313255e-5,-1.7578462540315414e-8,-0.002396830441918346,-2.50885777844268e-5,-1.7301586465142487e-8,-0.0023965800106651434,-2.4896546614298096e-5,-1.7075078798371497e-8,-0.0023964084361551537,-2.4797687943490375e-5,-1.695902560230991e-8,-0.002396262002993096,-2.481096708533641e-5,-1.6976666372280337e-8,-0.0023960882393536166,-2.4923817586803518e-5,-1.7113670694608337e-8,-0.002395849219877066,-2.5101106375207836e-5,-1.732863106912266e-8,-0.002395527525579831,-2.5297461255455714e-5,-1.756761197379987e-8,-0.0023951260596151974,-2.546854998291281e-5,-1.7777564319951067e-8,-0.0023946640036132836,-2.5579325396643004e-5,-1.7916241394922998e-8,-0.0023941708783994835,-2.5608875350224024e-5,-1.7958135357141878e-8,-0.0023936800199459637,-2.5552141704174967e-5,-1.7896681829365477e-8,-0.00239322243029576,-2.5418865388500117e-5,-1.774311016303839e-8,-0.0023928218677541743,-2.5230314934074022e-5,-1.7522587181791123e-8,-0.0023924917832175113,-2.5014690159013176e-5,-1.7268730448048223e-8,-0.0023922342643846748,-2.480218762163173e-5,-1.7017686942652696e-8,-0.0023920407464684762,-2.4620565317509125e-5,-1.6802798466007283e-8,-0.0023918939307276768,-2.4491771693316273e-5,-1.6650542584010726e-8,-0.0023917702332855676,-2.442975015807349e-5,-1.6577888357278284e-8,-0.002391642329452238,-2.443909807420655e-5,-1.6590679729922046e-8,-0.002391481763245852,-2.4514179502452957e-5,-1.6682551340715887e-8,-0.0023912619080620466,-2.4638499724969643e-5,-1.6834129065335303e-8,-0.002390961805205984,-2.478455800610903e-5,-1.701276797456279e-8,-0.00239057134744484,-2.4915132198915024e-5,-1.717399678816932e-8,-0.0023900974268101054,-2.4987729973603072e-5,-1.7266795508165544e-8,-0.0023895689055318833,-2.496391501976109e-5,-1.7244787681999786e-8,-0.002389036165074365,-2.4823284691699932e-5,-1.7083063873624844e-8,-0.002388560578292379,-2.4577378315217863e-5,-1.6794918110509053e-8,-0.0023881937570601162,-2.4274142413621198e-5,-1.643724545979219e-8,-0.0023879553394346147,-2.3985163329236852e-5,-1.6095335313882396e-8,-0.002387823242597225,-2.3778727505381422e-5,-1.5850778179207802e-8,-0.002387743703083488,-2.3693514905278695e-5,-1.575012576846581e-8,-0.002387654469699301,-2.3727803248252375e-5,-1.57919573836453e-8,-0.0023875068224310926,-2.384701163322787e-5,-1.5935693828749185e-8,-0.0023872766838733636,-2.4000872036063545e-5,-1.6121849968027748e-8,-0.0023869645383715133,-2.4139837531397063e-5,-1.6291451853276617e-8,-0.0023865890688437295,-2.4225578577636494e-5,-1.6398545934918142e-8,-0.002386179207668243,-2.4235415814278647e-5,-1.641560182566368e-8,-0.0023857671367677994,-2.4162608465253676e-5,-1.633403013000638e-8,-0.00238538293231372,-2.4014446579879058e-5,-1.6162059832962554e-8,-0.002385050648932289,-2.3809267842749758e-5,-1.5921265822080736e-8,-0.0023847856192039767,-2.357281279621325e-5,-1.564223465313254e-8,-0.002384592973846085,-2.333418942320294e-5,-1.5359717819261274e-8,-0.0023844674152753756,-2.3121781930974167e-5,-1.5107704928910368e-8,-0.0023843942234786524,-2.2959461734624766e-5,-1.491486592392592e-8,-0.002384351361188566,-2.2863520256191973e-5,-1.4800873864748202e-8,-0.0023843123252193354,-2.28406536006252e-5,-1.4773996666932113e-8,-0.0023842493365599203,-2.2887020091128393e-5,-1.4829969279080835e-8,-0.0023841366567967904,-2.2988230871289267e-5,-1.4951960812478233e-8,-0.0023839539952364617,-2.312021069380629e-5,-1.5111546301631272e-8,-0.00238369008534005,-2.3251022890859802e-5,-1.527079819049034e-8,-0.0023833464925758774,-2.3344139544444378e-5,-1.5386101234343148e-8,-0.002382941139623567,-2.336411463944466e-5,-1.5414884137776942e-8,-0.002382509826925251,-2.328539769468119e-5,-1.532618136616557e-8,-0.0023821027927208825,-2.3103440347943915e-5,-1.5114003628255345e-8,-0.002381773349088804,-2.284408291453904e-5,-1.4808671898883374e-8,-0.0023815590512039917,-2.2563826220574735e-5,-1.4477243667166011e-8,-0.002381463086871345,-2.233471929550198e-5,-1.4205559558666824e-8,-0.0023814485095478804,-2.221697578834785e-5,-1.4065641166745777e-8,-0.002381452228381859,-2.2233998994991225e-5,-1.4085907881538568e-8,-0.002381411455037569,-2.2365307161191684e-5,-1.424262147988882e-8,-0.0023812864408547367,-2.2559894107652725e-5,-1.447559680357265e-8,-0.002381068549780454,-2.2758766135733266e-5,-1.4714854003566721e-8,-0.0023807747559344136,-2.291337561706086e-5,-1.4902487127724783e-8,-0.002380436370789755,-2.2994297064707167e-5,-1.5003052078078702e-8,-0.0023800885646524635,-2.299177707261808e-5,-1.5004382649226507e-8,-0.00237976327801646,-2.291211671228343e-5,-1.4913466509235396e-8,-0.0023794853741548514,-2.277298527889861e-5,-1.4750994633350504e-8,-0.0023792708581126575,-2.2599122259547465e-5,-1.4546281765613793e-8,-0.0023791261518308006,-2.241861685502684e-5,-1.4332799297124966e-8,-0.002379048025038435,-2.2259517123002332e-5,-1.4144070736454437e-8,-0.002379024159088545,-2.214660348294054e-5,-1.4009774292460906e-8,-0.0023790344674725033,-2.209831973031592e-5,-1.395206580492697e-8,-0.0023790533562057336,-2.2124111902023713e-5,-1.3982415286808531e-8,-0.002379052917494198,-2.222265873839312e-5,-1.4099513692685225e-8,-0.0023790067355613062,-2.238139064397462e-5,-1.428869841454831e-8,-0.002378893869389061,-2.257747476862916e-5,-1.4523091866730754e-8,-0.002378702581053121,-2.2780337278386994e-5,-1.476653436627111e-8,-0.002378433361551305,-2.2955662245878917e-5,-1.4978254730954575e-8,-0.002378100828725866,-2.3070719458652143e-5,-1.511914018072533e-8,-0.0023777339193535064,-2.310095367991105e-5,-1.515956714522654e-8,-0.0023773732909614727,-2.303748192499462e-5,-1.5088399696609955e-8,-0.0023770645160716658,-2.2893966475516838e-5,-1.492131520640025e-8,-0.002376846389675512,-2.2709585344523315e-5,-1.4704506770614907e-8,-0.0023767362857042957,-2.2543662682762967e-5,-1.4508420483594385e-8,-0.0023767187552697256,-2.2459283627088534e-5,-1.4408307234147157e-8,-0.0023767459611238515,-2.2499820209175073e-5,-1.445625065299755e-8,-0.0023767538670920077,-2.2670163085399482e-5,-1.4658709621930782e-8,-0.0023766872411040843,-2.2934727415897178e-5,-1.4973964372283597e-8,-0.0023765193201164465,-2.323369224805631e-5,-1.5331258141108677e-8,-0.0023762563410213845,-2.350669143427009e-5,-1.5658866089500266e-8,-0.002375928430938125,-2.371079089789632e-5,-1.5905466616878e-8,-0.0023755754730009244,-2.382701217823089e-5,-1.6047996748580552e-8,-0.0023752354105984904,-2.3857755177899014e-5,-1.6088754695381856e-8,-0.002374937643938984,-2.3820288416794153e-5,-1.6047823960984603e-8,-0.002374700710601401,-2.3740166302795695e-5,-1.5955340321399732e-8,-0.0023745323579410426,-2.364615831678585e-5,-1.584546360315411e-8,-0.002374430478790293,-2.356666639934087e-5,-1.575205426032653e-8,-0.002374384221762089,-2.352701024171114e-5,-1.57053729084508e-8,-0.0023743752258978223,-2.3547031862098734e-5,-1.572919102890182e-8,-0.0023743792463522813,-2.3638741087943782e-5,-1.5837991897107692e-8,-0.002374368580960303,-2.380412406762251e-5,-1.60343866710735e-8,-0.002374315566041234,-2.403369636554169e-5,-1.6307405665562255e-8,-0.0023741969508027684,-2.4306554286211768E-05,-1.663253558578559e-8,-0.0023739984897390765,-2.4592488041431972e-5,-1.6974166769903272e-8,-0.0023737187937815855,-2.485635257581502e-5,-1.729069822860392e-8,-0.0023733713634909127,-2.506433547134887e-5,-1.75419012861819e-8,-0.002372983923689407,-2.5191127286277645e-5,-1.769739737193478e-8,-0.002372594652471399,-2.5226659292504724e-5,-1.774469317666995e-8,-0.0023722453489884105,-2.518097690876975e-5,-1.7695084665231785e-8,-0.0023719720500917853,-2.508558541252764e-5,-1.758542950683843e-8,-0.0023717945137316262,-2.4989429346639012e-5,-1.7473550411127092e-8,-0.002371707467356645,-2.494832237534192e-5,-1.7425795584798645e-8,-0.002371677894372136,-2.5008867215187453e-5,-1.7497939205762146e-8,-0.0023716521953735695,-2.519167607485704e-5,-1.7715125311405072e-8,-0.002371573067713854,-2.548183725590846e-5,-1.8060341886620035e-8,-0.0023713996123746663,-2.5833052724984733e-5,-1.8479137373701417e-8,-0.002371120733790304,-2.6184543627960917e-5,-1.8899572452170946e-8,-0.002370755545988175,-2.6481976563885553e-5,-1.925703522704526e-8,-0.0023703426289241364,-2.6692240399045317e-5,-1.951183288718046e-8,-0.002369925545652223,-2.6807480392539526e-5,-1.9654094044252732e-8,-0.0023695414256623836,-2.6840554567015164e-5,-1.969852847864199e-8,-0.0023692152111846727,-2.681698378371743e-5,-1.9675010651785046e-8,-0.0023689586030738027,-2.676742403134865e-5,-1.961971546979294e-8,-0.002368771517557994,-2.672230169153053e-5,-1.9568738474777108e-8,-0.0023686442754798733,-2.6708491821190418e-5,-1.9554090992955217e-8,-0.0023685596467347297,-2.6747237733667733e-5,-1.960116950419851e-8,-0.0023684946354959537,-2.68525198499682e-5,-1.97267938434712e-8,-0.002368422377939945,-2.7029396546161804e-5,-1.9937245693158044e-8,-0.002368314731930507,-2.7272358283705946e-5,-2.0226327583010683e-8,-0.002368145999280894,-2.7564325967266348e-5,-2.0574158419038293e-8,-0.0023678977178564387,-2.7877297359742607e-5,-2.0947880438817348e-8,-0.002367563716932125,-2.8175607003251493e-5,-2.13054362009557e-8,-0.0023671538835179904,-2.842219417818171e-5,-2.1602912348808545e-8,-0.0023666947656918185,-2.8587099112517685e-5,-2.1804557557978034e-8,-0.002366225711058261,-2.865603679897383e-5,-2.1892948933762033e-8,-0.0023657906850576426,-2.8636207775475263e-5,-2.1875955583981355e-8,-0.0023654275601418958,-2.855700316341736e-5,-2.178772414823076e-8,-0.0023651577407058874,-2.8464659629023123e-5,-2.168254086275059e-8,-0.002364979157822262,-2.8411626526095733e-5,-2.162241058543541e-8,-0.0023648650418965824,-2.8442979454826838e-5,-2.166103733977592e-8,-0.0023647696710966484,-2.858341235909699e-5,-2.182833892955203e-8,-0.0023646404647817425,-2.8828964162584613e-5,-2.2120438590644107e-8,-0.002364433315624853,-2.9147094222646294e-5,-2.2499504905555506e-8,-0.0023641258489594833,-2.9486173871872614e-5,-2.2904806040155516e-8,-0.0023637232753826293,-2.979130710829397e-5,-2.3271375506734424e-8,-0.0023632546433513643,-3.0020135017275484e-5,-2.3548762139194928e-8,-0.002362761919778162,-3.0152532930312014e-5,-2.371261331000258e-8,-0.002362287259213515,-3.019176737033716e-5,-2.3766181246292998e-8,-0.002361863354709199,-3.015895406508579e-5,-2.3733906423839642e-8,-0.0023615089325091636,-3.0084812691876054e-5,-2.3651770841389847e-8,-0.00236122863993826,-3.0002168291456246e-5,-2.355846990290136e-8,-0.002361015342081342,-2.9940748794497447e-5,-2.3489231721847384e-8,-0.002360853090462664,-2.99242064708113e-5,-2.347223119682423e-8,-0.0023607198261957722,-2.9968579872684983e-5,-2.352671480071416e-8,-0.0023605896206938806,-3.008134175253829e-5,-2.3661849584525067e-8,-0.002360434817332799,-3.0260449420114613e-5,-2.3875596082544623e-8,-0.002360228724551759,-3.049336232044938e-5,-2.4153533560309604e-8,-0.002359949398259028,-3.0756647438100245e-5,-2.4468344706144205e-8,-0.0023595845450922696,-3.1017291850921676e-5,-2.4781284325725616e-8,-0.0023591366902662777,-3.1236974924948935e-5,-2.5047141991886597e-8,-0.0023586265980894577,-3.1379935910133564e-5,-2.5223485405296768e-8,-0.0023580922330621156,-3.1423318194842274e-5,-2.5282880705071384e-8,-0.002357581446433621,-3.136654245445751e-5,-2.5224014627911062e-8,-0.0023571393504713037,-3.123511772789739e-5,-2.507629936540768e-8,-0.0023567945569627356,-3.107585378526121e-5,-2.4894381030997065e-8,-0.002356549808293787,-3.094425143746427e-5,-2.474345004782824e-8,-0.0023563808398743354,-3.088856588907149e-5,-2.468058353057825e-8,-0.002356243673347264,-3.093631165990455e-5,-2.473883210055294e-8,-0.0023560873309623623,-3.108742146766624e-5,-2.491898425872327e-8,-0.002355867681615853,-3.131543790559243e-5,-2.5190695953120915e-8,-0.0023555585115042363,-3.157564626292947e-5,-2.5501820575724358e-8,-0.0023551570793018816,-3.1817414987353845e-5,-2.5792819079502532e-8,-0.0023546830395721335,-3.199708556138092e-5,-2.601196397786125e-8,-0.0023541715928763573,-3.2087761735616844e-5,-2.612699814404651e-8,-0.0023536634728575476,-3.208356074308803e-5,-2.6130313106072467e-8,-0.002353195112875602,-3.199796079202877e-5,-2.6037164980856268e-8,-0.0023527917127598285,-3.185788963483199e-5,-2.5878832104811108e-8,-0.0023524643421163408,-3.1696231806253835e-5,-2.569384848742031e-8,-0.002352210558042157,-3.15451429795799e-5,-2.5520122001298037e-8,-0.002352017095867703,-3.1431404225224024e-5,-2.5389404645823923e-8,-0.0023518632011028735,-3.137387309610943e-5,-2.532421829510982e-8,-0.0023517237164243985,-3.138241693585632e-5,-2.5336544634470662e-8,-0.0023515716747720653,-3.1457557889187125e-5,-2.542738407693742e-8,-0.002351380666688492,-3.159026777706401e-5,-2.5586503563180176e-8,-0.002351127544409854,-3.1761819323126654e-5,-2.5792232842799336e-8,-0.002350795997438297,-3.194420346482523e-5,-2.601189004377488e-8,-0.00235038109753939,-3.210218902073709e-5,-2.620411988036901e-8,-0.0023498939766626002,-3.2198362784118887e-5,-2.6324761207664516e-8,-0.002349364441336059,-3.2201906185988056e-5,-2.6337171516754927e-8,-0.002348838300113838,-3.2099820884316304e-5,-2.622549250364978e-8,-0.002348367104865175,-3.1906193387378433E-05,-2.6005638953133388e-8,-0.002347991928908947,-3.16632964565759e-5,-2.572670334096174e-8,-0.0023477278385863123,-3.1430895046698076e-5,-2.5458524871709287e-8,-0.0023475573302447783,-3.1266834683295797e-5,-2.526903432937616e-8,-0.0023474365947856223,-3.1207840834265524e-5,-2.5201788974958383e-8,-0.0023473111312674834,-3.125926073193481e-5,-2.5263855985966862e-8,-0.0023471329217680113,-3.139668630853095e-5,-2.5427484190962568e-8,-0.0023468725828316842,-3.157629805487812e-5,-2.564195034641037e-8,-0.00234652400711633,-3.174838223286182e-5,-2.5849203831761563e-8,-0.0023461023891960834,-3.1869477830964374e-5,-2.5998061315297644e-8,-0.0023456379459007243,-3.191071358278629e-5,-2.6054089874945166e-8,-0.002345167714297938,-3.1861618822297345e-5,-2.6004274687434745e-8,-0.0023447273964050676,-3.1729710102991125e-5,-2.5856743363241975e-8,-0.0023443447623778383,-3.15367263237694e-5,-2.5636504725218675e-8,-0.002344035611415732,-3.1312828941514695e-5,-2.5378716588854288e-8,-0.0023438025868741026,-3.1090321324122036e-5,-2.5121307043493483e-8,-0.002343636419494298,-3.0898215687290654e-5,-2.4898533605619872e-8,-0.0023435187346924568,-3.075840762917019e-5,-2.473640851696107e-8,-0.002343425470101371,-3.06836209512552e-5,-2.4650217468068794e-8,-0.002343330156203922,-3.067678824239108e-5,-2.46437581014699e-8,-0.0023432067557343844,-3.0731268964403044e-5,-2.4709591242115973e-8,-0.002343032205144756,-3.083142896996042e-5,-2.482971769728214e-8,-0.0023427890317182145,-3.09534849684997e-5,-2.4976536733214626e-8,-0.002342468429998982,-3.1066960867543575e-5,-2.5114480866863458e-8,-0.0023420738829506476,-3.113759753821509e-5,-2.520334251191813e-8,-0.0023416245655075696,-3.113286617338482e-5,-2.5204692814982757e-8,-0.002341156456037676,-3.1030702451985074e-5,-2.5092155875587517e-8,-0.0023407180452088712,-3.083007768640861e-5,-2.4863906224778936e-8,-0.0023403583393829482,-3.055874873840108e-5,-2.4551880478986413e-8,-0.002340109110049135,-3.027131810595971e-5,-2.421961909495806e-8,-0.0023399695530012623,-3.0033690127916367e-5,-2.394416454197952e-8,-0.0023399035996637175,-2.9898874983898596e-5,-2.378781857784365e-8,-0.0023398534173924984,-2.9886919236503446e-5,-2.3774659522504135e-8,-0.002339761711113448,-2.9979953784273124e-5,-2.388461211409085e-8,-0.0023395905205925225,-3.0132912884441697e-5,-2.4065731184666787e-8,-0.002339328969507674,-3.0291463113513845e-5,-2.4254908440399182e-8,-0.0023389905263682936,-3.0407909014329455e-5,-2.439632805788379e-8,-0.002338604647812188,-3.0450610353352113e-5,-2.4452510933726005e-8,-0.002338207386718835,-3.0406942615971795e-5,-2.4407957962391716e-8,-0.002337833512955816,-3.0281802581374335e-5,-2.4267646192649814e-8,-0.002337510916804099,-3.009374007485284e-5,-2.405271127085375e-8,-0.00233725717872705,-2.9870050109659613e-5,-2.379481298482102e-8,-0.0023370780896862574,-2.96415499392353e-5,-2.3530020163429226e-8,-0.0023369679571642664,-2.943765111817507e-5,-2.3292964938693384e-8,-0.002336911380731853,-2.928228272071026e-5,-2.311196745938867e-8,-0.0023368860519105425,-2.9191004014698512e-5,-2.3005572673000774e-8,-0.0023368660995786595,-2.9169474421886248e-5,-2.2980719814710166e-8,-0.002336825467155114,-2.921325593941368e-5,-2.3032512896595408e-8,-0.0023367409423963475,-2.9308629309781252e-5,-2.3145193486284356e-8,-0.002336594789812839,-2.94340434461076e-5,-2.329383537317645e-8,-0.002336377141683103,-2.9562078747041886e-5,-2.3446595994696407e-8,-0.0023360882937399465,-2.9662099579462933e-5,-2.3567732219797592e-8,-0.0023357408585416017,-2.9704065354320472e-5,-2.36219691020052e-8,-0.0023353611169372288,-2.9664178807460198e-5,-2.3581074777115405e-8,-0.002334987901996926,-2.953256184083392e-5,-2.3432902238347995e-8,-0.002334666656879615,-2.9321444023828176e-5,-2.3191111499019182e-8,-0.002334437144125591,-2.906967526378198e-5,-2.2900614292587276e-8,-0.0023343170286952335,-2.8837540628692366e-5,-2.263164135915559e-8,-0.002334289377364724,-2.868863915936848e-5,-2.245863079739621e-8,-0.0023343042731189534,-2.8664576401788524e-5,-2.243065985991554e-8,-0.002334297427240077,-2.8766728884431434e-5,-2.2550060161150142e-8,-0.00233421602436304,-2.8956937999179782e-5,-2.277304822604038e-8,-0.0023340366493231914,-2.9175695277364925e-5,-2.3030723691705274e-8,-0.0023337675567428337,-2.9365148437702835e-5,-2.325572494540632e-8,-0.002333439019167699,-2.948499872544599e-5,-2.3400714149062195e-8,-0.002333090235900311,-2.9517803647735512e-5,-2.3444668908795366e-8,-0.002332758701346869,-2.9466638538369463e-5,-2.3390385484474364e-8,-0.0023324738052357035,-2.934937562502968e-5,-2.3258055105401835e-8,-0.0023322540424882687,-2.919255582833955e-5,-2.3078281732160556e-8,-0.0023321064600515273,-2.902614663617285e-5,-2.2885999487207492e-8,-0.002332027286009202,-2.8879263050207602e-5,-2.271540058262342e-8,-0.0023320033619865835,-2.877662704188809e-5,-2.259567613496163e-8,-0.002332014289946477,-2.873576097567269e-5,-2.2547631244607782e-8,-0.002332035177135321,-2.8765014379972653e-5,-2.2581326280258576e-8,-0.0023320398449503863,-2.8862571973660708e-5,-2.2694919143851268e-8,-0.0023320042471653172,-2.9016654866027363e-5,-2.287492871831799e-8,-0.0023319096779583115,-2.9206946607571382e-5,-2.3097917898279694e-8,-0.002331745434296553,-2.940702053860624e-5,-2.333330260051453e-8,-0.0023315107913132412,-2.9587554741398894e-5,-2.354703004535643e-8,-0.002331216183994399,-2.9720241445388588e-5,-2.370604059396504e-8,-0.0023308833968589734,-2.9782371874826208e-5,-2.378354402409868e-8,-0.0023305442821816677,-2.976211745161164e-5,-2.376519028712881e-8,-0.002330237019842478,-2.9664138028036154e-5,-2.3655730605611676e-8,-0.002329998741183291,-2.9513937315933643e-5,-2.3484296706424633e-8,-0.0023298543227104943,-2.935776247905231e-5,-2.3304483190610554e-8,-0.0023298039688696283,-2.9254146272590037e-5,-2.3184600111912306e-8,-0.0023298161627486316,-2.9255771124284795e-5,-2.3186513526067538e-8,-0.002329833717182933,-2.9387407680729007e-5,-2.3339799540173714e-8,-0.00232979429485865,-2.963251445919433e-5,-2.3625939095795707e-8,-0.0023296555485235837,-2.993876684354111e-5,-2.3984573422930422e-8,-0.002329410031430962,-3.0240089226068864e-5,-2.433902191722381e-8,-0.002329082684861528,-3.048133910260082e-5,-2.4624941076546366e-8,-0.002328716252266335,-3.063272313348873e-5,-2.4807118980201846e-8,-0.0023283552432151315,-3.0691090518933916e-5,-2.4881121231374615e-8,-0.002328035235814446,-3.067316204035687e-5,-2.486564617259907e-8,-0.002327778453652459,-3.060672619689269e-5,-2.4792504271784795e-8,-0.0023275936390781573,-3.052324005011218e-5,-2.4698123022970693e-8,-0.002327477917828302,-3.0452785078251434e-5,-2.461765146651857e-8,-0.002327419112590265,-3.0420884134364205E-05,-2.458113394257909e-8,-0.0023273980040969685,-3.0446326357327403e-5,-2.4610839446448034e-8,-0.002327390669521878,-3.0539531096370326e-5,-2.4719266183936192e-8,-0.0023273711094918687,-3.070139397965835e-5,-2.4907774784639605e-8,-0.002327314298389271,-3.0922803788878494e-5,-2.5166047977091938e-8,-0.002327199604182002,-3.118523180180453e-5,-2.5472802828543438e-8,-0.0023270141555905726,-3.146275582275373e-5,-2.579813850369303e-8,-0.002326755507257778,-3.1725524753218145e-5,-2.6107509797618743e-8,-0.002326433025242352,-3.194433915074523e-5,-2.636696380227279e-8,-0.00232606757107646,-3.2095816875852493E-05,-2.6549064620552972e-8,-0.0023256892347763903,-3.216744119251998e-5,-2.663874128588696e-8,-0.0023253330548705857,-3.216173673953351e-5,-2.6638224765391106e-8,-0.002325032753407156,-3.209873777588853e-5,-2.6570101510359574e-8,-0.0023248127299698297,-3.201549252585091e-5,-2.6476970450584947e-8,-0.002324679419257254,-3.1960909325668365e-5,-2.641563798078472e-8,-0.002324614738368727,-3.198471760129885e-5,-2.6444333423830437e-8,-0.0023245759518624605,-3.2121629871326e-5,-2.6604171937243653e-8,-0.002324505785473568,-3.237602913514e-5,-2.6901108196581215e-8,-0.0023243518127423596,-3.271591879496891e-5,-2.7298653087985366e-8,-0.00232408675837698,-3.308237216229446e-5,-2.772870037338478e-8,-0.0023237183421038277,-3.341134600686158e-5,-2.8116827565107905e-8,-0.0023232834120907914,-3.365603424276712e-5,-2.8408283829963784e-8,-0.0023228315250686865,-3.379852594585868e-5,-2.8581601521190148e-8,-0.0023224081917482394,-3.384823308876176e-5,-2.8646918820079517e-8,-0.0023220447513682056,-3.3832392487888304e-5,-2.8635163154902712e-8,-0.0023217556857669294,-3.378539642682306e-5,-2.8585851446400122e-8,-0.0023215406467797794,-3.374081042009061e-5,-2.8537897313167375e-8,-0.002321388188291431,-3.3726795999537757e-5,-2.8524238705810844e-8,-0.002321279357326137,-3.376398701175925e-5,-2.8569237172436706e-8,-0.002321190580067218,-3.3864561252015965e-5,-2.8687469509032147e-8,-0.0023210960815719848,-3.403170234189584e-5,-2.8883032294239802e-8,-0.0023209703112198727,-3.425921865422195e-5,-2.9149091545929388e-8,-0.0023207907692627456,-3.453153525414017e-5,-2.9467892708359517e-8,-0.002320541348280485,-3.4824632907782434e-5,-2.9811852888919886e-8,-0.002320215787982576,-3.510859047522046e-5,-3.014647119465895e-8,-0.002319820326628823,-3.5352020534393274e-5,-3.0435397604764066e-8,-0.002319374429235887,-3.5528027890910064e-5,-3.064726176518535e-8,-0.0023189086929537852,-3.562058707993201e-5,-3.0763027321289934e-8,-0.0023184596969337903,-3.562967431567573e-5,-3.078198150000386e-8,-0.0023180625159862473,-3.557348082881343e-5,-3.072444153370548e-8,-0.0023177424037032486,-3.548664144440317e-5,-3.062992075551395e-8,-0.0023175074984734543,-3.5414226963611394e-5,-3.0550393228261676e-8,-0.0023173444808164832,-3.5402047537825155e-5,-3.053919267474974e-8,-0.002317219043515323,-3.548478675955916e-5,-3.063722510387765e-8,-0.0023170825452282313,-3.567474791693208e-5,-3.085971138660794e-8,-0.0023168847150472982,-3.595522696647335e-5,-3.118819869005432e-8,-0.0023165894160324624,-3.628263070896687e-5,-3.157275232013399e-8,-0.0023161874027681608,-3.659879209134966e-5,-3.194610912976707e-8,-0.002315699674318987,-3.6849589557777495e-5,-3.224527727736699e-8,-0.002315169322935829,-3.7001624225642415e-5,-3.2430960432418255e-8,-0.002314646199700832,-3.704960690848625e-5,-3.249625130896201e-8,-0.0023141720768090047,-3.701289220350198e-5,-3.246278529929417e-8,-0.0023137719944856,-3.692533958583261e-5,-3.2369181497699095e-8,-0.002313452787336121,-3.682436937453514e-5,-3.225850415814049e-8,-0.002313206349815514,-3.674303927821273e-5,-3.216911319350878e-8,-0.002313014513893187,-3.6705975238209506e-5,-3.21298653443614e-8,-0.002312853494672486,-3.6728114464930174e-5,-3.215852030546475e-8,-0.0023126972338266515,-3.681481612065799e-5,-3.226175333094992e-8,-0.0023125198655322456,-3.696232465768661e-5,-3.24356389814037e-8,-0.002312297893017724,-3.7158178604489365e-5,-3.266612338087536e-8,-0.0023120126639769563,-3.7381726521067834e-5,-3.292962936131338e-8,-0.002311653424383115,-3.760539504033395e-5,-3.319450237088803e-8,-0.0023112206387045776,-3.7797568417562995e-5,-3.3424282093674193e-8,-0.002310728536788081,-3.7927679776685745e-5,-3.3583518129125895e-8,-0.0023102052694704335,-3.7973269632081315e-5,-3.3645883688399196e-8,-0.002309689114953737,-3.792741024238655e-5,-3.3602769741033175e-8,-0.002309220367796046,-3.780365018678395e-5,-3.34690861984953e-8,-0.0023088306454635615,-3.763560952953059e-5,-3.328295822689161e-8,-0.0023085331437765486,-3.7470095324169245e-5,-3.30979876994702e-8,-0.0023083175552887736,-3.7355299923970754e-5,-3.296981668241202e-8,-0.0023081517291295645,-3.732774019023125e-5,-3.2941121239366296e-8,-0.0023079897002703125,-3.740204716129852e-5,-3.302971182509186e-8,-0.0023077837234663535,-3.7566599907923365e-5,-3.322321468544985e-8,-0.0023074969972720206,-3.778618699150824e-5,-3.348181192736664e-8,-0.002307113642460123,-3.801111136025596e-5,-3.374850764245679e-8,-0.002306642967714749,-3.819047303514916e-5,-3.3964389987148476e-8,-0.0023061164179579287,-3.8285780849737995e-5,-3.40844388236443e-8,-0.0023055780533455137,-3.828042081343265e-5,-3.408864550347391e-8,-0.0023050720265702773,-3.818189606197478e-5,-3.3984813393723e-8,-0.0023046316398957264,-3.801683262139339e-5,-3.3802987367837267e-8,-0.00230427334288954,-3.7821682524135505e-5,-3.358486019035794e-8,-0.0023039963644423222,-3.7633111972824855e-5,-3.337272686138091e-8,-0.002303786336992908,-3.748100255910153e-5,-3.320135317605305e-8,-0.0023036204437704402,-3.738497046118624e-5,-3.3093833427999516e-8,-0.002303472191629436,-3.735370107695463e-5,-3.306068870435814e-8,-0.002303315004370737,-3.738581151208172e-5,-3.310077586295026e-8,-0.0023031247168510474,-3.7471158388023855e-5,-3.32027746012847e-8,-0.002302881512812013,-3.759204402485969e-5,-3.334659244660564e-8,-0.002302571933303701,-3.772437161974421e-5,-3.3504698526810776e-8,-0.0023021913377570913,-3.7839318120416736e-5,-3.364401288936653e-8,-0.0023017466592312736,-3.790639624397905e-5,-3.3729365113627754e-8,-0.002301258499438132,-3.789868982799408e-5,-3.3729469251606456e-8,-0.0023007607416336475,-3.780025860121621e-5,-3.362545368835861e-8,-0.0023002955727393715,-3.761398422436507e-5,-3.341996763976326e-8,-0.002299903135206751,-3.7366095073082776e-5,-3.314251715734096e-8,-0.002299608241321281,-3.7103131944292765e-5,-3.284613208267745e-8,-0.002299409859179875,-3.687991824381861e-5,-3.259369265324991e-8,-0.002299279285932504,-3.674229260682073e-5,-3.243819215569253e-8,-0.002299168823546775,-3.6712133551511284e-5,-3.240551750739637e-8,-0.002299027108588892,-3.678121604662647e-5,-3.248721326687466e-8,-0.0022988143521173038,-3.6915489318077446e-5,-3.2645093229978927e-8,-0.0022985121434507642,-3.706652291671608e-5,-3.282408232012828e-8,-0.0022981259731840605,-3.718510344513982e-5,-3.296765596479805e-8,-0.002297681444338649,-3.723291069296564e-5,-3.3031266622567177e-8,-0.0022972163826716816,-3.7189964304819385e-5,-3.299108395567988e-8,-0.002296771289655474,-3.705699893642229e-5,-3.284699771750507e-8,-0.0022963804162048507,-3.685301926143306e-5,-3.2620069474865724e-8,-0.0022960653412444033,-3.66092080660818e-5,-3.234570517089325e-8,-0.0022958321994601843,-3.6361104881873565e-5,-3.206471491834107e-8,-0.002295672602594345,-3.6141216362085723e-5,-3.181475278986125e-8,-0.002295567237924504,-3.5973699239903435e-5,-3.1624065630400416e-8,-0.0022954906243840873,-3.5871742882865936e-5,-3.150833328403298e-8,-0.002295415668514197,-3.583734289021038e-5,-3.1470303577740756e-8,-0.002295317231199662,-3.5862619387422194e-5,-3.15012747362056e-8,-0.002295174587684972,-3.593175025312556e-5,-3.158334026307848e-8,-0.0022949731503511582,-3.6022919077861825e-5,-3.169165951737354e-8,-0.0022947059593891967,-3.6110200777476796e-5,-3.1796616976641045e-8,-0.0022943752972072132,-3.616576445549112e-5,-3.186629056886203e-8,-0.002293994395917849,-3.616308491839482e-5,-3.1870055583428156e-8,-0.0022935884913046806,-3.608188698839053e-5,-3.1784218012190775e-8,-0.002293193570220022,-3.591490428985524e-5,-3.159981966187581e-8,-0.002292850700555697,-3.567488665407547e-5,-3.1330816136700846e-8,-0.0022925949121289655,-3.539799888834784e-5,-3.101814903088958e-8,-0.002292441079759657,-3.5138654460845667e-5,-3.072396888884776e-8,-0.0022923737482313526,-3.495377210004042e-5,-3.051367324612897e-8,-0.0022923487357085484,-3.4881645478195986e-5,-3.043169702193616e-8,-0.0022923082878944408,-3.492651926994169e-5,-3.048374540670587e-8,-0.0022922023645509603,-3.5057777584302726e-5,-3.063565736187704e-8,-0.002292004823110608,-3.522321745129158e-5,-3.0828335408719365e-8,-0.002291718031987991,-3.536782916311345e-5,-3.099901295008251e-8,-0.0022913672330241424,-3.544908418763723e-5,-3.109866179650461e-8,-0.002290990059070643,-3.544468044302114e-5,-3.1100956371175926e-8,-0.0022906260283061795,-3.535334262818601e-5,-3.1003445892457103e-8,-0.0022903084934227853,-3.5191150650947184e-5,-3.082366001102285e-8,-0.002290059645962504,-3.4985740590012e-5,-3.059271116004469e-8,-0.002289888308889336,-3.476990829758171e-5,-3.034806608016834e-8,-0.002289790112933232,-3.457553303386381e-5,-3.0126527996035566e-8,-0.0022897496397346197,-3.442855427528838e-5,-2.995832382862933e-8,-0.002289743927638933,-3.434557978525591e-5,-2.986303752963534e-8,-0.002289746588173612,-3.433235628935457e-5,-2.984772570762622e-8,-0.002289731806192985,-3.438399705495003e-5,-2.9907130752155833e-8,-0.0022896776371395563,-3.448658144544781e-5,-3.0025539997263514e-8,-0.002289568333240068,-3.4619516180843974e-5,-3.0179546880832127e-8,-0.002289395830989697,-3.47581192864351e-5,-3.034104020878307e-8,-0.0022891606980330746,-3.487624615385044e-5,-3.048017863245395e-8,-0.0022888727561433233,-3.494909690242651e-5,-3.0568516096956604e-8,-0.0022885513883073552,-3.4956571873741554e-5,-3.058275352336701e-8,-0.002288225022291335,-3.4887629910986334e-5,-3.050971134872694e-8,-0.0022879285346280604,-3.474558680788467e-5,-3.0352495822772635e-8,-0.002287697014005668,-3.4552914595581084e-5,-3.013619110840197e-8,-0.002287555258528512,-3.4352264826514714e-5,-2.990924381258495e-8,-0.002287505296293813,-3.419939650252042e-5,-2.9735499630763315e-8,-0.0022875185392014596,-3.414608973943245e-5,-2.9674650423240414e-8,-0.002287540654767576,-3.421841512072958e-5,-2.975725826269698e-8,-0.0022875109191809696,-3.44028369555647e-5,-2.9968681291149824e-8,-0.0022873866431173677,-3.4650463730046105e-5,-3.025373403994287e-8,-0.002287158332342123,-3.489747604808045e-5,-3.05398504214709e-8,-0.0022868484445149025,-3.5088852879194874e-5,-3.076405861695239e-8,-0.0022864982748903593,-3.519317267669936e-5,-3.0889870385194194e-8,-0.002286152562989151,-3.520525313625685e-5,-3.091044534452543e-8,-0.002285848351995372,-3.514064936767193e-5,-3.084259232463975e-8,-0.0022856095545583004,-3.5027359972136336e-5,-3.071759518882632e-8,-0.0022854458582351883,-3.4898128170332654e-5,-3.057260162184731e-8,-0.00228535406658743,-3.4784542000901826e-5,-3.0443888195242704e-8,-0.0022853205545476122,-3.471284955278595e-5,-3.0361936066289834e-8,-0.0022853242782383083,-3.4701131164836125e-5,-3.034799776992067e-8,-0.0022853401172956323,-3.475768108400181e-5,-3.0412079618106474e-8,-0.0022853423369857883,-3.488055943683937e-5,-3.055234935450222e-8,-0.0022853079331452636,-3.505829657473036e-5,-3.075595068991225e-8,-0.002285219540357508,-3.5271714452898415e-5,-3.1001145596984345e-8,-0.0022850675526555806,-3.5496617417606936e-5,-3.12604400979373e-8,-0.0022848513167228906,-3.5706935033342264e-5,-3.150417106161792e-8,-0.0022845794630886704,-3.587803665272236e-5,-3.170422273669897e-8,-0.0022842694256383967,-3.599011192601114e-5,-3.183778648177624e-8,-0.00228394612191299,-3.6031573527607656e-5,-3.1891182357691236e-8,-0.002283639559272516,-3.6002497987339216e-5,-3.1863829412209876e-8,-0.0022833807000028155,-3.591781523569677e-5,-3.17720571397393e-8,-0.002283194835117489,-3.580895633737797e-5,-3.1651234007313374e-8,-0.0022830926687873554,-3.572151453512309e-5,-3.155331255203707e-8,-0.0022830615120185546,-3.57062013456485e-5,-3.1536574359696766e-8,-0.002283061910144253,-3.5802515052971905e-5,-3.1646865496677e-8,-0.0022830358716624693,-3.602024681505544e-5,-3.1896238479571526e-8,-0.002282927452508825,-3.6329876875859376e-5,-3.2251745516056244e-8,-0.0022827062816265977,-3.667107036558002e-5,-3.264498114105585e-8,-0.0022823796709535715,-3.697658131461953e-5,-3.299928501542816e-8,-0.0022819864232603475,-3.719735460090399e-5,-3.325834215160285e-8,-0.0022815785791103415,-3.731532145924846e-5,-3.340080377913226e-8,-0.0022812032084957965,-3.734128205682896e-5,-3.3438034270071183e-8,-0.002280891871937716,-3.7304369843453694e-5,-3.3402379181189025e-8,-0.00228065814223643,-3.724061603780327e-5,-3.333439792808469e-8,-0.0022805000038872204,-3.718451764462349e-5,-3.327337443004344e-8,-0.0022804039844390635,-3.7164175330215406e-5,-3.325171023981485e-8,-0.002280349211641098,-3.7198996010101034e-5,-3.3292116454290506e-8,-0.0022803108906574855,-3.729879835377055e-5,-3.3406389414515064e-8,-0.002280263357184188,-3.746369139111816e-5,-3.359514042205903e-8,-0.0022801829142725643,-3.76845561343038e-5,-3.3848312986735143e-8,-0.0022800505440541212,-3.794419075362827e-5,-3.4146529008746734e-8,-0.002279854394613768,-3.821932509749697e-5,-3.446344080378021e-8,-0.002279591667380771,-3.8483592197162534e-5,-3.4769134737453335e-8,-0.0022792694769532365,-3.8711202674219674e-5,-3.503427192200282e-8,-0.002278904453787725,-3.888090559245803e-5,-3.523451107453436e-8,-0.002278520994022731,-3.897981593858639e-5,-3.5354790439935546e-8,-0.0022781481387727765,-3.900661067575245e-5,-3.539296714173588e-8,-0.002277815196272408,-3.897358681368924e-5,-3.536228182941742e-8,-0.0022775462453310945,-3.8907078916294634e-5,-3.5292063500544346e-8,-0.0022773537578315915,-3.88453723888866e-5,-3.5225611058902015e-8,-0.0022772323066882973,-3.88328268780596e-5,-3.5213664861948535e-8,-0.002277154719218136,-3.89093864059176e-5,-3.5302432695555914e-8,-0.0022770743013513575,-3.909671606337604e-5,-3.551757119061668e-8,-0.0022769361938568297,-3.93858582620144e-5,-3.584980135264396e-8,-0.0022766965332619883,-3.9734321357865546e-5,-3.625133407898208e-8,-0.002276341115211891,-4.007817531691193e-5,-3.664954907985626e-8,-0.0022758922917568173,-4.035551223226274e-5,-3.697373201351628e-8,-0.0022753992488523085,-4.0528709716748785e-5,-3.7180470529775404e-8,-0.0022749180581077707,-4.059371095721217e-5,-3.726429156698758e-8,-0.0022744933359550488,-4.057442247318822e-5,-3.7251455930854735e-8,-0.0022741491150162865,-4.0509294110553696e-5,-3.718495011122612e-8,-0.0022738888817427747,-4.043836498717976e-5,-3.7109976390399145e-8,-0.0022737006122365193,-4.0394935220934196e-5,-3.706454561541384e-8,-0.0022735628534328385,-4.0401953921682715e-5,-3.7075254422409025e-8,-0.0022734497848497666,-4.047142453162688e-5,-3.7156399239620105e-8,-0.0022733348583905645,-4.060512607912676e-5,-3.731060746631049e-8,-0.0022731934580261463,-4.0795705115488924e-5,-3.752998308750005e-8,-0.00227300512552994,-4.102789765037355e-5,-3.7797496246937914e-8,-0.0022727556876095496,-4.128004247365327e-5,-3.808875005360056e-8,-0.002272439315133133,-4.152626986166031e-5,-3.837450044928072e-8,-0.0022720601389120266,-4.173970137526162e-5,-3.862427282168575e-8,-0.0022716327599983676,-4.1896595491755895e-5,-3.8811002059216745e-8,-0.0022711810539608945,-4.1980908267824755e-5,-3.8916135263443654e-8,-0.00227073496835204,-4.1988409487146426e-5,-3.8934279948754235e-8,-0.002270325441507122,-4.192927899551331e-5,-3.8876227340469446e-8,-0.002269978122215947,-4.1828177158028644e-5,-3.8769219119330844e-8,-0.00226970702629286,-4.172123601459589e-5,-3.865378498185866e-8,-0.0022695094556672577,-4.1649926366732944e-5,-3.857700174244831e-8,-0.002269363629343624,-4.165219466353312e-5,-3.858250738357373e-8,-0.0022692306298698933,-4.175204263636338e-5,-3.869853604806306e-8,-0.0022690619905320303,-4.195007217268219e-5,-3.892687238355782e-8,-0.0022688127656313537,-4.22189359377569e-5,-3.923733305382498e-8,-0.0022684568851602466,-4.2507766167857475e-5,-3.9572560430991624e-8,-0.002267998326091102,-4.275672312180571e-5,-3.986449700076138e-8,-0.0022674714734245843,-4.291695195769548e-5,-4.005713795935709e-8,-0.0022669291597497737,-4.296662160132691e-5,-4.012487438155247e-8,-0.0022664242564903914,-4.2915295188340505e-5,-4.007760659904807e-8,-0.0022659940652150863,-4.279611123618072e-5,-3.995206908990567e-8,-0.002265653503930502,-4.265191244855833e-5,-3.979631362883339e-8,-0.0022653969340296893,-4.252261313043785e-5,-3.965552378432056e-8,-0.0022652046236925952,-4.243769493960012e-5,-3.95634861733223e-8,-0.002265049794477369,-4.241380155046763e-5,-3.9539697044729416e-8,-0.0022649041082798216,-4.245547864330964e-5,-3.9589986428501323e-8,-0.00226474124918325,-4.255711975844435e-5,-3.970856627954339e-8,-0.0022645391613217362,-4.270500455743162e-5,-3.988028806109427e-8,-0.0022642816799547678,-4.287910780361013e-5,-4.008272167427198e-8,-0.002263960087918555,-4.3054900809357125e-5,-4.028824466566982e-8,-0.002263574719130994,-4.320567695985923e-5,-4.0466687322319195e-8,-0.0022631362204558894,-4.330590165289405e-5,-4.058908270551296e-8,-0.0022626656639188536,-4.3335670173572484e-5,-4.063264302083518e-8,-0.0022621925719040524,-4.328569846595285e-5,-4.0586363627982455e-8,-0.0022617502460647106,-4.316153538197371e-5,-4.045582192050501e-8,-0.0022613686905826485,-4.298517863381172e-5,-4.02651379123331e-8,-0.002261066659628733,-4.279254577136207e-5,-4.0054328367112326e-8,-0.002260845254738966,-4.2626492298289355e-5,-3.9871642378719045e-8,-0.002260685452234943,-4.252671070386968e-5,-3.976228848354713e-8,-0.0022605509404802003,-4.251909481418603e-5,-3.9756384567982686e-8,-0.002260396131472639,-4.260760900980759e-5,-3.985954021720435e-8,-0.002260177694963087,-4.277131989594658e-5,-4.004914789052283e-8,-0.002259866766101412,-4.2968166060102e-5,-4.027830918497738e-8,-0.002259458210637815,-4.3145372744970057e-5,-4.048742944540769e-8,-0.0022589733613924707,-4.3254145791464096e-5,-4.062085419440258e-8,-0.002258454294531585,-4.326392054614321e-5,-4.064315339359069e-8,-0.0022579511436190353,-4.3170655978861896e-5,-4.0548734377790825e-8,-0.0022575073922757242,-4.2995916330466316e-5,-4.036104128218041e-8,-0.0022571489718927946,-4.2777865460527206e-5,-4.012258232791228e-8,-0.0022568805697357453,-4.255884861731508e-5,-3.988102778980891e-8,-0.0022566887016491335,-4.2374725671374876e-5,-3.967716426716014e-8,-0.002256548444902981,-4.2248875604791526e-5,-3.953799287615894e-8,-0.002256430457477919,-4.2190877177150564e-5,-3.9475031093020603e-8,-0.0022563063262742698,-4.219814048656945e-5,-3.9485967035225393e-8,-0.0022561518892659908,-4.225864272457631e-5,-3.9557654446514965e-8,-0.0022559490620141626,-4.235363463796422e-5,-3.9669178707093105e-8,-0.0022556869196150115,-4.245992921932744e-5,-3.9794503964805914e-8,-0.002255362650026142,-4.2551960746738174e-5,-3.990484416493067e-8,-0.00225498259128279,-4.260418776905965e-5,-3.9971363026047316e-8,-0.0022545629951551973,-4.259443556510106e-5,-3.996888136177645e-8,-0.002254129647814144,-4.2508371758274345e-5,-3.988086135327218e-8,-0.0022537151993712646,-4.234455193159232e-5,-3.970509132900266e-8,-0.00225335330209883,-4.2118407480589275e-5,-3.9458268320626675e-8,-0.0022530698916637996,-4.186263655252896e-5,-3.917660732834667e-8,-0.0022528740190121094,-4.162180095563857e-5,-3.8909958155369906e-8,-0.002252752217450626,-4.1441201489894646e-5,-3.870944411348118e-8,-0.0022526698614514173,-4.1353325375690816e-5,-3.861225482382609e-8,-0.0022525801000990234,-4.136713774543938e-5,-3.862947201208333e-8,-0.0022524373733573866,-4.146464933767827e-5,-3.8741929345072135e-8,-0.002252210525373519,-4.1605994325611274e-5,-3.89055852814104e-8,-0.0022518911377591767,-4.1740803405337114e-5,-3.906405012373955e-8,-0.0022514949999607,-4.182182996698903e-5,-3.9163825942864726e-8,-0.0022510569958787445,-4.181681135790668e-5,-3.916776403591502e-8,-0.002250621342141275,-4.171557236139564e-5,-3.906331946104076e-8,-0.0022502301294550285,-4.15308425955026e-5,-3.886378396708598e-8,-0.002249913449319389,-4.129306958437996e-5,-3.860271679338941e-8,-0.002249683726453224,-4.104130530740587e-5,-3.832383998911728e-8,-0.002249535283975047,-4.0813295369522146e-5,-3.8069884935159855e-8,-0.0022494483048860476,-4.0637702512655366e-5,-3.787370255806774e-8,-0.002249395075586441,-4.053008747505458e-5,-3.775352485809548e-8,-0.002249346228387429,-4.049258564563083e-5,-3.771239510768213e-8,-0.0022492755010270257,-4.0516052192387256e-5,-3.774046242612261e-8,-0.0022491626277783426,-4.058321264511812e-5,-3.7818520580070174e-8,-0.0022489947436900195,-4.0671780343274614e-5,-3.7921589641568395e-8,-0.002248766957445944,-4.075711343877572e-5,-3.8021986797907276e-8,-0.0022484826632076446,-4.081452585563666e-5,-3.8091951714669235e-8,-0.002248153838048646,-4.0821728247974105e-5,-3.8106341905870566e-8,-0.002247801079960905,-4.076195151424849e-5,-3.804605949402225e-8,-0.002247452593148405,-4.0628012018448585e-5,-3.790257146744856e-8,-0.0022471409301629466,-4.042682459236734e-5,-3.768302732502345e-8,-0.00224689646765886,-4.018263561138499e-5,-3.7414039313886286e-8,-0.0022467379334867687,-3.993603737751534e-5,-3.71407722402369e-8,-0.0022466629330224067,-3.973603731085064e-5,-3.6918205817805125e-8,-0.0022466437937668942,-3.962548372148706e-5,-3.679484541297912e-8,-0.0022466332626418345,-3.962510713746668e-5,-3.679475135912498e-8,-0.0022465795112438054,-3.972433968955547e-5,-3.690704831574807e-8,-0.002246443844399572,-3.988431149987231e-5,-3.7089012125681974e-8,-0.0022462127331009103,-4.005144641550452e-5,-3.728104124941213e-8,-0.002245899726127667,-4.017461828870116e-5,-3.742571513024981e-8,-0.0022455385610210964,-4.021870065905526e-5,-3.7482979092119534e-8,-0.002245171991501091,-4.017101257208119e-5,-3.743755699529912e-8,-0.0022448406857828573,-4.0040872064166135e-5,-3.729877117661851e-8,-0.002244574842630709,-3.985434389103751e-5,-3.709499167218068e-8,-0.00224438953153147,-3.964658315948225e-5,-3.6865281132306804e-8,-0.002244283739282433,-3.9453769098646514e-5,-3.6650395806950313e-8,-0.0022442425786291715,-3.9306138580895836e-5,-3.648483998275852e-8,-0.0022442417262513318,-3.9223235736532204e-5,-3.639130046745756e-8,-0.002244252825270072,-3.921193238763609e-5,-3.637818766334322e-8,-0.002244248580715095,-3.926701981343953e-5,-3.6440147045714485e-8,-0.002244206665010873,-3.9373614587264704e-5,-3.656072898333406e-8,-0.0022441120851505714,-3.9510449394149734e-5,-3.671615220159067e-8,-0.002243958158082218,-3.9653224799783987e-5,-3.687916687487293e-8,-0.002243746569982561,-3.977754481038861e-5,-3.702240992509356e-8,-0.0022434870012997396,-3.986143852984975e-5,-3.7121211995940224e-8,-0.002243196539261886,-3.9887788360821346e-5,-3.715623183345602e-8,-0.002242898748955786,-3.984704324325663e-5,-3.711640914072695e-8,-0.0022426218280860106,-3.974042123909537e-5,-3.7002547544910815e-8,-0.0022423948446182447,-3.9583186860967147e-5,-3.683110598566761e-8,-0.002242241179018976,-3.940641160112801e-5,-3.663638469156625e-8,-0.00224216956598242,-3.925442123747653e-5,-3.646787712775838e-8,-0.002242165743912653,-3.917522022806908e-5,-3.63796461283401e-8,-0.0022421904430927637,-3.92042809462743e-5,-3.641210968875951e-8,-0.0022421888363345576,-3.934800163595166e-5,-3.657333079382851e-8,-0.0022421101287026773,-3.957707112540881e-5,-3.683135600408295e-8,-0.0022419276065207064,-3.983591431005777e-5,-3.712457446970693e-8,-0.0022416477393448642,-4.0063753426798325e-5,-3.73851192566621e-8,-0.0022413045475564155,-4.0215340963561835e-5,-3.7561970560884604e-8,-0.0022409449338205603,-4.0271819274777205e-5,-3.7633148529958066e-8,-0.0022406136872176463,-4.0240309319839884e-5,-3.7605480019251675e-8,-0.002240343470877864,-4.0146522531138636e-5,-3.750668536605433e-8,-0.002240150677565745,-4.002533269708593e-5,-3.7375157741474976e-8,-0.002240035711440105,-3.991240818250783e-5,-3.725076167766338e-8,-0.002239985804253139,-3.9838071993125945e-5,-3.7167903625866e-8,-0.0022399789880449567,-3.9823368021104823e-5,-3.715090319780558e-8,-0.0022399885175577506,-3.9878050065343086e-5,-3.721146830451135e-8,-0.002239987272940578,-4.000036042511323e-5,-3.734824122526935e-8,-0.0022399516443405575,-4.017838712946535e-5,-3.7548239619326853e-8,-0.002239864499431365,-4.0392596449678075e-5,-3.778973496167977e-8,-0.0022397169957782525,-4.061908331716644e-5,-3.804599535317224e-8,-0.002239509163109704,-4.083302738834809e-5,-3.828923970936112e-8,-0.00223924945058436,-4.101186342286681e-5,-3.8494196874711744e-8,-0.002238953599371396,-4.113797301515876e-5,-3.8641048926455915e-8,-0.0022386430618668383,-4.120100796303263e-5,-3.871793082545036e-8,-0.002238342944066297,-4.1200001151770064e-5,-3.872324181388282e-8,-0.0022380791839847307,-4.114530686782865e-5,-3.866788607866194e-8,-0.002237874380510262,-4.1060002066053976e-5,-3.857703907310176e-8,-0.00223774180926945,-4.097948394853225e-5,-3.848995354296783e-8,-0.00223767825635013,-4.094712480839855e-5,-3.845528558322179e-8,-0.002237658399419641,-4.1004061797862145e-5,-3.851967858482813e-8,-0.0022376356888406273,-4.11738325963669e-5,-3.8710382858211906e-8,-0.0022375542283195344,-4.144791944811161e-5,-3.9018797372337954e-8,-0.002237369976256706,-4.178239537910177e-5,-3.939648342269923e-8,-0.0022370705865857117,-4.211192540677199e-5,-3.97707040733493e-8,-0.002236681021205403,-4.237528136520402e-5,-4.0072894403993155e-8,-0.0022362515136581293,-4.2537390808246587e-5,-4.026326754963274e-8,-0.0022358368811051695,-4.2596592517748946e-5,-4.033897314519272e-8,-0.002235479455892738,-4.257760540665977e-5,-4.032647668471118e-8,-0.0022352014732815342,-4.251839568376904e-5,-4.026725325138652e-8,-0.0022350055128588357,-4.245824814262653e-5,-4.0204769494537755e-8,-0.002234879072292001,-4.2429981973685345e-5,-4.017588031994506e-8,-0.002234800143287794,-4.245617891594765e-5,-4.020647152992803e-8,-0.0022347421748675988,-4.254810062132713e-5,-4.030997076660549e-8,-0.002234678089860464,-4.2706022024608e-5,-4.04874490318804e-8,-0.002234583596800719,-4.292040013149177e-5,-4.072877100486095e-8,-0.0022344399196055193,-4.3173776366831664e-5,-4.101470592062815e-8,-0.002234235865992565,-4.344333894544913e-5,-4.13198704377615e-8,-0.002233969089473579,-4.370403283753067e-5,-4.1616299339581775e-8,-0.0022336463289874286,-4.393200590097062e-5,-4.1877337327494744e-8,-0.002233282501130823,-4.410796757286399e-5,-4.2081351239347404e-8,-0.0022328987863395795,-4.422003807868895e-5,-4.2214822045642e-8,-0.0022325199496675764,-4.426587777665794e-5,-4.227465236873269e-8,-0.0022321710530385326,-4.4253972215963034e-5,-4.226962591744968e-8,-0.0022318736432929433,-4.420392191805795e-5,-4.2220888713159193e-8,-0.0022316414113256896,-4.414545555348796e-5,-4.216110347774086e-8,-0.0022314754270215662,-4.4115440270257426e-5,-4.213136166132721e-8,-0.002231359823442391,-4.415175418461966e-5,-4.217445054382591e-8,-0.0022312601532689185,-4.4283382554984865e-5,-4.232367827957026e-8,-0.002231127767120565,-4.4518168017474204e-5,-4.258888372588604e-8,-0.0022309127621388284,-4.483326721123653e-5,-4.2945429863533486e-8,-0.0022305832777618443,-4.5176107345948044e-5,-4.33350641470657e-8,-0.0022301417812274774,-4.548042189951665e-5,-4.3683804639003184e-8,-0.00222962696006888,-4.5691654474732635e-5,-4.3930355472978606e-8,-0.0022290982784922498,-4.578732224176004e-5,-4.404886114752745e-8,-0.0022286126995498105,-4.578096414425489e-5,-4.405337631430236e-8,-0.002228207126679372,-4.571064953482692e-5,-4.39852734699268e-8,-0.002227893056699919,-4.562206961243283e-5,-4.38947320909112e-8,-0.002227660846567752,-4.555526540573994e-5,-4.382620421038141e-8,-0.002227487702103169,-4.55379758899719e-5,-4.381102028222137e-8,-0.0022273451775774154,-4.558426004228901e-5,-4.386564409422788e-8,-0.0022272045720067527,-4.569590592468164e-5,-4.39929402649985e-8,-0.002227040330898362,-4.586469098944103e-5,-4.418444952301841e-8,-0.0022268322499077128,-4.607464729273845e-5,-4.4422813065954085e-8,-0.0022265671012077232,-4.6304319138032545e-5,-4.46843227290974e-8,-0.002226239866699384,-4.65292374402582e-5,-4.4941773047288794e-8,-0.002225854484890745,-4.6724799757426735e-5,-4.51677431041688e-8,-0.0022254237956320375,-4.6869601410910074e-5,-4.5338309138385286e-8,-0.002224968272659459,-4.694890763075256e-5,-4.543684582222292e-8,-0.002224513374267207,-4.695764552052053e-5,-4.545727907051517e-8,-0.0022240857042466885,-4.690227807341315e-5,-4.5406156340506795e-8,-0.0022237084214524207,-4.680103654287797e-5,-4.530300679993751e-8,-0.002223396530534961,-4.668216756519775e-5,-4.517860947561035e-8,-0.002223152787249789,-4.658014304122351e-5,-4.507104168252101e-8,-0.002222964935742375,-4.652995213290346e-5,-4.501951893274435e-8,-0.002222805166025817,-4.655966574712351e-5,-4.505611999008108e-8,-0.0022226330833182246,-4.6682000764129616e-5,-4.519616588800026e-8,-0.002222403496610867,-4.6886909508180545e-5,-4.542958762812166e-8,-0.002222079087811143,-4.7138819175493126e-5,-4.571749442657403e-8,-0.0022216449448798823,-4.738267384694757e-5,-4.59987335824701e-8,-0.002221118171827722,-4.7560111136303446e-5,-4.620795613858712e-8,-0.002220545312392466,-4.763048075773373e-5,-4.629917145710085e-8,-0.002219986393474025,-4.758588464850228e-5,-4.626262271116031e-8,-0.002219493466999461,-4.745169161788492e-5,-4.612549476134362e-8,-0.0022190950899372997,-4.727349057060608e-5,-4.5937616176018814e-8,-0.0022187928437108866,-4.709946526084481e-5,-4.575211981967887e-8,-0.0022185676608473866,-4.6967148258508964e-5,-4.561086581454774e-8,-0.0022183897340214403,-4.6897877865561347e-5,-4.5538205382200175e-8,-0.002218227112864587,-4.689730372738356e-5,-4.55412865670691e-8,-0.0022180511931498754,-4.6958726789225835e-5,-4.5613476972552826e-8,-0.002217839478448058,-4.706684563405332e-5,-4.573834204511953e-8,-0.002217576767892167,-4.720088385532349e-5,-4.5893088802846886e-8,-0.0022172557391592737,-4.7337099909682e-5,-4.605143273264397e-8,-0.0022168773700565656,-4.74510906017821e-5,-4.6186255635813826e-8,-0.0022164511799183666,-4.752034046529439e-5,-4.627248139736567e-8,-0.002215994899699834,-4.7527295848164124e-5,-4.629045712510837e-8,-0.002215532947978386,-4.746279506796771e-5,-4.622968509992351e-8,-0.0022150932151455763,-4.732912349998839e-5,-4.60921625117704e-8,-0.0022147021652644183,-4.714160221841957e-5,-4.589418230010463e-8,-0.002214378969883185,-4.692762570971198e-5,-4.566542228593394e-8,-0.0022141300645164186,-4.672255695780222e-5,-4.544463178449744e-8,-0.0022139458137362612,-4.6562850713633075e-5,-4.52722393117001e-8,-0.00221380060967952,-4.64777591528412e-5,-4.518126383051442e-8,-0.0022136569173281237,-4.648149783906708e-5,-4.518852648490155e-8,-0.0022134729343128413,-4.65678409922886e-5,-4.5288350736913463e-8,-0.002213212730213477,-4.670898079689068e-5,-4.545089717714251e-8,-0.002212856797894262,-4.686004182357243e-5,-4.562684735817594e-8,-0.0022124099074522273,-4.6969555866714336e-5,-4.575890861717408e-8,-0.0022119026018825377,-4.699407898397332e-5,-4.579813949784263e-8,-0.0022113839010346006,-4.691226389953383e-5,-4.5719800103478644e-8,-0.0022109065487812933,-4.673212611187127e-5,-4.553166994833471e-8,-0.0022105106421530336,-4.6487513953655795e-5,-4.52703652159344e-8,-0.002210212924897253,-4.622545023671105e-5,-4.498750033432147e-8,-0.0022100056515220326,-4.599082657138239e-5,-4.4732842639896e-8,-0.0022098634270506174,-4.58151562763414e-5,-4.454182124988341e-8,-0.002209753114187779,-4.5712337116466916e-5,-4.4430643000829475e-8,-0.0022096423610802776,-4.568024895658921e-5,-4.439779129857697e-8,-0.0022095048224221024,-4.570516696428774e-5,-4.4428692789315846e-8,-0.0022093223580628898,-4.576643434562114e-5,-4.45008081941231e-8,-0.0022090854104389146,-4.5840198863217866e-5,-4.458782308690369e-8,-0.002208792684048753,-4.590211841998753e-5,-4.4662757683266604e-8,-0.002208450773065764,-4.592949249699432e-5,-4.470041059236587e-8,-0.0022080738356743857,-4.590342965342051e-5,-4.467976024450722e-8,-0.0022076829208446235,-4.581149511652582e-5,-4.45868263584567e-8,-0.0022073042325302127,-4.565081152181556e-5,-4.441802397944935e-8,-0.002206965605216999,-4.5430915166275075e-5,-4.418331181075295e-8,-0.0022066909305378285,-4.51749843519472e-5,-4.390764665471133e-8,-0.0022064933389565914,-4.49177448738443e-5,-4.3628860219709356e-8,-0.0022063692939843756,-4.469903269899099e-5,-4.339076928750656e-8,-0.002206296459441618,-4.455384182826084e-5,-4.323234070924075e-8,-0.002206237344690818,-4.450182876565845e-5,-4.317610450389361e-8,-0.002206148437110928,-4.454022855258338e-5,-4.322014158498983e-8,-0.0022059920678573607,-4.464314996140854e-5,-4.333696738013364e-8,-0.002205747078655037,-4.47677698551155e-5,-4.3480006469238615e-8,-0.0022054149560458707,-4.4865453971987394e-5,-4.359562672668298e-8,-0.0022050197778874484,-4.4894469310904836e-5,-4.363714563703815e-8,-0.002204602080350687,-4.483081733338681e-5,-4.357698088947024e-8,-0.0022042082496701748,-4.4674256976108435e-5,-4.34136267011671e-8,-0.002203878355963061,-4.444767502332483e-5,-4.317130450908105e-8,-0.002203636131830214,-4.418988337579432e-5,-4.289227455216706e-8,-0.0022034842767954172,-4.3944313012475434e-5,-4.2624468807672645e-8,-0.0022034062225738905,-4.374765150444576e-5,-4.240888990786396e-8,-0.0022033728732570334,-4.362214656382595e-5,-4.22709113039624e-8,-0.0022033511472193176,-4.357325021474196e-5,-4.2217405326860426e-8,-0.002203311259278957,-4.359184072021775e-5,-4.2238963148967383e-8,-0.002203231161403219,-4.365884984553331e-5,-4.2314893940482235e-8,-0.0022030981896355236,-4.37501815219e-5,-4.241868804084055e-8,-0.0022029088590102435,-4.3840715442687394e-5,-4.252255845087228e-8,-0.002202667855443351,-4.390713159132299e-5,-4.2600676139939876e-8,-0.0022023869397814195,-4.392991328620103e-5,-4.263141972686281e-8,-0.002202083971331653,-4.389514078579005e-5,-4.259929970541784e-8,-0.0022017817509400405,-4.3796571313615305e-5,-4.2497155377534966e-8,-0.002201506019114991,-4.363807773550661e-5,-4.232878802184368e-8,-0.002201281829056389,-4.3435865519477696e-5,-4.211145676298463e-8,-0.0022011278651603286,-4.321905966755535e-5,-4.187668985882363e-8,-0.002201049428771376,-4.3026635343832115e-5,-4.166711799444936e-8,-0.0022010326564595945,-4.2899212226683795e-5,-4.1527605488542144e-8,-0.0022010438605880736,-4.2866701401245325e-5,-4.149168981230639e-8,-0.002201036815050561,-4.2936311524374124e-5,-4.156826007306663e-8,-0.0022009668005209242,-4.3087189621691026e-5,-4.1735408849570453e-8,-0.002200805687849186,-4.3275540935940235e-5,-4.194576010041846e-8,-0.0022005511147673534,-4.344845205145683e-5,-4.214141087930924e-8,-0.0022002261579351164,-4.356010243054483e-5,-4.2271627325288035e-8,-0.0021998709471877614,-4.3583870411128616e-5,-4.230621553318354e-8,-0.0021995306329296136,-4.351713167905666e-5,-4.2241049980976345e-8,-0.002199244012936336,-4.337907539302264e-5,-4.209604395428574e-8,-0.0021990354974688524,-4.3203716761038325e-5,-4.190782352683438e-8,-0.0021989114882803953,-4.303068697336216e-5,-4.1719808660383815e-8,-0.0021988611198272934,-4.2896143039547516e-5,-4.157220587465444e-8,-0.002198860529686386,-4.28256834219112e-5,-4.149400848221767e-8,-0.0021988792290551736,-4.283052362484336e-5,-4.149848437908441e-8,-0.0021988868020958604,-4.290728558961128e-5,-4.158266825085552e-8,-0.002198858332636107,-4.30407374421635e-5,-4.1730227888167276e-8,-0.0021987776559889718,-4.320815607531913e-5,-4.191627227789234e-8,-0.0021986383828306827,-4.338394252488224e-5,-4.211255171468341e-8,-0.0021984432617016725,-4.354352417484422e-5,-4.229189520363366e-8,-0.0021982026851288055,-4.366616419637895e-5,-4.243138177200893e-8,-0.002197932987833362,-4.373685585806035e-5,-4.2514400830429825e-8,-0.0021976547873646343,-4.374776948947891e-5,-4.2532145447490745e-8,-0.0021973912163822202,-4.3699666494011446e-5,-4.248507449934088e-8,-0.002197165565964018,-4.360339553726757e-5,-4.238455982416569e-8,-0.0021969976661542537,-4.348102472191013e-5,-4.2254266098886135e-8,-0.0021968986060033643,-4.3365344851824027e-5,-4.212983081364773e-8,-0.002196864488916266,-4.329582521635688e-5,-4.205462845468875e-8,-0.00219687177106506,-4.330950164594914e-5,-4.206983298743024e-8,-0.0021968783763478264,-4.342774012978813e-5,-4.219976819299261e-8,-0.002196833942465688,-4.364410781791684e-5,-4.2438344229764724e-8,-0.0021966974953614438,-4.392134829558463e-5,-4.274547229078794e-8,-0.0021964542822063117,-4.420215324008212e-5,-4.305868573313644e-8,-0.002196122004749595,-4.4429633911088055e-5,-4.3315482134634745e-8,-0.002195743141195934,-4.456667055575025e-5,-4.3474511881865136e-8,-0.0021953688213683063,-4.460502832877005e-5,-4.352567029416044e-8,-0.0021950430896256865,-4.456276883725236e-5,-4.34875261233581e-8,-0.00219479325103675,-4.447456387533459e-5,-4.339707996174946e-8,-0.0021946271302473947,-4.4380500039176534e-5,-4.329781770575668e-8,-0.0021945353071144784,-4.43168589575551e-5,-4.322972528487527e-8,-0.0021944959560133495,-4.4310062852754164e-5,-4.322252177775724e-8,-0.002194480563537203,-4.4373660852183527e-5,-4.32920524953864e-8,-0.0021944595227321863,-4.450786864707432e-5,-4.343945466521452e-8,-0.0021944069506842096,-4.4701191951449525e-5,-4.36527150890374e-8,-0.0021943042180325003,-4.49335617950116e-5,-4.391005375463803e-8,-0.002194141906377647,-4.518027077748843e-5,-4.4184332052663467e-8,-0.0021939201779301136,-4.5416019876788224e-5,-4.444764386522221e-8,-0.002193647790767406,-4.561847347713716e-5,-4.4675332295713537e-8,-0.0021933402416158846,-4.5770915859345256e-5,-4.484892453692752e-8,-0.00219301755709073,-4.586399243241319e-5,-4.495797173896476e-8,-0.0021927019881854267,-4.589680376520009e-5,-4.50011490514789e-8,-0.002192415581968075,-4.587758677189852e-5,-4.498696354861374e-8,-0.002192177416627541,-4.582404354917942e-5,-4.493420418458068e-8,-0.0021920001056428633,-4.576302032079154e-5,-4.487180284605771e-8,-0.0021918853630141493,-4.5728554041258204e-5,-4.483694086387648e-8,-0.0021918193971149852,-4.575678790110061e-5,-4.486962210563871e-8,-0.0021917704552939657,-4.5876737000029106e-5,-4.500249145208053e-8,-0.0021916921793231213,-4.609805171784536e-5,-4.524715951212536e-8,-0.002191535722030832,-4.640085504307758e-5,-4.558273256144663e-8,-0.002191268622527711,-4.673572239421093e-5,-4.5955562378608346e-8,-0.0021908911531643392,-4.703860588774864e-5,-4.6295536372601254e-8,-0.0021904389342049485,-4.725525462149562e-5,-4.654284579454351e-8,-0.0021899688757674282,-4.7361335435271427e-5,-4.667003748796585e-8,-0.002189537217572945,-4.736738240175443e-5,-4.66875152635767e-8,-0.002189182178099598,-4.730905371796731e-5,-4.6633131046491385e-8,-0.0021889175315774733,-4.723144495265606e-5,-4.655539679656418e-8,-0.0021887354256682617,-4.717574835041439e-5,-4.6499184056199204e-8,-0.0021886135162408732,-4.717157179860376e-5,-4.649736314449432e-8,-0.0021885224957076004,-4.723435333698451e-5,-4.656775348526145e-8,-0.002188432196672109,-4.736596568910569e-5,-4.671343301511786e-8,-0.0021883159915355365,-4.755688007918747e-5,-4.69247944722332e-8,-0.002188153797184117,-4.7789060056815985e-5,-4.7182558125506696e-8,-0.0021879339216937933,-4.8039252490120275e-5,-4.7461392605544466e-8,-0.0021876538472704776,-4.828243590852618e-5,-4.773381750934838e-8,-0.002187319992989988,-4.849521912185547e-5,-4.7974061450627616e-8,-0.0021869464613131022,-4.865894024085986e-5,-4.816152081756237e-8,-0.0021865528992877276,-4.87620998684626e-5,-4.828339410490294e-8,-0.0021861618199906937,-4.8801891534619e-5,-4.833627312095251e-8,-0.0021857956854069802,-4.878486309271509e-5,-4.832680892763946e-8,-0.0021854738600616984,-4.8726762987137e-5,-4.8271587194920043e-8,-0.0021852094900030724,-4.86515128943926e-5,-4.8196176656966384e-8,-0.002185006334014698,-4.858914285791343e-5,-4.8133122371377696e-8,-0.0021848556724831675,-4.8572182159752406e-5,-4.8118210423692764e-8,-0.0021847340908449993,-4.862969584851901e-5,-4.818398533821574e-8,-0.0021846040333787834,-4.8778729210677626e-5,-4.835019658202303e-8,-0.0021844197065521583,-4.901477659668526e-5,-4.861300583671992e-8,-0.002184139908137586,-4.9305740268685153e-5,-4.89380239589084e-8,-0.002183745208710712,-4.959578164277363e-5,-4.926436436193073e-8,-0.0021832508778272947,-4.9822400093252296e-5,-4.9523381452495355e-8,-0.0021827054179990426,-4.9940812964766306e-5,-4.9665452368679164e-8,-0.002182172657790118,-4.9941786271621964e-5,-4.967953305482646e-8,-0.0021817074157041024,-4.985220421423567e-5,-4.959386599256073e-8,-0.002181338673865619,-4.9720142395811015e-5,-4.945991919619401e-8,-0.0021810666706533364,-4.9595568980319e-5,-4.933166537295909e-8,-0.0021808703783844,-4.951657478515571e-5,-4.92507832762818e-8,-0.0021807181941960203,-4.950399504420421e-5,-4.924073730655143e-8,-0.0021805769182982548,-4.956218364039945e-5,-4.9307324380953e-8,-0.0021804174795038798,-4.968259370492711e-5,-4.9442212976376634e-8,-0.0021802179110294567,-4.9847836933814006e-5,-4.9627109424267564e-8,-0.002179964670767143,-5.003531159657192e-5,-4.983764252872737e-8,-0.0021796530724134083,-5.0220385609024966e-5,-5.004692161411961e-8,-0.002179287108625143,-5.0379309817940806e-5,-5.0228863268068284e-8,-0.0021788786984716967,-5.049197671212808e-5,-5.0361312329529946e-8,-0.0021784462256297563,-5.054452595703909e-5,-5.04289060225776e-8,-0.0021780122025803136,-5.053151803276535e-5,-5.042538797210063e-8,-0.002177600157916581,-5.045722929573454e-5,-5.035495070136917e-8,-0.0021772310966522526,-5.0335776567875636e-5,-5.023237210708531e-8,-0.002176919902460922,-5.0189932859938544e-5,-5.0081843179902245e-8,-0.00217667207082299,-5.004853269807545e-5,-4.993436120974221e-8,-0.0021764812441906808,-4.994249777622941e-5,-4.982363597059191e-8,-0.0021763280507105863,-4.98996114264398e-5,-4.978052270196503e-8,-0.0021761809437515654,-4.9938185981473035e-5,-4.982603516805561e-8,-0.002176000149806595,-5.006025793450334e-5,-4.9963621703133264e-8,-0.002175745817326205,-5.024622884164902e-5,-5.0172910484799115e-8,-0.002175390157594791,-5.0454365055776456e-5,-5.0408841281164365e-8,-0.002174930337153652,-5.06288459355e-5,-5.061036106903455e-8,-0.002174395353711165,-5.071699644838109e-5,-5.0719362989473973e-8,-0.0021738401034926535,-5.0689679713245726e-5,-5.0703131233504954e-8,-0.0021733265233010663,-5.055363671187018e-5,-5.056794205359903e-8,-0.0021729011128648096,-5.034775070284775e-5,-5.035513085813307e-8,-0.0021725811078602674,-5.012585939427826e-5,-5.012259516349527e-8,-0.0021723547388293137,-4.993700515060601e-5,-4.992354472562844e-8,-0.0021721915116131806,-4.9812811310871116e-5,-4.979285902848771e-8,-0.0021720546749986677,-4.976445626435847e-5,-4.9743630077680485e-8,-0.002171910550591354,-4.978612573658363e-5,-4.977057674929707e-8,-0.0021717334408312126,-4.986073223887547e-5,-4.985593590639394e-8,-0.0021715072056702122,-4.9965197761627746e-5,-4.997503848354697e-8,-0.002171225123681876,-5.007442062639999e-5,-5.010064735726323e-8,-0.0021708891541935235,-5.0164162613396194e-5,-5.020624123144993e-8,-0.002170509011565236,-5.021337352113505e-5,-5.026869269970753e-8,-0.0021701010201165194,-5.020633834079381e-5,-5.027067408474085e-8,-0.002169686481978018,-5.013479660142251e-5,-5.02029350445516e-8,-0.0021692892001323122,-4.999980622314807e-5,-5.006625128102955e-8,-0.002168932022375522,-4.9812758371010945e-5,-4.9872480658075486e-8,-0.002168632724515974,-4.95948957641629e-5,-4.96440934171442e-8,-0.0021683999304833723,-4.9374905475583854e-5,-4.94117279890712e-8,-0.0021682299884622017,-4.9184517024424835e-5,-4.9209644023520306e-8,-0.0021681057683319905,-4.905256550499114e-5,-4.906946354132325e-8,-0.0021679981084059274,-4.899850303697785e-5,-4.901315398366616e-8,-0.0021678702118165865,-4.902660625417457e-5,-4.904654790153962e-8,-0.002167684855459021,-4.912228342329066e-5,-4.915496722137846e-8,-0.002167413675346147,-4.9252117611135175e-5,-4.930287422769272e-8,-0.0021670467328493287,-4.9369236645834006e-5,-4.9439453319941026e-8,-0.0021665991445428225,-4.942457392269512e-5,-4.951084310411176e-8,-0.0021661107109958544,-4.9382031214902844e-5,-4.9476821013151695e-8,-0.0021656359860024264,-4.923205966050717e-5,-4.932584479686643e-8,-0.0021652269664645565,-4.8996524294130615e-5,-4.908058662160895e-8,-0.0021649159058167063,-4.872105249104496e-5,-4.878982557957179e-8,-0.002164706655984438,-4.8458301673946887e-5,-4.8510450968611894e-8,-0.0021645777385677746,-4.825084661063017e-5,-4.8288973195301046e-8,-0.0021644934054848965,-4.812122783466715e-5,-4.81506379139743e-8,-0.0021644159176900527,-4.8071024900689184e-5,-4.809815557247862e-8,-0.0021643141929952214,-4.808594061576428e-5,-4.81168922637752e-8,-0.002164167674411756,-4.814266053659258e-5,-4.818208341414474e-8,-0.0021639667146355628,-4.8214709519840826e-5,-4.8265144796799985e-8,-0.0021637113015193915,-4.8276471408607926e-5,-4.833815104674628e-8,-0.0021634093935051597,-4.8305717497990586e-5,-4.8376751136334334e-8,-0.0021630753860666465,-4.8285336142651836e-5,-4.836216222000512e-8,-0.0021627286667312874,-4.8204863846761885e-5,-4.828283802361071e-8,-0.002162391861482956,-4.8062097732630306e-5,-4.813613888210156e-8,-0.0021620882679398825,-4.786457221389886e-5,-4.792984469758117e-8,-0.0021618381966684985,-4.763020148052184e-5,-4.768283959318655e-8,-0.0021616544721947527,-4.738615688544101e-5,-4.74240049864915e-8,-0.0021615380479013072,-4.716519867376527e-5,-4.718845234479752e-8,-0.002161475302072799,-4.699937039553237e-5,-4.701091284755469e-8,-0.0021614386393250546,-4.6912154688658707e-5,-4.691736184216948e-8,-0.002161391201800069,-4.6911292679655636e-5,-4.691717630397373e-8,-0.002161295075484384,-4.698475296081406e-5,-4.6998506562417824e-8,-0.002161121034202,-4.710162372082691e-5,-4.712886694957854e-8,-0.002160857131367918,-4.7218339997966116e-5,-4.726153824963162e-8,-0.0021605135166616594,-4.728911357216719e-5,-4.734669635449493e-8,-0.002160121614640899,-4.727811102218645e-5,-4.7344670899897986e-8,-0.002159727070259186,-4.71700332472349e-5,-4.72376676723403e-8,-0.002159377681774251,-4.697546153405605e-5,-4.703590761080976e-8,-0.0021591097858532486,-4.672829423936533e-5,-4.677517141941328e-8,-0.002158938074167603,-4.6475408602648845e-5,-4.650582202815821e-8,-0.002158852916009944,-4.626235480050213e-5,-4.627738514230599e-8,-0.002158825801635166,-4.612087538018337e-5,-4.612493766194266e-8,-0.002158819709787541,-4.606270599802699e-5,-4.606214934513943e-8,-0.002158799607308813,-4.608051665422589e-5,-4.6081993496327766e-8,-0.0021587395273344563,-4.615361327504223e-5,-4.616267371658823e-8,-0.002158625286072611,-4.625494118904886e-5,-4.627511694149892e-8,-0.002158453953359905,-4.635691120285143e-5,-4.638936013416345e-8,-0.002158231790057722,-4.643523375110354e-5,-4.647887273854775e-8,-0.002157971911670394,-4.647108233605865e-5,-4.652305041561149e-8,-0.0021576922476335206,-4.6452294121769896e-5,-4.650856384345036e-8,-0.0021574138014324212,-4.637428430326153e-5,-4.6430286990051256e-8,-0.0021571587957101316,-4.624105015071745e-5,-4.629227406134107e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json deleted file mode 100644 index b4be241..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_1.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":1000,"numberOfSamples":1000,"samples":[-0.002156948117797158,-4.6066106188504274e-5,-4.610870837852341e-8,-0.0021567976844821175,-4.587262928957953e-5,-4.590411215695837e-8,-0.002156713908245568,-4.569170874283684e-5,-4.5711626484184725e-8,-0.0021566893595621928,-4.555761003533914e-5,-4.5568113732113295e-8,-0.002156700743371349,-4.549983445555494e-5,-4.5505741530892555e-8,-0.0021567115663395065,-4.5533671389188886e-5,-4.5541790676334716e-8,-0.0021566804178876843,-4.5652915406612466e-5,-4.5670622833809834e-8,-0.002156572912636481,-4.582870678241587e-5,-4.58621255953264e-8,-0.0021563728566239655,-4.601620142754535e-5,-4.6068577295811786e-8,-0.0021560880133587525,-4.616711622705171e-5,-4.623794070121091e-8,-0.002155748222189647,-4.62434863816923e-5,-4.6328641438483505e-8,-0.002155396920669294,-4.622782396424562e-5,-4.632067580425877e-8,-0.00215507933393081,-4.612686483113469e-5,-4.621997607570151e-8,-0.0021548310204559523,-4.596856314722607e-5,-4.605556460572259e-8,-0.0021546697448800787,-4.579380803487395e-5,-4.5870948767990285e-8,-0.0021545925009090403,-4.564545026639773e-5,-4.571243253541094e-8,-0.00215457808447119,-4.555777214888923e-5,-4.561767662258407e-8,-0.002154594019620961,-4.554927142265337e-5,-4.560764640929833e-8,-0.002154605368940617,-4.562040509803385e-5,-4.568383677005805e-8,-0.002154582628502511,-4.575613804937631e-5,-4.583074108471704e-8,-0.0021545067042819666,-4.593156748733217e-5,-4.602179515117175e-8,-0.0021543704349080905,-4.6118291920214145e-5,-4.6226298143065905e-8,-0.002154177429419203,-4.628970757896518e-5,-4.64152905393417e-8,-0.0021539395320203554,-4.642448039496704e-5,-4.656547403677698e-8,-0.0021536740325304696,-4.6508347419083976e-5,-4.6661248300741016e-8,-0.002153401212638439,-4.6534852085000904e-5,-4.669548060691322e-8,-0.0021531422886805827,-4.650565883599465e-5,-4.666974436961425e-8,-0.0021529174221249937,-4.6430830311047396e-5,-4.6594529114611347e-8,-0.002152743281384537,-4.632899782380846e-5,-4.648943285318694e-8,-0.0021526297364554913,-4.622682327908873e-5,-4.6382720029024235e-8,-0.0021525757781952213,-4.615665217809799e-5,-4.6309007987320986e-8,-0.0021525657635618595,-4.615111791560906e-5,-4.630363581540198e-8,-0.0021525683606683156,-4.623433111379003e-5,-4.639321479077921e-8,-0.0021525411131787307,-4.641162808298889e-5,-4.658444896551646e-8,-0.00215244181360915,-4.6662730585749126e-5,-4.685650807739798e-8,-0.002152243559761613,-4.69438336830974e-5,-4.716299443903288e-8,-0.0021519463173773905,-4.720028130623982e-5,-4.744536946490242e-8,-0.0021515783140552483,-4.738487646555355e-5,-4.7652539659263205e-8,-0.0021511863195340735,-4.7473012892754915e-5,-4.775714558013054e-8,-0.002150820158632104,-4.74681988823182e-5,-4.7761682951372046e-8,-0.0021505186509381763,-4.739759003524929e-5,-4.769404722497823e-8,-0.002150301454146949,-4.7301602034095665e-5,-4.75967746928141e-8,-0.002150167504080223,-4.722237577724007e-5,-4.751493736774092e-8,-0.0021500984653760494,-4.7194327180898005e-5,-4.7486029043007825e-8,-0.002150065007643072,-4.7238211715320985e-5,-4.753336591146179e-8,-0.002150034011848315,-4.735890504159874e-5,-4.7663329284699034e-8,-0.0021499752813515308,-4.754650144645341e-5,-4.7866189097583804e-8,-0.0021498666614940885,-4.777999559892799e-5,-4.811985529955003e-8,-0.002149696844734374,-4.8032435641353954e-5,-4.8395408706038154e-8,-0.0021494657462589853,-4.8276239272205825e-5,-4.866295866283441e-8,-0.0021491829316347584,-4.848761715432387e-5,-4.8896590036391526e-8,-0.002148864888882999,-4.864954755615883e-5,-4.9077698538029214e-8,-0.002148531969661492,-4.875324012053347e-5,-4.9196590948451486e-8,-0.00214820559302335,-4.879845385417849e-5,-4.925275811633043e-8,-0.0021479058723801398,-4.8793211725869386e-5,-4.9254476683867235e-8,-0.0021476494691693242,-4.875326148772683e-5,-4.921820529983365e-8,-0.0021474473356039884,-4.8701280224926454e-5,-4.916782927985692e-8,-0.002147302025734625,-4.8665427348109735e-5,-4.913330991550414e-8,-0.0021472046146883317,-4.867636961659977e-5,-4.914769826441347e-8,-0.0021471322071707254,-4.8761685544412094e-5,-4.924121019381598e-8,-0.0021470482597085038,-4.893732048233069e-5,-4.943192954490526e-8,-0.002146908584499707,-4.91979967179343e-5,-4.97152190263401E-08,-0.002146674363316176,-4.9511646656850674e-5,-5.0057427768996096e-8,-0.002146328667920062,-4.982422622000098e-5,-5.0400872447169334e-8,-0.0021458875359486144,-5.007688042712524e-5,-5.0682229364308553e-8,-0.002145397011314185,-5.0228379818507437e-5,-5.0856638807463407e-8,-0.0021449161791735768,-5.0270217445764416e-5,-5.091394422090286e-8,-0.002144495917953705,-5.0226434247242504e-5,-5.087865414824122e-8,-0.002144164522903363,-5.01408709895491e-5,-5.079660476566392e-8,-0.002143924532470479,-5.0060878640441164e-5,-5.0717902245852795e-8,-0.002143757959315198,-5.002483607513269e-5,-5.068379162791456e-8,-0.002143634896737234,-5.005585115815337e-5,-5.071984838493151e-8,-0.002143521842854634,-5.0160650756850324e-5,-5.083446444779818e-8,-0.002143388120717485,-5.0331651201626866e-5,-5.102064773664288e-8,-0.002143210184954386,-5.055054311417113e-5,-5.125954074459971e-8,-0.002142974117514982,-5.079251129394976e-5,-5.152482507010141e-8,-0.0021426765074378826,-5.103064468172294e-5,-5.178753018681961e-8,-0.0021423238391256607,-5.124006797853224e-5,-5.202065134245872e-8,-0.002141930651324379,-5.140134181465216e-5,-5.220297342970296e-8,-0.0021415168281439588,-5.150282446702924e-5,-5.2321688446799315e-8,-0.0021411044645297406,-5.154180999406271e-5,-5.237359158139016e-8,-0.0021407148054202576,-5.152449499997826e-5,-5.236496558245039e-8,-0.0021403655678020684,-5.146510002939213e-5,-5.231059043138093e-8,-0.002140068652238457,-5.138444270295482e-5,-5.2232268635753575e-8,-0.002139828133292629,-5.1308028225241545e-5,-5.2156950212399334e-8,-0.002139638422673149,-5.126350568803761e-5,-5.2114230564000163e-8,-0.00213948268691379,-5.1277018333799685e-5,-5.213259191254482e-8,-0.002139332290822501,-5.1367795817320406e-5,-5.223357239670482e-8,-0.0021391489883805194,-5.154098912009453e-5,-5.242383088390882e-8,-0.002138891970010422,-5.1780522562900146e-5,-5.268710604455327e-8,-0.0021385305995390066,-5.20462253084977e-5,-5.2980835455315765e-8,-0.002138059594008942,-5.2280784568316565e-5,-5.324353111816718e-8,-0.002137508049281609,-5.242840674319948e-5,-5.341489927661907e-8,-0.0021369333564798328,-5.245794992558174e-5,-5.3460757754233854e-8,-0.0021364000567887635,-5.237659280739311e-5,-5.338772944526506e-8,-0.0021359554177806913,-5.222499524366457e-5,-5.323816602452792e-8,-0.0021356157132549174,-5.205829004263862e-5,-5.307010206523827e-8,-0.002135367798385966,-5.1925718630202697e-5,-5.293584770307225e-8,-0.0021351802309842655,-5.185853393324863e-5,-5.2869237987871783e-8,-0.002135015709675917,-5.186747116928778e-5,-5.288277568269625e-8,-0.0021348401734937695,-5.194616985504687e-5,-5.2970891829753475e-8,-0.002134627758060293,-5.2076667370690687e-5,-5.311539888620349e-8,-0.002134362664862016,-5.22346501846903e-5,-5.329085053332862e-8,-0.0021340393185033547,-5.2393733389077045e-5,-5.3469096840437146e-8,-0.002133661644592146,-5.252894430972528e-5,-5.362316413179043e-8,-0.0021332416919183183,-5.2619642849676823e-5,-5.373058405670703e-8,-0.002132797639105352,-5.265187989316952e-5,-5.377605953151373e-8,-0.00213235123299873,-5.262008658853691e-5,-5.3753301407695094e-8,-0.0021319247547086106,-5.252787431710746e-5,-5.366582385721862e-8,-0.002131537812166341,-5.2387711692295135e-5,-5.3526527141880856e-8,-0.002131204386649835,-5.221948578729788e-5,-5.335616249926751e-8,-0.002130930436840616,-5.204813499564776e-5,-5.3180922715721016e-8,-0.0021307122475242276,-5.190051666082856e-5,-5.3029303636494595e-8,-0.002130535691096194,-5.1801663288743484e-5,-5.2928303953712826e-8,-0.002130376577415983,-5.1770519389418736e-5,-5.289893815879023e-8,-0.0021302025383327134,-5.1815158911048855e-5,-5.2950976313991277e-8,-0.002129977378036466,-5.192792796725971e-5,-5.3077407334747964E-08,-0.0021296688087945386,-5.208214555192072e-5,-5.325050928388623e-8,-0.0021292592998348823,-5.2233329336141494e-5,-5.342289782969275e-8,-0.002128757014872047,-5.2328224363975537e-5,-5.353718707965699e-8,-0.0021282003685288873,-5.232211388239153e-5,-5.354471701182651e-8,-0.0021276495587692528,-5.219820202071707e-5,-5.342650421322242e-8,-0.002127165444777017,-5.1977374748586926e-5,-5.32037987462269e-8,-0.002126786408919701,-5.1710339300552144e-5,-5.292980367635397e-8,-0.0021265166937946525,-5.145633618560855e-5,-5.2667177244896215e-8,-0.00212633105580082,-5.126167160748416e-5,-5.246538067689548e-8,-0.002126189328271234,-5.114869660600918e-5,-5.234897812409529e-8,-0.0021260510373621883,-5.111638783278097e-5,-5.231801132895357e-8,-0.002125884513579751,-5.114733030685652e-5,-5.235503053809026e-8,-0.0021256702248682435,-5.121572331910457e-5,-5.243327665430199e-8,-0.002125400455812279,-5.1293642979333694e-5,-5.252321996716058e-8,-0.0021250775059338096,-5.1355096043385815e-5,-5.259696904862907e-8,-0.0021247116610059085,-5.1378537621995244e-5,-5.2631164024147827e-8,-0.0021243192352671083,-5.134861185069034e-5,-5.2609026267915535e-8,-0.002123920533294502,-5.125749504161394e-5,-5.252187717870801e-8,-0.002123537513917045,-5.1105899487825944e-5,-5.237017732952232e-8,-0.0021231909824004935,-5.0903510148269925e-5,-5.21639052525058e-8,-0.002122897386272381,-5.066840160744641e-5,-5.192188374186477e-8,-0.0021226656718111524,-5.042508933637542e-5,-5.166975788992617e-8,-0.002122494839571998,-5.0201204525872756e-5,-5.143662126873064e-8,-0.0021223728064571974,-5.002307532138799e-5,-5.125052539179263e-8,-0.002122277063662247,-4.9910792187481684e-5,-5.1133373559448276e-8,-0.002122177350465051,-4.9873571668336e-5,-5.1095958839310544e-8,-0.002122040271899325,-4.990621895883855e-5,-5.113395766297128e-8,-0.002121835670220407,-4.998749569171908e-5,-5.122580454826739e-8,-0.002121544289358671,-5.008151805352115e-5,-5.133380683137773e-8,-0.0021211653940700756,-5.0143498952941705e-5,-5.141007127166793e-8,-0.0021207216447338448,-5.0130441492102875e-5,-5.1407976149345016e-8,-0.002120257496141451,-5.001520456175847e-5,-5.1297441102601807e-8,-0.002119828397979043,-4.9798850489622e-5,-5.107840402680578e-8,-0.0021194826754195456,-4.9513892869127156e-5,-5.078451782729881e-8,-0.002119244086201465,-4.921409445932999e-5,-5.0472444375840066e-8,-0.0021191046402436534,-4.8954748273117716e-5,-5.0200988226733736e-8,-0.002119031138708923,-4.8773978554723135e-5,-5.001124485406591e-8,-0.002118980101862301,-4.8684026206295004e-5,-4.991720030835334e-8,-0.00211891220827597,-4.867379334879302e-5,-4.990812813538284e-8,-0.0021188006530865576,-4.8717674424215837e-5,-4.9957631878584515e-8,-0.0021186330805224884,-4.878489183979079e-5,-5.003335885442783e-8,-0.002118409606923484,-4.8846210672363946e-5,-5.010414572430475e-8,-0.0021181395569648243,-4.887764161794287e-5,-5.0144131459874775e-8,-0.002117838428140765,-4.8862089859800686e-5,-5.013472762586503e-8,-0.0021175254797301053,-4.87900395563563e-5,-5.006548391793509e-8,-0.0021172217039225403,-4.865995177280172e-5,-4.9934517707598465e-8,-0.0021169477453683006,-4.8478584561881674e-5,-4.9748766630150475e-8,-0.002116721392799632,-4.8261007717598124e-5,-4.952391111144196e-8,-0.00211655455107997,-4.802973321358578e-5,-4.928344153787555e-8,-0.002116450096966629,-4.781233066898358e-5,-4.9056238260434893e-8,-0.0021163995074253497,-4.763723300556185e-5,-4.88723175000772e-8,-0.00211638238176434,-4.752806896211847e-5,-4.8757005535652654e-8,-0.0021163687749273766,-4.749765415455074e-5,-4.872463016284184e-8,-0.0021163245129189124,-4.75433801208055e-5,-4.8773504423959966e-8,-0.0021162186131261293,-4.7645689733550204e-5,-4.888400543678275e-8,-0.0021160311239636605,-4.7770598620135224e-5,-4.902087037517744e-8,-0.0021157594156345004,-4.787624496808221e-5,-4.913984622203423e-8,-0.0021154210653734945,-4.792249771712643e-5,-4.919779498322852e-8,-0.0021150518661444766,-4.788171611098116e-5,-4.916427157162084e-8,-0.0021146983037815758,-4.774784549571525e-5,-4.903151581702451e-8,-0.0021144054214774677,-4.754043449876239e-5,-4.881909664190108e-8,-0.002114203335655032,-4.730071511555959e-5,-4.857004998709531e-8,-0.0021140976257717674,-4.7079605315396366e-5,-4.8338297363515245e-8,-0.002114068243449401,-4.6921741162987395e-5,-4.817168920274723e-8,-0.0021140776517754515,-4.685238849929127e-5,-4.8097948508555413e-8,-0.002114084019446718,-4.6872596236596724e-5,-4.81192411375788e-8,-0.002114053227237637,-4.6963141965845496e-5,-4.821604606694751e-8,-0.002113965448400426,-4.7093502898033734e-5,-4.8356449951288814e-8,-0.0021138158726727416,-4.7231060835115885e-5,-4.8505867927921634e-8,-0.0021136117434029157,-4.73475915439524e-5,-4.863405741638106e-8,-0.002113368243224607,-4.742253450655109e-5,-4.8718797175518944e-8,-0.0021131048107557887,-4.7443958322278066e-5,-4.874708212682086e-8,-0.002112842390293642,-4.740840058984932e-5,-4.87150037508711e-8,-0.002112601402461571,-4.732044050097083e-5,-4.8627229494421786e-8,-0.002112399898104981,-4.71923458598116e-5,-4.84965171325286e-8,-0.0021122513870208202,-4.7043586695278016e-5,-4.834314259144425e-8,-0.002112162155506463,-4.689959768605062e-5,-4.8193650389836864e-8,-0.0021121284044120486,-4.678902511400128e-5,-4.807810872069021e-8,-0.002112134192586928,-4.6738909755118304e-5,-4.802520783954363e-8,-0.002112151736011111,-4.676805674809973e-5,-4.8055358790222776e-8,-0.0021121455008559073,-4.68802207502431e-5,-4.8173435647070684e-8,-0.002112080244306887,-4.705993268071947e-5,-4.8364140938563196e-8,-0.0021119310664213338,-4.727368018370931e-5,-4.8592931302070324e-8,-0.002111691895111901,-4.747730114612249e-5,-4.881352739322071e-8,-0.0021113788749667064,-4.7627699607907756e-5,-4.898012188224292e-8,-0.00211102704677318,-4.7694954771803144e-5,-4.9060201272908396e-8,-0.002110681352249585,-4.767075494556609e-5,-4.90436883734857e-8,-0.002110384874318121,-4.7570663804349934e-5,-4.894570849816082e-8,-0.0021101677401916797,-4.7429813825341904e-5,-4.8802430880724736e-8,-0.002110039696581039,-4.729335730533683e-5,-4.866125590022362e-8,-0.0021099884072854364,-4.7204358850854926e-5,-4.8568084600913465e-8,-0.002109983945387274,-4.7192708949043166e-5,-4.855543459993911e-8,-0.0021099879117350232,-4.726846620998511e-5,-4.863507382826351e-8,-0.0021099639576379094,-4.7421428985429237e-5,-4.879720662545984e-8,-0.0021098861854816123,-4.7626298326830003e-5,-4.901567331796005e-8,-0.002109743186109511,-4.7850789510772105e-5,-4.9256450069474826e-8,-0.002109537586825893,-4.8063526347891254e-5,-4.948609768053289e-8,-0.002109282655958739,-4.8239580975826655e-5,-4.967782243823404e-8,-0.0021089979409871034,-4.8363148343395243e-5,-4.981449771751667e-8,-0.002108705341277884,-4.8427999229028034e-5,-4.988923858233261e-8,-0.002108426170116319,-4.843672757019664e-5,-4.990457813568429e-8,-0.0021081790939703336,-4.8399655340769195e-5,-4.987120855545762e-8,-0.002107978462340765,-4.8333815691984267e-5,-4.98068240380907e-8,-0.0021078325085235445,-4.8261883157006745e-5,-4.973500790876879e-8,-0.002107741182028866,-4.8210487087105704e-5,-4.968358842430621e-8,-0.0021076938773007476,-4.820714020935879e-5,-4.9681591379790985e-8,-0.0021076680383246907,-4.827513281127266e-5,-4.975399170959863e-8,-0.002107630376401887,-4.842654419791798e-5,-4.991432609044488e-8,-0.0021075425159545343,-4.865523284848443e-5,-5.015711147352186e-8,-0.0021073713272879244,-4.893349928726431e-5,-5.045403692151433e-8,-0.002107101054149504,-4.921621165090497e-5,-5.075804312180078e-8,-0.00210674158544731,-4.9453141274911964e-5,-5.1016160495136004e-8,-0.0021063277292051657,-4.960526660686225e-5,-5.1186657637328415e-8,-0.0021059088236712936,-4.965767137535703e-5,-5.1252729209342855e-8,-0.002105533355710234,-4.962333434846008e-5,-5.122672710022117e-8,-0.002105235298687669,-4.953725574759237e-5,-5.114433301511661e-8,-0.0021050267301768173,-4.9444765358431426e-5,-5.105262008384059e-8,-0.0021048975954977385,-4.938895653500951e-5,-5.099704564916817e-8,-0.0021048209457205044,-4.940083264676395e-5,-5.1011036159970786e-8,-0.0021047611320736954,-4.9493878141675046e-5,-5.110997819652719e-8,-0.0021046825545899023,-4.9663315734863536e-5,-5.1290024568352304e-8,-0.002104557033149279,-4.98893453161492e-5,-5.1531150434198844e-8,-0.0021043684802190066,-5.0143026698940785e-5,-5.1803180748147716e-8,-0.002104114312419352,-5.0393089164750924e-5,-5.2073008844431506e-8,-0.0021038039107087792,-5.0611974369170696e-5,-5.2311154609061635e-8,-0.002103455142864527,-5.077997300985246e-5,-5.249634587215205e-8,-0.0021030901973043527,-5.088713159052434e-5,-5.261767665298347e-8,-0.002102731754757487,-5.093327497583167e-5,-5.2674658453290784e-8,-0.002102400038249737,-5.0926853473763044e-5,-5.267593710089334e-8,-0.002102110741705476,-5.088333895282607e-5,-5.2637516149960456e-8,-0.002101873489403106,-5.08235740242651e-5,-5.2580999673824274e-8,-0.0021016904381226816,-5.07720385838116e-5,-5.2531862498246874e-8,-0.0021015548084289933,-5.0754644122074386e-5,-5.2517309070279127e-8,-0.002101449525764805,-5.079541727592946e-5,-5.256294807274047e-8,-0.002101346863688587,-5.091147619245311e-5,-5.268753767417356e-8,-0.0021012107625705593,-5.110647842638639e-5,-5.2895930277749896e-8,-0.0021010036231113496,-5.1364431323432054e-5,-5.317225671965255e-8,-0.0021006978474307205,-5.164780092740599e-5,-5.347763770609452e-8,-0.0021002887607210427,-5.1904283966139336e-5,-5.3757151991875933e-8,-0.0020998017811831972,-5.2082983385010847e-5,-5.3956856249473105e-8,-0.002099287305051419,-5.2153786677272464e-5,-5.404424493360183e-8,-0.002098803714303415,-5.211938886395136e-5,-5.402099729340937e-8,-0.0020983970909576486,-5.201310176200273e-5,-5.392087032373497e-8,-0.0020980879471518285,-5.1884788106360025e-5,-5.379525398388802e-8,-0.0020978694594535633,-5.178355560077695e-5,-5.3695353664609535e-8,-0.0020977146033212875,-5.1744897802943776e-5,-5.3658858151211176e-8,-0.0020975867206337855,-5.17850538647107e-5,-5.370387698001164e-8,-0.002097449252174256,-5.1901448471996434e-5,-5.382901325735156e-8,-0.0020972727165282454,-5.2076755488728516e-5,-5.4017187239652266e-8,-0.002097038679265766,-5.228448053746355e-5,-5.424119501315798e-8,-0.002096741115512614,-5.2494770950254756e-5,-5.446974146690214e-8,-0.0020963856479537316,-5.267968073580639e-5,-5.467310941300608e-8,-0.0020959871806476727,-5.281730553664611e-5,-5.482773870037851e-8,-0.002095566547851664,-5.2894425618154075e-5,-5.49192091763326e-8,-0.0020951467983804607,-5.2907580747666326e-5,-5.494346629557186e-8,-0.0020947496865052926,-5.2862703551995284e-5,-5.490641407062349e-8,-0.00209439283463895,-5.277366064911636e-5,-5.482230500560337e-8,-0.002094087719578533,-5.266022168051224e-5,-5.471156076175677e-8,-0.0020938383034884785,-5.2545818362760925e-5,-5.459846822588298e-8,-0.00209364009071615,-5.245512424241938e-5,-5.4508786421523974e-8,-0.002093479524987209,-5.241128303972207e-5,-5.4467015989831044e-8,-0.002093333866675805,-5.243244496307399e-5,-5.449285675295966e-8,-0.002093172238328941,-5.25272454837531e-5,-5.459637339444828e-8,-0.002092959192295158,-5.2689536740216397e-5,-5.47721861308031e-8,-0.002092662162437497,-5.289419192472436e-5,-5.4994709404817255e-8,-0.002092262731012093,-5.3097515495686634e-5,-5.5218327291160634e-8,-0.0020917682925749906,-5.3246152076680836e-5,-5.5386719323868286e-8,-0.0020912168729252238,-5.32948950916572e-5,-5.5451705931345774e-8,-0.00209066831104737,-5.322638039161152e-5,-5.539407826225248e-8,-0.002090182976448214,-5.306061034027742e-5,-5.523368866112795e-8,-0.0020897991792229852,-5.2847036022818596e-5,-5.502129784760488e-8,-0.0020895220312050072,-5.264403046194828e-5,-5.481735951820511e-8,-0.002089327651578887,-5.2498344531242285e-5,-5.4670817165440435e-8,-0.002089176601984936,-5.243402752975581e-5,-5.46075905285881e-8,-0.002089027832962104,-5.2451886161662154e-5,-5.462976227025945e-8,-0.002088848145979607,-5.253524957931374e-5,-5.4721159636310425e-8,-0.002088616519163286,-5.265749417095675e-5,-5.485481113266398e-8,-0.0020883247601802828,-5.278870213189013e-5,-5.499971074275159e-8,-0.0020879761659435914,-5.290068935685728e-5,-5.512613172786507e-8,-0.002087583221816599,-5.297058683962383e-5,-5.520959628157752e-8,-0.002087164777385674,-5.29832296796577e-5,-5.5233626895864976e-8,-0.002086742950109644,-5.2932455223265686e-5,-5.519126877302781e-8,-0.002086339956581604,-5.282138748957507e-5,-5.508542075950947e-8,-0.0020859750527439137,-5.266171847400609e-5,-5.492801945295256e-8,-0.0020856618891764334,-5.247200185689632e-5,-5.4738177469182e-8,-0.0020854066000901466,-5.227520696881749e-5,-5.453962120190033e-8,-0.0020852067040709943,-5.209587655834655e-5,-5.4357819901512334e-8,-0.002085050761531667,-5.19570440334916e-5,-5.421693100956444e-8,-0.0020849188250382576,-5.187695475340274e-5,-5.4136513752244604e-8,-0.0020847838283227895,-5.1865633386018315e-5,-5.4127943797766366e-8,-0.002084614302700284,-5.192134366393279e-5,-5.4190517439071605e-8,-0.002084379177216386,-5.202743147570318e-5,-5.4307801867957737e-8,-0.0020840552632532838,-5.2151132764179095e-5,-5.444603412637725e-8,-0.0020836367229090016,-5.2246983387897786e-5,-5.4557508305702125e-8,-0.0020831432642481086,-5.226727446908682e-5,-5.45915998704627e-8,-0.00208262110484632,-5.217892051956154e-5,-5.451267651801983e-8,-0.0020821314693878165,-5.1979995231158984e-5,-5.4317639028435655e-8,-0.002081728580818981,-5.170500269403149e-5,-5.404156653193917e-8,-0.0020814384597434145,-5.1412711832119855e-5,-5.374512512192592e-8,-0.0020812512548079114,-5.1162601970100065e-5,-5.349017232141276e-8,-0.0020811301739922143,-5.0993981576040526e-5,-5.331814200443522e-8,-0.0020810288964036128,-5.091778800135395e-5,-5.324144113486929e-8,-0.0020809068797548306,-5.0920708246115815e-5,-5.324742058440525e-8,-0.002080737412895719,-5.0975044648063965e-5,-5.330822538299496e-8,-0.0020805090765344805,-5.104836915559959e-5,-5.339054776415609e-8,-0.0020802235105041346,-5.111032019083676e-5,-5.3462654102947513e-8,-0.0020798920087048986,-5.113645247824958e-5,-5.349856905196274e-8,-0.0020795322310856322,-5.111013067736273e-5,-5.3480319452971573e-8,-0.002079165270330489,-5.102337145825212e-5,-5.339903379738613e-8,-0.002078812929807196,-5.0877027322918444e-5,-5.325522084868336e-8,-0.0020784951021789507,-5.0680399754512935e-5,-5.3058323468374344e-8,-0.0020782272019827155,-5.0450194248135284e-5,-5.2825530483115977E-08,-0.002078017796904138,-5.020860124030872e-5,-5.257971627504764e-8,-0.002077866846658982,-4.998045829403398e-5,-5.234652763334412e-8,-0.002077764949227266,-4.9789769777337244e-5,-5.215090293742938e-8,-0.002077693796213007,-4.96559598259346e-5,-5.201333928555749e-8,-0.002077627945643406,-4.959024266445353e-5,-5.1946199184189877e-8,-0.0020775379573369774,-4.959258117963107e-5,-5.1950458272378425e-8,-0.002077394847759163,-4.964972754567608e-5,-5.20133946027985e-8,-0.0020771757956997636,-4.973494898228385e-5,-5.2107934240242226e-8,-0.0020768707597667575,-4.981047198397003e-5,-5.21948928946358e-8,-0.002076488719453658,-4.9833950263944744e-5,-5.222962698296795e-8,-0.0020760607752435137,-4.976947981592237e-5,-5.217368787144459e-8,-0.0020756363255762,-4.960119521007246e-5,-5.2009327355383566e-8,-0.0020752699804712604,-4.934370262592132e-5,-5.175068444401802e-8,-0.002075002258206543,-4.904167747827994e-5,-5.144355599514386e-8,-0.002074843505137487,-4.875527236421879e-5,-5.115030112001243e-8,-0.002074770885112081,-4.85375576824606e-5,-5.092642497342114e-8,-0.0020747400769557814,-4.841647775431193e-5,-5.080178737543361e-8,-0.00207470360549399,-4.839002227744564e-5,-5.077538800998163e-8,-0.0020746254988324455,-4.843356303392952e-5,-5.082265162308837e-8,-0.002074487411936633,-4.8512066229528486e-5,-5.090778965666528e-8,-0.002074287589063454,-4.8590652566310444e-5,-5.099462507142112e-8,-0.0020740364229402913,-4.864094211986411e-5,-5.105327235216716e-8,-0.0020737516117730406,-4.864364377231825e-5,-5.1063071939584795e-8,-0.0020734542779023923,-4.858893563414716e-5,-5.101324060777878e-8,-0.0020731661303226793,-4.847596434842968e-5,-5.090249495797251e-8,-0.0020729072209830705,-4.831209437291138e-5,-5.073826475982897e-8,-0.002072693884949742,-4.81119863715466e-5,-5.053563043378728e-8,-0.0020725366574624164,-4.789627336170478e-5,-5.031584456326077e-8,-0.002072438244777095,-4.76894406001386e-5,-5.0104114550785046e-8,-0.0020723920062757552,-4.751664405123388e-5,-4.992640119935618e-8,-0.002072381620741844,-4.7399626029792626e-5,-4.980535122260885e-8,-0.002072382493146707,-4.735231857382114e-5,-4.975587690759763e-8,-0.002072365126038206,-4.737703392101369e-5,-4.9781211913094104e-8,-0.0020723002115636837,-4.746229500170882e-5,-4.987048608611002e-8,-0.002072164686144449,-4.758318793891755e-5,-4.9998772052492005e-8,-0.0020719476479477516,-4.7704672733856255e-5,-5.0130175273880784e-8,-0.0020716548762382742,-4.778785681354576e-5,-5.0224127220180263E-08,-0.002071310506859259,-4.779875995902617e-5,-5.0244500497020163e-8,-0.0020709542977483263,-4.7718213318121765e-5,-5.017014103512715e-8,-0.002070633392768585,-4.755018007788747e-5,-5.0003890279004845e-8,-0.0020703892518739446,-4.7324560969728754e-5,-4.9775852540256276e-8,-0.002070243556064142,-4.709095642120351e-5,-4.953713265926498e-8,-0.002070189582318923,-4.690347790577672e-5,-4.93441179578025e-8,-0.002070194443298303,-4.6802416516879245e-5,-4.9239360290252976e-8,-0.002070211781957937,-4.680166452708117e-5,-4.923831183218621e-8,-0.0020701982102484394,-4.688757653287808e-5,-4.9327848095478144e-8,-0.0020701254502533,-4.702784331254064e-5,-4.947517696147768e-8,-0.002069984310820259,-4.718405080239909e-5,-4.9640685225447364e-8,-0.002069781881963152,-4.732196406548829e-5,-4.978861540585559e-8,-0.002069535727065262,-4.741708010271714e-5,-4.989300757237092e-8,-0.0020692682062174064,-4.7456088345065395e-5,-4.993946266170168e-8,-0.0020690022999483347,-4.743604483466135e-5,-4.9924473337753236e-8,-0.0020687589325963695,-4.736278778201662e-5,-4.9853830021207306e-8,-0.0020685552095647745,-4.724938104372905e-5,-4.9740931313843226e-8,-0.0020684029471759965,-4.7114721697835956e-5,-4.9605222607596616e-8,-0.002068307113632894,-4.698198596032385e-5,-4.9470525465095644e-8,-0.002068264210735056,-4.6876359384872586e-5,-4.936274057243991e-8,-0.0020682611085878133,-4.682161851644506e-5,-4.930645763105391e-8,-0.002068275207205279,-4.683559588593652e-5,-4.932042167102954e-8,-0.002068276840995726,-4.692525626768796e-5,-4.941250393336782e-8,-0.0020682343681795467,-4.708286526062035e-5,-4.9575641749325084e-8,-0.002068121336074826,-4.728509807584928e-5,-4.9786665145860586e-8,-0.002067923897843404,-4.7496385865671217e-5,-5.0009436305109905e-8,-0.0020676460373650566,-4.7676378285878495e-5,-5.0202301586995866e-8,-0.0020673105644500745,-4.77898332491647e-5,-5.032822287464823e-8,-0.002066955050994269,-4.781625324925658e-5,-5.036486940750825e-8,-0.0020666233471462645,-4.7756464778773514e-5,-5.0311739548860085e-8,-0.002066354580310086,-4.763398187934115e-5,-5.0191974764700023E-08,-0.0020661724200392493,-4.7490128745401975e-5,-5.004766473653001e-8,-0.0020660778693884388,-4.737345115377653e-5,-4.9929071504630356e-8,-0.002066048524221078,-4.732603099287772e-5,-4.9880421809209325e-8,-0.0020660453797246812,-4.737129330364156e-5,-4.992704483799921e-8,-0.0020660250285791494,-4.7508085193365105e-5,-5.006889477610717e-8,-0.0020659523841825966,-4.7713206060515434e-5,-5.028283650859611e-8,-0.0020658090029066624,-4.795053885650078e-5,-5.053188956294247e-8,-0.002065594771846483,-4.818222569886375e-5,-5.0776768516938594e-8,-0.002065324117375244,-4.837752105633615e-5,-5.0985184294608874e-8,-0.002065019767433622,-4.851728875182688e-5,-5.1136723525022014e-8,-0.0020647068446275245,-4.8594594783670716e-5,-5.1223668798557995e-8,-0.0020644086381638085,-4.861304972472082e-5,-5.124938607964203e-8,-0.002064144097864555,-4.8584434676873395e-5,-5.122584536957933e-8,-0.002063926468637026,-4.852647936788248e-5,-5.1171225339119544e-8,-0.0020637623786124806,-4.846100605905334e-5,-5.11079143446867e-8,-0.0020636508879348973,-4.841213269692522e-5,-5.106066445180714e-8,-0.002063582435238546,-4.8403934845334516e-5,-5.1054290024565175e-8,-0.002063538168965467,-4.8457018960260466e-5,-5.1110281108115146e-8,-0.002063490642966396,-4.858388401565267e-5,-5.12421042751145e-8,-0.002063407082221286,-4.8783799285689586e-5,-5.144985988199522e-8,-0.0020632559577338995,-4.9039126710606216e-5,-5.1716281192541857e-8,-0.0020630160427410785,-4.931581340272001e-5,-5.200696102828744e-8,-0.002062684941410063,-4.95699691789468e-5,-5.2276889335559116e-8,-0.0020622829172062315,-4.9759696099219955e-5,-5.2482526161209284e-8,-0.0020618491854511264,-4.9858113731482825e-5,-5.259526114699326e-8,-0.0020614313126430684,-4.98622055714111e-5,-5.261072103110058e-8,-0.0020610717124268244,-4.979388598943105e-5,-5.255018976438976e-8,-0.00206079622917913,-4.9693307260769264e-5,-5.2454091838812215e-8,-0.002060608259750969,-4.960738794563041e-5,-5.2370482519734586e-8,-0.0020604893759882652,-4.957747244117635e-5,-5.234243575739418e-8,-0.0020604054583355405,-4.962944279368117e-5,-5.239769021503708e-8,-0.00206031622426224,-4.976850689463904e-5,-5.254290844467591e-8,-0.0020601854537221713,-4.997959938080869e-5,-5.276367005121703e-8,-0.002059989171420568,-5.0232827495872717e-5,-5.3029781808228276e-8,-0.0020597197607184654,-5.049196909900188e-5,-5.330394627200139e-8,-0.002059385412596773,-5.0723251719086136e-5,-5.35509256812709e-8,-0.002059005920337264,-5.0901931837912855e-5,-5.374455696877302e-8,-0.0020586068325025636,-5.1015438910330984e-5,-5.387122879648511e-8,-0.0020582139353274493,-5.106332394108202e-5,-5.3929977985066915e-8,-0.0020578492211639973,-5.105516573900859e-5,-5.3930358175955645e-8,-0.002057528552028513,-5.100771436745336e-5,-5.388943054436595e-8,-0.0020572605931187234,-5.094215881551009e-5,-5.382886471043966e-8,-0.0020570463828137086,-5.088182315066045e-5,-5.3772543032440546e-8,-0.0020568790450358394,-5.0850080664488783e-5,-5.3744486331419684e-8,-0.0020567435004348058,-5.086799254343324e-5,-5.376655829843546e-8,-0.0020566165172875277,-5.0951144908211624e-5,-5.38553140117008e-8,-0.002056468009873697,-5.1105440079060466e-5,-5.40176449522486e-8,-0.002056264887091375,-5.13224346701609e-5,-5.4245796040435814e-8,-0.0020559784072281106,-5.157623756835036e-5,-5.451389058844007e-8,-0.0020555942713637253,-5.1825209665744814e-5,-5.4779432398487804e-8,-0.0020551217432332926,-5.202108670480498e-5,-5.4992587084446835e-8,-0.002054595971680873,-5.212442299521637e-5,-5.511211091620739e-8,-0.002054069540827032,-5.212000715115373e-5,-5.51213256728815e-8,-0.0020535954582683582,-5.202381128623128e-5,-5.503543356010499e-8,-0.002053209667556904,-5.187728707364314e-5,-5.48959111155173e-8,-0.002052921320923942,-5.1732422490422854e-5,-5.4755490408141264e-8,-0.0020527136286440546,-5.163540619096735e-5,-5.466165472016251e-8,-0.002052552370246584,-5.16152962902263e-5,-5.464504010682952e-8,-0.002052397089200715,-5.167979779085585e-5,-5.471483931427527e-8,-0.0020522111175157827,-5.1817015362214554e-5,-5.4860156203498216e-8,-0.002051968552414977,-5.200091488002448e-5,-5.505518884494557e-8,-0.002051657757119859,-5.219838699551085e-5,-5.5266251947721564e-8,-0.0020512816489339715,-5.237636228823249e-5,-5.5459107581815276e-8,-0.0020508553095427784,-5.2507832957142995e-5,-5.5605365688318714e-8,-0.0020504017421625635,-5.2575890404729004e-5,-5.568690921630114e-8,-0.002049946887543557,-5.257533993074332e-5,-5.5697769382127575e-8,-0.002049514984834118,-5.251207506856239e-5,-5.5643570315387093e-8,-0.0020491250330573053,-5.240083953067565e-5,-5.553919797775131e-8,-0.0020487886736325817,-5.226219084775036e-5,-5.540559549606092e-8,-0.002048509350314085,-5.211942672300324e-5,-5.526655233827838e-8,-0.0020482822912756475,-5.1995876311308334e-5,-5.514595440180733e-8,-0.0020480948969156336,-5.191250486751777e-5,-5.506543751527602e-8,-0.0020479273660762303,-5.188554270222557e-5,-5.5042078174011434e-8,-0.002047753716271682,-5.19237834715236e-5,-5.5085654827554707e-8,-0.002047543853386551,-5.202532476066097e-5,-5.5195172880639046e-8,-0.0020472677925593256,-5.2174216124140644e-5,-5.535514660858792e-8,-0.002046902870774027,-5.2338771760351975e-5,-5.553355877045675e-8,-0.0020464432837271392,-5.247451873274851e-5,-5.568470840459575e-8,-0.0020459084093877532,-5.253449204712567e-5,-5.575981860047395e-8,-0.002045343640214381,-5.2486027294355265e-5,-5.5724461720487053e-8,-0.002044808785656605,-5.2326853813685626e-5,-5.557525555895152e-8,-0.002044356731611969,-5.208986005362827e-5,-5.534487592771635e-8,-0.002044013525552351,-5.183141847200364e-5,-5.5090255370018856e-8,-0.002043771226817781,-5.160953417781544e-5,-5.48704621303244e-8,-0.0020435956589243583,-5.1464429347744986e-5,-5.472704260792385e-8,-0.0020434418674889353,-5.1410036594933055e-5,-5.4675282541850294e-8,-0.0020432684427998627,-5.14362548539681e-5,-5.470618039648655e-8,-0.0020430462096218717,-5.1516940304592496e-5,-5.4794150517663037e-8,-0.0020427612302023604,-5.161886518563504e-5,-5.490581755587025e-8,-0.002042413976632722,-5.170911019925943e-5,-5.50074620408479e-8,-0.0020420165420526716,-5.1760253982835196e-5,-5.5070471238764245e-8,-0.0020415890123641396,-5.1753638794210315e-5,-5.507496856439569e-8,-0.002041155494939975,-5.168102371657047e-5,-5.501178570621877e-8,-0.0020407401651533347,-5.154474405169965e-5,-5.488278817879703e-8,-0.0020403637204026146,-5.135653343018677e-5,-5.4699684377973364e-8,-0.002040040576882192,-5.113526412477106e-5,-5.448162890443747e-8,-0.002039777091455139,-5.09039490226065e-5,-5.425206240270826e-8,-0.0020395709362431877,-5.068649756636404e-5,-5.4035371776647424e-8,-0.002039411459954195,-5.050467571637247e-5,-5.385385724355181e-8,-0.002039280756574348,-5.037542727193322e-5,-5.372512326084712e-8,-0.0020391552857087123,-5.030852534711591e-5,-5.365977061904039e-8,-0.0020390080427771986,-5.030447590753775e-5,-5.365921376204627e-8,-0.002038811568452725,-5.0352607930303213e-5,-5.3713516384989046e-8,-0.0020385424324039243,-5.042973944197244e-5,-5.379970190700536e-8,-0.0020381875739485158,-5.050077044952324e-5,-5.388206675784495e-8,-0.0020377516616928775,-5.052330199125621e-5,-5.391680200972993e-8,-0.0020372625651711995,-5.045802416725423e-5,-5.386277190055731e-8,-0.0020367698775526524,-5.028392416035833e-5,-5.3697376840582164e-8,-0.0020363321435952564,-5.001196000452072e-5,-5.34308014077663e-8,-0.0020359951521852593,-4.968703486004547e-5,-5.310816086035136e-8,-0.0020357726478473404,-4.937288418461528e-5,-5.279414480895378e-8,-0.0020356419556401216,-4.9126855995544544e-5,-5.2547399322285394e-8,-0.002035556684070434,-4.897959533240644e-5,-5.2399885499866514e-8,-0.0020354668174017705,-4.892970414356411e-5,-5.2351307750795756e-8,-0.0020353344578759418,-4.8951698867931034e-5,-5.237686688565701e-8,-0.0020351402813209166,-4.900893595997211e-5,-5.2440021527677685e-8,-0.0020348825479860966,-4.906468718670452e-5,-5.250353037457378e-8,-0.0020345726105927375,-4.908894182699448e-5,-5.253641005057569e-8,-0.002034229863541913,-4.906144649731033e-5,-5.251727392128725e-8,-0.002033877432711455,-4.897243922319491e-5,-5.2435389666249733e-8,-0.002033538711092817,-4.882223756648143e-5,-5.2290488844127926e-8,-0.002033234470164266,-4.8620156756388854e-5,-5.2091736421230884e-8,-0.0020329804185158853,-4.838285072517303e-5,-5.185597492180308e-8,-0.0020327852353072594,-4.813206614562613e-5,-5.160531630998899e-8,-0.002032649254192641,-4.789178910703803e-5,-5.136415864036497e-8,-0.00203256409568354,-4.7684964149517676e-5,-5.115586867184493e-8,-0.002032513412831578,-4.7530207576543425e-5,-5.099954932398015e-8,-0.0020324746777436327,-4.743890663944881e-5,-5.0907215491822745e-8,-0.002032421864725609,-4.741298395352246e-5,-5.088156196373777e-8,-0.002032328861343699,-4.744359026821503e-5,-5.091451930689139e-8,-0.002032173443614939,-4.7510913626487626e-5,-5.098678990055797e-8,-0.002031941783002499,-4.75853718193778e-5,-5.106873150905396e-8,-0.0020316332829377146,-4.763092567556373e-5,-5.112349305662727e-8,-0.002031264678451989,-4.7611506845454626e-5,-5.111354889776993e-8,-0.0020308711459007655,-4.7500835256465015e-5,-5.101094070015697e-8,-0.002030501384939176,-4.7293891553481265e-5,-5.0809346057054425e-8,-0.0020302046550841244,-4.7015069114082157e-5,-5.053271389164446e-8,-0.002030012417735536,-4.6715860633814e-5,-5.023306514824246e-8,-0.0020299237206302333,-4.645858056483108e-5,-4.997393446583235e-8,-0.002029904534219609,-4.629246101907128e-5,-4.980599835191041e-8,-0.0020299027081861383,-4.6235733219535855e-5,-4.974874457112798e-8,-0.0020298691085456756,-4.6273355836021885e-5,-4.9787942532947575e-8,-0.002029772836986357,-4.6368492929145236e-5,-4.9886997870461254e-8,-0.0020296053518841788,-4.6478270704142267e-5,-5.0002696473796485e-8,-0.0020293762284797076,-4.6565779984025805e-5,-5.009732090515303e-8,-0.0020291058975264805,-4.660586503998099e-5,-5.0144678766039385e-8,-0.0020288190745721122,-4.658611551409667e-5,-5.013139050785385e-8,-0.0020285401833065263,-4.650544482721242e-5,-5.0055709880198454e-8,-0.0020282905163081324,-4.637198758862261e-5,-4.9925521941264115e-8,-0.0020280863812595215,-4.6201017541421475e-5,-4.975620376898143e-8,-0.002027937697407739,-4.6012910954525015e-5,-4.95684364968778e-8,-0.0020278468548150497,-4.5830932166805734e-5,-4.938584335030445e-8,-0.0020278079352926354,-4.5678563130217145e-5,-4.923225233991149e-8,-0.0020278066732735607,-4.5576287146234076e-5,-4.9128512005390405e-8,-0.0020278216052989797,-4.553814792964579e-5,-4.908913495339701e-8,-0.0020278266184087235,-4.5568694544187735e-5,-4.91192941943901e-8,-0.0020277947861438816,-4.566099727855335e-5,-4.921277950752152e-8,-0.0020277030598136164,-4.579640243999685e-5,-4.9351559556919325e-8,-0.0020275370670149273,-4.5946459644631754e-5,-4.950743825762933e-8,-0.0020272951641109476,-4.6077038467505365e-5,-4.964594133297112e-8,-0.0020269909380996286,-4.615441491887575e-5,-4.9732349917762104e-8,-0.002026653192492816,-4.615293081887066e-5,-4.973956903588067e-8,-0.002026322209052732,-4.606314805429271e-5,-4.965671815932576e-8,-0.0020260414134917063,-4.5898197313257225e-5,-4.949598467985722e-8,-0.002025845064816443,-4.569487890022771e-5,-4.929407616837752e-8,-0.0020257453978966516,-4.550622741121225e-5,-4.9104815330766504e-8,-0.0020257254701901042,-4.538541867435896e-5,-4.898274157296879e-8,-0.0020257433889951937,-4.536680350718691e-5,-4.89636608578841e-8,-0.0020257476215753702,-4.5453789008186565e-5,-4.905208248604179e-8,-0.002025695654193513,-4.562012774480506e-5,-4.922225373647776e-8,-0.0020255663701208917,-4.582262170758979e-5,-4.943082479997011e-8,-0.0020253618227586557,-4.6016984020625265e-5,-4.963283638283841e-8,-0.00202510099803616,-4.6169328034816214e-5,-4.979343944742674e-8,-0.002024811017417274,-4.626077683867761e-5,-4.989278000082901e-8,-0.002024519795827304,-4.6286832571634604e-5,-4.992561400738215e-8,-0.0020242514862415977,-4.625433913083903e-5,-4.989840752411386e-8,-0.002024024252686185,-4.617810969109077e-5,-4.982595556164917e-8,-0.0020238493406938953,-4.607808430854788e-5,-4.972841725462505e-8,-0.0020237306112493255,-4.597702408116703e-5,-4.96288581956967e-8,-0.002023664162763472,-4.589834984431947e-5,-4.955099750636145e-8,-0.0020236381094273855,-4.586365827157764e-5,-4.951673189348936e-8,-0.0020236329502209293,-4.5889656355000434e-5,-4.954314934249165e-8,-0.002023623153744319,-4.5984715081919234e-5,-4.963915423232379e-8,-0.0020235804546441657,-4.6145777376813115e-5,-4.980235686787022e-8,-0.002023478863220688,-4.635676148666589e-5,-5.0017332271608656e-8,-0.0020233006158513526,-4.658965624449702e-5,-5.025648223081647e-8,-0.002023041531229927,-4.6808945440860525e-5,-5.048423155390615e-8,-0.0020227139642913913,-4.6978896318268104e-5,-5.066420578545552e-8,-0.002022346013528821,-4.7072161309276584e-5,-5.0767917079637096e-8,-0.002021976583923614,-4.7077557162162256e-5,-5.0782829172766134e-8,-0.002021646938817805,-4.700482993717928e-5,-5.071753209060727e-8,-0.0020213903373314294,-4.688457071627136e-5,-5.060204845365824e-8,-0.00202122225761361,-4.676225438165741e-5,-5.048208770780828e-8,-0.002021134399579563,-4.668682793085823e-5,-5.040757499631068e-8,-0.0020210955157597492,-4.66964938733245e-5,-5.041810897949245e-8,-0.002021060207166187,-4.680660727557303e-5,-5.053039604591645e-8,-0.0020209831787395298,-4.700501284627893e-5,-5.073317426465869e-8,-0.0020208331782008877,-4.7257207541469374e-5,-5.0992163914768974e-8,-0.002020600749527367,-4.751873684499668e-5,-5.126249359928724e-8,-0.002020297495132843,-4.7748817668834114e-5,-5.150253416122725e-8,-0.002019949045350994,-4.791973032907616e-5,-5.168357842505219e-8,-0.002019586148214338,-4.801998291591459e-5,-5.1793273968425187e-8,-0.0020192374342056386,-4.8052601996660434e-5,-5.183409256541799e-8,-0.002018925159106304,-4.8031175323490096e-5,-5.181942050354247e-8,-0.0020186634942643855,-4.797571811880198e-5,-5.1769350061628944e-8,-0.002018458307559683,-4.7909321720409155e-5,-5.17071934570522e-8,-0.0020183074793059634,-4.7855657746552463e-5,-5.1656878184229704e-8,-0.0020182012242393878,-4.783688725574289e-5,-5.164083264519561e-8,-0.0020181224346406887,-4.7871384574551e-5,-5.167777089044754e-8,-0.002018047515893418,-4.797092449356852e-5,-5.177995991815182e-8,-0.0020179484270965854,-4.813745696818201e-5,-5.1950004632217014e-8,-0.0020177966111187182,-4.836022705575067e-5,-5.217785319666721e-8,-0.0020175689778127058,-4.861471743161788e-5,-5.243952149084699e-8,-0.0020172549083493363,-4.886518940475764e-5,-5.2699404555608824e-8,-0.0020168618491771245,-4.9071739379400246e-5,-5.291720278700551e-8,-0.0020164165457899337,-4.920074189090056e-5,-5.305839885690176e-8,-0.0020159601254947663,-4.923537724905972e-5,-5.310497994930823e-8,-0.0020155377782343923,-4.9182101111894395e-5,-5.3062208619770655e-8,-0.0020151863264922898,-4.9070186505180795e-5,-5.2958496549887175e-8,-0.0020149239683831454,-4.894424255995497e-5,-5.28381974040878e-8,-0.002014745466484543,-4.8852234007670655e-5,-5.2749744360003565e-8,-0.002014623980385843,-4.8832737442584404e-5,-5.2732795661562925E-08,-0.0020145187675945538,-4.8905033515197663e-5,-5.2807996323674024e-8,-0.002014386463354211,-4.9064737170752646e-5,-5.297217537397421e-8,-0.0020141926071653754,-4.928613889269881e-5,-5.3200321420099145e-8,-0.002013919923050992,-4.953032530867741e-5,-5.3453543629696204e-8,-0.002013571006866503,-4.975617191211685e-5,-5.369014468097558e-8,-0.0020131652167542056,-4.993046123284049e-5,-5.3875992139383384e-8,-0.002012731692604997,-5.0034158097124634e-5,-5.399109718532883e-8,-0.0020123014742402913,-5.0063845602625036e-5,-5.403129483295887e-8,-0.00201190121087524,-5.002933955111049e-5,-5.4005977959494064e-8,-0.002011549521326985,-4.994945558883987e-5,-5.393385164637899e-8,-0.002011255743455944,-4.984764678639762e-5,-5.383846809376056e-8,-0.0020110201985696686,-4.974843179222414e-5,-5.374453985485008e-8,-0.002010835083772604,-4.9674777295965575e-5,-5.367526613695328e-8,-0.0020106854277154628,-4.964606496865315e-5,-5.365032901804489e-8,-0.0020105500400673802,-4.9676073962541255e-5,-5.3683953076972764e-8,-0.0020104028617102853,-4.9770593190928885e-5,-5.3782559234610896e-8,-0.0020102154280196164,-4.992472116898015e-5,-5.39419945769669e-8,-0.002009961203093299,-5.01205774324166e-5,-5.4145045648848874e-8,-0.0020096220475094026,-5.032702956215601e-5,-5.436091558231032e-8,-0.0020091956873586328,-5.0503577918817376e-5,-5.454893403638213e-8,-0.0020087010935627442,-5.060963041617747e-5,-5.466782814365228e-8,-0.0020081776870822868,-5.06175125618987e-5,-5.468889528583259e-8,-0.0020076760813480246,-5.052404157729019e-5,-5.4607820427235687e-8,-0.0020072426309083852,-5.03543523152836e-5,-5.444874990717472e-8,-0.0020069043511348767,-5.015493124700536e-5,-5.42575575233768e-8,-0.0020066610667815107,-4.997871174697851e-5,-5.40871357697118e-8,-0.0020064875013838,-4.98690470565664e-5,-5.3981449732444325e-8,-0.0020063429428621477,-4.9848723760962696e-5,-5.396442162152271e-8,-0.0020061836818402717,-4.991653940438004e-5,-5.40361687618578e-8,-0.0020059740082301832,-5.005060728795719e-5,-5.4175883241144576e-8,-0.0020056933781890086,-5.021595398427699e-5,-5.434910207886136e-8,-0.0020053390005447076,-5.037374382076034e-5,-5.4516829286568113e-8,-0.0020049242019915922,-5.048986269802197e-5,-5.464425732666e-8,-0.0020044736538592134,-5.054119841472836e-5,-5.470733410760349e-8,-0.0020040170112563204,-5.0518666909647305e-5,-5.469609132681992e-8,-0.002003582651521957,-5.0426916644760484e-5,-5.461455429534083e-8,-0.002003192848389794,-5.028151267800684e-5,-5.4477987905210974e-8,-0.0020028610069787686,-5.010484787898947e-5,-5.430874706071043e-8,-0.0020025908720933084,-4.992194480586509e-5,-5.413196542421391e-8,-0.0020023771463984017,-4.9756918400443195e-5,-5.3971933421660555e-8,-0.002002206808863418,-4.963034306888264e-5,-5.384945799572805e-8,-0.0020020606277349035,-4.955729195151486e-5,-5.3779965287491494e-8,-0.002001914752160842,-4.9545629165052306e-5,-5.377186303277142e-8,-0.0020017426370449094,-4.959424701946217e-5,-5.382477021649585e-8,-0.0020015178700865826,-4.9691252782268014e-5,-5.392756337052816e-8,-0.002001218597218113,-4.981272984636775e-5,-5.4056892268100934e-8,-0.0020008337756181305,-4.9923598500677135e-5,-5.417780009747694e-8,-0.002000370096206164,-4.998267559890689e-5,-5.4248682766537245e-8,-0.0019998563334538166,-4.995319905600739e-5,-5.423191853970226e-8,-0.0019993405058199324,-4.981692900508882e-5,-5.4108211202206056e-8,-0.0019988771595501596,-4.958544642961348e-5,-5.388813032255459e-8,-0.001998508235516319,-4.930060305686856e-5,-5.361273486836377e-8,-0.0019982470792282445,-4.902112276864653e-5,-5.3340329163181614e-8,-0.001998074636703137,-4.880149849864028e-5,-5.31255233957502e-8,-0.0019979490776461596,-4.867431780069525e-5,-5.300163018068865e-8,-0.001997822100817167,-4.864355803151583e-5,-5.2973805172126e-8,-0.0019976535169998273,-4.8688691267618395e-5,-5.3022777123200866e-8,-0.001997419552504148,-4.8774601604832057e-5,-5.311433704727912e-8,-0.001997114744774493,-4.8862226688571974e-5,-5.320970261330998e-8,-0.0019967494607951706,-4.891701856579829e-5,-5.3273961127601174e-8,-0.0019963452028423133,-4.8914377496388965e-5,-5.328171644965104e-8,-0.0019959291743273603,-4.884227819040176e-5,-5.3220032150562435e-8,-0.0019955289872912786,-4.870151669163586e-5,-5.3088954045228216e-8,-0.001995168161878916,-4.850401085939419e-5,-5.289994962557313e-8,-0.0019948628903654394,-4.8269744288963775e-5,-5.267284224427861e-8,-0.0019946202670904343,-4.8023026531601735e-5,-5.2431967802807096e-8,-0.0019944379707342885,-4.7788675113880514e-5,-5.220224766362233e-8,-0.0019943051797844005,-4.7588659781935926e-5,-5.200579146376313e-8,-0.0019942042706509,-4.743954711749449e-5,-5.1859386167826104e-8,-0.001994112859914415,-4.735069680607469e-5,-5.1772781475901097e-8,-0.001994006037341234,-4.732295848864623e-5,-5.1747440313270875e-8,-0.001993858894812306,-4.7347710668200726e-5,-5.177551950964653e-8,-0.0019936496579878314,-4.740627635058635e-5,-5.18390919640976e-8,-0.001993363861819001,-4.7470190253398286e-5,-5.1910146838977426e-8,-0.0019929996205191062,-4.7503541595903896e-5,-5.195272017060764e-8,-0.0019925728195238626,-4.746902878186876e-5,-5.1928915188607375e-8,-0.001992119310680294,-4.7338527946317814e-5,-5.1809644671995214e-8,-0.001991689987214206,-4.710613654808492e-5,-5.1587956392584026e-8,-0.0019913363447532006,-4.6797293437381455e-5,-5.128838764343941e-8,-0.0019910904742861894,-4.6465669201456026e-5,-5.096398901617266e-8,-0.001990950368197197,-4.617513909028325e-5,-5.067840830528089e-8,-0.0019908806466250022,-4.5975167125504204e-5,-5.048140368418561e-8,-0.0019908285309041696,-4.5883747649525306e-5,-5.039181646697579e-8,-0.0019907446103717484,-4.588605349155747e-5,-5.039601315964357e-8,-0.0019905972795608703,-4.59456274268961e-5,-5.045866854053545e-8,-0.0019903769307380295,-4.601920467643337e-5,-5.053718566759492e-8,-0.001990092573971516,-4.60683822052351e-5,-5.059317403618827e-8,-0.0019897653271612717,-4.6066023946311286e-5,-5.059894157366422e-8,-0.0019894219047486518,-4.5998288524238066e-5,-5.0539804388693425e-8,-0.001989089388356069,-4.5864029542767294e-5,-5.041380553085208e-8,-0.001988791342582684,-4.5672889943786124e-5,-5.023002279694939e-8,-0.0019885450270769787,-4.544267119758317e-5,-5.000598811628438e-8,-0.001988359611822744,-4.519623780012269e-5,-4.9764511439258186e-8,-0.001988235373861473,-4.4958196634044265e-5,-4.9530237154278555e-8,-0.001988163874878257,-4.475155292368226e-5,-4.932622435749737e-8,-0.0019881291494703197,-4.4594624487372946e-5,-4.917088069716583e-8,-0.0019881097672433527,-4.449860634103792e-5,-4.907562319610449e-8,-0.0019880814361664893,-4.446599676205845e-5,-4.9043404078743095e-8,-0.001988019896370336,-4.448984902371915e-5,-4.90679788963876e-8,-0.0019879040251158317,-4.455382789815783e-5,-4.9133842968146527e-8,-0.001987719144006088,-4.463316087772778e-5,-4.921694042093964e-8,-0.001987460558236463,-4.46967620556441e-5,-4.9286514917244204e-8,-0.0019871370966062707,-4.471122399257981e-5,-4.9308929889939364e-8,-0.0019867735413332,-4.464753053386993e-5,-4.925440944020967e-8,-0.0019864096922321078,-4.449046879624519e-5,-4.910667619111871e-8,-0.001986093293887148,-4.424847454638656e-5,-4.887310764941467e-8,-0.0019858657165408035,-4.395851101024967e-5,-4.858986252843164e-8,-0.0019857444502105696,-4.36793761172567e-5,-4.831531748591886e-8,-0.0019857123157436644,-4.3471892985409506e-5,-4.811032585031551e-8,-0.001985722442942424,-4.3374678707536145e-5,-4.801403302963816e-8,-0.001985717837909519,-4.3389861516746215e-5,-4.802953349265059e-8,-0.0019856536347009303,-4.348657983914437e-5,-4.812711300883761e-8,-0.001985509793314366,-4.3617293200771854e-5,-4.826016677840372e-8,-0.001985291041141802,-4.373551017512467e-5,-4.8382599589213666e-8,-0.001985018982825112,-4.380710889702349e-5,-4.8460059289153266e-8,-0.00198472269519155,-4.381413163467009e-5,-4.8473904889146595e-8,-0.0019844313817317153,-4.3753602107519224e-5,-4.8420335013601454e-8,-0.0019841698777690116,-4.3634265418978614e-5,-4.830740886578302e-8,-0.00198395631013117,-4.347308097731399e-5,-4.815167459106861e-8,-0.00198380093609794,-4.32920529085931e-5,-4.7974972464015794e-8,-0.0019837056325942176,-4.311530044265703e-5,-4.7801388949448075e-8,-0.0019836639326078916,-4.2966205027643966e-5,-4.765430103584804e-8,-0.0019836616788419274,-4.2864560277764126e-5,-4.755351001687462e-8,-0.0019836784835310212,-4.2823816969524074e-5,-4.75125667742844e-8,-0.0019836901334029686,-4.284880913635948e-5,-4.753661876885519e-8,-0.0019836717844280323,-4.293443985340406e-5,-4.7621167559884083e-8,-0.001983601577361672,-4.306561983656408e-5,-4.775195443764006e-8,-0.00198346427639853,-4.321860830029743e-5,-4.79061064744248e-8,-0.001983254503428399,-4.3363817575379086e-5,-4.805466061004061e-8,-0.001982979128261479,-4.3470011868281195e-5,-4.8166508580713625e-8,-0.0019826583317162807,-4.350982227820718e-5,-4.8213806615591725e-8,-0.0019823245270563744,-4.346642997860529e-5,-4.817876549475533e-8,-0.0019820179079688013,-4.334055689306835e-5,-4.806092503305833e-8,-0.0019817776241884424,-4.315546627647395e-5,-4.788249609663614e-8,-0.001981629243341138,-4.295622121243347e-5,-4.768788218876515e-8,-0.00198157253207564,-4.279964969343516e-5,-4.753376447678903e-8,-0.0019815768110193243,-4.273555993575656e-5,-4.747031671641675e-8,-0.0019815896914275643,-4.2786939561310826e-5,-4.752132323658576e-8,-0.001981556964728314,-4.294065163758243e-5,-4.767470277125102e-8,-0.001981442898715948,-4.315455768342111e-5,-4.788935301045354e-8,-0.001981239994932547,-4.337586664281439e-5,-4.811318043326988e-8,-0.001980965615592369,-4.3559380683812036e-5,-4.830112897720887e-8,-0.001980651104271411,-4.3677669740602314e-5,-4.842535724700544e-8,-0.001980330622165264,-4.37224614567855e-5,-4.8476842035870866e-8,-0.001980033601616317,-4.370082309922366e-5,-4.846185712372692e-8,-0.001979781186553916,-4.362987461869388e-5,-4.8396913373778846e-8,-0.0019795853426471683,-4.35321462310607e-5,-4.8304189751421825e-8,-0.001979449164923876,-4.343211096476673e-5,-4.8208004801788516e-8,-0.001979367516891493,-4.335355049589747e-5,-4.81320762404166e-8,-0.0019793277939190233,-4.331724667908914e-5,-4.8097157631997425e-8,-0.0019793109779484602,-4.333865671006025e-5,-4.811875302716466e-8,-0.00197929334115372,-4.342552864224307e-5,-4.8204839307820454e-8,-0.0019792491585166726,-4.3575840607934675e-5,-4.835390191602501e-8,-0.0019791544719827683,-4.377676979296662e-5,-4.855390559455163e-8,-0.0019789914659854206,-4.400538864917376e-5,-4.878285284376596e-8,-0.001978752618067997,-4.423151487384888e-5,-4.9011380729146134e-8,-0.001978443571552841,-4.442266642057841e-5,-4.920743293376487e-8,-0.0019780837559768326,-4.455044155192306e-5,-4.93424419569069e-8,-0.001977704189216635,-4.459716325964112e-5,-4.9397956177720134e-8,-0.0019773423735596264,-4.4561466986321577e-5,-4.937141684655841e-8,-0.001977034607825835,-4.446140319979623e-5,-4.927959934097138e-8,-0.0019768066566202684,-4.433345001834858e-5,-4.915798984075471e-8,-0.0019766648048065616,-4.422600808807836e-5,-4.905454320636164e-8,-0.001976590642014865,-4.418718038152136e-5,-4.901754862575995e-8,-0.0019765433922679146,-4.424941926591262e-5,-4.908018505043689e-8,-0.0019764714799322142,-4.441704193678446e-5,-4.924782281001948e-8,-0.0019763299672662825,-4.466351711965738e-5,-4.949503779025665e-8,-0.0019760958592488333,-4.494111748014449e-5,-4.9774988214425593e-8,-0.001975773776278894,-4.519821653836421e-5,-5.003649186587927e-8,-0.001975390495162118,-4.539533451112828e-5,-5.0239976118785304e-8,-0.0019749831859174212,-4.551335871876182e-5,-5.0365773681986254e-8,-0.0019745879207018306,-4.555320514137526e-5,-5.041400386812903e-8,-0.0019742323786003236,-4.553037719774458e-5,-5.039938833552872e-8,-0.0019739331147513276,-4.5468406296927464e-5,-5.03448680797245e-8,-0.001973695819172792,-4.539349471122782e-5,-5.0276287499947574e-8,-0.0019735168135767726,-4.533089935511781e-5,-5.0218721062822205e-8,-0.0019733846944876474,-4.5302611923024283e-5,-5.019408501320979e-8,-0.0019732817668098417,-4.532562487218592e-5,-5.021939519624579e-8,-0.0019731854504376916,-4.5410207074392044e-5,-5.0305107394665245e-8,-0.0019730701622044603,-4.5557997564901036e-5,-5.045329830787116e-8,-0.001972910223039121,-4.576026673732602e-5,-5.0655959638034884e-8,-0.001972684031500541,-4.5997198476817514E-05,-5.0894198826261366e-8,-0.001972379090884328,-4.623929153514652e-5,-5.113944114811148e-8,-0.001971996635686588,-4.6451727228890164e-5,-5.135753400078218e-8,-0.0019715539766186102,-4.660160044857538e-5,-5.1515737334611745e-8,-0.0019710828542270687,-4.6666477609024985e-5,-5.159115485388241e-8,-0.001970623298040414,-4.664162896085638e-5,-5.1578016403124346e-8,-0.001970214212090245,-4.65432620191606e-5,-5.1491151948029e-8,-0.001969883242927487,-4.6406229230851866e-5,-5.1364075446337285e-8,-0.001969638857557791,-4.627639846031354e-5,-5.124174919757445e-8,-0.001969467008160238,-4.6199420166105754e-5,-5.116961866658035e-8,-0.0019693336914688433,-4.6208627966382286e-5,-5.1181552597747694e-8,-0.001969193371546135,-4.631535486871011e-5,-5.128996338486575e-8,-0.0019690015104308046,-4.650497733936632e-5,-5.148150977961362e-8,-0.001968727504736385,-4.6740821064600386e-5,-5.172064567922468e-8,-0.001968363316252578,-4.697522012612561e-5,-5.196041523031695e-8,-0.00196792440570595,-4.71636765838571e-5,-5.2156492160433425e-8,-0.001967443051877653,-4.727655930735045e-5,-5.227890703313716e-8,-0.0019669575953292872,-4.730437768201357e-5,-5.2317472555509746e-8,-0.0019665022928231123,-4.7256201646844035e-5,-5.228042290007389e-8,-0.0019661009362071376,-4.715377406937989e-5,-5.218873377314962e-8,-0.0019657647779907092,-4.702464970878444e-5,-5.206938544394163e-8,-0.001965493477560509,-4.689660585321579e-5,-5.194979398067257e-8,-0.001965277377825799,-4.6794002474408414e-5,-5.185413345399812e-8,-0.001965099914950498,-4.67357278760477e-5,-5.1801254050097615e-8,-0.0019649396611614903,-4.673397854378611e-5,-5.180348656861776e-8,-0.0019647721014879383,-4.6793187059781656e-5,-5.186563289514447e-8,-0.0019645716558417217,-4.690878647692816e-5,-5.1983771468773974e-8,-0.0019643145874512157,-4.706604455706395e-5,-5.214404907793817e-8,-0.001963983213520618,-4.7239795327600476e-5,-5.232226406608289e-8,-0.0019635711534783046,-4.7396399391850306e-5,-5.248560550378622e-8,-0.0019630881783210172,-4.749923158841316e-5,-5.2597912011238834e-8,-0.0019625620385825687,-4.7517783547080394e-5,-5.262860028092075e-8,-0.001962034600536159,-4.743810866143697e-5,-5.2563034466538445e-8,-0.001961551663459193,-4.7270187530390955e-5,-5.2409958425237556e-8,-0.0019611493437624405,-4.7047867070956564e-5,-5.2201684891901307e-8,-0.0019608425118726406,-4.682012526184868e-5,-5.198578136085175e-8,-0.001960620223510975,-4.663679110534357e-5,-5.1811253235307756e-8,-0.00196044964691645,-4.65343886842311e-5,-5.1714684022350806e-8,-0.001960286244385532,-4.652696232149927e-5,-5.171103424799668e-8,-0.0019600861987816276,-4.660393314075276e-5,-5.1791161198884274e-8,-0.001959817384072231,-4.673447845393499e-5,-5.192571546679343e-8,-0.0019594663672666632,-4.687647620848606e-5,-5.207366237327364e-8,-0.0019590402013480103,-4.69873681531962e-5,-5.219291849091948e-8,-0.0019585630459199917,-4.7034093216261266e-5,-5.2250281015410575e-8,-0.0019580689434451474,-4.699963912862847e-5,-5.222813797470916e-8,-0.001957593098636109,-4.6884855780413277E-05,-5.212650982795257e-8,-0.0019571642607120374,-4.6705755925512453e-5,-5.196056523166988e-8,-0.001956800031936092,-4.648795164335014e-5,-5.175520387715332e-8,-0.0019565055327110657,-4.626040613743492e-5,-5.1538868280151164e-8,-0.001956274664949442,-4.605019885705157e-5,-5.133830575689433e-8,-0.0019560927255029953,-4.587904903303501e-5,-5.117507505063576e-8,-0.001955939273522816,-4.5761480824035993e-5,-5.106372503209461e-8,-0.00195579066288265,-4.570401845100373e-5,-5.101104052329391e-8,-0.001955622211363207,-4.570476038673568e-5,-5.101566680936453e-8,-0.001955410378080181,-4.575298140689403e-5,-5.1067700552761083e-8,-0.0019551355106216866,-4.5828851541139104e-5,-5.114829612455283e-8,-0.0019547856381423576,-4.590392133545704e-5,-5.122995115968192e-8,-0.001954361197611504,-4.594364275569868e-5,-5.127880370114713e-8,-0.001953879361532978,-4.591336545457481e-5,-5.126044894606853e-8,-0.001953375159198017,-4.5788157126795125e-5,-5.114965466945004e-8,-0.0019528960573228693,-4.556404200060815e-5,-5.094156483201756e-8,-0.0019524888638265663,-4.52650121756844e-5,-5.0658773399677315e-8,-0.0019521829510683111,-4.493969555783338e-5,-5.03482415102804e-8,-0.001951978224705543,-4.4646436883604996e-5,-5.006686001308755e-8,-0.0019518449631389671,-4.4433199757164185e-5,-4.9861909053352045e-8,-0.0019517355290165363,-4.43223575013476e-5,-4.9756164208185047e-8,-0.0019516011374687279,-4.430667685873654e-5,-4.9743737900243164e-8,-0.0019514058087092413,-4.4355660121435736e-5,-4.979589561049797e-8,-0.0019511334488388776,-4.442707829644108e-5,-4.987196748279403e-8,-0.0019507882121724506,-4.4478635729643045e-5,-4.993057447552316e-8,-0.0019503903208332868,-4.447687118184344e-5,-4.9938400968221414e-8,-0.0019499696523796678,-4.440237013879302e-5,-4.9875550740711113e-8,-0.0019495587983859016,-4.425144642123595e-5,-4.973750799595954e-8,-0.0019491867583722598,-4.403481674939329e-5,-4.953408613857425e-8,-0.001948874170726926,-4.3773966244990976e-5,-4.928597425302703e-8,-0.0019486306854478142,-4.3496186610003896e-5,-4.901984567298104e-8,-0.0019484545808215287,-4.322941742227304e-5,-4.876319520040075e-8,-0.0019483342448092852,-4.299784164805793e-5,-4.853991498678627e-8,-0.0019482508367361243,-4.281882578092175e-5,-4.8367249272998265E-08,-0.0019481813406516451,-4.2701332047739913e-5,-4.8254265238426306e-8,-0.001948101431884755,-4.2645465612550796e-5,-4.820147285858156e-8,-0.0019479880023605153,-4.2642663695294445e-5,-4.820104258643957e-8,-0.0019478215084132696,-4.267621983914629e-5,-4.823725928348993e-8,-0.0019475884766814169,-4.2722120831818105e-5,-4.8287176766687065e-8,-0.001947284537476418,-4.2750605376743135e-5,-4.832193112023108e-8,-0.0019469179020162252,-4.272943149953421e-5,-4.830978464674593e-8,-0.001946512130701754,-4.2629987351193034e-5,-4.8222103668448865e-8,-0.0019461057920909896,-4.243645483759409e-5,-4.804249139879382e-8,-0.0019457459924259364,-4.2155871844775294e-5,-4.777688442978733e-8,-0.001945474433914433,-4.182357814670306e-5,-4.745909633402526e-8,-0.0019453099923769398,-4.149726260691403e-5,-4.7145127891331156e-8,-0.0019452376149965635,-4.123797713130104e-5,-4.689469161507122e-8,-0.0019452123501192205,-4.108646923628689e-5,-4.67481344270079e-8,-0.0019451775408544185,-4.104846697515171e-5,-4.671199913017461e-8,-0.001945086305653114,-4.10964890190002e-5,-4.67605464329462e-8,-0.00194491498170104,-4.118420798055841e-5,-4.6849415350206084e-8,-0.0019446649566739968,-4.1263439193324884e-5,-4.693190382853436e-8,-0.0019443564891179575,-4.129638690638195e-5,-4.6970831215838533e-8,-0.001944019871009889,-4.126124977537125e-5,-4.694416268183079e-8,-0.0019436874568431314,-4.115267744009283e-5,-4.6845757576426216e-8,-0.0019433878283089455,-4.097933082895468e-5,-4.668329117893592e-8,-0.0019431420227587768,-4.076018683375537e-5,-4.64748293924473e-8,-0.001942961425049852,-4.052037587530838e-5,-4.624478413720799e-8,-0.001942847090506267,-4.028693694379081e-5,-4.6019666043409794e-8,-0.001942790358890472,-4.008483999357206e-5,-4.5824064376144906e-8,-0.0019427745871054582,-3.9933607897037706e-5,-4.5677259981585586e-8,-0.0019427777616891982,-3.984486508728241e-5,-4.559083113158273e-8,-0.0019427755865315058,-3.982107608163827e-5,-4.556748866183424e-8,-0.0019427445679542873,-3.985544668643988e-5,-4.5601049016244416e-8,-0.0019426648249855798,-3.9932722126588916e-5,-4.5677213148583996e-8,-0.0019425225723483325,-4.003067731752825e-5,-4.577491057145826e-8,-0.00194231231186212,-4.0122223590998573e-5,-4.586815250812175e-8,-0.001942038840723702,-4.017825071467646e-5,-4.592859500544757e-8,-0.0019417189403766162,-4.017172995117602e-5,-4.592943591477745e-8,-0.0019413817963929902,-4.0083668653272205e-5,-4.5851299075569445e-8,-0.0019410663758636533,-3.9910612776753746e-5,-4.5689797651230024e-8,-0.0019408138567119492,-3.9671609827259084e-5,-4.546263553447091e-8,-0.0019406546006421536,-3.941021451110704e-5,-4.52117972507066e-8,-0.001940593319235403,-3.918608994782784e-5,-4.499543804327817e-8,-0.0019406012767298,-3.905498590278002e-5,-4.486832358067523e-8,-0.001940623920404477,-3.904542284858823e-5,-4.4859006867683975e-8,-0.0019406025544464632,-3.914639483061919e-5,-4.495769578301747e-8,-0.001940497520876102,-3.931411884703988e-5,-4.512260307194805e-8,-0.001940299698239888,-3.949212761192832e-5,-4.5299254342045724e-8,-0.0019400271696272137,-3.9631546521015266e-5,-4.5440050246729585e-8,-0.0019397134945464904,-3.970249901148748e-5,-4.55153769119164e-8,-0.0019393955892964717,-3.969592038203203e-5,-4.551557626730208e-8,-0.0019391053846128947,-3.961966037424788e-5,-4.544745102453445e-8,-0.0019388656601532564,-3.9492805816283906e-5,-4.532898685003671e-8,-0.0019386887618311728,-3.9340423201373115e-5,-4.518433473733331e-8,-0.0019385768153243493,-3.9189313030825355e-5,-4.5039624737876385e-8,-0.0019385226755074644,-3.9064588188579694e-5,-4.491950007652083e-8,-0.0019385113945777103,-3.89868350713039e-5,-4.4844233237342264e-8,-0.0019385222021650083,-3.8969763524809525e-5,-4.48273957066787e-8,-0.0019385310528990875,-3.9018436577778017e-5,-4.4874176736247263E-08,-0.001938513684450707,-3.912838732750907e-5,-4.498060099930697e-8,-0.0019384488723173468,-3.928589530112374e-5,-4.51338353807561e-8,-0.001938321483040145,-3.946943857740446e-5,-4.531354277085539e-8,-0.0019381250107120861,-3.965222629013153e-5,-4.5494184057548586e-8,-0.0019378633026130548,-3.9805684583894356e-5,-4.5648196322549064e-8,-0.0019375512317700392,-3.990367219926965e-5,-4.574992768613837e-8,-0.0019372141057675222,-3.9927275177831916e-5,-4.5780279834495175e-8,-0.0019368852732491004,-3.987006414845319e-5,-4.573198875575406e-8,-0.0019366009982821448,-3.9743041431457964e-5,-4.561474398462704e-8,-0.001936392008214114,-3.9577268369624826e-5,-4.545806912288991e-8,-0.0019362725887905185,-3.9421116423997146e-5,-4.530885190760244e-8,-0.0019362308367980837,-3.93293215936308e-5,-4.522070434461868e-8,-0.0019362265448863605,-3.934447117414749e-5,-4.5235796012735197e-8,-0.0019362021567699314,-3.947831204143984e-5,-4.5366449130396565e-8,-0.0019361044622756712,-3.9704499044345756e-5,-4.558787687093552e-8,-0.0019359055467726995,-3.9969038024905696e-5,-4.5848165191453386e-8,-0.001935610918476163,-4.0212436952495197e-5,-4.608967212085328e-8,-0.0019352522767100955,-4.0390248298052926e-5,-4.626892936144965e-8,-0.001934872343550989,-4.04826572347339e-5,-4.636602580928481e-8,-0.0019345110162189247,-4.0492973987788945e-5,-4.6383349171738214e-8,-0.0019341974042064007,-4.0440353373262014e-5,-4.633877244453355e-8,-0.00193394745527741,-4.035183976460438e-5,-4.6258113992407355e-8,-0.0019337648831009675,-4.025623586702828e-5,-4.6169223646382756e-8,-0.001933643297940725,-4.018010690860001e-5,-4.6098017218746215e-8,-0.0019335684391845415,-4.014524819687492e-5,-4.606588963420782e-8,-0.0019335202829593439,-4.016691288990378e-5,-4.608791074426844e-8,-0.001933475196842574,-4.025240778009302e-5,-4.617145854048994e-8,-0.0019334084174011334,-4.039999941699849e-5,-4.6315210257224784e-8,-0.0019332970460884604,-4.0598441631085976e-5,-4.6508730328468455e-8,-0.0019331234337040622,-4.0827636234276635e-5,-4.67330881859333e-8,-0.0019328784570221483,-4.1060782189105156e-5,-4.69628242270068e-8,-0.001932564016748744,-4.126806268614148e-5,-4.716934132885776e-8,-0.0019321940512386387,-4.14215942181376e-5,-4.732552837106896e-8,-0.001931793485630655,-4.1500945427768556e-5,-4.741103326315836e-8,-0.0019313948975945483,-4.149824340283206e-5,-4.741729676503009e-8,-0.0019310330346188518,-4.142188515293687e-5,-4.7351395895912765e-8,-0.0019307375352558293,-4.1297801414388954e-5,-4.723760067108958e-8,-0.0019305246932332914,-4.116693684145903e-5,-4.711522060800814e-8,-0.0019303901558369954,-4.107771840039374e-5,-4.7031429532281454e-8,-0.001930305702440573,-4.1073507327231025e-5,-4.70290097302363e-8,-0.001930223661133537,-4.117772149833033e-5,-4.71316652941459e-8,-0.0019300904151773313,-4.1382707713134946e-5,-4.733292449466249e-8,-0.0019298652063116251,-4.1649473063614e-5,-4.7595646288971316e-8,-0.0019295353407003367,-4.192078311450537e-5,-4.786461098057043e-8,-0.0019291195029987889,-4.214178037375372e-5,-4.8086494979264673e-8,-0.0019286581510240075,-4.227740391874418e-5,-4.822680388860586e-8,-0.0019281977027044515,-4.23190945630982e-5,-4.827648982478889e-8,-0.001927776949794641,-4.228093381957044e-5,-4.8248402386580654e-8,-0.0019274200721663662,-4.219051722902683e-5,-4.8168652620736966e-8,-0.001927135772707496,-4.20798850584923e-5,-4.8067954346620734e-8,-0.0019269198332215003,-4.197912027142969e-5,-4.797542280744417e-8,-0.0019267586318278405,-4.1912777277154615e-5,-4.7915023022203665e-8,-0.0019266323173630316,-4.189820026513446e-5,-4.7903834928403336e-8,-0.0019265173637764677,-4.194471819140883e-5,-4.795122144177823e-8,-0.0019263888011234276,-4.205308385953557e-5,-4.805829680961167e-8,-0.0019262225974915343,-4.221501646557592e-5,-4.821751718558146e-8,-0.0019259985568891125,-4.2413183674726635e-5,-4.8412658231367925e-8,-0.0019257037357562376,-4.262227688328076e-5,-4.861977364178274e-8,-0.0019253358507307667,-4.281183412618318e-5,-4.88097763412886e-8,-0.0019249056464002532,-4.295109158693287e-5,-4.895296804974039e-8,-0.00192443696510101,-4.3015405547280085e-5,-4.9025146674251664e-8,-0.001923963576351099,-4.299286159649854e-5,-4.901401418858055e-8,-0.0019235227456985294,-4.288907110417211e-5,-4.892397352513479e-8,-0.0019231466972611288,-4.2728295806226845e-5,-4.8777489495455956e-8,-0.0019228540148536525,-4.2549887097491935e-5,-4.861195243355361e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json deleted file mode 100644 index 771149a..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_10.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":10000,"numberOfSamples":1000,"samples":[1.9197471616856318e-4,7.996600532056201e-6,-1.2597360486632112e-8,1.923979354906972e-4,8.059544161443208e-6,-1.2601754449986743e-8,1.9274745963100852e-4,8.18217092448731e-6,-1.2612185701149497e-8,1.9301410614298842e-4,8.328459694631899e-6,-1.2625220207854334e-8,1.9320200661086356e-4,8.46367290461882e-6,-1.263746635903232e-8,1.933256574311564e-4,8.557979990756902e-6,-1.264596926377846e-8,1.9340729897750835e-4,8.588749871695277e-6,-1.2648467217789009e-8,1.9347454382165973e-4,8.54234886551231e-6,-1.2643575641672086e-8,1.9355780445299317e-4,8.41580428718647e-6,-1.2630935191527253e-8,1.9368703586457032e-4,8.218144650907273e-6,-1.2611321617725655e-8,1.9388759494511673e-4,7.970728457914735e-6,-1.2586673932584885e-8,1.9417557384287807e-4,7.70570255454025e-6,-1.2559972916060515e-8,1.9455353413614596e-4,7.461994170668981e-6,-1.2534909842557773e-8,1.950079268750979e-4,7.278838435440244e-6,-1.2515320800328438e-8,1.9550946566497787e-4,7.1877009230743185e-6,-1.250443183656935e-8,1.9601716991058025e-4,7.204296880679899e-6,-1.2504049076168112e-8,1.964858622143666e-4,7.322751895738212e-6,-1.2513893072518937e-8,1.9687601817327312e-4,7.513719443070609e-6,-1.2531293180978063e-8,1.9716418145619786e-4,7.727807131336245e-6,-1.255143733487227e-8,1.9735148270881055e-4,7.904972006017888e-6,-1.256828984627858e-8,1.9746717430474582e-4,7.989189307001313e-6,-1.2576107854737417e-8,1.9756414464783983e-4,7.945391162788686e-6,-1.2571208909452543e-8,1.9770522673983343e-4,7.772936988045046e-6,-1.255336219063038e-8,1.9794335851555265e-4,7.508737590816236e-6,-1.2526112219574885e-8,1.9830340643788719e-4,7.216310774252375e-6,-1.2495704511570225e-8,1.9877444051722307e-4,6.9643475770128966e-6,-1.2468991956480241e-8,1.9931605492441463e-4,6.804754497374457e-6,-1.2451273955690413e-8,1.99874367496323e-4,6.7599548302468994e-6,-1.2444993679265321e-8,2.0039900027274713e-4,6.82270849799812e-6,-1.2449629419202722e-8,2.0085428305204736e-4,6.964723431631095e-6,-1.2462470630692901e-8,2.012230129828281e-4,7.147810040913146e-6,-1.2479705950981818e-8,2.015048844233702e-4,7.3331078822919305e-6,-1.2497376827881843e-8,2.0171260728942556e-4,7.4869143007848404e-6,-1.2512018298014086e-8,2.0186784837753266e-4,7.583663846056725e-6,-1.2521002574264202e-8,2.0199788115223623e-4,7.6072954724533325e-6,-1.252268798054521e-8,2.0213287762151582e-4,7.552075776678594e-6,-1.25164799413586e-8,2.023032713093168e-4,7.423389313956485e-6,-1.250287524528341e-8,2.025365492604393e-4,7.238354929979809e-6,-1.2483501654253962e-8,2.0285312487000682e-4,7.025543178481034e-6,-1.2461102098633864e-8,2.032615548180566e-4,6.822697696785637e-6,-1.2439358398961576e-8,2.037542292355152e-4,6.671464949679808e-6,-1.2422433892723618e-8,2.043054648544205e-4,6.609017340781519e-6,-1.241418367286807e-8,2.0487402079284614e-4,6.658061470286973e-6,-1.2417141084804209e-8,2.0541091916908847e-4,6.8183286453880834e-6,-1.2431576848491557e-8,2.0587131297464264e-4,7.063148440915905e-6,-1.2455025250029365e-8,2.0622704282800456e-4,7.343452105811302e-6,-1.2482583077772363e-8,2.064756840198449e-4,7.598950788494315e-6,-1.2508013979414962e-8,2.0664282168786132e-4,7.773572333271332e-6,-1.2525372054527937e-8,2.0677643799377142e-4,7.830732911241555e-6,-1.2530654293509096e-8,2.069346139971509e-4,7.763969732585166e-6,-1.252297208136234e-8,2.0716968071363143e-4,7.599507240572051e-6,-1.2504868071919612e-8,2.075133831394106e-4,7.389324388835024e-6,-1.2481637303243253e-8,2.079680047158014e-4,7.196295440443784e-6,-1.2459822238997104e-8,2.0850678511286473e-4,7.076223630712314e-6,-1.2445361216516968e-8,2.09083353603553e-4,7.063208010991012e-6,-1.2442027977015235e-8,2.0964607359171694e-4,7.163288146015455e-6,-1.245068068918884e-8,2.1015153998119444e-4,7.357300167494584e-6,-1.2469466055778998e-8,2.105729208467013e-4,7.6098914082299795e-6,-1.2494715588623496e-8,2.1090206952705673e-4,7.880059152858419e-6,-1.2522068534104855e-8,2.1114705135521922e-4,8.129688725332927e-6,-1.2547426277362978e-8,2.11327623932954e-4,8.328785948689606e-6,-1.2567558359396523e-8,2.1147063027153733e-4,8.45781981905388e-6,-1.2580371063842255e-8,2.116062170779773e-4,8.508318739735103e-6,-1.2584953522756101e-8,2.1176489219544155e-4,8.482821664273282e-6,-1.2581533889456395e-8,2.1197487908306462e-4,8.394780190546323e-6,-1.2571439050506965e-8,2.1225908578335732e-4,8.268336110121104e-6,-1.2557075378613995e-8,2.1263125815806694e-4,8.137282943263268e-6,-1.2541867403695375e-8,2.1309149641396343e-4,8.042041677157666e-6,-1.2530015745409708e-8,2.1362232923984473e-4,8.023413973770414e-6,-1.2525906367685887e-8,2.141877185477536e-4,8.112834049185048e-6,-1.2533095524318957e-8,2.1473774581068903e-4,8.3210914871919e-6,-1.2553050116063849e-8,2.1522011129794914e-4,8.630080126066386e-6,-1.2584142235542132e-8,2.1559591766686086e-4,8.992908412392393e-6,-1.2621531987775295e-8,2.1585357677476676e-4,9.344915051726786e-6,-1.2658284937238318e-8,2.1601416666211921e-4,9.622593263837225e-6,-1.2687427039128446e-8,2.1612534488552648e-4,9.78287653756447e-6,-1.2704087855205246e-8,2.1624652249650514e-4,9.81514982519467e-6,-1.2706860844017089e-8,2.1643148366610137e-4,9.742398905621779e-6,-1.2697982257149455e-8,2.1671439125053968e-4,9.612686075077394e-6,-1.2682472194826136e-8,2.1710262618754617e-4,9.484942883597433e-6,-1.2666663487275253e-8,2.1757724992220657e-4,9.413689438536168e-6,-1.2656583095773519e-8,2.180998881122663e-4,9.436636301726828e-6,-1.2656579120301334e-8,2.1862349866680082e-4,9.567821662343242e-6,-1.2668481926430359e-8,2.1910382506955763e-4,9.797254291937394e-6,-1.2691451235088495e-8,2.1950852180187367e-4,1.0096209406878957e-5,-1.2722473686840802e-8,2.1982203208259762e-4,1.0425814221374339e-5,-1.2757289563240955e-8,2.2004593990235762e-4,1.0746017377170483e-5,-1.279141904043139e-8,2.2019594725035345e-4,1.1022697089033848e-5,-1.2821004358988786e-8,2.2029723714439854e-4,1.1231954282858246e-5,-1.284332207805951e-8,2.2037976133546005e-4,1.1361792925413278e-5,-1.285697045584737e-8,2.204743050715671e-4,1.1412058566647195e-5,-1.2861837839761607e-8,2.2060942735678435e-4,1.139360836886871e-5,-1.2858986747465736e-8,2.2080886496210573e-4,1.1327297175898568e-5,-1.2850546480647196e-8,2.2108883199633075e-4,1.1242779422350658e-5,-1.2839626876663463e-8,2.2145479727229533e-4,1.117656313941561e-5,-1.2830179748791994e-8,2.218978524119614e-4,1.1168241380550244e-5,-1.2826654765479383e-8,2.223918274118358e-4,1.125368271022084e-5,-1.2833271066266854e-8,2.2289360923823234e-4,1.1454892795233024e-5,-1.2852838922138324e-8,2.2334970247736352e-4,1.1768728623398749e-5,-1.288537714386462e-8,2.2371036423718345e-4,1.2159917386077626e-5,-1.2927189221052759e-8,2.2394786325905398e-4,1.2565129918165497e-5,-1.2971236046903973e-8,2.2407012789687003e-4,1.2910776320851335e-5,-1.3009149058543156e-8,2.2412080512659326e-4,1.3138423398335554e-5,-1.3034156281509835e-8,2.2416403518024246e-4,1.3225258584550226e-5,-1.3043432270151873e-8,2.242617193073924e-4,1.31895428771349e-5,-1.303873108036752e-8,2.244545122747121e-4,1.3080514119203897e-5,-1.302529805681681e-8,2.247533541484739e-4,1.2960154137190002e-5,-1.3009918312410972e-8,2.2514149681588606e-4,1.288542370013457e-5,-1.2999015386017868e-8,2.2558304221404233e-4,1.2896057941767493e-5,-1.2997297157850649e-8,2.2603369392279116e-4,1.3009117176953077e-5,-1.3007061790201875e-8,2.264507770082446e-4,1.3219243737167519e-5,-1.3028087674737915e-8,2.2680097981678127e-4,1.3502917845584759e-5,-1.3057987443448877e-8,2.2706512925085745e-4,1.3825112165154655e-5,-1.3092899943215674e-8,2.2723980182644377e-4,1.4146844760246526e-5,-1.312835960370297e-8,2.2733606659061404e-4,1.4432176615984899e-5,-1.316015072754668e-8,2.2737613010144923e-4,1.4653552288310205e-5,-1.3184975709050629e-8,2.2738889061095103e-4,1.4794967275872633e-5,-1.3200846957566375e-8,2.2740539458427508e-4,1.485298630857986e-5,-1.3207200828708261e-8,2.2745491914188558e-4,1.48361020505556e-5,-1.3204810600297655e-8,2.2756189301271438e-4,1.4763163136429955e-5,-1.3195611648549548e-8,2.2774342945347363e-4,1.4661392768367974e-5,-1.318251654013457e-8,2.2800711646406744e-4,1.4564073938727435e-5,-1.3169225227622847e-8,2.2834878588194946e-4,1.4507553748530596e-5,-1.3159958692847593e-8,2.287503519544513e-4,1.4526782542924386e-5,-1.3158983635572145e-8,2.2917872878590236e-4,1.4648464790645952e-5,-1.3169782666393387e-8,2.2958798770619958e-4,1.4881779191418465e-5,-1.3193861131791164e-8,2.2992738155013117e-4,1.5208892056563145e-5,-1.3229487616666131e-8,2.3015629354228862e-4,1.5580637661667213e-5,-1.3271075564489491e-8,2.3026234150305317e-4,1.5924292688085457e-5,-1.331008459441756e-8,2.3027280889853033e-4,1.6165999528322054e-5,-1.3337725131374554e-8,2.3024916735463958e-4,1.6259694822258185e-5,-1.3348408049319169e-8,2.3026415545918469e-4,1.6206222473384533e-5,-1.334196191813377e-8,2.303737207873722e-4,1.6050930760160185e-5,-1.3323325049974134e-8,2.3059936656605264e-4,1.586282236461781e-5,-1.3300188674521488e-8,2.309273397309413e-4,1.5709080036263402e-5,-1.328019137069129e-8,2.3131987266427655e-4,1.5637160807724585e-5,-1.3268952807786755e-8,2.3172978464227394e-4,1.5668110115491378e-5,-1.3269276372437528e-8,2.3211253167230013e-4,1.579838872190477e-5,-1.3281222326984168e-8,2.3243381968418038e-4,1.6005968044664794e-5,-1.3302645758738719e-8,2.326732628860945e-4,1.6257565449448583e-5,-1.3329918467555854e-8,2.3282524674238283e-4,1.651551762610959e-5,-1.3358697686405669e-8,2.3289788056306504e-4,1.674381866600482e-5,-1.3384673664069943e-8,2.3291052997145164e-4,1.6913063406322665e-5,-1.3404220672953126e-8,2.3289032072172143e-4,1.700401500413197e-5,-1.3414875180816028e-8,2.3286803858424185e-4,1.7009620439693355e-5,-1.3415595856352999e-8,2.328739025738482e-4,1.6935397883075238e-5,-1.3406804390503862e-8,2.3293373693946084e-4,1.6798289595216762e-5,-1.3390246403408823e-8,2.3306590757557672e-4,1.6624355851294292e-5,-1.3368746419574027e-8,2.3327907598190837e-4,1.6445739810291813e-5,-1.334591547674048e-8,2.3357067709120252e-4,1.6297106752196225e-5,-1.3325815392409889e-8,2.3392604926032666e-4,1.621152078481189e-5,-1.3312532903507163e-8,2.3431832644508823e-4,1.6215461539974096e-5,-1.3309583151627188e-8,2.3470981296471905e-4,1.6322593851986297e-5,-1.3319074542987742e-8,2.350563586266793e-4,1.6526652827706943e-5,-1.3340700335972787e-8,2.3531635632917516e-4,1.6795606538324656e-5,-1.3370882993466678e-8,2.3546449597391608e-4,1.7071515543042718e-5,-1.3402687449686616e-8,2.3550651143611578e-4,1.7281479296035646e-5,-1.3427194538859864e-8,2.354860662292638e-4,1.736119067195648e-5,-1.3436455207389577e-8,2.354745423562714e-4,1.7282664410910297e-5,-1.3426879119078932e-8,2.3554413988636483e-4,1.7069422488256228e-5,-1.340100684306105e-8,2.3573843359821594e-4,1.678735137254538e-5,-1.3366380140959267e-8,2.3605794175604995e-4,1.6516440745440828e-5,-1.333226482032832e-8,2.364666128436858e-4,1.6321330128306323e-5,-1.3306309980540544e-8,2.369106704107837e-4,1.6235316784717564e-5,-1.329272307712745e-8,2.373372411284009e-4,1.6259841608278305e-5,-1.3292124623119489e-8,2.3770594596677692e-4,1.6372931299750227e-5,-1.3302373390412671e-8,2.37993246071328e-4,1.6539681380754335e-5,-1.3319651568231e-8,2.3819211939730327e-4,1.6721074059761234e-5,-1.3339438365960858e-8,2.3830961030271236e-4,1.6880231173799742e-5,-1.335727306140373e-8,2.3836375681855868e-4,1.6986636247061285e-5,-1.3369334013755532e-8,2.3838035533166568e-4,1.701905501777484e-5,-1.33728675782703e-8,2.383895323005555e-4,1.6967478698558967e-5,-1.3366467989198284e-8,2.38422070556946e-4,1.6834089647268072e-5,-1.3350197399653409e-8,2.3850556570700744e-4,1.6633066038275236e-5,-1.3325545739040455e-8,2.3866072662191243e-4,1.6388979589520194e-5,-1.32952356240298e-8,2.3889832942241776e-4,1.613376763873816e-5,-1.3262897145540119e-8,2.3921726251748584e-4,1.5902571416136462e-5,-1.3232645062727092e-8,2.3960391772207974e-4,1.5728837101970084e-5,-1.3208572512056224e-8,2.4003306897066437e-4,1.5639090729009958e-5,-1.3194159292205045e-8,2.4047031694471747e-4,1.5647770280759835e-5,-1.3191601366742145e-8,2.408763192909911e-4,1.5752441997243236e-5,-1.320109658813078e-8,2.4121332685415593e-4,1.593012198481269e-5,-1.3220221033409507e-8,2.414543324312317e-4,1.6136500786482835e-5,-1.3243695130072412e-8,2.4159379503856346e-4,1.631092961927605e-5,-1.3263965868818756e-8,2.416563493402631e-4,1.6389819439386743e-5,-1.327294423034196e-8,2.416971351728686e-4,1.6327839253466488e-5,-1.3264745691624821e-8,2.4178793488179986e-4,1.611933231700696e-5,-1.323839068662466e-8,2.4199092390150611e-4,1.580664719687679e-5,-1.3198809867441091e-8,2.4233282522947923e-4,1.546635588883893e-5,-1.315515486800695e-8,2.42795161206397e-4,1.5179028049018296e-5,-1.3117189496490207e-8,2.4332560646111933e-4,1.5000197877739287e-5,-1.3091844309906427e-8,2.4386095630435782e-4,1.494730909943296e-5,-1.3081612462610715e-8,2.443476230301867e-4,1.5004081626133282e-5,-1.3084945993000656e-8,2.447521154769013e-4,1.513382584235183e-5,-1.3097713318885834e-8,2.4506227529865664e-4,1.529290726155764e-5,-1.3114741963102495e-8,2.4528352222681816e-4,1.5440210476210758e-5,-1.3130971246521739e-8,2.454337577216843e-4,1.554235342838633e-5,-1.3142157207141877e-8,2.4553879145722154e-4,1.5576059836117717e-5,-1.3145250706278301e-8,2.456286535961741e-4,1.5529165859651303e-5,-1.313858102750454e-8,2.4573440156436537e-4,1.5401067537156352e-5,-1.312192399297445e-8,2.4588495016140917e-4,1.5202739157127264e-5,-1.3096479904399723e-8,2.4610367254958987e-4,1.4956012999883382e-5,-1.3064759078539774e-8,2.4640490122437197e-4,1.4691580503364029e-5,-1.3030343464314749e-8,2.467909300514352e-4,1.444531172938255e-5,-1.299749108332309e-8,2.472503716788958e-4,1.4252978327617077e-5,-1.2970574858005676e-8,2.4775861981413225e-4,1.4143991993889015e-5,-1.2953383025503955e-8,2.482808292580495e-4,1.4135196216785739e-5,-1.2948356913590524e-8,2.4877732410946555e-4,1.4225995061342692e-5,-1.295589775406787e-8,2.492108317402965e-4,1.439598151292376e-5,-1.297390984283666e-8,2.495546496005041e-4,1.4605934664835293e-5,-1.2997753852338253e-8,2.4980058126312243e-4,1.4802976706468473e-5,-1.3020791083393111e-8,2.499648122532091e-4,1.4930522578149964e-5,-1.3035648974352602e-8,2.500889719183307e-4,1.4942625206491755e-5,-1.3036141981384923e-8,2.502332948927713e-4,1.4819937637970325e-5,-1.301942657528763e-8,2.5046053996871437e-4,1.458121681939785e-5,-1.2987549154608683e-8,2.508142835955966e-4,1.4282610184457833e-5,-1.294739872783118e-8,2.513011655620707e-4,1.4000896174505066e-5,-1.2908626141535389e-8,2.5188749805877945e-4,1.3806467779425598e-5,-1.288027326783674e-8,2.5251290861910285e-4,1.3739666020847875e-5,-1.286777210466249e-8,2.531129543478528e-4,1.3801980509944972e-5,-1.2871727408598455e-8,2.5363851477171943e-4,1.3963248403024858e-5,-1.288867324663838e-8,2.5406475771490327e-4,1.4177059797621997e-5,-1.2912910633960826e-8,2.543902585935145e-4,1.4395467555977205e-5,-1.2938351134914312e-8,2.5463093937902145e-4,1.457846819591566e-5,-1.295977796036463e-8,2.54813136638039e-4,1.4698160028561238e-5,-1.2973461632588474e-8,2.54967981581639e-4,1.4739503755468211e-5,-1.2977324579518188e-8,2.551274405562864e-4,1.4699654562096109e-5,-1.2970877284779953e-8,2.5532142348084824e-4,1.4587027197628657e-5,-1.2955077061468487e-8,2.5557518672666003e-4,1.4420380583572636e-5,-1.2932175481281603e-8,2.5590650103593743e-4,1.4227567224019883e-5,-1.2905548350362233e-8,2.5632253366152845e-4,1.4043212860365394e-5,-1.287943866108471e-8,2.568170361656435e-4,1.3904585536052271e-5,-1.285851192094646e-8,2.5736901125437294e-4,1.384542362248093e-5,-1.2847155402873307e-8,2.5794421239109947e-4,1.388843946076878e-5,-1.2848556465930347e-8,2.5850035030317047e-4,1.403829277109537e-5,-1.2863749847957166e-8,2.589956924459188e-4,1.4277505943607658e-5,-1.2890953907157057e-8,2.5939924357184515e-4,1.4567459494134127e-5,-1.2925525776831505e-8,2.596996993209261e-4,1.4855178454192225e-5,-1.2960705554380696e-8,2.5991041763439313e-4,1.5084813281586183e-5,-1.2989066766874659e-8,2.6006856585053105e-4,1.5211326349834672e-5,-1.3004361087109885e-8,2.602278725687631e-4,1.5213126500508729e-5,-1.3003294012197764e-8,2.6044583194747623e-4,1.5100107540589441e-5,-1.2986715711409487e-8,2.607678954750293e-4,1.4913817381501574e-5,-1.2959760458590743e-8,2.6121309337834975e-4,1.471789554231206e-5,-1.2930675613196354e-8,2.617666739936158e-4,1.4580147819581488e-5,-1.2908507750034461e-8,2.623838952785086e-4,1.4551998820653167e-5,-1.2900372867353652e-8,2.6300436611455946e-4,1.465364176688067e-5,-1.2909389577639032e-8,2.6357084573760297e-4,1.4871017273617807e-5,-1.293411963262422e-8,2.640443869669923e-4,1.5164543154651873e-5,-1.2969586613798102e-8,2.64410737769705e-4,1.548385098723045e-5,-1.3009177614068972e-8,2.6467821443590807e-4,1.5781554620764703e-5,-1.304650817055167e-8,2.648707916531887e-4,1.602193715049497e-5,-1.3076659266674922e-8,2.650204220774552e-4,1.6184189121099728e-5,-1.309668323525758e-8,0.00026516090400317593,1.626199634794566e-5,-1.3105583832666333e-8,2.653238016446657e-4,1.626157432670227e-5,-1.3104045518856175e-8,2.6553584872296177e-4,1.619953400725645e-5,-1.3094120073806924e-8,2.6581694404772865e-4,1.6101034287601604e-5,-1.3078966785871532e-8,2.6617803512994057e-4,1.599792643257314e-5,-1.3062635061321467e-8,2.666186743112128e-4,1.5926127147520803e-5,-1.3049789195619948e-8,2.671247177812508e-4,1.5921303481340893e-5,-1.3045222202262528e-8,2.6766743265218185e-4,1.6012313493671894e-5,-1.3053032308258361e-8,2.682058449019524e-4,1.6212993883764293e-5,-1.3075494404843321e-8,2.6869381754198406e-4,1.6514662380160417e-5,-1.3111934310112453e-8,2.690915392547794e-4,1.688312459406304e-5,-1.3158158531168263e-8,2.693782808806831e-4,1.726356887424719e-5,-1.3206971608799833e-8,2.695612194819721e-4,1.7593764377538284e-5,-1.3249899145305468e-8,2.696757969225932e-4,1.7821710710339604e-5,-1.3279603194733367e-8,2.697766262792751e-4,1.7921174890309415e-5,-1.3292069257397106e-8,2.699221571586634e-4,1.7899381168918985e-5,-1.3287759748585721e-8,2.701585140051222e-4,1.7794662659770487e-5,-1.3271427248333769e-8,2.7050743193193414e-4,1.7665574219650932e-5,-1.3250774476406711e-8,2.70961263500747e-4,1.7575149467220522e-5,-1.3234415117476824e-8,2.714859046544607e-4,1.7574737909080554e-5,-1.3229680863399421e-8,2.7203052331977687e-4,1.769170100835547e-5,-1.324083414757745e-8,2.7254117585821244e-4,1.7924189075479015e-5,-1.3268167506586092e-8,2.729741997691505e-4,1.8244128847031433e-5,-1.3308232751599827e-8,2.733054105239225e-4,1.860683481743521e-5,-1.335506308671976e-8,2.7353289682521516e-4,1.896345349760831e-5,-1.3401893664246537E-08,2.73673842637392e-4,1.9271996265799993e-5,-1.3442759869942829e-8,2.737578282615282e-4,1.9504213337008058e-5,-1.3473535503050086e-8,2.738194967147241e-4,1.9647848480923535e-5,-1.3492301040760689e-8,2.7389256852830313e-4,1.9705491001702175e-5,-1.3499197079042159e-8,2.740058704701865e-4,1.9691777654711647e-5,-1.3496023246278775e-8,2.741810262902575e-4,1.9630334079578346e-5,-1.3485807494797274e-8,2.744310131178127e-4,1.9551058078948304e-5,-1.347245824705066e-8,2.747588655876082e-4,1.948759434125028e-5,-1.3460484076347776e-8,2.7515620852405575e-4,1.9474357175009086e-5,-1.3454669802832967e-8,2.7560192124283077e-4,1.954221941430565e-5,-1.3459536895858992e-8,2.760620815654129e-4,1.9712188518429024e-5,-1.3478446229307413e-8,2.764931140341487e-4,1.998747860898367e-5,-1.3512381587099931e-8,2.768499825458415e-4,2.0346447047745347e-5,-1.3558791588758346e-8,2.7709934818909317e-4,2.0740975236487897e-5,-1.3611211001438215e-8,2.7723376707050325e-4,2.1104902391710272e-5,-1.3660381144345922e-8,2.7727951721184677e-4,2.1372977512600064e-5,-1.3696942301516698e-8,2.7729156569639065e-4,2.150364337470411e-5,-1.371469511192883e-8,2.7733590146886866e-4,2.1494482605572527e-5,-1.3712813986364758e-8,2.7746730910535865e-4,2.1382407878183956e-5,-1.3695935779833347e-8,2.777129170467314e-4,2.1229571564400812e-5,-1.3672319050985458e-8,2.7806720281447627e-4,2.1102980963536406e-5,-1.3651166775522754e-8,2.7849753778370835e-4,2.105639774177976e-5,-1.3640203101975407e-8,2.7895571606205595e-4,2.1119312740397868e-5,-1.36440855384151e-8,2.7939082054513723e-4,2.129380639205303e-5,-1.3663777942921247e-8,2.797602560487331e-4,2.155785003144518e-5,-1.3696778046641539e-8,2.8003725820557e-4,2.1872858482824725e-5,-1.3738005196123418e-8,2.802142004107094e-4,2.219328394309847e-5,-1.3781099702460829e-8,2.8030175709160225e-4,2.2476143948988695e-5,-1.381982555271776e-8,2.8032472939190016e-4,2.268859947612066e-5,-1.3849251125167231e-8,2.803159812312574e-4,2.2812371570131774e-5,-1.386647093141835e-8,2.803101183459111e-4,2.2844791364820303e-5,-1.387080182051307e-8,2.8033821087907477e-4,2.2797146171930603e-5,-1.3863552789390385e-8,2.8042420340903043e-4,2.2691458727297488e-5,-1.3847561307081722e-8,2.8058292600206835e-4,2.2556824850266946e-5,-1.3826691726476474e-8,2.8081916298474405e-4,2.2425953925453616e-5,-1.3805403994071266e-8,2.8112721903985157e-4,2.2331951025042324e-5,-1.3788383591687185e-8,2.8149066344888076e-4,2.2304951530066296e-5,-1.3780134438421739e-8,2.8188238547674434e-4,2.2367947560152177e-5,-1.3784386060479597e-8,2.822658721965546e-4,2.2531246589409013e-5,-1.380320444288144e-8,2.8259936195518845e-4,2.278597036190299e-5,-1.38358812243578e-8,2.828444569445365e-4,2.3098866508920356e-5,-1.3877999412904191e-8,2.82979105364523e-4,2.341279564136978e-5,-1.3921401485040897e-8,2.8301103748081484e-4,2.3657751771110462e-5,-1.3955814384309308e-8,2.8298340770177647e-4,2.37731328817469e-5,-1.3972176264270338e-8,2.8296484207766603e-4,2.3733029889624773e-5,-1.3966353021702428e-8,2.830249037760498e-4,2.3559828091315065e-5,-1.3941085550751729e-8,2.832073180871705e-4,2.331632681640619e-5,-1.3904875495648811e-8,2.8351576155621184e-4,2.308077284889224e-5,-1.3868553787955135e-8,2.8391769853862014e-4,2.2919547763551398e-5,-1.384157822144315e-8,2.8436019434869387e-4,2.287017449835268e-5,-1.3829694080640847e-8,2.847876469600927e-4,2.2937814065198065e-5,-1.3834319348602738e-8,2.8515485284144533e-4,2.3101223801610495e-5,-1.3853146215244e-8,2.85433793371567e-4,2.332264590269975e-5,-1.3881308460203237e-8,2.856153143340677e-4,2.3557815709961442e-5,-1.3912679492992264e-8,2.857074693224336e-4,2.3764383273789843e-5,-1.3941085356826256e-8,2.8573186713930584e-4,2.390828726211465e-5,-1.3961325891680267e-8,2.857188696819171e-4,2.39679560926046e-5,-1.3969911360196299e-8,2.8570231452007376e-4,2.3936257400670855e-5,-1.3965439487283113e-8,2.857144182944666e-4,2.382028199606721e-5,-1.394860030825303e-8,2.8578147687363805e-4,2.3639260037550102e-5,-1.3921869960500952e-8,2.8592084201393037e-4,2.342114432945347e-5,-1.3889012634409748e-8,2.8613931356911184e-4,2.3198585473751224e-5,-1.3854531958188717e-8,2.864327166543551e-4,2.3004883616430312e-5,-1.3823159470958645e-8,2.867863494363946e-4,2.2870125806672398e-5,-1.3799380523453057e-8,2.8717609388622425e-4,2.2817452101605205e-5,-1.378693317459741e-8,2.8757018441867614e-4,2.2859200077940465e-5,-1.378819562942302e-8,2.8793216925267906e-4,2.2992674449651844e-5,-1.3803413833910311e-8,2.8822619040308e-4,2.3196048522297792e-5,-1.3829891060439484e-8,2.8842548394305867e-4,2.3426397377221117e-5,-1.386152544402009e-8,2.885234854253173e-4,2.362330839766609e-5,-1.3889296541301406e-8,2.885438986592403e-4,2.3721722641275258e-5,-1.3903263102308176e-8,2.885424114376653e-4,2.3674183477913317e-5,-1.3896003696172715e-8,2.885929118709168e-4,2.3474313471584593e-5,-1.3866152311867126e-8,2.8875979009874574e-4,2.316637368653028e-5,-1.3819777847051538e-8,2.890704395776163e-4,2.283074746827438e-5,-1.3768264842029872e-8,2.895049885128943e-4,2.2551813469805068e-5,-1.3723757443181604e-8,2.900082669629545e-4,2.2387357101861408e-5,-1.3694865214262721e-8,2.9051374253208817e-4,2.235489612947439e-5,-1.36846867449533e-8,2.909649021340734e-4,2.2436103025525936e-5,-1.3691271872221072e-8,2.9132650488845045e-4,2.2590621258034392e-5,-1.3709370985045623e-8,2.9158637691061105e-4,2.2770429252790272e-5,-1.3732329579321405e-8,2.917517969683068e-4,2.2930448877807925e-5,-1.3753577653967498e-8,2.9184401188628566e-4,2.303489006955536e-5,-1.3767628184703838e-8,2.918927671925494e-4,2.3060445344766418e-5,-1.3770682898745772e-8,2.919314014291164e-4,2.299749274559909e-5,-1.3760937852867262e-8,2.9199247847638013e-4,2.2849926468667013e-5,-1.3738629102849638e-8,2.921039092862608e-4,2.2633834466347406e-5,-1.370584503210565e-8,2.92285666948327e-4,2.2375057960451114e-5,-1.3666144851793793e-8,2.925473850976914e-4,2.2105676829510934e-5,-1.3624037426111123e-8,2.9288716836903646e-4,2.185972836237773e-5,-1.3584395520403735e-8,2.93291734444017e-4,2.1668667070356885e-5,-1.355186975838904e-8,2.937378250344291e-4,2.1556973898122735e-5,-1.3530315087571015e-8,2.941947974500097e-4,2.1538210800188506e-5,-1.3522214675142932e-8,2.9462828965697827e-4,2.161178421989162e-5,-1.3528102494893166e-8,2.950049836659742e-4,2.176062612107966e-5,-1.3546028771640402e-8,2.9529877895283186e-4,2.1950341406551685e-5,-1.3571220417731373e-8,2.95498425036084e-4,2.2131299035723218e-5,-1.3596256341667975e-8,2.956153580837951e-4,2.22458472466366e-5,-1.361215968484941e-8,2.9568840667843486e-4,2.224225736534045e-5,-1.3610641296881544e-8,2.957800686939963e-4,2.2093977823393965e-5,-1.3587181550703598e-8,2.9595999348482825e-4,2.181678085271199e-5,-1.3543713834794471e-8,2.9627849161117025e-4,2.1471574018712877e-5,-1.3489060449153417e-8,2.9674319322068856e-4,2.1145294614123724e-5,-1.343609251827474e-8,2.9731425733706953e-4,2.09172161107864e-5,-1.3396774613550436e-8,2.9792187015270356e-4,2.082994835974585e-5,-1.3377886272534408e-8,2.984942122206886e-4,2.0880413673918396e-5,-1.3379586077781747e-8,2.989796522647844e-4,2.1030612573302552e-5,-1.3396809617098212e-8,2.993552928593664e-4,2.1226817991504233e-5,-1.3421929704689853e-8,2.9962420917402626e-4,2.141632957853267e-5,-1.3447160232838052e-8,2.998076048709863e-4,2.155742331817498e-5,-1.3466074608348756e-8,2.999366508951447e-4,2.162322261659597e-5,-1.3474303011588651e-8,3.0004605342871587e-4,2.160194083120627e-5,-1.3469704117491014e-8,3.001694758979349e-4,2.1495566477339442e-5,-1.3452259987949643e-8,3.003361714790454e-4,2.131801033581268e-5,-1.34238210598226e-8,3.00568250260884e-4,2.109291783629834e-5,-1.3387751649168571e-8,3.0087835205456256e-4,2.0850953582104578e-5,-1.3348491679679161e-8,3.012678716217725e-4,2.062624812724149e-5,-1.3311032550608233e-8,3.0172620046434173e-4,2.045193589878053e-5,-1.3280308792564854e-8,3.0223147737772435e-4,2.0355180263715515e-5,-1.3260534503027968e-8,3.027530905670879e-4,2.03523675046193e-5,-1.3254528922034592e-8,3.0325589739471393e-4,2.0445234386801097e-5,-1.326309141038214e-8,3.0370584098537583e-4,2.061873537337817e-5,-1.3284535301274032e-8,3.0407635475241393e-4,2.084132023298335e-5,-1.3314523112149486e-8,3.043548220950259e-4,2.106807932262644e-5,-1.334635951759101e-8,3.0454817712909907e-4,2.1247259597402573e-5,-1.337190847136496e-8,3.0468606841306306e-4,2.1330590886984806e-5,-1.338324729373875e-8,3.048190993710789e-4,2.1286814653441683e-5,-1.337492842426596e-8,3.0500947292813136e-4,2.1115405047104646e-5,-1.3346293728374482e-8,3.0531334240780847e-4,2.0854333144826318e-5,-1.330280661991811e-8,3.0575933228971686e-4,2.057446009779354e-5,-1.3255246543245369e-8,3.063336126043048e-4,2.035786012500672e-5,-1.3216390908366007e-8,3.0698195437051866e-4,2.0267933422058764e-5,-1.3196404367399528e-8,3.076297906607286e-4,2.0326989761099988e-5,-1.3199302777510673e-8,3.0820929098613465e-4,2.051301152374637e-5,-1.3222284594361782e-8,3.086790667643346e-4,2.0774250916837253e-5,-1.3257795354211066e-8,3.0902959140693113e-4,2.1050411845724763e-5,-1.3296685507824527e-8,3.0927719251130383e-4,2.1289582840270976e-5,-1.3330825505471842e-8,3.0945357058928e-4,2.145674944124067e-5,-1.33545105445674e-8,3.095961699201846e-4,2.153531284308726e-5,-1.3364818313685573e-8,3.0974146708267824e-4,2.152488868920895e-5,-1.3361368767381744e-8,3.0992097203242546e-4,2.1438017800151246e-5,-1.3345858365688848e-8,3.1015887202686857e-4,2.1297039816659653e-5,-1.3321563576426557e-8,3.1047036154725256e-4,2.1131275414374563e-5,-1.3292871575557973e-8,3.1086020309551777e-4,2.0974113615666323e-5,-1.3264820449894448e-8,0.00031132159469673937,2.0859458460963544e-5,-1.3242589706398116e-8,3.118358892299663e-4,2.08172018406579e-5,-1.3230876462418405e-8,3.123739556176808e-4,2.0867961619606607e-5,-1.3233145002595053e-8,3.1289980273878425e-4,2.1017999708571363e-5,-1.3250835029635484e-8,3.133765322075633e-4,2.1255710514705023e-5,-1.3282711917019378e-8,3.1377389441996034e-4,2.1551170659549085e-5,-1.332461455740315e-8,3.1407592571305155e-4,2.1859774047728385e-5,-1.3369828669154369e-8,3.1428671803730246e-4,2.212997996013805e-5,-1.3410177045357869e-8,3.14432506824964e-4,2.2314131680739853e-5,-1.3437721540724634e-8,3.1455876362506394e-4,2.2380463429616143e-5,-1.3446783871977407e-8,3.1472170043465105e-4,2.2323641852085563e-5,-1.3435813847370838e-8,3.1497476110345693e-4,2.217044112756572e-5,-1.3408494160108003e-8,3.153526234579617e-4,2.1976994096751363e-5,-1.337345682081832e-8,3.1585774444304715e-4,2.1815602165497123e-5,-1.3342262745022897e-8,3.1645594131746787e-4,2.1753230588716412e-5,-1.332596859353312e-8,3.170852855440563e-4,2.1829339986754936e-5,-1.3331486306519194e-8,3.1767609064744373e-4,2.204329336795916e-5,-1.335938578246327e-8,3.1817307131503856e-4,2.2357437282565592e-5,-1.3404182809004631e-8,3.185496252597622e-4,2.2713150253212193e-5,-1.3456770258106373e-8,3.188097318692035e-4,2.305068096859074e-5,-1.350756753269062e-8,3.1898017607109944e-4,2.3324049974074164e-5,-1.3548973772346303e-8,3.1909924742474843e-4,2.3507561072834535e-5,-1.3576520061523686e-8,3.192068961684871e-4,2.359541331330978e-5,-1.3588911123510958e-8,3.1933831976116504e-4,2.3597783076813762e-5,-1.358746123971623e-8,3.1952065880791903e-4,2.3536160980096142e-5,-1.3575362908229614e-8,3.19771579080949e-4,2.3439311888661372e-5,-1.3557025218592592e-8,3.200985885643759e-4,2.3340011786561243e-5,-1.3537543756519094e-8,3.2049846336595103e-4,2.3272031254568778e-5,-1.3522245412330314e-8,3.2095680118528186e-4,2.3266656684082567e-5,-1.3516194501257755e-8,3.214482960990994e-4,2.3348264536126095e-5,-1.3523546070473995e-8,3.219387035953197e-4,2.352905494166589e-5,-1.3546710031825095e-8,3.2238945173181284e-4,2.3803973484541637e-5,-1.3585453917150966e-8,3.2276517284783867e-4,2.414782235178386e-5,-1.3636274656717374e-8,3.2304300787259485e-4,2.4516917684648338e-5,-1.369247871891746e-8,3.2322093588827404e-4,2.4856694790520883e-5,-1.374527463790208e-8,3.2332167991338466e-4,2.5114409674883268e-5,-1.3785796286515207e-8,3.233897052011945e-4,2.525357146846435e-5,-1.3807516666649438e-8,3.2348120921461983e-4,2.5265406266578555e-5,-1.3808261001094046e-8,3.2364963922767976e-4,2.5173284625345988e-5,-1.3791120413398418e-8,3.2393091613960477e-4,2.5028248522414485e-5,-1.3763924450587002e-8,3.243327110819311e-4,2.489645279708152e-5,-1.3737355303383892e-8,3.2483114194985555e-4,2.4841661933600615e-5,-1.3722151158493351e-8,3.253764637315329e-4,2.4907661106982096e-5,-1.3726145974744325e-8,3.2590667505080653e-4,2.5106163518978407e-5,-1.3752074004335538e-8,3.263648743232834e-4,2.5414592771149465e-5,-1.3796943801410434e-8,3.267142644419916e-4,2.5784562274762126e-5,-1.3853232512079237e-8,3.2694560655390203e-4,2.6157379978950974e-5,-1.3911368702242648e-8,3.2707552207375036e-4,2.64802029079398e-5,-1.3962446344578679e-8,3.2713809920406574e-4,2.6717260951139974e-5,-1.4000191368277358e-8,3.2717430412455535e-4,2.685395991046812e-5,-1.4021757723105099e-8,3.272230250199076e-4,2.6895095773412356e-5,-1.4027518182301305e-8,3.273154328546555e-4,2.6859988741622723e-5,-1.4020303863838187e-8,3.27472427946398e-4,2.6777052624059808e-5,-1.4004517409235265e-8,3.2770404819257206e-4,2.667917357422416e-5,-1.3985374637999391e-8,3.2800968800751206e-4,2.6600135622202087e-5,-1.396833964272351e-8,3.283784197698704e-4,2.65715822213231e-5,-1.3958675851617953e-8,3.2878934377281676e-4,2.661975357857392e-5,-1.3960963251046796e-8,3.2921252136175277e-4,2.6761429111553565e-5,-1.397844020247438e-8,3.2961152402647006e-4,2.699907821559547e-5,-1.4012129808211943e-8,3.29948753915105e-4,2.7316263206531952e-5,-1.4059921868231094e-8,3.3019401009220286e-4,2.7675690266479282e-5,-1.4116060189696021e-8,3.303348983515174e-4,2.8023052525526852e-5,-1.417164175112956e-8,3.303851664433875e-4,2.8298564869411255e-5,-1.4216501609523993e-8,3.303858174704456e-4,2.845434313568276e-5,-1.4242167403395092e-8,3.303959416014983e-4,2.847131185450436e-5,-1.424477933710207e-8,3.304753311960585e-4,2.8367701265917583e-5,-1.4226626167552076e-8,3.3066574499633107e-4,2.8194592527739406e-5,-1.4195561924860455e-8,3.3097847333721307e-4,2.8020371048836455e-5,-1.4162617817120332e-8,3.3139229136450047e-4,2.7910733393913838e-5,-1.4138840614943994e-8,3.318610576038761e-4,2.7911418740544573e-5,-1.4132437583694847e-8,3.32327158660616e-4,2.8038257552148033e-5,-1.4146944421067845e-8,3.3273630146328536e-4,2.8275956095937735e-5,-1.4180721826563061e-8,3.3304982043797914e-4,2.8584590280257757e-5,-1.4227750741366778e-8,3.332518772704476e-4,2.8911198090895583e-5,-1.4279413650778645e-8,3.3335044303321585e-4,2.9203016014443303e-5,-1.4326720121414798e-8,3.3337264600420897e-4,2.9418844303718548e-5,-1.4362340255230543e-8,3.333565716870711e-4,2.953593528593423e-5,-1.438192328577023e-8,3.333423100299153e-4,2.955156240787833e-5,-1.4384490907506754e-8,3.333646227280616e-4,2.9480245799448394e-5,-1.4372041376989542e-8,3.3344841055820307e-4,2.9348582447400512e-5,-1.434870041016347e-8,3.3360692534264394e-4,2.9189588504290738e-5,-1.4319770705147037e-8,3.338418939605668e-4,2.903780052882538e-5,-1.429092220642219e-8,3.341445478842576e-4,2.8925502238673784e-5,-1.4267598983776846e-8,3.3449686902692956e-4,2.8879716510260736e-5,-1.4254567192028621e-8,3.34872893630502e-4,2.8919305085978387e-5,-1.4255452413328958e-8,3.3524046998712566e-4,2.905162633610626e-5,-1.4272125495191893e-8,3.3556438983591447e-4,2.926868042533546e-5,-1.4303906971243346e-8,3.358120415655983e-4,2.9543700862908523e-5,-1.4346787820191492e-8,3.359620973953016e-4,2.9830621885824582e-5,-1.4393165436296007e-8,3.3601476557872876e-4,3.0069847654572008e-5,-1.4432765793470925e-8,3.3599911919222826e-4,3.020259394749606e-5,-1.4455159337401374e-8,3.3597110300592314e-4,3.019141034190686e-5,-1.4453385307179457e-8,3.35998526488256e-4,3.00380349093956e-5,-1.4427081304578546e-8,3.3613729850181856e-4,2.9787423935761663e-5,-1.4383225010504009e-8,3.3641053011372276e-4,2.9513350056419022e-5,-1.4333808242876725e-8,3.368014006431015e-4,2.9292449987817804e-5,-1.4291641185111276e-8,3.3726185452744576e-4,2.9179980574871958e-5,-1.4266408426820145e-8,3.377303740186198e-4,2.9197037823386694e-5,-1.4262469364142498e-8,3.3814986945613203e-4,2.9330730888683372e-5,-1.427863436126763e-8,3.3848010158714516e-4,2.9543115154846164e-5,-1.4309336642064932e-8,3.38703273259897e-4,2.9783603206552747e-5,-1.4346471770152776e-8,3.388238715787891e-4,3.0001002317025725e-5,-1.4381352417660723e-8,3.388645512106792e-4,3.015313826145052e-5,-1.4406430035573901e-8,3.388596992978482e-4,3.0213214891368453e-5,-1.441656210821404e-8,3.388480896868653e-4,3.0172579589435465e-5,-1.4409671063513486e-8,3.3886595201610624e-4,3.0040010984943417e-5,-1.4386745775937594e-8,3.389415616773652e-4,2.983826465857231e-5,-1.435129353309962e-8,3.3909197448769624e-4,2.9599024245251944e-5,-1.4308467177209232e-8,3.393219732788287e-4,2.935743690567301e-5,-1.4264115645959442e-8,3.396247872186201e-4,2.9147198599977515e-5,-1.4223960274082391e-8,3.3998384944594585e-4,2.8996680396776103e-5,-1.419298232822601e-8,3.4037497978542483e-4,2.8925994092867653e-5,-1.4174970094013113e-8,3.4076876816749476e-4,2.8944576739562157e-5,-1.4172101451461987e-8,3.4113333363185183e-4,2.9048903134653624e-5,-1.4184452613283302e-8,3.4143806830900614e-4,2.9220259014859665e-5,-1.4209426481068721e-8,3.416592313159679e-4,2.942335957385573e-5,-1.4241300071719586e-8,3.4178768959361645e-4,2.9607879560626548e-5,-1.4271351102299056e-8,3.418373350901813e-4,2.971582378240197e-5,-1.4289150939638257e-8,3.4184996084014505e-4,2.9696727082961728e-5,-1.4285356690807156e-8,3.418902633601011e-4,2.952827110856552e-5,-1.425546855762454e-8,3.420270707706498e-4,2.9232745927517535e-5,-1.4202771104298555e-8,3.4230607491550166e-4,2.8876464783064984e-5,-1.4138250014917669e-8,3.4272891522547444e-4,2.8547270391760742e-5,-1.4076783978948293e-8,3.432521860159393e-4,2.8320914566404532e-5,-1.4031512125887654e-8,3.4380643577638096e-4,2.8235399587572567e-5,-1.4009518407800017e-8,3.4432227839255926e-4,2.8284922903914585e-5,-1.4010681330376893e-8,3.4474989405392577e-4,2.8430706232186193e-5,-1.4029244458375631e-8,3.450667007921132e-4,2.8618389049455682e-5,-1.405649452639386e-8,3.4527564357985356e-4,2.879355388007985e-5,-1.4083250375345564e-8,3.453987654829163e-4,2.8912049121438285e-5,-1.4101646097180218e-8,3.45469585268103e-4,2.894525815503267e-5,-1.4106194425210915e-8,3.4552604642457406e-4,2.8881730901118583e-5,-1.4094281874326899e-8,3.4560455047242703e-4,2.8726431535401165e-5,-1.4066215283106948e-8,3.457351529958053e-4,2.84982490045257e-5,-1.4024875511406945e-8,3.459380666037131e-4,2.8226171437823553e-5,-1.397505116091795e-8,3.462216637718113e-4,2.794459723979762e-5,-1.3922581182171141e-8,3.4658209986642525e-4,2.7688322235778394e-5,-1.3873458405560078e-8,3.4700449561030034e-4,2.748781270498401e-5,-1.3833031101689292e-8,3.474653304988083e-4,2.7365322208472776e-5,-1.3805386540778746e-8,3.479355692431911e-4,2.7332084280176915e-5,-1.3792904236856692e-8,3.483841987506852e-4,2.738651159118678e-5,-1.3795909548384521e-8,3.48782076015223e-4,2.7513276120753096e-5,-1.3812375954175199e-8,3.4910623716508923e-4,2.768327317176719e-5,-1.3837706596348546e-8,3.493450066374296e-4,2.785497909947437e-5,-1.3864767635512509e-8,3.4950380428156456e-4,2.7978582520697178e-5,-1.388452258098352e-8,3.496101796449104e-4,2.800470747307293e-5,-1.3887648902006153e-8,3.4971470295323565e-4,2.7898579782032046e-5,-1.3867255990212172e-8,3.498829672228969e-4,2.7657103890016168e-5,-1.3822133605209417e-8,3.5017591926531956e-4,2.7320571946380355e-5,-1.375894735333673e-8,3.5062370726759935e-4,2.6967510508779796e-5,-1.3691352108885298e-8,3.512076836751679e-4,2.668829415482261e-5,-1.3635359280006073e-8,3.518645594543916e-4,2.6549168451208284e-5,-1.3603044848274974e-8,3.525120860381075e-4,2.6567976763254272e-5,-1.359825241655584e-8,3.530801471377777e-4,2.671440633051558e-5,-1.3616465703002289e-8,3.5353016455276417e-4,2.692942938290615e-5,-1.3647971513994665e-8,3.538577002956241e-4,2.7148881753446637e-5,-1.3681795510084634e-8,3.540840771794443e-4,2.7320151877578618e-5,-1.3708567939664234e-8,3.542449634789241e-4,2.740961864282937e-5,-1.372191839944505e-8,3.543805993034693e-4,2.7403434203548572e-5,-1.3718799059739425e-8,3.545289983413223e-4,2.730498627401825e-5,-1.3699233288566783e-8,3.547216624954893e-4,2.7131303055044464e-5,-1.366581028187246e-8,3.5498087228620824e-4,2.690928730173587e-5,-1.3623050830270064e-8,3.5531797095255416e-4,2.6671814970846222e-5,-1.3576675347345746e-8,3.557325408326314e-4,2.6453572621222732e-5,-1.3532810617513158e-8,3.562126332903402e-4,2.628664184351773e-5,-1.3497191162436568e-8,3.5673629776197384e-4,2.619610347960688e-5,-1.3474416118620455e-8,3.5727449108908464e-4,2.6196233744873596e-5,-1.3467331827186608e-8,3.577951171362706e-4,2.628789151186731e-5,-1.3476583429700484e-8,3.582677504977914e-4,2.6457485603445368e-5,-1.3500355686777276e-8,3.5866856083210973e-4,2.667773719840518e-5,-1.3534335889835297e-8,3.58984983565573e-4,2.691031135287597e-5,-1.3571967951946276e-8,3.592197788921785e-4,2.7110381522096033e-5,-1.3605104433755066e-8,3.5939395836391525e-4,2.723347733466807e-5,-1.3625211838772243e-8,3.5954731475294516e-4,2.7245005640118063e-5,-1.3625233122092842e-8,3.5973439287282456e-4,2.7131819567977223e-5,-1.3601941703224978e-8,3.600135954575884e-4,2.6912915110491107e-5,-1.355814290805302e-8,3.60429073295564e-4,2.664325075241653e-5,-1.3503526756102676e-8,3.60990418920039e-4,2.64034696792908e-5,-1.3452835801158697e-8,3.6166146352094975e-4,2.6273775898966717e-5,-1.3421074493356377e-8,3.623688032765512e-4,2.630225709809558e-5,-1.3417659611230746e-8,3.6302889191182174e-4,2.6485921915614753e-5,-1.3442821004948017e-8,3.635787000997205e-4,2.6775836053406942e-5,-1.3488337737398986e-8,3.6399313254539714e-4,2.7100845265447172e-5,-1.3541675775041822e-8,3.6428387361378935e-4,2.739386253867796e-5,-1.3590675845310196e-8,3.644865074909421e-4,2.7608376878739416e-5,-1.3626575377250361e-8,3.6464576613601913e-4,2.7723005292816395e-5,-1.364495582745406e-8,3.6480461555127395e-4,2.77383404850266e-5,-1.3645341642181487e-8,3.6499818740537e-4,2.76710053685678e-5,-1.3630271402829668e-8,3.6525122259954397e-4,2.754788664050142e-5,-1.360432815008887e-8,3.6557730310316335e-4,2.7401492817728636e-5,-1.357329062063108e-8,3.659787553882458e-4,2.72661665993695e-5,-1.3543394730429565e-8,3.6644689750384423e-4,2.7174555417879994e-5,-1.352065178127914e-8,3.669628241382334e-4,2.7153908983776746e-5,-1.3510179030065285e-8,3.674992016602788e-4,2.7222166045638933e-5,-1.3515526234079713e-8,3.68023539090487e-4,2.73843521332642e-5,-1.3538046023492725e-8,3.685030041719975e-4,2.7630228716345682e-5,-1.357642629855776e-8,3.689102801263324e-4,2.793415315314418e-5,-1.362653567100988e-8,3.692294796808659e-4,2.825781083626839e-5,-1.368173224189925e-8,3.694608523244996e-4,2.8555916027981706e-5,-1.3733727733496358e-8,3.6962307871807993e-4,2.8784249160797294e-5,-1.3773978177336275e-8,3.697522993353289e-4,2.8908903102290343e-5,-1.3795451641862713e-8,3.6989731803456434e-4,2.8915385836666257e-5,-1.3794521381371401e-8,3.701106527110447e-4,2.8815745762559872e-5,-1.3772576532502819e-8,3.704358354453675e-4,2.8651045702873957e-5,-1.3736749819577554e-8,3.7089307273516974e-4,2.8486040803253674e-5,-1.369908367506479e-8,3.714679608227572e-4,2.8394043726751596e-5,-1.3673710854101186e-8,3.7210991213757036e-4,2.843405066778115e-5,-1.3672440108961631e-8,3.7274498490128303e-4,2.8628554579815174e-5,-1.3700371291720451e-8,3.733002400374539e-4,2.8953884905579092e-5,-1.375383654447321e-8,3.737283127161456e-4,2.934966667201483e-5,-1.3821992572909582e-8,3.74019840199307e-4,2.9742318752869464e-5,-1.3891158565206442e-8,3.741996113300426e-4,3.0069483883304552e-5,-1.3949424588473654e-8,3.743121974552402e-4,3.0294519375517385e-5,-1.3989456769194334e-8,3.7440629029591007e-4,3.0408720943630665e-5,-1.4009040575435913e-8,3.745237271452724e-4,3.042555417326966e-5,-1.4010137999684472e-8,3.7469432233555345e-4,3.0372415163084517e-5,-1.399745265579277e-8,3.7493481407911624e-4,3.0283392801809747e-5,-1.3977121315336288e-8,3.7524974009757705e-4,3.0194074963467853e-5,-1.3955729687359219e-8,3.7563276072333213e-4,3.013796030115297e-5,-1.3939607838651707e-8,3.7606789752317216e-4,3.014358067755694e-5,-1.3934276197156442e-8,3.765308715945007e-4,3.0231593508346177e-5,-1.394391327502817e-8,3.769911447976581e-4,3.0411553226949515e-5,-1.3970762499094855e-8,3.774153866080384e-4,3.067874957136116e-5,-1.4014505540693484e-8,3.7777276900158004e-4,3.101223988098575e-5,-1.4071785355970582e-8,3.780416881621932e-4,3.137561973052833e-5,-1.4136185048005719e-8,3.782164562994042e-4,3.1721813892388676e-5,-1.4198962795870701e-8,3.7831168136817563e-4,3.2002044707192615e-5,-1.4250643304019193e-8,3.7836207867593326e-4,3.2177378338159576e-5,-1.4283213281041604e-8,3.784166470845473e-4,3.222972568760059e-5,-1.4292338201740607e-8,3.7852801727424653e-4,3.216882097511682e-5,-1.4278915068388991e-8,3.7873941235653586e-4,3.2032643792585974e-5,-1.4249424676350356e-8,3.7907250187723524e-4,3.1880386191779476e-5,-1.4214835935159804e-8,3.79519524138801e-4,3.1778859253417956e-5,-1.4188143257430748e-8,3.800425591675725e-4,3.1785057707013906e-5,-1.4180988668013144e-8,3.8058155833472476e-4,3.192941802742809e-5,-1.420023019579586e-8,3.810702007095623e-4,3.220552703223705e-5,-1.424564138430845e-8,3.814550608339061e-4,3.257118968284767e-5,-1.4309824655516338e-8,3.8171088610531375e-4,3.2961679962287354e-5,-1.4380610992098202e-8,3.818457030615165e-4,3.3310117296884816e-5,-1.444499449135639e-8,3.8189440825249304e-4,3.356630414228731e-5,-1.4492871054400158e-8,3.8190518456659355e-4,3.3706990005561714e-5,-1.4519156100786139e-8,3.8192545511999565e-4,3.3735939536645784e-5,-1.4523932873023375e-8,0.00038199221663132935,3.36770574780388e-5,-1.4511243699103591e-8,3.8212794959808886e-4,3.356532850735636e-5,-1.44874232515469e-8,3.8234068283503006e-4,3.3438964212912564e-5,-1.445961632653455e-8,3.826260695837975e-4,3.333397058547786e-5,-1.4434725361888601e-8,3.8296985541619517e-4,3.328078604508245e-5,-1.4418750654133305e-8,3.8335002714571484e-4,3.3302014460873146e-5,-1.441635218389012e-8,3.837387391287661e-4,3.341034772114456e-5,-1.4430449062814374e-8,3.841046361875188e-4,3.3606223967194986e-5,-1.4461732780659432e-8,3.844163948873668e-4,3.3875453388444264e-5,-1.4508108409027856e-8,3.846481026697538e-4,3.4187920503036706e-5,-1.4564283527851176e-8,3.8478626988731516e-4,3.449926174844078e-5,-1.4621926226168586e-8,3.8483677916458626e-4,3.475742957885683e-5,-1.4670832194101453e-8,3.8482854708888275e-4,3.491455839733871e-5,-1.4701226812136726e-8,3.8481043392111564e-4,3.4941584971485933e-5,-1.4706695752866484e-8,3.8484010168733006e-4,3.484013825587449e-5,-1.468664371357169e-8,3.8496755452253895e-4,3.464574228765504e-5,-1.4647105606473425e-8,3.852194666708856e-4,3.4419635873436564e-5,-1.4599384135326243e-8,3.8559051584685747e-4,3.4231768838361375e-5,-1.4556966089518085e-8,3.8604470174984556e-4,3.4141257634779535e-5,-1.4531832281699271e-8,3.8652549596401316e-4,3.4180796113487486e-5,-1.4531324827219252e-8,3.8697101818921484e-4,3.434917801281351e-5,-1.4556386882613265e-8,3.8732970092140794e-4,3.461318978913546e-5,-1.4601550234372074e-8,3.875723463890504e-4,3.491766325493246e-5,-1.4656605918405712e-8,3.8769763284319733e-4,3.5200524303996284e-5,-1.4709446876581307e-8,3.8772997811639925e-4,3.540841369879993e-5,-1.474921260370285e-8,3.877109937265693e-4,3.550840337825738e-5,-1.476877406003373e-8,3.8768778169230556e-4,3.5492866851361164e-5,-1.476588786722735e-8,3.877020190388187e-4,3.5377264492801586e-5,-1.4742916279944912e-8,3.8778272420060984e-4,3.519311331097323e-5,-1.4705540490345767e-8,3.8794354267678884e-4,3.497940485725285e-5,-1.4661111679795208e-8,3.88183621815305e-4,3.4775082366194856e-5,-1.4617171125102894e-8,3.8849040862005046e-4,3.4613774624727124e-5,-1.4580401934381552e-8,3.888429039948693e-4,3.452069902788002e-5,-1.4556015515333534e-8,3.8921458948142855e-4,3.45109299576898e-5,-1.4547412738969088e-8,3.8957597873680495e-4,3.4588150401447517e-5,-1.455591709815627e-8,3.8989728274007056e-4,3.474336635341969e-5,-1.4580440622513306e-8,3.9015195396758514e-4,3.495368121352255e-5,-1.4617090694513199e-8,3.9032177735499337e-4,3.5182101792084835e-5,-1.4658947568485471e-8,3.9040340540185385e-4,3.5380277120652675e-5,-1.4696467881042956e-8,3.904146306630224e-4,3.549631641986946e-5,-1.4719008759851094e-8,3.903967427080332e-4,3.548836893154207e-5,-1.4717615696219794e-8,3.9040860609677376e-4,3.534095270614115e-5,-1.468840935651692e-8,3.905107938530057e-4,3.507658782265891e-5,-1.4635025503981219e-8,3.9074435561294203e-4,3.4754301960084933e-5,-1.4568447883446436e-8,3.911142837911334e-4,3.445237060488615e-5,-1.4503769375063293e-8,3.915867065914306e-4,3.4242280516138355e-5,-1.4455241755727162e-8,3.9210098851033884e-4,3.416630020580259e-5,-1.4431921054112957e-8,3.9258978921974933e-4,3.42277415173893e-5,-1.4435583191215956e-8,3.92997891960016e-4,3.43949587943332e-5,-1.446115512515839e-8,3.9329397995157005e-4,3.4614214184008465e-5,-1.4498870429778417e-8,3.934741228294369e-4,3.482529654460197e-5,-1.4537116508416524e-8,3.935585439745504e-4,3.497539271070658e-5,-1.456516089516988e-8,3.935841244453831e-4,3.502882428209544e-5,-1.4575248316469991e-8,3.935950084123615e-4,3.497180118274077e-5,-1.4563798423281858e-8,3.9363335905265697e-4,3.4812268755863353e-5,-1.453161028551469e-8,3.9373196934599825e-4,3.457567997812712e-5,-1.4483168817569692e-8,3.9390985158140024e-4,3.4298244121273065e-5,-1.442534785326174e-8,3.941710735045695e-4,3.401951202215226e-5,-1.4365908871774454e-8,3.945062887672119e-4,3.377587091359689e-5,-1.431215883946541e-8,3.948959058166358e-4,3.3595868201667825e-5,-1.4269990715109863e-8,3.9531378332501087e-4,3.34975018387911e-5,-1.4243345355196083e-8,3.95730734118531e-4,3.348697905005418e-5,-1.4233969882786683e-8,3.9611767962868447e-4,3.3558268125866676e-5,-1.424129255710753e-8,3.964487102877791e-4,3.3693000306870486e-5,-1.4262290516375536e-8,3.9670457560232427e-4,3.386072530925677e-5,-1.429136009013897e-8,3.96877142245794e-4,3.402026478479182e-5,-1.4320404114221407e-8,3.96974675963087e-4,3.412377428846557e-5,-1.433955280018419e-8,3.970263033690597e-4,3.412534347773198e-5,-1.4338948576893425e-8,3.970821930901893e-4,3.3994646882125137E-05,-1.4311677516442803e-8,3.972051269460485e-4,3.373258641401384e-5,-1.4257126814339408e-8,3.9745171697619185e-4,3.3380857036472385e-5,-1.4183048350455968e-8,3.9784887548471545e-4,3.3015677815108926e-5,-1.4104376616313594e-8,3.983784208606685e-4,3.272315572911758e-5,-1.4038376360391643e-8,3.989810077392129e-4,3.2567028222608205e-5,-1.3998275239165507e-8,3.995784033932848e-4,3.256650678484111e-5,-1.3988808427858587e-8,4.001011450991133e-4,3.269479846358877e-5,-1.4005705396679457e-8,4.0050766556828905e-4,3.2894820685850835e-5,-1.4038489709830286e-8,4.0078956955466436e-4,3.310064022337845e-5,-1.407446327281956e-8,4.0096621978551547e-4,3.325505206119748e-5,-1.4102093289319672e-8,4.010745404447036e-4,3.3319672146671645e-5,-1.4113112716440347e-8,4.0115849496576356e-4,3.3278246778498246e-5,-1.4103416685224999e-8,4.0126036221118603e-4,3.3135359116825646e-5,-1.4073080729645138e-8,4.014143685471576e-4,3.291243375807629e-5,-1.4025773677232568e-8,4.0164265136440953e-4,3.264223661405534e-5,-1.3967743564302586e-8,4.019534608500238e-4,3.236272447032621e-5,-1.390655605379301e-8,4.023414451750576e-4,3.211102729665613e-5,-1.3849797898036786e-8,4.0278971307670453e-4,3.191824538468825e-5,-1.3803953237611915e-8,4.032731686233601e-4,3.18056089510052e-5,-1.3773602883065726e-8,4.037624347508987e-4,3.178228329803735e-5,-1.376099772735688e-8,4.0422776760387706e-4,3.184466222614487e-5,-1.3765925422093045e-8,4.0464271102872616e-4,3.1976751617668895e-5,-1.3785736315062855e-8,4.049875078121135e-4,3.2151373504918296e-5,-1.3815449042655647e-8,4.0525242347578963e-4,3.2332175019236376e-5,-1.3847964962952615e-8,4.0544119121250843e-4,3.2476862419152035e-5,-1.3874561986942388e-8,4.05574305140568e-4,3.254270756363941e-5,-1.3885979640020726e-8,4.0569066632959827e-4,3.249544686392352e-5,-1.3874369128060043e-8,4.0584474135106326e-4,3.232141920233108e-5,-1.3836033795223245e-8,4.060959597117366e-4,3.203981711665866e-5,-1.3774198864523915e-8,4.0648944202457856e-4,3.170776499799547e-5,-1.3700205970255192e-8,4.070339380710125e-4,3.14094387988266e-5,-1.3631320248747382e-8,4.076901544592694e-4,3.122757281338524e-5,-1.3584880382566213e-8,4.083808447150242e-4,3.1209812559531696e-5,-1.357136683146307e-8,4.090200221087287e-4,3.1349995147856346e-5,-1.3590446140588086e-8,4.0954443123187515e-4,3.1595103343674464e-5,-1.3632168430282483e-8,4.099303837683666e-4,3.187049880203468e-5,-1.3681872256090355e-8,4.101918277261662e-4,3.210671035463291e-5,-1.3725481876963942e-8,4.103671176469619e-4,3.225608889167277e-5,-1.3752883934071199e-8,4.1050398879131114e-4,3.2297665182539014e-5,-1.3759059927073484e-8,4.106480562172606e-4,3.223425978678608e-5,-1.3743742869076615e-8,4.108359107796797e-4,3.208637535174844e-5,-1.371041895829871e-8,4.1109180515318115e-4,3.188566709771694e-5,-1.366514943234374e-8,4.1142658815250326e-4,3.166901056491771e-5,-1.3615380156688916e-8,4.118380537063425e-4,3.147326545835003e-5,-1.3568790580043022e-8,4.123123872285276e-4,3.1330693322293186e-5,-1.3532246924646132e-8,4.1282660990819755e-4,3.12650855735152e-5,-1.3510937230181173e-8,4.1335194038861985e-4,3.12888232285669e-5,-1.3507759179538763e-8,0.00041385782791872523,3.14012402587035e-5,-1.3523006860697865e-8,4.143162097043059e-4,3.158851800056764e-5,-1.3554343762603742e-8,4.147055736697891e-4,3.182504325345812e-5,-1.3596998591413753e-8,4.150145461827425e-4,3.207610038134238e-5,-1.3644157727172217e-8,4.1524476893370035e-4,3.230183268389632e-5,-1.368759809958973e-8,4.1541284364256985e-4,3.2462481911037404e-5,-1.3718658948585584e-8,4.1555091775811174e-4,3.252513293742975e-5,-1.3729683805619488e-8,4.1570478512098117e-4,3.247211793603926e-5,-1.3715984522395111e-8,4.159276624200048e-4,3.2310116826504505e-5,-1.3678055124053507e-8,4.1626805702971783e-4,3.2076790804311726e-5,-1.3623245822332607e-8,4.167524617387805e-4,3.1839355536118996e-5,-1.3565610929515464e-8,4.173687071937988e-4,3.1679433606488e-5,-1.352271054257597e-8,4.180608672886187e-4,3.166480571656874e-5,-1.3509541984888306e-8,4.187443288713044e-4,3.182021371545731e-5,-1.353221487846181e-8,4.193369682737023e-4,3.211533218369021e-5,-1.3585218588590153e-8,4.1978931227977685e-4,3.247863499575709e-5,-1.3654153761093438e-8,4.2009704087509506e-4,3.282777137229304e-5,-1.3721983897773367e-8,4.202929904690921e-4,3.309778073197644e-5,-1.377490014751364e-8,4.2042859167406205e-4,3.325494568929429e-5,-1.3805267082687721e-8,4.2055631802961126e-4,3.329635406528146e-5,-1.3811685967344244e-8,4.207187075410816e-4,3.324181570289828e-5,-1.3797529601781316e-8,4.209438553744661e-4,3.312430221578908e-5,-1.376914696052265e-8,4.212450114021482e-4,3.29820290127452e-5,-1.3734307231289387e-8,4.2162200611876914e-4,3.285276439909095e-5,-1.3700985550654417e-8,4.220632466273461e-4,3.276974175556986e-5,-1.3676406563612262e-8,4.225479806825113e-4,3.275847057478871e-5,-1.3666274054639809e-8,4.2304896717371235e-4,3.283409778896946e-5,-1.367416405793029e-8,4.23535782825238e-4,3.299935006506142e-5,-1.3701088573561653e-8,4.2397886988324306e-4,3.3243478824476034e-5,-1.374527589841765e-8,4.2435406637511227e-4,3.354279531934157e-5,-1.3802236076034794e-8,4.246470102477941e-4,3.3863147891369016e-5,-1.3865160722445153e-8,4.248566904943515e-4,3.4164346787876715e-5,-1.392568757735148e-8,4.249974307882397e-4,3.4406249583597606e-5,-1.3975043403899051e-8,4.2509869023787635e-4,3.455590008719841e-5,-1.4005525482322397e-8,4.252022353167417e-4,3.4594902384809774e-5,-1.4012200930378964e-8,4.2535628227180944e-4,3.452606191561703e-5,-1.3994602436161527e-8,4.2560627053101944e-4,3.437774195887487e-5,-1.3957997791203556e-8,4.259826655671023e-4,3.42033544248866e-5,-1.3913552496987838e-8,4.2648812302165757e-4,3.407288572264099e-5,-1.3876612700332113e-8,4.2708920644435e-4,3.405490071168592e-5,-1.3862734860228985e-8,4.2771960286236156e-4,3.419246160656786e-5,-1.388224482934693e-8,4.2829858276369735e-4,3.4483331127508464e-5,-1.39356667397566e-8,4.287591800201008e-4,3.487711132752329e-5,-1.401286696741407e-8,4.2907189221625086e-4,3.529375343362766e-5,-1.4096933853643936e-8,4.2925111181198606e-4,3.5653822332007866e-5,-1.4170691079982273e-8,4.293431436633978e-4,3.590386737424457e-5,-1.422220020649449e-8,4.294057069943159e-4,3.602629900089709e-5,-1.4246968028465437e-8,4.2949028887441184e-4,3.603476243390713e-5,-1.4247107509361492e-8,4.296326637699373e-4,3.596258975350247e-5,-1.422906114426545e-8,4.298507830160587e-4,3.585122067538412e-5,-1.4201284229219959e-8,4.30146821619837e-4,3.574178595192985e-5,-1.4172502101488057e-8,4.305105528179752e-4,3.567004669500458e-5,-1.4150577469349977e-8,4.309225690144668e-4,3.566353502127585e-5,-1.4141794633184363e-8,4.3135708115020477e-4,3.5739694174433475e-5,-1.4150368611616155e-8,4.3178466029482305e-4,3.5904363120716595e-5,-1.4178070671429282e-8,4.321754230960808e-4,3.615055457113382e-5,-1.4223940930016515e-8,4.3250300470527235e-4,3.645801938170371e-5,-1.4284152898436964e-8,4.327492141671965e-4,3.6794455062480333e-5,-1.4352180111878265e-8,4.329086361301494e-4,3.711914037777242e-5,-1.441944170755436e-8,4.329919362284678e-4,3.738922622588004e-5,-1.4476525706585657e-8,4.3302648954548616e-4,3.756805202918171e-5,-1.4514923144055002e-8,4.330533235187689e-4,3.763391300210855e-5,-1.4528989528198715e-8,4.331202330514279e-4,3.7587099620632155e-5,-1.4517675625248134e-8,4.33271953934643e-4,3.7453099149815584e-5,-1.4485529520827118e-8,4.335391170749413e-4,3.728040086638992e-5,-1.4442540122095772e-8,4.3392835970523195e-4,3.713209968463934e-5,-1.4402528788363379e-8,4.344165500758634e-4,3.707165347756771e-5,-1.4380064897967802e-8,4.3495230062594813e-4,3.714511840207765e-5,-1.438637838413005e-8,4.3546692736868404e-4,3.7364868229131036e-5,-1.4425430174624792e-8,4.3589372030768185e-4,3.7701867510223756e-5,-1.4491842764582526e-8,4.361893091351183e-4,3.8092289800798756e-5,-1.4572120153155367e-8,4.3634757852403625e-4,3.8457985039809324e-5,-1.464910812938325e-8,4.363991796352178e-4,3.8732147174392066e-5,-1.4707727290935779e-8,4.3639763452364114e-4,3.887826414780291e-5,-1.4739264857224268e-8,4.364001722647106e-4,3.889525252824335e-5,-1.474263969373984e-8,4.364523016838084e-4,3.881021476354108e-5,-1.4722977299200551e-8,4.365804771433114e-4,3.866556340462599e-5,-1.468896039574687e-8,4.367919722871205e-4,3.8506926413442914e-5,-1.4650297668231218e-8,4.370786669043261e-4,3.837491837753309e-5,-1.4615939698352876e-8,4.3742177567648004e-4,3.8300841711920557e-5,-1.4593067497875068e-8,4.377959505900983e-4,3.830495380523125e-5,-1.4586611379527836e-8,4.3817246361271725e-4,3.839583492266989e-5,-1.4599028669935255e-8,4.385219262133009e-4,3.856996202628723e-5,-1.4630154871815322e-8,4.388172474094774e-4,3.881133934777927e-5,-1.4677068982739351e-8,4.3903736753377824e-4,3.909172438758446e-5,-1.4734059655137036e-8,4.39171785700476e-4,3.9372492362129876e-5,-1.4792916472356046e-8,4.392250878709724e-4,3.9609287825052854e-5,-1.48438349018792e-8,4.392197841418492e-4,3.9760010138741e-5,-1.4877110525214467e-8,4.391952872335693e-4,3.9795215836805176e-5,-1.488546114998337e-8,4.392015028478242e-4,3.9708130526000964e-5,-1.4866368508482124e-8,4.392874740657098e-4,3.9520303226885334e-5,-1.4823547388579492e-8,4.3948798661524503e-4,3.927964654825381e-5,-1.4766788554084115e-8,4.3981252877586845e-4,3.905019462021475e-5,-1.4709963203151688e-8,4.4024057367895406e-4,3.889606668889953e-5,-1.4667637174980205e-8,4.407251019923313e-4,3.886426054421898e-5,-1.465121537204819e-8,4.4120371732378895e-4,3.897130268161372e-5,-1.4665702138134793e-8,4.4161456567829924e-4,3.919776198075389e-5,-1.4708062006301217e-8,4.41912806692747e-4,3.949272215218089e-5,-1.4767828043097781e-8,4.4208268554817335e-4,3.978761101197567e-5,-1.4829982902345276e-8,4.421409699762284e-4,4.001548958358082e-5,-1.4879284623686034e-8,4.421303237867017e-4,4.012928886396741e-5,-1.4904509091663218e-8,4.4210531633417574e-4,4.011254468451751e-5,-1.4901064005645254e-8,4.421168168722615e-4,3.997960143327207e-5,-1.487124044964496e-8,4.422004451507053e-4,3.9767094807069e-5,-1.4822485598136494e-8,4.4237183113721076e-4,3.9521669753076244e-5,-1.4764783122292205e-8,4.426279491665109e-4,3.928881642907068e-5,-1.4708204056709783e-8,4.429518454747351e-4,3.91054375635812e-5,-1.4661205248835662e-8,4.433181067887932e-4,3.899632725145631e-5,-1.4629752573422735e-8,4.436975223791884e-4,3.8973357147412855e-5,-1.4617048273316101e-8,4.4406056405082626e-4,3.903590468819179e-5,-1.4623561502714967e-8,4.4438008650014344e-4,3.91715076460056e-5,-1.4647122090138582e-8,4.446339768961001e-4,3.935646602380224e-5,-1.4682981479505956e-8,4.448083963396037e-4,3.955684978592832e-5,-1.4723927049201846e-8,4.4490177030358924e-4,3.973098128986008e-5,-1.4760714274992125e-8,4.4492878725670593e-4,3.9834759260079374e-5,-1.4783179135015065e-8,4.4492247041699046e-4,3.983068781073579e-5,-1.4782276848273152e-8,4.4493150521741963e-4,3.9699639584905065e-5,-1.4752832416571488e-8,4.4501065268293756e-4,3.945150399211428e-5,-1.4696101798232349e-8,4.452051621230111e-4,3.912878232058367e-5,-1.4620773630123115e-8,4.4553450758414917e-4,3.879851843897706e-5,-1.4541367888067542e-8,4.459831270119789e-4,3.853341144760553e-5,-1.4474199279655483e-8,4.4650334228181737e-4,3.83892962100095e-5,-1.4432428557074345e-8,4.470294963479162e-4,3.838843851633301e-5,-1.4422210720894016e-8,4.474971022466872e-4,3.8514644123259556e-5,-1.4441268698217063e-8,4.4785977033990704e-4,3.872025545847296e-5,-1.4480033042680275e-8,4.480991934681107e-4,3.8940889744311725e-5,-1.4524608121518424e-8,4.48226794522255e-4,3.911257774162124e-5,-1.4560498684405491e-8,4.482780588321118e-4,3.918669829382871e-5,-1.457607889926847e-8,4.4830195410043057e-4,3.913954024565277e-5,-1.4565007306195704e-8,4.483485381147606e-4,3.8974954360315984e-5,-1.4527125710483059e-8,4.484579671969714e-4,3.872030337677846e-5,-1.4467791545713628e-8,4.4865345969394e-4,3.841765061935548e-5,-1.4396030200337683e-8,4.489392960449042e-4,3.811327623924533e-5,-1.4322193270630174e-8,4.4930320331229367e-4,3.7848511485026534e-5,-1.4255821744391228e-8,4.497213338957374e-4,3.765366154702086e-5,-1.4204163537672068e-8,4.5016388935185643e-4,3.7545304813913294e-5,-1.4171463776027224e-8,4.5060002058532647e-4,3.752619081927828e-5,-1.415888242467012e-8,4.5100150770761724e-4,3.758652962581753e-5,-1.4164756572674547e-8,4.5134546376081325e-4,3.7705677615177184e-5,-1.4184941935731645e-8,4.5161665818218725e-4,3.785383751499737e-5,-1.4213111016563784e-8,4.518100423627256e-4,3.7994051971822126e-5,-1.4241074681839239e-8,4.5193371514478737e-4,3.8085369823532785e-5,-1.4259379743515523e-8,4.5201173652522936e-4,3.808847352382779e-5,-1.4258553184670598e-8,4.5208492668352473e-4,3.797471001575803e-5,-1.4231251193107125e-8,4.522066971808626e-4,3.77376787180318e-5,-1.4175095272905575e-8,4.5243135935849304e-4,3.7403252871591634e-5,-1.4095172040726785e-8,4.5279582657719995e-4,3.7030874343293475e-5,-1.4004497095542028e-8,4.5330172975054594e-4,3.6700112219684904e-5,-1.3921072538958264e-8,4.539088056613535e-4,3.648437266876659e-5,-1.3861984223206524e-8,4.545461169138244e-4,3.642372882885231e-5,-1.3837216692123784e-8,4.5513658700048617e-4,3.651138922317251e-5,-1.3846408129259836e-8,4.556220323441288e-4,3.66997016694241e-5,-1.3879890283223254e-8,4.559775185965056e-4,3.691969978430192e-5,-1.3922769386842146e-8,4.562122242740801e-4,3.710309854736905e-5,-1.3959682858114987e-8,4.5636084388552884e-4,3.7198647914217366e-5,-1.397848887776796e-8,4.564712492187718e-4,3.7180239677984124e-5,-1.3972296643507357e-8,4.5659257815677795e-4,3.7047788247771294e-5,-1.393998633269255e-8,4.5676585962010804e-4,3.682314037864092e-5,-1.3885605024489333e-8,4.57017899354544e-4,3.65430985371316e-5,-1.3816998895031419e-8,4.573585513254664e-4,3.625115082842816e-5,-1.3743986972765052e-8,4.5778120823241134e-4,3.5989329685002914e-5,-1.367641965358165e-8,4.582659310878471e-4,3.579152347703973e-5,-1.3622494409608255e-8,4.587842300484169e-4,3.567911872805785e-5,-1.3587614246913989e-8,4.5930436312677383e-4,3.565921697959824e-5,-1.357389940117045e-8,4.5979615512869434e-4,3.572510183973148e-5,-1.358027877351196e-8,4.6023475988321376e-4,3.585820060660067e-5,-1.360294284347647e-8,4.6060335832733674e-4,3.6030722091809204e-5,-1.3635911870639802e-8,4.60895139188042e-4,3.6208528902177354e-5,-1.3671590860836431e-8,4.6111494690815154e-4,3.635429757026502e-5,-1.3701352069797334e-8,4.612807925415506e-4,3.6431488839050474e-5,-1.3716346193401218e-8,4.614247987373746e-4,3.6410027954227026e-5,-1.3708835750741679e-8,4.6159205914533125e-4,3.62743262879114e-5,-1.3674231350069227e-8,4.6183498055835207e-4,3.6032773953528615e-5,-1.3613573886357206e-8,4.6220096368370197e-4,3.572504366766511e-5,-1.3535497406452498e-8,4.627142460022724e-4,3.5420516607509466e-5,-1.345601089443765e-8,4.633589570077975e-4,3.520158587923049e-5,-1.339462640412944e-8,4.640754895656249e-4,3.5133781640715624e-5,-1.336732887285183e-8,4.6477797333421513e-4,3.523710146370312e-5,-1.337976511947418e-8,4.653863109243403e-4,3.5476761963375476e-5,-1.3424888861955243e-8,4.658546211216421e-4,3.577942568893229e-5,-1.3486488367131025e-8,4.661813358342299e-4,3.6063351831523195e-5,-1.3545965988268696e-8,4.664004611033069e-4,3.626473218857858e-5,-1.3588320959816941e-8,4.665639958352068e-4,3.6350407228647365e-5,-1.360513303776225e-8,4.6672541684679767e-4,3.631790496298228e-5,-1.3594788762173888e-8,4.6692865416770923e-4,3.618845377576418e-5,-1.3561187150119446e-8,4.672026368560225e-4,3.5997925297469526e-5,-1.3511940939945172e-8,4.6755982834898976e-4,3.5788386314177225e-5,-1.3456575605413407e-8,4.67997179408685e-4,3.5601078032541834e-5,-1.3404875559273569e-8,4.684985923176623e-4,3.5470812389852354e-5,-1.3365423942936016e-8,4.6903849108559164e-4,3.542180047068913e-5,-1.3344439413006975e-8,4.695861596821659e-4,3.546508508953634e-5,-1.3345040436527447e-8,4.7011041192164126e-4,3.559772500847251e-5,-1.3367006714160734e-8,4.705840542170844e-4,3.580375537789526e-5,-1.3407016011675667e-8,4.7098759753275935e-4,3.6056678871433476e-5,-1.3459233547938723e-8,4.7131190949890184e-4,3.632298007574168e-5,-1.3516078049011552e-8,4.71559790690804e-4,3.6566204934469644e-5,-1.3569053058169974e-8,4.717465735754899e-4,3.6751383530202755E-05,-1.3609647477316639e-8,4.718998124130554e-4,3.684981905601746e-5,-1.3630405599256602e-8,4.7205781579265745e-4,3.684452081682734e-5,-1.3626310087204059e-8,4.7226605766033966e-4,3.673637051258554e-5,-1.3596506069195115e-8,4.725699924678846e-4,3.654994787786842e-5,-1.3546025765795578e-8,4.730033180778431e-4,3.6336041112372295e-5,-1.3486667699711668e-8,4.7357300089362716e-4,3.616604739808837e-5,-1.3435763281303896e-8,4.74246972161772e-4,3.611397064008277e-5,-1.3411769997669891e-8,4.7495468950762464e-4,3.6228226616847743e-5,-1.342728801093758e-8,4.756075265498231e-4,3.6506596772157785e-5,-1.3482806498111208e-8,4.761324789643435e-4,3.68921215314555e-5,-1.3565521966204982e-8,4.76500027685036e-4,3.729587464380291e-5,-1.3654665288008376e-8,4.7672987690625123e-4,3.763293743393644e-5,-1.3730017018062513e-8,4.768749775046739e-4,3.7850136442992455e-5,-1.3778472109271951e-8,4.7699763159739244e-4,3.7934345672070496e-5,-1.379606231317544e-8,4.7715085690734735e-4,3.790502947009683e-5,-1.3786386207802384e-8,4.7736947329048336e-4,3.780076670277705e-5,-1.3757715344810296e-8,4.7766881383462853e-4,3.7666865402247315e-5,-1.3720316041747617e-8,4.780473761409701e-4,3.7546640888132714e-5,-1.368447808114495e-8,4.7849069816615584e-4,3.747611264933771e-5,-1.3659170952435136e-8,4.789752246660876e-4,3.748091718942398e-5,-1.3651117518452754e-8,4.7947201707088224e-4,3.757448492495361e-5,-1.3664168314897276e-8,4.799505077512641e-4,3.775714321569889e-5,-1.3698971973992664e-8,4.803824002412184e-4,3.801622409426613e-5,-1.3752971782310215e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json deleted file mode 100644 index 765f637..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_11.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":11000,"numberOfSamples":1000,"samples":[4.807455898115237e-4,3.832746570992544e-5,-1.3820749559112586e-8,4.810276804026849e-4,3.8657939483712816e-5,-1.3894708855793208e-8,4.8122851144731977e-4,3.897037866353488e-5,-1.3966029941865335e-8,4.8136122169643126e-4,3.922846753666153e-5,-1.4025813189547578e-8,4.8145158055841605e-4,3.94025277918899e-5,-1.406634943105251e-8,4.815355041583503e-4,3.9474978459853574e-5,-1.408245537787128e-8,4.8165478219839815e-4,3.9445013590506954e-5,-1.4072791780691197e-8,4.8185089652025466e-4,3.933196966399209e-5,-1.4041008026015441e-8,4.8215671196515623e-4,3.9176311765079673e-5,-1.3996340784096513e-8,4.825864763543066e-4,3.9036228711670225e-5,-1.3953028790341758e-8,4.8312623641597524e-4,3.897747212754661e-5,-1.3927849119148707e-8,4.837291888970253e-4,3.9055456474574426e-5,-1.3935510387344442e-8,4.843221611312391e-4,3.929313827217236e-5,-1.3982860442730526e-8,4.848265247112546e-4,3.966499254457847e-5,-1.4064616609993489e-8,4.8518733416020557e-4,4.009980545620315e-5,-1.4163881241573302e-8,4.853950931909375e-4,4.050581912340954e-5,-1.425830655995102e-8,4.854866151667581e-4,4.080574058134305e-5,-1.4328715323638037e-8,4.85525688196407e-4,4.096178493042818e-5,-1.4365239392562207e-8,4.855772001398806e-4,4.0979862819758134e-5,-1.4368394366073396e-8,4.856885804979649e-4,4.089713112766541e-5,-1.4346234987150922e-8,4.8588326125485515e-4,4.076435074414623e-5,-1.4310345248447114e-8,4.8616296080937287e-4,4.063161994000118e-5,-1.4272594843316575e-8,4.865136173432042e-4,4.054008405187016e-5,-1.4243172616081504e-8,4.8691142789272524e-4,4.051847158520118e-5,-1.4229620182921136e-8,4.8732762934217247e-4,4.0582299326150006e-5,-1.4236433463507242e-8,4.8773212709177916e-4,4.07341134689005e-5,-1.4264941962397524e-8,4.880965967034294e-4,4.096407600183585e-5,-1.4313353517338398e-8,4.88397573177068e-4,4.1250927252936434e-5,-1.4376959666340294e-8,4.886197129387349e-4,4.1563798332032156e-5,-1.4448564853229553e-8,4.887589435265532e-4,4.1865488207741994e-5,-1.451924254306548e-8,4.888247307700336e-4,4.211748974787741e-5,-1.4579476522027053e-8,4.888405100767859e-4,4.228641181812268e-5,-1.462064263346648e-8,4.888415356313333e-4,4.235083017747227e-5,-1.463666315611464e-8,4.888699069788087e-4,4.2307124574301165e-5,-1.462554429370797e-8,4.889672434197426e-4,4.2172729191325406e-5,-1.459042628142175e-8,4.89166100944331e-4,4.198561886052198e-5,-1.4539802909504917e-8,4.894815424795779e-4,4.179941029790374e-5,-1.4486638095790344e-8,4.899045597653066e-4,4.16738571918689e-5,-1.4446179472955758e-8,4.903995543457572e-4,4.1661226263416274e-5,-1.4432491631334258e-8,4.909084078410756e-4,4.179064877681403e-5,-1.4454232713012669e-8,4.913629055658968e-4,4.205495921373214e-5,-1.4510927067288458e-8,4.917043498415898e-4,4.2406630471518614e-5,-1.4591584452824552e-8,4.919041260653661e-4,4.2768455240018365e-5,-1.4677226547185713e-8,4.91975143734432e-4,4.30581023135401e-5,-1.4747087713819914e-8,4.919667281492841e-4,4.321634341236769e-5,-1.4785795141156964e-8,4.919450134806429e-4,4.322488299346272e-5,-1.4787918091785175e-8,4.919696544610528e-4,4.310619995991277e-5,-1.4758043194016052e-8,4.920780610928328e-4,4.2909134196637064e-5,-1.4707389424281414e-8,4.922813225790399e-4,4.269033595193827e-5,-1.464944226297227e-8,4.925688425220637e-4,4.249988199139718e-5,-1.4596537842685818e-8,4.92916302217559e-4,4.2373819969799324e-5,-1.4557994767186664e-8,4.932930424762773e-4,4.233227598512297e-5,-1.4539483417289066e-8,4.936673798735039e-4,4.2380499169877454e-5,-1.4543082916464466e-8,4.940100632622315e-4,4.251078828128216e-5,-1.4567604259159937e-8,4.942967406427109e-4,4.27043504794895e-5,-1.4608973846901326e-8,4.945102476677884e-4,4.2933063498730834e-5,-1.4660638792530654e-8,4.946431248320447e-4,4.316170803770033e-5,-1.4714088579726986e-8,4.947001929114915e-4,4.335150966562856e-5,-1.4759675319273507e-8,4.947003518474758e-4,4.3465620460088586e-5,-1.4787908056141978e-8,4.946762700491294e-4,4.3476391218321277e-5,-1.4791230435817252e-8,4.946706632709735e-4,4.337312853241991e-5,-1.4766006598097854e-8,4.947286919062398e-4,4.316792790944356e-5,-1.4714140745679074e-8,4.948875598480194e-4,4.289680338026428e-5,-1.46436248866499e-8,4.951660198459949e-4,4.261431606960693e-5,-1.4567507684274658e-8,4.955572023782361e-4,4.238205390573295e-5,-1.4501266960766878e-8,4.960275056948562e-4,4.225356593077395e-5,-1.4459112508157139e-8,4.965226079965434e-4,4.225970770296015e-5,-1.445012992875491e-8,4.969797348841862e-4,4.239855798309805e-5,-1.4475344797421208e-8,4.973435745501257e-4,4.263333074298414e-5,-1.452672530286383e-8,4.975817616767804e-4,4.290011641573763e-5,-1.4588789841322534e-8,4.976949342797306e-4,4.31246291984686e-5,-1.4642736998874316e-8,4.977169933512843e-4,4.32435191844831e-5,-1.4671952404593025e-8,4.977043744489744e-4,4.3222752491909916e-5,-1.4666876259907704e-8,4.977180995272924e-4,4.30657402384419e-5,-1.4627283126456636e-8,4.978060190996614e-4,4.280844975449757e-5,-1.4561258969220208e-8,4.979920722311104e-4,4.2505071693506214e-5,-1.4481783123106343e-8,4.982749931993637e-4,4.221149461163865e-5,-1.4402704387878677e-8,4.986341351162414e-4,4.1972812399652274e-5,-1.4335614319282961e-8,4.99038023174974e-4,4.181724732728816e-5,-1.4288203371298527e-8,4.994521132236064e-4,4.1755451375511826e-5,-1.4263899128169458e-8,4.998442497099592e-4,4.1782774302784495e-5,-1.4262268021020732e-8,5.001879318353291e-4,4.1882399162322495e-5,-1.4279703860248156e-8,5.004642516735846e-4,4.202823461485221e-5,-1.4310113798395751e-8,5.006634317541689e-4,4.218742398465999e-5,-1.4345522650409268e-8,5.007865154243883e-4,4.232301933686223e-5,-1.4376697915433863e-8,5.008471450808845e-4,4.239771827120947e-5,-1.4394026271468186e-8,5.008726192415792e-4,4.237947661390274e-5,-1.4388889379628621e-8,5.009027064025104e-4,4.224906691188224e-5,-1.4355605708386248e-8,5.009844664141034e-4,4.200814399437556e-5,-1.4293595372097094e-8,5.011622958425812e-4,4.168457799010023e-5,-1.4208933086185455e-8,5.014648490094809e-4,4.133098997158663e-5,-1.4114222164068199e-8,5.018933871908035e-4,4.1014046129932506e-5,-1.4026120755346876e-8,5.024172779489319e-4,4.079629120466331e-5,-1.3960894019653134e-8,5.029800978344093e-4,4.0716851663191706e-5,-1.3929502673170868e-8,5.035149205751237e-4,4.0778803174321974e-5,-1.3934148788121047e-8,5.039631026052139e-4,4.0948067350335475e-5,-1.3967574412809247e-8,5.042898951464934e-4,4.116358529728348e-5,-1.4015214047407058e-8,5.044923433820881e-4,4.1354546447450864e-5,-1.405930760929713e-8,5.045980853346142e-4,4.145904379395495e-5,-1.4083628433054094e-8,5.046562864241187e-4,4.143903113694813e-5,-1.4077491031220824e-8,5.047237703547672e-4,4.128796116298141e-5,-1.4038013428869964e-8,5.048504577142612e-4,4.1029648300892024e-5,-1.3970152894372228e-8,5.050682042868694e-4,4.070946922079784e-5,-1.3884718542673423e-8,5.053857892959258e-4,4.038129871002777e-5,-1.3795175637434057e-8,5.057904773855169e-4,4.0094587167200846e-5,-1.3714342555419928e-8,5.062542972907671e-4,3.988514116215506e-5,-1.3651908298048012e-8,5.067420758582822e-4,3.9771018930213065e-5,-1.36131932106548e-8,5.072186700798977e-4,3.9752847710952766e-5,-1.3599056334601855e-8,5.076541049257842e-4,3.981679039448647e-5,-1.3606552572220539e-8,5.080265636895346e-4,3.993839829792082e-5,-1.3629887915207912e-8,5.083239056768367e-4,4.008625429723009e-5,-1.366134539027628e-8,5.085445405312649e-4,4.02251540015048e-5,-1.3692068130210929e-8,5.086982215653529e-4,4.031923748367069e-5,-1.3712790472901225e-8,5.088067942896942e-4,4.033585746282454e-5,-1.3714758380114217e-8,5.089042016332715e-4,4.0250984480183826e-5,-1.369110873241738e-8,5.090342370463796e-4,4.005630209267127e-5,-1.36387919547938e-8,5.09244162874289e-4,3.976656292219734e-5,-1.3560660497017656e-8,5.095732393487734e-4,3.942360984383623e-5,-1.3466737784983145e-8,5.100381218559963e-4,3.9092145563312785e-5,-1.3373334502326575e-8,5.106211663506831e-4,3.884421714299498e-5,-1.3299185546533904e-8,5.112695708256073e-4,3.873558642398053e-5,-1.325938777322804e-8,5.119093049859852e-4,3.878426446529394e-5,-1.3259745614206067e-8,5.124690770718819e-4,3.896273593345075e-5,-1.3294485083970076e-8,5.129030399538616e-4,3.920805997219822e-5,-1.3348486880023718e-8,5.13202292093832e-4,3.944384781038976e-5,-1.3402621757432825e-8,5.133926118135372e-4,3.9603311868793384e-5,-1.3439524368879208e-8,5.135225876503645e-4,3.964513077729718e-5,-1.344773648237942e-8,5.136484244188965e-4,3.955939833262208e-5,-1.3423498173910979e-8,5.138202846515992e-4,3.936503101320661e-5,-1.337045078206997e-8,5.140727251366115e-4,3.9101620258126494e-5,-1.3297891578819023e-8,5.144200439889327e-4,3.8818723273896924e-5,-1.3218230049065295e-8,5.148563248939854e-4,3.8565076244178615e-5,-1.31442269252279e-8,5.153592942705727e-4,3.8379720577811564e-5,-1.3086552229207539e-8,5.158965586590853e-4,3.8286402743178446e-5,-1.3052102047767048e-8,5.164325300028227e-4,3.829166482457637e-5,-1.3043289492522785e-8,5.169345624266961e-4,3.838611140678518e-5,-1.3058250794240458e-8,5.173773998025525e-4,3.854777091398222e-5,-1.3091694599441699e-8,5.177457469094699e-4,3.8746318140652295E-05,-1.3136024508001314e-8,5.180353753683765e-4,3.894721737733719e-5,-1.3182422098429487e-8,5.182533801875123e-4,3.9115464526579055e-5,-1.322176802538456e-8,5.184180207872244e-4,3.9219155018714586e-5,-1.3245479826195314e-8,5.185582174206982e-4,3.923339887816621e-5,-1.3246473160946539e-8,5.187121920390923e-4,3.9145162676454723e-5,-1.3220474590964729e-8,0.00051892397371530155,3.895909776742693e-5,-1.316773040159988e-8,5.192361363727685e-4,3.8702959631497384e-5,-1.3094695644609137e-8,5.19678041196177e-4,3.8429183553321686e-5,-1.3014701920521112e-8,5.20251698135249e-4,3.820781513346968e-5,-1.2946243125940887e-8,5.209217831712024e-4,3.810779889170091e-5,-1.2908049988956758e-8,5.216188239536118e-4,3.817071047034634e-5,-1.2912046211167408e-8,5.222596846655533e-4,3.8389929217076366e-5,-1.295764933741635e-8,5.227776981227885e-4,3.870942493105218e-5,-1.3031193682067312e-8,5.231462221446176e-4,3.90449333361414e-5,-1.3111251595486714e-8,5.233834624169179e-4,3.9315346546736246e-5,-1.3176687479802485e-8,5.235394281321812e-4,3.946752696132619e-5,-1.3213083897284422e-8,5.236754233317036e-4,3.9485713744511626e-5,-1.3215295714260378e-8,5.238462568216775e-4,3.9387314888452363e-5,-1.3186630329662888e-8,5.240896667697123e-4,3.921173128856953e-5,-1.3136310014778118e-8,5.244226644038686e-4,3.900801174331826e-5,-1.3076572242619164e-8,5.248426426550115e-4,3.882439799199982e-5,-1.3020069826079723e-8,5.253311937372029e-4,3.870065090327242e-5,-1.2977767650741354e-8,5.258593061790778e-4,3.8663123547147846e-5,-1.2957402470289928e-8,5.263931056407179e-4,3.8722437005912813e-5,-1.2962597830659435e-8,5.268994400545242e-4,3.887355383309786e-5,-1.2992693609541672e-8,5.273506944811689e-4,3.909786013135494e-5,-1.304323238147115e-8,5.277283618928682e-4,3.9366737045691754e-5,-1.310693161469982e-8,5.280251104455353e-4,3.964596224958332e-5,-1.3174889451303355e-8,5.282454335082373e-4,3.990022972843365e-5,-1.3237768428264953e-8,5.284052231946588e-4,4.009736888639202e-5,-1.3286836033079106e-8,5.285305494829884e-4,4.021225325537939e-5,-1.3314912562979519e-8,5.286557060394544e-4,4.0230579521206196e-5,-1.3317363974876683e-8,5.288202403339737e-4,4.015271335318547e-5,-1.3293259523465599e-8,5.290641459351538e-4,3.999743645858218e-5,-1.3246644881952389e-8,5.29420183065172e-4,3.980429049478516e-5,-1.3187490243689071e-8,5.299032094367221e-4,3.963165594186321e-5,-1.313141009986588e-8,5.304988417193463e-4,3.9546878333224285e-5,-1.3097054263167734e-8,5.311574317731786e-4,3.96065921173356e-5,-1.3100650126240523e-8,5.318014578119245e-4,3.98319165292681e-5,-1.3149038022273758e-8,5.32349611324718e-4,4.019180005671327e-5,-1.3234910936428494e-8,5.327485204893838e-4,4.0608738174731215e-5,-1.3338177317094923e-8,5.32993774836213e-4,4.098800442554419e-5,-1.3433731281722263e-8,5.331274981533502e-4,4.125409164773492e-5,-1.3501160283562443e-8,5.332164335123858e-4,4.137379163363762e-5,-1.353087213849061e-8,5.333259193608972e-4,4.13576666322837e-5,-1.3524569124303872e-8,5.335024650995162e-4,4.124644008992089e-5,-1.3491904463169542e-8,5.337679129261047e-4,4.109355822924989e-5,-1.3446225415098136e-8,5.341216559001369e-4,4.0951180469202836e-5,-1.340113134321436e-8,5.345463734211426e-4,4.0861572281668134e-5,-1.3368231159593744e-8,5.350143019353962e-4,4.0852955656746325e-5,-1.3355852072504397e-8,5.354928423825327e-4,4.093817556745151e-5,-1.3368381791204466e-8,5.359493976739728e-4,4.111506478866112e-5,-1.3406093750610092e-8,5.363555591240247e-4,4.136805710751307e-5,-1.3465430533373401e-8,5.366906062535734e-4,4.167087291184944e-5,-1.353970510439085e-8,5.369441549435876e-4,4.199017748541348e-5,-1.3620131233801054e-8,5.371176836764395e-4,4.229004758300979e-5,-1.3697055796399448e-8,5.372246939412618e-4,4.2536815840649555e-5,-1.376122922588961e-8,5.372894831724115e-4,4.2703741062777625e-5,-1.3804984921125316e-8,5.373446669618185e-4,4.277512234113474e-5,-1.3823300988072162e-8,0.00053742757544824975,4.27496117961429e-5,-1.3814764582700658e-8,5.375755603610683e-4,4.264248462223457e-5,-1.3782413644499372e-8,5.378200593904353e-4,4.2486472593883745e-5,-1.373430126808111e-8,5.381792508290428e-4,4.233015478549633e-5,-1.368338167500512e-8,5.386499283189473e-4,4.223204705859813e-5,-1.3646059069466792e-8,5.392010226639216e-4,4.224848840771485e-5,-1.3638780125339982e-8,5.397734225659609e-4,4.2415447202705524e-5,-1.3672723821927818e-8,5.402914650870005e-4,4.272937436938092e-5,-1.3748141826012162e-8,5.406870951769552e-4,4.3138228021123006e-5,-1.3851605137995859e-8,5.409276624223462e-4,4.355360016244392e-5,-1.3959259082476329e-8,5.410308634400444e-4,4.388299832113226e-5,-1.404572807505199e-8,5.410560312127462e-4,4.406544519190341e-5,-1.409387560046213e-8,5.410774246421454e-4,4.4090008179269903e-5,-1.4099829500317099e-8,5.411566007764416e-4,4.399025355105983e-5,-1.4071552354515442e-8,5.413273035270495e-4,4.3823916588713976e-5,-1.4023612135435341e-8,5.415945168970027e-4,4.365179453199496e-5,-1.3971835246327046e-8,5.41941678191083e-4,4.3523829968479546e-5,-1.3929763987744986e-8,5.423397870270695e-4,4.3473105445618066e-5,-1.3906988846966135e-8,5.427550475932729e-4,4.3515132910834864e-5,-1.3908697960636151e-8,5.431542404764803e-4,4.364960885200329e-5,-1.393582992804166e-8,5.435083954292767e-4,4.386290135691708e-5,-1.3985503452994463e-8,5.437955680521673e-4,4.413075019834189e-5,-1.4051648813651171e-8,5.440031193610353e-4,4.442130458093591e-5,-1.4125847171957948e-8,5.441294904295869e-4,4.4698775986850106e-5,-1.4198377383350764e-8,5.441851609821107e-4,4.4927902109817414e-5,-1.4259451932272639e-8,5.44192274379237e-4,4.5079042801761985e-5,-1.4300570677415424e-8,5.441825131835359e-4,4.513324877772769e-5,-1.4315854380231034e-8,5.441931678314615e-4,4.508643514283918e-5,-1.4303200161377657e-8,5.442616930190452e-4,4.495182030705989e-5,-1.4265097005812744e-8,5.444193252662113e-4,4.475992062198913e-5,-1.420891194830896e-8,5.446845113517835e-4,4.455563870804244e-5,-1.4146439051286658e-8,5.450570012046475e-4,4.439214140356481e-5,-1.4092482439868092e-8,5.455138259491807e-4,4.432123995689494e-5,-1.4062247519459378e-8,5.460091567979519e-4,4.4380529159655735e-5,-1.4067548181360422e-8,5.464806332929459e-4,4.457933352573298e-5,-1.411246534473196e-8,5.468639351101996e-4,4.488842557502628e-5,-1.41900303462031e-8,5.471137114483806e-4,4.5240836901430264e-5,-1.4282186009332701e-8,5.472228700801882e-4,4.5549104705021665e-5,-1.436459415403402e-8,5.472286408053625e-4,4.573542557700775e-5,-1.4415174862346914e-8,5.471991045330296e-4,4.576046398285103e-5,-1.4422216878027767e-8,5.47206448294467e-4,4.56349055279638e-5,-1.4387623676551349e-8,5.473019740297997e-4,4.5409058585348715e-5,-1.4324164571538933e-8,5.475045890269017e-4,4.5149831126079944e-5,-1.4249406835206891e-8,5.47803705825606e-4,4.4918876045973197e-5,-1.4180002072172085e-8,5.481698176479473e-4,4.4759851057189094e-5,-1.412830013525889e-8,5.48565692247331e-4,4.469494792163449e-5,-1.410125538583461e-8,5.489546078069922e-4,4.4727065395722936e-5,-1.4100722236229494e-8,5.493051789854964e-4,4.484400912140682e-5,-1.4124308082445898e-8,5.495938405083384e-4,4.5022613923846395e-5,-1.4166321890606745e-8,5.498062624304646e-4,4.523222436300298e-5,-1.4218687392005276e-8,5.499384595504489e-4,4.54378852388539e-5,-1.4271863647322725e-8,5.49997724894559e-4,4.560386201037831e-5,-1.4315865288538859e-8,5.500030030438457e-4,4.5697985530979016e-5,-1.434147018981161e-8,5.499839508065228e-4,4.5696843463098964e-5,-1.4341625669559141e-8,5.499779032270899e-4,4.559110119398946e-5,-1.4312908167490931e-8,5.500244181110129e-4,4.5389582007094315e-5,-1.4256724128095877e-8,5.50157883005538e-4,4.512048381923619e-5,-1.417984329569152e-8,5.503995686945172e-4,4.482844257285975e-5,-1.4093882581779136e-8,5.507511242321261e-4,4.456714389146746e-5,-1.4013561269086788e-8,5.511914791808575e-4,4.438847474538031e-5,-1.3953862718354635e-8,5.516785262955729e-4,4.43302010252111e-5,-1.3926532510634918e-8,5.521561635635225e-4,4.4404755979930705e-5,-1.3936611787065186e-8,5.525663239678071e-4,4.459220322119048e-5,-1.3979975801327925e-8,5.528642063231052e-4,4.484065587117192e-5,-1.4043007349154969e-8,5.530328973052125e-4,4.507661529127626e-5,-1.4105288308440919e-8,5.530916519570143e-4,4.522480506594574e-5,-1.4145236907282978e-8,5.530923528858961e-4,4.523202408225343e-5,-1.4147030087645297e-8,5.531031506537776e-4,4.5085084291692684e-5,-1.4105860437065999e-8,5.531855430718504e-4,4.4813819040833696e-5,-1.4028958709191986e-8,5.533755526889687e-4,4.447784879142051e-5,-1.3932084645392354e-8,5.536768815553462e-4,4.41448232435347e-5,-1.3833668292310375e-8,5.540662856310166e-4,4.387093911013423e-5,-1.3749517436350942e-8,5.545054107827476e-4,4.369036706870036e-5,-1.3689826206305373e-8,5.549526056740539e-4,4.3613801028485625e-5,-1.3658542876311258e-8,5.553711420623051e-4,4.363257224331595e-5,-1.3654223719707622e-8,5.55733434845886e-4,4.3724503286497815e-5,-1.3671440617076656e-8,5.560225166865299e-4,4.385919757848827e-5,-1.3702164569045507e-8,5.56232263778228e-4,4.400211587684637e-5,-1.3736921152732457e-8,5.563673733728169e-4,4.4117846392702796e-5,-1.376575922796316e-8,5.564433941300915e-4,4.4173372568585065e-5,-1.3779194966470485e-8,5.564864419333089e-4,4.414206095567587e-5,-1.3769317275568825e-8,5.565317072407061e-4,4.4008603643539826E-05,-1.373115531210439e-8,5.566196665612034e-4,4.377426004116058e-5,-1.3664180386757936e-8,5.567893255742785e-4,4.3460653879901505e-5,-1.3573495648336821e-8,5.5706903259323e-4,4.3109638309396154e-5,-1.3470018373719109e-8,5.574671621600434e-4,4.277713905643178e-5,-1.3369019224232388e-8,5.579663031544923e-4,4.25209069743737e-5,-1.3286905991693288e-8,5.585242506155931e-4,4.2385091814629774e-5,-1.323695369887385e-8,5.590827837639093e-4,4.238670958930531e-5,-1.322532616995296e-8,5.595820943030839e-4,4.2508928121728134e-5,-1.324879527303495e-8,5.599765436803205e-4,4.270375260425213e-5,-1.3295025360336303e-8,5.602470647653046e-4,4.290357624198227e-5,-1.3345467218010926e-8,5.604066433327727e-4,4.3038521618008536e-5,-1.3380135565607916e-8,5.604971361354452e-4,4.305496671614097e-5,-1.3382982052173816e-8,5.605778644400599e-4,4.293002467591174e-5,-1.3346289025681776e-8,5.607089623263255e-4,4.267729978794635e-5,-1.3272636519098559e-8,5.609347399582315e-4,4.234165410834814e-5,-1.3173718674744843e-8,5.61272824224999e-4,4.1984822487049506e-5,-1.3066489427049024e-8,5.617125088503604e-4,4.1667542738988164e-5,-1.2968201743518012e-8,5.622215885905281e-4,4.1434866394617e-5,-1.289219032748799e-8,5.627575830200749e-4,4.130882130901546e-5,-1.2845587660872705e-8,5.632786025023382e-4,4.1288594336048484e-5,-1.2829102735199409e-8,5.637508743402848e-4,4.135555763250854e-5,-1.2838217765699319e-8,5.641523616550949e-4,4.147987966628914e-5,-1.2864954028178306e-8,5.644734987008431e-4,4.1626480056051095e-5,-1.2899567931198906e-8,5.647164882240774e-4,4.1759528984558676e-5,-1.2931887162585448e-8,5.648942535231952e-4,4.184578296212132e-5,-1.2952297818560158e-8,5.650294889116143e-4,4.1857547900959665e-5,-1.2952577895423737e-8,5.651535715361088e-4,4.177605896823371e-5,-1.2926828568155383e-8,5.653044894483615e-4,4.159567182824132e-5,-1.287267633441649e-8,5.655225692094629e-4,4.132839759346974e-5,-1.279266224815386e-8,5.658430328778544e-4,4.100697766475647e-5,-1.2695307297663935e-8,5.662857653330005e-4,4.068344030322492e-5,-1.2594934042639526e-8,5.668451659124272e-4,4.042019197207262e-5,-1.2509327194232984e-8,5.674853336557398e-4,4.027347907363591e-5,-1.2455107328985577e-8,5.681455713211361e-4,4.027408208489247e-5,-1.244214622307206e-8,5.68756746685192e-4,4.0414004798879e-5,-1.2469513131187434e-8,5.692626340933667e-4,4.0646580039138516e-5,-1.2525133623159566e-8,5.696369955166504e-4,4.090066807453131e-5,-1.2589478046435055e-8,5.698896665275624e-4,4.110245921092196e-5,-1.2641551835441664e-8,5.700608716068607e-4,4.1195953729986446e-5,-1.2664715990718236e-8,5.702077505850598e-4,4.1155798139361454e-5,-1.2650540717421748e-8,5.703884759901265e-4,4.099042424392756e-5,-1.2600051493450478e-8,5.706483903579017e-4,4.073662588412746e-5,-1.2522583891047876e-8,5.710109691405875e-4,4.0448332338844876e-5,-1.243290518949643e-8,5.714748841309391e-4,4.0182934684654553E-05,-1.2347452802728689e-8,5.720170435890389e-4,3.9988544477136714e-5,-1.2280615128135358e-8,5.726001321744273e-4,3.9895057969472874e-5,-1.2241921421025485e-8,5.731821206679281e-4,3.991064069654339e-5,-1.2234717623019245e-8,5.737250198595423e-4,4.002343402058786e-5,-1.2256397133360156e-8,5.742009861844149e-4,4.0206784374766535e-5,-1.2299779958393722e-8,5.745952088943357e-4,4.042579305071043e-5,-1.2355009254206567e-8,5.749061274942017e-4,4.064339540438695e-5,-1.2411383146639144e-8,5.751440773201222e-4,4.0825069665894794e-5,-1.2458778726029885e-8,5.753293799587323e-4,4.094221059405223e-5,-1.2488629625521792e-8,5.754904006567578e-4,4.097477176506438e-5,-1.2494646793562146e-8,5.756615125629631e-4,4.0913864151746437e-5,-1.2473547362790684e-8,5.758803459554417e-4,4.076472695839921e-5,-1.24259847650868e-8,5.761832436211499e-4,4.0549772255380785e-5,-1.2357617600292305e-8,5.765979379808243e-4,4.0310124351701156e-5,-1.2279811549458918e-8,5.771336876089873e-4,4.010269549721812e-5,-1.2209012413795871e-8,5.777716895829274e-4,3.9989598090760646e-5,-1.2163757626176808e-8,5.784616465902294e-4,4.001937776225071e-5,-1.2159125570823381e-8,5.791308482835355e-4,4.020580099469462e-5,-1.2200322952745242e-8,5.797065295022585e-4,4.0515899636114696e-5,-1.2278907274980914e-8,5.80142457888133e-4,4.087731150446172e-5,-1.2374661952472232e-8,5.804354401798264e-4,4.120363917341638e-5,-1.2462792256088949e-8,5.806232139856671e-4,4.142456024104346e-5,-1.2522577976320966e-8,5.807671988462954e-4,4.1505812543823224e-5,-1.2543184545504214e-8,5.809309310098887e-4,4.145299058481706e-5,-1.2524943479233836e-8,5.811633911987712e-4,4.130273058000135e-5,-1.2477155055317291e-8,5.814906054594975e-4,4.110843349549538e-5,-1.241437134424403e-8,5.819145513730104e-4,4.092617541810449e-5,-1.2352610977888855e-8,5.824169208822125e-4,4.0803658015597504e-5,-1.2306198503680667e-8,5.829655041898003e-4,4.077300848955851e-5,-1.2285457641107754e-8,5.835216304790936e-4,4.08473506951388e-5,-1.2295353076190144e-8,5.840475044047213e-4,4.1020878040647856e-5,-1.2335168157344423e-8,5.845123946407954e-4,4.1271912795883656e-5,-1.2399194688289209e-8,5.848968676341912e-4,4.1568009920163966e-5,-1.247819580484653e-8,5.851947152164219e-4,4.1871931312817365e-5,-1.2561243079423654e-8,5.854127287371877e-4,4.214737362730478e-5,-1.2637501168654626e-8,5.855689082537816e-4,4.236363657066199e-5,-1.2697641820982583e-8,5.856898580934266e-4,4.2498978178316354e-5,-1.2734800220127118e-8,5.85807889067023e-4,4.254292268264029e-5,-1.2745207957826337e-8,5.859579513795578e-4,4.249795347224145e-5,-1.272871639020561e-8,5.861741086786202e-4,4.2380895742717424e-5,-1.2689360718495551e-8,5.8648484953241e-4,4.2223796026970555e-5,-1.2635890084310931e-8,5.869065735812319e-4,4.2073073991807874e-5,-1.2581801894459312e-8,5.874356319421588e-4,4.19846475120227e-5,-1.2544061137121026e-8,5.880413756125081e-4,4.201259995003142e-5,-1.2539678227518325e-8,5.886653049404993e-4,4.219108683589354e-5,-1.2580052638216501e-8,5.8923238679551e-4,4.2514839582835756e-5,-1.266480189970253e-8,5.896756386652956e-4,4.2930283800824865e-5,-1.2778839288959433e-8,5.89964101552167e-4,4.334851356362142e-5,-1.2896139522771572e-8,5.901171113360668e-4,4.367814905014522e-5,-1.298951948589008e-8,5.901947880698806e-4,4.38602737483596e-5,-1.3040992057450742e-8,5.902714285460607e-4,4.3885736496831144e-5,-1.3046861211874255e-8,5.904086373518427e-4,4.3789236335983746e-5,-1.3016096632518927e-8,5.90640488345573e-4,4.362965960038413e-5,-1.2964884842237333e-8,5.90971946441086e-4,4.34695603945582e-5,-1.2911008855333938e-8,5.913852195337234e-4,4.336092270372908e-5,-1.2869904121306538e-8,5.918485774305888e-4,4.333812126088688e-5,-1.285252461742886e-8,5.923245446952727e-4,4.3416150897318016e-5,-1.2864501648532461e-8,5.927764593066211e-4,4.359190961413261e-5,-1.2906114467297666e-8,5.931734732856898e-4,4.384714236114294e-5,-1.2972841846778543e-8,5.934942150203255e-4,4.4152466088083324e-5,-1.3056421398296158e-8,5.937291030815587e-4,4.447215885443439e-5,-1.3146311817982143e-8,5.938811933955622e-4,4.47693426906656e-5,-1.3231356330999967e-8,5.93965485886057e-4,4.5011077674093984e-5,-1.3301399351245954e-8,5.94006799600864e-4,4.5172770496475155e-5,-1.334862131885749e-8,5.940365840398179e-4,4.5241413682133494e-5,-1.336846818500244e-8,5.940891110207756e-4,4.521750624615486e-5,-1.3360212923084611e-8,5.941973595900601e-4,4.511571456359875e-5,-1.3327250246980502e-8,5.943887128092454e-4,4.4964352725929755e-5,-1.3277177720368145e-8,5.946803298205737e-4,4.480359021479988e-5,-1.3221572693952441E-08,5.950740552025116e-4,4.4681698944798734e-5,-1.3175121289205661e-8,5.955515209880322e-4,4.4648007751150914e-5,-1.3153551831570361e-8,5.960715426732222e-4,4.474149532569575e-5,-1.3169977028198143e-8,5.965733804112413e-4,4.4975795704802126e-5,-1.3229934760324216e-8,5.969897334847129e-4,4.5325368620618036e-5,-1.3326761651752678e-8,5.972695820723137e-4,4.572244176421522e-5,-1.3440440521292401e-8,5.974020923934746e-4,4.607385900358259e-5,-1.3542760448690568e-8,5.974260041454101e-4,4.6295468638069834e-5,-1.3607887991505155e-8,5.974149745012774e-4,4.63461491160932e-5,-1.3622690856111841e-8,5.974464645346873e-4,4.62408255489987e-5,-1.3590608456208522e-8,5.975733330563519e-4,4.603711609863486e-5,-1.3527729382284185e-8,5.978120949073726e-4,4.5808229996933905e-5,-1.3455010772294891e-8,5.981476506938362e-4,4.561887790575258e-5,-1.3391473757723922e-8,5.985457456463102e-4,4.551241536514983e-5,-1.3350535217826406e-8,5.989652880636257e-4,4.550820785410715e-5,-1.3339057205444769e-8,5.993671400674556e-4,4.560473672048171e-5,-1.3357888193002322e-8,5.997192571010954e-4,4.578464443118222e-5,-1.340296607210915e-8,5.999993638835912e-4,4.601975491101805e-5,-1.3466562670281527e-8,6.001963194062474e-4,4.627562551405624e-5,-1.353859250547407e-8,6.003106951839153e-4,4.651585668922163e-5,-1.3607999789540018e-8,6.003545828554706e-4,4.670640694476506e-5,-1.3664190858733449e-8,6.003504102879558e-4,4.681993271445912e-5,-1.3698426655564152e-8,6.003285040062579e-4,4.6839792267256964e-5,-1.3705039077842174e-8,6.003233654665366e-4,4.6763054815347505e-5,-1.3682318721009288e-8,6.00368980029104e-4,4.6601915443853456e-5,-1.3632979669015082e-8,6.004936892972919e-4,4.638313791509782e-5,-1.3564152706925421e-8,6.007152397239569e-4,4.6145339984406526e-5,-1.348684271745055e-8,6.010365913857648e-4,4.5934168128419516e-5,-1.3414767746104295e-8,6.014429942225124e-4,4.5795480210201754e-5,-1.3362464203894209e-8,6.019011057532637e-4,4.576653383496385e-5,-1.334252963495435e-8,6.023615895275835e-4,4.586559553492988e-5,-1.3362105344807452e-8,6.027669935205449e-4,4.608188309838632e-5,-1.3419300705541302e-8,6.030658883371729e-4,4.6370003546858796e-5,-1.350105745458068e-8,6.032312519987232e-4,4.66548633865428e-5,-1.3584497719127712e-8,6.032758091670896e-4,4.685133527899667e-5,-1.3643100300052348e-8,6.032535495762095e-4,4.6894725810143705e-5,-1.365628640799527e-8,6.03241729155245e-4,4.6767362660908595e-5,-1.3617683021674188e-8,6.033108166392385e-4,4.65049510596044e-5,-1.3537085025814027e-8,6.034993182490741e-4,4.617895985207165e-5,-1.3435213551070888e-8,6.038060843341433e-4,4.5867317225684895e-5,-1.3335114749071355e-8,6.041994185155103e-4,4.563018257654167e-5,-1.3255104395874068e-8,6.046332663829588e-4,4.549926714185694e-5,-1.3205572436516151e-8,6.05061438746373e-4,4.5478931464839044e-5,-1.3189054107180226e-8,6.054462336936745e-4,4.555306960662015e-5,-1.3201909329785792e-8,6.05762009514742e-4,4.5692876070382345e-5,-1.3236331295070042e-8,6.059957599659084e-4,4.586321651672058e-5,-1.3282117826334546e-8,6.061465022300673e-4,4.6027351570760987e-5,-1.332813231699191e-8,6.062243702543427e-4,4.615066462844048e-5,-1.3363565264245378e-8,6.062495021200464e-4,4.620409516581872e-5,-1.3379104609315037e-8,6.062503718534889e-4,4.616766157689615e-5,-1.3368067825864579e-8,6.062610395188557e-4,4.6033924576426214e-5,-1.3327457601791911e-8,6.063169469718518e-4,4.581063544655485e-5,-1.3258772884036288e-8,6.064494044595206e-4,4.55215188896636e-5,-1.3168331958415403e-8,6.066795318747286e-4,4.52042881604833e-5,-1.3066866709055663e-8,6.070128998625647e-4,4.490545427349359e-5,-1.2968213330564991e-8,6.074363111856063e-4,4.467226793872749e-5,-1.2887087372606102e-8,6.079179098524724e-4,4.4543009907630994e-5,-1.2836174421477544e-8,6.084112436310817e-4,4.453736700212919e-5,-1.282297992625794e-8,6.08863370461571e-4,4.464886329443632e-5,-1.2847073663286673e-8,6.092264758703546e-4,4.4841679024146196e-5,-1.289860746681526e-8,6.094712937410751e-4,4.505445305432866e-5,-1.2959127922180999e-8,6.095987972448405e-4,4.521292039621171e-5,-1.3005410854173592e-8,6.096448764943399e-4,4.5250510079934645e-5,-1.3016030794821033e-8,6.096730138384927e-4,4.513114561506076e-5,-1.2978711001202054e-8,6.097545631549566e-4,4.486402580498518e-5,-1.2895124516848801e-8,6.099439852908066e-4,4.450134061490781e-5,-1.2780348513948726e-8,6.102610819546051e-4,4.4118743907326676e-5,-1.265702267633818e-8,6.106884949894511e-4,4.378880296374916e-5,-1.2547376438516559e-8,6.111831302385094e-4,4.356052924504412e-5,-1.2467023709897674e-8,6.116930853079845e-4,4.3451843285146805e-5,-1.2422507196552202e-8,6.121718091847651e-4,4.3453283807383274e-5,-1.2412110270198072e-8,6.125859229567852e-4,4.3537061943772174e-5,-1.242828767855344e-8,6.129174051327997e-4,4.3666315988779066e-5,-1.2460290569013057e-8,6.131625421240779e-4,4.380214478201701e-5,-1.249629588729844e-8,6.133297797994605e-4,4.390824915390768e-5,-1.2524935334363993e-8,6.134376059320164e-4,4.395405443660182e-5,-1.2536392208869133e-8,6.135126429920539e-4,4.391729178049016e-5,-1.2523285610369912e-8,6.135875232541355e-4,4.37866565556534e-5,-1.248151062142838e-8,6.136978474050366e-4,4.3564553195397556e-5,-1.2411078877572878e-8,6.138776204707606e-4,4.3269171658970975e-5,-1.2316794930864575e-8,6.141531157431434e-4,4.293451537346142e-5,-1.2208394276352459e-8,6.145360882992824e-4,4.260690395661579e-5,-1.2099680577646451e-8,6.150183068876578e-4,4.233718420343913e-5,-1.2006354865178858e-8,6.155698862543469e-4,4.216944569007125e-5,-1.194266561911202e-8,6.161432780116315e-4,4.212893829735594e-5,-1.191760894514987e-8,6.166829962369822e-4,4.221304211145604e-5,-1.1931838226690434e-8,6.171390028809723e-4,4.2388733189199025e-5,-1.1976435073662864e-8,6.174801786565707e-4,4.2598204728411776e-5,-1.2034228597516467e-8,6.177039713164523e-4,4.2771969148489644e-5,-1.2083631887323418e-8,6.178390324477566e-4,4.284658717591776e-5,-1.2104190944765916e-8,6.179391490155112e-4,4.2782467541547576e-5,-1.2082381407395732e-8,6.180690499519215e-4,4.257622589977647e-5,-1.2015807665370394e-8,6.182856981106309e-4,4.2262641290182364e-5,-1.1914142478848567e-8,6.186214061728539e-4,4.1904306638940616e-5,-1.1796159869780265e-8,6.190753692770967e-4,4.1572254817565175e-5,-1.168386155567887e-8,6.196167242703293e-4,4.1325277041778395e-5,-1.1596058210408694e-8,6.201967488488639e-4,4.119594759437842e-5,-1.1543865254199268e-8,6.20764019662867e-4,4.118716574602068e-5,-1.1529328261415304e-8,6.21276549030351e-4,4.127757978552318e-5,-1.154678533548196e-8,6.217080946567695e-4,4.143120927489927e-5,-1.1585638643255654e-8,6.220491812385284e-4,4.1606888823869886e-5,-1.1633240123016763e-8,6.223049974865838e-4,4.176527688606243e-5,-1.1677161479087305e-8,6.224922388533137e-4,4.1873203335198556e-5,-1.1706688765447071e-8,6.226360955927154e-4,4.1906205539858945e-5,-1.1713717885084007e-8,6.227676718629662e-4,4.185030251602371e-5,-1.1693341505436549E-08,6.229214415278793e-4,4.1703735041523074e-5,-1.1644381723185078e-8,6.231319853664534e-4,4.147878640125714e-5,-1.1569970337746821e-8,6.234292802965761e-4,4.120299476324085e-5,-1.1478018587251494e-8,6.238323413543623e-4,4.0918246606836314e-5,-1.1381111507640178e-8,6.243421835840833e-4,4.067585345858345e-5,-1.1295177991775304e-8,6.249366570621865e-4,4.052646987191822e-5,-1.1236482520549367e-8,6.255707246045346e-4,4.0506051125566727e-5,-1.1217220872998886e-8,6.261847863392266e-4,4.062225481812146e-5,-1.124105993740093e-8,6.267202336075681e-4,4.08475845493812e-5,-1.1300642714626034e-8,6.271371716095217e-4,4.112393555640522e-5,-1.1378640363826194e-8,6.274272002337375e-4,4.137818217173511e-5,-1.1452374173663731e-8,6.276160661029025e-4,4.1543172110683946e-5,-1.1500321761911784e-8,6.277555903893943e-4,4.157642470580568e-5,-1.1508102924530854e-8,6.27908422691926e-4,4.147064598947023e-5,-1.1472061584588963e-8,6.281309101857208e-4,4.125382444025051e-5,-1.1399670417759892e-8,6.284589806615875e-4,4.0979990293322234e-5,-1.1307001676311571e-8,6.289004951050204e-4,4.071397673517665e-5,-1.1214196847662963e-8,6.294355537344494e-4,4.051475934856745e-5,-1.1140281814471427e-8,6.300239373611482e-4,4.0422039237037176e-5,-1.1098767800734435e-8,6.306167817204206e-4,4.044943019418976e-5,-1.1095165829009265e-8,6.311685570877783e-4,4.058515042629986e-5,-1.1126836428171848e-8,6.316459742628735e-4,4.079850842401508e-5,-1.1184776656645354e-8,6.320322305868174e-4,4.104897677346346e-5,-1.1256406714476454e-8,6.323269912046183e-4,4.129481071708473e-5,-1.1328374881368757e-8,6.325436800244089e-4,4.149944694038418e-5,-1.138873428162963e-8,6.327057717418874e-4,4.16353572641571e-5,-1.142829124798009e-8,6.3284320211077e-4,4.168599958414399e-5,-1.144127484924841e-8,6.329892507073682e-4,4.1646813714983565e-5,-1.1425641935138297e-8,6.331776221375067e-4,4.1525972124440285e-5,-1.1383308731724334e-8,6.334390698103364e-4,4.134505386970275e-5,-1.1320431548573354e-8,6.337968406765966e-4,4.1139068109295805e-5,-1.1247577530122925e-8,6.342606793062239e-4,4.0954382499360176e-5,-1.1179279984573037e-8,6.34820349377044e-4,4.084256691331992e-5,-1.1132243894526839e-8,6.354414692002509e-4,4.084884439949683e-5,-1.1121682761778917e-8,6.360679001502076e-4,4.0996568100376256e-5,-1.1156195968997953e-8,6.366339468110234e-4,4.1273455162251384e-5,-1.1233067444498262e-8,6.370847593082296e-4,4.162814226045832e-5,-1.1336844237008164e-8,6.37396720814852e-4,4.1982708229566924e-5,-1.1443112874876232e-8,6.375870858518857e-4,4.225789061658065e-5,-1.1526456467575253e-8,6.377074182492132e-4,4.239935949578947e-5,-1.1568844891267493e-8,6.378247532323368e-4,4.239301187350808e-5,-1.1564617122042744e-8,6.380001550354765e-4,4.226467189936685e-5,-1.1520634437041544e-8,6.382730696351323e-4,4.20678159364482e-5,-1.145275407366425e-8,6.386547983664781e-4,4.186642207611976e-5,-1.1380759726833166e-8,6.391301491825187e-4,4.1718969727590826e-5,-1.1323481608403951e-8,6.396645134501095e-4,4.16669354931265E-05,-1.1295058824572489e-8,6.402135211432802e-4,4.1728883630486846e-5,-1.130272523179324e-8,6.407329313863037e-4,4.189994975384543e-5,-1.1346210158588048e-8,6.411869273337647e-4,4.215579668992807e-5,-1.141864418294653e-8,6.415535317098374e-4,4.245951292741821e-5,-1.1508603446175233e-8,6.418266451670236e-4,4.276953906141313e-5,-1.160268944345754e-8,6.420150711981394e-4,4.3046889911181794e-5,-1.168800792468656e-8,6.42139481568027e-4,4.326056338850396e-5,-1.1754073581974093e-8,6.422284650134046e-4,4.3390762964130205e-5,-1.1793939423120785e-8,6.423145863944254e-4,4.343025232088572e-5,-1.1804643333497793e-8,6.424308611712833e-4,4.3384560725109035e-5,-1.1787259369334247e-8,6.426075271147033e-4,4.327164998942055e-5,-1.1746830998873365e-8,6.428686772623222e-4,4.312121499188235e-5,-1.1692290186969063e-8,6.43228211111064e-4,4.297319789412587e-5,-1.163620160738782e-8,6.436849034127897e-4,4.2874338512484316e-5,-1.1593853762600689e-8,6.442175178239869e-4,4.287106863696716e-5,-1.1581024865378009e-8,6.447826241944376e-4,4.299769946587701e-5,-1.1610003778983072e-8,6.453192106631316e-4,4.326148989808878e-5,-1.1684410461728622e-8,6.457633643151136e-4,4.363072674477005e-5,-1.179495428359945e-8,6.460709780358178e-4,4.403539258500074e-5,-1.1919425251124777e-8,6.46238269440531e-4,4.438654427814625e-5,-1.202896701159812e-8,6.463067360377512e-4,4.460863357575101e-5,-1.2098638955452586e-8,6.463473522053487e-4,4.466782983677177e-5,-1.2116629130642991e-8,6.464328198700985e-4,4.458091988511223e-5,-1.2087172530117929e-8,6.466134080396352e-4,4.440296244483021e-5,-1.2026767218001455e-8,6.469062893985017e-4,4.420432212394621e-5,-1.1957162905655501e-8,6.472980673486538e-4,4.4049415375376975e-5,-1.1898899064049858e-8,6.477545569824074e-4,4.398348465637827e-5,-1.1867178141227173e-8,6.482321283936542e-4,4.402769158632383e-5,-1.1870077472484313e-8,6.486874451684293e-4,4.4180110616365914e-5,-1.190843181001741e-8,6.490845942283705e-4,4.442004791255551e-5,-1.1976767655848106e-8,6.493996674170178e-4,4.471399475420608e-5,-1.2064930829832403e-8,6.496230132730473e-4,4.502224997790057e-5,-1.2160170877601224e-8,6.497593165315699e-4,4.530541463222377e-5,-1.2249376594925378e-8,6.498257985589669e-4,4.5530023897967826e-5,-1.2321106524374785e-8,6.498490150835266e-4,4.5672787320462324e-5,-1.2367125184429808e-8,6.49860849248668e-4,4.5723111388483726e-5,-1.2383285624306336e-8,6.498943459428724e-4,4.56838734642481e-5,-1.2369777794004631e-8,6.499798483583396e-4,4.5570805788698724e-5,-1.2330940194194202e-8,6.50141540921297e-4,4.5410946737608354e-5,-1.2274858062634918e-8,6.50394252361549e-4,4.524034632505981e-5,-1.2212820673742356e-8,6.507402898474811e-4,4.510081644081227e-5,-1.2158498221920027e-8,6.511662941424877e-4,4.503501619399875e-5,-1.2126476181320007e-8,6.516409652377725e-4,4.507883196177047e-5,-1.2129687005367259e-8,6.521158333795178e-4,4.525065636203942e-5,-1.2175577965498676e-8,6.525322031476455e-4,4.553941364164363e-5,-1.2261726884082065e-8,6.528365381010586e-4,4.5896913451435045e-5,-1.2372957541494924e-8,6.53001864278318e-4,4.6243075736359524e-5,-1.2482966177543175e-8,6.530450153429226e-4,4.6489294263523875e-5,-1.2562182212005331e-8,6.530262302326049e-4,4.657300931178719e-5,-1.2589338662501737e-8,6.530266241761063e-4,4.6484341852986244e-5,-1.2560253186849565e-8,6.531153745404709e-4,4.626789168937222e-5,-1.248839206681805e-8,6.533259500794602e-4,4.600025166059354e-5,-1.2397689341809364e-8,6.536518626923442e-4,4.5759473698595974e-5,-1.2312978138197302e-8,6.540578644141293e-4,4.56028117197643e-5,-1.2253084886290816e-8,6.544960449519266e-4,4.555825704891566e-5,-1.222809841334969e-8,6.549192256583115e-4,4.562646405711048e-5,-1.2239671643138295e-8,6.552892641813089e-4,4.578752220519903e-5,-1.2282737836356728e-8,6.555809511761707e-4,4.6008638879196065e-5,-1.23475952409882e-8,6.557831063329746e-4,4.625097547136351e-5,-1.2421941128098137e-8,6.558981448308248e-4,4.647540239116749e-5,-1.2492798538365653e-8,6.559406151232579e-4,4.664739366488725e-5,-1.2548313680324879e-8,6.55934795368779e-4,4.674108669115587e-5,-1.2579299722569738e-8,6.559114262674878e-4,4.674234926529412e-5,-1.258037528172128e-8,6.559037475636952e-4,4.6650576798607184e-5,-1.2550589153337167e-8,6.559431799480559e-4,4.647890047352641e-5,-1.2493483386171588e-8,6.560551490320222e-4,4.625272895401807e-5,-1.241665830734056e-8,6.562554736211841e-4,4.6006843480568736e-5,-1.2330965549949725e-8,6.565475621712678e-4,4.5781298533340715e-5,-1.224938677601268e-8,6.569205673771478e-4,4.561626701972796e-5,-1.2185538559539806e-8,6.573487109405446e-4,4.554580590585966e-5,-1.2151659149246088e-8,6.577924153502072e-4,4.5590415220543125e-5,-1.215594635662814e-8,6.58202593113294e-4,4.574881097857109e-5,-1.2199412084801173e-8,6.585297262397721e-4,4.59909687918636e-5,-1.2273096298199133e-8,6.587382425042407e-4,4.62568085760598e-5,-1.2357324481940705e-8,6.588231495329708e-4,4.646624084061321e-5,-1.2425073606254522e-8,6.588204978599106e-4,4.65431768960108e-5,-1.2450244405357208e-8,6.588012287440477e-4,4.644637290291428e-5,-1.2418191579088436e-8,6.588458419334591e-4,4.61899779128904e-5,-1.2332619928155143e-8,6.590119357198074e-4,4.5838877755827045e-5,-1.2214031205022718e-8,6.593137391720427e-4,4.548068499544168e-5,-1.2090617955505468e-8,6.597236153319567e-4,4.519227164557173e-5,-1.1987544773090963e-8,6.601895628610029e-4,4.5018724180246425e-5,-1.1920237507966108e-8,6.606554423138694e-4,4.49697296954195e-5,-1.189308702067798e-8,6.610749674083071e-4,4.502738150794323e-5,-1.1901620274760557e-8,6.614178803084616e-4,4.515738862713096e-5,-1.1935726383931564e-8,6.616706357616994e-4,4.531887849385159e-5,-1.1982572911828448e-8,6.61834447382716e-4,4.547133072107415e-5,-1.2028824379413137e-8,6.6192264137107e-4,4.5579126378920714e-5,-1.2062283892577649e-8,6.619580115031964e-4,4.561475770029697e-5,-1.2073180904243843e-8,6.619700433900955e-4,4.556135838574398e-5,-1.2055197467963607e-8,6.61991699576438e-4,4.5414661343623503e-5,-1.200620365179172e-8,6.620555712945934e-4,4.51840896179602e-5,-1.1928622796913211e-8,6.621894741458482e-4,4.489240920507422e-5,-1.182931385336294e-8,6.624119923538018e-4,4.457342997377879e-5,-1.1718880084197724e-8,6.627287685916333e-4,4.4267655432898346e-5,-1.1610397059841187e-8,6.631303288208212e-4,4.401622188040044e-5,-1.1517614629584648e-8,6.635920520441031e-4,4.3853814799379214e-5,-1.1452739383809711e-8,6.640766309640293e-4,4.3801500136949246e-5,-1.1423990223408127e-8,6.645391547065707e-4,4.3860465762502585e-5,-1.1433213609765761e-8,6.649348907757294e-4,4.400781803244625e-5,-1.1474022268078109e-8,6.652295738743438e-4,4.4196208170768975e-5,-1.1531237312247409e-8,6.654109062286146e-4,4.435975285734818e-5,-1.1582666541464982e-8,6.654978651706966e-4,4.442827675775156e-5,-1.1603994416442983e-8,6.655421492594667e-4,4.434891282437948e-5,-1.1576365369570233e-8,6.656163939754637e-4,4.410816482066763e-5,-1.1494114352982963e-8,6.657897957674164e-4,4.3742356818358154e-5,-1.136844192019311e-8,6.661014873919342e-4,4.332714263267976e-5,-1.1223980436229123e-8,6.66546435586102e-4,4.294919512763321e-5,-1.1089453851181167e-8,6.670813088959861e-4,4.267547632709114e-5,-1.0987569771282318e-8,6.676444956798761e-4,4.2535713727573955e-5,-1.0929181332560628e-8,6.681774843805674e-4,4.252258156620681e-5,-1.0913107238000703e-8,6.686384044883153e-4,4.260325002735994e-5,-1.0929587800350869e-8,6.690062161390295e-4,4.2733346818073974e-5,-1.0964592948012124e-8,6.692787368457985e-4,4.286787118068754e-5,-1.1003310653399214e-8,6.694682707915127e-4,4.296777011126571e-5,-1.1032406940396475e-8,6.695972389198812e-4,4.300322240539698e-5,-1.1041321064106932e-8,6.696946149272839e-4,4.295523829967347e-5,-1.1023008875669534e-8,6.697929196037282e-4,4.2816698354687566e-5,-1.0974419442589062e-8,6.699251733474295e-4,4.2593196764431914e-5,-1.0896807753560433e-8,6.701212865700194e-4,4.230341044442153e-5,-1.0795842637994127e-8,6.704037174690174e-4,4.1978221761531796e-5,-1.0681328919295532e-8,6.707828559139265e-4,4.1657672615155404e-5,-1.0566288547495148e-8,6.712532690016723e-4,4.138524242901553e-5,-1.0465216530512158e-8,6.717922865944109e-4,4.119981360746378e-5,-1.0391550497627238e-8,6.723621835534646e-4,4.112674104581725e-5,-1.0354712996658229e-8,6.729163674503193e-4,4.117028254115718e-5,-1.0357404924622589e-8,6.734087601805087e-4,4.1309743555585105e-5,-1.0393953428156289e-8,6.738045432664134e-4,4.150094656252346e-5,-1.0450378613876328e-8,6.740899326696811e-4,4.168357203370962e-5,-1.0506544084907395e-8,6.742784623792691e-4,4.1793849405908306e-5,-1.0540362360195925e-8,6.744112537778521e-4,4.178074134045985e-5,-1.053345924363471e-8,6.745493044657425e-4,4.1621948675312874e-5,-1.0476951591107518e-8,6.747577135709221e-4,4.1334207987166106e-5,-1.0375304924468307e-8,6.750854372839487e-4,4.097200972504231e-5,-1.0246168788815136e-8,6.755482329271165e-4,4.0612262569480024e-5,-1.0115334350837037e-8,6.761231653952755e-4,4.032957409188221e-5,-1.0008413784011982e-8,6.767578521833027e-4,4.017301604488647e-5,-9.94290139609733e-9,6.773894310269758e-4,4.015465619698559e-5,-9.924065754328441e-9,6.779636072244319e-4,4.025271194279116e-5,-9.945684323589636e-9,6.784462992592076e-4,4.042426218751692e-5,-9.994032077050076e-9,6.788262531519046e-4,4.0619750895181834e-5,-1.0052621713449427e-8,6.791114670866537e-4,4.0793953317949755e-5,-1.0105937498144301e-8,6.793233103813246e-4,4.091197852871128e-5,-1.0141630257049476e-8,6.794909850969935e-4,4.0951453051865014e-5,-1.01514585939184e-8,6.7964728168145e-4,4.090274064307937e-5,-1.0131510062344522e-8,6.798254076015645e-4,4.076859742149239e-5,-1.0082138915684628e-8,6.800561699820016e-4,4.0563850495158245e-5,-1.0007849266961698e-8,6.8036477449427e-4,4.031492566409186e-5,-9.917132870207206e-9,6.807668440871827e-4,4.0058407100975396e-5,-9.822042726828585e-9,6.812639721347429e-4,3.98374389784475e-5,-9.737104678895134e-9,6.818400995093161e-4,3.9695020030860256e-5,-9.677186556046806e-9,6.824608377364019e-4,3.966437272967973e-5,-9.65429089058683e-9,6.830778514977682e-4,3.975846050622824e-5,-9.673896804332269e-9,6.8363893699842e-4,3.996251016407234e-5,-9.732153955509115e-9,6.841017372567231e-4,4.023361206932423e-5,-9.815394137449953e-9,6.844466228191916e-4,4.05092582535884e-5,-9.902727164968086e-9,6.846838738110617e-4,4.072297495515305e-5,-9.971213593928136e-9,6.848523051199315e-4,4.082220466885166e-5,-1.000201594026922e-8,6.850095982123903e-4,4.07828469698932e-5,-9.98560223372568e-9,6.852171873960667e-4,4.0616222783899834e-5,-9.924483469796086e-9,6.855238737488718e-4,4.036653532224773e-5,-9.832728989987601e-9,6.859526224257744e-4,4.00993290741107e-5,-9.732322816114245e-9,6.86494446675017e-4,3.988386503340198e-5,-9.647264291981038e-9,6.871115650576727e-4,3.977452661168896e-5,-9.597109977300679e-9,6.877489646437295e-4,3.979728759741124e-5,-9.592045225736865e-9,6.883501673843535e-4,3.994563772478752e-5,-9.631095222420986e-9,6.888714062386018e-4,4.018638516815171e-5,-9.70376889018204e-9,6.89289773006254e-4,4.047168422173579e-5,-9.79400284884246e-9,6.896042371432542e-4,4.075196513064055e-5,-9.884614283434994e-9,6.898314601928995e-4,4.0985699460782386e-5,-9.960814485912439e-9,6.899994707481199e-4,4.114457896454388e-5,-1.0012195088317796e-8,6.901416346331935e-4,4.1214864630885974e-5,-1.0033353714839723e-8,6.902920197616812e-4,4.119656099349532e-5,-1.0023683572674945e-8,6.904821165138293e-4,4.1101881144250444e-5,-9.986848350330236e-9,6.907382638650003e-4,4.09537582206849e-5,-9.930264533573738e-9,6.910790024415842e-4,4.0784383529647454e-5,-9.864646068425661e-9,6.915118287645734e-4,4.06330723894299e-5,-9.803388502339166e-9,6.92029478921974e-4,4.054225759251511e-5,-9.761330963984282e-9,6.926069404711696e-4,4.055042383207215e-5,-9.752392841996608e-9,6.93201577440324e-4,4.068187369966381e-5,-9.785963135087253e-9,6.937591702126083e-4,4.0935603885594335e-5,-9.86281521804032e-9,6.942270330740719e-4,4.1278405821690475e-5,-9.972398042232453e-9,6.945712632534799e-4,4.164815702606528e-5,-1.0093706764041374e-8,6.947908016139201e-4,4.196965425274466e-5,-1.0200641875276863e-8,6.949204861200494e-4,4.217816671559534e-5,-1.027018519806173e-8,6.950204845917e-4,4.2240436893643125e-5,-1.0289782773011855e-8,6.951568783835051e-4,4.2163991349505506e-5,-1.0260761389728324e-8,6.953820071952732e-4,4.1992296890793167e-5,-1.0196951522017627e-8,6.957214881833488e-4,4.1789873918597023e-5,-1.0119904592446122e-8,6.961704254910497e-4,4.162399139921554e-5,-1.0052855248199617e-8,6.966977464138914e-4,4.154851515582117e-5,-1.0015196278929336e-8,6.972559483814732e-4,4.159322790104321e-5,-1.0018554243928807e-8,6.977931798100247e-4,4.1759927789965654e-5,-1.006500579411969e-8,6.982647541256812e-4,4.202510292476047e-5,-1.0147554437825793e-8,6.986416504509654e-4,4.23477429452799e-5,-1.0252547579380231e-8,6.989144432942709e-4,4.267979568978907e-5,-1.0363254734980224e-8,6.990924889111561e-4,4.297633660441667e-5,-1.046354978955787e-8,6.991995765864698e-4,4.3203125469473766e-5,-1.0540778184890215e-8,6.992679525856361e-4,4.334055988722916e-5,-1.0587341630078698e-8,6.993324737511327e-4,4.338433788379723e-5,-1.0601042222300012e-8,6.994259422448656e-4,4.33439373540044e-5,-1.0584573537885036e-8,6.995758178822197e-4,4.324016014019141e-5,-1.0544655239898046e-8,6.998018846283525e-4,4.310255497934784e-5,-1.049116419505745e-8,7.001142366953494e-4,4.296687167505949e-5,-1.0436353487376878e-8,7.00511078834245e-4,4.28720812612912e-5,-1.0393964239501379e-8,7.009763426032131e-4,4.285598693783195e-5,-1.0377799290857615e-8,7.014781075470884e-4,4.294835757893481e-5,-1.0399281482030315e-8,7.01969994354906e-4,4.316142500987284e-5,-1.0463892261942207e-8,7.023982919714376e-4,4.3479848296496525E-05,-1.0567290124078954e-8,7.027162843902773e-4,4.385542505735799e-5,-1.0693127635927223e-8,7.029027821209852e-4,4.42135354664673e-5,-1.0815191406563102e-8,7.029758681401383e-4,4.44744496722845e-5,-1.0904987723913586e-8,7.029914590549362e-4,4.458263269534113e-5,-1.0942205658178163e-8,7.030240973959722e-4,4.4528749813272105e-5,-1.0922540209312683e-8,7.031394395161471e-4,4.435182467687107e-5,-1.0858532246731884e-8,7.033730001998939e-4,4.412187581728143e-5,-1.0773708033050758e-8,7.037236525719877e-4,4.391449186565976e-5,-1.0694038600834027e-8,7.041603691418619e-4,4.378961991431415e-5,-1.0640801646843702e-8,7.046353875274154e-4,4.378031259963003e-5,-1.0626632482199593e-8,7.050976569019387e-4,4.3890906265389334e-5,-1.0654550090175343e-8,7.055033512381783e-4,4.4101463726791514e-5,-1.0719012226212606e-8,7.058225832089542e-4,4.4375368649487437e-5,-1.0808140470310517e-8,7.060425584939559e-4,4.4667972118194066e-5,-1.0906544945457309e-8,7.061676354241381e-4,4.4934992978476056e-5,-1.0998328320161188e-8,7.062167941862384e-4,4.513963638656883e-5,-1.1069817830506132e-8,7.062192461146077e-4,4.525758094198104e-5,-1.1111586225981603e-8,7.062091365135665e-4,4.527941172781372e-5,-1.1119497270185845e-8,7.062203187254132e-4,4.521057587191405e-5,-1.1094762027694266e-8,7.062819845440831e-4,4.5069391812404094e-5,-1.1043233702560278e-8,7.06415505665796e-4,4.488393907460559e-5,-1.0974313413837001e-8,7.066323612634319e-4,4.4688540962570335e-5,-1.089978106738531e-8,7.069327966070445e-4,4.452012245181196e-5,-1.0832652650027417e-8,7.073048809528734e-4,4.4414291049901125e-5,-1.0785940512482935e-8,7.077239303819673e-4,4.4400593182769026e-5,-1.0771010723654536e-8,7.081530282662858e-4,4.449628480384157e-5,-1.0795218004047385e-8,7.08546309372772e-4,4.4698728013663695e-5,-1.0858860998889045e-8,7.088570074624559e-4,4.497837061391854e-5,-1.0952277710884579e-8,7.090511764918637e-4,4.527680031930541e-5,-1.1054882078469456e-8,7.091242875412201e-4,4.551603875633128e-5,-1.1138494306429178e-8,7.091120498076681e-4,4.562208888687946e-5,-1.117598713005094e-8,7.090846177539748e-4,4.5555482629709526e-5,-1.1152408119707443e-8,7.091216217038918e-4,4.533143658656323e-5,-1.1072207380177586e-8,7.092802036001695e-4,4.501504148607371e-5,-1.0957523637321026e-8,7.095747795025035e-4,4.469379194735881e-5,-1.0838617797559788e-8,7.099779924341384e-4,4.4444886939645104e-5,-1.0742641317809363e-8,7.104372322708001e-4,4.431417690490606e-5,-1.0686428868332595e-8,7.108944427121056e-4,4.43116119214771e-5,-1.067478403156329e-8,7.113007184917924e-4,4.441806234799192e-5,-1.0702470480375884e-8,7.11623679367533e-4,4.459632083759559e-5,-1.0757592826290675e-8,7.118492538786992e-4,4.480161570626685e-5,-1.0824953711808661e-8,7.11980233791131e-4,4.4989876558258635e-5,-1.0888886188899312e-8,7.120332870788396e-4,4.512373743613871e-5,-1.093553525218388e-8,7.120351830951165e-4,4.517671189813642e-5,-1.0954618391336977e-8,7.12018506314901e-4,4.513573773315998e-5,-1.094058962873492e-8,7.12017114163592e-4,4.500208629716573e-5,-1.0893112309757543e-8,7.120616914124563e-4,4.47905968840482e-5,-1.0816818974571956e-8,7.121758530794824e-4,4.452730583824109e-5,-1.0720449941183935e-8,7.12373225808455e-4,4.424582850797638e-5,-1.0615582948149321e-8,7.126557056969058e-4,4.3983020894276823E-05,-1.0515185840291802e-8,7.130128748690027e-4,4.377430370445033e-5,-1.0432097453514521e-8,7.134225026408814e-4,4.364884043657226e-5,-1.0377410518766734e-8,7.138521296875519e-4,4.3624612316220915e-5,-1.0358662531311387e-8,7.142621087199356e-4,4.370335181858926e-5,-1.0377769717223068e-8,7.146110340123279e-4,4.386580901383108e-5,-1.0428929632440784e-8,7.148644843579355e-4,4.406916289330847e-5,-1.0497305281474699e-8,7.150068229220568e-4,4.424991700273873e-5,-1.0559887164612516e-8,7.150530524366479e-4,4.4336178298709344e-5,-1.0590042672540263e-8,7.15053734810595e-4,4.42704276374271e-5,-1.056605287956476e-8,7.150846291680763e-4,4.403576931514396e-5,-1.0480847359923442e-8,7.152198511851885e-4,4.3670120179829765e-5,-1.0347183403858284e-8,7.155008744882165e-4,4.325529287265698e-5,-1.019372183871818e-8,7.159202063701489e-4,4.288442453165478e-5,-1.0053486378649688e-8,7.164288382090401e-4,4.262714020159595e-5,-9.95164253828637e-9,7.169595712173114e-4,4.2511112636761016e-5,-9.899008498589871e-9,7.174506599694499e-4,4.2524020942925516e-5,-9.892540841677029e-9,7.178598144621892e-4,4.2627404619268514e-5,-9.91983987587705e-9,7.181678446769699e-4,4.27721963699476e-5,-9.964266310840572e-9,7.183759126586623e-4,4.291045343841636e-5,-1.0008908875743132e-8,7.18500405594647e-4,4.300234497131943e-5,-1.0039122755238085e-8,7.185677828556197e-4,4.30196320106107e-5,-1.0044007543963475e-8,7.186101042079086e-4,4.294717412168661e-5,-1.001723346601736e-8,7.186610533817944e-4,4.278335317154585e-5,-9.957406051808767e-9,7.18752168284341e-4,4.253964376045135e-5,-9.867997924772748e-9,7.189091853091514e-4,4.2239192867652126e-5,-9.756827287293615e-9,7.191486680453425e-4,4.191412441845834e-5,-9.635062646698978e-9,7.194753833185204e-4,4.1601472907260915e-5,-9.515794554155215e-9,7.198809710473828e-4,4.1338056243998875e-5,-9.412302783608438e-9,7.203442861506658e-4,4.115483206636226e-5,-9.33615368049298e-9,7.208335901116579e-4,4.107136650050428e-5,-9.295250483512817e-9,7.21310582686931e-4,4.109113767836152e-5,-9.292009746461441e-9,7.217361374829578e-4,4.1198376722348027e-5,-9.321908690989147e-9,7.220776248483091e-4,4.135721706930838e-5,-9.372781644989014e-9,7.223174798075731e-4,4.151444248885548e-5,-9.42550576306746e-9,7.224616572947125e-4,4.160760778234224e-5,-9.456878589667109e-9,7.225448756233372e-4,4.157965702183735e-5,-9.445137808270311e-9,7.226279081272899e-4,4.139838628719147e-5,-9.377400707335786e-9,7.22782831518834e-4,4.107397411941798e-5,-9.256348015631858e-9,7.230679109607896e-4,4.066348908937088e-5,-9.10200491377539e-9,7.235030324353299e-4,4.025454393631868e-5,-8.94585670514005e-9,7.240604349135902e-4,3.993307278447048e-5,-8.819235976789946e-9,7.246770474161983e-4,3.9752475639384204e-5,-8.74220271896425e-9,7.25280167562206e-4,3.972032945361145e-5,-8.71863631377646e-9,7.258112499168408e-4,3.980545137139982e-5,-8.738490452126625e-9,7.262379795707331e-4,3.995588791311808e-5,-8.783922245220665e-9,7.265545698200255e-4,4.011659749582939e-5,-8.83541706972929e-9,7.267755339873465e-4,4.024105833074878e-5,-8.875936197311278e-9,7.269279845271264e-4,4.029652987094112e-5,-8.892976574019021e-9,7.270451450548466e-4,4.026516750216042e-5,-8.879235354411228e-9,7.271616327638609e-4,4.014326976173892e-5,-8.832575722188413e-9,7.273099551577129e-4,3.993996905439593e-5,-8.755682817923396e-9,7.275175140387404e-4,3.9675705000669275e-5,-8.65552457776656e-9,7.278037036096325e-4,3.938023732409923e-5,-8.542589315450922e-9,7.281770882665271e-4,3.9089662899162196e-5,-8.429786504232964e-9,7.286331360591269e-4,3.884197223268564e-5,-8.330888585721539e-9,7.291533677555678e-4,3.867120217350354e-5,-8.258515599405508e-9,7.297067738756757e-4,3.860090558086704e-5,-8.221844583454592e-9,7.302539666578742e-4,3.8638182704821905e-5,-8.224400957513714e-9,7.307538962269374e-4,3.876983049784128e-5,-8.262452625865695e-9,7.311722092434422e-4,3.896204742743471e-5,-8.324571705863522e-9,7.314897527645678e-4,3.9164524285314036e-5,-8.3927927962959e-9,7.317094414493923e-4,3.931904431090589e-5,-8.445566122962981e-9,7.318594845103638e-4,3.937201425400375e-5,-8.462392890762826e-9,7.319908066651358e-4,3.928917259530832e-5,-8.42948659848983e-9,7.321669790530052e-4,3.906885058053107e-5,-8.345010771919948e-9,7.324469928605998e-4,3.8748281868431985e-5,-8.22172192559327e-9,7.328651675913713e-4,3.839739804730499e-5,-8.084889760603431e-9,7.334166535442571e-4,3.809868218835139e-5,-7.964969302770367e-9,7.340570593855317e-4,3.791967584824037e-5,-7.88746795733556e-9,7.347180158889726e-4,3.789093829132095e-5,-7.864694610367329e-9,7.35330978895752e-4,3.799999059049531e-5,-7.893257941684946e-9,7.358473549973659e-4,3.820188625552753e-5,-7.95762224232136e-9,7.36247320859895e-4,3.8438037090302746e-5,-8.036768609057542e-9,7.365375874964547e-4,3.865343008418449e-5,-8.110432460280896e-9,7.367432165561168e-4,3.880698844533339e-5,-8.163005946748622e-9,7.368986354207467e-4,3.8875061863166875e-5,-8.185035831936871e-9,7.370405983510341e-4,3.885061218849014e-5,-8.173156102939069e-9,7.372035548293182e-4,3.8740714185469477e-5,-8.129326522098361e-9,7.374166923744471e-4,3.8563901864775714e-5,-8.05990590565618e-9,7.377017025310008e-4,3.834777065479802e-5,-7.974743340507008e-9,7.38070622142274e-4,3.8126512150255426e-5,-7.886238130470689e-9,7.385236155784789e-4,3.7937678633434624e-5,-7.80816935910351e-9,7.390471872462534e-4,3.7817479218706066e-5,-7.754041850862354e-9,7.39613896733862e-4,3.779443638936219e-5,-7.734832514708064e-9,7.401848806728716e-4,3.788221163124379e-5,-7.75635096994411e-9,7.407160397257579e-4,3.807351780711525e-5,-7.816863716772319e-9,7.411675017627108e-4,3.83377342940748e-5,-7.905958120875292e-9,7.415142919555773e-4,3.8624442718095306e-5,-8.005552813609206e-9,7.417549191637427e-4,3.887335159084064e-5,-8.093346705012602e-9,7.419146387750976e-4,3.902868594401002e-5,-8.14809060536792e-9,7.420415466924796e-4,3.9054260051663074e-5,-8.155305505607456e-9,7.421957712450767e-4,3.894484020912841e-5,-8.111780096870276e-9,7.424340938914088e-4,3.873006125504485e-5,-8.02737573183699e-9,7.42793899355561e-4,3.846880194086285e-5,-7.923264854219435e-9,7.432812620141698e-4,3.823437454532318e-5,-7.82664187542525e-9,7.438677441412036e-4,3.809405520022208e-5,-7.763143694430137e-9,7.444981839003461e-4,3.808955287654943e-5,-7.749409650064826e-9,7.451073361538792e-4,3.822586805072566e-5,-7.788599612458683e-9,7.456389114710405e-4,3.847282903416642e-5,-7.870587084328902e-9,7.460595325375159e-4,3.8777620572790256e-5,-7.97634017132848e-9,7.463633344203971e-4,3.90818258416466e-5,-8.084164382373755e-9,7.465679154850866e-4,3.9335967587656355e-5,-8.175197120055171e-9,7.467056704916095e-4,3.950769387356267e-5,-8.236653653676395e-9,7.468147802209882e-4,3.958364471163843e-5,-8.262748556136644e-9,7.469323302937862e-4,3.956728801685668e-5,-8.25406326448367e-9,7.470900224543724e-4,3.947522924674709e-5,-8.21625230612436E-09,7.473117786206921e-4,3.9333574246693434e-5,-8.15868872939971e-9,7.476122444451707e-4,3.917483364161524e-5,-8.093285230637837e-9,7.479954258414936e-4,3.9035053263447094e-5,-8.033430521419e-9,7.484532171378763e-4,3.8950407831258895e-5,-7.992775209673987e-9,7.489642810589979e-4,3.895244597740534e-5,-7.983527194781351e-9,7.494944525688141e-4,3.906165830601274e-5,-8.014060469529422e-9,7.500002746529996e-4,3.9280174203610924e-5,-8.086078232861302e-9,7.504369055959056e-4,3.9586013083436254e-5,-8.192238951203957e-9,7.507699029120727e-4,3.993257848288867e-5,-8.31570446363603e-9,7.509875768828624e-4,4.025651618290501e-5,-8.432888245201967e-9,7.511084739632404e-4,4.049377684511111e-5,-8.519412651981377e-9,7.511792950330379e-4,4.059903216808652e-5,-8.557453460506901e-9,7.51262580818493e-4,4.056073182061699e-5,-8.541545996409175e-9,7.514184424281146e-4,4.040549547796316e-5,-8.480474453332119e-9,7.516871944073718e-4,4.019036204144835e-5,-8.394680466844668e-9,7.520786833722089e-4,3.998634873333417e-5,-8.31041577663291e-9,7.525708694622507e-4,3.985920059382761e-5,-8.252707967838128e-9,7.531170338310043e-4,3.985300180192867e-5,-8.239147244363815e-9,7.536588526186752e-4,3.998070036708499e-5,-8.276008258796359e-9,7.541413990265233e-4,4.022342678605548e-5,-8.357544078241255e-9,7.54525863865062e-4,4.05380201242533e-5,-8.468421354961952e-9,7.547967008719969e-4,4.0869815523018587e-5,-8.588335122366214e-9,7.549619635945633e-4,4.116635887970118e-5,-8.697206288555848e-9,7.550480101612701e-4,4.1388047065979665e-5,-8.779387588935774e-9,7.550913554910073e-4,4.151357045899603e-5,-8.825967420826681e-9,7.551305842522161e-4,4.154031612162445e-5,-8.835132581061215e-9,7.552001895864037e-4,4.148139165922518e-5,-8.811164119887681e-9,7.55326828426084e-4,4.1361260126847735e-5,-8.762820923675844e-9,7.555274925687125e-4,4.12114438663705e-5,-8.70170647458801e-9,7.558087203055979e-4,4.1066871518413693e-5,-8.640891785799208e-9,7.561661037027524e-4,4.09626519740274e-5,-8.593743073534889e-9,7.565837873294337e-4,4.0930595848213674e-5,-8.572674913245856e-9,7.570343023719693e-4,4.0994708019895345e-5,-8.58746909968765e-9,7.574798432523166e-4,4.116526167701248e-5,-8.642942450707564e-9,7.578766597453443e-4,4.143219506580418e-5,-8.736227826676889e-9,7.581839700006578e-4,4.1760430647830195e-5,-8.85472089607003e-9,7.583769007372872e-4,4.209143613341075e-5,-8.97646260497755e-9,7.584593350854895e-4,4.235492678888832e-5,-9.074535079715516e-9,7.584693326984003e-4,4.249010700473473e-5,-9.125223368184249e-9,7.58470988460264e-4,4.246860282595259e-5,-9.116849569321388e-9,7.585337351705025e-4,4.230716762507732e-5,-9.054700673282172e-9,7.587083994551931e-4,4.206260627237825e-5,-8.959261900385463e-9,7.590114511903744e-4,4.181169099700161e-5,-8.858889905876627e-9,7.594231618304254e-4,4.162653730197789e-5,-8.780808674797843e-9,7.598974502542237e-4,4.155567159126383e-5,-8.744091746991325e-9,7.603770701441117e-4,4.161547883315085e-5,-8.756261200644959e-9,7.608083072352005e-4,4.1791395294714015e-5,-8.813314074637931e-9,7.611518311466191e-4,4.204568142158321e-5,-8.902175671211233e-9,7.613885521055572e-4,4.232834360337178e-5,-9.004492689727314e-9,7.615206177534766e-4,4.258845489577387e-5,-9.100837967244961e-9,7.61568322961355e-4,4.2783817580922045e-5,-9.174529986143186e-9,7.615641863347267e-4,4.288746563387388e-5,-9.214382010099968e-9,7.615458421224065e-4,4.289030424473849e-5,-9.215981555878051e-9,7.615493776879412e-4,4.280020160465099e-5,-9.181526671744856e-9,7.616042486398303e-4,4.26385797343642e-5,-9.118594656166542e-9,7.61730210455046e-4,4.2435795379432153e-5,-9.03837554219817e-9,7.61936050598561e-4,4.222646210520275e-5,-8.953874020503188e-9,7.622194897874063e-4,4.204535712200338e-5,-8.87837427683221e-9,7.625676250645121e-4,4.1923882039288665e-5,-8.824153587401546e-9,7.629576171601758e-4,4.188660389994002e-5,-8.801211913123232e-9,0.00076335781686778445,4.194730410322629e-5,-8.815719768604965e-9,7.637301806589586e-4,4.210424149540176e-5,-8.868024377405146e-9,7.640353866362429e-4,4.233530176320579e-5,-8.950502771608857e-9,7.642418368971225e-4,4.259542541961727e-5,-9.046295943306457e-9,7.643379706413167e-4,4.282042794217269e-5,-9.130652554192153e-9,7.643436783033333e-4,4.29411494887276e-5,-9.176459932444947e-9,7.643128225427903e-4,4.290719105443412e-5,-9.163573390875584e-9,7.643198908851147e-4,4.27107298651634e-5,-9.088104238947882e-9,7.644329712891078e-4,4.23954390951903e-5,-8.965872528852865e-9,7.646866633436667e-4,4.204199444422708e-5,-8.826934866527333e-9,7.650704200976676e-4,4.17372669333947e-5,-8.704057045239502e-9,7.655369936842672e-4,4.154471093131832e-5,-8.621706108552556e-9,7.660227565342318e-4,4.1489461027239444e-5,-8.590446292021975e-9,7.664679096395077e-4,4.155968867214678e-5,-8.60719762281304e-9,7.668295552510263e-4,4.1717667344140696e-5,-8.65897698447111e-9,7.670867797953163e-4,4.191334217832278e-5,-8.727615499482921e-9,7.672399375245228e-4,4.209611415617943e-5,-8.794011363368658e-9,7.673067113076542e-4,4.2223374435902354e-5,-8.841422117427617e-9,7.673167461421355e-4,4.226589688328241e-5,-8.857772846673981e-9,7.673057770691697e-4,4.221051342646373e-5,-8.837001052988211e-9,7.673098402283448e-4,4.206030802892788e-5,-8.779391079594279e-9,7.673601781277127e-4,4.18326361185597e-5,-8.690943756311483e-9,7.674793660680467e-4,4.1555511526051535e-5,-8.58199870451685e-9,7.676789770593695e-4,4.126301892957958e-5,-8.465429763661297e-9,7.679588364412986e-4,4.0990480338567314e-5,-8.354768907767848e-9,7.683075907368027e-4,4.077001331558171e-5,-8.262536838002104e-9,7.687041577968274e-4,4.062672035544098e-5,-8.198843955832656e-9,7.691197778494181e-4,4.057536670843389e-5,-8.170131786714939e-9,7.69520695114969e-4,4.061730481647757e-5,-8.17788778750396e-9,7.698719236009533e-4,4.073758088267318e-5,-8.217289031700045e-9,7.701429410375053e-4,4.090284202188645e-5,-8.276083307954193e-9,7.703158959245221e-4,4.106194157234824e-5,-8.334583011415699e-9]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json deleted file mode 100644 index ed067a1..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_12.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":12000,"numberOfSamples":1000,"samples":[7.703954280162467e-4,4.1152337826266915e-5,-8.368108119871265e-9,7.704163319665058e-4,4.111507788730868e-5,-8.352989399151336e-9,7.704421464154993e-4,4.091720944904923e-5,-8.275542352848811e-9,7.705485092428724e-4,4.05724562623383e-5,-8.140252864992262e-9,7.707939985966856e-4,4.014524130054576e-5,-7.971353086916377e-9,7.71193504222048e-4,3.972957759547678e-5,-7.80469566907836e-9,7.717115053607008e-4,3.9412072212316335e-5,-7.673655282248528e-9,7.722792203821364e-4,3.924081276169691e-5,-7.597334312683116e-9,7.728228927422465e-4,3.921592014800571e-5,-7.576902082499595e-9,7.732865636479628e-4,3.930044006202883e-5,-7.599469965429773e-9,7.736417360467977e-4,3.9439508716162856e-5,-7.645015059481085e-9,7.738862021781628e-4,3.9577299627356655e-5,-7.692550022805146e-9,7.740375781067476e-4,3.9667776867413035e-5,-7.724156675043192e-9,7.741257583521852e-4,3.9679734947780095e-5,-7.727075835179889e-9,7.741863193020013e-4,3.959810915098842e-5,-7.69451274251175e-9,7.742552430288779e-4,3.9423328672554246e-5,-7.625696494804441e-9,7.743646142276804e-4,3.9169548057952974e-5,-7.525395913350832e-9,7.745390796275454e-4,3.886191912277735e-5,-7.4029175785362335e-9,7.747931611691499e-4,3.853296073940333e-5,-7.2706518736087654e-9,7.751296404933389e-4,3.821816871539602e-5,-7.14230656603222e-9,7.75539277044951e-4,3.795118644851318e-5,-7.03102083378519e-9,7.760019965895818e-4,3.7759097444815016e-5,-6.947589780698099e-9,7.764894114568546e-4,3.7658393030000226e-5,-6.898960011119357e-9,7.769683935525284e-4,3.765194567776308e-5,-6.887041206138857e-9,7.77405468600329e-4,3.7727187339015794e-5,-6.907852463658269e-9,7.777719367210197e-4,3.7855696317654865e-5,-6.951096001721251e-9,7.780497715515111e-4,3.799465132874708e-5,-7.000433114460731e-9,7.782381033839588e-4,3.809125972066116e-5,-7.035036448543083e-9,7.783590131789634e-4,3.809174285674149e-5,-7.033143881376136e-9,7.784595953194529e-4,3.795570392998253e-5,-6.97793131163529e-9,7.786057068107846e-4,3.767368510457848e-5,-6.864708360881282e-9,7.78863996118783e-4,3.728037531656348e-5,-6.706310810691064e-9,7.792756265371022e-4,3.685219468959701e-5,-6.532225465482031e-9,7.798348397283327e-4,3.648330405006227e-5,-6.379231745544197e-9,7.804875774404013e-4,3.624915992465997e-5,-6.277220111165846e-9,7.811532791147602e-4,3.6178446406365796e-5,-6.238248751260801e-9,7.817563618614648e-4,3.624887846641678e-5,-6.254752293779451e-9,7.822492066349364e-4,3.6404572752001926e-5,-6.305999039127454e-9,7.826184621073835e-4,3.658034238992342e-5,-6.367226110433409e-9,7.828786448897808e-4,3.672020080806501e-5,-6.416659701095429e-9,7.830611528872669e-4,3.678622737434062e-5,-6.439002339589363e-9,7.83204269111392e-4,3.6760045223355876e-5,-6.4262288080890655e-9,7.83346116265409e-4,3.6640538094929564e-5,-6.376990645821899e-9,7.835202865150684e-4,3.644047816686522e-5,-6.2955425776532835e-9,7.837530585274323e-4,3.618322636043522e-5,-6.190565289506217e-9,7.840613538345039e-4,3.5899528490766174e-5,-6.073894295370791e-9,7.844511692520874e-4,3.56240404001225e-5,-5.959079652820332e-9,7.849166362486965e-4,3.5391266889247926e-5,-5.859734881539029e-9,7.854401461991078e-4,3.5230870470624936e-5,-5.787703349498604e-9,7.85994077008628e-4,3.516280326863614e-5,-5.751203618221222e-9,7.865443681490566e-4,3.519312942196211e-5,-5.753224515569559e-9,7.870557121649313e-4,3.531147041257569e-5,-5.790462278713693e-9,7.874977374834473e-4,3.549084781661851e-5,-5.8530751899271e-9,7.878512977067683e-4,3.5690381696580056e-5,-5.925483082828172e-9,7.88113902130303e-4,3.586089281430252e-5,-5.9883395159535995e-9,7.883033069918536e-4,3.595324388575569e-5,-6.021732124830117e-9,7.884579960410935e-4,3.5929083510116866e-5,-6.009544248256601e-9,7.886327975757129e-4,3.577280030598468e-5,-5.9444715378693474e-9,7.888879780100181e-4,3.550164046195876e-5,-5.832367391647236e-9,7.8927192870103e-4,3.51687389345516e-5,-5.693704861085736e-9,7.898018205719634e-4,3.4853326117873307e-5,-5.559814012217819e-9,7.904515896948133e-4,3.4636846056963114e-5,-5.463410169207496e-9,7.911567365586743e-4,3.457328365667514e-5,-5.426733674861982e-9,7.91836723351535e-4,3.4669207955395765e-5,-5.453450884163303e-9,7.924237202788972e-4,3.488486649734166e-5,-5.5288267094573905e-9,7.928824548961669e-4,3.515389152880303e-5,-5.627269436403621e-9,7.932136820118008e-4,3.540839736028799e-5,-5.722097489506235e-9,7.934449059141124e-4,3.5597063748403574e-5,-5.792673659357338e-9,7.936168882573704e-4,3.569210775996662e-5,-5.827295173952732e-9,7.937723217445624e-4,3.568791359332356e-5,-5.822884193637893e-9,7.93948800831336e-4,3.559595323883983e-5,-5.783216738249511e-9,7.941754088277288e-4,3.543933477989003e-5,-5.716920600537979e-9,7.944713320113322e-4,3.524834071649752e-5,-5.635744464363097e-9,7.948452117223364e-4,3.505690102972568e-5,-5.5531067119024055e-9,7.952946621025866e-4,3.489936168856889e-5,-5.482741290558481e-9,7.958060134527227e-4,3.4806877971801684e-5,-5.437234302862502e-9,7.963548356244236e-4,3.4803064153757236e-5,-5.4263155715433935e-9,7.969080873912969e-4,3.4899187129560714e-5,-5.454979598662578e-9,7.974285582348853e-4,3.50899868901018e-5,-5.521799771482021e-9,7.978815595783528e-4,3.53517139310461e-5,-5.618028402827992e-9,7.982428279621153e-4,3.5643920541599894e-5,-5.728107579266846e-9,7.985056927078104e-4,3.591576113045357e-5,-5.8319638327390805e-9,7.986852279968585e-4,3.6116131940588234e-5,-5.908914090462572e-9,7.988176580367524e-4,3.620557989303193e-5,-5.942429308719043e-9,7.989544079791842e-4,3.616720864975489e-5,-5.924668401918435e-9,7.991513656849079e-4,3.601375362426653e-5,-5.859607617947738e-9,7.994550428476274e-4,3.5788266373648105e-5,-5.763648882378041e-9,7.99888593020665e-4,3.5556588356057684e-5,-5.662870662485801e-9,8.004419741134302e-4,3.539153188530321e-5,-5.586797190304597e-9,8.010710698253013e-4,3.5351857597047766e-5,-5.559879219657929e-9,8.017086298947224e-4,3.546304659868737e-5,-5.5935163200738305e-9,8.022846671415112e-4,3.5708577068191366e-5,-5.6822096378184195e-9,8.027481145977655e-4,3.603666410112383e-5,-5.805964874906324e-9,8.03080122412991e-4,3.637928126071499e-5,-5.9377647708489825e-9,8.032943410005627e-4,3.66738652272459e-5,-6.0522761139605395e-9,8.034269249007324e-4,3.687843167960255e-5,-6.132033879229968e-9,8.035230519879982e-4,3.697653334579644e-5,-6.1696217748146e-9,8.036257380118303e-4,3.6974206946549126e-5,-6.166656508896828e-9,8.037692352128727e-4,3.689330257374978e-5,-6.131278442552063e-9,8.039764427338145e-4,3.6764723596644845e-5,-6.075520263494496e-9,8.042586457584074e-4,3.662315128777011e-5,-6.013183162784273e-9,8.046160819092535e-4,3.6503272989771094e-5,-5.9582713714511854e-9,8.050385231957502e-4,3.643678976682334e-5,-5.9237473528870625e-9,8.055057955743184e-4,3.644934285412461e-5,-5.920288595123292e-9,8.05988792090945e-4,3.655676717208342e-5,-5.95478706400642e-9,8.064519656770659e-4,3.676075426661275e-5,-6.028574833606665e-9,8.068582848986766e-4,3.7045013088594046e-5,-6.1357749440002495e-9,8.071769237677392e-4,3.737399900933667e-5,-6.26261951082692e-9,8.073924491758243e-4,3.769659412573422e-5,-6.388754892200863e-9,8.075124666197616e-4,3.7955997865778476e-5,-6.491115253060035e-9,8.075698393218493e-4,3.8104352666225344e-5,-6.549812033282912e-9,8.07616918266904e-4,3.811755258854625e-5,-6.5542030392740885e-9,8.077125028108634e-4,3.8004458985452114e-5,-6.506795533466793e-9,8.079056000982033e-4,3.780654452780539e-5,-6.4233624926436094e-9,8.082214227720043e-4,3.758774308343327e-5,-6.3291414262697445e-9,8.086539871520523e-4,3.741775103981728e-5,-6.252328710187585e-9,8.091672759069606e-4,3.7353752588214316e-5,-6.216752306565877e-9,8.097045052884347e-4,3.742558962134468e-5,-6.235686559437506e-9,8.10203012993122e-4,3.7628423384850995e-5,-6.308502277607127e-9,8.106106251449948e-4,3.792510731679957e-5,-6.421212634856097e-9,8.108985322821864e-4,3.8257644162653106e-5,-6.550833196339432e-9,8.11066628774171e-4,3.856383400569566e-5,-6.6720638631456955e-9,8.111401568994287e-4,3.8793232686939005e-5,-6.763879623403471e-9,8.111600098107639e-4,3.89173073971411e-5,-6.813868422693099e-9,8.111711107269196e-4,3.893182181341246e-5,-6.8194280235812216e-9,8.112128636990658e-4,3.8852913529948424e-5,-6.786357912765378e-9,8.1131356935384e-4,3.8710088334482416e-5,-6.726121364291298e-9,8.114885730374386e-4,3.853908980505929e-5,-6.652976845483148e-9,8.117408037071133e-4,3.837625006855202e-5,-6.5816575047402725e-9,8.120622864326276e-4,3.825456404102906e-5,-6.5257403552766695e-9,8.124357145823514e-4,3.82008938099246e-5,-6.496493824519633e-9,8.128358550233297e-4,3.823344877076438e-5,-6.50185004606853e-9,8.132312194083829e-4,3.8358874558908814e-5,-6.54518991660995e-9,8.135869354214777e-4,3.856887726212377e-5,-6.623869747140799e-9,8.138698868858205e-4,3.8837323813125146e-5,-6.727869263055802e-9,8.140566018155787e-4,3.91199837876055e-5,-6.83950023112515e-9,8.141427039935174e-4,3.935979230186433e-5,-6.9354371500791985e-9,8.14150262656473e-4,3.949946847388898e-5,-6.9918722744796985e-9,8.141277285832854e-4,3.949960053306327e-5,-6.991994835378283e-9,8.141388942367572e-4,3.935526219250151e-5,-6.93289197521611e-9,8.142430879224422e-4,3.910207785679162e-5,-6.8281493368907015e-9,8.144749296276758e-4,3.880686864520632e-5,-6.704223833237992e-9,8.1483306083408e-4,3.854646680042599e-5,-6.592073096421126e-9,8.152821053230805e-4,3.838435896231063e-5,-6.5178631025860026e-9,8.157651947313659e-4,3.835428291873892e-5,-6.49629781434836e-9,8.162207450781731e-4,3.845478693315215e-5,-6.528135674230928e-9,8.16597684699937e-4,3.865376270796675e-5,-6.60159629155916e-9,8.168657158061926e-4,3.889947743847334e-5,-6.69644446442954e-9,8.170194049574676e-4,3.913422953807289e-5,-6.7893400986806185e-9,8.17076394641524e-4,3.930728020730456e-5,-6.85914255437804e-9,8.170710316645813e-4,3.938449175604022e-5,-6.891061862959034e-9,8.170454569870298e-4,3.935306732398158e-5,-6.878882809994513e-9,8.170405722878981e-4,3.9221105681444305e-5,-6.825033584806315e-9,8.1708896023377e-4,3.901310215359767e-5,-6.7388979016364186e-9,8.172108407223391e-4,3.87633764776707e-5,-6.634171213681119e-9,8.174130175522054e-4,3.850938229687362e-5,-6.526094414707984e-9,8.176899834395489e-4,3.8286205079792516e-5,-6.4291520891420515e-9,8.180260959470649e-4,3.812267075009407e-5,-6.3554492104173685e-9,8.183979894619872e-4,3.803873780290355e-5,-6.313637763487015e-9,8.187769116206049e-4,3.804351923521837e-5,-6.308093725118056e-9,8.191312129866966e-4,3.813337134793312e-5,-6.338063937256885e-9,8.194296942684052e-4,3.8289922698924704e-5,-6.396704673018225e-9,8.196467238419641e-4,3.847879781237149e-5,-6.470354270719354e-9,8.197695294206804e-4,3.8650968100779566e-5,-6.538921130269099e-9,8.19806513649201e-4,3.874943540462814e-5,-6.5785960033068025e-9,8.197929489727498e-4,3.8723134804595094e-5,-6.5676898771434025e-9,8.197883002079536e-4,3.854613941350416e-5,-6.4947236728071645e-9,8.198609759695765e-4,3.823403064971981e-5,-6.365297279203114e-9,8.200636944477346e-4,3.784594464219167e-5,-6.203000857389413e-9,0.000820411436661712,3.746667085519243e-5,-6.042172936215794e-9,8.208749674671344e-4,3.7176223092774686e-5,-5.915617415305801e-9,8.213932248000017e-4,3.7022992160726405e-5,-5.843759010230899e-9,8.218961027605576e-4,3.701275044446644e-5,-5.830076453078521e-9,8.223254904904929e-4,3.711435819021485e-5,-5.863118056849916e-9,8.226473843906112e-4,3.727482958449793e-5,-5.922239824745653e-9,8.228545590175748e-4,3.7435687186837764e-5,-5.983966399587255e-9,8.229627474394682e-4,3.7545885310616436e-5,-6.027176921838554e-9,8.230036090129152e-4,3.756990148797665e-5,-6.036554527428151e-9,8.230167806825249e-4,3.749138311092206e-5,-6.004372061981051e-9,8.230423185742567e-4,3.731317666393389e-5,-5.930818699795622e-9,8.231143493501816e-4,3.705449505134662e-5,-5.823063768625377e-9,8.23256553209646e-4,3.674606808012696e-5,-5.693352353058202e-9,8.234798189428454e-4,3.642429612693932e-5,-5.556571384393087e-9,8.237820413355269e-4,3.6125418828181186e-5,-5.427765212931279e-9,8.241496751844597e-4,3.588054059534543e-5,-5.320016584338888e-9,8.245603883153199e-4,3.571199342395666e-5,-5.242923452023574e-9,8.249861688108776e-4,3.563099782478505e-5,-5.201638270344065e-9,8.253965549120751e-4,3.563626588694151e-5,-5.1962726434097535e-9,8.257620082869455e-4,3.571323197160154e-5,-5.221486300041849e-9,8.260577695440884e-4,3.583385451251235e-5,-5.266230045559657e-9,8.262687299902825e-4,3.595753207818218e-5,-5.313924512584801e-9,8.263954241197148e-4,3.6034603798458864e-5,-5.343784865943491e-9,8.264598903887887e-4,3.601442540484084e-5,-5.334201311502159e-9,8.265081515702821e-4,3.585914554288692e-5,-5.268642284511385e-9,8.26604385596247e-4,3.556101693181241e-5,-5.143074426032549e-9,8.268132192939278e-4,3.515537353926115e-5,-4.971501142912185e-9,8.271738744510702e-4,3.471782861774951e-5,-4.7848532086355065e-9,8.276795586094963e-4,3.4340322196190036e-5,-4.621118053741745e-9,8.282766891716653e-4,3.4095760039524445e-5,-4.5108069909192165e-9,8.288861464980373e-4,3.401140563924369e-5,-4.465996728964361e-9,8.29433355059079e-4,3.406500941237964e-5,-4.4785874372255114e-9,8.298704729894737e-4,3.420103631857123e-5,-4.526688711410476e-9,8.301833096396713e-4,3.4353709967328716e-5,-4.583790454622501e-9,8.303862100769367e-4,3.446546478614344e-5,-4.626173157513306e-9,8.305118250621173e-4,3.449687603771798e-5,-4.6370194576684565e-9,8.306008664699762e-4,3.442941009341466e-5,-4.607762309491803e-9,8.306940322478887e-4,3.426386875947961e-5,-4.537752547464339e-9,8.308263261536525e-4,3.401682527001027e-5,-4.4330652748613145e-9,8.310232819304966e-4,3.371620106257414e-5,-4.304822699303797e-9,8.312987280593526e-4,3.339641097448233e-5,-4.167187973746248e-9,8.31653979219806e-4,3.309335744578138e-5,-4.0351952674026125e-9,8.32078417238307e-4,3.283958122742209e-5,-3.9226242940869606e-9,8.325514069439921e-4,3.26599656110982e-5,-3.8401496329485945e-9,8.330453353948687e-4,3.256846904668967e-5,-3.793977723288974e-9,8.335293651888821e-4,3.2566169333962955e-5,-3.785049055168084e-9,8.33973516225973e-4,3.264061001145597e-5,-3.808740687729704e-9,8.343528580041156e-4,3.2766396288388346e-5,-3.855005633134729e-9,8.346517248312861e-4,3.290709657118518e-5,-3.9089874063833434e-9,8.348679389439184e-4,3.301872928211123e-5,-3.95230090306051e-9,8.350167359300278e-4,3.305558632640454e-5,-3.965393684369818e-9,8.351331058149185e-4,3.297932755397413e-5,-3.9314416005053e-9,8.352699660831031e-4,3.277126367429032e-5,-3.8417220291605366e-9,8.354889117471341e-4,3.244507340953231e-5,-3.7012047953805833e-9,8.358419691208809e-4,3.205326833172769e-5,-3.531440109697599e-9,8.36348763283404e-4,3.167867290599403e-5,-3.3670502139274996e-9,8.369813197061595e-4,3.140782451156133e-5,-3.244586908337016e-9,8.376693061030729e-4,3.129669563122999e-5,-3.1881493598681102e-9,8.383263658012633e-4,3.134863920078477e-5,-3.200051972071662e-9,8.388826052155265e-4,3.151766556410064e-5,-3.2619908468242225e-9,8.393050072888866e-4,3.173205489277276e-5,-3.344664087646371e-9,8.395988757541516e-4,3.192172100776251e-5,-3.419003963066664e-9,8.397963286098811e-4,3.203621272799185e-5,-3.46362815353071e-9,8.399416326313247e-4,3.205061679819683e-5,-3.4674080518768483e-9,8.400794992423449e-4,3.1963263817541386e-5,-3.4287495907215916e-9,8.402479103687121e-4,3.179002909330446e-5,-3.3534888117140308e-9,8.404745687451004e-4,3.155830071326884e-5,-3.2525737289196144e-9,8.407754646399417e-4,3.130173895136262e-5,-3.1399368209433314e-9,8.41154541388092e-4,3.1055764720891035e-5,-3.0305415711644196e-9,8.416041280544131e-4,3.085345156272672e-5,-2.9385364426828023e-9,8.421061656017975e-4,3.072164283076384e-5,-2.8755213785209154e-9,8.426344113814458e-4,3.067736638925079e-5,-2.8490015368691745e-9,8.431577953645121e-4,3.072498523450466e-5,-2.8612024549307127e-9,8.436447971117692e-4,3.085470440573325e-5,-2.9084547718786858e-9,8.440683720702881e-4,3.1042869672780824e-5,-2.981273689818602e-9,8.444108321936859e-4,3.125426055813509e-5,-3.065198477158535e-9,8.446680629527056e-4,3.144642492558669e-5,-3.142451937358192e-9,8.448524507159502e-4,3.15759057443261e-5,-3.194437005461156e-9,8.449938340091091e-4,3.160610588444374e-5,-3.2050494314965393e-9,8.451374660071655e-4,3.151638576719877e-5,-3.1646699302547115e-9,8.453375715697237e-4,3.1311130994121866e-5,-3.0742611477808833e-9,8.456453986738488e-4,3.1025780835067146e-5,-2.94819557957702e-9,8.46092653379528e-4,3.0725045293271956e-5,-2.81368862948315e-9,8.466753220872281e-4,3.0488818598972834e-5,-2.704879810332908e-9,8.473471109643087e-4,3.038640446510119e-5,-2.6518278127619258e-9,8.480305696476147e-4,3.0449024854662588e-5,-2.668679548466348e-9,8.486441257401572e-4,3.065628903781551e-5,-2.7477040330430985e-9,8.491313375173792e-4,3.094576582096809e-5,-2.8631317709746885e-9,8.494766164139384e-4,3.123946697058364e-5,-2.9822273668107125e-9,8.497020423260754e-4,3.1471127846907625e-5,-3.0767866876898872e-9,8.498521170161459e-4,3.16017891014394e-5,-3.129775126187276e-9,8.499770409409726e-4,3.1621830699592834e-5,-3.1363362066964675e-9,8.501209480543094e-4,3.1544720456021056e-5,-3.1013685836141294e-9,8.503161532077362e-4,3.1398399640952655e-5,-3.036097487468567e-9,8.505816546173871e-4,3.1217759899263695e-5,-2.9550165687006546e-9,8.509236995527479e-4,3.103916188717301e-5,-2.8735662703891047e-9,8.513369862483362e-4,3.0896507607776705e-5,-2.8063743424389867e-9,8.518060495699486e-4,3.081805794501351e-5,-2.7657886014572145e-9,8.523069735798167e-4,3.082345930368575e-5,-2.7605358876292335e-9,8.528098318936862e-4,3.0920864735206294e-5,-2.79447672381635e-9,8.532822991542584e-4,3.110457416848017e-5,-2.8656065993726486e-9,8.536945524033567e-4,3.1354085988535145e-5,-2.965633018689591e-9,8.540249574865114e-4,3.163548969538209e-5,-3.080489694586202e-9,8.542654720972812e-4,3.190574453586719e-5,-3.192028596537508e-9,8.544254041595665e-4,3.211974836915866e-5,-3.28090202256463e-9,8.545322236510779e-4,3.2239278828225266e-5,-3.3303148632010992e-9,8.546285733291039e-4,3.224218246448245e-5,-3.330007151957699e-9,8.547652672831671e-4,3.2129878781118014e-5,-3.279649312494011e-9,8.549907364400541e-4,3.193111420486313e-5,-3.1907193571916717e-9,8.553382926807156e-4,3.1699773222277685e-5,-3.0858345714949625e-9,8.558140144434115e-4,3.150496484434305e-5,-2.9946769942906606e-9,8.563897321781071e-4,3.1413455736156216e-5,-2.9464704670555277e-9,8.570061787799461e-4,3.1468304822318046e-5,-2.960646903904852e-9,8.575886586831152e-4,3.167199701229673e-5,-3.039317862345337e-9,8.580709942206223e-4,3.198346246211776e-5,-3.1656988018487623e-9,8.584171135061124e-4,3.233248147476386e-5,-3.310099393214403e-9,8.586297960336273e-4,3.264478971416768e-5,-3.440645754903185e-9,8.587438963877701e-4,3.286515489171303e-5,-3.5332321749884526e-9,8.58810255130539e-4,3.2968897888927814e-5,-3.5765784450704622e-9,8.588794391843271e-4,3.2960802961293873e-5,-3.5719305847910328e-9,8.589911009932855e-4,3.2866533850223576e-5,-3.529577019202463e-9,8.591697919005255e-4,3.272249454060714e-5,-3.4646650245504987e-9,8.594251730433313e-4,3.256765883619841e-5,-3.393767811079765e-9,8.597541389353542e-4,3.2438210292960187e-5,-3.3325521813766835e-9,8.601432315592983e-4,3.236427582707883e-5,-3.2942803106507433e-9,8.605707893509768e-4,3.236765846754327e-5,-3.2887387933129255e-9,8.610090272757816e-4,3.245976837958149e-5,-3.3212886990489386e-9,8.614266330715411e-4,3.2639496241471747e-5,-3.3919234343927197e-9,8.617925265638105e-4,3.289145361493536e-5,-3.4944824234170423e-9,8.620810773671341e-4,3.318566240946574e-5,-3.616455097562243e-9,8.62278291344594e-4,3.3480062508905175e-5,-3.7399625948591e-9,8.623874686730959e-4,3.372681857367478e-5,-3.844371487446432e-9,8.624320722870976e-4,3.38822001208865e-5,-3.910489310686052e-9,8.624536695365803e-4,3.391801974913249e-5,-3.925509323340507e-9,8.625041693741896e-4,3.3831145103447495e-5,-3.887217720697746e-9,8.626336863724894e-4,3.364749744285424e-5,-3.805912914971897e-9,8.628771728569449e-4,3.34184061309152e-5,-3.703085242205503e-9,8.632436901356097e-4,3.3209472451514874e-5,-3.606852247536402e-9,8.637117164869609e-4,3.30843353744748e-5,-3.5450791305814132e-9,8.64232526978409e-4,3.30874054017447e-5,-3.537852982664476e-9,8.647417259564168e-4,3.32305264787094e-5,-3.591449619924816e-9,8.651764977358669e-4,3.348834402295054e-5,-3.695963620118213e-9,8.654934113410493e-4,3.380514974584113e-5,-3.827962144226022e-9,8.65680227216288e-4,3.411174050293928e-5,-3.957644664897803e-9,8.657570330287688e-4,3.4346041766830635e-5,-4.057808965225653e-9,8.657669387277931e-4,3.446932313815453e-5,-4.11101586076775e-9,8.657613435022625e-4,3.4472588411529344e-5,-4.112539581686109e-9,8.657862135868558e-4,3.4373094380466114e-5,-4.069050533975013e-9,8.658735763707832e-4,3.4205060581144676e-5,-3.99475967321788e-9,8.660388852455758e-4,3.400943296480929e-5,-3.907091687927469e-9,8.66282466493992e-4,3.3825844969993364e-5,-3.823219696797409e-9,8.665927137849105e-4,3.3687619719216236e-5,-3.7578388388344435e-9,8.669494024009601e-4,3.361913423273398e-5,-3.7219299984715987e-9,8.673264891657124e-4,3.363439881774626e-5,-3.7220625465320145e-9,8.676945418145927e-4,3.373592694579208e-5,-3.7598487309122184e-9,8.680234235964354e-4,3.391351714465576e-5,-3.831368929963179e-9,8.682859972296471e-4,3.4143297256214016e-5,-3.926691202132316e-9,8.684632880644983e-4,3.4388163647136244e-5,-4.029972466578756e-9,8.685506814790997e-4,3.460127638371885e-5,-4.120889818604067e-9,8.685633840062911e-4,3.4734023180121915e-5,-4.178058611548191e-9,8.685380720783138e-4,3.4748252417980764e-5,-4.184372534042753e-9,8.685276349437916e-4,3.462966914812959e-5,-4.132901756292709e-9,8.685883291320915e-4,3.439669502663824e-5,-4.030854924441111e-9,8.687628382465881e-4,3.409933619952682e-5,-3.8992420211352555e-9,8.690658895057307e-4,3.3806647123293056e-5,-3.767634596223998e-9,8.694785799556857e-4,3.358696397155016e-5,-3.66578227162126e-9,8.69953568550893e-4,3.348840676249508e-5,-3.6152232829612797e-9,8.704286241585501e-4,3.352635120659295e-5,-3.623705146793659e-9,8.708434233092473e-4,3.36810197345908e-5,-3.6838087593563796e-9,8.711544860856722e-4,3.390464015558857e-5,-3.775680273187482e-9,8.713445725476498e-4,3.4135193673201416e-5,-3.872743220397276e-9,8.714246913321904e-4,3.4312587501143965e-5,-3.948669842514471e-9,8.714288385999942e-4,3.4392832306213484e-5,-3.983673438771948e-9,8.714035709437477e-4,3.4356588349835174e-5,-3.968454991877816e-9,8.713959401397892e-4,3.4210390500048455e-5,-3.904979500162979e-9,8.714434314935408e-4,3.398142071965159e-5,-3.80439632081465e-9,8.715682144280527e-4,3.370866502664886e-5,-3.6833035835006632e-9,8.717760142029626e-4,3.343373250814609e-5,-3.5597712152619653e-9,8.720583485322628e-4,3.3193644320049306e-5,-3.450143545804329e-9,8.723963305223968e-4,3.301640385510928e-5,-3.367013852901416e-9,8.727645877754009e-4,3.2918942751948914e-5,-3.318240190622122e-9,8.731346053164378e-4,3.290646426016532e-5,-3.3065975355143806e-9,8.734775263631105e-4,3.297227361968222e-5,-3.329661479803068e-9,8.737669246598247e-4,3.3097659941762863e-5,-3.3797021541565744e-9,8.739822501713752e-4,3.325204966262417e-5,-3.443668277316694e-9,8.741134429392175e-4,3.339441456133996e-5,-3.5037068763647772e-9,8.741663973729802e-4,3.347758868121113e-5,-3.538992779628764e-9,8.741674829281171e-4,3.3457101736264556e-5,-3.529614543781381e-9,8.741636709228396e-4,3.33044797175946e-5,-3.4624919926690294e-9,8.742144615830622e-4,3.302135267114131e-5,-3.337668517116169e-9,8.743747932608298e-4,3.264687423555464e-5,-3.1716545924770886e-9,8.746743840366114e-4,3.2251051243278426e-5,-2.9946081022665746e-9,8.751039489192597e-4,3.1913364921373566e-5,-2.841130150424048e-9,8.75616678903275e-4,3.169573821909346e-5,-2.738595983860198e-9,8.761445007935473e-4,3.162302292091491e-5,-2.698649906049282e-9,8.766203447195945e-4,3.167892308982781e-5,-2.715236885002451e-9,8.769963987697803e-4,3.18159383463042e-5,-2.7686104110067445e-9,8.772531062745815e-4,3.197221978649029e-5,-2.8323654947714774e-9,8.773990475854998e-4,3.2088299096119665e-5,-2.880564943726866e-9,8.774645762292172e-4,3.211954673233677e-5,-2.893205151464858e-9,8.774924155916585e-4,3.204298846969703e-5,-2.8593905607603026e-9,8.775277330636137e-4,3.185874387139908e-5,-2.778242446816188e-9,8.776094585559394e-4,3.158700840416259e-5,-2.657838435817586e-9,8.777641128132043e-4,3.126183960920271e-5,-2.5126548703569532e-9,8.78002877757191e-4,3.092341017264447e-5,-2.360210638245288e-9,8.78321864386743e-4,3.061051760107952e-5,-2.217716237311034e-9,8.787048132667152e-4,3.0354696413936292e-5,-2.0993733631963004e-9,8.791271129207127e-4,3.0176554948077197e-5,-2.0146576508170057e-9,8.795600526842855e-4,3.0084265265720063e-5,-1.9675904842138486e-9,8.799746005764623e-4,3.0073592700195904e-5,-1.9567272155798592e-9,8.803445685727407e-4,3.0128701933306585e-5,-1.9754931411414064e-9,8.806494724082241e-4,3.0223295863434567e-5,-2.012635250546257e-9,8.808775707256542e-4,3.0322170015652122e-5,-2.052817626545346e-9,8.810294629751855e-4,3.0383874541022066e-5,-2.077700737209661e-9,8.811219817814094e-4,3.0365784932921254e-5,-2.068140259899549e-9,8.811907881742122e-4,3.0232911390513986e-5,-2.0081342888122047e-9,8.812885190182023e-4,2.997035224275941e-5,-1.8904615726488688e-9,8.814748050867232e-4,2.9595882363843328e-5,-1.7223897108962145e-9,8.817972325406356e-4,2.9164896341324755e-5,-1.5279575596742727e-9,8.822694105023639e-4,2.8759323793384683e-5,-1.343146342028477e-9,8.828590048460752e-4,2.846005103322195e-5,-1.203784176843767e-9,8.834961316970444e-4,2.8315408404152892e-5,-1.1317019817736651e-9,8.840994293836644e-4,2.83238474756633e-5,-1.1270381711241277e-9,8.846048503517724e-4,2.8439563876848128e-5,-1.1705107836514342e-9,8.849825261434277e-4,2.859423427913567e-5,-1.2327153363012424e-9,8.852377405673897e-4,2.872082247503333e-5,-1.2843809606697235e-9,8.854014350719654e-4,2.876976020388615e-5,-1.303411303612948e-9,8.855175691600622e-4,2.8715569658327886e-5,-1.277894686911527e-9,8.856319414654461e-4,2.8556383656666185e-5,-1.2061264571813115e-9,8.857841196699158e-4,2.8309570284204513e-5,-1.0949624616496077e-9,8.86002414496257e-4,2.800577749822175e-5,-9.574157297751806e-10,8.863013254260068e-4,2.7682541703841347e-5,-8.099261480403505e-10,8.866810883604368e-4,2.737801278175877e-5,-6.695408320630273e-10,8.871291034948231e-4,2.712535762590261e-5,-5.513048593649785e-10,8.876228817584209e-4,2.6948399119048687e-5,-4.661876242949888e-10,8.881339924077757e-4,2.6858865286951922e-5,-4.197713685400893e-10,8.886323956855838e-4,2.6855412138336997e-5,-4.1179225649502044e-10,8.890905424093482e-4,2.6924258581403914e-5,-4.3643441475982406e-10,8.89486876270744e-4,2.704096977561104e-5,-4.831197421077393e-10,8.898087302066524e-4,2.7172978043164845e-5,-5.375765842824722e-10,8.900547902185537e-4,2.7282747178927522e-5,-5.831513974124379e-10,8.902372653753913e-4,2.733186854749421e-5,-6.02542926548089e-10,8.903834851144673e-4,2.7286782595027556e-5,-5.803341451115104e-10,8.905356820182493e-4,2.712678713758405e-5,-5.066546828876249e-10,8.907466490935431e-4,2.6853822167289743e-5,-3.817222697006188e-10,8.910687379135351e-4,2.650095008026581e-5,-2.1981389275727818e-10,8.915358613141435e-4,2.613316302797963e-5,-4.974968918210426e-11,8.921441557986117e-4,2.583341569558239e-5,9.130127597938247e-11,8.928435576312597e-4,2.5673648601187617e-5,1.7077634639135572e-10,8.935508750856743e-4,2.5683679634147847e-5,1.7468326592194504e-10,8.941811428365587e-4,2.5837610180360195e-5,1.1381510218411522e-10,8.946793739990621e-4,2.6067113585673513e-5,1.8006901262402275e-11,8.950349091826171e-4,2.6291644820413183e-5,-7.717084794839584e-11,8.952750213494531e-4,2.6446389435700407e-5,-1.427663814093566e-10,8.954475970296075e-4,2.64960814946439e-5,-1.625988001066087e-10,8.956041887442954e-4,2.6435196735103513e-5,-1.334689640026147e-10,8.957887712051753e-4,2.6280905283114967e-5,-6.224871917615731e-11,8.960323226691599e-4,2.6064317323041538e-5,3.777765165941726e-11,8.963513575114935e-4,2.5822815459411318e-5,1.5017549800954496e-10,8.96748509792149e-4,2.5594124919428984e-5,2.5799083696445723e-10,8.972140957359525e-4,2.5411712108030967e-5,3.459131555119787e-10,8.97728398380985e-4,2.5301088813513795e-5,4.0208667445015245e-10,8.982646818886401e-4,2.5276973108559064e-5,4.19511702332487e-10,8.987928885022273e-4,2.5341491278246515e-5,3.969097854818967e-10,8.992838386101128e-4,2.548373838032777e-5,3.389148700251626e-10,8.997135067687896e-4,2.5680959581705512e-5,2.5551799630259e-10,9.000668011166033e-4,2.590128913974731e-5,1.6084571383571664e-10,9.003404075887244e-4,2.610773225553987e-5,7.143433854803536e-11,9.005444531271067e-4,2.626306035931546e-5,4.124552392039377e-12,9.00702826310028e-4,2.6335350498633444e-5,-2.636373164642357e-11,9.008518990331428e-4,2.6304027478397698e-5,-1.0173572691243059e-11,9.010369750715351e-4,2.616622985452215e-5,5.4685092455799334e-11,9.013053376731691e-4,2.5942528849006335e-5,1.5954350428825642e-10,9.016950534266347e-4,2.5679451672258137e-5,2.8372503804596007e-10,9.022205066966907e-4,2.544470577148632e-5,3.9657633063202955e-10,9.028595081446744e-4,2.5311299328910574e-5,4.6464848630157026e-10,9.035509621163673e-4,2.5331826054565013e-5,4.634519661365919e-10,9.042106403831823e-4,2.5513725417149697e-5,3.8884970955208253e-10,9.047617243836385e-4,2.5811755065389144e-5,2.60664002639359e-10,9.051639505218222e-4,2.614554976562279e-5,1.1486292999309726e-10,9.054243849394402e-4,2.6432431256007105e-5,-1.1230224109221291e-11,9.055864786501333e-4,2.6615750824420068e-5,-9.174245642919217e-11,9.057083348203511e-4,2.6675961252054152e-5,-1.1728835587695205e-10,9.05843511575355e-4,2.6625694545636095e-5,-9.286576972832296e-11,9.06030514980889e-4,2.649764658641052e-5,-3.258481232105302e-11,9.06290090659766e-4,2.6332711316700743e-5,4.5492394804177083e-11,9.066269079166894e-4,2.617147979221003e-5,1.230902666428942e-10,9.07032727485054e-4,2.6049140781842117e-5,1.8405636274430814e-10,9.074895537591257e-4,2.5992565692749985e-5,2.1580884693763228e-10,9.079725233622418e-4,2.601842289978903e-5,2.1034058494702972e-10,9.08452843161885e-4,2.6131794189518346e-5,1.649501949413581e-10,9.089011187176733e-4,2.632531969086917e-5,8.266582317282753e-11,9.092912509323934e-4,2.657930002330282e-5,-2.7811191372744197e-11,9.096046947811349e-4,2.686337600497953e-5,-1.5287896453951608e-10,9.098343835696975e-4,2.7140160235303376e-5,-2.756580777618742e-10,9.099874027396871e-4,2.737067976970732e-5,-3.7839683569915226e-10,9.100856080701482e-4,2.7521019033657425e-5,-4.4541806075215186e-10,9.101636727790192e-4,2.756915427471307e-5,-4.662024595936307e-10,9.102644580498961e-4,2.751076592587584e-5,-4.3810314345020306E-10,9.104319511252228e-4,2.736291054800073e-5,-3.681879685719245e-10,9.107022221916946e-4,2.7164432891512126e-5,-2.736553609265788e-10,9.110933354507029e-4,2.6971680885033756e-5,-1.800824904443576e-10,9.11596330532063e-4,2.6848117080263942e-5,-1.167738231171905e-10,9.121710507471927e-4,2.6847793958635906e-5,-1.0913815308381964e-10,9.12751534970597e-4,2.6996070209376236e-5,-1.6964949395235283e-10,9.132634636288651e-4,2.72756008370633e-5,-2.9115810444199527e-10,9.136492992958313e-4,2.762733566158342e-5,-4.471383736182009e-10,9.138892892803114e-4,2.797002314543524e-5,-6.005507786510418e-10,9.140064810409892e-4,2.8229735821653137e-5,-7.173953360843062e-10,9.140537060586121e-4,2.8363778381520954e-5,-7.777099880424133e-10,9.14091744347561e-4,2.8368259804342512e-5,-7.790964097262822e-10,9.141707165736832e-4,2.8270290432506036e-5,-7.332676996715194e-10,9.143209375298112e-4,2.811333903517838e-5,-6.595294780294835e-10,9.145523676781168e-4,2.7943782175206335e-5,-5.787922436801097e-10,9.148586524660526e-4,2.780218073489562e-5,-5.09645207598181e-10,9.15222213264884e-4,2.771907523928594e-5,-4.663750532641056e-10,9.156186000215372e-4,2.771356286516508e-5,-4.581833019385022e-10,9.160198239972885e-4,2.7793018214471577e-5,-4.889247071998724e-10,9.163971548837643e-4,2.795307226790254e-5,-5.570122799444724e-10,9.167240149473723e-4,2.8177711329907586e-5,-6.554310086134877e-10,9.169794235753807e-4,2.8439962674449603e-5,-7.720472188029496e-10,9.171519825482253e-4,2.870402885777489e-5,-8.905750008556582e-10,9.172436935254598e-4,2.8929649817970348e-5,-9.925419838939779e-10,9.172722940063046e-4,2.9078832692983632e-5,-1.0603291660817625e-9,9.172706400546866e-4,2.912409780548574e-5,-1.080924584550345e-9,9.17282157849279e-4,2.9056323329246427e-5,-1.0495469582952546e-9,9.17352548715972e-4,2.8889652042343435e-5,-9.719977617501207e-10,9.175193386587934e-4,2.8661331040972106e-5,-8.647637143988589e-10,9.178017998224793e-4,2.842566755332037e-5,-7.524533284368034e-10,9.181939299909826e-4,2.824278153652306e-5,-6.627971222401617e-10,9.186627846165465e-4,2.8164133229208014e-5,-6.200278774014088e-10,9.19153691738718e-4,2.8217986087638425e-5,-6.380459293784765e-10,9.196025451004935e-4,2.8398984740483134E-05,-7.153326477966576e-10,9.199531003263491e-4,2.8666337663424036e-5,-8.338087002295918e-10,9.201741950295597e-4,2.8953522843619235e-5,-9.631226655409933e-10,9.202698561839225e-4,2.918802920852016e-5,-1.0697405631849333e-9,9.202770539297086e-4,2.9313951870328424e-5,-1.1274657767908662e-9,9.20251788073042e-4,2.9307694253609973e-5,-1.1248038587933661e-9,9.202503631241845e-4,2.918064509705824e-5,-1.0663142394564279e-9,9.203142811661418e-4,2.897003743896867e-5,-9.68530131895985e-10,9.204634699590332e-4,2.8724513202568727e-5,-8.534492296718607e-10,9.206973132387841e-4,2.849110787091789e-5,-7.426352211365498e-10,9.209999773637789e-4,2.8307067355278376e-5,-6.534492842105844e-10,9.213465790289916e-4,2.8196472237938423e-5,-5.974035621587512e-10,9.21708293335506e-4,2.8169942280115928e-5,-5.798940312517992e-10,9.220560080914304e-4,2.8225631349565033e-5,-6.005462214024394e-10,9.223629986190541e-4,2.8350410654034294e-5,-6.536955210792199e-10,9.226073866112044e-4,2.8520935298446312e-5,-7.28851240962084e-10,9.227750120124014e-4,2.8705005688838147e-5,-8.113094184352923e-10,9.228628541636617e-4,2.886416079327547e-5,-8.833278120249603e-10,9.228823589672353e-4,2.895853283479903e-5,-9.263428574000358e-10,9.228611534120579e-4,2.8954410829763517e-5,-9.244525203760215e-10,9.22841094274703e-4,2.8833597004887607e-5,-8.687589669821464e-10,9.228711087655056e-4,2.860178543460586e-5,-7.612984631604381e-10,9.229952903879357e-4,2.8291928119182712e-5,-6.167002132570091e-10,9.232395355675018e-4,2.7959342967609063e-5,-4.600776629160696e-10,9.236018170315074e-4,2.766851040299726e-5,-3.211006337196332e-10,9.240504121843283e-4,2.7475443382623978e-5,-2.2596816610665073e-10,9.24531262399518e-4,2.741170749626898e-5,-1.8999789985040983e-10,9.249820629694834e-4,2.747542499218661e-5,-2.1326498107148244e-10,9.25348579660942e-4,2.7631811895541113e-5,-2.805432543382063e-10,9.255984900902482e-4,2.7822723222327646e-5,-3.6544697746303546e-10,9.257290496695094e-4,2.798233184373522e-5,-4.3755816439126784e-10,9.25766534088789e-4,2.80545120609564e-5,-4.705154590635174e-10,9.257576987930197e-4,2.800685278340508e-5,-4.4865598588417815e-10,9.257561138535627e-4,2.7837106293070436e-5,-3.701910247767966e-10,9.258080615404461e-4,2.757056376533481e-5,-2.4616627976356377e-10,9.259425348434525e-4,2.7250326470559132e-5,-9.609656809923689e-11,9.261676807511085e-4,2.6924824434891593e-5,5.773311606893498e-11,9.264731188036599e-4,2.663697142690499e-5,1.9528968966108854e-10,9.268356351407438e-4,2.6417432659609167e-5,3.019901995562894e-10,9.272255509647921e-4,2.6282152592361178e-5,3.6997091936557287e-10,9.276120574189009e-4,2.6232846291373425e-5,3.9797540595297546e-10,9.279670116931762e-4,2.6258881085469936e-5,3.9055441141759986e-10,9.282675227858236e-4,2.633942937784366e-5,3.570959163618194e-10,9.284980234511821e-4,2.644547284239765e-5,3.109050504872678e-10,9.286524796636579e-4,2.654193492234242e-5,2.6822927772623276e-10,9.287369625751979e-4,2.6590780100069592e-5,2.468431766251289e-10,9.287720369209947e-4,2.6556135305642376e-5,2.636822102111064e-10,9.287934339306461e-4,2.6412028824363202e-5,3.312264037819188e-10,9.288486997992517e-4,2.6151880961107663e-5,4.530300718778846e-10,9.289878720362526e-4,2.5796515725207018e-5,6.199146734068698e-10,9.292487589067231e-4,2.5395465656098757e-5,8.092647167352129e-10,9.29641666352082e-4,2.5017209649756432e-5,9.894516360464816e-10,9.301413876496481e-4,2.472917795980915e-5,1.1290141747255939e-9,9.306922559167429e-4,2.4575229989538544e-5,1.2070780979559616e-9,9.312251819721861e-4,2.4561109000296633e-5,1.2202059312944135e-9,9.316789667520669e-4,2.465414560968802e-5,1.1827604254879246e-9,9.320169043861123e-4,2.479571175444768e-5,1.1213819953507269e-9,9.322336847376593e-4,2.4919677271373376e-5,1.0666004249723868e-9,9.323526991819391e-4,2.496981318218703e-5,1.044792681412822e-9,9.324168167771345e-4,2.4911728305382368e-5,1.072537792680831e-9,9.324763341556606e-4,2.473779692662344e-5,1.1541348440936524e-9,9.32577287240139e-4,2.446550131433796e-5,1.2821529509168165e-9,9.327524775390439e-4,2.4130741138395573e-5,1.440358563370683e-9,9.330166395630526e-4,2.3778318046824064e-5,1.608044416470438e-9,9.333661039477023e-4,2.345210977652227e-5,1.7646106799430005e-9,9.337821762564567e-4,2.3187164366326925e-5,1.8933448565731633e-9,9.342366534787011e-4,2.3004991867956138e-5,1.983756984261391e-9,9.346977645863617e-4,2.2912152275451638e-5,2.0323646948176415e-9,9.351352665974508e-4,2.2901360219547865e-5,2.0422501912195693e-9,9.355241516458479e-4,2.2953966611580642e-5,2.021915505548688e-9,9.358471024062418e-4,2.3042848220487e-5,1.983917263664366e-9,9.360962029673838e-4,2.313526295966051e-5,1.9435240421953627e-9,9.362744148421519e-4,2.319579877368126e-5,1.9173555450183216e-9,9.363970340869479e-4,2.3190008396632788e-5,1.921714213936969e-9,9.364926985739199e-4,2.3089580081948874e-5,1.970175219873316e-9,9.366025595028989e-4,2.287954350737153e-5,2.070174683549589e-9,9.367754583789063e-4,2.256662486320555e-5,2.219009962619075e-9,9.370572543760401e-4,2.2185503816041416e-5,2.40080151825208e-9,9.374749898088448e-4,2.179746684581724e-5,2.5870254829646286e-9,9.380215496738124e-4,2.1476617739059208e-5,2.7428988022427817e-9,9.386504920238448e-4,2.1285143976963856e-5,2.8389345262250392e-9,9.392879545260637e-4,2.124847926412409e-5,2.8626284858923288e-9,9.398581363504856e-4,2.1344635824425707e-5,2.8236063659948714e-9,9.403092110193681e-4,2.1513973951784947e-5,2.749245885993131e-9,9.406269138130842e-4,2.1682634723939766e-5,2.67386501863676e-9,9.408323763286779e-4,2.178648157968665e-5,2.6275885831474924e-9,9.409696504997068e-4,2.1786146578814432e-5,2.6292808737827737e-9,9.410906514838015e-4,2.1671298131321062e-5,2.6844268786052037e-9,9.41242649635597e-4,2.145702236312698e-5,2.786633456564728e-9,9.414601509848395e-4,2.1176178630965497e-5,2.9210047073092557e-9,9.417610200086401e-4,2.0870608445111807e-5,3.0681179766648086e-9,9.421460370053103e-4,2.0582809873944577e-5,3.207899651127782e-9,9.426010936837508e-4,2.0348968697412414e-5,3.3229824926066307e-9,9.431012540259686e-4,2.0193985304551373e-5,3.401195641488044e-9,9.436158120570794e-4,2.012884842892798e-5,3.436951038320817e-9,9.441134784478598e-4,2.015031500623975e-5,3.4314859276191417e-9,9.44566950904901e-4,2.0242534645964484e-5,3.3921135298370826e-9,9.449563631171996e-4,2.0379982085524475e-5,3.330805785534591e-9,9.45271517348029e-4,2.0530961708450033e-5,3.2625023737391606e-9,9.455131621575188e-4,2.0661233197895548e-5,3.203395247216593e-9,9.456936234191719e-4,2.0737740900431553e-5,3.1692023079153e-9,9.458369007988554e-4,2.073272466669384e-5,3.1732674706314038e-9,9.459779040524844e-4,2.0628653770206123e-5,3.224233945190357e-9,9.461597634391267e-4,2.0424167988906754e-5,3.3231751090821356e-9,9.46427574458297e-4,2.014003684687474e-5,3.4606600272122213e-9,9.468173676227388e-4,1.98221812789624e-5,3.615192303367057e-9,9.473413942934375e-4,1.9537012097558103e-5,3.755318583394564e-9,9.479753457182548e-4,1.9355058402098106e-5,3.847349600926752e-9,9.486571399076209e-4,1.9325058394134616e-5,3.867688552958027e-9,9.493040520760504e-4,1.9450539767815956e-5,3.814066075128484e-9,9.498430651538646e-4,1.9684623094334385e-5,3.7081770948540923e-9,9.502378728614017e-4,1.994861501821484e-5,3.5870008241428506e-9,9.504975307118342e-4,2.01632840220824e-5,3.4880374073031084e-9,9.506654032765242e-4,2.0274709481559317e-5,3.437068799563959e-9,9.507989420812344e-4,2.0264365859063468e-5,3.4433449550727618e-9,9.509516863480496e-4,2.0145143002205663e-5,3.5013586813003237e-9,9.511626032896819e-4,1.9950604861647016e-5,3.595755007819909e-9,9.514523625841899e-4,1.972359867900281e-5,3.7065483148110366e-9,9.518240846294337e-4,1.9507126203245064e-5,3.813351896094841e-9,9.522662841079077e-4,1.933798514493866e-5,3.898421280054506e-9,9.527567177104721e-4,1.9242649321887765e-5,3.94873970416592e-9,9.532666534200279e-4,1.9234898009828817e-5,3.9573083496472175e-9,9.537653046836214e-4,1.931500888982162e-5,3.923656171525834e-9,9.542241491314553e-4,1.9470419469034043e-5,3.853573929853045e-9,9.546208269205008e-4,1.967778168597357e-5,3.758113485784791e-9,9.549422337944906e-4,1.990624356532854e-5,3.6519733720235854e-9,9.551864658672643e-4,2.012153016907811e-5,3.5515235649189295e-9,9.553635348866212e-4,2.029033148993112e-5,3.4727284456947125e-9,9.554949463176509e-4,2.0384734278047446e-5,3.429079651875691e-9,9.55612166139684e-4,2.03866030610309e-5,3.4295402733541126e-9,9.557537872596488e-4,2.029183687422643e-5,3.4764900665650733e-9,9.559608378031081e-4,2.0114246891201803e-5,3.563775485379721e-9,9.562694312086343e-4,1.988802000189864e-5,3.6753836672060575e-9,9.567005353306505e-4,1.9666425812314765e-5,3.785918859393363e-9,9.572485741343938e-4,1.951354653734905e-5,3.864486310112931e-9,9.57873847869679e-4,1.9487015195238054e-5,3.8829949935352816e-9,9.58506375185627e-4,1.961495423927636e-5,3.827353654574862e-9,9.590658554599388e-4,1.9878214338844435e-5,3.706183686441474e-9,9.59491778185771e-4,2.021167822462048e-5,3.5503480856677113e-9,9.597671996149698e-4,2.0528378965229346e-5,3.4014299519401243e-9,9.599217284447296e-4,2.0753552855409916e-5,3.295380207449077e-9,9.600140258223889e-4,2.084893939258985e-5,3.2508500223577976e-9,9.601071466008167e-4,2.081721898662703e-5,3.2670417811981256e-9,9.602500853369318e-4,2.0691028420511654e-5,3.3288768573415605e-9,9.604701387776805e-4,2.051709319339869e-5,3.4144264007709955e-9,9.60773545484276e-4,2.034297332174702e-5,3.501100421052396e-9,9.611500679665309e-4,2.0208786324005668e-5,3.569552864573399e-9,9.615783591656324e-4,2.014318881895291e-5,3.6056735200335207e-9,9.620307130834803e-4,2.0161937110386437e-5,3.6014269400379457e-9,9.62477113531018e-4,2.0267731706648574e-5,3.5550823882264824e-9,9.628889049217328e-4,2.0450864920827385e-5,3.4710012484743916e-9,9.632422415170349e-4,2.069066577730867e-5,3.3589647822421636e-9,9.635212754316284e-4,2.0957906935666852e-5,3.2329849290971195e-9,9.637208099389389e-4,2.1218360815741975e-5,3.1095519476630494e-9,9.638478893925641e-4,2.143740445538196e-5,3.0054061149790872e-9,9.639218361763492e-4,2.158517204251695e-5,2.9350831633136274e-9,9.639725275225862e-4,2.164161332623286e-5,2.9085171189180765e-9,9.64036920303166e-4,2.1600821946777073e-5,2.928960887667208e-9,9.641539462469475e-4,2.1473982466179215e-5,2.991503500896854e-9,9.643579665181983e-4,2.129029021121154e-5,3.0824929931979146e-9,9.646710825382556e-4,2.1095019009386883e-5,3.180304929063653e-9,9.650951414487477e-4,2.0943493593642626e-5,3.2581268817857795e-9,9.656055505064805e-4,2.08898021785074e-5,3.2893920797482204e-9,9.661506527532753e-4,2.0970707862049013e-5,3.2556740154475738e-9,9.666609700686485e-4,2.1188936127107843e-5,3.154989219151684e-9,9.670695157136533e-4,2.1504456001118907e-5,3.0062342252277902e-9,9.673367523603838e-4,2.1842686062608042e-5,2.8453160317467475e-9,9.674669505838162e-4,2.2120216315934066e-5,2.7126670331229932e-9,9.675052672091475e-4,2.227588153984791e-5,2.6381300324599617e-9,9.67517310975436e-4,2.2290098639572074e-5,2.631571812351488e-9,9.675641549386202e-4,2.2184188610723864e-5,2.683192639935835e-9,9.676856175598294e-4,2.20050732406217e-5,2.770831293998539e-9,9.678958345343047e-4,2.1806797104405777e-5,2.8687326779884426e-9,9.681874796128061e-4,2.1636899335670483e-5,2.953998363007588e-9,9.685391645791842e-4,2.152957275673156e-5,3.00987037631748e-9,9.689223645110006e-4,2.150393434528262e-5,3.0266647100820593e-9,9.693065461435913e-4,2.1564905127593073e-5,3.0015027830697376e-9,9.696627464705727e-4,2.170489096403e-5,2.9376390040777005e-9,9.699663713453124e-4,2.190558400417185e-5,2.843664610904784e-9,9.701997585934131e-4,2.213998368625858e-5,2.732536103734538e-9,9.703546573483743e-4,2.2375052452482884e-5,2.6202568912921775e-9,9.704343769114892e-4,2.2575473791547756e-5,2.524023751178972e-9,9.70454924970594e-4,2.2708679506424222e-5,2.4597828841057676e-9,9.704442684490575e-4,2.2750680548228815e-5,2.4394191096140195e-9,9.70439123002729e-4,2.269163919856002e-5,2.4680675742140396e-9,9.704792630519241e-4,2.2539791907013454e-5,2.542185695856593e-9,9.706000419416595e-4,2.2322356320565065e-5,2.6490241837254375e-9,9.708244225247657e-4,2.208254490993235e-5,2.7679330778128663e-9,9.711561348596273e-4,2.1872563135784633e-5,2.8736116004682885e-9,9.715756674472968e-4,2.1743144202396543e-5,2.9411105609226534e-9,9.720408542324096e-4,2.1730926538918943e-5,2.952015717458691e-9,9.724936339510598e-4,2.1846219921065344e-5,2.9005828036571425e-9,9.728734724452532e-4,2.206526684943893e-5,2.797753482524233e-9,9.73135268736305e-4,2.2331915022099625e-5,2.670534930423955e-9,9.732656869873846e-4,2.2571721047228047e-5,2.5551777813643346e-9,9.732896097496811e-4,2.2715649390846857e-5,2.4855509251822116e-9,9.732616414073596e-4,2.272350320648063e-5,2.481624710067114e-9,9.732459633450723e-4,2.2595527734851322e-5,2.5437609524692543e-9,9.732948670608518e-4,2.2367393624596813e-5,2.6551037957679194e-9,9.73435775314028e-4,2.2093662920085047e-5,2.7895237218060307e-9,9.736697513088091e-4,2.18295826774539e-5,2.9203430820786453e-9,9.739779823635234e-4,2.1618463822268142e-5,3.0263986928152343e-9,9.743307630656896e-4,2.14864286442583e-5,3.094632000552376e-9,9.746951934172733e-4,2.1442559653592196e-5,3.120143478228777e-9,9.75040337470858e-4,2.1481561948537084e-5,3.105047155900916e-9,9.753402753088035e-4,2.1586872020260996e-5,3.0570669881734935e-9,9.755760407850127e-4,2.1733399542332765e-5,2.9882432258541283e-9,9.757372606998641e-4,2.1890007987213578e-5,2.913710103700545e-9,9.758238522467932e-4,2.2022308074060718e-5,2.8502981225779335e-9,9.758475695193567e-4,2.2096463822383953e-5,2.814649675643213e-9,9.75832592759985e-4,2.208441265972937e-5,2.8206647589847394e-9,9.758139779570534e-4,2.1970120824932505e-5,2.8764536267483205e-9,9.758329513980938e-4,2.1755459239150598e-5,2.9814657729990575e-9,9.759289405456378e-4,2.146343405290607e-5,3.1248755506446147e-9,9.761297562449015e-4,2.1136469459250627e-5,3.2863308207215907e-9,9.764427844228285e-4,2.0828722875066234e-5,3.4395760619971846e-9,9.768504235625822e-4,2.05936578116549e-5,3.558401665094199e-9,9.773119310828517e-4,2.047011212383905e-5,3.623414500991834e-9,9.777718670258082e-4,2.0470907088346007e-5,3.627703453703138e-9,9.781733258317801e-4,2.057752945621449e-5,3.5796494003707138e-9,9.784727031122457e-4,2.0742968740602736e-5,3.501766797457081e-9,9.786520083386822e-4,2.090280873294008e-5,3.4254174178099575e-9,9.787247391817811e-4,2.099234249163606e-5,3.3824366972435045e-9,9.787325073239532e-4,2.0964978181006943e-5,3.3960258792809006e-9,9.787325574450096e-4,2.080554329966027e-5,3.474116418782361e-9,9.78780386798012e-4,2.053316629811452e-5,3.607853339306525e-9,9.78914283306498e-4,2.0192836373745813e-5,3.7756288344559166e-9,9.79147450149718e-4,1.9840040928541138e-5,3.9505044744465266e-9,9.794691393037586e-4,1.9525344833017023e-5,4.107694790089413e-9,9.798520178516646e-4,1.928413468832371e-5,4.229601723499455e-9,9.802613780058582e-4,1.9132999458968806e-5,4.30768523320254e-9,9.806628425931363e-4,1.9071152761889917e-5,4.341903576740723e-9,9.810273134182267e-4,1.9084239326578834e-5,4.338962357581536e-9,9.81333537072951e-4,1.9148443642578993e-5,4.310353550740631e-9,9.81569296115634e-4,1.9233976343823555e-5,4.2706388260183405e-9,9.817321483998952e-4,1.9307966381521585e-5,4.235993167701627e-9,9.81830219636952e-4,1.933733918927407e-5,4.222757802688705e-9,9.818829501630556e-4,1.9292467400002797e-5,4.245632427234919e-9,9.819209964844942e-4,1.9152168044642423e-5,4.315222825428222e-9,9.8198392831691e-4,1.890983975966044e-5,4.435029642934434e-9,9.821143377150008e-4,1.857919889488635e-5,4.59861659028588e-9,9.823480141006478e-4,1.819663416702158e-5,4.788408783691395e-9,9.827021678395676e-4,1.781681352429813e-5,4.977767747591471e-9,9.8316630954625e-4,1.750019208422675e-5,5.1370239028109335e-9,9.837010460599907e-4,1.729533464359589e-5,5.242087342349132e-9,9.842471758127079e-4,1.722284340206006e-5,5.282365711457081e-9,9.847423799112572e-4,1.7267922501442923e-5,5.2645551112541595e-9,9.851390392167326e-4,1.7384650541422545e-5,5.210737350473865e-9,9.85416712413494e-4,1.7509721680699187e-5,5.151788515618179e-9,9.855858656559924e-4,1.7580163367743918e-5,5.118732221992248e-9,9.856830005405348e-4,1.754937325800318e-5,5.134813103943706e-9,9.857596419803308e-4,1.7397498039928058e-5,5.210281577132254e-9,9.858686370143312e-4,1.7134242430752782e-5,5.340872784086539e-9,9.860514093620037e-4,1.6794137806137563e-5,5.509998145968244e-9,9.863293550422345e-4,1.6426136917274978e-5,5.693759305662125e-9,9.867012674118518e-4,1.6080882897378395e-5,5.867166202605813e-9,9.871466831850105e-4,1.5799461394281728e-5,6.009706321470195e-9,9.876331363464859e-4,1.560644168178504e-5,6.108876220456722e-9,9.881244546795737e-4,1.5508013115131364e-5,6.16123561320287e-9,9.885877203164924e-4,1.5494168132305846e-5,6.1714423956312695e-9,9.889977731607897e-4,1.554301218967708e-5,6.150173958810571e-9,9.89339357154404e-4,1.5625438489487203e-5,6.11180328305642e-9,9.896077069428486e-4,1.5709163928471263e-5,6.072354236231378e-9,9.898084641090051e-4,1.5761986455145772e-5,6.047846128949401e-9,9.89957481892549e-4,1.575472773264608e-5,6.052821432389052e-9,9.900805416390554e-4,1.5664564164811243e-5,6.098708901861965e-9,9.902123484409752e-4,1.5479331179479615e-5,6.191709401312268e-9,9.903935258545628e-4,1.5202748222706768e-5,6.33020714370356e-9,9.906641160678208e-4,1.4859172652645127e-5,6.502381741232603e-9,9.910530106883304e-4,1.4494749524882107e-5,6.685572808518867e-9,9.915653761885476e-4,1.4170939529055735e-5,6.8494023081549725e-9,9.92173804543939e-4,1.3948485846748767e-5,6.963646567409606e-9,9.92820439606734e-4,1.3865800846189006e-5,7.008937764536123e-9,9.934330686488335e-4,1.3922023616282452e-5,6.98524850756154e-9,9.939493480964887e-4,1.4075052891534514e-5,6.91302227434678e-9,9.943372374337234e-4,1.4256527274009431e-5,6.825888020437902e-9,9.946022722861765e-4,1.4395571285888233e-5,6.75895614654633e-9,9.947808856143072e-4,1.4439740434982362e-5,6.738430832136037e-9,9.949257957257986e-4,1.4366093115323758e-5,6.776065172871318e-9,9.950905167510095e-4,1.418186073054903e-5,6.868729017701459e-9,9.953173989064848e-4,1.391790875148587e-5,7.001518418367263e-9,9.95630713119781e-4,1.3618756991412558e-5,7.152573416875709e-9,9.960345799292754e-4,1.3332040182830323e-5,7.29822948174995e-9,9.965148922381106e-4,1.3099245727471433e-5,7.4176277467670906e-9,9.970441941477112e-4,1.294893783688122e-5,7.496180701557594e-9,9.975882397394037e-4,1.2893264734091967e-5,7.527452492986098e-9,9.98112746713271e-4,1.2927881166143136e-5,7.513323955728468e-9,9.985890416039868e-4,1.3034634044303174e-5,7.462717843178684e-9,9.98997826875862e-4,1.3185900947308538e-5,7.389423516943071e-9,9.993309205324102e-4,1.3349405125668461e-5,7.3096360810763596e-9,9.99591375901445e-4,1.3492586365441474e-5,7.2397137309556e-9,9.99792668555754e-4,1.3586170648049899e-5,7.19436794380859e-9,9.999574846180697e-4,1.3607159236305784e-5,7.185183536470915e-9,0.0010001162353076604,1.3541721843540724e-5,7.219205045654568e-9,0.0010003049165363592,1.3388426048463978e-5,7.297338394204071e-9,0.0010005613623854227,1.3161776667357265e-5,7.4125560623676355e-9,0.0010009186855654698,1.2894930291567578e-5,7.548472365832492e-9,0.001001395431805748,1.2638913929780974e-5,7.679645009834532e-9,0.0010019842716833783,1.2454704246940159e-5,7.775465670467849e-9,0.0010026447567112351,1.2396089240531763e-5,7.80872345265965e-9,0.0010033080233894881,1.2487217081785896e-5,7.766920829338294e-9,0.0010038972478855197,1.2706548445498057e-5,7.660458605367358e-9,0.0010043565504526115,1.2989946449421098e-5,7.521224770364038e-9,0.001004672231437384,1.3254551939388285e-5,7.390681026669133e-9,0.0010048741581043606,1.3430195374539308e-5,7.304097230213788e-9,0.001005019125368549,1.3480998017901777e-5,7.27969563649755e-9,0.001005168386359312,1.340941335065461e-5,7.316596454133312e-9,0.0010053704906546521,1.3246930061867809e-5,7.3994046186029145e-9,0.0010056532197300141,1.3040000118914438e-5,7.505138119129774e-9,0.0010060229091539998,1.2837303701281687e-5,7.609490773330097e-9,0.0010064679702872599,1.2680694358525935e-5,7.691325334965295e-9,0.00100696410900686,1.2599802055308625e-5,7.73543576837147e-9,0.0010074799303969257,1.2609453088105831e-5,7.733972018905462e-9,0.0010079824262810555,1.270927137545503e-5,7.68678360040066e-9,0.001008441983199197,1.2885166585695294e-5,7.600766502657164e-9,0.0010088364680810365,1.3112382500046945e-5,7.488348827427479e-9,0.0010091540147537904,1.3359627618872047e-5,7.365366043977686e-9,0.0010093942793346546,1.3593707411098743e-5,7.248659658443538e-9,0.0010095681767792678,1.3783993741249416e-5,7.15377885761242e-9,0.0010096964280629517,1.3906222158150544e-5,7.093063507146875e-9,0.0010098073351207102,1.3945501108580383e-5,7.074156161434548e-9,0.001009933998475673,1.3898670498425644e-5,7.098839141011301e-9,0.0010101108925560731,1.3776156395851466e-5,7.162087545997906e-9,0.0010103693537762879,1.3603229200616472e-5,7.2513716092129284e-9,0.001010731370310706,1.3419833637562037e-5,7.3466457393835305e-9,0.0010112016762827962,1.3277108498864683e-5,7.422018074019115e-9,0.0010117598625822178,1.3228209751310446e-5,7.450356500270065e-9,0.0010123568768607588,1.3312347000828476e-5,7.411421404428368e-9,0.0010129222480500654,1.3535582819181508e-5,7.301724939909382e-9,0.001013385331984101,1.3858804132080293e-5,7.140781390672817e-9,0.001013703707706818,1.4205000113155494e-5,6.967497490960027e-9,0.0010138822454817784,1.448749274687313e-5,6.825833236491937e-9,0.0010139696115598694,1.464433393257325e-5,6.747309515966404e-9,0.001014034960781267,1.4658559233696529e-5,6.740744459985028e-9,0.0010141406929217946,1.4555765436898252e-5,6.793498539548968e-9,0.0010143254890754552,1.4386576477060897e-5,6.880297884166936e-9,0.0010146008251386124,1.420706593101242e-5,6.973012537470857e-9,0.0010149561275081414,1.4065065181815716e-5,7.047465907773897e-9,0.00101536675460542,1.3993570240248546e-5,7.0867457546242325e-9,0.0010158013574818438,1.4009210516690739e-5,7.0820601273590445e-9,0.0010162275161801665,1.4113340727320419e-5,7.032323770553171e-9,0.0010166159146742558,1.429419134817385e-5,6.943198192930504e-9,0.0010169435907143895,1.4529570251940101e-5,6.825790427443894e-9,0.001017196458485237,1.4790107827825064e-5,6.695003258799705e-9,0.0010173710222833715,1.5043063994411697e-5,6.5675509780237646e-9,0.0010174750556951806,1.5256600380969255e-5,6.459732390817189e-9,0.001017526963278131,1.5404159828331004e-5,6.385177403566588e-9,0.0010175537373666459,1.5468376233596634e-5,6.352868110860509e-9,0.001017587717364337,1.544402654131814e-5,6.365661713647204e-9,0.0010176624605994554,1.5339717534360233e-5,6.419435210938414e-9,0.0010178080063839555,1.5178075945731396e-5,6.502944076621323e-9,0.0010180457452669584,1.4994254410299033e-5,6.598491835633543e-9,0.001018383064035031,1.4832381264038678e-5,6.6836353960864175e-9,0.0010188083316972948,1.47391332796154e-5,6.734397667122887e-9,0.0010192878609278002,1.475363974145172e-5,6.730438678602947e-9,0.0010197678046505864,1.4894272655654495e-5,6.661915015952189e-9,0.00102018443463024,1.5145950174105276e-5,6.5361350999692345e-9,0.0010204836747962334,1.5455522234757765e-5,6.380048705078234e-9,0.0010206437243931602,1.5743334912936524e-5,6.2343512371156256e-9,0.0010206877187796243,1.5931055263172206e-5,6.139179160224897e-9,0.0010206758978202743,1.5972669549953236e-5,6.118206896081988e-9,0.0010206802785743953,1.587040614601252e-5,6.170538509004209e-9,0.0010207572457502255,1.5667653115910527e-5,6.274358304487625e-9,0.0010209325449119094,1.5426977239675342e-5,6.398084889086976e-9,0.0010212017498908892,1.520786821074164e-5,6.511580983868921e-9,0.0010215398590799887,1.5053291656116975e-5,6.5929010127443566e-9,0.001021912431934167,1.498569502034724e-5,6.630329259183798e-9,0.0010222841435015692,1.5008880327172054e-5,6.621529648464819e-9,0.0010226239917599095,1.5112068113238198e-5,6.571614831742929e-9,0.0010229080944826484,1.527401144689631e-5,6.491159177179544e-9,0.0010231212780165244,1.5466570242856973e-5,6.394419794620523e-9,0.001023258140679252,1.565799311163615e-5,6.29764201481796e-9,0.001023323723746117,1.581631986787821e-5,6.217269214912676e-9,0.0010233335657502231,1.5913194832607108e-5,6.1679458224003706e-9,0.001023312652942418,1.592801691867029e-5,6.160375068918902e-9,0.0010232928007281963,1.5851837316847298e-5,6.199331981376249e-9,0.0010233083950897286,1.5690131829775294e-5,6.282255337576482e-9,0.0010233908943278179,1.5463603240336597e-5,6.398818557630599e-9,0.0010235628682748299,1.5206365333078503e-5,6.531796793225194e-9,0.001023832615986048,1.4961295414609502e-5,6.659351030318273e-9,0.0010241904386357422,1.4772889164037382e-5,6.75860252344733e-9,0.001024607567166903,1.4678269177210256e-5,6.810218842264442e-9,0.001025038835875019,1.4697338813962965e-5,6.803536849223181e-9,0.0010254302198467145,1.4824014543455562e-5,6.7412161836967475e-9,0.001025731571596928,1.5021882123837198e-5,6.641636326261475e-9,0.0010259126052034333,1.522848767407803e-5,6.536783150416774e-9,0.0010259765363499528,1.5370953906319304e-5,6.464197088487894e-9,0.0010259633245588596,1.5390062552732196e-5,6.454503675266422e-9,0.0010259374918061134,1.5262568774086813e-5,6.519889575291671e-9,0.0010259645518792863,1.5009405517106155e-5,6.649894303135918e-9,0.0010260881771412683,1.4685110812366908e-5,6.816835676346961e-9,0.0010263193576777233,1.4355638624471758e-5,6.98711790063453e-9,0.0010266398889383535,1.4077159844329356e-5,7.1319926882616635e-9,0.001027014226018415,1.388425288732607e-5,7.2335633845970444e-9,0.0010274020414492461,1.3788133610311604e-5,7.285745723386852e-9,0.0010277670997235588,1.378095198171993e-5,7.292187151879546e-9,0.0010280818168414282,1.384189253769118e-5,7.263261955630348e-9,0.0010283288268859772,1.3942614549109414e-5,7.213352520340318e-9,0.0010285011445110084,1.405139140764495e-5,7.158731665697266e-9,0.0010286019408435882,1.413632711989153e-5,7.115870597147311e-9,0.0010286442540053864,1.4168322568558104e-5,7.09986088584424e-9,0.0010286504037499457,1.4124365397943462e-5,7.12268504128625e-9,0.0010286504791455998,1.3991292700524017e-5,7.191271681234185e-9,0.0010286791648484964,1.3769478993510954e-5,7.3056080066068604e-9,0.0010287705469715204,1.3475266008978337e-5,7.457494460578409e-9,0.001028951327632887,1.3140689311306862e-5,7.630660550566689e-9,0.0010292338285229816,1.280935564220711e-5,7.802822009644976e-9,0.0010296108825569928,1.2528353458002378e-5,7.949760843038067e-9,0.0010300546940236487,1.233759347627838e-5,8.050755726164393e-9,0.0010305208273311641,1.2259178009605778e-5,8.094075186049836e-9,0.0010309570900584187,1.2289732755782155e-5,8.08103476461809e-9,0.0010313157392175553,1.239822992254162e-5,8.027273387668908e-9,0.0010315663465513536,1.2530919495367793e-5,7.960336714121893e-9,0.0010317058209335492,1.2623500762804774e-5,7.913435014428099e-9,0.001031761762409121,1.2618455216019864e-5,7.916445804350526e-9,0.0010317863213620134,1.2482715648861428e-5,7.986708154305847e-9,0.0010318409415092163,1.2218875567850196e-5,8.123174915224233e-9,0.0010319770490094284,1.1864341225077265e-5,8.306813126168584e-9,0.00103222073763433,1.1478137897328902e-5,8.507363432120657e-9,0.001032567744181653,1.1121486498340977e-5,8.693293502779717e-9,0.001032989301697024,1.084087419509298e-5,8.840491614529463e-9,0.0010334441429188832,1.065944919603051e-5,8.936740074754993e-9,0.0010338905402688494,1.0577173083741774e-5,8.981736505163395e-9,0.0010342945423151325,1.0576383955421915e-5,8.98433665789792e-9,0.00103463375858786,1.0628837350001691e-5,8.958991422832772e-9,0.0010348979793146607,1.0701777354861157e-5,8.922621233770985e-9,0.0010350882727302663,1.0762337371071754e-5,8.89230185881902e-9,0.0010352157191526022,1.0780632780980312e-5,8.883608858628518e-9,0.0010353002554859072,1.0732303407048932e-5,8.90925860516677e-9,0.0010353694431257166,1.0601227344865006e-5,8.977690201699487e-9,0.0010354564618759658,1.0382697470573208e-5,9.09143350297743e-9,0.0010355964502504992,1.008658752883728e-5,9.245490273873833e-9,0.00103582062126145,9.739174784541215e-6,9.426394426544935e-9,0.001036148531357024,9.381685552026843e-6,9.612933762557046e-9,0.001036580411402926,9.063860868442835e-6,9.779418101910907e-9,0.0010370928511063498,8.832500434599207e-6,9.901545674027221e-9,0.0010376410685493903,8.717740287966906e-6,9.963490318062588e-9,0.001038168776362179,8.722090107823838e-6,9.963639543713632e-9,0.001038623174432724,8.817117820241822e-6,9.916433090139891e-9,0.0010389699638132367,8.949806345046257e-6,9.849185263172341e-9,0.0010392031310252545,9.056681538401306e-6,9.794814136056429e-9,0.0010393464417650642,9.081041880969784e-6,9.7828832107339e-9,0.0010394465445357972,8.98803121924295e-6,9.831716602058708e-9,0.0010395599652596504,8.773379181090786e-6,9.943793307826468e-9,0.0010397377850124105,8.463527638538071e-6,1.010562028455275e-8,0.0010400124740567555,8.107264085356009e-6,1.0292016552047566e-8,0.0010403907983126954,7.761647465210934e-6,1.047336668482392e-8,0.0010408546068110553,7.476975351250501e-6,1.0623406725890964e-8,0.0010413683448417354,7.285608742141655e-6,1.0725068130866081e-8,0.0010418898199738098,7.197436696745734e-6,1.077292879202111e-8,0.0010423802623030689,7.201792582882333e-6,1.0772323696065717e-8,0.0010428110604212102,7.273401012350935e-6,1.0736320365516424e-8,0.0010431666141344895,7.3794054706384364e-6,1.0682066369385867e-8,0.0010434442537033133,7.485424438284342e-6,1.062758834085327e-8,0.001043652630466233,7.559908129853109e-6,1.0589456096467488e-8,0.0010438096899647942,7.577040457584126e-6,1.0581220954317427e-8,0.0010439407598399314,7.518874452397437e-6,1.0612288493742078e-8,0.0010440766580099585,7.3774053804267025e-6,1.0686856280073861e-8,0.0010442511917944904,7.1569232978676465e-6,1.0802719477653824e-8,0.0010444971593526165,6.876269078840813e-6,1.0950114569202205e-8,0.001044840195797599,6.569674575005575e-6,1.1111270660756568e-8,0.0010452907905748228,6.284047442282688e-6,1.1261780001466925e-8,0.0010458366657182785,6.070632446913745e-6,1.1374885918198315e-8,0.0010464397212440041,5.970991705073476e-6,1.1428761032437083e-8,0.0010470419129418023,6.0012650636924906e-6,1.1414752486565529e-8,0.0010475808873286244,6.142246342171787e-6,1.134266195270011e-8,0.0010480101442759484,6.342031857499272e-6,1.1239472124113928e-8,0.0010483145665516262,6.531775462877667e-6,1.1141164514740623e-8,0.0010485141839921832,6.647674109549178e-6,1.1081204358546142e-8,0.0010486555927916323,6.649554437643226e-6,1.1080769771562399e-8,0.0010487962274780228,6.52970014858732e-6,1.1144090607712959e-8,0.001048988161110087,6.311113549640392e-6,1.1259318747852037e-8,0.001049266135585487,6.038217412853158e-6,1.140334069973273e-8,0.0010496417708631659,5.764112342343603e-6,1.1548386965958874e-8,0.001050103884713581,5.538005408647266e-6,1.1668579695155248e-8,0.0010506236688532541,5.395419538643018e-6,1.1745084312143063e-8,0.001051162793625547,5.352737678222033e-6,1.176905039772956e-8,0.0010516822059403249,5.4065291012566944e-6,1.1742069546748452e-8,0.0010521495626468031,5.5369304279269275e-6,1.1674479004989727e-8,0.0010525439851890206,5.7134564555245825e-6,1.1582329111142928e-8,0.0010528578438257308,5.9014015084172195e-6,1.1483979856274418e-8,0.0010530961263485919,6.067417747217445e-6,1.139710095373138e-8,0.0010532743691075914,6.1835874192326255e-6,1.133647354846759e-8,0.0010534160834845703,6.230045791333779e-6,1.1312589735762775e-8,0.001053550198721015,6.1966823130205854e-6,1.1330774854534354e-8,0.0010537085154161126,6.0844906794547615e-6,1.1390513063025623e-8,0.0010539227224054864,5.906847205676181e-6,1.1484802633572627e-8,0.00105422025687308,5.690435278638442e-6,1.1599668036115498e-8,0.0010546184278993171,5.4746708261865515e-6,1.1714426246353476e-8,0.001055117156275193,5.307635025766357e-6,1.1803769941651274e-8,0.001055692545616445,5.236529243510756e-6,1.184274644058134e-8,0.001056295705931545,5.292689648675187e-6,1.1814655608677331e-8,0.0010568617072468647,5.4757403210461624e-6,1.1719477956429268e-8,0.0010573293783666506,5.74604326804144e-6,1.157796966652239e-8,0.0010576645165347547,6.033560344798371e-6,1.1427058221344922e-8,0.0010578737870635731,6.261973517443829e-6,1.1307094518131505e-8,0.0010580009637449824,6.3760497725166996e-6,1.1247346419441141e-8,0.001058108517330219,6.358165356812837e-6,1.1257242872632262e-8,0.0010582556001528874,6.228289144348805e-6,1.1326384333356857e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json deleted file mode 100644 index d7e3be9..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_13.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":13000,"numberOfSamples":1000,"samples":[0.0010584823083198346,6.031818825503171e-6,1.14309469118811e-8,0.0010588036033781425,5.823520864538709e-6,1.1542103150393909e-8,0.0010592110744742987,5.6537248748726675e-6,1.1633248752700286e-8,0.0010596790894540058,5.559275280564943e-6,1.1684765345343194e-8,0.0010601724727019367,5.559236240846307e-6,1.1686339583847125e-8,0.0010606540091394276,5.654379293057021e-6,1.163732802349451e-8,0.0010610908819856466,5.829497270171977e-6,1.1545624012790231e-8,0.0010614594503400023,6.057715047147503e-6,1.1425423187205381e-8,0.001061747989835144,6.305862037083749e-6,1.1294367431781857e-8,0.0010619573719630783,6.539955951254238e-6,1.1170587469196216e-8,0.0010620999645025674,6.73003410085884e-6,1.107008326599654e-8,0.0010621972572704668,6.85379996171742e-6,1.1004756707165859e-8,0.0010622768540195135,6.898913123430779e-6,1.098119849532928e-8,0.0010623693266318172,6.864185869807982e-6,1.1000078885400938e-8,0.0010625050436689565,6.760079817880366e-6,1.1055907410923635e-8,0.001062710756522555,6.608668374463369e-6,1.1137052470541557e-8,0.0010630055440594903,6.442842455479279e-6,1.122613014857253e-8,0.0010633958133875673,6.303928192637586e-6,1.1301216346173524e-8,0.0010638698300656857,6.236227673998108e-6,1.1338700200742188e-8,0.0010643938207032379,6.277096687541316e-6,1.1318549017049607e-8,0.0010649135018336272,6.443029009602109e-6,1.1231761017071778e-8,0.0010653652534506645,6.716334917457601e-6,1.1087554932954997e-8,0.0010656971998236583,7.041447402084115e-6,1.0915428186536279e-8,0.0010658919742331224,7.338860744797124e-6,1.0757744815379704e-8,0.0010659770288683225,7.534292063466726e-6,1.0654138240953239e-8,0.001066013886508743,7.587831708115414e-6,1.0625935223163422e-8,0.0010660723258305996,7.506181686783977e-6,1.0669662265910576e-8,0.0010662052115061964,7.3335686443663195e-6,1.0761922260944352e-8,0.0010664358470525873,7.130863915281745e-6,1.0870481691937031e-8,0.0010667588393153595,6.955633515934309e-6,1.0964801902708683e-8,0.0010671485918925085,6.8498410434954626e-6,1.1022511941646397e-8,0.0010675694409390784,6.835426550329633e-6,1.1031759374762615e-8,0.0010679841615469535,6.915158645441867e-6,1.0990824083116765e-8,0.0010683599657830244,7.076052103195604e-6,1.0906394119921115e-8,0.0010686723933572796,7.293685466136946e-6,1.0791343615514796e-8,0.00106890765095213,7.536822311352906e-6,1.0662299642942404e-8,0.0010690635977016276,7.77211139688823e-6,1.0537115853861746e-8,0.001069149428980129,7.968577301214409e-6,1.0432429890255657e-8,0.0010691841550370862,8.101601929648258e-6,1.036149374624633e-8,0.0010691940071483454,8.156061538266819e-6,1.0332478423133815e-8,0.001069209055658057,8.128266563717782e-6,1.03474435063982e-8,0.0010692594713290538,8.026593480405271e-6,1.0402013164716527e-8,0.0010693717459872535,7.870945267100574e-6,1.0485664177770738e-8,0.0010695649713014753,7.691125951702836e-6,1.05825672334285e-8,0.0010698471837835711,7.524020444771572e-6,1.0673046459330192e-8,0.0010702118794917663,7.409199319244088e-6,1.073588364535248e-8,0.0010706353190277158,7.382260325524803e-6,1.0751866255570777e-8,0.0010710762838212979,7.465490347225327e-6,1.0708824642405977e-8,0.0010714809682874885,7.6570210693528492E-06,1.0607528738465052e-8,0.0010717954666795326,7.92266264450533e-6,1.0466162353522634e-8,0.0010719849482146093,8.197549025520211e-6,1.031948512559187e-8,0.0010720518335533688,8.403355641842077e-6,1.0209555077841326e-8,0.0010720405373210041,8.477632103826806e-6,1.0169920153450947e-8,0.001072021738228369,8.400092320472587e-6,1.021150931330851e-8,0.0010720635198379748,8.199374023477202e-6,1.0319075409549964e-8,0.0010722065788787624,7.937147885028722e-6,1.0459750886515433e-8,0.00107245583521534,7.681893768449438e-6,1.0597036740148054e-8,0.0010727875503866039,7.487659268153709e-6,1.0702071381753594e-8,0.0010731630002383215,7.384581405590331e-6,1.075864496894142e-8,0.0010735409195010803,7.379180450137632e-6,1.0763066178824929e-8,0.001073885642552888,7.459556157906894e-6,1.0721462765445143e-8,0.0010741711464074789,7.60167164073378e-6,1.064650717664984e-8,0.0010743824677307964,7.774854624539591e-6,1.05545292946971e-8,0.0010745158753886549,7.946253107214568e-6,1.0463140800736486e-8,0.0010745783975093434,8.084663970024577e-6,1.0389154063601514e-8,0.0010745867148931046,8.164015707520659e-6,1.0346669113505363e-8,0.0010745652935797434,8.166515928713906e-6,1.0345347414447921e-8,0.0010745436064007652,8.085247843115634e-6,1.0389003625916266e-8,0.001074552414002862,7.925732239563838e-6,1.04747713355022e-8,0.0010746194263179607,7.705947602888145e-6,1.0593098065321354e-8,0.0010747649179418883,7.45457851834404e-6,1.0728675241616273e-8,0.0010749978735612412,7.207509835919612e-6,1.0862287758949862e-8,0.0010753131883688583,7.0027414856204215e-6,1.0973502950806292e-8,0.0010756904320888402,6.874033979996817e-6,1.1044059873554255e-8,0.0010760947834755237,6.8436529769841505e-6,1.1061787085804026e-8,0.001076481049891446,6.914886396186059e-6,1.1024693263841812e-8,0.0010768018290682909,7.066051634150347e-6,1.0944283327208556e-8,0.0010770200321076698,7.249261634913781e-6,1.0846289489249666e-8,0.001077123420982185,7.39804993243476e-6,1.076656197635394e-8,0.0010771348797026668,7.44585714263904e-6,1.0741042838621376e-8,0.0010771101367558554,7.350779981649652e-6,1.0792371226593277e-8,0.0010771194563272597,7.114340819791003e-6,1.091978472227473e-8,0.0010772207158111727,6.781925749825741e-6,1.1098942285178267e-8,0.001077438751988009,6.423598569950669e-6,1.1292263291924475e-8,0.0010777614606054466,6.107174429654953e-6,1.1463350840217734e-8,0.001078150988925822,5.878278442603043e-6,1.1587643347827043e-8,0.0010785602961386523,5.753858224937523e-6,1.1655892460490189e-8,0.0010789465240847547,5.72623912615062e-6,1.167203738632892e-8,0.0010792781883616845,5.7715171050260465e-6,1.1648769383961856e-8,0.0010795372547668179,5.857715055435001e-6,1.1603202812664468e-8,0.001079718408317149,5.950842140755552e-6,1.1553633958985417e-8,0.0010798274054571314,6.018931123532262e-6,1.1517348515355086e-8,0.0010798793764046966,6.034916081994106e-6,1.150903056702829e-8,0.0010798970957694128,5.979082561969348e-6,1.1539400992860876e-8,0.0010799088782759599,5.841386795654391e-6,1.1613943229511664e-8,0.001079945671266815,5.6234999239785664e-6,1.1731800417280663e-8,0.0010800370563297977,5.339960624404898e-6,1.1885168170973472e-8,0.0010802063626677298,5.017558699714286e-6,1.2059638070394361e-8,0.001080465709873069,4.692281975823613e-6,1.2235836282107038e-8,0.0010808121845919524,4.403722523375394e-6,1.239241282362964e-8,0.0010812263927673289,4.1875776377249006e-6,1.2510056790341688e-8,0.0010816742755761358,4.067606126441703e-6,1.2575830541311822e-8,0.0010821124162932766,4.048764490048608e-6,1.2586910279254428e-8,0.001082496394029135,4.1132067224480435e-6,1.2552812557360103e-8,0.0010827911400719823,4.220728194789922e-6,1.2495218049522599e-8,0.0010829814407256138,4.315035608807498e-6,1.2444602628550136e-8,0.0010830795939978,4.336331558319785e-6,1.2433397469308228e-8,0.0010831263014689158,4.238515418925506e-6,1.2486625405764085e-8,0.0010831815716910997,4.005888907583e-6,1.2612831618416838e-8,0.0010833062871192334,3.6615290203470267e-6,1.2799568273597161e-8,0.0010835411795810717,3.261162454656364e-6,1.3016729071965934e-8,0.0010838933778462134,2.8737930394674124e-6,1.3227010267237029e-8,0.001084337034999438,2.5585169726812227e-6,1.3398407369065678e-8,0.0010848260137734957,2.3486087687672093e-6,1.351281176227918e-8,0.0010853104715353803,2.2479370425633493e-6,1.3567994079646327e-8,0.0010857496852788604,2.2371567972056594e-6,1.3574322546551323e-8,0.0010861181451779231,2.2837281191620208e-6,1.3549388239562281e-8,0.0010864060912470594,2.3509882779473265e-6,1.351309848109019e-8,0.001086617167375567,2.4043382300803017e-6,1.348429676688557e-8,0.0010867653789912383,2.414780175748046e-6,1.3478800918996513e-8,0.0010868723951977914,2.36090336349784e-6,1.3508287044674754e-8,0.0010869652859729975,2.230320299619587e-6,1.357949036950374e-8,0.0010870742527047388,2.0210940838380106e-6,1.3693435401754393e-8,0.0010872297036982135,1.7431263470573831e-6,1.3844706627164613e-8,0.0010874581583647045,1.4188304041524766e-6,1.4021110351396713e-8,0.0010877770309646244,1.0819285734700634e-6,1.420434005833336e-8,0.0010881892473587201,7.732394508393998e-7,1.4372250040797893e-8,0.0010886795450963712,5.330813350595426e-7,1.4502949312721697e-8,0.001089214649730255,3.9140243490344096e-7,1.458013766244398e-8,0.0010897487258969283,3.584072521389756e-7,1.459820749252219e-8,0.0010902335819651038,4.191729634013468e-7,1.4565214418600275e-8,0.0010906310187498445,5.348153076480196e-7,1.4502295396028616e-8,0.0010909236281021046,6.506177348026824e-7,1.443926695100913e-8,0.001091120685014961,7.092800663955221e-7,1.4407391615029013e-8,0.001091257136747916,6.658869235087142e-7,1.4431183604022623e-8,0.0010913854479859381,5.005821622148568e-7,1.4521478794650966e-8,0.0010915618860652314,2.251478759511052e-7,1.467185398741576e-8,0.0010918307189155313,-1.1924299742407577e-7,1.4859864732950039e-8,0.0010922113493534546,-4.734372432057817e-7,1.5053255310459487e-8,0.0010926932935980337,-7.775556028587294e-7,1.5219334684945516e-8,0.0010932410472572044,-9.877102401363634e-7,1.533407805988485e-8,0.0010938063797259453,-1.0859165470122615e-6,1.5387566050399254e-8,0.001094342455259391,-1.080589230442882e-6,1.5384321095468852e-8,0.00109481445675083,-9.995980021090122e-7,1.5339569592932147e-8,0.0010952043212414967,-8.803420527904827e-7,1.5273828324478645e-8,0.0010955103354372215,-7.608506842509845e-7,1.520800473466209e-8,0.0010957438947718288,-6.738297010954895e-7,1.516008890171015e-8,0.0010959255739260278,-6.435882030741187e-7,1.514342886133524e-8,0.0010960816844447629,-6.848008439732961e-7,1.516603611113632e-8,0.001096241543978873,-8.02004725041787e-7,1.5230321629549556e-8,0.0010964350536024304,-9.891361497491146e-7,1.5332873831182345e-8,0.0010966898752015986,-1.2290044827439803e-6,1.5464206803068726e-8,0.0010970275583669783,-1.4932930260580311e-6,1.5608784981685757e-8,0.0010974584822657629,-1.7443109645131954e-6,1.574598051452959e-8,0.0010979764965260918,-1.9399561880694465e-6,1.5852762521604583e-8,0.0010985554895813923,-2.0426623918831098e-6,1.590856103716042e-8,0.0010991510076969397,-2.031063016383569e-6,1.590164521848076e-8,0.0010997091337757634,-1.9102678540224635e-6,1.5834788151340182e-8,0.0011001814643931509,-1.7151290714917107e-6,1.5727115299126148e-8,0.0011005408546707206,-1.5028952094650604e-6,1.5610105905041306e-8,0.001100790948640354,-1.3368393448549428e-6,1.5518581808694086e-8,0.001100965184316589,-1.2672952194125447e-6,1.5480237846173764e-8,0.0011011161176956588,-1.3175209969869768e-6,1.5507843040213407e-8,0.0011012998469212088,-1.4787697248972343e-6,1.5596542078759433e-8,0.001101561065014156,-1.7146998910046917e-6,1.5726308035865734e-8,0.0011019226990827457,-1.9724071175410574e-6,1.586801490545639e-8,0.001102382007116548,-2.196363356079692e-6,1.5991084228148263e-8,0.0011029132667145561,-2.3416096021800094e-6,1.6070722292919825e-8,0.0011034757514399483,-2.38310916619068e-6,1.6093077245681256e-8,0.0011040244786115357,-2.31927776315323e-6,1.6057225467888683e-8,0.0011045205794044041,-2.1694385072843676e-6,1.597381802522786e-8,0.0011049385690624493,-1.966838354498544e-6,1.5861252045493124e-8,0.0011052692443645087,-1.750001842086337e-6,1.5740883086523665e-8,0.0011055186380034719,-1.5550353774155559e-6,1.5632734001830676e-8,0.0011057045369247066,-1.4103695910270938e-6,1.5552549745965977e-8,0.0011058522277989002,-1.3341378137981495e-6,1.551032955262108e-8,0.0011059906217503908,-1.3335025490994153e-6,1.5509962936515426e-8,0.001106149150194748,-1.404950501845874e-6,1.5549420079728942e-8,0.0011063551807779252,-1.5348143523852197e-6,1.5621073311654e-8,0.0011066313631327655,-1.6998081049754247e-6,1.5712016164878937e-8,0.0011069922927926747,-1.8679853774396568e-6,1.580459705808824e-8,0.0011074402507398938,-2.0011637405826746e-6,1.5877740607269027e-8,0.0011079607077455421,-2.060248709035317e-6,1.5909858156164228e-8,0.001108519738968454,-2.0144254988523965e-6,1.588390462537339e-8,0.0011090667951459137,-1.8531436940924132e-6,1.5794016241904865e-8,0.0011095457522609323,-1.5962893152773853E-06,1.5651187561937485e-8,0.0011099131036531966,-1.295286315591519e-6,1.548393416264128e-8,0.0011101558729649911,-1.0201697065466408e-6,1.5331133204623056e-8,0.0011102988958696094,-8.358929741676526e-7,1.5228836499800212e-8,0.001110396160826366,-7.792957175517323e-7,1.519745019538023e-8,0.00111051078357651,-8.4832733122868e-7,1.5235767590110828e-8,0.0011106942753399312,-1.0069042485667557e-6,1.5323711725274e-8,0.00111097368196469,-1.1999692577389667e-6,1.5430718007157876e-8,0.0011113487938456635,-1.370515245006706e-6,1.5525164027079777e-8,0.0011117968919402519,-1.472886234678616e-6,1.5581716379428368e-8,0.00111228126468647,-1.4803580618799743e-6,1.5585522069862342e-8,0.0011127605283525728,-1.38735025143936e-6,1.553345118973782e-8,0.0011131969606502966,-1.207467615593322e-6,1.5433042494833323e-8,0.0011135628384484684,-9.68609089136904e-7,1.5299812786382335e-8,0.0011138441430138264,-7.063766770539463e-7,1.515359787677788e-8,0.0011140413969519087,-4.5716749529745555e-7,1.5014692696968984e-8,0.0011141679771116317,-2.5224292949749117e-7,1.4900524553462284e-8,0.0011142467106409985,-1.1360505719006956e-7,1.4823340179212186e-8,0.0011143057375622243,-5.1947099677121166e-8,1.478906414284595e-8,0.0011143745275428235,-6.641623982905153e-8,1.479718055412551e-8,0.0011144805411490116,-1.4554045014367347e-7,1.4841267716474989e-8,0.0011146465039405943,-2.6868186327244643e-7,1.4909818722617364e-8,0.0011148879464543517,-4.077487512787168e-7,1.4987193531681402e-8,0.0011152106069133069,-5.293572049765862e-7,1.5054810350341645e-8,0.001115607505557431,-5.981354506604627e-7,1.5092967998964315e-8,0.0011160562278251995,-5.82238372920153e-7,1.508390498897239e-8,0.0011165181858738054,-4.617774614729789e-7,1.5016501585294573e-8,0.0011169427756374372,-2.3916486858598275e-7,1.489207589936706e-8,0.001117279123695704,5.281074662320559e-8,1.4728931150574154e-8,0.0011174945353303808,3.5238253651923323e-7,1.4561593636104278e-8,0.0011175918891919794,5.85237341776037e-7,1.4431602483043102e-8,0.001117613973298778,6.922600246158575e-7,1.4371955080154304e-8,0.0011176285284481737,6.540692000960255e-7,1.4393394122909386e-8,0.0011177012518909313,4.973859584028976e-7,1.4480914676359373e-8,0.0011178724639969737,2.807665191832271e-7,1.4601797634793543e-8,0.0011181484319527568,7.064887876481905e-8,1.4718987525011862e-8,0.0011185068668504749,-7.890745011779789e-8,1.4802357637019236e-8,0.0011189091709123736,-1.3646153918415363e-7,1.4834384089423755e-8,0.0011193126105248509,-9.43931094899234e-8,1.48108065335213e-8,0.0011196792366973227,3.5164048593491474e-8,1.473837430297344e-8,0.0011199811858316087,2.26369559642981e-7,1.4631494218090753e-8,0.0011202031869314724,4.4589422366034254e-7,1.4508776239873582e-8,0.00112034310520379,6.586854121746841e-7,1.4389816343386903e-8,0.0011204109385747102,8.330417415667043e-7,1.4292352649188305e-8,0.0011204265234972595,9.446967691452359e-7,1.4229970169917528e-8,0.0011204162785695454,9.796302768584618e-7,1.4210520366177409e-8,0.0011204093914756884,9.354136766252925e-7,1.423536740670385e-8,0.0011204339509095645,8.210357617533893e-7,1.4299488573279187e-8,0.0011205135047749502,6.554492436680685e-7,1.4392288214421408e-8,0.0011206642577800594,4.652528434009131e-7,1.4498888367884619e-8,0.001120892869175372,2.817729973787914e-7,1.4601751044198787e-8,0.0011211947550755549,1.3757495990860276e-7,1.4682621069015419e-8,0.0011215528883894927,6.21872975976025e-8,1.4724918735586556e-8,0.001121937523487324,7.657802320904832e-8,1.471684663627745e-8,0.0011223081121608392,1.862337483495964e-7,1.4655293964103262e-8,0.0011226193191337492,3.7406125879550593e-7,1.4549846746055096e-8,0.001122832579558784,5.965725646991329e-7,1.4424943518651694e-8,0.001122931860338344,7.888398809784377e-7,1.4317073347269448e-8,0.0011229368584202211,8.823540066354003e-7,1.42646972284513e-8,0.0011229030163360236,8.31978931560535e-7,1.4293081372632381e-8,0.0011229027871189272,6.377983868581165e-7,1.4402074372500076e-8,0.0011229961745440554,3.466313844851877e-7,1.4565346045514696e-8,0.0011232080312209413,3.131213495657076e-8,1.4742059226319447e-8,0.0011235241667242122,-2.384517151272013e-7,1.4893183747109764e-8,0.0011239038866639104,-4.1705069829968125e-7,1.4993199888376666e-8,0.0011242978045176068,-4.891837396590307e-7,1.5033552385496457e-8,0.0011246618087164136,-4.650533911979487e-7,1.501996092483476e-8,0.0011249644073865193,-3.712956185955165e-7,1.4967350495564534e-8,0.0011251887847238463,-2.4226609099827207e-7,1.489497804254355e-8,0.0011253319323496448,-1.1342860023329529e-7,1.4822732804632492e-8,0.001125402634959825,-1.6748392335343594e-8,1.476855463336166e-8,0.0011254190551908455,2.2583818610430424e-8,1.4746592428163293e-8,0.001125406006350285,-1.147849811646348e-8,1.4765866874794957e-8,0.0011253918703925659,-1.2428284425453638e-7,1.4829389975213278e-8,0.001125405153669,-3.098575433825358e-7,1.4933811618400424e-8,0.001125470825285484,-5.515007109536961e-7,1.5069747750744837e-8,0.0011256068473051415,-8.237402109522106e-7,1.522287862447306e-8,0.0011258213742378021,-1.0955210324600928e-6,1.5375735433027346e-8,0.001126110953640497,-1.33434576076099e-6,1.551002392607651e-8,0.0011264599688784321,-1.5110754595557068e-6,1.5609325258051984e-8,0.0011268415324472347,-1.6050367155868619e-6,1.5661979950811296e-8,0.0011272200850014037,-1.6091063327225863e-6,1.5663968705012574e-8,0.0011275562307977297,-1.5342861631028003e-6,1.5621508044081852e-8,0.0011278144681279808,-1.4124327608801717e-6,1.5552595027563792e-8,0.001127973697196369,-1.2945868803236955e-6,1.548604925928786e-8,0.0011280382587597413,-1.2418556395565706e-6,1.5456333428887506e-8,0.0011280441049613882,-1.3076713541081708e-6,1.5493515389976944e-8,0.0011280530903307478,-1.5159246352740396e-6,1.5610950547436537e-8,0.001128132778175655,-1.8463668689740967e-6,1.579711977668449e-8,0.0011283296134604944,-2.238778351585612e-6,1.601804452302929e-8,0.0011286507402838491,-2.6162893563312223e-6,1.6230430827785135e-8,0.001129064849116733,-2.914505922934018e-6,1.639803217786027e-8,0.0011295188883964043,-3.1003495271215335e-6,1.650223555792818e-8,0.0011299585096496848,-3.1743954370268017e-6,1.6543390761059785e-8,0.0011303422387863712,-3.1616614223987634e-6,1.6535639899295777e-8,0.0011306468543703053,-3.099226465392222e-6,1.649993957729718e-8,0.0011308665355909385,-3.026115926253836e-6,1.6458343678529448e-8,0.0011310092877528594,-2.97696670198988e-6,1.643041637428008e-8,0.0011310930107738839,-2.9787150579821667e-6,1.643135725219101e-8,0.0011311420979546502,-3.048971357365785e-6,1.6471083224590702e-8,0.0011311844863316548,-3.1951543584245246e-6,1.655374177555831e-8,0.0011312487969415517,-3.4140426711787296e-6,1.667746050617603e-8,0.001131361247585663,-3.6918347099299193e-6,1.683438659836271e-8,0.0011315422288500833,-4.005155407124281e-6,1.701126248263884e-8,0.0011318028686057846,-4.323516118603748e-6,1.719082210152812e-8,0.001132142305142021,-4.613386976593811e-6,1.7354095519871995e-8,0.001132546459390808,-4.843583003603475e-6,1.7483454475893005e-8,0.0011329889427781129,-4.991272754047409e-6,1.7566013688537354e-8,0.0011334344413259357,-5.047541910774497e-6,1.7596784618951905e-8,0.001133844458183822,-5.021292733474158e-6,1.7580889129752105e-8,0.0011341848700335095,-4.94040959890774e-6,1.753421475919338e-8,0.0011344344119443499,-4.8491916969188745e-6,1.748193700907113e-8,0.0011345925814498685,-4.801059066100088e-6,1.745434825021528e-8,0.001134684387300292,-4.846227082445247e-6,1.7479841111046328e-8,0.0011347584805635495,-5.0160858158737145e-6,1.7576061597522453e-8,0.0011348759327808268,-5.309263400214288e-6,1.7742064468409605e-8,0.0011350908173706725,-5.6869034120381485e-6,1.7955706489080888e-8,0.0011354299176144932,-6.082800701089851e-6,1.8179418623203863e-8,0.0011358822190113598,-6.426124898603051e-6,1.8373054177066374e-8,0.0011364043809356825,-6.665757949870108e-6,1.8507648393622844e-8,0.0011369384853650538,-6.7840861137196476e-6,1.8573247563186413e-8,0.0011374316455507916,-6.795823634017219e-6,1.8578280026159067e-8,0.001137848673807987,-6.736604005607285e-6,1.85430965640259e-8,0.001138175543947817,-6.649378408098194e-6,1.8492219634553844e-8,0.0011384164599360274,-6.574091986083006e-6,1.8448433493018965e-8,0.0011385884812031334,-6.5420367269707E-06,1.8429543600599157e-8,0.0011387163515221173,-6.573764105960214e-6,1.844718403120001e-8,0.0011388284833158092,-6.678850501571657e-6,1.8506697577031452e-8,0.0011389539421612653,-6.856289459219892e-6,1.8607380918886297e-8,0.0011391198567281403,-7.094990988364993e-6,1.8742791852569966e-8,0.0011393486909906535,-7.374470404067843e-6,1.8901162544082247e-8,0.001139655105173082,-7.666288253826918e-6,1.9066235687773136e-8,0.0011400426757558419,-7.936983461486883e-6,1.921894205864218e-8,0.0011405013577337874,-8.152936837249098e-6,1.9340168556050783e-8,0.0011410069453844265,-8.286904307477137e-6,1.941447163411268e-8,0.001141523687978373,-8.325052062458535e-6,1.943407977800105e-8,0.0011420104921204704,-8.272482966705914e-6,1.940204081740356e-8,0.0011424298885641681,-8.155032071176124e-6,1.9333238629293002e-8,0.0011427577026877223,-8.01590505046847e-6,1.9252449665323856e-8,0.0011429907616206283,-7.907174957399983e-6,1.9189445751876634e-8,0.0011431501649271265,-7.877608061907913e-6,1.917200273740673e-8,0.0011432784491987938,-7.9594886944176e-6,1.9218374972079383e-8,0.0011434302434748492,-8.157983701078854e-6,1.9331275036921774e-8,0.0011436578055424847,-8.446881947193677e-6,1.949552477305666e-8,0.00114399515501405,-8.773659928063834e-6,1.9681008281834052e-8,0.001144446522983574,-9.073972603149053e-6,1.9850948567032337e-8,0.0011449845240813815,-9.291172843971188e-6,1.997301868872744e-8,0.0011455595354737658,-9.393027652032006e-6,2.0028869806567677e-8,0.0011461161009334714,-9.378716130867975e-6,2.001814630971795e-8,0.0011466089029168024,-9.274461172054308e-6,1.9956008806800238e-8,0.0011470122988015584,-9.121833292035425e-6,1.9866427698242803e-8,0.00114732188508422,-8.96496066277439e-6,1.977481168122164e-8,0.001147550426654242,-8.84115873090527e-6,1.970259092640148e-8,0.0011477216937115396,-8.776250220560751e-6,1.966451506584681e-8,0.0011478647584178116,-8.783503033521037e-6,1.966805944170667e-8,0.0011480097210303582,-8.864451422748417e-6,1.971393023358895e-8,0.0011481847339456337,-9.010282799110149e-6,1.9796897029095008e-8,0.0011484137013095736,-9.203162855983934e-6,1.9906583070119853e-8,0.0011487139621447924,-9.417536219790016e-6,2.0028232082651543e-8,0.0011490935669522466,-9.622008265590576e-6,2.0143797216780358e-8,0.0011495483701545808,-9.782674812070154e-6,2.0233850339937727e-8,0.0011500598968202766,-9.868530899457088e-6,2.0280675342107168e-8,0.001150595576793416,-9.858788234789456e-6,2.027245503525575e-8,0.0011511130407411538,-9.750551556433113e-6,2.0207673116114426e-8,0.0011515690958261268,-9.563815939238883e-6,2.0097983923800655e-8,0.0011519316806153635,-9.340392670730376e-6,1.9967584121287674e-8,0.001152190749497022,-9.135185026245966e-6,1.9848156573524196e-8,0.0011523634382926925,-9.001659265593388e-6,1.9770455193964563e-8,0.0011524907957058544,-8.976351650421527e-6,1.975535707782608e-8,0.0011526268209164589,-9.067935946616826e-6,1.9807599727437817e-8,0.0011528235054923113,-9.25449432683755e-6,1.9914294904382524e-8,0.0011531166414686328,-9.489552149459594e-6,2.0048491573720485e-8,0.0011535164504243166,-9.71476019621844e-6,2.0176519619224113e-8,0.0011540055000518578,-9.875454353321969e-6,2.0266935867828633e-8,0.0011545443526542588,-9.934597905884134e-6,2.029851857027083e-8,0.0011550830429836547,-9.881012223473731e-6,2.026498429883669e-8,0.0011555744937682764,-9.729706251418504e-6,2.0175168201088018e-8,0.0011559854772124829,-9.51504938883692e-6,2.0049071556327196e-8,0.0011563021464909625,-9.280042396553756e-6,1.991163982225793e-8,0.0011565296752859802,-9.065727818539686e-6,1.9786613888511836e-8,0.001156687736425848,-8.903688987058367e-6,1.9692182364519e-8,0.0011568044046975123,-8.8125619957311e-6,1.9638981965480233e-8,0.0011569105458751,-8.797789715304598e-6,1.9629991386652268e-8,0.0011570356151798416,-8.853178776230065e-6,1.9661469660227554e-8,0.0011572048275839113,-8.963029002850191e-6,1.9724213131765286e-8,0.0011574371573823965,-9.104180604326605e-6,1.9804750235027096e-8,0.0011577435098976399,-9.247950130788989e-6,1.9886461799431398e-8,0.0011581246406424353,-9.362476184699034e-6,1.9950934601369646e-8,0.001158568958664678,-9.41631267388031e-6,1.9980033554842147e-8,0.001159051135572797,-9.383982662467644e-6,1.9959107105592105e-8,0.0011595332400694842,-9.253407196201551e-6,1.988127948054991e-8,0.0011599704116754437,-9.033473617199929e-6,1.9751830591591057e-8,0.001160321905079089,-8.757962164306107e-6,1.9590469326886845e-8,0.0011605651381540996,-8.481352968156326e-6,1.9428884611557018e-8,0.0011607066977102414,-8.264780100526713e-6,1.9302555692561575e-8,0.0011607835786356816,-8.156211653841857e-6,1.9239208531028127e-8,0.001160852303938451,-8.173672131833849e-6,1.9249082973678126e-8,0.0011609704050213417,-8.299502401002055e-6,1.9321670102197103e-8,0.0011611786600939425,-8.487524842860316e-6,1.942996472795716e-8,0.00116149085756971,-8.678548440956826e-6,1.9539526753642373e-8,0.0011618930476837161,-8.817263786054158e-6,1.961829467481908e-8,0.0011623502480845786,-8.865197369246996e-6,1.9644073624203352e-8,0.0011628170462849206,-8.807345064885849e-6,1.9608343243756524e-8,0.001163248772606246,-8.652436380407108e-6,1.9516370694754277e-8,0.0011636107636861521,-8.42810745764086e-6,1.9384372461534673e-8,0.0011638841503945102,-8.17290291549061e-6,1.9234838808357553e-8,0.0011640675332915647,-7.927309243105636e-6,1.9091306227406572e-8,0.001164174910574985,-7.725934562782125e-6,1.897381570422459e-8,0.0011642310911780206,-7.592301438636944e-6,1.8895911963434465e-8,0.001164266183153776,-7.536686249750781e-6,1.8863426101585725e-8,0.0011643105098843333,-7.556534996681924e-6,1.8874751833990127e-8,0.0011643907219274397,-7.638508383357229e-6,1.892205030520054e-8,0.0011645272144765674,-7.761166811425134e-6,1.8992807601442906e-8,0.0011647324707863098,-7.897651936164617e-6,1.9071379900299287e-8,0.0011650098094900412,-8.018265814666975e-6,1.914048233352255e-8,0.0011653521888236509,-8.093307790327415e-6,1.9182839583695098e-8,0.001165741133615056,-8.096798948189496e-6,1.9183362843101123e-8,0.0011661465394286383,-8.01169930545659e-6,1.913219846759754e-8,0.0011665289267256526,-7.836536321099879e-6,1.9028592765835697e-8,0.0011668460658409007,-7.591725078170206e-6,1.8884569456476698e-8,0.0011670647742319771,-7.321672629410377e-6,1.872613603007408e-8,0.0011671752536712213,-7.087778965397692e-6,1.8589162929747138e-8,0.0011672007945532352,-6.950506281680236e-6,1.8508875117680157e-8,0.0011671946165852476,-6.946270276537636e-6,1.8506350208028936e-8,0.0011672219724961402,-7.071417197234697e-6,1.8579216055933185e-8,0.0011673358746302342,-7.283275108892446e-6,1.8702356985605753e-8,0.0011675594159570796,-7.517413113909867e-6,1.8838061377010595e-8,0.0011678822015231747,-7.710561368063675e-6,1.8949420655493054e-8,0.0011682689261397071,-7.818135372925264e-6,1.9010538692202126e-8,0.0011686730493583339,-7.821696462300443e-6,1.90108499425854e-8,0.0011690494583318888,-7.727720962976632e-6,1.8954353489254236e-8,0.0011693632444199163,-7.56134032774171e-6,1.885590552632025e-8,0.00116959424227111,-7.358324729191973e-6,1.8736493783482777e-8,0.0011697381322427927,-7.157289319737172e-6,1.861866602390422e-8,0.001169805015940991,-6.993028321525914e-6,1.852264983791331e-8,0.0011698161546601542,-6.891491872816817e-6,1.8463458014440653e-8,0.0011697995747586565,-6.866806023143072e-6,1.8449195474681566e-8,0.001169785345145261,-6.9204124414224666e-6,1.8480593608555368e-8,0.0011698012390084927,-7.0420511084665356e-6,1.8551596753815423e-8,0.0011698692959780039,-7.212115770190638e-6,1.865072612237821e-8,0.001170003535115469,-7.40476340602822e-6,1.876287162320732e-8,0.0011702087001298016,-7.591191261412983e-6,1.887118665962335e-8,0.001170479701385697,-7.742851069545861e-6,1.895896527939579e-8,0.0011708015200401624,-7.834746251544546e-6,1.9011588216858993e-8,0.0011711496211634048,-7.849130822009977e-6,1.9018713426567524e-8,0.0011714913924403504,-7.779910197998646e-6,1.8976869060788222e-8,0.0011717897544849946,-7.637523831636095e-6,1.889230519205385e-8,0.001172010309956273,-7.452738502943907e-6,1.8783182601489195e-8,0.0011721323598993924,-7.275994332800178e-6,1.867913794942048e-8,0.0011721611281580594,-7.168155593634209e-6,1.861581265298405e-8,0.0011721343191450696,-7.1813051484193844e-6,1.862357539268324e-8,0.0011721149049607846,-7.335813716215587e-6,1.87141217167984e-8,0.001172168800567516,-7.607145133330706e-6,1.8872833135365767e-8,0.0011723380208572738,-7.933227173421569e-6,1.9063184028057393e-8,0.0011726252496139771,-8.239481077610759e-6,1.924143891636807e-8,0.0011729975280554965,-8.466260519538257e-6,1.9372719916227837e-8,0.0011734031858778484,-8.584501548552111e-6,1.944016181411194e-8,0.001173790302185874,-8.596454295920204e-6,1.944531693494591e-8,0.0011741190787508823,-8.527161410478187e-6,1.9403109104349883e-8,0.0011743669348481497,-8.413502697600549e-6,1.933534155711618e-8,0.0011745284115409797,-8.294793736602777e-6,1.9265131227668844e-8,0.0011746124079364151,-8.206190261184355e-6,1.9213032276832187e-8,0.0011746385065752375,-8.174556373859033e-6,1.9194649111671876e-8,0.0011746330915234392,-8.216052103381338e-6,1.9219279634408336e-8,0.0011746253880197785,-8.335082109550146e-6,1.9289350289034145e-8,0.0011746435809791025,-8.524542340119898e-6,1.9400586230916127e-8,0.0011747112692470335,-8.767280557710057e-6,1.954286430798587e-8,0.0011748445359639791,-9.03865596643075e-6,1.9701692857538592e-8,0.0011750499632298852,-9.309966660718363e-6,1.9860201817912727e-8,0.001175323799399941,-9.552298843262974e-6,2.0001396821218872e-8,0.00117565222379474,-9.740381416028808e-6,2.0110439466007515e-8,0.0011760125740055314,-9.856258828588306e-6,2.0176834214821782e-8,0.001176375524771259,-9.89270749701017e-6,2.0196458357561633e-8,0.0011767084198622795,-9.856295447680713e-6,2.0173355725141192e-8,0.0011769802534832457,-9.769680052766479e-6,2.0121046365166935e-8,0.001177168799588408,-9.671871258832764e-6,2.0062613323586582e-8,0.0011772694476469777,-9.6141384720008e-6,2.002822704058926e-8,0.0011773031276615976,-9.649130357389883e-6,2.004871269724044e-8,0.001177317927990144,-9.813195811093411e-6,2.0145182911243707e-8,0.0011773784774201084,-1.0107742086366462e-5,2.031816622647421e-8,0.0011775429199502576,-1.0491244705205072e-5,2.054301185498362e-8,0.001177837880102486,-1.0891186429975976e-5,2.077695811502661e-8,0.0011782469508336748,-1.1232228758863288e-5,2.0975685618500445e-8,0.0011787199252995327,-1.1464270048217633e-5,2.1109807093236463e-8,0.001179195117857407,-1.1575096317836384e-5,2.1172327792887724e-8,0.0011796204060343677,-1.1585333083324484e-5,2.117567378298927e-8,0.001179964253721622,-1.153426084540048e-5,2.1143276835969646e-8,0.001180216947487361,-1.1465789942356163e-5,2.1101215758474892e-8,0.0011803864077251783,-1.1418915216628996e-5,2.107252293342305e-8,0.0011804924552570766,-1.1422849945557147e-5,2.1074313204903283e-8,0.0011805616351961057,-1.149534972563153e-5,2.111684828473406e-8,0.0011806231296561194,-1.164260838042896e-5,2.1203547272920038e-8,0.001180705405349917,-1.185983590457733e-5,2.133138289587363e-8,0.0011808332022572984,-1.2132380829244001e-5,2.1491566451183692e-8,0.0011810247593277404,-1.2437538534793616e-5,2.1670609888946692e-8,0.00118128939658047,-1.2747235945817167e-5,2.1851893747692842e-8,0.0011816258296817952,-1.3031688632184382e-5,2.2017816721285344e-8,0.0011820217409164156,-1.3263766786722557e-5,2.215238102483769e-8,0.0011824549343442512,-1.3423476824073942e-5,2.224386173036045e-8,0.0011828960923008392,-1.3501908143475178e-5,2.228715845248425e-8,0.0011833129578829248,-1.3504032616951642e-5,2.2285447254115404e-8,0.0011836756314048944,-1.3449812928952117e-5,2.2250794275112108e-8,0.001183962592413837,-1.3373153848677134e-5,2.2203458812617827e-8,0.0011841669322909438,-1.3318065327970467e-5,2.2169537514422055e-8,0.0011843016926503368,-1.3331175884827947e-5,2.2176482373441217e-8,0.0011844020642103072,-1.3450260247773386e-5,2.2246332098472546e-8,0.001184521202676278,-1.3690428025695983e-5,2.2387640451217336e-8,0.0011847171293863903,-1.4032994909381187e-5,2.2589027933433944e-8,0.001185032463777717,-1.4424743371322873e-5,2.281883562996951e-8,0.0011854755677246913,-1.4792794984495582e-5,2.3033918419938312e-8,0.0011860147396502052,-1.507088024578483e-5,2.319513060443558e-8,0.0011865905179456926,-1.5223319477673633e-5,2.328150001628114e-8,0.0011871389466646689,-1.5253718038456167e-5,2.3295410581307743e-8,0.0011876123061146714,-1.519648813755946e-5,2.3257586969311357e-8,0.0011879885113928858,-1.5099845661934605e-5,2.3196940123018956e-8,0.0011882695341677578,-1.501035144178206e-5,2.31412842396481e-8,0.0011884742356245803,-1.4963788315746421e-5,2.3111852364620775e-8,0.001188630530564791,-1.4982034546106686e-5,2.3121452402727265e-8,0.0011887692807419578,-1.507353292827563e-5,2.3174817880824452e-8,0.0011889202463939105,-1.5235106883747588e-5,2.3269772227890994e-8,0.0011891093972103773,-1.5453904219857056e-5,2.3398442893928934e-8,0.001189356787492648,-1.5709243646093957e-5,2.3548380493865156e-8,0.001189674562434833,-1.597465760311393e-5,2.3703767108688843e-8,0.0011900650705906138,-1.622059546320253e-5,2.3847010207390837e-8,0.0011905194959919482,-1.641817450904896e-5,2.396096721453941e-8,0.0011910177895063875,-1.6543919681829082e-5,2.403177226492937e-8,0.0011915306556030559,-1.6584788766736868e-5,2.4051839818261955e-8,0.001192023898945927,-1.6542298384545826e-5,2.4022324070467803e-8,0.001192464757553144,-1.643440146715635e-5,2.3954211093486313e-8,0.001192829119799411,-1.629404609753833e-5,2.3867395750016865e-8,0.001193108027212104,-1.6164104458207515e-5,2.3787569044241983e-8,0.0011933118430555575,-1.608921071912973e-5,2.3741272731391792e-8,0.0011934707320330146,-1.6105658509481013e-5,2.374985781205688e-8,0.0011936303976635173,-1.623111932778949e-5,2.3823425330801796e-8,0.0011938425904213918,-1.6456797947603263e-5,2.3956291913805633e-8,0.0011941512693824246,-1.6745405678767475e-5,2.4125926378533872e-8,0.0011945777513011316,-1.703806116613979e-5,2.4297131106293858e-8,0.0011951108176325653,-1.7270552184130284e-5,2.4431706269672658e-8,0.0011957078826386161,-1.7394145331375484e-5,2.4500786304503858e-8,0.001196308651953773,-1.7391670563142902e-5,2.4494397478295562e-8,0.0011968553574094527,-1.7280885870127336e-5,2.442346637634852e-8,0.0011973097438809756,-1.7104486121415902e-5,2.4313830319614202e-8,0.0011976600271846305,-1.6913544964189015e-5,2.4196263777647027e-8,0.0011979178287977973,-1.6752823815132273e-5,2.4097605696463648e-8,0.0011981097707620147,-1.6652578579863055e-5,2.4035827004151324e-8,0.0011982686801686477,-1.6626751066110573e-5,2.401899572758425e-8,0.0011984270612510747,-1.6674980003615707e-5,2.4046572026728495e-8,0.0011986131998672476,-1.6785856209140574e-5,2.411144126081378e-8,0.00119884907936858,-1.6939967517406705e-5,2.4201781684558578e-8,0.0011991490988296598,-1.7112385016964997e-5,2.430255743190104e-8,0.0011995189044720176,-1.727490968716899e-5,2.4396846663078468e-8,0.0011999541434850292,-1.73987053704685e-5,2.446740213138539e-8,0.0012004395264967585,-1.7457927525291007e-5,2.4498820966803372E-08,0.0012009491082435547,-1.743451264755266e-5,2.4480422287605266e-8,0.001201448900782843,-1.7323465817622007e-5,2.4409425154034857e-8,0.0012019025457898729,-1.713703206787251e-5,2.429344400128628e-8,0.0012022796375072394,-1.6905527800039264e-5,2.415095110327444e-8,0.001202564674709609,-1.66730256383639e-5,2.4008615527302114e-8,0.0012027634568679232,-1.6487847620334767e-5,2.3895505198766226e-8,0.001202904030611828,-1.6390163394670685e-5,2.3835574955575874e-8,0.0012030311028923925,-1.6400516224166192e-5,2.384078723594285e-8,0.0012031951747230444,-1.6513004713512284e-5,2.390712060734509e-8,0.001203439368777117,-1.6695385826531313e-5,2.4014786720648956e-8,0.0012037875416534632,-1.6896357132806125e-5,2.413273573212916e-8,0.0012042369997383238,-1.7058417430140396e-5,2.422642990299439e-8,0.001204758270153749,-1.7133153462624448e-5,2.42669920335499e-8,0.0012053027296240449,-1.7094557087145528e-5,2.4239131779032624e-8,0.001205816243419089,-1.694576087819249e-5,2.414512189749825e-8,0.001206254208107606,-1.671652593603102e-5,2.4003224447649546e-8,0.0012065924774887938,-1.6452686017868706e-5,2.3841274764580573e-8,0.0012068306855210508,-1.6202252980745935e-5,2.3688257288772364e-8,0.0012069882451567506,-1.6003642610002783e-5,2.3567193058502826e-8,0.0012070962548821874,-1.5879317737007825e-5,2.3491350212189728e-8,0.0012071891126864752,-1.5834987172204415e-5,2.3463848234982794e-8,0.0012072982435586271,-1.5862395994595704e-5,2.3479429419473134E-08,0.0012074484919681056,-1.5943390285158226e-5,2.3526960795175952e-8,0.0012076565349967772,-1.6053727644420263e-5,2.3591735054261115e-8,0.0012079303224518817,-1.6166109640853678e-5,2.3657270713232458e-8,0.0012082687433021958,-1.625265566416613e-5,2.370677465035961e-8,0.0012086611896754904,-1.6287448494366172e-5,2.372466631141001e-8,0.0012090872917999832,-1.6249836702848495e-5,2.3698580523446967e-8,0.0012095176855486077,-1.6128815528154758e-5,2.3622028928013453e-8,0.0012099170613362122,-1.592798579392285e-5,2.349739986274672e-8,0.0012102505659388227,-1.566936060894537e-5,2.3338237567455915e-8,0.0012104933479661164,-1.5393153749585413e-5,2.316906420901978e-8,0.0012106406191476266,-1.5150881099106516e-5,2.302113572545944e-8,0.001210713427762985,-1.4991745019339821e-5,2.2924136337323242e-8,0.0012107557250189674,-1.4946543294335746e-5,2.2896419733099684e-8,0.0012108221716802248,-1.5016161651831003e-5,2.293810304377412e-8,0.0012109612315525406,-1.5170264902251345e-5,2.3030401775421017e-8,0.0012112005956738774,-1.535671009607627e-5,2.3141465559964834e-8,0.0012115402123723076,-1.551722648703216e-5,2.3235958218962858e-8,0.0012119541203185218,-1.5603217342101987e-5,2.32846361790215e-8,0.0012123989690091418,-1.558704649773601e-5,2.32711262155396e-8,0.0012128258188160085,-1.546672637976945e-5,2.3194667025593706e-8,0.0012131919055231588,-1.526397476343263e-5,2.306882035076686e-8,0.001213469672752588,-1.5016981076206275e-5,2.2916988632259907e-8,0.0012136512717100716,-1.4770193242323362e-5,2.2766165374691033e-8,0.0012137479589100495,-1.4563974629347552e-5,2.2640665341646183e-8,0.0012137852603573004,-1.4426773355970368e-5,2.255743926778347e-8,0.0012137959093788662,-1.4371343522844578e-5,2.2523883713028728e-8,0.0012138128365966673,-1.439499826481813e-5,2.2538091856692798e-8,0.0012138638400819995,-1.4482668698853964e-5,2.2590762305896745e-8,0.0012139685086682349,-1.4611158244269921e-5,2.2667775734842887e-8,0.0012141370773553156,-1.4753294457875256e-5,2.2752669276880412e-8,0.0012143704447298367,-1.4881339284913565e-5,2.2828655628043122e-8,0.0012146606157735983,-1.4969696583580246e-5,2.2880242761076628e-8,0.0012149911979015464,-1.499739616837105e-5,2.2894754107216863e-8,0.001215338074413792,-1.495094088433912e-5,2.286409075695815e-8,0.0012156709220629822,-1.4827860365214653e-5,2.278691472150337e-8,0.0012159566967008494,-1.4640607873998432e-5,2.2671006872583375e-8,0.0012161661678526474,-1.4419214392042551e-5,2.253482998176492e-8,0.0012162834218881762,-1.4209794962010202e-5,2.2406545421342624e-8,0.001216315642396274,-1.4065845309811994e-5,2.2318651755283653e-8,0.0012162975273846636,-1.4032046896515793e-5,2.229810801795348e-8,0.001216284646636957,-1.412603160851158e-5,2.2355282871068613e-8,0.0012163354726003424,-1.4328040488737538e-5,2.2477767363016963e-8,0.0012164899159747096,-1.4585949126754397e-5,2.263355123417095e-8,0.001216755574130199,-1.4833892797710722e-5,2.278243853374842e-8,0.0012171078245810246,-1.5014490026863692e-5,2.2889603737556964e-8,0.001217501208749591,-1.5094377647005056e-5,2.2935034657986378e-8,0.0012178847630020077,-1.5068934395509631e-5,2.2916347417685273e-8,0.0012182150285436164,-1.4958137548021152e-5,2.2846155074825506e-8,0.0012184640069405344,-1.4797783644600629e-5,2.2746590779909395e-8,0.0012186220505673322,-1.4629683731770791e-5,2.2643235920746163e-8,0.001218696822913379,-1.449297270290909e-5,2.2559801522444672e-8,0.0012187095811834294,-1.4417539138099393e-5,2.2514186857630122e-8,0.0012186898663968694,-1.4420061297596525e-5,2.2516180023635898e-8,0.0012186696633395672,-1.4502833252156467e-5,2.2566860603567102e-8,0.0012186780735641304,-1.4655108434294776e-5,2.2659490899290508e-8,0.0012187372918174148,-1.4856253456001961e-5,2.2781443114298367e-8,0.001218860273629298,-1.5079824490775369e-5,2.2916635639418696e-8,0.0012190500435946263,-1.5297700051893458e-5,2.3047988343221898e-8,0.001219300200263371,-1.548365519236493e-5,2.3159560794279936e-8,0.0012195960618367548,-1.5616237415079354e-5,2.3238309613797606e-8,0.0012199161265676276,-1.568118550987916e-5,2.3275603178996437e-8,0.0012202338545077081,-1.567373100870673e-5,2.326866879195279e-8,0.0012205201561264112,-1.560100091808706e-5,2.3222067337371707e-8,0.001220747382989795,-1.5484226141098953e-5,2.3148995007320677e-8,0.0012208955835540899,-1.535941411892994e-5,2.3071605072069785e-8,0.0012209607427107806,-1.5274050539459638e-5,2.3018902382756045e-8,0.001220962475274646,-1.5277280997782236e-5,2.3020705792687032e-8,0.0012209458731045407,-1.5403436960660497e-5,2.309762894932575e-8,0.0012209717976255354,-1.565448470536381e-5,2.3250476497938733e-8,0.0012210955463632595,-1.5992317511104423e-5,2.345566341649283e-8,0.0012213435678971353,-1.634934524496698e-5,2.367175263118225e-8,0.0012217022640911984,-1.6653999885394203e-5,2.3855040758167472e-8,0.0012221254162641652,-1.685673242853055e-5,2.397543609100118e-8,0.0012225539172616843,-1.694295513018085e-5,2.4024369111537456e-8,0.0012229355612905532,-1.6930207344080828e-5,2.4013018459709848e-8,0.0012232368258948774,-1.6856088422204816e-5,2.3964815471614588e-8,0.001223445818883135,-1.6764870074623695e-5,2.3907108196114857e-8,0.0012235694616662836,-1.66972195773145e-5,2.3864781052871904e-8,0.0012236282176459417,-1.668400111843338e-5,2.3856473140188308e-8,0.0012236504409797394,-1.6743379709783217e-5,2.3892909894168513e-8,0.0012236671763620997,-1.6880175503808295e-5,2.3976645895061022e-8,0.001223707624433692,-1.708683221483701e-5,2.4102766441136323e-8,0.0012237954317209335,-1.734565340062886e-5,2.426029685357651e-8,0.0012239459921608604,-1.7631973134540477e-5,2.4434117926847972e-8,0.0012241649213519893,-1.791791608308859e-5,2.4607207076905056e-8,0.0012244478183697678,-1.817632574317451e-5,2.476299133590999e-8,0.0012247812244358886,-1.838435464330882e-5,2.4887533086232756e-8,0.0012251444556581857,-1.8526399189167512e-5,2.4971356499031972e-8,0.001225512030680893,-1.8596356874691012e-5,2.5010875116620252e-8,0.0012258566090267735,-1.8599249204608337e-5,2.500940666446154e-8,0.0012261525206215848,-1.8552184327634754e-5,2.4977727871947743e-8,0.0012263801754533244,-1.8484389126531722e-5,2.4934001023126065e-8,0.001226531589440995,-1.8435353897332787e-5,2.4902521731442044e-8,0.0012266163824655456,-1.844942436845583e-5,2.4910327037782435e-8,0.0012266658987470957,-1.8565429063659797e-5,2.498085133256966e-8,0.0012267312754294553,-1.880207278591228e-5,2.5125090674904964e-8,0.0012268713258371598,-1.914430998630717e-5,2.533341535608457e-8,0.001227131022819862,-1.954022969406463e-5,2.557377342250434e-8,0.0012275202373195173,-1.991570456003484e-5,2.5800673545950185e-8,0.0012280066605481112,-2.0202550073462475e-5,2.5972399157529153e-8,0.0012285289260753722,-2.036442274620531e-5,2.6066887113834473e-8,0.0012290215337736447,-2.0405843598096857e-5,2.608730247250189e-8,0.0012294364792536673,-2.0362831684957532e-5,2.605626237353159e-8,0.0012297525480403702,-2.0285001528169813e-5,2.600470001447718e-8,0.001229973287643303,-2.0219675206655426e-5,2.596192790923771e-8,0.00123011945294299,-2.0202577079814657e-5,2.5949829286862887e-8,0.0012302208090147813,-2.0254570927893388e-5,2.598089556577197e-8,0.001230309575850642,-2.0382079862008366e-5,2.6058620701201978e-8,0.0012304158345859968,-2.0579100696291248e-5,2.6178889594627654e-8,0.0012305643517482184,-2.0829746668818747e-5,2.6331638580619262e-8,0.0012307723235892732,-2.1111062515209374e-5,2.6502607204116547e-8,0.0012310478548748765,-2.1396114777007075e-5,2.6675202086625746e-8,0.0012313891899758615,-2.1657391046044656e-5,2.6832534064826254e-8,0.0012317848985939483,-2.187044513583133e-5,2.6959629716658373e-8,0.001232215249623264,-2.2017430944470345e-5,2.7045614719736176e-8,0.0012326547447966258,-2.209001773221379e-5,2.7085542859440893e-8,0.0012330755592392312,-2.2091326924775106e-5,2.70816135899996e-8,0.0012334516279752959,-2.203663011034868e-5,2.7043580150642033e-8,0.001233763101802164,-2.1952544155669515e-5,2.6988170698065287e-8,0.001234000846053606,-2.1874499915341305e-5,2.6937404354593894e-8,0.0012341705639102628,-2.184212653370876e-5,2.691563704449534e-8,0.0012342956223987628,-2.1891979650956894e-5,2.6945050302677308e-8,0.001234416688585595,-2.2047557895417835e-5,2.7039585964648845e-8,0.0012345855888722889,-2.23083766412273e-5,2.719839449139654e-8,0.0012348517249173988,-2.2642708147870215e-5,2.7401545144008608e-8,0.0012352433616983397,-2.2990593392258627e-5,2.7611962377998624e-8,0.0012357521897338616,-2.328103233247334e-5,2.778596961972363e-8,0.0012363319390749912,-2.3458241076732956e-5,2.7889391237730747e-8,0.001236914832205126,-2.3503051358274284e-5,2.7910738893106944e-8,0.0012374372602634584,-2.34370143285074e-5,2.7863779646029196e-8,0.0012378600978094599,-2.3308844078715344e-5,2.7779123129400366e-8,0.001238175025995959,-2.3173834169043024e-5,2.7691345091404345e-8,0.0012383987375117022,-2.3077516654817154e-5,2.7628715793488518e-8,0.0012385621901050622,-2.304804267920002e-5,2.7608434146434345e-8,0.001238700730871274,-2.3095701387628564e-5,2.7636418998067664e-8,0.0012388473917175444,-2.321606101218933e-5,2.7709418024290113e-8,0.0012390291726658905,-2.339397590953754e-5,2.781763697063455e-8,0.001239265187271221,-2.3607198404592336e-5,2.7947049692492793e-8,0.0012395656932513142,-2.3829477290720274e-5,2.808131142382676e-8,0.001239931567574002,-2.4033454791804963e-5,2.8203502070202986e-8,0.001240354197034772,-2.419368952870141e-5,2.8297948187087624e-8,0.0012408160639877112,-2.4289979933212816e-5,2.835226322126063e-8,0.0012412924936616241,-2.431076507997636e-5,2.835947104322042e-8,0.001241754847581157,-2.4255949556786933e-5,2.8319783468064274e-8,0.0012421750027906508,-2.413837942889537e-5,2.8241514856497743e-8,0.0012425305735050856,-2.398330917104594e-5,2.8140695039591662e-8,0.001242810041407821,-2.3825431793646963e-5,2.803911624686781e-8,0.0012430167548026835,-2.3703494765039817e-5,2.796086702784852e-8,0.0012431707595330977,-2.3653019187846447e-5,2.792773776976358e-8,0.0012433075282853305,-2.3697965910599013e-5,2.7954078812129726e-8,0.0012434727173970845,-2.3842679769997022e-5,2.8041949740427052e-8,0.001243712463212426,-2.4066405760676784e-5,2.8177927469785303e-8,0.0012440601035040232,-2.432362427984792e-5,2.8333484399655164e-8,0.0012445228361571915,-2.4553159928907133e-5,2.84706844897476e-8,0.001245074558848186,-2.469598742631698e-5,2.8553156726817562e-8,0.0012456608862963842,-2.4715959349908565e-5,2.8558858281151512e-8,0.001246216708050109,-2.4613291013679496e-5,2.8488399775580813e-8,0.001246688489499405,-2.4423038202625592e-5,2.8364074640010765e-8,0.0012470500759516796,-2.4199802086790886e-5,2.8220269933140577e-8,0.0012473056186578205,-2.3997923243581362e-5,2.8091007067191165e-8,0.0012474816718979766,-2.3856832628854112e-5,2.8000725693752732e-8,0.0012476152297567857,-2.3795467178827526e-5,2.796083255759579e-8,0.0012477434727424471,-2.3813936544781482e-5,2.797087896365848e-8,0.0012478974825907967,-2.3898538079999737e-5,2.802185450423327e-8,0.0012480994715242364,-2.4027063105389873e-5,2.8099607177080368e-8,0.0012483620860405254,-2.4173063448967265e-5,2.8187527217003586e-8,0.0012486885425988454,-2.4309038643380227e-5,2.8268487756534477e-8,0.0012490729604937483,-2.4409048929309893e-5,2.832640747738927e-8,0.0012495008229754566,-2.4451320673572244e-5,2.8347832218140762e-8,0.0012499499393055541,-2.442119484453209e-5,2.8323772418069707e-8,0.0012503925365264328,-2.4314275664468087e-5,2.8251695604431464e-8,0.0012507990005257714,-2.4139030867608762e-5,2.8137171704645568e-8,0.001251143262636996,-2.391768914256767e-5,2.7994415164953935e-8,0.0012514090363835088,-2.368426701735876e-5,2.7844976389814205e-8,0.0012515953110546903,-2.3479107716070564e-5,2.771421375274228e-8,0.0012517191350728285,-2.3340474530020665e-5,2.7625933544735366e-8,0.0012518141482856812,-2.3295030625602135e-5,2.7596407518891168e-8,0.00125192444142756,-2.334975383124914e-5,2.7629401271552236e-8,0.0012520946514939732,-2.348776438369355e-5,2.7713746828686006e-8,0.0012523583631477433,-2.3669877510084097e-5,2.7824516476769492e-8,0.0012527277286170939,-2.38425421336231e-5,2.7928118057615044e-8,0.0012531876409788102,-2.3951178423680048e-5,2.7990642199443437e-8,0.0012536974445180235,-2.395580939174183e-5,2.7987543221912417e-8,0.0012542012794675764,-2.3843814405731823e-5,2.7911488512020674e-8,0.0012546444912580575,-2.3634230998913443e-5,2.7774939914552914e-8,0.0012549898708866338,-2.337098949679818e-5,2.760582318235473e-8,0.0012552269467497428,-2.31078977299701e-5,2.7438033142794907e-8,0.0012553712247767674,-2.2892283909759187e-5,2.730112602560997e-8,0.001255455539610628,-2.2753872111695107e-5,2.7213370434487382e-8,0.0012555187275849952,-2.2701515499694785e-5,2.7179817449245153e-8,0.0012555962675502516,-2.2726235663317327e-5,2.719436714414756e-8,0.0012557148843836085,-2.280713457832666e-5,2.724360162183075e-8,0.001255890687072248,-2.2917285638186973e-5,2.7310518757386415e-8,0.001256129398595488,-2.3028282424195017e-5,2.7377340966423323e-8,0.0012564273842037858,-2.3113398094334926e-5,2.742741470506988e-8,0.001256772748129926,-2.3149894992070267e-5,2.7446594516070987e-8,0.0012571463545275083,-2.3121157899020574e-5,2.7424565261140528e-8,0.0012575231640768645,-2.3019131476612913e-5,2.7356401669610725e-8,0.001257874612111306,-2.284700440575688e-5,2.7244296214391676e-8,0.0012581727000068063,-2.2621361371800596e-5,2.7098925268443296e-8,0.0012583959412701018,-2.2372382207858894e-5,2.6939533510837228e-8,0.0012585362273141267,-2.2140433227805133e-5,2.6791698499354605e-8,0.0012586042852673735,-2.196814660205169e-5,2.6682241581275458e-8,0.0012586306549829782,-2.1889126806689826e-5,2.6632055608261722e-8,0.0012586601311620252,-2.1916855981065547e-5,2.664914718129419e-8,0.0012587403517282045,-2.2038399148444123e-5,2.672480002912566e-8,0.0012589081308858302,-2.2216070066749486e-5,2.6834805998698666e-8,0.001259178401966701,-2.2397001174915816e-5,2.6945651229235044e-8,0.0012595395662738137,-2.2527436600423014e-5,2.7023591961309044e-8,0.0012599565073977735,-2.2567114697326255e-5,2.704368259177285e-8,0.0012603800277351954,-2.249955563699239e-5,2.6996141762203254e-8,0.0012607598300570521,-2.2335587057110256e-5,2.6888416016816608e-8,0.0012610573544834757,-2.2109330675960614e-5,2.674249136516303e-8,0.0012612547690560867,-2.186800615213288e-5,2.6588343449294578e-8,0.0012613575758832708,-2.1658922356915117e-5,2.6455686208838244e-8,0.001261390591051946,-2.151793017938794e-5,2.6366737636690552e-8,0.00126138947197204,-2.146269522919313e-5,2.6332111564846554e-8,0.001261391218294045,-2.1491868003257122e-5,2.635046486548411e-8,0.0012614266428808319,-2.15888902989852e-5,2.641103229929555e-8,0.0012615162216082754,-2.1727952954471072e-5,2.6497431575663864e-8,0.0012616690635331466,-2.187983048108349e-5,2.6591299115901463e-8,0.0012618838439774989,-2.2016383972793845e-5,2.6675035116793972e-8,0.0012621505235054361,-2.2113585277586392e-5,2.6733624171416905e-8,0.0012624521180612978,-2.2153524616584108e-5,2.6755867859438524e-8,0.00126276632102878,-2.2126043067001626e-5,2.6735440962205498e-8,0.0012630672801498218,-2.2030481309721585e-5,2.6672051476437688e-8,0.0012633282001385453,-2.1877576094169603e-5,2.6572675677080794e-8,0.0012635254927225803,-2.1690821374928485e-5,2.6452399559931268e-8,0.0012636447200479173,-2.150581193844573e-5,2.6333924961939377e-8,0.0012636873694712005,-2.1365630790647973e-5,2.62445471842398e-8,0.001263675689203714,-2.1311092535360135e-5,2.6209908895091034e-8,0.001263651583389443,-2.1367352542053175e-5,2.624553285893486e-8,0.0012636669236140193,-2.1532112858698217e-5,2.6349454998586358e-8,0.0012637672086514252,-2.1772261625864342e-5,2.6500247615930587e-8,0.0012639754671761418,-2.2032532614826404e-5,2.666264158225693e-8,0.001264284192241647,-2.2253087100624153e-5,2.679874434506354e-8,0.0012646586664950854,-2.238799657886381e-5,2.687976398338216e-8,0.001265048952007261,-2.2417146448438736e-5,2.68935001124463e-8,0.0012654046375396352,-2.2348637976309602e-5,2.6845743928639548e-8,0.001265687166465729,-2.2213199967963506e-5,2.6756558234120423e-8,0.0012658770847539854,-2.205411237295862e-5,2.6653709859809845e-8,0.0012659757694239995,-2.1916095275190147e-5,2.6565519875628988e-8,0.0012660024992930466,-2.1835733466883678e-5,2.6514812194613012e-8,0.0012659883363219941,-2.183504682483079e-5,2.6514975770749016e-8,0.001265968564043513,-2.1918984668542527e-5,2.656857289282304e-8,0.0012659755016867593,-2.2076758125450218e-5,2.666835322071545e-8,0.0012660331867845541,-2.2286013655878877e-5,2.6799978389807436e-8,0.0012661546447266811,-2.2518299270481508e-5,2.6945459630868268e-8,0.0012663416011667139,-2.2744366594706175e-5,2.708642168120064e-8,0.0012665859156780787,-2.2938374403736194e-5,2.720666230998871e-8,0.0012668718340026004,-2.308069895407578e-5,2.729387607334129e-8,0.0012671783608418628,-2.315961813842999e-5,2.7340731279403066e-8,0.0012674815022603028,-2.3172399530941718e-5,2.734561490457562e-8,0.0012677565540440863,-2.3126206424985553e-5,2.7313258391016998e-8,0.0012679809078356128,-2.3038880813856224e-5,2.7255232108115096e-8,0.0012681379667225815,-2.293909764723427e-5,2.718996925380211e-8,0.001268222410981478,-2.2864607647463806e-5,2.714153350665855e-8,0.0012682458991817589,-2.285674137919671e-5,2.7136033101520892e-8,0.0012682404442877298,-2.294997743206441e-5,2.7194986348181077e-8,0.0012682552261359058,-2.3158135615329883e-5,2.732665258099185e-8,0.0012683438357439264,-2.3463184370203866e-5,2.751908579692521e-8,0.0012685445912806244,-2.381508922712379e-5,2.774017528295886e-8,0.0012688635218484556,-2.4146813037913072e-5,2.794723304902699e-8,0.0012692705636366676,-2.439852622614259e-5,2.8102383947438925e-8,0.0012697114811386142,-2.453808374801821e-5,2.818558432617654e-8,0.0012701278926337827,-2.456798692026666e-5,2.8199025785485304E-08,0.0012704747097447653,-2.451874191640579e-5,2.8162796580241977e-8,0.0012707290511519327,-2.4435369716645258e-5,2.8106093111468987e-8,0.00127089082105009,-2.4363968771578763e-5,2.8058468845464867e-8,0.0012709780445711418,-2.4341966719446985e-5,2.804354865594735e-8,0.0012710200656264432,-2.439279816146933e-5,2.8075722588673664e-8,0.001271050641705294,-2.4524258495752033e-5,2.8159296031538897e-8,0.0012711018882705825,-2.4729497552478398e-5,2.8289339641440367e-8,0.0012711994916664129,-2.4989923105568873e-5,2.8453680377103202e-8,0.0012713595362361608,-2.5279401250563086e-5,2.863560229913506e-8,0.0012715871496310693,-2.5568988582094783e-5,2.8816787886148046e-8,0.0012718768697763392,-2.5831442116825033e-5,2.898007870930307e-8,0.0012722144010838205,-2.6044933071783422e-5,2.911175618979125e-8,0.0012725792455093397,-2.619559555621507e-5,2.9203144635270495e-8,0.001272947626786604,-2.627888618297095e-5,2.9251514544716158e-8,0.0012732953571026233,-2.630006763486035e-5,2.9260441855358742e-8,0.0012736006475878774,-2.6274127894061375e-5,2.9239767557704245e-8,0.0012738470763975945,-2.6225193166156763e-5,2.9205161411702542e-8,0.0012740270157430664,-2.6185124088254545e-5,2.9177104177386633e-8,0.0012741455908807501,-2.6190414429344983e-5,2.9178785414269988e-8,0.001274224316427514,-2.62760887589678e-5,2.9232165679184445e-8,0.0012743020615554482,-2.646586880061536e-5,2.935178899471236e-8,0.001274429803943883,-2.6760187731966526e-5,2.9537333686976303e-8,0.0012746566213436674,-2.712756647179489e-5,2.976831346906732e-8,0.0012750096385508432,-2.7507546288788524e-5,3.0006033761210905e-8,0.0012754781610912526,-2.7829406560484464e-5,3.020548189174035e-8,0.001276013858158292,-2.8039650417442057e-5,3.033279425528792e-8,0.0012765492750488386,-2.812244159011328e-5,3.0378310890776146e-8,0.001277023642649741,-2.810137217333263e-5,3.035772861075833e-8,0.0012774012466509133,-2.802473521408781e-5,3.0302589247883327e-8,0.0012776758745853178,-2.7945890596938154e-5,3.024749497268067e-8,0.0012778647758220772,-2.79085430819153e-5,3.022048134829472e-8,0.001277998800793535,-2.793980262467159e-5,3.0238533240266736e-8,0.0012781132813501053,-2.804931557698271e-5,3.0307171318946226e-8,0.0012782413834105137,-2.8231718287190717e-5,3.042226138414893e-8,0.0012784098972853835,-2.8470294804898002e-5,3.0572571320992245e-8,0.0012786367518833218,-2.8740849073584766e-5,3.074235593251752e-8,0.0012789297433653374,-2.9015619036969142e-5,3.091384476109464e-8,0.0012792863683563302,-2.9267159831319898e-5,3.10696300382083e-8,0.0012796947422641365,-2.9471974501639326e-5,3.119488465856777e-8,0.0012801355484260517,-2.9613619515355336e-5,3.127929159311357e-8,0.0012805848824221722,-2.9684936207415627e-5,3.131847898599492e-8,0.001281017638662968,-2.968910490383866e-5,3.131473845451968e-8,0.0012814109964758992,-2.963950002011583e-5,3.1276957457645865e-8,0.0012817477332364437,-2.9558493616968298e-5,3.1219814796159154e-8,0.0012820192456920046,-2.9475284638605605e-5,3.116227933862801e-8,0.001282228197848576,-2.9422701983244574e-5,3.1125420021043346e-8,0.001282390606699797,-2.943268070189973e-5,3.112941115271035e-8,0.0012825366317504978,-2.9529907636028162e-5,3.118948519163852e-8,0.0012827084194776662,-2.9723676059624966e-5,3.131088059813362e-8,0.0012829528288665348,-2.9999700516418604e-5,3.1483844908667825e-8,0.0012833079130263225,-3.0316201547194518e-5,3.168132285335997e-8,0.0012837859765342673,-3.061020073146328e-5,3.1863018658290956e-8,0.0012843618450062628,-3.081684226297564e-5,3.198765635324121e-8,0.0012849765874220782,-3.089521995994752e-5,3.20294184946202e-8,0.0012855586318208988,-3.084588285428632e-5,3.1989175468429604e-8,0.0012860510837547415,-3.0708540178211655e-5,3.189304549666774e-8,0.001286429391721135,-3.054259065273131e-5,3.1779790208841204e-8,0.0012867022080911398,-3.0404062537684042e-5,3.1685762437681995e-8,0.001286900377279203,-3.0330777585708804e-5,3.163518182633183e-8,0.001287063300987379,-3.0338387143386424e-5,3.163759774986754e-8,0.001287228565364857,-3.042354922701865e-5,3.1690131287687944e-8,0.0012874261434639106,-3.056970632894269e-5,3.1781451277475414e-8,0.0012876761011276928,-3.075264889043229e-5,3.189554315979008e-8,0.001287988197340863,-3.094489886686548e-5,3.201458498978887e-8,0.0012883622633117567,-3.111913753711612e-5,3.2121090216733314e-8,0.0012887890246263095,-3.125116421789353e-5,3.219969606469643e-8,0.0012892514436496775,-3.1322610080414284e-5,3.223881626240157e-8,0.0012897267572810904,-3.132337450102907e-5,3.223217751474067e-8,0.0012901893827250341,-3.125348366035541e-5,3.2180042784654345e-8,0.0012906146194111945,-3.1123848609875844e-5,3.208974051574626e-8,0.0012909826969805158,-3.0955505293186115e-5,3.197517438868874e-8,0.0012912825565626971,-3.0777215881050795e-5,3.185520292845642e-8,0.0012915147687625943,-3.0621540642874033e-5,3.175097395022615e-8,0.001291693035842951,-3.0519716537336427E-05,3.168249183610786e-8,0.0012918438362249742,-3.0495841413462402e-5,3.1664819795655e-8,0.0012920037928547566,-3.056087693364674e-5,3.1704304670211076e-8,0.0012922141715474165,-3.0707282053063105e-5,3.17953364867465e-8,0.001292512034520009,-3.090599709338316e-5,3.1918661500173786e-8,0.0012929187002381516,-3.110850773894603e-5,3.2042880122178096e-8,0.0012934285950733568,-3.1256693423193994e-5,3.213078673276235e-8,0.0012940044453168913,-3.1300498297250774e-5,3.215061328521406e-8,0.001294584877820033,-3.12176444133966e-5,3.20885883560331e-8,0.001295104589766634,-3.102462475607171e-5,3.195596529494129e-8,0.0012955179603695564,-3.077085167751126e-5,3.178521309227125e-8,0.0012958131840410975,-3.0518540566581096e-5,3.1616916955709714e-8,0.0012960105999187787,-3.032026641965267e-5,3.148511085415194e-8,0.0012961495978159076,-3.0205433323736027e-5,3.140845109678617e-8,0.0012962734470908504,-3.0178565979806494e-5,3.1389212768773746e-8,0.0012964186126221632,-3.022527856628844e-5,3.141738252834504e-8,0.0012966099467786687,-3.032037295760454e-5,3.1476126820308665e-8,0.0012968600751613467,-3.043465498738407e-5,3.154631955101938e-8,0.0012971707339509185,-3.0539529403013107e-5,3.160949484610287e-8,0.0012975345391934867,-3.0609886172662965e-5,3.164960498486348e-8,0.0012979366525891216,-3.062613758462698e-5,3.1654217987039235e-8,0.0012983564533401342,-3.057599296156603e-5,3.1615600298714555e-8,0.0012987695840761062,-3.0456167864014533e-5,3.1531828857941956e-8,0.0012991507884455799,-3.027379091331488e-5,3.140775068646107e-8,0.0012994777236449333,-3.004683999448522e-5,3.125530194558217e-8,0.0012997353921117309,-2.9802813505353085e-5,3.1092622133109445e-8,0.0012999202861004046,-2.9575139003558806e-5,3.09416264273142e-8,0.0013000430270444395,-2.93974130243819e-5,3.0824133092212875e-8,0.001300128331498118,-2.9296350396882437e-5,3.075718715872455e-8,0.0013002116679433546,-2.928500804947685e-5,3.074866956412388e-8,0.0013003328193243616,-2.935801434543197e-5,3.0794343521651624e-8,0.001300527308605543,-2.9490231267340253e-5,3.0877225135393917e-8,0.0013008171756119307,-2.9639869058835446e-5,3.0969838317194383e-8,0.0013012031591031939,-2.9756515314625574e-5,3.10395465251122e-8,0.0013016609455879465,-2.9793446563434323e-5,3.105650235031395e-8,0.0013021442562541905,-2.972172931898944e-5,3.100263591424007e-8,0.0013025961177511457,-2.9541337275106654e-5,3.087867894617946e-8,0.0013029660006317406,-2.9283509335878423e-5,3.0705543544897195e-8,0.0013032261586196996,-2.9001308736517474e-5,3.051808034793436e-8,0.0013033793833759004,-2.875164122635431e-5,3.035331118242153e-8,0.0013034547749617115,-2.8577237008618275e-5,3.023868954419752e-8,0.0013034950005774671,-2.8496554952853205e-5,3.018561791167246e-8,0.0013035422626375217,-2.8503927091162528e-5,3.018972942257647e-8,0.0013036286487182313,-2.8576659673191224e-5,3.023572044825167e-8,0.0013037723920898197,-2.8683998777921855e-5,3.0303320007544866e-8,0.0013039784710675347,-2.8794434907111588e-5,3.037204952208462e-8,0.0013042411712836108,-2.8880283437659195e-5,3.042410362765577e-8,0.0013045469059940415,-2.8920083977942182e-5,3.044577741719525e-8,0.0013048765892900785,-2.8899827777303695e-5,3.042817208710491e-8,0.0013052076096280716,-2.8813836177220682e-5,3.0367751697282956e-8,0.0013055158699504063,-2.8665686201342626e-5,3.026699500311816e-8,0.0013057784723598796,-2.8469027833693583e-5,3.0134989400730604e-8,0.0013059774012722158,-2.824758312302742e-5,2.998744624708401e-8,0.0013061039917527009,-2.803329661145913e-5,2.984543622349855e-8,0.0013061631500154798,-2.786174715368294e-5,2.973227959525612e-8,0.0013061755169066931,-2.7764752904717206e-5,2.966860348764004e-8,0.0013061756394885842,-2.7761595595907e-5,2.9666567318660748e-8,0.0013062052931786697,-2.785175086959786e-5,2.972518749832201e-8,0.001306303142538855,-2.801230059159129e-5,2.9828826603746476e-8,0.0013064938194895942,-2.820182285028999e-5,2.9949955265754234e-8,0.001306780086361943,-2.8370168467178228e-5,3.005571106771042e-8,0.0013071407644421912,-2.8471378373462444e-5,3.0116392578181026e-8,0.0013075352201250116,-2.8475996159682643e-5,3.011342304590286e-8,0.001307913334487316,-2.8379292346448963e-5,3.0044539506056616e-8,0.0013082284553436203,-2.820295608258615e-5,2.992467194139616e-8,0.001308449795111905,-2.798934380814309e-5,2.9781980996995586e-8,0.0013085703641908598,-2.7789555942438875e-5,2.9649940584985727e-8,0.0013086075992558702,-2.7649081856834136e-5,2.9557946510256037e-8,0.0013085965713823258,-2.7596068441511594e-5,2.9523765739778143e-8,0.001308578775603071,-2.763613069992761e-5,2.9550353019012925e-8,0.0013085910545795772,-2.7754483402330733e-5,2.9627464816654964e-8,0.0013086582864577261,-2.7923038311927625e-5,2.973644409629548e-8,0.00130879097813508,-2.810881146934206e-5,2.985573633256056e-8,0.0013089866559391336,-2.8280794299983097e-5,2.9965288371083946e-8,0.0013092330853364449,-2.841421177594859e-5,3.004918959647898e-8,0.0013095117218239086,-2.849249915857971e-5,3.00968495932514e-8,0.0013098006051115334,-2.8507901829533638e-5,3.010335322333937e-8,0.0013100766331532816,-2.8461574612671678e-5,3.006956699423517e-8,0.00131031764281404,-2.8363692896845595e-5,3.0002285569679514e-8,0.0013105049028917662,-2.823351948220192e-5,2.991431821194102e-8,0.0013106264457913824,-2.809877946612421e-5,2.9824048280105456e-8,0.001310681133427025,-2.7993271777071674e-5,2.9753766780009736e-8,0.0013106824426351005,-2.795161269268233e-5,2.972610709291234e-8,0.0013106598420135267,-2.8000824017845768e-5,2.975846481850516e-8,0.001310655166280242,-2.8150479328616627e-5,2.9856575254154354e-8,0.0013107127876955784,-2.8385509043680695e-5,3.000993471753322e-8,0.0013108657814568222,-2.866643869990418e-5,3.0192141079751784e-8,0.0013111236756196114,-2.8939129152693387e-5,3.036744088323199e-8,0.0013114677764056418,-2.915104009753794e-5,3.0501486920959236e-8,0.001311856492484787,-2.9267251923133067e-5,3.0571854184595145e-8,0.001312238049311916,-2.9279859822208612e-5,3.057411525864111e-8,0.0013125651169096678,-2.9208198159179714e-5,3.0521802359526976e-8,0.0013128064021552001,-2.909142250826646e-5,3.044129361786551e-8,0.0013129525886068233,-2.897698933927629e-5,3.0364030849243177e-8,0.001313016206816826,-2.890865807546817e-5,3.031854722956662e-8,0.001313026461668143,-2.8916887043806896e-5,3.0324238748257375e-8,0.0013130209243820167,-2.901349026915853e-5,3.0388075426164644e-8,0.0013130364508609068,-2.91912467162573e-5,3.050460897562148e-8,0.0013131016267059507,-2.9427863667728573e-5,3.0658773423636455e-8,0.00131323234339437,-2.9692576163541312e-5,3.0830280966021656e-8,0.0013134309224520154,-2.9953194080713292e-5,3.099817761610996e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json deleted file mode 100644 index e8e2db5..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_14.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":14000,"numberOfSamples":1000,"samples":[0.0013136880538731968,-3.0181825300251084e-5,3.1144455018197914e-8,0.0013139862307697747,-3.0358458604268804e-5,3.125626468859012e-8,0.0013143034381558063,-3.0472498704118995e-5,3.1326857923882795e-8,0.001314616342296335,-3.0522889122674205e-5,3.135568412117831e-8,0.0013149028238326915,-3.051757614543907e-5,3.134810730752583e-8,0.0013151441476950397,-3.0472812693602606e-5,3.1315005489895234e-8,0.001315327245423572,-3.041233669157899e-5,3.127221966442859e-8,0.0013154474985632677,-3.0365940022199845e-5,3.1239522569258994e-8,0.0013155119761371786,-3.0366482616605727e-5,3.123852579233063e-8,0.0013155421786821661,-3.044428590458291e-5,3.1288903751562086e-8,0.0013155741637083083,-3.061859253490029e-5,3.140279579367739e-8,0.0013156532826805987,-3.08878545724263e-5,3.15785553459714e-8,0.0013158221093964287,-3.122350814634265e-5,3.179684474210843e-8,0.0013161043666861684,-3.1573152017452694e-5,3.202287220092828e-8,0.001316492562279381,-3.187552478285449e-5,3.221630534507893e-8,0.0013169475071545026,-3.2081986318948946e-5,3.234541530079332e-8,0.0013174114482328236,-3.217362581767834e-5,3.2398333198900105e-8,0.0013178279759007432,-3.216549962188907e-5,3.238578137269618e-8,0.0013181587209702065,-3.209786877058771e-5,3.233512178519737e-8,0.0013183908584672483,-3.202101456924127e-5,3.2280078366949867e-8,0.0013185355723118594,-3.198087692229784e-5,3.22510415181099e-8,0.0013186210256550192,-3.200948903377424e-5,3.226871171627078e-8,0.001318683516304464,-3.212087078817048e-5,3.2341550899422565e-8,0.0013187592325329092,-3.2311333689063695e-5,3.246626921888799e-8,0.0013188777975085585,-3.256278527721231e-5,3.263027897225073e-8,0.0013190580943835157,-3.28478210560236e-5,3.281520552707126e-8,0.001319306537685271,-3.3135522599053245e-5,3.30007052286256e-8,0.0013196176305973269,-3.339691167788335e-5,3.3167938459672674e-8,0.0013199762931723731,-3.360923943949643e-5,3.330224076991175e-8,0.001320361240591444,-3.3758679883073964e-5,3.339478932604852e-8,0.0013207486407314094,-3.3841371491741154e-5,3.3443266039948134e-8,0.0013211154170834028,-3.3863122696377714e-5,3.345170814905867e-8,0.0013214419486963593,-3.3838325595684376e-5,3.342984862739796e-8,0.0013217143059939618,-3.3788485178276064e-5,3.3392152957732015e-8,0.0013219262892678202,-3.374042925569602e-5,3.3356565064026065e-8,0.0013220814837101608,-3.37239298755937e-5,3.334280561542386e-8,0.0013221952658236343,-3.3768093745891034e-5,3.336987271475884e-8,0.0013222959339579021,-3.389572813238187e-5,3.345230413051685e-8,0.0013224231012386285,-3.411559264521433e-5,3.359518483099222e-8,0.001322620987373266,-3.44143314836092e-5,3.378904291433436e-8,0.0013229254974994617,-3.47525377055976e-5,3.4007455453146385e-8,0.0013233481259613213,-3.507078420316715e-5,3.421110391244622e-8,0.0013238651644779758,-3.5307915680853196e-5,3.435980179531848e-8,0.0013244214578083684,-3.5424988893193025e-5,3.4428250117923195e-8,0.0013249498096669955,-3.5421322382391885e-5,3.441665080515855e-8,0.0013253957656545127,-3.533284530570563e-5,3.4349593606930406e-8,0.0013257341054285624,-3.521518782185486e-5,3.4264687362774436e-8,0.0013259708733802966,-3.5122901891955616e-5,3.4198504380576074e-8,0.0013261345823387194,-3.509485421874728e-5,3.4176685340857736e-8,0.0013262639590043055,-3.514877227589115e-5,3.421034115508173e-8,0.0013263974759466818,-3.5282692478288204e-5,3.42972534612874e-8,0.0013265664975942637,-3.547980948220061e-5,3.4425417060696266e-8,0.00132679174008558,-3.5714173837029465e-5,3.457707337361339e-8,0.0013270820868991236,-3.595606011854193e-5,3.473236215303623e-8,0.0013274350277215283,-3.617667618018595e-5,3.487237396855363e-8,0.0013278383205704806,-3.6352045676457e-5,3.4981566469251094e-8,0.0013282725585155749,-3.6465885830951754e-5,3.504952018493835e-8,0.0013287143399232126,-3.651136884131447e-5,3.507202780552796e-8,0.001329139723468503,-3.649166207236073e-5,3.5051459488144146e-8,0.0013295275370495275,-3.6419245769639135e-5,3.499636143139478e-8,0.0013298621741601225,-3.631427873602864e-5,3.492040029054349e-8,0.0013301357987788196,-3.620233676919433e-5,3.484081953074903e-8,0.0013303500182077856,-3.6111625895291846e-5,3.4776475543805855e-8,0.0013305170072328,-3.606960581815073e-5,3.4745462642883064e-8,0.0013306599051258836,-3.609882203418703e-5,3.4762278550856455e-8,0.0013308118536023116,-3.621166286686944e-5,3.483441417239421e-8,0.0013310123518564367,-3.64043217054422e-5,3.495855682409469e-8,0.0013312994223816388,-3.6651762152887505e-5,3.511751481890027e-8,0.0013316973518746693,-3.6907391838432765e-5,3.528018149292224e-8,0.0013322032136629622,-3.711186898684884e-5,3.540737536800615e-8,0.0013327798493111566,-3.721219549322923e-5,3.546437127639159e-8,0.0013333634934342639,-3.718420813249119e-5,3.543571757580381e-8,0.001333886255019829,-3.70450465515009e-5,3.53335093009964e-8,0.0013343019613464686,-3.6846215847581066e-5,3.5192757078025216e-8,0.001334600413137058,-3.6651362298198277e-5,3.505642654975122e-8,0.0013348042208097524,-3.6512872822752915e-5,3.495958564720737e-8,0.0013349544109773996,-3.6458841744971036e-5,3.49205708479965e-8,0.0013350949386154267,-3.649215529746224e-5,3.49404840851344e-8,0.0013352621732775469,-3.659679818886342e-5,3.500770195061645e-8,0.001335480179315456,-3.6746003522191745e-5,3.510363508802379e-8,0.0013357600358690303,-3.6909212409168185e-5,3.520756323936493e-8,0.0013361011544938224,-3.705705068984642e-5,3.52999605336332e-8,0.00133649332519081,-3.7164741980348925e-5,3.536463540591373e-8,0.0013369190829818159,-3.7214510810799346e-5,3.539015342857483e-8,0.0013373563443612583,-3.719721204638616e-5,3.537079341232845e-8,0.0013377813051418917,-3.711323131523201e-5,3.530711046883947e-8,0.0013381715937814552,-3.697254005026054e-5,3.520601101140213e-8,0.0013385094912165925,-3.6793660324817705e-5,3.5080116340020854e-8,0.0013387847813319696,-3.660147627572446e-5,3.494630461274569e-8,0.0013389968351418553,-3.642410292771776e-5,3.482354178926302e-8,0.0013391557003256266,-3.628905404552198e-5,3.473019081800264e-8,0.0013392819820180002,-3.621893946658274e-5,3.468102678374732e-8,0.0013394052631200586,-3.622700347066692e-5,3.468425016446891e-8,0.0013395607383982387,-3.631286700900988e-5,3.473878515860904e-8,0.0013397835600754613,-3.645915330073845e-5,3.483228424044899e-8,0.0013401005623555385,-3.663056453013473e-5,3.494077405219707e-8,0.0013405202232471124,-3.6777887727110934e-5,3.5031461893425745e-8,0.0013410241084409612,-3.684910446392256e-5,3.5070089714356354e-8,0.0013415655317836142,-3.68068037108336e-5,3.503236888286036e-8,0.0013420805713068025,-3.664539114072159e-5,3.491530557749418e-8,0.0013425100358751974,-3.6397470548011556e-5,3.47413920987351e-8,0.00134282186684753,-3.6122771266874264e-5,3.455114282299104e-8,0.0013430210440999052,-3.5884585735838275e-5,3.438718523558038e-8,0.0013431424937006674,-3.5727401868071906e-5,3.427912167202074e-8,0.00134323392387406,-3.5666709476200635e-5,3.423668442759081e-8,0.0013433393957544833,-3.569188452387105e-5,3.425186840423222e-8,0.0013434898472930886,-3.577592172660759e-5,3.430576805004325e-8,0.0013437006458960645,-3.588557734935549e-5,3.4375631883152696e-8,0.0013439733632099559,-3.598872432152733e-5,3.443987682266083e-8,0.0013442990272794215,-3.6058572131738544e-5,3.448082578605249e-8,0.0013446613049089872,-3.6075754726357985e-5,3.44859220020242e-8,0.001345039248616876,-3.6029368037547205e-5,3.444825503332818e-8,0.0013454098213895693,-3.591751673460431e-5,3.436684759254604e-8,0.0013457504724702282,-3.57474829484819e-5,3.424678910825797e-8,0.0013460419605556845,-3.5535332633184876e-5,3.409904369034362e-8,0.0013462713941414768,-3.530453678562293e-5,3.3939575913952353e-8,0.0013464350440412546,-3.5083247688415916e-5,3.3787496601098456e-8,0.001346540218956281,-3.490026072080504e-5,3.366224387151234e-8,0.0013466055506973335,-3.478008498355249e-5,3.358013732940204e-8,0.001346659241019408,-3.4737853074248655e-5,3.355088149022233e-8,0.0013467351263881956,-3.477505002897689e-5,3.3574748237485566e-8,0.0013468668157807983,-3.487707274585662e-5,3.36411293630354e-8,0.0013470805087412794,-3.501350818296307e-5,3.3728992049500143e-8,0.0013473874871725111,-3.5141989537112516e-5,3.3809694862078156e-8,0.0013477779846166242,-3.5216299066590065e-5,3.385250575241212e-8,0.0013482190793279586,-3.5198369687471605e-5,3.3832555330064887e-8,0.001348659613978359,-3.507162618165665e-5,3.3739577083562544e-8,0.001349043468490627,-3.485031268644354e-5,3.358395470384573e-8,0.001349327999366581,-3.4578485620740276e-5,3.3395893343763146e-8,0.0013494994616960665,-3.431622032059404e-5,3.321604676365601e-8,0.001349576900362316,-3.411840812110945e-5,3.3081186820720924e-8,0.0013496024923671088,-3.4016892922365775e-5,3.3012189592066463e-8,0.0013496246279193777,-3.401415154718749e-5,3.300992090644571e-8,0.0013496829179363164,-3.408870967312186e-5,3.305913434321514e-8,0.0013498005419856707,-3.420638364611618e-5,3.313629142245499e-8,0.001349983766265312,-3.433103577998142e-5,3.3216931742549514e-8,0.001350225503188383,-3.443167213616684e-5,3.328041116125517e-8,0.001350509870791549,-3.44857855079198e-5,3.3311987997451824e-8,0.001350816111848709,-3.44802776149318e-5,3.330325655153641e-8,0.0013511215354534733,-3.44113203272646e-5,3.325193674476666e-8,0.0013514038266242718,-3.428394324938091e-5,3.3161588903372553e-8,0.0013516432294084326,-3.41115562702498e-5,3.3041366067246576e-8,0.0013518249947347244,-3.391515061958602e-5,3.29055587983786e-8,0.0013519421489563276,-3.372159161237384e-5,3.277246672853169e-8,0.0013519981162253448,-3.35604192219653e-5,3.2662172488743894e-8,0.0013520082488663807,-3.345899609113347e-5,3.259313778399188e-8,0.0013519991491952143,-3.343655294053388e-5,3.257806735071459e-8,0.0013520049886915973,-3.349849264305731e-5,3.262004101630264e-8,0.0013520609158930905,-3.36328575909331e-5,3.2710241377374956e-8,0.0013521948074782938,-3.3810651240403614e-5,3.2828394204526694e-8,0.0013524194680195325,-3.399070247049815e-5,3.2946301667474426e-8,0.0013527275548078518,-3.412846985252045e-5,3.3033954284171145e-8,0.0013530910516223313,-3.41870260521444e-5,3.306696170857802e-8,0.0013534662186818406,-3.414758958099839e-5,3.303351712767489e-8,0.0013538036921596796,-3.401650121264336e-5,3.293885919569297e-8,0.0013540617630267778,-3.3825695437600704e-5,3.280532715743045e-8,0.0013542189655621978,-3.3625013396523797e-5,3.2666968653528377e-8,0.0013542809896239987,-3.3467679762926974e-5,3.255963827369867e-8,0.0013542783419837156,-3.3394020433318414e-5,3.251003853738814e-8,0.0013542554119995557,-3.342020697923614e-5,3.252828382153754e-8,0.0013542560140103023,-3.3536391035527796e-5,3.2606892142050424e-8,0.0013543116989025482,-3.371353007933651e-5,3.2725642792952345e-8,0.0013544365308802784,-3.391431273365121e-5,3.285910327271554e-8,0.0013546280975285543,-3.410316353858851e-5,3.2983383466057345e-8,0.0013548720539619643,-3.4252552907384106e-5,3.308026489902493e-8,0.001355147353668992,-3.43454908576762e-5,3.313870075252464e-8,0.0013554305468037433,-3.437553330264171e-5,3.315467676927687e-8,0.0013556988011802253,-3.434572357619407e-5,3.313045281129339e-8,0.0013559320038673691,-3.426735815892247e-5,3.30737806614842e-8,0.0013561145343338845,-3.415887769336406e-5,3.299724375590522e-8,0.0013562372346350193,-3.40446430953795e-5,3.291748056072256e-8,0.001356299729968249,-3.395293821719811e-5,3.285379960496967e-8,0.0013563126464800305,-3.39124616274109e-5,3.2825694374099335e-8,0.0013562986345168043,-3.394695718115785e-5,3.284908231937111e-8,0.0013562906901488832,-3.406854808973949e-5,3.2931730931658255e-8,0.0013563265580224901,-3.4271700357362895e-5,3.3069227097465745e-8,0.0013564394803830895,-3.453081024388408e-5,3.3243512234392763e-8,0.001356647830444362,-3.480395690125668e-5,3.342564568063368e-8,0.0013569477158602284,-3.504296952579012e-5,3.358281757335669e-8,0.0013573120584085639,-3.52068525793514e-5,3.368754392194241e-8,0.001357697050412798,-3.5273779767518736e-5,3.3725762172275216e-8,0.0013580538346326509,-3.524742322405932e-5,3.3700952947215904e-8,0.0013583414729187431,-3.515577457801083e-5,3.3633068996217375e-8,0.0013585373183607017,-3.504326814963739e-5,3.3552899090837633e-8,0.0013586421139425234,-3.4958781479045985e-5,3.3493719387707e-8,0.001358678685937704,-3.494290707046618e-5,3.3482624669021657e-8,0.001358684778336174,-3.501803608967189e-5,3.353396129882613e-8,0.001358702322909947,-3.518405715028354e-5,3.36466993389363e-8,0.0013587666406036992,-3.542061521536396e-5,3.380626499920978e-8,0.0013588989123856205,-3.5694495803273485e-5,3.398974496696862e-8,0.001359103663247866,-3.5969025766868755e-5,3.417229612867719e-8,0.0013593708567535968,-3.621226756590788e-5,3.4332592451649465e-8,0.0013596806793210175,-3.640207539916034e-5,3.4456072169122394e-8,0.0013600088338772479,-3.6527817297702786e-5,3.4535941490019846e-8,0.0013603309085686056,-3.6589745925869715e-5,3.4572666368770736e-8,0.0013606253906847028,-3.659727205627579e-5,3.4572817000381455e-8,0.0013608755966453268,-3.656705235731982e-5,3.45478428901892e-8,0.0013610710755603856,-3.652125748003627e-5,3.4512957394544435e-8,0.0013612090115036409,-3.648585481662091e-5,3.448596151433922e-8,0.0013612958461505,-3.648833256815448e-5,3.448560847301663e-8,0.0013613487825353768,-3.655412453139295e-5,3.452905427534737e-8,0.0013613960977975756,-3.6701245140876124e-5,3.4628141465119906e-8,0.0013614745650237811,-3.693358561190437e-5,3.4784884782548805e-8,0.0013616224205170902,-3.7235042204870165e-5,3.4987633233731027e-8,0.001361868091522445,-3.756832421090297e-5,3.521045772248526e-8,0.001362218255945228,-3.788197415238886e-5,3.541808383563176e-8,0.0013626514699812326,-3.812539193249165e-5,3.557619486093644e-8,0.001363122322234058,-3.8266165560665596e-5,3.566324383611881e-8,0.0013635754647547845,-3.830134386399334e-5,3.5678079037798024e-8,0.0013639630780626708,-3.825738313571894e-5,3.563975015298319e-8,0.001364258080357862,-3.817994201829989e-5,3.5580274568062977e-8,0.0013644589434662312,-3.811922202797349e-5,3.5534332460088205e-8,0.0013645865742663128,-3.81166924124298e-5,3.5530027944857735e-8,0.0013646762446455044,-3.819653354824757e-5,3.558310331044814e-8,0.001364767819829093,-3.8362605590993256e-5,3.569514079478911e-8,0.0013648967631197295,-3.8600238344742254e-5,3.585514627803409e-8,0.0013650874946786213,-3.888148752071901e-5,3.60434300221522e-8,0.0013653499642588421,-3.917227000116867e-5,3.62365942886353e-8,0.00136567964200512,-3.943967176457917e-5,3.6412451385441956e-8,0.0013660603709506384,-3.965784039600382e-5,3.65538578644758e-8,0.0013664688889499187,-3.981147629204727e-5,3.665089579529965e-8,0.0013668796761675812,-3.989679821734419e-5,3.6701401260529234e-8,0.0013672690955396569,-3.992052333462929e-5,3.6710241547116054e-8,0.0013676183253096337,-3.9897716306200194e-5,3.668789735721834e-8,0.0013679151464472477,-3.984932666566189e-5,3.664884493646582e-8,0.0013681550099158162,-3.979985343784534e-5,3.660997364210455e-8,0.0013683418187992174,-3.977508572660584e-5,3.658897704031485e-8,0.0013684886345164064,-3.9799531863791056e-5,3.6602481816290366e-8,0.0013686181140462686,-3.989297417404592e-5,3.6663608773571173e-8,0.0013687618136698219,-4.006569078124706e-5,3.677873040014451e-8,0.0013689567976789784,-4.031268759372785e-5,3.6943686509812775e-8,0.0013692379960220952,-4.0608958982055686e-5,3.714077674900414e-8,0.0013696263976024602,-4.0909688045915914e-5,3.733908018595111e-8,0.001370116858706226,-4.115943735403728e-5,3.7500783826076915e-8,0.0013706730192843547,-4.131030892561659e-5,3.759353716751259e-8,0.0013712357655380756,-4.1341651354543865e-5,3.760387092264407e-8,0.001371743681640421,-4.1269733274189294e-5,3.754378869036469e-8,0.0013721549303818486,-4.114093707006044e-5,3.744600118910848e-8,0.0013724590038156602,-4.1013018078885606e-5,3.7350822712677154e-8,0.0013726746583584263,-4.0935524588789915e-5,3.7292433498253575e-8,0.0013728388253621247,-4.093780361015353e-5,3.7290504667023286e-8,0.0013729936653109317,-4.102619609853645e-5,3.7348411588796894e-8,0.001373176359782013,-4.118762655376452e-5,3.745605098886693e-8,0.0013734130133102524,-4.139607981819826e-5,3.759467361926248e-8,0.0013737161837680623,-4.161950138762874e-5,3.7741869452387925e-8,0.0013740850229568907,-4.182594710895547e-5,3.787581954548767e-8,0.0013745072421834012,-4.198858396882682e-5,3.797857502949695e-8,0.0013749623837124778,-4.208926335925624e-5,3.803827857381001e-8,0.0013754258276343432,-4.2120407717748035e-5,3.8050265155743136e-8,0.001375872892622539,-4.2085198307853355e-5,3.801710263943968e-8,0.001376282469925798,-4.199628974034897e-5,3.7947728565110885e-8,0.0013766397572874227,-4.187345120748918e-5,3.7855899666402347e-8,0.0013769379150291574,-4.1740698791756187e-5,3.775826686919178e-8,0.0013771788132807986,-4.162339046388268e-5,3.76723488673647e-8,0.0013773731537905993,-4.154540420571933e-5,3.7614493141915814e-8,0.0013775401104706387,-4.1526264618012495e-5,3.759779228022895e-8,0.0013777064032593797,-4.157796597586423e-5,3.762987031680914e-8,0.001377904267471179,-4.170125910920436e-5,3.771044184184231e-8,0.0013781672206391812,-4.188175848661827e-5,3.78288749397831e-8,0.00137852256618738,-4.2087548328483725e-5,3.7962807628071696e-8,0.0013789809169083302,-4.2271422389212076e-5,3.807982991820045e-8,0.0013795260580142504,-4.238109909941585e-5,3.8144447194615674e-8,0.0013801120459359865,-4.237742637005507e-5,3.813041208095439e-8,0.0013806741263976,-4.225334424947585e-5,3.8033625865393774e-8,0.0013811520519300435,-4.2041187655938626e-5,3.787713159675286e-8,0.0013815136370865081,-4.180098864064637e-5,3.7703002181980215e-8,0.0013817644462791729,-4.159593522969593e-5,3.755522195444356e-8,0.0013819398040921613,-4.146995772891535e-5,3.7463973571636786e-8,0.0013820873195676013,-4.143814444971667e-5,3.74389528223684e-8,0.0013822508297504756,-4.1489856674521627e-5,3.747173694159376e-8,0.0013824612018183504,-4.159808318168086e-5,3.7542636676095634e-8,0.001382733677333939,-4.172918004101423e-5,3.76277743218216e-8,0.0013830692173663335,-4.185025959459586e-5,3.7704340994960595e-8,0.0013834575067367659,-4.193387127219509e-5,3.7753754368892116e-8,0.00138388030970731,-4.196070426809343e-5,3.776329962305264e-8,0.0013843148322871465,-4.1921028124019695e-5,3.7726878625517075e-8,0.0013847370777409624,-4.181512286564115e-5,3.7645150528966244e-8,0.0013851250900450299,-4.165273271465304e-5,3.752512539985943e-8,0.0013854619058602147,-4.145156074913463e-5,3.737919056711855e-8,0.0013857379458243554,-4.123483834305219e-5,3.722351350041851e-8,0.0013859525067954938,-4.1028195536964666e-5,3.707590164867331e-8,0.001386114186987945,-4.08562465832129e-5,3.6953376917189425e-8,0.0013862402914967716,-4.0739217947163935e-5,3.6869727504020365e-8,0.0013863552819137583,-4.068981038566365e-5,3.683325080139284e-8,0.0013864882812566375,-4.071045407698197e-5,3.684488191793497e-8,0.0013866695093654466,-4.0791084850707254e-5,3.689683217641563e-8,0.0013869252570760705,-4.0907845082072896e-5,3.6971967000828836e-8,0.0013872711358115565,-4.102392437415202e-5,3.7044638632372434e-8,0.0013877044103900269,-4.10944872644231e-5,3.708418444800822e-8,0.0013881982022425643,-4.107730918647336e-5,3.70621554354846e-8,0.0013887024507251455,-4.094823201885367e-5,3.696274535980045e-8,0.0013891560996636264,-4.071545369969397e-5,3.6792453536201996e-8,0.0013895088976246747,-4.042264374578624e-5,3.658214577314118e-8,0.0013897421255975183,-4.013475017712353e-5,3.637717862062872e-8,0.0013898751358086116,-3.99123909946508e-5,3.621955119697095e-8,0.0013899539157585976,-3.97898760399196e-5,3.613256495667892e-8,0.0013900305358917047,-3.976825529054825e-5,3.611605869920365e-8,0.0013901459897183817,-3.982280938552323e-5,3.615187595826213e-8,0.001390322583927315,-3.9916483926864295e-5,3.621354110721034e-8,0.0013905644815372748,-4.00116379826972e-5,3.627465691377648e-8,0.001390862196549241,-4.007719389834769e-5,3.6313891042696686e-8,0.0013911977272878053,-4.009168854677753e-5,3.631692015857626e-8,0.001391548803289706,-4.004388985804637e-5,3.627660019245447e-8,0.0013918921108757572,-3.9932383942914886e-5,3.619246897144912e-8,0.001392205925877442,-3.976474847087717e-5,3.607009012040189e-8,0.001392472481833256,-3.9556371616133894e-5,3.592027726302581e-8,0.0013926801795685095,-3.932876436594814e-5,3.5758025153182566e-8,0.0013928255206943443,-3.910712261197275e-5,3.5600891948591315e-8,0.0013929143574365078,-3.891704325009154e-5,3.546670424830646e-8,0.0013929619662561058,-3.878067864465175e-5,3.5370785800753655e-8,0.0013929916634681091,-3.8712865216251155e-5,3.5323145245009847e-8,0.0013930319212074739,-3.871783709874851e-5,3.532613964822986e-8,0.0013931121650108214,-3.878718027241075e-5,3.537313617747967e-8,0.0013932576761824852,-3.889956926863257e-5,3.544855030305457e-8,0.0013934841205019005,-3.902264562679513e-5,3.5529430896809445e-8,0.0013937923389470475,-3.911747336501126e-5,3.558876680690813e-8,0.0013941645951322254,-3.9146037401005566e-5,3.560072677257016e-8,0.0013945643433518572,-3.908149684330105e-5,3.554760976148454e-8,0.0013949419740809537,-3.8919080012482775e-5,3.54271205202408e-8,0.0013952477277678645,-3.868301987054237e-5,3.525691407233159e-8,0.001395448996586115,-3.842366805801884e-5,3.507242835859129e-8,0.0013955441184541493,-3.8202198743737096e-5,3.491619511363628e-8,0.001395563841894682,-3.806835542580855e-5,3.482237329132881e-8,0.0013955584098649994,-3.804297850225461e-5,3.4804676331452736e-8,0.0013955778157443777,-3.8114400232592614e-5,3.4854056156277526e-8,0.0013956561830292,-3.8248114880291454e-5,3.4945709067619815e-8,0.0013958061096767589,-3.840169374270801e-5,3.504970300817749e-8,0.001396021525706078,-3.853707477095065e-5,3.513962678304474e-8,0.0013962843041433993,-3.8627076516026636e-5,3.5197026880596114e-8,0.0013965707576988314,-3.865699570879773e-5,3.521229439063478e-8,0.0013968563725718281,-3.8623536025609064e-5,3.5183688298750485e-8,0.0013971187911648243,-3.8532907044979155e-5,3.511587978476073e-8,0.001397339741657006,-3.8398963032655006e-5,3.501866053362015e-8,0.0013975065707011172,-3.824149273866268e-5,3.490584928664414e-8,0.0013976137214529206,-3.808437691328442e-5,3.47941124837482e-8,0.0013976641337538325,-3.795316224892923e-5,3.470130668547223e-8,0.0013976701313359334,-3.787171824233571e-5,3.4644083108582145e-8,0.0013976530803277948,-3.785809777299285e-5,3.4634877223998395e-8,0.0013976411745630901,-3.792027581554576e-5,3.467883721971932e-8,0.0013976651171231898,-3.8052873706371765e-5,3.477154552196402e-8,0.001397752138213877,-3.8236151892252456e-5,3.489846164729002e-8,0.0013979195447783234,-3.8438219455829296e-5,3.5036710195449224e-8,0.0013981694399458889,-3.862056128580171e-5,3.515918741519236e-8,0.001398486147697437,-3.874608834560939e-5,3.524031957876636e-8,0.0013988374531938928,-3.878827062153085e-5,3.526239348503685e-8,0.001399180229735303,-3.873936055813441e-5,3.5221074317918304e-8,0.0013994701906148062,-3.861521125226919e-5,3.5128449985403174e-8,0.0013996740998213511,-3.845410205611195e-5,3.501191367250836e-8,0.0013997808979702491,-3.830798334251088e-5,3.490787420794603e-8,0.0013998068841861602,-3.822734029112152e-5,3.485117466616385e-8,0.0013997912690781416,-3.824484084870901e-5,3.486381492238321e-8,0.001399782875381604,-3.836511152067367e-5,3.494805808686753e-8,0.0013998239209614296,-3.856545057793629e-5,3.508720829151086e-8,0.0013999383452429608,-3.880618248898522e-5,3.5253069111989446e-8,0.001400128687982977,-3.9044513556967366e-5,3.5415721677933286e-8,0.0014003803140351105,-3.924559928935504e-5,3.555119946742358e-8,0.0014006688652410718,-3.938796884383357e-5,3.564509648433299e-8,0.0014009672459019793,-3.946401158692379e-5,3.569268613464028e-8,0.0014012504631784645,-3.9477773714654874e-5,3.5697219627372335e-8,0.0014014983378744935,-3.9442025791079544e-5,3.566783351875651e-8,0.0014016968485090753,-3.937562123845998e-5,3.561776933093947e-8,0.0014018389311078144,-3.930135009856592e-5,3.556297869454529e-8,0.0014019252611881805,-3.924395351028988e-5,3.552079791655267e-8,0.0014019650674987158,-3.922771502573723e-5,3.550823547292913e-8,0.0014019765254487317,-3.927316184126799e-5,3.5539561321083074e-8,0.0014019859072127623,-3.939286678870541e-5,3.562326047613582e-8,0.0014020245683540645,-3.9587049026522654e-5,3.57589225433063e-8,0.0014021232793080098,-3.984050350448809e-5,3.5935183683834784e-8,0.0014023045619820167,-4.0122876368864325e-5,3.613011664758931e-8,0.001402575188517273,-4.0393711578013267e-5,3.631499515737404e-8,0.0014029218430838034,-4.0611873294491905e-5,3.6461068646827724e-8,0.0014033123169753285,-4.074679499372091e-5,3.654749216388009e-8,0.0014037026283073234,-4.078780138232347e-5,3.6567752091281347e-8,0.0014040481592061073,-4.074819558912667e-5,3.653228462529379e-8,0.0014043154629272954,-4.0662606574106574e-5,3.646629348386904e-8,0.0014044912857379814,-4.057825582912705e-5,3.640333363998543e-8,0.001404586199481951,-4.054249152292174e-5,3.6376420565956945E-08,0.0014046315916832204,-4.059001163717845e-5,3.640913312668297e-8,0.0014046706036646942,-4.073363552405963e-5,3.650939734711049e-8,0.0014047457709805932,-4.096173679938644e-5,3.6668033280187714e-8,0.0014048875975041877,-4.1243138982900314e-5,3.686248986601918e-8,0.0014051079231287907,-4.153727189609017e-5,3.706412048229687e-8,0.0014053996891925462,-4.180543919169627e-5,3.724605723962737e-8,0.0014057418851642401,-4.201928520354164e-5,3.7388982979293707e-8,0.0014061067325829505,-4.216459310863377e-5,3.748357386154352e-8,0.0014064662792454632,-4.2240904034702006e-5,3.75300453375767e-8,0.001406796935332708,-4.225873123662221e-5,3.753610982343233e-8,0.0014070818711074016,-4.223609237701761e-5,3.7514565091294765e-8,0.0014073119283782146,-4.219538055815336e-5,3.748118402098386e-8,0.0014074858454996213,-4.216086923191445e-5,3.7453036902211475e-8,0.0014076103837110468,-4.215657537536124e-5,3.744699428145286e-8,0.001407700482867457,-4.2203893189522455e-5,3.7477990165415446e-8,0.0014077790394113716,-4.231848459825597e-5,3.755673767593618e-8,0.0014078754676845311,-4.250633958081457e-5,3.768691664581742e-8,0.0014080219967517041,-4.275967059593405e-5,3.7862358742113034e-8,0.0014082470158322466,-4.305438268393406e-5,3.8065444478173206e-8,0.0014085662107764442,-4.3351709842482535e-5,3.826846229183665e-8,0.0014089744868300872,-4.360598119993927e-5,3.843922404533621e-8,0.0014094431536157055,-4.377765422595991e-5,3.8550288702544655e-8,0.0014099256069116926,-4.384699363489847e-5,3.8588547143931624e-8,0.001410370621965012,-4.3822017616625005e-5,3.8560684416864574e-8,0.0014107379906385569,-4.373660777036701e-5,3.8491618344667396e-8,0.001411009964557524,-4.363969764258664e-5,3.841657689536917e-8,0.0014111946000197385,-4.3580512043394426e-5,3.8370420063415034e-8,0.0014113211867777273,-4.359545857298468e-5,3.837829828573306e-8,0.0014114306461733982,-4.3700232323209964e-5,3.8450239351540594e-8,0.001411564408632792,-4.388818610139138e-5,3.858035161105931e-8,0.0014117547305501578,-4.4134232812283986e-5,3.874997182226532e-8,0.0014120184750084578,-4.440248212920195e-5,3.8933324817321076e-8,0.0014123552829552618,-4.4655279826922307e-5,3.910396017989396e-8,0.0014127498958597165,-4.4861304314633954e-5,3.924032595412258e-8,0.0014131773611926266,-4.500092974261656e-5,3.932930729967511e-8,0.0014136092759243295,-4.5068124233728125e-5,3.9367328715653395e-8,0.001414019350464863,-4.50693223258045e-5,3.9359414083827914e-8,0.001414387280570928,-4.5020436860496765e-5,3.931705416718012e-8,0.0014147007530842784,-4.4943253683445574e-5,3.925572649703533e-8,0.0014149560140847756,-4.486209219785531e-5,3.919262101512192e-8,0.0014151576551419522,-4.4801074437002196e-5,3.914474595500056e-8,0.001415318136201093,-4.478183557739158e-5,3.912726793698288e-8,0.0014154572003696824,-4.482122856836196e-5,3.9151802563573214e-8,0.0014156009001108517,-4.492859041749618e-5,3.9224425325897754e-8,0.0014157795097893533,-4.5102449376290346e-5,3.93433918158505e-8,0.0014160233109937125,-4.532727500167816e-5,3.94970098303655e-8,0.0014163555567608258,-4.557201265798743e-5,3.96628298780135e-8,0.0014167833913719533,-4.579313198730899e-5,3.980996986060289e-8,0.0014172901012929602,-4.594441145983626e-5,3.990606550755613e-8,0.0014178341748209257,-4.599235373069634e-5,3.9928088314464635e-8,0.0014183591944381855,-4.593096157451421e-5,3.987268351609923e-8,0.0014188124373602864,-4.5787093578951006e-5,3.975984439233655e-8,0.001419163393834719,-4.561185313227637e-5,3.9626636645945325e-8,0.0014194126920989531,-4.5462152420401115e-5,3.951386849890556e-8,0.0014195882504336435,-4.5382171232237414e-5,3.945270542300551e-8,0.0014197329253106763,-4.539256577330823e-5,3.9456983564371725e-8,0.0014198906236090039,-4.548923231726588e-5,3.952257759491028e-8,0.001420095771986858,-4.5648857684138e-5,3.963175850856077e-8,0.0014203677362581296,-4.5837385340540104e-5,3.975959325884974e-8,0.0014207096597213865,-4.601850510949015e-5,3.988016811818957e-8,0.0014211104809135435,-4.616063637726872e-5,3.9971495331700885e-8,0.0014215489510336552,-4.624177480943514e-5,4.001871904464167e-8,0.0014219986351035052,-4.6251956591088596e-5,4.0015574979438314e-8,0.0014224329376801295,-4.619339291718908e-5,3.996426457805398e-8,0.001422829353219783,-4.607871301987465e-5,3.9874120697775513e-8,0.0014231724530763103,-4.592798447099774e-5,3.9759530620922137e-8,0.0014234554326269762,-4.57652124151591e-5,3.9637548056577846e-8,0.0014236803642659415,-4.561496504861187e-5,3.952556952558051e-8,0.0014238575838519927,-4.5499512314608026e-5,3.943929979142778e-8,0.0014240046262760098,-4.543644346492547e-5,3.9390987574810174e-8,0.0014241448474782898,-4.543650107068099e-5,3.938780661528568e-8,0.0014243055769598875,-4.55014025622324e-5,3.943030334635427e-8,0.0014245153230789524,-4.562160361393435e-5,3.951093333991738e-8,0.0014247992679477627,-4.5774516750711624e-5,3.9613026810845106e-8,0.0014251725776000539,-4.592471607435623e-5,3.97111673534239e-8,0.0014256324150758487,-4.6028499832087334e-5,3.9774539919194244e-8,0.0014261519278773282,-4.604466942670059e-5,3.97745103455597e-8,0.0014266816106519023,-4.595018557846401e-5,3.9695557904295956e-8,0.0014271621257017225,-4.575388705227969e-5,3.9544859389287236e-8,0.0014275457311608392,-4.549845458283125e-5,3.935358890200528e-8,0.001427815306107102,-4.524605002091276e-5,3.916657774531871e-8,0.0014279894860666584,-4.505443172790813e-5,3.9025101307670685e-8,0.001428111845943068,-4.4957151971777735e-5,3.895259664595886e-8,0.0014282324457039898,-4.4956997998443266e-5,3.8950037799349965e-8,0.0014283921152246375,-4.5031813061035744e-5,3.9000405529012745e-8,0.001428614503799861,-4.514594302658012e-5,3.907728510090153e-8,0.0014289052039444517,-4.526123102336767e-5,3.915303573565249e-8,0.0014292549887714064,-4.5344780633131716e-5,3.9204408290150735e-8,0.0014296445351593818,-4.537328317671618e-5,3.921546485399938e-8,0.0014300491927835234,-4.533479827914965e-5,3.917854634066426e-8,0.0014304433224275918,-4.522881772940035e-5,3.909403114722347e-8,0.001430804033341362,-4.5065037434135e-5,3.896929881664266e-8,0.001431114134170649,-4.486114602985143e-5,3.8817147411994384e-8,0.001431364173594574,-4.463995090524377e-5,3.8653843304944497e-8,0.001431553477665542,-4.4426110315797016e-5,3.8496905092415785e-8,0.0014316900992935974,-4.4242818950062476e-5,3.8362786478080485e-8,0.0014317897941557708,-4.410886020323244e-5,3.8264727869013804e-8,0.0014318743099349634,-4.403620954390451e-5,3.8210949087253464e-8,0.0014319691565770345,-4.402814004867514e-5,3.8203232744223565e-8,0.0014321008288139233,-4.407781633250867e-5,3.823596615193787e-8,0.0014322933132242908,-4.4167493057523215e-5,3.829575167824442e-8,0.0014325635783059797,-4.426874231918825e-5,3.8361828243839776e-8,0.0014329159984174987,-4.4344806916418694e-5,3.8407962919808685e-8,0.0014333367610415697,-4.435666435111393e-5,3.840682171688473e-8,0.0014337910720800594,-4.4273697098380086e-5,3.833742616530986e-8,0.0014342273731959762,-4.408716016137151e-5,3.819450047412489e-8,0.0014345914434781843,-4.382020957560829e-5,3.79954130449742e-8,0.0014348470970175808,-4.352582193219588e-5,3.7778581483576264e-8,0.0014349925697684392,-4.326902649537983e-5,3.759070188014273e-8,0.0014350613489107376,-4.3101343714786775e-5,3.746837044387351e-8,0.0014351064354383872,-4.304237393549526e-5,3.74248666578265e-8,0.0014351786308693037,-4.3077895175319485e-5,3.744893988723652e-8,0.001435311120145527,-4.3171511316731736e-5,3.751349253798805e-8,0.001435514983638263,-4.3280124103506245e-5,3.7587031889058094e-8,0.0014357827442222175,-4.33657644870084e-5,3.764234602726513e-8,0.0014360950176135047,-4.340168328161423e-5,3.766080981694061e-8,0.0014364268982985113,-4.3373918763642415e-5,3.7633249662091946e-8,0.0014367527843651797,-4.328039694830718e-5,3.755898187846603e-8,0.0014370497401466067,-4.312909776010434e-5,3.7444270646673757e-8,0.0014372999251545048,-4.29358844997081e-5,3.730070931627148e-8,0.0014374923724849156,-4.2722063680720855e-5,3.71435536648068e-8,0.0014376241618117747,-4.251167408721932e-5,3.6989920136254e-8,0.0014377009262072043,-4.2328490779715396e-5,3.6856738666764285e-8,0.0014377364788064743,-4.2192837572660376e-5,3.675846863045126e-8,0.0014377513692969844,-4.2118585485798534e-5,3.6704856042820815e-8,0.001437770451447845,-4.2110786884528316e-5,3.669912913273134e-8,0.0014378196981251372,-4.21642244916051e-5,3.6736925449717485e-8,0.0014379224790505686,-4.226308798281828e-5,3.680616377621557e-8,0.0014380955334853483,-4.238200534606743e-5,3.6888012155040675e-8,0.0014383449114242503,-4.2488670304332985e-5,3.6959034935254815e-8,0.0014386623333420816,-4.254848883471872e-5,3.69946922542799e-8,0.001439023053413255,-4.253172746547254e-5,3.6974437223496824e-8,0.00143938722951177,-4.242284653717159e-5,3.688818009449981e-8,0.001439707137154768,-4.222971419566938e-5,3.674257304428873e-8,0.0014399409659193428,-4.198781671588203e-5,3.656376280190634e-8,0.001440069459918548,-4.1753765044836575e-5,3.6392606119182155e-8,0.001440106597622063,-4.158679104094984e-5,3.6271381464065536e-8,0.0014400959148385573,-4.1525832600832144e-5,3.622739349459521e-8,0.0014400927711180566,-4.15752438414865e-5,3.626283531393904e-8,0.0014401429180055368,-4.170699406909172e-5,3.635659541946491e-8,0.0014402691460889587,-4.1875615871244114e-5,3.6475292110604114e-8,0.0014404700687453444,-4.20353985030447e-5,3.658586574851633e-8,0.0014407270427852904,-4.215187194132588e-5,3.666388371140973e-8,0.001441013130719309,-4.220595818615349e-5,3.6696359973947585e-8,0.0014413003263376396,-4.219308157288958e-5,3.6680826446642095e-8,0.001441564033217401,-4.212012924590863e-5,3.662287749152233e-8,0.0014417853809006085,-4.2002181831792545e-5,3.653368462176073e-8,0.0014419523959797523,-4.185969337729201e-5,3.642799751790315e-8,0.0014420606999227586,-4.171600435622608e-5,3.632248964966348e-8,0.0014421139198980406,-4.159487387718513e-5,3.623411674528073e-8,0.0014421237028206181,-4.151777055500738e-5,3.6178218018737015e-8,0.0014421089934266833,-4.150085444996026e-5,3.6166287820635e-8,0.0014420941576250958,-4.155198804294638e-5,3.620370937664565e-8,0.0014421057972856064,-4.166845338362705e-5,3.628802792965738e-8,0.0014421685219863218,-4.183607922736202e-5,3.6408352528175015e-8,0.0014423002757643633,-4.203032172674412e-5,3.65463031098458e-8,0.0014425080608542666,-4.22195472333642e-5,3.667862994977846e-8,0.001442784991572208,-4.237031728117714e-5,3.6781252110025435e-8,0.0014431095090614871,-4.245409762385614e-5,3.6834180674033206e-8,0.0014434474962299161,-4.245454297942441e-5,3.682664986919906e-8,0.0014437579597159325,-4.237398291446551e-5,3.676149381934002e-8,0.0014440024218877274,-4.2236870836770005e-5,3.665727124065034e-8,0.0014441566692500326,-4.208735480065546e-5,3.654623465415403e-8,0.0014442210777839057,-4.197894413823149e-5,3.646678154580181e-8,0.0014442238639085503,-4.1957657259825583e-5,3.6451395741224957e-8,0.001444213177633174,-4.204514955028633e-5,3.6514704020701185e-8,0.0014442400148779796,-4.2230738483301597e-5,3.664799820937176e-8,0.001444340327612597,-4.2477002171248194e-5,3.6823531208232587E-08,0.0014445252831045401,-4.273521305190709e-5,3.700583739358809e-8,0.001444782633063003,-4.296167146369278e-5,3.716358146341754e-8,0.0014450854085491184,-4.312785702347721e-5,3.727679374827056e-8,0.001445401951167018,-4.322288651739154e-5,3.733842340885731e-8,0.001445703365975638,-4.3250813436262515e-5,3.735212787958807e-8,0.0014459674945798882,-4.32260760357198e-5,3.73288004390637e-8,0.001446180300220262,-4.316923443732345e-5,3.728344873718978e-8,0.0014463359582635035,-4.310370309668452e-5,3.723292189167686e-8,0.0014464365687389773,-4.305328850624032e-5,3.719426687269874e-8,0.0014464918465855834,-4.304002473972689e-5,3.718325365119318e-8,0.0014465186728166825,-4.308181819575483e-5,3.721266618215463e-8,0.0014465400355141305,-4.3189687170519945e-5,3.7290221487352145e-8,0.0014465827531187007,-4.336489798552785e-5,3.741640893771544e-8,0.0014466736056468219,-4.3596841039752464e-5,3.758294229173246e-8,0.0014468340922974643,-4.386279199894946e-5,3.77726972029659e-8,0.0014470748301542683,-4.413057535440872e-5,3.7961848327240886e-8,0.0014473912922101449,-4.4364408720834884e-5,3.812432810558878e-8,0.0014477626657607462,-4.453297875666711e-5,3.8237820661230854e-8,0.001448154854433801,-4.461771816489685e-5,3.828974037644961e-8,0.0014485274030723117,-4.461890202134063e-5,3.8281447589952853e-8,0.0014488429638407447,-4.455758179245559e-5,3.822931479912126e-8,0.001449077126957026,-4.447225398864734e-5,3.816195570741389e-8,0.001449226023125882,-4.441032020245069e-5,3.8113794316332475e-8,0.0014493090755652274,-4.441579020404974e-5,3.8116125833806295e-8,0.001449364947092221,-4.451633994090186e-5,3.818794133287042e-8,0.0014494407057380814,-4.471426477041007e-5,3.832972073058778e-8,0.0014495774144823556,-4.498555350055323e-5,3.8523117853081915e-8,0.0014497978450341655,-4.5288121537755064e-5,3.873716648698755e-8,0.001450101396289851,-4.557563857325436e-5,3.89383696430426e-8,0.0014504674700356046,-4.581077178440381e-5,3.9100206897818924e-8,0.001450864329811925,-4.59729347684755e-5,3.920855010190983e-8,0.001451258767715561,-4.605934108050844e-5,3.92621859121156e-8,0.001451623153623208,-4.608136827590191e-5,3.926997648012008e-8,0.0014519388956488832,-4.605924560935e-5,3.9246910208725725e-8,0.0014521971379447417,-4.6017229535460886e-5,3.9210629613232204e-8,0.0014523980389310705,-4.5980057149587095e-5,3.917896492879653e-8,0.0014525496603379358,-4.597051953376308e-5,3.9168276920308264e-8,0.0014526669574361673,-4.600759430739576e-5,3.9192135619664394e-8,0.0014527708281076104,-4.610453020282936e-5,3.9259884840940946e-8,0.0014528867245701964,-4.626654176388048e-5,3.9374895639106777e-8,0.0014530421048613528,-4.648831416903428e-5,3.9532731387203335e-8,0.0014532621468013511,-4.6752190201937326e-5,3.971990995005398e-8,0.0014535637916342824,-4.7028515568426274e-5,3.9914326393312656e-8,0.0014539493947660874,-4.727971460801391e-5,4.008841173852169e-8,0.0014544025921314587,-4.7468597955633217e-5,4.021531201044032e-8,0.0014548892922685616,-4.7569142347220584e-5,4.027675511472258e-8,0.0014553650558184153,-4.7575810436338764e-5,4.026972977663235e-8,0.0014557870851216873,-4.750717265528638e-5,4.020889782847651e-8,0.0014561265502366723,-4.7401772022354576e-5,4.012327246018735e-8,0.0014563767220609832,-4.730757137609055e-5,4.004821937536077e-8,0.00145655435776092,-4.726880621379515e-5,4.001569186801683e-8,0.001456694463586125,-4.73144514864003e-5,4.004587627083997e-8,0.0014568404770532691,-4.7451327393656046e-5,4.0142460997834714e-8,0.0014570327641523222,-4.7663290283813975e-5,4.029246947753112e-8,0.001457298519145466,-4.7916441311999795e-5,4.047043105356473e-8,0.0014576457793189451,-4.816871716330359e-5,4.064555627563837e-8,0.0014580630692166065,-4.8380870254886153e-5,4.07896946312839e-8,0.0014585242916217804,-4.85254475628263e-5,4.0883660976549706e-8,0.0014589966823086494,-4.859135992178545e-5,4.092028278391199e-8,0.0014594488895383127,-4.8583561201735886e-5,4.0903922552317477e-8,0.0014598568660654338,-4.851917902858856e-5,4.084752107398645e-8,0.001460206718017994,-4.8422238333548e-5,4.0768741953613706e-8,0.0014604949812930131,-4.831876578154884e-5,4.068648768877478e-8,0.0014607274013576004,-4.823314160900414e-5,4.0618350180221016e-8,0.0014609172150457537,-4.8185712318530414e-5,4.057893429465176e-8,0.001461083502746424,-4.8191179258434105E-05,4.0578670798416085e-8,0.001461249671904525,-4.82571706133708e-5,4.0622715345642995e-8,0.001461441693727446,-4.838261929000545e-5,4.07097296081658e-8,0.0014616854233344243,-4.8556014057686534e-5,4.083066061163576e-8,0.0014620023267894015,-4.8754249269082786e-5,4.0968058990523775e-8,0.0014624034953483796,-4.894358809285292e-5,4.109698020827211e-8,0.0014628831941533296,-4.908464338861261e-5,4.118875936509696e-8,0.0014634150433660768,-4.914226299762998e-5,4.121824393937142e-8,0.0014639548020531532,-4.9098224861191336e-5,4.117296927439143e-8,0.001464451637979818,-4.8961091183785824e-5,4.106020733296679e-8,0.0014648646915946838,-4.8766820370606e-5,4.090722801199529e-8,0.0014651772883869003,-4.8568009313809076e-5,4.075319349404685e-8,0.0014654017214941388,-4.8416426777365386e-5,4.063612262558724e-8,0.0014655731149098806,-4.834715390556542e-5,4.05811408271586e-8,0.0014657366598345033,-4.8370472978448067e-5,4.0594648027202523e-8,0.0014659342958094506,-4.847253437725393e-5,4.066516335293664e-8,0.0014661950114605521,-4.862215666828612e-5,4.076876008564538e-8,0.0014665301910791108,-4.8780249807602064e-5,4.0876316291687736e-8,0.0014669336173157724,-4.8909088442915184e-5,4.096041061837196e-8,0.0014673849869394323,-4.89797010783182e-5,4.10005813588427e-8,0.0014678556191269404,-4.8976435201010984e-5,4.0986359543432826e-8,0.0014683149714162325,-4.889830880085964e-5,4.091793502517985e-8,0.0014687365529222206,-4.875735290426732e-5,4.080472681276175e-8,0.0014691021142846357,-4.857481423921316e-5,4.0662543710692137e-8,0.0014694036337962362,-4.8376450354823765e-5,4.0510213167388694e-8,0.0014696432745798936,-4.8188046898087444e-5,4.0366429937764576e-8,0.0014698319277800106,-4.803190530328035e-5,4.0247286006004545e-8,0.0014699871102827962,-4.7924526915939426e-5,4.0164595796703556e-8,0.0014701307848855516,-4.787522027490336e-5,4.012482396092963e-8,0.0014702872622128149,-4.788517195205734e-5,4.012834089633514e-8,0.0014704809975428358,-4.794666693736669e-5,4.0168855709075365e-8,0.0014707338344027386,-4.804244009905834e-5,4.0233062784634995e-8,0.0014710611213139102,-4.814566107532364e-5,4.030084085232558e-8,0.0014714665413726273,-4.822181569590968e-5,4.034683134470572e-8,0.001471936732554558,-4.823419676772928e-5,4.0344537351810816e-8,0.0014724385787785134,-4.815393883152968e-5,4.02735824939934e-8,0.0014729232921461939,-4.7972708991935915e-5,4.012881131104992e-8,0.001473339733380658,-4.771194684085152e-5,3.99268721108642e-8,0.0014736534482333627,-4.7420811459529796e-5,3.97045678271898e-8,0.0014738614631978186,-4.716016424666695e-5,3.9506949528936975e-8,0.0014739933492919856,-4.697982067329245e-5,3.937043540172194e-8,0.0014740979744279096,-4.690167112469379e-5,3.931032980142313e-8,0.0014742246024554207,-4.691644256644111e-5,3.9318604552850936e-8,0.0014744082651071803,-4.69922299640802e-5,3.9370563974310175e-8,0.0014746637140043946,-4.708756851895923e-5,3.943489870131204e-8,0.0014749866046875014,-4.7162958123676244e-5,3.948243157993727e-8,0.001475358543065385,-4.71883294842356e-5,3.949159654624633e-8,0.001475753210166725,-4.714652817698946e-5,3.945074236392933e-8,0.001476142078096254,-4.7033888847950614e-5,3.9358189832320374e-8,0.0014764992123982724,-4.685887934392134e-5,3.9220928510260014e-8,0.0014768049713061416,-4.663938791887539e-5,3.905248086942313e-8,0.001477048391317066,-4.639911917690382e-5,3.8870289051615004e-8,0.0014772281442441146,-4.61636413222774e-5,3.86929540003015e-8,0.0014773521218631534,-4.595660324837137e-5,3.8537604231317574e-8,0.0014774358574483667,-4.579659133441228e-5,3.841765492707048e-8,0.0014775001956065402,-4.569496823083304e-5,3.8341186816552856e-8,0.0014775686820781154,-4.565470129067433e-5,3.830999686167372e-8,0.0014776649243166784,-4.566994456347111e-5,3.8319233095593914e-8,0.0014778099359220231,-4.5726192560117234e-5,3.83575570353092e-8,0.0014780193244124584,-4.580097117160524e-5,3.840782891730723e-8,0.0014783000450939625,-4.5865328797617776e-5,3.8448445201550915e-8,0.0014786467079729625,-4.588696439857752e-5,3.845582251437362e-8,0.0014790384080720245,-4.583611242343526e-5,3.840873944588172e-8,0.0014794383527260398,-4.56945594107753e-5,3.82947864626867e-8,0.001479799398450005,-4.5465999161076066e-5,3.811769435150879e-8,0.0014800774121277783,-4.518250806512075e-5,3.790185132520664e-8,0.0014802492942168032,-4.489995809258601e-5,3.768879845012064e-8,0.0014803258879004637,-4.467961171000656e-5,3.7523621216932424e-8,0.0014803496588216847,-4.456364916372832e-5,3.7436882425543227E-08,0.0014803767789849922,-4.455914717389837e-5,3.743285124826617e-8,0.00148045471663273,-4.463944669785187e-5,3.749072374826842e-8,0.0014806079903739232,-4.4759080332929866e-5,3.757599995374444e-8,0.0014808363575325631,-4.4871298219932226e-5,3.7653765328709984e-8,0.0014811213748755097,-4.49400791113898e-5,3.7697698950566665e-8,0.0014814353063795221,-4.494494148911797e-5,3.769349125262831e-8,0.0014817486607833878,-4.488064489949951e-5,3.7638296039217246e-8,0.0014820352591590176,-4.475444899156155e-5,3.75383511170801e-8,0.001482275222988769,-4.458271568201399e-5,3.740624045556785e-8,0.0014824566343186552,-4.438752806725547e-5,3.7258364186440963e-8,0.0014825762933425046,-4.41933973514123e-5,3.711263205430016e-8,0.0014826396781233982,-4.402407385189993e-5,3.698628868785702e-8,0.0014826601038704105,-4.3899537486014864e-5,3.689381745950238e-8,0.0014826570290835308,-4.3833355408042506e-5,3.684500249109746e-8,0.0014826535665252642,-4.383076384824262e-5,3.684342893133268e-8,0.0014826734964349505,-4.388776027353641e-5,3.688571137475423e-8,0.0014827381250709867,-4.3991250197185465e-5,3.696157870415823e-8,0.0014828632277558774,-4.4120225732295084e-5,3.7054853705114773e-8,0.0014830562790585913,-4.424796254416029e-5,3.7145299091021524e-8,0.001483314114902658,-4.4345226853738956e-5,3.721123064884487e-8,0.0014836212427355765,-4.438471351759688e-5,3.723292906691934e-8,0.0014839495880320053,-4.434704884177869e-5,3.719700534277648e-8,0.0014842612053440878,-4.4227969750309367e-5,3.7101437221589655e-8,0.001484515578411819,-4.4044706083483356e-5,3.6959930289161086e-8,0.0014846818321571568,-4.383767436946015e-5,3.6802887599284104e-8,0.001484752665298912,-4.366282494601175e-5,3.6671649941767425e-8,0.0014847523079773632,-4.357345179251354e-5,3.6605110282143873e-8,0.0014847306685902028,-4.3598461730291396e-5,3.662379044416523e-8,0.0014847439416985908,-4.372996532663204e-5,3.672084767057359e-8,0.001484832455576805,-4.392834159757466e-5,3.6866053246575335e-8,0.0014850084524969315,-4.414052139172515e-5,3.701958292803764e-8,0.0014852579225742377,-4.4319394962506785e-5,3.7146574635816525e-8,0.00148555111690797,-4.443521318072178e-5,3.7225576915926685e-8,0.0014858540251273446,-4.447773434048518e-5,3.724992857383376e-8,0.0014861364543161625,-4.445270363925244e-5,3.722482225495067e-8,0.0014863760913723298,-4.437656318307988e-5,3.716309655277369e-8,0.0014865597532513933,-4.427164451826376e-5,3.708154822513582e-8,0.0014866832683675857,-4.4162460074345484e-5,3.699824191460888e-8,0.0014867508559287582,-4.407282323694022e-5,3.693054466535894e-8,0.0014867742340000237,-4.402339782503651e-5,3.68934712540527e-8,0.0014867713714220555,-4.402943420367354e-5,3.689807422058526e-8,0.0014867646564762282,-4.409867285281513e-5,3.6949844467746125e-8,0.0014867782740302412,-4.422973621937711e-5,3.7047415402730984e-8,0.0014868348754921309,-4.441152508594255e-5,3.718204520461165e-8,0.0014869519465962582,-4.462400182095811e-5,3.733824048865543e-8,0.0014871384186216602,-4.484053098879151e-5,3.749566462993671e-8,0.0014873921480441546,-4.5031733174503954e-5,3.7632239067973675e-8,0.0014876988747097991,-4.517047600970056e-5,3.772804673560034e-8,0.0014880330851069787,-4.5237407062414714e-5,3.776948065811721e-8,0.0014883611336936045,-4.522638867386191e-5,3.7753106366925946e-8,0.0014886470419661934,-4.5148829423299135e-5,3.768853679617695e-8,0.0014888610099375744,-4.503511107630251e-5,3.75991142701746e-8,0.0014889893734640611,-4.493078727593386e-5,3.7518833390943256e-8,0.0014890426802024238,-4.4885939658503095e-5,3.74844077895564e-8,0.0014890568559620368,-4.493900359979849e-5,3.752344755667185e-8,0.0014890836459080803,-4.5101175184416406e-5,3.7643181361237684e-8,0.001489172305795643,-4.535029512050693e-5,3.7826206234394064e-8,0.0014893513815948645,-4.5639131365739326e-5,3.803685162170241e-8,0.0014896203853677792,-4.591379586939746e-5,3.8234980089391865e-8,0.0014899543663838013,-4.613185728141613e-5,3.8389462478218916e-8,0.0014903162297077394,-4.6271946349084726e-5,3.848520377485263e-8,0.0014906691385107214,-4.6333741604474694e-5,3.852289537208366e-8,0.0014909844428688587,-4.6332267253878814e-5,3.851449641139075e-8,0.0014912446994979787,-4.629096295265064e-5,3.8477884251820716e-8,0.001491443475023993,-4.623604922293549e-5,3.843262815520471e-8,0.0014915838036451312,-4.61927449105687e-5,3.8397284898482245e-8,0.0014916764513131834,-4.618284796155863e-5,3.838776175182558e-8,0.0014917383357409837,-4.622298504810592e-5,3.8416126988273096e-8,0.0014917909428913139,-4.632303584535767e-5,3.848944739748476e-8,0.0014918583550758398,-4.648458412369112e-5,3.860856466449232e-8,0.0014919645095770773,-4.669969166698596e-5,3.8767106301308565e-8,0.001492129594339425,-4.695065290037247e-5,3.895130296913219e-8,0.0014923659795207224,-4.721144655663761e-5,3.914118664687933e-8,0.0014926745732702724,-4.745133715731877e-5,3.931347861780057e-8,0.0014930428020581202,-4.764050267803905e-5,3.944599080200351e-8,0.0014934453287540244,-4.77567381989998e-5,3.952272977792478e-8,0.0014938479976421455,-4.7791615726440825e-5,3.9538419803086526e-8,0.0014942145959709434,-4.775437268653611e-5,3.950114664854367e-8,0.0014945152548361581,-4.7672147717775885e-5,3.943216537025932e-8,0.0014947347496844735,-4.758571958330954e-5,3.936237614997539e-8,0.0014948784839529095,-4.754071729882442e-5,3.9325587712150906e-8,0.001494973688060228,-4.7575580700830986e-5,3.934960606065222e-8,0.001495063893699758,-4.7709339668887554e-5,3.9447410821275483e-8,0.0014951967819727924,-4.793386974666786e-5,3.961177012530231e-8,0.0014954089548056488,-4.82150113356529e-5,3.9816407071216556e-8,0.001495713972368483,-4.8503439552528306e-5,4.0024278257678855e-8,0.0014960992299929698,-4.875088216767253e-5,4.0199671339311314e-8,0.0014965325627533485,-4.892426755697233e-5,4.031863181757441e-8,0.0014969742965597005,-4.9012244353112056e-5,4.037361715514292e-8,0.0014973887060458133,-4.90234527916337e-5,4.037196030438772e-8,0.0014977509975768778,-4.897987925534544e-5,4.033069659995429e-8,0.0014980493699429142,-4.8909370842569586e-5,4.0270872530960104e-8,0.0014982838272042372,-4.8839785143966184e-5,4.0213214367086265e-8,0.0014984636893112296,-4.879533379597899e-5,4.017552829673121e-8,0.0014986050564438516,-4.879459745805125e-5,4.0171351190536136e-8,0.0014987286878216618,-4.884940264365551e-5,4.020917276631506e-8,0.0014988581486848397,-4.8963892845157507e-5,4.029171690125393e-8,0.0014990177337836207,-4.9133541633318104e-5,4.0415144161886566e-8,0.0014992296650089489,-4.934439725353427e-5,4.056846910653133e-8,0.0014995103608385159,-4.957328780427341e-5,4.073379081419653e-8,0.0014998661313054954,-4.978992849651283e-5,4.0888033317214166E-08,0.001500289438846751,-4.996169395570395e-5,4.100670227701081e-8,0.0015007575640223773,-5.00609271009138e-5,4.1069476582698656e-8,0.0015012354183340914,-5.0073132062903215e-5,4.106633523245191e-8,0.001501682931435136,-5.000313393611321e-5,4.10020124318666e-8,0.0015020653958463235,-4.9876318236111225e-5,4.089664152349184e-8,0.001502363510762478,-4.973362668651773e-5,4.078166708635209e-8,0.0015025796036362987,-4.9621359434477365e-5,4.06919240015438e-8,0.001502737788613337,-4.957881774687852e-5,4.0656280257301776e-8,0.0015028778851812186,-4.9627518948032364e-5,4.0689710099869005e-8,0.001503044775055048,-4.9765138003926926e-5,4.078912007859041e-8,0.001503276131990282,-4.9966042084288354e-5,4.093418214974257e-8,0.0015035921340975534,-5.0188522911167886e-5,4.109307745813918e-8,0.0015039904959644906,-5.038664086853307e-5,4.12314822617478e-8,0.0015044484479765602,-5.052272450607022e-5,4.1321828260849926e-8,0.0015049305867960681,-5.057627006151882e-5,4.1349724488542334e-8,0.0015053992671028003,-5.0546698588028124e-5,4.1315734395285215e-8,0.001505823682333701,-5.0450202162379264e-5,4.123276774522326e-8,0.0015061851264551991,-5.03131376162049e-5,4.1120991139124105e-8,0.00150647810650972,-5.0164985415371416e-5,4.100254562995308e-8,0.0015067085911635734,-5.003289045076868e-5,4.0897557578942296e-8,0.0015068910568689683,-4.9938339881018866e-5,4.0821788084939146e-8,0.0015070455081733843,-4.989557017837055e-5,4.078553560863914e-8,0.0015071949768719031,-4.991095762554463e-5,4.079319265895584e-8,0.0015073634330199596,-4.998270255847455e-5,4.0842964940455486e-8,0.001507573648758257,-5.0100484272582855e-5,4.092657881678172e-8,0.001507844474226869,-5.024531275080717e-5,4.1029213145852093E-08,0.0015081872475477102,-5.039029477878423e-5,4.113020982278904e-8,0.001508601639381369,-5.0503348351200574e-5,4.1205288990591655e-8,0.0015090721800536042,-5.0552825964399286e-5,4.123090271547341e-8,0.0015095677542445187,-5.051598845732162e-5,4.119061726808571e-8,0.0015100464398749296,-5.0388137396494456e-5,4.1081869583940654e-8,0.0015104661524490966,-5.0188150732697904e-5,4.091992886992478e-8,0.0015107980562968522,-4.995626598255443e-5,4.073597315450068e-8,0.0015110369884425087,-4.974323096834382e-5,4.056865503257804e-8,0.0015112037636235288,-4.9594689096187027e-5,4.0452143784550536e-8,0.0015113382538688342,-4.9537390122333774e-5,4.040571885063075e-8,0.001511486651518908,-4.9572491390367476e-5,4.0428949376900265e-8,0.0015116882343063284,-4.9677288522526345e-5,4.0503412055625985e-8,0.001511965832908493,-4.981328246977489e-5,4.0599203239587485e-8,0.0015123218678560742,-4.993712667865752e-5,4.0683458185044255e-8,0.0015127398774388951,-5.001120491259384e-5,4.072833176366586e-8,0.0015131902459503254,-5.0011430442294444e-5,4.0716651632460574e-8,0.0015136381639806527,-4.9930908725903795e-5,4.064433406034829e-8,0.0015140516272895985,-4.977923819466192e-5,4.051953249837382e-8,0.0015144075622012096,-4.9578319631606846e-5,4.035928102066704e-8,0.0015146949683276282,-4.9356355695184494e-5,4.0184938821169755e-8,0.0015149150502128804,-4.9141887980333486e-5,4.0017799643976816e-8,0.0015150791746275875,-4.895917584109024e-5,3.9875772118617474e-8,0.0015152057997848073,-4.8825388632539786e-5,3.977139653273003e-8,0.0015153173317295856,-4.874940504486354e-5,3.971098695425316e-8,0.0015154374095433952,-4.8731643689852686e-5,3.9694467703771245e-8,0.0015155886318726306,-4.876432642304724e-5,3.971551230211538e-8,0.0015157903988936615,-4.8831866635134174e-5,3.976183295261236e-8,0.0015160564336704537,-4.891150797550089e-5,3.9815759747989534e-8,0.001516391691608481,-4.8974788479225625e-5,3.985552106330658e-8,0.0015167888924818176,-4.899079602098747e-5,3.985786664037715e-8,0.0015172258993118245,-4.893217400965164e-5,3.9802659015735863e-8,0.0015176663030841539,-4.878381729040918e-5,3.967934665594565e-8,0.0015180658418397924,-4.855185669703154e-5,3.9493549812086156e-8,0.0015183852145058741,-4.8267882631723335e-5,3.927002879151628e-8,0.001518605245428821,-4.7983227159816685E-05,3.904816418536927e-8,0.0015187364109845078,-4.7752853667001454e-5,3.8869607112691156e-8,0.0015188162107197098,-4.76157007253304e-5,3.876330623471329e-8,0.0015188951081814535,-4.7581646967552716e-5,3.87356971621642e-8,0.0015190187423242043,-4.763095682004308e-5,3.877055536279872e-8,0.0015192148843438057,-4.7724206359166875e-5,3.883693164021174e-8,0.0015194889111096335,-4.7816122036906335e-5,3.890001525702813e-8,0.0015198265573875282,-4.78675190041975e-5,3.893034461914193e-8,0.0015202006147450764,-4.785267690604367e-5,3.8909281403952436e-8,0.0015205786058022936,-4.776206764521024e-5,3.883074987792664e-8,0.001520929655959892,-4.7601511265561416e-5,3.8700210594517606e-8,0.0015212297485279174,-4.73889457227636e-5,3.853192522081979e-8,0.001521464985636384,-4.714978616986874e-5,3.834534142739313e-8,0.001521632714070136,-4.691181862109943e-5,3.8161308626593714e-8,0.0015217407259916819,-4.6700544473304215e-5,3.7998737945680615e-8,0.001521805050737679,-4.653561112622005e-5,3.7872078917049705e-8,0.0015218469609350476,-4.6428620942574455e-5,3.77897496515343e-8,0.0015218898209953303,-4.638232433864213e-5,3.7753505077697286e-8,0.0015219562588472324,-4.63908829784902e-5,3.775855431522331e-8,0.0015220657852472567,-4.644073196168358e-5,3.779415592915643e-8,0.0015222326849345393,-4.6511768353575117e-5,3.78445580321092e-8,0.0015224639302797234,-4.6578917633677744e-5,3.789033821231449e-8,0.0015227569400496383,-4.6614434070743716e-5,3.791035015751786e-8,0.0015230973823843132,-4.659163295010869e-5,3.788469386599491e-8,0.0015234580899453059,-4.6490764418833046e-5,3.779915028577375e-8,0.0015238011301948635,-4.630679101973296e-5,3.765088713532935e-8,0.0015240852672769784,-4.6056717425461094e-5,3.7453737167092474e-8,0.001524279176362041,-4.578158370729293e-5,3.723946842777562e-8,0.0015243761207970313,-4.5537893273890615e-5,3.7051147789336374e-8,0.0015244012465784203,-4.537833811089991e-5,3.692846975976653e-8,0.0015244043069810233,-4.5330485030194646e-5,3.689159982476225e-8,0.001524440051851727,-4.5386093677926136e-5,3.693319329946158e-8,0.0015245475921702796,-4.550706901455292e-5,3.70231970685862e-8,0.001524739631177373,-4.564256280847005e-5,3.712221109997426e-8,0.0015250039821238194,-4.574645320979391e-5,3.719506196713576e-8,0.001525312469978232,-4.57880724817201e-5,3.7219009823727845e-8,0.0015256311465300198,-4.575529177708597e-5,3.71858758629502e-8,0.0015259283156329572,-4.5652460184988825e-5,3.710009588757813e-8,0.001526179490549331,-4.549604863952453e-5,3.697504333756095e-8,0.0015263698298762106,-4.5309863016883735e-5,3.682918922629797e-8,0.0015264948690534665,-4.5120549024834013e-5,3.668269874859717e-8,0.0015265600057452486,-4.495356643058214e-5,3.65545436819091e-8,0.0015265789603062382,-4.4829825029204026e-5,3.646015826369734e-8,0.0015265714591917814,-4.476317621887072e-5,3.640967597256171e-8,0.001526560393019653,-4.47588814097071e-5,3.6406785222506725e-8,0.0015265687425595057,-4.481319012855167e-5,3.6448328955322366e-8,0.001526616673386339,-4.491402171639455e-5,3.6524727155707175e-8,0.001526719088838322,-4.5042478706087005e-5,3.662110821247449e-8,0.001526883671120863,-4.517492388060347e-5,3.671899335520608e-8,0.001527109357997393,-4.528556689050531e-5,3.679846629243785e-8,0.0015273852648541443,-4.5349660451110904e-5,3.684080865883039e-8,0.0015276902649918051,-4.5347572784252786e-5,3.683168213824624e-8,0.0015279940023550515,-4.5269982630066084e-5,3.676496818810432e-8,0.001528260741500139,-4.5123660491407865e-5,3.664687940483986e-8,0.0015284573649040436,-4.493568923535388e-5,3.649883068748661e-8,0.0015285651819203082,-4.475224028990135e-5,3.6356268024786054e-8,0.001528591522529057,-4.462799322930828e-5,3.6260564495138095e-8,0.0015285733068809862,-4.4606708170989893e-5,3.6244339332635135e-8,0.0015285663015500417,-4.4701580903939586e-5,3.631667920617675e-8,0.001528623057978843,-4.4888075568297965e-5,3.645788182105769e-8,0.0015287721301055885,-4.511488889181742e-5,3.662804240559266e-8,0.0015290104785997134,-4.532567197125326e-5,3.678385405657058e-8,0.0015293104382067145,-4.547810886081325e-5,3.689331286542308e-8,0.0015296334898081117,-4.555238252513215e-5,3.6942127930790746e-8,0.0015299425822774475,-4.5549875508693376e-5,3.6932458321921016e-8,0.0015302094618059117,-4.5487012585997464e-5,3.687784149123152e-8,0.0015304173593234294,-4.538838777224406e-5,3.6797650641900755e-8,0.0015305608012845585,-4.5281191160702335e-5,3.6712741731269536e-8,0.0015306441945146152,-4.5191250244956506e-5,3.664253537729438e-8,0.0015306800306723414,-4.514019365633332e-5,3.660306514411148e-8,0.0015306868440561443,-4.5143317412885504e-5,3.660554118454364e-8,0.0015306868688130097,-4.5208046874071456e-5,3.665525950628058e-8,0.001530703372269813,-4.533304361844633e-5,3.675088279926432e-8,0.0015307577071024677,-4.550816475509205e-5,3.6884311766138235e-8,0.0015308663545292767,-4.5715530714938635e-5,3.7041438425744794e-8,0.001531038403461839,-4.5931705831679506e-5,3.7203859056823594e-8,0.0015312738096312358,-4.613076201647923e-5,3.7351380006003594e-8,0.001531562647587085,-4.628797631784266e-5,3.7465058196804165e-8,0.001531885540287841,-4.638388948223532e-5,3.753045447184219e-8,0.0015322154350115606,-4.6408424099129384e-5,3.75407624833672e-8,0.0015325210181051422,-4.636473481435046e-5,3.749952617090675e-8,0.0015327722562987192,-4.62720299113284e-5,3.742243109933671e-8,0.0015329482178092664,-4.616568661040811e-5,3.7337038635539955e-8,0.0015330459667584296,-4.60922941785365e-5,3.7278814888025735e-8,0.001533087023241133,-4.609795126881395e-5,3.728225619249699e-8,0.001533115983708838,-4.621153374983078e-5,3.736837190134323e-8,0.0015331876400693626,-4.643018459294151e-5,3.753391652633899e-8,0.0015333461088477486,-4.6716886718747485e-5,3.7749779963297116e-8,0.001533607077938741,-4.701413330082583e-5,3.797158062251958e-8,0.0015339536898771556,-4.7266463413301e-5,3.8156979046495933e-8,0.0015343469210881689,-4.7438804933053115e-5,3.827972461061156e-8,0.0015347420400233514,-4.7522609577066365e-5,3.833423468532848e-8,0.0015351018922789568,-4.75311913550837e-5,3.833175719045527e-8,0.0015354032268769953,-4.7490536847499134e-5,3.8293014468682244e-8,0.0015356372503282487,-4.7430749661384474e-5,3.8241437080403724e-8,0.0015358072060457936,-4.738020854009638e-5,3.819867181103716e-8,0.0015359252275494756,-4.736231090740194e-5,3.818223813016995e-8,0.0015360095332831896,-4.739380510817324e-5,3.820445815928393e-8,0.0015360820478136717,-4.748383499571379e-5,3.82718722773441e-8,0.001536166141831675,-4.763330834665019e-5,3.838478548063725e-8,0.001536284194639195,-4.783458629340891e-5,3.8536969464764897e-8,0.0015364548174580863,-4.8071792138992605e-5,3.871582755825761e-8,0.001536689888308331,-4.832221693893701e-5,3.890347256035087e-8,0.001536991949021952,-4.8559125680806725e-5,3.907898810591917e-8,0.0015373526882001662,-4.875585201501901e-5,3.9221757056841037E-08,0.0015377531409755225,-4.889068042494506e-5,3.931538272353313e-8,0.0015381659828674545,-4.895167436888976e-5,3.9351451406966635e-8,0.0015385598715198048,-4.894040830492917e-5,3.9332267184161023e-8,0.0015389053503828088,-4.887366805568127e-5,3.927184980018389e-8,0.0015391815674583567,-4.878238533919379e-5,3.919473310592367e-8,0.0015393827610044833,-4.870713902780217e-5,3.913220935194622e-8,0.001539522826925547,-4.868983638924286e-5,3.911586463438951e-8,0.001539635551012186,-4.8762258491063296e-5,3.916897922140672e-8,0.0015397681169518995,-4.893424373568861e-5,3.929783969200081e-8,0.0015399675307219867,-4.9186670824232385e-5,3.9486747633733346e-8,0.0015402639575685848,-4.94746582698892e-5,3.970072063670472e-8,0.001540658896768355,-4.974203898215638e-5,3.989665648604e-8,0.0015411250260262703,-4.9940960584229624e-5,4.0038309783718896e-8,0.0015416177088270302,-5.0046684404287795e-5,4.010752915400204e-8,0.0015420911707916128,-5.006124568783706e-5,4.010688682435594e-8,0.0015425111740769344,-5.000709715400226e-5,4.00545534176231e-8,0.0015428603593231258,-4.9916572907574924e-5,3.9975967592465016e-8,0.001543137348004615,-4.9822560505639655e-5,3.9896549730067413e-8,0.0015433527728847896,-4.9752685894152456e-5,3.983728353617607e-8,0.0015435248853113634,-4.972672630231794e-5,3.981289716560943e-8,0.0015436759860362377,-4.975595477250484e-5,3.9831537088095255e-8,0.0015438297952060482,-4.984325147671539e-5,3.989494979643839e-8,0.0015440093369692496,-4.998334813656624e-5,3.999866380557658e-8,0.0015442348151259754,-5.016309804535865e-5,4.013214246585282e-8,0.0015445211154071746,-5.0362121259628284e-5,4.027925529887606e-8,0.0015448749611662643,-5.055446980018576e-5,4.0419618992163206e-8,0.0015452923005028491,-5.071189862384606e-5,4.053125674762409e-8,0.0015457569800726891,-5.0808855828295383E-05,4.059460327889975e-8,0.0015462418900000286,-5.082850879931722e-5,4.059724221672877e-8,0.0015467132993301472,-5.076823346637892e-5,4.0538094268894254e-8,0.0015471380038922773,-5.064252614673594e-5,4.042945683138028e-8,0.0015474916360774626,-5.048174585710053e-5,4.0295709244955134e-8,0.0015477657624747324,-5.0326348408581844e-5,4.016852598729084e-8,0.0015479715584376128,-5.02176988612463e-5,4.00795759607021e-8,0.001548138675163666,-5.018759931395581e-5,4.0052468864238434e-8,0.001548309019173918,-5.0249167170106635e-5,4.0095999848332944e-8,0.001548526363415651,-5.039173011559901e-5,4.020064552392213e-8,0.001548824072026234,-5.0581979693915296e-5,4.033985817256759e-8,0.0015492146318262102,-5.0772290610955474e-5,4.047669746431854e-8,0.0015496851936439822,-5.091443598787875e-5,4.057438892398452e-8,0.001550201601146154,-5.0973893683465014e-5,4.0607169310144533e-8,0.001550719547427848,-5.093895551994056e-5,4.0567056747315524e-8,0.0015511979549022272,-5.082132789363123e-5,4.0464060310906736e-8,0.001551609085796503,-5.064930767517722e-5,4.032070429909841e-8,0.001551942485882253,-5.045777032215602e-5,4.0164179972009266e-8,0.001552203365741154,-5.027932903282667e-5,4.0019527762343134e-8,0.0015524080338778475,-5.0138911795649996e-5,3.990557662144009e-8,0.0015525789206599471,-5.005169954767954e-5,3.983352487266917e-8,0.0015527405622942454,-5.0023207216840704e-5,3.980713258549693e-8,0.001552916795278977,-5.005024771803662e-5,3.982350168918181e-8,0.0015531287739189376,-5.012197934084325e-5,3.987384769919168e-8,0.0015533932025365111,-5.022080731770897e-5,3.99441559610026e-8,0.0015537202826231122,-5.03234457482546e-5,4.0016025565273536e-8,0.0015541112665716941,-5.0402810390084915e-5,4.0068239562396716e-8,0.0015545561079804125,-5.0431489448755314e-5,4.007959506236113e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json deleted file mode 100644 index c6ac961..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_15.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":15000,"numberOfSamples":1000,"samples":[0.001555032396790159,-5.038717964716439e-5,4.003321453737454e-8,0.001555507240340409,-5.025945257220019e-5,3.992178064606655e-8,0.0015559433318249748,-5.005568561411016e-5,3.975199831316558e-8,0.0015563086828940746,-4.9802949292686764e-5,3.9545822083813816e-8,0.001556587031841404,-4.9543375923704664e-5,3.9336583092513e-8,0.0015567845028372617,-4.93232976794034e-5,3.9160317297773175e-8,0.0015569291408115862,-4.9179757456819175e-5,3.904518941710335e-8,0.0015570631279621951,-4.912957061070448e-5,3.90031151041951e-8,0.0015572306984882043,-4.916483994647903e-5,3.902661169621281e-8,0.0015574660511056152,-4.9255840502179806e-5,3.9091477245714126e-8,0.0015577847760354089,-4.9359606772293576e-5,3.9163823082464017e-8,0.001558180685115808,-4.943135773630568e-5,3.920908834205859e-8,0.0015586283968716341,-4.943566203060656e-5,3.920059314584998e-8,0.0015590906701226305,-4.9354497209498185e-5,3.9125494924869697e-8,0.001559528261058972,-4.919020584318819e-5,3.8986728207848124e-8,0.0015599093591160292,-4.896289913685733e-5,3.880070214408021e-8,0.0015602159244718476,-4.870367300374791e-5,3.8591890031225615e-8,0.001560445583043622,-4.844627081761637e-5,3.838637217885279e-8,0.0015606095190522666,-4.821988699048854e-5,3.8206389463064e-8,0.001560728059333107,-4.80447105719932e-5,3.8067072967328046e-8,0.0015608258215469178,-4.7930366808124216e-5,3.797538689472998e-8,0.0015609276655558022,-4.787644642721989e-5,3.793059714039383e-8,0.0015610558505919753,-4.7874043041353836e-5,3.792543115973339e-8,0.0015612281647851558,-4.7907464781617856e-5,3.794734148986789e-8,0.0015614564996265033,-4.795579391508165e-5,3.797969902153523e-8,0.0015617453775785114,-4.7994480662788104e-5,3.8003106795686565e-8,0.001562090231917282,-4.799751763502489e-5,3.7997236526191586e-8,0.0015624757732016965,-4.7940913074933274e-5,3.7943666553683704e-8,0.0015628755385377238,-4.780797264952134e-5,3.783002608138753e-8,0.0015632543909054244,-4.759591895225801e-5,3.765503864336205e-8,0.0015635755508337965,-4.7321569326116703e-5,3.743272490582087e-8,0.0015638118247210714,-4.702212301492192e-5,3.719276938020053e-8,0.0015639572183669657,-4.674759666086147e-5,3.697442350326965e-8,0.0015640325431972783,-4.654548661616456e-5,3.681443353406246e-8,0.0015640803149591668,-4.644389332460276e-5,3.673389012822279e-8,0.0015641503210691414,-4.644165242496307e-5,3.673070606589074e-8,0.0015642829369577056,-4.651013021168292e-5,3.678135043023996e-8,0.0015644977495392904,-4.660446073429612e-5,3.685000664095114e-8,0.001564790749643378,-4.6677917336542896e-5,3.6900071652951433e-8,0.001565138707406003,-4.66938238368795e-5,3.690350083708066e-8,0.0015655073435626183,-4.663241657433939e-5,3.6845954665167155e-8,0.0015658602190323327,-4.649255514773499e-5,3.672776169544263e-8,0.0015661663607259592,-4.628936931980565e-5,3.656170224679889e-8,0.0015664055799049252,-4.6049225283354464e-5,3.636883604376693e-8,0.001566571002171141,-4.580336936715299e-5,3.6173502381504967e-8,0.0015666687673390187,-4.558160277952096e-5,3.599852488215996e-8,0.0015667154033415197,-4.5407215387777025e-5,3.586148463513818e-8,0.0015667338355941623,-4.529393320932333e-5,3.577253994149994e-8,0.0015667490993197454,-4.524500274399756e-5,3.573380667359368e-8,0.0015667846174289822,-4.5254024907903564e-5,3.57399848967389e-8,0.001566859497029681,-4.5306834496840176e-5,3.5779734964378544e-8,0.0015669868024443458,-4.5383715412729446e-5,3.583733887760147e-8,0.001567172455798627,-4.546158479647085e-5,3.5894430294282084e-8,0.0015674144103284765,-4.551618411695069e-5,3.593183701499408e-8,0.001567701899164982,-4.5524599621765035e-5,3.593172347162997e-8,0.0015680149455750063,-4.5468646452923546e-5,3.588034316011282e-8,0.001568325023881159,-4.533952995396979e-5,3.577163595791014e-8,0.001568598375261144,-4.514331996072684e-5,3.561129614715066e-8,0.0015688033307539359,-4.490516831986402e-5,3.5419775786897466e-8,0.0015689213635770478,-4.4668520678280764e-5,3.5231422956829793e-8,0.0015689580930293371,-4.448560774152507e-5,3.508694038347068e-8,0.001568947072838441,-4.439966029933874e-5,3.501951652065551e-8,0.0015689406813127415,-4.442653532989222e-5,3.5040594280255434e-8,0.0015689905208410501,-4.454694343553021e-5,3.5134005465375e-8,0.0015691279470960945,-4.471462114836585e-5,3.526264408522862e-8,0.001569355167197491,-4.4874982251366504e-5,3.5383351783517066e-8,0.0015696491590304815,-4.498328840192346e-5,3.5461324901144965e-8,0.0015699730086184231,-4.5014843868502684e-5,3.547806086334234e-8,0.0015702878466824224,-4.496644962533722e-5,3.5432227789964445e-8,0.0015705615045717492,-4.48522455988792e-5,3.5336015448358164e-8,0.0015707731361774711,-4.469737825179658e-5,3.520983386424041e-8,0.0015709146371371892,-4.453167337270511e-5,3.507720338549927e-8,0.0015709899450492496,-4.4384204168804375e-5,3.4960569188722246e-8,0.0015710129446352492,-4.427899769327988e-5,3.487815813513884e-8,0.0015710044338982897,-4.4232035758685976e-5,3.484187409746818e-8,0.0015709885901114629,-4.424966839076787e-5,3.48562113954969e-8,0.0015709893763831153,-4.4328433769242266e-5,3.491813422291662e-8,0.0015710273252120134,-4.4456174728882454e-5,3.501786728147512e-8,0.001571117095259444,-4.4614146603934006e-5,3.514044529398255e-8,0.0015712659471281585,-4.4779625550250765e-5,3.526772890807883e-8,0.0015714729990209998,-4.492865339998087e-5,3.5380643711257126e-8,0.0015717290886569444,-4.503882672267935e-5,3.5461540303863484e-8,0.0015720171486412,-4.509218250304847e-5,3.549662088853352e-8,0.0015723131710548195,-4.507838065681111e-5,3.547847663955526e-8,0.0015725883317389549,-4.499835421555663e-5,3.540880348366659e-8,0.001572813307826608,-4.486786800809496e-5,3.5300892636416496e-8,0.0015729655070056204,-4.47191603474519e-5,3.518058646081875e-8,0.0015730384980441499,-4.459776227937817e-5,3.5083578249073555e-8,0.0015730502214990328,-4.4551776967474605e-5,3.504702004926623e-8,0.0015730436787471955,-4.461436338745037e-5,3.5095992048822466e-8,0.0015730749295945277,-4.478695231412046e-5,3.5230609633398364e-8,0.00157319126570817,-4.5034672737442647e-5,3.542266299781257e-8,0.0015734115792861226,-4.529940702276995e-5,3.562602881073632e-8,0.0015737208148722149,-4.552319788898638e-5,3.5795178558746185e-8,0.0015740799139331147,-4.5667994072365434e-5,3.590075376760617e-8,0.0015744426094396393,-4.572297761098429e-5,3.593523410445762e-8,0.0015747694654922382,-4.570060260613509e-5,3.5909545233455296e-8,0.0015750350883362262,-4.56275210357777e-5,3.584556214181634e-8,0.0015752294134122743,-4.5535604842148e-5,3.576877953266378e-8,0.0015753556604648073,-4.545534529408837e-5,3.5703062165524755e-8,0.0015754271119554817,-4.541175214597163e-5,3.566756900441209e-8,0.0015754637850900197,-4.5422021566715475e-5,3.567516845886349e-8,0.0015754892419881964,-4.549435685857388e-5,3.5731726192643936e-8,0.0015755275323007985,-4.562767745693644e-5,3.5835969133508226e-8,0.0015756002822981585,-4.581213815904196e-5,3.597985887669808e-8,0.0015757240290649212,-4.603051129355547e-5,3.6149580268519345e-8,0.0015759080778055216,-4.626046736804536e-5,3.632726928230143e-8,0.0015761532032229398,-4.6477532670966515e-5,3.6493374497356665e-8,0.0015764513190264005,-4.66583682351069e-5,3.662937540080888e-8,0.0015767861221216862,-4.6784116146357104e-5,3.67205887315865e-8,0.0015771347357232419,-4.6843579857850895e-5,3.6758772560147956e-8,0.0015774703483009739,-4.683599304438294e-5,3.67442426941251e-8,0.0015777659552356682,-4.677317302149219e-5,3.66873186351272e-8,0.0015779995237324785,-4.668049190430199e-5,3.660873387655922e-8,0.0015781605555831091,-4.659528839149842e-5,3.6538079166891776e-8,0.0015782567852510353,-4.656091594072024e-5,3.650901070819981e-8,0.0015783179633283798,-4.6615418475760236e-5,3.655049543919046e-8,0.0015783922903835324,-4.677665068892878e-5,3.667544840847755e-8,0.0015785325756434202,-4.703036852583066e-5,3.687171431896692e-8,0.0015787756427616659,-4.733035159097787e-5,3.7102367094230025e-8,0.0015791259181678027,-4.761430923312568e-5,3.731827295238525e-8,0.0015795538411506713,-4.7828037828527396e-5,3.747709330858676e-8,0.0015800096969891477,-4.7943878769038486E-05,3.7557792145692596e-8,0.0015804431624417705,-4.796481847401571e-5,3.756375094216574e-8,0.0015808178057632656,-4.791635491291735e-5,3.7516101368887467e-8,0.0015811164141571583,-4.783405291768669e-5,3.744360223405161e-8,0.0015813392677104443,-4.775314048922322e-5,3.737423693485045e-8,0.0015814993203580124,-4.7702326404354844e-5,3.733035174588052e-8,0.0015816171643790661,-4.7701193814970105e-5,3.7326791516613286e-8,0.0015817169630395575,-4.775965776778595e-5,3.737071389079256e-8,0.001581823347515752,-4.787832470052812e-5,3.7462041637598934e-8,0.0015819588828547596,-4.8049258257063996e-5,3.7594106726625155e-8,0.0015821417963573898,-4.8257082895207296e-5,3.775446258471748e-8,0.0015823838479101892,-4.848060164321304e-5,3.792608585212836e-8,0.001582688504544025,-4.869520808633535e-5,3.8089269531459865e-8,0.0015830498625370153,-4.887615170356731e-5,3.822428825087552e-8,0.0015834527637300596,-4.9002351733972964e-5,3.8314560752223585e-8,0.0015838743628422021,-4.906026034512833e-5,3.834982706901485e-8,0.001584287221216587,-4.904715037019271e-5,3.832875105474419e-8,0.001584663741938823,-4.897310145628491e-5,3.826032241557493e-8,0.001584981463061841,-4.8861079857009655e-5,3.8163607031293117e-8,0.0015852285820703014,-4.874466991235223e-5,3.8065608345197424e-8,0.0015854088600154176,-4.8662962215500585e-5,3.7997004979177486e-8,0.0015855444217866606,-4.86522846509656e-5,3.798563784368472e-8,0.001585674261819128,-4.8735533803462465e-5,3.804836085608511e-8,0.001585846375312292,-4.891189807186035e-5,3.818334234181005e-8,0.00158610348310477,-4.9151982596995845e-5,3.836657757562266e-8,0.001586466654834368,-4.9403489989380824e-5,3.8556531405909456e-8,0.0015869251102463237,-4.960807810621859e-5,3.870740581132169e-8,0.0015874391429179613,-4.9722343633764594e-5,3.8785587350351096e-8,0.0015879553631793688,-4.973190214442801e-5,3.878064452942808e-8,0.001588425577199708,-4.9652024693980827e-5,3.870567071163837e-8,0.00158881977381429,-4.951725979120483e-5,3.8588846273972866e-8,0.0015891295065786543,-4.936775952074638e-5,3.84623889278333e-8,0.001589364066660281,-4.9238715531157035e-5,3.8354092314337146e-8,0.001589543909685928,-4.9154994199223596e-5,3.8283168581558065e-8,0.0015896945618050432,-4.9129902713118106e-5,3.825948659678869e-8,0.0015898422153512498,-4.916611627099987e-5,3.8284520145138256e-8,0.001590010859028341,-4.925727610695112e-5,3.8352726691160195e-8,0.0015902202966968217,-4.938958761833569e-5,3.845280876708773e-8,0.0015904844846205953,-4.954336749390981e-5,3.8568874325898195e-8,0.0015908099083882816,-4.969485381752708e-5,3.868182932013065e-8,0.0015911941068452644,-4.98187279964764e-5,3.8771413773902485e-8,0.0015916248545581027,-4.989160905264646e-5,3.881908380631811e-8,0.0015920807276100831,-4.9896318601345885e-5,3.881152013111638e-8,0.0015925336582621405,-4.982618528736371e-5,3.874409592893164e-8,0.0015929536328127007,-4.9688213379708714e-5,3.862330576383604e-8,0.0015933149629505758,-4.950379940089145e-5,3.846710078351864e-8,0.001593602808933612,-4.930610263244153e-5,3.830248200720968e-8,0.0015938182399501703,-4.913404445176729e-5,3.8160453318297506e-8,0.0015939802243672306,-4.902380951458289e-5,3.806916042959481e-8,0.0015941233988982489,-4.899946750049259e-5,3.8046581250505863e-8,0.0015942911880484664,-4.906498251129774e-5,3.80945375169188e-8,0.0015945249563040758,-4.920032285756388e-5,3.8196040630227036e-8,0.0015948515164234465,-4.9364207196608636e-5,3.8317796980507725e-8,0.001595273159867582,-4.950449066879408e-5,3.841854809931519e-8,0.0015957650230228916,-4.9573895929635576e-5,3.846143646287539e-8,0.0015962822947114133,-4.954513058246872e-5,3.842577890144347e-8,0.0015967748230214939,-4.941856956430488e-5,3.8312929742037596e-8,0.001597202494943064,-4.921934317902047e-5,3.814375061431865e-8,0.0015975448239908775,-4.898645979137916e-5,3.794978155712491e-8,0.0015978022649466863,-4.876005227964857e-5,3.7762998553756675e-8,0.0015979913135114392,-4.85719625681952e-5,3.76083609760703e-8,0.0015981373497028673,-4.84414879329937e-5,3.750059586381275e-8,0.0015982682896983585,-4.837523496803743e-5,3.744429677813117e-8,0.0015984102235238262,-4.8369073369492696e-5,3.743563223650375e-8,0.0015985848577516198,-4.8410619737028296e-5,3.746436079232389e-8,0.0015988080578801715,-4.848147621960483e-5,3.751556089859576e-8,0.0015990887787054714,-4.8559129023742496e-5,3.7571077107145096e-8,0.0015994279675657184,-4.861890144868653e-5,3.761106919377434e-8,0.0015998175105410416,-4.8636534469734454e-5,3.761614354464905e-8,0.0016002397772522405,-4.859177185400766e-5,3.757032802152641e-8,0.0016006686543139628,-4.84728413566226e-5,3.74647259539885e-8,0.0016010729910405593,-4.828097347843213e-5,3.7301095421887124e-8,0.0016014227983081818,-4.8033231546302496e-5,3.709395135898375e-8,0.0016016972164009232,-4.776158920159305e-5,3.686957478771082e-8,0.001601891799677878,-4.750708267512769e-5,3.6661070725469196e-8,0.0016020220967839574,-4.730984733590426e-5,3.65002268054441e-8,0.0016021214376728508,-4.7197895387483466e-5,3.640855159267248e-8,0.0016022329539292035,-4.7178441191331395e-5,3.6390568883612766e-8,0.001602398098868516,-4.723486700987873e-5,3.64317778525816e-8,0.0016026451775172069,-4.7330459524417435e-5,3.6502037536061675e-8,0.0016029812826023223,-4.741790311922242e-5,3.6563402100527594e-8,0.0016033900211863004,-4.7451924030049034e-5,3.658023478305435e-8,0.0016038359142873748,-4.7401493578198037e-5,3.65287527576269e-8,0.0016042743565764664,-4.725778830099e-5,3.6403069368047857e-8,0.0016046639296792753,-4.703526837810497e-5,3.621574128865795e-8,0.0016049768310006606,-4.676579911472799e-5,3.599284252644777e-8,0.0016052041001474093,-4.6488499312397777e-5,3.576575444073776e-8,0.0016053547788864799,-4.623936983449527e-5,3.556292473478258e-8,0.0016054506685802667,-4.604404725371659e-5,3.540424269592429e-8,0.00160551955904301,-4.591491456251917e-5,3.529894528530359e-8,0.0016055893304846428,-4.585176544402924e-5,3.5246319584402404e-8,0.0016056839738281931,-4.584435487657563e-5,3.523780378361235e-8,0.0016058214226180075,-4.58754099005351e-5,3.525934967930275e-8,0.0016060125662822487,-4.5923316964371105e-5,3.5293484731850514e-8,0.0016062607469574757,-4.5964330399595076e-5,3.5321033008763995e-8,0.0016065612721366269,-4.597465556251913e-5,3.5322825752794e-8,0.001606900939181552,-4.5932990607520925e-5,3.528185027009399e-8,0.0016072580949436541,-4.582396800827508e-5,3.518611857277115e-8,0.0016076041773001588,-4.564246758849356e-5,3.503214741997083e-8,0.001607907835484071,-4.539791130326102e-5,3.482829369055841e-8,0.001608142149154005,-4.511646354493401e-5,3.4596304332457856e-8,0.0016082937279128775,-4.483839603063741e-5,3.4368956580540236e-8,0.001608370164011681,-4.460905850485839e-5,3.418262319337986e-8,0.0016084013367679887,-4.4465215778220584e-5,3.4066244784300986e-8,0.0016084321421592992,-4.442209614898366e-5,3.4031040378216796e-8,0.0016085087032214472,-4.4467328910789975e-5,3.406590890538271e-8,0.001608663854204168,-4.4564751128790306e-5,3.414084287148784e-8,0.0016089078261996121,-4.466603533873435e-5,3.4216585652257157e-8,0.0016092268749752002,-4.472491235101269e-5,3.425621097733665e-8,0.0016095888815234746,-4.470896660568734e-5,3.4234524970492415e-8,0.00160995294459917,-4.46061700180591e-5,3.414304169545714e-8,0.0016102797685153603,-4.442554150736995e-5,3.39901449867369e-8,0.001610540291413511,-4.41928249660299e-5,3.379729090404697e-8,0.001610720877149768,-4.3942959524330366e-5,3.3592785051752095e-8,0.0016108243718107255,-4.3711535533740247e-5,3.340493987008991e-8,0.0016108673896750982,-4.352740556905542e-5,3.325631883018611e-8,0.0016108751528596623,-4.340803798367828e-5,3.31602500419108e-8,0.0016108756639389974,-4.3358117340029234e-5,3.31199083561361e-8,0.00161089471982018,-4.33708154841172e-5,3.312942713946964e-8,0.0016109525410755215,-4.34306101333567e-5,3.317612870807587e-8,0.0016110620470242626,-4.351655218140907e-5,3.3243045504261954e-8,0.001611228317562383,-4.360524372648092e-5,3.331122931252226e-8,0.0016114486396584151,-4.367330914275547e-5,3.336174083792286e-8,0.0016117127150576606,-4.3699607289291936e-5,3.33775293772246e-8,0.0016120029665654158,-4.366764384768521e-5,3.3345510827283086e-8,0.0016122953248352881,-4.35685848202546e-5,3.3259070099345036e-8,0.0016125613483437497,-4.340490324202378e-5,3.312093756709973e-8,0.0016127727551766623,-4.319382193216696e-5,3.294576076085041e-8,0.0016129088996316033,-4.296843215561775e-5,3.276074107332174e-8,0.0016129659137071207,-4.277350269527232e-5,3.260204841704383e-8,0.0016129634518711477,-4.2654123502679954e-5,3.250560511019986e-8,0.0016129434192342419,-4.263951160928507e-5,3.249413087936494e-8,0.0016129578689934336,-4.272950726670111e-5,3.25664702196115e-8,0.001613050232896208,-4.2892278302879625e-5,3.2696007974918103e-8,0.0016132395138366183,-4.307566567224347e-5,3.2840080832235315e-8,0.0016135153781361821,-4.3225967007183096e-5,3.295532521363271e-8,0.0016138447598283675,-4.330446141592195e-5,3.3011068605873004e-8,0.0016141845061787268,-4.329558915141256e-5,3.299579503566333e-8,0.0016144937858859182,-4.320654916003372e-5,3.29165093334752e-8,0.0016147426836319956,-4.3061418898431364e-5,3.2793617549553344e-8,0.0016149162538619413,-4.28932148940195e-5,3.2654235700933185e-8,0.0016150148382885333,-4.273622151749938e-5,3.252591778532962e-8,0.0016150517857130536,-4.261972946654225e-5,3.243173477682972e-8,0.001615049514803641,-4.256367933918242e-5,3.238701919898679e-8,0.0016150347633862986,-4.2576490174574447e-5,3.239787068664833e-8,0.0016150339039934956,-4.265505690214593e-5,3.24613058418649e-8,0.0016150690590622733,-4.278649690659109e-5,3.2566675877575025e-8,0.0016151554483356746,-4.2951022505443604e-5,3.269788817933618e-8,0.0016153001048231429,-4.312527285417708e-5,3.283598386574173e-8,0.0016155017602802555,-4.328548587995333e-5,3.2961656880308e-8,0.0016157514557302796,-4.3410193344149555e-5,3.305749480030836e-8,0.0016160335151886938,-4.348253336100209e-5,3.310998203842222e-8,0.0016163267962227231,-4.3492450229067064e-5,3.311139396130571e-8,0.001616606420595729,-4.343902077762299e-5,3.306167660919614e-8,0.001616846570836147,-4.3332918110579625e-5,3.297027424956425e-8,0.0016170251774682734,-4.319829401359851e-5,3.285736904569684e-8,0.0016171308087405997,-4.307222907662207e-5,3.2753160720529384e-8,0.0016171704476762414,-4.299915965162309e-5,3.2693234113441636e-8,0.0016171742841552047,-4.301865193973153e-5,3.2708769773927315e-8,0.0016171918923307148,-4.314894035091985e-5,3.281350053431754e-8,0.0016172768691222427,-4.337450691395369e-5,3.299396166424684e-8,0.0016174652144145727,-4.364756211844907e-5,3.321089173978478e-8,0.0016177597932134746,-4.390561146011057e-5,3.341354613711286e-8,0.0016181304852361284,-4.4095543629212986e-5,3.3559243265705895e-8,0.0016185284692897027,-4.4190547319258514e-5,3.362705585213057e-8,0.0016189045522376445,-4.4193243891010715e-5,3.362020601659291e-8,0.0016192223969067512,-4.412817824935237e-5,3.355967969498163e-8,0.0016194638193470891,-4.403063195720452e-5,3.34748138358053e-8,0.0016196280163832983,-4.393679585500097e-5,3.339511192107193e-8,0.0016197277267549035,-4.3877154423368346e-5,3.334489133236136e-8,0.0016197845593948158,-4.387287847418416e-5,3.334056960624522e-8,0.0016198245204375643,-4.3934319125600074e-5,3.3389732573910446e-8,0.0016198739737394417,-4.4060948688515964e-5,3.3491313790702704e-8,0.001619956137050907,-4.424248547766236e-5,3.3636593203828094e-8,0.0016200882954145463,-4.4460987523551896e-5,3.381084517949932e-8,0.0016202798937417601,-4.469366279624242e-5,3.399550450501883e-8,0.0016205316675254457,-4.4916122131234496e-5,3.417072218106146e-8,0.0016208358841783572,-4.51056635939364e-5,3.431804144775011e-8,0.0016211775123474187,-4.524417861154815e-5,3.442285758382958e-8,0.0016215360341788234,-4.532053562216261e-5,3.447647579529873e-8,0.0016218877589150979,-4.5332465127465866e-5,3.4477688314315185e-8,0.0016222086413283134,-4.528794941479019e-5,3.4433800071019065e-8,0.0016224777898770169,-4.520602795248432e-5,3.436102856785716e-8,0.0016226820080681198,-4.511649275684907e-5,3.428394416218811e-8,0.0016228212897336288,-4.505716598228851e-5,3.423303906504118e-8,0.0016229139005976808,-4.50670885186496e-5,3.423920259833186e-8,0.0016229978830992289,-4.51749217202737e-5,3.432456868826437e-8,0.0016231246866747196,-4.538503437297744e-5,3.449162408965321e-8,0.0016233428870291516,-4.566853319778398e-5,3.4716252957965794e-8,0.0016236772248806965,-4.596812991238768e-5,3.495178509204106e-8,0.0016241152647686152,-4.621869465816446e-5,3.514559949367053e-8,0.0016246116056889723,-4.637312377459764e-5,3.526003661180751e-8,0.0016251072872445914,-4.6418152194176277e-5,3.5285198490338464e-8,0.0016255516901675028,-4.637296697358738e-5,3.523771443245092e-8,0.0016259155653828902,-4.627592173555477e-5,3.5149685697300395e-8,0.0016261928281600965,-4.616943668607092e-5,3.5056106184870745e-8,0.0016263953747431522,-4.608946050777786e-5,3.4986134383754507e-8,0.00162654592076792,-4.606055522365073e-5,3.4959174040392114e-8,0.0016266717530924076,-4.6094961601108544e-5,3.498436583192719e-8,0.0016268002162611959,-4.619362578856872e-5,3.506170277704274e-8,0.0016269555762756986,-4.6347898809298577e-5,3.5183591772346576e-8,0.0016271567027249208,-4.654151467710764e-5,3.533649211716943e-8,0.0016274153179251607,-4.675286847043376e-5,3.550269075582101e-8,0.0016277348011426761,-4.695766887346226e-5,3.566236234788382e-8,0.0016281097039318963,-4.7132008983412574e-5,3.5796030279421156e-8,0.0016285262644494334,-4.7255678611228e-5,3.5887315314142226e-8,0.001628964073625187,-4.731526564371127e-5,3.5925567937765023E-08,0.0016293987695045343,-4.7306594472402196e-5,3.5907931482636357e-8,0.0016298055166128098,-4.723617482978707e-5,3.5840485560798704e-8,0.0016301629750232944,-4.7121376003895105e-5,3.573820180050115e-8,0.0016304574112304933,-4.698912835410786e-5,3.562359354313474e-8,0.001630686636381212,-4.687296006046646e-5,3.552402309108488e-8,0.001630863266571223,-4.6807921698255846e-5,3.546744809793738e-8,0.001631016074302961,-4.6822961021669483e-5,3.5476346222796364e-8,0.0016311873490471736,-4.6931285427303824e-5,3.556023149782128e-8,0.0016314241196807519,-4.712134705140385e-5,3.570874980570606e-8,0.0016317631244090534,-4.7353656267366736e-5,3.5889370924150126e-8,0.0016322143049490748,-4.756904084464057e-5,3.605411987293246e-8,0.0016327523237028758,-4.770869469055887e-5,3.615570802256036e-8,0.001633323721960312,-4.7737093003807625e-5,3.616600609540491e-8,0.0016338673630050457,-4.7654512699828896e-5,3.608614967055138e-8,0.0016343363161102794,-4.7492623882838964e-5,3.59428498486487e-8,0.0016347097760828822,-4.729839554612501e-5,3.577507367476015e-8,0.0016349924051370127,-4.7117130386448616e-5,3.5619987353530545e-8,0.0016352061343948639,-4.6981902350859326e-5,3.550426387925348e-8,0.0016353807083681227,-4.691028273741784e-5,3.544154910868567e-8,0.0016355464804455415,-4.690570628738172e-5,3.543383998937961e-8,0.001635730112170018,-4.696057989449839e-5,3.5474262687520425e-8,0.0016359523601496132,-4.705941012943231e-5,3.5549738432914185e-8,0.0016362269041772656,-4.718145036852111e-5,3.56431208201011e-8,0.0016365595879771274,-4.730304536267612e-5,3.5735016865504467e-8,0.0016369478987237219,-4.7400035126582016e-5,3.58056778292684e-8,0.0016373808483354118,-4.7450543227840547e-5,3.583728050603426e-8,0.0016378397017732427,-4.7438197284311285e-5,3.581663456998011e-8,0.0016383000265438497,-4.7355354305080354e-5,3.573790790644766e-8,0.001638735210162438,-4.720557229499285e-5,3.5604668453241686e-8,0.0016391211394910926,-4.700451726643738e-5,3.5430520082254106e-8,0.001639441306452008,-4.6778640180967995e-5,3.5237790208829276e-8,0.0016396912690668532,-4.6561377647454084e-5,3.5054142350092676e-8,0.0016398813658379573,-4.63872399230719e-5,3.490753406266736e-8,0.0016400368292994823,-4.628458200577974e-5,3.4820292858860436e-8,0.0016401946504560447,-4.6268117996810935e-5,3.480322538106792e-8,0.0016403967479677747,-4.6332728578918845e-5,3.485095674241419e-8,0.001640679685853359,-4.645083249127904e-5,3.494018708827335e-8,0.0016410627568417529,-4.657595311703952e-5,3.5032828146860476e-8,0.0016415385136823188,-4.665404102506928e-5,3.5085209016852697e-8,0.0016420712361589218,-4.6640593747802424e-5,3.506183028304087e-8,0.0016426066758982037,-4.651680204060536e-5,3.49483030632206e-8,0.0016430902029990438,-4.6296213477060036e-5,3.4756616314912035e-8,0.0016434846325752775,-4.601807762842053e-5,3.451956176891535e-8,0.0016437792010674768,-4.573164001443794e-5,3.4277753576294015e-8,0.0016439873944463735,-4.5480182565328244e-5,3.406648234300473e-8,0.0016441377649539473,-4.5291435015766347e-5,3.390791520498886e-8,0.0016442637177816871,-4.517553440841134e-5,3.38096166616314e-8,0.0016443960339398652,-4.512789702654878e-5,3.376713660815342e-8,0.0016445588953631549,-4.5133752929414504e-5,3.3767884966551584e-8,0.0016447684565497988,-4.517231429766106e-5,3.3794572068923304e-8,0.001645032669366525,-4.521994135279829e-5,3.382772789479797e-8,0.0016453514524502528,-4.5252519765481794e-5,3.3847558228796395e-8,0.0016457168505185967,-4.524759349498278e-5,3.38356608525806e-8,0.001646113327512554,-4.51867851078022e-5,3.3777059144320585e-8,0.0016465187233436285,-4.5058731090684236e-5,3.366270182651552e-8,0.0016469065595708819,-4.4862213010709696e-5,3.349209230451183e-8,0.0016472501485759548,-4.460855757214049e-5,3.327522050357837e-8,0.0016475282892311342,-4.43219688174928e-5,3.303267631530774e-8,0.001647731361928809,-4.40365769207798e-5,3.279298525555044e-8,0.0016478658173717641,-4.378990661504161e-5,3.2587010223876336e-8,0.001647955012278325,-4.361395560197095e-5,3.244050743190803e-8,0.0016480353368982224,-4.352634140384957e-5,3.236693816783387e-8,0.0016481481573200063,-4.352430208745986e-5,3.236282743263174e-8,0.0016483294908475749,-4.358362185466893e-5,3.240727442369534e-8,0.001648600066709863,-4.366323577305269e-5,3.2466074614676396e-8,0.0016489585077819739,-4.371486073861877e-5,3.249977289857885e-8,0.0016493799815096145,-4.369565905864213e-5,3.247396466644824e-8,0.0016498216574363398,-4.35805854427313e-5,3.236916312326058e-8,0.0016502342591044501,-4.337016148742985e-5,3.2186868815840264e-8,0.0016505762173780565,-4.309020706568123e-5,3.194909432152713e-8,0.0016508250968513124,-4.278317246005813e-5,3.1691092721698956e-8,0.0016509819009967624,-4.24946924788503e-5,3.1450271221881416e-8,0.0016510674183862332,-4.226105950962592e-5,3.125597438215787e-8,0.0016511135338679924,-4.210202576888828e-5,3.112374663814163e-8,0.0016511538874274358,-4.201993406387043e-5,3.105483497910188e-8,0.0016512170388640625,-4.200324771532353e-5,3.1039256218679945e-8,0.0016513230147448136,-4.2031673250908966e-5,3.106005739207479e-8,0.0016514824899899535,-4.2080862105879425e-5,3.109711887696447e-8,0.0016516973653265966,-4.212590433392133e-5,3.1129923067476226e-8,0.001651961729402234,-4.214373526750093e-5,3.113947244255304e-8,0.001652262709403183,-4.2115034434587586e-5,3.11098777670916e-8,0.001652581282236162,-4.20262355409554e-5,3.103010807540562e-8,0.001652893563089459,-4.1871968498026697e-5,3.089609413234407e-8,0.0016531733119630543,-4.165773999853627e-5,3.071294747399099e-8,0.001653396304072018,-4.1401950749318465e-5,3.0496512296258735e-8,0.0016535465337220673,-4.113559677284715e-5,3.027291157231968e-8,0.00165362283822673,-4.08978653952933e-5,3.007468972951524e-8,0.001653643051829214,-4.072709688518788e-5,2.993320892854408e-8,0.0016536425379715574,-4.064915069866908e-5,2.986905479463843e-8,0.0016536658656256423,-4.0667642322225216e-5,2.988415848613424e-8,0.0016537538623654171,-4.076077998128367e-5,2.995949305378407e-8,0.0016539310239152949,-4.088682206365838e-5,3.0059909699632935e-8,0.0016541982039326847,-4.099610396545309e-5,3.0144299811144e-8,0.0016545328263749025,-4.1044953793367646e-5,3.0177129842224954e-8,0.0016548957129889686,-4.100692229408898e-5,3.013755445295461e-8,0.0016552417765755723,-4.0878540058739154e-5,3.0023865014476645e-8,0.0016555313813681053,-4.0678744800547455e-5,2.985267628556814e-8,0.0016557394578348126,-4.0442706059349526e-5,2.965356616713717e-8,0.0016558602205119905,-4.0212091256584694e-5,2.9460936650144332e-8,0.0016559066064064827,-4.002467175107929e-5,2.9305507808049016e-8,0.0016559051411805651,-3.990618815504244e-5,2.9207810627581598e-8,0.0016558883208421219,-3.986641734804314e-5,2.9175190181454984e-8,0.0016558871094012825,-3.989970995789232e-5,2.920244204328383e-8,0.0016559255239323612,-3.9988717521732396e-5,2.9274958922300416e-8,0.0016560179934640134,-4.010939295998521e-5,2.9372803922459204e-8,0.0016561690600313398,-4.023567907279301e-5,2.947446435780696e-8,0.0016563744709726966,-4.0343077329543915e-5,2.9559704687070583e-8,0.0016566227473716701,-4.04110569171678e-5,2.9611550177314757e-8,0.0016568967011817656,-4.0424765170366424e-5,2.9617783814663727e-8,0.0016571748725286567,-4.03766005139679e-5,2.9572361572399208e-8,0.001657433277921752,-4.026798280415287e-5,2.9476932544257488e-8,0.0016576481341211992,-4.011122108290574e-5,2.9342315929308953e-8,0.0016578002161897344,-3.993068140079735e-5,2.918927620055278e-8,0.0016578808882250792,-3.97616016784514e-5,2.904730413787855e-8,0.0016578983842147038,-3.964455859766971e-5,2.894986463588264e-8,0.0016578810457861806,-3.961480375790006e-5,2.8925550308629004e-8,0.0016578735047228827,-3.968893422226867e-5,2.8987194852995764e-8,0.0016579242628156493,-3.985510074322592e-5,2.9124022121367424e-8,0.0016580686098759247,-4.007348282468502e-5,2.9302307407495906e-8,0.001658315212483153,-4.028875236110224e-5,2.9475907260284677e-8,0.0016586433615687947,-4.044883713349159e-5,2.9601907087753384e-8,0.0016590113970561915,-4.0520869931719907e-5,2.9653810852602028e-8,0.0016593709065407672,-4.049825768358674e-5,2.9627222749183985e-8,0.0016596801558158162,-4.039855087642855e-5,2.953777937619335e-8,0.0016599128451770951,-4.025546688761349e-5,2.9414208659192474e-8,0.001660061372670357,-4.010894002692455e-5,2.928985879812469e-8,0.0016601355508499426,-3.999598249842553e-5,2.9195098085642385e-8,0.0016601582578794414,-3.994386969418339e-5,2.9151836997324146e-8,0.0016601594601349523,-3.9966285990856224e-5,2.9170608546724392E-08,0.0016601699239930832,-4.006254573710791e-5,2.9250175101477995e-8,0.0016602158041532625,-4.021951416375853e-5,2.9379253301896273e-8,0.0016603149537395255,-4.041536412718664e-5,2.9539614735345927e-8,0.00166047527124585,-4.062408817363606e-5,2.970971399095024e-8,0.0016606948895783432,-4.081978853524619e-5,2.986812443718438e-8,0.0016609636296508186,-4.098007900947471e-5,2.9996308350286483e-8,0.0016612650174455234,-4.108841983012459e-5,3.0080601450579956e-8,0.0016615783991599132,-4.113565076063209e-5,3.01135932639863e-8,0.00166188105966781,-4.11211016170598e-5,3.009513534055636e-8,0.001662150531071203,-4.105352714493535e-5,3.0033097660775586e-8,0.0016623675379770072,-4.095183539624763e-5,2.994381510048298e-8,0.0016625201033940193,-4.0844962473662907e-5,2.98517361833591e-8,0.0016626087554811723,-4.0769446539057265e-5,2.9787188477707118e-8,0.0016626514160071732,-4.0762994359918156e-5,2.9780965991072815e-8,0.0016626848298044925,-4.0853432310140516e-5,2.9855291758414986e-8,0.0016627585180696237,-4.104557297078488e-5,3.001319945286181e-8,0.0016629196343020275,-4.1312810810254054e-5,3.023184378109478e-8,0.0016631936622173485,-4.1601319751516236e-5,3.046615302114082e-8,0.0016635717482644979,-4.1848343784879263e-5,3.0664058183648755e-8,0.0016640132555107746,-4.200576477773202e-5,3.0786057280139574e-8,0.0016644620386205267,-4.205590491481198e-5,3.0818301607812385e-8,0.001664866364125141,-4.201279974388258e-5,3.0773509768777413e-8,0.001665192705554029,-4.1912072651471524e-5,3.068227045198648e-8,0.0016654301308830564,-4.1797159168452974e-5,3.0581274453788686e-8,0.0016655875286445104,-4.170783384293948e-5,3.050359333944092e-8,0.001665687465604892,-4.167319984191924e-5,3.0472896827926416e-8,0.0016657594905155892,-4.170874776273719e-5,3.050124412626773e-8,0.0016658342301060726,-4.181625386895793e-5,3.058929521132896e-8,0.0016659386770511526,-4.1985505643195065e-5,3.0727965256502515e-8,0.0016660927790692734,-4.2197234556937535e-5,3.0900934221248055e-8,0.001666307394327278,-4.242676039351328e-5,3.108761361993264e-8,0.0016665836116936171,-4.2647885737481854e-5,3.1266263776837525e-8,0.0016669133750296294,-4.2836615240290816e-5,3.141699700450582e-8,0.0016672812040082632,-4.29742538784887e-5,3.1524353127941986e-8,0.001667666583854231,-4.3049585079543835e-5,3.157918783389978e-8,0.0016680466219054927,-4.306016694156729e-5,3.1579840829446867e-8,0.0016683988209936053,-4.3012919060955386e-5,3.153264421759085e-8,0.0016687039684606657,-4.2924075892586436e-5,3.145177637443578e-8,0.001668949248977301,-4.281847186208641e-5,3.135844372913255e-8,0.001669131786259909,-4.272775819299064e-5,3.127914542178871e-8,0.0016692623804481766,-4.268653070428464e-5,3.1242302733313314e-8,0.0016693680627836978,-4.272526972232355e-5,3.1272440060728026e-8,0.0016694908319522278,-4.286013130087455e-5,3.138195636848311e-8,0.0016696795079151228,-4.3082236687797025e-5,3.156257050561017e-8,0.0016699738397906113,-4.335263606913009e-5,3.178138863954782e-8,0.0016703860640257925,-4.3610062290433165e-5,3.1987399692878435e-8,0.0016708909850968417,-4.3792311883293744e-5,3.212916881254575e-8,0.0016714333005318656,-4.3861116917503015e-5,3.217546090751692e-8,0.0016719492822700806,-4.3815726814167675e-5,3.2126524444803504e-8,0.0016723897475633752,-4.368843070089595e-5,3.201025739742718e-8,0.0016727324810957033,-4.352796787840965e-5,3.1868119479992646e-8,0.0016729818078562674,-4.338203342372647e-5,3.174024705968066e-8,0.001673160510358554,-4.3286058936851166e-5,3.165596355869807e-8,0.0016733001997954202,-4.325918304672302e-5,3.1630534790235667e-8,0.0016734335563792723,-4.3305040518058526e-5,3.166611119385737e-8,0.0016735892269826305,-4.3414715646800075e-5,3.1754482304429493e-8,0.0016737888324904195,-4.357023755789901e-5,3.188016234879414e-8,0.0016740453537005702,-4.3748057320064645e-5,3.202330368510447e-8,0.0016743624861162748,-4.392241829557162e-5,3.216241408654458e-8,0.0016747348092937828,-4.406860454410632e-5,3.227695616684352e-8,0.0016751487805059524,-4.416603666815915e-5,3.234987839857888e-8,0.001675584637718124,-4.420100590072595e-5,3.236992864406305e-8,0.0016760191120139118,-4.4168658691226686e-5,3.23333885762874e-8,0.0016764286255676625,-4.407397693962139e-5,3.224493873197347e-8,0.0016767926831136699,-4.393169599546051e-5,3.211753662941352e-8,0.001677097237930815,-4.3765093105344423e-5,3.197123217472216e-8,0.00167733777658621,-4.360358105039846e-5,3.183091478114156e-8,0.001677521869398556,-4.347902774846859e-5,3.172303510741116e-8,0.0016776707408900074,-4.342049118287758e-5,3.167116295241453e-8,0.0016778187422698135,-4.3447130391136005e-5,3.1690241873688606e-8,0.0016780089503785252,-4.3560098509420256e-5,3.178016652122048e-8,0.0016782833720448765,-4.373614563117936e-5,3.192080369790514e-8,0.0016786683666438333,-4.3927655024510755e-5,3.207221484054373e-8,0.001679160369115784,-4.407367191046424e-5,3.2183808817329206e-8,0.0016797209875307913,-4.412114009758808e-5,3.221188471697183e-8,0.0016802880403294148,-4.404672142738793e-5,3.213771971384632e-8,0.001680798773740542,-4.386597338792192e-5,3.197519004817064e-8,0.0016812121713359505,-4.362439078443936e-5,3.176318558267004e-8,0.0016815186777889915,-4.337739128303645e-5,3.1548644038694827e-8,0.0016817358173011794,-4.317163234212843e-5,3.137068706839119e-8,0.0016818964774662018,-4.303518866881324e-5,3.125235326029229e-8,0.0016820373053456571,-4.2976515779093504e-5,3.1199916976096325e-8,0.0016821908517579908,-4.298835334932385e-5,3.120645643391533e-8,0.001682381643870257,-4.305295001771544e-5,3.125647495228362e-8,0.0016826248641123465,-4.314669659029766e-5,3.1329875743603594e-8,0.0016829262935964223,-4.3243765750394774e-5,3.1404959032322505e-8,0.0016832827993444842,-4.3319058823132525e-5,3.1460773886099394e-8,0.0016836831808576592,-4.335081474193989e-5,3.147921387142313e-8,0.0016841094761317773,-4.332309858073908e-5,3.144709006843145e-8,0.0016845389965708768,-4.322812581928537e-5,3.1358136502702837e-8,0.0016849472827916928,-4.30680097516396e-5,3.121454317459761e-8,0.001685311817324549,-4.28553785051464e-5,3.102747616737498e-8,0.0016856160259362443,-4.2612465496661675e-5,3.081620600067579e-8,0.0016858529647612876,-4.2368472572295754e-5,3.060568908899294e-8,0.0016860279929869306,-4.2155252212118004e-5,3.042272064814904e-8,0.0016861597397253318,-4.2001707138160697e-5,3.029110352696416e-8,0.001686278802546357,-4.192753075558542e-5,3.0226450956112963e-8,0.0016864236511896307,-4.1937096150845514e-5,3.023131644925384e-8,0.0016866333005143353,-4.20148809990313e-5,3.029172471873377e-8,0.0016869370383114897,-4.212468985170035e-5,3.0376837396555156e-8,0.0016873432300061099,-4.221528826700933e-5,3.0443795692792346e-8,0.0016878316433975797,-4.223370069387507e-5,3.044875659726567e-8,0.0016883549945588567,-4.214339067565662e-5,3.0361907947096335e-8,0.0016888524992501178,-4.193939125212146e-5,3.017996755366323e-8,0.0016892708942925403,-4.165129888299081e-5,2.992858118803242e-8,0.0016895823148465297,-4.1331399559831654e-5,2.9652240492607542e-8,0.0016897900659125485,-4.103474076847829e-5,2.9397395175287495e-8,0.0016899216625505006,-4.080203475990938e-5,2.919799465346154e-8,0.0016900157054978312,-4.0652031392961096e-5,2.906915313908238e-8,0.0016901099208097574,-4.058288462987776e-5,2.900853004866035e-8,0.0016902339270298944,-4.057817378667731e-5,2.900165126974593e-8,0.0016904065626526063,-4.061354355146046e-5,2.9027644312851774e-8,0.0016906360051758417,-4.0661950119559325e-5,2.9063648467584324e-8,0.0016909209995482196,-4.069723028481099e-5,2.9087710885649258e-8,0.0016912522654108416,-4.069653884596306e-5,2.9080721860103752e-8,0.0016916138646757722,-4.064230977992161e-5,2.9028017183053914e-8,0.0016919847467131485,-4.052416230559773e-5,2.8921020015667242e-8,0.0016923408945919195,-4.034078146507427e-5,2.8758904768726176e-8,0.0016926584456100585,-4.0101338254094135e-5,2.854984370404633e-8,0.0016929177886920088,-3.98256830559316e-5,2.8311126828899853e-8,0.001693108077881154,-3.954252987433632e-5,2.8067479641023334e-8,0.0016932310746483276,-3.928519728252996e-5,2.7847258747180767e-8,0.0016933029691601435,-3.908519792267514e-5,2.767686433700739e-8,0.0016933530634665743,-3.896487647791898e-5,2.7574483226122663e-8,0.0016934189419301243,-3.893091195901987e-5,2.7544749748504323e-8,0.0016935386906464923,-3.897054727601237e-5,2.7575867805514548e-8,0.001693741560057379,-3.905203356829756e-5,2.7640332995878002e-8,0.0016940391412425884,-3.9130122676386634e-5,2.7699808677760945e-8,0.0016944196388182435,-3.9156405028759944e-5,2.7713881316001143e-8,0.0016948479443695268,-3.909270277009998e-5,2.7651188701418565e-8,0.0016952732925359264,-3.892369137957591e-5,2.749979593321849e-8,0.0016956435737868081,-3.8663481150373246e-5,2.7272496371780773e-8,0.001695921508217519,-3.835205250275875e-5,2.7003629854952092e-8,0.0016960956761315402,-3.804202367397545e-5,2.67378143191e-8,0.0016961815319577094,-3.778160361537539e-5,2.6515529524935576e-8,0.001696213032473906,-3.7601416121365983e-5,2.6362069074866936e-8,0.0016962301457196613,-3.750973613700963e-5,2.628370233701135e-8,0.0016962680770975457,-3.749551816840239e-5,2.627045669394839e-8,0.0016963512376621233,-3.753538910232288e-5,2.63021853253086e-8,0.0016964917453452192,-3.7600818583413475e-5,2.635465438290942e-8,0.001696690651419292,-3.766350660714986e-5,2.6404007688425848e-8,0.001696940137771745,-3.769874102950349e-5,2.642947829630893e-8,0.0016972256658882062,-3.7687335396604675e-5,2.6414948818137022e-8,0.0016975277902204365,-3.761694740849289e-5,2.635007890531258e-8,0.001697823895555182,-3.7483365373189244e-5,2.6231474474216885e-8,0.0016980904064073249,-3.729186542931282e-5,2.6063916854335785e-8,0.0016983059629982868,-3.705818431813839e-5,2.5861193564983613e-8,0.00169845567523588,-3.6808209557159376e-5,2.5645733638452276e-8,0.0016985358748413822,-3.6575286342219624e-5,2.544614117888997e-8,0.0016985578725676185,-3.6394393189292205e-5,2.5292069524213555e-8,0.0016985486004877865,-3.629367901585675e-5,2.5206946956193076e-8,0.001698546470920179,-3.628561471787852e-5,2.5200532434859682e-8,0.0016985925376170278,-3.6361141746669543e-5,2.5264171502710526e-8,0.0016987192823167937,-3.648970911878939e-5,2.537113473313952e-8,0.0016989407603901555,-3.66260131869023e-5,2.548261022146134e-8,0.0016992475797464068,-3.672165020583402e-5,2.5557724392811732e-8,0.0016996084606618878,-3.673811638230782e-5,2.5564517650592807e-8,0.001699977956475142,-3.6657310285023185e-5,2.5488638588697726e-8,0.0017003082070326627,-3.648654916289649e-5,2.5337305501061796e-8,0.001700561508238771,-3.625653060246809e-5,2.5137301531646965e-8,0.0017007199892369825,-3.601259358681587e-5,2.492738326789755e-8,0.0017007892677775634,-3.580192599678626e-5,2.474739066190967e-8,0.0017007949978842718,-3.566104751616369e-5,2.462773297309177e-8,0.0017007740285271689,-3.560774970729352e-5,2.4582760104628268e-8,0.001700763881614479,-3.5639540723169225e-5,2.4609678123756305e-8,0.0017007942876682992,-3.5737747088271245e-5,2.4692199666377635e-8,0.0017008827935677405,-3.5874468764077714e-5,2.48064931342209e-8,0.0017010342865269056,-3.601946403066804e-5,2.4926953335125145e-8,0.0017012429683338664,-3.614526778038245e-5,2.503041713192252e-8,0.0017014952046849267,-3.623023427960677e-5,2.5098644185563178e-8,0.001701772238022168,-3.626002631665762e-5,2.5119562344499273e-8,0.0017020524196195597,-3.6228338899696296e-5,2.5087946189913077e-8,0.0017023131682198593,-3.613749747676565e-5,2.500601481098576e-8,0.0017025331952084945,-3.599911636755302e-5,2.488403054979358e-8,0.001702695545569224,-3.583443484893609e-5,2.4740519688495516e-8,0.001702791658995604,-3.567341761960704e-5,2.4601345097724025e-8,0.001702825905263925,-3.5551336305842663e-5,2.449660803475595e-8,0.0017028188818827854,-3.550180632355494e-5,2.4454604213756933e-8,0.001702806735149731,-3.5546798682885895e-5,2.4493348244526906e-8,0.0017028341827005904,-3.5686793861779424e-5,2.4612368548798255e-8,0.0017029417119942861,-3.589622192692521e-5,2.4789084250634145e-8,0.001703151464359933,-3.612826882154989e-5,2.4983140816697334e-8,0.0017034584180842351,-3.632857896050061e-5,2.514822835935455e-8,0.0017038313132765339,-3.645226816286234e-5,2.5246595649292e-8,0.0017042226379164888,-3.647699395454146e-5,2.5260079820686068e-8,0.0017045828447247262,-3.640761249596701e-5,2.5193854756660187e-8,0.0017048733046878682,-3.627237682470769e-5,2.5072903100127402e-8,0.0017050744960167964,-3.611354589471979e-5,2.4933747465570844e-8,0.0017051883610562926,-3.597597816658294e-5,2.4814589910546375e-8,0.0017052354342512147,-3.5896752180398834e-5,2.4746512664333185e-8,0.0017052482576193312,-3.589793749996182e-5,2.4747526264296278e-8,0.001705263072666433,-3.598363726072869e-5,2.482032549880074e-8,0.0017053119227668128,-3.614137236019604e-5,2.4953695706256513e-8,0.0017054169711461474,-3.6346798808851755e-5,2.5126630491637535e-8,0.001705587948875609,-3.656997064057401e-5,2.5313627491764613e-8,0.0017058225445119196,-3.678132058142517e-5,2.548965965479151e-8,0.0017061087821257628,-3.69561651974611e-5,2.563388881603951e-8,0.0017064282269366776,-3.70773600928232e-5,2.5731871018470053e-8,0.0017067591018042412,-3.713639521195745e-5,2.5776518819360373e-8,0.0017070789070781516,-3.71335783856623e-5,2.576833424327725e-8,0.001707366647808429,-3.7077896034809675e-5,2.5715344204894712e-8,0.0017076050669122245,-3.6986775316050295e-5,2.563286430776859e-8,0.0017077833482693745,-3.6885519284883346e-5,2.5542879446377526e-8,0.0017079005422884115,-3.6805662765103294e-5,2.547244983570222e-8,0.0017079692563718653,-3.678101653653675e-5,2.545019000338502e-8,0.0017080179220300188,-3.684031594380135e-5,2.549999137370553e-8,0.0017080887479602191,-3.699691368462634e-5,2.5632392147724558e-8,0.001708228641281455,-3.723898589582162e-5,2.583648649016691e-8,0.0017084735851781347,-3.752657719115359e-5,2.607763848747086e-8,0.0017088326289339622,-3.7800822890985845e-5,2.6305464895935834e-8,0.0017092809717665692,-3.800389880699946e-5,2.6470864658603684e-8,0.001709767617820864,-3.810010719756817e-5,2.6543979991628234e-8,0.0017102337850382358,-3.8086965178193554e-5,2.6523588534275293e-8,0.0017106319934249428,-3.799214504651016e-5,2.6434316445958196e-8,0.0017109375331463164,-3.786074079930412e-5,2.6315481437475767e-8,0.0017111503518974585,-3.774050858751181e-5,2.6208213356204093e-8,0.0017112901426587356,-3.767043065840216e-5,2.6145574168089167e-8,0.001711388473927356,-3.767435097338324e-5,2.6147233879245078e-8,0.0017114807478860903,-3.7759148181293965e-5,2.6218181852708225e-8,0.0017115993915441882,-3.791616629237784e-5,2.6350243451075947e-8,0.0017117688340202747,-3.812478479964005e-5,2.6525321161408846e-8,0.0017120025462314225,-3.8357269218783055e-5,2.671957407701288e-8,0.0017123022368902155,-3.858401705662783e-5,2.690781030939024e-8,0.0017126589667248331,-3.8778319536625255e-5,2.706742096037333e-8,0.0017130556713426438,-3.892000575518932e-5,2.718139609955358e-8,0.0017134704463890348,-3.8997637220543705e-5,2.72401837338603e-8,0.0017138799079658143,-3.900926090925543e-5,2.7242381927571813e-8,0.0017142621560916798,-3.896209930041389e-5,2.719452965369347e-8,0.0017145992769997747,-3.887164408049795e-5,2.7110327165076998e-8,0.0017148795732618073,-3.876038090260755e-5,2.7009443934541433e-8,0.0017150997739135154,-3.8656079592503165e-5,2.691587804537622e-8,0.0017152674011576832,-3.858919935674702e-5,2.6855564023675893e-8,0.001715402930080424,-3.858850645778573e-5,2.68525620088811e-8,0.0017155403030105689,-3.867411814540851e-5,2.6923223505940072e-8,0.001715723354598753,-3.884849496986257e-5,2.706875788258036e-8,0.0017159957908326042,-3.9088518326831626e-5,2.7268754434345864e-8,0.0017163851403779347,-3.9344697300168935e-5,2.748066663980295e-8,0.001716886993958065,-3.955318428218216e-5,2.7650053898035193e-8,0.0017174602847125158,-3.965909042471542e-5,2.773040269966326e-8,0.001718040134972025,-3.963938085916244e-5,2.770265841257851e-8,0.0017185625897166842,-3.9511228867599055e-5,2.758236823583223e-8,0.0017189868062355465,-3.932167724591736e-5,2.7410713552494807e-8,0.001719303790073166,-3.912724285345024e-5,2.7236765021706585e-8,0.0017195315916373054,-3.897569321704473e-5,2.710159348901865e-8,0.0017197039490144403,-3.889639604552238e-5,2.7029929542711243e-8,0.001719859026622647,-3.889874932274322e-5,2.7028998797406246e-8,0.0017200313178398767,-3.897534491821806e-5,2.7091549749431207e-8,0.0017202469671751624,-3.910684938799904e-5,2.7200319928931065e-8,0.001720521602018453,-3.926695176135516e-5,2.7332412797781222e-8,0.001720859794259045,-3.942689817955544e-5,2.7463158757262513e-8,0.001721255728863236,-3.955955466122989e-5,2.756947544016638e-8,0.0017216948873827532,-3.9642868900642176e-5,2.7632707506931933e-8,0.001722156569161592,-3.966254350579579e-5,2.764085344336467e-8,0.0017226170439005363,-3.9613697538888915e-5,2.7590003469533287e-8,0.001723052976870324,-3.9501301872358064e-5,2.7484764624405265e-8,0.0017234446600947672,-3.933941901930363e-5,2.733763268972299e-8,0.001723778754377761,-3.914951517199835e-5,2.7167486552635708e-8,0.0017240504576373702,-3.8958063040786535e-5,2.6997386666773607e-8,0.0017242650711087881,-3.8793531002493264e-5,2.6851810256787167e-8,0.0017244389431611393,-3.868270733259092e-5,2.675337383241879e-8,0.0017245995113033862,-3.864602832841346e-5,2.671885005626151e-8,0.0017247834536315045,-3.8691681327300336e-5,2.6754311849929e-8,0.0017250313802367769,-3.880929377612953e-5,2.6850034141866425e-8,0.001725377842565471,-3.896581169015178e-5,2.697723630726428e-8,0.0017258375470063556,-3.910800396460535e-5,2.7090318371162557e-8,0.0017263930836693708,-3.917572346874251e-5,2.7138107085967308e-8,0.0017269933872087041,-3.912436180795919e-5,2.7082925689746156e-8,0.0017275689865215494,-3.8945638522437385e-5,2.691835379492017e-8,0.0017280585048235183,-3.86727214245852e-5,2.6673635556659343e-8,0.001728431073422244,-3.836534884152783e-5,2.6400818438587404e-8,0.0017286923868734853,-3.808504387510162e-5,2.61532106623058e-8,0.0017288748816655678,-3.787530232705404e-5,2.5968120288942417e-8,0.0017290217154868146,-3.7754199534558863E-05,2.5860493154658515e-8,0.0017291734675064128,-3.771726995413944e-5,2.582562501534354e-8,0.0017293607820238672,-3.7744848247661723E-05,2.584579636728525e-8,0.001729602000315515,-3.780948874960963e-5,2.5896883802857644e-8,0.001729903599395464,-3.788165973355425e-5,2.595331727889163e-8,0.0017302617181777903,-3.7933690493989186e-5,2.5991389794231897e-8,0.0017306640141175572,-3.794259510943676e-5,2.5991547940454676e-8,0.001731091755867424,-3.789224556048095e-5,2.594015958103042e-8,0.001731522255539111,-3.7775051882364856e-5,2.5830937167328825e-8,0.0017319317604426708,-3.7593037290670407e-5,2.5665905426726304e-8,0.0017322987686243735,-3.735795299004614e-5,2.545555029736884e-8,0.0017326074067128012,-3.709011144855787e-5,2.5217806685687195e-8,0.0017328503457029842,-3.6815919057722917e-5,2.4975834819967113e-8,0.001733030801250284,-3.6564297546596944e-5,2.4754770932095832e-8,0.001733163245050693,-3.636230112525841e-5,2.4577788776660804e-8,0.0017332725692263016,-3.6230386059595666e-5,2.446195888578073e-8,0.001733391561335409,-3.6177777041230204e-5,2.4414354594100277e-8,0.0017335564073636222,-3.619837183913728e-5,2.4428778625296542e-8,0.001733799814146551,-3.626816379255833e-5,2.4483858210644657e-8,0.0017341419144584454,-3.634606741287226e-5,2.454398795466479e-8,0.0017345806750870597,-3.638048933612316e-5,2.4565021790145197e-8,0.0017350858869240476,-3.632295309658755e-5,2.4505843202086038e-8,0.0017356024788424108,-3.614624025006184e-5,2.4343764994910206e-8,0.0017360663216553012,-3.585874629062718e-5,2.408675934782713e-8,0.0017364275421104804,-3.550486845228883e-5,2.377374351553505e-8,0.001736668888599713,-3.514850340937432e-5,2.34602712311622e-8,0.001736808661045457,-3.4848567953173e-5,2.3197265336036242e-8,0.001736888544939611,-3.464037865199596e-5,2.301485336433552e-8,0.0017369558513605297,-3.4530440416808935e-5,2.29179595201377e-8,0.001737049707092597,-3.4502354376221574e-5,2.289165624475731e-8,0.0017371947516276504,-3.4526982344086895e-5,2.2910199010581445e-8,0.0017374008073448293,-3.4571512886728264e-5,2.2944984052831473e-8,0.001737665467048844,-3.460545560147143e-5,2.2969695297045837e-8,0.001737977290689824,-3.460390307791772e-5,2.296299541437974e-8,0.0017383186141002541,-3.454918032334136e-5,2.290982677063709e-8,0.0017386679295325906,-3.4431804356590167e-5,2.2802188582601254e-8,0.0017390021734525031,-3.42511906097866e-5,2.2639776047910924e-8,0.0017392992945751758,-3.40160914722638e-5,2.243042545250072e-8,0.0017395413117880889,-3.374434814309473e-5,2.2189933916874547e-8,0.0017397176600680104,-3.346135952529788e-5,2.1940688488459516e-8,0.0017398281621878566,-3.319689225605055e-5,2.170877243418754e-8,0.0017398847366847004,-3.2980307378858836e-5,2.1519663391740078e-8,0.00173991100205662,-3.283480466826047e-5,2.1393128136041958e-8,0.0017399392899709579,-3.27718231350248e-5,2.1338379242105724e-8,0.00174000521831946,-3.278698042141254e-5,2.1350723083240454e-8,0.001740140572588363,-3.285870325852261e-5,2.1410652793135758e-8,0.0017403655886877377,-3.295034303669861e-5,2.1485963701877946e-8,0.0017406820927880144,-3.301629939579607e-5,2.153721791335664e-8,0.0017410695269251995,-3.301209684177935e-5,2.152643905078453e-8,0.001741486310794703,-3.290702867540473e-5,2.1427864745405244e-8,0.0017418784545159788,-3.269589869418132e-5,2.1237862433750336e-8,0.0017421948525763043,-3.2404476839655194e-5,2.097945465702013e-8,0.001742404370709457,-3.208389090653782e-5,2.069734831489266e-8,0.001742506671572139,-3.179415040864402e-5,2.0443603476147352e-8,0.0017425307722198473,-3.158389373995162e-5,2.0260073766504838e-8,0.0017425223974869423,-3.147622681133658e-5,2.0166207874633754e-8,0.0017425275508909542,-3.146622368211866e-5,2.0157058325399752e-8,0.0017425801811898768,-3.152827253738807e-5,2.020986020759265e-8,0.0017426972860252556,-3.162719052466486e-5,2.02938080720638e-8,0.001742880085460341,-3.172780363660379e-5,2.0378372619537326e-8,0.001743118076178938,-3.180084546028723e-5,2.0438317988914532e-8,0.0017433934077427334,-3.1825558838409014e-5,2.045583270732787e-8,0.0017436844082488409,-3.179033969714021e-5,2.0421013873564265e-8,0.001743968178512343,-3.169263001235832e-5,2.0331783624667846e-8,0.0017442227209409098,-3.153871728518193e-5,2.0193782525411485e-8,0.0017444291701622036,-3.134350069999404e-5,2.002022746940685e-8,0.0017445744879534223,-3.112978763186553e-5,1.9831294365844262e-8,0.0017446545474839863,-3.092639446856581e-5,1.9652370870985962e-8,0.0017446769299296102,-3.0764373350770444e-5,1.9510621046903156e-8,0.0017446621867443558,-3.067120727891532e-5,1.9429795770389297e-8,0.001744642159515886,-3.066382603124781e-5,1.9424111620866493e-8,0.0017446545782597647,-3.074243219545489e-5,1.9492972810802038e-8,0.0017447345609175441,-3.088764647827402e-5,1.961870511808151e-8,0.0017449051754598907,-3.106281392238331e-5,1.9768826171514667e-8,0.0017451700230479688,-3.122163105108318e-5,1.9902887093021913e-8,0.001745510408947374,-3.1319374667683715e-5,1.9982307573413395e-8,0.001745888357283682,-3.1324766347923475e-5,1.998060209584599e-8,0.0017462551360621196,-3.122919694479231e-5,1.989118907219179e-8,0.0017465634988662125,-3.105046157655002e-5,1.9730384470556232e-8,0.001746780545164631,-3.0829192817083005e-5,1.9534083265630877e-8,0.0017468971763283654,-3.06181089004315e-5,1.9348284579479396e-8,0.0017469304559974707,-3.0466979567041213e-5,1.921600927524104e-8,0.001746917542182514,-3.0408580265584186e-5,1.916519343229281e-8,0.001746903536584843,-3.0450937289348743e-5,1.9202135362128732e-8,0.0017469283478326418,-3.057824727716383e-5,1.931250208156185e-8,0.0017470175401144699,-3.075870969388561e-5,1.9468283092315117e-8,0.0017471793662891689,-3.095489208974001e-5,1.9636835355944387e-8,0.00174740696584924,-3.1132521919019314e-5,1.978845734405289e-8,0.0017476831047323403,-3.126577909856488e-5,1.9900875698021727e-8,0.0017479851225330183,-3.1339285687671686e-5,1.9960887050540934e-8,0.0017482888771933986,-3.134799753916344e-5,1.9964247391127438e-8,0.001748571500534339,-3.1296247023240655e-5,1.9914888607216414e-8,0.0017488134063673208,-3.1196725784627565e-5,1.9824099003596076e-8,0.0017490001909731922,-3.106955308858083e-5,1.970973106837139e-8,0.0017491248720657058,-3.0941022082626086e-5,1.9595042768266226e-8,0.0017491904664698418,-3.084128927975832e-5,1.9506546090950694e-8,0.0017492122725144203,-3.080019758367981e-5,1.9470218613974216e-8,0.0017492184473760612,-3.084086291599031e-5,1.950583763271849e-8,0.0017492470171063378,-3.097194995726486e-5,1.9620297100766168e-8,0.0017493381646387358,-3.1181363894115793e-5,1.980227981843363e-8,0.0017495228601829887,-3.143510381205071e-5,2.0021485851797534e-8,0.0017498116793050868,-3.168386290175472e-5,2.023458425088819e-8,0.0017501889553554505,-3.18764773563137e-5,2.039704390946832e-8,0.001750615655745262,-3.197543249573554e-5,2.0476649055390935e-8,0.0017510402683068693,-3.1968199999134966e-5,2.0463276536587624e-8,0.0017514133531797574,-3.187031880307763e-5,2.037138563020928e-8,0.0017517005273633118,-3.1719998107685436e-5,2.0235063634656074e-8,0.001751890219662361,-3.156694813316782e-5,2.009806183335921e-8,0.0017519948081852045,-3.1459214757831945e-5,2.0002203745109712e-8,0.0017520456413406555,-3.14316280501743e-5,1.99773642676767e-8,0.001752083843670919,-3.149863525213701e-5,2.0035412948970665e-8,0.0017521497040240116,-3.1652918673865666e-5,2.0169255510395947e-8,0.0017522736069611874,-3.186951297035694e-5,2.0356620338662876e-8,0.0017524707370152176,-3.211356229077129e-5,2.056690037038114e-8,0.0017527403103441905,-3.234896981308914e-5,2.076865466262888e-8,0.0017530684808992239,-3.254545176213017e-5,2.0935651692450514e-8,0.0017534331318351181,-3.2682714956734884e-5,2.1050408448247448e-8,0.0017538088119477358,-3.275180452227584e-5,2.110531752462392e-8,0.0017541707526388716,-3.275447431229004e-5,2.1102114748483773e-8,0.0017544976901405082,-3.270162706579011e-5,2.105056824283674e-8,0.0017547738024637697,-3.2611589026689284e-5,2.096699993899653e-8,0.0017549902985381242,-3.250844445279376e-5,2.0872790992964694e-8,0.001755147084288628,-3.242014951493518e-5,2.0792620166438958e-8,0.001755254570490484,-3.2375793594230804e-5,2.0751927960372814e-8,0.001755335063281145,-3.2401220502996406e-5,2.0772996896363735e-8,0.0017554223357314845,-3.251259859283147e-5,2.0869356621329078e-8,0.0017555573977173214,-3.2708863724273736e-5,2.1039332104000612e-8,0.0017557790984082053,-3.29660727723672e-5,2.126132814313656e-8,0.0017561108323753565,-3.3238262436040336e-5,2.1494763264115556e-8,0.0017565485849542516,-3.346811995275699e-5,2.1689479904005575e-8,0.0017570576145160576,-3.360552772869162e-5,2.1801953478252693e-8,0.001757581785070488,-3.362585143779291e-5,2.1811245999041253e-8,0.0017580620722044517,-3.353851148587489e-5,2.1726427797049774e-8,0.001758455202278241,-3.3382035778471196e-5,2.158208310470156e-8,0.0017587444079113072,-3.320959575010596e-5,2.1425399176948597e-8,0.0017589399770165945,-3.307263661221911e-5,2.130160656072588e-8,0.0017590722808459125,-3.3008502295315075e-5,2.1243072677899854e-8,0.001759181556547813,-3.3034286998855964e-5,2.1264051244620618e-8,0.0017593078653479616,-3.314644102862432e-5,2.1360602034657684e-8,0.0017594831921096522,-3.332452486865661e-5,2.1514143545573805e-8,0.0017597265437465275,-3.353738875474003e-5,2.1697021326259336e-8,0.001760042245970357,-3.3750244753001815e-5,2.1878713640531822e-8,0.001760421146334321,-3.393124357669487e-5,2.2031497920959415e-8,0.0017608439638752132,-3.405644801825657e-5,2.2134681640893213e-8,0.0017612857471203435,-3.411264048046515e-5,2.2176972713998292e-8,0.0017617204091223166,-3.409797973084421e-5,2.2157031793999206e-8,0.0017621245438929386,-3.402096746414191e-5,2.208259287114386e-8,0.0017624801775086999,-3.3898450706873454e-5,2.1968740632231774e-8,0.0017627765982876126,-3.3753300304850276e-5,2.183585863215288e-8,0.001763011621842634,-3.3612016549370004e-5,2.1707446371806972e-8,0.0017631925713161728,-3.350214912888116e-5,2.1607729651469524e-8,0.0017633370417948848,-3.344913871513708e-5,2.1558783250075647e-8,0.0017634730174059953,-3.347197967528787e-5,2.1576714714329268e-8,0.0017636371116576798,-3.357742597786236e-5,2.1666704084487572e-8,0.0017638691979690627,-3.3753723774377576e-5,2.181772916999189e-8,0.0017642023031790117,-3.396680513750332e-5,2.1999445627985694e-8,0.0017646491667109299,-3.4163476660183754e-5,2.2165086343053056e-8,0.0017651911849654452,-3.428501454789286e-5,2.226334653764835e-8,0.001765778160698935,-3.428858702670496e-5,2.2257091907866984e-8,0.0017663432093342334,-3.416606996623403e-5,2.213983656780172e-8,0.0017668269543614896,-3.3948415208319496e-5,2.193955489711035e-8,0.001767197842766506,-3.369259112538415e-5,2.17070724834961e-8,0.0017674586193811824,-3.34596154530708e-5,2.1496498412280247e-8,0.001767639060592299,-3.329574652596208e-5,2.1348468166328244e-8,0.0017677821871205088,-3.3223440312985864e-5,2.1282180173486558e-8,0.0017679311822968995,-3.324154570836546e-5,2.129578103953367e-8,0.001768120512436396,-3.333086353608994e-5,2.1371561635770116e-8,0.0017683715270797181,-3.346142626072527e-5,2.148260408851196e-8,0.0017686914318105862,-3.3599409128902524e-5,2.1598953117881766e-8,0.0017690744739801523,-3.371291615094851e-5,2.1692652330809286e-8,0.0017695045695388376,-3.3776430454713476e-5,2.1741529840179073e-8,0.0017699588242402324,-3.3773791444695706e-5,2.1731694812881347e-8,0.0017704114732510778,-3.369964876976124e-5,2.1658752122008647e-8,0.0017708378094016797,-3.355943690940463e-5,2.152778106353521e-8,0.0017712176390383754,-3.336799684118138e-5,2.1352151053456795e-8,0.0017715378651225137,-3.314720089247531e-5,2.1151437607701027e-8,0.0017717941126926234,-3.2923077927578334e-5,2.0948840418387312e-8,0.0017719915599731899,-3.272273093629134e-5,2.0768364307715262e-8,0.0017721450953806894,-3.257108279253322e-5,2.063183815712094e-8,0.001772278789586462,-3.248736044869667e-5,2.0555760321616602e-8,0.0017724243969323124,-3.2481099228891417e-5,2.0547838756955484e-8,0.0017726180377305497,-3.2547672204280884e-5,2.06032360891902e-8,0.001772893902096436,-3.26643881516983e-5,2.070137445010743e-8,0.0017732745145420026,-3.278970120097843e-5,2.0805422495871913e-8,0.0017737592672930375,-3.286910117515717e-5,2.0867510935645095e-8,0.0017743165104114895,-3.285007607212869e-5,2.0841794381781585e-8,0.0017748868641271837,-3.27030730663727e-5,2.0702786663879134e-8,0.0017754014530360297,-3.2437768348831866e-5,2.0459662686927267e-8,0.0017758080743716612,-3.2102608481630945e-5,2.015584789108212e-8,0.0017760903595036206,-3.17656634260758e-5,1.985200104905266e-8,0.0017762693117928238,-3.1488255206219554e-5,1.9602496536206447e-8,0.0017763894591366236,-3.13062590108772e-5,1.9438747273234566e-8,0.001776500414190258,-3.12255836885439e-5,1.9365283650061506e-8,0.0017766430268873303,-3.1228419406428315e-5,1.9365541425495753e-8,0.0017768429247380117,-3.128342719222774e-5,1.9411160162745227e-8,0.0017771097947912773,-3.1355028823638904e-5,1.9470365609482324e-8,0.0017774396800211817,-3.141000926638304e-5,1.9513809181670135e-8,0.0017778182926467716,-3.142162035464175e-5,1.951808140830944e-8,0.0017782244717445747,-3.137198226709649e-5,1.946769186203101e-8,0.0017786336024299082,-3.12533185341731e-5,1.9356066032986675e-8,0.0017790209705546684,-3.1068226775794e-5,1.9185763398043137e-8,0.0017793650121143564,-3.08290205222032e-5,1.8967926769402895e-8,0.001779650296646995,-3.055604937514018e-5,1.8720829744334336e-8,0.0017798698743530228,-3.0274995636721267e-5,1.846747256260845e-8,0.001780026632235612,-3.001344158238894e-5,1.8232467517967285e-8,0.0017801335374979842,-2.9797089846618077e-5,1.8038579085288705e-8,0.0017802127450977066,-2.964590951538579e-5,1.7903218620709243e-8,0.0017802935187865058,-2.9570467972433672e-5,1.783518762572123e-8,0.0017804088777299578,-2.9568714404354944e-5,1.7831942719272197e-8,0.0017805907080136712,-2.9623577448738986e-5,1.7877681205500904e-8,0.0017808630276179797,-2.97023326731302e-5,1.7943009994474517e-8,0.0017812337934054229,-2.97595557883807e-5,1.7987695659313328e-8,0.0017816872967592035,-2.9745687070046982e-5,1.7968220015004007e-8,0.0017821813976015835,-2.962172070135213e-5,1.7850629717166458e-8,0.0017826548299887984,-2.9376324177287026e-5,1.762553130680372e-8,0.0017830461959892749,-2.903634032102028e-5,1.731731488754778e-8,0.0017833176117902473,-2.866124927995671e-5,1.6979208783705445e-8,0.001783469533852475,-2.832122375637814e-5,1.6673724822837606e-8,0.0017835376035968266,-2.80706105762117e-5,1.6448993998207882e-8,0.0017835749164607615,-2.793168172891396e-5,1.6324306949224888e-8,0.0017836317390693452,-2.7894493168831586e-5,1.6290136262871556e-8,0.0017837425116183111,-2.7927737072698468e-5,1.6318029727125984e-8,0.0017839222251040216,-2.7991952248573566e-5,1.6372552649405453e-8,0.0017841690180765415,-2.804960543379875e-5,1.6420305148628225e-8,0.0017844690921453375,-2.8070762770376914e-5,1.6434881896134044e-8,0.001784801494145308,-2.803540319002629e-5,1.6398785045025665e-8,0.0017851419554334824,-2.7933929717305372e-5,1.6303760303012625e-8,0.0017854659718042635,-2.7766907604290468e-5,1.6150522430904983e-8,0.0017857515136427459,-2.7544366750350456e-5,1.5948164497142894e-8,0.0017859816002243757,-2.7284609584283965e-5,1.571315251966609e-8,0.0017861467536977667,-2.7012260273114013e-5,1.5467614316026404e-8,0.0017862470230057806,-2.6755286369400636e-5,1.5236648496569402e-8,0.0017862930134701384,-2.654104265296623e-5,1.504470406978934e-8,0.001786305424195102,-2.6391773125555355e-5,1.491146539228525e-8,0.0017863128449208082,-2.6320220335777346e-5,1.4847885035371189e-8,0.0017863478278571186,-2.632612309632168e-5,1.4853112441925018e-8,0.0017864415524204687,-2.639440009895842e-5,1.491303463720827e-8,0.0017866176433893105,-2.649564870787032e-5,1.500094022968379e-8,0.0017868858723667914,-2.6589505322540724e-5,1.5080702406757717e-8,0.0017872368982414784,-2.66314436018206e-5,1.5112903973863852e-8,0.0017876399981771522,-2.6583121415397484e-5,1.5063969741293373e-8,0.0017880463839678022,-2.6424855833963814e-5,1.4917086903880453e-8,0.0017884001103203367,-2.61662566626825e-5,1.4681479769128718e-8,0.0017886554421320897,-2.5848825556468653e-5,1.439459563665528e-8,0.0017887942451537537,-2.5535601758596886e-5,1.4112816495281188e-8,0.0017888338091817063,-2.5289736988679483e-5,1.3892330893168733e-8,0.0017888195185604239,-2.515213106178181e-5,1.3769205429052592e-8,0.0017888063464290775,-2.5129846263159923e-5,1.3749151498984439e-8,0.0017888398156686227,-2.5199537269306553e-5,1.3810764966794239e-8,0.0017889451574657782,-2.5320670226036306e-5,1.391749936516575e-8,0.0017891262814678304,-2.544988601042015e-5,1.4030567902762325e-8,0.0017893708634015488,-2.5550922719877188e-5,1.4117760285831568e-8,0.0017896570726811836,-2.5599109255723216e-5,1.4157333008626661e-8,0.0017899592671993573,-2.5582042811262578e-5,1.4138489270469296e-8,0.0017902519438446774,-2.5498478260559e-5,1.4060321791036643e-8,0.0017905123629933307,-2.535677868794753e-5,1.3930440496755607e-8,0.0017907225488373376,-2.51734072821892e-5,1.3763682625522863e-8,0.0017908711693659085,-2.4971322438834654e-5,1.3580725771725944e-8,0.0017909554371954345,-2.4777821665357153e-5,1.3406151734326352e-8,0.0017909827283962571,-2.462135499749847e-5,1.3265522508586063e-8,0.001790971202300491,-2.4527148765017287e-5,1.3181360162542386e-8,0.0017909485628708425,-2.4512064252896147e-5,1.316846906372442e-8,0.0017909483769799933,-2.457975629539259e-5,1.3229610662378395e-8,0.0017910040460442844,-2.4717652977466054e-5,1.3352913035006776e-8,0.001791141441592685,-2.4897216452611835e-5,1.3512291120867038e-8,0.0017913719494893788,-2.5078198784446382e-5,1.367144672572904e-8,0.0017916878464235458,-2.5216509648907783e-5,1.3791025050547342e-8,0.0017920615866127356,-2.5274345945545365e-5,1.3837668829362787e-8,0.0017924499408709217,-2.5230505604992228e-5,1.3793113821811035e-8,0.001792803043549295,-2.508822447015411e-5,1.3660997294053245e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json deleted file mode 100644 index bf89351..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_16.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":16000,"numberOfSamples":1000,"samples":[0.0017930770944964171,-2.487756201187732e-5,1.3468791504217692e-8,0.0017932476264231187,-2.464987080068864e-5,1.3262714904077391e-8,0.0017933184724985877,-2.446409956071231e-5,1.3095425337680572e-8,0.0017933216314600794,-2.436869143477916e-5,1.3009865564682467e-8,0.0017933067138776958,-2.438639601001157e-5,1.3025800857085489e-8,0.0017933242278720884,-2.450889654783832e-5,1.3135191695059903e-8,0.0017934104016406212,-2.470298517826634e-5,1.330788790362845e-8,0.0017935796118112995,-2.4923857068963115e-5,1.35036193070344e-8,0.0017938254296263332,-2.512860398380717e-5,1.3684062401894767e-8,0.001794127049257825,-2.5285096932882215e-5,1.3820701756483629e-8,0.0017944568919538132,-2.537530987356056e-5,1.389769075082024e-8,0.0017947867111250417,-2.5394724503292413e-5,1.3911234845185292e-8,0.0017950914943699093,-2.5349982163249467e-5,1.3867468677974076e-8,0.0017953516485814604,-2.5256290869559507e-5,1.3780165902829643e-8,0.0017955543110713956,-2.513520274015715e-5,1.3668792904120013e-8,0.0017956944918898108,-2.501264398241291e-5,1.3556752559378335e-8,0.0017957763330320648,-2.4916631576514276e-5,1.3469287614057573e-8,0.0017958142078399008,-2.487403171878831e-5,1.343048298157746e-8,0.0017958328475770424,-2.4906014603702265e-5,1.3459107884232579e-8,0.001795865353512456,-2.5022541802827092e-5,1.3563657130380593e-8,0.001795948122041468,-2.521726303763574e-5,1.3737855679584164e-8,0.0017961127345561176,-2.546517299188524e-5,1.395871521848886e-8,0.0017963766324439365,-2.572537619201675e-5,1.4189187885469435e-8,0.0017967359302593923,-2.5949711291697144e-5,1.4386024761031048e-8,0.0017971637506210216,-2.6095329969824996e-5,1.451109103127541e-8,0.0017976155937020869,-2.6137143168968956e-5,1.4542469045381444e-8,0.0017980404371389018,-2.607573723966647e-5,1.4481422712615806e-8,0.001798394095120732,-2.5938065908348892e-5,1.4352832525648934e-8,0.0017986508156540284,-2.5770774714917362e-5,1.4199014670934582e-8,0.0017988099091846071,-2.5628118914854457e-5,1.4068743101640252e-8,0.0017988956039585806,-2.555773604555096e-5,1.4004458068040699e-8,0.0017989500158965364,-2.558822796060149e-5,1.4031230788508505e-8,0.0017990211621026053,-2.5722340085414784e-5,1.415084222610123e-8,0.0017991498357205768,-2.593791853046823e-5,1.4342850551324464e-8,0.0017993597382745207,-2.6195968610161597e-5,1.4571956673982097e-8,0.0017996538157950808,-2.645239065855816e-5,1.4798559267271849e-8,0.0018000169294873425,-2.666894130169837e-5,1.498852497549383e-8,0.0018004224996779246,-2.6820193009237008e-5,1.5119328433877708e-8,0.0018008399579285909,-2.6895709367472842e-5,1.5181911626012463e-8,0.0018012407279650508,-2.6898643187987404e-5,1.5179375808053418e-8,0.0018016019580566775,-2.6842624017871885e-5,1.512418529733506e-8,0.0018019083507358257,-2.6748422125539742e-5,1.503519386765796e-8,0.0018021529000758112,-2.664111066735776e-5,1.4935106313335826e-8,0.0018023373010458653,-2.654770620791294e-5,1.4848328300519829e-8,0.0018024724205052492,-2.6494772143160663e-5,1.4798742963175621e-8,0.0018025786668415908,-2.6505317999914305e-5,1.4806850211476605e-8,0.0018026854955645365,-2.659451656531552e-5,1.4885891179718516e-8,0.0018028287921071594,-2.6764406036804033e-5,1.5037147763755564e-8,0.0018030448604636129,-2.6999007434058543e-5,1.5245693907824705e-8,0.0018033608554715635,-2.726276700041339e-5,1.5479157196478573e-8,0.0018037839756043577,-2.750560873314212e-5,1.5692371417557645e-8,0.0018042943907072807,-2.767567790489397e-5,1.583886014992919e-8,0.0018048471164087917,-2.7736268154231167e-5,1.5886025345858665e-8,0.0018053841995643509,-2.7679480289528892e-5,1.582737530167465e-8,0.0018058526507647669,-2.752969711011927e-5,1.5685558185452904e-8,0.001806220217685462,-2.73353380759272e-5,1.550478294473961e-8,0.0018064829196074033,-2.715336860705409e-5,1.533667607943918e-8,0.001806663117932587,-2.7033305913710596e-5,1.5225741546222746e-8,0.001806800801895628,-2.7005730814722615e-5,1.5199028506319084e-8,0.0018069420013151019,-2.7077300335566203e-5,1.5261811538653193e-8,0.0018071276684187964,-2.7232000211422743e-5,1.5398964117004876e-8,0.0018073853085648632,-2.7437165696606414e-5,1.5580585890886757e-8,0.0018077246572371043,-2.7652248535832284e-5,1.576998693661435e-8,0.0018081377800550024,-2.7838089562507862e-5,1.5932006675260243e-8,0.0018086029626342595,-2.7964541054522235e-5,1.603977518121356e-8,0.0018090908374324907,-2.8014926126988497e-5,1.607861859878816e-8,0.00180957084697334,-2.7986978508900445e-5,1.6046829753568754e-8,0.0018100165314672806,-2.7890983536707856e-5,1.5953965389800106e-8,0.0018104089137041853,-2.774636589803873e-5,1.5817776136232783e-8,0.0018107380434183873,-2.7577939639375955e-5,1.5660833269492737e-8,0.0018110032945058872,-2.7412588632335316e-5,1.5507519669488106e-8,0.0018112130984671998,-2.727650820984009e-5,1.5381492498527788e-8,0.0018113845185778008,-2.719266881496396e-5,1.5303331370154355e-8,0.0018115426463610783,-2.7177984586301253e-5,1.5287947407869493e-8,0.0018117192686648675,-2.7239724617485946e-5,1.5341380468993828e-8,0.001811949680932402,-2.7371212382235838e-5,1.545703888127489e-8,0.0018122663836599232,-2.754807176709037e-5,1.561247872864076e-8,0.0018126893601793177,-2.772785807579092e-5,1.57692019263019e-8,0.001813215168157243,-2.7856683016959833e-5,1.5878661656300398e-8,0.001813810503341971,-2.788443523714781e-5,1.589593222254393e-8,0.0018144169960900853,-2.7784424994027194e-5,1.5797369795099836e-8,0.0018149690546354657,-2.7567238609616395e-5,1.5593102180247856e-8,0.0018154173615913274,-2.7279217321055754e-5,1.532562475157829e-8,0.001815745477353155,-2.698524284095293e-5,1.5054105867581623e-8,0.001815971625884253,-2.674564379645672e-5,1.4833294082824518e-8,0.0018161376350310534,-2.6598869981665784e-5,1.4697715161200344e-8,0.0018162930699050063,-2.6555272801256695e-5,1.46561098570472e-8,0.0018164816791041126,-2.6600309925083196e-5,1.4694563048089877e-8,0.001816733162707175,-2.6702680190249542e-5,1.4784125685246063e-8,0.0018170600913158257,-2.682355433898887e-5,1.4889335877885533e-8,0.0018174585911996668,-2.6924764974141972e-5,1.4975656178105195e-8,0.0018179114635388195,-2.697514492077015e-5,1.5015123550887387e-8,0.0018183927840198378,-2.69547379106428e-5,1.499003182489609e-8,0.0018188731580403156,-2.6856711418009936e-5,1.4894556739454665e-8,0.001819324793629755,-2.6687029559253713e-5,1.473440683021408e-8,0.0018197256785068433,-2.6462277654925132e-5,1.4524849413287513e-8,0.001820062373922574,-2.6206258898886165e-5,1.428764312060864e-8,0.001820331254382838,-2.5946127881015275e-5,1.4047536963377575e-8,0.001820538445168254,-2.5708755861324498e-5,1.3828946837314153e-8,0.0018206989383891886,-2.5517624437804906e-5,1.365308557110985e-8,0.0018208352337955717,-2.5390152599451144e-5,1.3535489407026761e-8,0.0018209755912363625,-2.5335207243642732e-5,1.34837573147026e-8,0.001821151632775928,-2.5350517985874814e-5,1.3495281869197622e-8,0.0018213945362785741,-2.5420047270152325e-5,1.3555011738893574e-8,0.0018217289276931587,-2.551235675360919e-5,1.363413439824075e-8,0.001822164406689718,-2.5582239942904856e-5,1.3691653129699898e-8,0.001822686655285152,-2.557849948022469e-5,1.3681411343723724e-8,0.0018232531039378613,-2.5459295222371094e-5,1.3565889406493894e-8,0.0018237998026180275,-2.5211254782313133e-5,1.3333435451442727e-8,0.0018242618025331551,-2.48617013791813e-5,1.300934477782622e-8,0.0018245988973076108,-2.4473013353101097e-5,1.2650735273151976e-8,0.0018248114805428112,-2.4119027032174727e-5,1.2325005783849212e-8,0.0018249369229238492,-2.3856916289854328e-5,1.2084104532181132e-8,0.0018250308362240503,-2.371030618670482e-5,1.1949100841989596e-8,0.001825146047330891,-2.366910915234589e-5,1.1910159201163204e-8,0.0018253190675345766,-2.3700474694523012e-5,1.1936747643950821e-8,0.0018255659145471929,-2.3762271034004848e-5,1.1990121606287427e-8,0.0018258842445968248,-2.3813805840709907e-5,1.2033166516185259e-8,0.001826258169929863,-2.382242826521537e-5,1.2036355717542334e-8,0.0018266634773100754,-2.3766769983762126e-5,1.1980573637170289e-8,0.001827072388230482,-2.363782080690576e-5,1.1857967699394822e-8,0.0018274577516185762,-2.343858881848419e-5,1.1671564450583e-8,0.0018277966526101797,-2.318264021823313e-5,1.1433927158541618e-8,0.0018280733241575382,-2.2891668446499556e-5,1.1164967072672481e-8,0.0018282811577905753,-2.259224023359341e-5,1.0889004337993399e-8,0.001828423551827078,-2.231201801919025e-5,1.0631321018346868e-8,0.0018285135003267157,-2.207596922814408e-5,1.0414665395833809e-8,0.0018285721071275558,-2.1903000912757984e-5,1.0256127104231967e-8,0.0018286262706814032,-2.1803209435120533e-5,1.0164594038831645e-8,0.001828705702435555,-2.177583438325039e-5,1.0138909579633824e-8,0.001828839337656277,-2.1807956588344662e-5,1.0166784524005633e-8,0.0018290509329571627,-2.1874064192536067e-5,1.0224554437432966e-8,0.0018293535538177238,-2.1937215282132975e-5,1.027838557907086e-8,0.0018297433561300666,-2.1953289747187514e-5,1.0288214837085777e-8,0.0018301945153309169,-2.1879869760203124e-5,1.0215787794044302e-8,0.001830658946308421,-2.168992779500395e-5,1.0036992338479185e-8,0.0018310753618979378,-2.138679258668782e-5,9.755367998113473e-9,0.0018313889838965569,-2.1011704357252705e-5,9.40893730399691e-9,0.0018315746329431721,-2.063467135717398e-5,9.061841978804914e-9,0.0018316490783180249,-2.0328796754628263e-5,8.780851241439044e-9,0.0018316632653398112,-2.0141677331726018e-5,8.60917634137112e-9,0.001831679395233614,-2.0080681978185537e-5,8.55305072202464e-9,0.0018317476612021335,-2.0117816834583795e-5,8.586332987307337e-9,0.0018318940208144653,-2.0206428881992914e-5,8.665969743081962e-9,0.0018321201082134187,-2.0298263194615822e-5,8.747708166164193e-9,0.001832409908402203,-2.0354458317239478e-5,8.796142458866711e-9,0.00183273774398109,-2.035003732644327e-5,8.788718700893353e-9,0.001833074770107819,-2.027416826766039e-5,8.715846695855356e-9,0.001833393452426999,-2.0128529716534936e-5,8.579316424344743e-9,0.0018336705866361742,-1.992511730302927e-5,8.390268759309309e-9,0.0018338894912187423,-1.968387735533606e-5,8.167058601271752e-9,0.0018340416791292305,-1.943010095958344e-5,7.932910852662894e-9,0.0018341280134618974,-1.9191384559990707e-5,7.713154507289564e-9,0.0018341590816821458,-1.8994066898046752e-5,7.53193522572574e-9,0.0018341544149850127,-1.885940649167221e-5,7.40865932392435e-9,0.0018341403815578727,-1.8800038802715472e-5,7.3546966523347715e-9,0.0018341468535115438,-1.8817250628981883e-5,7.370872897137305e-9,0.0018342029234141627,-1.889956862277312e-5,7.446231414582977e-9,0.0018343321227258867,-1.9023083174690816e-5,7.558447698209529e-9,0.0018345476553118807,-1.9153707945490168e-5,7.676042116963366e-9,0.0018348481083950683,-1.9251549921866032e-5,7.762491329140837e-9,0.0018352144196331546,-1.9277769509678416e-5,7.782530133022137e-9,0.0018356096596253435,-1.920398976117508e-5,7.710681424220857e-9,0.0018359837763515755,-1.9022957466042443e-5,7.540865396769042e-9,0.0018362849741516284,-1.8756908829736255e-5,7.293910761478627e-9,0.0018364766833233455,-1.8457870012827724e-5,7.017737181329629e-9,0.0018365538571077135,-1.8194914639068882e-5,6.775647214996834e-9,0.001836548563460727,-1.803024372589666e-5,6.624410847690285e-9,0.0018365187675594202,-1.7995409567851337e-5,6.592525088216024e-9,0.0018365252877235454,-1.8081331449302935e-5,6.671177914624835e-9,0.0018366101542084223,-1.8246672589318575e-5,6.822077045534804e-9,0.0018367869375824912,-1.8436994200718304e-5,6.995122222991016e-9,0.001837043888830328,-1.8602938875977135e-5,7.145101322978344e-9,0.0018373537387537482,-1.8710583772040503e-5,7.241122599512904e-9,0.0018376837337121634,-1.8743874840279134e-5,7.2687428712580284e-9,0.0018380027530075403,-1.8702372696090056e-5,7.227808403795434e-9,0.0018382852635966235,-1.8597450955179613e-5,7.128926096284541e-9,0.001838513176276471,-1.8448670412689796e-5,6.990149973877557e-9,0.0018386767249291653,-1.8280754164638692e-5,6.8342449477846595e-9,0.0018387750038904136,-1.812090639012062e-5,6.686252226411574e-9,0.0018388162973281307,-1.799601728606697e-5,6.570911706461216e-9,0.0018388179260978472,-1.7929389648419776e-5,6.509607695224068e-9,0.0018388050594228275,-1.7937016075237906e-5,6.516893378261047e-9,0.0018388079846011016,-1.8023966004633595e-5,6.597145459559734e-9,0.001838857713922728,-1.818180313357647e-5,6.742223335637884e-9,0.0018389803552352245,-1.838806035919854e-5,6.9310780933096055e-9,0.0018391912530982262,-1.860858891245793e-5,7.132034188312767e-9,0.0018394902971468079,-1.88029481324306e-5,7.3078518212857724e-9,0.0018398597310770378,-1.8932177661136858e-5,7.422918615431776e-9,0.0018402654168871984,-1.896772954162206e-5,7.451423914551764e-9,0.0018406621235211068,-1.8899934385024923e-5,7.385028293072869e-9,0.0018410028729857332,-1.8743806537061265e-5,7.238049462551088e-9,0.0018412512510457238,-1.8539475868505472e-5,7.047719368366382e-9,0.0018413937282192889,-1.834483799071887e-5,6.86733900839635e-9,0.0018414470718991932,-1.8220140618210308e-5,6.752093172557913e-9,0.0018414557581306575,-1.8208514775956216e-5,6.741217444212319e-9,0.0018414780209857879,-1.8320709364073575e-5,6.844095149750602e-9,0.001841565803992494,-1.8532077021471085e-5,7.037638298125493e-9,0.0018417482230087799,-1.8793447944416692e-5,7.276395121919292e-9,0.001842025845932932,-1.9049480082961622e-5,7.509453930519011e-9,0.001842376034057044,-1.925507263145096e-5,7.69549565376883e-9,0.0018427639401787223,-1.9383990375315344e-5,7.810647629678605e-9,0.0018431531413094465,-1.942958955901095e-5,7.849070713791684e-9,0.0018435127392187048,-1.940088549418417e-5,7.8192866216250315E-09,0.001843820730492911,-1.9317320377072763e-5,7.739348166296656e-9,0.0018440648885501498,-1.9204160908646343e-5,7.632620118984367e-9,0.001844242531542363,-1.9089035068363377e-5,7.524612793811735e-9,0.0018443600647661403,-1.8999259868333292e-5,7.440521812341918e-9,0.001844432549312981,-1.8959307662865297e-5,7.402863667254894e-9,0.0018444829953387927,-1.8987874349045107e-5,7.428729689176291e-9,0.0018445407209490732,-1.9094430440071465e-5,7.52658268876082e-9,0.0018446380463958871,-1.9275761849198014e-5,7.693093256534828e-9,0.001844804951317121,-1.9513700180089063e-5,7.911127592194227e-9,0.0018450622049142106,-1.9775670897407012e-5,8.15036239379623e-9,0.0018454146537959305,-2.0019361155694627e-5,8.37168352380671e-9,0.0018458471645658634,-2.020149491512519e-5,8.53532123115057e-9,0.001846325472916595,-2.0288852030465627e-5,8.610991677718667e-9,0.001846802738334875,-2.0268255874207588e-5,8.587035433849896e-9,0.0018472305526570348,-2.0152106866842266e-5,8.475412368243551e-9,0.0018475714841345342,-1.99772538420524e-5,8.31053358635742e-9,0.0018478096100095864,-1.9796940495792812e-5,8.141712154172403e-9,0.0018479558587613187,-1.9667497884298463e-5,8.020816057287474e-9,0.0018480460497650023,-1.9633092096664974e-5,7.988216118779569e-9,0.0018481313475885142,-1.97130435184807e-5,8.061204673026506e-9,0.0018482635125553158,-1.989628715353263e-5,8.229056332405201e-9,0.0018484798977238869,-2.014547254945726e-5,8.45695909902495e-9,0.0018487937859131421,-2.0409270039150275e-5,8.697434490355547e-9,0.0018491933464550954,-2.0637777460108637e-5,8.904531720257321e-9,0.001849648388562267,-2.0794981895125802e-5,9.04525543618406e-9,0.0018501208603383453,-2.0864590650255843e-5,9.104868950596546e-9,0.0018505745805460858,-2.0849287684095834e-5,9.086145203825255e-9,0.0018509815951685388,-2.0766006244656177e-5,9.004964655845875e-9,0.0018513249009249032,-2.0640121265863943e-5,8.88493947825769e-9,0.0018515986248674762,-2.0500399014916906e-5,8.75275158592604e-9,0.0018518069924697927,-2.037529947986055e-5,8.634737803338043e-9,0.0018519630574627775,-2.029034519449881e-5,8.55444480376467e-9,0.0018520875544509319,-2.0265862670398454e-5,8.530515515536571e-9,0.0018522076118006106,-2.0314479503742223e-5,8.574357895458459e-9,0.001852354640478269,-2.043817792207266e-5,8.68743961998716e-9,0.0018525605725263623,-2.0625343158510295e-5,8.85862825193293e-9,0.0018528519045839407,-2.0849110173348045e-5,9.06276525797922e-9,0.0018532420360760945,-2.1069073571299936e-5,9.262339779435322e-9,0.001853724130935122,-2.123818424609054e-5,9.413907129041965e-9,0.0018542681745039775,-2.13146965067963e-5,9.479118156772436e-9,0.001854825500677946,-2.1275855803305648e-5,9.437327265942164e-9,0.0018553411001434338,-2.1127603421251835e-5,9.294511094167757e-9,0.001855769808091963,-2.0905197786356253e-5,9.083769325899609e-9,0.001856089934500493,-2.066366542445483e-5,8.856377940750694e-9,0.001856309055157489,-2.0461827016597087e-5,8.66688007773098e-9,0.0018564605291198604,-2.0346009610590452e-5,8.557941716365146e-9,0.0018565929794966702,-2.0338609963516525e-5,8.549815123998282e-9,0.0018567566935258077,-2.0434095465034442e-5,8.636794189047838e-9,0.0018569909246059376,-2.0602544164462002e-5,8.790679141975657e-9,0.001857315247217037,-2.079894845221756e-5,8.96952007306406e-9,0.0018577267622189627,-2.097526582003082e-5,9.12880609280628e-9,0.001858203223977554,-2.109175679528336e-5,9.231914666619509e-9,0.0018587104540100233,-2.1124682017155018e-5,9.257156442445109e-9,0.0018592113115679834,-2.106890188932159e-5,9.200104828967708e-9,0.0018596735056705283,-2.0935816127821806e-5,9.07163153057935e-9,0.0018600745996205108,-2.0748452915729757e-5,8.89332379757743e-9,0.0018604039664238258,-2.0535775690622106e-5,8.692194187757801e-9,0.0018606624467996109,-2.032768021272182e-5,8.496037214902576e-9,0.0018608607937328295,-2.0151290741381685e-5,8.329989644194028e-9,0.0018610177895546044,-2.0028404875289557e-5,8.214148845006132e-9,0.0018611584243115355,-1.9973516875703052e-5,8.161728802068476e-9,0.0018613119834204608,-1.999186368250376e-5,8.17725592983337e-9,0.0018615094730483387,-2.0077264157555704e-5,8.254611200906061e-9,0.0018617795921467622,-2.021010824142319e-5,8.375250055651793e-9,0.0018621426777235635,-2.0356759570897997e-5,8.507743574528015e-9,0.0018626030974959807,-2.0472527218197918e-5,8.610594760757943e-9,0.001863142529370494,-2.0510266452106173e-5,8.640213095127023e-9,0.001863718542838287,-2.0434462278556232e-5,8.563932655985352e-9,0.0018642726717816077,-2.0236362154722935e-5,8.374014217097276e-9,0.0018647478436570396,-1.9942109211313427e-5,8.095175761587323e-9,0.001865108368948935,-1.960728289796133e-5,7.779474788722417e-9,0.0018653524017467537,-1.9298711898535704e-5,7.4892916930745e-9,0.0018655107551995035,-1.9072315354648044e-5,7.27659510756275e-9,0.0018656340820196373,-1.895724351204022e-5,7.168151304633016e-9,0.0018657758320747826,-1.895135064135561e-5,7.161416176012306e-9,0.0018659780113648356,-1.9026593337249196e-5,7.229749985625541e-9,0.0018662631207856332,-1.9139791481250695e-5,7.332602529333776e-9,0.0018666323647777408,-1.9244376015289706e-5,7.426524029334083e-9,0.0018670686302071045,-1.93003096381889e-5,7.474374412439072e-9,0.0018675424105708905,-1.9280847880737214e-5,7.451532270409492e-9,0.0018680189994260549,-1.9175704489265866e-5,7.348747503653877e-9,0.0018684654564785955,-1.8990736169104185e-5,7.171778438188237e-9,0.0018688561260398076,-1.8744836865035615e-5,6.938463114669843e-9,0.0018691760026911882,-1.8465188498455326e-5,6.674284503730649e-9,0.001869421833270251,-1.818207784859466e-5,6.407542925266269e-9,0.0018696013388690184,-1.7924257543533537e-5,6.165035437391302e-9,0.0018697312745747144,-1.77154221714517e-5,5.968767927016784e-9,0.0018698350512996898,-1.7571817919185243e-5,5.8337191006715384e-9,0.0018699402886244905,-1.750060390009367e-5,5.76630978226681e-9,0.0018700762544792589,-1.7498573862310598e-5,5.763229760950721e-9,0.0018702708423503566,-1.7551071627329354e-5,5.8104800416812336e-9,0.0018705465025051088,-1.763137263486119e-5,5.882878383752786e-9,0.0018709146903029294,-1.770161615547732e-5,5.945007935726127e-9,0.0018713693790612124,-1.771717503436893e-5,5.955326079857078e-9,0.001871882005628167,-1.7636224585071255e-5,5.875056690709975e-9,0.0018724021730790383,-1.7434179833481032e-5,5.681589270232072e-9,0.0018728684333721528,-1.7118167658035483e-5,5.3819353393236815e-9,0.0018732287172204356,-1.6732355540166632e-5,5.017686966724454e-9,0.0018734616898216,-1.6346704189132433e-5,4.654472798669768e-9,0.0018735862278335242,-1.6031827206181716e-5,4.358367558462995e-9,0.0018736526901350647,-1.583326478782647e-5,4.1717537065880975e-9,0.0018737219046122688,-1.5758804508346698e-5,4.10148922345258e-9,0.0018738443004110933,-1.578241850439683e-5,4.12273758898688e-9,0.0018740479774201498,-1.5858384906640113e-5,4.192354118637595e-9,0.0018743368377812267,-1.5936813363410486e-5,4.2635170100055776e-9,0.0018746952507608576,-1.5975245333576563e-5,4.296582563572818e-9,0.001875095253598817,-1.594505681652756e-5,4.265000879239349e-9,0.0018755037392833745,-1.5833619336192383e-5,4.157239354603041e-9,0.0018758885761289046,-1.5643635440476038e-5,3.976084601740173e-9,0.001876223379869671,-1.539063040568846e-5,3.736258860742264e-9,0.0018764908158095375,-1.5099215718405392e-5,3.460921341786339e-9,0.0018766843555797306,-1.4798700313825205e-5,3.1775739251165955e-9,0.001876808514204054,-1.4518593640800304e-5,2.913862771528727e-9,0.001876877684600156,-1.428449594527703e-5,2.6937304046643276e-9,0.0018769138794313335,-1.4114849713635936e-5,2.534362112040424e-9,0.001876943877891384,-1.4018784813808756e-5,2.444153315210054e-9,0.0018769961556297737,-1.3994930354196748e-5,2.4215928014478305e-9,0.0018770976892354386,-1.4030988542626093e-5,2.454884423634573e-9,0.0018772705481379275,-1.4104015382463982e-5,2.5222631987773908e-9,0.001877528051302119,-1.4181603792678899e-5,2.5931789806121115e-9,0.0018778703569376982,-1.4224713941675174e-5,2.6310160704288327e-9,0.0018782801543122864,-1.4193451439422243e-5,2.598529820729149e-9,0.0018787205590664604,-1.405678212300852e-5,2.4669139600598395e-9,0.0018791386692319275,-1.3805285464980217e-5,2.2276810492311913e-9,0.0018794780123360833,-1.3462303276611882e-5,1.9030504386180313e-9,0.0018796988460152687,-1.3085081939944344e-5,1.5469771882351445e-9,0.001879797376121251,-1.2749246711917046e-5,1.2305366805810725e-9,0.001879810814909188,-1.2520431987685998e-5,1.0152379061173355e-9,0.0018798025069450173,-1.2428480565797385e-5,9.28792039154265e-10,0.0018798356637794984,-1.2459405930458762e-5,9.576569245815327e-10,0.0018799514652937973,-1.2567147881760806e-5,1.058227207885944e-9,0.0018801611228964044,-1.2694459694026742e-5,1.1765668337490139e-9,0.0018804504286041776,-1.2790844470236134e-5,1.2652815802583089e-9,0.0018807898296935043,-1.2822211239622132e-5,1.2925348480468322e-9,0.001881144296639176,-1.2773137375766395e-5,1.244082520275377e-9,0.001881480541304962,-1.2644829708590756e-5,1.1212779543347608e-9,0.0018817714830373492,-1.2451442593087324e-5,9.37573033027889e-10,0.0018819987877392661,-1.2216113471832141e-5,7.147943106851535e-10,0.0018821541835679256,-1.1967040551517974e-5,4.79481554800589e-10,0.001882239823342938,-1.1733614321682521e-5,2.592733145950963e-10,0.0018822677333682823,-1.1542659347071796e-5,7.937878641490489e-11,0.001882258290813125,-1.1414929386642006e-5,-4.073055482831923e-11,0.00188223769665013,-1.1362192719985607e-5,-9.008293919875422e-11,0.001882234648515446,-1.1385337979164145e-5,-6.800108198389007e-11,0.0018822765976668182,-1.147373068275585e-5,1.529829570741141e-11,0.0018823859220090569,-1.1605863972995146e-5,1.3934936610352848e-10,0.0018825762769299201,-1.1751333204930212e-5,2.7535196640362164e-10,0.001882849356696919,-1.1874174668779581e-5,3.8937810798312383e-10,0.0018831923326353601,-1.1937760844475924e-5,4.470257514000792e-10,0.0018835766745060477,-1.1911660763090492e-5,4.198775427362523e-10,0.0018839599006157666,-1.1780441166968134e-5,2.937343558620432e-10,0.0018842923200876947,-1.1552816367157377e-5,7.714292268036392e-11,0.0018845300065070212,-1.1267101431234662e-5,-1.935563353070176e-10,0.001884651848842402,-1.0986979616266467e-5,-4.582805070815646e-10,0.0018846729512961321,-1.0783668473551395e-5,-6.500369715974631e-10,0.001884644026311698,-1.0709107993313308e-5,-7.201687612284614e-10,0.0018846329849430254,-1.0774324376780514e-5,-6.586566194780138e-10,0.0018846977991100334,-1.0946622650667459e-5,-4.966346506891892e-10,0.0018848664449174443,-1.1166459365350037e-5,-2.9038739613313543e-10,0.0018851332005309256,-1.1371807843700045e-5,-9.836030862044166e-11,0.00188546833284025,-1.1516483567944784e-5,3.6072174092010136e-11,0.0018858320534413794,-1.1577196587717038e-5,9.118298144119174e-11,0.0018861858170151932,-1.1551897946543376e-5,6.526251494340663e-11,0.0018864988368209698,-1.1454250824736898e-5,-2.8641386320276168e-11,0.0018867506997908348,-1.130771157982184e-5,-1.683171289939276e-10,0.0018869317981828468,-1.114067253953726e-5,-3.269535468848281e-10,0.00188704288267068,-1.0982683580718171e-5,-4.766790893169354e-10,0.00188709425157458,-1.0861262431198378e-5,-5.915582605683498e-10,0.0018871045582005074,-1.0798915164720963e-5,-6.504092600231872e-10,0.0018870989904794264,-1.0810255077489202e-5,-6.395398827368157e-10,0.0018871065171513206,-1.089946266139451e-5,-5.551558313967678e-10,0.0018871561148395357,-1.1058676341069262e-5,-4.048719775294948e-10,0.0018872723151573511,-1.1267948529405112e-5,-2.077232698081918e-10,0.0018874707273317042,-1.1497174238386989e-5,7.702962172308863e-12,0.0018877543345839755,-1.1710094620244999e-5,2.0709679356946207e-10,0.0018881113731507087,-1.1870079468074387e-5,3.5592247332806187e-10,0.0018885154354453212,-1.1947025394181564e-5,4.2594198011051527e-10,0.0018889282709940963,-1.1924554434572256e-5,4.0198452420754266e-10,0.0018893057509901104,-1.180642796887354e-5,2.8793937793174093e-10,0.0018896072155190882,-1.1620319815144137e-5,1.102325230061882e-10,0.0018898073174633363,-1.141620503858083e-5,-8.378045830706647e-11,0.0018899072882816023,-1.1256680872880053e-5,-2.350144500265779e-10,0.00188994004525897,-1.1199004466727915e-5,-2.8962303888349816e-10,0.0018899634124805416,-1.1274091765243815e-5,-2.187662588737686e-10,0.0018900409279768637,-1.1472911999612212e-5,-3.133758064503063e-11,0.0018902183761997377,-1.1749297526970216e-5,2.2880621691449785e-10,0.0018905085190595347,-1.2038537620544541e-5,5.004579398597872e-10,0.0018908911977333046,-1.2281010673800587e-5,7.273646082903298e-10,0.0018913257026649535,-1.2438746635557551e-5,8.738262880584713e-10,0.001891766418942364,-1.2500025159169855e-5,9.289921702418269e-10,0.0018921745217345054,-1.2474898759061678e-5,9.025856295473614e-10,0.0018925235949496604,-1.2387224374957897e-5,8.173373978207359e-10,0.0018928006012498605,-1.2267242724669224e-5,7.019521780489794e-10,0.001893004532648849,-1.2146219309942353e-5,5.860420989860535e-10,0.0018931444568213974,-1.2052958305120446e-5,4.968374482519974e-10,0.0018932376922635935,-1.201136506885249e-5,4.5688395279176046e-10,0.0018933080932005942,-1.203830971069964e-5,4.820179060546816e-10,0.0018933840198379344,-1.2141431704543413e-5,5.792878687063079e-10,0.0018934954432214392,-1.2317048491958935e-5,7.449904944807481e-10,0.0018936698433884116,-1.2548874791752978e-5,9.63493451044306e-10,0.0018939271289290503,-1.2808571057900438e-5,1.207801973263226e-9,0.0018942745270844783,-1.3059009801183272e-5,1.4426931836520661e-9,0.0018947029628015445,-1.3260512884313262e-5,1.6306445395104082e-9,0.0018951865409454112,-1.3379240786205856e-5,1.739776196090901e-9,0.0018956861193035659,-1.339582085200682e-5,1.7520006276159735e-9,0.001896156784362993,-1.3311821218936873e-5,1.6691149414387627e-9,0.0018965578833635218,-1.315201628144059e-5,1.5148888736049156e-9,0.0018968634955145083,-1.2961201862073039e-5,1.3319718714925833e-9,0.0018970707895216053,-1.27953186054354e-5,1.1734090967998433e-9,0.0018972035254706415,-1.270792499395131e-5,1.0897877058615488e-9,0.0018973082905004745,-1.2734836504746565e-5,1.1147159041982071e-9,0.0018974426469162598,-1.2881765897702211e-5,1.2532161191392723e-9,0.0018976577334179135,-1.3120638566367633e-5,1.4783604413576136e-9,0.0018979817061840188,-1.3397830754750496e-5,1.7391592222003208e-9,0.001898411458923872,-1.3651830597880485e-5,1.9773042111285594e-9,0.0018989162166529016,-1.3832467412215963e-5,2.1453543532283e-9,0.0018994501504002229,-1.3913394698958246e-5,2.218528300226893e-9,0.0018999670934915821,-1.3894285229865015e-5,2.1967560935101533e-9,0.0019004313205916007,-1.3794987368719163e-5,2.0991062793393773e-9,0.0019008222473536457,-1.3646563923406225e-5,1.9552477096692173e-9,0.0019011342862434643,-1.3483210869567092e-5,1.7977502645593472e-9,0.0019013742670453792,-1.3336710126712298e-5,1.656805182705815e-9,0.0019015583445810035,-1.3233251710861967e-5,1.557210441490532e-9,0.0019017093215130678,-1.3191683234416556e-5,1.516718948288368e-9,0.0019018544551819409,-1.322222486221346e-5,1.5448335845441187e-9,0.0019020232614363063,-1.332508798252e-5,1.641518474045382e-9,0.0019022446122891282,-1.3489036976123344e-5,1.7958687511443292e-9,0.0019025425844261994,-1.369058867045455e-5,1.985394636394811e-9,0.0019029310998461496,-1.3895103526272778e-5,2.177098013812628e-9,0.0019034084130146504,-1.4061158291373949e-5,2.3316432829741173e-9,0.0019039536403952983,-1.4148798826174367e-5,2.411188360481643e-9,0.00190452798036301,-1.4130390523376207e-5,2.3896713112052716e-9,0.0019050821403015848,-1.4000599135125858e-5,2.262277159589695e-9,0.0019055688083909521,-1.3781106731241096e-5,2.0499028297317794e-9,0.0019059562148011579,-1.3517137805515713e-5,1.795813482384683e-9,0.0019062378216281627,-1.3266226807941069e-5,1.55488479026225e-9,0.0019064346707243743,-1.3082876840158903e-5,1.3789321851604236e-9,0.0019065897975290977,-1.300402884385789e-5,1.3028645792247607e-9,0.0019067566525288243,-1.3039478647258866e-5,1.335631681489911e-9,0.0019069848668208623,-1.3169664466781716e-5,1.458241594737562e-9,0.0019073072088376596,-1.3351363244590194e-5,1.6292950121476715e-9,0.0019077314104704636,-1.35297729754093e-5,1.7965331398129217e-9,0.0019082393455308658,-1.3653389545506359e-5,1.910981408664566e-9,0.0019087936495511212,-1.368692249063571e-5,1.9391998920108105e-9,0.0019093490888763,-1.36182247050182e-5,1.8698433679372743e-9,0.0019098643504093444,-1.3457815665676977e-5,1.7131785903247102e-9,0.0019103104535418381,-1.3232664882104302e-5,1.49513174647234e-9,0.001910674199703993,-1.2977653683504635e-5,1.2491153226176072e-9,0.001910957383345947,-1.2727836569487273e-5,1.0086216538112337e-9,0.0019111736376836673,-1.2513095263658599e-5,8.021151208985223e-10,0.0019113446910483782,-1.2355262008813369e-5,6.502990133921028e-10,0.0019114970699477254,-1.2266914435896981e-5,5.649887739956633e-10,0.001911659458251913,-1.2250863989869682e-5,5.48651037755953e-10,0.0019118603142655674,-1.2299688915426472e-5,5.939871771107086e-10,0.0019121250704395051,-1.2395224103850199e-5,6.83479516283135e-10,0.001912472298250459,-1.2508553962420433e-5,7.894175597020551e-10,0.0019129086995072113,-1.2601732458062466e-5,8.755614362231623e-10,0.0019134238587510172,-1.2632856875682743e-5,9.019823758839568e-10,0.0019139872139001782,-1.2565475255362356e-5,8.340185275907759e-10,0.0019145507149744756,-1.2380996991705414e-5,6.541016494998854e-10,0.0019150594943169597,-1.208942059331609e-5,3.720012705806915e-10,0.0019154687355826697,-1.1731803189978585e-5,2.7186751351475117e-11,0.0019157599073696201,-1.1370438510631843e-5,-3.2059589419623007e-10,0.0019159480871280882,-1.1069433649940181e-5,-6.099776897920081e-10,0.0019160765242110884,-1.0874351161307604e-5,-7.975067244527357e-10,0.001916201638240862,-1.0799731954230843e-5,-8.695695269755934e-10,0.0019163757206690922,-1.0828066294132719e-5,-8.432736692445251e-10,0.001916633663319116,-1.0918083407511515e-5,-7.583931686950212e-10,0.0019169865545414935,-1.1017681518618213e-5,-6.649208970516302e-10,0.0019174220148160516,-1.1077138327480256e-5,-6.104228457140029e-10,0.001917909652400136,-1.1059628873658679e-5,-6.300141180862712e-10,0.0019184095373273615,-1.0947442807596206e-5,-7.404583107456317e-10,0.0019188815145464583,-1.074336196537258e-5,-9.388858115135974e-10,0.0019192932808213034,-1.0467594123611643e-5,-1.20575358697917e-9,0.0019196256213150462,-1.0151606595075532e-5,-1.5107725145640873e-9,0.0019198741582867806,-9.830831037267878e-6,-1.8199155582087304e-9,0.001920048034328906,-9.53810189496491e-6,-2.101716952530784e-9,0.00192016664884815,-9.298985720095432e-6,-2.3317451423285186e-9,0.0019202557299710247,-9.129284586844093e-6,-2.4949779817672822e-9,0.0019203436982262987,-9.03425635494825e-6,-2.5865276762768656e-9,0.0019204586561453517,-9.008766308266697e-6,-2.6114761398253937e-9,0.0019206257964393613,-9.037767379553837e-6,-2.584400459288261e-9,0.0019208647556760669,-9.096934635335611e-6,-2.528749375572851e-9,0.0019211863918376449,-9.153791617985142e-6,-2.475744453410305e-9,0.0019215887893763244,-9.170318069016814e-6,-2.4618619106144695e-9,0.0019220532680969222,-9.108486698013456e-6,-2.5235177511399977e-9,0.0019225426370994027,-8.93968667282501e-6,-2.6880381102716844e-9,0.0019230051437690364,-8.656881355420935e-6,-2.9620064184294193e-9,0.0019233868768198299,-8.284641843373393e-6,-3.321635583237772e-9,0.0019236508865696793,-7.87924983238811e-6,-3.7126811593957043e-9,0.0019237944180940756,-7.513626152701059e-6,-4.064969808739745e-9,0.0019238530642237287,-7.251346875133989e-6,-4.317442787274023e-9,0.0019238875264319904,-7.123184534446885e-6,-4.440727658128514e-9,0.0019239602849499028,-7.118772335068044e-6,-4.445080751689829e-9,0.0019241150340064711,-7.195410187776e-6,-4.3718032484889515e-9,0.0019243672115235493,-7.296057858543114e-6,-4.275859784550209e-9,0.0019247056490780219,-7.366796576870663e-6,-4.209081160263236e-9,0.001925100638222425,-7.368390575798459e-6,-4.2090899838722325e-9,0.0019255136991263675,-7.28124033598263e-6,-4.29459094897082e-9,0.0019259062934330908,-7.105313322498182e-6,-4.465474633111174e-9,0.001926246455241092,-6.8569503429279765e-6,-4.705904064104801e-9,0.001926513155176582,-6.563908504672785e-6,-4.989086595641599e-9,0.0019266984060524598,-6.259565315487143e-6,-5.28285207654197e-9,0.0019268072181901595,-5.977125716265304e-6,-5.555231795710813e-9,0.0019268557194206991,-5.744607949504135e-6,-5.779286983994542e-9,0.001926867956789526,-5.581192829623622e-6,-5.93661711990306e-9,0.0019268720688889452,-5.495252817643273e-6,-6.019245563941074e-9,0.0019268965365545243,-5.483964670467983e-6,-6.029980211505466e-9,0.0019269669147046517,-5.534047865259946e-6,-5.981698489668393e-9,0.0019271030607710645,-5.623188311924287e-6,-5.895977467639949e-9,0.0019273166863302753,-5.7219540024492885e-6,-5.8012471529754476e-9,0.001927608964943563,-5.7963044626612365e-6,-5.730359732741071e-9,0.001927968073137577,-5.811296023443038e-6,-5.716996716285913e-9,0.001928367327868175,-5.736968151573158e-6,-5.789976737812062e-9,0.0019287657529438592,-5.556881102280313e-6,-5.965023129181158e-9,0.0019291137044280984,-5.2780252562612125e-6,-6.235225744033611e-9,0.0019293656129909568,-4.9378508432014095e-6,-6.564293224012181e-9,0.0019294981647026979,-4.601333003765205e-6,-6.88943201632588e-9,0.001929525485728095,-4.342876353937429e-6,-7.138863176862139e-9,0.0019294994801223031,-4.217696588858802e-6,-7.25946537969358e-9,0.0019294908116161604,-4.238299439230228e-6,-7.239417461315074e-9,0.001929560314582812,-4.371015270438031e-6,-7.111424613284696e-9,0.0019297377118852202,-4.55344246107046e-6,-6.935795233464066e-9,0.001930017314096714,-4.719917590952116e-6,-6.775858205910853e-9,0.001930367658027968,-4.821014209853837e-6,-6.679201920416775e-9,0.0019307459008136353,-4.8316120263198285e-6,-6.669947990797228e-9,0.0019311099639047478,-4.749855588336907e-6,-6.749791325681373e-9,0.001931426078730715,-4.591648798416053e-6,-6.903320619292728e-9,0.0019316723240502833,-4.384152509840636e-6,-7.104284083463843e-9,0.00193183957714851,-4.159855661523347e-6,-7.321298468100921e-9,0.0019319309590358179,-3.951522849872863e-6,-7.522721099309414e-9,0.001931960272729608,-3.7879464393165173e-6,-7.680755766459321e-9,0.0019319496225054618,-3.690498897752296e-6,-7.774788967531755e-9,0.0019319263202685097,-3.6706055523742944e-6,-7.793831867149322e-9,0.001931919267959071,-3.7283927164905087e-6,-7.737819257871908e-9,0.0019319552108667095,-3.852716726614077e-6,-7.617573393096083e-9,0.0019320552988749142,-4.02248969024826e-6,-7.453520879166667e-9,0.0019322322171346693,-4.209066647074804e-6,-7.27339092546293e-9,0.0019324880384187753,-4.379522397329557e-6,-7.109051304871561e-9,0.0019328128907126745,-4.5006846976982455e-6,-6.9926006585541975e-9,0.001933184500922892,-4.543960637217014e-6,-6.951680008281516e-9,0.0019335690805746674,-4.491239132575197e-6,-7.0037418708715674e-9,0.0019339247854987158,-4.3417098714221724e-6,-7.149447726110859e-9,0.0019342092422925217,-4.118009382523817e-6,-7.366743932940767e-9,0.0019343916827004838,-3.868204312684253e-6,-7.608992772716862e-9,0.001934467361572726,-3.658733712507117e-6,-7.811866984567964e-9,0.001934467204138646,-3.5553083996379697e-6,-7.911879053399946e-9,0.0019344532495840499,-3.5966460829545584e-6,-7.871776332288663e-9,0.0019344968195731504,-3.7753114217998696e-6,-7.698978894623498e-9,0.0019346495112623097,-4.03947689724567e-6,-7.443761240396356e-9,0.0019349242390860283,-4.315579736048795e-6,-7.177294842177374e-9,0.0019352959799658958,-4.537209508290387e-6,-6.9637480873944295e-9,0.0019357174371195988,-4.664295527601881e-6,-6.8417869033334726e-9,0.0019361376429321514,-4.687227031264865e-6,-6.820621053087697e-9,0.0019365149604292852,-4.620518272556331e-6,-6.886137513437268e-9,0.001936822735002006,-4.4930784615761195e-6,-7.01030959332819e-9,0.0019370497573068866,-4.3395817761451026e-6,-7.159541983283873e-9,0.0019371982714750445,-4.194332245529059e-6,-7.300606086896117e-9,0.0019372813098119841,-4.0872389658178436e-6,-7.404541171072901e-9,0.0019373200047168263,-4.041081596253815e-6,-7.449311969194115e-9,0.0019373408698219712,-4.06951090543502e-6,-7.421751862826817e-9,0.0019373728401152071,-4.175601163817662e-6,-7.318959872347354e-9,0.0019374438984557292,-4.351140097040351e-6,-7.14897163907601e-9,0.0019375773878386295,-4.577090029110529e-6,-6.930294004143148e-9,0.0019377884492321462,-4.8255307456941e-6,-6.690013847281935e-9,0.0019380811458521296,-5.063086450380342e-6,-6.460482833914179e-9,0.0019384468078961414,-5.2556340897116115e-6,-6.274765644942493e-9,0.001938864070694948,-5.373859826780817e-6,-6.161257575262624e-9,0.0019393008815218134,-5.39900090253849e-6,-6.138107237175963e-9,0.0019397185968336869,-5.328108998262378e-6,-6.208094891699568e-9,0.0019400783924782288,-5.178029968915432e-6,-6.3547673684562564e-9,0.001940350064460665,-4.986568248040517e-6,-6.541330751226949e-9,0.0019405222410656135,-4.808507589956162e-6,-6.714561951692604e-9,0.0019406110279473565,-4.704360703335738e-6,-6.815780527851394e-9,0.0019406619186682263,-4.722099909779016e-6,-6.798592282970913e-9,0.0019407397828170951,-4.877341093394415e-6,-6.6480630164182626e-9,0.0019409070239167167,-5.142645237546104e-6,-6.3909979796592525e-9,0.0019411991246476956,-5.455021750594156e-6,-6.08859132515089e-9,0.0019416113591816284,-5.739907638638507e-6,-5.813170806092759e-9,0.0019421039399188788,-5.938379623146413e-6,-5.621848443746926e-9,0.001942620441220814,-6.023358180511173e-6,-5.540825654139379e-9,0.0019431076064300335,-6.000155352616885e-6,-5.564854280690739e-9,0.0019435278468381142,-5.896618797745685e-6,-5.66679479290207e-9,0.0019438629592743444,-5.750852545969404e-6,-5.809548326748877e-9,0.0019441120808416875,-5.601534475667561e-6,-5.955480832384088e-9,0.001944287443752201,-5.482065741624393e-6,-6.072125549617999e-9,0.0019444101506376872,-5.417660736467644e-6,-6.135020234542866e-9,0.001944506708268009,-5.424015514502002e-6,-6.12900103028505e-9,0.0019446061453395735,-5.5065945921930115e-6,-6.048882321230036e-9,0.0019447372317435117,-5.660164219490716e-6,-5.899883466024544e-9,0.0019449253683826993,-5.8687316263243564E-06,-5.6976552684035205e-9,0.001945189030333371,-6.106463427556881e-6,-5.467362321854533e-9,0.001945536161431122,-6.340235377640483e-6,-5.241200084831334e-9,0.0019459613750219223,-6.534129514976202e-6,-5.0540407206024526E-09,0.0019464450016517627,-6.655627092463941e-6,-4.9374385215283745e-9,0.0019469548828858596,-6.682567740270542e-6,-4.912878296775678e-9,0.001947451269570495,-6.60932933283276e-6,-4.985758640608991e-9,0.0019478943525422965,-6.450513493834239e-6,-5.14178782748562e-9,0.0019482532181079584,-6.2407756398245034e-6,-5.347142200685174e-9,0.0019485145355209999,-6.029956846976695e-6,-5.553227818359947e-9,0.001948688832848761,-5.8732962326046545e-6,-5.706255960069141e-9,0.0019488117889920867,-5.817657136586249e-6,-5.76069054929591e-9,0.001948938125527602,-5.886667676818439e-6,-5.69370500652984e-9,0.0019491274075020232,-6.0699856033129015e-6,-5.515569915679763e-9,0.0019494249289553265,-6.3227915401508744E-06,-5.270071903094241e-9,0.001949845257742566,-6.578590377092514e-6,-5.022021831291358e-9,0.0019503668701211755,-6.771379833246088e-6,-4.8356927104913765e-9,0.001950941025999169,-6.857006618888046e-6,-4.754047856449597e-9,0.0019515098360051739,-6.823912357418047e-6,-4.788264987953578e-9,0.0019520240658229982,-6.690500284410137e-6,-4.920280238133386e-9,0.0019524536244067533,-6.49382548244997e-6,-5.113816259747165e-9,0.0019527895094792508,-6.276752315075202e-6,-5.326941081183438e-9,0.0019530401509459683,-6.078332438438705e-6,-5.521497393189113e-9,0.001953225817980965,-5.928567237035448e-6,-5.668236483345585e-9,0.0019533734478342783,-5.84651286102268e-6,-5.74866469745462e-9,0.0019535127069048035,-5.840135760566559e-6,-5.755159455452236e-9,0.0019536730713173847,-5.906707798229399e-6,-5.690546687804252e-9,0.0019538812761171337,-6.033223898987462e-6,-5.567654612994196e-9,0.0019541585144023286,-6.197000707763707e-6,-5.408699430107965e-9,0.0019545171385095907,-6.367107479822374e-6,-5.243879262195881e-9,0.0019549572076320533,-6.5074833444539475e-6,-5.108346058501838e-9,0.0019554639201165612,-6.582363249082454e-6,-5.03694129358835e-9,0.001956007498430186,-6.563809875728904e-6,-5.0568720809815e-9,0.001956546986261798,-6.4398326830353245e-6,-5.179789317621606e-9,0.001957038319601614,-6.220390777973844e-6,-5.3959025305882386e-9,0.001957445211377807,-5.938406346561329e-6,-5.6729623501463044E-09,0.0019577497434098727,-5.6441961139281294e-6,-5.961701088875459e-9,0.00195795905198493,-5.3940117834603315e-6,-6.207071934832427e-9,0.001958105475933685,-5.235595818058769e-6,-6.362420055449834e-9,0.0019582395183540724,-5.194843437985116e-6,-6.402542072145623e-9,0.001958417079498149,-5.267559275761301e-6,-6.331712684108876e-9,0.0019586841391798864,-5.419208397437096e-6,-6.183867152169376e-9,0.0019590632992368684,-5.5936274617679324e-6,-6.0140407497047866e-9,0.0019595468572287758,-5.728796846682779e-6,-5.882943397267424e-9,0.001960099404208329,-5.774659859002328e-6,-5.8395474337831e-9,0.0019606692273000065,-5.706491547132605e-6,-5.908007246472056e-9,0.001961203875844111,-5.5290734820936245e-6,-6.083550911233866e-9,0.001961663710892444,-5.271294504247528e-6,-6.33775249294814e-9,0.0019620291042840325,-4.974990706173587e-6,-6.62948408349352e-9,0.0019623006544432146,-4.683271223898374e-6,-6.916401377222745e-9,0.001962494734377491,-4.432015613971804e-6,-7.163317469825513e-9,0.00196263744876942,-4.24555166449937e-6,-7.3464495352867865e-9,0.001962759151531451,-4.135625053205161e-6,-7.454405906541533e-9,0.0019628903475563684,-4.102163162853727e-6,-7.487397138171459e-9,0.001963058825873597,-4.134581772027361e-6,-7.45591629508366e-9,0.0019632873735704035,-4.2130275752858015e-6,-7.37949782948698e-9,0.001963591384460584,-4.309670509689841e-6,-7.285447272084761e-9,0.001963976034392938,-4.390698571258319e-6,-7.2069014925367394E-09,0.00196443330876546,-4.419933657794488e-6,-7.1793089036528066e-9,0.0019649399761413515,-4.364865771727716e-6,-7.23453490273262e-9,0.001965458415821613,-4.2050069352158806e-6,-7.392670556572303e-9,0.0019659423021510165,-3.940624693125234e-6,-7.653438357820787e-9,0.001966347619651084,-3.5979703831828426e-6,-7.991020087185636e-9,0.001966646410720784,-3.2268073690315724e-6,-8.35646294373238e-9,0.001966837804951861,-2.88866026076316e-6,-8.6892469084276e-9,0.0019669507350560987,-2.638942552458159e-6,-8.93489923720782e-9,0.001967036219204756,-2.509897091168396e-6,-9.061792188439865e-9,0.0019671521102095036,-2.5011703515333097e-6,-9.070385947269845e-9,0.001967346338386762,-2.5810055380569523e-6,-8.992002968155938e-9,0.0019676443316525953,-2.696486676324743e-6,-8.878723391163976e-9,0.0019680437540308916,-2.788602202893239e-6,-8.788584213578214e-9,0.00196851699192739,-2.8074134547524235e-6,-8.77069512204032e-9,0.0019690198105688102,-2.723406029950918e-6,-8.854087293070188e-9,0.001969503286514971,-2.5325606025790628e-6,-9.042705655591e-9,0.0019699255438227234,-2.2545503651888572e-6,-9.317149614451272e-9,0.0019702602048416143,-1.9254253998824907e-6,-9.64186138287465e-9,0.0019704998243126686,-1.587626778063647e-6,-9.974977396460062e-9,0.001970654436207738,-1.2805361083925496e-6,-1.0277671836369529E-08,0.001970746848452303,-1.0338220010957484e-6,-1.0520734387427998e-8,0.001970806813276138,-8.642671882979529e-7,-1.0687691080751363e-8,0.0019708657346138646,-7.754852094272468e-7,-1.0775054263680461e-8,0.001970952685885467,-7.59358064857489e-7,-1.0790873734095068e-8,0.001971091690133412,-7.980785287859418e-7,-1.075270881326718e-8,0.0019712997330186763,-8.661819417994633e-7,-1.0685635082892515e-8,0.001971584912381313,-9.325958251431366e-7,-1.0620251655417039e-8,0.001971944386893563,-9.632389319096306e-7,-1.0590148555848218e-8,0.0019723623172643737,-9.250101036695197e-7,-1.0627989281767547e-8,0.001972808830631805,-7.919702181976068e-7,-1.0759406320346234e-8,0.0019732419679683944,-5.536462457545765e-7,-1.0994779047683153e-8,0.001973614823661226,-2.2335933302557065e-7,-1.1320973812675675e-8,0.0019738884737286657,1.5799990717252462e-7,-1.1697589927724113e-8,0.0019740473224203847,5.280347963458416e-7,-1.2062959771330483e-8,0.00197410928803649,8.20358883314744e-7,-1.2351497457826083e-8,0.001974123317235958,9.877098265902934e-7,-1.251656570489879e-8,0.001974153255924493,1.0192999814429548e-6,-1.2547588496020676e-8,0.0019742556717545824,9.434428611000109e-7,-1.2472576911245205e-8,0.0019744623865517686,8.154180584666158e-7,-1.2346103517772794e-8,0.001974774135226251,6.982018680757243e-7,-1.2230299564424663e-8,0.001975164866836536,6.44800593857355e-7,-1.2177471453811616e-8,0.001975592187135106,6.871905621175031e-7,-1.221921769330186e-8,0.001976009248334955,8.327104581488337e-7,-1.2362852376014084e-8,0.0019763749925609457,1.0663971388143509e-6,-1.259366276420492e-8,0.001976661273607453,1.3571121056137057e-6,-1.2880913658228117e-8,0.0019768563928079714,1.6655158949823804e-6,-1.3185711559255818e-8,0.001976965150873674,1.9522178827619e-6,-1.3469078659361015e-8,0.0019770060231024044,2.1846215565256827e-6,-1.3698753468466588e-8,0.001977006519814771,2.3414551764659016e-6,-1.3853691582153881E-08,0.0019769979445145433,2.4146980122888094e-6,-1.3925966248255384e-8,0.0019770105929741008,2.409217344158514e-6,-1.3920387497226856e-8,0.0019770700502998715,2.340825972519958e-6,-1.3852563760087515e-8,0.0019771946962903715,2.233613597212906e-6,-1.3746268263541514e-8,0.001977394083641216,2.117137695108602e-6,-1.3630691930216664e-8,0.00197766776849491,2.02355937158754e-6,-1.353764934893884e-8,0.0019780043391657534,1.9844130263776497e-6,-1.3498405475263642e-8,0.001978380746958981,2.0264143260061553e-6,-1.353951384539365e-8,0.001978762774876461,2.1656876800633962e-6,-1.3677055583687163e-8,0.00197910834678161,2.4005955486988004e-6,-1.3909478074330424e-8,0.0019793755690996236,2.7052325640155345e-6,-1.4211108687579435e-8,0.0019795358980323765,3.0280329593492748e-6,-1.4530782563116931e-8,0.0019795888602322726,3.3008762468395384e-6,-1.4800926854883546e-8,0.001979569909580966,3.4602522751505376e-6,-1.4958607317158036e-8,0.0019795428292347273,3.4729664075210322e-6,-1.4971007396679774e-8,0.0019795766858330343,3.3517185374406653e-6,-1.485078131230214e-8,0.001979719097725177,3.150012236996182e-6,-1.4650917551003886e-8,0.0019799807430923235,2.939717703579574e-6,-1.4442508997057445e-8,0.001980337179051505,2.785210747885825e-6,-1.4289220607364234e-8,0.001980742604001265,2.726455749296866e-6,-1.423061560237119e-8,0.0019811460867675897,2.7744247605888214e-6,-1.4277633511904348e-8,0.001981503955526798,2.915383589334282e-6,-1.4416788031389436e-8,0.0019817866606374806,3.119072655949307e-6,-1.4618203584318185e-8,0.0019819810541467733,3.3472878569643014e-6,-1.4844069697144964e-8,0.0019820896686203603,3.5612914305410776e-6,-1.5055977587760283e-8,0.00198212818028609,3.7276910519524167e-6,-1.522077511487346e-8,0.0019821217200457113,3.822702343827983e-6,-1.531483119915164e-8,0.001982100526968717,3.8346574475360094e-6,-1.5326546430867445e-8,0.001982095446197697,3.7647342774013897e-6,-1.525707214555077e-8,0.0019821337647565624,3.626027788928867e-6,-1.511936833404366e-8,0.00198223586051072,3.441229396883561e-6,-1.4935887639064302e-8,0.00198241295750562,3.2394074768603723e-6,-1.4735395171384388e-8,0.001982665941468611,3.0524134698759988e-6,-1.4549442314482317e-8,0.0019829850278711707,2.9111670054398966e-6,-1.4408723058841443e-8,0.0019833501452222605,2.841809897117393e-6,-1.4339272286988301e-8,0.0019837320752173157,2.8615334931783054e-6,-1.4358293854803897e-8,0.001984094861776407,2.9738376767734945e-6,-1.4469388182609625e-8,0.001984400625925791,3.163606036205151e-6,-1.465759406565055e-8,0.001984617903763515,3.39387177161666e-6,-1.4886148324894974e-8,0.001984733239124418,3.6078493427449448e-6,-1.5098540495896356e-8,0.001984762586708769,3.740319866084089e-6,-1.522990885918146e-8,0.001984755051949164,3.739151728899739e-6,-1.5228487094580237e-8,0.0019847812506757346,3.589373742862749e-6,-1.507949371776934e-8,0.0019849070018280613,3.324884794977739e-6,-1.481665653780441e-8,0.0019851657075547475,3.017077739740492e-6,-1.4510837813089766e-8,0.001985546337819205,2.7455641756043497e-6,-1.4240999293311826e-8,0.0019860027126962026,2.5689052542741243e-6,-1.4065234505030063e-8,0.001986474911058454,2.5102785475177926e-6,-1.4006586884914449e-8,0.001986909190146146,2.5597820777408202e-6,-1.4055310223533645e-8,0.001987269141598994,2.685729541695863e-6,-1.4180024373601416e-8,0.001987538415975901,2.8470244196991636e-6,-1.4339955147058143e-8,0.0019877184535379826,3.0026745725009918e-6,-1.4494369758932575e-8,0.001987824315689395,3.1178169485181043e-6,-1.4608579499453113e-8,0.0019878803285720108,3.1671431670578377e-6,-1.4657380747630862e-8,0.001987916017903525,3.1367378731829e-6,-1.4626916752757822e-8,0.00198796225735607,3.0248075252962984e-6,-1.4515412078652403e-8,0.001988047562103157,2.8413753222055076e-6,-1.4332850735856531e-8,0.0019881946131477435,2.60687216740141e-6,-1.4099542829987458e-8,0.001988417298411971,2.349527873938127e-6,-1.3843513258288562e-8,0.0019887187102340417,2.1016769841030624e-6,-1.3596844711551368e-8,0.001989090425727029,1.895388778983732e-6,-1.3391377619170956e-8,0.001989513160461744,1.7578895979745178e-6,-1.3254203612054567e-8,0.001989958770446367,1.7071788559904026e-6,-1.3203316404532476e-8,0.001990393534070427,1.7481911434179824e-6,-1.3243755974189393e-8,0.0019907827350952195,1.8697874359525122e-6,-1.336454230925692e-8,0.00199109681028482,2.0431157285996407e-6,-1.3536978415285554e-8,0.001991319151058384,2.222726763531207e-6,-1.371574429721612e-8,0.0019914544946981836,2.3526243150694117e-6,-1.3844968523515149e-8,0.0019915347809361574,2.379086977407752e-6,-1.3871077631016254e-8,0.001991617224389839,2.269346242030513e-6,-1.376144811926663e-8,0.0019917698902892863,2.0294384279911193e-6,-1.3522157951942242e-8,0.0019920466456429435,1.7095202837346074e-6,-1.3203206351826863e-8,0.001992463423863107,1.3885001624897012e-6,-1.288317749571206e-8,0.0019929908638321907,1.143480512993817e-6,-1.2638853847306288e-8,0.0019935682104733686,1.0214708448982725e-6,-1.2517091776224162e-8,0.0019941285130815195,1.0283869976145581e-6,-1.2523846927649901e-8,0.0019946200002937324,1.1365035316745898e-6,-1.2631538348227922e-8,0.001995015574720192,1.300685938679259e-6,-1.2795181679410482e-8,0.0019953118522825736,1.4734595686959486e-6,-1.2967407715671091e-8,0.0019955231121392253,1.6145721408287418e-6,-1.3108023269665573e-8,0.001995674485554681,1.6953207844439172e-6,-1.3188361405392658e-8,0.001995796372307964,1.6996250991069645e-6,-1.3192379686625797e-8,0.0019959203169879858,1.6236696505985474e-6,-1.3116312565503816e-8,0.0019960757921594096,1.475055708754886e-6,-1.2967807444551166e-8,0.0019962873383381975,1.271613814117125e-6,-1.2764702800757431e-8,0.001996571813660661,1.039617664310189e-6,-1.253321173415832e-8,0.001996935876688311,8.10987734279826e-7,-1.2305124592895642e-8,0.0019973742307001037,6.19237649378676e-7,-1.2113796509748371e-8,0.0019978693382533895,4.943937406260044e-7,-1.198913399233764e-8,0.0019983931254425164,4.575767847518032e-7,-1.1952232495962723e-8,0.0019989108215040154,5.162092500765573e-7,-1.2010593106379118e-8,0.0019993866344011147,6.609218430927506e-7,-1.215498240158599e-8,0.001999790531775251,8.650472468204294e-7,-1.2358850045151053e-8,0.0020001051872744658,1.0872195388065961e-6,-1.258086799786539e-8,0.0020003320300538583,1.2774384887276872e-6,-1.2770987731393865e-8,0.0020004948833237455,1.386820963278251e-6,-1.2880238021882123e-8,0.0020006389899060112,1.380409164658492e-6,-1.2873596607745973e-8,0.0020008230599442827,1.250445294729628e-6,-1.2743295658742569e-8,0.0020011035292148414,1.0248522465183068e-6,-1.2517287786395435e-8,0.0020015145004623476,7.642707366236366e-7,-1.2256256246504428e-8,0.002002052224806011,5.444286659134359e-7,-1.203598958625036e-8,0.0020026739455431216,4.2948544136936147e-7,-1.1920745495741174e-8,0.002003313579512777,4.496948714502562e-7,-1.1940890619262743e-8,0.0020039058326337656,5.94885512572639e-7,-1.208630936784008e-8,0.0020044058510690797,8.245709877731227e-7,-1.2316460457905977e-8,0.002004796841439746,1.0859096843776425e-6,-1.2578353220820108e-8,0.0020050868112686674,1.3296101468781744e-6,-1.2822521486441082e-8,0.0020053001577274294,1.5190539612688328e-6,-1.3012215262669332e-8,0.002005469139021302,1.6331027930982382e-6,-1.3126245137314179e-8,0.0020056275325741548,1.6652065850658668e-6,-1.3158091335992063e-8,0.0020058066106900104,1.6211993428942383e-6,-1.3113673482230696e-8,0.0020060325903481888,1.5170686408574125e-6,-1.3009079439298547e-8,0.002006324650222416,1.3769637497429265e-6,-1.2868534813545612e-8,0.0020066929754689877,1.2310800018681066e-6,-1.2722269046986007e-8,0.002007136798951896,1.1127780991151567e-6,-1.2603647647411476e-8,0.0020076429784578894,1.054378781853201e-6,-1.254500526328362e-8,0.002008186099861188,1.081598763449451e-6,-1.2572118807769247e-8,0.0020087311297168646,1.2074288608481698e-6,-1.2698088673752461e-8,0.002009239103287181,1.4270773152031296e-6,-1.2918234760844035e-8,0.0020096752789058284,1.716007875070945e-6,-1.3208055118895744e-8,0.0020100179652990918,2.0326550064858777e-6,-1.352587734554098e-8,0.0020102654993804938,2.3260539621831587e-6,-1.3820486693134687e-8,0.0020104390771972405,2.547030253336762e-6,-1.4042386690680413e-8,0.002010580106295075,2.6604804750482006e-6,-1.4156191902665433e-8,0.0020107419502173964,2.6557832329077294e-6,-1.4151139319925016e-8,0.0020109771879805558,2.5523069324261464e-6,-1.4046647718123685e-8,0.0020113229426591533,2.397375789826293e-6,-1.3890280276741745e-8,0.0020117884211216064,2.2554114694326285e-6,-1.3746841070905745e-8,0.0020123497341117697,2.1898980519676447e-6,-1.3680257875013628e-8,0.002012955651515441,2.2438213886840194e-6,-1.3733900181722728e-8,0.0020135433728180985,2.4266447610087438e-6,-1.39174182558369e-8,0.0020140579317852875,2.71366437476233e-6,-1.4206014604787913e-8,0.0020144668228012324,3.057204948402956e-6,-1.4551671002974376e-8,0.0020147647475891694,3.403199418756304e-6,-1.4899863316082618e-8,0.0020149692079483423,3.7055522989431925e-6,-1.520408419186706e-8,0.00201511150064555,3.9340846123691215e-6,-1.5433892567141782e-8,0.0020152277251075717,4.076173637410506e-6,-1.5576577887703656e-8,0.002015352239871468,4.134536644454852e-6,-1.563490853663456e-8,0.0020155138461719147,4.123692670047893e-6,-1.5623536213635403e-8,0.002015733840614426,4.0666243269108735e-6,-1.55656072328393e-8,0.0020160248674950276,3.992054942875605e-6,-1.549001455038565e-8,0.002016389829459018,3.93198510839712e-6,-1.542893704410032e-8,0.0020168206820040395,3.918765993757011e-6,-1.541493242521958e-8,0.0020172975756185623,3.980985777701276e-6,-1.5476833726911856E-08,0.0020177894153615887,4.137875398081949e-6,-1.5634127210906082e-8,0.002018257233673766,4.392939175307108e-6,-1.589050240627824e-8,0.0020186613266694954,4.728908346737077e-6,-1.6228694079735292e-8,0.0020189715206215524,5.107091194937329e-6,-1.660975065177038e-8,0.0020191776486713324,5.473615092617835e-6,-1.6979292753435012e-8,0.002019295779758033,5.772429950864491e-6,-1.7280651483171656e-8,0.002019366518176988,5.961349214838775e-6,-1.7471108259171236e-8,0.0020194449006417144,6.025194125173232e-6,-1.7535205282025255e-8,0.0020195851788385455,5.980999551576999e-6,-1.7490022440756466e-8,0.0020198257279237858,5.873603143711555e-6,-1.7380744515888384e-8,0.0020201787279912464,5.763467291729197e-6,-1.7268403150332105e-8,0.002020627231636164,5.710627551405569e-6,-1.7213706810198902e-8,0.002021130054639501,5.7592346508056935e-6,-1.7261429057047976e-8,0.002021632985760314,5.926817997082376e-6,-1.7429501306651574e-8,0.0020220830928120654,6.20118699778434e-6,-1.7705783145695567e-8,0.0020224418380563767,6.54565640069781e-6,-1.8053264624984565e-8,0.002022693062944097,6.910491614078083e-6,-1.842162169656846e-8,0.0020228439203432147,7.246330768272015e-6,-1.876083414523109e-8,0.00202291967499455,7.515105216752511e-6,-1.9032294027402762e-8,0.002022955371584404,7.695808702277565e-6,-1.9214681031198905e-8,0.0020229876289183193,7.785067752112486e-6,-1.9304540519772036e-8,0.002023048591573068,7.794246700981407e-6,-1.931333154928886e-8,0.0020231624980154585,7.745203409912733e-6,-1.926311028183914e-8,0.0020233442466032186,7.666212202219833e-6,-1.918240528759956e-8,0.0020235989734061375,7.588624354679677e-6,-1.9102866270263047e-8,0.002023921859131006,7.544034825291021e-6,-1.9056442936228402e-8,0.0020242978850773183,7.561308638331777e-6,-1.907241483206435e-8,0.0020247018586647472,7.662755338235264e-6,-1.9173526603769192e-8,0.0020250996748987574,7.859045107714878e-6,-1.9370801266084847e-8,0.0020254522736660083,8.143408211325172e-6,-1.9657586738974178e-8,0.0020257235021321623,8.487284167289417e-6,-2.0005064388235096e-8,0.0020258914008579325,8.841089839559924e-6,-2.0362983469746076e-8,0.0020259593522022504,9.143502782538063e-6,-2.0669092452411597e-8,0.002025960886878649,9.339097586877438e-6,-2.0867079499950275e-8,0.0020259529258870486,9.398254944606137e-6,-2.0926796085751366e-8,0.0020259980842913805,9.329515946722925e-6,-2.085676872498728e-8,0.0020261436498098338,9.177436067364245e-6,-2.0702003689784143e-8,0.002026406976788043,9.007145260904893e-6,-2.0528373390696197e-8,0.0020267726311981303,8.883574211806648e-6,-2.0401649057662443e-8,0.002027200045442295,8.85396367750792e-6,-2.0369837232274553e-8,0.00202763668051562,8.938366466169523e-6,-2.0453528387901555e-8,0.002028031669042613,9.128606584898225e-6,-2.0644735364591285e-8,0.0020283466335991557,9.39376249959402e-6,-2.0912327645621907e-8,0.00202856210099846,9.689503075361093e-6,-2.121142268331872e-8,0.002028679138809268,9.968698912730516e-6,-2.1494151041399055e-8,0.0020287166795685033,1.0191047732068404e-5,-2.1719481725996414e-8,0.0020287057358542504,1.0329897581158466e-5,-2.186021727137697e-8,0.0020286822638829623,1.0375287950705e-5,-2.1906123600102078e-8,0.0020286804677956084,1.0333353870444897e-5,-2.186332802988044e-8,0.0020287278066525257,1.022312602899354e-5,-2.175105158087606e-8,0.0020288421647846723,1.0072112218170743e-5,-2.1597111262225863e-8,0.0020290308875681577,9.911875842701016e-6,-2.143344844153332e-8,0.0020292909665944156,9.774243576700235e-6,-2.129232494824514e-8,0.0020296097239808366,9.688113323346603e-6,-2.1203133387480477e-8,0.0020299656877050217,9.67644684934271e-6,-2.11893658424898e-8,0.0020303297882378582,9.752905982662366e-6,-2.1265165055571597e-8,0.0020306676073327287,9.917766980710009e-6,-2.1431087980682735e-8,0.002030943934628873,1.0153584998504719e-5,-2.1669593622508353e-8,0.0020311306708723493,1.0422590466425067e-5,-2.1942323425636325e-8,0.002031217579951732,1.0669289798588603e-5,-2.219275019954811e-8,0.002031222335730858,1.0831796516238949e-5,-2.235778014634001e-8,0.002031193048301995,1.0861890930176747e-5,-2.2388241959551486e-8,0.00203119703859634,1.0746492481003186e-5,-2.2270735146629827e-8,0.002031297195154339,1.0517768776177442e-5,-2.2037844471414716e-8,0.0020315273094421984,1.0243291108028e-5,-2.1758092239078608e-8,0.0020318802493412753,1.0000530434740792e-5,-2.1510081000851584e-8,0.002032314137298937,9.850022664826762e-6,-2.1355340836590286e-8,0.002032770207259545,9.81982278786599e-6,-2.132258299426645e-8,0.0020331917199350323,9.904280503784482e-6,-2.14063888568104e-8,0.002033536949342053,1.0072489993620747e-5,-2.157566092331201e-8,0.0020337847861032054,1.0280151984724976e-5,-2.178555756437125e-8,0.002033934644404204,1.0480633734434917e-5,-2.1988684509594312e-8,0.002034002956023895,1.0633476288885205e-5,-2.2143773497299168e-8,0.0020340179562521273,1.0710065550269308e-5,-2.222152752762457e-8,0.002034013813275749,1.0696609639052564e-5,-2.2207730651406188e-8,0.002034024860105363,1.0594604521297306e-5,-2.2103765848150748e-8,0.002034080587443095,1.0419122419825089e-5,-2.19248717814829e-8,0.0020342019278727854,1.0195455518673118e-5,-2.169670062200928e-8,0.0020343991620295483,9.954802844166271e-6,-2.145091239995425e-8,0.0020346714321390342,9.729785129053017e-6,-2.122063084652677e-8,0.0020350074824118905,9.550386709694598e-6,-2.103636451097717e-8,0.002035387185509016,9.440493583899565e-6,-2.0922533216016104e-8,0.0020357836037984364,9.414912608424384e-6,-2.089444107511516e-8,0.0020361655489376162,9.476655420791237e-6,-2.0955452598258494e-8,0.002036501001353076,9.614310232276557e-6,-2.1094206564680248e-8,0.002036762210872142,9.79994037620005e-6,-2.1282363869390327e-8,0.0020369330481708123,9.989184837192771e-6,-2.1474658477092256e-8,0.002037017771296381,1.012628359366276e-5,-2.1614061269663444e-8,0.002037047915437464,1.015658110540848e-5,-2.164463677168314e-8,0.0020370813026867737,1.0046056108125668e-5,-2.153154985964805e-8,0.0020371875508600258,9.800650799576031e-6,-2.1280773292665346e-8,0.002037421936656467,9.472336381754918e-6,-2.094520101904596e-8,0.0020378005857027153,9.143072453333508e-6,-2.0608270685343048e-8,0.0020382928899801513,8.892876275813154e-6,-2.035149508235166e-8,0.0020388358398022157,8.770499811406708e-6,-2.0224669132370346e-8,0.002039359770557812,8.781941663669052e-6,-2.0234157130035133e-8,0.0020398103504522254,8.897729739466089e-6,-2.0350211586612295e-8,0.0020401588643933475,9.069382952218172e-6,-2.0523629149456965e-8,0.0020404019625274035,9.245293559122839e-6,-2.0701866584475123e-8,0.002040555827693921,9.381504609670853e-6,-2.0840025781472896e-8,0.0020406489259659406,9.447228151930216e-6,-2.0906536788607898e-8,0.0020407154331214734,9.426696770852405e-6,-2.088512838607746e-8,0.00204078985578392,9.318873354513713e-6,-2.077459998128169e-8,0.00204090271395194,9.135845367544504e-6,-2.0587206452044835e-8,0.0020410771407216085,8.900239108317796e-6,-2.034599700431967e-8,0.002041326419699712,8.641807325844239e-6,-2.0081292128129632e-8,0.0020416526435947345,8.393337339943669e-6,-1.982648942593215e-8,0.002042046703171445,8.186237577472187e-6,-1.9613586261310882e-8,0.0020424895896427346,8.046339142518472e-6,-1.9468954219893878e-8,0.0020429547843234747,7.990305000968632e-6,-1.940972395069631e-8,0.0020434115251253306,8.022843551834938e-6,-1.9440936885743926e-8,0.002043828782565443,8.134892448156656e-6,-1.9553616311880043e-8,0.0020441798602190554,8.302917025788585e-6,-1.972393223071845e-8,0.0020444477519546617,8.4896969525292e-6,-1.9913901817449882e-8,0.0020446311903293338,8.647706547103258e-6,-2.0074815114312748e-8,0.0020447501973034107,8.726723226422148e-6,-2.0155077328217368e-8,0.002044848244940901,8.686627904246379e-6,-2.011341515541943e-8,0.0020449867383772256,8.513737749746249e-6,-1.9935671842505055e-8,0.002045228541166259,8.234144633017872e-6,-1.964846070320371e-8,0.0020456134638839763,7.913572361465218e-6,-1.931898185881672e-8,0.0020461377861319533,7.63729312921591e-6,-1.9034476270744172e-8,0.0020467521585061633,7.477202828544634e-6,-1.8868592712503943e-8,0.002047381272856939,7.464688941483806e-6,-1.8853644549237028e-8,0.0020479532062943314,7.58431837206364e-6,-1.8974080315531745e-8,0.0020484215587382487,7.78774400789283e-6,-1.918060677428675e-8,0.0020487722662357426,8.015405362121847e-6,-1.941233147259879e-8,0.002049018198077936,8.214197838192044e-6,-1.9614843383185996e-8,0.0020491889216315115,8.346735295295853e-6,-1.9749735808637718e-8,0.0020493210512069144,8.393632060507522e-6,-1.979700451228811e-8,0.0020494512449664246,8.351957607960816e-6,-1.9753525015406534e-8,0.0020496117250101715,8.23232744734854e-6,-1.963010652990153e-8,0.002049827426776408,8.055769435622714e-6,-1.944827439536342e-8,0.002050114053526486,7.850558869214728e-6,-1.9236989441846953e-8,0.0020504767490431433,7.648847136675355e-6,-1.9029157282885984e-8,0.0020509094756088818,7.482854532348159e-6,-1.8857725613841873e-8,0.002051395453334524,7.380623768682452e-6,-1.8751377321085998e-8,0.0020519090052662243,7.361760387571575e-6,-1.8730230620980626e-8,0.0020524188593675297,7.433818308990292e-6,-1.8802173480598776e-8,0.0020528926844391848,7.589950602549962e-6,-1.8960428834936324e-8,0.0020533024421489844,7.808390524123514e-6,-1.9182928498524213e-8,0.0020536299340462158,8.054192913403938e-6,-1.9433978306497595e-8,0.0020538718361486044,8.283434195619361e-6,-1.9668482974938482e-8,0.0020540434289632683,8.45004521906672e-6,-1.9838956797592828e-8,0.0020541797514216247,8.515402796906978e-6,-1.99054534057615e-8,0.0020543322054149753,8.459930706160225e-6,-1.984759651675978e-8,0.0020545585952090927,8.293944827313858e-6,-1.9675807879402267e-8,0.0020549063810787,8.062431097372e-6,-1.9436246264897823e-8,0.0020553934153247633,7.837497117823304e-6,-1.920304947832446e-8,0.002055995700465939,7.696451661454231e-6,-1.9055809090821722e-8,0.002056651811353018,7.693154521324639e-6,-1.9050112336143213e-8,0.0020572846695030584,7.837818600247798e-6,-1.919671296351236e-8,0.002057829365555983,8.096658859821898e-6,-1.946106441052887e-8,0.002058252145844519,8.409493816274429e-6,-1.978134730901258e-8,0.0020585536030746266,8.712990432294358e-6,-2.0092375696100318e-8,0.002058759808669095,8.957877739096902e-6,-2.0343349339844396e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json deleted file mode 100644 index 4dcccb3..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_17.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":17000,"numberOfSamples":1000,"samples":[0.0020589095356776037,9.116105504093818e-6,-2.0505272164235435e-8,0.002059043510293161,9.180255067418492e-6,-2.0570390059257767e-8,0.0020591976431414568,9.159302745262173e-6,-2.054785882824188e-8,0.002059399625909375,9.073759899582225e-6,-2.045874721325323e-8,0.0020596674746746844,8.95148439515232e-6,-2.033170765436402e-8,0.00206000888513569,8.824207938457376e-6,-2.019937465729761e-8,0.002060420904195782,8.724308617167852e-6,-2.0095032184184587e-8,0.0020608899779143205,8.68132520947309e-6,-2.0049049012491025e-8,0.0020613928365786132,8.717972919315283e-6,-2.008482719556681e-8,0.0020618988348358,8.845955809078727e-6,-2.021453482958727e-8,0.002062374125258358,9.062441716260134e-6,-2.0435474508193457e-8,0.0020627874895708226,9.348364762479418e-6,-2.072826871336509e-8,0.0020631169945883126,9.669654112154566e-6,-2.1058015950605946e-8,0.0020633560604633263,9.98198746864013e-6,-2.137908652587735e-8,0.002063517288428266,1.023877017749716e-5,-2.164330411583651e-8,0.002063632645942536,1.0401139220424818e-5,-2.1810299545772995e-8,0.0020637491502467223,1.0448183572471843e-5,-2.185815206205818e-8,0.0020639198525462597,1.0385066085844465e-5,-2.1791885352537092e-8,0.002064190922547863,1.0246206042140799e-5,-2.1646843352671344e-8,0.002064587291919049,1.0090636415679369e-5,-2.1483949591921145e-8,0.0020651014652658243,9.988078798241432e-6,-2.13753442005915e-8,0.002065691367589172,9.998026570269695e-6,-2.1382754626188622e-8,0.002066291012197917,1.0149230388591655e-5,-2.153622147579785e-8,0.002066831501387849,1.0429452683376921e-5,-2.182338975756979e-8,0.002067263169333099,1.0791237145000513e-5,-2.2195367611649683e-8,0.002067568557615017,1.1170401662074308e-5,-2.2585814103541868e-8,0.0020677618994642912,1.1507219742502304e-5,-2.2932879418767003e-8,0.0020678786593962845,1.1760992660056131e-5,-2.319433420100162e-8,0.00206796228678175,1.1914801500387303e-5,-2.3352529680849556e-8,0.0020680536670884195,1.1972789302221374e-5,-2.3411612372762594e-8,0.002068185083895209,1.1954165594086708e-5,-2.339133460421787e-8,0.0020683778972125345,1.1887104070253944e-5,-2.3320744180844544e-8,0.002068642307553408,1.180390121082168e-5,-2.3233173740066774e-8,0.002068977856263579,1.1737393814191125e-5,-2.3162537647244684e-8,0.002069373999389383,1.1717978706675388e-5,-2.3140267827765654e-8,0.0020698107873335274,1.1770514429890422e-5,-2.3192140613020073e-8,0.0020702602014525747,1.1910715973072524e-5,-2.3334573248691355e-8,0.002070688939508567,1.2141252692424613e-5,-2.3570578997251697e-8,0.0020710632916822844,1.2448527390387745e-5,-2.3886375187523575e-8,0.002071356066541742,1.2801803268012288e-5,-2.4250382510760558e-8,0.0020715543319876706,1.3156451701310057e-5,-2.4616491549786515e-8,0.00207166551766087,1.3462116971780244e-5,-2.493246716960177e-8,0.002071719050649512,1.3674624989544023e-5,-2.5152297788431047e-8,0.0020717617377544535,1.3768431742533288e-5,-2.524915847137308e-8,0.0020718472574079074,1.374550081599251e-5,-2.5224700784713937e-8,0.0020720223622184525,1.363727582508806e-5,-2.5111195478472052e-8,0.0020723137031515636,1.3498471162329926e-5,-2.496519243244624e-8,0.002072719191338335,1.339381780152275e-5,-2.485385332221292e-8,0.002073206795757431,1.338096643139214e-5,-2.483723759380846e-8,0.0020737219362692,1.3494245133198445e-5,-2.4951381108780162e-8,0.00207420211020392,1.373455339359368e-5,-2.5197661804572466e-8,0.0020745944143773383,1.4069430089365293e-5,-2.554271199173207e-8,0.002074869746023746,1.4443723774723879e-5,-2.5929405831806994e-8,0.0020750285128816304,1.479667972622433e-5,-2.6294607590510123e-8,0.0020750966176363173,1.5078544268788864e-5,-2.6586483364644268e-8,0.0020751148669499956,1.5260889492796408e-5,-2.677529701011583e-8,0.0020751270004247535,1.5338783722705668e-5,-2.6855711891848633e-8,0.0020751704833224575,1.5326746513909972e-5,-2.684261106263222e-8,0.0020752715762822763,1.5251984116094389e-5,-2.6764080409271047e-8,0.002075444009124103,1.5147762629496005e-5,-2.6654533703698157e-8,0.002075689729548116,1.504827746606285e-5,-2.6549398220846943e-8,0.002076000366210549,1.4985082629739757e-5,-2.6481430881895264e-8,0.002076358657231711,1.498441301720375e-5,-2.6477967033587838e-8,0.0020767397992757677,1.5064587977735741e-5,-2.6558240543651232e-8,0.002077113259954405,1.5233004156103975e-5,-2.6730240753699176e-8,0.0020774459186594374,1.548284453443912e-5,-2.6987226620384064e-8,0.002077707337417931,1.5790500049088474e-5,-2.7304945193864276e-8,0.002077877261826839,1.6115682164498162e-5,-2.764165309505029e-8,0.0020779538822941765,1.6406603632449e-5,-2.7943458192743133e-8,0.0020779594398716464,1.6611353072832964e-5,-2.8156170195329946e-8,0.0020779390055978278,1.6693382219093287e-5,-2.824146792653341e-8,0.0020779502913158923,1.6645409426593984e-5,-2.8191416586278918e-8,0.002078046844161103,1.6494938438233428e-5,-2.803425405045996e-8,0.0020782610782756087,1.6297779276038386e-5,-2.782772424649056e-8,0.0020785941150732565,1.612175588363035e-5,-2.7642241561896423e-8,0.0020790159587568842,1.6027141518751153e-5,-2.754063775278662e-8,0.0020794748756735038,1.6050743503202965e-5,-2.756160492638588e-8,0.0020799118940896845,1.619791239208086e-5,-2.7711253577368164e-8,0.0020802757626315633,1.6443513592555717e-5,-2.7963924844698012e-8,0.0020805345246273253,1.674043522617959e-5,-2.8270877063799093e-8,0.002080681226938013,1.7032634096537527e-5,-2.857380300224129e-8,0.002080732951995497,1.7268943244941685e-5,-2.881925151534997e-8,0.002080724194408864,1.7413982316484317e-5,-2.8970092565580946e-8,0.0020806971435383278,1.745367834708195e-5,-2.901136620869484e-8,0.0020806920260737966,1.7394912621893336e-5,-2.8949975367327408e-8,0.002080739988704213,1.72607815502705e-5,-2.8809768850635676e-8,0.002080859515267317,1.70838985357426e-5,-2.8624560861473263e-8,0.0020810559636607064,1.6899885539921436e-5,-2.8431349761988563e-8,0.0020813230557203376,1.6742274751481572e-5,-2.8265022453786016e-8,0.0020816451171855417,1.6639033795220282e-5,-2.8154767386943654e-8,0.0020819993189068113,1.6610203007369465e-5,-2.812164312243963e-8,0.0020823577851628115,1.6665911699555345e-5,-2.817650914736122e-8,0.0020826899633292987,1.680426930790959e-5,-2.8317770861029884e-8,0.002082966018551884,1.7009150846059025e-5,-2.852896394235378e-8,0.002083162073066397,1.7248756752608075e-5,-2.8777135556946513e-8,0.0020832674579102563,1.7476932878513038e-5,-2.9014151463292816e-8,0.0020832924694833593,1.7639846001218737e-5,-2.9183675584427234e-8,0.0020832727739094805,1.7689422424584678e-5,-2.9235274256026354e-8,0.0020832653064138955,1.7601030960855478e-5,-2.9142946193151746e-8,0.0020833330245630757,1.7387646058308056e-5,-2.8919920603682593e-8,0.002083522753935488,1.7100955802243916e-5,-2.8619808329920083e-8,0.0020838468179513333,1.6815710705222776e-5,-2.8320330725747508e-8,0.002084278439419095,1.6604039049236554e-5,-2.8096659219011013e-8,0.0020847625566020353,1.6512511531122853e-5,-2.799759622144117e-8,0.002085235023267062,1.6551414097566436e-5,-2.8034351982823543e-8,0.0020856408987005555,1.6697366798988196e-5,-2.8183104552679034e-8,0.0020859461245631033,1.690450794263447e-5,-2.8396456266918066e-8,0.0020861415082864985,1.7118421130651345e-5,-2.8617819915088376e-8,0.0020862405867537945,1.7288696492304295e-5,-2.8794501922373435e-8,0.0020862736330299575,1.737809826474195e-5,-2.8887350772104285e-8,0.002086279804006059,1.7367702998098975e-5,-2.8876251011356654e-8,0.0020862990421835854,1.7258011428210435e-5,-2.8761400589556528e-8,0.002086365115922038,1.7066487746353264e-5,-2.8560802190087286e-8,0.0020865008408489875,1.682256943694604e-5,-2.8305053907286174e-8,0.002086715919263949,1.656156014476701e-5,-2.8030941270095572e-8,0.0020870071990390262,1.6318714925791584e-5,-2.7775237638634485e-8,0.0020873606761909773,1.612444436636325e-5,-2.7569706696292268e-8,0.0020877543487093165,1.6001012803300085e-5,-2.7437694306513178e-8,0.0020881612220372825,1.596050578626689e-5,-2.7392040420271822e-8,0.002088552230288847,1.6003549082607828e-5,-2.7433729548710437e-8,0.0020888992435952967,1.611837191802468e-5,-2.7550832366391624e-8,0.0020891786471092483,1.6280160651193357e-5,-2.7717702617435652e-8,0.0020893761169842166,1.6451350603092855e-5,-2.7895164399045403e-8,0.002089492678959948,1.6584503687808136e-5,-2.803347849401429e-8,0.0020895506186168747,1.6629975070205594e-5,-2.8080421596796448e-8,0.0020895956639829702,1.654957839540818e-5,-2.799570583593579e-8,0.002089690395538273,1.6333804471878623e-5,-2.7769090685971695e-8,0.002089896033722322,1.6014373257708863e-5,-2.7433529126734662e-8,0.0020902475806469254,1.5661140369289124e-5,-2.7061908434893643e-8,0.002090735796633609,1.5359270098771867e-5,-2.67432120407e-8,0.00209130859780546,1.5176778132377433e-5,-2.6548672939580005e-8,0.002091891842946931,1.5140754055244766e-5,-2.6506954770801897e-8,0.0020924165245282877,1.5233761825979138e-5,-2.660030176659009e-8,0.002092838108888907,1.5407435049015967e-5,-2.6778581186473033e-8,0.0020931426145603437,1.5602073463539797e-5,-2.697961713028947e-8,0.002093342524197185,1.576303163752042e-5,-2.7146256028244872e-8,0.0020934681224012187,1.5850536534203465e-5,-2.7236664035016808e-8,0.002093558330924372,1.584356238962605e-5,-2.7228488040135843e-8,0.002093652929189025,1.5739702587511593e-5,-2.711885649216876e-8,0.002093786585558144,1.5552692842214613e-5,-2.6921891528832596e-8,0.002093984610700063,1.530847635566744e-5,-2.6664625730728237e-8,0.002094260408522702,1.5040327883243397e-5,-2.6381866829385993e-8,0.0020946146605398033,1.4783590396206654e-5,-2.6110629573656682e-8,0.0020950361908124754,1.4570612940870071e-5,-2.5884801421741135e-8,0.002095504287982403,1.4426464136665532e-5,-2.573066979561237e-8,0.0020959920098880948,1.436589162782448e-5,-2.566378974830331e-8,0.0020964698904481064,1.4391654082877689e-5,-2.568727581986414e-8,0.002096909672107035,1.4494027260271335e-5,-2.5791262682142066e-8,0.002097287955238897,1.4651254484391914e-5,-2.595327902709219e-8,0.0020975898588619776,1.483086589384205e-5,-2.6139490483611765e-8,0.0020978129239909112,1.4992194433574303e-5,-2.6307227096703933e-8,0.002097971126731232,1.5091109530391926e-5,-2.6409931481351222e-8,0.002098097703998993,1.5088284225384236e-5,-2.6405927211233465e-8,0.002098243998954342,1.4961356647547054e-5,-2.6271336291410024e-8,0.002098470643735973,1.4718558663920096e-5,-2.601451060716538e-8,0.002098829142769062,1.4406847413029446e-5,-2.568461021728266e-8,0.002099338584112944,1.4104891981013634e-5,-2.5364227738068856e-8,0.002099970577078888,1.389718581053549e-5,-2.51422113367583e-8,0.0021006554024350413,1.3839945599057747e-5,-2.5077873022135188e-8,0.0021013089162565824,1.3939075366767634e-5,-2.5177804466452004e-8,0.0021018642410454017,1.4152966541286029e-5,-2.5398697748388907e-8,0.002102290544234685,1.4414719463911722e-5,-2.5670555129297722e-8,0.002102593458372229,1.4657717276490355e-5,-2.5923475251490083e-8,0.002102803823419274,1.4832523419603329e-5,-2.610539494337901e-8,0.002102963997051854,1.4912874042482475e-5,-2.6188440763515092e-8,0.00210311701985688,1.489429901720448e-5,-2.6167581509441245e-8,0.00210329981316489,1.4789514144286761e-5,-2.605589711490424e-8,0.0021035395604685125,1.4623216960515582e-5,-2.5879181897882027e-8,0.002103852012857229,1.4427256816148642e-5,-2.5670874573032203e-8,0.0021042409306866908,1.4236166858646234e-5,-2.546731313778813e-8,0.002104698454320543,1.4082882456060734e-5,-2.53031751996881e-8,0.0021052064752133293,1.3994654154339699e-5,-2.5207158431920774e-8,0.0021057391315831625,1.3989407920046565e-5,-2.519818244598461e-8,0.002106266387320575,1.4073050130678136e-5,-2.5282607415599342e-8,0.002106758334830071,1.423820083636465e-5,-2.5452924691916057e-8,0.0021071897012097697,1.4464569256647e-5,-2.568810271807864e-8,0.0021075440763852053,1.4720984983073159e-5,-2.5955605114652786e-8,0.002107817455023985,1.4968991587208612e-5,-2.6215033812032676e-8,0.0021080207898770947,1.5167881763610569e-5,-2.6423345985019315e-8,0.0021081811782254606,1.52812712911579e-5,-2.6541802838830476e-8,0.002108340721814446,1.5285367127017497e-5,-2.6544815228638046e-8,0.002108551393130802,1.5178224387244792e-5,-2.6429882679400344e-8,0.0021088642657054028,1.4987405902763008e-5,-2.6225817522741596e-8,0.0021093131823441873,1.477109413125047e-5,-2.5993980396136906e-8,0.0021098973634679687,1.4606796678395606e-5,-2.5816350529623914e-8,0.0021105729078048107,1.4566334520348138e-5,-2.5769076832392603e-8,0.0021112628777701157,1.4686483996552583e-5,-2.589140375989459e-8,0.002111884963727069,1.49524858304974e-5,-2.616814292368397e-8,0.0021123820416213326,1.530564027223351e-5,-2.653758083888853e-8,0.002112738443062604,1.566943862865359e-5,-2.6919021383359056e-8,0.0021129763380782042,1.597734406587063e-5,-2.7242128079128386e-8,0.002113139906608551,1.6188913189144726e-5,-2.7463982116337144e-8,0.0021132785147635735,1.6292255587917617e-5,-2.7571731956963736e-8,0.002113435244892276,1.6298231436790853e-5,-2.7576542617677282e-8,0.002113641467647694,1.623231108640538e-5,-2.750507948119659e-8,0.0021139155020888497,1.612742596429646e-5,-2.739200662875825e-8,0.002114263195353226,1.601868102419684e-5,-2.7274398004963558e-8,0.002114679097938746,1.5939462619916927e-5,-2.7187584649230205e-8,0.002115147857818045,1.591820498712063e-5,-2.7161697731839154e-8,0.0021156460082405507,1.5975354031712748e-5,-2.7218453269601503e-8,0.0021161445333496127,1.6120489838517026e-5,-2.736813658476198e-8,0.002116612541248858,1.6350066999505276e-5,-2.7607239032229045e-8,0.002117021983644663,1.6646569377117553e-5,-2.791754490148783e-8,0.002117352837098394,1.697979911393296e-5,-2.826741083990463e-8,0.0021175978015787107,1.731065634053247e-5,-2.8615637817191073e-8,0.00211776543378165,1.759725263509948e-5,-2.8917829165943654e-8,0.002117880769420787,1.7802584133189674e-5,-2.9134478291953385e-8,0.002117982886203447,1.7902584529889876e-5,-2.9239569317390042e-8,0.002118119198387002,1.7893289828263934e-5,-2.922832774864068e-8,0.002118336487991736,1.7795584944785858e-5,-2.9122440610658274e-8,0.0021186692843823997,1.7655389538035962e-5,-2.8970402749374115e-8,0.0021191276345471233,1.7536852324466382e-5,-2.8840362727093884e-8,0.0021196884143433207,1.7507199823531867e-5,-2.880401634238384e-8,0.002120295925762307,1.7615411346021366e-5,-2.8913861014445143e-8,0.0021208758106100725,1.787247903713528e-5,-2.9182079529307654e-8,0.002121359406182991,1.8244267405424016e-5,-2.9572807067690778e-8,0.0021217074721560777,1.8663209769622012e-5,-3.0014474124992184e-8,0.0021219209004431955,1.905356541542978e-5,-3.042663828206199e-8,0.0021220343298265485,1.9356536768551152e-5,-3.0746705244532125e-8,0.002122099166839674,1.954377814105041e-5,-3.094431491310143e-8,0.002122166330543905,1.9617217855782224e-5,-3.102119259421685e-8,0.0021222752180405586,1.9600531064406503e-5,-3.100215517299388e-8,0.002122449658514504,1.952878967527067e-5,-3.092419165467688e-8,0.0021226984612435964,1.9440127761138346e-5,-3.082765962692926e-8,0.002123017846957808,1.9370314072744265e-5,-3.075052790344494e-8,0.0021233940681903195,1.934948928989278e-5,-3.0724888774326296e-8,0.0021238056794888474,1.9399952935627528e-5,-3.077458440678296e-8,0.002124225682580438,1.9534193054597844e-5,-3.091310551719368e-8,0.002124624113565031,1.9752886458047202e-5,-3.1141464105636413e-8,0.002124971655833702,2.0043233580223036e-5,-3.144639940286134e-8,0.00212524450155675,2.037859705176521e-5,-3.179992728445566e-8,0.002125429949440885,2.0720660307119964e-5,-3.216153381034379e-8,0.0021255313735390655,2.1024952911718785e-5,-3.2483951488909524e-8,0.0021255706390746042,2.1249553405534983e-5,-3.272236244662322e-8,0.0021255862274255134,2.136531580176944e-5,-3.284530096658392e-8,0.002125626472329969,2.136477599867833e-5,-3.2844230643420137e-8,0.0021257389764561077,2.1266765123494018e-5,-3.273861136499655e-8,0.0021259586471253046,2.1114766388613177e-5,-3.2574325849611996e-8,0.0021262973922635143,2.0968604798671925e-5,-3.241497651320302e-8,0.0021267384416393392,2.0890666115759917e-5,-3.2327268627746654e-8,0.0021272376715695132,2.0929425811587144e-5,-3.236339970670092e-8,0.002127733046172089,2.110460424404699e-5,-3.2545061768599696e-8,0.00212816092546539,2.1399236109442378e-5,-3.2854762929754035e-8,0.0021284746737500223,2.176302809822261e-5,-3.3239236614057686e-8,0.002128658496133636,2.212740460159936e-5,-3.362543623506609e-8,0.0021287304336883744,2.2426834845535454e-5,-3.3943333219980947e-8,0.0021287335646911943,2.2617434207905126e-5,-3.414584047635682e-8,0.0021287204228760234,2.2685679731977404e-5,-3.421817395035784e-8,0.0021287380406940413,2.264602236182866e-5,-3.417535947240264e-8,0.002128818715188701,2.2531501692113913e-5,-3.4052283410800604e-8,0.002128977344015476,2.2382911676892006e-5,-3.3892197642410027e-8,0.002129213263803856,2.2240213464310166e-5,-3.373760006185234e-8,0.0021295139322477768,2.2137245808817076e-5,-3.362460002842891e-8,0.0021298586205894944,2.2099046795842652e-5,-3.358004972356987e-8,0.0021302214146577676,2.2140545104573738e-5,-3.362013028869592e-8,0.0021305737006618716,2.2265607580957118e-5,-3.374931398457121e-8,0.0021308867762918587,2.2466010723704024e-5,-3.39592257518173e-8,0.002131135293920836,2.2720594046935103e-5,-3.4227667717305434e-8,0.0021313019334212695,2.2995565753170124e-5,-3.451884933521096e-8,0.0021313829342262734,2.3247460182788705e-5,-3.4786456209133385e-8,0.0021313929103826883,2.3430080081429465e-5,-3.4981018338903236e-8,0.0021313662623369065,2.35053775592328e-5,-3.506154647311194e-8,0.002131352534668617,2.3455775394926864e-5,-3.500875472352498e-8,0.0021314050619435174,2.3293157757724045e-5,-3.483475480248656e-8,0.0021315656878382726,2.305959461858975e-5,-3.458394904972025e-8,0.002131851148769884,2.2817817875395575e-5,-3.432300884872676e-8,0.002132246675708553,2.2634145895239077e-5,-3.412278123476084e-8,0.0021327093056224787,2.255991732479814e-5,-3.4038512859965103e-8,0.0021331794386085386,2.261762912569421e-5,-3.4094941293936804e-8,0.002133596614516856,2.2795606804280943e-5,-3.4280365800889207e-8,0.0021339148569076657,2.3052078776754165e-5,-3.455073970041519e-8,0.0021341135296762083,2.3327034579694484e-5,-3.484217778475803e-8,0.0021342009716787884,2.355832491670355e-5,-3.508814955727273e-8,0.0021342101969445745,2.3697300658380293e-5,-3.523629751598651e-8,0.0021341884075972216,2.3719450332254015e-5,-3.525994944230765e-8,0.002134184081791398,2.3627331849970435e-5,-3.5161372712859956e-8,0.002134235900463689,2.3446066878692636e-5,-3.4967036409302774e-8,0.0021343663946126897,2.321429430328426e-5,-3.471798296710547e-8,0.0021345807976598918,2.2974350116389325e-5,-3.4459344612988514e-8,0.0021348696549837566,2.2764450779378168e-5,-3.4231980765256686e-8,0.0021352131046345666,2.2613905870942357e-5,-3.4067347153649095e-8,0.0021355851791665065,2.25409643711599e-5,-3.398518306415485e-8,0.002135957353588875,2.255223300982052e-5,-3.3992879723749303e-8,0.0021363013822437923,2.264265540717151e-5,-3.408542886166249e-8,0.0021365919676518924,2.279553658100697e-5,-3.4245382178955386e-8,0.0021368099415358917,2.298274820199354e-5,-3.444296877039347e-8,0.0021369464146205742,2.3165964903851673e-5,-3.463731317033913e-8,0.0021370076236995232,2.3300428516159704e-5,-3.4780406073762714e-8,0.0021370188901841084,2.334275576213467e-5,-3.482548254690987e-8,0.002137024662802771,2.3262920180390915e-5,-3.473993474880969e-8,0.0021370813223880038,2.3057492795026685e-5,-3.451958523389752e-8,0.002137241889275746,2.2757801904735166e-5,-3.41974981982623e-8,0.0021375370262618257,2.2426116340509338e-5,-3.3839966919214845e-8,0.002137961316631726,2.213800200907653e-5,-3.3527737842564464e-8,0.0021384728126343628,2.1957459800264673e-5,-3.332951347872889e-8,0.002139006670366777,2.191643370582827e-5,-3.3280036206354196e-8,0.0021394959229136664,2.2007302232413204e-5,-3.3371904617377737e-8,0.0021398901271324055,2.2189143712365275e-5,-3.3562023526722955e-8,0.002140166006414651,2.2402515162981413e-5,-3.378718549615929e-8,0.002140329077781706,2.2586184572995143e-5,-3.398186921720036e-8,0.0021404083035632985,2.2691063196128188e-5,-3.409319354061641e-8,0.002140446731689183,2.2688976940126358e-5,-3.409045739764433e-8,0.002140490895281052,2.2575699890952926e-5,-3.396857223236857e-8,0.0021405812375513067,2.2368761539972847e-5,-3.374586429282327e-8,0.002140745261299301,2.21013187905107e-5,-3.345758704823717e-8,0.002140994332456639,2.181402372302832e-5,-3.314720913566537e-8,0.002141324077070165,2.15469856889004e-5,-3.285775427864785e-8,0.002141717448243737,2.1333424920190157e-5,-3.262494699138589e-8,0.0021421491254591573,2.1195757227350775e-5,-3.247299004550511e-8,0.0021425900057506363,2.1143998775028036e-5,-3.2412859574264454e-8,0.002143011062769476,2.117578153748411e-5,-3.2442332125159627e-8,0.0021433864887417924,2.1277166088685482e-5,-3.254683206575627e-8,0.0021436964440635616,2.142377656843826e-5,-3.270056832632809e-8,0.0021439298869587705,2.1582271289495213e-5,-3.2867992137633203e-8,0.0021440878674806683,2.1712763255525305e-5,-3.3006289361086e-8,0.002144187054590783,2.1773439803346106e-5,-3.3070310510598916e-8,0.002144262009093983,2.172867744059509e-5,-3.302135431596869e-8,0.002144363336494184,2.156066898233932e-5,-3.2839788635029706e-8,0.0021445484486645283,2.128161554298987e-5,-3.253826914107641e-8,0.0021448640499980975,2.093968006406232e-5,-3.216820242252745e-8,0.0021453256085358927,2.0610778355504582e-5,-3.181096877059883e-8,0.002145905198301666,2.0374493068902587e-5,-3.155211428654284e-8,0.00214653761622983,2.028404497865664e-5,-3.144915450204835e-8,0.002147143609271417,2.0346789600608755e-5,-3.151058660106004e-8,0.0021476575414585346,2.0525272704293914e-5,-3.1696854344447995e-8,0.002148045581613403,2.0755200980876327e-5,-3.193942834876001e-8,0.0021483090662633483,2.0968393190590092e-5,-3.2165288983192186e-8,0.002148476685362016,2.111059951237463e-5,-3.231601401750927e-8,0.002148592188673189,2.115054857145032e-5,-3.235756967674147e-8,0.0021487026050471423,2.108140192452833e-5,-3.2282037014221544e-8,0.002148849218208448,2.091738286919093e-5,-3.2104180012498956e-8,0.0021490617141141114,2.0687943158359667e-5,-3.185531826563116e-8,0.0021493552248900965,2.043093865495207e-5,-3.1576037272193084e-8,0.0021497299103959574,2.018578295980443e-5,-3.1308781112487576e-8,0.0021501726730506327,1.99873898678633e-5,-3.109124846202539e-8,0.0021506604730088547,1.986152543363258e-5,-3.0951322070678607e-8,0.0021511645783630928,1.9821951349432184e-5,-3.0903980935864254e-8,0.0021516549924586936,1.986945352369192e-5,-3.0950285248140185e-8,0.0021521044365688485,1.9992440843010033e-5,-3.107804747030246e-8,0.0021524916686676407,2.016856874486101e-5,-3.126355090492214e-8,0.0021528042317079527,2.0367018571783807e-5,-3.147390414350625e-8,0.002153040804545645,2.0551375958833374e-5,-3.167000555671362e-8,0.002153213305985311,2.0683403675124328e-5,-3.181050955508008e-8,0.002153348503797179,2.0728467991859314e-5,-3.185767901736995e-8,0.002153487865791758,2.06633838486928e-5,-3.178596101433709e-8,0.002153683336498533,2.0486260716953912e-5,-3.159278162166714e-8,0.0021539866168050876,2.022543685029994e-5,-3.130833435668043e-8,0.0021544317139913717,1.9941401323367558e-5,-3.099772567279643e-8,0.0021550161923323133,1.9714632358069782e-5,-3.074786370682314e-8,0.002155692720036186,1.961840203113644e-5,-3.0638105864892124e-8,0.0021563809762338523,1.9688010875520684e-5,-3.070702518398803e-8,0.0021569972223773057,1.990511081944595e-5,-3.0935392402114285e-8,0.002157485124027573,2.0207307545267066e-5,-3.125638734645144e-8,0.002157830955696959,2.0515501898373752e-5,-3.1584963952577884e-8,0.0021580591073866546,2.0761657983135865e-5,-3.1847730058857165e-8,0.0021582161445200332,2.0904745124936695e-5,-3.200013957830926e-8,0.0021583539825240404,2.0933500471754782e-5,-3.20295538061186e-8,0.0021585179343003775,2.0861021855106574e-5,-3.194956386357729e-8,0.0021587404344839763,2.071653038410741e-5,-3.179127525102121e-8,0.0021590389475030915,2.0537441620192218e-5,-3.159486520542445e-8,0.0021594163239126024,2.0362778417702688e-5,-3.140248197378161e-8,0.002159862527034524,2.02278948399552e-5,-3.12524698579826e-8,0.002160357285130327,2.0160345669093216e-5,-3.117480508185589e-8,0.002160873478204498,2.017687657565958e-5,-3.1187780101922056e-8,0.002161381090914999,2.028164028054539e-5,-3.1296077539601465e-8,0.0021618514304895253,2.0465857833124282e-5,-3.1490443368311834e-8,0.0021622611359319007,2.0709012451658273e-5,-3.174899334089471e-8,0.002162595566211041,2.0981352258249935e-5,-3.203986438715612e-8,0.0021628513653473066,2.1247405686018214e-5,-3.232489338007879e-8,0.0021630380775924086,2.1470340095996585e-5,-3.256419591015205e-8,0.0021631786722644116,2.1617083222566323e-5,-3.272164177108625e-8,0.00216330868415945,2.1664275769114177e-5,-3.277135694153426e-8,0.0021634731281762807,2.1605065487863532e-5,-3.2705257492733154e-8,0.0021637197852005,2.1455812436603205e-5,-3.254053477237097e-8,0.0021640877997709013,2.1259948537739125e-5,-3.232400898296171e-8,0.002164592603377122,2.108438739205041e-5,-3.212829934769005e-8,0.0021652124263154904,2.1004045458292953e-5,-3.2034996857797784e-8,0.002165885927123784,2.107545579977581e-5,-3.21059404679378e-8,0.002166528501769656,2.1310646054636276e-5,-3.235474767326647e-8,0.0021670632549307834,2.1668132745757332e-5,-3.273691349900394e-8,0.0021674499574846086,2.2069275229952522e-5,-3.3167461209084994e-8,0.002167695398646148,2.2430414143251984e-5,-3.355576152777364e-8,0.0021678424617177497,2.2691454458900874e-5,-3.383651203996052e-8,0.002167948850623929,2.2828166985303557e-5,-3.398307877885336e-8,0.0021680682294110717,2.2848871903014454e-5,-3.400396925492826e-8,0.002168239621410091,2.2783477264658934e-5,-3.393109259567893e-8,0.0021684843405062296,2.2671975588932204e-5,-3.380744770218485e-8,0.0021688073255370847,2.2555681481195456e-5,-3.367771500329707e-8,0.0021692001470083005,2.247154601714925e-5,-3.358207900819488e-8,0.0021696442585630864,2.2448607182279223e-5,-3.355228837104354e-8,0.0021701141864079454,2.250565226458912e-5,-3.360901884393857e-8,0.0021705808201399487,2.2649663627314837e-5,-3.376013066261044e-8,0.002171014994842116,2.2875029470842755e-5,-3.399981066861581e-8,0.0021713914000250586,2.3163823595123173e-5,-3.430889349840126e-8,0.002171692521788873,2.348758011808522e-5,-3.4656770876542255e-8,0.0021719120261017694,2.381072758144914e-5,-3.500503838425244e-8,0.002172056961163761,2.4095477309522668e-5,-3.531268029929626e-8,0.002172148267756013,2.430773141450824e-5,-3.5542386815216575e-8,0.0021722192183669113,2.4423369339532766e-5,-3.5667380799741086e-8,0.0021723115797911727,2.443412716691192e-5,-3.567793407850738e-8,0.002172469370856416,2.435222243916228e-5,-3.558662383347489e-8,0.002172730141133899,2.4212483806263987e-5,-3.5430893243344456e-8,0.0021731143123856107,2.406994280862633e-5,-3.527059410845282e-8,0.0021736147553494305,2.399049051461565e-5,-3.517783640369402e-8,0.0021741911382967354,2.4033616638707532e-5,-3.5218066388396594e-8,0.0021747750128882433,2.4230582571380168e-5,-3.542607458320517e-8,0.0021752887669595176,2.4567528571206925e-5,-3.5787372573666643e-8,0.002175673052155437,2.49852415759974e-5,-3.623781078312394e-8,0.002175908854725856,2.5399662837313294e-5,-3.668591393596756e-8,0.0021760215228088064,2.5733306593570758e-5,-3.704716213606398e-8,0.002176065901163682,2.5940343519971294e-5,-3.727134201842648e-8,0.0021761034783204496,2.6014370722419524e-5,-3.735101978943853e-8,0.0021761840080405325,2.598057227504093e-5,-3.731306905929495e-8,0.0021763370696546024,2.5881272618678495e-5,-3.7203079961238056e-8,0.002176571964578955,2.5762734966788867e-5,-3.7071131130532555e-8,0.002176881812643163,2.5666444320064544e-5,-3.6962369095902545e-8,0.002177248530362033,2.562462645803108e-5,-3.6912097310867254e-8,0.0021776471185262275,2.56583990067598e-5,-3.694366624460091e-8,0.0021780490847102727,2.577707907708006e-5,-3.706762059466764e-8,0.002178425470464016,2.5977906113517757e-5,-3.7281338682605485e-8,0.002178749995054507,2.6246122306122735e-5,-3.7569099018844795e-8,0.00217900258816672,2.6555835903572176e-5,-3.7903003824289374e-8,0.0021791731432856958,2.687235363923373e-5,-3.8245472427078433e-8,0.002179264774642755,2.715651610226576e-5,-3.8553882093067663e-8,0.0021792954993946666,2.737100012726711e-5,-3.878734993897014e-8,0.0021792972905228126,2.7487801409019163e-5,-3.891485525836279e-8,0.0021793118845096627,2.7495392292255558e-5,-3.8923106738733907e-8,0.0021793835257311045,2.740366279969572e-5,-3.8822101383632065e-8,0.0021795497062576503,2.7244969924330507e-5,-3.864650695887784e-8,0.0021798315902990814,2.70702521421955e-5,-3.845164962605757e-8,0.0021802262299320907,2.693987847972113e-5,-3.8303651911103566e-8,0.0021807030536763806,2.6909868400577606e-5,-3.826434729027413e-8,0.002181207209043901,2.7015773686396604e-5,-3.837346895969279e-8,0.002181671386070132,2.7258810728352984e-5,-3.8633200520179275e-8,0.0021820347882051537,2.7600628586197033e-5,-3.9002200115334744e-8,0.002182263235355336,2.7971926183414146e-5,-3.940491263576584e-8,0.0021823611556105044,2.829417321789066e-5,-3.9755366604696456e-8,0.0021823687183090976,2.8505597620353956e-5,-3.9985695960752894e-8,0.002182345504518596,2.8579166128070304e-5,-4.006587420492795e-8,0.00218234968005574,2.852535965389795e-5,-4.000679786407413e-8,0.0021824224556048176,2.838187447749541e-5,-3.984911376569704e-8,0.0021825822079256305,2.8198197432587352e-5,-3.964648840870845e-8,0.002182826606343748,2.802230424969246e-5,-3.9451180587015695e-8,0.0021831385394179867,2.7892584515013404e-5,-3.930524420287103e-8,0.002183492363313434,2.7834558372804433e-5,-3.9236882225582924e-8,0.00218385884397354,2.7860496490932013e-5,-3.9259933128383583e-8,0.0021842086588251997,2.7970168372585447e-5,-3.937460019364952e-8,0.0021845150758582356,2.815172900254157e-5,-3.956836422313752e-8,0.0021847565668936496,2.838260505830918e-5,-3.9816914283289737e-8,0.002184919839335821,2.8630898322059892e-5,-4.0085638458821643e-8,0.002185003215576358,2.885819450463714e-5,-4.033263381846127e-8,0.00218501956630861,2.9024619642616696e-5,-4.0514173513386934e-8,0.002184997331671042,2.9096343678574037e-5,-4.0592881414629923e-8,0.0021849779434766005,2.9054458176741742e-5,-4.054747138967016e-8,0.0021850086809995705,2.890265974050007e-5,-4.0381253019101765e-8,0.0021851317555203866,2.867039550492026e-5,-4.012573894978999e-8,0.002185372477190764,2.8408972654841787e-5,-3.983659301605007e-8,0.002185730455124099,2.8180528313815657e-5,-3.958174677758403e-8,0.0021861771693066417,2.804251014407566e-5,-3.942450075684918e-8,0.002186661265337064,2.803206489062113e-5,-3.940634962351665e-8,0.0021871205644257144,2.8154906091556042e-5,-3.953453886956924e-8,0.0021874978725242504,2.8382145494403323e-5,-3.977826745766282e-8,0.002187756423815575,2.865671184733779e-5,-4.0075466582978284e-8,0.0021878902551987,2.8908425992492547e-5,-4.0349239996036213E-08,0.0021879255831569328,2.907366219308399e-5,-4.052949755270081e-8,0.002187912085216684,2.9112986253584563e-5,-4.057244739063578e-8,0.0021879072199879612,2.9020292931549317e-5,-4.0470759660277784E-08,0.0021879598630596396,2.8820635503511565e-5,-4.025130399634947e-8,0.0021880992812219192,2.855917509608077e-5,-3.996313733776403e-8,0.002188332056726784,2.8287020621832985e-5,-3.9662060963515264e-8,0.0021886456060208528,2.804939262502735e-5,-3.9397673106991304e-8,0.0021890148819920466,2.7878715380127772e-5,-3.9205757381181164e-8,0.002189409156221178,2.7792378102702624e-5,-3.9105747978824426e-8,0.0021897972687176166,2.7793455583849522e-5,-3.9101439536603146e-8,0.0021901511374968234,2.7872602070577086e-5,-3.9183008468822456e-8,0.0021904481235000325,2.80099950384596e-5,-3.932910624744156e-8,0.002190673074057688,2.8177065500827853e-5,-3.950871255388833e-8,0.0021908206554662854,2.8338483116444323e-5,-3.9683248872783535e-8,0.002190898034144987,2.8455330491275332e-5,-3.980999342254779e-8,0.002190927155960091,2.8490498477234655e-5,-3.9847964078533655e-8,0.0021909449561215767,2.841676049523602e-5,-3.9766800450551744e-8,0.002190999293289918,2.8226395593368268e-5,-3.955740530076425e-8,0.0021911391604951622,2.7938931175521973e-5,-3.924055987672371e-8,0.0021914004248092763,2.7602074739011113e-5,-3.886808440988153e-8,0.00219179202133541,2.7282286475806473e-5,-3.851264350198292e-8,0.002192289357213238,2.704625873866707e-5,-3.82475557684289e-8,0.0021928392696263337,2.6940105864173445e-5,-3.812399760810237e-8,0.0021933752027235077,2.697500409955819e-5,-3.815512007691709e-8,0.002193836370061701,2.712470614302269e-5,-3.8313049345572726e-8,0.0021941837606845793,2.7334592335765326e-5,-3.8538514178115646e-8,0.0021944084668189573,2.753776194502866e-5,-3.875830475133487e-8,0.002194531286417225,2.7672583796492192e-5,-3.890450991618433e-8,0.002194595052600508,2.769704623340426e-5,-3.893040017878978e-8,0.0021946525033668582,2.759686253141467e-5,-3.881953924029014e-8,0.002194753120305771,2.7386090076476726e-5,-3.858667842959779e-8,0.0021949323250686314,2.7100914061041817e-5,-3.82710888669168e-8,0.0021952055424206626,2.678902702000713e-5,-3.792497063521771e-8,0.0021955679291575467,2.6498107213706706e-5,-3.760078207771899e-8,0.0021959986568907772,2.626660204683497e-5,-3.73410335002723e-8,0.0021964674766541165,2.6118501228737073e-5,-3.7172439057852775e-8,0.0021969413113013753,2.60620374695922e-5,-3.7104408935529385e-8,0.0021973894608135576,2.6091132908844254e-5,-3.7130604436828466e-8,0.00219778705276762,2.6188108161646412e-5,-3.7231911539965425e-8,0.0021981171577645352,2.6326541689641457e-5,-3.7379570709525906e-8,0.0021983722862443157,2.647389410124768e-5,-3.753800898406534e-8,0.0021985558494707763,2.6594192238440678e-5,-3.766770585522208e-8,0.0021986837479933113,2.6651537795907375e-5,-3.772898009889921e-8,0.0021987855132714115,2.6615420265459276e-5,-3.76878288712398e-8,0.0021989034252902504,2.646839864760911e-5,-3.752446513210713e-8,0.002199087291365176,2.621516384114665e-5,-3.7243437839789706e-8,0.002199383129417582,2.588937576288623e-5,-3.688130790905145e-8,0.0021998169911259277,2.555241378810931e-5,-3.650538638656394e-8,0.0022003802001003703,2.5279351320183844e-5,-3.619836871761591e-8,0.0022010254563611044,2.513422877506996e-5,-3.603114654032077e-8,0.002201679461595271,2.5145548720641303e-5,-3.603578324988553e-8,0.0022022676262901954,2.5295397762231912e-5,-3.619337702747384e-8,0.0022027384098715387,2.552770043771887e-5,-3.6442911016991864e-8,0.0022030761947726936,2.5769490088737933e-5,-3.6704451465803936e-8,0.0022032999837505608,2.5953710056367697e-5,-3.690413133727294e-8,0.002203452495899009,2.6035101872089713e-5,-3.699166081129466e-8,0.00220358608653898,2.5996726968420892e-5,-3.6947657521712005e-8,0.0022037500668679825,2.584868135819004e-5,-3.678246540474378e-8,0.0022039815599960576,2.562183741456571e-5,-3.6529498934363496e-8,0.0022043004146107474,2.5359154396673204e-5,-3.6235824598435174e-8,0.0022047079845341367,2.510642092784503e-5,-3.595198121736966e-8,0.002205189271399241,2.490392157422305e-5,-3.5722695471243174e-8,0.0022057175485827437,2.4780291065975067e-5,-3.557995202152093e-8,0.002206260229099632,2.4749273402388118E-05,-3.553929040719807e-8,0.0022067847011294868,2.4809362891213233e-5,-3.559935513770356e-8,0.002207263133432532,2.494571788740346e-5,-3.574402276444476e-8,0.0022076757646234684,2.5133391696059046e-5,-3.594599847110066e-8,0.0022080127950028375,2.534094893318031e-5,-3.61707958606488e-8,0.0022082753512539274,2.5533983406702185e-5,-3.6380543421501094e-8,0.0022084759594946783,2.5678586499651885e-5,-3.653770547250637e-8,0.0022086387115195184,2.5745202620986414e-5,-3.6609273231779453e-8,0.002208798772150077,2.5713550443386234e-5,-3.6572240060008746e-8,0.002208999993716592,2.557900040024047e-5,-3.6420802882875486e-8,0.0022092887458073814,2.5359488384672675e-5,-3.6174216899908184e-8,0.0022097025167608603,2.5099812062111692e-5,-3.588172643050776e-8,0.0022102543881308777,2.4867936743048755e-5,-3.56185625830845e-8,0.0022109195242995543,2.4738476511340537e-5,-3.5467648422950415e-8,0.002211634051687777,2.4765337819048855e-5,-3.5489237515539794e-8,0.002212313150289902,2.495636083716276e-5,-3.5692713187243686e-8,0.0022128823429647753,2.526671790565515e-5,-3.602912278257172e-8,0.0022133046472050132,2.5616981016093155e-5,-3.641102991172894e-8,0.0022135888531115686,2.5924578071327065e-5,-3.6747220225829005e-8,0.0022137783155401383,2.6130440340332528e-5,-3.69721280559337e-8,0.0022139309577410685,2.6210438172246873e-5,-3.705850643683236e-8,0.0022141014474845195,2.6172901848814536e-5,-3.7014821330468624e-8,0.0022143303324376486,2.604895373490618e-5,-3.687478915277662e-8,0.002214639802017609,2.5881451700368056e-5,-3.668537821684993e-8,0.0022150338963010646,2.5715502764954452e-5,-3.649643735626844e-8,0.0022155011447347337,2.5591302194405776e-5,-3.6352737563078843e-8,0.0022160184567097205,2.553907975187675e-5,-3.628822151576024e-8,0.0022165557263009628,2.5575938852458807e-5,-3.63223191891732e-8,0.0022170807551756427,2.5704576800506107e-5,-3.6458407892383054e-8,0.002217564030701961,2.591385422119361e-5,-3.668441906146322e-8,0.0022179828448299827,2.6181049859668053e-5,-3.697537858622144e-8,0.0022183242804138395,2.6475407977684876e-5,-3.729737331333177e-8,0.002218586851652362,2.6762362021212276e-5,-3.7612202106384365e-8,0.002218780907528584,2.7007899392426868e-5,-3.7882116402540654e-8,0.00221892800983572,2.718282261799535e-5,-3.807443917791746e-8,0.0022190594291572868,2.7266897794539164e-5,-3.816614008581418e-8,0.002219213643884262,2.7253074171586324e-5,-3.814862701576736e-8,0.0022194321448706397,2.7151812912431053e-5,-3.8032782192625904e-8,0.0022197524438374,2.699457943246866e-5,-3.785310248538782e-8,0.0022201977516507457,2.6834004944931882e-5,-3.7668058896544666e-8,0.0022207647596439554,2.6736960739406968e-5,-3.755241769514929e-8,0.002221414588087056,2.6767401671111417e-5,-3.757801963905858e-8,0.0022220754445295104,2.696116773143545e-5,-3.778551747050506e-8,0.002222662982074354,2.7304481080951647e-5,-3.81602371398771e-8,0.002223112492580615,2.7732335963690483e-5,-3.8630272100101265e-8,0.0022234048892087036,2.815262001038408e-5,-3.9093316095525206e-8,0.002223570353579146,2.8482812379548647e-5,-3.9457507211628694e-8,0.0022236698422765312,2.8677471002609632e-5,-3.9671972494411865e-8,0.002223768955546225,2.8734606819302868e-5,-3.973390147896533e-8,0.002223918561912486,2.8685068606721128e-5,-3.9676852435000445e-8,0.002224146947177898,2.857614254949019e-5,-3.955275079853739e-8,0.002224460584546953,2.8457539680318737e-5,-3.9416539001133896e-8,0.0022248488878112726,2.8372409677147155e-5,-3.931628151961653e-8,0.0022252897394614136,2.8352697862785916e-5,-3.9287926512737694e-8,0.002225754439448891,2.8417200189247082e-5,-3.9352956850409215e-8,0.0022262119752000306,2.8571064147124517e-5,-3.9517646409515605e-8,0.0022266329015272588,2.8806246946617162e-5,-3.977346217838114e-8,0.002226992971723243,2.9102919767945163e-5,-4.009861614536306e-8,0.002227276408541931,2.9431986686848863e-5,-4.046090776146395e-8,0.002227478443459657,2.975881765135786e-5,-4.082189498635584e-8,0.0022276066367046955,3.00479536480172e-5,-4.114208286135804e-8,0.0022276806541805206,3.0268246647568305e-5,-4.1386550741833944e-8,0.0022277304168021564,3.0397850263698415e-5,-4.153044218187168e-8,0.0022277927064168696,3.0428497299104088e-5,-4.1563769098494404e-8,0.0022279064138012593,3.036858246513481e-5,-4.149502940286735e-8,0.002228106506621653,3.0244655302837534e-5,-4.13531517818982e-8,0.0022284166785792644,3.0100550888706932e-5,-4.1186794221321944e-8,0.0022288411897262855,2.9992625796661267e-5,-4.10591614928939e-8,0.0022293578310589434,2.997937361758266e-5,-4.1036340003927136e-8,0.002229915827113162,3.0105006870106393e-5,-4.116870189588894e-8,0.0022304437011137785,3.0380336855881893e-5,-4.146920822621145e-8,0.0022308696821551816,3.0770008843180174e-5,-4.189889481023213e-8,0.0022311489278408515,3.119747911794132e-5,-4.237238494059883e-8,0.002231282975267909,3.157105128869589e-5,-4.278709882978031e-8,0.0022313182697664352,3.181892335039289e-5,-4.3062523712161575e-8,0.0022313244787628863,3.1913280890993805e-5,-4.316712531818715e-8,0.0022313668866389517,3.187208721013959e-5,-4.312031825412391e-8,0.0022314877691962513,3.174329917730292e-5,-4.297493790279011e-8,0.0022317016189136243,3.1584440533183345e-5,-4.2794660080913634e-8,0.0022320000376087473,3.1447193001066374e-5,-4.263700565313382e-8,0.0022323599775302527,3.1369544649942365e-5,-4.2544629399779314e-8,0.0022327512669868426,3.13736485445689e-5,-4.254281430583861e-8,0.0022331420789577098,3.146660704082846e-5,-4.264014632464142e-8,0.002233502662649728,3.164221547907365e-5,-4.283028278424188e-8,0.0022338081602597494,3.188287847991798e-5,-4.309400116155361e-8,0.0022340411058888376,3.216172283638613e-5,-4.340155202858812e-8,0.002234193788318541,3.244531827001491e-5,-4.371572186288535e-8,0.002234270215537642,3.269748772071455e-5,-4.399608728756532e-8,0.0022342870174345488,3.288434625146084e-5,-4.4204595810092806e-8,0.0022342725300309807,3.298010211189754e-5,-4.431198509478476e-8,0.00223426358719864,3.297265366270278e-5,-4.430402838113176e-8,0.002234300042169446,3.28677210223566e-5,-4.4186255163092324e-8,0.0022344176501358816,3.269023712664952e-5,-4.398572890389884e-8,0.0022346404530500393,3.248215526411121e-5,-4.374887676761402e-8,0.0022349739993351363,3.229642695778004e-5,-4.3534981383312984e-8,0.002235400846601725,3.218729338221004e-5,-4.3405375317758714e-8,0.0022358801294424515,3.2197598996961654e-5,-4.3409074494626946e-8,0.0022363531613351687,3.234518444318427e-5,-4.356719715545998e-8,0.0022367562584270713,3.26124404623423e-5,-4.386088239969612e-8,0.002237039364916164,3.2944799036726895e-5,-4.4229360674700297e-8,0.002237184585255663,3.3263008754100455e-5,-4.458371191536925e-8,0.0022372152097443723,3.348808466964168e-5,-4.4835003790813605e-8,0.002237188268790842,3.356890037152168e-5,-4.492538522979582e-8,0.002237172973766367,3.3498373396684425e-5,-4.4846285550617134e-8,0.002237226446062347,3.331063740330506e-5,-4.463527151098567e-8,0.0022373785866876966,3.306356285861056e-5,-4.435657408777556e-8,0.0022376301801785795,3.281796598936418e-5,-4.407798109343235e-8,0.002237960293002327,3.262266212632057e-5,-4.385422435645071e-8,0.0022383364907900727,3.250798890852662e-5,-4.371970523753345e-8,0.002238723456645966,3.2485676809755455e-5,-4.3688197681211816e-8,0.0022390886143439774,3.255173487689696e-5,-4.3755889161178954e-8,0.002239405282078471,3.2689939993701276e-5,-4.390514695537152e-8,0.002239654500276259,3.2874917872497975e-5,-4.410791058122196e-8,0.002239826466603891,3.3074841894149056e-5,-4.43287154816248e-8,0.0022399219825763365,3.325431872964785e-5,-4.452793608909369e-8,0.00223995372724577,3.337818442270938e-5,-4.466602508507044e-8,0.002239946609945796,3.341665474095889e-5,-4.4709250539583116e-8,0.0022399361149010558,3.335152643078121e-5,-4.463662869840457e-8,0.0022399637177205746,3.318214901741799e-5,-4.4446666383878356e-8,0.0022400692719222156,3.292908438196356e-5,-4.4161604326662625e-8,0.0022402815961347503,3.263324461259011e-5,-4.382667142532589e-8,0.0022406097829435986,3.234928937051243e-5,-4.35029200728048e-8,0.0022410381982317313,3.2133989991873885e-5,-4.325433505758617e-8,0.002241527366860039,3.2032192958380706e-5,-4.31320710589e-8,0.002242021338402319,3.206407169227447e-5,-4.315991919307524e-8,0.002242460373611949,3.22173758634287e-5,-4.3325235858678146e-8,0.0022427962572554097,3.244758975145919e-5,-4.3578759913273076e-8,0.002243006285647738,3.268735329396462e-5,-4.384500203668317e-8,0.002243101254106713,3.2863977904254935e-5,-4.4041959824776854e-8,0.002243123492551911,3.292048609982193e-5,-4.410494856355586e-8,0.0022431341784470964,3.283271918257909e-5,-4.400603585822717e-8,0.002243194132145136,3.261533508896748e-5,-4.376093452019552e-8,0.0022433459529788004,3.2314277942817154e-5,-4.342065606321087e-8,0.0022436045440565053,3.198999227156275e-5,-4.305276261895022e-8,0.002243958133515982,3.169947891807182e-5,-4.2721289735892826e-8,0.002244376640907042,3.148388477407264e-5,-4.2472798095789184e-8,0.0022448221512804886,3.136378685678507e-5,-4.233096289601714e-8,0.0022452575632132565,3.134045113321896e-5,-4.2297823602288997e-8,0.002245652005153063,3.139999666608745e-5,-4.2358322241039085e-8,0.002245983472810847,3.151802159817808e-5,-4.248543069195238e-8,0.0022462398578507008,3.166353197668659e-5,-4.2644554056704593e-8,0.002246419446397792,3.180211929402931e-5,-4.2797108244559135e-8,0.0022465314514837314,3.1898991863196846e-5,-4.290391686790522e-8,0.0022465964763423293,3.192267915682146e-5,-4.292934587877446e-8,0.0022466461542808808,3.185001140863545e-5,-4.2846882077462555e-8,0.0022467207138888905,3.1672240851810194e-5,-4.264604611928958e-8,0.0022468631990779767,3.140089843834509e-5,-4.2339079016408486e-8,0.0022471100388813652,3.1070610463486265e-5,-4.196427300171984e-8,0.002247479746499827,3.073566784992554e-5,-4.158230565870342e-8,0.0022479638331529823,3.045874199951375e-5,-4.1263714808448154e-8,0.002248524763253154,3.02937857422682e-5,-4.1069733388505545e-8,0.002249103611883865,3.0268960024283786e-5,-4.1032988729356464e-8,0.0022496357222364597,3.0376558929030593e-5,-4.114590430823665e-8,0.002250068824548509,3.0574158665270486e-5,-4.1361647414439126e-8,0.0022503772247836114,3.07964029825346e-5,-4.160710741763205e-8,0.002250567802057482,3.097301904580212e-5,-4.1803061544443096e-8,0.002250676749711126,3.1047324392743566e-5,-4.188509138902905e-8,0.0022507586723131802,3.099010340839463e-5,-4.1819420951854353e-8,0.002250871480347393,3.080538471041008e-5,-4.1609680129912226e-8,0.0022510615188335178,3.052699532297764e-5,-4.1293253390966694e-8,0.002251353179262093,3.0207520227351978e-5,-4.092900157619033e-8,0.0022517456031207373,2.990365199999711e-5,-4.058081653528731e-8,0.002252216441744965,2.966277801546249e-5,-4.0302454700107246e-8,0.0022527301904458124,2.9514465763670236e-5,-4.012779775956819e-8,0.0022532475943158755,2.9467955847632948e-5,-4.0067851081194045e-8,0.0022537333307623537,2.9514413442723212e-5,-4.0113146302274113E-08,0.0022541607881451917,2.9631644844628163e-5,-4.023900335211374e-8,0.002254514189838657,2.9789237110179563e-5,-4.041133614434692e-8,0.0022547890266936274,2.9952985275678716e-5,-4.059167064094272e-8,0.0022549917913854377,3.0088440765969818e-5,-4.074114160771088e-8,0.0022551396035145384,3.016407696389352e-5,-4.08240201186456e-8,0.0022552597216511264,3.015481429148342e-5,-4.081164539487939e-8,0.0022553882919875423,3.0046508802163843e-5,-4.0687495180085486e-8,0.002255567099077569,2.9841357504034444e-5,-4.045337540522603e-8,0.0022558369388607233,2.9562838755949134e-5,-4.0135156504026914e-8,0.0022562271875581842,2.9257130726269753e-5,-3.978455631529007e-8,0.0022567436326642507,2.898714903281843e-5,-3.947255364662877e-8,0.0022573598823487835,2.8817209579511943e-5,-3.927213390100102e-8,0.002258018966071855,2.8791605493017066e-5,-3.923404737454537e-8,0.002258648117312685,2.891633036493332e-5,-3.936599702943412e-8,0.0022591820275492096,2.9154153382066135e-5,-3.962682189325287e-8,0.0022595839247476135,2.9436595028559185e-5,-3.993977198480979e-8,0.00225985505008105,2.9686790215993037e-5,-4.021816649643196e-8,0.002260030241699472,2.9842461088519565e-5,-4.039130403089442e-8,0.002260164133587199,2.9870701143892955e-5,-4.042125712911031e-8,0.0022603147060398874,2.9772008334002676e-5,-4.0307640364203134e-8,0.002260529356679789,2.957539212424842e-5,-4.008236218492744e-8,0.0022608360709949985,2.9328088618681445e-5,-3.9798262676794195e-8,0.002261240279369694,2.9083351681059975e-5,-3.951545849385412e-8,0.0022617268003365322,2.888909043567816e-5,-3.9288472509905356e-8,0.0022622655482008036,2.8779388123142624e-5,-3.915647214350556e-8,0.002262819189102602,2.8770098261314698e-5,-3.913805732001187e-8,0.002263350798057785,2.88586129564398e-5,-3.92308125522209e-8,0.0022638299762149723,2.9026875547142857e-5,-3.9414639258724473e-8,0.00226423666135669,2.9246199189130553e-5,-3.9657234352431613e-8,0.0022645626786873415,2.9482478245198007e-5,-3.992005306099529e-8,0.0022648116674165116,2.9700822468235492e-5,-4.016358408751382e-8,0.0022649981596772123,2.9869345096513426e-5,-4.0351602493104255e-8,0.00226514630501003,2.9962411033835785e-5,-4.04547762743576e-8,0.002265288298830657,2.9963862391270176e-5,-4.045428268554886e-8,0.0022654620702153745,2.9870664852001304e-5,-4.034600056798178e-8,0.002265707212446325,2.969691295175194e-5,-4.0145217890832345e-8,0.002266057956294179,2.947691133511338e-5,-3.9890345763315734e-8,0.0022665329039003286,2.926444328548644e-5,-3.964227072360827e-8,0.0022671236887107245,2.9124484378898093e-5,-3.9475022511818455E-08,0.002267788240646869,2.9115420126813518e-5,-3.945552451759843e-8,0.0022684561262601086,2.9265821438624493e-5,-3.9617054061131354e-8,0.0022690490903026677,2.955733641213853e-5,-3.993960157280089e-8,0.002269509515122626,2.992626254599793e-5,-4.035147042985752e-8,0.00226982162214845,3.0286068029203308e-5,-4.0754733553186254e-8,0.0022700138757717004,3.055897303667495e-5,-4.1061025649979134e-8,0.0022701436737226793,3.069989577380529e-5,-4.1218699906638504e-8,0.00227027517647685,3.070387520696665e-5,-4.122131101616223e-8,0.002270461042897145,3.059919619723711e-5,-4.1100011651257346e-8,0.002270732689133939,3.0433729733369717e-5,-4.090835113136894e-8,0.002271098337780852,3.026097227227714e-5,-4.070670005595391e-8,0.002271546105525531,3.012906258930677e-5,-4.0549886052690306e-8,0.002272049606456396,3.007354356655947e-5,-4.0478868217575704e-8,0.0022725744638758933,3.011354728086309e-5,-4.051615436512521e-8,0.0022730847790649704,3.0250954443169037e-5,-4.066458322488583e-8,0.002273548838725809,3.047206367789406e-5,-4.0909059104787467e-8,0.0022739434936463994,3.075113090835044e-5,-4.1220551846418976e-8,0.0022742568636345524,3.105504186902545e-5,-4.156147942044127e-8,0.0022744892839467825,3.134835492335001e-5,-4.189151521878511e-8,0.0022746527416301044,3.159798737144839e-5,-4.217292294439811e-8,0.0022747692873981264,3.177714018497166e-5,-4.237495585906838e-8,0.0022748688113758886,3.186850606857967e-5,-4.247743480535395e-8,0.002274986290774487,3.186699225575003e-5,-4.2473855910760004e-8,0.0022751583117732004,3.178213127539921e-5,-4.237427673206388e-8,0.0022754182619907173,3.1640017291713195e-5,-4.2207768491395545e-8,0.0022757894556965316,3.1483670873694755e-5,-4.202308555544977e-8,0.0022762763149492913,3.1369490725813464e-5,-4.188476186116999e-8,0.002276855832823401,3.135697026894548e-5,-4.186133900931318e-8,0.0022774744421386866,3.1490633861351893e-5,-4.200454099581501e-8,0.0022780569340058936,3.177865036092299e-5,-4.232457983909165e-8,0.0022785298502353986,3.217986098398422e-5,-4.277512950721424e-8,0.002278850878859694,3.261186828087253e-5,-4.326249088421801e-8,0.002279027127460274,3.29810254809563e-5,-4.3679853601427606e-8,0.0022791101135152944,3.3218485070021266e-5,-4.3948435338700015e-8,0.0022791716138773816,3.33017751806445e-5,-4.404203618293163e-8,0.0022792763622203156,3.325354630218967e-5,-4.3985619723857855e-8,0.0022794650184009696,3.312474867222378e-5,-4.3836336864797965e-8,0.0022797502493714416,3.297479872131966e-5,-4.3661248003750406e-8,0.00228012142820996,3.285672340462785e-5,-4.35206528604119e-8,0.0022805525144040995,3.2809069538178984e-5,-4.3458910771532503e-8,0.002281009749824412,3.28530678199272e-5,-4.350102367560977e-8,0.002281457946481573,3.299290573495884e-5,-4.3652647942342574e-8,0.0022818653863613037,3.3217663060474e-5,-4.390203862093646e-8,0.0022822076095379298,3.350430854908523e-5,-4.4223341324998374e-8,0.0022824701581385626,3.38215008984268e-5,-4.458094556850484e-8,0.0022826501909389498,3.413398695711384e-5,-4.493459121134231e-8,0.0022827568168762593,3.44073498830337e-5,-4.524485208989148e-8,0.0022828100447377627,3.4612658901913384e-5,-4.547843105508966e-8,0.0022828384740465075,3.4730475087631895e-5,-4.561266796396316e-8,0.002282876011570533,3.475388096679199e-5,-4.5638964500433376e-8,0.002282957848421652,3.469040464851831e-5,-4.5565062411767125e-8,0.0022831158204580496,3.456271833872463e-5,-4.541606069616092e-8,0.0022833731202049406,3.440786048574832e-5,-4.5233819572801423e-8,0.0022837383081319583,3.427425554837967e-5,-4.507378989735375e-8,0.0022841992424606486,3.42151255976047e-5,-4.4997528462908375e-8,0.0022847190630679586,3.427694413898361e-5,-4.505929978605274e-8,0.0022852381039333777,3.448341082476899e-5,-4.528736898920922e-8,0.002285686017006873,3.4819631970934466e-5,-4.566551541864208e-8,0.0022860045965692596,3.522625967483624e-5,-4.6126130449042295e-8,0.0022861729555042707,3.5613274931110104e-5,-4.65660689031637e-8,0.002286219685653516,3.5892392446296056e-5,-4.688394305335418e-8,0.002286211691889868,3.601177133491025e-5,-4.7019944247694604e-8,0.002286225505956513,3.5972626779050686e-5,-4.697479161031815e-8,0.0022863188543598124,3.58205873724714e-5,-4.6799832485411654e-8,0.00228651668635773,3.562198060753e-5,-4.6570120297171264e-8,0.002286812966928041,3.5440632292562546e-5,-4.635820450409294e-8,0.002287180868527256,3.532389707738892e-5,-4.6218365864022434e-8,0.002287583967878681,3.5298098790532246e-5,-4.618136168410986e-8,0.0022879848284268977,3.536980504236021e-5,-4.6255633734096165e-8,0.0022883504197809537,3.552946613083765e-5,-4.643115703668337e-8,0.002288655274879669,3.575541538610793e-5,-4.668378554344655e-8,0.0022888834463104927,3.60176745468646e-5,-4.697952823998258e-8,0.002289029789277668,3.6281738912671874e-5,-4.727893103740416e-8,0.002289100595889158,3.65126058036671e-5,-4.754178038619249e-8,0.0022891133320047745,3.667916372430841e-5,-4.773217946936401e-8,0.0022890950961498148,3.675871799412574e-5,-4.782371311654076e-8,0.0022890795607725576,3.674100774676719e-5,-4.7804003549630296e-8,0.002289102527511509,3.663093644990813e-5,-4.767785241181172e-8,0.002289196541348638,3.644938070154096e-5,-4.746830614559982e-8,0.0022893851939173337,3.6231636872978196e-5,-4.7215134114218746e-8,0.002289677840039512,3.602331407239086e-5,-4.6970406519053876e-8,0.0022900654708520327,3.58736629553553e-5,-4.679101983320465e-8,0.002290518708418688,3.582634915501503e-5,-4.6728061346799346e-8,0.0022909894789891827,3.590809695929047e-5,-4.681348212371508e-8,0.002291418352774001,3.611712058525191e-5,-4.704638370723802e-8,0.002291748752111823,3.641569025232455e-5,-4.7384109668672996e-8,0.0022919460643483626,3.6733133288591057e-5,-4.774556420547209e-8,0.0022920143328060607,3.6983858880081674e-5,-4.803206329891999e-8,0.002291999814615806,3.7096977477987554e-5,-4.8161604641847836e-8,0.002291975474626928,3.704374634491269e-5,-4.8100515063701843e-8,0.0022920128248449328,3.6846970662485426e-5,-4.787422973248501e-8,0.0022921567275596033,3.656759825553701e-5,-4.7551933742153225e-8,0.0022924155206640656,3.627866505605262e-5,-4.721685937218435e-8,0.0022927669894349093,3.6041857596996885e-5,-4.6939648387720506e-8,0.002293172035520522,3.589533984270876e-5,-4.676448884083824e-8,0.002293587774220062,3.585234950794764e-5,-4.670737294106673e-8,0.00229397625599273,3.5905780732209896e-5,-4.676107434656356e-8,0.0022943087935883965,3.603438248915831e-5,-4.690198432790658e-8,0.0022945674627496593,3.6208248273547327e-5,-4.709625363021303e-8,0.0022947453752612396,3.639309951270794e-5,-4.730469355160464e-8,0.002294846618012875,3.655385217382977e-5,-4.748694572871607e-8,0.0022948859966711527,3.6658142221179055e-5,-4.760561192507473e-8,0.0022948882229804706,3.66802485027254e-5,-4.7630789899419904e-8,0.002294885915277481,3.660536515102313e-5,-4.754496057001509e-8,0.0022949158390162044,3.64335141641052e-5,-4.7347464493291285e-8,0.002295013303258485,3.6181877526743895e-5,-4.705723761896796e-8,0.0022952053707549756,3.5884255428738196e-5,-4.6712359540665154e-8,0.0022955042500871392,3.558678939109289e-5,-4.6365392836542746e-8,0.002295902637857623,3.534001900618766e-5,-4.607449202272132e-8,0.002296372603345501,3.518847407688666e-5,-4.5891531629784525e-8,0.002296868936882388,3.515979486113663e-5,-4.584945571699113e-8,0.002297337100875107,3.525571375908133e-5,-4.595154991513938e-8,0.0022977251112613487,3.54474663309797e-5,-4.6165727461002804e-8,0.002297997511006086,3.567828648084553e-5,-4.642708208073091e-8,0.0022981479038201797,3.587486868504097e-5,-4.665101902295781e-8,0.0022982048890346418,3.59670990491837e-5,-4.6756152857442506e-8,0.0022982264993906746,3.591076706084595e-5,-4.66907281238414e-8,0.00229828244392896,3.570370688981107e-5,-4.645139989864305e-8,0.0022984305793150974,3.538654013029307e-5,-4.6084187811529834e-8,0.002298698613153666,3.502687277549902e-5,-4.5666380520174655e-8,0.0022990791902976694,3.4695334694455384e-5,-4.5279093849930466e-8,0.0022995381727997865,3.4445276278051516e-5,-4.49839970221804e-8,0.002300029218953335,3.430321854904224e-5,-4.4812265883725474e-8,0.0023005071520190556,3.426970567379333e-5,-4.4765358220823394e-8,0.0023009363058259054,3.432593949783263e-5,-4.4822399265362546e-8,0.0023012938617268945,3.444159290053393e-5,-4.494899788620879e-8,0.002301570006953491,3.458126436569647e-5,-4.51046246777301e-8,0.002301766800108603,3.470904311234521e-5,-4.524791553057968e-8,0.002301896888738061,3.479179416047871e-5,-4.534053254240823e-8,0.002301982375857608,3.480208071788327e-5,-4.535057802732492e-8,0.0023020534602801847,3.472142304601621e-5,-4.525634915545079e-8,0.0023021460538406057,3.454404162586172e-5,-4.505063369302154e-8,0.002302297520970304,3.4280415377693827e-5,-4.474483116108385e-8,0.00230254017354546,3.395911142067943e-5,-4.4371164167657605e-8,0.0023028932564570586,3.3624877587848964e-5,-4.398066536436923e-8,0.0023033555964254958,3.333152309155398e-5,-4.3635188638132984e-8,0.0023039020503271127,3.312995217770553e-5,-4.339376844190064e-8,0.002304486385520222,3.305425894193706e-5,-4.329658172175806e-8,0.002305051035348368,3.3110519998397165e-5,-4.335181227808648e-8,0.0023055413708626526,3.3272560571329226e-5,-4.353040435431237e-8,0.0023059202737308734,3.348666573581906e-5,-4.3771124818958763e-8,0.0023061786570983014,3.368428524135492e-5,-4.3994995923487775e-8,0.0023063388048928817,3.379947725797813e-5,-4.412542796611055e-8,0.0023064492323863275,3.378653186463361e-5,-4.410875759920423e-8,0.0023065718780325255,3.363277880294064e-5,-4.392931753536871e-8,0.0023067648430645355,3.336223440573916e-5,-4.361391666217241e-8,0.0023070660644278905,3.302816568314063e-5,-4.322345795297547e-8,0.002307483727852774,3.269679339994018e-5,-4.2834243518091083e-8,0.0023079967124393116,3.242829025455311e-5,-4.2516054578377455e-8,0.002308563857239961,3.2262195589673835e-5,-4.2315205384790976e-8,0.0023091372052619127,3.221149782256434e-5,-4.224750159055635e-8,0.002309673844341424,3.2265073740245427e-5,-4.2300823774791806e-8,0.0023101432068525158,3.239501720334835e-5,-4.244342832539441e-8,0.0023105295861446016,3.256496006872504e-5,-4.2633513685632894e-8,0.0023108314009869526,3.2736917316135974e-5,-4.282717939490637e-8,0.002311059046577513,3.287596311964373e-5,-4.298390962236588e-8,0.0023112325956021447,3.2953249680788354e-5,-4.30701110947523e-8,0.00231137979665109,3.294831861010061e-5,-4.306178209267358e-8,0.0023115340997543143,3.285151044406728e-5,-4.2947275355292e-8,0.0023117319317365243,3.2666777386046935e-5,-4.2730561942988145e-8,0.0023120082445560355,3.241439708027806e-5,-4.243445694518821e-8,0.0023123897136956896,3.213200948149292e-5,-4.210197938273945e-8,0.002312886188388601,3.1871514418046985e-5,-4.179294978549619e-8,0.0023134830361791667,3.168968477884489e-5,-4.157326718028376e-8,0.0023141388246951094,3.163282940214068e-5,-4.149718047268907e-8,0.002314792329840861,3.172005820484998e-5,-4.158778555622238e-8,0.002315378896673669,3.193290371843414e-5,-4.182474929661659e-8,0.0023158505127047306,3.2217740072628357e-5,-4.214680612835947e-8,0.0023161909435828218,3.2501262856054346e-5,-4.2469442360932653e-8,0.002316419671183998,3.271254277366566e-5,-4.27103290681903e-8,0.0023165841921237427,3.2802780436011716e-5,-4.2812247472897776e-8,0.0023167450214273137,3.2756541656388914e-5,-4.275628838705075e-8,0.0023169591271539453,3.259272819167442e-5,-4.256326379538918e-8,0.0023172663812004936,3.2356898186037265e-5,-4.228512778642178e-8,0.0023176817453812227,3.2108186977599e-5,-4.199006993769168e-8,0.002318194185054491,3.1904582986137214e-5,-4.174553762547756e-8,0.00231877176791076,3.1790160014621046e-5,-4.1603324561922454e-8,0.002319371007020906,3.1787119353049104e-5,-4.159008391244041e-8,0.0023199475183516252,3.189400454355314e-5,-4.17049622110272e-8,0.0023204650305293554,3.20894591354611e-5,-4.1923747329153166e-8,0.002320900868517307,3.2339315150879754e-5,-4.220702939293869e-8,0.0023212476092142357,3.260440417190498e-5,-4.2509329097549e-8,0.0023215118356965506,3.284715719192341e-5,-4.278686762213579e-8,0.0023217113982006393,3.3036182323788574e-5,-4.300295310375987e-8,0.002321872364162279,3.314903836216729e-5,-4.313120169100703e-8,0.0023220262092654128,3.3173971066507745e-5,-4.315751282036905e-8,0.002322207158400309,3.311135649858902e-5,-4.3081732272613976e-8,0.0023224491028571363,3.297521373884765e-5,-4.291948491394481e-8,0.002322781228382118,3.279447518776715e-5,-4.270382165655561e-8,0.0023232216822924234,3.261266466520483e-5,-4.248505510679363e-8,0.002323769722566849,3.2483621858754785e-5,-4.2325943183644296e-8,0.002324398904211897,3.2460944922610885e-5,-4.228942774440365e-8,0.002325056179267136,3.258120401470381e-5,-4.241896142727533e-8,0.002325671964702718,3.2846122159074696e-5,-4.271751943685757e-8,0.00232618144268266,3.321386581244003e-5,-4.3137207029593565e-8,0.0023265488268709705,3.36082031220369e-5,-4.3589753742231386e-8,0.0023267814240886583,3.394420957442691e-5,-4.397636855767629e-8,0.0023269254239565483,3.415782391829717e-5,-4.422212158225807e-8,0.002327046906947544,3.422452814123435e-5,-4.429770088385412e-8,0.002327209206277997,3.4160981089080925e-5,-4.422143906155781e-8,0.002327456336525311,3.401357864203633e-5,-4.4046282714445835E-08,0.002327805923589105,3.384194337626255e-5,-4.384093488623098e-8,0.002328250166554385,3.37036441574621e-5,-4.3672328614357636e-8,0.002328761740259225,3.364315089403521e-5,-4.3592791245387643e-8,0.002329301915681379,3.36856352720997e-5,-4.3632602011700155e-8,0.002329829055291661,3.383516729126079e-5,-4.379753708045467e-8,0.0023303062390849644,3.407663050535043e-5,-4.407078165874924e-8,0.0023307070359199853,3.438049828740393e-5,-4.441833484198168e-8,0.0023310187619350036,3.470925636680583e-5,-4.4796515547741785e-8,0.0023312431048083324,3.502410718649536e-5,-4.515990686671555e-8,0.002331394528886721,3.5290797443504604e-5,-4.5468276438613356e-8,0.002331497260081565,3.5483844383961805e-5,-4.569154976787356e-8,0.002331581733856791,3.558904226640621e-5,-4.581270005257149e-8,0.0023316810811048884,3.560465423137779e-5,-4.582909582100883e-8,0.002331827771099224,3.5541816076164474e-5,-4.575300867708182e-8,0.0023320501595354027,3.542447396167401e-5,-4.561169901534009e-8,0.0023323683909373285,3.528871876135906e-5,-4.5446880835164095e-8,0.0023327891822946096,3.51805346933835e-5,-4.531231018055253e-8,0.002333299958278486,3.515015003696038e-5,-4.52672578511267e-8,0.0023338645432176663,3.5241270465413334e-5,-4.5363790266725256e-8,0.002334424562220092,3.5475412457926315e-5,-4.562814505895616e-8,0.0023349112408662287,3.583613212030472e-5,-4.6041947983230845e-8,0.002335268146958933,3.626338247097496e-5,-4.6535418255023436e-8,0.0023354760591965088,3.666773954728629e-5,-4.700402689339779e-8,0.0023355644528050535,3.696270836812873e-5,-4.7346394509497067e-8,0.002335600051392683,3.7098371862978543e-5,-4.75036656435806e-8,0.002335658860810056,3.707695140177438e-5,-4.747763880896117e-8,0.0023357987401432536,3.694435600604198e-5,-4.732093922172631e-8,0.002336045463982361,3.6767616798790464e-5,-4.711093689128459e-8,0.002336393449628172,3.661235323283033e-5,-4.6923808409687194e-8,0.00233681482692482,3.6528212315890726e-5,-4.68177625437056e-8,0.002337270388702322,3.6542959451067806e-5,-4.682607312286444e-8,0.0023377189367930666,3.66625719363429e-5,-4.6956871248297825e-8,0.002338124071548144,3.687450363014641e-5,-4.7196561629315964e-8,0.002338458716826444,3.71523445299233e-5,-4.75149713046986e-8,0.0023387078440758034,3.7461115310449495e-5,-4.787144263559505e-8,0.002338869585723431,3.7762817841687184e-5,-4.822140859107426e-8,0.0023389547817296704,3.802184043837775e-5,-4.852287616148231e-8,0.0023389850485431105,3.820974950563554e-5,-4.87421532200505e-8,0.002338989627065774,3.830895059743735e-5,-4.885815585004515e-8,0.0023390014899789605,3.8314840733578865e-5,-4.8864887051675046e-8,0.002339053227796983,3.823643256374001e-5,-4.8772155817743224e-8,0.0023391730470084114,3.809565596331883e-5,-4.860485990028719e-8,0.002339381007965399,3.7925524692509784e-5,-4.840106376674009e-8,0.0023396854228536312,3.776719520424567e-5,-4.82088209371393e-8,0.0023400793116841023,3.76654727255943e-5,-4.808107898018889e-8,0.002340537481346002,3.766178500501879e-5,-4.8067398459253976e-8,0.0023410160318337752,3.778395059438169e-5,-4.820166978989883e-8,0.0023414571514578423,3.8033753723512084e-5,-4.8487112668261064e-8,0.002341802014567862,3.837655741982126e-5,-4.888372230559299e-8,0.0023420114228051465,3.874102641968516e-5,-4.930783648964436e-8,0.0023420863661792065,3.9036695298684036e-5,-4.965293287954776e-8,0.0023420745217566197,3.918717458210972e-5,-4.982885057806455e-8,0.0023420538209714603,3.91622722916344e-5,-4.9799546790811774e-8,0.0023421004046062298,3.8988852688015025e-5,-4.959573407663678e-8,0.0023422602630217295,3.8734768578304047e-5,-4.9296049457022376e-8,0.0023425391360975905,3.847893082192605e-5,-4.899224673303789e-8,0.0023429102765989336,3.828568044273994e-5,-4.8759531463412606e-8,0.0023433299940436355,3.819251167163617e-5,-4.8642341136861975e-8,0.0023437518655280796,3.8209551159922836e-5,-4.865357708177263e-8,0.0023441359775748295,3.8325147109487965e-5,-4.87807783260245e-8,0.002344453495623456,3.8512988018584136e-5,-4.8994075741131246e-8,0.002344688236531956,3.873852777500904e-5,-4.9253489797137967e-8,0.0023448367420634006,3.896429832747165e-5,-4.951513690495988e-8,0.002344907563344286,3.915445172418351e-5,-4.973668851539436e-8,0.002344919846223446,3.927885131661452e-5,-4.9882338277690744e-8,0.0023449010717055798,3.9316757036171124e-5,-4.992722780668246e-8,0.0023448838074805536,3.925979958184939e-5,-4.986094461349622e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json deleted file mode 100644 index f46c700..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_18.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":18000,"numberOfSamples":1000,"samples":[0.002344901558802442,3.911368303105064e-5,-4.968948981883951e-8,0.002344984132234963,3.8898163040661456e-5,-4.9435280092255396e-8,0.002345153076453194,3.8645137911801235e-5,-4.913505665071581e-8,0.0023454177649364274,3.8394882701718704e-5,-4.883571430956027e-8,0.0023457726182683734,3.8190636084535106e-5,-4.858818570335279e-8,0.0023461958479369647,3.8071833815956895e-5,-4.8439580759263195E-08,0.0023466502566154754,3.806617270836784e-5,-4.8423700396250246e-8,0.0023470871667342188,3.818099295284342e-5,-4.855052067391149e-8,0.0023474547964515697,3.8395736841710905e-5,-4.8796864492445077e-8,0.002347711548848421,3.865908630266998e-5,-4.9102715263344044e-8,0.0023478420825502667,3.889571950044163e-5,-4.937914952780937e-8,0.00234786961391877,3.902607152063935e-5,-4.9531851099022974e-8,0.0023478548636246925,3.899526350333567e-5,-4.949545923878963e-8,0.002347876570857601,3.8797420616696476e-5,-4.926230021920203e-8,0.0023480009856264934,3.8479554435582394e-5,-4.888691218568922e-8,0.002348257394842648,3.81212678497871e-5,-4.8462214576854004e-8,0.0023486326479069406,3.7803093228172886e-5,-4.8082513592352674e-8,0.0023490835964367573,3.75814623825538e-5,-4.781433129307214e-8,0.002349556312825578,3.747939916176964e-5,-4.768549705089819e-8,0.002350001794120482,3.7490379203984336e-5,-4.768944037993623e-8,0.002350384381521822,3.758800212452211e-5,-4.779618621991062e-8,0.0023506841057128985,3.773572437125139e-5,-4.796348785816809e-8,0.0023508956980960788,3.7894232799687954e-5,-4.814536983155262e-8,0.00235102648099269,3.802641740658273e-5,-4.829803528414698e-8,0.002351094173287532,3.810084978765315e-5,-4.838411531070628e-8,0.0023511246964647747,3.8094608924835005e-5,-4.837614007717066e-8,0.0023511496348331447,3.799585924542727e-5,-4.825963731338258e-8,0.0023512029179003826,3.780605403700456e-5,-4.803571540037979e-8,0.002351316493203054,3.754110540847055e-5,-4.772242618165293e-8,0.002351515254331023,3.723065606146325e-5,-4.7353971759481864e-8,0.0023518120205759476,3.6914840723378074e-5,-4.697706960436158e-8,0.0023522036900594134,3.663842066327486e-5,-4.664428486396447e-8,0.0023526697415857454,3.6442835626573675e-5,-4.6404850464569947E-08,0.0023531739492806607,3.635743472275251e-5,-4.629433098034591e-8,0.0023536695969230293,3.639153741844735e-5,-4.632502065598751e-8,0.002354107963028887,3.65290387843179e-5,-4.64791633358682e-8,0.0023544493334192655,3.672744771866113e-5,-4.670739713326941e-8,0.0023546748244885193,3.692340046714689e-5,-4.693502893752279e-8,0.0023547957604870243,3.704596407123413e-5,-4.707779081016492e-8,0.002354855915443392,3.703656572046711e-5,-4.70656375977696e-8,0.0023549223160394474,3.68699978500431e-5,-4.6867843166706427e-8,0.002355064610704272,3.656683381659626e-5,-4.65078344897485e-8,0.002355330456332751,3.6188645949168455e-5,-4.605762360942627e-8,0.0023557290800031,3.581614088997792e-5,-4.561209830788785e-8,0.0023562313149006323,3.552104851024793e-5,-4.525598622392911e-8,0.002356784170343763,3.534573263514571e-5,-4.503985226093692e-8,0.00235733028458666,3.529761527789713e-5,-4.49733843052568e-8,0.002357823000083982,3.535587514723036e-5,-4.503300722505471e-8,0.0023582334607192713,3.548324139112816e-5,-4.517550230472812e-8,0.0023585511399880337,3.5636946080439145e-5,-4.535076312918837e-8,0.002358780962041987,3.577633956909642e-5,-4.551078335076926e-8,0.0023589395842511522,3.5867314155800855e-5,-4.561499749370089e-8,0.002359052080351249,3.588475773629073e-5,-4.563332272362631e-8,0.002359149147828655,3.58142084645814e-5,-4.554820350082022e-8,0.0023592643626533377,3.565335730415486e-5,-4.5356402142557453E-08,0.002359430841246486,3.541339537933329e-5,-4.507057121932486e-8,0.0023596768567981123,3.511952535451973e-5,-4.471987460114685e-8,0.0023600205188522927,3.480948168500788e-5,-4.4348345490610194e-8,0.0023604644698905536,3.452896471445555e-5,-4.400967986329848e-8,0.002360992350010294,3.432364769813786e-5,-4.375798612579386e-8,0.002361569042366369,3.422878850205881e-5,-4.363559641492016e-8,0.0023621460051594665,3.4259012492440044e-5,-4.3660883375380844e-8,0.0023626713616961515,3.440164922381125e-5,-4.3820080092443e-8,0.002363102567048767,3.4616447316981465e-5,-4.4066547053651594e-8,0.002363418276529288,3.484277697645849e-5,-4.432896661511161e-8,0.002363625904080295,3.501331834422755e-5,-4.452741922922826e-8,0.002363762140673494,3.50713100177352e-5,-4.459391491625094e-8,0.0023638851680286292,3.498694287747205e-5,-4.449207573009896e-8,0.0023640594734086117,3.4767688893707976e-5,-4.422967279774819e-8,0.002364337052724743,3.44579776897352e-5,-4.385849503168624e-8,0.0023647414089119547,3.412668761857231e-5,-4.345970698104098e-8,0.002365260922020612,3.3846152104623893e-5,-4.3119075143364176e-8,0.0023658544426327192,3.367093165302294e-5,-4.290180278936738e-8,0.0023664660490979486,3.362478090509265e-5,-4.2836928949552116e-8,0.002367041894211088,3.3699477499923e-5,-4.29156715149733e-8,0.0023675425813141815,3.3863070665591675e-5,-4.3100929149056666e-8,0.002367948361133545,3.407186155979982e-5,-4.334131276515742e-8,0.0023682583104001854,3.4281125480317074e-5,-4.358383945165417e-8,0.002368486347050624,3.4452289918945094e-5,-4.378254145392837e-8,0.002368656569458454,3.455667745010834e-5,-4.3903037676489125e-8,0.002368799213631667,3.457704329979657e-5,-4.39244496666408e-8,0.0023689474323752143,3.450818698611703e-5,-4.384015205758009e-8,0.0023691344170632556,3.4357416482385305e-5,-4.3658308045106786e-8,0.002369390127550806,3.4144946605107745e-5,-4.340234799568976e-8,0.002369737050180081,3.390358038895181e-5,-4.311066755298774e-8,0.0023701849761484078,3.367640314542406e-5,-4.283404275674573e-8,0.002370725808074802,3.351105695568608e-5,-4.262900855450118e-8,0.0023713306372070224,3.344998149691437e-5,-4.254638292238252e-8,0.0023719519724518553,3.351806525291478e-5,-4.261657041710548e-8,0.0023725329401571575,3.371175366291013e-5,-4.283642668257849e-8,0.0023730222295828053,3.3995002702351264e-5,-4.316414308379054e-8,0.002373389973065274,3.430578520129685e-5,-4.3526671192005085e-8,0.0023736381505010734,3.4572328983584834e-5,-4.38388242013889e-8,0.0023738010098588143,3.473355012811767e-5,-4.402752760022938e-8,0.00237393531167498,3.4756315512409036e-5,-4.40524591922618e-8,0.0023741041518875864,3.4643979531241987e-5,-4.391644020525929e-8,0.0023743597715574142,3.443428581685144e-5,-4.366325823519776e-8,0.002374730275263065,3.418808569592938e-5,-4.336456918047751e-8,0.0023752135991477064,3.397259983293269e-5,-4.3100208376556956e-8,0.002375779941817866,3.384415723124978e-5,-4.293768908589405e-8,0.0023763813960745914,3.383531261076801e-5,-4.2916694132470866e-8,0.0023769653178674142,3.394966546843266e-5,-4.304258701004152e-8,0.0023774870203995034,3.416488144273135e-5,-4.3289677344681276e-8,0.002377918235263097,3.444154087954113e-5,-4.3611544323386645e-8,0.0023782499725694506,3.473394751413563e-5,-4.3953871457543554e-8,0.002378490676997382,3.499948400810439e-5,-4.4265690042450136e-8,0.002378661785361829,3.520478219905836e-5,-4.45068771402646e-8,0.0023787927125148967,3.5328684667322306e-5,-4.465179236135274e-8,0.0023789164661922424,3.5362982250262976e-5,-4.4690190041228925e-8,0.002379066168330197,3.531210837114164e-5,-4.462683919511151e-8,0.0023792721073279486,3.519257964256899e-5,-4.448085699607398e-8,0.0023795586569317585,3.50323249823028e-5,-4.4284979324380445e-8,0.0023799404698155602,3.486935159153574e-5,-4.408411931944888e-8,0.00238041786411957,3.4748539855140206e-5,-4.39317205628605e-8,0.0023809723866902452,3.471506365948844e-5,-4.38820214882267e-8,0.0023815649852208134,3.48036933953732e-5,-4.397726798401748e-8,0.0023821401857936045,3.502563195655052e-5,-4.423182507960411e-8,0.0023826385643343764,3.535804096673262e-5,-4.461940477123716e-8,0.002383015549616911,3.574351081297848e-5,-4.507218244911266e-8,0.0023832590121007622,3.610394768843331e-5,-4.549722500288198e-8,0.0023833960729126107,3.6365403192313095e-5,-4.5806082879119395e-8,0.0023834844707587666,3.6482794911242564e-5,-4.594430660481812e-8,0.0023835926131679144,3.6453070353420245e-5,-4.5907232417809996e-8,0.0023837780068744117,3.6312527567923084e-5,-4.573698815443366e-8,0.002384072504190872,3.612228458903607e-5,-4.550549834835012e-8,0.002384477540262076,3.594951747525463e-5,-4.529245938741677e-8,0.0023849679834993427,3.5850894327466484e-5,-4.516576690664186e-8,0.0023855013057676516,3.586164050491832e-5,-4.5168379713013465e-8,0.0023860287687607305,3.599113018920311e-5,-4.5312724744731254e-8,0.002386506003294634,3.6224400739596276e-5,-4.558208417162952e-8,0.0023869010817420566,3.65281921996621e-5,-4.5937482125035984e-8,0.0023871989250919125,3.685955147899608e-5,-4.632784241705567e-8,0.002387401820865755,3.7174763898084735e-5,-4.6700739768763154e-8,0.002387526785819297,3.7436733765039484e-5,-4.701140163670798e-8,0.0023876010849905364,3.761979915266924e-5,-4.7228628272774645e-8,0.00238765727041805,3.771186667545958e-5,-4.733742080218521e-8,0.002387728725155376,3.7714449644070145e-5,-4.7339022820513065e-8,0.0023878460686218663,3.764152424039279e-5,-4.724953688088123e-8,0.002388034216505095,3.751792399775393e-5,-4.709805432518741e-8,0.0023883096269505005,3.7377464417580596e-5,-4.692455759226862e-8,0.002388677274146209,3.726041803036959e-5,-4.677709598428318e-8,0.0023891272588487315,3.720938268477899e-5,-4.6706986835451093e-8,0.0023896319399229,3.7262272101778856e-5,-4.6760418636059854e-8,0.0023901458647094826,3.7441849520893325e-5,-4.696572132812101e-8,0.002390611746871633,3.774354152197786e-5,-4.731844757029362e-8,0.0023909747687158945,3.81269601588696e-5,-4.777091840959034e-8,0.002391202906290385,3.8519192870702565e-5,-4.823603735908806e-8,0.0023913040660786186,3.883476948556154e-5,-4.8611270833999345e-8,0.002391328128732739,3.9006667440986484e-5,-4.881589018117696e-8,0.00239134943562406,3.90124026913742e-5,-4.882222941094568e-8,0.002391438487576229,3.8880411452464615e-5,-4.866331475848319e-8,0.0023916383708005662,3.867507853522781e-5,-4.841510309828039e-8,0.00239195590432241,3.847153998643774e-5,-4.816669872463936e-8,0.0023923668018147257,3.833341819751815e-5,-4.799408876442468e-8,0.002392828007801345,3.830015839190798e-5,-4.794511807386538e-8,0.0023932907590552147,3.8383856123547755e-5,-4.8035481865629606e-8,0.00239371096036409,3.857245714578611e-5,-4.82521178047072e-8,0.0023940559931876475,3.883616405890264e-5,-4.856042818085454e-8,0.0023943082930363074,3.9134985874419545e-5,-4.891304887908877e-8,0.0023944662220829185,3.9426309839536574e-5,-4.925889576057055e-8,0.0023945426540706474,3.967167832740828e-5,-4.955145041930234e-8,0.0023945617795173573,3.984206233309221e-5,-4.975530429415886e-8,0.002394554803373748,3.992121054124771e-5,-4.985033218746083e-8,0.00239455526447015,3.990695202747839e-5,-4.983330111917577e-8,0.002394594661569528,3.9810623353083994e-5,-4.971716322616409e-8,0.0023946988252229935,3.965513390937551e-5,-4.952874150407233e-8,0.0023948850777624304,3.9472259325648355e-5,-4.9305586614794425e-8,0.00239515997526318,3.9299439114975593e-5,-4.909233045733194e-8,0.0023955174021503037,3.9175945382072434e-5,-4.893628682300761e-8,0.002395937007932476,3.9137890421156826e-5,-4.8881533371822775e-8,0.002396383695909191,3.921131979781866e-5,-4.896047917113908e-8,0.0023968099593563576,3.9403258047878505e-5,-4.918277327372618e-8,0.002397163497613983,3.969252739918278e-5,-4.952387416863947e-8,0.0023974015854493413,4.002518309701328e-5,-4.99193026544001e-8,0.002397509675261247,4.0321678158350774e-5,-5.027326909845036e-8,0.0023975151824612907,4.049998955523513e-5,-5.048669925554299e-8,0.0023974844671535013,4.050819106081807e-5,-5.049657166197553e-8,0.002397499090668801,4.034853438152713e-5,-5.0304833087084466e-8,0.0023976229322382613,4.007667775600651e-5,-4.997738881179162e-8,0.002397879519985696,3.977656534145411e-5,-4.96140773901125E-08,0.0023982502957491016,3.9527801939768744e-5,-4.93098968993077e-8,0.002398689129527083,3.938302665345923e-5,-4.912820157919039e-8,0.002399141121851689,3.936112368628708e-5,-4.9092584839070415e-8,0.002399557122870482,3.945190021821551e-5,-4.919217196871091e-8,0.002399901681190261,3.9625470595205126e-5,-4.939240127952472e-8,0.0024001557140803276,3.9841782493496445e-5,-4.9646053324931454e-8,0.00240031603823306,4.0058414074826275e-5,-4.990243651972935e-8,0.0024003933848322214,4.02365269468108e-5,-5.0114610330648764e-8,0.0024004095942288745,4.034539638022784e-5,-5.0245052214989265e-8,0.0024003941453741816,4.0365693589607254e-5,-5.0269831914895396e-8,0.0024003801497172756,4.0291449589680024e-5,-5.018110199371788e-8,0.0024004000531943383,4.013054961443052e-5,-4.9987707246810776e-8,0.0024004814327914467,3.990360304898532e-5,-4.9713797552627094e-8,0.0024006433784475078,3.96412645683471e-5,-4.9395635374628664e-8,0.002400893829350257,3.938038444905259e-5,-4.907710595026679e-8,0.0024012280072063545,3.9159384872200925e-5,-4.88043653842751e-8,0.002401627983789423,3.901309599496099e-5,-4.861979177381442e-8,0.0024020634684160267,3.896712290496793e-5,-4.8555194568685595e-8,0.0024024942344411503,3.903172416614497e-5,-4.862420076639316e-8,0.0024028751869229125,3.919562945854613e-5,-4.881439962151439e-8,0.0024031652429550516,3.942160059336088e-5,-4.908159561584208e-8,0.0024033401183291706,3.964740296327271e-5,-4.9350792145343485e-8,0.002403406122558092,3.9796826052265784e-5,-4.952959530944614e-8,0.0024034075771528214,3.9802695108078196e-5,-4.953626629721684e-8,0.002403418663533099,3.963531471377749e-5,-4.933424264248788e-8,0.002403517483513351,3.9320414167136537e-5,-4.895377104664041e-8,0.00240375400559779,3.893213949475224e-5,-4.848339885001966e-8,0.0024041310350306584,3.856275056172833e-5,-4.803360539427687e-8,0.002404608522803643,3.8287467657906244e-5,-4.7694797328705657e-8,0.002405124618903588,3.814364277978108e-5,-4.7512463896821273e-8,0.002405618526611032,3.812961405164927e-5,-4.748570334517685e-8,0.0024060450436589023,3.821594093326314e-5,-4.7580367143404314e-8,0.002406379515424713,3.8359386346411104e-5,-4.774544974096198e-8,0.0024066165603803674,3.851416440298249e-5,-4.7926337409967924e-8,0.002406766193043988,3.863916072047892e-5,-4.8073452764022304e-8,0.0024068496190933135,3.870200493814187e-5,-4.814731567974312e-8,0.0024068954751543747,3.8681384728337856e-5,-4.812157280049673e-8,0.0024069363302526986,3.8568469741027326e-5,-4.7984907944708237e-8,0.002407005092363638,3.8367620010703626e-5,-4.774197343294295e-8,0.0024071311642991904,3.8096143001373596e-5,-4.741307791637707e-8,0.00240733648448139,3.7782662926820594e-5,-4.703219316231057e-8,0.0024076319591230843,3.746376601902139e-5,-4.664296180742872e-8,0.0024080150100535243,3.717901842199488e-5,-4.629284851707181e-8,0.0024084688627471237,3.6964873105139e-5,-4.6025986316963574e-8,0.002408963950387803,3.684822663195842e-5,-4.587550926484438e-8,0.002409461535231225,3.6840528070730786e-5,-4.585634918576009e-8,0.0024099194289861434,3.6933325176103526e-5,-4.595954827428758e-8,0.002410299639091284,3.709615129870326e-5,-4.6149286023116704e-8,0.0024105775736920194,3.727809719448076e-5,-4.636443290545415e-8,0.0024107515290991625,3.7414947503234764e-5,-4.652707276927955e-8,0.0024108494422053167,3.744332346904537e-5,-4.6559778833502254e-8,0.0024109280582808607,3.732068196771385e-5,-4.641012552830863e-8,0.0024110599588631028,3.704486401008396e-5,-4.6074593882075726e-8,0.0024113092457543352,3.666207745630117e-5,-4.560832165779338e-8,0.0024117058579894443,3.625440453889971e-5,-4.511002792620606e-8,0.00241223320394758,3.590984658345839e-5,-4.468591059086578e-8,0.0024128367433007784,3.569068786073452e-5,-4.4411566261216975e-8,0.002413447167854588,3.561679042361314e-5,-4.431182379727306e-8,0.002414003943390364,3.566857531655897e-5,-4.4364131508880796e-8,0.002414468917828636,3.5802128924618506e-5,-4.45164528407243e-8,0.0024148287689588913,3.596582802687616e-5,-4.4707042649597976e-8,0.0024150906323866994,3.6112294226174406e-5,-4.487876186163635e-8,0.0024152756199526553,3.620466985756144e-5,-4.4986732147043753e-8,0.002415412983422486,3.621886433437632e-5,-4.5001246595991545e-8,0.002415535705571361,3.614384708305006e-5,-4.490832914512481e-8,0.0024156771163272757,3.59813440871689e-5,-4.470949129805716e-8,0.0024158678193869285,3.5745351613970705e-5,-4.442116416614326e-8,0.002416132416351302,3.546120330008051e-5,-4.4073537242749924e-8,0.0024164859220694446,3.516352548830468e-5,-4.370808294460031e-8,0.00241693034169506,3.4892359785693274e-5,-4.337295078484064e-8,0.0024174524408001833,3.468719086143528e-5,-4.3115900098566585e-8,0.002418023930833043,3.457944258321774e-5,-4.2975364635792224e-8,0.002418604957254082,3.4584872568489474e-5,-4.297126534219297e-8,0.002419150952416655,3.469789771516463e-5,-4.30979643194712e-8,0.0024196218300455495,3.48898251884466e-5,-4.3321783064122653e-8,0.0024199916518604678,3.51121471359681e-5,-4.3584618304832864e-8,0.002420256595170644,3.5304987746849386e-5,-4.381393076419317e-8,0.002420439070447764,3.54098460734516e-5,-4.393818240200917e-8,0.002420585972638163,3.5384692412318615e-5,-4.39053621156832e-8,0.0024207596255476035,3.521796937688811e-5,-4.3700303187940916e-8,0.00242102169533141,3.493649672842064e-5,-4.335458114598203e-8,0.0024214136673983418,3.460203389622349e-5,-4.294254391313394e-8,0.0024219412696859064,3.4294397281599166e-5,-4.2560928350924536e-8,0.002422570997871016,3.40859042454751e-5,-4.2297873198728576e-8,0.002423241774708797,3.401825188013031e-5,-4.220478688725671e-8,0.002423886226246646,3.4092534703597756e-5,-4.2284029344064495e-8,0.002424450990286084,3.4275193790697986e-5,-4.2495842308161056e-8,0.002424907897269756,3.4513860089160096e-5,-4.277731373829174e-8,0.002425254646420478,3.475404717614502e-5,-4.306250514379759e-8,0.0024255087764721997,3.495073098604035e-5,-4.329653600382793e-8,0.0024256997145779124,3.5073628211510956e-5,-4.344214009667556e-8,0.0024258619447215263,3.510795400575972e-5,-4.3480765687463235e-8,0.002426030203565686,3.505305808974759e-5,-4.341105272837135e-8,0.0024262362674914877,3.4920608081784176e-5,-4.3246676601309794e-8,0.0024265064422872465,3.473295174654087e-5,-4.3014350394663596e-8,0.0024268589868617334,3.4521461493677566e-5,-4.275180769052857e-8,0.002427301138503399,3.432410975088323e-5,-4.250490759677728e-8,0.0024278260913050916,3.418129571204661e-5,-4.2322676945393295e-8,0.002428411097108386,3.4129280643721544e-5,-4.2249456747169526e-8,0.002429018449007624,3.4191654643649516e-5,-4.231457750259257e-8,0.002429600921945329,3.4370848029145066e-5,-4.2521942446609057e-8,0.002430111852543173,3.464306742421111e-5,-4.284362752322127e-8,0.0024305177078212167,3.4960014332554184e-5,-4.322166147588011e-8,0.0024308089963019476,3.525864256604065e-5,-4.3579634420191055e-8,0.0024310052103568625,3.54768490791095e-5,-4.3841674275576033e-8,0.0024311514832499894,3.5570331945046896e-5,-4.3953026184890535e-8,0.0024313076209347257,3.552531869349453e-5,-4.389576556823521e-8,0.0024315325810961527,3.5363327353876604e-5,-4.369491031447773e-8,0.0024318686265469066,3.513647254223246e-5,-4.341303915546696e-8,0.0024323294873825944,3.491423748049786e-5,-4.3134445579347336e-8,0.002432896167264619,3.476495141289254e-5,-4.294268271529085e-8,0.0024335222309093078,3.4737272570903575e-5,-4.2897907650809233e-8,0.0024341473034816276,3.484777220801906e-5,-4.3021473228785095e-8,0.0024347141143896403,3.5078911481254485e-5,-4.3293103813853885e-8,0.0024351828565165653,3.5387420696509406e-5,-4.3660807647483854e-8,0.0024355382696882246,3.571869639847352e-5,-4.4058284519528546e-8,0.0024357886769330174,3.602113490945862e-5,-4.442243365076725e-8,0.0024359595899447976,3.6255981177570735e-5,-4.470551282002724e-8,0.002436085616257832,3.64014787157889e-5,-4.4880378715262854e-8,0.002436203431207954,3.645261201880796e-5,-4.49403083766768e-8,0.002436346881699283,3.641860110716656e-5,-4.489600455109322e-8,0.0024365439720128446,3.631989439005647e-5,-4.477193408814986e-8,0.002436814886263786,3.618547757967348e-5,-4.460305079373914e-8,0.0024371701965660787,3.605043991849035e-5,-4.443187709405474e-8,0.0024376087810835056,3.5953118153448417e-5,-4.430512313890507e-8,0.002438115638816738,3.593080766479197e-5,-4.42685612060324e-8,0.0024386606910261066,3.601319060175138e-5,-4.43590417894124e-8,0.0024392005329820178,3.621366124796751e-5,-4.459380937231256e-8,0.0024396852406738875,3.652073535771226e-5,-4.495979153559817e-8,0.002440070792536112,3.689393707336404e-5,-4.540830813754903e-8,0.0024403341938348043,3.7269028978704966e-5,-4.586125501539923e-8,0.0024404847869948067,3.757420212930339e-5,-4.6230801286461525e-8,0.0024405649339235085,3.775253295873212e-5,-4.6446847061845124e-8,0.0024406379971211724,3.778108573313487e-5,-4.6480442904616754e-8,0.0024407684360130493,3.7678040163525975e-5,-4.635265130274541e-8,0.002441002576816896,3.749564568269083e-5,-4.6126207922268527e-8,0.0024413569455008703,3.730344562480743e-5,-4.58853778897302e-8,0.0024418164775716804,3.716885726843634e-5,-4.571251766869334e-8,0.002442341086211704,3.7141004685513786e-5,-4.566838003723965e-8,0.002442877339190302,3.72411338432493e-5,-4.5780171769525656e-8,0.002443371731515466,3.746064251142103e-5,-4.603872319654958e-8,0.002443782406429579,3.7766052234272806e-5,-4.640413953378797e-8,0.002444086872764397,3.810893879139721e-5,-4.681768347059421e-8,0.002444284388309687,3.843785498667255e-5,-4.721633349478445e-8,0.002444393232414692,3.8709012326829734e-5,-4.7546011694557105e-8,0.002444444549161754,3.889334328329184e-5,-4.7770454539860257e-8,0.002444475074792687,3.8979187827749855e-5,-4.787468720267451e-8,0.0024445206944451194,3.8971331473534686e-5,-4.7863936944109584e-8,0.0024446118314487707,3.8887888173957045e-5,-4.775982946018779e-8,0.0024447706911564257,3.8756507830295623e-5,-4.7595742185117445e-8,0.002445009754862674,3.861079858955392e-5,-4.741246632391835e-8,0.002445330792627307,3.848709249206566e-5,-4.7254353116952106e-8,0.0024457239072774276,3.84210898084392e-5,-4.7165331531864033e-8,0.002446166646694304,3.844355610942536e-5,-4.71836986496915e-8,0.002446624062616858,3.857428817952799e-5,-4.733464480752854e-8,0.0024470514934107203,3.88144481598043e-5,-4.762062321108293e-8,0.002447402125327943,3.913928762815128e-5,-4.801212199106996e-8,0.0024476400881559847,3.9495739935443694e-5,-4.8444475535150416e-8,0.0024477561339314394,3.981049166716775e-5,-4.8827712071902615e-8,0.002447778077693695,4.001077266348328e-5,-4.9072160123498955e-8,0.0024477670483197492,4.005148747549024e-5,-4.9121840338880554e-8,0.0024477974812433497,3.993465087268592e-5,-4.897832831402965e-8,0.002447929926440992,3.9709268450711776e-5,-4.870064967828901e-8,0.0024481909223161946,3.9451954414470326e-5,-4.838174394154787e-8,0.0024485684783898502,3.923993501418732e-5,-4.811575988446022e-8,0.0024490213965491316,3.9129377699806304e-5,-4.797180052202577e-8,0.0024494948154261892,3.91451644029732e-5,-4.798138431887394e-8,0.002449935069477873,3.928119976470324e-5,-4.8138482471436045e-8,0.002450300397506881,3.9507323269912974e-5,-4.840749035993413e-8,0.0024505668157711494,3.9779044908857327e-5,-4.8734735279841313E-08,0.0024507297637555462,4.004759573096723e-5,-4.906061161920809e-8,0.002450802394303154,4.02688488745371e-5,-4.9330599704006644e-8,0.0024508113644507706,4.0410128173367605e-5,-4.95038655686505e-8,0.002450791125069385,4.0454212555310635e-5,-4.955844487476108e-8,0.0024507778465312773,4.040035570468197e-5,-4.949267054201453e-8,0.0024508040198822152,4.026270069107783e-5,-4.932327950223557e-8,0.0024508944505534447,4.006688255862525e-5,-4.908122347286046e-8,0.0024510638634689867,3.984580917053899e-5,-4.880648823794057e-8,0.00245131584498336,3.963541528939374e-5,-4.854295462312273e-8,0.002451642653661857,3.9470681141633724e-5,-4.833364518839405e-8,0.002452025536044154,3.938176083843848e-5,-4.8216083300638214e-8,0.002452435488543121,3.938977033584164e-5,-4.8217107227132724e-8,0.002452835048062748,3.950174696583605e-5,-4.8346481745672895e-8,0.0024531824507044967,3.970500384005907e-5,-4.858962496972789e-8,0.0024534396241559695,3.9962702831889606e-5,-4.890182990265696e-8,0.0024535843268946146,4.021443150526203e-5,-4.920880941676828e-8,0.002453623652929858,4.0386636134526066e-5,-4.9419622792017125e-8,0.002453601452891794,4.041499005959166e-5,-4.945444695873122e-8,0.0024535904575645672,4.0272043808040254e-5,-4.9278768855135644e-8,0.002453667088416081,3.9984366591700615e-5,-4.892445528448971e-8,0.0024538804961186404,3.9625472135700606e-5,-4.8481018851177726e-8,0.002454234041076148,3.9286627001372286e-5,-4.8059919577965076e-8,0.002454688758937021,3.90430339964667e-5,-4.7753378723272426e-8,0.002455182859858328,3.893307901809375e-5,-4.760913419343073e-8,0.0024556538362148746,3.895585698194267e-5,-4.762729962876685e-8,0.0024560537286482022,3.908100050787737e-5,-4.777201985779246e-8,0.00245635559786168,3.92623565237223e-5,-4.7987768345426784e-8,0.002456553543520675,3.945013089553443e-5,-4.821391608652092e-8,0.002456659304914327,3.9599666210168044e-5,-4.839543997652059e-8,0.002456697551274787,3.9677063676223765e-5,-4.849000855734107e-8,0.002456700822614684,3.966238759049165e-5,-4.847222180997126e-8,0.0024567044573505052,3.9550907364328136e-5,-4.833540821334541e-8,0.0024567417680072287,3.935256550822404e-5,-4.8091109193474636e-8,0.0024568398052084747,3.9089819952275556e-5,-4.776643242859904e-8,0.002457016102034005,3.879409971555748e-5,-4.739964644423014e-8,0.0024572767266246858,3.850135084065896e-5,-4.7034702557923994e-8,0.002457615714144817,3.8247292949526414e-5,-4.671548886753261e-8,0.002458015719767934,3.806281830374309e-5,-4.648030512056859e-8,0.0024584497093368225,3.7969709899505705e-5,-4.6356668032574766e-8,0.0024588835950892117,3.797672416493626e-5,-4.6356402548602995e-8,0.002459280019112911,3.8076035091713856e-5,-4.647098884390965e-8,0.0024596039507214372,3.8240450757803655e-5,-4.666776031810568e-8,0.0024598307142160007,3.842294852242427e-5,-4.68890281670926e-8,0.002459955918353923,3.8561282527527495e-5,-4.7057687283657186e-8,0.0024600044256263562,3.85906258738798e-5,-4.7093002809037085e-8,0.0024600323640595525,3.846469351560399e-5,-4.693699010582562e-8,0.002460115198327215,3.817888591278212e-5,-4.658318142014719e-8,0.0024603211513315733,3.778139333481038e-5,-4.609033001301854e-8,0.0024606816896058582,3.7360118141523624e-5,-4.5566248750844804e-8,0.0024611773581020993,3.700873869629158e-5,-4.5126111329188663e-8,0.0024617480565587665,3.679136890764092e-5,-4.484915535672109e-8,0.0024623194040428297,3.6725241793431914e-5,-4.4757458521259293e-8,0.002462828313114861,3.6785610286324895e-5,-4.4821776764596e-8,0.0024632368323780508,3.692313753770688e-5,-4.49825480110503e-8,0.002463533911415987,3.7081973038857536e-5,-4.517174974987359e-8,0.002463730207416001,3.72123954530806e-5,-4.5328262829285335e-8,0.0024638508339381053,3.727738907944816e-5,-4.540602228952397e-8,0.0024639287406243806,3.725496815222289e-5,-4.537712390347134e-8,0.002463999440178538,3.7138246844026674e-5,-4.523220853693909e-8,0.002464096769834068,3.693441043162565e-5,-4.4979410248424785e-8,0.002464249278477507,3.6662920271676045e-5,-4.464221452771284e-8,0.0024644771058909905,3.6352892349154964e-5,-4.4256185173269244e-8,0.0024647894963774355,3.60394813223482e-5,-4.3864446992286476e-8,0.00246518333004217,3.575928664507124e-5,-4.3512032388348086e-8,0.00246564308966862,3.5545192829730305e-5,-4.323961698689231e-8,0.002466142462746481,3.54212599682058e-5,-4.30773347216381e-8,0.0024666475561435836,3.539825611996659e-5,-4.303928925890125e-8,0.002467121549800276,3.5470424064565755e-5,-4.311941218583528e-8,0.002467530510301026,3.5614038369783264e-5,-4.328936880925462e-8,0.0024678501018424014,3.578830836147025e-5,-4.3499317664747304e-8,0.00246807277205011,3.5939557401127685e-5,-4.368284640476247e-8,0.0024682141340358534,3.6009986170699735e-5,-4.3767824546787344e-8,0.002468315806348312,3.595167953042106e-5,-4.369398422338407e-8,0.002468440719277613,3.574403825458124e-5,-4.343483114258189e-8,0.0024686576285004418,3.5408406295791984e-5,-4.301598790135291e-8,0.002469016756628685,3.5009868675168896e-5,-4.251749277816247e-8,0.002469527016305481,3.4639085816369505e-5,-4.2051331770138575e-8,0.0024701491272457075,3.437918303108398e-5,-4.172053655964463e-8,0.0024708107727132163,3.4275108324639473e-5,-4.1581346163947136e-8,0.0024714349391305145,3.432221330845508e-5,-4.162900742123513e-8,0.0024719649634269477,3.447673339527891e-5,-4.181047415170179e-8,0.0024723756773897968,3.4677347990773343e-5,-4.2050733510056084e-8,0.0024726711706196352,3.486498141779451e-5,-4.227704642717137e-8,0.002472875776800631,3.499457801076819e-5,-4.243345755026598e-8,0.002473024311147267,3.5039164456257024e-5,-4.248596282344877e-8,0.002473154485424879,3.49892258455584e-5,-4.24219893311207e-8,0.0024733018836487117,3.485023256564978e-5,-4.224757508831041e-8,0.0024734966693373177,3.4639859686924084e-5,-4.198405931463602e-8,0.002473761122223743,3.4385249288497285e-5,-4.166470061647262e-8,0.0024741075410927692,3.412005527399114e-5,-4.1330957835760266e-8,0.0024745365035125336,3.388081280598191e-5,-4.1027956557272016e-8,0.0024750358991933777,3.3702298329276224e-5,-4.0798783384882296e-8,0.002475581446443766,3.361205682415149e-5,-4.0677810154140694e-8,0.0024761393094790735,3.362488283309667e-5,-4.068393655070341e-8,0.00247667099923248,3.3738415010136826e-5,-4.081509111115514e-8,0.0024771401592741794,3.393112591255991e-5,-4.104553604679316e-8,0.0024775202300596727,3.4163782098038836e-5,-4.132736396042357e-8,0.0024778015552186553,3.4384841805604154e-5,-4.15968981141725e-8,0.002477996355230064,3.453957481857277e-5,-4.178587242689799e-8,0.002478139925461257,3.4582095835946386e-5,-4.183646089222978e-8,0.0024782863608294597,3.448855008036613e-5,-4.171792894077942e-8,0.002478497599215119,3.426810101996982e-5,-4.1440616533293496e-8,0.002478826423475806,3.3966768621773196e-5,-4.106097101147728e-8,0.002479297655651806,3.365920201414745e-5,-4.067146491268234e-8,0.0024798956470742607,3.3427359889743966e-5,-4.0374142208359564e-8,0.002480566263107198,3.333281657692773e-5,-4.0246164098665086e-8,0.0024812348815230548,3.339569240715765e-5,-4.031349099874403e-8,0.002481832069138389,3.359098154088289e-5,-4.054608293176884e-8,0.0024823140828337882,3.3862509899205475e-5,-4.087496962472572e-8,0.0024826701499891905,3.4144843169478624e-5,-4.121926049669797e-8,0.0024829174589391183,3.438196398751778e-5,-4.150927531351717e-8,0.002483090231395934,3.453716218275256e-5,-4.169890994247633e-8,0.0024832289273681676,3.459479555529096e-5,-4.1768010969739914e-8,0.0024833725099405357,3.455739202683464e-5,-4.171898971311369e-8,0.002483553953461178,3.444130953944551e-5,-4.1571586234288615e-8,0.002483797896582137,3.42726872143246e-5,-4.135789466565913e-8,0.002484119250717028,3.408404982664835e-5,-4.111811949072816e-8,0.0024845220544084173,3.3911157045767064e-5,-4.08966177191401e-8,0.0024849984608592214,3.378942234513219e-5,-4.073744810316272e-8,0.002485528319030998,3.37493393541924e-5,-4.0678740705520224e-8,0.0024860802611576817,3.381090099062003e-5,-4.07458217081001e-8,0.002486615292822404,3.3977887022200906e-5,-4.094410565553709e-8,0.0024870933615432594,3.4233776242617746e-5,-4.1253884823212716e-8,0.0024874822433588704,3.454145160287273e-5,-4.162972775740252e-8,0.0024877666980437367,3.4848325612800404e-5,-4.200659476353093e-8,0.002487954948091704,3.5096872718110185e-5,-4.2312767159825944e-8,0.0024880797904155523,3.523845842873798e-5,-4.248704298833028e-8,0.002488193043039279,3.5246843277377304e-5,-4.249570636640487e-8,0.0024883539592743067,3.512738494103619e-5,-4.234426909230887e-8,0.0024886140602875923,3.49187025600563e-5,-4.207987071532803e-8,0.002489002194927896,3.468515900952789e-5,-4.178219564842183e-8,0.0024895143834379584,3.450085337149065e-5,-4.1543686661381805e-8,0.002490112692358687,3.4428839747837344e-5,-4.144362746866002e-8,0.002490735095733774,3.4502254176917696e-5,-4.152441444489307e-8,0.002491313820334456,3.47148501990305e-5,-4.177943206499539e-8,0.0024917952057646542,3.5025110867509906e-5,-4.21578484386859e-8,0.002492153108185882,3.537166319265242e-5,-4.2583614770799746e-8,0.0024923915653697563,3.569250545655623e-5,-4.297938359576452e-8,0.0024925381077774505,3.594019773552308e-5,-4.328553882965522e-8,0.0024926327298874706,3.608907519420701e-5,-4.346936640882342e-8,0.0024927174854313663,3.6135139860801745e-5,-4.352511605516019e-8,0.0024928293045150462,3.6091731116077385e-5,-4.3468759712982866e-8,0.0024929962078651933,3.598404077227055e-5,-4.3331234070503576e-8,0.002493235828937878,3.584424198247867e-5,-4.315237723752643e-8,0.002493554988497319,3.5707654226319e-5,-4.297612739315671e-8,0.002493949475402431,3.560950550536974e-5,-4.284648196073154e-8,0.002494403814902926,3.558150409860973e-5,-4.2803251027824265e-8,0.0024948914829334063,3.5647523756435825e-5,-4.287670742727347e-8,0.0024953765911673344,3.581825773142045e-5,-4.308089582356996e-8,0.0024958182908375675,3.608573040867354e-5,-4.340666705533066e-8,0.0024961786512342457,3.641986140806195e-5,-4.381718846972339e-8,0.0024964332001036105,3.677013333856981e-5,-4.424981283072611e-8,0.002496580985875428,3.707466125980302e-5,-4.4627260595163124e-8,0.00249664942189288,3.7275972463325826e-5,-4.487730097257107e-8,0.002496690103679088,3.733875515066651e-5,-4.4954995613220536e-8,0.0024967655193018647,3.726250067358835e-5,-4.485864320894178e-8,0.002496931013734003,3.7083456871196986e-5,-4.46324458229267e-8,0.0024972186148263043,3.686490845186074e-5,-4.435466169172905e-8,0.002497628180291189,3.6679510733870065e-5,-4.411582351619956e-8,0.002498128079111284,3.658972340409257e-5,-4.3994441199673844e-8,0.0024986644042137227,3.663208106121771e-5,-4.4037246854020054e-8,0.0024991755753180833,3.680926861936187e-5,-4.4248953740883185e-8,0.002499608064555356,3.709163133072151e-5,-4.459370765840227e-8,0.0024999288144117358,3.742710477725366e-5,-4.500715060851872e-8,0.0025001310412585205,3.775603780312682e-5,-4.5414811573711545e-8,0.0025002324917523817,3.8025992028683344e-5,-4.57506862741052e-8,0.002500267909808244,3.82021913744237e-5,-4.5970516699009e-8,0.0025002791334092648,3.827161818741498e-5,-4.6057156152074936e-8,0.002500306150636883,3.824142696912959e-5,-4.601877616789812e-8,0.002500381023813219,3.813396254515294e-5,-4.588273798227383e-8,0.002500524917925695,3.7980819109320463e-5,-4.5688184530668866e-8,0.002500747387946369,3.781755623906785e-5,-4.547941847511398e-8,0.0025010467943652028,3.7679593748579237e-5,-4.530076608806616e-8,0.002501411000812327,3.759894473403009e-5,-4.5192519652786e-8,0.002501818061535664,3.76010451065458e-5,-4.518700349120371e-8,0.002502237249305373,3.7700983349453346e-5,-4.530383549196263e-8,0.002502631391630373,3.789891117462528e-5,-4.5544060670952407e-8,0.0025029618245448393,3.817544639615828e-5,-4.588418136956523e-8,0.0025031968555852867,3.8489391629367015e-5,-4.6273070203581374e-8,0.002503322900130418,3.878132383082006e-5,-4.6636329847159344e-8,0.0025033544659702643,3.898595666221756e-5,-4.689179674409995e-8,0.0025033366866835474,3.9052160624291637e-5,-4.6974744631872444e-8,0.002503335424761968,3.8963286204251026e-5,-4.686346369928086e-8,0.002503416415545243,3.874697513072474e-5,-4.659163332249408e-8,0.002503622458507168,3.846773122092755e-5,-4.623914977805023e-8,0.0025039595976610314,3.820530008492874e-5,-4.590530882256746e-8,0.002504397631776516,3.802946606966512e-5,-4.5677537488936655e-8,0.002504882299547712,3.798169372682445e-5,-4.560852435839345e-8,0.002505352221421315,3.806826004220745e-5,-4.570743517294879e-8,0.00250575432324309,3.8263797822131395e-5,-4.59439244261933e-8,0.0025060542893460607,3.852145546614233e-5,-4.6260390338084265e-8,0.002506241100184328,3.878568465963214e-5,-4.658768272125083e-8,0.0025063261680084966,3.900454144029845e-5,-4.686046599932783e-8,0.0025063382859264074,3.913932359754488e-5,-4.702948014495108e-8,0.0025063160483484925,3.917014569025023e-5,-4.706882713849625e-8,0.002506299694580531,3.9097007570934184e-5,-4.697758835500036e-8,0.0025063241642786917,3.893705066219002e-5,-4.677655197485161e-8,0.002506414458106024,3.8719469291395064e-5,-4.650187612960767e-8,0.002506583529031959,3.847966713294664e-5,-4.6197729527279165e-8,0.0025068322231723375,3.825390939784268e-5,-4.5909552105830005e-8,0.00250715042643049,3.8075081039815325e-5,-4.5678747389959236e-8,0.002507518671035578,3.79694315028609e-5,-4.553864588391083e-8,0.002507909881434134,3.7953757863868274e-5,-4.551099211154035e-8,0.0025082914429322,3.8032479762118567e-5,-4.560219705504129e-8,0.0025086283062298424,3.819441369790588e-5,-4.5799089344806656e-8,0.002508888222288745,3.8409920504514224e-5,-4.6065065644875405e-8,0.002509049867274366,3.863051042059274e-5,-4.633938175836797e-8,0.002509113004638694,3.879425510226927e-5,-4.654391267553016e-8,0.0025091068429147767,3.883993594289078e-5,-4.6601084959132783e-8,0.0025090898042000585,3.872875934821506e-5,-4.6461387254399373e-8,0.002509134996273683,3.846495952331999e-5,-4.6129379088556667e-8,0.002509303823785431,3.810176136963081e-5,-4.567118163005868e-8,0.0025096206611317003,3.77249340788089e-5,-4.519386918014874e-8,0.0025100635025889603,3.742094334698776e-5,-4.480570179737146e-8,0.0025105750725739227,3.7247279761174246e-5,-4.4579149479260436e-8,0.0025110856597778002,3.721891833235642e-5,-4.4533963341258614e-8,0.0025115347336513087,3.7312355209207396e-5,-4.464198908935113e-8,0.0025118837717088426,3.7479672497395944e-5,-4.4844363555259744e-8,0.0025121197805155586,3.766434463552293e-5,-4.507092241835546e-8,0.0025122524606316582,3.781403239390384e-5,-4.5256039989766344e-8,0.002512308218517646,3.788897265948401e-5,-4.534921710684068e-8,0.002512323198993744,3.7866377431753216e-5,-4.532087455967344e-8,0.0025123364352792246,3.774164049515155e-5,-4.5164209733579505e-8,0.002512383722153255,3.752690440451212e-5,-4.4893662222274306e-8,0.0025124927690744884,3.724752495244522e-5,-4.454058376296237e-8,0.0025126800686300593,3.6937187041074546e-5,-4.4147073781900625e-8,0.002512949640805612,3.663249847498581e-5,-4.3759102263850506e-8,0.0025132935154346414,3.636784559588725e-5,-4.3419995601533096e-8,0.0025136935134270817,3.6171127440481755e-5,-4.3165098457630535e-8,0.002514123766723244,3.606055777639336e-5,-4.301781026749884e-8,0.002514553618955688,3.604231707921164e-5,-4.298663815376317e-8,0.0025149508839445193,3.610876316223164e-5,-4.306282715704458e-8,0.0025152857940081257,3.6237122105096005e-5,-4.321846926867821e-8,0.0025155362609611655,3.6389174493579715e-5,-4.3405830751730746e-8,0.002515694790395706,3.651350376824656e-5,-4.356001367114698e-8,0.002515776049335391,3.6552764092910476e-5,-4.360815615449484e-8,0.0025158217306482694,3.64579617376964e-5,-4.348766977365181e-8,0.002515896936537497,3.620833883698536e-5,-4.317158041654697e-8,0.002516073071847446,3.5828669318152446e-5,-4.269046581534293e-8,0.002516399987719169,3.539060604592482e-5,-4.213413246847748e-8,0.0025168814606322987,3.499021840014745e-5,-4.162331415721513e-8,0.0025174707936113064,3.4710531005774946e-5,-4.126263149227772e-8,0.002518090589616577,3.459078644678115e-5,-4.1102057661954364e-8,0.002518663524727177,3.4618912918017596e-5,-4.112741399925282e-8,0.0025191361740298083,3.474582741761788e-5,-4.1278096176040484e-8,0.0025194875406559848,3.490802432070915e-5,-4.147510457868247e-8,0.002519725292742549,3.504638962014763e-5,-4.16444050552658e-8,0.0025198766141857846,3.5116951628882e-5,-4.173036446018124e-8,0.002519978706172601,3.509468993429849e-5,-4.1700694202266914e-8,0.002520071130482626,3.497310385097045e-5,-4.154621540106111e-8,0.002520190252699242,3.4761794687652565e-5,-4.1278135639874127e-8,0.0025203652372844786,3.448316626617987e-5,-4.092409555262571e-8,0.002520615191656812,3.416849468288395e-5,-4.05232510677893e-8,0.002520947440465501,3.385345763496335e-5,-4.0120551152513905e-8,0.002521357059662189,3.3573332103171066e-5,-3.976057689732734e-8,0.0025218278023055253,3.335822588172072e-5,-3.9481488035551096e-8,0.0025223344083919984,3.3228896480038676e-5,-3.930979257938309e-8,0.0025228460215779803,3.319367073788616e-5,-3.925652251261835e-8,0.0025233303087924958,3.324669892834196e-5,-3.9315015622613785e-8,0.0025237579626117535,3.336760095667987e-5,-3.946031753109398e-8,0.0025241074151963775,3.352256518500154e-5,-3.9650309128366536e-8,0.0025243697315655363,3.366716014331096e-5,-3.982900185191263e-8,0.002524553460207322,3.375163915239177e-5,-3.9933128485974816e-8,0.002524688300114605,3.37298851909107e-5,-3.9903559505638475e-8,0.002524824998114826,3.357240651657453e-5,-3.970202211903166e-8,0.0025250277665400896,3.328120777325597e-5,-3.933021967054159e-8,0.002525356611076024,3.289990453199541e-5,-3.8842803606554595e-8,0.0025258428381231134,3.250914558990305e-5,-3.834160036262284e-8,0.0025264698957574395,3.220189906693548e-5,-3.794432342774024e-8,0.0025271741566565867,3.2047197639093385e-5,-3.773873488953271e-8,0.002527868930050737,3.206296769477658e-5,-3.7748283537389005e-8,0.002528477957775852,3.2214078628227146e-5,-3.792951338789108e-8,0.0025289589671146006,3.243333093220877e-5,-3.8198347470684486e-8,0.002529308244893737,3.2649160481611736e-5,-3.8464834618929027e-8,0.002529551044230285,3.280554245702909e-5,-3.8658136766423037e-8,0.0025297276422903844,3.286996887218826e-5,-3.873662679239773e-8,0.0025298816375502052,3.283279972249427e-5,-3.8687266747971134e-8,0.002530052440279624,3.2702708511500886e-5,-3.852013964263886e-8,0.0025302712732322313,3.250144171865661e-5,-3.8262077101730963E-08,0.002530559210242333,3.22591991158146e-5,-3.7950935413685944e-8,0.002530926148178654,3.2010602838034795e-5,-3.7630466201304596e-8,0.002531370351391248,3.1790798148834993e-5,-3.7345270529438355e-8,0.0025318786907376338,3.1631370951251876e-5,-3.713553615551818e-8,0.0025324279262051433,3.155608559611767e-5,-3.703162366365894e-8,0.0025329874164920214,3.1576901848478516e-5,-3.704907123537745e-8,0.0025335233363896095,3.1691081346079224e-5,-3.71849683887019e-8,0.002534004013295205,3.1880164541897305e-5,-3.741660475396124e-8,0.0025344056658638974,3.211134266810114e-5,-3.770302889521404e-8,0.0025347176716889862,3.234141683476799e-5,-3.798981805268735e-8,0.0025349464931195965,3.25231453918205e-5,-3.821692596727692e-8,0.002535117468766687,3.261356425395861e-5,-3.832919965284332e-8,0.002535273522037362,3.25837585549067e-5,-3.828894828785741e-8,0.0025354694854592633,3.242890013057747e-5,-3.808899818124254e-8,0.0025357608919522735,3.217582413424165e-5,-3.776263794934066e-8,0.002536187666940124,3.1883621764644e-5,-3.738458087106923e-8,0.0025367568259437178,3.1632385404099197e-5,-3.7056717765237276e-8,0.0025374327525164407,3.1499190159307474e-5,-3.687752844703763e-8,0.0025381439662942977,3.152925181564535e-5,-3.690529396896161e-8,0.00253880714969785,3.1717495544648184e-5,-3.7134493175846014e-8,0.002539357012067217,3.201212311537006e-5,-3.7500132915228656e-8,0.002539765928854451,3.233760649167408e-5,-3.79067823651572e-8,0.0025400453147970577,3.2622583246552875e-5,-3.82638918563021e-8,0.0025402331112333227,3.281872156862578e-5,-3.850972952935261e-8,0.002540377487382661,3.290621872055572e-5,-3.8618458257282727e-8,0.002540524155092487,3.288979390474908e-5,-3.8595246105451726e-8,0.0025407093934606078,3.279105867884921e-5,-3.846681028316092e-8,0.002540957537634892,3.2641231271875194e-5,-3.827233474111451e-8,0.002541280815381751,3.247562338960235e-5,-3.805651702208651e-8,0.0025416799467947535,3.232966235413645e-5,-3.786445609457888e-8,0.002542144857740274,3.223562798311164e-5,-3.7737407372711096e-8,0.002542655579590631,3.221938662051105e-5,-3.7708565661377785e-8,0.0025431838362320446,3.229680174430522e-5,-3.779849423590047e-8,0.0025436960054889923,3.247013233511464e-5,-3.8010564296692125e-8,0.00254415790798978,3.272542643389036e-5,-3.8327620226833e-8,0.002544541182956549,3.303226997284184e-5,-3.871155421654684e-8,0.0025448301444755037,3.334704611861932e-5,-3.9107270584671315e-8,0.0025450273211040327,3.3620069672829226e-5,-3.9451574837501164e-8,0.002545155729501141,3.380568399136757e-5,-3.968592063249876e-8,0.002545256556630443,3.387319471601984e-5,-3.977037692107729e-8,0.0025453820443540687,3.3816009067509984e-5,-3.969547432241733e-8,0.002545584452323269,3.365650342624907e-5,-3.948871602576002e-8,0.0025459029162299583,3.344455147949948e-5,-3.9213016496428415e-8,0.0025463510522096334,3.324840420752361e-5,-3.895529090102889e-8,0.002546909232956193,3.3138246514345544e-5,-3.8805530645937213e-8,0.002547525817875957,3.31656565561402e-5,-3.883045961997576e-8,0.002548129745697608,3.334578366524815e-5,-3.9050513834874766e-8,0.002548651901131051,3.3650693689135876e-5,-3.9431034299941284e-8,0.00254904685669721,3.4018656743914485e-5,-3.989388291545174e-8,0.002549305056062235,3.4375770534290136e-5,-4.034493649891447e-8,0.002549450755241978,3.465939649203068e-5,-4.070401123079711e-8,0.0025495291586907494,3.4833241697630345e-5,-4.092420182378461e-8,0.002549590687379239,3.4890489219274215e-5,-4.099602575860678e-8,0.0025496789205144556,3.4848031855415884e-5,-4.0940251920067316e-8,0.0025498244612649898,3.473730209237217e-5,-4.079637327911076e-8,0.0025500436032672657,3.459585033605535e-5,-4.061196445682029e-8,0.002550339547154352,3.4461308211710806e-5,-4.0434988555481746e-8,0.0025507043433619027,3.4367523260307965e-5,-4.030880973480197e-8,0.0025511206731693597,3.4341897944161364e-5,-4.0268729945377805e-8,0.002551563424104876,3.4402972367080165e-5,-4.03388608138628e-8,0.002552001606617659,3.4557690980306746e-5,-4.0528610973922175e-8,0.002552401461273141,3.479848664498499e-5,-4.082892216673805e-8,0.0025527314827823774,3.510120673609544e-5,-4.120952912256527e-8,0.002552969364218686,3.542565410114826e-5,-4.161951137566323e-8,0.0025531095580215266,3.572058968524942e-5,-4.19935413975739e-8,0.002553168729760865,3.59339104478195e-5,-4.226480110017664e-8,0.0025531858573809097,3.602631744383978e-5,-4.238244913932361e-8,0.0025532150611217693,3.598419299693054e-5,-4.232817322961466e-8,0.002553312233386756,3.582648549097322e-5,-4.212517282076237e-8,0.0025535195183206613,3.560220174300033e-5,-4.1835212060668614e-8,0.002553852830502855,3.537869695525301e-5,-4.15439349344679e-8,0.0025542964378125308,3.5224255096316406e-5,-4.133880357556166e-8,0.002554806195557747,3.519005643611671e-5,-4.1286055750094206e-8,0.002555320571266334,3.5296537354939525e-5,-4.141303722830442e-8,0.0025557766128750385,3.552799805828805e-5,-4.170091750744843e-8,0.002556126465171574,3.583732608559857e-5,-4.209034923582469e-8,0.002556349360987087,3.615973932622834e-5,-4.249882289419115e-8,0.0025564551410904254,3.6431100822784126e-5,-4.284408179364047e-8,0.0025564785276809823,3.6604393384032696e-5,-4.306534222497807e-8,0.002556467160589559,3.6658984478097046e-5,-4.3135357610844236e-8,0.002556468510402671,3.660096821231846e-5,-4.306106582894111e-8,0.0025565200544311623,3.645675748916501e-5,-4.28755593884766e-8,0.0025566445046864778,3.626394236750845e-5,-4.262649174123844e-8,0.0025568493925952245,3.606285126280341e-5,-4.236530656389189e-8,0.002557129168848333,3.589047078361781e-5,-4.213942711868888e-8,0.0025574680949682657,3.5776750212926264e-5,-4.1987475893609535e-8,0.0025578429268030643,3.574244515459497e-5,-4.193647233080398e-8,0.002558225197975276,3.579750560221392e-5,-4.1999734310573656e-8,0.0025585835602312756,3.593934241195524e-5,-4.217460204810126e-8,0.002558887016647417,3.61509584570488e-5,-4.2439939751589254e-8,0.0025591098618594843,3.639984373749989e-5,-4.2754572922321514e-8,0.002559238497448476,3.663948624180955e-5,-4.305908526809104e-8,0.002559278835866122,3.6815737799850185e-5,-4.3283910146574906e-8,0.002559261046831353,3.68791601038681e-5,-4.336518833602966e-8,0.0025592372774527606,3.680125222475687e-5,-4.3265665007869605e-8,0.0025592697003744484,3.658826729490232e-5,-4.299250430234186e-8,0.0025594113266689754,3.6284623802832374e-5,-4.260177686092147e-8,0.0025596874257284618,3.596177093402923e-5,-4.218437109225698e-8,0.0025600863540812774,3.569620677368294e-5,-4.183807532178788e-8,0.002560563687246403,3.554623400075656e-5,-4.1637989758230514e-8,0.002561056690233244,3.553661609585996e-5,-4.161684553067492e-8,0.0025615023865055877,3.565507989845713e-5,-4.176023644906828e-8,0.002561853048804872,3.585927599621287e-5,-4.20151041647804e-8,0.0025620856129585094,3.6090108860365954e-5,-4.230643641429664e-8,0.0025622040446008454,3.628699041834416e-5,-4.255663518033421e-8,0.0025622353918832905,3.6401300490328786e-5,-4.270283147309331e-8,0.0025622213473997326,3.6405401558346106e-5,-4.2708678956345274e-8,0.0025622078408738705,3.6295813489391095e-5,-4.256872173084837e-8,0.0025622353848293975,3.609068615788058e-5,-4.230540259760305e-8,0.00256233232102081,3.582322550250386e-5,-4.1960772840867707e-8,0.002562511863801732,3.553353735483984e-5,-4.158605612885912e-8,0.0025627725248878294,3.526111693837438e-5,-4.123196242121757e-8,0.00256310070883618,3.503928727808233e-5,-4.0941482037820396e-8,0.0025634741471409566,3.4891828381175004e-5,-4.074551346356165e-8,0.002563865248603042,3.483125361276283e-5,-4.066063228427299e-8,0.002564244075042713,3.4857926898380974e-5,-4.068793102758481e-8,0.002564581202623444,3.495942454822687e-5,-4.0812119542659516e-8,0.00256485109943431,3.5110048036088305e-5,-4.100075191629571e-8,0.0025650367242128005,3.527118210779312e-5,-4.120451556732618e-8,0.002565135498337338,3.539413055019303e-5,-4.136076151439963e-8,0.0025651654120114266,3.5427525351978796e-5,-4.1403038721833427e-8,0.0025651680412939974,3.533045146974794e-5,-4.127809559426407e-8,0.0025652038004362098,3.508913423679075e-5,-4.096749224333056e-8,0.0025653363340437958,3.472992631684516e-5,-4.050439181559414e-8,0.0025656093621240807,3.431861032240273e-5,-3.997271395936973e-8,0.0025660270415399614,3.394124366569468e-5,-3.9482630402027894e-8,0.0025665499166005316,3.367374522340637e-5,-3.913169321930131e-8,0.0025671094737676993,3.3555941288687166e-5,-3.8971649823626466e-8,0.0025676326398133926,3.358238507761676e-5,-3.899658257921173e-8,0.00256806353887396,3.3710715096302974e-5,-3.915332696323073e-8,0.0025683748955028416,3.387946611070678e-5,-3.936392740831083e-8,0.0025685688159335627,3.402630843529469e-5,-3.954873741392243e-8,0.0025686706264498697,3.410151913115822e-5,-3.96436201055269e-8,0.002568719735740128,3.4075375284090386e-5,-3.9609586863852165e-8,0.0025687602388208127,3.3940249039981586e-5,-3.9435794394587893e-8,0.002568832735617296,3.370870760914346e-5,-3.913743671001868e-8,0.0025689681542897694,3.340879250968684e-5,-3.874991257803349e-8,0.0025691840551694215,3.307763210742136e-5,-3.832068947589197e-8,0.002569483538443005,3.275462578485857e-5,-3.790047634512565e-8,0.00256985645494049,3.2475309573827486e-5,-3.753521316052912e-8,0.0025702822795653883,3.226668899010827e-5,-3.725997236190257e-8,0.002570733820216625,3.214437650152126e-5,-3.70952464417701e-8,0.002571181033117111,3.211133565934368e-5,-3.70453424363933e-8,0.0025715946013054125,3.215772517602418e-5,-3.7098167201791944e-8,0.002571949318347555,3.226144137496881e-5,-3.722583343084536e-8,0.002572227570996682,3.2389277195387017e-5,-3.738598474604562e-8,0.0025724233208959243,3.249913626791757e-5,-3.752447594345222e-8,0.002572546572517723,3.2544481248383096e-5,-3.7581027423136185e-8,0.002572627105263867,3.248253008845186e-5,-3.7499865346558056e-8,0.0025727146254667485,3.2286766565557764e-5,-3.7246045798024494e-8,0.0025728713746888203,3.196144702345607e-5,-3.6824362906102526e-8,0.0025731546573224077,3.1551122395760685e-5,-3.6291732875808416e-8,0.0025735930611439093,3.113531128318894e-5,-3.5750349486020505e-8,0.0025741686669498156,3.080383281342957e-5,-3.5315932671875985e-8,0.002574818793527538,3.0622158898999846e-5,-3.5073179334983326e-8,0.002575459250901792,3.0606384083367444e-5,-3.5043561582390667e-8,0.0025760157713347175,3.072183306088944e-5,-3.518340880366333e-8,0.0025764462366678763,3.0902486165110045e-5,-3.5408643786040035e-8,0.0025767458975593516,3.107681621716422e-5,-3.562773879707096e-8,0.0025769394739584782,3.118739906047621e-5,-3.5766760816977004e-8,0.0025770682803444704,3.12001551469743e-5,-3.5781267605868635e-8,0.0025771782767451306,3.110525759781823e-5,-3.565767914468704e-8,0.0025773113662062915,3.091339865537416e-5,-3.540879179965687e-8,0.0025774999609862632,3.065026064735654e-5,-3.5066958787603745e-8,0.0025777640357551542,3.035060945700293e-5,-3.4676643389330934e-8,0.002578110043284982,3.0052507451921462e-5,-3.428694627394564e-8,0.002578531397055513,2.9791926281541815e-5,-3.3944523195161236e-8,0.0025790103290381297,2.9598057935518227e-5,-3.368738209113566e-8,0.0025795209096909134,2.948965519446499e-5,-3.354007538112134e-8,0.002580032896739608,2.94727630782897e-5,-3.351077440578792e-8,0.0025805159234916397,2.954000878094914e-5,-3.3590389005577315e-8,0.002580943592558336,2.9671294779383406e-5,-3.375345201478358e-8,0.0025812972568394475,2.983567962877638e-5,-3.3960441519085414e-8,0.002581569412426488,2.9994385199715056e-5,-3.416148972868799e-8,0.002581766674986788,3.0105076417356167e-5,-3.430175679860849e-8,0.0025819120683374308,3.0127919994288804e-5,-3.4329229444587715e-8,0.002582045519993052,3.0034048227300084e-5,-3.420579656011638e-8,0.0025822203949664234,2.9816100977510195e-5,-3.392112802616561e-8,0.002582493526172687,2.9498181435378302e-5,-3.3505790908997055e-8,0.0025829078467866826,2.913934269067586e-5,-3.3035889417979293e-8,0.002583471922975573,2.8823154006253027e-5,-3.261957918279001e-8,0.0025841475821974037,2.8630944686295138e-5,-3.236241863773583e-8,0.0025848575009842015,2.860875020177161e-5,-3.23245690882075e-8,0.0025855132051104206,2.8747336224273945e-5,-3.249487409873808e-8,0.0025860483870083825,2.898840096044825e-5,-3.279872884323055e-8,0.0025864386289602428,2.925160284354101e-5,-3.31328354281292e-8,0.0025867003344974215,2.9464434140691195e-5,-3.340364643567008e-8,0.0025868758817611977,2.9580498213838604e-5,-3.355089908895895e-8,0.0025870163518221215,2.958356532888121e-5,-3.3552916689574256e-8,0.00258716874146591,2.948254760991543e-5,-3.342033057128494e-8,0.0025873690254704456,2.930331685653275e-5,-3.31857940505852e-8,0.0025876396104315717,2.908092911135896e-5,-3.289416461028243e-8,0.0025879892061104566,2.88534249664018e-5,-3.259456856612757e-8,0.0025884138089266786,2.8656989162023898e-5,-3.2334059412977954e-8,0.002588898359017111,2.8521979692271508e-5,-3.215231454490244e-8,0.002589419062272378,2.8469586189780088e-5,-3.2077164254932806e-8,0.002589946473323683,2.8509159090307877e-5,-3.212107523599057e-8,0.002590449393316276,2.8636563050092073e-5,-3.227904091415366e-8,0.002590899361197364,2.8834057391279875e-5,-3.2528461699677137e-8,0.00259127520629838,2.9071975778584452e-5,-3.2831291645010475e-8,0.0025915670649930126,2.9312176621478835e-5,-3.313838678718475e-8,0.0025917793326626975,2.951309804139549e-5,-3.33958896106978e-8,0.0025919320721802777,2.96361235160836e-5,-3.355336698452127e-8,0.002592060388232209,2.9652876016196784e-5,-3.357329612354791e-8,0.0025922110409532205,2.9552949250428954e-5,-3.344128213388367e-8,0.0025924352611730508,2.9350891816452204e-5,-3.3175402893513874e-8,0.0025927770732672843,2.908978789339379e-5,-3.2831114881942346e-8,0.0025932582302109035,2.8837351096213648e-5,-3.2496316807290324e-8,0.0025938644424488276,2.8670845449783314e-5,-3.2271752176790486e-8,0.00259454130569729,2.8651787572331885e-5,-3.223802204062918e-8,0.0025952073153012044,2.880006435961552e-5,-3.242178048536644e-8,0.0025957820237779284,2.9082752023308125e-5,-3.2781025144444316e-8,0.002596215451355888,2.942669394122801e-5,-3.3221292787055197e-8,0.0025965024447693404,2.9748129367640864e-5,-3.3634051131772567e-8,0.0025966765282158253,2.998185229157122e-5,-3.3934507817174133e-8,0.002596791242167228,3.009622528063916e-5,-3.408109516064842e-8,0.0025969011572768027,3.0092558261656323e-5,-3.4074756512656124e-8,0.002597049688176753,2.9995632087270322e-5,-3.3946851949197073e-8,0.0025972643186138377,2.9842572236855614e-5,-3.3744958806311066e-8,0.002597556681278304,2.9673938276303314e-5,-3.3521470462183287e-8,0.002597924726275709,2.9527819877394803e-5,-3.332595043754231e-8,0.0025983552864050196,2.9436122490796813e-5,-3.320019805897644e-8,0.002598826556628034,2.9421965307062316e-5,-3.3174709416024415e-8,0.0025993106853013,2.949756098639174e-5,-3.32658027069346e-8,0.002599776848353735,2.9662467082486734e-5,-3.347330412600232e-8,0.0026001951252648077,2.99025861685836e-5,-3.377926073172787e-8,0.0026005411717937273,3.019067108816419e-5,-3.414860105393843e-8,0.002600801115884702,3.048904747005782e-5,-3.453261736501532e-8,0.0026009756449572323,3.075479964565841e-5,-3.487558988314453e-8,0.0026010821201373643,3.094704699047445e-5,-3.512412559281178e-8,0.0026011537374556978,3.103526998712179e-5,-3.523794137373505e-8,0.0026012352359606815,3.100711111394474e-5,-3.52001023446636e-8,0.0026013752640351045,3.08739211784446e-5,-3.5024463414013454e-8,0.0026016160874248713,3.0672358090410115e-5,-3.475804093991398e-8,0.0026019820559800674,3.0460335902351476e-5,-3.447598865451195e-8,0.0026024694362678106,3.0306029731080202e-5,-3.4267389520307465e-8,0.0026030416290290835,3.0270338541856285e-5,-3.421233572704718e-8,0.0026036342474958208,3.0386657894908002e-5,-3.435533680675956e-8,0.0026041720030882468,3.064594194570206e-5,-3.4685549028801975e-8,0.0026045930310347977,3.09961293659131e-5,-3.513578419828963e-8,0.0026048698621258057,3.1359222083486464e-5,-3.560466452625087e-8,0.002605016277847952,3.165875436058266e-5,-3.5992435719287957e-8,0.0026050775582436726,3.1843809880593544e-5,-3.623231983185307e-8,0.0026051114117463955,3.1899280024474e-5,-3.630395313793583e-8,0.0026051700508598736,3.184180085895025e-5,-3.622821835659225e-8,0.0026052897100294578,3.1707923332180516e-5,-3.605202198717156e-8,0.0026054879335475844,3.154166996092474e-5,-3.5832271992857454e-8,0.0026057657097087847,3.138536625159791e-5,-3.5624031184444675e-8,0.0026061113393798714,3.1274330301516524e-5,-3.5473569113068227e-8,0.0026065041725679677,3.123426843754492e-5,-3.5414846395313414e-8,0.0026069176827509784,3.127995084377525e-5,-3.54676479866181e-8,0.0026073221793504135,3.141424395457776e-5,-3.563622226078849e-8,0.002607687760832499,3.162725534231478e-5,-3.590812143263662e-8,0.002607988052610515,3.189600175406857e-5,-3.6253749808592313e-8,0.0026082048747776295,3.218555030603266e-5,-3.662781876104157e-8,0.0026083332526672066,3.2452725750126513e-5,-3.697411627683993e-8,0.0026083853531278017,3.265297934002162e-5,-3.72343878712858e-8,0.0026083914259650088,3.2749867670578894e-5,-3.736065308576354e-8,0.002608396133617845,3.272507890931113e-5,-3.732831038939484e-8,0.0026084499787289036,3.258582024132688e-5,-3.714589715717855e-8,0.0026085974212649975,3.236651424287259e-5,-3.6857515677651e-8,0.0026088647679620098,3.2123260707560836e-5,-3.65358635683691e-8,0.002609251366434725,3.1921661831404596e-5,-3.6266559361749115e-8,0.0026097270315835943,3.182058662536569e-5,-3.612701970627575e-8,0.002610237284691165,3.185588171012813e-5,-3.6165054551592994e-8,0.002610716126815699,3.202876234196642e-5,-3.6383392719986345e-8,0.0026111037028992033,3.23033372673764e-5,-3.6736088564341154e-8,0.0026113636304113436,3.261570097552551e-5,-3.714014721843922e-8,0.002611493434829786,3.2892780986458314e-5,-3.750008482171149e-8,0.002611523495367077,3.307418573417459e-5,-3.7736560791061143E-08,0.002611505142783382,3.312826382278772e-5,-3.780750968567028e-8,0.002611493763715752,3.3056708359165294e-5,-3.771431792722278e-8,0.0026115341933477952,3.2888214172239555e-5,-3.749370515848177e-8,0.0026116528511147953,3.266635873779777e-5,-3.7202054725746606e-8,0.0026118568135878677,3.2437504850753895e-5,-3.6899719726700316e-8,0.0026121372770168093,3.22421675305727e-5,-3.663975855845446e-8,0.0026124744813415092,3.2110441667230555e-5,-3.646188211570326e-8,0.002612842227916604,3.206036322123708e-5,-3.639018811094762e-8,0.00261321139785924,3.2097696128144984e-5,-3.64327692480781e-8,0.00261355274464152,3.2216066114155835e-5,-3.658181139714531e-8,0.0026138396427348816,3.2397063044748426e-5,-3.681367790345908e-8,0.0026140514872013475,3.261067171343822e-5,-3.708942654441659e-8,0.0026141780311365196,3.2817050683532635e-5,-3.7357080590710184e-8,0.002614224114800926,3.297101014117252e-5,-3.7557436147006555e-8,0.002614213119889088,3.303013696291152e-5,-3.7634673802280204e-8,0.002614186549965068,3.296599359632987e-5,-3.755103806085695e-8,0.0026141973753741167,3.277534783937561e-5,-3.7301599143301795e-8,0.002614297046902401,3.248635183237581e-5,-3.69224435741917e-8,0.0026145197475576695,3.215508644569542e-5,-3.648630993783964e-8,0.002614870090159904,3.185171140863245e-5,-3.608467312200419e-8,0.0026153197674543857,3.164059402548646e-5,-3.5801927989370486e-8,0.0026158147703580206,3.156177686629293e-5,-3.569118447274441e-8,0.0026162903077401106,3.1620210993565046e-5,-3.5760006489734524e-8,0.0026166880991987354,3.1785560398102544e-5,-3.5969814749259693e-8,0.002616970841721617,3.200160523740788e-5,-3.624783231824479e-8,0.002617130261397801,3.220181753315225e-5,-3.65072435138508e-8,0.0026171871606737534,3.232655585316976e-5,-3.6669675925902054e-8,0.00261718397046602,3.233719347395405e-5,-3.6683842036219965e-8,0.0026171724016019787,3.222347506708292e-5,-3.6535405177033614e-8,0.0026172002283405987,3.200264024737339e-5,-3.624607593524087e-8,0.0026173011810684,3.171173130676567e-5,-3.586373455846947e-8,0.0026174902392406083,3.139662825485608e-5,-3.544818102047367e-8,0.0026177642440258567,3.110164755113335e-5,-3.5057518398642445e-8,0.0026181060091383474,3.086218416322592e-5,-3.4738433135395185e-8,0.0026184896650506663,3.070099873181416e-5,-3.452121062024481e-8,0.0026188855768160607,3.062736487635263e-5,-3.441851050195791e-8,0.0026192641644238587,3.063776642104189e-5,-3.44262138034998e-8,0.0026195987827379364,3.071705603650061e-5,-3.452490184616867e-8,0.0026198682621240295,3.083960982102611e-5,-3.4681327174304134e-8,0.0026200597799300902,3.0970713580179304e-5,-3.485016751422272e-8,0.0026201724252346513,3.106906901777973e-5,-3.497724556731821e-8,0.002620221032692184,3.1091763777759243e-5,-3.500601824118333e-8,0.0026202386178564006,3.10028288611161e-5,-3.4888839501679675e-8,0.0026202745150329704,3.0784947027866455e-5,-3.4602410900141006e-8,0.0026203852922867623,3.0450819216758257e-5,-3.416279062923851e-8,0.002620618265425924,3.0047622079189514e-5,-3.363132109745287e-8,0.002620992870319827,2.9648323815135033e-5,-3.31033303947174e-8,0.0026214894619416536,2.932979763141325e-5,-3.267956343422445e-8,0.0026220531242507274,2.9146566799369495e-5,-3.2431878766493014e-8,0.002622611657445149,2.9112958080091928e-5,-3.237984681690709e-8,0.0026230987533740094,2.9201352737337322e-5,-3.248826516711856e-8,0.0026234720422993033,2.935474709537481e-5,-3.268331002587069e-8,0.002623720696604966,2.950580934218716e-5,-3.28772184813543e-8,0.002623863141320352,2.9594733190630928e-5,-3.2991532941629956e-8,0.002623938403472255,2.9581523567624585e-5,-3.2973239176112444e-8,0.0026239948751797743,2.945153944445875e-5,-3.280223748832211e-8,0.002624079352158989,2.9214975075539966e-5,-3.249095709508292e-8,0.0026242282334253994,2.8901697565596798e-5,-3.207786296841002e-8,0.0026244620668671175,2.855315053807396e-5,-3.161700102240202e-8,0.0026247839524003213,2.821331655109691e-5,-3.116615430893701e-8,0.0026251814438661785,2.7920728883389294e-5,-3.077624804492969e-8,0.002625630821426735,2.770290261143587e-5,-3.048387523980967e-8,0.0026261023194173497,2.7573621615054672e-5,-3.030759911853844e-8,0.0026265650867071107,2.753272069170523e-5,-3.024760371638935e-8,0.0026269911754542366,2.7567495629662442e-5,-3.0287542037181364e-8,0.0026273585031503107,2.7654808956776647e-5,-3.0397305793839284e-8,0.0026276531846827346,2.776337289842733e-5,-3.0535989704684127e-8,0.0026278717322375995,2.785627661607388e-5,-3.0655133830369624e-8,0.0026280234298139303,2.7894361322732897e-5,-3.0703083939648824e-8,0.0026281325803872136,2.7841478039741167e-5,-3.063189326845691e-8,0.0026282392000712505,2.7672557297109677e-5,-3.040802070948686e-8,0.0026283955437060506,2.7384085700415085e-5,-3.002625965469175e-8,0.00262865565196701,2.700371371201096e-5,-2.9522515841626875e-8,0.002629057605315128,2.6592301817640855e-5,-2.897657699704715e-8,0.0026296042239974493,2.623136467768682e-5,-2.8495630917078668e-8,0.0026302538309996223,2.599585843503772e-5,-2.8178505464655922e-8,0.002630930614107705,2.5924188462011436e-5,-2.807623809106079e-8,0.0026315519205043305,2.6002942441934412e-5,-2.8171931342658712e-8,0.002632057542513618,2.6175113742488016e-5,-2.8391396121084223e-8,0.0026324258329257447,2.6364726212698507e-5,-2.8635308308118833e-8,0.002632672462723894,2.6502714775448774e-5,-2.881304110057633e-8,0.0026328380412312087,2.6543357889184606e-5,-2.8864178132588297e-8,0.0026329731241864014,2.6469411774491017e-5,-2.8765333495100423e-8,0.0026331258609140727,2.6289281768524357e-5,-2.852665947748336e-8,0.0026333338989213834,2.6030282261764095e-5,-2.8183285436663457e-8,0.002633620171689503,2.573080090149753e-5,-2.7785262712895203e-8,0.002633991642655656,2.5432731091922993e-5,-2.7387706234444074e-8,0.0026344403222787766,2.517473880061446e-5,-2.7041855038120544e-8,0.002634946113457011,2.498684705051351e-5,-2.6787753182580472e-8,0.0026354809501950237,2.4886802821856877e-5,-2.6649271729928865e-8,0.0026360135612485953,2.487845151655501e-5,-2.66318567861711e-8,0.0026365141657436557,2.4952076373098923e-5,-2.672296922722169e-8,0.002636958487571637,2.508635806998142e-5,-2.6894714182866534e-8,0.002637330770592852,2.5251345857424093e-5,-2.7107782135658014e-8,0.0026376258574601534,2.541191401004594e-5,-2.731596108184508e-8,0.002637850566159729,2.5531539580490765e-5,-2.747102088376633e-8,0.002638024527826738,2.557660264320669e-5,-2.7528304916922454e-8,0.0026381802741849004,2.552172015255805e-5,-2.7453780860784707e-8,0.0026383615500640014,2.535654692073106e-5,-2.7233147342018143e-8,0.0026386179885873363,2.5093413410281484e-5,-2.6882116638732477e-8,0.002638994289794082,2.4773009859853065e-5,-2.6454097522886618e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json deleted file mode 100644 index 270577e..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_19.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":19000,"numberOfSamples":1000,"samples":[0.00263951402096563,2.446275040491078e-5,-2.6038117688221015e-8,0.0026401631724560673,2.4241976200195275e-5,-2.5739261712150362e-8,0.002640884349598046,2.417407411008679e-5,-2.5641764129475454e-8,0.0026415912918163185,2.4277459627606698e-5,-2.577057311285661e-8,0.0026422007751247287,2.4514250198517228e-5,-2.6076268743377622e-8,0.002642664329828072,2.4806135401016956e-5,-2.6455914313675208e-8,0.002642981408758501,2.5067420523334124e-5,-2.6796599674782414e-8,0.0026431902581784475,2.523476738670862e-5,-2.701462116287926e-8,0.0026433473077564114,2.5280434293348607e-5,-2.707291191164421e-8,0.0026435080278592402,2.5209814035850336e-5,-2.6977864625794997e-8,0.0026437153058168224,2.5051197769627946e-5,-2.6766036632474325e-8,0.002643995008250455,2.4844553414124373e-5,-2.6489610125027892e-8,0.002644356096346505,2.4632482174508258e-5,-2.6204648569688263e-8,0.002644792866933108,2.4453878979516923e-5,-2.5962750928942762e-8,0.002645287958825506,2.433962413644026e-5,-2.580522022561437e-8,0.0026458157625529125,2.4309628109960647e-5,-2.5758941317575327e-8,0.00264634623063722,2.4371028134717308e-5,-2.5833817493889664e-8,0.0026468490048528843,2.4517626043978552e-5,-2.6021955503015233e-8,0.002647297629221693,2.473075415894809e-5,-2.629884122598041e-8,0.002647673419069512,2.498168300232041e-5,-2.6626587976528904e-8,0.0026479684516871804,2.5235364563765828e-5,-2.6958906132239313e-8,0.0026481873145099825,2.54550480044092e-5,-2.724714977923732e-8,0.0026483474854581976,2.5607329200806667e-5,-2.744689859121178e-8,0.002648478321749667,2.5667306663201197e-5,-2.7524725198145248e-8,0.002648618565417001,2.562364143904652e-5,-2.746495256788262e-8,0.002648811933829168,2.548331398325493e-5,-2.7276137128600436e-8,0.002649099993304903,2.5275225022656478e-5,-2.6996080239347117e-8,0.0026495118344468096,2.5050470037239995e-5,-2.6692385337925312e-8,0.0026500516782408433,2.4875937156110125e-5,-2.6454031394300517e-8,0.0026506887377273874,2.481830242231187e-5,-2.637005584696817e-8,0.0026513571570154788,2.4919878684211346e-5,-2.649732055333089e-8,0.0026519727576500727,2.5176293414199947e-5,-2.6830682803784936e-8,0.00265246347865712,2.553137242424813e-5,-2.7296067819030845e-8,0.0026527977885291948,2.5897092428559638e-5,-2.777691417282513e-8,0.0026529937872264786,2.6188736914085377e-5,-2.8160834927125474e-8,0.0026531053400488365,2.6354405340763377e-5,-2.8378742435525895e-8,0.002653197143730883,2.6384803835271885e-5,-2.8417798104530085e-8,0.0026533237489522734,2.630496073324375e-5,-2.8310488620170042e-8,0.002653519415667135,2.61584941720321e-5,-2.8113966146280626e-8,0.0026537972075638358,2.5993391727317396e-5,-2.7891437296909137e-8,0.0026541528220946162,2.5852711656499893e-5,-2.7699980495729533e-8,0.002654569583467504,2.576980469437125e-5,-2.758418502662082e-8,0.002655022888269817,2.5766321279371505e-5,-2.7573341150534074e-8,0.0026554838903719694,2.5851487346184455e-5,-2.7680269328933923e-8,0.0026559228543872925,2.6021962722230312e-5,-2.7900982114737346e-8,0.0026563125592436493,2.6262270927647677e-5,-2.8215210320601784e-8,0.0026566318822620954,2.6546159408893735e-5,-2.8588246183577963e-8,0.0026568693325829773,2.683937297731775e-5,-2.8974675169938895e-8,0.00265702588046726,2.7104047119859548e-5,-2.9324209301872344e-8,0.0026571162804157502,2.730439944298196e-5,-2.9589182861804454e-8,0.002657168287578267,2.741298625135473e-5,-2.973278593466467e-8,0.002657219506910407,2.7416528074622072e-5,-2.9736788701860016e-8,0.002657312004454739,2.7320200846281446e-5,-2.9607346163960382e-8,0.0026574851280428084,2.714945498836805e-5,-2.9377627673142143e-8,0.0026577671410715864,2.6948550466389847e-5,-2.9106116594645743e-8,0.0026581666337407396,2.677480114515534e-5,-2.8869130261933987e-8,0.002658665644369953,2.668759153112913e-5,-2.874622335182529e-8,0.0026592177642860556,2.673249924766369e-5,-2.8798893801029236e-8,0.0026597551845333914,2.6923863313585407e-5,-2.9047096880029876e-8,0.0026602066278280773,2.7233239467283458e-5,-2.945360447347533e-8,0.0026605218701161496,2.759279450344971e-5,-2.992839322576825e-8,0.002660691339317348,2.791687831695263e-5,-3.0357403494703774e-8,0.0026607489650131524,2.813307297178182e-5,-3.064397603742436e-8,0.002660756316410744,2.820629128228656e-5,-3.0740975280116455e-8,0.00266077813131762,2.814444053347429e-5,-3.0658329382785926e-8,0.0026608626181401033,2.7987094517445165e-5,-3.044802835863527e-8,0.002661033282093157,2.7787369099427664e-5,-3.018018911351549e-8,0.002661290670229049,2.759646253123286e-5,-2.992268275086257e-8,0.002661618847227499,2.745466279524221e-5,-2.9729256636510297e-8,0.002661992324996788,2.7388048564438633e-5,-2.9635075082451442e-8,0.0026623814914065623,2.740846380825369e-5,-2.9656508743774662e-8,0.0026627564064791672,2.751469021981976e-5,-2.9792508338229933e-8,0.002663089657287003,2.769378081550649e-5,-3.002626101217006e-8,0.0026633589993581537,2.7922422231694105e-5,-3.032697532756177e-8,0.0026635502049094915,2.816877186333765e-5,-3.065235507227498e-8,0.002663660058606214,2.8395509491539593e-5,-3.095269273591784e-8,0.0026636988226479592,2.8564683516255168e-5,-3.1177317725720975e-8,0.0026636910185861354,2.8644267020628355e-5,-3.128328931824663e-8,0.002663673368164203,2.8615444636392442e-5,-3.124507257083623e-8,0.0026636892999802016,2.847882357726595e-5,-3.106284172552677e-8,0.0026637804953454328,2.8257367087954442e-5,-3.076651119240239e-8,0.0026639771539304236,2.7994347029093748e-5,-3.041320967031577e-8,0.002664289390944928,2.7745919962196963e-5,-3.0077603120369135e-8,0.0026647021583839263,2.7569343911087362e-5,-2.983632036881539e-8,0.002665175574611234,2.7508966541401323e-5,-2.9749234062979572e-8,0.002665651753105894,2.758308150002246e-5,-2.9841711448467954e-8,0.0026660679387967637,2.777557445101302e-5,-3.009314804079612e-8,0.002666373652606828,2.8036422130212083e-5,-3.043735504000154e-8,0.0026665467921051737,2.8293485634668975e-5,-3.0778184924067085e-8,0.002666601852555459,2.8473726055012245e-5,-3.1017907545195027e-8,0.0026665852853927806,2.8526301970881325e-5,-3.1088172804032435e-8,0.002666559122253182,2.843738526897907e-5,-3.0969895282801916e-8,0.0026665805053176046,2.823043592843639e-5,-3.069370740064932e-8,0.0026666863526158286,2.795380188020402e-5,-3.032352927191644e-8,0.002666888030781808,2.7663438827002143e-5,-2.993366290807507e-8,0.0026671748130789254,2.7408493516036183e-5,-2.958966680282094e-8,0.0026675216046985984,2.722333376093842e-5,-2.933771824724552e-8,0.0026678967932506742,2.7125467417972392e-5,-2.920171724683057e-8,0.002668268174343812,2.7116928055334394e-5,-2.918496557666993e-8,0.0026686067536675503,2.718687142750966e-5,-2.9273488870256556e-8,0.002668889153521843,2.7314125916714938e-5,-2.9439367095546293e-8,0.0026690995240611494,2.7469415229723713e-5,-2.9643692403226327e-8,0.002669231588881734,2.761768401200625e-5,-2.983969287822529e-8,0.0026692909045567758,2.772137604439484e-5,-2.9977123836592665e-8,0.002669296689582548,2.7745483589062654e-5,-3.0009007656812204e-8,0.0026692818814056923,2.76645400450632e-5,-2.9900964988722216e-8,0.002669289786419154,2.7470487600255673e-5,-2.9641735210395685e-8,0.0026693663135547675,2.7178855682651955e-5,-2.9251483856010147e-8,0.002669548600717101,2.6829814064937723e-5,-2.8783321052296953e-8,0.002669853232704221,2.6481571864986507e-5,-2.8314646721668814e-8,0.0026702686612265127,2.6196540227162797e-5,-2.792883344868289e-8,0.0026707555410017745,2.6024208042934442e-5,-2.769243626155642e-8,0.0026712556999075863,2.5986573478360687e-5,-2.7635653186376986e-8,0.002671707089748267,2.6071129511972674e-5,-2.7742712797765785e-8,0.0026720600901569886,2.6233603318288687e-5,-2.795522462078366e-8,0.002672290443135009,2.640954156364561e-5,-2.818742186699068e-8,0.0026724052428170825,2.653145786869803e-5,-2.8349002218997386e-8,0.002672440220313686,2.6546752821712073e-5,-2.8369163632258638e-8,0.0026724489957256573,2.6431102842522592e-5,-2.8214673922745004e-8,0.002672487698917711,2.6193125149463324e-5,-2.789629736013679e-8,0.0026726001820109838,2.586916578069951e-5,-2.746199942230688e-8,0.002672808644915501,2.551090053887501e-5,-2.6980507296689357e-8,0.0026731118372536797,2.5170934360175597e-5,-2.6522128760281473e-8,0.0026734896589889912,2.4891330726868854e-5,-2.6143393330707435e-8,0.0026739109227287,2.4697549447807037e-5,-2.5878832880513e-8,0.0026743410670043246,2.4597486622909633e-5,-2.5739543146492245e-8,0.002674747998989801,2.458373190904632e-5,-2.5716071958711425e-8,0.0026751057440529678,2.463704675194214e-5,-2.57830039780471e-8,0.0026753964831346907,2.47297865751725e-5,-2.5903529531835557e-8,0.00267561183646005,2.4828867315808e-5,-2.6033429491443315e-8,0.0026757540793394046,2.489859900654912e-5,-2.6124877326598502e-8,0.00267583747024861,2.4904174485618595e-5,-2.6131104709850983e-8,0.0026758891320712635,2.4816671777239062e-5,-2.6013096260213478e-8,0.0026759481268225807,2.4619877273035702e-5,-2.5748745104085175e-8,0.002676060878740094,2.4317891637757816e-5,-2.534308690420903e-8,0.002676271641860672,2.3940547910458253e-5,-2.4835628594163594e-8,0.0026766089922976954,2.3542240639262514e-5,-2.429887410844018e-8,0.002677072911743146,2.3190810939116947e-5,-2.3823549830955104e-8,0.002677629384711697,2.2947801471423495e-5,-2.349226195279842e-8,0.0026782174373540597,2.284747447523584e-5,-2.3351420427147178e-8,0.002678767190753552,2.2884450527373708e-5,-2.3394574904936935e-8,0.002679221246387928,2.3015772470718473e-5,-2.3564955982734086e-8,0.0026795504594499405,2.31755695605357e-5,-2.3774871289120044e-8,0.002679759170591716,2.3295137206169125e-5,-2.393243272963582e-8,0.0026798803135628544,2.3320917185443094e-5,-2.3965602905995443e-8,0.0026799640145154023,2.322577558520088e-5,-2.3837397612610006e-8,0.0026800639314745046,2.3012215146842673e-5,-2.3550384713622862E-08,0.0026802248899573116,2.2708392050599457e-5,-2.3141585163499967e-8,0.0026804742934984,2.235906805897442e-5,-2.2670554977751216e-8,0.0026808185968568944,2.2014267511493717e-5,-2.220428842578894e-8,0.0026812448336239396,2.171854636264718e-5,-2.180280461715125e-8,0.0026817259374465234,2.150323880680172e-5,-2.1508611094251824e-8,0.00268222781652349,2.1382809836528223e-5,-2.1341628366433782e-8,0.0026827161726339327,2.1355034347562173e-5,-2.1299284836488415e-8,0.0026831617535715744,2.140378470911418e-5,-2.1360196730420277e-8,0.0026835436457758872,2.1502965966267144e-5,-2.1489465414133864e-8,0.0026838509543692596,2.16204854567272e-5,-2.1644050147128995e-8,0.002684083542702058,2.1721810919128004e-5,-2.1777567204648777e-8,0.0026842524063363047,2.1773296218550722e-5,-2.184473901283113e-8,0.0026843798793523676,2.174584592951199e-5,-2.1806283785570994e-8,0.002684499254751002,2.1619604754520625e-5,-2.1635208600026604e-8,0.002684652615539522,2.1389936125771377e-5,-2.132488556836351e-8,0.0026848851553524585,2.1073684595338914e-5,-2.0897551736655894e-8,0.002685234761333537,2.071276203290809e-5,-2.040922349572789e-8,0.0026857179492677428,2.0370460882582813e-5,-1.9944823185549678e-8,0.002686317392056504,2.0116807827503108e-5,-1.9598553255649772e-8,0.002686979523907763,2.0004912349695077e-5,-1.9442129284992614e-8,0.0026876280837219843,2.0048512671163523e-5,-1.949455243073783e-8,0.0026881899249303247,2.0214024293583018e-5,-1.9711294931862544e-8,0.002688620249435145,2.043285656095454e-5,-2.000069039920413e-8,0.002688914623014258,2.0626936406510176e-5,-2.0258093448061607e-8,0.002689104448499188,2.073370425998305e-5,-2.0399378529749706e-8,0.0026892419298627126,2.0720641518941455e-5,-2.038044359813892e-8,0.00268938312888527,2.0587598019377475e-5,-2.0200427284762034e-8,0.002689574768650333,2.0360579482662567e-5,-1.989355990805515e-8,0.0026898465947728313,2.0081670543145843e-5,-1.9515867700560127e-8,0.0026902088053080623,1.9798500950558975e-5,-1.913120086648592e-8,0.002690653320029833,1.9555086732382298e-5,-1.8798959747669437e-8,0.0026911577108349486,1.9384918317815483e-5,-1.856468027518342e-8,0.0026916907283687213,1.9306783846534458e-5,-1.8454204375709315e-8,0.0026922183440946422,1.932346249716126e-5,-1.8471725008849565e-8,0.0026927093194704355,1.9422959535281348e-5,-1.8601349303398246e-8,0.002693139577075912,1.9581620030571056e-5,-1.8811304655394267e-8,0.0026934949979082095,1.9768275469618075e-5,-1.905959980051295e-8,0.0026937727037630865,1.9948579211282313e-5,-1.9299928293298172e-8,0.002693981227014739,2.008903816565814e-5,-1.9487102008012012e-8,0.0026941399761876384,2.0160743594175506e-5,-1.958202828436642e-8,0.002694278150304583,2.014308771745926e-5,-1.9556669135148625e-8,0.002694432839134833,2.0027814972522264e-5,-1.939951202924289e-8,0.0026946454407021474,1.9823465164879817e-5,-1.912164795226923e-8,0.002694955118743798,1.9559228013221924e-5,-1.876210188452582e-8,0.0026953885604227568,1.9285588555638527e-5,-1.8388822887488567e-8,0.002695947389646158,1.906784792733087e-5,-1.8090003030037158e-8,0.002696598361371597,1.8969529356223275e-5,-1.7951673808881418e-8,0.0026972747172651123,1.9028183067974308e-5,-1.8024976958726027e-8,0.002697894448259002,1.923482567582152e-5,-1.82982964892157e-8,0.0026983903263144058,1.953167385178543e-5,-1.8694084270395405e-8,0.0026987355972708806,1.9833273175935162e-5,-1.9097304148343785e-8,0.002698950451980689,2.005962260427181e-5,-1.9400090848296767e-8,0.0026990880859063043,2.016241265792062e-5,-1.9537100067242948e-8,0.0026992117922432905,2.013345355569334e-5,-1.949684506615443e-8,0.002699375647089422,1.999759245364751e-5,-1.9312213181089278e-8,0.002699614261285006,1.9798830819145078e-5,-1.9041939056218857e-8,0.0026999406340535597,1.9586801508834097e-5,-1.8752604336031518e-8,0.0027003488738597202,1.9406767550178475e-5,-1.850529554434705e-8,0.002700818970481651,1.9293437948365567e-5,-1.8347238284879605e-8,0.0027013220497049467,1.9267719508964687e-5,-1.8307237617048195e-8,0.002701825549465035,1.9335593552310834e-5,-1.839393020569358e-8,0.0027022980757690288,1.9488723621636194e-5,-1.8596431789749385e-8,0.002702713662607276,1.970654001153539e-5,-1.8887103092774177e-8,0.002703055157533248,1.9959543955443707e-5,-1.9226073522447195e-8,0.002703316448267429,2.0213520540267606e-5,-1.9567030088327615e-8,0.0027035033133196956,2.0434152409261692e-5,-1.986350378693203e-8,0.0027036329373279133,2.059147843487134e-5,-2.0074871352699753e-8,0.002703732317100221,2.0663912104588616e-5,-2.017172044859481e-8,0.002703835708462897,2.064176391337209e-5,-2.0140576017720335e-8,0.002703981045779454,2.0530222225002636e-5,-1.9987983238696774e-8,0.002704204955540068,2.0351562676141675e-5,-1.9743638549377247e-8,0.0027045358067139627,2.014570325430151e-5,-1.9461313750205066e-8,0.002704984805772576,1.996714707688034e-5,-1.92148397591981e-8,0.0027055368649279493,1.987574577050617e-5,-1.9085611169575944e-8,0.002706145685078051,1.9919963553539275e-5,-1.913981275734757e-8,0.0027067395839023285,2.0115935619329194e-5,-1.9399872245807953e-8,0.002707241964949466,2.0432627984345386e-5,-1.9824189275903496e-8,0.002707600561978769,2.079591363745013e-5,-2.031258854203578e-8,0.0027078094546453073,2.1114943868623784e-5,-2.0742078873478338e-8,0.0027079095029694275,2.1317626509160715e-5,-2.101494646065448e-8,0.002707967740739984,2.1374638784031844e-5,-2.1091231796414332e-8,0.0027080501916891273,2.1301291919555723e-5,-2.0991196408044287e-8,0.002708202805321296,2.1142645928582355e-5,-2.0775234408464792e-8,0.0027084452776870867,2.0954316120813476E-05,-2.0518098346501502e-8,0.002708774162575712,2.078764131629634e-5,-2.028905117718749e-8,0.002709169810830763,2.0681479161499233e-5,-2.014086685744763e-8,0.0027096034430987557,2.065925821172407e-5,-2.0105765910602988e-8,0.0027100428652535534,2.0729021182110605e-5,-2.0195268624788187e-8,0.0027104568599029245,2.088478077558925e-5,-2.0401806622108805e-8,0.0027108187654351296,2.1108546115977512e-5,-2.0701327617105837e-8,0.002711109496587725,2.1372986326076458e-5,-2.10568899223502e-8,0.002711319970232938,2.1644827851250796e-5,-2.142334211249965e-8,0.002711452708090201,2.1889050652350722e-5,-2.1753098561200446e-8,0.002711522206080725,2.207368852602839e-5,-2.2002679141313222e-8,0.002711553726110139,2.2174663760722812e-5,-2.2139227350930035e-8,0.0027115804817427185,2.2179989492678676E-05,-2.214615199321869e-8,0.0027116394229722046,2.2092790600064617e-5,-2.2027220749220564e-8,0.002711765902353902,2.1932661136871404e-5,-2.1808497541801675e-8,0.0027119875265561675,2.17349102139576e-5,-2.153749682666738e-8,0.0027123175594141167,2.154714321577371e-5,-2.1278725972971384e-8,0.002712748677090166,2.1422310197924048e-5,-2.1104340382649643e-8,0.0027132489457220156,2.1407462817094904e-5,-2.107881988743877e-8,0.002713763222707799,2.1528939153101463e-5,-2.12386510801654e-8,0.002714223539826301,2.17779711508261e-5,-2.1572526893751845e-8,0.0027145692235508168,2.210462782438041e-5,-2.201294395593925e-8,0.0027147705289971287,2.242831272043591e-5,-2.245045363896241e-8,0.002714842961370987,2.26651374401677e-5,-2.2770961975807826e-8,0.0027148417371246187,2.2759728481484883e-5,-2.2899019449501894e-8,0.0027148384646546696,2.270361220246182e-5,-2.2822761360270927e-8,0.002714894133814566,2.253147752919397e-5,-2.2588785865962968e-8,0.002715042481976411,2.230178058034443e-5,-2.227589996373742e-8,0.0027152877602880654,2.2075146022270574e-5,-2.196600255000497e-8,0.0027156119658795414,2.189977200438472e-5,-2.1724460810982776e-8,0.0027159847379479274,2.180547085498409e-5,-2.1592064109398672e-8,0.0027163717326484887,2.18037059038195e-5,-2.158495102003217e-8,0.0027167402462662167,2.189035707386248e-5,-2.169814943921391e-8,0.0027170626329077376,2.204902136902486e-5,-2.1909862774099005e-8,0.002717318577686348,2.225407880034124e-5,-2.2185536220454567e-8,0.002717496917322223,2.247368848952755e-5,-2.2481941172479003e-8,0.0027175971570509785,2.2673148098990517e-5,-2.2751819980273843e-8,0.002717630437619656,2.2818986025088118e-5,-2.2949521472554347e-8,0.002717619374232879,2.2883830547347417e-5,-2.3037639752791775e-8,0.0027175960863589687,2.2851508344780233e-5,-2.29939131948583e-8,0.002717598071460584,2.27213176952526e-5,-2.281699857396905e-8,0.0027176621709201596,2.2510260056520727e-5,-2.2529529271382513e-8,0.0027178174751903974,2.22521853070832e-5,-2.2177067543554316e-8,0.0027180784671276526,2.1993333213934358e-5,-2.1822217623532972e-8,0.0027184398641318065,2.178448760758116e-5,-2.153411268172913e-8,0.0027188745594770346,2.1670561409178468e-5,-2.137429317301222e-8,0.0027193360025531545,2.1679009178246315e-5,-2.1380826619141587e-8,0.002719766138446254,2.1809462677510583e-5,-2.1553961002315126e-8,0.00272010902935972,2.2028302823201387e-5,-2.184847600516649e-8,0.0027203278821346134,2.2272524858974438e-5,-2.2178797892063562e-8,0.0027204196799707763,2.24654419229855e-5,-2.2440404566424472e-8,0.002720419476537429,2.2541182151501676e-5,-2.2543308403420168e-8,0.002720389514355453,2.246792006086709e-5,-2.2443785172222848e-8,0.0027203968580779593,2.2257868624423312e-5,-2.2157995797522724e-8,0.0027204907531003454,2.1959156500183422e-5,-2.17509487518943e-8,0.0027206903780250197,2.1635680043467534e-5,-2.1309184877300774e-8,0.0027209858546815508,2.1346417556349277e-5,-2.0912787442917073e-8,0.002721347808163526,2.1132433058736414e-5,-2.06177932502233e-8,0.002721738732659261,2.101302770424033e-5,-2.045091160605777e-8,0.002722121842089695,2.0988064107378192e-5,-2.0412526919188236e-8,0.0027224663072612032,2.104272221321373e-5,-2.0482980964473065e-8,0.0027227497312666536,2.1152219247249398e-5,-2.0628864697851955e-8,0.0027229592187699085,2.1285646420264224e-5,-2.0808205423364215e-8,0.002723092024279769,2.140915534170127e-5,-2.0974851448080727e-8,0.002723156140984944,2.14891410191427e-5,-2.108288393508341e-8,0.002723170606461795,2.149605797679514e-5,-2.1091870780846034e-8,0.0027231647986974373,2.140913982897247e-5,-2.0973305086363463e-8,0.002723175747615389,2.122154123906254e-5,-2.0717585989345948e-8,0.0027232427667478894,2.094452464224403e-5,-2.0339705819586754e-8,0.0027233996145755853,2.0608713479640643e-5,-1.9880992713257535e-8,0.002723665721382843,2.026060892275378e-5,-1.9404470170278227e-8,0.0027240391567136266,1.9953854594028393e-5,-1.898310231028625e-8,0.002724494146855511,1.9736789731948312e-5,-1.8682948875842208e-8,0.002724984781134481,1.9639562245665583e-5,-1.8545605329381536e-8,0.002725454640230336,1.9664591180140306e-5,-1.8575060281540082e-8,0.0027258502841296267,1.978346436416098e-5,-1.8733227690675876e-8,0.0027261353236396123,1.9941877016394326e-5,-1.894645849238284e-8,0.002726301248658682,2.007230249813052e-5,-1.912271463933041e-8,0.0027263713289722514,2.011187104949174e-5,-1.9175991154117115e-8,0.002726395138448426,2.002057957804487e-5,-1.905127428909273e-8,0.002726434196991114,1.9793401183908815e-5,-1.8741182852925098e-8,0.0027265433420372793,1.946100805656228e-5,-1.828705235095383e-8,0.0027267551469351914,1.9078518607560066e-5,-1.7763682989189432e-8,0.002727073366580046,1.870747687105405e-5,-1.7254861286109985e-8,0.0027274765293817524,1.8398952985918913e-5,-1.683037011094019e-8,0.002727927993060576,1.818353027833995e-5,-1.6532295654523488e-8,0.0027283871266923043,1.8069347217504134e-5,-1.637222675764901e-8,0.0027288178204516824,1.804577514014172e-5,-1.633611041703065e-8,0.0027291931918580247,1.8089300870504294e-5,-1.6392157254153952e-8,0.0027294972768002954,1.816913014448269e-5,-1.649844892067187e-8,0.0027297251046408027,1.8251552466542002e-5,-1.660892918346911e-8,0.0027298822811575333,1.830324285422369e-5,-1.6677976929709144e-8,0.0027299846109979653,1.8294199006395545e-5,-1.6664471571957215e-8,0.0027300576392803658,1.8201084382144078e-5,-1.6536379482566312e-8,0.002730135367558795,1.801142871411346e-5,-1.6276481194654895e-8,0.0027302569950561194,1.772835840690819e-5,-1.5888815400112085e-8,0.002730460675000141,1.7374367034465673e-5,-1.540383280991605e-8,0.002730774317388617,1.6991538671805468e-5,-1.487874681986958e-8,0.002731205492992096,1.663554986253649e-5,-1.4389430286252634e-8,0.0027317346225685167,1.6362736100393333e-5,-1.401285392592605e-8,0.0027323159732417688,1.6213321694122396e-5,-1.3804237823242727e-8,0.0027328882043883593,1.6197272773221976e-5,-1.377768292956184e-8,0.002733391477933123,1.628923403372551e-5,-1.3899104903846669e-8,0.0027337846859482747,1.6435087027299024e-5,-1.4095004537599963e-8,0.002734056500043612,1.656745755001094e-5,-1.4273511480543449e-8,0.0027342271115420556,1.6624323330041047e-5,-1.4349761230979106e-8,0.002734341218625606,1.6564849873113524e-5,-1.4267579057934553e-8,0.0027344551943848145,1.6378505391622318e-5,-1.4012046808109738e-8,0.002734622289801755,1.608581588143182e-5,-1.3610682506044439e-8,0.0027348797656559553,1.5731229116967588e-5,-1.312384293400565e-8,0.0027352411979116873,1.5370487927067927e-5,-1.262758861964929e-8,0.0027356956705479342,1.5056407177672457e-5,-1.2194285616455754e-8,0.002736213318040265,1.4827270079832405e-5,-1.1876677483532097e-8,0.0027367546090290257,1.4700733657187753e-5,-1.169940036745348e-8,0.002737279962922846,1.4673731384326293e-5,-1.16586767454608e-8,0.0027377570640155654,1.4726736350655366e-5,-1.1728029197099415e-8,0.0027381648557289963,1.482989457646782e-5,-1.1866648191392354e-8,0.0027384946423735903,1.4948942426058718e-5,-1.2027544616739114e-8,0.002738749434445084,1.504985821963847e-5,-1.216399804528127e-8,0.0027389426406392242,1.5102225647928979e-5,-1.2234218749741384e-8,0.0027390967313658887,1.508190848938774e-5,-1.2205022203274869e-8,0.0027392418828776502,1.497377683520103e-5,-1.2055543818857391e-8,0.0027394140032673863,1.4774979914795335e-5,-1.1781703210623261e-8,0.0027396510558396095,1.449859754939216e-5,-1.1401214646296961e-8,0.0027399865631337478,1.4176337452192784e-5,-1.0957324233453986e-8,0.0027404401157403325,1.3857589419184968e-5,-1.0517579850249122e-8,0.002741006988407936,1.3601649709835046e-5,-1.016324470539438e-8,0.002741651946643131,1.3461932237357087e-5,-9.967701894510386e-9,0.0027423134297618586,1.3466164991872435e-5,-9.969292325791265e-9,0.0027429204127412043,1.3602045380436758e-5,-1.0151559338201335e-8,0.0027434161980657615,1.381781057785335e-5,-1.0443902181835858e-8,0.0027437775903663983,1.403930043979941e-5,-1.0744867582233018e-8,0.00274402026056172,1.4195086586668818e-5,-1.0956551973741348e-8,0.002744189707180539,1.4237647948831023e-5,-1.101361813162918e-8,0.0027443444308235623,1.4153214739371446e-5,-1.0896808965594635e-8,0.0027445391212823013,1.3960083614703103e-5,-1.063071839494125e-8,0.0027448126229584063,1.369940353501182e-5,-1.0271311517205686e-8,0.0027451820491002014,1.342296064314159e-5,-9.889353385649206e-9,0.0027456424369939375,1.3181296837245952e-5,-9.554228595057486e-9,0.0027461706266553357,1.301415215625418e-5,-9.320814951324564e-9,0.0027467319065318033,1.2944348784452829e-5,-9.220945708603037e-9,0.0027472878430236675,1.297566686114043e-5,-9.26028974478475e-9,0.0027478036209455806,1.3094521161716708e-5,-9.420488426281658e-9,0.0027482535395967965,1.3274409109423844e-5,-9.665206228210173e-9,0.002748624017387072,1.3481665911821765e-5,-9.94808846615289e-9,0.002748914201993835,1.3681151040180056e-5,-1.0220678594459335e-8,0.002749134840466332,1.3840922486020028e-5,-1.0438925666362003e-8,0.0027493062755827883,1.3935617636275572e-5,-1.0567851392877573e-8,0.0027494561978375956,1.3948871850020234e-5,-1.0584841736813426e-8,0.002749617298368145,1.3875330877006017e-5,-1.0482372438320108e-8,0.002749824478571436,1.3722661790345272e-5,-1.0270772986168708e-8,0.002750110830763187,1.3513482353169196e-5,-9.98093410823438e-9,0.00275050148863685,1.3286167853943228e-5,-9.665504146217214e-9,0.0027510052007713166,1.3092282740735443e-5,-9.395433012835077e-9,0.0027516054627253683,1.2987797311630384e-5,-9.247916863310523e-9,0.0027522560077975567,1.3016795714357577e-5,-9.283940992366734e-9,0.002752887270832192,1.3191513005764179e-5,-9.520705716744854e-9,0.0027534268750110877,1.3479307947422266e-5,-9.913575792228905e-9,0.002753827252818105,1.380820104122874e-5,-1.0363635022831688e-8,0.002754085066367869,1.4092408000508905e-5,-1.0752843979321471e-8,0.002754240423604777,1.4264671631161601e-5,-1.0988570669126968e-8,0.0027543577158397454,1.4297504261183262e-5,-1.1032801675695634e-8,0.0027545010082918016,1.4205075789953122e-5,-1.0904699986993847e-8,0.0027547161998007054,1.4030591799180186e-5,-1.0663283329901377e-8,0.0027550240194078655,1.3829185117178249e-5,-1.0384043206256625e-8,0.002755421453020713,1.3653474454465471e-5,-1.0139258403077382e-8,0.0027558875196220835,1.3544259564344984e-5,-9.985280220478687e-9,0.0027563903321073395,1.3525955479519786e-5,-9.956181654857124e-9,0.0027568938904163395,1.3605460183974092e-5,-1.0062009063794016e-8,0.002757364073561223,1.3773418082126131e-5,-1.029030898978133e-8,0.0027577735523741467,1.4007312606634619e-5,-1.0610254942756665e-8,0.002758105281049702,1.4275878871466236e-5,-1.0978721485269755e-8,0.0027583543129910426,1.4544196144378514e-5,-1.1347397176404875e-8,0.002758527884760369,1.4778781498711986e-5,-1.1669921998794136e-8,0.0027586439565762334,1.495202207329257e-5,-1.1908062139585563e-8,0.0027587286752269713,1.5045486741457556e-5,-1.2036263263573345e-8,0.002758813283168323,1.5052079543374385e-5,-1.2044567346228864e-8,0.0027589307562035483,1.497726783006875e-5,-1.1940277717807085e-8,0.0027591121400170103,1.4839587044545021e-5,-1.1748696271030066e-8,0.002759382258301141,1.4670374331164395e-5,-1.1512860934478634e-8,0.0027597543590631487,1.4512060743916354e-5,-1.1291303651724086e-8,0.002760223851724849,1.4413504572653444e-5,-1.1151667518328181e-8,0.002760762772812467,1.4420577561528979e-5,-1.1157671499436408e-8,0.002761318710750578,1.4561512390203414e-5,-1.1348746558323507e-8,0.00276182335825203,1.483046758444795e-5,-1.171717072812087e-8,0.002762213232767044,1.5178600777388183e-5,-1.2195628938203373e-8,0.0027624561618459875,1.5523579998102924e-5,-1.2670370954457433e-8,0.002762568055471419,1.577896645887847e-5,-1.3021911778698365e-8,0.002762607053442844,1.588892345218556e-5,-1.3173036202525945e-8,0.0027626477535367317,1.5847494556313896e-5,-1.3115353264673006e-8,0.002762752148698717,1.5693341116187472e-5,-1.290193227055894e-8,0.002762952717258098,1.5488291251018845e-5,-1.2617722370350503e-8,0.0027632510418019677,1.5294686690858635e-5,-1.2348462136331391e-8,0.0027636259344087917,1.5160707656321381e-5,-1.2160612203495138e-8,0.002764043924793039,1.511465428428553e-5,-1.2093523880228672e-8,0.002764468105360931,1.5165219435121325e-5,-1.2159711904489318e-8,0.0027648642771565795,1.5304554776486206e-5,-1.2348881160795975e-8,0.00276520491193756,1.551214917612753e-5,-1.2633083740317827e-8,0.0027654717421526196,1.5758859205074683e-5,-1.2972187445271782e-8,0.0027656573615933593,1.601108180866163e-5,-1.331966747011974e-8,0.0027657658412326984,1.623508143758839e-5,-1.3628693916074076e-8,0.0027658122315612965,1.6401336192405455e-5,-1.385824500072823e-8,0.0027658208032614435,1.64885423505343e-5,-1.397868551819702e-8,0.0027658220656359834,1.6486733828388484e-5,-1.397605157394892e-8,0.002765848891824904,1.639909794692674e-5,-1.3854513826157042e-8,0.0027659321674139512,1.6242317878778517e-5,-1.3636849548780435e-8,0.002766096303503263,1.6045369593808686e-5,-1.3362857387789591e-8,0.0027663548615603564,1.5846730676314847e-5,-1.308562701077851e-8,0.0027667064826740096,1.5689835021215877e-5,-1.2865361853446855e-8,0.002767131628491153,1.5616253392744474e-5,-1.2759959238257351e-8,0.002767591541465577,1.565613932350352e-5,-1.2811680422273687e-8,0.0027680318643640033,1.581672526418174e-5,-1.3031031172521404e-8,0.0027683935757452003,1.607229328191158e-5,-1.3382687188492964e-8,0.0027686315906423767,1.6362317419807093e-5,-1.3782849249591848e-8,0.0027687352106116232,1.660487394222258e-5,-1.4117902190796029e-8,0.002768738239820442,1.6725105080637398e-5,-1.4283993588661351e-8,0.0027687087079556953,1.6685822510540136e-5,-1.422947633870195e-8,0.0027687213527381837,1.650176304721841e-5,-1.3974559220475729e-8,0.0027688289978741332,1.622925799770131e-5,-1.3596908755438644e-8,0.002769048363398059,1.594031700512789e-5,-1.3195832869032236e-8,0.00276936337344147,1.569769408859385e-5,-1.2857958409166736e-8,0.002769738192543268,1.5541237964123733e-5,-1.2638499739393606e-8,0.002770130857577132,1.5485700596560033e-5,-1.2558236264973412e-8,0.0027705028435936804,1.5525121557837643e-5,-1.2609441752677153e-8,0.002770824104016123,1.5639139817898094e-5,-1.2764417778794309e-8,0.0027710750382562957,1.579871667179225e-5,-1.298325399628226e-8,0.002771246995946245,1.5970684935818387e-5,-1.322007185623983e-8,0.0027713422068845884,1.6121524757386047e-5,-1.3428307331702114e-8,0.0027713733059165882,1.622087961293736e-5,-1.3565689517813172e-8,0.0027713622519797507,1.6245092710609566e-5,-1.3599228831309594e-8,0.002771338258376431,1.6180665568763176e-5,-1.3510033682923686e-8,0.0027713344138243505,1.6027070557930125e-5,-1.3297175460530656e-8,0.0027713830768532144,1.579813080854103e-5,-1.2979564370243544e-8,0.0027715105782646693,1.5521323628688927e-5,-1.2595002061998987e-8,0.002771732045267941,1.5234636665673235e-5,-1.2195915802458485e-8,0.002772047301432447,1.4981007805899022e-5,-1.1841777298032802e-8,0.002772438752589332,1.4800880562158318e-5,-1.1588867502371844e-8,0.0027728720133379584,1.4723695349422957e-5,-1.1478455258934069e-8,0.0027733000270757664,1.475936384689405e-5,-1.1524829287417343e-8,0.0027736714038943994,1.4891518683271445e-5,-1.1705728640433002e-8,0.002773942949580787,1.5075513691583893e-5,-1.1959405556781578e-8,0.002774094298536084,1.5244784160866828e-5,-1.2193420369479077e-8,0.00277413935771806,1.5327642621168224e-5,-1.2308056164262575e-8,0.002774127095241945,1.5271382737278492e-5,-1.222991079233378e-8,0.002774127125267959,1.5063483024427677e-5,-1.1941373736095969e-8,0.002774204509579759,1.4737530909312808e-5,-1.1488800019336111e-8,0.0027743965548067697,1.43593324733346e-5,-1.0963210259393599e-8,0.0027747034985702353,1.4001351538615448e-5,-1.0464911437262635e-8,0.0027750951364715324,1.3719672259939094e-5,-1.007167416389651e-8,0.002775526051367617,1.3542754928601997e-5,-9.823200461899074e-9,0.0027759503581378433,1.3472044653032601e-5,-9.721903248961207e-9,0.0027763311030684443,1.3489110782461308e-5,-9.742655844025204e-9,0.0027766441055164853,1.356402503429683e-5,-9.84425800476849e-9,0.002776878237542247,1.3662175145885656e-5,-9.978801364369811e-9,0.00277703421910064,1.3749001999510627e-5,-1.0098250340897997e-8,0.002777123145672282,1.3793304300500613e-5,-1.0159108468992627e-8,0.002777165069365021,1.3769948799978488e-5,-1.012627712891473e-8,0.002777187380425079,1.366257139239754e-5,-9.976865115490197e-9,0.002777222427192686,1.3466379006569386e-5,-9.704079704233e-9,0.002777303795784524,1.3190508945819256e-5,-9.32046418862628e-9,0.0027774610887294536,1.285887005615791e-5,-8.859037531642524e-9,0.00277771379236086,1.250829794191475e-5,-8.370757335750319e-9,0.0027780656045215007,1.2183280121571277e-5,-7.917278908180143e-9,0.00277850108054271,1.1927476784055753e-5,-7.559280656595044e-9,0.002778986285044394,1.1773582658743977e-5,-7.3424319327927995e-9,0.0027794741941447932,1.1734065609188585e-5,-7.284473669250357e-9,0.0027799142794985264,1.1795451333347614e-5,-7.367127372081157e-9,0.00278026452821218,1.1918270864807826e-5,-7.535846169209884e-9,0.0027805032458643373,1.204384768123753e-5,-7.709138116829781e-9,0.0027806373209791524,1.2107676158375936e-5,-7.797171506191644e-9,0.002780703452468078,1.2057033090757864e-5,-7.726358310931846e-9,0.002780759925646668,1.186787561236933e-5,-7.46295792291357e-9,0.002780869728653987,1.155427127221588e-5,-7.026249491461181e-9,0.002781080498337681,1.1164946271353642e-5,-6.483757041896363e-9,0.002781409786732128,1.0767143875816982e-5,-5.928845847483083e-9,0.0027818421004138097,1.04248448157659e-5,-5.450501229246064e-9,0.0027823377629871307,1.0181105245430409e-5,-5.10879819574084e-9,0.002782847735319512,1.0050699713777196e-5,-4.924616944992279e-9,0.002783327243787241,1.0022856728953502e-5,-4.883325460734916e-9,0.0027837440651562097,1.0069594711575953e-5,-4.94624874966697e-9,0.0027840812269027786,1.015483206039899e-5,-5.063271670053514e-9,0.0027843360787357524,1.024152532104462e-5,-5.1827770304128115e-9,0.002784517883012557,1.0296305457586499e-5,-5.258162067166841e-9,0.0027846452783812006,1.0292292461840592e-5,-5.251838399917288e-9,0.002784744078074569,1.0211053940810853e-5,-5.138017383006263e-9,0.0027848451722726508,1.004447040455388e-5,-4.905319130341186e-9,0.002784981869337182,9.796760182050914e-6,-4.559563393831464e-9,0.0027851859388087303,9.486172936094592e-6,-4.1260871182282976e-9,0.0027854820195520776,9.145128566965864e-6,-3.649923337373014e-9,0.0027858809685050146,8.817212839408479e-6,-3.1916519447886542e-9,0.002786374004344479,8.549858663854469e-6,-2.8172810988601715e-9,0.002786930516713693,8.38311526590999e-6,-2.5826759770245543e-9,0.0027875021251903167,8.337323332657525e-6,-2.5164033042951878e-9,0.002788033442730153,8.404341144331321e-6,-2.6074358965324996e-9,0.0027884768663511967,8.546587963184419e-6,-2.8036922561923524e-9,0.002788806444515096,8.705359435428541e-6,-3.023511191011914e-9,0.002789025898946628,8.816155454370437e-6,-3.1769693624562517e-9,0.00278916808580964,8.826174280013064e-6,-3.1902919454504053e-9,0.0027892861494492062,8.708654066453408e-6,-3.0259083522581603e-9,0.002789439024007953,8.46996585135858e-6,-2.6924102085292982e-9,0.0027896754169786063,8.14743898998842e-6,-2.2415918566646356e-9,0.002790020989298804,7.798481749683577e-6,-1.7533598997337004e-9,0.0027904727105389194,7.484380983397801e-6,-1.3132102122914294e-9,0.0027910019465777094,7.254182931369871e-6,-9.89761674395551e-10,0.0027915644996498075,7.133899378245067e-6,-8.196308089392246e-10,0.002792113334641582,7.123723332179867e-6,-8.034153427098901e-10,0.0027926094573086616,7.202432983697204e-6,-9.117101623954198e-10,0.002793028233302452,7.335726174669705e-6,-1.0966748720526548e-9,0.0027933609484635524,7.4849003149403414e-6,-1.3041707157630382e-9,0.002793613109513304,7.61360949860106e-6,-1.4832721372423023e-9,0.002793801331699417,7.692125726622039e-6,-1.5923023708007069e-9,0.0027939501157332436,7.699650544928369e-6,-1.602113739190793e-9,0.0027940890449749374,7.62559574208575e-6,-1.4978805430814948e-9,0.0027942502546082484,7.47061613566804e-6,-1.2805101597583769e-9,0.002794465545354246,7.247708832349798e-6,-9.681400023267961e-10,0.0027947623730721393,6.982972729165114e-6,-5.97180208495864e-10,0.002795158293619206,6.714815163187818e-6,-2.2122179168722028e-10,0.0027956544044971682,6.489842552957791e-6,9.465788350054435e-11,0.0027962298905296608,6.353985618709735e-6,2.862426270105938e-10,0.0027968413003591638,6.339329590931643e-6,3.085594249353236e-10,0.002797430023565606,6.450574770211097e-6,1.5483829055035215e-10,0.0027979381407812233,6.657939065789282e-6,-1.33481326751483e-10,0.0027983274370340884,6.9023050870562255e-6,-4.73865860969561e-10,0.0027985929487883057,7.112534229482264e-6,-7.668664513252449e-10,0.0027987644712778367,7.227889781129287e-6,-9.274873085756629e-10,0.002798895846497114,7.215922522318092e-6,-9.102130577481535e-10,0.0027990476214502418,7.07954168609196e-6,-7.189055791823305e-10,0.002799270159329704,6.8528184660678055e-6,-4.0097058487487015e-10,0.0027995921098042825,6.589150394962895e-6,-3.089155205840986e-11,0.0028000160559371254,6.346543838175632e-6,3.10246237176008e-10,0.0028005208861621384,6.174077528739478e-6,5.536306075559972e-10,0.002801069138807742,6.102332622183427e-6,6.561508599671992e-10,0.002801616887775129,6.139228531226112e-6,6.063570042587458e-10,0.0028021235424224794,6.271340195284573e-6,4.227738196672006e-10,0.0028025593261495505,6.469448209654452e-6,1.462323628969768e-10,0.002802909202716053,6.696171451931554e-6,-1.7081556781815749e-10,0.0028031732715659992,6.913472533175175e-6,-4.748902722777455e-10,0.002803364595060627,7.088522312131387e-6,-7.198047146353163e-10,0.002803505761944061,7.197381055746142e-6,-8.718919784335805e-10,0.002803625279954858,7.226791581760613e-6,-9.125259098952547e-10,0.0028037543398572442,7.1748236665111314e-6,-8.389867042693141e-10,0.0028039239008144736,7.051055423278122e-6,-6.646711695244907e-10,0.0028041616337651505,6.8765748079719594e-6,-4.190817695600791e-10,0.0028044880974484863,6.6835013555270844e-6,-1.471822583423747e-10,0.0028049117634366405,6.5130028002482435e-6,9.333211200818222e-11,0.002805423407949294,6.410183518830969e-6,2.391581525590211e-10,0.0028059919682429956,6.414458134729057e-6,2.348761811647254e-10,0.0028065656354558507,6.545964496883274e-6,5.204916047160679e-11,0.0028070820322286597,6.792467980851788e-6,-2.923256812302114e-10,0.0028074875111325586,7.1049452709561795e-6,-7.295484999982558e-10,0.002807758398439204,7.408801568743201e-6,-1.1549479735996095e-9,0.002807912309953183,7.629016879277494e-6,-1.4632184010996237e-9,0.0028080018600268285,7.717209899264664e-6,-1.5864308892715257e-9,0.00280809416469148,7.666574793887121e-6,-1.5149558263742769e-9,0.0028082476851966315,7.509156810078956e-6,-1.293585924107478e-9,0.0028084967768828226,7.300588647517751e-6,-1.0001414868267381e-9,0.002808847262739549,7.101610708252468e-6,-7.196587372359342e-10,0.0028092805508106752,6.9632211202788204e-6,-5.236849754708002e-10,0.0028097620700029556,6.9179843415002716e-6,-4.5813084509820613e-10,0.0028102506436204987,6.977109497128568e-6,-5.3909443895529e-10,0.002810706875116468,7.1318269763759485e-6,-7.546337294862254e-10,0.002811099653827845,7.357649721019065e-6,-1.0705937383009498e-9,0.0028114103186717213,7.620360090645017e-6,-1.4389400470211245e-9,0.0028116342841793644,7.882562522965005e-6,-1.8069960493090511e-9,0.002811780336556491,8.109700436176797e-6,-2.1259981185286337e-9,0.0028118681577567702,8.274759500587497e-6,-2.3578054290919355e-9,0.002811924804212133,8.361260065829955e-6,-2.479149299892737e-9,0.002811980892546883,8.36454527445245e-6,-2.4834224476780367e-9,0.0028120670235339054,8.291786877210306e-6,-2.380638941437992e-9,0.002812210545938763,8.161235186498023e-6,-2.196355734372293e-9,0.0028124324269317093,8.000947582996757e-6,-1.9699141477060387e-9,0.0028127438794841287,7.846806856187975e-6,-1.7517213264542863e-9,0.002813142552806622,7.739137129470781e-6,-1.5985536553676695e-9,0.002813608808015108,7.716755992795095e-6,-1.5652027889490953e-9,0.002814103934259319,7.807540942446503e-6,-1.6911479779159391e-9,0.0028145735374341036,8.016337002635303e-6,-1.9834359406417603e-9,0.0028149593679730016,8.31455967856922e-6,-2.4019489267911616e-9,0.0028152192752681693,8.639495206008205e-6,-2.858393347499628e-9,0.002815347491924279,8.910155826623826e-6,-3.238690313459153e-9,0.0028153820992645705,9.056877288906372e-6,-3.444739279219633e-9,0.0028153917225959865,9.049565373279847e-6,-3.434183721829044e-9,0.0028154478006963196,8.907688181128402e-6,-3.234368005566589e-9,0.0028155987912163055,8.687766600877536e-6,-2.924641731063571e-9,0.002815858796138938,8.458997654451106e-6,-2.6021037702235526e-9,0.0028162112125574854,8.281283974367032e-6,-2.3508457347741356e-9,0.002816620244870729,8.193045999255578e-6,-2.2249439851131193e-9,0.002817043196425516,8.208464494140208e-6,-2.2446042949535775e-9,0.0028174399451113383,8.320583317078408e-6,-2.4004250119473305e-9,0.0028177788955663485,8.506869283546043e-6,-2.661052702041974e-9,0.0028180401266746525,8.735196722855205e-6,-2.9814634943747566e-9,0.002818216618208338,8.969546300902432e-6,-3.3109360361838935e-9,0.0028183139820533165,9.175233421802618e-6,-3.600466281728827e-9,0.0028183488727125663,9.323413400084446e-6,-3.809217986798757e-9,0.0028183463049050498,9.39458305470024e-6,-3.90954465122841e-9,0.0028183361606477814,9.380837778898787e-6,-3.890194719106599e-9,0.002818349263122649,9.286671155840795e-6,-3.757406772881838e-9,0.002818413492033781,9.128333531433483e-6,-3.53396419516556e-9,0.0028185502773691137,8.932029054209705e-6,-3.2566550844126667e-9,0.0028187715560268277,8.731181934898563e-6,-2.972477812164968e-9,0.0028190771735186674,8.562773878565448e-6,-2.7335615331514525e-9,0.002819452811212173,8.462515809163019e-6,-2.5904087552382515e-9,0.0028198689659859892,8.458399189389392e-6,-2.5827732791303527e-9,0.0028202823760493027,8.562461789260582e-6,-2.7279409911836136e-9,0.0028206420530898016,8.76203294867925e-6,-3.0082465413739715e-9,0.0028209016970371353,9.01428419331315e-6,-3.3633026041725225e-9,0.0028210372630595158,9.250300643214355e-6,-3.695772409602383e-9,0.0028210625026776777,9.393515552182452e-6,-3.897503770163006e-9,0.0028210309762700552,9.388841811821506e-6,-3.890735771174717e-9,0.0028210180397079793,9.227581680220804e-6,-3.6632088806019304e-9,0.002821090430482207,8.951597895319539e-6,-3.273910330543877e-9,0.002821281364602508,8.633748034245999e-6,-2.8253997402826636e-9,0.0028215841712364,8.34816387734706e-6,-2.4219756103304343e-9,0.0028219629940235817,8.147536600047868e-6,-2.1378075495426764e-9,0.0028223698510740254,8.054819543764938e-6,-2.0053439921519466e-9,0.002822758897752516,8.06627654451556e-6,-2.0195926662397562e-9,0.0028230947143213737,8.159510301354147e-6,-2.149322407764077e-9,0.0028233554406812823,8.301852148391436e-6,-2.348744115947894e-9,0.00282353282593384,8.45708600749022e-6,-2.5668892800147934e-9,0.002823630975521782,8.590367413029983e-6,-2.754534233626674e-9,0.002823664602469181,8.671985233133684e-6,-2.869577271902303e-9,0.0028236568220320374,8.680413957217215e-6,-2.881448031847007e-9,0.002823636368151626,8.604700974308771e-6,-2.77454826352887e-9,0.00282363417253053,8.446003171394267e-6,-2.55042869198829e-9,0.0028236793809163405,8.217892940976991e-6,-2.2281801649158934e-9,0.0028237951897224314,7.945063459574405e-6,-1.8425677017566835e-9,0.0028239951055245996,7.660380146708828e-6,-1.4398777251617586e-9,0.0028242801645024245,7.40050743300998e-6,-1.0718072754261351e-9,0.0028246375107151937,7.200455492493439e-6,-7.878393942073073e-10,0.002825040666646605,7.087470503711195e-6,-6.266431600801484e-10,0.002825451877475943,7.074723084324243e-6,-6.071044899922806e-10,0.00282582713879414,7.155466286875476e-6,-7.199525343266866e-10,0.0028261246005233435,7.299190176080726e-6,-9.222045847808211e-10,0.00282631625064073,7.452589468357933e-6,-1.138486076576167e-9,0.002826400528199012,7.5487591099507736e-6,-1.2740885116638722e-9,0.002826410104662908,7.52604944408374e-6,-1.2417419852670848e-9,0.0028264072933222306,7.3519489307029926e-6,-9.95445629992879e-10,0.002826464019776748,7.0400481913062265e-6,-5.543990372405558e-10,0.0028266339859106117,6.6478080126638315e-6,2.5428477574195166e-13,0.002826932486316038,6.254009951919073e-6,5.573195548555597e-10,0.002827334926475173,5.928910433440534e-6,1.017639188279871e-9,0.0028277917797869642,5.7135131054699254E-06,1.3232757200131534e-9,0.002828248468891538,5.614983691413445e-6,1.4639603114758254e-9,0.0028286601533812237,5.614073569452187e-6,1.4666632447107474e-9,0.0028289983913868215,5.676607424183315e-6,1.379463686399024e-9,0.002829251626940915,5.763552361016194e-6,1.257411163440545e-9,0.0028294226533315623,5.8378051497912814e-6,1.1529709034080448e-9,0.002829525391442807,5.868127420486881e-6,1.1104318965864509e-9,0.002829581983388046,5.831461400637911e-6,1.162556397104102e-9,0.0028296201636700017,5.714584370675174e-6,1.3281613329217984e-9,0.0028296704970861516,5.515438234757098e-6,1.610201352537694e-9,0.0028297631021037386,5.243980536622576e-6,1.9945855887171813e-9,0.0028299236827314406,4.922012339098648e-6,2.4504737826893106e-9,0.0028301691569658544,4.581263003820374e-6,2.933023335426697e-9,0.0028305037217332307,4.259296600010102e-6,3.3891673170969797e-9,0.002830916459461489,3.993408191619676e-6,3.766190530193445e-9,0.0028313814792820546,3.8133369601973606e-6,4.021977064794002e-9,0.0028318611572783646,3.7341893056990802e-6,4.135010647324168e-9,0.0028323123871055148,3.7511839643312496e-6,4.1118687449955575e-9,0.002832695135207755,3.837639289960757e-6,3.990171251095755e-9,0.0028329821184355144,3.947374265896908e-6,3.835263147375323e-9,0.0028331678013638183,4.02244680576321e-6,3.7292680413861366e-9,0.002833273994081028,4.0063226672806816e-6,3.752376733977591e-9,0.0028333486086335536,3.8605677828823e-6,3.959124752584863e-9,0.0028334548656437477,3.5800588386143807e-6,4.356815088093346e-9,0.0028336519146150165,3.199196575199989e-6,4.896744085319297e-9,0.002833973775156948,2.7832242943678695e-6,5.486528461109836e-9,0.002834417043797699,2.4062456980927005e-6,6.021220646396547e-9,0.002834944056387233,2.1262318186002894e-6,6.418661302859258e-9,0.0028354988875670265,1.969203084860813e-6,6.641874660667108e-9,0.0028360266300474844,1.927913656213458e-6,6.70098348403756e-9,0.0028364871221820765,1.971420933258333e-6,6.639725869469694e-9,0.0028368601012207684,2.0580493155069e-6,6.517137481949485e-9,0.002837143798391918,2.146084523307919e-6,6.392404569592256e-9,0.0028373505649315713,2.200262702481213e-6,6.315634711039505e-9,0.0028375022225614853,2.194747581939334e-6,6.323580516384682e-9,0.002837626278744532,2.1141632193792574e-6,6.438118184879123e-9,0.002837752983195648,1.9539503821470446e-6,6.665710573780227e-9,0.002837912672316925,1.720635357079953e-6,6.997035491702147e-9,0.0028381327625960472,1.4319563558805509e-6,7.406851308263388e-9,0.0028384339774149996,1.1162175023410766e-6,7.85496469067567e-9,0.0028388259645027686,8.098741102245192e-7,8.289678744088075e-9,0.0028393032769971362,5.525056854996284e-7,8.654901931555912e-9,0.002839843390194472,3.791424868007549e-7,8.900980702450035e-9,0.0028404085467517684,3.1124743347196077e-7,8.997452128487504e-9,0.002840952357445899,3.4901622113740223e-7,8.943973785765355e-9,0.002841430295633725,4.68119085106208e-7,8.775000509935415e-9,0.0028418113735728568,6.229385663401742e-7,8.555251582211405e-9,0.0028420874546643236,7.562180083845292e-7,8.366042862071104e-9,0.002842277186103206,8.12928826496597e-7,8.28557717186452e-9,0.0028424229792514757,7.548341939316745e-7,8.368220742089385e-9,0.0028425812098529235,5.718152359385369e-7,8.628388634888865e-9,0.002842807562695609,2.864119988032696e-7,9.034090564959052e-9,0.0028431411958904427,-5.075784686922267e-8,9.513435790152513e-9,0.002843592795816794,-3.745954342178899e-7,9.973922781259542e-9,0.00284414136383234,-6.243541079214667e-7,1.0329162879331443e-8,0.0028447415293055118,-7.608178796241404e-7,1.0523290713005752e-8,0.0028453383289325533,-7.7516339165713e-7,1.0543619193061516e-8,0.0028458829874018483,-6.870431643594794e-7,1.0418002465363624e-8,0.002846343745861855,-5.347045473568402e-7,1.0200845400060194e-8,0.002846709393672464,-3.626758819940621e-7,9.955588339874181e-9,0.0028469868913886353,-2.1168976993434465e-7,9.740321417669294e-9,0.0028471961486281772,-1.1277953739782726e-7,9.5993194186896e-9,0.002847364587199702,-8.507667609072321e-8,9.559858106078426e-9,0.0028475227795878447,-1.357926730672906e-7,9.63217247842041e-9,0.0028477012760148397,-2.6098770439544055e-7,9.810568108142715e-9,0.0028479280799226956,-4.4634904759132186e-7,1.0074568307647262e-8,0.002848226026012085,-6.678989044547163e-7,1.038996413878128e-8,0.002848609485491815,-8.932110104100397e-7,1.0710570698878495e-8,0.0028490803883028048,-1.08421348997412e-6,1.0982211998329638e-8,0.0028496244808374053,-1.2027066912850638e-6,1.1150545368581883e-8,0.0028502098087099434,-1.2189535497820264e-6,1.117325646547346e-8,0.0028507899812964224,-1.1218694346857707e-6,1.1034558640475975e-8,0.0028513137786630493,-9.269848437980516e-7,1.0756559639854864e-8,0.0028517396184371633,-6.772541783626091e-7,1.040045521595228e-8,0.002852049745857075,-4.3383629160081065e-7,1.0053410747715433e-8,0.002852257667938162,-2.588555502582333e-7,9.80397507841194e-9,0.0028524050176591494,-1.966808876808624e-7,9.715373390453078e-9,0.002852549088431962,-2.610733914805113e-7,9.807193562515353e-9,0.002852746181827145,-4.3236107396414083e-7,1.0051389365553414e-8,0.002853036583500799,-6.643300296990387e-7,1.0382115635541902e-8,0.0028534351813685878,-8.975086395893872e-7,1.0714629219647167e-8,0.002853929365115319,-1.0745790729053187e-6,1.096719853065988e-8,0.0028544839144717562,-1.1539281212368752e-6,1.1080391616891132e-8,0.002855051068247713,-1.1181731669905117e-6,1.1029268499031812e-8,0.002855582768565016,-9.75875355579879e-7,1.0825912624788529e-8,0.0028560415652221956,-7.566392276976092e-7,1.051252610395587e-8,0.0028564073406055135,-5.018534207721013e-7,1.0148247915315251e-8,0.002856678785926064,-2.5444286344771827e-7,9.794490668368394e-9,0.002856870524742683,-5.058886026101649e-8,9.503046426891806e-9,0.002857007914873242,8.512852095070961e-8,9.30908662963937e-9,0.0028571215454132087,1.412895044493818e-7,9.22891211852966e-9,0.002857242681589101,1.1896856287060092e-7,9.260923881079643e-9,0.0028573999738171854,3.009713316077348e-8,9.38800232202608e-9,0.0028576170512156747,-1.0428600410014353e-7,9.580041432918065e-9,0.002857910332403342,-2.5568229132032263e-7,9.796312889070212e-9,0.002858286478980994,-3.900984786692505e-7,9.988259642955946e-9,0.002858739364701392,-4.712582429285285e-7,1.0104059717794627e-8,0.00285924729195101,-4.661759280679692e-7,1.0096572400747676e-8,0.002859772355326098,-3.5361998523694726e-7,9.935435750221926e-9,0.0028602647405304277,-1.3415193562808552e-7,9.621442048735044e-9,0.0028606740590430527,1.6248167838119398e-7,9.197139078236257e-9,0.0028609662384943444,4.78853899398024e-7,8.74468806781909e-9,0.002861139063409164,7.44255750862787e-7,8.365236229068475e-9,0.002861226934688806,8.984655386532225e-7,8.144871394043985e-9,0.002861290126468282,9.137233591571715e-7,8.123196247026203e-9,0.0028613933351704225,8.035260371148903e-7,8.280824203979028e-9,0.002861584483698411,6.150660520729815e-7,8.55027050948895e-9,0.0028618827041504077,4.113854839993796e-7,8.841474477305177e-9,0.0028622775767180642,2.524378755512151e-7,9.068802254899132e-9,0.0028627363987564036,1.8135003911035153e-7,9.17060221962431e-9,0.0028632149243848224,2.1781405590917407e-7,9.118624569170666e-9,0.002863668101326738,3.577669060595684e-7,8.918529212376947e-9,0.0028640588395250108,5.775725882547501e-7,8.603998240368662e-9,0.002864363874395403,8.409557603452859e-7,8.226895323903023e-9,0.002864576317683268,1.1070964706719793e-6,7.845700967819764e-9,0.0028647049562361203,1.3383042800297684e-6,7.514484405755572e-9,0.0028647709664122996,1.505912805444349e-6,7.274393180785887e-9,0.0028648031644739605,1.5936658590036488e-6,7.148753085068565e-9,0.0028648329825001757,1.5985844872876452e-6,7.141820831205116e-9,0.0028648901078107145,1.5298597346848266e-6,7.240401923975936e-9,0.0028649992237887115,1.40662889791498e-6,7.417073022953166e-9,0.002865177723667968,1.255395999935133e-6,7.63388684017037e-9,0.002865433962330402,1.1074017364182093e-6,7.84611558047985e-9,0.0028657656359532793,9.9575507730559e-7,8.006322067477023e-9,0.002866158158739561,9.517297115380463e-7,8.069644697438206e-9,0.0028665835690910722,9.99411061201828e-7,8.001485323787432e-9,0.0028670015032235038,1.1483302317519537e-6,7.788115041184415e-9,0.002867364559705957,1.3852827350377053e-6,7.448455109494122e-9,0.0028676299233594852,1.6691386030128764e-6,7.041536345565719e-9,0.0028677759678411305,1.9347439744128324e-6,6.660862146080923e-9,0.0028678167309223023,2.1103546939003207e-6,6.409323306547407e-9,0.0028678034788689843,2.144698261273195e-6,6.3603400593137696e-9,0.0028678078376921227,2.029720577821034e-6,6.525302617003996e-9,0.0028678938191672595,1.8044434865642015e-6,6.8481776203151215e-9,0.002868094666236441,1.5376263800915127e-6,7.230454856236507e-9,0.002868405913933894,1.3009574329347206e-6,7.569539411050057e-9,0.0028687938676968555,1.1474463535309566e-6,7.789602788927635e-9,0.002869210861589051,1.1019524188615657e-6,7.855057338570128e-9,0.002869609334325944,1.1622461307956396e-6,7.769013139741857e-9,0.002869951231852881,1.3057241037395412e-6,7.563711223382599e-9,0.002870212677215331,1.4976923875705954e-6,7.288744102079043e-9,0.002870385194690064,1.699062535904297e-6,7.000097817318875e-9,0.002870474725317542,1.8727935944983242e-6,6.75093165594071e-9,0.002870499135165648,1.988954290042755e-6,6.584275013804583e-9,0.00287048464138741,2.0282382639665136e-6,6.527917653518532e-9,0.0028704616140799583,1.9837809533528225e-6,6.5917562221991524E-09,0.0028704602549171655,1.8612665906276216e-6,6.767640226165102e-9,0.002870506668811975,1.6774673462495774e-6,7.031500508441279e-9,0.0028706197689758587,1.457604560662817e-6,7.34716419913411e-9,0.0028708091655566463,1.2320673332684813e-6,7.671058717135242e-9,0.0028710739127016565,1.0328358362055718e-6,7.957305852913069e-9,0.0028714019528153388,8.896734068155328e-7,8.163146833604354e-9,0.0028717702214416355,8.259448522978371e-7,8.254940922690583e-9,0.0028721457505871515,8.537612288983449e-7,8.215181934479207e-9,0.0028724887943640687,9.684630238408015e-7,8.050494120702066e-9,0.0028727594429303256,1.1436800035455436e-6,7.798780069504199e-9,0.0028729285817180555,1.3300651297795598e-6,7.531028042365649e-9,0.0028729915695690435,1.462263368762386e-6,7.341218977444032e-9,0.002872978448805743,1.4772429274966988e-6,7.3198920236120235e-9,0.002872951252863827,1.339998687991839e-6,7.517195289934864e-9,0.0028729836176172785,1.0630678713911078e-6,7.914951705548082e-9,0.0028731308183241877,7.051695488262558e-7,8.42876029911416e-9,0.0028734078884947605,3.473260311513201e-7,8.942348496380804e-9,0.0028737882087745852,6.114666054513867e-8,9.353047158655345e-9,0.002874219668384876,-1.1272126322969022e-7,9.602619303010073e-9,0.0028746456433421104,-1.6888577001482716e-7,9.683354937474298e-9,0.002875020314855133,-1.291094150016922e-7,9.626438926383505e-9,0.00287531548780091,-3.018828501717634e-8,9.484597230108128e-9,0.0028755210579180877,8.668647485398011e-8,9.31689120875924e-9,0.0028756422882183752,1.8328829012502568e-7,9.178200849892443e-9,0.002875696134402279,2.288312141503027e-7,9.112800066087184e-9,0.002875707547399061,2.025805089596482e-7,9.150562494597015e-9,0.002875705846174958,9.52630333672185e-8,9.304873938120105e-9,0.0028757210926035038,-9.052120703341189e-8,9.57200496741452e-9,0.0028757804866157105,-3.4091383411167794e-7,9.932003851136088e-9,0.002875904942563708,-6.325855214179894e-7,1.035130470799866e-8,0.0028761062305016523,-9.357358663929467e-7,1.0787070613173603e-8,0.002876385114451254,-1.2180331505464313e-6,1.1192851470911072e-8,0.002876730724811969,-1.4490859095561661e-6,1.1524975361779462e-8,0.002877121258656621,-1.6050876840491572e-6,1.174919121731711e-8,0.002877526072604426,-1.6732673197605107e-6,1.1847070930135468e-8,0.0028779092664162932,-1.6557908710847165e-6,1.1821668584018685e-8,0.0028782350578963945,-1.5726563757144414e-6,1.1701746720225946e-8,0.002878475324870978,-1.4624372605699738e-6,1.1542873713258664e-8,0.0028786189483200725,-1.3787231489666856e-6,1.1422265207849368e-8,0.002878680701003052,-1.3798468481290254e-6,1.1423915368175761e-8,0.002878704787159146,-1.5113471987390404e-6,1.1613291349036044e-8,0.002878756903957089,-1.785757177929549e-6,1.2008265758302951e-8,0.002878902862502164,-2.1705939820080316e-6,1.2561939708202041e-8,0.0028791817969540797,-2.5954920375929927e-6,1.3173007501556022e-8,0.002879589402551466,-2.9784185508799e-6,1.3723483959784089e-8,0.0028800817252932734,-3.2567032182663314e-6,1.4123284543802338e-8,0.0028805956227206074,-3.4055518723271702e-6,1.4336808076009957e-8,0.00288107208392016,-3.4376003397330977e-6,1.4382284035630344e-8,0.0028814710783001875,-3.3898579305011365e-6,1.43129954824349e-8,0.0028817755563885373,-3.3082580675083343e-6,1.4195060433588716e-8,0.002881988308033612,-3.2361154678533363e-6,1.4090836012607044e-8,0.0028821262129773463,-3.207791533507497e-6,1.4049812193983022e-8,0.0028822147082530657,-3.246215519180097e-6,1.4105033781258338e-8,0.0028822834027905776,-3.36241780936278e-6,1.4272395487930903e-8,0.002882362616150177,-3.5558741422002764e-6,1.4551103140709693e-8,0.0028824803465096684,-3.815258525621979e-6,1.4924750790070064e-8,0.002882659335415783,-4.119686711663455e-6,1.5363142882474208e-8,0.0028829141547347752,-4.440809412356523e-6,1.5825359058537653e-8,0.0028832486380844327,-4.746136382797398e-6,1.626457640078978e-8,0.0028836543274357697,-5.003595714935634e-6,1.6634632356475022e-8,0.0028841105948802857,-5.186858658952929e-6,1.6897660746955784e-8,0.0028845868380229104,-5.280659678729527e-6,1.703172244416492e-8,0.0028850468268388713,-5.285119178421869e-6,1.703703042675255e-8,0.0028854548808014517,-5.2180136555174015e-6,1.693924927655556e-8,0.00288578318588404,-5.1141539701945615e-6,1.678862920440044e-8,0.0028860192930803964,-5.021207939658294e-6,1.6653980349342108e-8,0.0028861723562649236,-4.991365507388845e-6,1.6610608238690897e-8,0.0028862757956466495,-5.06888921218822e-6,1.6722303008240677e-8,0.0028863833910300974,-5.2754810860775145e-6,1.7020219754766915e-8,0.002886556622110814,-5.598336802918629e-6,1.7485702072118628e-8,0.0028868448006271175,-5.988001271290007e-6,1.804727106737048e-8,0.0028872654738177545,-6.371171534302883e-6,1.8599132347397268e-8,0.002887795844354059,-6.675623117016277e-6,1.903710691825924e-8,0.0028883812762736244,-6.855447025490349e-6,1.9295003604406827e-8,0.0028889563468819752,-6.903610854021034e-6,1.9362747686658358e-8,0.0028894665800328696,-6.847559620219423e-6,1.9280059028761153e-8,0.0028898810668172878,-6.734011844686922e-6,1.911450684067196e-8,0.0028901940052642504,-6.612662324206851e-6,1.893795127279494e-8,0.0028904191547270935,-6.524988204859821e-6,1.881034874825922e-8,0.002890582222841485,-6.4992181867616665e-6,1.8772471855239283e-8,0.0028907142743236822,-6.549601240706169e-6,1.8844849350322546e-8,0.0028908470537224477,-6.677663335062472e-6,1.9029580088897277e-8,0.0028910098168515577,-6.87394958687946e-6,1.9312855656179486e-8,0.0028912269035187145,-7.1197167658875545e-6,1.966742957177217e-8,0.0028915154465618195,-7.388703555439692e-6,2.0055217248474415e-8,0.002891882983346302,-7.649501334948221e-6,2.0430764834169687e-8,0.002892325261621495,-7.869140909601243e-6,2.0746451553512368e-8,0.002892825069667161,-8.018140622490618e-6,2.095977025193972e-8,0.0028933531569161294,-8.0765493987099e-6,2.1042023401707183e-8,0.0028938720607829473,-8.039749741569616e-6,2.0986676926427616e-8,0.002894342905333149,-7.92219781746215e-6,2.081475472290096e-8,0.0028947341280570267,-7.757261613370963e-6,2.0574609101836252e-8,0.0028950300744023127,-7.592178937176516e-6,2.033462657209387e-8,0.0028952370056188714,-7.47855706718128e-6,2.0169463592427875e-8,0.0028953844081573035,-7.460137255342665e-6,2.0142316838205095e-8,0.00289552034348127,-7.560525475110968e-6,2.0287169809216575e-8,0.0028957008077851775,-7.774273461944861e-6,2.0595931401456922e-8,0.0028959747760086865,-8.06484752748952e-6,2.1015565228355683e-8,0.0028963687909720668,-8.37202856618837e-6,2.1458840848969644e-8,0.002896876822197008,-8.628384556733143e-6,2.1828161536226112e-8,0.002897460687328443,-8.779917072525279e-6,2.2045408873836965e-8,0.0028980621551318326,-8.802502597728348e-6,2.207573173944743e-8,0.002898621746734977,-8.706920074860234e-6,2.1934852495291796e-8,0.0028990957821008693,-8.531279911183452e-6,2.1678125082780306e-8,0.002899465167343782,-8.326114196731398e-6,2.137891611386844e-8,0.0028997348041497496,-8.13959047569529e-6,2.110712912790612e-8,0.002899926963249216,-8.007836040779991e-6,2.091513975889782e-8,0.002900073067994656,-7.951291908204955e-6,2.0832502054918495e-8,0.002900206831484279,-7.975306429587075e-6,2.0866828269500727e-8,0.002900359629928538,-8.072622529241776e-6,2.1007425546019428e-8,0.0029005576921144888,-8.226159990315293e-6,2.1229360644075667e-8,0.0029008202589749987,-8.411462892954981e-6,2.1497037476612273e-8,0.0029011579526491515,-8.59892006014462e-6,2.176744153154923e-8,0.0029015709907129882,-8.756361710375036e-6,2.1993920303424827e-8,0.002902047505571332,-8.85279154909494e-6,2.2131593765595492e-8,0.0029025628872768883,-8.863671727157463e-6,2.2145000075912374e-8,0.0029030815052825793,-8.777345014016352e-6,2.2017385091665053e-8,0.0029035620496829224,-8.600986341434939e-6,2.175931513310784e-8,0.002903966637114285,-8.363362576374002e-6,2.141266869690318e-8,0.0029042717781266334,-8.111634884846253e-6,2.1045980547935134e-8,0.002904477372654277,-7.901280532790563e-6,2.073978444425112e-8,0.002904609628244343,-7.781372369153714e-6,2.0565217145761693e-8,0.002904715791276944,-7.780057503835996e-6,2.056294239996993e-8,0.0029048518634546975,-7.895457374774159e-6,2.0729997122619613e-8,0.0029050672122561154,-8.095212921731798e-6,2.1019213111936452e-8,0.0029053908949938285,-8.324795261790677e-6,2.1351336711916632e-8,0.002905823673533291,-8.52201545814966e-6,2.1636089845854755e-8,0.0029063379482547036,-8.63355664871243e-6,2.1796127132877224e-8,0.00290688567731947,-8.628754999473182e-6,2.178700899956975e-8,0.002907411886688896,-8.506448804640417e-6,2.1607149038605026e-8,0.002907869313118284,-8.29292031099503e-6,2.1294847433827952e-8,0.002908229337953015,-8.032291094367549e-6,2.0914343210019756e-8,0.002908486197412823,-7.773494661513888e-6,2.0536855496935417e-8,0.0029086544808403334,-7.5585686559262325e-6,2.0223523711567358e-8,0.0029087623904295403,-7.415402414785589e-6,2.001484051067057e-8,0.002908843981353781,-7.35553482324306e-6,1.9927459583560743e-8,0.002908932726752054,-7.375649943051864e-6,1.9956406208574644e-8,0.0029090572536835126,-7.460809532075294e-6,2.0079817615799907e-8,0.002909238952715364,-7.5879228762615555e-6,2.0264014865399943e-8,0.0029094906884145105,-7.728775534689363e-6,2.0467914700593435e-8,0.0029098158523242937,-7.852662044244406e-6,2.064685157630933e-8,0.002910207338650096,-7.929175550194102e-6,2.0756624253538985e-8,0.0029106466203267355,-7.931911576665453e-6,2.0758877958416994e-8,0.002911103814377557,-7.843588459108618e-6,2.062855490190973e-8,0.0029115402023730556,-7.66224497593975e-6,2.0362916420013977e-8,0.002911914696322001,-7.406730952055019e-6,1.998953139422466e-8,0.0029121945161994208,-7.118129171687856e-6,1.9568325801371748e-8,0.0029123675377467186,-6.853478439441242e-6,1.918239985768633e-8,0.002912450734123804,-6.670885447814342e-6,1.8916298524169225e-8,0.002912488859188778,-6.610394269086291e-6,1.88281387438807e-8,0.0029125417695362995,-6.679120462312963e-6,1.8928018749465943e-8,0.0029126652147423104,-6.848070988212437e-6,1.9173497757355166e-8,0.0029128935517388484,-7.061935206702308e-6,1.9483944368025575e-8,0.002913231037578079,-7.256695642236208e-6,1.9766193972595816e-8,0.0029136533209005457,-7.377571585707302e-6,1.9940619511564884e-8,0.0029141165252539614,-7.391701575272796e-6,1.9959524190801965e-8,0.0029145697689046887,-7.293322714917477e-6,1.981463990082668e-8,0.0029149673788549375,-7.1018310443380406e-6,1.953430007430907e-8,0.002915278149714961,-6.8545563898393026e-6,1.9172935518929185e-8,0.002915490151865234,-6.596725101954491e-6,1.8796465187354656e-8,0.0029156107375936115,-6.371248850546456e-6,1.846741356078346e-8,0.002915662539790091,-6.210673245514143e-6,1.8233164243708407e-8,0.0029156771594396804,-6.1327104522359935e-6,1.8119444504375368e-8,0.002915688499493966,-6.139498762978267e-6,1.812926086634637e-8,0.0029157272510905927,-6.219687203803143e-6,1.824596696099231e-8,0.0029158172217261446,-6.3520114728173305e-6,1.843850247261238e-8,0.002915973412501954,-6.5091582694995025e-6,1.8667034188020637e-8,0.0029162012640837876,-6.6612268782975755e-6,1.888798608393158e-8,0.0029164964235661433,-6.778735787311186e-6,1.9058396783844645e-8,0.002916844658644618,-6.835584702079287e-6,1.91402221340199e-8,0.0029172220097263466,-6.812552966048134e-6,1.910544630322981e-8,0.002917595884444303,-6.7017614420562816e-6,1.8942618913472558e-8,0.002917928412307093,-6.511815863831633e-6,1.8664385893287575e-8,0.00291818347875855,-6.2719153866716e-6,1.8313480562819844e-8,0.002918337682433519,-6.031490122748525e-6,1.7962147335797165e-8,0.002918392453911434,-5.8514246809711895e-6,1.7699255420367632e-8,0.0029183808220965175,-5.785913109725185e-6,1.760375851831056e-8,0.002918361694896576,-5.860827931022856e-6,1.7713146738291097e-8,0.0029184005478205227,-6.060277614749884e-6,1.8003943123245615e-8,0.0029185450818061424,-6.330635628385983e-6,1.8397723097046376e-8,0.002918808813042895,-6.6005652769916755e-6,1.8790403319492904e-8,0.002919169951357401,-6.805733183674234e-6,1.908827114831872e-8,0.0029195829508730235,-6.906435273516535e-6,1.92336174657321e-8,0.002919994648581057,-6.893430674434389e-6,1.9213166424777753e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json deleted file mode 100644 index 7805bb3..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_2.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":2000,"numberOfSamples":1000,"samples":[-0.0019226433452019043,-4.2400202047522655e-5,-4.847209139509104e-8,-0.0019224915279308452,-4.232138293995991e-5,-4.839917575682174e-8,-0.0019223575599970867,-4.2339533342532786e-5,-4.841941987929699e-8,-0.0019221925201880694,-4.2455757141232014e-5,-4.853500256368106e-8,-0.0019219535221161883,-4.264378690983704e-5,-4.87214377132331e-8,-0.0019216173050324704,-4.285653639574512e-5,-4.893368444013015e-8,-0.0019211878632388768,-4.304035090341533e-5,-4.911986351109583e-8,-0.0019206944269591652,-4.3151566455827686e-5,-4.923733483565604e-8,-0.001920180782153211,-4.316840557061996e-5,-4.9264336921476375e-8,-0.0019196912154135558,-4.3093903838697776e-5,-4.920299044056076e-8,-0.001919259170950511,-4.2950548434361e-5,-4.9074301884897993e-8,-0.0019189019210674083,-4.277089886837732e-5,-4.8909249976046343e-8,-0.0019186208521778832,-4.258868047478004e-5,-4.8740241599705884e-8,-0.001918404926768647,-4.243272605567538e-5,-4.859521792579728e-8,-0.0019182349450095773,-4.2323928794774185e-5,-4.849461482060666e-8,-0.0019180872700253946,-4.2274266862589164E-05,-4.8450338629402915e-8,-0.001917936666180632,-4.228680533004299e-5,-4.846574052979398e-8,-0.00191775854316843,-4.2355896173164964e-5,-4.8535824807684226e-8,-0.0019175311877270766,-4.246735024004276e-5,-4.864742159638906e-8,-0.0019172384671460499,-4.25989290061144e-5,-4.877961167038227e-8,-0.0019168730864799963,-4.2721876682799584e-5,-4.890508625070886e-8,-0.0019164398837302117,-4.280432151427329e-5,-4.8993279677066866e-8,-0.0019159579014177714,-4.281706315274191e-5,-4.901583883335078e-8,-0.0019154594243000278,-4.27412144250086e-5,-4.8953968414289994e-8,-0.001914984557283099,-4.2575562469439085e-5,-4.880561552483321e-8,-0.0019145716125768752,-4.234039279521026e-5,-4.858934382627422e-8,-0.0019142459086730812,-4.207501807745824e-5,-4.834220694952108e-8,-0.0019140111182697102,-4.1828569489815494e-5,-4.811113500434928e-8,-0.0019138468399848853,-4.1646650455964184e-5,-4.794024685992306e-8,-0.0019137136475314569,-4.155842585264431e-5,-4.785840090516636e-8,-0.0019135639168575628,-4.156847538008292e-5,-4.787112479174571e-8,-0.001913354878178476,-4.165575436672902e-5,-4.795925785880041e-8,-0.001913060039736298,-4.1779660100407035e-5,-4.808445425303678e-8,-0.0019126758326174886,-4.189128905126362e-5,-4.8199834042895305e-8,-0.0019122216639617473,-4.194655693717889e-5,-4.8262624541360104e-8,-0.0019117335388331718,-4.191721880810053e-5,-4.8244930247959284e-8,-0.0019112535774869718,-4.17965282482666e-5,-4.8139407883790543e-8,-0.0019108191058004997,-4.159831661316574e-5,-4.795859671838348e-8,-0.001910454761111615,-4.13507805095086e-5,-4.7729094163578805e-8,-0.0019101693588310655,-4.108797784158734e-5,-4.74834365018481e-8,-0.0019099571113809235,-4.084210928294797e-5,-4.725264424568893e-8,-0.0019098014051956349,-4.06383521782112e-5,-4.706116300989979e-8,-0.001909679232807439,-4.049244367589526e-5,-4.6924445600308274e-8,-0.0019095650792493577,-4.041027304587661e-5,-4.684851156054176e-8,-0.0019094338706790138,-4.038850509596943e-5,-4.6830551880131895e-8,-0.0019092631960406178,-4.041545998091156e-5,-4.685979719885473e-8,-0.0019090353342274217,-4.0471961726856714e-5,-4.691831881589462e-8,-0.0019087395911655302,-4.053242839868951e-5,-4.698199191766588e-8,-0.0019083750969175394,-4.0566889485238066e-5,-4.7022295836454817e-8,-0.0019079535950202848,-4.05448090409642e-5,-4.7009857068801336e-8,-0.0019075008929219535,-4.0441352326518995e-5,-4.692041592595363e-8,-0.0019070548602137859,-4.024557340002766e-5,-4.674274417153859e-8,-0.0019066581194424014,-3.996789525520936e-5,-4.648596905336088e-8,-0.0019063458229643833,-3.964246667720178e-5,-4.618202616974119e-8,-0.001906132593687367,-3.932066250072738e-5,-4.5879631296205274e-8,-0.001906005112413036,-3.9056140911694693e-5,-4.563013841888741e-8,-0.0019059250849624966,-3.888725831245831e-5,-4.547077730150599e-8,-0.0019058418160187416,-3.882488208844757e-5,-4.541289156609024e-8,-0.0019057084893034362,-3.885058262649113e-5,-4.5439933455113804e-8,-0.0019054953071705263,-3.892448678948119e-5,-4.551462448108332e-8,-0.0019051956015066044,-3.899818092129441e-5,-4.559102248754266e-8,-0.001904824751066378,-3.902764552633575e-5,-4.562680789434229e-8,-0.0019044139453100216,-3.898286178877979e-5,-4.5592592314242095e-8,-0.0019040014133682513,-3.8852641286461894e-5,-4.547679044559279e-8,-0.0019036234930003598,-3.864464423892581e-5,-4.5285911009026024e-8,-0.0019033074182967,-3.838144973804248e-5,-4.504099501526467e-8,-0.0019030670807785748,-3.809414814477403e-5,-4.477156044224583e-8,-0.0019029021776647626,-3.7815292683842436e-5,-4.4508817510060506e-8,-0.001902800227035411,-3.757290803529455e-5,-4.427982585191298e-8,-0.0019027403062597105,-3.738655521525043e-5,-4.410361508352597e-8,-0.0019026972766109718,-3.726562021454014e-5,-4.3989482282936625e-8,-0.0019026455605967178,-3.720939282853564e-5,-4.393706825168861e-8,-0.001902562049494492,-3.720819681311018e-5,-4.393747898583925e-8,-0.0019024282429587474,-3.7244887169539354e-5,-4.397474157144386e-8,-0.0019022320167928473,-3.7296417780327447e-5,-4.402726172840666e-8,-0.0019019694121183246,-3.733563521997301e-5,-4.406942025345132e-8,-0.0019016466101295054,-3.7333817380047615e-5,-4.4073850286943826e-8,-0.001901281721675244,-3.72647279533573e-5,-4.401521158739995e-8,-0.0019009051492186858,-3.7110772537172744e-5,-4.387608872624823e-8,-0.0019005564761927897,-3.687070357499274e-5,-4.365449081610721e-8,-0.0019002760006965934,-3.656614621766662e-5,-4.3370288285066725e-8,-0.0019000913323042824,-3.624205466668279e-5,-4.306583828633659e-8,-0.0019000039601944792,-3.5956706816941076e-5,-4.279656932567122e-8,-0.0018999840816792122,-3.576226105855051e-5,-4.261250079410351e-8,-0.0018999792883793371,-3.568461104514584e-5,-4.253901137884262e-8,-0.001899933981398471,-3.5713853399087564e-5,-4.2567602344540055e-8,-0.0018998090711157681,-3.581022732657273e-5,-4.266128735242672e-8,-0.0018995924498515157,-3.5920529128532807E-05,-4.27699363285063e-8,-0.0018992979805863262,-3.599552540735251e-5,-4.284667515898346e-8,-0.001898956996465333,-3.60016505232314e-5,-4.2859033641491364e-8,-0.0018986077115788766,-3.5925404995038095e-5,-4.2793327231141533e-8,-0.0018982861274868695,-3.5772115322624845e-5,-4.2653762704726326e-8,-0.0018980197803509253,-3.556151123416992e-5,-4.245848237196928e-8,-0.0018978243192027849,-3.532201505409536e-5,-4.2234258129154944e-8,-0.0018977025183165013,-3.5084842908056075e-5,-4.201085903922587e-8,-0.001897645338891351,-3.487865622253372e-5,-4.181584089370757e-8,-0.001897634548299051,-3.472539749417785e-5,-4.1670438822720854e-8,-0.0018976462592206278,-3.4637684651986404E-05,-4.158699002545304e-8,-0.0018976547528813345,-3.461783260192269e-5,-4.156798431104482e-8,-0.0018976360025567379,-3.465835456450116e-5,-4.160658512785339e-8,-0.0018975704668702292,-3.474353699435762e-5,-4.168818028849286e-8,-0.0018974450856599756,-3.485154582856132e-5,-4.179238643199875e-8,-0.0018972547032642363,-3.4956750270050015e-5,-4.189517808310863e-8,-0.0018970031462578617,-3.5032293373468896e-5,-4.1971187462921197e-8,-0.001896704041121835,-3.5053177068163955e-5,-4.199649895495414e-8,-0.0018963811064912409,-3.500033872352196e-5,-4.195247884233675e-8,-0.0018960669388229457,-3.486606242620335e-5,-4.183101890714069e-8,-0.0018957986732221059,-3.466005594878666e-5,-4.1640536726904226e-8,-0.0018956091571617987,-3.441367338006517e-5,-4.141024300465335e-8,-0.0018955143084655717,-3.417789714991304e-5,-4.11883959487616e-8,-0.0018955015199407235,-3.401103934461799e-5,-4.103064766105313e-8,-0.0018955276091062383,-3.395751831846302e-5,-4.097979506922786e-8,-0.0018955320612609062,-3.4027724788744977e-5,-4.104650552871127e-8,-0.001895460925824634,-3.419213691026499e-5,-4.120354608540807e-8,-0.0018952876637236959,-3.439431347479264e-5,-4.139792350116541e-8,-0.0018950194973305701,-3.4574094187676726e-5,-4.157273141268476e-8,-0.00189468901820827,-3.468727701743215e-5,-4.168573954249668e-8,-0.0018943393648524587,-3.471417304124221e-5,-4.171758103848185e-8,-0.001894011175966523,-3.4658126432902484e-5,-4.1670568510380554e-8,-0.0018937347654549707,-3.4538913747532676e-5,-4.156270803527193e-8,-0.0018935271586108895,-3.438520384909261e-5,-4.1420753571334326e-8,-0.0018933922404869188,-3.4228171385826936e-5,-4.127420869753851e-8,-0.0018933224519850319,-3.409667569558539e-5,-4.115067186901395e-8,-0.001893301244193991,-3.40137190510597e-5,-4.10723266568858e-8,-0.0018933060255165923,-3.399399788202456e-5,-4.105348708812609e-8,-0.0018933114133081418,-3.404253904550354e-5,-4.109924608197351e-8,-0.0018932925837213562,-3.415443233452324e-5,-4.120524021833533e-8,-0.0018932284621856921,-3.431570348176952e-5,-4.135853030487643e-8,-0.001893104383091029,-3.4505267334039883e-5,-4.1539480078514925e-8,-0.00189291393259836,-3.469764551964496e-5,-4.172428673891212e-8,-0.0018926599383916741,-3.486610463956082e-5,-4.188783776156979e-8,-0.0018923546511316431,-3.498605241766292e-5,-4.2006785198344876e-8,-0.001892019101621626,-3.5038631408074926e-5,-4.206286015466167e-8,-0.0018916814855736094,-3.5014534367428806e-5,-4.204652314564249e-8,-0.001891374040852943,-3.491799599962725e-5,-4.196092987201902e-8,-0.0018911275262606326,-3.477018738663742e-5,-4.182542386637248e-8,-0.0018909628356181614,-3.460994197225293e-5,-4.167647877700423e-8,-0.0018908809794151223,-3.448870510773402e-5,-4.1563025636714426e-8,-0.001890855680381783,-3.4457266426274074e-5,-4.1533801407386716e-8,-0.0018908353879217353,-3.454621539121781e-5,-4.1618610494880996e-8,-0.0018907590601062614,-3.474930510512576e-5,-4.1812322746267864e-8,-0.0018905806559135173,-3.502183484605819e-5,-4.2073175486873276e-8,-0.0018902883688857062,-3.529801938551741e-5,-4.233914044230188e-8,-0.0018899068551920142,-3.551742428610809e-5,-4.255290749642152e-8,-0.001889483249018912,-3.564481602849056e-5,-4.268065997382881e-8,-0.0018890679245541686,-3.567523527632135e-5,-4.2716955210695495e-8,-0.00188870032072965,-3.562727788606181e-5,-4.267856906938492e-8,-0.0018884030745074487,-3.5532202829357725e-5,-4.2594437460528625e-8,-0.0018881823723488097,-3.54243921208098e-5,-4.2496795451858114e-8,-0.0018880312102406572,-3.533504994855418e-5,-4.2415230301185514e-8,-0.0018879332139387782,-3.5288747014991394e-5,-4.237330143238159e-8,-0.0018878660597741292,-3.5301680267534746e-5,-4.23867434249854e-8,-0.001887804493950075,-3.5380813257388804e-5,-4.246254511061698e-8,-0.0018877231921547025,-3.552361030820859e-5,-4.259866804167272e-8,-0.0018875996014664324,-3.5718391160070784e-5,-4.278440830777563e-8,-0.0018874167566322304,-3.594551788242534e-5,-4.300154835611885e-8,-0.0018871657927251448,-3.617965687985636e-5,-4.322647911791066e-8,-0.0018868476636197298,-3.639308212496223e-5,-4.3433238917490384e-8,-0.0018864736576865142,-3.655967876258171e-5,-4.359717299143751e-8,-0.0018860644895497603,-3.66591992046944e-5,-4.369885112248462e-8,-0.0018856478855353213,-3.668124668546799e-5,-4.37278181581545e-8,-0.0018852547440176993,-3.6628421846668554e-5,-4.3685686879638724e-8,-0.0018849140165977931,-3.651813115392309e-5,-4.358808695279573e-8,-0.0018846464338938206,-3.638236555382138e-5,-4.346473580791103e-8,-0.0018844576056432885,-3.6264235942699986e-5,-4.3356365793623564e-8,-0.0018843321784880178,-3.6209913884206997e-5,-4.3307130103906174e-8,-0.0018842322632395324,-3.625576306513159e-5,-4.335226126403655e-8,-0.0018841040436168481,-3.641349949400654e-5,-4.350374571050373e-8,-0.0018838940566287233,-3.6660400894427665e-5,-4.374080127460915e-8,-0.001883570085252579,-3.694276386559895e-5,-4.401301964778491e-8,-0.001883135475562002,-3.7194520085842316e-5,-4.425796870583932e-8,-0.001882627578444282,-3.73621475032825e-5,-4.442477583414205e-8,-0.0018821014403124572,-3.742201299485457e-5,-4.4490542846202025e-8,-0.001881609313986513,-3.7382507458315104e-5,-4.4462439215216833e-8,-0.0018811865907120172,-3.7274116019286886e-5,-4.436849914685254e-8,-0.001880847632416261,-3.713591350573811e-5,-4.424508395808057e-8,-0.00188058871037337,-3.7004918805228556e-5,-4.4126962304448526e-8,-0.0018803936614843618,-3.691021781204701e-5,-4.4041748300567786e-8,-0.0018802392951189633,-3.6870851790922326e-5,-4.400778710220607e-8,-0.0018800994849178696,-3.68957089255605e-5,-4.40339130327419e-8,-0.0018799481169941405,-3.698411204251374e-5,-4.411991825255021e-8,-0.0018797614670353787,-3.7126553405316096e-5,-4.425722892864331e-8,-0.0018795204776576248,-3.730559347706619e-5,-4.442976975442706e-8,-0.0018792131464299988,-3.749729428555327e-5,-4.46153152223929e-8,-0.0018788368365865878,-3.7673694011914794e-5,-4.4787772369335294e-8,-0.0018783998781203336,-3.780658890837698e-5,-4.492065092723705e-8,-0.0018779216417479986,-3.787236867220032e-5,-4.4991520603290696e-8,-0.0018774304478634798,-3.785712894848209e-5,-4.4986782858554793e-8,-0.001876959132956837,-3.776087580238688e-5,-4.490568783170876e-8,-0.001876538772816988,-3.759950843431477e-5,-4.476237298058196e-8,-0.0018761917084975216,-3.740363503756282e-5,-4.458499652618009e-8,-0.0018759253154816227,-3.721393836510612e-5,-4.441161416080866e-8,-0.0018757279816746558,-3.7073377257336396e-5,-4.4282962063134714e-8,-0.0018755687920489152,-3.701708377818567e-5,-4.4232881827984826e-8,-0.0018754023218197238,-3.706175871807319e-5,-4.427809041286009e-8,-0.0018751791516401983,-3.71976903316632e-5,-4.4410338519050925e-8,-0.0018748606150037481,-3.738752598197328e-5,-4.4594994984169714e-8,-0.0018744330348925565,-3.7574982787928245E-05,-4.47791613026569e-8,-0.0018739145177022712,-3.770239276914684e-5,-4.490826020461936e-8,-0.0018733495373167643,-3.773009490362128e-5,-4.4944415378813574e-8,-0.0018727931908080317,-3.764831441568e-5,-4.487773977743384e-8,-0.0018722931442570632,-3.7476441825173546e-5,-4.472576455407728e-8,-0.0018718776143170825,-3.72522449686114e-5,-4.452343076403651e-8,-0.0018715526178116695,-3.701813258333055e-5,-4.431030817274317e-8,-0.0018713062231411261,-3.681055615655657e-5,-4.4120686585272034e-8,-0.001871115468151383,-3.665468354723957e-5,-4.397851191896047e-8,-0.001870952694577932,-3.6563328602725056e-5,-4.389625440586987e-8,-0.0018707900517583916,-3.653811265418476e-5,-4.3875885637797216e-8,-0.0018706023334060244,-3.6571255822349916e-5,-4.391050608580251e-8,-0.0018703688700737859,-3.664722159578986e-5,-4.398588937722728e-8,-0.0018700751930006965,-3.6744157938658e-5,-4.408184554328447e-8,-0.0018697148769254426,-3.683557666976917e-5,-4.4173775089313205e-8,-0.0018692914772034106,-3.6892936200826666e-5,-4.423502611041501e-8,-0.0018688199023591616,-3.688965083963331e-5,-4.424057092448585e-8,-0.0018683261082645549,-3.680648604854699e-5,-4.4172010900809014e-8,-0.0018678439684996118,-3.663736658049673e-5,-4.4023038613393244e-8,-0.0018674088734324848,-3.639364723333976e-5,-4.3803546879327065e-8,-0.0018670490319146785,-3.610454803253589e-5,-4.354021989210011e-8,-0.001866776960604691,-3.581233195531623e-5,-4.327223113044107e-8,-0.0018665842545617494,-3.556274227869284e-5,-4.304246095848443e-8,-0.0018664419014308188,-3.539322985208859e-5,-4.2886518844144926e-8,-0.001866306540510951,-3.532250177755452e-5,-4.282282625286369e-8,-0.0018661311596336301,-3.5344543323723834e-5,-4.284673828172474e-8,-0.0018658774885188531,-3.542898898557433e-5,-4.293057236042494e-8,-0.0018655268253949977,-3.55281941668765e-5,-4.303001094315354e-8,-0.0018650860333417425,-3.55896847358241e-5,-4.309572055327366e-8,-0.0018645862558132557,-3.557072469934887e-5,-4.3087114771064386e-8,-0.001864074064290464,-3.54502290003869e-5,-4.298370377047688e-8,-0.0018635978679334747,-3.523359331224885e-5,-4.278980205390345e-8,-0.0018631947076426666,-3.494883476042089e-5,-4.2531058883068645e-8,-0.0018628822307316867,-3.4636347734627516E-05,-4.224496475448857e-8,-0.0018626577466252,-3.433705755884229e-5,-4.196979779298566e-8,-0.0018625028468491243,-3.408334448344101e-5,-4.173608792809358e-8,-0.0018623903292806535,-3.389462368841906e-5,-4.1562378749819724e-8,-0.001862290600784725,-3.377697613200107e-5,-4.145477037782527e-8,-0.0018621762300559555,-3.3725088096835355e-5,-4.14086669723388e-8,-0.0018620246347852986,-3.372488473601601e-5,-4.141123207304418e-8,-0.0018618195632346566,-3.375593156589706e-5,-4.1443656121148575e-8,-0.0018615521548540242,-3.3793432453618705e-5,-4.148302730689643e-8,-0.001861222100187459,-3.3810221048498295E-05,-4.15041470998425e-8,-0.0018608389284970092,-3.377941053241642e-5,-4.148192086511341e-8,-0.0018604228570434176,-3.367833230390359e-5,-4.139496124109246e-8,-0.0018600040268228783,-3.3493942425028966e-5,-4.123062094176194e-8,-0.001859618642548962,-3.322877352067173e-5,-4.0990619843655576e-8,-0.0018593011806838898,-3.290498445207031e-5,-4.0694967467908326e-8,-0.001859073836432133,-3.256319848003421e-5,-4.038105550600808e-8,-0.0018589370096645738,-3.225400787141628e-5,-4.0095898376829484e-8,-0.0018588658572420299,-3.202355089014602e-5,-3.988278237900221e-8,-0.001858815953690681,-3.1898535195761845e-5,-3.9767279252543205e-8,-0.0018587365322608792,-3.187731481624273e-5,-3.974875641256137e-8,-0.001858585847420525,-3.193072891426777e-5,-3.9800881931187754e-8,-0.0018583427276889898,-3.201157846011818e-5,-3.988018363222736e-8,-0.001858011024484624,-3.206838339685549e-5,-3.993871620605644e-8,-0.0018576168661056972,-3.2058722129593e-5,-3.993651170976707e-8,-0.001857200628294303,-3.1958785793748546e-5,-3.98506487342928e-8,-0.0018568063178679155,-3.1767390735336565e-5,-3.9679225404044e-8,-0.0018564711830394505,-3.150417991339459e-5,-3.943989843936122e-8,-0.0018562180244630548,-3.120309508365586e-5,-3.916393604405171e-8,-0.001856051832860989,-3.0903287984785486e-5,-3.888777991719524e-8,-0.0018559610387409902,-3.0640165715613776e-5,-3.864464037772421e-8,-0.0018559222165318323,-3.043888182499085e-5,-3.845831450517588e-8,-0.0018559062367179708,-3.031135180046263e-5,-3.8340287099323454e-8,-0.0018558839785556914,-3.025648674119293e-5,-3.828987583339211e-8,-0.0018558305005729916,-3.0262498510445098e-5,-3.829637141557298e-8,-0.0018557274688207667,-3.030998413607464e-5,-3.8341946180221575e-8,-0.0018555642923261315,-3.0374874455143256e-5,-3.8404431294548646e-8,-0.0018553386335638984,-3.043096245585696e-5,-3.8459652833342595e-8,-0.0018550567897867762,-3.0452262426219995e-5,-3.8483550463237314e-8,-0.0018547340635318174,-3.041572528206477e-5,-3.8454603062521525e-8,-0.0018543947164707576,-3.03048875961989e-5,-3.835716288178646e-8,-0.0018540704590361671,-3.0114692323656852e-5,-3.81859702743685e-8,-0.0018537960249984855,-2.985666954648834e-5,-3.79511015108531e-8,-0.0018536008786521339,-2.9562027461414482e-5,-3.768102528692731e-8,-0.0018534981424192035,-2.927893614320846e-5,-3.742024332911934e-8,-0.0018534751696137296,-2.9061233360087007e-5,-3.72188887172703e-8,-0.0018534923481789171,-2.8950357584252507e-5,-3.711593484750272e-8,-0.0018534940550578869,-2.8958436077817732e-5,-3.7123378482837e-8,-0.0018534282008300274,-2.9062277323979435e-5,-3.722046668883958e-8,-0.0018532645332598092,-2.921211788923309e-5,-3.736159207290112e-8,-0.0018530028720135114,-2.934986972526837e-5,-3.7493050320642694e-8,-0.0018526694542170326,-2.942727873570747e-5,-3.756982425163037e-8,-0.0018523058642196187,-2.9417150023504876e-5,-3.7566073539067835e-8,-0.0018519564866905035,-2.9316192868627697e-5,-3.7477965536880444e-8,-0.0018516584089416203,-2.9141557732680905e-5,-3.7320700414486564e-8,-0.001851435208412855,-2.8923992161479002e-5,-3.712235494419344e-8,-0.001851294541339165,-2.869997092993335e-5,-3.691666372244825e-8,-0.0018512288972952473,-2.850431556199019e-5,-3.673612972502268e-8,-0.0018512187605911334,-2.8364293030248146e-5,-3.6606422818222735e-8,-0.0018512372743969517,-2.8295880091963878e-5,-3.6542771387623024e-8,-0.001851255373367241,-2.830245486957463e-5,-3.654865101402205e-8,-0.0018512464347500161,-2.837567990696616e-5,-3.661658029509977e-8,-0.0018511897654824728,-2.849797616767571e-5,-3.6730452314410044e-8,-0.0018510726455833026,-2.864577894127868e-5,-3.6868605111867225e-8,-0.0018508911239511774,-2.879283048085962e-5,-3.700688885749968e-8,-0.0018506500169525825,-2.891316386992196e-5,-3.712138235946777e-8,-0.0018503624659893852,-2.8983841434482034e-5,-3.719083313132091e-8,-0.001850049192722774,-2.8987717253845237e-5,-3.719912582085492e-8,-0.00184973724683297,-2.8916604783197052e-5,-3.7138199915807674e-8,-0.0018494574590516221,-2.877500685094965e-5,-3.7011601488886906e-8,-0.001849239457271444,-2.8583618727700412e-5,-3.6837917133073514e-8,-0.001849103637120204,-2.8380420558935783e-5,-3.665199142573758e-8,-0.0018490512556514666,-2.8216113176951286e-5,-3.650082802289004e-8,-0.0018490568923369543,-2.814133170477168e-5,-3.643173901900574e-8,-0.001849070044366471,-2.8187498919253204e-5,-3.6474479853762786e-8,-0.0018490301023305032,-2.835027238269989e-5,-3.662573037762882e-8,-0.0018488899067574623,-2.8587217166636767e-5,-3.6846766146306595e-8,-0.0018486348257891318,-2.883361606393152e-5,-3.707797543919425e-8,-0.0018482863056600417,-2.902755950667316e-5,-3.726201459105288e-8,-0.0018478899852914469,-2.9130064005063796e-5,-3.736241363816512e-8,-0.0018474976562760789,-2.91321131307372e-5,-3.737016828147584e-8,-0.0018471524750899352,-2.905016180405401e-5,-3.729976063286029e-8,-0.0018468812786227445,-2.8916268553225196e-5,-3.718025357565311e-8,-0.0018466931172711491,-2.876806315238052e-5,-3.7046173746412294e-8,-0.0018465815057894385,-2.8640983775258864e-5,-3.6930365429741035e-8,-0.00184652829693714,-2.8563136245366806e-5,-3.685914654239289e-8,-0.0018465080445311866,-2.8552306292304803e-5,-3.6849396405970724e-8,-0.0018464923711327586,-2.8614698711177184e-5,-3.69072585309602e-8,-0.0018464540475209713,-2.874515858709884e-5,-3.702828145510411e-8,-0.001846370522506678,-2.8928669467886978e-5,-3.7198811661589566e-8,-0.001846226627091265,-2.9142919199792575e-5,-3.739840984195331e-8,-0.0018460161773210895,-2.936159596526058e-5,-3.7602928735736206e-8,-0.0018457424092981416,-2.9557907441157696e-5,-3.7787745528739335e-8,-0.0018454174436069045,-2.9707932709951874e-5,-3.793078679950588e-8,-0.001845060979936064,-2.9793682517744152e-5,-3.8015266553066575e-8,-0.0018446983139210466,-2.9805837685586976e-5,-3.803216933965162e-8,-0.001844357663506958,-2.974619611849742e-5,-3.7982560537325245e-8,-0.0018440664544479193,-2.9629797711193566e-5,-3.7879707314877856e-8,-0.001843845950446449,-2.948601531108566e-5,-3.775030341662861e-8,-0.0018437041818345754,-2.9356851092842417e-5,-3.763307774716062e-8,-0.0018436286704259478,-2.929018395984869e-5,-3.7572610524337075e-8,-0.0018435826591715672,-2.9326650546160026e-5,-3.7607099199983846e-8,-0.001843510243611047,-2.9482479522100277e-5,-3.7752270839027916e-8,-0.0018433534878047207,-2.9736569576451163e-5,-3.798922207122916e-8,-0.001843076228620517,-3.003258999787417e-5,-3.826624809927366e-8,-0.0018426810050820315,-3.0299279226205748e-5,-3.851758748645876e-8,-0.0018422077376924746,-3.0478508169391107e-5,-3.8689353289091895e-8,-0.0018417156239789582,-3.054470317700498e-5,-3.875746335719129e-8,-0.0018412606553196052,-3.050710730095082e-5,-3.872977574482587e-8,-0.001840880483325183,-3.0398882257686496e-5,-3.8636192256924036e-8,-0.001840590004125507,-3.026250677128237e-5,-3.851540126764517e-8,-0.0018403844397698059,-3.013820957242196e-5,-3.840435285169504e-8,-0.001840245361005513,-3.0057347763451893e-5,-3.8332152701456324e-8,-0.0018401466765782936,-3.0039751280580974e-5,-3.831749547487945e-8,-0.0018400595016326148,-3.0093363332831677e-5,-3.836817784862127e-8,-0.0018399559497764423,-3.0215015910877106e-5,-3.848169905675189e-8,-0.001839812170196447,-3.039186553279613e-5,-3.864654273812751e-8,-0.0018396108283989022,-3.060338054950594e-5,-3.884402378562721e-8,-0.0018393430417674114,-3.082394307346604e-5,-3.905071575977295e-8,-0.001839009544828154,-3.1026114366856945e-5,-3.924146216346563e-8,-0.0018386207708631277,-3.1184328723264915e-5,-3.939273712194119e-8,-0.0018381957305413437,-3.127857148136643e-5,-3.948596451419425e-8,-0.0018377597459139795,-3.1297656724416976e-5,-3.95104860508152e-8,-0.001837341137178437,-3.1241751125251476e-5,-3.946590292406994e-8,-0.0018369670512292443,-3.112376810976386e-5,-3.9363472022820164e-8,-0.0018366586561733092,-3.096932899220622e-5,-3.922626209101001e-8,-0.0018364258708403016,-3.0814812173559905e-5,-3.9087559514838445e-8,-0.0018362621920370473,-3.070252357614279e-5,-3.8986539372919337e-8,-0.0018361412688580824,-3.067203929167175e-5,-3.896025500527251e-8,-0.0018360180816703487,-3.0748042684471684e-5,-3.903223795898209e-8,-0.0018358378502917804,-3.092774827382751e-5,-3.920064225747588e-8,-0.0018355532968053283,-3.1174550168373766e-5,-3.9432189756387474e-8,-0.0018351446756584952,-3.142525945238052e-5,-3.966879216514516e-8,-0.001834631257077125,-3.161182618802566e-5,-3.9847630332795574e-8,-0.001834065391188641,-3.168747068911088e-5,-3.992527940095902e-8,-0.0018335116541834382,-3.164236364109196e-5,-3.989214970654177e-8,-0.0018330236496004874,-3.1501495858562004e-5,-3.977056585296882e-8,-0.0018326302885483708,-3.130976247069251e-5,-3.960119517536447e-8,-0.0018323344622033428,-3.111494455177007e-5,-3.94275962437217e-8,-0.0018321196002908996,-3.095597209536023e-5,-3.928554181120305e-8,-0.0018319582888422555,-3.085789845493625e-5,-3.919836392406287e-8,-0.0018318194757880513,-3.083157342368737e-5,-3.9176511626126014e-8,-0.0018316733480543946,-3.0875483927058214e-5,-3.9219089175635253e-8,-0.0018314943794796696,-3.097812687524317e-5,-3.931593991989682e-8,-0.0018312633560748676,-3.1120334429811935e-5,-3.9449760179892773e-8,-0.001830968913688379,-3.1277592120351454e-5,-3.9598246635518696e-8,-0.0018306087634235733,-3.14226374107931e-5,-3.9736499110668715e-8,-0.0018301904168349817,-3.152864766531905e-5,-3.9839932121797345e-8,-0.0018297309265778968,-3.1573033171681355e-5,-3.988771007373838e-8,-0.0018292551760944991,-3.154139489645285e-5,-3.986633134180522e-8,-0.0018287925523648566,-3.1430926466745534e-5,-3.977274223006469e-8,-0.0018283721888019805,-3.125244172846257e-5,-3.961626454205167e-8,-0.0018280173510476312,-3.1030241019074e-5,-3.941861928815817e-8,-0.0018277399014371466,-3.079933897322065e-5,-3.921157228495376e-8,-0.0018275359237807758,-3.060002936908609e-5,-3.9032106768399976e-8,-0.0018273836315456557,-3.0470075984707517e-5,-3.891530628053033e-8,-0.0018272448509398856,-3.0435259419920423e-5,-3.8885571590877783e-8,-0.0018270713806662069,-3.0500042234658058e-5,-3.8947817158765014e-8,-0.0018268166773114957,-3.064158208297821e-5,-3.908171343754616e-8,-0.0018264509824322654,-3.081128525962225e-5,-3.924294928095106e-8,-0.0018259745066705093,-3.0946791653507584e-5,-3.937422858396294e-8,-0.001825421200068397,-3.0992294321174295e-5,-3.942401662190722e-8,-0.001824848707194268,-3.091859675203208e-5,-3.936503312287334e-8,-0.0018243181665254498,-3.0732388589482095e-5,-3.920280801715213e-8,-0.0018238741939498265,-3.047033281073113e-5,-3.897033103345112e-8,-0.0018235344222076416,-3.0182968256406758e-5,-3.871343791162342e-8,-0.0018232907112232296,-2.9917962061241705e-5,-3.8475612220985564e-8,-0.0018231175915879915,-2.9709470223528575e-5,-3.8288287874661005e-8,-0.0018229820547856707,-2.9574767415543407e-5,-3.8167680241916334e-8,-0.0018228511227224586,-2.951575072500136e-5,-3.811601209651671e-8,-0.0018226963993247997,-2.9522399260808083e-5,-3.812455102291935e-8,-0.001822496346012939,-2.9576313361484465e-5,-3.817679071516764e-8,-0.00182223736569908,-2.9653667368211555e-5,-3.82511596794088e-8,-0.001821914484007764,-2.9727713244422272e-5,-3.8323339418991535e-8,-0.0018215319226575477,-2.9771325860086927e-5,-3.836859871537784e-8,-0.0018211033649289739,-2.9760077349048065e-5,-3.8364575828414726e-8,-0.0018206513209798074,-2.967600860452736e-5,-3.82946771372016e-8,-0.001820204868578569,-2.95117106918752e-5,-3.815177651088395e-8,-0.001819795308698592,-2.9273717903851084e-5,-3.7941337848129227e-8,-0.0018194499553985499,-2.8983792765006212e-5,-3.768268339819807e-8,-0.001819185216669178,-2.867678407238349e-5,-3.74071910297524e-8,-0.0018190008974349288,-2.83945853396037e-5,-3.715294339073842e-8,-0.001818877777254797,-2.8177048843502435e-5,-3.69565401325332e-8,-0.001818779842287521,-2.8051892787703585e-5,-3.684386725138177e-8,-0.0018186613648890997,-2.8026242318695985e-5,-3.682221547238342e-8,-0.0018184777104345217,-2.8082404782524753e-5,-3.687617397457534e-8,-0.0018181975534309522,-2.8179856821560048e-5,-3.6969212144048666e-8,-0.001817813196202531,-2.8264185854983048e-5,-3.705172966271644e-8,-0.001817345167041442,-2.8281685470529075e-5,-3.707441588866618e-8,-0.0018168381018592475,-2.8195553966210703e-5,-3.7003162870434875e-8,-0.0018163479603249767,-2.799754849487948e-5,-3.6829836985857307e-8,-0.0018159250008670967,-2.770979157575244e-5,-3.657403648862273e-8,-0.0018155995956956029,-2.7375894624095573e-5,-3.6275093682421794e-8,-0.0018153764219808644,-2.704596699485922e-5,-3.5978494998850386e-8,-0.0018152377869368145,-2.6762455524996808e-5,-3.572301447864534e-8,-0.001815152477201721,-2.6551760020655958e-5,-3.553302574177351e-8,-0.0018150853173970892,-2.6422470662984083e-5,-3.541677798998169e-8,-0.0018150042988686545,-2.6368080187245047e-5,-3.5368740905128105e-8,-0.001814884542944513,-2.637140326946383e-5,-3.5373559468304656e-8,-0.0018147098501943748,-2.640883213452553e-5,-3.540992975432918e-8,-0.001814472968339351,-2.6453705314678775e-5,-3.5453704890593495e-8,-0.0018141754822484056,-2.6478914642215583e-5,-3.548029701796509e-8,-0.0018138277280354835,-2.645933668573588e-5,-3.54668779570484e-8,-0.0018134485433922909,-2.63746995002284e-5,-3.539493771542412e-8,-0.0018130641999637516,-2.6213143484268603e-5,-3.525347116797519e-8,-0.0018127056529817164,-2.5975139443379584e-5,-3.504252776569707e-8,-0.0018124034131899443,-2.5676611824827752e-5,-3.477610412804476e-8,-0.0018121801872194175,-2.534931109205454e-5,-3.448259855575883e-8,-0.0018120429840718477,-2.503646524431114e-5,-3.420100849172037e-8,-0.0018119778375527472,-2.4783230392470123e-5,-3.3972382770939356e-8,-0.001811950347330866,-2.462408751833058e-5,-3.3828419190625865e-8,-0.0018119132838824324,-2.4571574822020067e-5,-3.3781151941416513e-8,-0.0018118193692635378,-2.461097139426063e-5,-3.381793208892705e-8,-0.0018116348830005524,-2.470333459138878e-5,-3.390395510139745e-8,-0.0018113494195414132,-2.479592830408992e-5,-3.399155855798691e-8,-0.0018109788397635016,-2.483652227449304e-5,-3.403315775348767e-8,-0.0018105608775236578,-2.4787225178468724e-5,-3.399388280325552e-8,-0.001810144903993606,-2.4634019749026035e-5,-3.386038668968676e-8,-0.0018097788424705386,-2.438943653685379e-5,-3.364343809426621e-8,-0.0018094970976968308,-2.408776623021186e-5,-3.3373712923926915e-8,-0.0018093131065530167,-2.3774611485516244e-5,-3.3092397700764274e-8,-0.0018092184234519324,-2.3494490111001275e-5,-3.283995827133673e-8,-0.0018091877331322158,-2.3280593294754563e-5,-3.2646790853564697e-8,-0.0018091871161683125,-2.314939866682767e-5,-3.252822506211939e-8,-0.0018091823293289193,-2.31004611501778e-5,-3.248421726376951e-8,-0.0018091448540584615,-2.311978262620908e-5,-3.250233499343941e-8,-0.0018090550794540737,-2.3184591180723153e-5,-3.2562086291900066e-8,-0.0018089031861997175,-2.3267897328885993e-5,-3.2639095018153503e-8,-0.0018086887334329814,-2.3342085624690892e-5,-3.2708403157821664e-8,-0.0018084198247745962,-2.338158487023955e-5,-3.2746898333729124e-8,-0.0018081122968712463,-2.3365150542970265e-5,-3.273533916353727e-8,-0.001807788822855228,-2.3278370617031e-5,-3.2660558495518114e-8,-0.0018074773359588981,-2.3116713555088714e-5,-3.251818044986732e-8,-0.0018072078836895496,-2.2888860456224638e-5,-3.231565942478291e-8,-0.0018070071067168634,-2.2619145607374683e-5,-3.2074584949186564e-8,-0.0018068904090166695,-2.2346867579039005e-5,-3.18301977417072e-8,-0.001806853807850492,-2.2119984734449717e-5,-3.162581546841964e-8,-0.0018068696241016469,-2.198255341150245e-5,-3.150153125112428e-8,-0.0018068904530553504,-2.195926967130759e-5,-3.1480191546692454e-8,-0.0018068624614854115,-2.2044177423088666e-5,-3.155704270849953e-8,-0.0018067433270976935,-2.2200245280886165e-5,-3.1699156433731375e-8,-0.0018065165630427827,-2.2371032429944445e-5,-3.1855811466588946e-8,-0.0018061958896326482,-2.2498959032548624e-5,-3.197492592167717e-8,-0.0018058190557784669,-2.2542034459431462e-5,-3.201819263383411e-8,-0.0018054353226003737,-2.2483393859611878e-5,-3.196979945333175e-8,-0.001805091981515879,-2.2332389766442987e-5,-3.183757466667896e-8,-0.0018048237525921153,-2.211905907663405e-5,-3.1648156894879373e-8,-0.0018046468284378982,-2.1884874969180767e-5,-3.1438765962970895e-8,-0.0018045577965828564,-2.167257080863706e-5,-3.124804952076372e-8,-0.0018045367469031802,-2.1517256483314775e-5,-3.1108003719807276e-8,-0.0018045532547471112,-2.1440415901790588e-5,-3.103843208390343e-8,-0.0018045734964459543,-2.1447606975861767e-5,-3.1044738831155513e-8,-0.0018045667264467702,-2.1529672691860464e-5,-3.111893588046535e-8,-0.0018045098804961046,-2.1666384245823865e-5,-3.1242914374253404e-8,-0.0018043898839023068,-2.183112130503548e-5,-3.1392708760228225e-8,-0.001804203954475141,-2.1995397908962797e-5,-3.1542638797071024e-8,-0.0018039586205425583,-2.2132522471774145e-5,-3.166864148494045e-8,-0.0018036682150897336,-2.222029327998615e-5,-3.1750683255942955e-8,-0.0018033532774611,-2.2243105107731316e-5,-3.1774601732825967e-8,-0.0018030388535303287,-2.2193945397383773e-5,-3.173385130063672e-8,-0.0018027522942073136,-2.2076575061598045e-5,-3.1631467135425805e-8,-0.0018025198123736337,-2.1907738260673892e-5,-3.148213395270582e-8,-0.0018023610503111382,-2.171835234695091e-5,-3.131339673265721e-8,-0.0018022817446064101,-2.155153029171974e-5,-3.1164020013668663e-8,-0.0018022664981731129,-2.145492195250491e-5,-3.107715875834362e-8,-0.0018022761116299893,-2.1466616576633423e-5,-3.1087611729159285e-8,-0.001802254637597213,-2.1598488185100718e-5,-3.1206666940015674e-8,-0.0018021472428660756,-2.182595909351053e-5,-3.1412695010306495e-8,-0.0018019218634438376,-2.2092822584774562e-5,-3.1655360838329714e-8,-0.0018015825756897933,-2.2331161258804622e-5,-3.187351846210822e-8,-0.0018011669858702807,-2.2485932648024347e-5,-3.2017362632812046e-8,-0.0018007305205330378,-2.2531424552391003e-5,-3.20632837968358e-8,-0.0018003274466781097,-2.247396849454174e-5,-3.201639378115172e-8,-0.001799997044701253,-2.2344006761817026e-5,-3.190352915618942e-8,-0.0017997576968600084,-2.2183994777753875e-5,-3.1762527108728355e-8,-0.0017996074214415598,-2.2037129804367622e-5,-3.163218737463046e-8,-0.0017995281388526994,-2.1939134700851098e-5,-3.1544874466880096e-8,-0.001799491474118722,-2.191336925847295e-5,-3.1522014871558e-8,-0.0017994648236848451,-2.196879034163294e-5,-3.157211653547259e-8,-0.0017994169612412726,-2.210030852102367e-5,-3.1690969385098476e-8,-0.0017993225970557186,-2.2291116208268445e-5,-3.1863685374065217e-8,-0.0017991654559053219,-2.2516364846537557e-5,-3.2068017711543623e-8,-0.0017989396964144166,-2.2747470340719118e-5,-3.2278281986817246e-8,-0.001798649733945888,-2.2956364822787877e-5,-3.246922246142647e-8,-0.0017983088087218547,-2.3119105042172602e-5,-3.2619262744900355e-8,-0.0017979368481374199,-2.3218557224021916e-5,-3.271288686018867e-8,-0.001797558043108042,-2.3246284945411038e-5,-3.274229168261259e-8,-0.0017971982454755217,-2.3203905608775542e-5,-3.2708591798824984e-8,-0.0017968820442133351,-2.3104089519329166e-5,-3.2622768771998037e-8,-0.0017966291126735867,-2.297111342990777e-5,-3.250628913382254e-8,-0.0017964493540700971,-2.2840186859440642e-5,-3.239064633254201e-8,-0.001796337092370337,-2.2753871040159905e-5,-3.231424590201427e-8,-0.001796266176874397,-2.2753701692947285e-5,-3.2314867821004395e-8,-0.0017961898758915664,-2.2866622884127602e-5,-3.241733430757836e-8,-0.0017960501969663332,-2.3089920943539757e-5,-3.261975895170297e-8,-0.0017957976108034395,-2.3383568322421448e-5,-3.288650179068292e-8,-0.0017954135250510931,-2.3679171476829465e-5,-3.315617804332179e-8,-0.0017949215447578652,-2.390518557869303e-5,-3.336437672142568e-8,-0.0017943787200954949,-2.401500851776904e-5,-3.3468942402757484e-8,-0.0017938521133034476,-2.400161061140643e-5,-3.346310636110839e-8,-0.0017933953283730748,-2.3893135268437862e-5,-3.3371567284018426e-8,-0.0017930360672664986,-2.3736813868647664e-5,-3.323619106299432e-8,-0.0017927757839283627,-2.3582117106361543e-5,-3.310107169625848e-8,-0.0017925963117210405,-2.3469363688785598e-5,-3.300241303329868e-8,-0.0017924682328384592,-2.342451096539411e-5,-3.296382113706184e-8,-0.0017923581550719071,-2.345828625550179e-5,-3.299539036168371e-8,-0.001792234150133278,-2.356759742598324e-5,-3.309481410911366e-8,-0.0017920696405059335,-2.3737980155055785e-5,-3.324947345493431e-8,-0.0017918461088012336,-2.3946656287756952e-5,-3.343914759620848e-8,-0.0017915547494891267,-2.416604836192296e-5,-3.363918826601897e-8,-0.0017911970460121622,-2.4367571375549456e-5,-3.382396166819764e-8,-0.0017907841940512808,-2.4525457139788785e-5,-3.3970302096064133e-8,-0.0017903353488858134,-2.4620205356925683e-5,-3.4060599419872674e-8,-0.001789874928831574,-2.464121873006898e-5,-3.408513361013069e-8,-0.0017894293545302076,-2.458842006514815e-5,-3.404350871950484e-8,-0.001789023505241213,-2.4472837169482275e-5,-3.394520600674971e-8,-0.0017886770648342907,-2.431614883409421e-5,-3.3809267595780996e-8,-0.0017884008200234735,-2.4149141187628658e-5,-3.366304609271047e-8,-0.001788192903348495,-2.4008712245158947e-5,-3.353964297579916e-8,-0.0017880354372265181,-2.393253545893989e-5,-3.347316905691076e-8,-0.0017878931539800256,-2.3950554353910987e-5,-3.34910405981934e-8,-0.0017877167144701928,-2.4073806065351983e-5,-3.360377068735919e-8,-0.001787453569690734,-2.428392045087678e-5,-3.379534491041236e-8,-0.0017870663495322726,-2.4530220442592966e-5,-3.402051298850108e-8,-0.0017865519910194932,-2.4741563720019448e-5,-3.4215448424805376e-8,-0.0017859491906381667,-2.4852189071213217e-5,-3.4321023197333045e-8,-0.001785325958533287,-2.482869995671932e-5,-3.4307016493753474e-8,-0.0017847528767015353,-2.4681669420333632e-5,-3.418245486606978e-8,-0.0017842781208460322,-2.4456188730650273e-5,-3.3987154219619505e-8,-0.0017839168488831807,-2.4210443635923462e-5,-3.3772695142451446e-8,-0.0017836554356915608,-2.3996010205156732e-5,-3.358499104157047e-8,-0.0017834629055072672,-2.384722325415727e-5,-3.345487005540549e-8,-0.0017833022278605421,-2.377911957973221e-5,-3.33961693481918e-8,-0.0017831382257718895,-2.3790191594592873e-5,-3.340803787799357e-8,-0.0017829420119458068,-2.386664304225821e-5,-3.347858835271957e-8,-0.0017826931337199766,-2.3986439556649512e-5,-3.35884337520014e-8,-0.001782380554182279,-2.4122805007119548e-5,-3.37138034186474e-8,-0.0017820030107513522,-2.424741808773985e-5,-3.382943346932811e-8,-0.0017815688268330704,-2.4333593880854584e-5,-3.391144581214018e-8,-0.0017810949919451016,-2.435957061890063e-5,-3.3940296734933424e-8,-0.0017806052023764001,-2.4311695591746605e-5,-3.3903609380761455e-8,-0.001780126733231539,-2.4186960953258744e-5,-3.3798419210927013e-8,-0.001779686389109376,-2.3994309151659606e-5,-3.363234575116789e-8,-0.0017793060255654567,-2.3754312161234117e-5,-3.3423362014270186e-8,-0.0017789982504817423,-2.3497003448101446e-5,-3.319796437690346e-8,-0.0017787629677499328,-2.325789658218794e-5,-3.2987743056121986e-8,-0.0017785853328477087,-2.307245026259536e-5,-3.2824528494159e-8,-0.001778435693719291,-2.29692203202828e-5,-3.2734270343295896e-8,-0.0017782724447692514,-2.2962114363640616e-5,-3.2729999425653523e-8,-0.0017780489744251891,-2.304310446279494e-5,-3.2805121499466924e-8,-0.0017777252482119056,-2.3178271529330762e-5,-3.292970232577239e-8,-0.0017772823647096638,-2.331129259651724e-5,-3.305351428606098e-8,-0.0017767346083272459,-2.3377529158287416e-5,-3.311868318348257e-8,-0.001776130764697321,-2.3326480780226323e-5,-3.3079844371637935e-8,-0.0017755397912121303,-2.3142506066602418e-5,-3.292267378791187e-8,-0.001775025923089456,-2.285130228165791e-5,-3.2669641431352325e-8,-0.001774626618706956,-2.2507845107702927e-5,-3.2369284423643596e-8,-0.0017743445685003865,-2.217390512592298e-5,-3.207630409849978e-8,-0.0017741544806826274,-2.1898231682136928e-5,-3.1834061464338805e-8,-0.0017740169436090173,-2.1707118952548065e-5,-3.166620956255327e-8,-0.001773891219541728,-2.1604779152879516e-5,-3.157692307526984e-8,-0.0017737432310165142,-2.157882930216389e-5,-3.155562491937049e-8,-0.0017735489504333692,-2.1606679331330368e-5,-3.1582552828697624e-8,-0.0017732949817235678,-2.1660754250425577e-5,-3.163336707176071e-8,-0.0017729779982578978,-2.1712249139899234e-5,-3.1682516270717386e-8,-0.0017726039251191308,-2.1733947237802756e-5,-3.170578892729579e-8,-0.0017721870422029683,-2.170274238348413e-5,-3.168258293259854e-8,-0.001771748742021881,-2.160228540957275e-5,-3.1598253034946674e-8,-0.001771315436498432,-2.142574791419228e-5,-3.144654198656495e-8,-0.0017709151725227585,-2.1178148251122183e-5,-3.123163082063926e-8,-0.0017705729667818262,-2.0877318554922502e-5,-3.096901728522543e-8,-0.00177030549185305,-2.055260685325797e-5,-3.0684433448224743e-8,-0.0017701162882080364,-2.0240789383713746e-5,-3.041032430169265e-8,-0.0017699929466398218,-1.99794218315807e-5,-3.018005089313501e-8,-0.0017699074633654773,-1.9798779288104986e-5,-3.002078373264498e-8,-0.0017698202590316055,-1.971411094245867e-5,-2.994657558110185e-8,-0.0017696875886955075,-1.9720002942223983e-5,-2.9953206911113435e-8,-0.0017694714315701055,-1.9788544043428927e-5,-3.0016365819494506e-8,-0.001769150179508032,-1.9872824099373976e-5,-3.009460999645151e-8,-0.0017687273917546744,-1.9916635597634004e-5,-3.013794933369788e-8,-0.0017682349328222557,-1.986951675134688e-5,-3.0101278511672435e-8,-0.00176772710105645,-1.970328034493384e-5,-2.995916376833186e-8,-0.0017672653670454336,-1.942323674398719e-5,-2.9715881402750377e-8,-0.0017668987135009146,-1.906762066737871e-5,-2.9404951820690843e-8,-0.0017666484557888058,-1.8694185914153163e-5,-2.9077305426574343e-8,-0.0017665045683398996,-1.836037649987278e-5,-2.8783779540595175e-8,-0.0017664336822339468,-1.810670803004512e-5,-2.85604298531802e-8,-0.0017663927590512497,-1.7949525459591675e-5,-2.8422063980110166e-8,-0.0017663414629926905,-1.7882936783559632e-5,-2.8363836548011972e-8,-0.001766249541876796,-1.7885707909765793e-5,-2.8367242121714928e-8,-0.001766099266242993,-1.7928819727490756e-5,-2.8406756909275128e-8,-0.0017658847993394775,-1.798137782732972e-5,-2.8455090069843767e-8,-0.001765610393070421,-1.8014480188581894e-5,-2.8486659197502897e-8,-0.0017652885448722823,-1.800366604960887e-5,-2.8479796999216368e-8,-0.0017649384258213695,-1.7930802219111313e-5,-2.8418420896184835e-8,-0.0017645842871166185,-1.778602853787445e-5,-2.829372109660203e-8,-0.0017642532352409623,-1.7569903288050705e-5,-2.81060198076404e-8,-0.001763971759473834,-1.7295278259522374e-5,-2.786641950500421e-8,-0.0017637607807011494,-1.698782162266873e-5,-2.7597305393828584e-8,-0.0017636298282722234,-1.668378910785923e-5,-2.7330463361969477e-8,-0.0017635720325075124,-1.6424062245120354e-5,-2.7101919283812356e-8,-0.0017635623160880396,-1.624485381333525e-5,-2.6943804573923697e-8,-0.0017635607308321933,-1.6167370096356146e-5,-2.6875224575923194e-8,-0.0017635211289864948,-1.6190012162179073e-5,-2.68952735608918e-8,-0.0017634030561349838,-1.6286391210993562e-5,-2.6981120973846906e-8,-0.0017631832067511017,-1.6410496829813158e-5,-2.7092420717209323e-8,-0.001762862804611093,-1.650784066444652e-5,-2.7181070789573557e-8,-0.001762468592752757,-1.6529538541808296e-5,-2.720366625840219e-8,-0.001762046894151369,-1.6445530812446836e-5,-2.713326263374019e-8,-0.0017616519554521687,-1.6253198861825676e-5,-2.696709599279156e-8,-0.0017613315225252794,-1.5978453405918325e-5,-2.672764292807032e-8,-0.0017611140058775958,-1.5668350101802668e-5,-2.645617877953825e-8,-0.0017610016624053787,-1.5377341425857762e-5,-2.6200694380823762e-8,-0.001760972152477191,-1.5152050261090025e-5,-2.6002466768736517e-8,-0.0017609872896826445,-1.5020078162915458e-5,-2.5886132235295784e-8,-0.0017610048499390252,-1.4986153105280482e-5,-2.585618781524479e-8,-0.0017609887967856529,-1.5035267740803247e-5,-2.5899659894477047e-8,-0.0017609151979063953,-1.5139768158020223e-5,-2.5992305073980463e-8,-0.001760773716567572,-1.5266958060346903e-5,-2.610532992986437e-8,-0.0017605661687073292,-1.5385079455718696e-5,-2.6210718388494383e-8,-0.0017603038826338377,-1.5467116653328303e-5,-2.6284636330568005e-8,-0.0017600050563999715,-1.5492918931559058e-5,-2.630931543163531e-8,-0.00175969254649456,-1.5450515709074643e-5,-2.6274181953792665e-8,-0.0017593918639489119,-1.5337330423786408e-5,-2.617687582404043e-8,-0.0017591287810466108,-1.516152233340109e-5,-2.6024399594225813e-8,-0.0017589258943309788,-1.4943092225619993e-5,-2.5834108333616962e-8,-0.0017587977883399433,-1.4713698844311321e-5,-2.563361964748376e-8,-0.001758745306123578,-1.4513557060983797e-5,-2.5458186180871662e-8,-0.0017587508567577885,-1.4384033445413648e-5,-2.534426611652559e-8,-0.0017587779139626098,-1.4356303112866524e-5,-2.5319563744401592e-8,-0.0017587774818432792,-1.4439371548397277e-5,-2.5392423095802513e-8,-0.0017587014180465244,-1.461308765223457e-5,-2.5545545630735418e-8,-0.0017585182143315644,-1.4831017637906244e-5,-2.573837988454579e-8,-0.001758224300036135,-1.5033522952700285e-5,-2.5918544356983626e-8,-0.0017578456814572269,-1.5165890121277228e-5,-2.6037769834404815e-8,-0.0017574296827317477,-1.5194062164951215e-5,-2.6065783871821737e-8,-0.0017570309130902051,-1.5112670663097581e-5,-2.5997452534758276e-8,-0.001756696813994369,-1.4944139321311835e-5,-2.5852086776316284e-8,-0.0017564568402563836,-1.473071652369088e-5,-2.566653582995585e-8,-0.0017563173354597894,-1.4522642160396031e-5,-2.548486082353178e-8,-0.0017562624354948073,-1.4365851015030895e-5,-2.5347546705261553e-8,-0.0017562599735600776,-1.4292151664489295e-5,-2.5282821848690496e-8,-0.001756270345717931,-1.4313890299943314e-5,-2.5301868529854778e-8,-0.0017562557588578422,-1.4423796145213121e-5,-2.5398581829437754e-8,-0.0017561874812613571,-1.4599191257972496e-5,-2.5553204717269587e-8,-0.0017560497205785389,-1.4808590783445874e-5,-2.573812424229174e-8,-0.0017558401001670073,-1.501849889141526e-5,-2.5923886858305346e-8,-0.0017555677036126833,-1.5198851791683837e-5,-2.6084035700955837e-8,-0.0017552499882569114,-1.5326523211685818e-5,-2.6198219746351277e-8,-0.0017549096171388453,-1.5387143092883683e-5,-2.625378099409158e-8,-0.0017545716844747704,-1.5375917958639373e-5,-2.624643446693762e-8,-0.0017542612485054693,-1.5298085448759974e-5,-2.618062930004095e-8,-0.0017540007404882867,-1.5169273450952789e-5,-2.6069861979063126e-8,-0.0017538066861335557,-1.5015531634949477e-5,-2.593675647987724e-8,-0.0017536853789179659,-1.4872118319182157e-5,-2.5812093138283254e-8,-0.0017536279768385933,-1.4779491480665109e-5,-2.5731383005018647e-8,-0.001753606952723239,-1.477510058162383e-5,-2.5727704626657337e-8,-0.0017535772625469973,-1.4881293853944655e-5,-2.5821044107833472e-8,-0.0017534854838303832,-1.5093084239007569e-5,-2.600743669074431e-8,-0.001753286710863749,-1.5372854528035302e-5,-2.6254185280220255e-8,-0.0017529628465813953,-1.5658309245887e-5,-2.650676375421154e-8,-0.0017525321779777868,-1.5882916451512282e-5,-2.6706754294287406e-8,-0.0017520438774256833,-1.599931632431093e-5,-2.6812413521358316e-8,-0.0017515603547515798,-1.599389242849295e-5,-2.6811474485739375e-8,-0.0017511370747768787,-1.58870721613282e-5,-2.6721446136561115e-8,-0.0017508085426400448,-1.5722498178991464e-5,-2.6580205900138525e-8,-0.001750583522276346,-1.5552126055896935e-5,-2.6433054088095324e-8,-0.0017504477988545496,-1.5423007708300132e-5,-2.6321212129111954e-8,-0.001750371174214469,-1.5368439711583733e-5,-2.62740633198849e-8,-0.001750315851837096,-1.5403810993203438e-5,-2.630543047416448e-8,-0.0017502443819633047,-1.552642617773328e-5,-2.641330452405617e-8,-0.0017501260881107377,-1.5718366270618406e-5,-2.6582255837826362e-8,-0.001749941315168841,-1.595138996435713e-5,-2.6787687878177625e-8,-0.0017496832210316077,-1.6192740022060927e-5,-2.7000937830024997e-8,-0.0017493572693855985,-1.6410744434680557e-5,-2.719422519070173e-8,-0.001748978948913387,-1.6579358203906588e-5,-2.7344668887639668e-8,-0.0017485704968312657,-1.6681163415333903e-5,-2.74369274282324e-8,-0.0017481574240992264,-1.670883282721197e-5,-2.7464466784574147e-8,-0.0017477653066889829,-1.666547427544194e-5,-2.742983935525184e-8,-0.0017474168841164288,-1.6564305460559376e-5,-2.7344394725503e-8,-0.001747129279233854,-1.6427879931202274e-5,-2.722763656186771e-8,-0.0017469110243550452,-1.6286771476204226e-5,-2.7106146180372478e-8,-0.0017467586534195868,-1.6177063093025705e-5,-2.7011472007132247e-8,-0.0017466533463252492,-1.6135412490742596e-5,-2.6975864478472212e-8,-0.0017465594178202246,-1.6190686058868135e-5,-2.7024931986323628e-8,-0.0017464276261986936,-1.6352739951425828e-5,-2.7167717614836124e-8,-0.0017462061719448097,-1.6602042086509395e-5,-2.7387475511613235e-8,-0.0017458589390846183,-1.688727509586495e-5,-2.7639480984314817e-8,-0.001745383793112345,-1.7137548063945405e-5,-2.7861723308800773e-8,-0.001744819115139456,-1.7287659579105718e-5,-2.7997065592867195e-8,-0.0017442316274042247,-1.7303833560797986e-5,-2.8015768007836517e-8,-0.0017436912573285538,-1.7194973975304273e-5,-2.7925287860788828e-8,-0.001743247452036388,-1.7004614184730193e-5,-2.7763247275154654e-8,-0.0017429180130239536,-1.6791404372740664e-5,-2.758049651565357e-8,-0.0017426913839497045,-1.6609904370917028e-5,-2.7424492345162885e-8,-0.001742536475141356,-1.649859690995107e-5,-2.7328913073261393e-8,-0.0017424137905466815,-1.6475754777084468e-5,-2.731001280582881e-8,-0.0017422844622990985,-1.6540670952381766e-5,-2.7367575703814308e-8,-0.001742116355369948,-1.6677544114767887e-5,-2.7488179361086792e-8,-0.0017418876343611228,-1.686031928037145e-5,-2.764933739189588e-8,-0.0017415883616594284,-1.70577248174131e-5,-2.782387438953023e-8,-0.0017412205022093819,-1.7238115114124338e-5,-2.7984175560639326e-8,-0.0017407965855088022,-1.737379930727008e-5,-2.8106002984605667e-8,-0.0017403372333003285,-1.744456666693547e-5,-2.81716008451723e-8,-0.0017398678463401798,-1.7440083829039737e-5,-2.817179627356715e-8,-0.0017394149398974874,-1.7360942313155324e-5,-2.8106908907450188e-8,-0.0017390025998627163,-1.7218462503755394e-5,-2.7986581351569095e-8,-0.0017386492629266872,-1.7033516940844868e-5,-2.78287765345854e-8,-0.0017383648667583472,-1.6834511621145167e-5,-2.7658071698212013e-8,-0.0017381483860776027,-1.6654526309760896e-5,-2.750323777098479e-8,-0.0017379857880764208,-1.6527352718845074e-5,-2.7393844848311547e-8,-0.0017378488996451671,-1.6481799532138352e-5,-2.735530264547702e-8,-0.0017376966372265247,-1.653390656976417e-5,-2.7402002468754002e-8,-0.0017374807521994074,-1.6678137811977933e-5,-2.752950967892001e-8,-0.0017371577619254865,-1.6881003467352378e-5,-2.7708880462880502e-8,-0.0017367058418978965,-1.7082956805723142e-5,-2.7888277038928824e-8,-0.0017361397871615877,-1.7213636041267133e-5,-2.8006313607759834e-8,-0.0017355130919502622,-1.7217983517437767e-5,-2.8014887489228886e-8,-0.0017349010873700975,-1.7080148864802256e-5,-2.789998107144859e-8,-0.0017343723348015217,-1.6829898005292252e-5,-2.7687166142917287e-8,-0.0017339647832955254,-1.6527764114669422e-5,-2.742869117101087e-8,-0.0017336786370508808,-1.6239846977128967e-5,-2.718170516827529e-8,-0.0017334849605685624,-1.6017009429821272e-5,-2.6990333500378085e-8,-0.0017333407869161536,-1.588567181395312e-5,-2.6877727087182345e-8,-0.0017332024740586718,-1.5848606242811324e-5,-2.6846667644146168e-8,-0.0017330340615586818,-1.5890746362680283e-5,-2.68844715727071e-8,-0.0017328110493750382,-1.598598400945783e-5,-2.696877596915934e-8,-0.00173252127473545,-1.6103053832416733e-5,-2.7072598915931684e-8,-0.0017321643150833425,-1.6210210138051937e-5,-2.716841036510506e-8,-0.0017317501140170313,-1.6278998147010685e-5,-2.723144593688566e-8,-0.0017312970188940173,-1.6287366080985484e-5,-2.7242447571344237e-8,-0.0017308292084595779,-1.6222185622260528e-5,-2.7189872388028625e-8,-0.001730373452436675,-1.6081006942388617e-5,-2.7071418830950497e-8,-0.0017299553582569695,-1.5872667604661172e-5,-2.6894553273205772e-8,-0.0017295955423252537,-1.5616500957420817e-5,-2.6675832877706237e-8,-0.0017293061873740823,-1.5340170469505593e-5,-2.6439061947713e-8,-0.0017290883470865532,-1.507625010199129e-5,-2.6212382075122478e-8,-0.0017289303472872032,-1.485771739629063e-5,-2.6024423253133448e-8,-0.0017288076171489378,-1.4712600788592941e-5,-2.5899692716363257e-8,-0.0017286843786890062,-1.4657982104751628e-5,-2.5853345982890227e-8,-0.0017285179920752429,-1.469378801204321e-5,-2.5885710544355952e-8,-0.0017282669016267444,-1.4797809692912494e-5,-2.597784298491023e-8,-0.0017279022709099565,-1.4924826606494031e-5,-2.6090678957383975e-8,-0.0017274210330882648,-1.5013539408658058e-5,-2.6171041964052904e-8,-0.0017268544886931924,-1.500339980186787e-5,-2.6166307322124555e-8,-0.0017262646488298942,-1.4857541654773406e-5,-2.6044338623451537e-8,-0.0017257250829835684,-1.4580494467278208e-5,-2.5808814537283378e-8,-0.0017252937794389228,-1.4218526667931194e-5,-2.5499476937908507e-8,-0.0017249930231404602,-1.3840794807331261e-5,-2.517585149150039e-8,-0.0017248067699141875,-1.351270711306445e-5,-2.4894335555473773e-8,-0.0017246934534974646,-1.3276295708485894e-5,-2.4691333401292228e-8,-0.0017246038274408126,-1.314433765536367e-5,-2.4578159853052325e-8,-0.0017244948196652298,-1.3105269854769773e-5,-2.454517288778279e-8,-0.0017243364526524838,-1.3132362073222714e-5,-2.456957312402072e-8,-0.0017241132667976712,-1.3192342565411862e-5,-2.4622786661510245e-8,-0.0017238228661482834,-1.325163183139236e-5,-2.4675851118792835e-8,-0.0017234735662261548,-1.3280343921097598e-5,-2.470291409721152e-8,-0.0017230820075737141,-1.3254924222723466e-5,-2.4683557620105018e-8,-0.0017226707950760843,-1.3160121817767504e-5,-2.4604525475472103e-8,-0.001722265910630456,-1.2990581890931382e-5,-2.4461095384133306e-8,-0.001721893605087852,-1.275194862461917e-5,-2.4258014835579526e-8,-0.0017215766694778005,-1.2461004044485085e-5,-2.400961012256891e-8,-0.0017213304202050618,-1.2144266502687791e-5,-2.373858904526001e-8,-0.0017211591144521662,-1.1834740035222872e-5,-2.3473278345894057e-8,-0.0017210536379387664,-1.15669121811399e-5,-2.3243368159746304e-8,-0.0017209912434660293,-1.137053703664978e-5,-2.3074600444917153e-8,-0.00172093786428734,-1.126418106526938e-5,-2.2983213066028008e-8,-0.0017208531150557185,-1.1249725559581083e-5,-2.2971150222902847e-8,-0.0017206977257007766,-1.1309037278010377e-5,-2.3023095245395752e-8,-0.0017204427559582552,-1.1404176889886242e-5,-2.3106548502949438e-8,-0.0017200791234227555,-1.1482681882738014e-5,-2.3176327687590162e-8,-0.0017196246541953794,-1.148889330573019e-5,-2.3184350335903796e-8,-0.001719124641958263,-1.1380227657635337e-5,-2.3093722950941158e-8,-0.0017186423638384035,-1.114361781624759e-5,-2.289295661201278e-8,-0.0017182400231541156,-1.0804036814357762e-5,-2.2603315828948557e-8,-0.0017179572397719124,-1.0418304686722344e-5,-2.2273489276189473e-8,-0.0017177979779009823,-1.0055136813138216e-5,-2.1962468500676522e-8,-0.0017177326568771723,-9.771363476111051e-6,-2.171915971274942e-8,-0.0017177126940655086,-9.59618259083335e-6,-2.1568855933039855e-8,-0.0017176882158911563,-9.528664202440341e-6,-2.151102115154199e-8,-0.0017176207842986657,-9.54532916023194e-6,-2.152570092195504e-8,-0.001717488539588401,-9.61114215968148e-6,-2.1582903167043163e-8,-0.0017172856020235222,-9.688935408136953e-6,-2.1650695633700068e-8,-0.0017170188075453885,-9.745503388018222e-6,-2.1700489974222203e-8,-0.001716704030343493,-9.75481187740589e-6,-2.1709853665659155e-8,-0.001716363051667733,-9.699527683861308e-6,-2.1663854398151375e-8,-0.0017160209740540878,-9.571902058244573e-6,-2.155581284513286e-8,-0.0017157037275235207,-9.374493289871258e-6,-2.1387892099804606e-8,-0.0017154351582843574,-9.12063251889091e-6,-2.1171465309349033e-8,-0.0017152334371241793,-8.834059379219236e-6,-2.0926792740536966e-8,-0.0017151070380174468,-8.54691461997685e-6,-2.0681324010697784e-8,-0.0017150511747853247,-8.295434661355793e-6,-2.0466057621787945e-8,-0.0017150460711992154,-8.113332137404114e-6,-2.030992124260642e-8,-0.0017150584488687581,-8.023886119027629e-6,-2.0233017236108107e-8,-0.0017150469068009022,-8.032794681682757e-6,-2.0240470470753276E-08,-0.0017149705846409252,-8.124212126971078e-6,-2.031895666669989e-8,-0.0017147992299687779,-8.261786867259084e-6,-2.043750161115691e-8,-0.0017145220766764634,-8.39524066367176e-6,-2.0553060054856926e-8,-0.001714152932724592,-8.471588872493842e-6,-2.062012893709478e-8,-0.0017137294505731322,-8.448766698921679e-6,-2.0602470471424994e-8,-0.0017133056268037235,-8.30827935977141e-6,-2.0484010951138584e-8,-0.0017129382965746429,-8.062726137621993e-6,-2.0275329834940626e-8,-0.0017126708829768335,-7.754388283059394e-6,-2.0012476947012425e-8,-0.0017125200757254853,-7.443621313326269e-6,-1.9747060849152198e-8,-0.0017124712795059404,-7.190431363037621e-6,-1.9530504080148718e-8,-0.001712485108463056,-7.0366396458408515e-6,-1.9398773754969298e-8,-0.0017125116285125956,-6.995979960543143e-6,-1.9363850589301513e-8,-0.0017125055152946264,-7.054904126090996e-6,-1.941433171688431e-8,-0.0017124362267456486,-7.181290036679982e-6,-1.9522819783303132e-8,-0.0017122912356786113,-7.33559115667751e-6,-1.9655458212988638e-8,-0.0017120739679193392,-7.480041670713854e-6,-1.9779851901213196e-8,-0.0017117993662422982,-7.584250733816216e-6,-1.9869913460128613e-8,-0.0017114893374762983,-7.627641340691138e-6,-1.9907989660052855e-8,-0.0017111690927208221,-7.6000125055850025e-6,-1.9885345225042433e-8,-0.0017108644073861132,-7.501412760528949e-6,-1.9802025000362843e-8,-0.0017105992780522003,-7.341978719606794e-6,-1.966667578346078e-8,-0.0017103933189507282,-7.1417111820099305e-6,-1.949632951528594e-8,-0.0017102585004460788,-6.929573781906971e-6,-1.9315642219774395e-8,-0.0017101954017993111,-6.7409497837180035e-6,-1.9154764556717096e-8,-0.0017101899463117245,-6.612514274616833e-6,-1.904501927146042e-8,-0.0017102124219094009,-6.574302226505446e-6,-1.9012164611844463e-8,-0.0017102208546907933,-6.640381461484933e-6,-1.906841604034119e-8,-0.0017101696872487946,-6.801430426475136e-6,-1.920604126355059e-8,-0.0017100221870999638,-7.023203351349197e-6,-1.939596217498844e-8,-0.0017097624173563275,-7.2532026779098715e-6,-1.959339512897098e-8,-0.0017094018542985613,-7.4343348959541015e-6,-1.9749511339903364e-8,-0.0017089776595243197,-7.520980981562084e-6,-1.982519953065219e-8,-0.0017085430785728673,-7.491875094526717e-6,-1.98021064005799e-8,-0.0017081533169143335,-7.355782261528479e-6,-1.968751486928549e-8,-0.0017078512816734047,-7.148736530329722e-6,-1.9512013140907094e-8,-0.0017076570788535014,-6.924050653939927e-6,-1.9321004792382517e-8,-0.0017075639301940206,-6.73805286028801e-6,-1.9162573935492407e-8,-0.0017075414744693901,-6.635623404704152e-6,-1.9075152574921577e-8,-0.0017075452538536885,-6.6397481673598866e-6,-1.907856769945405e-8,-0.0017075291279762277,-6.74799680854229e-6,-1.917095975773456e-8,-0.001707456464753147,-6.936270654025548e-6,-1.9331909124735297e-8,-0.001707306873839935,-7.167486224038338e-6,-1.9529815014463757e-8,-0.0017070774940020905,-7.40150152130711e-6,-1.9730384470556232e-8,-0.001706780055599116,-7.603160648750164e-6,-1.9903542367193303e-8,-0.0017064359548183703,-7.747073464223104e-6,-2.0027552034501053e-8,-0.0017060712869391593,-7.819370843360752e-6,-2.009053088308096e-8,-0.0017057128647851082,-7.81750689300007e-6,-2.0090272816758505e-8,-0.0017053853475831233,-7.749258787440385e-6,-2.0033369653230264e-8,-0.0017051090246987348,-7.63165252439743e-6,-1.9934273203516424e-8,-0.0017048976130836205,-7.48990374053086e-6,-1.9814391821666054e-8,-0.0017047556071532683,-7.355870167993619e-6,-1.9700800557958514e-8,-0.0017046752314598494,-7.265069438578037e-6,-1.962374814999241e-8,-0.001704633907873945,-7.251176602605976e-6,-1.9612010035070857e-8,-0.0017045942123405239,-7.337574074837141e-6,-1.968569133958673e-8,-0.0017045088636094908,-7.527447475358424e-6,-1.984773628854404e-8,-0.0017043321125059295,-7.796609969145614e-6,-2.0077728553648004e-8,-0.0017040352892301902,-8.094628881719389e-6,-2.033278529821439e-8,-0.0017036199174814714,-8.357321757473915e-6,-2.0558199710134475e-8,-0.0017031207453830734,-8.527279641554265e-6,-2.07049674527795e-8,-0.0017025957211632837,-8.573251713438601e-6,-2.0746330786424403e-8,-0.0017021073995130097,-8.499347348814524e-6,-2.0685612575558143e-8,-0.0017017044497118188,-8.341162243397592e-6,-2.0552915628861326e-8,-0.0017014101770728533,-8.152663137236833e-6,-2.0393996128262026e-8,-0.001701220123087332,-7.99029114266652e-6,-2.0256802195303342e-8,-0.0017011069963663247,-7.899440803721392e-6,-2.0180015465234488e-8,-0.0017010298088642021,-7.905934485141747e-6,-2.0185786978182623e-8,-0.0017009442845075707,-8.013087611659719e-6,-2.0277176829621546e-8,-0.001700812271449088,-8.203778005991368e-6,-2.043983579510598e-8,-0.001700608518360257,-8.446292559298515e-6,-2.0646923134808663e-8,-0.0017003238336688721,-8.702227743979316e-6,-2.086581340902206e-8,-0.0016999645473487364,-8.934420936028888e-6,-2.106486263485468e-8,-0.00169954913513485,-9.113190354238928e-6,-2.1218747636263865e-8,-0.0016991033874861217,-9.22001102864717e-6,-2.1311618593498575e-8,-0.0016986554807616981,-9.248647435155238e-6,-2.13380740034121e-8,-0.0016982318855080062,-9.204399731118582e-6,-2.1302519561850147e-8,-0.0016978543995590132,-9.10238542444722e-6,-2.121770451114759e-8,-0.0016975380294125626,-8.965565187764711e-6,-2.1103046899748445e-8,-0.0016972892355614753,-8.822716746064468e-6,-2.0982928734896224e-8,-0.001697104147393287,-8.706075816679848e-6,-2.0884721675880377e-8,-0.0016969666972081788,-8.647926619789557e-6,-2.0835920379221263e-8,-0.00169684740011825,-8.675181170249637e-6,-2.0859546028640884e-8,-0.0016967045804855362,-8.801519162920972e-6,-2.0967436610679105e-8,-0.0016964905065300056,-9.01844333619171e-6,-2.1152579343920042e-8,-0.0016961639731149969,-9.289415793960601e-6,-2.138406153842879e-8,-0.001695707106127775,-9.553311743058151e-6,-2.160998864081665e-8,-0.0016951385176591758,-9.741104001052941e-6,-2.1771702413548394e-8,-0.0016945128063564176,-9.801298769835388e-6,-2.1825425829586347e-8,-0.001693902985101117,-9.720976758235634e-6,-2.176009941619977e-8,-0.0016933741666031645,-9.529958261736527e-6,-2.1600847624303437e-8,-0.0016929627649807358,-9.286767509844959e-6,-2.1397063223247418e-8,-0.0016926700984223038,-9.056285660978077e-6,-2.1203544267075215e-8,-0.0016924690855679811,-8.890755742029625e-6,-2.1064502321326876e-8,-0.0016923170302585921,-8.819805710338477e-6,-2.1005150945671767e-8,-0.0016921682214408472,-8.8489478525651e-6,-2.1030391509463162e-8,-0.0016919833229793798,-8.963433333096914e-6,-2.1127991678712995e-8,-0.0016917350451069605,-9.1345146397534e-6,-2.1273812337831973e-8,-0.0016914106590955637,-9.326304850307346e-6,-2.1437577987506275e-8,-0.0016910119930584138,-9.50234733555081e-6,-2.158843896357954e-8,-0.0016905533915853798,-9.631291450467526e-6,-2.1699798048136526e-8,-0.0016900581754099764,-9.69110899668149e-6,-2.1752905508392625e-8,-0.0016895542586885487,-9.671493446052107e-6,-2.1738910779710982e-8,-0.0016890696305639124,-9.574362283327237e-6,-2.1659302094648493e-8,-0.0016886283866275086,-9.412685663855614e-6,-2.1524925607916213e-8,-0.001688247743667381,-9.208192002297713e-6,-2.1354054577412935e-8,-0.0016879360364431592,-8.98854909081757e-6,-2.1170017704178606e-8,-0.0016876914563649197,-8.784322466768402e-6,-2.0998642806816554e-8,-0.0016875013089274406,-8.625690463057586e-6,-2.086549585606093e-8,-0.0016873417279686287,-8.53858560005698e-6,-2.0792626469016813e-8,-0.001687178325547085,-8.539692110101775e-6,-2.079432297753112e-8,-0.0016869691166023061,-8.630151987089456e-6,-2.0871746461888742e-8,-0.0016866715029369072,-8.789267347131455e-6,-2.100754636158876e-8,-0.001686254318023176,-8.97163165767185e-6,-2.1163398058176738e-8,-0.0016857129301765929,-9.112940780203801e-6,-2.1284938230037018e-8,-0.0016850801573558933,-9.148161471228022e-6,-2.1317184884815498e-8,-0.001684422796496244,-9.037763226930734e-6,-2.122672379094548e-8,-0.0016838198027999708,-8.787797426035769e-6,-2.1018591580797273e-8,-0.0016833318949512636,-8.44940531154977e-6,-2.0735764854021037e-8,-0.0016829803888256231,-8.096954946202853e-6,-2.0440726785689123e-8,-0.0016827459755191082,-7.799047296914452e-6,-2.0191141842253217e-8,-0.001682583454796451,-7.598483392665845e-6,-2.0023083749209106e-8,-0.0016824406087873034,-7.507046345778621e-6,-1.9946647297024858e-8,-0.00168227233893414,-7.511005682637191e-6,-1.995050767444206e-8,-0.0016820477635596358,-7.580629314178077e-6,-2.0009840918065495e-8,-0.0016817519149339769,-7.679226904576688e-6,-2.0093885939198342e-8,-0.0016813844563981313,-7.770076038468931e-6,-2.017176810577966e-8,-0.00168095711875254,-7.821310599237092e-6,-2.02166337334569e-8,-0.0016804905773571324,-7.809332280904686e-6,-2.020854689581189e-8,-0.001680010953275545,-7.72105576611143e-6,-2.013639837823021e-8,-0.001679546036692029,-7.555014866778501e-6,-1.999884849506686e-8,-0.0016791214090587767,-7.3212178391739496e-6,-1.9804212819061585e-8,-0.0016787568208649483,-7.0396326381076e-6,-1.956919439356282e-8,-0.0016784633058374865,-6.737431280764423e-6,-1.9316573595337173e-8,-0.0016782413530992905,-6.445394475960026e-6,-1.907219462969039e-8,-0.001678080222805157,-6.193862700986028e-6,-1.8861571689255484e-8,-0.0016779584103784654,-6.008506027515523e-6,-1.8706342929766363e-8,-0.001677845249146384,-5.906093833141004e-6,-1.8620715185890165e-8,-0.0016777038192801804,-5.890290612856807e-6,-1.8607914310898255e-8,-0.0016774958004093384,-5.947719194763358e-6,-1.8656841222782147e-8,-0.0016771890493794792,-6.04551842846217e-6,-1.873997969081269e-8,-0.001676767832841618,-6.132885965309012e-6,-1.8814675758844495e-8,-0.0016762435242489034,-6.149771262434435e-6,-1.8830466334363702e-8,-0.0016756602448421592,-6.044400624246342e-6,-1.8743841862040513e-8,-0.001675087945535953,-5.795520152856072e-6,-1.8536922752685177e-8,-0.001674600133436057,-5.427392994706577e-6,-1.8229981102522346e-8,-0.0016742451149479186,-5.004926323171685e-6,-1.7877295972549893e-8,-0.0016740276746855878,-4.608399079730942e-6,-1.7546004506771972e-8,-0.0016739119980301556,-4.302510944871832e-6,-1.729026756861099e-8,-0.0016738412334485694,-4.117301795986611e-6,-1.7135338860309113e-8,-0.0016737597260480786,-4.047201977927108e-6,-1.7076725758927597e-8,-0.0016736272940627243,-4.062129813392705e-6,-1.708939796436854e-8,-0.0016734236526182423,-4.121225593287399e-6,-1.7139232302019368e-8,-0.0016731464204356393,-4.183527382690121e-6,-1.719194905092986e-8,-0.001672806667024793,-4.214324596648135e-6,-1.721846074771176e-8,-0.0016724243936852225,-4.1882372375009135e-6,-1.7197481453770475e-8,-0.0016720247121886067,-4.090499672781078e-6,-1.71166177315317e-8,-0.001671634560924054,-3.9173958791691575e-6,-1.697273167292582e-8,-0.0016712796064216253,-3.676148262014399e-6,-1.677183719774153e-8,-0.0016709811132979546,-3.3841381804794744e-6,-1.6528438089025636e-8,-0.001670752839878428,-3.067097445950772e-6,-1.626401154436992e-8,-0.0016705983902454557,-2.755995668689129e-6,-1.6004410253319553e-8,-0.0016705096420609104,-2.4827410471397807e-6,-1.5776279333381472e-8,-0.0016704667555038147,-2.2751486697532836e-6,-1.5602864533974782e-8,-0.001670440054529566,-2.151829226592785e-6,-1.5499751063543376e-8,-0.001670393800312215,-2.117817669325008e-6,-1.5471212409242127e-8,-0.001670291584102462,-2.1617204405963794e-6,-1.5507814775575798e-8,-0.0016701029794063543,-2.2550054075283997e-6,-1.5585801952800447e-8,-0.0016698110099757678,-2.354258371242796e-6,-1.5668961170856538e-8,-0.0016694193436379667,-2.4075797922360825e-6,-1.5713962061550806e-8,-0.0016689568880535386,-2.3659216383981152e-6,-1.5679837674904023e-8,-0.001668476255894404,-2.198389705642687e-6,-1.5540770761251108e-8,-0.0016680427111036224,-1.9070635849955495e-6,-1.5298448763090533e-8,-0.0016677138985701416,-1.5331708742942751e-6,-1.49871845626283e-8,-0.001667517861434114,-1.147223731015582e-6,-1.4665690841976024e-8,-0.0016674416245268775,-8.243545513833562e-7,-1.4396566986045408e-8,-0.0016674379465091208,-6.170824570407865e-7,-1.4223645290633774e-8,-0.0016674458929825874,-5.401446955353702e-7,-1.415932767755485e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json deleted file mode 100644 index ddc7d4d..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_20.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":20000,"numberOfSamples":1000,"samples":[0.002920358133904192,-6.784113942412794e-6,1.9052440314477163e-8,0.0029206413912713745,-6.613636446664559e-6,1.880279195741177e-8,0.0029208307139081857,-6.4248857259363685e-6,1.8526799455172666e-8,0.002920930147853429,-6.259580496894272e-6,1.8285299846459358e-8,0.002920958301557765,-6.151401288497133e-6,1.8127384394993633e-8,0.002920943527534336,-6.121517965926748e-6,1.8083876197142136e-8,0.002920918375602291,-6.176714362040785e-6,1.816459054828576e-8,0.0029209142523147777,-6.309966452545619e-6,1.8359183512205728e-8,0.0029209570493570875,-6.502919273456435e-6,1.864078390277559e-8,0.0029210641805222245,-6.729529878146821e-6,1.8971329337261025e-8,0.0029212431239192664,-6.960111764971586e-6,1.9307474224319167e-8,0.0029214911994797127,-7.165144308668532e-6,1.960613535377138e-8,0.002921796120285953,-7.318617634903727e-6,1.982935162046132e-8,0.002922137007124233,-7.4010933087209115e-6,1.994874542519259e-8,0.0029224858842140738,-7.402792330024526e-6,1.9950053694911065e-8,0.0029228100891597296,-7.3269133160290385e-6,1.9838013786501703e-8,0.0029230765056806078,-7.192875581754198e-6,1.9641124744988003e-8,0.002923258593947595,-7.038021661925838e-6,1.941411030247615e-8,0.0029233461420444737,-6.914897975233613e-6,1.9233867338703342e-8,0.0029233550561071457,-6.88082642372724e-6,1.9184132872670825e-8,0.002923331035256764,-6.979157664713172e-6,1.9328047777690732e-8,0.002923340142385916,-7.2183869507838524e-6,1.9677702094935728e-8,0.002923445583922481,-7.561828631160178e-6,2.0179192009197127e-8,0.002923681317946548,-7.937980661899995e-6,2.072789220706034e-8,0.0029240384097172193,-8.268180631197756e-6,2.1208898937220332e-8,0.0029244717828463846,-8.495446917109097e-6,2.1539128515592525e-8,0.0029249206337382287,-8.5993447870362e-6,2.168897594018406e-8,0.0029253292642615033,-8.593866031641322e-6,2.1679150221309016e-8,0.002925659785723746,-8.515407336314436e-6,2.1563040883823154e-8,0.0029258958667452545,-8.409144036535884e-6,2.140676187245665e-8,0.0029260405842169023,-8.318330424117874e-6,2.1273515340970926e-8,0.0029261116369550147,-8.277597083016847e-6,2.1213831819462888e-8,0.0029261360482877165,-8.309529221173803e-6,2.1260608728115165e-8,0.0029261452014683505,-8.42340926017503e-6,2.142729184107828e-8,0.002926170313882796,-8.615486024606374e-6,2.1708269585437497e-8,0.00292623844165663,-8.870566448345604e-6,2.2081201504360447e-8,0.00292636924853009,-9.164729529600066e-6,2.2511001728707966e-8,0.0029265727710682966,-9.46889441648262e-6,2.295507952203869e-8,0.0029268483980316373,-9.752900430721535e-6,2.336931848773817e-8,0.0029271851539575938,-9.989600330613871e-6,2.371405611551756e-8,0.0029275631112714875,-1.0158516530347245e-5,2.3959412562508196e-8,0.002927955664309901,-1.0248883948905652e-5,2.408973052847181e-8,0.002928332543885939,-1.0262052169211477e-5,2.4107097524156514e-8,0.002928663659626732,-1.0213176614852856e-5,2.4033835922844377e-8,0.002928924086482032,-1.0131859571605514e-5,2.391343414198871e-8,0.002929100469893201,-1.006068720901442e-5,2.380835533385682e-8,0.00292919825272032,-1.0049779074946679e-5,2.3791978424671676e-8,0.0029292472514429032,-1.0145544621233506e-5,2.3932078427797663e-8,0.0029293008561212352,-1.0374107175155202e-5,2.4266580620660107e-8,0.0029294238469290295,-1.0725024417737487e-5,2.4779841229322424e-8,0.002929669111734987,-1.114611883277768e-5,2.539521780426727e-8,0.0029300535325597157,-1.1558053316444333e-5,2.599647534430263e-8,0.0029305485124082784,-1.1884615009568598e-5,2.647210161222967e-8,0.0029310923955805034,-1.2081611605397568e-5,2.675757842754958e-8,0.002931616304399638,-1.2148069338781219e-5,2.6851763811636517e-8,0.002932067285150511,-1.2117575796211164e-5,2.6804177118692685e-8,0.002932418917621506,-1.2040100109443465e-5,2.6688285414068273e-8,0.002932670230039864,-1.1965464765100921e-5,2.657720810322275e-8,0.0029328387680504554,-1.1933289258766363e-5,2.6528961772784398e-8,0.00293295270881014,-1.196897681852962e-5,2.658062017342903e-8,0.002933044376699607,-1.2083490982675024e-5,2.67480469420976e-8,0.0029331455921541476,-1.2274805413081184e-5,2.7028061070784242e-8,0.002933284292138651,-1.2529877406152909e-5,2.7401345594697467e-8,0.00293348183921598,-1.2826952297089921e-5,2.7835835906596038e-8,0.0029337508490475143,-1.3138354603080276e-5,2.829083170402535e-8,0.002934093645838865,-1.3433894030281315e-5,2.872201713802254e-8,0.0029345016544849406,-1.3684880135773215e-5,2.908736254701938e-8,0.0029349561406361926,-1.386840837531521e-5,2.935340201831078e-8,0.002935430486740117,-1.3971275110489517e-5,2.95009506018706e-8,0.002935893835760189,-1.3992889279387817e-5,2.9529348563241594e-8,0.002936315747796631,-1.3946693107954746e-5,2.9458526641335536e-8,0.0029366714399644074,-1.3859725730502529e-5,2.9328347332084718e-8,0.0029369471463227275,-1.3770076163005065e-5,2.919483182596872e-8,0.0029371450608840764,-1.3721886782902614e-5,2.912277265954847e-8,0.002937286864066753,-1.3757394229001907e-5,2.917400350300773e-8,0.0029374138979444495,-1.3905986529102212e-5,2.9391340967481903e-8,0.002937581299334286,-1.4172039349156543e-5,2.9780814874648412e-8,0.002937844163109093,-1.45262281968288e-5,3.029905020497397e-8,0.0029382377175291947,-1.4907319198974039e-5,3.085599616240686e-8,0.0029387598782889463,-1.5239082205155629e-5,3.13397558100923e-8,0.0029393676298225253,-1.5457827043506526e-5,3.165695446938089e-8,0.002939992216838139,-1.5536378976067384e-5,3.1767915909756623e-8,0.0029405653190518453,-1.5490797301223943e-5,3.169654522724492e-8,0.002941041254771594,-1.536815347138079e-5,3.151235350452084e-8,0.00294140542344543,-1.5225670745632641e-5,3.129971116966001e-8,0.0029416699353257774,-1.511314588614597e-5,3.113191036723647e-8,0.002941863403875871,-1.5063955018859357e-5,3.105791466104839e-8,0.002942020994539501,-1.5093505935668198e-5,3.110013611490886e-8,0.002942177366646585,-1.520170158147927e-5,3.125814014183412e-8,0.0029423625508156873,-1.537654151057894e-5,3.1514004634474597e-8,0.002942599690849947,-1.559743059921687e-5,3.183721614696178e-8,0.00294290359336924,-1.5838011990550073e-5,3.2188849522134435e-8,0.00294327957060671,-1.606891948600009e-5,3.252562907878252e-8,0.002943722566359027,-1.626091105834113e-5,3.2804552667574874e-8,0.0029442169460562008,-1.6388674978272435e-5,3.2988495583917805e-8,0.002944737613991192,-1.643514977217652e-5,3.3052553288382284e-8,0.002945253028492552,-1.6395599116742716e-5,3.299000825108424e-8,0.0029457301748656087,-1.6280316984019043e-5,3.2816276383530096e-8,0.0029461409054937337,-1.6114844458962526e-5,3.2569189442586106e-8,0.002946468467779173,-1.59369584836108e-5,3.230452078197805e-8,0.0029467127007430827,-1.5790452065963385e-5,3.20867790313752e-8,0.002946892484190752,-1.571653783339316e-5,3.19765091292342e-8,0.0029470444074099875,-1.574421226294738e-5,3.201610119609517e-8,0.00294721700040216,-1.5881334913556607e-5,3.2216717921521556e-8,0.002947460426363542,-1.6108825234197094e-5,3.2549869520431156e-8,0.002947812788728661,-1.6380947123874963e-5,3.294795449427606e-8,0.002948286406491707,-1.663423983095662e-5,3.3317466246604255e-8,0.0029488597757889802,-1.6805051579412595e-5,3.356478318315856e-8,0.0029494809972528905,-1.6850594771345913e-5,3.362711592054566e-8,0.0029500837834087173,-1.6764027436157334e-5,3.3494691584581735e-8,0.002950609547099543,-1.65754022846451e-5,3.321214488618771e-8,0.0029510248489415226,-1.6338277873894157e-5,3.285874310463184e-8,0.002951326908519711,-1.6110067758768604e-5,3.251932528889389e-8,0.002951537740617979,-1.5935923031543694e-5,3.226045946019777e-8,0.002951692897861342,-1.5841154803625142e-5,3.2119268917177497e-8,0.0029518308167177263,-1.5831373922113136e-5,3.210371527010424e-8,0.002951985680243071,-1.5896753371837802e-5,3.219898309769699e-8,0.0029521838394617654,-1.6017149276703177e-5,3.237510141211502e-8,0.0029524425171660266,-1.6166416508957604e-5,3.259333287301716e-8,0.002952769476479237,-1.631566760743691e-5,3.281097659429368e-8,0.0029531628666808734,-1.6435949662826805e-5,3.298530817637135e-8,0.002953611072809355,-1.6501010877409013e-5,3.307765926789581e-8,0.0029540929521073237,-1.6490693620487103e-5,3.305842467294873e-8,0.002954579264429746,-1.639499922671663e-5,3.291305556929234e-8,0.00295503617946976,-1.6218085914775832e-5,3.264794315872196e-8,0.0029554312636725514,-1.598068794654785e-5,3.2293958485677294e-8,0.002955741283648492,-1.5719093070127868e-5,3.1904895652031e-8,0.002955959806034109,-1.547937573783238e-5,3.154889715991773e-8,0.0029561017019983917,-1.5307268455907255e-5,3.129343797151466e-8,0.002956202124345455,-1.5236171399037398e-5,3.118759456372629e-8,0.002956309344895545,-1.5277053681785616e-5,3.124717312307237e-8,0.002956473061121083,-1.5413664099591182e-5,3.144774573045378e-8,0.002956731321048645,-1.56048785559379e-5,3.1728248939181924e-8,0.00295709965139376,-1.5793981380019647e-5,3.20047831722283e-8,0.002957565526219128,-1.592284518104132e-5,3.2191570296512827e-8,0.002958090281759539,-1.5947524626471783e-5,3.2223937815342005e-8,0.0029586188407144266,-1.5850738642942996e-5,3.2076690446522256e-8,0.002959094945026436,-1.5646720190761735e-5,3.177121976954928e-8,0.002959476848073268,-1.5376083073574004e-5,3.136786811924238e-8,0.0029597476091094625,-1.5092533249955837e-5,3.094622473963542e-8,0.0029599165389014807,-1.4847001851064014e-5,3.058161120537158e-8,0.0029600126576895124,-1.4675368085643121e-5,3.032691574396036e-8,0.0029600742944759875,-1.4593152680899354e-5,3.020479859533819e-8,0.0029601393336397405,-1.4596748310243467e-5,3.020960605628144e-8,0.002960238698290419,-1.4668406120361078e-5,3.031483113270092e-8,0.002960393348094185,-1.4782054688900286e-5,3.048176038556993e-8,0.0029606137208240614,-1.4908213038661743e-5,3.0666732803764704e-8,0.002960900307724539,-1.5017561814104221e-5,3.082638893027108e-8,0.002961244434757364,-1.50835587775595e-5,3.092151102287129e-8,0.0029616289196745093,-1.508481954343969e-5,3.092053838966425e-8,0.0029620288994349014,-1.5007922270276185e-5,3.080373072655211e-8,0.002962413625758523,-1.485083932757977e-5,3.056826258788275e-8,0.0029627502369207145,-1.4626387490437281e-5,3.023332794121676e-8,0.002963010182597418,-1.4364071234967201e-5,2.9842834228472035E-08,0.002963177767764606,-1.4107920694885702e-5,2.9462135061082662e-8,0.002963258245024794,-1.390835698351417e-5,2.9165907356940043e-8,0.002963281197327158,-1.3808595017261191e-5,2.9017964910745684e-8,0.0029632955592347656,-1.3829869002871433e-5,2.9049396981577167e-8,0.0029633562901483323,-1.396211303207011e-5,2.9244867118890364e-8,0.002963507429295757,-1.4165122782118485e-5,2.9544476640865564e-8,0.0029637685076608447,-1.4380196230406393e-5,2.986111941278739e-8,0.0029641293995320965,-1.4547336536681909e-5,3.010599812437667e-8,0.0029645544477331213,-1.462147944059388e-5,3.021262159737794e-8,0.002964993199433165,-1.4582947790407866e-5,3.015220993420224e-8,0.002965393786237881,-1.4440252912374524e-5,2.993775541428279e-8,0.002965715263846332,-1.4225700000439636e-5,2.9617431791449873e-8,0.002965936105661564,-1.3985740295725363e-5,2.926023813664994e-8,0.0029660572013795127,-1.3768956215185547e-5,2.893816297894991e-8,0.0029660991821764673,-1.361495218959358e-5,2.8709729777681658e-8,0.0029660954822132313,-1.3546940317984253e-5,2.8609061319606824e-8,0.0029660836753954115,-1.3569374678669404e-5,2.86424548981107e-8,0.002966097715672726,-1.3670152439685494e-5,2.8791723939980673e-8,0.002966162758787371,-1.382559151959131e-5,2.9021622975413763e-8,0.002966292909415142,-1.4006141463460001e-5,2.9288313696922994e-8,0.0029664912327432187,-1.4181368889154244e-5,2.9546719679842586e-8,0.00296675098439865,-1.432364071392131e-5,2.975594063607446e-8,0.0029670571768570203,-1.441068763053631e-5,2.988302426452729e-8,0.0029673880824924595,-1.4427641005829092e-5,2.990599124607975e-8,0.0029677168251591012,-1.4369146872198044e-5,2.9817001755657374e-8,0.002968013691011178,-1.4241810907193253e-5,2.962601250879183e-8,0.0029682500709710805,-1.4066513065220714e-5,2.93642059457502e-8,0.002968404731954602,-1.387910107568484e-5,2.9084963591962518e-8,0.002968471978193223,-1.3727039399383037e-5,2.88588007731629e-8,0.002968469059433979,-1.3659767445614165e-5,2.875897632722551e-8,0.0029684378958154877,-1.3713145157645224e-5,2.8838395498620046e-8,0.00296843646941631,-1.3893353069001035e-5,2.9105800690051132e-8,0.0029685202671800416,-1.4169383669450605e-5,2.9514779524273305e-8,0.0029687215722676882,-1.4480741544933563e-5,2.997532983204709e-8,0.0029690374925616814,-1.4758063993347154e-5,3.038452227517716e-8,0.002969432550313911,-1.494625005415047e-5,3.0660807023103234e-8,0.0029698527534371528,-1.501941615613648e-5,3.076614564288683e-8,0.002970242975131316,-1.4983590593674082e-5,3.070991787329774e-8,0.002970560707010411,-1.486978332026129e-5,3.053852833456252e-8,0.002970783380041674,-1.4722598896256202e-5,3.031840881526067e-8,0.0029709096528671933,-1.4588664344004444e-5,3.01187930361603e-8,0.0029709563531596737,-1.4507263299708571e-5,2.999782950169233e-8,0.0029709528196634203,-1.450412607323851e-5,2.9993430059943106e-8,0.0029709340930672533,-1.4588613765477793e-5,3.011917526326649e-8,0.0029709342235076834,-1.4754157039491757e-5,3.036503994043903e-8,0.0029709808089967682,-1.4981337496558506e-5,3.070201327711546e-8,0.0029710914938153535,-1.524256500555707e-5,3.1089054340748793e-8,0.0029712726180356206,-1.5507206205397086e-5,3.1480689014010646e-8,0.0029715197167699482,-1.5746211713835314e-5,3.1833846061620287e-8,0.002971819217195222,-1.5935676545529305e-5,3.211310994113541e-8,0.0029721506391493777,-1.6059298169857467e-5,3.2294356226821274e-8,0.002972488915422919,-1.6110085669579795e-5,3.236730284468479e-8,0.0029728068475521232,-1.609171171330991e-5,3.233754856855953e-8,0.0029730780491342918,-1.6019684593364873e-5,3.2228331099957483e-8,0.002973280996517472,-1.5922014544477006e-5,3.2081488017266414e-8,0.002973404663571169,-1.5838170077771026e-5,3.195582334149546e-8,0.0029734552005521004,-1.581431674792034e-5,3.1919928221359786e-8,0.002973461188362297,-1.589302000644207e-5,3.2036819078499595e-8,0.0029734728689441363,-1.609792381140514e-5,3.234121094806937e-8,0.0029735507610109523,-1.6418860094304986e-5,3.281753040259766e-8,0.002973744280704623,-1.6807320664665265e-5,3.3393348896120576e-8,0.0029740698756861514,-1.7189700640362698e-5,3.395915574472174e-8,0.002974502213153519,-1.7494403406110863e-5,3.4408643234550394e-8,0.002974984560957685,-1.767802825408724e-5,3.4677597890506306e-8,0.0029754513730213712,-1.773672456282881e-5,3.476073805538473e-8,0.002975849730807777,-1.7700253301847003e-5,3.470280180238341e-8,0.0029761508530331345,-1.7616516953682456e-5,3.4575409590022556e-8,0.0029763511916333146,-1.7535807952942615e-5,3.445351817065031e-8,0.0029764671850589274,-1.7499734982786542e-5,3.439891544803893e-8,0.002976527814731713,-1.753553605886131e-5,3.445182277720747e-8,0.0029765674333753333,-1.7654482487030005e-5,3.462863214504655e-8,0.0029766197783471023,-1.785285028144174e-5,3.4923452338110174e-8,0.002976713303471049,-1.8114495901758313e-5,3.531200044507124e-8,0.00297686786306883,-1.841450460826479e-5,3.575704849602197e-8,0.002977092820345906,-1.8723439945705067e-5,3.6214741069552453E-08,0.0029773865940886136,-1.9011730919729806e-5,3.6641106825301627e-8,0.00297773758195352,-1.9253744086145604e-5,3.6998098021908325e-8,0.002978126225410339,-1.9431077092030192e-5,3.725847234837322e-8,0.002978527778364898,-1.953481608938666e-5,3.740914085341509e-8,0.0029789154040244796,-1.9566826718393777e-5,3.7453087807647996e-8,0.002979263474936315,-1.9540223734977267e-5,3.741007038668588e-8,0.002979551126528603,-1.9479037319080024e-5,3.731610210216535e-8,0.002979766242014358,-1.9416859969519788e-5,3.722137847792964e-8,0.0029799099497124348,-1.9393715173435276e-5,3.7185523694292244e-8,0.002980000915971834,-1.94498533312271e-5,3.7268276541520824e-8,0.0029800772524500073,-1.9615566721707554e-5,3.7514326950814606e-8,0.002980192469529219,-1.9898167604817833e-5,3.7934040287157073e-8,0.0029804022602219083,-2.0271164712515565e-5,3.8487521814506124e-8,0.0029807434701728474,-2.067424132501533e-5,3.9084720785291444e-8,0.0029812147089178787,-2.1030261025836366e-5,3.961077233026522e-8,0.0029817719928732045,-2.127449949752043e-5,3.99694784583061e-8,0.0029823449666828935,-2.1379992430783766e-5,4.0121037663042906e-8,0.0029828645165091085,-2.136410513008704e-5,4.009182899623436e-8,0.0029832854451143304,-2.127531976246566e-5,3.995464665032265e-8,0.002983594498668351,-2.1171712511966522e-5,3.97964527218785e-8,0.0029838054954291746,-2.1103248487216302e-5,3.9691834147374094e-8,0.002983948836829765,-2.110276132606735e-5,3.968953147631429e-8,0.002984061290257191,-2.1184288397485705e-5,3.981006008442894e-8,0.002984178513731084,-2.1345484561751207E-05,4.004945855912969e-8,0.00298433040769511,-2.157146104983014e-5,4.0385128619668554e-8,0.002984538433971821,-2.183875045296736e-5,4.078179890719198e-8,0.002984814157245484,-2.2119128743535838e-5,4.1197228817699106e-8,0.0029851587068223267,-2.2383338100873876e-5,4.158774803164346e-8,0.0029855631058775885,-2.260472386163859e-5,4.191366897386889e-8,0.002986009558291577,-2.2762699849510053e-5,4.214444460091879e-8,0.002986473810408079,-2.2845709776562213e-5,4.226307152736928e-8,0.0029869284555065143,-2.285321248440732e-5,4.226903134195116e-8,0.0029873468009023675,-2.279640960153469e-5,4.217934987696174e-8,0.0029877069362470323,-2.2697618488155953e-5,4.202762496290873e-8,0.002987995706883981,-2.2588196005956238e-5,4.186087368514205e-8,0.0029882122724941918,-2.250493424394035e-5,4.173407992678916e-8,0.002988370845250907,-2.2484777608857293e-5,4.170223881865493e-8,0.0029885017936435655,-2.255756728162393e-5,4.180950622118746e-8,0.002988649508545319,-2.2737002269993502e-5,4.20757789848222e-8,0.002988864944534272,-2.3011660125789477e-5,4.248345478531366e-8,0.0029891917531914853,-2.3340375925996207e-5,4.2970713042447454e-8,0.0029896486141179545,-2.3657833305475466e-5,4.3439950290240724e-8,0.002990215930999584,-2.3893473135528555e-5,4.378597223794274e-8,0.0029908371871804683,-2.399812996226874e-5,4.393568517521914e-8,0.0029914382467285117,-2.396417191820179e-5,4.3878147729951906e-8,0.0029919551613743003,-2.38265851199188e-5,4.3666186218943454e-8,0.0029923547556799392,-2.364535922564181e-5,4.33899815622375e-8,0.0029926388924618567,-2.34815530183942e-5,4.314111317342226e-8,0.0029928352743501543,-2.3379858232251807e-5,4.298635560434982e-8,0.002992983643000855,-2.3362211966869825e-5,4.2958145653724355e-8,0.002993124239325345,-2.3429729514789833e-5,4.305762336091702e-8,0.0029932908205783236,-2.3568260581625195e-5,4.3263117748307686e-8,0.0029935075467194595,-2.3754218892099406e-5,4.353897939933425e-8,0.002993788115402275,-2.3959322132927218e-5,4.3842700238288005e-8,0.002994135865131543,-2.415427368613513e-5,4.413039745178603e-8,0.002994544317604473,-2.431187474329782e-5,4.436143642962751e-8,0.0029949981369148688,-2.4409940834154676e-5,4.4502773677267694e-8,0.002995474733920963,-2.4434159363146072e-5,4.453322269139798e-8,0.002995946867852737,-2.438065412063379e-5,4.444727962470359e-8,0.0029963863997792425,-2.4257633800533217e-5,4.425756592263305e-8,0.0029967688850502656,-2.4085455016201706e-5,4.399488097416399e-8,0.002997078338300538,-2.3894673268282683e-5,4.370522458009922e-8,0.002997311349129843,-2.3721945852451404e-5,4.344359182276227e-8,0.002997479656226587,-2.360404297666528e-5,4.32649398235654e-8,0.0029976103593761477,-2.357065305448074e-5,4.3213385803306306e-8,0.002997743110787153,-2.3636926496027646e-5,4.3311086910764544e-8,0.002997923748088096,-2.379704664473801e-5,4.354874311053949e-8,0.0029981942175954005,-2.4020889171051923e-5,4.388077348084879e-8,0.0029985799058661606,-2.4256592745038067e-5,4.422930981774514e-8,0.0029990778745615423,-2.444143335305884e-5,4.450051619084297e-8,0.002999651934402648,-2.4520419116148653e-5,4.461236561595702e-8,0.003000240119555401,-2.4466536425871935e-5,4.452486712152954e-8,0.0030007744382348467,-2.4292342453891288e-5,4.4257372821343864e-8,0.0030012043836071256,-2.4045254021272564e-5,4.388146492212079e-8,0.003001512146798215,-2.3788596603881732E-05,4.3492440534199405e-8,0.003001713011004348,-2.3579216292932016e-5,4.3175608587979206e-8,0.0030018440201570076,-2.345253767991309e-5,4.298382851303703e-8,0.0030019492490419297,-2.3418849803166555e-5,4.293202980731309e-8,0.0030020683571267115,-2.3467794115789163e-5,4.300412504387121e-8,0.003002230577040951,-2.3575924418412295e-5,4.3164515275253525e-8,0.0030024530481396073,-2.371369072928725e-5,4.336864156691746e-8,0.0030027414546316424,-2.3850507219765965e-5,4.357057053753451e-8,0.0030030914014577796,-2.395813305179184e-5,4.3728004665977624e-8,0.003003489836964812,-2.4013129247926298e-5,4.3805913400348664e-8,0.003003916505986112,-2.3999045197511412e-5,4.3779791639210484e-8,0.0030043458018004154,-2.3908648392456543e-5,4.3639009503235175e-8,0.003004749546491452,-2.3746015567883387e-5,4.338995688522113e-8,0.0030051010544452283,-2.3527756377723387e-5,4.305786620408989e-8,0.003005380278727441,-2.3282359290256304e-5,4.268578367873625e-8,0.0030055791218540325,-2.3046814799346892e-5,4.232942511550203e-8,0.003005705403471987,-2.2860300990568903e-5,4.2047613637055405e-8,0.0030057838269298923,-2.2755768795899834e-5,4.188959157506121e-8,0.0030058528292368726,-2.275134395340437e-5,4.188212374752424e-8,0.003005957307061821,-2.2843946110056914e-5,4.2020014794074985E-08,0.003006138413427418,-2.300724171618979e-5,4.226319699714995e-8,0.0030064225790959894,-2.319527741556905e-5,4.254234844837243e-8,0.003006812562702178,-2.335201743558618e-5,4.277330694714285e-8,0.0030072836012702583,-2.3425444976355578e-5,4.2878234687331705e-8,0.003007787264335132,-2.3382901257872224e-5,4.280856410095554e-8,0.003008263689228249,-2.3222450315454287e-5,4.2561953877304193e-8,0.0030086592071474436,-2.2974830200955383e-5,4.218511547518296e-8,0.0030089426676550976,-2.26937486182808e-5,4.17591305405803e-8,0.00300911333844383,-2.2438134195979213e-5,4.137267939823414e-8,0.003009197487585295,-2.225432969879038e-5,4.1095226879594374e-8,0.003009236757661162,-2.216547948200621e-5,4.0961121500672567e-8,0.003009274709149118,-2.217043771176245e-5,4.09681037873079e-8,0.0030093468102407217,-2.224960297551781e-5,4.108625065125137e-8,0.003009475717436156,-2.2373205783984607e-5,4.1270546851323725e-8,0.003009670815179887,-2.250862585044295e-5,4.147189797251425e-8,0.0030099299700386954,-2.2625428795493783e-5,4.164463699013084e-8,0.00301024187402901,-2.269838136100306e-5,4.1750971465696804e-8,0.003010588197802463,-2.2709282253166442e-5,4.17636812926794e-8,0.0030109454772800953,-2.2648401738654642e-5,4.1668279995880246e-8,0.0030112871514783373,-2.2515993789587058e-5,4.1465320020488957e-8,0.003011586410402015,-2.2323777967550487e-5,4.1172650945728414e-8,0.003011820354517727,-2.2095615453953176e-5,4.082642765490463e-8,0.0030119753682766987,-2.1866121724890676e-5,4.0478962804724885e-8,0.0030120526329220835,-2.167596603147096e-5,4.019155827324615e-8,0.003012071619005174,-2.1563470526289128e-5,4.002177521312465e-8,0.0030120689879420764,-2.1553983387326334e-5,4.0007412510859045e-8,0.0030120914835277484,-2.1650539471334874e-5,4.015251477306536e-8,0.003012183981443884,-2.1829957093484467e-5,4.0421644155871945e-8,0.003012376436940448,-2.2046872823385574e-5,4.074612539538994e-8,0.003012674385510726,-2.2245060636632923e-5,4.104120937557746e-8,0.003013056385483303,-2.237249037808146e-5,4.122877520759659e-8,0.003013479206572159,-2.2395363336080645e-5,4.125840285038834e-8,0.00301388907552939,-2.2307009988112173e-5,4.112064949092303e-8,0.003014235716569667,-2.21292539477236e-5,4.0848957479960844e-8,0.0030144852458368573,-2.1905904722336058e-5,4.0509715506145036e-8,0.003014628140393211,-2.1690273931464643e-5,4.0183354013727575e-8,0.0030146798861370155,-2.1530670765035162e-5,3.9942465173289727e-8,0.003014674513909391,-2.1458647516230403e-5,3.9834154839566405e-8,0.0030146539150070514,-2.1483480978725524e-5,3.9871866653527925e-8,0.003014657045850174,-2.159355446238517e-5,4.003762590554032e-8,0.0030147123189946208,-2.1762610361229233e-5,4.029158028075859e-8,0.0030148344079461886,-2.1957660138997936e-5,4.0583952504102195e-8,0.003015024723893025,-2.214588593896058e-5,4.0865392615269084e-8,0.0030152739036193445,-2.22993320272481e-5,4.109395623141755e-8,0.0030155648211872598,-2.239750335835605e-5,4.123893927793968e-8,0.0030158753159103555,-2.242862410171888e-5,4.1282740545661414e-8,0.0030161804959735242,-2.239035571976067e-5,4.122196425411615e-8,0.0030164549748184135,-2.2290484655788065e-5,4.106850249505057e-8,0.0030166756785176938,-2.2147566876471484e-5,4.085053467582822e-8,0.0030168257902463656,-2.1990840651876128e-5,4.0612367627877493e-8,0.0030168998356597245,-2.185809576971141e-5,4.041113557692705e-8,0.003016908801918456,-2.1790004412026398e-5,4.030814374624823e-8,0.0030168827390098687,-2.1820318277313286e-5,4.035402021045058e-8,0.0030168675107474373,-2.19637983748077e-5,4.057054444845606e-8,0.003016913871536386,-2.220687703617631e-5,4.09366942603126e-8,0.003017061280745224,-2.2507121073764624e-5,4.138801109760418e-8,0.0030173232653145413,-2.28042122748035e-5,4.1833304318833444e-8,0.0030176816547766365,-2.3038752114974032e-5,4.218308051823787e-8,0.003018092461901088,-2.317060860472061e-5,4.2377204037070425e-8,0.0030185000617629827,-2.3189358211647577e-5,4.240056434796237e-8,0.0030188531890023565,-2.3114278349446322e-5,4.2282916648184983e-8,0.0030191172695145925,-2.298608274263823e-5,4.2086230161827244e-8,0.003019280521670172,-2.2854616393563075e-5,4.188596434454325e-8,0.00301935377876645,-2.27664496809722e-5,4.1752283274555145e-8,0.0030193653932179577,-2.2755137035095014e-5,4.173540981919782e-8,0.0030193531828910203,-2.2835689436507088e-5,4.185743087774839e-8,0.003019355569264338,-2.3003756094996915e-5,4.211123646364793e-8,0.003019403958407845,-2.323899690414335e-5,4.246574371735947e-8,0.003019517875462904,-2.3511172447957385e-5,4.2875145551518413e-8,0.003019703373553423,-2.3786991097561844e-5,4.328922423781491e-8,0.003019954219332213,-2.4036029761377636e-5,4.3662218358333147e-8,0.003020254766068992,-2.423482031971884e-5,4.395891153209101e-8,0.003020583367897793,-2.4369010761043288e-5,4.415784033020523e-8,0.0030209155492026242,-2.4434102956819604e-5,4.425239523927991e-8,0.0030212267021837735,-2.443546844269732e-5,4.4250868318591255e-8,0.0030214945520319145,-2.438812313993975e-5,4.417614262844354e-8,0.0030217018620748537,-2.4316298536123176e-5,4.406504030121207e-8,0.0030218398456035413,-2.4252307744576375e-5,4.396654725060574e-8,0.003021912331535931,-2.4233602777596313e-5,4.39372627104561e-8,0.0030219396761021347,-2.429662036167427e-5,4.4032012805518794e-8,0.0030219599100410016,-2.4466782499552282e-5,4.4288740896769435e-8,0.00302202361177359,-2.4746531459929342e-5,4.47105455738881e-8,0.003022180395983599,-2.5107010582484676e-5,4.525329764117915e-8,0.003022460057180725,-2.5490814286278737e-5,4.5829951905006934e-8,0.003022857627761485,-2.5828964736561783e-5,4.633626256410645e-8,0.003023332267934383,-2.6065721301283244e-5,4.668826880948124e-8,0.003023821927221237,-2.6178133626157623e-5,4.685181828073514e-8,0.0030242654527104103,-2.618060722133502e-5,4.6849397702988095e-8,0.00302462064736006,-2.6115003315723564e-5,4.674500325784846e-8,0.003024872054652819,-2.6034210741007566e-5,4.661907867346306e-8,0.003025029247398639,-2.5987096868666402e-5,4.654559337911846e-8,0.003025119674183166,-2.600869221520683e-5,4.657718713531259e-8,0.0030251798618585422,-2.6115962524536738e-5,4.6738915646380234e-8,0.003025247304514287,-2.6307892425086884e-5,4.702858653637406e-8,0.0030253540345252404,-2.6568373656992416e-5,4.742130825887169e-8,0.003025522180290973,-2.6870812112854194e-5,4.7876552038498893e-8,0.0030257616742353777,-2.718362842899639e-5,4.834647617031556e-8,0.0030260701248843638,-2.7475754898200334e-5,4.878418797216237e-8,0.003026434531440565,-2.7721296131052857e-5,4.915072369570908e-8,0.003026834267375794,-2.790282528074767e-5,4.941997646359749e-8,0.003027244652317317,-2.801310467185596e-5,4.958126578195143e-8,0.00302764045789911,-2.8055375984440208e-5,4.963976761859313e-8,0.0030279989828120874,-2.8042678247256376e-5,4.961548465878466e-8,0.003028302732030385,-2.7996614735003015e-5,4.9541371336797554e-8,0.0030285419382640503,-2.7945668380696642e-5,4.946074008271887e-8,0.0030287171664962805,-2.7922799028450726e-5,4.9423540183523226e-8,0.003028841979820805,-2.796162115926255e-5,4.948048077466765e-8,0.0030289448272879803,-2.8090202994150213e-5,4.967360897101288e-8,0.00302906808799766,-2.832216698757468e-5,5.002291747065914e-8,0.003029261393516597,-2.8646859820436187e-5,5.051165188848918e-8,0.0030295674732655794,-2.9023648863821986e-5,5.107788139765754e-8,0.0030300035036457318,-2.9387468552092513e-5,5.1622994265168756e-8,0.003030547654439084,-2.966892547984612e-5,5.204210187529804e-8,0.0030311419708281494,-2.9821700123341288e-5,5.226546402242462e-8,0.003031713429022907,-2.9841451121119933e-5,5.228710697781398e-8,0.0030322015269454838,-2.9764614366811912e-5,5.216297581619774e-8,0.003032576700297681,-2.964992539693665e-5,5.1982771928407634e-8,0.0030328427049061664,-2.95558177823456e-5,5.18354400080819e-8,0.0030330273738204275,-2.952483864326578e-5,5.178537523848844e-8,0.0030331699517057442,-2.9577898541893805e-5,5.1863748181959154e-8,0.0030333104138618784,-2.9715604944099784e-5,5.207074030425486e-8,0.003033482465717576,-2.9922976396352082e-5,5.238294189196952e-8,0.0030337098242709487,-3.017493755703473e-5,5.276185486031358e-8,0.0030340047066781646,-3.0441434203506502e-5,5.316170038656006e-8,0.0030343677318868385,-3.069201162682167e-5,5.353632168723621e-8,0.0030347889661070187,-3.089987345211356e-5,5.384526338775909e-8,0.0030352499978571756,-3.104524236184448e-5,5.405880170678398e-8,0.0030357268634388502,-3.111778908424594e-5,5.416158516454266e-8,0.0030361935715449567,-3.1117887001919675e-5,5.415451590233293e-8,0.003036625814699871,-3.105651407747209e-5,5.4054586154864e-8,0.003037004388893214,-3.095390233892545e-5,5.3892806738359834e-8,0.003037318044491069,-3.083722670992275e-5,5.3710656905416486e-8,0.0030375656938618433,-3.073753439132445e-5,5.355535566628204e-8,0.0030377579336559293,-3.068595891553895e-5,5.347403607373892e-8,0.0030379177300265737,-3.0709070813912385e-5,5.350663829087113e-8,0.00303807966723912,-3.0823076928323533e-5,5.367713979638666e-8,0.0030382864205653216,-3.102708512509555e-5,5.3983480616954495e-8,0.003038580787609243,-3.1297162733261364e-5,5.438876948576837e-8,0.0030389926926067358,-3.158502205672186e-5,5.481947606929273e-8,0.003039524072818,-3.1826340398447944e-5,5.517809779127173e-8,0.0030401396754807146,-3.196074975273588e-5,5.5373393880473416e-8,0.0030407732402690456,-3.1956872342941396e-5,5.5358273365942866e-8,0.0030413506216760183,-3.1827784431995975e-5,5.515324561172027e-8,0.0030418182463314066,-3.1625541651179424e-5,5.4838080988230775e-8,0.003042160215499455,-3.141800758364335e-5,5.4516451859117366e-8,0.003042396527409552,-3.126315753054347e-5,5.4276642795710085e-8,0.003042568426483442,-3.119410063882663e-5,5.416865946881467e-8,0.0030427219468042673,-3.121729790939866e-5,5.4201628447496637e-8,0.0030428965072263536,-3.131876817788899e-5,5.435349924198628e-8,0.0030431195875498325,-3.1472417249374476e-5,5.4583966139684054e-8,0.003043405671120528,-3.164719823662061e-5,5.48454888443154e-8,0.003043757278206,-3.181220441401584e-5,5.509103044165085e-8,0.0030441666670632966,-3.194016210578213e-5,5.527928024881129e-8,0.0030446177728978936,-3.2010055857858906e-5,5.537854846801234e-8,0.0030450884814295937,-3.200922767702134e-5,5.5369895852801475e-8,0.003045553386619406,-3.193493319092446e-5,5.524947681257876e-8,0.003045987115545042,-3.179510076572901e-5,5.502968803317016e-8,0.0030463680745412454,-3.1607871380829794e-5,5.473845618856727e-8,0.0030466821164058687,-3.139963516825679e-5,5.441621391559135e-8,0.0030469255028017037,-3.120163298944072e-5,5.4110664553357935e-8,0.003047106649642553,-3.1045429760949075e-5,5.3869815322197836e-8,0.003047246264489913,-3.0957724333207185e-5,5.373401644060654e-8,0.0030473756148905722,-3.0955076276420677e-5,5.372793333790556e-8,0.0030475327337165107,-3.10391075449408e-5,5.385333611732599e-8,0.0030477562593878016,-3.119291882112134e-5,5.408383161903094e-8,0.0030480767420623433,-3.138019112187306e-5,5.436371344206401e-8,0.003048506271394186,-3.154923496407961e-5,5.461427067933738e-8,0.003049029398017934,-3.164403612417949e-5,5.4750595244403097E-08,0.003049600741217892,-3.162181473782961e-5,5.470817249590223e-8,0.0030501546590933595,-3.147129459702184e-5,5.447053534930495e-8,0.0030506267199089275,-3.122124129326912e-5,5.408216609011085e-8,0.003050977543809847,-3.0931489493301834e-5,5.363475132421305e-8,0.0030512056349143645,-3.066970206362606e-5,5.323164358366911e-8,0.0030513427951945633,-3.048709541508865e-5,5.2950735410073135e-8,0.0030514375272195533,-3.0405493613713788e-5,5.2824725934812176e-8,0.0030515374213706445,-3.0418359774685625e-5,5.284287745599565e-8,0.003051677995809869,-3.050014466075965e-5,5.296553808075435e-8,0.0030518790092155215,-3.061696562449272e-5,5.314062781446654e-8,0.003052145625853913,-3.073469977610028e-5,5.3316031028704927e-8,0.0030524714707749288,-3.082377392153637e-5,5.344682144560079e-8,0.0030528417493476028,-3.086160174564249e-5,5.34988474804598e-8,0.0030532358836312897,-3.0833881042707114e-5,5.345060667689741e-8,0.003053629879526026,-3.0735485986035706e-5,5.3294565854492434e-8,0.0030539988364117142,-3.0571146292916206e-5,5.30382059792326e-8,0.0030543199507090837,-3.0355674406952507e-5,5.270438907050841e-8,0.0030545760956502454,-3.0113150877368533e-5,5.233010961195881e-8,0.00305475954547292,-2.9874438142143042e-5,5.1962653663563995e-8,0.003054874940487383,-2.967277780668974e-5,5.165280031939516e-8,0.0030549404324154324,-2.9537825570307475e-5,5.144563962738253e-8,0.0030549861390338404,-2.9489134143288323e-5,5.137059250576423e-8,0.0030550495976808005,-2.953061394193003e-5,5.143300630399881e-8,0.003055168710759939,-2.9647526534915528e-5,5.160970828560753e-8,0.0030553733364540553,-2.9807121158297693e-5,5.1850176986509324e-8,0.0030556770688369554,-2.9963521348213533e-5,5.208418350889287e-8,0.0030560711382057876,-3.0066914121891328e-5,5.223590149011024e-8,0.003056522783852153,-3.007606385331831e-5,5.224295582005858e-8,0.0030569803906741184,-2.9971466768568165e-5,5.207634125974998e-8,0.0030573862107332603,-2.9764480348069197e-5,5.1754164969916074e-8,0.0030576939719519337,-2.9497043921062268e-5,5.134105271121149e-8,0.0030578844960596806,-2.9229485363525857e-5,5.092940536552576e-8,0.0030579714726823846,-2.9020378842860718e-5,5.060856308901679e-8,0.00305799430929109,-2.890783769790072e-5,5.0436246780448754e-8,0.0030580024833647516,-2.8900743931462217e-5,5.042530128741445e-8,0.0030580398139917744,-2.8981793723107103e-5,5.0548579370877406e-8,0.0030581349144192635,-2.9117796452997896e-5,5.075489270553819e-8,0.0030582989710085853,-2.927092112731661e-5,5.0986296117823764e-8,0.00305852838098303,-2.9406906130383003e-5,5.1190589621726315e-8,0.00305880913029923,-2.9499417804318987e-5,5.132784410791377e-8,0.0030591209014314944,-2.9531615236497716e-5,5.1372652866946216e-8,0.003059440241717404,-2.949633831159525e-5,5.131434068941656e-8,0.00305974298908132,-2.9395907947313022e-5,5.1156659354477445e-8,0.0030600065090859636,-2.9241933794825013e-5,5.091753916282965e-8,0.00306021229511157,-2.9054948323373344e-5,5.062856693783168e-8,0.003060349177847135,-2.8863199511689882e-5,5.033312632870034e-8,0.003060416814008068,-2.8699745555567035e-5,5.008188395273282e-8,0.0030604284223485962,-2.8597283966096064e-5,4.992478512143156e-8,0.0030604111977471983,-2.858098323762389e-5,4.990002248696701e-8,0.0030604029204521956,-2.8660871126497475e-5,5.002240613766968e-8,0.0030604443802250266,-2.8826475438747818e-5,5.027527520898142e-8,0.0030605691021830185,-2.9046441406551585e-5,5.061009175503469e-8,0.00306079346737266,-2.927436144349517e-5,5.0955543464884993e-8,0.0030611106463299936,-2.945974872572592e-5,5.123445153963956e-8,0.003061490627398194,-2.9561147187201426e-5,5.1383839021491824e-8,0.0030618866932196325,-2.9557585511589545e-5,5.137235223398255e-8,0.0030622468460100747,-2.9455021239405097e-5,5.1209933881528055e-8,0.0030625273270125427,-2.9285654512983767e-5,5.0946554534423536e-8,0.0030627045011972953,-2.909970499319971e-5,5.065943900038011e-8,0.003062781223049597,-2.8951506243513924e-5,5.043168206571564e-8,0.0030627851170516554,-2.8884214842026012e-5,5.032886811317642e-8,0.003062759221135395,-2.8918582214671775e-5,5.038203695084455e-8,0.0030627487734678108,-2.9049687038960627e-5,5.0582911500186546e-8,0.0030627893702877065,-2.9251814457828465e-5,5.0891584468485985e-8,0.0030629003148716434,-2.9488179827505706e-5,5.1251525998749074e-8,0.0030630839037973016,-2.972103318011528e-5,5.160504457192073e-8,0.0030633288315558426,-2.9918997653759335e-5,5.190441062046527e-8,0.003063615124797014,-3.0060785653816723e-5,5.211739828811116e-8,0.003063918729338474,-3.013609360645597e-5,5.222854366679751e-8,0.003064214995878956,-3.014497667576545e-5,5.223815136496016e-8,0.0030644811540353513,-3.0096760320048008e-5,5.2160662139867385e-8,0.003064698316991432,-3.0009023509637796e-5,5.202315302953461e-8,0.0030648536429064674,-2.990656924730143e-5,5.1863784882354814e-8,0.0030649429933266646,-2.9819741475536308e-5,5.1729180727117875e-8,0.0030649738454125133,-2.9781167475517766e-5,5.166933721709507e-8,0.0030649674206902153,-2.98201748061254e-5,5.172897531156119e-8,0.0030649581828044383,-2.9955006804012056e-5,5.19355879701887e-8,0.0030649887015580467,-3.0184701153387606e-5,5.2287079973691934e-8,0.0030650993228122743,-3.048438554024296e-5,5.274472973817438e-8,0.0030653151426291397,-3.080799959377198e-5,5.3237545317571995e-8,0.0030656356436287177,-3.109971429626911e-5,5.36798936350581e-8,0.003066032397083313,-3.131062399609393e-5,5.3997123564829124e-8,0.0030664566457068772,-3.141392264624986e-5,5.414878191396371e-8,0.003066853673243906,-3.141241782904111e-5,5.414000445922996e-8,0.003067178107954643,-3.1336255718859404e-5,5.401782535141934e-8,0.003067405017322031,-3.123297452844401e-5,5.385569119674471e-8,0.0030675342967685115,-3.115406523908855e-5,5.3732673458228506e-8,0.0030675883450696387,-3.1142126616185284e-5,5.3713731593782084e-8,0.003067604598905477,-3.122165258980363e-5,5.3835712946092174e-8,0.0030676253853558076,-3.139518885501176e-5,5.41016984091395e-8,0.0030676878955794595,-3.164514859820826e-5,5.448403678006608e-8,0.0030678167760080873,-3.1940102956282886e-5,5.4934156079083943e-8,0.00306802082106185,-3.22432379520567e-5,5.539556794925043e-8,0.0030682938008947383,-3.252038055262967e-5,5.581610023286302e-8,0.003068618188348601,-3.2745712319185725e-5,5.6156527333722295e-8,0.0030689700372110436,-3.290455445210272e-5,5.63947158589191e-8,0.0030693235621584002,-3.299368835276426e-5,5.652604281911584e-8,0.0030696546829265168,-3.302018003318915e-5,5.656158441311524e-8,0.003069943501781531,-3.299964329710182e-5,5.652548727111865e-8,0.0030701761356594238,-3.295448884467991e-5,5.6452316329964884e-8,0.0030703464351241215,-3.2912168983386934e-5,5.6384348797087725e-8,0.0030704579205523843,-3.290292724600728e-5,5.6368046064395786e-8,0.0030705257705411666,-3.2956240209135014e-5,5.6448491101539555e-8,0.003070577902929506,-3.3095212754677564e-5,5.666072725949836e-8,0.003070653303256023,-3.332901887976236e-5,5.7018206275630994e-8,0.0030707954675129484,-3.3645317050531466e-5,5.750131258839977e-8,0.003071040281409215,-3.4006866132882734e-5,5.805237688321617e-8,0.003071401442066699,-3.435724590922433e-5,5.858460257890024e-8,0.003071860664240823,-3.463707718078335e-5,5.900700173455468e-8,0.003072369948294953,-3.4805077484133635e-5,5.9256687131385314e-8,0.0030728668933984586,-3.4853323968064e-5,5.932224867940723e-8,0.00307329574470014,-3.4808729472292477e-5,5.9245906426521214e-8,0.0030736238628414326,-3.472127382584356e-5,5.910521892617646e-8,0.0030738476136962186,-3.4646440956723325e-5,5.898583976281836e-8,0.0030739883560582247,-3.462984017376718e-5,5.895772090868357e-8,0.0030740829181741033,-3.46981445897087e-5,5.906122528438606e-8,0.0030741729261370603,-3.485661305223858e-5,5.930354340403719e-8,0.0030742957031104122,-3.509154811261891e-5,5.966276668283171e-8,0.0030744779277463736,-3.537572740023708e-5,6.00964697542749e-8,0.0030747323559975367,-3.5675189893930766e-5,6.055223916889516e-8,0.003075057487670119,-3.5956061174078274e-5,6.097812908001633e-8,0.0030754397046584866,-3.619027550379833e-5,6.133134047523962e-8,0.0030758570531433604,-3.6359408441814945e-5,6.158398173260262e-8,0.0030762836935755364,-3.645637499575067e-5,6.17255797130405e-8,0.0030766941332692503,-3.6485215974385064e-5,6.176270393282051e-8,0.00307706662715048,-3.645952970605651e-5,6.17165520944473e-8,0.0030773855806581914,-3.64002479832436e-5,6.161954383422073e-8,0.0030776432027652626,-3.63332416409525e-5,6.151163570192726e-8,0.003077840759611733,-3.628682113866609e-5,6.143643256726638e-8,0.003077989627912044,-3.628885788142236e-5,6.143667890109774e-8,0.0030781120193623807,-3.6363006241524466e-5,6.154837667649236e-8,0.0030782405956229293,-3.652349964920907e-5,6.179278977302228e-8,0.0030784153961581056,-3.6768720995789186e-5,6.216668724687254e-8,0.003078676287039924,-3.707542807113103e-5,6.263368664319519e-8,0.0030790504999446576,-3.739763323181358e-5,6.312273725650803e-8,0.0030795385416962856,-3.767491089624212e-5,6.354097060212617e-8,0.0030801063485889927,-3.7851372011602716E-05,6.380282181650783e-8,0.003080691860843348,-3.789839797156401e-5,6.3864909335135015E-08,0.0030812263089583505,-3.782804205247127e-5,6.374660437345014e-8,0.0030816595018051856,-3.768799022595951e-5,6.352218567186832e-8,0.003081975175275685,-3.754141745986299e-5,6.328960513196501e-8,0.0030821904003572086,-3.7444257862379394e-5,6.313520651894206e-8,0.003082343638281676,-3.743069219176931e-5,6.311124043335557e-8,0.0030824800552818033,-3.7509564541134194e-5,6.323047245576145e-8,0.0030826400072475326,-3.7668452785068254e-5,6.347276711043042e-8,0.003082852413765722,-3.788093848520992e-5,6.379661295313797e-8,0.003083132266538477,-3.811403698482697e-5,6.415076333549884e-8,0.0030834808667202927,-3.833449478651092e-5,6.448396137955909e-8,0.0030838877341181153,-3.8513714836371074e-5,6.475242681002939e-8,0.0030843336004778847,-3.8631288755844996e-5,6.49251538042667e-8,0.003084794042322366,-3.867707285475078e-5,6.49869875714132e-8,0.0030852433321181686,-3.865183435490819e-5,6.49395475346079e-8,0.0030856581339217173,-3.856655888053119e-5,6.48001336398034e-8,0.0030860206460516367,-3.844058492853828e-5,6.459884806542256e-8,0.0030863208771382037,-3.8298947069799535e-5,6.437449277747022e-8,0.0030865580404335806,-3.816935596666206e-5,6.416988298112212e-8,0.0030867412223701774,-3.807898089265322e-5,6.402682842646071e-8,0.0030868893766480983,-3.8050984731237867e-5,6.398072676630348e-8,0.0030870304944824955,-3.810068561233592e-5,6.405462439468387e-8,0.003087199430753806,-3.823122572618231e-5,6.425261522376926e-8,0.0030874333446925814,-3.842914766591009e-5,6.455320872359164e-8,0.0030877636895722525,-3.866159342862816e-5,6.490525234810125e-8,0.0030882049718960573,-3.887836166676586e-5,6.523127311346362e-8,0.003088743561312213,-3.9022341755227606e-5,6.544356507347711e-8,0.003089333590640843,-3.904860755320145e-5,6.547348840413299e-8,0.0030899071036917716,-3.894510170953161e-5,6.530322358465656e-8,0.0030903979050176593,-3.8742004346281896e-5,6.498015271661827e-8,0.003090767228006569,-3.8501181533249536e-5,6.460049051721142e-8,0.0030910160608724553,-3.8290854101103754e-5,6.426997931057188e-8,0.0030911786470456865,-3.816087723268984e-5,6.406549047523721e-8,0.003091304636594572,-3.81308943961482e-5,6.401668515462453e-8,0.0030914415331645385,-3.819243835001492e-5,6.410948319588161e-8,0.003091624053373996,-3.831851468248846e-5,6.430123035197483e-8,0.0030918706623143453,-3.8474104361764894e-5,6.453722136219927e-8,0.0030921846709144477,-3.8624255014770126e-5,6.476330985906157e-8,0.0030925572633731823,-3.8739191826344275e-5,6.493373044917373e-8,0.0030929709124494467,-3.879722444333691e-5,6.501542077873879e-8,0.003093402731555433,-3.8786312162609277e-5,6.499027635350036e-8,0.0030938277663450082,-3.870467412242986e-5,6.485599547202599e-8,0.0030942222139669767,-3.856054410640383e-5,6.462566902485165e-8,0.003094566519648795,-3.8371053174280506e-5,6.432606100579885e-8,0.0030948481721392368,-3.816012347433993e-5,6.399436069664364e-8,0.003095063804553022,-3.795541247827492e-5,6.36734419165358e-8,0.003095220250846101,-3.778464042825393e-5,6.34061366452044e-8,0.003095334440344874,-3.76716671513097e-5,6.322910755980504e-8,0.00309543208101415,-3.76325912073004e-5,6.316677889485286e-8,0.0030955450293822886,-3.767217508425234e-5,6.32258396731875e-8,0.003095707183071852,-3.778095740397159e-5,6.339090801722296e-8,0.00309594862334514,-3.793365750566644e-5,6.36222778804018e-8,0.003096287931628474,-3.80901905074783e-5,6.385770713701393e-8,0.0030967236941520254,-3.8201303672671125e-5,6.402124536059043e-8,0.003097228280907147,-3.822036947682624e-5,6.404140759803494e-8,0.0030977490184312755,-3.8120022723220564e-5,6.387670810024808e-8,0.0030982210755350135,-3.7907147081520453e-5,6.353864073301886e-8,0.0030985900761617553,-3.762610731223205e-5,6.309655120907573e-8,0.0030988336384995293,-3.734434007536094e-5,6.265523738702239e-8,0.003098968816215725,-3.7126254709522466e-5,6.231441792645098e-8,0.003099041425769494,-3.7010331236075636e-5,6.213318613669418e-8,0.0030991055833493103,-3.7000963291756114e-5,6.211747094970239e-8,0.0030992057850765756,-3.707503307238412e-5,6.223050579274813e-8,0.0030993681475792695,-3.719515769679686e-5,6.241367766141261e-8,0.0030996000182369945,-3.7321886461173106e-5,6.260562024590069e-8,0.0030998940056717068,-3.742152940130405e-5,6.275433238229519e-8,0.003100233021590866,-3.7469791909199243e-5,6.282264287237035e-8,0.0031005946146256498,-3.74527865541713e-5,6.278957087078115e-8,0.0031009543309571943,-3.7366892039579344e-5,6.264995951136436e-8,0.003101288498980592,-3.721816385706405e-5,6.241351573364313e-8,0.0031015767979117176,-3.702139137135275e-5,6.210337620395833e-8,0.0031018047687390517,-3.679862687950359e-5,6.175387343947005e-8,0.0031019661991720264,-3.657686241831285e-5,6.140695022313485e-8,0.0031020649564957345,-3.638462538015085e-5,6.110684934249384e-8,0.0031021156285978737,-3.624768225270253e-5,6.089338495755532e-8,0.003102142484188417,-3.6184428286903e-5,6.079473351831937e-8,0.0031021765631752685,-3.620172937410701e-5,6.082097958568538e-8,0.0031022510076930674,-3.629208197157182e-5,6.095979473559371e-8,0.0031023950750430954,-3.643289906673445e-5,6.117550104443778e-8,0.0031026275545373554,-3.658852828809345e-5,6.141241349154455e-8,0.0031029505897565103,-3.6715498961018746e-5,6.160314515690131e-8,0.0031033454561945222,-3.677128760644678e-5,6.168223979401771e-8,0.0031037725875075316,-3.672594194239396e-5,6.160407633853862e-8,0.0031041783170027994,-3.6573890333345214e-5,6.13609507617016e-8,0.0031045091130757767,-3.634081561194844e-5,6.099349544356457e-8,0.0031047297909969312,-3.607980110758601e-5,6.058452494813771e-8,0.0031048374201034855,-3.585494963702326e-5,6.023352619407363e-8,0.003104862516995215,-3.5718644691785436e-5,6.002135737673514e-8,0.003104856093193385,-3.569405931092349e-5,5.998319444364333e-8,0.0031048700872880267,-3.577137790618058e-5,6.010288490586609e-8,0.003104941604094109,-3.5916960865466545e-5,6.032745899023271e-8,0.00310508658575867,-3.608784938858073e-5,6.058987181278256e-8,0.003105301813939656,-3.6244129061960325e-5,6.082825896614451e-8,0.0031055709169320175,-3.6355939860998774e-5,6.099670423139435e-8,0.003105870647986892,-3.6405690275413666e-5,6.106846533436347e-8,0.0031061756914431407,-3.638750956805874e-5,6.103492926911871e-8,0.0031064618740461935,-3.630572623697611e-5,6.090315332297189e-8,0.0031067083897661323,-3.617327510332381e-5,6.069340518034317e-8,0.0031068996748370463,-3.6010179052804656e-5,6.043687697777326e-8,0.0031070273067826453,-3.5841809895788134e-5,6.017304374810048e-8,0.003107091924907097,-3.569640763286369e-5,5.994580924865879e-8,0.003107104690948129,-3.5601421586642455e-5,5.979775912534584e-8,0.0031070874280543044,-3.557871974140187e-5,5.976263364692894e-8,0.0031070705639987084,-3.563939705212548e-5,5.985721638430891e-8,0.00310708845076731,-3.577953751271076e-5,6.007479140748683e-8,0.0031071724854550274,-3.597857902840596e-5,6.0382741421625e-8,0.003107343449944664,-3.620155104969642e-5,6.072622362437715e-8,0.0031076051132779385,-3.640540195274204e-5,6.10381901744192e-8,0.0031079410880545904,-3.6548419234103456e-5,6.125412657583635e-8,0.0031083163328670636,-3.6600797795219e-5,6.132843658673388e-8,0.003108683776045806,-3.655377779638129e-5,6.12484672972554e-8,0.0031089953478281146,-3.642449473760269e-5,6.104178540723422e-8,0.0031092151923365167,-3.6254006005909544e-5,6.077284786520125e-8,0.003109331132111241,-3.6097367552710236e-5,6.052739707346827e-8,0.00310935954808475,-3.6007610042852635e-5,6.038750927329051e-8,0.0031093404361101393,-3.601917120844064e-5,6.04059490162074e-8,0.0031093239113226005,-3.6137917913298556e-5,6.059089030936383e-8,0.003109354124427072,-3.6341991680345246e-5,6.090751315544337e-8,0.0031094576079410963,-3.6591899919457295e-5,6.12939239128099e-8,0.003109639723574992,-3.684400498898479e-5,6.168222747975021e-8,0.003109888172433052,-3.706155993675539e-5,6.201562972733295e-8,0.003110179865335902,-3.7220522609188814e-5,6.225730522644977e-8,0.0031104876813696455,-3.731061864999249e-5,6.239184703464731e-8,0.00311078539719096,-3.733367074941028e-5,6.242252235980394e-8,0.0031110506840359895,-3.730106234421321e-5,6.236728729470829e-8,0.003111266829818254,-3.723134017143124e-5,6.225510727514509e-8,0.0031114239398752712,-3.7148181411718e-5,6.212287206499815e-8,0.0031115201531575613,-3.7078419428024274e-5,6.201236188919679e-8,0.003111562975299694,-3.7049500972479054e-5,6.196625586571644e-8,0.003111570240611829,-3.7085775629295866e-5,6.20222732746493e-8,0.0031115696907623807,-3.720350361712773e-5,6.220533256957703e-8,0.003111595961660061,-3.740535774526301e-5,6.251900193071125e-8,0.0031116842348012787,-3.7676298720104116e-5,6.293919212979045e-8,0.0031118612256879658,-3.798340020650173e-5,6.341407163920447e-8,0.003112136139777003,-3.828150901245256e-5,6.387306782824209e-8,0.003112495379209596,-3.852427301854293e-5,6.424415997620797e-8,0.003112903926884855,-3.867726198381603e-5,6.447432367142958e-8,0.0031133136874417224,-3.872848224078679e-5,6.454579824951314e-8,0.0031136761793375063,-3.8692456923064395E-05,6.448222652228261e-8,0.0031139554371912236,-3.860656882561176e-5,6.434267804320025e-8,0.0031141372703484766,-3.8521032659985596e-5,6.420576709598722e-8,0.0031142324513703736,-3.848555621137015e-5,6.414873497201981e-8,0.003114273122112332,-3.85363882869955e-5,6.422732768153216e-8,0.0031143034616922818,-3.868736365238427e-5,6.446208120483557e-8,0.0031143674207793413,-3.892758353008189e-5,6.483503018920008e-8,0.003114497459059395,-3.9226240381586666e-5,6.529750515880651e-8,0.0031147078121036174,-3.954245370409532e-5,6.578559894383833e-8,0.00311499378960663,-3.983627974908429e-5,6.623730004445356e-8,0.0031153360888836355,-4.007726426013293e-5,6.660567612073376e-8,0.0031157075151952004,-4.024868825724295e-5,6.686529743458914e-8,0.00311607947574405,-4.034776414925683e-5,6.701237492469503e-8,0.0031164267230209515,-4.038331710088937e-5,6.706105409678788e-8,0.0031167301083817336,-4.037260325837689e-5,6.703845169512361e-8,0.003116977890976981,-4.033831580823609e-5,6.698004129434217e-8,0.0031171663505323325,-4.030610095786534e-5,6.692583316158584e-8,0.0031173002857739405,-4.030233658179883e-5,6.691691302618574e-8,0.0031173935830516013,-4.035158745219613e-5,6.699141672014888e-8,0.003117469472534857,-4.047311163717984e-5,6.71790093138832e-8,0.0031175594775110223,-4.067616621474953e-5,6.749354678239481e-8,0.0031176996760878236,-4.095478103045957e-5,6.792501578391407e-8,0.003117923245200117,-4.1284097202451735e-5,6.843400804444655e-8,0.003118249965451604,-4.162156390749211e-5,6.895378532468487e-8,0.0031186762577232225,-4.1915651713568604e-5,6.940399276282996e-8,0.0031191714040973333,-4.212116830683181e-5,6.971456663709166e-8,0.0031196840741649716,-4.2215346438736336e-5,6.985077033810668e-8,0.003120157847027817,-4.220674667049533e-5,6.98269624957057e-8,0.0031205489414833265,-4.2132362620646234e-5,6.97018734876997e-8,0.0031208383916512266,-4.20448327662397e-5,6.955836204462521e-8,0.003121034785095203,-4.199616018547974e-5,6.947774286240719e-8,0.003121168632125931,-4.202421267565137e-5,6.951862361251391e-8,0.0031212820770698153,-4.214528318978495e-5,6.970544612819716e-8,0.0031214177248149594,-4.235306877230772e-5,7.002722768273191e-8,0.0031216092731973467,-4.2622792035729374e-5,7.044435725304227e-8,0.0031218754919343627,-4.2918580516760454e-5,7.090035608149642e-8,0.0031222181803268524,-4.320209457310386e-5,7.133539946884241e-8,0.003122623947005099,-4.344044848734895e-5,7.169857291254788e-8,0.00312306884485219,-4.361179467816571e-5,7.195639886437939e-8,0.003123524289638139,-4.370774340490241e-5,7.209642624241596e-8,0.0031239626656890764,-4.373282262997294e-5,7.21262580887302e-8,0.0031243615440335547,-4.3701909396077086e-5,7.206948965492392e-8,0.0031247061538028763,-4.3636780471882876e-5,7.196033443639855e-8,0.0031249903765416783,-4.356272900897019e-5,7.183837800351165e-8,0.0031252168682957006,-4.3505688790359626e-5,7.174410685588453e-8,0.0031253968441908885,-4.348975073626395e-5,7.17150048965672e-8,0.0031255497310814042,-4.35346390742139e-5,7.178155313739291e-8,0.00312570246406995,-4.3652662272077505e-5,7.196242839516862e-8,0.0031258876523310264,-4.384487979547073e-5,7.225856364534224e-8,0.003126139361453899,-4.409699636109416e-5,7.26468964950289e-8,0.003126485461480311,-4.437689592985936e-5,7.307674195249288e-8,0.003126937079372063,-4.4637120813428204e-5,7.347383911846252e-8,0.003127478854765807,-4.482535361453673e-5,7.375675854161458e-8,0.0031280666690904416,-4.490213927602775e-5,7.386449999496449e-8,0.0031286382404406153,-4.4858518891369295e-5,7.37839353542856e-8,0.0031291344460409416,-4.472272685316552e-5,7.356017852034121e-8,0.0031295207052957296,-4.455029894921475e-5,7.328095575302624e-8,0.0031297969026368396,-4.440289276125083e-5,7.304320913549977e-8,0.0031299925059136854,-4.4327735522592144e-5,7.292069128837017e-8,0.0031301525953489643,-4.4346566926362245e-5,7.294663172919162e-8,0.003130323040755186,-4.44552245163689e-5,7.311334170083266e-8,0.0031305398839340287,-4.463002091424208e-5,7.338260528006618e-8,0.00313082404631057,-4.483652215332876e-5,7.369977824422968e-8,0.0031311803606072124,-4.503787355813529e-5,7.400698484506922e-8,0.0031315994383132096,-4.5201450522542784e-5,7.425347439859536e-8,0.0031320612381614877,-4.530356848674249e-5,7.440279963037097e-8,0.0031325396046175753,-4.533218545978504e-5,7.443682235158883e-8,0.003133007088926917,-4.528754210138793e-5,7.435654510846008e-8,0.003133439334571156,-4.51809403698077e-5,7.41801159799911e-8,0.003133818472273233,-4.503213230381495e-5,7.393873233871031e-8,0.003134135205289634,-4.486591093923118e-5,7.367133504974223e-8,0.0031343895555660316,-4.470855447784281e-5,7.34190699593144e-8,0.003134590575431148,-4.4584622562577654e-5,7.322027017012072e-8,0.0031347554245567386,-4.451420562905288e-5,7.310611312884732e-8,0.0031349080100163845,-4.451044644791041e-5,7.309669605942408e-8,0.0031350771198854635,-4.457710742852157e-5,7.319723119373661e-8,0.0031352936217133444,-4.47060605212665e-5,7.339422020383135e-8,0.0031355858958112227,-4.487510826442938e-5,7.365224958348347e-8,0.003135972822388433,-4.5047645339306655e-5,7.391369496033267e-8,0.0031364549294214225,-4.517674188187485e-5,7.410524949995039e-8,0.003137006880828943,-4.521608014150156e-5,7.415499865583744e-8,0.0031375773084138556,-4.513707215275879e-5,7.401903658596108e-8,0.003138101428611319,-4.494515854131807e-5,7.370680978793502e-8,0.0031385245037932065,-4.468383466731007e-5,7.328731665396651e-8,0.0031388241332245405,-4.441996388809048e-5,7.286597138629206e-8,0.003139017499846824,-4.421722026618582e-5,7.254276438257211e-8,0.003139150157383647,-4.411342074013215e-5,7.237653893372397e-8,0.0031392756212672386,-4.411288523762928e-5,7.237306272266767e-8,0.003139437968769991,-4.4192948719133804e-5,7.249557334607343e-8,0.0031396632755686426,-4.431658177299298e-5,7.268500837724008e-8,0.0031399588406845693,-4.444412071309936e-5,7.287870894461722e-8,0.0031403166737552367,-4.454122642373622e-5,7.302295817715162e-8,0.0031407183126958165,-4.4583109623867075e-5,7.307944575839242e-8,0.0031411394477191415,-4.4556196731207386e-5,7.302762227868937e-8,0.0031415539994911366,-4.445830099035177e-5,7.28647417048713e-8,0.003141937728993228,-4.429775179132686e-5,7.260437295376374e-8,0.0031422713373744243,-4.4091609934731785e-5,7.227358181570472e-8,0.0031425429027575314,-4.386309308749254e-5,7.190893225978437e-8,0.0031427494576673834,-4.363836426557965e-5,7.155149576181157e-8,0.0031428974772572276,-4.3442976873453624e-5,7.124128957024562e-8,0.003143002214192302,-4.329843267004607e-5,7.101185038058907e-8,0.003143086052266109,-4.321920239699395e-5,7.088551186228275e-8,0.0031431760678829164,-4.3210361139567735e-5,7.086966698763124e-8,0.0031433008971223707,-4.3265945431617366e-5,7.09542336198036e-8,0.003143486895319873,-4.336813785078726e-5,7.111052058211447e-8,0.0031437533847702066,-4.348759147027911e-5,7.12919612296051e-8,0.0031441069213620117,-4.358585463469756e-5,7.143813366953108e-8,0.003144535476545944,-4.362139298757207e-5,7.148429942205696e-8,0.003145005091611609,-4.3560203673701036e-5,7.137795505629189e-8,0.003145463126681861,-4.3389675112285365e-5,7.11003324650128e-8,0.003145851574927433,-4.3129979926205826e-5,7.068402441148508e-8,0.0031461283507413433,-4.2833959953962696e-5,7.021264040871186e-8,0.003146286100171612,-4.257032356693477e-5,6.979432110562806e-8,0.0031463558591178996,-4.239669820392884e-5,6.951932082306872e-8,0.003146392327049763,-4.233819904869464e-5,6.942631862677053e-8,0.0031464507043553205,-4.2383168839997224e-5,6.94958958380317e-8,0.0031465688651928546,-4.249459392815535e-5,6.966883115670779e-8,0.0031467612849682977,-4.262689345829094e-5,6.987285185595196e-8,0.0031470222789782287,-4.273918499304871e-5,7.004366315740973e-8,0.0031473330289561153,-4.2802158807808166e-5,7.013567759431403e-8,0.003147668417268007,-4.279983806022786e-5,7.01245308551207e-8,0.0031480021049310764,-4.272860133319068e-5,7.00052672228628e-8,0.0031483099313495784,-4.259528124034335e-5,6.978916831189976e-8,0.0031485723125253334,-4.241509647530167e-5,6.950045735299453e-8,0.0031487761173877083,-4.2209454417396814e-5,6.917289890407978e-8,0.0031489161538580373,-4.2003459881328945e-5,6.884596295593158e-8,0.003148996162170557,-4.1822953882087386e-5,6.856021556609623e-8,0.003149028978654053,-4.169106752864223e-5,6.835188836388549e-8,0.003149035482429731,-4.162464544196019e-5,6.824720046102467e-8,0.003149042199251593,-4.163112014627014e-5,6.825739085675065e-8,0.00314907771956232,-4.170639233813112e-5,6.837538674971382e-8,0.0031491682653819867,-4.18342132313785e-5,6.857492364962827e-8,0.0031493329122884942,-4.198742613049102e-5,6.881267918772647e-8,0.003149579039836493,-4.213120402571019e-5,6.903358555963276e-8,0.0031498986271138838,-4.2228420130555436e-5,6.91794432100356e-8,0.0031502664228729867,-4.2247298350746497e-5,6.920097199180307e-8,0.003150641701734798,-4.217078712182122e-5,6.907238815589541e-8,0.0031509754961388586,-4.200545381164349e-5,6.880509810771359e-8,0.0031512238608324395,-4.1785638196682574e-5,6.845392811745735e-8,0.0031513640821730364,-4.1567794289340616e-5,6.810802378555436e-8,0.003151406157010707,-4.141327484247085e-5,6.786370323995615e-8,0.0031513912510576945,-4.136560918026271e-5,6.778876311671728e-8,0.003151375804577231,-4.1434395174820625e-5,6.789730029476199e-8,0.0031514098642566202,-4.159482257943738e-5,6.81492342574456e-8,0.0031515215625475173,-4.18012216288661e-5,6.847194098192803e-8,0.0031517136174996478,-4.200494130433833e-5,6.878861599395965e-8,0.0031519692707481077,-4.216756787951769e-5,6.903911030241721e-8,0.003152261517243071,-4.2266490087485424e-5,6.918851693440988e-8,0.0031525610670786637,-4.229461685062819e-5,6.922644943555905e-8,0.0031528414655990046,-4.22573706176436e-5,6.9162068457332e-8,0.003153081775375267,-4.216923255662013e-5,6.901853417953314e-8,0.0031532678798198805,-4.205077312180638e-5,6.882835975902144e-8,0.0031533932546355388,-4.192616457967239e-5,6.862959482793142e-8,0.0031534595708972847,-4.1820803001536924e-5,6.84621653927876e-8,0.0031534770784778826,-4.175861379115542e-5,6.836364650161207e-8,0.0031534643622982412,-4.17588032667655e-5,6.836409543908077e-8,0.0031534468701465957,-4.183228856251606e-5,6.848035579602831e-8,0.003153453782052926,-4.197854007215975e-5,6.871105220452271e-8,0.003153513263736754,-4.218384148552481e-5,6.903390427614672e-8,0.0031536467429532566,-4.242196322172231e-5,6.940693592124387e-8,0.003153863430347162,-4.265783483101526e-5,6.977446531891138e-8,0.003154156585993926,-4.285397543340932e-5,7.007742427316526e-8,0.00315450279718283,-4.2978622186424466e-5,7.026625449926472e-8,0.0031548650041122103,-4.301400854080456e-5,7.031388230440871e-8,0.00315519943918034,-4.296289169347691e-5,7.022577473855363e-8,0.003155465859320983,-4.285109888117147e-5,7.00436294628589e-8,0.0031556391659936065,-4.272394847220358e-5,6.983943122484468e-8,0.0031557188612724523,-4.263555517927237e-5,6.969842457165365e-8,0.0031557317728420436,-4.263280101975123e-5,6.969387032889604e-8,0.0031557249027450757,-4.2739520543408744e-5,6.98623192302485e-8,0.0031557498994496218,-4.294833096833603e-5,7.019104128047928e-8,0.00315584589866597,-4.322452786249621e-5,7.062447804376743e-8,0.0031560287243041687,-4.3519737897634517e-5,7.108598411323216e-8,0.003156290210848438,-4.378791545601902e-5,7.150311106554863e-8,0.0031566054069980037,-4.3996660675542415e-5,7.182534984786604e-8,0.0031569423808284628,-4.4131253208340974e-5,7.203026754938302e-8,0.003157270337523358,-4.4192994871844845e-5,7.212064457656072e-8,0.003157564470837877,-4.419496903596624e-5,7.211761487890475e-8,0.003157808015852627,-4.415761251223253e-5,7.205364259861087e-8,0.0031579926823708912,-4.4105138784809375e-5,7.196695049477917e-8,0.0031581184957774153,-4.406285452731199e-5,7.189738913692536e-8,0.003158193599416625,-4.4054911516432865e-5,7.188294750699247e-8,0.003158234031798483,-4.4101897275740684e-5,7.195593087373301e-8,0.003158263018098467,-4.421788006294162e-5,7.213822712040806e-8,0.003158309054218505,-4.440704337455989e-5,7.243594276621938e-8,0.0031584021289597524,-4.466069514352587e-5,7.283470938809992e-8,0.0031585679463628875,-4.495603322513259e-5,7.329786169090022e-8,0.003158821045759386,-4.5258255933040026e-5,7.37699600181512e-8,0.003159158924190263,-4.5526890236963015e-5,7.418696615489833e-8,0.0031595597943583466,-4.572549126524957e-5,7.44916678688917e-8,0.003159985788919604,-4.5832004494916494e-5,7.465002833083531e-8,0.003160391467505701,-4.5846244908167024e-5,7.466284408960723e-8,0.003160735390904223,-4.5791651761595475e-5,7.456824370500927e-8,0.003160991329864051,-4.5710340506587154e-5,7.443354724124745e-8,0.0031611557652805296,-4.56525958579643e-5,7.433840211999739e-8,0.0031612493653574466,-4.566356507695597e-5,7.43536688058528e-8,0.0031613116320375638,-4.577082683019708e-5,7.452191859422641e-8,0.00316138983687732,-4.5976704493927694e-5,7.484561016922063e-8,0.0031615255351170207,-4.625816721714404e-5,7.52873081576349e-8,0.00316174330606514,-4.6574539940815696e-5,7.578215147025375e-8,0.0031620456464795553,-4.687999059605023e-5,7.625769376845123e-8,0.003162415165519021,-4.713588347181678e-5,7.665335200741533e-8,0.003162822036835446,-4.731880660958561e-5,7.693289460631574e-8,0.0031632329785881486,-4.7422738256966696e-5,7.708762391075058e-8,0.0031636185498555743,-4.7456548574135615e-5,7.713222429686289e-8,0.003163957394531511,-4.743930170684533e-5,7.709723112409955e-8,0.003164237749092535,-4.7395460395258866e-5,7.702145770310557e-8,0.0031644572629982944,-4.735103026805132e-5,7.694598016390119e-8,0.0031646221440750945,-4.733077694987257e-5,7.690981863864776e-8,0.003164746262745098,-4.735610332844896e-5,7.694660644621445e-8,0.003164850315648308,-4.744295341822404e-5,7.708123668442743e-8,0.003164960615211108,-4.7599282087552986e-5,7.732580598792541e-8,0.00316510674443353,-4.7822150507262595e-5,7.767502077308712e-8,0.0031653173075884386,-4.809522158373371e-5,7.810233831505504e-8,0.003165613500816317,-4.8388234367153477e-5,7.855932068502407e-8,0.003166001527547761,-4.8660505245747866e-5,7.898136490858256e-8,0.0031664667240323473,-4.886967395690606e-5,7.930165483686465e-8,0.0031669732473650035,-4.898427913808119e-5,7.947106008168446e-8,0.0031674717018881997,-4.899555012818512e-5,7.94766938590658e-8,0.0031679131839261526,-4.892263568963575e-5,7.934999749978144e-8,0.0031682643359964833,-4.8808002238974886e-5,7.91591853553536e-8,0.0031685171259444567,-4.8704610129976645e-5,7.898863798646383e-8,0.003168689888016564,-4.866027347872532e-5,7.891391738685978e-8,0.0031688203554882553,-4.870497925930795e-5,7.898168134647224e-8,0.0031689541483683986,-4.884458925824059e-5,7.919995944645049e-8,0.003169132666912061,-4.90615415154104e-5,7.953967154409288e-8,0.0031693835370994743,-4.932123743816433e-5,7.994513150365482e-8,0.0031697155633991425,-4.958174182690445e-5,8.034963065946353e-8,0.0031701188096189092,-4.9803993111668386e-5,8.069160780662406e-8,0.0031705690690595756,-4.995993501816825e-5,8.092735112553882e-8,0.0031710349046023332,-5.003685841512912e-5,8.103761860361142e-8,0.003171484997353245,-5.003758483585365e-5,8.10276899103105e-8,0.0031718939250299756,-4.997743721292307e-5,8.092241368604767e-8,0.0031722454763997874,-4.98796363572316e-5,8.075886678430627e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json deleted file mode 100644 index 841a3de..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_21.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":21000,"numberOfSamples":1000,"samples":[0.0031725336341924394,-4.9770637985046546e-5,8.057900832626396e-8,0.0031727619720193665,-4.967631255249218e-5,8.042370582661394e-8,0.0031729423213677447,-4.961918610821703e-5,8.032842301827844e-8,0.003173093301004051,-4.9616439750269165e-5,8.032005503717977e-8,0.0031732388512125246,-4.9678142521825614e-5,8.04140915834666e-8,0.003173406461172115,-4.980531114277095e-5,8.061152056197695e-8,0.003173624434517486,-4.998780080363393e-5,8.089554409980637e-8,0.0031739174410596086,-5.02027153676187e-5,8.122921958837977e-8,0.0031743000569504428,-5.0414905317985565e-5,8.155645946622467e-8,0.0031747693572844707,-5.058170552271261e-5,8.1809696462639e-8,0.003175299754099858,-5.066328166614758e-5,8.192630588543693e-8,0.003175844728509721,-5.06368615606572e-5,8.187106223913913e-8,0.003176348378152092,-5.0508762136083794e-5,8.16550486069026e-8,0.0031767639923363524,-5.0316402748498936e-5,8.133866443459827e-8,0.0031770709661550177,-5.011689791600365e-5,8.101329428919594e-8,0.0031772811274633317,-4.9967147620633346e-5,8.076944687326912e-8,0.003177432030673561,-4.9905479367471625e-5,8.066745206192551e-8,0.003177572270523811,-4.994259580574966e-5,8.072317955227706e-8,0.003177746439699948,-5.0063033684474547e-5,8.091070950808379e-8,0.0031779848344744835,-5.0233470557248106e-5,8.117598151931799e-8,0.0031782992076989803,-5.0413262606724425e-5,8.145387798184555e-8,0.003178683508504494,-5.056397454491497e-5,8.168346678500409e-8,0.0031791178624765563,-5.0656360805938936e-5,8.181895509495128e-8,0.003179574229733301,-5.067436252240991e-5,8.183576329438713e-8,0.003180022490647086,-5.0616168724939576e-5,8.173192449420742e-8,0.0031804358927458322,-5.049270511433461e-5,8.152548156884965e-8,0.0031807950553075313,-5.0324297904340744e-5,8.124910490024964e-8,0.0031810901697997096,-5.013646650496189e-5,8.094342997127281e-8,0.003181321456190578,-4.995570801310683e-5,8.065043893174666e-8,0.0031814982527144423,-4.9805917795511555e-5,8.040785329190629e-8,0.0031816373210504898,-4.970574993088201e-5,8.024497887522197e-8,0.0031817608717426495,-4.9666782981278536e-5,8.017978161620004e-8,0.0031818944706078238,-4.969213348437762e-5,8.021665586604609e-8,0.003182064656150664,-4.977526990474911e-5,8.034455083019423e-8,0.0031822958582123618,-4.9899054210053294e-5,8.053555151866265e-8,0.0031826060765792474,-5.00355420814562e-5,8.074475516704612e-8,0.0031830011463665404,-5.014786026254351e-5,8.091345990457809e-8,0.0031834686693217383,-5.0195995982255704e-5,8.097846711663703e-8,0.0031839746468371897,-5.01475748419181e-5,8.088913626890179e-8,0.0031844673261262986,-4.999173257679851e-5,8.062922765445895e-8,0.003184891172592454,-4.974957666882377e-5,8.023331134917238e-8,0.0031852075073160895,-4.9472597723993216e-5,7.978406694492346e-8,0.0031854111053174357,-4.922574084934537e-5,7.938518959159813e-8,0.0031855320833315435,-4.9062718900561163e-5,7.912193983519057e-8,0.003185621952271365,-4.9007423813544054e-5,7.903149987919705e-8,0.003185733140730741,-4.905026352546958e-5,7.909733195325303e-8,0.003185903073154297,-4.915750209942922e-5,7.926446313102022e-8,0.0031861477150601954,-4.9285511618747645e-5,7.946261622724468e-8,0.0031864630412842053,-4.9393086955828754e-5,7.962606325736776e-8,0.0031868305582437354,-4.944910682330027e-5,7.970578335261417e-8,0.0031872237417380285,-4.9435815064372105e-5,7.967442526435043e-8,0.003187613799646374,-4.934910556784959e-5,7.952642648280632e-8,0.0031879743406409483,-4.919701658863508e-5,7.927535204629794e-8,0.0031882849181979036,-4.899707191619981e-5,7.894954072044581e-8,0.0031885333705692622,-4.8772886247731465e-5,7.85867133852273e-8,0.0031887169235430774,-4.8550472591157195e-5,7.82281831475899e-8,0.0031888421191353347,-4.8354611885566905e-5,7.791317453714298e-8,0.0031889236591736768,-4.820561826479776e-5,7.767373204135999e-8,0.003188982392912168,-4.811685191685343e-5,7.753076281390647e-8,0.0031890428229633568,-4.80931088914721e-5,7.749144001256398e-8,0.003189130371339149,-4.8129751866914776e-5,7.754779717892457e-8,0.0031892684093893045,-4.821248076042052e-5,7.767640704932689e-8,0.003189474936144377,-4.8317827589117846e-5,7.78393091488724e-8,0.003189758740824415,-4.841472688601514e-5,7.798671830001753e-8,0.0031901151496382964,-4.846801130205281e-5,7.806277470675716e-8,0.0031905224205677797,-4.844497532884705e-5,7.801604196463123e-8,0.003190941284990858,-4.8325353983456495e-5,7.781525298490396e-8,0.0031913210506145494,-4.811258839800113e-5,7.746697340533311e-8,0.0031916141519961177,-4.784055752540146e-5,7.702604990677442e-8,0.003191795418319783,-4.7568255887754585e-5,7.658695371946121e-8,0.0031918755740832448,-4.73600221174305e-5,7.625217949764229e-8,0.003191898603829455,-4.725988960279658e-5,7.609132297246147e-8,0.0031919229650166662,-4.7275184045738147e-5,7.611500607230232e-8,0.003191998333085281,-4.737827479416436e-5,7.62779363395227e-8,0.0031921508881996145,-4.752216804202383e-5,7.65041794434679e-8,0.003192381393929433,-4.765854984268982e-5,7.671628736820805e-8,0.0031926718219546014,-4.7750056416319196e-5,7.685497758163076e-8,0.003192994371773742,-4.7775167613736925e-5,7.688676322707986e-8,0.0031933191121518447,-4.7727892633397725e-5,7.680310882032987e-8,0.0031936191057208192,-4.761498877639121e-5,7.661565929511285e-8,0.0031938734231599622,-4.74525826505499e-5,7.635065824624502e-8,0.0031940688710230926,-4.7262880918771545e-5,7.60436847923047e-8,0.0031942008964133926,-4.707097737875328e-5,7.573466367930087e-8,0.0031942737606263116,-4.6901719035824056e-5,7.546299629687368e-8,0.003194299972841271,-4.6776661718682426e-5,7.526278957837741e-8,0.003194298887206334,-4.6711226468842323e-5,7.51583342891208e-8,0.003194294386829285,-4.671240074914931e-5,7.516039741374076e-8,0.0031943118407074603,-4.6777394668392805e-5,7.526403312546946e-8,0.0031943746893159835,-4.6893437644436546e-5,7.544826377873212e-8,0.0031945009495270385,-4.7038759907479775e-5,7.567773903852656e-8,0.0031946998830175675,-4.7184820903478814e-5,7.590646855791671e-8,0.0031949691011137634,-4.729986237129749e-5,7.608369607755573e-8,0.0031952925157211496,-4.735397448743149e-5,7.616211706606225e-8,0.003195640046002511,-4.7325873413935426e-5,7.610866131565764e-8,0.0031959707011487326,-4.721084275969199e-5,7.591694218179518e-8,0.0031962407678702612,-4.7027544120006907e-5,7.561778712416466e-8,0.0031964172220154555,-4.68193172139658e-5,7.528100427078354e-8,0.003196492459990767,-4.664522204584982e-5,7.500092425591764e-8,0.003196492024360513,-4.6560407478603466e-5,7.486507180241458e-8,0.0031964677331033607,-4.6593856889802264e-5,7.491877034751068e-8,0.003196477403032644,-4.673659702635629e-5,7.514654134177191e-8,0.0031965625176653793,-4.694773588519694e-5,7.548204705047288e-8,0.0031967362693748544,-4.717322873987367e-5,7.583837429474331e-8,0.003196985533609338,-4.73651776342118e-5,7.613905990916508e-8,0.0031972812138878572,-4.74929888958597e-5,7.633588427653374e-8,0.003197589462630078,-4.7545490933105095e-5,7.64119965822908e-8,0.0031978796496195555,-4.752757942989125e-5,7.637620017022061e-8,0.00319812848863574,-4.745512493931714e-5,7.625453549820702e-8,0.00319832144886984,-4.73503257355979e-5,7.608275219379998e-8,0.003198452856742482,-4.723812082730018e-5,7.590064580016247e-8,0.0031985255501511783,-4.7143356527051194e-5,7.57476813144896e-8,0.0031985502819583764,-4.708825806567633e-5,7.565908112945316e-8,0.003198544736531598,-4.708995351933302e-5,7.566191375034777e-8,0.0031985318797554075,-4.7158036203798245e-5,7.577116598009077e-8,0.0031985373474858482,-4.729251335254058e-5,7.598640463765804e-8,0.003198585869566576,-4.7482775567525455e-5,7.629010685976644e-8,0.003198697155597323,-4.77081476564717e-5,7.664860219081877e-8,0.0031988819238857836,-4.794029858008897e-5,7.701607636820799e-8,0.003199138852327985,-4.8147471043280815e-5,7.734153154992998e-8,0.003199453210956632,-4.830010600773658e-5,7.757794512375888e-8,0.003199797758983186,-4.8377126251611665e-5,7.769236057072432e-8,0.0032001363178023106,-4.8371976704389703e-5,7.767540881795748e-8,0.0032004303140051693,-4.829716076321788e-5,7.754825940028813e-8,0.0032006480922657813,-4.818534649742223e-5,7.736402060215561e-8,0.0032007754503471137,-4.8084736666072045e-5,7.720004750070717e-8,0.0032008237523528764,-4.804734673697885e-5,7.713910918442968e-8,0.0032008304786310298,-4.811209016681051e-5,7.724247975155619e-8,0.0032008488052868407,-4.828932206014769e-5,7.75255161602495e-8,0.0032009288771208118,-4.8555592301733185e-5,7.794960329169746e-8,0.0032010998408043487,-4.886272668875077e-5,7.843695977208304e-8,0.003201361960637265,-4.915635461273817e-5,7.89004476629134e-8,0.0032016912406135044,-4.939361188750261e-5,7.927192014721211e-8,0.0032020513707647475,-4.955240233850549e-5,7.951689650027676e-8,0.003202405716929175,-4.963141986809062e-5,7.963431614369855e-8,0.003202725094131901,-4.964474472975755e-5,7.96475824883057e-8,0.0032029909049170156,-4.961523348656123e-5,7.959378125967193e-8,0.0032031952157390927,-4.9569099471490336e-5,7.951497736532009e-8,0.003203339535741044,-4.9532218017991734e-5,7.945241230521701e-8,0.003203433394698867,-4.9527674213515084e-5,7.944273135170713e-8,0.003203493051170196,-4.9573859322178696e-5,7.951503476725994e-8,0.0032035401504446515,-4.968261143955701e-5,7.968790885396807e-8,0.003203599881864006,-4.9857248372708116e-5,7.996622623173358e-8,0.0032036981474841027,-5.009083623491609e-5,8.033833401588e-8,0.003203857560932273,-5.036549668524096e-5,8.077497791863144e-8,0.003204092697562571,-5.0653692877754714e-5,8.123148677107812e-8,0.003204405679190628,-5.092213317310819e-5,8.165420910353239e-8,0.0032047836194003913,-5.1138171334250516e-5,8.199093925766638e-8,0.0032051993388942314,-5.1277508026645685e-5,8.220333981594443e-8,0.0032056159214573134,-5.1331152612609345e-5,8.227803147217174e-8,0.003205994476325643,-5.130950962968257e-5,8.223291039616594e-8,0.0032063034747539243,-5.124205747668012e-5,8.211628608958799e-8,0.0032065274675029567,-5.117202959915313e-5,8.199800522314307e-8,0.0032066727907678195,-5.114661833837934e-5,8.195353656090792e-8,0.003206768020942503,-5.120449980278048e-5,8.204400434520673e-8,0.003206857735831905,-5.1363916576045276e-5,8.229736031489842e-8,0.0032069901253816147,-5.161569359479557e-5,8.269759795845019e-8,0.0032072020803685336,-5.192501441612641e-5,8.318797642795423e-8,0.0032075077397297554,-5.2242393867866604e-5,8.368882847285539e-8,0.0032078955532431,-5.251946367429561e-5,8.412289258504691e-8,0.0032083345384939406,-5.272262269658563e-5,8.443706503733802e-8,0.0032087857334492185,-5.2839458337762004e-5,8.461246000974382e-8,0.0032092132683576424,-5.287735806351859e-5,8.466190722367029e-8,0.003209591378752329,-5.285732676741347e-5,8.461980304623928e-8,0.0032099067777057117,-5.28068081968459e-5,8.45304822826286e-8,0.0032101578456377655,-5.275393921740916e-5,8.443903221733049e-8,0.0032103524731652163,-5.272386017376191e-5,8.438550073902889e-8,0.003210505786562472,-5.273660287213019e-5,8.440164096217491e-8,0.0032106382225371155,-5.280577247081059e-5,8.450886182259405e-8,0.0032107738321281018,-5.293736316606222e-5,8.471631689347386e-8,0.0032109383060951215,-5.312841217033488e-5,8.501870672494748e-8,0.0032111560978738906,-5.3365752533195204e-5,8.53942849508674e-8,0.0032114462795934918,-5.362571089155793e-5,8.580446840164302e-8,0.003211817437324192,-5.3875979778961625e-5,8.619700739786424e-8,0.003212262941595191,-5.408075100149098e-5,8.651439387397291e-8,0.0032127589082548043,-5.42090965214644e-5,8.670741201761251e-8,0.003213267160170133,-5.4244595572723914e-5,8.675057308886833e-8,0.0032137438024166646,-5.419248668805494e-5,8.665344939450431e-8,0.003214151231767454,-5.4080711291759844e-5,8.646208359285265e-8,0.0032144693035585834,-5.395352361443707e-5,8.624839037585663e-8,0.003214701461565474,-5.385958237500533e-5,8.609072790016972e-8,0.003214873783886847,-5.383864063516811e-5,8.605238679805011e-8,0.0032150276171485034,-5.391105610832501e-5,8.616487457733809e-8,0.003215208326315366,-5.4072889410851724e-5,8.642041535988369e-8,0.0032154533705997484,-5.429755486548332e-5,8.677506471248515e-8,0.0032157828754069747,-5.4543390211428154e-5,8.716123185097693e-8,0.0032161952720170784,-5.47649828140714e-5,8.750601063943785e-8,0.0032166691643119804,-5.492483570390711e-5,8.7749822276115e-8,0.003217170484883344,-5.500177601999277e-5,8.785966932376333e-8,0.0032176621369899984,-5.499386164298536e-5,8.783350388091249e-8,0.0032181127441866936,-5.491583634520034e-5,8.76958803060696e-8,0.003218502126948113,-5.479314994168618e-5,8.748819344576886e-8,0.0032188229483265337,-5.465521433334049e-5,8.72578166749344e-8,0.0032190794757014783,-5.452988429357098e-5,8.704931644272088e-8,0.0032192849457666393,-5.443991014971355e-5,8.689888287838887e-8,0.003219458734952503,-5.440110974291796e-5,8.683149639470852e-8,0.003219623918717538,-5.442154904813298e-5,8.685964506488469e-8,0.0032198052118412182,-5.45010330062948e-5,8.698248405259667e-8,0.0032200268668433098,-5.463053766414709e-5,8.718490554543236e-8,0.0032203099278025797,-5.479171920972871e-5,8.743680309860852e-8,0.0032206683696555803,-5.4957218224956276e-5,8.769370344416006e-8,0.003221104252445989,-5.509302127948437e-5,8.790074530833945e-8,0.0032216031987040658,-5.516423932315975e-5,8.800209652952139e-8,0.003222132914621037,-5.514457142603367e-5,8.795617458979574e-8,0.003222647901010924,-5.502711200558859e-5,8.775290593353369e-8,0.0032231013851103294,-5.483131338436564e-5,8.74247239172623e-8,0.003223460966712298,-5.4600702849415643e-5,8.704264763661174e-8,0.003223720696988658,-5.43901749473945e-5,8.66955543476372e-8,0.0032239032022557705,-5.4248004296358326e-5,8.646099319840247e-8,0.003224051050262102,-5.4200944786757004e-5,8.638114273675721e-8,0.003224212268778945,-5.424827912428962e-5,8.645345453958669e-8,0.0032244265358801734,-5.4365234327404105e-5,8.663660081008881e-8,0.003224716276502034,-5.451231450454134e-5,8.686597920410975e-8,0.003225083737911467,-5.4646403659949004e-5,8.707189019189658e-8,0.0032255131188312245,-5.473059972318432e-5,8.719538813836393e-8,0.0032259761006378034,-5.4741087113638165e-5,8.719911679190398e-8,0.0032264390598020325,-5.467034723233956e-5,8.707212789604444e-8,0.003226870334335864,-5.452668660564738e-5,8.682879510984012e-8,0.0032272460710804887,-5.4330699940323715e-5,8.65029138253738e-8,0.0032275536298945894,-5.4109915442819836e-5,8.613902532997006e-8,0.003227792304669776,-5.389313593906661e-5,8.5783374691673e-8,0.0032279718677233277,-5.370570458175747e-5,8.547642058179856e-8,0.003228109845550558,-5.356634066004432e-5,8.524786544988952e-8,0.003228228456413095,-5.348557339633553e-5,8.511420042723426e-8,0.0032283518197443535,-5.346531342893715e-5,8.507801310989298e-8,0.0032285035568127823,-5.349896832429377e-5,8.512814037196994e-8,0.003228704536722173,-5.357174984312455e-5,8.524016481482288e-8,0.0032289703539402797,-5.366119984972382e-5,8.537735462686527e-8,0.00322930813206437,-5.373842092470895e-5,8.549282323459017e-8,0.003229712689921856,-5.377103839587337e-5,8.553448506801853e-8,0.0032301631836865975,-5.3729107718665944e-5,8.545465152637074e-8,0.0032306227277087924,-5.359428799950994e-5,8.522472059019744e-8,0.0032310441986026,-5.337012969281068e-5,8.48515280839209e-8,0.0032313836582013745,-5.30879790841398e-5,8.438660592029636e-8,0.0032316176061930268,-5.280197806460897e-5,8.391790250084734e-8,0.0032317548261706127,-5.2571609399665335e-5,8.354146004605948e-8,0.0032318343808087915,-5.243934120871027e-5,8.332524114371036e-8,0.00323190997001867,-5.24157284474321e-5,8.328513968311465e-8,0.003232029903870015,-5.247922773889295e-5,8.33849749888785e-8,0.0032322230037252673,-5.2587959715898925e-5,8.355594128527012e-8,0.0032324945300250224,-5.269508974157829e-5,8.372185756843382e-8,0.0032328299476484103,-5.2761097382812485e-5,8.381914925073835e-8,0.0032332022647684135,-5.2760565068347416e-5,8.380767128683809e-8,0.0032335796804347913,-5.268412304439345e-5,8.367349551296979e-8,0.003233931955256522,-5.2537170491451925e-5,8.342645104170425e-8,0.00323423510297691,-5.2336755010051395e-5,8.309480474079313e-8,0.003234474406802793,-5.210743061617814e-5,8.271847665355266e-8,0.0032346457437325534,-5.187668488346703e-5,8.234172294838152e-8,0.003234755280902423,-5.167055575138879e-5,8.200621219761825e-8,0.003234817807050895,-5.150997501251897e-5,8.174527616602243e-8,0.00323485410132211,-5.140821394599531e-5,8.157988013641992e-8,0.0032348878601373273,-5.1369622605597356e-5,8.15166024002056e-8,0.003234942697918216,-5.138953284328997e-5,8.154743911983669e-8,0.00323503947037617,-5.1454958354580704e-5,8.16508993774942e-8,0.0032351938886941546,-5.154582187779148e-5,8.179401797604287e-8,0.0032354142832091816,-5.16366609641141e-5,8.193524012891515e-8,0.003235699333554656,-5.1699018157927345e-5,8.202847891428973e-8,0.0032360358332845078,-5.170513116825102e-5,8.202923924758582e-8,0.003236397395298634,-5.163367599192616e-5,8.190391001440081e-8,0.0032367460274376706,-5.147751296830587e-5,8.164208997353886e-8,0.003237038911014802,-5.125146075858404e-5,8.126881868503913e-8,0.0032372413519731985,-5.099546813545693e-5,8.084938120768122e-8,0.0032373424767896393,-5.076735769152771e-5,8.04773994266105e-8,0.003237364737593232,-5.0623575968753e-5,8.024369261604461e-8,0.0032373583817348877,-5.0595930934664296e-5,8.01987556722749e-8,0.0032373814263608053,-5.067835383782129e-5,8.033154293976049e-8,0.0032374767927001143,-5.0831888417986464e-5,8.05778502518239e-8,0.0032376595358681605,-5.100299476696643e-5,8.08503013355666e-8,0.0032379179830066707,-5.1142929781694154e-5,8.106998345596535e-8,0.0032382234578475634,-5.121949714913483e-5,8.118548183125027e-8,0.0032385413765336594,-5.1220034229706235e-5,8.117745244402647e-8,0.0032388396301233986,-5.1148784000511076e-5,8.105395968506553e-8,0.00323909343633175,-5.1022080757357263e-5,8.084232217504016e-8,0.003239287476598087,-5.086344596635564e-5,8.058099601387515e-8,0.003239416418574005,-5.06993062299847e-5,8.031267394281034e-8,0.0032394844711164405,-5.055531403368913e-5,8.007849327535253e-8,0.0032395041778899027,-5.0453203864372276e-5,7.991313554603084e-8,0.003239494528968082,-5.0408228290502986e-5,7.98408045445796e-8,0.0032394784475627734,-5.0427301336513986e-5,7.987225828658261e-8,0.003239479791896909,-5.050810067219918e-5,8.000332058699083e-8,0.0032395202194974377,-5.063931236648878e-5,8.021522493846629e-8,0.003239616293252338,-5.080193546123921e-5,8.047671952390412e-8,0.003239777049036872,-5.097147176821398e-5,8.074769163503124e-8,0.003240002171167665,-5.112088531384368e-5,8.098412232278307e-8,0.0032402808961741075,-5.122423243494423e-5,8.114415044682696e-8,0.0032405918090109447,-5.126100829262938e-5,8.119521335082708e-8,0.003240904131438615,-5.122133435508816e-5,8.112236888320618e-8,0.003241181684719136,-5.111146117220087e-5,8.093692711688671e-8,0.003241390622446391,-5.095766931217798e-5,8.068237971757372e-8,0.0032415106650658305,-5.080520775946731e-5,8.04323546602781e-8,0.003241546514068598,-5.070868740467566e-5,8.027494782684523e-8,0.0032415324844812794,-5.071373081832885e-5,8.028313812372978e-8,0.003241523709398545,-5.083705921425271e-5,8.048281634683229e-8,0.0032415751240446157,-5.1057319994444045e-5,8.083823631077988e-8,0.003241719537245258,-5.132391935969942e-5,8.126660197144499e-8,0.0032419576140943988,-5.157842278878715e-5,8.167296421774885e-8,0.0032422632301883753,-5.177516910115313e-5,8.198373070848606e-8,0.0032425973491017465,-5.189151237656024e-5,8.216316480911329e-8,0.003242921385633165,-5.192728220314501e-5,8.221219939811576e-8,0.003243205429064354,-5.1898436692860174e-5,8.215775773060924e-8,0.0032434313058024543,-5.182970678799692e-5,8.204054311489319e-8,0.0032435923938506023,-5.1748673330064326e-5,8.190536290404036e-8,0.0032436920809447035,-5.1681708633171465e-5,8.179466859600291e-8,0.0032437419250657485,-5.165123951677518e-5,8.17443236041018e-8,0.0032437597611700603,-5.167373948957442e-5,8.178051974505204e-8,0.0032437676397874047,-5.1758154968282606e-5,8.191729901686929e-8,0.003243789408658554,-5.190473825027876e-5,8.215464440259327e-8,0.0032438478099100776,-5.2104555505873134e-5,8.247762756783664e-8,0.0032439612563935362,-5.234009583257239e-5,8.28573715553115e-8,0.0032441407595725984,-5.258721229750601e-5,8.325425050664329e-8,0.0032443875424479525,-5.281834024054875e-5,8.36232428780749e-8,0.0032446918276209393,-5.300675228469284e-5,8.392100559929466e-8,0.0032450332255609038,-5.3131371114476176e-5,8.411381289746435e-8,0.00324538295404514,-5.318148371486626e-5,8.418520437848297e-8,0.003245707983573782,-5.316071079859441e-5,8.414223757206918e-8,0.0032459772192329835,-5.3089364431137183e-5,8.401896535485175e-8,0.0032461694781570896,-5.300370532228837e-5,8.387484551908885e-8,0.003246281847351533,-5.2950284714670026e-5,8.37853066862844e-8,0.0032463352544695014,-5.297443793121066e-5,8.382308719834454e-8,0.0032463728424833803,-5.310479309421307e-5,8.403337508404443e-8,0.003246448216996769,-5.333992759564566e-5,8.441256609303461e-8,0.0032466062921121183,-5.364552457477591e-5,8.49040114435253e-8,0.0032468659901151594,-5.396605828032138e-5,8.541718992475005e-8,0.003247214553528512,-5.424562065011762e-5,8.586156956307863e-8,0.003247615679936334,-5.444642162568678e-5,8.617657458590432e-8,0.003248024912597425,-5.455655514944839e-5,8.634399975468773e-8,0.003248403432332568,-5.458687626580262e-5,8.638262859372707e-8,0.0032487255353343303,-5.4562352771310106e-5,8.633386467620277e-8,0.00324898008935198,-5.451326661190067e-5,8.624724859115626e-8,0.0032491685238771285,-5.4468896133598934e-5,8.617020704301661e-8,0.0032493017385686698,-5.44538837415368e-5,8.614231992982142e-8,0.0032493972235823195,-5.448639212370825e-5,8.619253072529561e-8,0.0032494766715691,-5.4577106999117414e-5,8.633766110669544e-8,0.003249563821635595,-5.4728537878472483e-5,8.658130339795376e-8,0.0032496821379050258,-5.4934496846960336e-5,8.691293350608795e-8,0.0032498520196944476,-5.5180047124981716e-5,8.730779131766455e-8,0.0032500875683692987,-5.544249647615775e-5,8.772852392629017e-8,0.0032503934051933206,-5.569395062737085e-5,8.812944569042736e-8,0.0032507623946056432,-5.5905572624570456e-5,8.846361811302392e-8,0.0032511752416808635,-5.60531534073218e-5,8.869203900002466e-8,0.0032516027189509527,-5.6122949655416366e-5,8.879316740083876e-8,0.003252010653866079,-5.6116271961945236e-5,8.87702629117698e-8,0.0032523669850277413,-5.605136928982403e-5,8.865417136694602e-8,0.0032526495630223616,-5.596163996267052e-5,8.850004846746351e-8,0.003252852996146235,-5.588978132512746e-5,8.837752315420322e-8,0.0032529925562878982,-5.58782471815996e-5,8.83550511189378e-8,0.003253103082055259,-5.595758026448335e-5,8.848108953757554e-8,0.0032532314776745693,-5.613576384150119e-5,8.876716640678854e-8,0.0032534234568621025,-5.6393001850667115e-5,8.917985280515563e-8,0.0032537084871765787,-5.668575826548498e-5,8.964767779069584e-8,0.0032540894242032077,-5.696017640428366e-5,9.008307761306017e-8,0.00325454214619616,-5.716962075359378e-5,9.041084937999461e-8,0.0032550252674333844,-5.728830620990315e-5,9.059011621990187e-8,0.003255494511827089,-5.731556283163272e-5,9.06209904156305e-8,0.003255914883576044,-5.7271048375594106e-5,9.0536487245569e-8,0.003256266746644497,-5.71854418674298e-5,9.03871423788393e-8,0.003256546050101389,-5.709145577327869e-5,9.022629331978918e-8,0.003256761198809244,-5.701770488175832e-5,9.010018411835402e-8,0.0032569290319573213,-5.6985589687069876e-5,9.004308407198988e-8,0.0032570712782715805,-5.700820517414628e-5,9.007569729439265e-8,0.003257211829634789,-5.709019855395602e-5,9.02050273070369e-8,0.003257374555642879,-5.722785472994945e-5,9.042451477474267e-8,0.0032575811280771455,-5.740918789972536e-5,9.07141464433097e-8,0.0032578484112563417,-5.761434937787547e-5,9.104111671626653e-8,0.003258185352705804,-5.781702102123823e-5,9.136217618930464e-8,0.0032585898547709312,-5.7987501554828986e-5,9.162880083070914e-8,0.003259046711760422,-5.8097856157750106e-5,9.179571951463989e-8,0.0032595281106661137,-5.812865707175766e-5,9.183195308320635e-8,0.003259997899742414,-5.807559874358659e-5,9.173151942039728e-8,0.003260419534272522,-5.7953377600878414e-5,9.151954278320197e-8,0.003260765818064894,-5.7794560130481856e-5,9.125009531413922e-8,0.0032610273094332534,-5.7642803315349266e-5,9.099481763997835e-8,0.0032612163205118245,-5.754195090058938e-5,9.082492438170712e-8,0.0032613648222029144,-5.752416949150301e-5,9.07918667306029e-8,0.0032615165714595593,-5.7600716096652344e-5,9.09125486368035e-8,0.003261715522120589,-5.7758163232549566e-5,9.116362370356967e-8,0.003261993680028687,-5.796146329096944e-5,9.148694570509478e-8,0.0032623620293660872,-5.8163394938097374e-5,9.180524978805767e-8,0.003262807665272582,-5.8317766793719975e-5,9.20437012761951e-8,0.0032632983134054426,-5.839199548958222e-5,9.215020451540345e-8,0.0032637924706452283,-5.8374669624859956e-5,9.210741718701442e-8,0.0032642511156409566,-5.827592207902026e-5,9.193302480930112e-8,0.0032646467560847373,-5.8121634092867766e-5,9.167002565308534e-8,0.003264967464613854,-5.794476140729533e-5,9.137245205768258e-8,0.0032652161360441057,-5.777729029325265e-5,9.109227604970783e-8,0.0032654068966987506,-5.764485386744147e-5,9.087078295628466e-8,0.003265560763456718,-5.756421591411039e-5,9.073466938213295e-8,0.0032657018358711034,-5.754278131830879e-5,9.069539608026732e-8,0.0032658544101094944,-5.757911789189286e-5,9.075008999633211e-8,0.0032660408074434333,-5.766372839766714e-5,9.088277448331733e-8,0.003266279396647697,-5.777976701135738e-5,9.106550153542938e-8,0.003266582301739539,-5.790395532285883e-5,9.12598753635655e-8,0.0032669526451217174,-5.80083795326496e-5,9.142009964322477e-8,0.003267381767555401,-5.8063972041273024e-5,9.149881185930952e-8,0.0032678476163183977,-5.804619770493952e-5,9.145646309337639e-8,0.003268316164476314,-5.79424713012002e-5,9.12733988533491e-8,0.0032687475221006164,-5.7759070899220414e-5,9.096097972973574e-8,0.003269106529960257,-5.7523825509117984e-5,9.056570793575683e-8,0.0032693746058921917,-5.7281393394498796e-5,9.01612217244734e-8,0.0032695575700859222,-5.7081169177186004e-5,8.982829299441299e-8,0.003269685200835826,-5.696205583363011e-5,8.962983858648573e-8,0.003269802214385346,-5.69404396125155e-5,8.959138558936853e-8,0.0032699545344188102,-5.700604476264368e-5,8.969464615227079e-8,0.0032701763009091883,-5.7126338282034846e-5,8.988518777066455e-8,0.003270481677542585,-5.725676162404585e-5,9.008956185060092e-8,0.0032708629470038705,-5.735286992395743e-5,9.023531943545998e-8,0.00327129431081459,-5.73809369580062e-5,9.026823726629858e-8,0.003271739599354458,-5.7324683909892404e-5,9.0162995318363e-8,0.0032721614993477402,-5.7187059246788255e-5,8.992569167509696e-8,0.0032725298445275717,-5.698731841848309e-5,8.958873870059514e-8,0.0032728270521627735,-5.675482647236528e-5,8.920055536744774e-8,0.003273049851570274,-5.652171851946322e-5,8.881356947561132e-8,0.0032732076970815966,-5.6316492523811355e-5,8.847388481842329e-8,0.003273319145670565,-5.615979289425225e-5,8.821459453534936e-8,0.0032734076545255755,-5.6062581528121386e-5,8.80529729256984e-8,0.003273497839452653,-5.602614665502433e-5,8.799058220459504e-8,0.003273612612866018,-5.604313201827532e-5,8.801494830994981e-8,0.0032737710867281598,-5.609888691693807e-5,8.81017115844299e-8,0.0032739868282610452,-5.617282175496241e-5,8.821681580619211e-8,0.0032742660365082388,-5.6239927611709573e-5,8.831905491514963e-8,0.003274605453936708,-5.627300819139812e-5,8.836386764965425e-8,0.0032749903608651097,-5.624637481283029e-5,8.830953041101465e-8,0.0032753938061936853,-5.614154823740327e-5,8.812653176627841e-8,0.0032757789936782864,-5.595449360495289e-5,8.78092919463083e-8,0.003276106647287594,-5.5701960526054305e-5,8.738628367074491e-8,0.0032763471421135533,-5.5422576587764e-5,8.692152997987455e-8,0.003276493258995722,-5.516877259292599e-5,8.650115186701256e-8,0.0032765664014518425,-5.499014654352684e-5,8.6206007430559e-8,0.003276610999942624,-5.491529491512299e-5,8.608196484440229e-8,0.00327667876464851,-5.494164014254628e-5,8.612345199946136e-8,0.0032768108494707626,-5.5038149965003114e-5,8.627829358674474e-8,0.0032770262708863127,-5.5157998227194705e-5,8.646888984364038e-8,0.0032773198064892668,-5.525387498988542e-5,8.661760852501955e-8,0.003277667339223204,-5.528988528837087e-5,8.666631731922832e-8,0.0032780346135977243,-5.5247658906088445e-5,8.658614562003795e-8,0.0032783860663120725,-5.512713483912658e-5,8.637835326428021e-8,0.0032786918994025917,-5.494363190933129e-5,8.606912261480339e-8,0.0032789327276445193,-5.472280951801439e-5,8.570104945011115e-8,0.003279101674465376,-5.449476059083265e-5,8.532342409842275e-8,0.0032792040453030104,-5.4288301754132294e-5,8.498301212375031e-8,0.0032792550494914192,-5.4126402494692005e-5,8.471678473867611e-8,0.00327927635003745,-5.402331015253779e-5,8.454741469132955e-8,0.003279292261048445,-5.398344931011103e-5,8.448159405887646e-8,0.0032793262697919023,-5.4001841681931624e-5,8.451073771217038e-8,0.0032793983038223334,-5.406554644950239e-5,8.461328637466328e-8,0.003279522775013503,-5.4155543035676e-5,8.475773055077884e-8,0.0032797071337421773,-5.4248736184423704e-5,8.490590178054932e-8,0.0032799506498463736,-5.432014534373688e-5,8.501666483516674e-8,0.003280243299674806,-5.434560660615751e-5,8.505051210231342e-8,0.003280565004985942,-5.430549748269372e-5,8.497579494488648e-8,0.003280886168989561,-5.4189871664097075e-5,8.47771184438119e-8,0.003281171139090372,-5.4004474659509736e-5,8.446499011144445e-8,0.003281386101154559,-5.377533480404946e-5,8.408301336304262e-8,0.0032815110470657827,-5.354778435894943e-5,8.370597725390225e-8,0.003281551525320081,-5.3376005048922325e-5,8.342256462979238e-8,0.0032815423544261006,-5.3303997698127796e-5,8.330417977081286e-8,0.0032815375199139597,-5.334662167257096e-5,8.337402779899631e-8,0.003281589425999078,-5.3482477388724635e-5,8.359571772677401e-8,0.003281729077837722,-5.366347603158219e-5,8.388931201996357e-8,0.0032819577992785165,-5.383448660629819e-5,8.416390530143764e-8,0.003282252028816867,-5.3951461208844274e-5,8.434755805679241e-8,0.003282575064733863,-5.399087527054447e-5,8.440270284958065e-8,0.0032828888308288045,-5.395041499415586e-5,8.432692167156779e-8,0.0032831620823933123,-5.384442525035143e-5,8.414501783308623e-8,0.003283374577592845,-5.369758720472906e-5,8.389827797025655e-8,0.0032835182149421297,-5.3538900495709054e-5,8.363445972132653e-8,0.003283596317507677,-5.3396677990892325e-5,8.339967143688218e-8,0.0032836217594359217,-5.3294597136367996e-5,8.323212142857587e-8,0.0032836142689651616,-5.3248868881598726e-5,8.31577096068053e-8,0.0032835972456282487,-5.326663219322064e-5,8.318754756177193e-8,0.003283594445314077,-5.33455619881586e-5,8.331735797629278e-8,0.003283626858166137,-5.34746355750414e-5,8.35286872417797e-8,0.0032837101355881193,-5.363590835227975e-5,8.379175121758466e-8,0.0032838527983820075,-5.3806929427041975e-5,8.406937560267436e-8,0.003284055181100754,-5.396343946274494e-5,8.432148778286718e-8,0.0032843089773761463,-5.40822511951771e-5,8.450998775388706e-8,0.003284597358913076,-5.414438100313206e-5,8.460404446842303e-8,0.003284895834787221,-5.413857912979374e-5,8.458595257932233e-8,0.003285174445296768,-5.406532947278778e-5,8.445757818292492e-8,0.0032854023338345904,-5.3940697089698616e-5,8.424636958756322e-8,0.0032855554831677934,-5.379806390910282e-5,8.400782714837921e-8,0.003285626815766494,-5.3684562539693467e-5,8.38193737194727e-8,0.0032856347701112503,-5.3649414340871245e-5,8.376117760633833e-8,0.0032856235616832005,-5.3725485877918647e-5,8.38860837426238e-8,0.003285650142636974,-5.391249164401037e-5,8.419236027689752e-8,0.0032857616382241683,-5.4173556173630084e-5,8.461836300416228e-8,0.003285976011289329,-5.444965808100916e-5,8.50665090145353e-8,0.003286277545198635,-5.468347961861177e-5,8.544264341871019e-8,0.0032866275363075573,-5.483838580460321e-5,8.568728752895917e-8,0.0032869809330381304,-5.490461627338049e-5,8.578565026164803e-8,0.0032872996339806037,-5.489474335285152e-5,8.575977711296552e-8,0.003287559053510933,-5.48347345844862e-5,8.565341922089876e-8,0.0032877491677817746,-5.475543920672599e-5,8.551775502054806e-8,0.0032878725457978937,-5.4686451467669074e-5,8.540127833973602e-8,0.0032879413934742783,-5.465235422268597e-5,8.534381381044643e-8,0.003287974597188788,-5.4670536130827427e-5,8.53731992403231e-8,0.003287994886136215,-5.474993658443841e-5,8.550343585455102e-8,0.003288026004617243,-5.489052942074253e-5,8.573393033814724e-8,0.0032880898877680324,-5.508355309891816e-5,8.604985500404462e-8,0.003288203921857211,-5.5312587539400495e-5,8.642385409484243e-8,0.0032883785505384453,-5.5555608027442216E-05,8.681938148259401e-8,0.0032886156357365445,-5.578790705412445e-5,8.719554080619211e-8,0.0032889078436774757,-5.5985521987479445e-5,8.751283667062376e-8,0.003289239125545009,-5.612881998939157e-5,8.77392146012537e-8,0.003289586318797038,-5.620594849831879e-5,8.78558281449679e-8,0.0032899218910641607,-5.621585137160659e-5,8.786195042061433e-8,0.0032902179191576634,-5.617054021271309e-5,8.77784760736655e-8,0.0032904515278464005,-5.609599525829377e-5,8.764903319639631e-8,0.003290611690989794,-5.603034994237022e-5,8.753663675600585e-8,0.0032907060886177963,-5.601757230920074e-5,8.751312401969255e-8,0.0032907648315062244,-5.60957001758165e-5,8.763993271030684e-8,0.00329083651219213,-5.628175714456582e-5,8.794367269940098e-8,0.003290973902945432,-5.656023599277606e-5,8.839762192953688e-8,0.003291213321631433,-5.6884077700507716e-5,8.892363541663668e-8,0.003291558763057707,-5.7191191598862794e-5,8.941943124269481e-8,0.0032919809643103797,-5.742839856654776e-5,8.979798297636507e-8,0.0032924313677109907,-5.756902600419823e-5,9.001640079964623e-8,0.0032928611324823196,-5.7616237434723784e-5,9.008120657162066e-8,0.003293234884122227,-5.759476981903807e-5,9.003437623650073e-8,0.003293535602904595,-5.753893290328132e-5,8.993321103832823e-8,0.003293762927268325,-5.7482792094576774e-5,8.983397854989548e-8,0.003293928650397064,-5.745439610101603e-5,8.978246898705095e-8,0.003294052074754002,-5.7473344437337244e-5,8.981023130920463e-8,0.003294156313027807,-5.755021904012821e-5,8.993390698836747e-8,0.0032942654733313977,-5.768674160814335e-5,9.01556607176256e-8,0.0032944022662521263,-5.787621616364838e-5,9.046394738638393e-8,0.003294585697181951,-5.810428412374258e-5,9.083470767938509e-8,0.003294828730883638,-5.835025192829971e-5,9.123350329312376e-8,0.0032951361110117538,-5.858935210068161e-5,9.161924961334033e-8,0.003295502862145243,-5.879608733804884e-5,9.194981099819587e-8,0.0032959140922813155,-5.894836427269165e-5,9.218894166181916e-8,0.003296346501630117,-5.903178845858687e-5,9.2313465377073e-8,0.0032967716942378903,-5.904330752969372e-5,9.231927451156279e-8,0.003297161013652729,-5.8993325195830865e-5,9.222465017716898e-8,0.0032974912528637187,-5.8905595820280855e-5,9.206977518622295e-8,0.0032977504065195102,-5.881449638135142e-5,9.191186754025751e-8,0.003297942473857903,-5.875940209359208e-5,9.181563871498607e-8,0.0032980898714052753,-5.877616173854993e-5,9.183921908280787e-8,0.0032982314957932714,-5.88866346272826e-5,9.201718962789459e-8,0.0032984146833885644,-5.908904162486795e-5,9.23451566292984e-8,0.0032986812779857745,-5.935379884542151e-5,9.277334751463147e-8,0.003299051997951586,-5.962945134656554e-5,9.321663709787946e-8,0.003299516827886728,-5.985901363351853e-5,9.358146928311346e-8,0.0033000378122319263,-5.999998453310655e-5,9.379868554416737e-8,0.003300563468977945,-6.003775679601342e-5,9.384541959529023e-8,0.003301046759699778,-5.9986342425414024e-5,9.374604054768167e-8,0.0033014576765286454,-5.987863396959832e-5,9.355579500500295e-8,0.003301786809054379,-5.975339670750789e-5,9.33390980278829e-8,0.0033020419823445663,-5.964508164161518e-5,9.315264867329e-8,0.0033022421362587082,-5.9578548895871055e-5,9.303685979764736e-8,0.003302411561432909,-5.9567748630520254e-5,9.301394192772079e-8,0.0033025757102160976,-5.961647141519134e-5,9.308938092423752e-8,0.003302758454813665,-5.971971311326604e-5,9.32543085753427e-8,0.003302980149123383,-5.986499809573707e-5,9.348767984635991e-8,0.0033032558966772426,-6.003362496588928e-5,9.375826851834662e-8,0.003303593705146403,-6.0202192353766145e-5,9.402715772445558e-8,0.0033039926166897105,-6.034495084095433e-5,9.425167222522078e-8,0.003304441386900897,-6.043737478577002e-5,9.439138689843304e-8,0.003304918618617791,-6.046082993353868e-5,9.441594479608006e-8,0.0033053952081656575,-6.040751190609572e-5,9.431324511412548e-8,0.0033058394190006372,-6.028418972979809e-5,9.409552551950787e-8,0.0033062239072710452,-6.011307792870043e-5,9.380056022170947e-8,0.0033065329819612454,-5.99287475949815e-5,9.348622559924204e-8,0.003306767914704313,-5.977122717532698e-5,9.321879190076651e-8,0.003306948486177933,-5.9676703637333575e-5,9.305741226162379e-8,0.0033071098761496675,-5.966803032891732e-5,9.303855751819586e-8,0.003307295078633383,-5.974750722150152e-5,9.316446634613662e-8,0.003307544114132092,-5.9894223093106617E-05,9.339925812123948e-8,0.0033078824817017226,-6.006764076265878e-5,9.367527554290179e-8,0.003308312428674662,-6.021771715946743e-5,9.390997219756039e-8,0.003308810868846452,-6.02993136284251e-5,9.402960860305769e-8,0.003309335890088662,-6.028585030600706e-5,9.39915224159716e-8,0.003309839846317023,-6.017646168426142e-5,9.379561381316522e-8,0.003310283495942255,-5.999380790271972e-5,9.348042402784567e-8,0.0033106453888089448,-5.977450811021991e-5,9.310709708273535e-8,0.0033109239015205183,-5.955734946844783e-5,9.273979011758474e-8,0.003311133299984977,-5.937407692846487e-5,9.243051520461885e-8,0.0033112972340637236,-5.924481776115903e-5,9.221178385233012e-8,0.0033114426199441147,-5.917750316763905e-5,9.209590179549796e-8,0.0033115952609545363,-5.9169497804775444e-5,9.207784107991695e-8,0.003311777204723194,-5.920987375766593e-5,9.213904652853273e-8,0.0033120052080999,-5.92814938356559e-5,9.225082851606375e-8,0.003312289594904694,-5.936274846059623e-5,9.237717028262174e-8,0.003312633024578902,-5.942929679557276e-5,9.247760893901174e-8,0.003313029137070735,-5.945642637260442e-5,9.251122688928723e-8,0.0033134615879803833,-5.942257807852542e-5,9.244260873645003e-8,0.0033139044987459776,-5.931413137224047e-5,9.22498336783901e-8,0.0033143255654085853,-5.913063940039792e-5,9.193309185903323e-8,0.003314692523404364,-5.888852657791199e-5,9.152061902109267e-8,0.003314982071759978,-5.862063074863608e-5,9.106765658072329e-8,0.0033151883441194956,-5.836990960235362e-5,9.064573525743296e-8,0.003315327061036844,-5.817820907612507e-5,9.032387007253822e-8,0.003315432756404787,-5.807381239007963e-5,9.014792415786519e-8,0.003315549502730872,-5.80625870862475e-5,9.012617527068651e-8,0.0033157184572218204,-5.8126053541180765e-5,9.022654455023874e-8,0.003315966551858763,-5.8226689676969886e-5,9.038585941639497e-8,0.0033162996332138915,-5.831825523870404e-5,9.052728727571216e-8,0.0033167015288640424,-5.835787971070538e-5,9.058041563143791e-8,0.0033171388754599613,-5.8316694902620264e-5,9.049864230177064e-8,0.003317570199537387,-5.818631498100734e-5,9.026951683504713e-8,0.0033179566224040904,-5.7979533462259516e-5,8.99154851350754e-8,0.0033182710352989515,-5.772533753434543e-5,8.94853309482593e-8,0.003318503156852944,-5.746022504077495e-5,8.903967082003617e-8,0.003318659520612165,-5.721893166409305e-5,8.863565691424088e-8,0.0033187593907932924,-5.7027409664830245e-5,8.831554830627552e-8,0.0033188288152567313,-5.6899447070337116e-5,8.810136402150192e-8,0.0033188949683195744,-5.683663868685322e-5,8.799503967854189e-8,0.0033189820031886176,-5.683044444173091e-5,8.79819251290983e-8,0.0033191086079180677,-5.686498657172212e-5,8.80353851458633e-8,0.0033192868090701146,-5.6919687627007744e-5,8.812108202417043e-8,0.0033195213608058194,-5.6971468212093134e-5,8.820056393045532e-8,0.003319809205334997,-5.6996756676009524e-5,8.823463939940167e-8,0.0033201388682853913,-5.6973850769248384e-5,8.818741927408212e-8,0.0033204901645404743,-5.688617916715095e-5,8.803185327819643e-8,0.0033208351653437364,-5.672667481568836e-5,8.775700668157399e-8,0.0033211417606726764,-5.650258196722333e-5,8.737589343481958e-8,0.0033213807589085697,-5.623860290952227e-5,8.693042466255639e-8,0.003321535704580842,-5.5975194089382036e-5,8.64882803546673e-8,0.003321611779853912,-5.575964063734652e-5,8.612788421461543e-8,0.0033216383488875716,-5.563121550563371e-5,8.591372038897917e-8,0.00332166160133251,-5.560648771923718e-5,8.587208299016034e-8,0.003321729332346463,-5.567246407025703e-5,8.597999999454416e-8,0.0033218749696411454,-5.5791288194139026e-5,8.617344710132884e-8,0.003322108078793622,-5.591357362818337e-5,8.636987047930183e-8,0.003322414074917141,-5.599359775464645e-5,8.649361999558831e-8,0.0033227610657908736,-5.600062818328033e-5,8.649468343439781e-8,0.0033231098129842453,-5.592409172339057e-5,8.635693899550423e-8,0.003323423401229845,-5.577304858807897e-5,8.60968278743868e-8,0.0033236746106560327,-5.5571625019046895e-5,8.57553706414179e-8,0.0033238501378285963,-5.535223551652658e-5,8.538670353148495e-8,0.003323951512978097,-5.5148243821503265e-5,8.504591708672522e-8,0.0033239930515267515,-5.4987516475655016e-5,8.477855814651931e-8,0.003323997693098464,-5.4888022929405465e-5,8.461360179444422e-8,0.0033239919654675055,-5.485601986581888e-5,8.456067453943338e-8,0.0033240012834951657,-5.4886614374086276e-5,8.461111130656435e-8,0.00332404640453801,-5.496599005265156e-5,8.474164448132102e-8,0.003324141328817078,-5.507438956499113e-5,8.491926542726227e-8,0.003324292421254159,-5.5189074106772154e-5,8.510604823670503e-8,0.0033244982624229583,-5.528690636714247e-5,8.526342573891019e-8,0.0033247498139609742,-5.534665974060568e-5,8.5356116539381e-8,0.003325030738318475,-5.535139742517621e-5,8.535622814349039e-8,0.003325318078773487,-5.529132808874682e-5,8.524810407518335e-8,0.0033255840434287193,-5.516732559483926e-5,8.503412127897562e-8,0.003325800025884042,-5.4994500283684165e-5,8.474038755337137e-8,0.003325943636647162,-5.4803921202816106e-5,8.441925947919739e-8,0.003326007954119694,-5.463949661780294e-5,8.414386557641033e-8,0.0033260093929748016,-5.454751850488496e-5,8.39906316797749e-8,0.0033259881913321188,-5.4560143825206843e-5,8.401195873056964e-8,0.0033259972865628765,-5.4680122236649234e-5,8.421112518435034e-8,0.003326082679984568,-5.4876669269890736e-5,8.453576539427439e-8,0.0033262656698723574,-5.509660108184346e-5,8.489670021080734e-8,0.0033265367421952,-5.528454025680654e-5,8.520177547374201e-8,0.0033268625692368203,-5.540089651290604e-5,8.53858406600953e-8,0.0033271997836301316,-5.5430263445104554e-5,8.542454745717457e-8,0.00332750801243725,-5.538020410605459e-5,8.533193941439912e-8,0.0033277582273325535,-5.527451512296222e-5,8.514878834424156e-8,0.0033279360985943923,-5.514504454421498e-5,8.492865234127454e-8,0.0033280417206101223,-5.502443713341801e-5,8.47257264967664e-8,0.0033280872119350394,-5.494062573953781e-5,8.458583816329359e-8,0.0033280931856418602,-5.4913121909954754e-5,8.454056432249686e-8,0.003328084687829209,-5.49510529651956e-5,8.460424445406648e-8,0.003328087119786794,-5.505287514330795e-5,8.477367296994299e-8,0.003328122619004344,-5.520754438276987e-5,8.503008040542494e-8,0.0033282072794208633,-5.539681605654844e-5,8.534289014342119e-8,0.0033283494784650124,-5.559823205385741e-5,8.567459021016955e-8,0.0033285493241682613,-5.5788247308437714e-5,8.5985886311372e-8,0.0033287989546007955,-5.594511202878772e-5,8.624053969095568e-8,0.0033290834152926,-5.605145404558202e-5,8.640978601385084e-8,0.0033293820025522038,-5.609665354800625e-5,8.647641681844645e-8,0.00332967012765513,-5.607914249037254e-5,8.64386360154981e-8,0.003329922108265471,-5.600868372770514e-5,8.63137014691309e-8,0.003330115618151409,-5.590807269377462e-5,8.614043768918587e-8,0.0033302381328333365,-5.58126677029861e-5,8.597808953775239e-8,0.0033302943335076583,-5.5765475825965935e-5,8.589791861426393e-8,0.0033303112431023363,-5.580611329656748e-5,8.596488539474054e-8,0.003330335893358347,-5.595512706192685e-5,8.621187561535514e-8,0.0033304217950196257,-5.620076748901601e-5,8.661809726569148e-8,0.0033306077541668403,-5.649824615334275e-5,8.710815973363818e-8,0.003330900673735715,-5.678551821777345e-5,8.757850948338549e-8,0.0033312733708816735,-5.7007580014031255e-5,8.793794593475561e-8,0.003331677827847687,-5.713506396332166e-5,8.81385544183494e-8,0.0033320641462310304,-5.7168762976044525e-5,8.818303689777447e-8,0.003332394888741356,-5.713232454494835e-5,8.81121521924967e-8,0.003332650948899174,-5.706056072566515e-5,8.79848172366316e-8,0.0033328307387244707,-5.69892054818512e-5,8.786079588531413e-8,0.003332946103134148,-5.6948270940260595e-5,8.7789662082767e-8,0.003333017524013881,-5.695869565914077e-5,8.780546633003202e-8,0.003333069785980845,-5.7031151550971855e-5,8.79250644837299e-8,0.003333128293176569,-5.7166122827538784e-5,8.814848616597651e-8,0.003333215942814037,-5.735486447701515e-5,8.846062555209589e-8,0.003333350526081416,-5.758107712399529e-5,8.883400189972032e-8,0.003333542711568079,-5.782323256543382e-5,8.923255045240708e-8,0.0033337948024626724,-5.805748921759443e-5,8.961641831353482e-8,0.0033341004955474854,-5.826092281925177e-5,8.994735848331943e-8,0.0033344456574180216,-5.8414663420069585e-5,9.019404254409442e-8,0.0033348099763535065,-5.850667539814434e-5,9.033680470762473e-8,0.0033351693972139954,-5.8534013007029704e-5,9.037145788055351e-8,0.0033354992652454255,-5.850435337312846e-5,9.031176994724097e-8,0.003335778150817505,-5.8436628216984924e-5,9.019026948162117e-8,0.0033359924676545083,-5.836033415719681e-5,9.005674088553579e-8,0.003336141696475799,-5.831247259530645e-5,8.99728131408324e-8,0.003336242937122228,-5.833081796090152e-5,9.000064726389226e-8,0.003336332072852576,-5.844314497737879e-5,9.018519988192054e-8,0.003336457993721301,-5.8654611621949015e-5,9.053364701309959e-8,0.003336668034416213,-5.8939341334053395e-5,9.100181248328803e-8,0.0033369886308538366,-5.9243988034202145e-5,9.15003563787348e-8,0.0033374117211466396,-5.950577741976175e-5,9.192485569877443e-8,0.0033378966406314506,-5.9676814334938345e-5,9.219623025373824e-8,0.003338387060585492,-5.974061238822445e-5,9.228818050131115e-8,0.003338832161640395,-5.9712769824558396e-5,9.222809662066525e-8,0.003339200660884803,-5.9629238348668325e-5,9.207713490030904e-8,0.0033394839946629365,-5.9531508527586526e-5,9.19051435138701e-8,0.00333969194933606,-5.9455615021928336e-5,9.177216062406416e-8,0.0033398456958361393,-5.9426735296063406e-5,9.171952556625893e-8,0.0033399714625476887,-5.94580076063395e-5,9.176821138029921e-8,0.0033400959454044452,-5.9551503177061825e-5,9.19207583444299e-8,0.003340243216604815,-5.969991931487511e-5,9.21642828744451e-8,0.003340432528612182,-5.988845372977386e-5,9.247363390315894e-8,0.00334067661964073,-6.009682747560091e-5,9.281470236403697e-8,0.003340980391006287,-6.0301603901974886e-5,9.314821825194654e-8,0.0033413400860247433,-6.047899922745841e-5,9.34344253905957e-8,0.0033417433406987395,-6.0608161718892285e-5,9.363861218700703e-8,0.0033421704338331562,-6.0674530868574566e-5,9.373681434940468e-8,0.003342596793867571,-6.067274472862805e-5,9.372073186756808e-8,0.003342996619504433,-6.060857747387037e-5,9.360092417739725e-8,0.0033433472973181913,-6.049938316515723e-5,9.340736779360886e-8,0.003343634076313921,-6.037265637678459e-5,9.318674843140178e-8,0.003343854352958671,-6.026253039672385e-5,9.29962869527095e-8,0.0033440207974379525,-6.02040503597778e-5,9.289398103642671e-8,0.00334416209570793,-6.0225227664861864e-5,9.292540486542561e-8,0.0033443195738953684,-6.033783862182839e-5,9.310869759814082e-8,0.0033445382535737425,-6.052967926745262e-5,9.342213643036966e-8,0.0033448528768625176,-6.076271261213488e-5,9.380146725962548e-8,0.0033452733341006566,-6.098129519580642e-5,9.415379750598335e-8,0.0033457773304763423,-6.11302103754188e-5,9.43875995339562e-8,0.003346316441695281,-6.117498982465232e-5,9.444642575943193e-8,0.0033468338086486238,-6.111354333006799e-5,9.432810795018451e-8,0.0033472838692474196,-6.097324927755117e-5,9.4079645301939e-8,0.0033476441985163447,-6.0797240704200516e-5,9.377398884436344e-8,0.0033479163084475117,-6.062888070521747e-5,9.348385258171712e-8,0.003348119017326552,-6.050124738963157e-5,9.326410433273226e-8,0.0033482798563691583,-6.043317112036643e-5,9.314535120928058e-8,0.0033484280459571253,-6.0429873261064216e-5,9.313533471622201e-8,0.0033485900303240564,-6.0485597297215256e-5,9.322360188274091e-8,0.0033487870427821647,-6.058650061285441e-5,9.338645264051759e-8,0.003349033779148276,-6.071317745669125e-5,9.359112405668456e-8,0.003349337512154647,-6.084287930407258e-5,9.379941019517652e-8,0.0033496973868342426,-6.0951778738148076e-5,9.39713912066027e-8,0.0033501040189214903,-6.1017654657638296e-5,9.406994902831682e-8,0.003350539852327468,-6.102313701204754e-5,9.406628005534092e-8,0.0033509808424563464,-6.0959184102096446e-5,9.394579478956938e-8,0.0033513997985662727,-6.0828035243102085e-5,9.371305998195274e-8,0.003351771242630648,-6.064464806465786e-5,9.339407682046672e-8,0.0033520770502697586,-6.043567280060645e-5,9.303431185934628e-8,0.0033523115992083793,-6.023549059632611e-5,9.269175686275925e-8,0.0033524849538567095,-6.0079656147178764e-5,9.242570667708549e-8,0.003352622868607595,-5.999683644913714e-5,9.228321247007672e-8,0.0033527629108964156,-6.0000858451751614e-5,9.228598308330152e-8,0.0033529466888537886,-6.0084899028015664e-5,9.242109352946563e-8,0.003353209163212818,-6.0220101719581925e-5,9.263915942649568e-8,0.003353567452423346,-6.036056292024498e-5,9.286301996208644e-8,0.003354013074553909,-6.045506176241125e-5,9.300742375322236e-8,0.003354511938151932,-6.0462793179074204e-5,9.300515855826013e-8,0.003355013937094379,-6.036701837740332e-5,9.282957547814603e-8,0.0033554690078815767,-6.018006277425595e-5,9.250263119120252e-8,0.0033558424476254254,-5.9937221757790955e-5,9.208440293612802e-8,0.0033561228412348943,-5.9683282240027307e-5,9.165030735952862e-8,0.003356320744440452,-5.9458664926667036e-5,9.126781835699132e-8,0.003356461215846782,-5.929059997108527e-5,9.09818074709203e-8,0.0033565749791113304,-5.919060979973586e-5,9.081060603989335e-8,0.0033566915189816907,-5.915640839670276e-5,9.07494897969949e-8,0.0033568350305881473,-5.91755770416691e-5,9.077702401431161e-8,0.003357022613830941,-5.9229226963443656e-5,9.086121990946202e-8,0.003357263701159578,-5.929496452229679e-5,9.096440629587108e-8,0.003357559911226247,-5.934921839576949e-5,9.104702421945221e-8,0.0033579049385909485,-5.9369383956175455e-5,9.1071192375381e-8,0.0033582845835001054,-5.9336313704812116e-5,9.100494733703145e-8,0.00335867744667257,-5.923739982099832e-5,9.082751861971475e-8,0.003359057001605932,-5.906997363720898e-5,9.053508695821385e-8,0.003359395616398978,-5.884413276926084e-5,9.014546329210125e-8,0.003359670484111321,-5.858354614172143e-5,8.96992412648217e-8,0.003359870306372325,-5.83227294745991e-5,8.925494292974744e-8,0.003360000476205311,-5.8100244081356475e-5,8.887733886137964e-8,0.0033600842939887445,-5.794905158876692e-5,8.862112733910623e-8,0.0033601588394004405,-5.7886876867381644e-5,8.851484939281549e-8,0.0033602660797591934,-5.790993390908707e-5,8.85506789176601e-8,0.003360441674025316,-5.799244505104898e-5,8.868407215376571e-8,0.003360704848971143,-5.809247460735285e-5,8.884397868653839e-8,0.003361052408555661,-5.8162610399993446e-5,8.895098477449679e-8,0.0033614587985430038,-5.816263041067814e-5,8.893850581578914e-8,0.003361882595100984,-5.807055435201572e-5,8.877103313526498e-8,0.0033622778382321966,-5.788851232418176e-5,8.845357733079992e-8,0.003362606646946412,-5.764123357960088e-5,8.802875740347297e-8,0.003362848722009863,-5.736772166360094e-5,8.756257923304475e-8,0.003363004624307182,-5.710951428610873e-5,8.712465566458204e-8,0.0033630925651310676,-5.690004657624532e-5,8.677046271557997e-8,0.0033631411170110623,-5.6758424875231495e-5,8.653114040510852e-8,0.003363181256001812,-5.668835779717318e-5,8.641199419472419e-8,0.0033632402740149748,-5.6680785627308535e-5,8.639713164955336e-8,0.0033633383786634027,-5.67180183840242e-5,8.64564805526587e-8,0.0033634874868962595,-5.6777755378881375e-5,8.65524655651299e-8,0.0033636912810481303,-5.683628445550697e-5,8.66452477529796e-8,0.003363945718484768,-5.687086249094485e-5,8.669663650025481e-8,0.0033642395389277832,-5.686171426360383e-5,8.667346696354637e-8,0.0033645548029027344,-5.6794222114151424e-5,8.655138743646585e-8,0.0033648679728196743,-5.6661634264931834e-5,8.631952160889124e-8,0.003365152316192434,-5.646808727765676e-5,8.598556119531746e-8,0.0033653823440695273,-5.6231009443925796e-5,8.557966538825618e-8,0.003365540348867742,-5.598115619209057e-5,8.515425825459867e-8,0.0033656236291926926,-5.5758262063050816e-5,8.477643543829795e-8,0.003365649237974656,-5.5601580627967396e-5,8.451187493962213e-8,0.003365652653538818,-5.5537505781072915e-5,8.440402629396734e-8,0.0033656789459104476,-5.5569291146105796e-5,8.445703766415184e-8,0.003365769023611574,-5.5674099565599833e-5,8.463116901817921e-8,0.003365946605285959,-5.580935658495085e-5,8.485389455646114e-8,0.003366211262409989,-5.592573091926771e-5,8.504204720695987e-8,0.0033665395943343838,-5.598132333980049e-5,8.512577176624952e-8,0.003366892961472996,-5.59521898282755e-5,8.506604596898847e-8,0.003367228357217615,-5.583677491599288e-5,8.486175343471328e-8,0.0033675090217883843,-5.565418314517531e-5,8.454632832083293e-8,0.0033677122812087027,-5.543770395775392e-5,8.417651191158752e-8,0.0033678331653782018,-5.522579913828783e-5,8.381704806824443e-8,0.0033678834944036373,-5.50530389308712e-5,8.352552276592036e-8,0.0033678872697589877,-5.494321345418341e-5,8.334103225252462e-8,0.003367874119813055,-5.490600237086945e-5,8.327889130742978e-8,0.0033678728417263332,-5.493731937946403e-5,8.333146207894089e-8,0.003367906582298691,-5.50223028120182e-5,8.347329601819736e-8,0.003367990240931756,-5.5139459330814e-5,8.36680693328067e-8,0.003368129820921837,-5.5264706650024884e-5,8.387526013174893e-8,0.0033683230141878383,-5.53746278372721e-5,8.405550425907457e-8,0.0033685602874602904,-5.544884667401181e-5,8.417455801548991e-8,0.0033688260245799536,-5.5471875403664845e-5,8.420648096017351e-8,0.0033690996964164,-5.54349217648513e-5,8.41368044105891e-8,0.0033693574390171246,-5.533796983745346e-5,8.396611154911362e-8,0.003369574738556079,-5.51920190230235e-5,8.371373979967595e-8,0.0033697309471166486,-5.502062543221554e-5,8.342014676700197e-8,0.0033698157191195807,-5.4858963662490004e-5,8.314502135403152e-8,0.00336983588693757,-5.4748211466438515e-5,8.295758836096101e-8,0.003369819180796456,-5.472435396786891e-5,8.291770942984493e-8,0.0033698103447281362,-5.4804144817696605e-5,8.305241791698605e-8,0.0033698580327925177,-5.497509215486744e-5,8.333937840761425e-8,0.00336999704671909,-5.519660736781785e-5,8.370918090270701e-8,0.003370235023755808,-5.541355414664154e-5,8.406846696487325e-8,0.0033705505910493,-5.557548077177791e-5,8.43325066766928e-8,0.0033709027002781183,-5.565191209448797e-5,8.445094442884492e-8,0.0033712449573918956,-5.563811944371171e-5,8.441726573141519e-8,0.0033715383281370122,-5.5551947479558465e-5,8.426301455023264e-8,0.0033717588003342688,-5.5425603682988634e-5,8.404350744757277e-8,0.0033718997534319347,-5.529628730757146e-5,8.382176259040501e-8,0.0033719703516509663,-5.519808521396885e-5,8.365483265879684e-8,0.0033719915125817105,-5.515616301581334e-5,8.358424368986457e-8,0.003371990670460589,-5.5183508520810655e-5,8.363084262341449e-8,0.003371996312094328,-5.5280222125438397e-5,8.37938999603007e-8,0.0033720332014755966,-5.543506986883743e-5,8.405389123547616e-8,0.0033721189855487107,-5.56286157858378e-5,8.437778720791833e-8,0.003372262458821144,-5.5837078683713314e-5,8.472545698884107e-8,0.0033724633940253805,-5.603614789623234e-5,8.505597653427594e-8,0.003372713546608454,-5.620417709122976e-5,8.533294234846123e-8,0.0033729982668022603,-5.632452546423462e-5,8.552844070193068e-8,0.00337329829570848,-5.6387235045065904e-5,8.562597120345452e-8,0.003373591662554191,-5.639037939243083e-5,8.56228158420924e-8,0.0033738558827816345,-5.634128823507716e-5,8.553209949381927e-8,0.0033740709065428706,-5.625757728164715e-5,8.538435984518772e-8,0.0033742233614416587,-5.6167318041165296e-5,8.522753464272809e-8,0.0033743120850930324,-5.6106839883563096e-5,8.512295286558207e-8,0.0033743535182657845,-5.6114284681771475e-5,8.51343302306435e-8,0.003374383584560917,-5.621816091412462e-5,8.530860378052354e-8,0.003374451653711905,-5.642363033026548e-5,8.565316246357324e-8,0.003374604874548048,-5.670392651341919e-5,8.612176775673318e-8,0.003374868363272367,-5.700515151316815e-5,8.662290807184912e-8,0.0033752327666612806,-5.726543902108981e-5,8.705223569982031e-8,0.003375657734454065,-5.743861941957818e-5,8.733251492462779e-8,0.00337608883276525,-5.7508964679654286e-5,8.743842547911098e-8,0.0033764770314720334,-5.749109053497066e-5,8.739613430904317e-8,0.003376791288154108,-5.741928432963936e-5,8.726484516431357e-8,0.003377021873463669,-5.733428391425587e-5,8.711405749206888e-8,0.003377177244553692,-5.727289468373037e-5,8.700584615729924e-8,0.0033772782065038614,-5.7261975296652276e-5,8.698482352101486e-8,0.003377351897211726,-5.731608876134401e-5,8.707450164078988e-8,0.0033774266600864046,-5.743750053577925e-5,8.727765185706965e-8,0.0033775279397840904,-5.761758344607225e-5,8.757892428997106e-8,0.0033776751676794963,-5.783921764291742e-5,8.794897670651642e-8,0.0033778797227997696,-5.807988352583364e-5,8.834963725304223e-8,0.0033781440270615184,-5.831509017006301e-5,8.873957895692964e-8,0.0033784617768650477,-5.8521803894550365e-5,8.908001953560924e-8,0.003378819238634322,-5.868149381761238e-5,8.933984781642511e-8,0.003379197323670683,-5.8782439093002966e-5,8.949957584080041e-8,0.003379574066231394,-5.882122050843463e-5,8.955393397490966e-8,0.003379927308581292,-5.880351542948081e-5,8.951323372093641e-8,0.0033802375736910525,-5.8744255904977356e-5,8.940353066295135e-8,0.003380491220639322,-5.86670851430349e-5,8.92654614473728e-8,0.003380684061250688,-5.8602724717853605e-5,8.915117457299559e-8,0.003380825238790617,-5.8585283278155506e-5,8.911787039413452e-8,0.0033809400725077258,-5.8645366370736766e-5,8.921617853680288e-8,0.0033810692089788217,-5.8799874204040243e-5,8.947323513780382e-8,0.003381260821250198,-5.904106722336901e-5,8.987469296042821e-8,0.0033815547925915685,-5.933123263112307e-5,9.0356110182332e-8,0.003381964109575867,-5.961028832185029e-5,9.081592148861166e-8,0.0033824647851254143,-5.981713959083937e-5,9.1151422106769e-8,0.003383003169851391,-5.9914358833980524e-5,9.130033548932249e-8,0.0033835175357943767,-5.9901254032734106e-5,9.126278647579509e-8,0.0033839605590798446,-5.980890433849116e-5,9.10926902260356e-8,0.00338431099616989,-5.968366488858203e-5,9.086948355865654e-8,0.0033845727837585357,-5.9570442762593056e-5,9.066948346775116e-8,0.0033847670858004075,-5.950243521857609e-5,9.05484296124944e-8,0.0033849232362922243,-5.9497727807565615e-5,9.053594275132374e-8,0.0033850716583332255,-5.956024397003957e-5,9.063751388399143e-8,0.0033852393421935963,-5.9682490187505253e-5,9.083949487511646e-8,0.0033854472176725985,-5.984859127500225e-5,9.111441080009529e-8,0.0033857086133339863,-6.003720459463659e-5,9.142588647628522e-8,0.0033860284271986017,-6.022439650227471e-5,9.173340583043047e-8,0.003386402955846923,-6.038656005091193e-5,9.199713865518988e-8,0.003386820462731965,-6.0503374088305864e-5,9.218289744117541e-8,0.003387262658810295,-6.05606230682693e-5,9.226693315388558e-8,0.0033877071395750856,-6.0552452997181255e-5,9.223981379163578e-8,0.0033881305330445235,-6.048266726105932e-5,9.210864890465263e-8,0.0033885120041810286,-6.036487174837796e-5,9.189727295160823e-8,0.003388836782278121,-6.022136221100909e-5,9.164417689053099e-8,0.003389099364723984,-6.008071140194549e-5,9.139814912203612e-8,0.003389306087909998,-5.9974056769629564e-5,9.121173103792565e-8,0.0033894766507592314,-5.992991778520634e-5,9.113234376727132e-8,0.0033896436217253243,-5.9967392439029444e-5,9.119094033650632e-8,0.003389848331184142,-6.00884494472235e-5,9.138938243016609e-8,0.003390131696696725,-6.027176738671097e-5,9.169052134537972e-8,0.003390520408645742,-6.0472489173007385e-5,9.20181223124543e-8,0.003391013048776062,-6.0632291852483944e-5,9.227391611926006e-8,0.003391574685345615,-6.069936708195099e-5,9.237117323434914e-8,0.0033921465752053356,-6.0649508463182645e-5,9.227013011226155e-8,0.003392668019375996,-6.049561955058757e-5,9.199390213601754e-8,0.003393098109249708,-6.027985582758634e-5,9.161498325294656e-8,0.003393425788317697,-6.005472021645174e-5,9.12229510324662e-8,0.00339366621882231,-5.986502345047448e-5,9.089367784604274e-8,0.003393849764889761,-5.973824800765525e-5,9.067301795341194e-8,0.0033940108887349028,-5.9683418753718195e-5,9.057517474706375e-8,0.0033941806177451347,-5.969475502631139e-5,9.058927390461232e-8,0.0033943828082887316,-5.9756555264083074e-5,9.068792616803152e-8,0.0033946329021984417,-5.984744069403636e-5,9.083450585144963e-8,0.003394937808251754,-5.994358255246006e-5,9.098854172687638e-8,0.003395296161910116,-6.002127117598997e-5,9.110993548500498e-8,0.003395698804414143,-6.0059267214638514e-5,9.116285658288206e-8,0.0033961296425301405,-6.004122350292775e-5,9.111984405853812e-8,0.0033965672449549665,-5.995817702591761e-5,9.096608893871411e-8,0.0033969875056327195,-5.9810681332088226e-5,9.070310529653611e-8,0.0033973673472186662,-5.960989551896998e-5,9.035055940505286e-8,0.0033976890073721226,-5.937702862808381e-5,8.994519524467432e-8,0.00339794414966279,-5.914078600227383e-5,8.953626954603158e-8,0.00339813686265762,-5.893285864413488e-5,8.91776383701858e-8,0.0033982846760873316,-5.8782022201718587e-5,8.891757350029357e-8,0.0033984170426695744,-5.8707756459061303e-5,8.878796990728907e-8,0.0033985710041651773,-5.8714419523522015e-5,8.879474808736464e-8,0.003398783964213327,-5.8787308590801815e-5,8.891163690828701e-8,0.003399084097724401,-5.889244323337396e-5,8.908026373626042e-8,0.003399480270250761,-5.898203293481756e-5,8.921967011645284e-8,0.0033999551699554283,-5.900646431000797e-5,8.924656326463904e-8,0.003400466358786225,-5.893049216975236e-5,8.91024588459512e-8,0.003400957801068039,-5.8747104648884236e-5,8.877683281588798e-8,0.003401378527359106,-5.848118000125292e-5,8.831304298309702e-8,0.0034016995373273343,-5.817987411373497e-5,8.779181892187154e-8,0.0034019205448226966,-5.789489120259509e-5,8.730103063936285e-8,0.0034020649231812825,-5.7666180030203005e-5,8.690798801868969e-8,0.003402168049287801,-5.751375176227864e-5,8.664571506488682e-8,0.003402265858276145,-5.743804869788241e-5,8.651389470980682e-8,0.00340238747932283,-5.742519852330234e-5,8.64881096032888e-8,0.0034025522455255973,-5.7453234933997976e-5,8.653057385184077e-8,0.0034027695489980392,-5.7497130460310654e-5,8.659865614011625e-8,0.003403039886903058,-5.753221388492227e-5,8.665054230622828e-8,0.0034033560870460524,-5.753644074444263e-5,8.664895352331391e-8,0.0034037044047870047,-5.7492186034072585e-5,8.656414307834132e-8,0.003404065680014834,-5.738807359108861e-5,8.637705347880114e-8,0.0034044170305128105,-5.722099116240365e-5,8.60828262613509e-8,0.003404734597935735,-5.6997926909140374e-5,8.569395943787588e-8,0.003404997558905359,-5.6736793275923886e-5,8.524163215191012e-8,0.0034051929890715296,-5.646520876211743e-5,8.477344074418974e-8,0.003405320408160798,-5.621648018227168e-5,8.434631513995815e-8,0.003405394300451476,-5.6022900264124296e-5,8.40149123124777e-8,0.0034054430646795236,-5.590772696450894e-5,8.381791884209707e-8,0.0034055038606741876,-5.587815564824331e-5,8.376626228374444e-8,0.0034056142384550816,-5.59216390476811e-5,8.383721738396868e-8,0.003405802567121793,-5.600706841995555e-5,8.397686437719106e-8,0.003406079762115114,-5.609104831024885e-5,8.411111539414267e-8,0.0034064347003346877,-5.6128202268790945e-5,8.416335082003054e-8,0.0034068351738956544,-5.6083285215666045e-5,8.407483916197228e-8,0.003407235151776666,-5.594181500695267e-5,8.382243623901492e-8,0.0034075871596243503,-5.5715353849958e-5,8.342714398589868e-8,0.0034078560389337632,-5.543856994368361e-5,8.294878555047174e-8,0.0034080288015259303,-5.5158405656903775e-5,8.246741739171249e-8,0.003408116556022004,-5.491960304745137e-5,8.20587213493105e-8,0.0034081483496585887,-5.475262430635319e-5,8.17736335484883e-8,0.0034081606287834965,-5.466819510979342e-5,8.162935251217643e-8,0.003408187213574958,-5.465879991060622e-5,8.161218884734959e-8,0.0034082529479952245,-5.470438823302094e-5,8.168747464274309e-8,0.0034083714747449156,-5.477893708194855e-5,8.181075694408507e-8,0.0034085458513296286,-5.4855751000708015e-5,8.193669718795236e-8,0.003408770414545297,-5.4910925975911326e-5,8.202480039048432e-8,0.003409032781106392,-5.4925363401297566e-5,8.204274072682829e-8,0.0034093155318804143,-5.488606600123461e-5,8.196858076576507e-8,0.0034095977133735593,-5.478735913882586e-5,8.179294852554372e-8,0.0034098566636729913,-5.463228818846857e-5,8.1521508229844755E-08,0.003410070752139286,-5.443391476149148e-5,8.117715796819658e-8,0.0034102233957102024,-5.4215684339399623e-5,8.0800505879973e-8,0.003410308068531649,-5.400958289018258e-5,8.044648266424068e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json deleted file mode 100644 index 5a65685..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_22.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":22000,"numberOfSamples":1000,"samples":[0.003410332914201753,-5.3850894022675106e-5,8.017517098961131e-8,0.003410322528879365,-5.376958194615e-5,8.003701237438996e-8,0.0034103145652221627,-5.3780481135696216e-5,8.005617875605212e-8,0.0034103506775372276,-5.3876274061593275e-5,8.021888857849169e-8,0.003410464307410866,-5.402707135418975e-5,8.047308167596654e-8,0.003410669971601388,-5.4187778507499705e-5,8.074133887896081e-8,0.003410958362427396,-5.431078402439631e-5,8.094271511350002e-8,0.0034112988966924413,-5.435925986441926e-5,8.101538020005893e-8,0.0034116483046836123,-5.431671386401488e-5,8.093263501288651e-8,0.0034119621492173344,-5.41904204198061e-5,8.070834304160092e-8,0.0034122059256284677,-5.400841636122217e-5,8.039138838903804e-8,0.0034123629141804617,-5.38113276447821e-5,8.005145827068325e-8,0.003412436926427523,-5.3641509849942013e-5,7.976047048128742e-8,0.0034124495366027988,-5.3532666321671336e-5,7.957504010808949e-8,0.0034124330661485227,-5.350283981451321e-5,7.952484351765614e-8,0.0034124218722404974,-5.3552370565715433e-5,7.960947036368768e-8,0.0034124447457084236,-5.3666539079328896e-5,7.980316491937519e-8,0.0034125202858526367,-5.382106091332426e-5,8.00642647210325e-8,0.0034126555868305777,-5.398815305369993e-5,8.034545908014444e-8,0.0034128473776592204,-5.414152490629849e-5,8.06021342297411e-8,0.0034130843642180496,-5.425966542015235e-5,8.079783644736344e-8,0.0034133497512128354,-5.4327618445658844e-5,8.090725685897239e-8,0.003413623435855102,-5.4337869912637006e-5,8.091781018622006e-8,0.003413883907454681,-5.429097539492461e-5,8.083081580105819e-8,0.0034141102665403125,-5.419622361028624e-5,8.066268207707981e-8,0.0034142849136512055,-5.407215162017978e-5,8.044570051432896e-8,0.00341439730488426,-5.394617096384391e-5,8.022718223765307e-8,0.003414448551881033,-5.385201336379878e-5,8.006482802604857e-8,0.0034144554442633347,-5.382365677022172e-5,8.001619006311863e-8,0.003414451133210198,-5.388562472720168e-5,8.012215438343905e-8,0.0034144795115925615,-5.4042269894100845e-5,8.038890648236031e-8,0.003414582717752921,-5.427144088560471e-5,8.077748959286917e-8,0.0034147858366957128,-5.452785635760065e-5,8.120990068433355e-8,0.003415086335408109,-5.475685197042185e-5,8.159276299340531e-8,0.0034154541675420077,-5.491264135361651e-5,8.184854560101504e-8,0.003415842328369328,-5.497241133679643e-5,8.19395012048398e-8,0.0034162020648540446,-5.494079694397467e-5,8.187500799224558e-8,0.0034164960597480513,-5.484509224563486e-5,8.170297816008171e-8,0.003416705855690934,-5.472520370648011e-5,8.14923147861858e-8,0.0034168331491478627,-5.462263220717812e-5,8.131389578844407e-8,0.003416896425673255,-5.457135459703978e-5,8.122506662590603e-8,0.003416924864737033,-5.459196701501527e-5,8.125992201462119e-8,0.0034169512624180483,-5.468942093895768e-5,8.142580537893595e-8,0.0034170054267853647,-5.485407812356393e-5,8.17054100824689e-8,0.0034171092005408077,-5.506533196508355e-5,8.206310391954363e-8,0.0034172737893538854,-5.529662285957986e-5,8.24534661992994e-8,0.0034174994368857004,-5.552057481406241e-5,8.282992315001632e-8,0.0034177769459542693,-5.5713266654435735e-5,8.315188937008223e-8,0.0034180902481047706,-5.58571185539423e-5,8.338960767448971e-8,0.0034184192209990544,-5.594239734507513e-5,8.352672714006698e-8,0.0034187422744122974,-5.5967759795049916e-5,8.356130894842189e-8,0.0034190386613258106,-5.5940313585960716e-5,8.350600300356605e-8,0.0034192907451060053,-5.5875438829459745e-5,8.338772029482915e-8,0.0034194865853197334,-5.5796286755981725e-5,8.324661178228372e-8,0.0034196231618546383,-5.573239332743332e-5,8.313343416160889e-8,0.0034197100026956712,-5.571629566234729e-5,8.310353167794132e-8,0.0034197718373557965,-5.5777017730924494e-5,8.320565011677361e-8,0.0034198476546487924,-5.593045265235306e-5,8.346570742357244e-8,0.0034199832418701356,-5.6169307155583144e-5,8.387000547866622e-8,0.0034202166393619616,-5.64584557493018e-5,8.435767926960611e-8,0.0034205614639800535,-5.67418663020452e-5,8.483274082655738e-8,0.003420997727034218,-5.696140593963007e-5,8.51962311929662e-8,0.0034214773558268368,-5.707879301142648e-5,8.538365211417604e-8,0.0034219421419332224,-5.708851047552745e-5,8.538688805157197e-8,0.0034223438059788605,-5.701585691614104e-5,8.525060072019697e-8,0.0034226564954146083,-5.690413699843295e-5,8.504993386503595e-8,0.003422878920363075,-5.679944106094893e-5,8.486413227000239e-8,0.0034230291674335464,-5.6739176541925223e-5,8.475681081074442e-8,0.003423136660697731,-5.6746178962097036e-5,8.476606168603778e-8,0.0034232343831674863,-5.682746769406769e-5,8.490269488349289e-8,0.0034233527024106186,-5.697594757338996e-5,8.515352124084064e-8,0.003423515048462373,-5.717372366496969e-5,8.548725451920484e-8,0.003423735360724929,-5.739623453008071e-5,8.586162778920173e-8,0.0034240171921175824,-5.761661689063496e-5,8.623076555625632e-8,0.003424354282394761,-5.7809781532945634e-5,8.655200921001188e-8,0.003424732337212298,-5.795580012171021e-5,8.679159414405439e-8,0.0034251316600929604,-5.804228112995662e-5,8.692867283680107e-8,0.0034255301389273553,-5.8065571370678764e-5,8.695739993818016e-8,0.0034259061435299876,-5.8030942708281336e-5,8.68873016976559e-8,0.003426241192945239,-5.7952061490074354e-5,8.674237096252997e-8,0.003426522442310002,-5.784987818084441e-5,8.655906513984539e-8,0.0034267450710929025,-5.775090698206635e-5,8.638314938058331e-8,0.0034269146613510586,-5.768461436478088e-5,8.626498016672915e-8,0.0034270492888037753,-5.7679206341423455e-5,8.625215296635437e-8,0.0034271801115048016,-5.775513150463932e-5,8.637847340111039e-8,0.003427348318837799,-5.791673040416302e-5,8.66500111928406e-8,0.003427596290732135,-5.814466196255829e-5,8.703260278195282e-8,0.0034279529627239238,-5.8394327194921334e-5,8.744949479355945e-8,0.003428418470586544,-5.860576263431353e-5,8.77983298726461e-8,0.00342895785967562,-5.872474275422114e-5,8.79870966366347e-8,0.0034295111225311516,-5.872520138069127e-5,8.797231646130829e-8,0.0034300159367414112,-5.8619276575255356e-5,8.777608739665868e-8,0.003430429936364875,-5.8449346719175054e-5,8.747221956219683e-8,0.0034307409539403753,-5.8269005362368705e-5,8.715330218992734e-8,0.0034309636874953423,-5.812488879415304e-5,8.689927969838687e-8,0.0034311290547955646,-5.804651663753494e-5,8.676002574361577e-8,0.0034312730856115364,-5.804431513186724e-5,8.675224016919222e-8,0.003431428842749821,-5.811258599710215e-5,8.686495556850346e-8,0.003431621833748501,-5.823424073945281e-5,8.706799112634763e-8,0.0034318679871170456,-5.838549788451625e-5,8.732014432177786e-8,0.0034321731793053077,-5.854001187955921e-5,8.757621999925782e-8,0.0034325337535511193,-5.8672442465983527E-05,8.779300375802679e-8,0.0034329377969641297,-5.876149483775846e-5,8.79343338304245e-8,0.0034333670820067457,-5.8792422402358875e-5,8.7975316488367e-8,0.0034337996533433854,-5.875886549720411e-5,8.790547650809066e-8,0.0034342129023982814,-5.8663743295375374e-5,8.773032040338553e-8,0.0034345867528595554,-5.8519040728693963E-05,8.747098149349937e-8,0.00343490662495616,-5.834457618854895e-5,8.716204139286165e-8,0.003435165997133961,-5.816584043444344e-5,8.684766473704805e-8,0.003435368377604481,-5.8010940498476064e-5,8.657614158669101e-8,0.003435528469312809,-5.79066894188021e-5,8.639300030976978e-8,0.0034356721817477088,-5.787374966119817e-5,8.633265875065238e-8,0.0034358346431882215,-5.7920805816179714e-5,8.640865043476558e-8,0.00343605489737805,-5.8038637339463834e-5,8.660388209222903e-8,0.0034363663675272185,-5.8196543664505935e-5,8.686495377469283e-8,0.003436784132872785,-5.834498191690136e-5,8.710692888866458e-8,0.003437293776835478,-5.8427735873480615e-5,8.72341254787051e-8,0.0034378497110881335,-5.8402092841660325e-5,8.717442687949159e-8,0.0034383882973978448,-5.8257765502926945e-5,8.691145603639477e-8,0.003438851408713721,-5.802240303565348e-5,8.649384664598423e-8,0.0034392073380863355,-5.774932951993929e-5,8.601401185593557e-8,0.0034394577744100104,-5.749559608304214e-5,8.557022184800596e-8,0.003439630233895451,-5.7303386349150334e-5,8.523451882013677e-8,0.0034397639148655676,-5.71921018810065e-5,8.503923334835471e-8,0.003439897152082377,-5.716002300749245e-5,8.498019404726612e-8,0.0034400599773055985,-5.719061355114749e-5,8.502796230293353e-8,0.0034402713672934656,-5.725932344600479e-5,8.513976877355545e-8,0.0034405393098027363,-5.7338962376120295e-5,8.52687687250456e-8,0.0034408620305790096,-5.7403458295962594e-5,8.5370360365332e-8,0.0034412295639111826,-5.74305399376233e-5,8.540661686558558e-8,0.0034416255077720182,-5.7403819017073256e-5,8.534975049941572e-8,0.0034420290593737894,-5.7314494475115625e-5,8.518502074925517e-8,0.0034424175204084556,-5.7162649725107814e-5,8.491300299198063e-8,0.0034427693744096327,-5.695780291358059e-5,8.45505703435799e-8,0.003443067694390436,-5.671827027498391e-5,8.412977141244271e-8,0.0034433033585062117,-5.6469137408961e-5,8.369422260683416e-8,0.003443477522363603,-5.6238888006486065e-5,8.329312068593308e-8,0.0034436028265143223,-5.6054927768332085e-5,8.297335687745774e-8,0.0034437028776761053,-5.593849466785818e-5,8.277067663956046e-8,0.0034438096971042514,-5.589961405993521e-5,8.270110737924363e-8,0.0034439589152577502,-5.593284157050621e-5,8.275395289466784e-8,0.0034441825909026142,-5.601493075148707e-5,8.288821797121621e-8,0.0034445001635288017,-5.610621465702858e-5,8.303535737202917e-8,0.0034449095226591654,-5.615762951966539e-5,8.311147869532069e-8,0.0034453821233687756,-5.612393855092263e-5,8.303989847633601e-8,0.003445866927768903,-5.598013860657117e-5,8.277898571579688e-8,0.003446305117155568,-5.573359851034611e-5,8.234268399454156e-8,0.003446650688170405,-5.54237541297035e-5,8.179975395214818e-8,0.003446886420895123,-5.5107576665760024e-5,8.124862318937609e-8,0.0034470267259821934,-5.483846667724602e-5,8.078097385183255e-8,0.00344710766051307,-5.464993566767857e-5,8.04536936374894e-8,0.003447171789706657,-5.455038535028025e-5,8.028012646114274e-8,0.0034472558389312216,-5.452741901483898e-5,8.02378602589795e-8,0.003447384454009153,-5.455622510521429e-5,8.028347230580017e-8,0.003447569166450617,-5.460748845901849e-5,8.036626359875367e-8,0.003447810144196527,-5.465292154467429e-5,8.043768722291936e-8,0.0034480987268725206,-5.466849659176279e-5,8.045671557812648e-8,0.003448419783191651,-5.46362499989435e-5,8.039277888315682e-8,0.003448753772593059,-5.45454637568273e-5,8.022774113086465e-8,0.0034490787902391605,-5.439364106836301e-5,7.995762374625734e-8,0.003449372967644381,-5.41872734508112e-5,7.959400330433788e-8,0.0034496174799257423,-5.394199608711304e-5,7.916430464845655e-8,0.003449800033082265,-5.368150494101013e-5,7.870985989025718e-8,0.0034499182123150364,-5.343472982432336e-5,7.828086678372597e-8,0.003449981722370573,-5.323117506956941e-5,7.792815673433031e-8,0.0034500124919465153,-5.30949612652312e-5,7.769278778854012e-8,0.0034500419488425822,-5.303878495366926e-5,7.759565134357626e-8,0.003450105483013042,-5.305939695552917e-5,7.762989261880157e-8,0.0034502349108771345,-5.3136052000312036E-05,7.775860628781301e-8,0.00345045036327994,-5.3232896856317525e-5,7.791934553656435e-8,0.0034507534559009615,-5.330563477313901e-5,7.803586216602371e-8,0.0034511239123253042,-5.331189940292976e-5,7.80359816725961e-8,0.0034515217741313154,-5.3223411868618484e-5,7.787229296285301e-8,0.0034518963778732035,-5.303630985682997e-5,7.753954870439826e-8,0.003452200772443476,-5.277494601652743e-5,7.708083438603485e-8,0.0034524067233620208,-5.24857622131667e-5,7.657676351766069e-8,0.003452513539318852,-5.222238745671445e-5,7.611970105647155e-8,0.003452546358006263,-5.202834487641089e-5,7.578401494859984e-8,0.003452545316805372,-5.1925238857953614e-5,7.56059228122419e-8,0.0034525517079226162,-5.1910531969244896e-5,7.55799748568084e-8,0.0034525973425899702,-5.1963341595560646e-5,7.566935879164173e-8,0.003452699860306806,-5.2053492925631584e-5,7.582168477769657e-8,0.003452863075258511,-5.2149607426261665e-5,7.598291155508565e-8,0.0034530799060755258,-5.222439818684115e-5,7.61063070119408e-8,0.003453335818338361,-5.2257343532068194e-5,7.615685892232103e-8,0.003453611766785339,-5.223571891965294e-5,7.61129377116946e-8,0.0034538864899658996,-5.215494408708145e-5,7.596690383151867e-8,0.003454138506384482,-5.201882998128307e-5,7.572562427973521e-8,0.003454348337076918,-5.183978826068164e-5,7.541091271463072e-8,0.0034545013314538756,-5.1638552963418784e-5,7.505903324803353e-8,0.003454591043269122,-5.144265642680074e-5,7.47179322561575e-8,0.0034546224963198295,-5.128290588661151e-5,7.444094709790633e-8,0.003454614029832736,-5.118756231866206e-5,7.427657654620211e-8,0.0034545960964780477,-5.117499667449252e-5,7.425575471974446e-8,0.0034546059759224725,-5.124696696840789e-5,7.438038383349255e-8,0.003454678971542103,-5.13853618139435e-5,7.46180167622108e-8,0.003454838496800186,-5.155451806553497e-5,7.490622976898416e-8,0.003455088410098183,-5.170923490366474e-5,7.516676020545438e-8,0.0034554104312331923,-5.18063784397559e-5,7.53256558047392e-8,0.0034557677626890567,-5.181660232781692e-5,7.533338722547459e-8,0.003456114043853787,-5.173270086815992e-5,7.517894604581043e-8,0.0034564052677747885,-5.157212308820495e-5,7.48937718027089e-8,0.003456611436614271,-5.1372648185342906e-5,7.454392055414663e-8,0.0034567244663298784,-5.118206849108857e-5,7.421205085109125e-8,0.0034567595924578005,-5.104487112438851e-5,7.397444303572169e-8,0.0034567496932292933,-5.0990411029647274e-5,7.388079046187029e-8,0.0034567348219838017,-5.1026634462844345E-05,7.394368941315555e-8,0.0034567511208470503,-5.1140910162072285e-5,7.41404001886787e-8,0.003456822969488365,-5.130640701071599e-5,7.442407063670418e-8,0.0034569600809666373,-5.149059048477161e-5,7.473844540174441e-8,0.003457158836079232,-5.166263101478568e-5,7.503054191154755e-8,0.0034574058624226842,-5.179814342816616e-5,7.525864485773623e-8,0.0034576819982162126,-5.188131487414444e-5,7.53958236160267e-8,0.003457965624434055,-5.190529764163641e-5,7.543055726802653e-8,0.003458235153642075,-5.187182989119657e-5,7.536613158997809e-8,0.003458470988800748,-5.179074706531707e-5,7.52198852644471e-8,0.0034586575036994354,-5.1679536585510255e-5,7.502247538759579e-8,0.0034587855033521653,-5.156254212189298e-5,7.481641900418598e-8,0.0034588552057932243,-5.1469030724573484e-5,7.465256143383775e-8,0.0034588791061978532,-5.142920657003421e-5,7.458297859873786e-8,0.003458883218149259,-5.1467660711166246e-5,7.464955268013278e-8,0.0034589045776179444,-5.159510836468649e-5,7.48697763858947e-8,0.0034589835250980615,-5.180135000044591e-5,7.522485150187091e-8,0.0034591517840109193,-5.205370320062124e-5,7.56573232920082e-8,0.0034594206555359705,-5.2303828254811026e-5,7.608317761780516e-8,0.0034597750906966754,-5.250174966429808e-5,7.641623908985145e-8,0.0034601771049745287,-5.2611539439694236e-5,7.659526793472266e-8,0.003460577222136936,-5.262200185778321e-5,7.660223703442587e-8,0.003460928903507887,-5.254861496345348e-5,7.646534203758294e-8,0.003461200559315436,-5.2427345790902366e-5,7.624789704143432e-8,0.0034613819623500147,-5.230371513415596e-5,7.602909490634815e-8,0.00346148446467581,-5.2220931733726785e-5,7.58833715008536e-8,0.003461536103359664,-5.2210117968981436e-5,7.586364467457609e-8,0.003461573517811942,-5.2284544913011865e-5,7.599167543503633e-8,0.0034616329485504336,-5.243864613206289e-5,7.625673698865155e-8,0.003461742549106104,-5.265142211148723e-5,7.662177846795173e-8,0.003461917703165235,-5.2892782274308036e-5,7.703449448843473e-8,0.0034621599737674246,-5.313072477304534e-5,7.74396760194996e-8,0.0034624591084389793,-5.33374098966768e-5,7.778955053911857e-8,0.003462796779292467,-5.349304510582412e-5,7.805033191515012e-8,0.003463150686187144,-5.3587487694671127e-5,7.820488911072816e-8,0.0034634980867577683,-5.362014291759816e-5,7.825256020973388e-8,0.0034638184347490337,-5.35989854743125e-5,7.820751398896041e-8,0.0034640953366142095,-5.353936163065365e-5,7.809672470592285e-8,0.0034643182806015373,-5.3462782486652334e-5,7.795785220255605e-8,0.0034644845501561154,-5.339545627403919e-5,7.783656035226323e-8,0.0034646014413177184,-5.336592005983549e-5,7.778221516267927e-8,0.0034646882637985664,-5.3400881599815127e-5,7.78405393635882e-8,0.003464776653159077,-5.351867683920702e-5,7.804231285445772e-8,0.003464906957150965,-5.372111733504216e-5,7.838949782169935e-8,0.0034651189235659127,-5.398689725856593e-5,7.884418711991946e-8,0.0034654377510551313,-5.427171287388532e-5,7.932912268318844e-8,0.003465861181889111,-5.45189747063227e-5,7.974637922620187e-8,0.0034663557995089868,-5.4679006723517416e-5,8.001057810235294e-8,0.003466866832075317,-5.4727667638690595e-5,8.008101605182355e-8,0.003467337213583027,-5.467430917764118e-5,7.997525515932372e-8,0.0034677259185634294,-5.45558137956383e-5,7.975848386026634e-8,0.0034680175758430914,-5.4421850197762574e-5,7.951758779610465e-8,0.003468221945391668,-5.431943863471243e-5,7.93341221303494e-8,0.003468366749984431,-5.4282189894998705e-5,7.926564782173139e-8,0.003468488253575451,-5.432554626942201e-5,7.933775100923389e-8,0.003468622577673265,-5.4446940976185534e-5,7.954473091422483e-8,0.00346879910386759,-5.4629139136083834e-5,7.985575566520995e-8,0.003469036315266957,-5.484531500646757e-5,8.022385234336574e-8,0.0034693400970225562,-5.506482644748267e-5,8.05959068464886e-8,0.003469704347103154,-5.525874833196587e-5,8.09221138287859e-8,0.003470113426848338,-5.54043045866477e-5,8.116348069551332e-8,0.003470545719066106,-5.548767615842907e-5,8.129655797854296e-8,0.0034709775149081618,-5.550506450046016e-5,8.131522490515083e-8,0.0034713865350294564,-5.546223505877917e-5,8.122990831469518e-8,0.00347175466700389,-5.537307165347207e-5,8.10651077332558e-8,0.003472069935483391,-5.5257707024367603e-5,8.085614780070984e-8,0.0034723279767847086,-5.514048489525153e-5,8.064555763367976e-8,0.0034725332728849033,-5.504767565387728e-5,8.047894670947377e-8,0.0034727002510506733,-5.5004592720721175e-5,8.039983781883514e-8,0.003472853897452726,-5.5031486682279284e-5,8.044249502323219e-8,0.0034730286883273595,-5.513778809238864e-5,8.062209526950794e-8,0.003473263973229728,-5.531544130156531e-5,8.092351809161323e-8,0.0034735943076693245,-5.553413717659481e-5,8.129347436960563e-8,0.003474035665897499,-5.574326882078972e-5,8.16441259001113e-8,0.0034745731955609315,-5.5884742086398796e-5,8.18752580591423e-8,0.0034751596486798657,-5.5914583892773785e-5,8.19115493205368e-8,0.003475729749079442,-5.5822556153648676e-5,8.173640984494093e-8,0.0034762246796353497,-5.563705319293436e-5,8.140033666182622e-8,0.003476612701492186,-5.541203574155975e-5,8.099801039245487e-8,0.003476895422108325,-5.52051656998577e-5,8.063001150121857e-8,0.0034771002354880218,-5.50597528893753e-5,8.037124816213464e-8,0.003477266808137206,-5.499678333889154e-5,8.025718895626209e-8,0.003477434878777277,-5.501575513956466e-5,8.028567476587208e-8,0.0034776364077081026,-5.510010155564282e-5,8.042677847876208e-8,0.0034778919129647623,-5.522370891534653e-5,8.063443431098723e-8,0.003478209655577147,-5.53567664624354e-5,8.085668027157581e-8,0.003478586484780268,-5.547053781197861e-5,8.104383769654996e-8,0.003479009745324267,-5.5541137233202974e-5,8.115488223399064e-8,0.0034794599661624203,-5.55522999409954e-5,8.116209039532e-8,0.00347991406310937,-5.5497055559913984e-5,8.105385714697197e-8,0.00348034877409459,-5.5378226962704636e-5,8.083554656447708e-8,0.003480743967899695,-5.5207701396177e-5,8.052824678244802e-8,0.003481085399356866,-5.500462615502403e-5,8.016563989201027e-8,0.003481366669257658,-5.4792906661938594e-5,7.978960191727658e-8,0.0034815903954937507,-5.459831114198394e-5,7.944505128213398e-8,0.003481768645435652,-5.444530524158718e-5,7.917429462220676e-8,0.003481922641158277,-5.435363020679066e-5,7.901097650404148e-8,0.003482081557943241,-5.43344611388244e-5,7.897344901624152e-8,0.0034822796949849086,-5.438607219406785e-5,7.90574880741661e-8,0.0034825508886991334,-5.4489814677525574e-5,7.922969966297901e-8,0.003482919510198329,-5.460863179618924e-5,7.942530879637457e-8,0.00348338922468968,-5.4691530175031036e-5,7.955606784582527e-8,0.0034839341482262006,-5.468684887826709e-5,7.953314250976801e-8,0.003484500044929782,-5.456236411226566e-5,7.930171563250027e-8,0.003485020395764967,-5.432242661163013e-5,7.887051211495277e-8,0.003485441830665722,-5.4009666442778456e-5,7.831463037203127e-8,0.003485744308334187,-5.3687830051453043e-5,7.774555423085291e-8,0.003485944356059249,-5.341619454208322e-5,7.726643890430705e-8,0.0034860824605426953,-5.323068031905013e-5,7.69391413336341e-8,0.003486205192699337,-5.313887848336849e-5,7.677573716104043e-8,0.003486351616487765,-5.312585818689202e-5,7.674902644824243e-8,0.003486546989851855,-5.3163832246076e-5,7.680975614919294e-8,0.003486802071512451,-5.322081037736187e-5,7.690188262653895e-8,0.003487115234474545,-5.326655085161755e-5,7.697289095930539e-8,0.003487475361305784,-5.3276107450321254e-5,7.697977967690026e-8,0.00348786468748232,-5.323188756023941e-5,7.689243976502786e-8,0.003488261541112851,-5.3124867656400085e-5,7.669564695902987e-8,0.0034886431118577687,-5.2955187271283527e-5,7.639006967152842e-8,0.0034889883345022694,-5.273207584356439e-5,7.599217164183895e-8,0.00348928082718179,-5.247287143335613e-5,7.553253065060545e-8,0.0034895115406157772,-5.220092938007728e-5,7.505217138911657e-8,0.0034896806403166163,-5.194253721386278e-5,7.45970984578306e-8,0.003489798281891112,-5.17231700616895e-5,7.421163449310192e-8,0.003489884081885023,-5.156346255637453e-5,7.393127924950925e-8,0.0034899651917605482,-5.1475349070217194e-5,7.37759579390884e-8,0.0034900730046242873,-5.145880727187514e-5,7.374448490150087e-8,0.0034902384487222934,-5.149957504391051e-5,7.38108940008001e-8,0.003490485713360978,-5.1568581097192085e-5,7.392383226896056e-8,0.0034908247516596694,-5.162452953725788e-5,7.401135645851316e-8,0.0034912442178913756,-5.162129070334261e-5,7.399384833356589e-8,0.0034917082870866084,-5.152067046187914e-5,7.380600775763368e-8,0.003492161919526589,-5.1307906470345714e-5,7.342344472404727e-8,0.0034925468003312904,-5.100251708159784e-5,7.28812436475048e-8,0.0034928230231711763,-5.065567102917774e-5,7.22692085054129e-8,0.00349298480607223,-5.0332008284307815e-5,7.170010948102879e-8,0.003493060486880091,-5.008509810197167e-5,7.126687367301145e-8,0.0034930978108644877,-4.994040408769448e-5,7.10129659368693e-8,0.003493144812116986,-4.989292212429899e-5,7.092852991350264e-8,0.003493236329890927,-4.991616821749949e-5,7.09664233386691e-8,0.003493389382240401,-4.997451260323819e-5,7.106400377600212e-8,0.0034936049670886314,-5.003303046878982e-5,7.116036558566628e-8,0.0034938724850190725,-5.006315699024087e-5,7.120605641471014e-8,0.003494174181710002,-5.004500801825621e-5,7.116689888635155e-8,0.003494488647240114,-4.9967898958017656e-5,7.10247226686362e-8,0.003494793491455296,-4.983017838931351e-5,7.077701977191036e-8,0.0034950676495118685,-4.963883343406836e-5,7.043629688622425e-8,0.0034952936893218015,-4.940884123717768e-5,7.00290073852739e-8,0.0034954602703394025,-4.91619116469257e-5,6.959337044053813e-8,0.003495564525333123,-4.8924164351532744e-5,6.917524860206665e-8,0.0034956137545527114,-4.872255946766232e-5,6.882178267966077e-8,0.003495625715726868,-4.858035828766625e-5,6.857332667336269e-8,0.003495626962793271,-4.8512296531638016e-5,6.845495049254806e-8,0.003495649053141319,-4.852049680516395e-5,6.846936904534974e-8,0.00349572299679345,-4.859225484338337e-5,6.859329915473242e-8,0.0034958728136478237,-4.870052145709375e-5,6.877863372874697e-8,0.003496109274904872,-4.8807474643686194e-5,6.895900381066696e-8,0.0034964250870034323,-4.887130098211752e-5,6.906179269833887e-8,0.0034967931639454048,-4.885581409325789e-5,6.902485348345956e-8,0.0034971698712657363,-4.874139651093061e-5,6.881530246607359e-8,0.0034975044920154213,-4.853405294472491e-5,6.84449092255104e-8,0.0034977539089692195,-4.82679369446728e-5,6.797415829244196e-8,0.0034978977356623906,-4.799750824878962e-5,6.749837862946622e-8,0.003497946438249529,-4.778016802970108e-5,6.71174247409688e-8,0.003497937170337883,-4.765667743097292e-5,6.690162413586374e-8,0.0034979190953097782,-4.763908471093491e-5,6.687094352623798e-8,0.003497936251514583,-4.771117288133363e-5,6.699607854306233e-8,0.0034980160892215074,-4.783863709240464e-5,6.72164958349271e-8,0.0034981665960245093,-4.798196106874302e-5,6.746304065721289e-8,0.0034983797653029723,-4.810632101892896e-5,6.7675162011292e-8,0.003498637465113023,-4.818668505636025e-5,6.780961989824135e-8,0.003498916867361659,-4.820909523255125e-5,6.784251930616007e-8,0.0034991943722301896,-4.816994545602405e-5,6.77679407084832e-8,0.003499448182358842,-4.8074658565751284e-5,6.759564195017042e-8,0.003499660159392372,-4.793641707463699e-5,6.734892080114882e-8,0.003499817561197899,-4.777495464323169e-5,6.70625616249293e-8,0.0034999149556601225,-4.761498368904733e-5,6.678005875369204e-8,0.0034999561644388504,-4.7483672003196496e-5,6.654908362581237e-8,0.003499955598723389,-4.7406752130685654e-5,6.64145242188782e-8,0.003499937981419274,-4.7403373506660164e-5,6.64093764187308e-8,0.0034999354725625304,-4.748062569635709e-5,6.654518620862992e-8,0.0034999818663642855,-4.762947778629249e-5,6.680512211808298e-8,0.003500104737353191,-4.782411608126126e-5,6.714310459443665e-8,0.0035003176166506283,-4.802589279357225e-5,6.749101949715656e-8,0.0035006147541124916,-4.819155958831892e-5,6.777333062458293e-8,0.0035009704717046735,-4.8283900302600454e-5,6.79257035406021e-8,0.0035013438418472647,-4.828195062171539e-5,6.791269545624289e-8,0.0035016879794580935,-4.818789700989003e-5,6.77394776851162e-8,0.00350196195728518,-4.8028314713332036e-5,6.7453611515929e-8,0.0035021422800556846,-4.784851634702435e-5,6.713486096804716e-8,0.0035022301857497284,-4.770064526201016e-5,6.687425034339409e-8,0.0035022515726871335,-4.762872570098612e-5,6.674801281177754e-8,0.003502248809025409,-4.76559744371242e-5,6.6795665439382e-8,0.0035022673478896467,-4.777938593190681e-5,6.701087743219682e-8,0.003502342631637575,-4.7973344665574994e-5,6.734808187955503e-8,0.0035024922414820824,-4.819969702053791e-5,6.774024524213613e-8,0.003502715017307082,-4.841926028605082e-5,6.811897897486228e-8,0.0035029954034810603,-4.8600480484494276e-5,6.842952899629088e-8,0.003503309784163736,-4.872362633221379e-5,6.863790981889476e-8,0.0035036322351094896,-4.878127146575032e-5,6.873159448741184e-8,0.0035039386022962613,-4.877672372667128e-5,6.871671928860393e-8,0.003504208970165578,-4.87218399559206e-5,6.861430714964363e-8,0.003504429141433504,-4.863501729753385e-5,6.845682584882933e-8,0.00350459182981821,-4.853945290340068e-5,6.828516088744188e-8,0.0035046979735865453,-4.846124060565817e-5,6.814520400131455e-8,0.00350475808642424,-4.842667362547513e-5,6.808297903800876e-8,0.00350479302443529,-4.845822639406622e-5,6.813746753851686e-8,0.003504833027239744,-4.8569169986268695e-5,6.833115419174137e-8,0.003504913702238319,-4.8757838383985466e-5,6.866012446657687e-8,0.0035050683853181447,-4.900391199350466e-5,6.908782646579392e-8,0.0035053182256271995,-4.926964452673352e-5,6.954751938057267e-8,0.003505663509814919,-4.950767016413277e-5,6.995616209346973e-8,0.003506080502214955,-4.967398233611283e-5,7.023720489982495e-8,0.0035065262851390663,-4.974153435641874e-5,7.034430756266863e-8,0.003506950416802348,-4.970896615211756e-5,7.027638385694825e-8,0.003507309058355678,-4.960110682063593e-5,7.0078148342398e-8,0.003507576569966767,-4.9461571981689524e-5,6.982680430100155e-8,0.003507751260505524,-4.9340525835212706e-5,6.961036660223815e-8,0.0035078543380118467,-4.928155435713404e-5,6.950463542881697e-8,0.003507923017411245,-4.931120710474176e-5,6.955507505634865e-8,0.003508000088817847,-4.943373386134086e-5,6.976794205386932e-8,0.0035081230318595195,-4.9631997266688886e-5,7.011223942234489e-8,0.003508315707408989,-4.987372010955851e-5,7.053089174394624e-8,0.003508584634184765,-5.012067906449034e-5,7.095689951327328e-8,0.003508920154172877,-5.033779131119303e-5,7.13291488630146e-8,0.0035093011174319503,-5.0499608977751295e-5,7.16036029544808e-8,0.0035097008909079027,-5.059322819724562e-5,7.175822123658268e-8,0.003510092795370233,-5.0618099620991336e-5,7.179252228933486e-8,0.0035104540074803628,-5.058396686418179e-5,7.172395576915468e-8,0.0035107678630634256,-5.050815563358695e-5,7.15831936559844e-8,0.0035110250474179707,-5.041300190160958e-5,7.140965978633763e-8,0.003511224303772449,-5.0323602655051194e-5,7.124755864747469e-8,0.003511373081760116,-5.026556563032649e-5,7.114182180173342e-8,0.0035114881227789486,-5.026219499321855e-5,7.113303314780363e-8,0.003511595434404246,-5.0330578468163386e-5,7.125049337013055e-8,0.003511728512620591,-5.047647794780582e-5,7.15033405278639e-8,0.0035119233836461974,-5.0689046876978714e-5,7.187153222950117e-8,0.003512209769178392,-5.093800093324406e-5,7.230120436607415e-8,0.003512599955153083,-5.1176799888461815e-5,7.271049692322936e-8,0.003513080034794742,-5.135392592457402e-5,7.300940477436388e-8,0.003513609502076132,-5.14298349934786e-5,7.312941724983363e-8,0.0035141320281950124,-5.139216413429823e-5,7.305001548325024e-8,0.0035145936629104664,-5.1261041454466944e-5,7.28077595651944e-8,0.003514959887450534,-5.108168091747994e-5,7.248300624823855e-8,0.0035152241266274524,-5.090867675710344e-5,7.217204520177112e-8,0.0035154059396990682,-5.078968882418096e-5,7.195828527441259e-8,0.0035155420813633245,-5.075426745699315e-5,7.189270617613542e-8,0.0035156751083582306,-5.0809654038145116e-5,7.198679130075311e-8,0.003515843117254807,-5.094257374417173e-5,7.221607476825528e-8,0.0035160725094786714,-5.112494538587068e-5,7.253048594280297e-8,0.0035163744088703465,-5.132142690619098e-5,7.286773029032713e-8,0.0035167446049327736,-5.1497064920155425e-5,7.316666417595633e-8,0.003517166385541075,-5.1623642515698906e-5,7.337826896105822e-8,0.0035176151934762446,-5.168374224689177e-5,7.347259275945112e-8,0.0035180638474490854,-5.167220679053694e-5,7.344117159692746e-8,0.003518487230567752,-5.159533656149261e-5,7.329555446259182e-8,0.0035188657466365884,-5.146856119474064e-5,7.306321274190783e-8,0.0035191873567905307,-5.13134535075297e-5,7.278232032475649e-8,0.0035194484899109596,-5.1154771029381724e-5,7.249655785721567e-8,0.0035196543025420254,-5.101775638284942e-5,7.225031546170417e-8,0.0035198186084428556,-5.0925530397301455e-5,7.208400788541844e-8,0.0035199635105888586,-5.089622436322815e-5,7.202894163244655e-8,0.003520118343208592,-5.093945103045378e-5,7.210112224469392e-8,0.0035203169511922577,-5.105206016209678e-5,7.229397007328736e-8,0.003520592065648051,-5.1214188069510806e-5,7.2571689142489e-8,0.00352096625240208,-5.138810927673326e-5,7.286756429012272e-8,0.0035214411001403445,-5.1523353653888815e-5,7.309310451119305e-8,0.0035219896591436894,-5.15702050538723e-5,7.316168179423694e-8,0.0035225589618442157,-5.149859927706176e-5,7.302152157725176e-8,0.003523085668432638,-5.1313067895405906e-5,7.268175566529078e-8,0.003523518917940908,-5.105359802726036e-5,7.221375246224139e-8,0.003523838095962248,-5.0780520742168284e-5,7.17243210762634e-8,0.0035240564761216146,-5.0552185506667285e-5,7.13161973079306e-8,0.003524211505779421,-5.040730619616483e-5,7.105688273569124e-8,0.003524349502340482,-5.035813602950126e-5,7.096680808680643e-8,0.0035245122820342207,-5.039321453053906e-5,7.102455458373297e-8,0.003524729076631242,-5.0485092313253465e-5,7.1180850127246e-8,0.003525013583176288,-5.059899047337806e-5,7.137404304621766e-8,0.003525364590777378,-5.070022815478351e-5,7.154318300099117e-8,0.0035257686958330417,-5.075977742115368e-5,7.163764186847562e-8,0.003526204144558562,-5.075793251795897e-5,7.16233638631601e-8,0.003526645154897335,-5.06861406598159e-5,7.148591957241648e-8,0.003527066167471657,-5.0547118838004726e-5,7.123062042100954e-8,0.0035274455836368955,-5.03535175473795e-5,7.088014482938875e-8,0.003527768623758874,-5.012545639882056e-5,7.047021401502236e-8,0.0035280290362206864,-4.988738877980477e-5,7.004408058198917e-8,0.0035282296839363246,-4.966483945398808e-5,6.964675729891865e-8,0.003528382291270085,-4.9481325891113706e-5,6.931952735975422e-8,0.003528506567199636,-4.935546278755109e-5,6.909476075587484e-8,0.003528628724271695,-4.929815291741338e-5,6.899092748257108e-8,0.0035287791842859104,-4.9309749713025403e-5,6.900767973450815e-8,0.0035289888641371506,-4.9377284113068966e-5,6.912119895490268e-8,0.003529283256307753,-4.947268367777429e-5,6.92813827041382e-8,0.0035296742313782816,-4.955407009659888e-5,6.941439827038625e-8,0.003530151349516904,-4.957278427309963e-5,6.943511266213218e-8,0.0035306772094212354,-4.948747198735312e-5,6.92717079077621e-8,0.003531192964839601,-4.928195652942658e-5,6.889685346018671e-8,0.0035316365215482056,-4.89774365236009e-5,6.834895029601523e-8,0.003531966575744259,-4.862874958980648e-5,6.772540073203424e-8,0.0035321786442322665,-4.830377164926679e-5,6.714615431489767e-8,0.003532303511122255,-4.805750770984733e-5,6.670788672264682e-8,0.0035323910644271955,-4.7915439884981005e-5,6.645464473265158e-8,0.003532490905278016,-4.787198094158151e-5,6.637538089556046e-8,0.0035326391070453276,-4.7899603242805185e-5,6.6420465804465665E-08,0.003532853457600977,-4.79609329089279e-5,6.652335567882734e-8,0.003533134764875135,-4.801870810507902e-5,6.661826425948239e-8,0.0035334709225311187,-4.80420607780708e-5,6.6651124930788e-8,0.0035338414892082007,-4.800969554135657e-5,6.658497123133597e-8,0.003534221883309781,-4.791109649069916e-5,6.640185991590025e-8,0.0035345870911481937,-4.774650430734176e-5,6.610271983901248e-8,0.003534914922415681,-4.7525956167852065e-5,6.570564041722356e-8,0.003535188784668761,-4.726751897573049e-5,6.524278234784632e-8,0.003535399869757837,-4.699475689773158e-5,6.475593288560843e-8,0.003535548488616758,-4.673352273796198e-5,6.429082959559262e-8,0.0035356443027719678,-4.6508419457597334e-5,6.389085743601263e-8,0.003535705452163371,-4.633936348530399e-5,6.359090277517784e-8,0.0035357567090917945,-4.623851257366044e-5,6.341187165168234e-8,0.003535826730715225,-4.6207747236638295e-5,6.335626221346214e-8,0.0035359444328626815,-4.62369186224868e-5,6.340521229944e-8,0.0035361343987252193,-4.6303140463713727e-5,6.351750974087675e-8,0.0035364112077063,-4.637182901460024e-5,6.363172583245652e-8,0.0035367731674912405,-4.640084478194753e-5,6.367372155706706e-8,0.003537197303637594,-4.634911429135081e-5,6.357183762261232e-8,0.0035376391122535576,-4.618966433176537e-5,6.327964211385549e-8,0.003538041119459337,-4.592349949638268e-5,6.280007246840904e-8,0.0035383510638224264,-4.558644822183458e-5,6.219724757422401e-8,0.0035385429814836127,-4.524104977366377e-5,6.158200500178063e-8,0.0035386287865788782,-4.495389988038994e-5,6.107183348045023e-8,0.003538652157842681,-4.477026159769317e-5,6.074602879654554e-8,0.0035386688439036844,-4.47004078804151e-5,6.062170724859673e-8,0.003538726003163398,-4.4722809906257866e-5,6.065974926915645e-8,0.0035388505435425223,-4.4797903515981296e-5,6.078947944701308e-8,0.003539047874416657,-4.488281287540454e-5,6.093489620785433e-8,0.0035393068814284787,-4.4941391084842396e-5,6.103238884542969e-8,0.003539606554146499,-4.494882794965666e-5,6.103867464873075e-8,0.003539921676724328,-4.4892499760318906e-5,6.093205597538492e-8,0.003540226919719803,-4.477102781459113e-5,6.07105950251088e-8,0.0035404997394379314,-4.4592754938286915e-5,6.03893845810904e-8,0.0035407226338242614,-4.437398906963968e-5,5.999749164758063e-8,0.003540885022134315,-4.413694086471505e-5,5.957436958624628e-8,0.0035409847601478635,-4.3907158055120185e-5,5.91653320895687e-8,0.003541029039603609,-4.371029443432704e-5,5.881578782502931e-8,0.003541034222876167,-4.3568356911767184e-5,5.856451374224705e-8,0.0035410242820919035,-4.34959360356527e-5,5.843690932693798e-8,0.0035410278165807162,-4.349704460319828e-5,5.8439391136652944e-8,0.003541073866467474,-4.35631774348635e-5,5.8556051173999174e-8,0.003541186954993939,-4.367314619920436e-5,5.874856491748497e-8,0.0035413819586960823,-4.379504612211161e-5,5.895993621631804e-8,0.003541659481115643,-4.389056974908652e-5,5.9122364071120686e-8,0.0035420026717852874,-4.392188556736655e-5,5.9169501196338025e-8,0.0035423770266627625,-4.386091460591744e-5,5.9052739202674654e-8,0.003542735137307152,-4.369954534362978e-5,5.8758966934382756e-8,0.003543027709928473,-4.345726115647605e-5,5.8323693696870554e-8,0.003543219432923343,-4.318096116450492e-5,5.783045574779396e-8,0.0035433037039722254,-4.293306375151269e-5,5.7389662664115485e-8,0.003543307510625984,-4.2770211481893025e-5,5.710096925546551e-8,0.003543281657416864,-4.2722564889928e-5,5.7016803661170176e-8,0.0035432808969128654,-4.2784998811324036e-5,5.7127048886294805e-8,0.003543345083182791,-4.29237431526913e-5,5.7371094348610354e-8,0.0035434901225729534,-4.309218173774192e-5,5.766603094543882e-8,0.0035437096200434323,-4.324625449648452e-5,5.793397699501254e-8,0.003543982437111229,-4.335377416740421e-5,5.811844457672117e-8,0.003544280963361055,-4.339731616568985e-5,5.81892230593214e-8,0.003544577345674607,-4.337307492070495e-5,5.814014309175838e-8,0.0035448472547188253,-4.328818788598209e-5,5.798423922921832e-8,0.003545071945356522,-4.315800457900615e-5,5.774893393946444e-8,0.0035452395202854154,-4.300371531604833e-5,5.7471914844255585e-8,0.0035453459408502194,-4.285012265748278e-5,5.719723861116069e-8,0.0035453958923160433,-4.2723120313231096e-5,5.697084279090594e-8,0.0035454032149012556,-4.264651128545993e-5,5.683482254338785e-8,0.0035453903011499546,-4.2638151061864956e-5,5.682050114724788e-8,0.003545385835098054,-4.270593783651835e-5,5.6941284815840156e-8,0.0035454206037119564,-4.2844639289619016e-5,5.718710304786205e-8,0.003545521737679013,-4.3034763683612925e-5,5.7522579910149e-8,0.0035457064554863466,-4.3244478586494526e-5,5.7890672855239426e-8,0.0035459768841103315,-4.343484771283477e-5,5.822218243869248e-8,0.0035463175130871715,-4.35676865911608e-5,5.8449803092231185e-8,0.003546696374372438,-4.361459001005239e-5,5.852408386886376e-8,0.003547070408275864,-4.3565227278255075e-5,5.842791123349795e-8,0.0035473947092906958,-4.343266116837182e-5,5.8185596798430805e-8,0.003547634245769986,-4.3253317404532224e-5,5.786248016398101e-8,0.003547775128552845,-4.307980993012999e-5,5.755198880500784e-8,0.0035478310759871168,-4.296686019185961e-5,5.7350653828112885e-8,0.003547840931561206,-4.295416001320256e-5,5.732790326738767e-8,0.003547856465191098,-4.305323561587963e-5,5.7503072995357236e-8,0.0035479251065484753,-4.3244764513410865e-5,5.7840967381065036e-8,0.0035480755467052556,-4.3487437490787506e-5,5.82678059755974e-8,0.003548312159234838,-4.3733132149183526e-5,5.869821561074207e-8,0.003548618609759482,-4.394085957403888e-5,5.9059893258797215e-8,0.0035489665155445534,-4.4084657379925696e-5,5.930742385274079e-8,0.0035493243155301293,-4.4155064485646884e-5,5.94246850590516e-8,0.0035496635912923074,-4.415657349882108e-5,5.942017343141657e-8,0.003549962454933137,-4.4103723515838815e-5,5.932002348157367e-8,0.0035502068853032385,-4.401745537774121e-5,5.91615814739689e-8,0.0035503910919313167,-4.392223541541534e-5,5.898836758135166e-8,0.0035505176599334156,-4.3843716170544275e-5,5.884594653272736e-8,0.0035505977261718136,-4.3806355923926305e-5,5.877765373835154e-8,0.0035506509029348764,-4.38304481117814e-5,5.881923373523053e-8,0.0035507042417583052,-4.392838644885185e-5,5.8992150582505356e-8,0.003550789375607358,-4.4100629561268414e-5,5.9296460179193444e-8,0.0035509372747178996,-4.4332623510118206e-5,5.970549942120029e-8,0.0035511709877155606,-4.459455929913146e-5,6.016568287046157e-8,0.0035514981633926815,-4.4845618151110135e-5,6.060425933750863e-8,0.0035519062473257645,-4.504285818124529e-5,6.094521953949166e-8,0.003552363010141798,-4.515265199572119e-5,6.112959670344877e-8,0.0035528232538145662,-4.516091931665212e-5,6.113348597576136e-8,0.0035532400588138987,-4.5078419810363994e-5,6.097717700290937e-8,0.0035535771481694945,-4.4939099071296303e-5,6.07218955472018e-8,0.0035538186514130496,-4.479186991256323e-5,6.045492489427308e-8,0.0035539735035672354,-4.4688098423139305e-5,6.02672442098929e-8,0.0035540731748337205,-4.466810631879039e-5,6.022963420680442e-8,0.0035541630731403067,-4.475043551216551e-5,6.037388305148787e-8,0.003554289865126375,-4.4927280773815736e-5,6.068503341769779e-8,0.0035544886846951913,-4.516779476639947e-5,6.110755581298996e-8,0.0035547745839082123,-4.542805241964009e-5,6.156319330980759e-8,0.0035551408759050616,-4.5663759910920776e-5,6.197350799964669e-8,0.003555563963135248,-4.5841008864221135e-5,6.227883337795943e-8,0.0035560116876657694,-4.5941979139417047e-5,6.24482093400329e-8,0.0035564516280192447,-4.596527201117455e-5,6.24798008660841e-8,0.003556857010155012,-4.592266312849646e-5,6.239502440655055e-8,0.003557209714814007,-4.5834565631833704e-5,6.223046308066282e-8,0.003557501080364987,-4.572581403912075e-5,6.203040815733011e-8,0.0035577315537230697,-4.562240269450946e-5,6.184110140786349e-8,0.003557910036471095,-4.554903608560832e-5,6.170637764909142e-8,0.0035580533024840793,-4.552692161730423e-5,6.166368747736406e-8,0.0035581853049642667,-4.557119728743023e-5,6.173946177102266e-8,0.0035583356940717664,-4.568768485662425e-5,6.194333838364082e-8,0.0035585365708927026,-4.586927857225371e-5,6.226185510588425e-8,0.0035588166627198116,-4.609326999183041e-5,6.265390851272246e-8,0.003559193137323904,-4.632193829336071e-5,6.30520372167614e-8,0.003559663281878733,-4.650876999059089e-5,6.337362542760012e-8,0.003560200245713937,-4.661063021140253e-5,6.354254648899662e-8,0.0035607569317794813,-4.6602396654738655e-5,6.351506594055439e-8,0.003561278648384015,-4.6487494514614917e-5,6.32983887923139e-8,0.0035617199935504846,-4.6298558243764545e-5,6.29516014692535e-8,0.003562058627582537,-4.608741314362649e-5,6.256758166751812e-8,0.0035623004672044175,-4.5909078533960046e-5,6.224430829280521e-8,0.003562475581175662,-4.5806486601264316e-5,6.205760310203278e-8,0.0035626279001984354,-4.580067735294027e-5,6.204384806523509e-8,0.003562802954124633,-4.5888015756848204e-5,6.219537779330008e-8,0.003563037055132452,-4.6043654273636875e-5,6.246701201447148e-8,0.003563350070700666,-4.622932203076322e-5,6.27901620525839e-8,0.0035637427913076075,-4.6403085941301916e-5,6.309025042503193e-8,0.003564198880158738,-4.6528682381631946e-5,6.330320173165173e-8,0.0035646903766327347,-4.658232632749611e-5,6.338736538669235e-8,0.0035651848849890845,-4.6555732749513495e-5,6.332870370697999e-8,0.0035656523705938485,-4.645535269046844e-5,6.313929883122431e-8,0.0035660700713561725,-4.6298937321714985e-5,6.285117367268997e-8,0.003566425004528302,-4.611096934697695e-5,6.250815533966789e-8,0.0035667143995241142,-4.591827694533483e-5,6.215809174271331e-8,0.0035669448573334944,-4.574655007561588e-5,6.184666832943819e-8,0.0035671310343054594,-4.561778706202556e-5,6.161284724828767e-8,0.0035672942787601126,-4.554824175451044e-5,6.148516952915002e-8,0.0035674611803288114,-4.5546361387194964e-5,6.147805454901015e-8,0.003567661543033928,-4.5610385548273515e-5,6.158757512312564e-8,0.003567924912442449,-4.5725767445714075e-5,6.178702994408387e-8,0.0035682748142848095,-4.5863544983274e-5,6.202428486357496e-8,0.0035687207877180566,-4.598192357438832e-5,6.222480065079293e-8,0.0035692503506583244,-4.603366023380281e-5,6.230484445613422e-8,0.0035698255742100237,-4.597995195287227e-5,6.219611092854864e-8,0.0035703895352063105,-4.580682740172019e-5,6.187471998839677e-8,0.003570883632004423,-4.553525834522834e-5,6.137904502638934e-8,0.003571268864222055,-4.521699225352601e-5,6.080211684283172e-8,0.0035715396695708015,-4.4916408899932836e-5,6.025908338968015e-8,0.003571723198393817,-4.468799023289393e-5,5.984686372144387e-8,0.003571866379697392,-4.456067955242553e-5,5.961625196141818e-8,0.0035720191409290983,-4.453406964456066e-5,5.956536150564443e-8,0.0035722211083410766,-4.458410992868764e-5,5.965019352482582e-8,0.003572494625911943,-4.4673173061435514e-5,5.980293252365561e-8,0.0035728434568544545,-4.476028636567257e-5,5.995034390494367e-8,0.0035732552997467812,-4.480936493091201e-5,6.002839604720158e-8,0.003573706429317807,-4.479480285769821e-5,5.99920413721776e-8,0.0035741673042217212,-4.4704415364411226e-5,5.982025244393188e-8,0.0035746082437256763,-4.45398457623661e-5,5.951659167339322e-8,0.003575004335958261,-4.43147481520429e-5,5.9105889956792483e-8,0.003575338940318722,-4.405137481478573e-5,5.862814161090186e-8,0.0035756054724064797,-4.3776367002100296e-5,5.81310100746709e-8,0.0035758075061845546,-4.3516565870462726e-5,5.766237414128631e-8,0.0035759576042431298,-4.32955011747464e-5,5.726406668644314e-8,0.003576075473322457,-4.313078064462699e-5,5.696719548910158e-8,0.0035761858511276887,-4.3032185858342236e-5,5.678871564724287e-8,0.0035763162079560256,-4.300017921430965e-5,5.672876610846801e-8,0.0035764940524594456,-4.3024605140873026e-5,5.6768438605918676e-8,0.0035767432881861085,-4.30836704446525e-5,5.686814868430869e-8,0.0035770790275487753,-4.314407216803266e-5,5.6968106744896594e-8,0.0035775010573515023,-4.3164050813275044e-5,5.699394484154996e-8,0.003577987803146952,-4.310136895375068e-5,5.6870952361826546e-8,0.0035784948165471183,-4.292678335936257e-5,5.65479221696561e-8,0.003578962840272767,-4.2639405852658924e-5,5.602429479005061e-8,0.003579336851006414,-4.227498438897039e-5,5.536473452635238e-8,0.003579588685688661,-4.18979968512765e-5,5.468488805835137e-8,0.0035797296080622783,-4.1578011198993515e-5,5.4109049105691114e-8,0.0035798042114301037,-4.1363105981440804e-5,5.372259413331688e-8,0.0035798702564199783,-4.126542984896543e-5,5.354626012529212e-8,0.0035799774382410184,-4.126391236459329e-5,5.354128307652321e-8,0.003580154993927935,-4.1317791469285e-5,5.363395239974795e-8,0.003580409608935486,-4.1381581597515776e-5,5.374262013811699e-8,0.003580729783643385,-4.1415934670145685e-5,5.3797139133405634e-8,0.003581092408746188,-4.139336320909661e-5,5.3748926352074026e-8,0.003581469034566333,-4.130007224972205e-5,5.357400193982709e-8,0.0035818310034735766,-4.1135487314135264e-5,5.3271956810880735e-8,0.0035821534692491988,-4.0910476824976e-5,5.286268340386592e-8,0.003582418418358619,-4.06446935945381e-5,5.238161243589318e-8,0.0035826166797022483,-4.0363280171443215e-5,5.187384845082181e-8,0.00358274884529989,-4.009317462540421e-5,5.1387588037206476e-8,0.003582824995614943,-3.985933882274082e-5,5.096737917280055e-8,0.0035828632611508504,-3.9681384105172434e-5,5.064806914993073e-8,0.0035828875139954875,-3.957098298811167e-5,5.045014818249678e-8,0.003582924529544475,-3.953016479695639e-5,5.0376688098463605e-8,0.00358300081862799,-3.955047708564117e-5,5.0411877426842314e-8,0.0035831392261010796,-3.961300640930363e-5,5.052117648958689e-8,0.003583355214352302,-3.968931328155379e-5,5.065319072165797e-8,0.0035836526718863154,-3.974377438611344e-5,5.074407946967609e-8,0.003584019676710392,-3.973841845099247e-5,5.072633320424865e-8,0.0035844258489106545,-3.9641235948389545e-5,5.0543575221023724e-8,0.003584824176308066,-3.943762986883524e-5,5.0170788891649215e-8,0.0035851605988330357,-3.914173842671066e-5,4.963424297277142e-8,0.0035853918960880448,-3.880043670747472e-5,4.9018405921792256e-8,0.003585505322328108,-3.848249328671764e-5,4.844644654517097e-8,0.003585527515563994,-3.8253569503164206e-5,4.803549689485371e-8,0.0035855144146158527,-3.8149888897543195e-5,4.784960245800021e-8,0.0035855273906091824,-3.8166487904675314e-5,4.787887836846632e-8,0.0035856104495281117,-3.8265157169492204e-5,4.805402080142565e-8,0.0035857798816200707,-3.8393560363288984e-5,4.828082047147677e-8,0.0035860268763078557,-3.8503227747035004e-5,4.847250586230702e-8,0.003586326680961035,-3.855986372475001e-5,4.8568113786697065e-8,0.003586648121636525,-3.8546152355993225e-5,4.853728942981486e-8,0.0035869605978639182,-3.846010828728895e-5,4.837710529272839e-8,0.003587238303345829,-3.8311783073421156e-5,4.810602981932446e-8,0.0035874625495865785,-3.811982896336047e-5,4.775775329407981e-8,0.00358762304655042,-3.790829412712801e-5,4.7375493462969575e-8,0.003587718543212155,-3.7703539314087314e-5,4.700651815697953e-8,0.0035877568854504843,-3.753109690746856e-5,4.669652828927809e-8,0.0035877543189045003,-3.741240911193318e-5,4.648378792509094e-8,0.0035877337821993926,-3.736170012036886e-5,4.639348279578213e-8,0.003587722146397466,-3.738348798138e-5,4.643324183247487e-8,0.003587746637258956,-3.747117499085622e-5,4.659063494568057e-8,0.0035878308010265218,-3.760702188597041e-5,4.683321176191194e-8,0.0035879904688035855,-3.776372946249842e-5,4.7111485215557924e-8,0.0035882302134709367,-3.790765307608103e-5,4.736488113389693e-8,0.0035885407027646038,-3.800358818517712e-5,4.753047496748133e-8,0.0035888975265631912,-3.802122612155703e-5,4.755460390198331e-8,0.003589262683625903,-3.7943134492679234e-5,4.740703403510289e-8,0.003589590313060849,-3.777295305645327e-5,4.709535929441549e-8,0.0035898376636516174,-3.754070148435225e-5,4.6674180657203245e-8,0.003589979939820703,-3.730052104784748e-5,4.6240824276023414e-8,0.003590023371945228,-3.711708048632642e-5,4.5910925049693536e-8,0.0035900077501635065,-3.7042871910765236e-5,4.577784781514526e-8,0.0035899933020088546,-3.709707415007798e-5,4.587502096050476e-8,0.003590037208575344,-3.725873614994456e-5,4.6163979998570615e-8,0.0035901730111987757,-3.747812082032692e-5,4.655494611376622e-8,0.0035904033060219416,-3.769784537258867e-5,4.6944876133643913e-8,0.003590705852666982,-3.787137405914086e-5,4.725061888805473e-8,0.0035910458330059257,-3.7972004750569304e-5,4.7424881917477886e-8,0.0035913870901548824,-3.799305368319623e-5,4.7456342834723396e-8,0.003591699210907479,-3.794340612840332e-5,4.736148608065085e-8,0.0035919606768198722,-3.7842095199116786e-5,4.7174801397497153e-8,0.0035921596171359957,-3.7713708795726786e-5,4.6940568127754947e-8,0.003592293558379161,-3.758490512066759e-5,4.6706667488679346e-8,0.0035923688823323,-3.7481625279828046e-5,4.651961895285797e-8,0.0035924001126666325,-3.742650014676788e-5,4.641991343171655e-8,0.003592408782381076,-3.743612894819133e-5,4.643708427178588e-8,0.0035924214411165024,-3.751830128528744e-5,4.6584688608919025e-8,0.0035924664696293106,-3.7669705308534085e-5,4.685621045027915e-8,0.003592569774155505,-3.7874901547291835e-5,4.7223301285490726e-8,0.003592749902450613,-3.810728859606727e-5,4.763765035237718e-8,0.0035930135281971444,-3.833251364146036e-5,4.8037268016193544e-8,0.003593352477999401,-3.85142094254474e-5,4.835692293551611e-8,0.003593743318325711,-3.862124028617287e-5,4.8541211620976406e-8,0.0035941500803349773,-3.8635219635304036e-5,4.855799005285224e-8,0.0035945303054739485,-3.8556856029829644e-5,4.8409563859566875e-8,0.0035948441441678958,-3.84093266238022e-5,4.8138450958546775e-8,0.0035950652932258955,-3.823653707192244e-5,4.7823971958565097E-08,0.003595191000352243,-3.809453371200407e-5,4.7566669363102354e-8,0.003595246796889517,-3.803631027123147e-5,4.7461060314247433E-08,0.0035952816700368603,-3.809404780623166e-5,4.756396298769029e-8,0.0035953529476908017,-3.826654280703843e-5,4.7872228760978966e-8,0.0035955064360887307,-3.851914359448242e-5,4.832290540180464e-8,0.0035957614102684605,-3.8797097685212365e-5,4.8817364790469434e-8,0.0035961074408753227,-3.904519065318432e-5,4.925659081088645e-8,0.0035965125426542463,-3.922380619036841e-5,4.9569925989950274e-8,0.0035969362675940465,-3.9315732962972006e-5,4.972712682605005e-8,0.003597341109482439,-3.932441886961113e-5,4.9735041797245097e-8,0.0035976991308152764,-3.9267828750470704e-5,4.962644042986901e-8,0.0035979941492756103,-3.917176770050048e-5,4.944797265987095e-8,0.0035982212646163817,-3.906461231436291e-5,4.925073309806581e-8,0.0035983853864858173,-3.8973731332623625e-5,4.9083882869826816e-8,0.003598499705108412,-3.8923037020490345e-5,4.899027237780294e-8,0.003598584313547959,-3.893093107139329e-5,4.900272753215885e-8,0.003598664665047769,-3.900814200916675e-5,4.914012707459969e-8,0.003598769295912446,-3.91554181102269e-5,4.940325446403414e-8,0.003598926296552057,-3.936159589408526e-5,4.9771395938974046e-8,0.0035991584178781378,-3.9603052569638225e-5,5.020149262688757e-8,0.0035994774570306106,-3.9845742495034574e-5,5.063196470603437e-8,0.003599879456446016,-4.0050595060088164e-5,5.099254875986903e-8,0.0036003427551529487,-4.018188155414745e-5,5.121939647495595e-8,0.0036008305267239238,-4.021666105614067e-5,5.127201267350899e-8,0.003601298082359539,-4.015241628723848e-5,5.114683795044416e-8,0.0036017034785005065,-4.001010080325409e-5,5.0882498429844205e-8,0.0036020186446318633,-3.983102151691306e-5,5.055393791953197e-8,0.00360223784043595,-3.966773922720605e-5,5.025583994965174e-8,0.0036023807275160397,-3.957088011118183e-5,5.0078834765566855e-8,0.0036024884440489483,-3.957514576006304e-5,5.008445593779248e-8,0.003602612836630004,-3.9688759093846825e-5,5.028643421396089e-8,0.003602801507346342,-3.9890448396384285e-5,5.064559582445518e-8,0.0036030837132397233,-4.013591224250133e-5,5.1081729897139555e-8,0.0036034625787910108,-4.037175117016467e-5,5.149873123423126e-8,0.0036039164745840613,-4.0551277524241955e-5,5.181297742668326e-8,0.0036044080529050305,-4.0646004294966926e-5,5.197384946590186e-8,0.00360489619893693,-4.064945869958866e-5,5.197041780922286e-8,0.0036053460251226866,-4.0574082061552914e-5,5.182570742191499e-8,0.0036057344318386826,-4.044453999591332e-5,5.158455566701788e-8,0.0036060514579108944,-4.029075668722807e-5,5.130104481965624e-8,0.003606299011004411,-4.01424970484346e-5,5.1028778692332877e-8,0.0036064885833287518,-4.0025849226308426e-5,5.081459498933569e-8,0.003606638973317254,-3.9961099891688534e-5,5.069476213733481e-8,0.003606774332411993,-3.9961203232245695e-5,5.069221405358963e-8,0.0036069222452277806,-4.003023028212907e-5,5.081374865009258e-8,0.0036071112182922568,-4.016168303508934e-5,5.1047028727656355e-8,0.003607366963232316,-4.033714988858951e-5,5.135826999643147e-8,0.0036077072303672525,-4.0526398781894345e-5,5.169257162187404e-8,0.0036081358410376746,-4.069044856608033e-5,5.19795998409735e-8,0.00360863791472181,-4.0788768684664725e-5,5.214662964419998e-8,0.0036091792602710175,-4.079000858969095e-5,5.2137837160242114e-8,0.003609712280943959,-4.068309768113012e-5,5.1934170132578293e-8,0.0036101880918484254,-4.04838562463079e-5,5.1565076095717744e-8,0.0036105710604826644,-4.0233135214053623e-5,5.11049366675387e-8,0.0036108500263461432,-3.998610781681087e-5,5.065355467128838e-8,0.003611041677968052,-3.9796540409886596e-5,5.0307660035659015e-8,0.0036111851665100313,-3.970186618515915e-5,5.0134017422303575e-8,0.0036113304864999287,-3.971382372907988e-5,5.0152753919674675e-8,0.0036115247250119607,-3.98167918000583e-5,5.033467938084641e-8,0.0036118001491949494,-3.997345877334354e-5,5.061180843179813e-8,0.003612167114637999,-4.013564216404726e-5,5.089703004119631e-8,0.0036126132814578962,-4.025692196720492e-5,5.110687626163271e-8,0.0036131087640671185,-4.0303479742982214e-5,5.118093281193777e-8,0.0036136150876857724,-4.026034802700086e-5,5.109292725088119e-8,0.003614094856008835,-4.0132016043704154e-5,5.085165351686192e-8,0.0036145193074628326,-3.993836208888382e-5,5.0493512681573206e-8,0.003614872292763547,-3.9708210576448246e-5,5.0070825982924494e-8,0.003615150815762236,-3.947285164647236e-5,4.9640137095099506e-8,0.0036153632808230353,-3.926096931140428e-5,4.9253097195019005e-8,0.0036155267616432177,-3.909538048400595e-5,4.89506275147321e-8,0.0036156642392711075,-3.8991230807476714e-5,4.8759693003331155e-8,0.0036158021749105296,-3.895495080175904e-5,4.86914245950835e-8,0.0036159682275933073,-3.8983383111791493e-5,4.873955389149923e-8,0.003616188577386115,-3.9062911493915725e-5,4.887889729439448e-8,0.0036164842465590077,-3.9168981167351876e-5,4.906461395007111e-8,0.003616866127419069,-3.926707099410478e-5,4.9234122993500053E-08,0.003617329348913702,-3.931673398289274e-5,4.9314522167269587e-8,0.003617849150796829,-3.928001916208648e-5,4.923780665633049e-8,0.003618381798653043,-3.913360777112033e-5,4.896267227430695e-8,0.0036188735440883186,-3.888055553865431e-5,4.849554188132768e-8,0.003619276853702225,-3.855491658006466e-5,4.789873129478229e-8,0.0036195676184713646,-3.821416389457841e-5,4.7276580612196774e-8,0.0036197545025373444,-3.792090095161403e-5,4.6742254073388355e-8,0.0036198753513412853,-3.772222272857822e-5,4.6380371688515686e-8,0.0036199830801991757,-3.763623905030227e-5,4.6222755173165736e-8,0.00362012849213772,-3.7650144684676776e-5,4.624521707582522e-8,0.003620346940104583,-3.77278873639625e-5,4.6381754134727366e-8,0.0036206519317770578,-3.7822429509832206e-5,4.654694600928876e-8,0.0036210353347296935,-3.788800232657244e-5,4.6658156643896576e-8,0.0036214722356083732,-3.7889552847069945e-5,4.665250017723497e-8,0.0036219282737146377,-3.7808250334028e-5,4.6496606350338104e-8,0.003622367558528604,-3.764294604213074e-5,4.618907856043481e-8,0.003622759613618764,-3.740807222574171e-5,4.5756568470016735e-8,0.003623084197594277,-3.7129000539556704e-5,4.524531717165578e-8,0.0036233334897944123,-3.6836271033352585e-5,4.471070197478162e-8,0.003623511822352105,-3.656004150987419e-5,4.42072171491852e-8,0.003623633625770037,-3.632568696345636e-5,4.378055463898182e-8,0.0036237204746564565,-3.615095303416537e-5,4.3462496938331666e-8,0.0036237980238943072,-3.604451542869379e-5,4.326833725239851e-8,0.0036238932087061873,-3.600542881626248e-5,4.3195891834918523e-8,0.0036240316260941043,-3.6022998605292114e-5,4.322528366433578e-8,0.003624234754252283,-3.6076927455552074E-05,4.331926852948421e-8,0.0036245165668879796,-3.613800749232242e-5,4.34246123367742e-8,0.003624879311897084,-3.617023187311202e-5,4.3476066000601294e-8,0.0036253090835464646,-3.6135726391495956e-5,4.3405390637871034e-8,0.0036257732585274127,-3.6003592967351125e-5,4.315733397260209e-8,0.0036262232058954036,-3.576186980901324e-5,4.271111422394686e-8,0.003626605331546473,-3.542823247726426e-5,4.209956869519151e-8,0.003626879436036661,-3.50518579454549e-5,4.1412337399755736e-8,0.0036270365079126123,-3.470071004044956e-5,4.0772704917605835e-8,0.0036271047904969573,-3.443736111457935e-5,4.029373159298715e-8,0.0036271389316380864,-3.429581521273013e-5,4.003629528591115e-8,0.0036271983746661196,-3.427189565117347e-5,3.999186380888534e-8,0.0036273272627723543,-3.433001504928174e-5,4.009507060595036e-8,0.0036275443605000503,-3.441929039714666e-5,4.02532013146905e-8,0.003627843559349204,-3.448978456372097e-5,4.037574941419381e-8,0.0036282007307444626,-3.450355291645972e-5,4.039436204166938e-8,0.0036285824334346233,-3.443962968437811e-5,4.027168052144104e-8,0.003628953774846586,-3.4294406238919776e-5,4.000181674287031e-8,0.003629284453436167,-3.4079224683629005e-5,3.960585055025596e-8,0.00362955288864694,-3.381643465683662e-5,3.912462715686188e-8,0.0036297485036715003,-3.353465476085004e-5,3.8610171191587416e-8,0.0036298722480067286,-3.3263883330298314e-5,3.811684927278125e-8,0.003629935574821214,-3.303104643643447e-5,3.769332757952957e-8,0.003629958188257625,-3.285642390889165e-5,3.737611903004188e-8,0.003629964993502037,-3.275128511796277e-5,3.7185320702803963e-8,0.0036299828010852926,-3.271683137367501e-5,3.712271268820873e-8,0.003630037189355566,-3.274419552984249e-5,3.7171770693712e-8,0.003630149597490292,-3.281517977483511e-5,3.729903127915843e-8,0.0036303345419651353,-3.290362286671258e-5,3.7456641443449155e-8,0.0036305967997701106,-3.297753462876925e-5,3.758635247116539e-8,0.003630928513207681,-3.300252642506156e-5,3.762587782766384e-8,0.0036313068265694214,-3.294744940956532e-5,3.7519188323039196e-8,0.00363169380297549,-3.2792780456482834e-5,3.7231652891866554e-8,0.0036320412779389313,-3.254062980327011e-5,3.676798183842747e-8,0.0036323028298620714,-3.222229600651305e-5,3.618566999286661e-8,0.00363245144150968,-3.1896535693968474e-5,3.559165692670533e-8,0.003632494924818845,-3.163343128727202e-5,3.5112974053962996e-8,0.003632477752238004,-3.148784739433187e-5,3.4848610971418145e-8,0.0036324645616411712,-3.147677766139223e-5,3.4828549478256566e-8,0.003632513929295136,-3.1574620316264846e-5,3.5005434477029905e-8,0.0036326579319382944,-3.1727711619258e-5,3.528122902984301e-8,0.0036328967617592235,-3.187682011716218e-5,3.554823526809591e-8,0.0036332061434049393,-3.197502524181992e-5,3.572156454636925e-8,0.0036335495974229026,-3.1995847248725226e-5,3.575374279393732e-8,0.003633889293870905,-3.19333227910892e-5,3.563461873953822e-8,0.003634193172744235,-3.17978842240923e-5,3.538369154094479e-8,0.003634438615965457,-3.161109030916799e-5,3.504045625380042e-8,0.003634613855985011,-3.1400671454106465e-5,3.465541572534082e-8,0.003634718071699902,-3.11961575856113e-5,3.428219175465637e-8,0.003634760562279025,-3.102500639946222e-5,3.3970535921702535e-8,0.0036347591134491177,-3.0909251987672765e-5,3.376025962304962e-8,0.003634737607805422,-3.086278268132625e-5,3.367629517795057e-8,0.0036347229490649663,-3.088948453492992e-5,3.372533325761154e-8,0.003634741563228235,-3.0982560065987805e-5,3.389460784514429e-8,0.003634815901229414,-3.112512713113596e-5,3.4153020033679004e-8,0.0036349612766972193,-3.129198170965659e-5,3.4454394956192596e-8,0.003635183245992869,-3.145240784677646e-5,3.4742669582784826e-8,0.0036354757079425717,-3.1573956992053166e-5,3.495886526255861e-8,0.0036358199160614058,-3.1627212256825974e-5,3.504983415027823e-8,0.0036361849045063073,-3.159171660721317e-5,3.4979039620345153e-8,0.003636530479561921,-3.1462895172653124e-5,3.473901011215707e-8,0.0036368142578559253,-3.1258495477149596e-5,3.436280051338025e-8,0.003637003387374721,-3.102115681331883e-5,3.3928392231956515e-8,0.003637088755021439,-3.081237158304347e-5,3.35475459720963e-8,0.003637094946225761,-3.069500019812094e-5,3.333402234292594e-8,0.0036370770559699434,-3.0708848592774254e-5,3.335935424561485e-8,0.0036371013292986853,-3.085231309250355e-5,3.361973574732224e-8,0.0036372186076369544,-3.108268917674487e-5,3.4036836713625407e-8,0.0036374461301725914,-3.133543760619602e-5,3.449300493597974e-8,0.0036377666800752285,-3.154966294649507e-5,3.4877648547478624e-8,0.003638141297749838,-3.1685759118405125e-5,3.511925103365506e-8,0.0036385252843173046,-3.173024090401332e-5,3.5193980505349496e-8,0.0036388799750885084,-3.1691380373824776e-5,3.5117541386689996e-8,0.003639178463924923,-3.1591479016366276e-5,3.493096321710203e-8,0.003639406831918024,-3.145964120367891e-5,3.4687408289269027e-8,0.0036395631103395176,-3.132641488984484e-5,3.444246310972407e-8,0.003639655535314708,-3.122008096808154e-5,3.4247456211883176e-8,0.0036397006665107633,-3.1163893875378406e-5,3.414448139816457e-8,0.003639721329488939,-3.1173806420359784e-5,3.416226804857164e-8,0.0036397441644748767,-3.125655767899938e-5,3.431270209771732e-8,0.003639796568166988,-3.140832386339877e-5,3.458839076722247e-8,0.0036399030331303018,-3.161441580614675e-5,3.49621599593727e-8,0.0036400812861970703,-3.1850493516183555e-5,3.538933414193512e-8,0.0036403388783366928,-3.2085469069802425e-5,3.581309683606768e-8,0.003640670899708472,-3.228595888933305e-5,3.617266898678714e-8,0.003641059410890908,-3.242184074945234e-5,3.6413480741849684e-8,0.003641474976614793,-3.2472192397990765e-5,3.6497992784001544e-8,0.0036418804736073327,-3.243081777099901e-5,3.6415684316993066e-8,0.0036422373048892133,-3.231046066567557e-5,3.619054998193656e-8,0.003642513965287651,-3.2144261682321465e-5,3.588351146600024e-8,0.0036426959856221573,-3.198235682061668e-5,3.5586005065773693e-8,0.0036427944977556605,-3.1881697208743154e-5,3.5401356745524745e-8,0.0036428486849075714,-3.188933045907144e-5,3.5414444145402196e-8,0.0036429173685921887,-3.202403752604784e-5,3.565852233264122e-8,0.0036430596414088368,-3.226577445343364e-5,3.609629779052436e-8,0.0036433124954249867,-3.2561078847616284e-5,3.66299793816928e-8,0.0036436776177795477,-3.284337212027593e-5,3.713830880496045e-8,0.0036441242313400286,-3.3057030277970586e-5,3.7520345040000954e-8,0.0036446041810241324,-3.317277180321848e-5,3.772337507096917e-8,0.0036450692490085615,-3.3189738563198884e-5,3.7746545722749065e-8,0.003645482899676809,-3.3128175256394194e-5,3.7627357042686266e-8,0.0036458246434632187,-3.301933774306142e-5,3.7423151774873677e-8,0.003646089234413236,-3.289707990184836e-5,3.71957515176344e-8,0.003646283665094115,-3.279244336538491e-5,3.7001641525103554e-8,0.0036464239349174375,-3.273067656021924e-5,3.6886607019548715e-8,0.0036465323149864697,-3.272957018214073e-5,3.6882747854165715e-8,0.0036466349961541663,-3.279825429446103e-5,3.700630533575309e-8,0.0036467596710251142,-3.2936106766617314e-5,3.725568811188398e-8,0.0036469325807821826,-3.313193807407561e-5,3.7610026698915855e-8,0.0036471748124150484,-3.3364069240662704e-5,3.802938859382088e-8,0.003647498169133209,-3.360210126412473e-5,3.845809149088258e-8,0.0036479015316435363,-3.38109253939106e-5,3.883209072712449e-8,0.003648368986541947,-3.395689666898082e-5,3.909027582893097e-8,0.003648870921029724,-3.401521748118757e-5,3.9187927000580045e-8,0.0036493686380024244,-3.397675991479839e-5,3.91090927084104e-8,0.0036498219897588453,-3.385230235314705e-5,3.887418894134722e-8,0.0036501985693956885,-3.367263505175776e-5,3.854000701640252e-8,0.0036504824684245895,-3.348382883038354e-5,3.819088250354824e-8,0.003650680396759058,-3.333785800459016e-5,3.792145205144569e-8,0.003650822939161007,-3.3279840876376515e-5,3.781338373671198e-8,0.003650959134371577,-3.3334613467666114e-5,3.791106516073476e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json deleted file mode 100644 index 3f54533..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_23.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":23000,"numberOfSamples":1000,"samples":[0.003651144035305788,-3.3496975736922465e-5,3.820410327566936e-8,0.0036514219143992843,-3.3730554777606135e-5,3.862552436820353e-8,0.0036518112676496577,-3.397791609056264e-5,3.907035721036122e-8,0.00365229870095008,-3.417907449598782e-5,3.9429383363913e-8,0.00365284489977173,-3.4290356787269744e-5,3.962343833009104e-8,0.0036533992613388363,-3.429527055965991e-5,3.962310443890886e-8,0.003653915601993734,-3.4204210437811016e-5,3.9448034728001705e-8,0.0036543625588809866,-3.404606217387052e-5,3.915149562803171e-8,0.003654726821743164,-3.385745548023324e-5,3.880065521411588e-8,0.003655011114586897,-3.367402646076845e-5,3.846060844958942e-8,0.003655229952491537,-3.352516388562213e-5,3.818482941081412e-8,0.0036554053665251193,-3.343165583497147e-5,3.8010946814686524e-8,0.0036555634966590643,-3.3404964167691095e-5,3.7959478606448984e-8,0.0036557319972541605,-3.3447035834001456e-5,3.803352192134055e-8,0.0036559377077366316,-3.355009646938942e-5,3.821840523078073e-8,0.003656203941986329,-3.3696494348695236e-5,3.848145228658821e-8,0.0036565469978612378,-3.3859223781751256e-5,3.877301569526761e-8,0.0036569720596978405,-3.4004124438745524e-5,3.9030579556823116e-8,0.003657469498455847,-3.40947073072433e-5,3.918763315500793e-8,0.003658013393850613,-3.409978236972752e-5,3.918760770228968e-8,0.0036585642841328063,-3.400250012732713e-5,3.9000338042948336e-8,0.003659077039174998,-3.380774452480385e-5,3.8635466490843415e-8,0.0036595124517896076,-3.354428513728769e-5,3.8146233975437406e-8,0.0036598488695074555,-3.325957393919969e-5,3.761980345160911e-8,0.0036600895177045143,-3.30080589998171e-5,3.7155744789631976e-8,0.0036602626699706706,-3.2836659874036776e-5,3.6839414480127626e-8,0.0036604145345912036,-3.277203283919482e-5,3.671875744486885e-8,0.003660597076071134,-3.281332359526204e-5,3.679128814107534e-8,0.0036608541980586175,-3.293230507705976e-5,3.700462952878297e-8,0.003661210012998719,-3.308093000187256e-5,3.7270537712529526e-8,0.003661662575751951,-3.320440094368456e-5,3.74888633727299e-8,0.003662185161327315,-3.325597408349231e-5,3.7574542846225874e-8,0.003662734729255613,-3.320874898829924e-5,3.747900861351535e-8,0.0036632644530644296,-3.3060666580031256e-5,3.719917570818271e-8,0.003663735688217234,-3.283177311008349e-5,3.677230797634811e-8,0.003664125550367317,-3.255600900274537e-5,3.6260899113540797e-8,0.0036644288159946347,-3.227144312843095e-5,3.573475239964142e-8,0.003664655379067319,-3.20122786606644e-5,3.525635740926294e-8,0.0036648256060508692,-3.180406776074698e-5,3.487218993328028e-8,0.0036649655917790954,-3.166186058055134e-5,3.460940215582945e-8,0.003665103342555086,-3.15901849968733e-5,3.4475849367541365e-8,0.003665265988254904,-3.158372346364206e-5,3.4461364201339914e-8,0.003665477540567749,-3.162801003528849e-5,3.4539055157405407e-8,0.0036657565338192736,-3.17000936026722e-5,3.466655892539428e-8,0.0036661130590637785,-3.176968248208968e-5,3.478820502904388e-8,0.003666545202793297,-3.180174937323968e-5,3.483986629008923e-8,0.003667035788941662,-3.1761745550580205e-5,3.475855435760227e-8,0.0036675514497473767,-3.162389916152661e-5,3.449759311569503e-8,0.003668046654744528,-3.138114071038292e-5,3.404470126419763e-8,0.0036684741721542814,-3.105261032794423e-5,3.343560777759723e-8,0.003668799974560434,-3.068345735179965e-5,3.2753539214570226e-8,0.0036690165364966303,-3.0334013759936222e-5,3.2109244036842246e-8,0.0036691474276989216,-3.0061206934846583e-5,3.160683200695938e-8,0.0036692401145173264,-2.9900241087574385e-5,3.131020806459519e-8,0.0036693503292834495,-2.9854613982101406e-5,3.122493185911916e-8,0.003669525187357138,-2.989751080207272e-5,3.1301037813817e-8,0.0036697912282753556,-2.9982013376298203e-5,3.1452001909760237e-8,0.003670149929656101,-3.0055069990531985e-5,3.15804774867729e-8,0.00367058012275416,-3.007069224005011e-5,3.160245845426072e-8,0.003671045233915078,-2.9999480736268876e-5,3.14646043020311e-8,0.00367150289146305,-2.9833136999524488e-5,3.1152343179196404e-8,0.0036719145236925356,-2.9583830819543413e-5,3.068856987855197e-8,0.0036722528819754623,-2.9279274289988172e-5,3.012451965536157e-8,0.0036725060723375516,-2.8955216659429878e-5,2.9525956515840337e-8,0.003672677754130943,-2.864755268356975e-5,2.895869275364607e-8,0.003672784291843022,-2.838594682136872e-5,2.8476927435519246e-8,0.0036728502871910297,-2.8189969093245898e-5,2.8116221838894727e-8,0.0036729039195573616,-2.8067750927584617e-5,2.7891105878276732e-8,0.0036729730472076353,-2.8016458620949784e-5,2.7795998669456532e-8,0.0036730823256591566,-2.8023639314141942e-5,2.7807699502206006e-8,0.0036732510393670506,-2.806876922500443e-5,2.7888233842029837e-8,0.0036734911388206174,-2.8124848250507907e-5,2.7987802985082756e-8,0.003673805048096844,-2.8160365318995213e-5,2.8048454388623762e-8,0.0036741831643614118,-2.8142417714421486e-5,2.800989211450284e-8,0.0036746017845311393,-2.8042014596425726e-5,2.781926303572099e-8,0.003675023305396148,-2.7842042600133794e-5,2.7445742165138232e-8,0.003675401277467576,-2.7546573380207877e-5,2.6897486202051013e-8,0.0036756920590245525,-2.718737099853137e-5,2.623340000871415e-8,0.0036758711240840844,-2.682142732552505e-5,2.555844943167183e-8,0.0036759465937811365,-2.6515692647237495e-5,2.499551903112205e-8,0.0036759605227197774,-2.6323182982489206e-5,2.464151777744949e-8,0.0036759744983032644,-2.6262593443452535e-5,2.4530039671133795e-8,0.0036760466285700347,-2.6312844659637143e-5,2.462156779143457e-8,0.0036762123044454384,-2.6424126112870143e-5,2.4824015221802194e-8,0.003676476786014314,-2.6537239075107872e-5,2.5028430559382807e-8,0.0036768192350094923,-2.6601221243758545e-5,2.5141395201407517e-8,0.0036772028513650874,-2.658386925131194e-5,2.5104237965815816e-8,0.0036775858883604795,-2.6474864491415744e-5,2.4898599976612817e-8,0.0036779306440379686,-2.6283647779182486e-5,2.4542371246482394e-8,0.003678209538973982,-2.603439997978615e-5,2.408037372138913e-8,0.003678408358108114,-2.5759783494692988e-5,2.357282896906436e-8,0.003678526948850447,-2.5494493653466036e-5,2.308351403533256e-8,0.0036785777355817883,-2.5269467883076505e-5,2.2669143006386352e-8,0.003678582593628918,-2.5107461818455048e-5,2.2371273529194018e-8,0.003678568782474355,-2.5020417507422695e-5,2.2211520779320994e-8,0.0036785647042003374,-2.500871973525351e-5,2.21902445854814e-8,0.0036785961805071692,-2.5062054156622615e-5,2.228816628316454e-8,0.003678683593958781,-2.5161266743696174e-5,2.24697994986493e-8,0.003678839813725382,-2.528068865976697e-5,2.268772363615898e-8,0.0036790686589521994,-2.5390721102639514e-5,2.28873548323344e-8,0.0036793636633603534,-2.5460766843175067e-5,2.301239734670839e-8,0.0036797070625050198,-2.5462938404665122e-5,2.3011746096490555e-8,0.0036800695540226,-2.5377224112577794e-5,2.2849032250097418e-8,0.0036804123072578534,-2.5198284596178738e-5,2.251506689142407e-8,0.003680693157902537,-2.4942526484895308E-05,2.2040681988927512e-8,0.003680878158399637,-2.4651854910035483e-5,2.150341156448466e-8,0.0036809565821238504,-2.4388619881055524e-5,2.101802531841774e-8,0.003680952179938686,-2.4218042502926116e-5,2.0704157135192892e-8,0.003680920788736872,-2.418258152607271e-5,2.063924897056901e-8,0.0036809307429876595,-2.428216159309294e-5,2.082238656290625e-8,0.0036810354111426534,-2.4473729304710523e-5,2.1173726237950885e-8,0.003681253971997315,-2.4690578711906134e-5,2.1570233191745147e-8,0.0036815697161010955,-2.4868511669727512e-5,2.1893875946001677e-8,0.00368194233743989,-2.4964629040890916e-5,2.2066135288962184e-8,0.003682324212490332,-2.496342898745231e-5,2.2059068741709067e-8,0.0036826731166814996,-2.4873277705717296e-5,2.1888636709994033e-8,0.0036829591588462465,-2.4718729832185195e-5,2.1600441398920033e-8,0.003683167023967205,-2.4532594782350245e-5,2.1255080252265367e-8,0.0036832954099022645,-2.4349370543578626e-5,2.0916081024659693e-8,0.0036833550335923348,-2.4200218198591833e-5,2.0640692551785886e-8,0.0036833658565634006,-2.410924176009306e-5,2.047307011231562e-8,0.00368335380237866,-2.4090944865297163e-5,2.0439619325797367e-8,0.0036833471475006176,-2.4148859135246296e-5,2.054650508300012e-8,0.003683372810946003,-2.4275435196936255e-5,2.07794955328708e-8,0.003683452919780664,-2.445325289733475e-5,2.110623168930102e-8,0.003683602046501696,-2.465734339942249e-5,2.1480525304410102e-8,0.003683825298735307,-2.4858264023953814e-5,2.184802813428788e-8,0.0036841172991974114,-2.5025683730293013e-5,2.2152849985111426e-8,0.0036844620856947494,-2.5132324086251992e-5,2.234486049199623e-8,0.003684833943600737,-2.5158192450841574e-5,2.2387540094785343e-8,0.0036851994497372497,-2.5095227283073492e-5,2.226654684123872e-8,0.003685521611166236,-2.495214102688181e-5,2.199854944989616e-8,0.0036857671361551635,-2.4758044853092278e-5,2.1637716007903936e-8,0.0036859169029455434,-2.4561976529873085E-05,2.127462522493109e-8,0.0036859772914223593,-2.44246555966739e-5,2.102094321803886e-8,0.0036859863765741317,-2.4400569866343113e-5,2.0976459090247287e-8,0.0036860072100742725,-2.451503865503077e-5,2.1187033549314085e-8,0.0036861059724534228,-2.4748908547852973e-5,2.1616674172997784e-8,0.003686324629094954,-2.504318975211854e-5,2.2156284356747038e-8,0.003686664486266351,-2.5323155005089623e-5,2.2668137696737203e-8,0.0036870898114569946,-2.5527244493044108e-5,2.303909962374833e-8,0.003687546149128421,-2.5624766795011134e-5,2.3213143420424893e-8,0.00368798044731879,-2.5617338941137874e-5,2.3193859568407812e-8,0.0036883539373483384,-2.5529670793774248e-5,2.3027315403045705e-8,0.0036886463867155743,-2.5397760191839542e-5,2.2780188658898496e-8,0.003688854693802478,-2.5259351496340612e-5,2.2522155643143783e-8,0.0036889891708466456,-2.5147850491353615e-5,2.231471497123031e-8,0.0036890695533378795,-2.5088946206269493e-5,2.2205016955307542e-8,0.0036891214131626097,-2.5098827308126288e-5,2.222261384963983e-8,0.0036891729137179556,-2.518329063537529e-5,2.2377841591020216e-8,0.0036892516769625227,-2.5337494371236543e-5,2.2661397865423784e-8,0.0036893816097385863,-2.554645169281843e-5,2.3045303929869593e-8,0.0036895797925711486,-2.578657672893664e-5,2.3485809567516533e-8,0.0036898538468566012,-2.6028463573269312e-5,2.392855402626147e-8,0.003690200266554174,-2.624073990187162e-5,2.431568410168666e-8,0.0036906040827712275,-2.6394652975592825e-5,2.4594312535909952e-8,0.0036910401320671615,-2.646892578198544e-5,2.4725481010514338e-8,0.0036914760290490357,-2.6454258869800837e-5,2.469246723504824e-8,0.0036918767628710283,-2.6356872170899155e-5,2.450728188668473e-8,0.003692210885339878,-2.6200462392483775e-5,2.4214168577148188e-8,0.0036924581686777775,-2.602543095805307e-5,2.388800430693621e-8,0.003692617733382483,-2.5883626505455566e-5,2.362443103435925e-8,0.0036927139953002153,-2.58271594885082e-5,2.3519158494680385e-8,0.0036927961075991973,-2.5891978747853797e-5,2.3637775773338626e-8,0.0036929267649546634,-2.6081277797364088e-5,2.398538810384016e-8,0.0036931609455419815,-2.6358161739026842e-5,2.4493348826303326e-8,0.0036935234174346435,-2.665549718890737e-5,2.5037572254635175e-8,0.003693998101314756,-2.6900775812927172e-5,2.5484402286752192e-8,0.0036945360219985063,-2.7042710855034788e-5,2.5739608547857825e-8,0.0036950760446270714,-2.7065371302568437e-5,2.57743737612283e-8,0.003695565661023816,-2.6985691375977797e-5,2.5620578062499176e-8,0.00369597274607554,-2.684069713273219e-5,2.5347080120574853e-8,0.003696287324292012,-2.667345195030066e-5,2.5033662232297028e-8,0.0036965173262114045,-2.6523010525635966e-5,2.4752456189175374e-8,0.0036966825886261623,-2.6419227346433036e-5,2.455840471365584e-8,0.003696809522700842,-2.6380986372349695e-5,2.4486064306819182e-8,0.0036969270936339123,-2.6416117172469423e-5,2.454950799475654e-8,0.0036970637745599656,-2.6521893503182198e-5,2.4743286277766767e-8,0.0036972449046433265,-2.6685737210574117e-5,2.504376987032764e-8,0.0036974900334030988,-2.6886274245188e-5,2.541115595707101e-8,0.003697810176347896,-2.7095219934198905e-5,2.5793006605434385e-8,0.0036982053804941253,-2.728057365079077e-5,2.613018555159297e-8,0.003698663356525077,-2.7411217452902692e-5,2.6365357275177697e-8,0.0036991599725369096,-2.7462484334453646e-5,2.6453253365305067e-8,0.0036996621606698965,-2.7421763096580724e-5,2.6370997112730044e-8,0.00370013328491362,-2.729281033021235e-5,2.6126029195423446e-8,0.0037005403211717563,-2.7097411250876837e-5,2.5759105766375958e-8,0.0037008616198824073,-2.6873458549975153e-5,2.534063229254157e-8,0.0037010937154705065,-2.6669054268328128e-5,2.4959623377691335e-8,0.0037012553893138378,-2.6532771677849146e-5,2.470560529795536e-8,0.003701386925754609,-2.6501162935385394e-5,2.464554459140342e-8,0.0037015427319560873,-2.65862451416973e-5,2.4800881221936585e-8,0.0037017770840136652,-2.6767600671031702e-5,2.5133175185444305e-8,0.003702126226889177,-2.6994365678892358e-5,2.5547991564237983e-8,0.003702594034496086,-2.7199503702774686e-5,2.5921361512321817e-8,0.003703149146929241,-2.7322124217394617e-5,2.6140992193989e-8,0.0037037362260185593,-2.732763109091641e-5,2.6143421934714618e-8,0.003704295665546802,-2.721607872496196e-5,2.5929372282700263e-8,0.0037047816795343263,-2.7016566312550213e-5,2.5553267597604028e-8,0.003705171555362991,-2.6773370862474705e-5,2.509745527697299e-8,0.003705465407158616,-2.6531809403462105e-5,2.4645955131628586e-8,0.0037056802842188206,-2.6328749558537203e-5,2.4266888380384873e-8,0.003705842962671197,-2.6188473724591307e-5,2.4004889346311846e-8,0.0037059839388316924,-2.6122241314280676e-5,2.3880388417301026e-8,0.0037061332623507665,-2.6129556128220352e-5,2.3892034999399584e-8,0.003706317770909461,-2.6199800840217618e-5,2.4019772205175913e-8,0.0037065589557418377,-2.6313745875571078e-5,2.4227665838511646e-8,0.003706870840343872,-2.644512355745995e-5,2.4466855843329514e-8,0.003707257688373799,-2.6562856852741105e-5,2.4679720562225874e-8,0.003707711915905993,-2.6634592082949376e-5,2.4806441695489335e-8,0.003708213120455237,-2.663186058357122e-5,2.479455939697902e-8,0.0037087294412449907,-2.6536451255494063e-5,2.4610743259413702e-8,0.003709222214515911,-2.6346543661015368e-5,2.4252099963225886e-8,0.0037096538724641567,-2.6080329046030495e-5,2.3752812169666824e-8,0.003709997524539029,-2.577492734907529e-5,2.3182040780489726e-8,0.0037102454227998637,-2.5479672505274922e-5,2.263137359655951e-8,0.0037104132986381126,-2.524481178501241e-5,2.219379012489409e-8,0.0037105385684950997,-2.5108446768208215e-5,2.1939440481081604e-8,0.003710672201591465,-2.5085405601484373e-5,2.1895121723236657e-8,0.0037108659074224157,-2.5161493732589e-5,2.2033822651041703e-8,0.0037111577917986476,-2.5295461489293446e-5,2.2278586025456243e-8,0.0037115606470070174,-2.542917933201141e-5,2.2521498478199035e-8,0.0037120571654388006,-2.5503837048517596e-5,2.2653719725711947e-8,0.003712604656330799,-2.5477070966070233e-5,2.259714366597435e-8,0.0037131481138471807,-2.5334611035146297e-5,2.232587717598007e-8,0.0037136365417578987,-2.509202414715311e-5,2.1869364929837613e-8,0.0037140360486028587,-2.4786787143587042e-5,2.1297584304020552e-8,0.0037143354755474435,-2.4465255139622436e-5,2.069678054959071e-8,0.003714544467024974,-2.4170306202152613e-5,2.0146497047207724e-8,0.003714687020580643,-2.393338515246342e-5,1.9704838425664365e-8,0.0037147941125955726,-2.3771532108372094e-5,1.9403042636394202e-8,0.0037148976705766875,-2.3687944947412868e-5,1.924662719845783e-8,0.0037150265340877417,-2.367419895466894e-5,1.9219583030809972e-8,0.003715204015883382,-2.37127525260934e-5,1.928905809182854e-8,0.0037154462776015544,-2.377915294824585e-5,1.9409457545578542e-8,0.0037157608120527794,-2.384409788521174e-5,1.9526274662557453e-8,0.0037161447586631148,-2.387597552240848e-5,1.9580823667812967e-8,0.003716583383528966,-2.384460787773986e-5,1.9517213785745727e-8,0.0037170496879362957,-2.372665990986959e-5,1.929240272445178e-8,0.003717506623292282,-2.3512366057301022e-5,1.8888665065491976e-8,0.003717913280569818,-2.3211764390501293e-5,1.832510925529357e-8,0.0037182350231976446,-2.2857213753819283e-5,1.766226069432184e-8,0.0037184549931704456,-2.2499015996168416e-5,1.69938183046161e-8,0.0037185822522199053,-2.2193400184984013e-5,1.642422937600723e-8,0.0037186520125712316,-2.1986125984029035e-5,1.6038180871423233e-8,0.0037187166025020217,-2.1897980951190913e-5,1.5873715102312037e-8,0.0037188302313518797,-2.1918094714878887e-5,1.5909975868926e-8,0.0037190333250862505,-2.200738683831528e-5,1.6073822676410523e-8,0.003719341736464505,-2.211021106517147e-5,1.6261616807192078e-8,0.003719743573072058,-2.216979978548509e-5,1.636795341593824e-8,0.0037202036700935363,-2.214280148765948e-5,1.631260873446929e-8,0.0037206737661205037,-2.2009147434640982e-5,1.6058763393847896e-8,0.0037211051970497504,-2.1775071201819367e-5,1.5618506174731158e-8,0.003721460458739193,-2.1469112666244478e-5,1.5045318183279198e-8,0.0037217205729197273,-2.113297412457324e-5,1.4417004888548999e-8,0.0037218868002361744,-2.081050254733132e-5,1.3815164650950308e-8,0.0037219772900882707,-2.0538209327698315e-5,1.3307554545741322e-8,0.003722020789722907,-2.033950176989565e-5,1.2937408851043707e-8,0.00372204987109083,-2.022296133826621e-5,1.2720322617019088e-8,0.0037220953992123298,-2.018363795951063e-5,1.2646747001885697e-8,0.0037221828649194387,-2.0205878245740093e-5,1.26873047206367e-8,0.0037223303313133104,-2.02664502220618e-5,1.2798609312135926e-8,0.003722547317866394,-2.0337344535813425e-5,1.292845264550573e-8,0.0037228339677174557,-2.0388317730423293e-5,1.3020518278734751e-8,0.003723180190839855,-2.0389705420379754e-5,1.3019629712220013e-8,0.0037235650128087322,-2.0316187736311858e-5,1.2878799919059847e-8,0.003723957027956693,-2.0152005616268402e-5,1.256897561523051e-8,0.003724317479797812,-1.9897320189773163e-5,1.2090860847159705e-8,0.0037246074892309214,-1.9573777293026863e-5,1.1485194896322013e-8,0.0037247994563825186,-1.922551672634567e-5,1.0834500081040653e-8,0.003724889413287953,-1.8911635022200557e-5,1.024891375539621e-8,0.003724903860006442,-1.8689419208005423e-5,9.834890386340725e-9,0.0037248950039658825,-1.8593936835862856e-5,9.657227552497414e-9,0.0037249241617011717,-1.8624070004157957e-5,9.713213497022367e-9,0.0037250406734058938,-1.874272347827841e-5,9.933231932671707e-9,0.003725266442256563,-1.889068343187049e-5,1.0206743013046786e-8,0.003725591957814072,-1.900639132302381e-5,1.0419161121580107e-8,0.0037259828367480837,-1.9042941445738243e-5,1.0483445088589561e-8,0.0037263919105630754,-1.8977532859680972e-5,1.0357575288150131e-8,0.0037267718541946424,-1.8812970780198845e-5,1.004722544629047e-8,0.0037270852122032435,-1.857321752592454e-5,9.597390829866145e-9,0.0037273105106150057,-1.829556589372417e-5,9.077766944676528e-9,0.0037274442822466383,-1.8021665816886436e-5,8.566019197106112e-9,0.003727499446205275,-1.7789180452793088e-5,8.132238797880786e-9,0.0037275009651962054,-1.762549477405663e-5,7.827238632585327e-9,0.003727480107433613,-1.7544324987777415e-5,7.676278027300595e-9,0.003727468693735596,-1.7545252223564655e-5,7.678260381961283e-9,0.0037274943796830745,-1.7615546114334517e-5,7.809198521585769e-9,0.0037275775048591624,-1.773333185341448e-5,8.028155894012631e-9,0.003727729461688348,-1.7871140037744037e-5,8.283855986333845e-9,0.0037279521045785026,-1.7999224672154963e-5,8.520831022886832e-9,0.0037282376812551145,-1.80885880022614e-5,8.685033780576021e-9,0.0037285690243083164,-1.8114038809190196e-5,8.729555432946514e-9,0.003728920113641478,-1.8057767593507887e-5,8.621345067804234e-9,0.0037292576952676747,-1.7913835381609194e-5,8.349624258909386e-9,0.0037295452618239825,-1.769325645659619e-5,7.935342096310923e-9,0.003729750685610381,-1.742782377238727e-5,7.438195143004906e-9,0.0037298573864923707,-1.7169070621178025e-5,6.954523489002591e-9,0.0037298756982351187,-1.6978346810287705e-5,6.598664526266755e-9,0.003729847357057938,-1.690734999300974e-5,6.466620041821976e-9,0.0037298361456615196,-1.6976011363689884e-5,6.594939654273422e-9,0.0037299052651525726,-1.716065001020904e-5,6.938856540972064e-9,0.003730092529452638,-1.7401587629302746e-5,7.386701385086378e-9,0.0037303974273488636,-1.7626624987369516e-5,7.803782958842304e-9,0.0037307856005640463,-1.7776600142330956e-5,8.080023637204767e-9,0.0037312048557727917,-1.782075236454326e-5,8.158500185359126e-9,0.0037316025984929033,-1.7758874434021704e-5,8.039315141398938e-9,0.003731938096263313,-1.7614499874872118e-5,7.76676690099454e-9,0.0037321881752387263,-1.7424800949631686e-5,7.410439462798648e-9,0.003732347832913049,-1.7230987288991442e-5,7.047285654047261e-9,0.003732427807332729,-1.7070752855394434e-5,6.747564430999931e-9,0.0037324505819447216,-1.6972951318685194e-5,6.564937105062063e-9,0.0037324456392299724,-1.695435236964585e-5,6.530439072511247e-9,0.003732444524964121,-1.701842445824136e-5,6.650238763256346e-9,0.0037324762624747466,-1.7155994000405556e-5,6.906918712508451e-9,0.003732563584080442,-1.734745000939961e-5,7.263649467205659e-9,0.003732720347862681,-1.7566052220995436e-5,7.670403442963853e-9,0.003732950305259306,-1.7781762662003478e-5,8.071102483695934e-9,0.003733247046701793,-1.796503766997897e-5,8.410658713739836e-9,0.003733594793483443,-1.8090329320746774e-5,8.641476568061361e-9,0.003733969829689655,-1.8139333953936072e-5,8.729522514097567e-9,0.0037343425695851745,-1.8104141430392796e-5,8.660245887318678e-9,0.003734680606263795,-1.7990430125363365e-5,8.444572497323546e-9,0.003734953553838489,-1.782034694147802e-5,8.124239420623847e-9,0.003735140403146867,-1.7633507226156773e-5,7.77352976095781e-9,0.003735238848109435,-1.748329459267977e-5,7.4921953391734e-9,0.003735273477531778,-1.742550583944127e-5,7.384151459049214e-9,0.0037352966592492363,-1.749922907883764e-5,7.52182191537506e-9,0.0037353759026406193,-1.7706708770883272e-5,7.908742842178216e-9,0.003735568740471046,-1.8005201420696946e-5,8.464598259716825e-9,0.003735897522340255,-1.8320262806021934e-5,9.050180658370451e-9,0.0037363400742964556,-1.8575326378219387e-5,9.522633384422312e-9,0.0037368415776035976,-1.8720037863678725e-5,9.788290822532997e-9,0.0037373380712256233,-1.874245668787921e-5,9.825363797506921e-9,0.0037377771555825133,-1.8663787364666786e-5,9.673974471483982e-9,0.0037381282616453346,-1.852433494079792e-5,9.409797508911304e-9,0.0037383834002827367,-1.8369540890756483e-5,9.117901324121186e-9,0.003738552757404369,-1.824019873721411e-5,8.874473223547163e-9,0.003738658809558917,-1.8167100505264942e-5,8.736870253285727e-9,0.003738730844138739,-1.8168783218842287e-5,8.739462794445459e-9,0.0037388003329487827,-1.8251037280980622e-5,8.892751862877826e-9,0.00373889698628947,-1.8407514500518183e-5,9.18453775255549e-9,0.0037390453516148825,-1.8621272393550024e-5,9.582855243041857e-9,0.0037392620029640536,-1.886722395403692e-5,1.0040612490717398e-8,0.0037395535311001136,-1.9115464924135617e-5,1.0501851379362463e-8,0.0037399156645016815,-1.9335279841595094e-5,1.0909231443508442e-8,0.003740333727271666,-1.949936503986908e-5,1.1211879486748627e-8,0.0037407843754003085,-1.9587781487259298e-5,1.1372730485053469e-8,0.00374123843967038,-1.9591286559904284e-5,1.1374739407503882e-8,0.003741664694071747,-1.951376722599113e-5,1.1225445494692067e-8,0.003742034426709988,-1.9373566096839915e-5,1.0959456056172562e-8,0.0037423268826330203,-1.9203348136011737e-5,1.0638143074060602e-8,0.0037425355319994974,-1.9047512251718933e-5,1.0344682395521544e-8,0.003742674153842459,-1.8955552707843683e-5,1.0171510875620036e-8,0.003742780075672932,-1.897020365172007e-5,1.0198117014107015e-8,0.003742910352084255,-1.91115247419747e-5,1.0461391980825988e-8,0.003743127236642866,-1.936274082819314e-5,1.0929372494595087e-8,0.0037434748877366456,-1.966787992300605e-5,1.1497025901544866e-8,0.0037439582292228346,-1.994830716850865e-5,1.2017239417133448e-8,0.0037445380916303205,-2.0132874757777342e-5,1.235715857869903e-8,0.003745147304945264,-2.018475709919423e-5,1.24483095139559e-8,0.003745717536123864,-2.0110039024257403e-5,1.2302602979977455e-8,0.0037462009957385913,-1.994718213155144e-5,1.1992528512288664e-8,0.003746578533952196,-1.9748112336383324e-5,1.1615631205305184e-8,0.0037468562058775336,-1.9561943110626034e-5,1.1263957057301948e-8,0.0037470568320752493,-1.942580720910747e-5,1.1006894832462288e-8,0.003747211591296955,-1.936188801722068e-5,1.0885690830408487e-8,0.0037473537091404366,-1.937798694893093e-5,1.0914592901045096e-8,0.00374751426169476,-1.9469411529319156e-5,1.1084443738119213e-8,0.003747719306811906,-1.9621107982094123e-5,1.1366715498674678e-8,0.003747987653823677,-1.98098865025236e-5,1.171772196127629e-8,0.0037483289877986337,-2.00069900657524e-5,1.2083476553019989e-8,0.0037487424409848157,-2.018133651430223e-5,1.2405790481457967e-8,0.003749216049729212,-2.0303576953806943e-5,1.262985740223278e-8,0.0037497276616432853,-2.0350656359240593e-5,1.2712744009555985e-8,0.0037502476097356495,-2.0310161881186038e-5,1.263147987969798e-8,0.0037507430698388022,-2.01836052339569e-5,1.238917732256602e-8,0.003751183640813286,-1.9987806416820744e-5,1.201762072309364e-8,0.003751547358372743,-1.975377558398845e-5,1.1575159589463945e-8,0.0037518262278624856,-1.9522888966651756e-5,1.1139487350292194e-8,0.003752030366449994,-1.9340357022812065e-5,1.0795307888503861e-8,0.003752189575101569,-1.9246075080711368e-5,1.0617115929008991e-8,0.00375235065514588,-1.926362082860626e-5,1.0648597353873207e-8,0.00375256874733072,-1.9389760757096198e-5,1.0883103913087454e-8,0.0037528923589819,-1.95889336244771e-5,1.1253515334163685e-8,0.003753345377221318,-1.9798233653190108e-5,1.1641722277737352e-8,0.003753914085684261,-1.9945444226348306e-5,1.1912441558529761e-8,0.0037545482183929373,-1.997468342657704e-5,1.1961217063101045e-8,0.003755178268860511,-1.9866841003214947e-5,1.1752664664935419e-8,0.003755740498054235,-1.9643572837075e-5,1.132790926630942e-8,0.003756196287862252,-1.9354386897528227e-5,1.078027677361611e-8,0.0037565380292510645,-1.9056473937833167e-5,1.02173374524946e-8,0.003756783287516352,-1.879808625982981e-5,9.729641408606765e-9,0.003756964059188642,-1.8610299848009276e-5,9.375278483928095e-9,0.0037571168822495586,-1.850601029274588e-5,9.178087064121487e-9,0.0037572761536310796,-1.8482743679660896e-5,9.133032553034088e-9,0.003757470458105261,-1.8526444575679007e-5,9.213386299761704e-9,0.003757720726876309,-1.8614862202039136e-5,9.377117285257808e-9,0.0037580391353763576,-1.8720347719301517e-5,9.572164083264661e-9,0.0037584281701537876,-1.88124868526117e-5,9.741392613497707e-9,0.003758879845331222,-1.886115999095588e-5,9.828343171502811e-9,0.003759375547369298,-1.884045521805883e-5,9.784556157303305e-9,0.0037598873171901443,-1.8733336140393533e-5,9.578297218737537e-9,0.0037603812993048536,-1.8536245409891986e-5,9.20316322759362e-9,0.003760823522734917,-1.826223272290799e-5,8.683933253519903e-9,0.0037611872682305502,-1.794102306496649e-5,8.07668074991078e-9,0.003761460322951104,-1.761495849043393e-5,7.461118830695648e-9,0.003761649939215854,-1.7330967802997768e-5,6.925453527388214e-9,0.003761783669047966,-1.7130080930370736e-5,6.546618226195867e-9,0.0037619052215471355,-1.7036850169632218e-5,6.370380696093653e-9,0.0037620655927134623,-1.7051287457088965e-5,6.396265383341771e-9,0.0037623107889809214,-1.7145824206739997e-5,6.571987750426438e-9,0.0037626686506996173,-1.7269316797664524e-5,6.8011328521040325e-9,0.0037631385620556235,-1.7358826009662052e-5,6.965369983083214e-9,0.003763688525936491,-1.735727517214488e-5,6.957620478797519e-9,0.0037642627046168722,-1.7231514285195872e-5,6.7159383377332736e-9,0.003764798192409383,-1.6983144070799588e-5,6.243784790204022e-9,0.003765244475384821,-1.6646684177942917e-5,5.606514320308481e-9,0.003765577041731878,-1.6276113749033035e-5,4.905976489211403e-9,0.0037658001496303955,-1.5926872483978327e-5,4.246574565661419e-9,0.003765940043113608,-1.5641428521669665e-5,3.7080826046676444e-9,0.0037660339883212393,-1.5442580188857785e-5,3.3330932819261697e-9,0.0037661202972565054,-1.533378212849883e-5,3.1277370664346276e-9,0.0037662317987403426,-1.530331931720143e-5,3.0696368494463564e-9,0.00376639269783391,-1.5329353706236113e-5,3.117459743615627e-9,0.0037666175999535394,-1.5384239766858776e-5,3.2190461479142756e-9,0.003766911424015544,-1.5437798596845338e-5,3.3175546155956647e-9,0.0037672694199051165,-1.5460010735471215e-5,3.3565118674225895e-9,0.003767677144880793,-1.5423844881946676e-5,3.285127707090549e-9,0.0037681108405431198,-1.5308808573030386e-5,3.0649759961602738e-9,0.00376853909328297,-1.5105335091860154e-5,2.678249819012819e-9,0.0037689267978603287,-1.4819271966290807e-5,2.1362017496681052e-9,0.0037692419464796334,-1.4474679157593949e-5,1.4843891964449467e-9,0.003769464408607395,-1.4112525842013234e-5,8.001758661740843e-10,0.0037695940570376656,-1.3783562552421724e-5,1.7924187200268179e-10,0.003769654513644912,-1.3535943066435279e-5,-2.877953882684514e-10,0.003769689655352273,-1.3401132828683478e-5,-5.419454827697908e-10,0.0037697528877103145,-1.3383352936094304e-5,-5.756719343471206e-10,0.0037698924838657317,-1.3456848768446041e-5,-4.379133873754168e-10,0.0037701379529232566,-1.3572133855236433e-5,-2.2219011005250034e-10,0.0037704917152187136,-1.36690613658659e-5,-4.190341608565942e-11,0.003770928286669406,-1.3692704936665648e-5,-4.184426881656405e-13,0.003771400984222682,-1.360764722503169e-5,-1.6419689144365008e-10,0.0037718542846100875,-1.3406801484918508e-5,-5.462400593197952e-10,0.0037722383742051645,-1.3112239502991186e-5,-1.1045888736203505e-9,0.0037725215280944423,-1.2767820548965187e-5,-1.756277314541145e-9,0.003772696517123917,-1.2426225277517897e-5,-2.4018373226817705e-9,0.003772779492258509,-1.2135018031827889e-5,-2.9516198186066968e-9,0.0037728027992608884,-1.1926333275018554e-5,-3.345233937647147e-9,0.003772805248437262,-1.1812618336310583e-5,-3.559509949169215e-9,0.0037728234022769208,-1.1787985186950563e-5,-3.605855082757096e-9,0.003772885871274732,-1.1832888997680663e-5,-3.5213519611769673e-9,0.0037730107830056705,-1.1919671821302818e-5,-3.3582733409701644e-9,0.0037732054834411486,-1.201738319949041e-5,-3.1750111515168823e-9,0.0037734672788120238,-1.2095393134790393e-5,-3.029308059715573e-9,0.0037737843623683997,-1.2126141515841897e-5,-2.9731078275435696e-9,0.0037741366633792803,-1.2087713479066177e-5,-3.0477005332985616e-9,0.0037744969434948855,-1.1966854684521575e-5,-3.2780044851181107e-9,0.0037748329505799573,-1.1762652811277419e-5,-3.665584516120736e-9,0.0037751117090649177,-1.1490296257088035e-5,-4.1815534879312055e-9,0.003775306671071242,-1.1183066734645489e-5,-4.762857357367671e-9,0.0037754069823609203,-1.0889694911885241e-5,-5.3173572358538974e-9,0.0037754256798606545,-1.0664706834353456e-5,-5.742147928915882e-9,0.003775401726689244,-1.0552455653838138e-5,-5.953742048116789e-9,0.003775391866454253,-1.0570337492320954e-5,-5.9196954740658214E-09,0.0037754533346908404,-1.069965404964022e-5,-5.6757115830877735e-9,0.0037756245234761812,-1.0889973474384802e-5,-5.3172574611983255e-9,0.0037759125769722722,-1.1075505491388981e-5,-4.9685789284492975e-9,0.0037762927653174714,-1.119569145297422e-5,-4.743856103245313e-9,0.0037767180710236953,-1.1211551456236634e-5,-4.716422581730153e-9,0.0037771336262513635,-1.1113289439129748e-5,-4.904484620551893e-9,0.0037774906920141566,-1.0919093669290008e-5,-5.273435637376515e-9,0.0037777568305629415,-1.0667562119560446e-5,-5.750186818487831e-9,0.0037779208867569462,-1.0406866195721732e-5,-6.243650787702565e-9,0.003777992767016646,-1.018352746019933e-5,-6.665958168127169e-9,0.0037779989182269913,-1.0033140590648544e-5,-6.949989656900959e-9,0.0037779751011073896,-9.97469904417571e-6,-7.060078675057539e-9,0.0037779584786724603,-1.0009194292538516e-5,-6.994608417451776e-9,0.0037779809048557934,-1.0121958368840203e-5,-6.781516708789922e-9,0.0037780645720082466,-1.0287344353781977e-5,-6.469394097223917e-9,0.003778220234630747,-1.047413085648688e-5,-6.1172540917545026e-9,0.003778447456985994,-1.0650388607779883e-5,-5.785368244403539e-9,0.003778735979536752,-1.078723859059365e-5,-5.528224279977244e-9,0.0037790674522738318,-1.086163687447547e-5,-5.3893085312301e-9,0.0037794172242492487,-1.0858682366088469e-5,-5.396741791551607e-9,0.003779756331525049,-1.0773944571270184e-5,-5.55883105247937e-9,0.0037800542820276006,-1.0616049404699768e-5,-5.859127603922072e-9,0.0037802835715694304,-1.0409041615552987e-5,-6.251958361016585e-9,0.0037804265587483227,-1.019284428731572e-5,-6.661632999833887e-9,0.0037804839392265306,-1.0019107510829138e-5,-6.990419724209726e-9,0.003780481632655872,-9.940027335123063e-6,-7.139785874260027e-9,0.003780470551458204,-9.990760852975178e-6,-7.043636122099973e-9,0.0037805145003715693,-1.0171924492472818e-5,-6.701260118724001e-9,0.0037806679024364473,-1.0443026877787217e-5,-6.189548974586507e-9,0.003780953749669685,-1.0734040814978671e-5,-5.640990002948598e-9,0.003781354446672115,-1.0970848138577473e-5,-5.195569712053512e-9,0.0037818202123343133,-1.1100878236964057e-5,-4.952398320323635e-9,0.0037822885451625726,-1.1106690075405191e-5,-4.9441331682067115e-9,0.0037827037918562686,-1.1004732221553931e-5,-5.139393429677356e-9,0.003783029580921028,-1.083450210581651e-5,-5.463297256101165e-9,0.0037832528926456414,-1.0645014240624529e-5,-5.8230619263333884E-09,0.003783382008619057,-1.0483107839539345e-5,-6.130107278142606e-9,0.0037834411521074293,-1.0385293670330903e-5,-6.315462602182711e-9,0.003783463866855065,-1.0373167422302901e-5,-6.338434431871988e-9,0.003783486346677699,-1.0451924135314523e-5,-6.1894075059543604e-9,0.0037835415059761126,-1.0611498941792025e-5,-5.887657773983901e-9,0.0037836543994592214,-1.0829747870240204e-5,-5.475280541301254e-9,0.0037838393893894684,-1.1076912436351042e-5,-5.00868499477498e-9,0.0037840991940355684,-1.1320547095963303e-5,-4.549244861849569e-9,0.0037844256115939245,-1.1530111692398709e-5,-4.154636535393267e-9,0.003784801380528869,-1.168067724546158e-5,-3.871892905681978e-9,0.0037852026131201958,-1.1755664641185652e-5,-3.732277813199833e-9,0.0037856015155439153,-1.1748839795853997e-5,-3.747515652641209e-9,0.003785969367532291,-1.166580442859177e-5,-3.906921033511718e-9,0.00378628001510182,-1.1525110745466617e-5,-4.175235589964458e-9,0.003786514449205436,-1.1358637205725354e-5,-4.491921267897067e-9,0.0037866667919770496,-1.1209875032777431e-5,-4.774493370527981e-9,0.0037867507548969247,-1.1128029735137191e-5,-4.929817589830909e-9,0.0037868036489551913,-1.1156279232741838e-5,-4.8764159931144795e-9,0.0037868831215570773,-1.1315159538627571e-5,-4.575860551166065e-9,0.0037870524179700496,-1.1587432273622035e-5,-4.061235434398263e-9,0.0037873563096598654,-1.1915434657407038e-5,-3.441960618087722e-9,0.0037877994416602927,-1.2218268853877623e-5,-2.871179678081107e-9,0.00378834159065941,-1.2422814649923206e-5,-2.4871089224278254e-9,0.0037889140278449785,-1.249102829822317e-5,-2.361451809750297e-9,0.0037894464319104034,-1.2428832387716597e-5,-2.4826372919214795e-9,0.003789888854569995,-1.2276000741283246e-5,-2.775033513542293e-9,0.003790220598166225,-1.2087372015433666e-5,-3.13458685349092e-9,0.003790447689810322,-1.1915907774812648e-5,-3.4609407828149515e-9,0.0037905948035725874,-1.1802236082212254e-5,-3.6772233896817644e-9,0.003790696401172688,-1.1770385986698964e-5,-3.73808626895047e-9,0.003790789335206898,-1.1827575732369238e-5,-3.6300747743801807e-9,0.003790907337032187,-1.1966138926110403e-5,-3.3679632150517645e-9,0.0037910770946163676,-1.2166553303929558e-5,-2.9889909055131355e-9,0.0037913156361942314,-1.2401135693384962e-5,-2.545809144827838e-9,0.0037916289168516333,-1.263815898674036e-5,-2.0986190900712304e-9,0.0037920116463947694,-1.2846175399722612e-5,-1.7069510131467538e-9,0.0037924484233062025,-1.299819527970367e-5,-1.4217770124520617e-9,0.0037929160329965078,-1.3075228465631499e-5,-1.2788768709480869e-9,0.0037933865555892653,-1.3068858631174979e-5,-1.294030013439374e-9,0.0037938309814365434,-1.2982776331081918e-5,-1.4601266957738199e-9,0.0037942231481280977,-1.283322743822306e-5,-1.7462770627408988e-9,0.003794543866539171,-1.2648304256008901e-5,-2.0991058430070644e-9,0.003794785242433129,-1.2465858940810928e-5,-2.4467144889246194e-9,0.0037949550625008244,-1.232927438422763e-5,-2.7067816859225326e-9,0.003795080187817642,-1.2279927284374798e-5,-2.8009626097236014e-9,0.0037952065161867134,-1.2345871523227187e-5,-2.6763892980301933e-9,0.0037953921373555235,-1.2528542983790664e-5,-2.3307936469979733e-9,0.0037956913857025054,-1.2793157015980988e-5,-1.8305356927816436e-9,0.003796132776286854,-1.3071563213552118e-5,-1.3050406169510527e-9,0.0037967017325761278,-1.328280143626571e-5,-9.077926254452141e-10,0.0037973411548898497,-1.3364516232244082e-5,-7.568234874396928e-10,0.0037979727650269374,-1.3297561018064426e-5,-8.881042448926196e-10,0.003798527090663047,-1.3109356495992466e-5,-1.2492122368724608e-9,0.003798964917021712,-1.28570520619648e-5,-1.7313517826797332e-9,0.0037992820034057637,-1.2603783737617608e-5,-2.2145093402545987e-9,0.003799500926082306,-1.240063635168012e-5,-2.6017407417391375e-9,0.0037996585584883936,-1.2278587025970907e-5,-2.8344302677579545e-9,0.0037997952173949366,-1.2248205620853774e-5,-2.892780987975255e-9,0.0037999474748775944,-1.2303191954665917e-5,-2.789037696090718e-9,0.003800144171209063,-1.2424890429828608e-5,-2.5588855394347242e-9,0.0038004044225855666,-1.2586549203308632e-5,-2.2533402981175947e-9,0.003800736709459013,-1.2757180681021012e-5,-1.9313801867040904e-9,0.0038011386726849684,-1.2905234943333781e-5,-1.6529274004774604e-9,0.0038015976307220777,-1.300228941643676e-5,-1.4718298071475957e-9,0.0038020920655212837,-1.3026745702081325e-5,-1.4288825387251392e-9,0.0038025942999659027,-1.2967137471847075e-5,-1.5456250913598982e-9,0.0038030742779153713,-1.2824453504739554e-5,-1.8199956009474816e-9,0.0038035040835843223,-1.2613005619355985e-5,-2.224696148359336e-9,0.003803862725819495,-1.2359515273662385e-5,-2.7088896073266286e-9,0.0038041406058219682,-1.210021971862752e-5,-3.203654961905564e-9,0.003804343039903815,-1.187601536262798e-5,-3.6312222314006306e-9,0.0038044921992625045,-1.172572264151848e-5,-3.9178384073525195e-9,0.00380462650870891,-1.1677577510893996e-5,-4.010014190249887e-9,0.0038047960105914956,-1.1739750231113836e-5,-3.892553967922982e-9,0.0038050522524015824,-1.1892359741202971e-5,-3.603641811340095e-9,0.0038054328722651374,-1.2085474055587181e-5,-3.238495369877979e-9,0.003805944893983198,-1.224821847258572e-5,-2.931950879082715e-9,0.003806555314129275,-1.2310374852742212e-5,-2.8173999266934114e-9,0.003807197680863527,-1.2229146407934576e-5,-2.9759540232212596e-9,0.0038077950074467274,-1.2006673466743497e-5,-3.4031768325958983e-9,0.003808287639007238,-1.1687444632760447e-5,-4.014049779331443e-9,0.003808650970431554,-1.1338022030420527e-5,-4.681632012604156e-9,0.003808896131037573,-1.1022265614456972e-5,-5.284306129734353e-9,0.0038090582406506883,-1.0784417102233183e-5,-5.738002868905132e-9,0.0038091815513970188,-1.0643809594594406e-5,-6.006202185145872e-9,0.003809307974440942,-1.0597903969188504e-5,-6.094047127429888e-9,0.0038094707196667066,-1.062865600428072e-5,-6.036147477861492e-9,0.0038096919065528753,-1.070881560223071e-5,-5.8845641294033734e-9,0.003809982306819115,-1.0806887438420577e-5,-5.699365884995947e-9,0.003810341878982876,-1.0890883083801036e-5,-5.541482188826337e-9,0.003810760558410313,-1.0931470433055232e-5,-5.466698369518253e-9,0.003811219360612792,-1.0905036479831683e-5,-5.5198308461602985e-9,0.003811692191355198,-1.0796853778255012e-5,-5.728734249431048e-9,0.0038121488378866334,-1.0604042188757008e-5,-6.098714331775193e-9,0.0038125593293713445,-1.0337543772812268e-5,-6.608803289335694e-9,0.003812899313522184,-1.0022178567600895e-5,-7.211652084835195e-9,0.003813155569947561,-9.694053505107579e-6,-7.838435889364233e-9,0.003813330410478557,-9.395101236701062e-6,-8.409236512806301e-9,0.0038134436413059824,-9.165292526420089e-6,-8.847896464769259e-9,0.0038135310890633975,-9.033789295919845e-6,-9.098924795496566e-9,0.0038136392405932478,-9.010703935907942e-6,-9.143237881021444e-9,0.0038138161247166904,-9.081404582108e-6,-9.008993457535895e-9,0.003814099382214336,-9.205645720023213e-6,-8.773169562587337e-9,0.0038145038512597245,-9.323767143029389e-6,-8.549656250554983e-9,0.003815012795942145,-9.370894020933878e-6,-8.462137200027408e-9,0.0038155779477628124,-9.29673571143693E-06,-8.606350895718982e-9,0.0038161315938342274,-9.08397255339519e-6,-9.015063906599803e-9,0.0038166080185463146,-8.755923206484596e-6,-9.64348405426532e-9,0.003816965037754244,-8.368207760136484e-6,-1.0385219024877421e-8,0.003817195248806939,-7.988222530295059e-6,-1.1111520776134655e-8,0.0038173229340541176,-7.673167559394442e-6,-1.1713278449963451e-8,0.0038173910001939285,-7.456361956860252e-6,-1.212711923818663e-8,0.0038174460930694254,-7.344703089557365e-6,-1.234016488954878e-8,0.0038175278039535875,-7.323953104584782e-6,-1.2379836417372083e-8,0.00381766349450458,-7.3667834734719346E-06,-1.2298441630227018e-8,0.003817867345920316,-7.44006181186134e-6,-1.2159268639340678e-8,0.003818141527292887,-7.510114938000029e-6,-1.2026573341010378e-8,0.003818477933177015,-7.546220680736763e-6,-1.1958946292781465e-8,0.003818859819405176,-7.523169308927341e-6,-1.2004439996582582e-8,0.0038192634063506886,-7.4236603910782554e-6,-1.2196000644852678e-8,0.0038196599709800997,-7.2408663983656445e-6,-1.254657877456703e-8,0.003820019070571289,-6.980898470168708e-6,-1.3044426574530458e-8,0.0038203132898458427,-6.664287919255013e-6,-1.3650268900585339e-8,0.0038205242460868597,-6.325154432293589e-6,-1.4298887743684189e-8,0.0038206486164603457,-6.006817141678243e-6,-1.4907506500728048e-8,0.0038207020750147184,-5.75354803338733e-6,-1.5391558345619086e-8,0.0038207189146382747,-5.599839594091006e-6,-1.568521212544733e-8,0.0038207461938191602,-5.560151445206347e-6,-1.5760970711142652e-8,0.00382083315281559,-5.622636517693993e-6,-1.5641635859755003e-8,0.003821018492077559,-5.749455228146534e-6,-1.5399662200224305e-8,0.0038213190875863523,-5.884391306755396e-6,-1.5142562499287096e-8,0.0038217235693960125,-5.966361142703782e-6,-1.4987076158289204e-8,0.0038221931563597426,-5.9456270845393625e-6,-1.502819170366169e-8,0.0038226704818977797,-5.798272337779563e-6,-1.531149257821805e-8,0.0038230947974088572,-5.5340664292121286e-6,-1.581812655956149e-8,0.0038234191450172406,-5.194116998158923e-6,-1.6469310260958883e-8,0.003823623312951976,-4.838285790666961e-6,-1.7150435861376128e-8,0.0038237175482825378,-4.526986941152714e-6,-1.7745939341755873e-8,0.0038237362016777052,-4.3046651521168036e-6,-1.8170927741837015e-8,0.003823725137708133,-4.1908453164058315e-6,-1.8388262055022257e-8,0.003823728754133948,-4.180212251173304e-6,-1.8408322336149633e-8,0.0038237809830387044,-4.2490079943162265e-6,-1.8276693046141356e-8,0.0038239015028385787,-4.363551982793333e-6,-1.8057833412152605e-8,0.003824095946593768,-4.487740674388706e-6,-1.7820751134813358e-8,0.003824358126063857,-4.588281903972761e-6,-1.7629039709488436e-8,0.0038246727136478013,-4.637862217435199e-6,-1.753487003336477e-8,0.003825017627068585,-4.61711276381841e-6,-1.7575256806811815e-8,0.003825366118825118,-4.516259894351772e-6,-1.7768895996776932e-8,0.0038256891088083935,-4.336919177129825e-6,-1.8112701958105336e-8,0.0038259584950023394,-4.093846046758095e-6,-1.8578421203903003e-8,0.00382615197722384,-3.815735474025295e-6,-1.9111084395452904e-8,0.0038262592364493595,-3.543489200549398e-6,-1.963234108463913e-8,0.0038262880282502877,-3.3242349858685718e-6,-2.005195595532296e-8,0.0038262672917729517,-3.200584377536259e-6,-2.0288421016364784e-8,0.0038262439982333636,-3.197318624244381e-6,-2.029444817156697e-8,0.003826272400189211,-3.3105522427901474e-6,-2.0077656752741834e-8,0.0038263982363601133,-3.505059768382942e-6,-1.9705603558615896e-8,0.003826643866615569,-3.7224637285441357e-6,-1.929005491723827e-8,0.003827000550067141,-3.897808129259171e-6,-1.8955276671465806e-8,0.0038274307773840765,-3.9781801362031975e-6,-1.8802446818552187e-8,0.0038278791501668245,-3.936838386802747e-6,-1.8882656721060616e-8,0.003828287511464482,-3.7789936758587133e-6,-1.91858484343628e-8,0.003828609599833306,-3.538639788532877e-6,-1.9646859993872794e-8,0.0038288214789188135,-3.2682591437941436e-6,-2.01651251887211e-8,0.0038289254924217973,-3.0247269062595245e-6,-2.0631684713590868e-8,0.0038289472814131997,-2.855414110560565e-6,-2.0955834728401942e-8,0.0038289273259179074,-2.788188187669053e-6,-2.108429624581785e-8,0.0038289100096469695,-2.827593307999e-6,-2.100851341943847e-8,0.0038289336504991763,-2.957270847791984e-6,-2.0759969177050435e-8,0.0038290239989857604,-3.1466075062872564e-6,-2.0397397678011425e-8,0.0038291919363631554,-3.358735621529485e-6,-1.9991428033826533e-8,0.0038294345412146105,-3.5575484015966483e-6,-1.9611153660184545e-8,0.0038297379974115684,-3.7126062375014595e-6,-1.931477643950267e-8,0.0038300809546290265,-3.8019422327944494e-6,-1.9144289526878937e-8,0.003830437556664625,-3.813471476213471e-6,-1.9122815383613343e-8,0.0038307800423785735,-3.7458453013279217e-6,-1.925296167705247e-8,0.0038310813355700818,-3.6092600087004904e-6,-1.951522260747604e-8,0.003831318289772106,-3.4261620143933223e-6,-1.9866570427390518e-8,0.0038314761727888578,-3.2310651372663914e-6,-2.024078705408704e-8,0.003831554328173983,-3.067891478985199e-6,-2.0553606536838275e-8,0.00383157155253598,-2.9829338185445362e-6,-2.071629056719002e-8,0.0038315679388297268,-3.0127134004410304e-6,-2.0658964500687748e-8,0.0038315991481782685,-3.1692879484097765e-6,-2.0358751628086406e-8,0.0038317214021556132,-3.429727904878386e-6,-1.9859827008455862e-8,0.0038319713636641617,-3.7377031114383478e-6,-1.9270251199510938e-8,0.003832350581616624,-4.0199454376947184e-6,-1.8730381252591345e-8,0.003832823444733821,-4.211063811726861e-6,-1.8365375552540856e-8,0.0038333298168283644,-4.2746105018214276e-6,-1.82449115700899e-8,0.0038338051698647065,-4.211439514210527e-6,-1.8367216874901712e-8,0.003834198761806769,-4.0546278942909735e-6,-1.8668806860764246e-8,0.003834484151940069,-3.856273197654131e-6,-1.9049773936193798e-8,0.0038346613147808603,-3.6724518049993973e-6,-1.940260611015573e-8,0.0038347524550533677,-3.550605899014387e-6,-1.9636361789940677e-8,0.0038347942577808274,-3.52127028068912e-6,-1.969253972068335e-8,0.0038348288874075678,-3.5944825007219915e-6,-1.9551978029488838e-8,0.0038348954913967792,-3.7604912766397788e-6,-1.9233502467926943e-8,0.0038350235792819626,-3.9939514459539405e-6,-1.8785861778853742e-8,0.0038352291926199416,-4.260277158951203e-6,-1.8275496622939114e-8,0.003835514073341714,-4.522523088560736e-6,-1.7773291753942183e-8,0.0038358673369616493,-4.7473979554075516E-06,-1.7343025332758908e-8,0.0038362687210526454,-4.9095732722181525e-6,-1.7033139263666595e-8,0.00383669236799276,-4.99408908331157e-6,-1.6872194841765404e-8,0.003837110381916312,-4.997253315309627e-6,-1.6867206012024054e-8,0.0038374959397268127,-4.926686817006647e-6,-1.7003556999435392e-8,0.003837826168240292,-4.800973729438346e-6,-1.724561889505605e-8,0.0038380852198412027,-4.64897087800454e-6,-1.7538006826362915e-8,0.0038382680055769084,-4.508244405378731e-6,-1.780856000998818e-8,0.0038383845372422826,-4.4213473667315845e-6,-1.7975542156029803e-8,0.0038384635487548452,-4.428331072852901e-6,-1.7962111992879813e-8,0.003838552412999034,-4.554891468079644e-6,-1.7719129920892407e-8,0.003838709449637709,-4.79857611780019e-6,-1.7251579776228027e-8,0.003838986727658379,-5.120008018211622e-6,-1.6635275122453434e-8,0.0038394080255532118,-5.448208410521412e-6,-1.6006525398447498e-8,0.0038399539523913803,-5.703228860578149e-6,-1.5518689679738132e-8,0.003840565607656355,-5.826728491288216e-6,-1.5283563189269852e-8,0.0038411666084649057,-5.803303992373885e-6,-1.5330502316579828e-8,0.003841690669226006,-5.6615015185918996e-6,-1.5604511736937722e-8,0.0038421002535852433,-5.457713918832178e-6,-1.5997183329700725e-8,0.0038423907809453407,-5.254822630049416e-6,-1.6387728287251544e-8,0.003842584084612968,-5.1054363205735894e-6,-1.6675159725889587e-8,0.0038427176193724898,-5.043044755021766e-6,-1.6795248365588627e-8,0.003842834018332966,-5.07989312250766e-6,-1.6724578044920652e-8,0.003842972942410085,-5.209054269116863e-6,-1.6476567824802356e-8,0.0038431654789848045,-5.4086399567047076e-6,-1.60933997922233e-8,0.00384343077449617,-5.647036470412883e-6,-1.563595510392797e-8,0.00384377466746861,-5.888566057774086e-6,-1.5172890552403953e-8,0.003844190175581018,-6.098988812967744e-6,-1.477000694122479e-8,0.0038446595948861905,-6.250255466342545e-6,-1.4481091439427506e-8,0.003845157818995818,-6.324023724179862e-6,-1.4341201409106802e-8,0.0038456562996112983,-6.313615647304992e-6,-1.4362989566193652e-8,0.003846127011783707,-6.224437602563978e-6,-1.4535971378501742e-8,0.003846546039512686,-6.073206328661482e-6,-1.4828020425045514e-8,0.0038468967151338742,-5.886318244836747e-6,-1.518844046641186e-8,0.0038471724104394123,-5.6974965543184785e-6,-1.5552409101517088e-8,0.0038473791476006172,-5.544524492413738e-6,-1.5847232591313744e-8,0.0038475379016441485,-5.464345014145458e-6,-1.6001824499551356e-8,0.0038476855030219305,-5.485613097100651e-6,-1.596112434254084e-8,0.003847871879727775,-5.6186931393504005e-6,-1.5705383768277254e-8,0.0038481508803807564,-5.845389848453475e-6,-1.526986177286528e-8,0.003848563503714657,-6.114171536753636e-6,-1.4753886498476955e-8,0.0038491178160156275,-6.348715588209728e-6,-1.4304328128888127e-8,0.0038497770085141143,-6.472740813382431e-6,-1.4067840281603289e-8,0.0038504673064347367,-6.441502007513236e-6,-1.4130328256331074e-8,0.0038511053849232322,-6.261082594443713e-6,-1.4479857491646347e-8,0.003851629844832358,-5.983091492067725e-6,-1.5016874116127136e-8,0.003852018859395578,-5.680152288202065e-6,-1.5601434430578248e-8,0.0038522882875718684,-5.418923444947771e-6,-1.6105201466218447e-8,0.0038524776393092323,-5.243503092060938e-6,-1.644339124890214e-8,0.0038526343526436983,-5.171293042120779e-6,-1.658266798991624e-8,0.0038528022610099396,-5.196803821713961e-6,-1.6533754071038998e-8,0.003853015203081441,-5.2983925912731155e-6,-1.6338444310091512e-8,0.003853294442269686,-5.444945618229092e-6,-1.6056762373860484e-8,0.0038536482567425854,-5.601504835855946e-6,-1.5756133822008962e-8,0.0038540726814287585,-5.7339517789242305e-6,-1.550233250246981e-8,0.0038545530770026947,-5.813032433141409e-6,-1.535167747524828e-8,0.003855066511348219,-5.817774971569551e-6,-1.5344433001374196e-8,0.0038555849763886965,-5.738119863076067e-6,-1.5499788248752717e-8,0.0038560793166990247,-5.576384824864866e-6,-1.5813120373490353e-8,0.0038565234608473496,-5.347216994734051e-6,-1.6256150387493468e-8,0.0038568984147355433,-5.075979025649893e-6,-1.678004601450871e-8,0.00385719557764678,-4.795731754718215e-6,-1.7321162029551486e-8,0.0038574190570229696,-4.543041028615571e-6,-1.780903983008837e-8,0.003857586762326891,-4.352859428110214e-6,-1.817625138390654e-8,0.003857730049101876,-4.252572787910336e-6,-1.8369938134093778e-8,0.0038578912513364937,-4.255213948707043e-6,-1.8364992404288677e-8,0.003858117874957074,-4.3525404651654585e-6,-1.8177456727680517e-8,0.003858452354547486,-4.510210597999658e-6,-1.7873784612501723e-8,0.003858917791777117,-4.669051428707108e-6,-1.756829129472984e-8,0.003859503672194377,-4.756979406824098e-6,-1.7400082133742694e-8,0.003860160107605068,-4.712384004790362e-6,-1.7487936966225806e-8,0.0038608091664962376,-4.510570068775836e-6,-1.7879323414882926e-8,0.003861372398538454,-4.177424357879907e-6,-1.8524047943606895e-8,0.003861800506333025,-3.7795425476321384e-6,-1.9293349565570984e-8,0.0038620880164654562,-3.396288792625095e-6,-2.0033913711143205e-8,0.003862267166860147,-3.0911799396654256e-6,-2.062317555474824e-8,0.0038623893494130436,-2.8966628210158406e-6,-2.099867596807234e-8,0.003862506563495998,-2.8140990119499413e-6,-2.115798768293966e-8,0.0038626598321244918,-2.822389550608056e-6,-2.114198102596278e-8,0.003862874873005275,-2.8882527356427605e-6,-2.1014973901108832e-8,0.003863162336153394,-2.9744902195046028e-6,-2.0848814677809523e-8,0.0038635199304515298,-3.045533830271848e-6,-2.0712205478631623e-8,0.0038639348992436243,-3.0710234770790767e-6,-2.066378398501029e-8,0.0038643864355204357,-3.028367117469868e-6,-2.0747147455070232e-8,0.00386484822728367,-2.904831494192115e-6,-2.0986801911394604e-8,0.0038652914752601592,-2.699236644680084e-6,-2.1384920240420773e-8,0.003865688624510196,-2.4228755743300013e-6,-2.191962018272638e-8,0.00386601767419727,-2.0990064949875313e-6,-2.2545976090700474e-8,0.003866266452299767,-1.760409030734062e-6,-2.3200715561079226e-8,0.0038664359843247702,-1.4449098341719433e-6,-2.3810796904036255e-8,0.0038665420780329414,-1.1892409375748905e-6,-2.4305217895457498e-8,0.003866614450261009,-1.0220808697119544e-6,-2.4628464023641513e-8,0.0038666931331427633,-9.574329517630934e-7,-2.4753373068809092e-8,0.00386682224894407,-9.894664267422647e-7,-2.469119648990868e-8,0.0038670414158975728,-1.0900193002419434e-6,-2.449647640784153e-8,0.0038673755149895308,-1.2103925169421118e-6,-2.4263553007702945e-8,0.0038678247276590877,-1.2892296045959293e-6,-2.4111252377403624e-8,0.003868358444959499,-1.267252656795297e-6,-2.4154311249935473e-8,0.0038689178723244452,-1.106609395965305e-6,-2.446591385034712e-8,0.0038694306364283385,-8.077989637281885e-7,-2.504494355576824e-8,0.0038698345342124824,-4.141703486132289e-7,-2.5807311711834674e-8,0.003870099809101716,1.7314109784301966e-9,-2.661245619101961e-8,0.0038702378083155316,3.6458720020279093e-7,-2.7314567339474627e-8,0.0038702920854368386,6.214663267685033e-7,-2.7811317375819918e-8,0.0038703190910244194,7.53858335647063e-7,-2.8067074676155508e-8,0.00387036974897286,7.748010931081934e-7,-2.8107228302703305e-8,0.0038704788581488724,7.175311052953002e-7,-2.7996153658333026e-8,0.0038706626331334653,6.232083040671878e-7,-2.781347285744613e-8,0.0038709211656908133,5.318687125353667e-7,-2.7636609917695287e-8,0.003871242513436442,4.772284502188831e-7,-2.753078648423058e-8,0.003871606525933271,4.841804967947889e-7,-2.754418615260003e-8,0.0038719879135084533,5.675785755217659e-7,-2.7705577960566147e-8,0.003872358880346966,7.314004543716178e-7,-2.8022675148351287e-8,0.0038726919022138077,9.680249185641712e-7,-2.8480732932027746e-8,0.003872963138652044,1.2579586782204766e-6,-2.9042030043767234e-8,0.00387315657601737,1.5708285211382788e-6,-2.9647789466682646e-8,0.0038732683373289547,1.86855923238929e-6,-3.0224309921934445e-8,0.0038733099271485473,2.1112153111972303e-6,-3.069424612561177e-8,0.003873308852725411,2.2650543922665764e-6,-3.0992188082449424e-8,0.0038733053736022243,2.3111642765606837e-6,-3.108140596859698e-8,0.003873345192169577,2.2521788410355123e-6,-3.0966904370240415e-8,0.0038734693367986866,2.1146262125177263e-6,-3.0700024716839653e-8,0.003873703593536369,1.9454980220390796e-6,-3.037183659191588e-8,0.0038740502205765353,1.8030645268901052e-6,-3.009534652539585e-8,0.003874484463380578,1.7433559304306285e-6,-2.997927136727451e-8,0.003874957745425761,1.805067475563303e-6,-3.009872427079351e-8,0.0038754081819814224,1.9969121911983876e-6,-3.0470633717663e-8,0.0038757768904046563,2.2921729176794824e-6,-3.104314330933098e-8,0.0038760255596562514,2.6342273406501153e-6,-3.1706344087442033e-8,0.003876148467003275,2.953007064522305e-6,-3.232426651598912e-8,0.003876173208269964,3.1867247516892045e-6,-3.2777089184574225e-8,0.0038761496228379723,3.299682974732298e-6,-3.2995681880150156e-8,0.0038761325461103228,3.2890272755367357e-6,-3.297463097922817e-8,0.003876166403606068,3.179714693762658e-6,-3.276239593634084e-8,0.003876276896591104,3.0126859225590633e-6,-3.243833774524097e-8,0.0038764701624275557,2.8325579269208208e-6,-3.208888404389721e-8,0.0038767365992111737,2.6787515873070964e-6,-3.1790385133102694e-8,0.003877056148306675,2.580816495240054e-6,-3.160009687833867e-8,0.003877403029010765,2.556826343211539e-6,-3.1553084495681475e-8,0.0038777493008821016,2.613289973686861e-6,-3.166203618942354e-8,0.0038780675614554605,2.745446505360736e-6,-3.191780672517262e-8,0.003878333476381656,2.937524412643369e-6,-3.2289889347489e-8,0.0038785287779384415,3.1632353044676755e-6,-3.2727348319001116e-8,0.0038786449743421613,3.38733667833281e-6,-3.3161835770498974e-8,0.0038786873128192818,3.569409484611795e-6,-3.351491898098499e-8,0.003878677591593657,3.6707118908738144e-6,-3.371139093728882e-8,0.003878653651155005,3.663736005572876e-6,-3.369782934114989e-8,0.003878663611183559,3.5420997935283253e-6,-3.346179770353897e-8,0.003878754731082063,3.3267106762652564e-6,-3.304380167421774e-8,0.003878959662882301,3.0642480397399228e-6,-3.2534349810315585e-8,0.0038792851193151815,2.8166766000497898e-6,-3.2053637071171815e-8,0.003879707781335941,2.644580007151263e-6,-3.171924924585675e-8,0.003880179414535661,2.590044261113597e-6,-3.161296170025512e-8,0.003880639462395093,2.664856929841553e-6,-3.175779169109812e-8,0.003881030963909623,2.847441295081661e-6,-3.211196330829822e-8,0.003881315132026455,3.088989773401876e-6,-3.258074793403881e-8,0.003881480673019954,3.3267950065992406e-6,-3.304234350010906e-8,0.0038815453906210946,3.500934082932849e-6,-3.33803219040278e-8,0.0038815497710628015,3.5694288741531944e-6,-3.3513127109619604e-8,0.003881544796778198,3.5173837589184617e-6,-3.341184114435914e-8,0.003881578212321525,3.3577257039687044e-6,-3.310159999772678e-8,0.0038816837406748395,3.1243817248589497e-6,-3.264830861127478e-8,0.0038818760151617553,2.8614164265762064e-6,-3.213752525507882e-8,0.0038821512694009203,2.612341272483004e-6,-3.165370238768937e-8,0.0038824917692874394,2.4124461107722537e-6,-3.1265314802538124e-8,0.003882871480346175,2.2849072067360234e-6,-3.1017329356398934e-8,0.0038832611824149987,2.2398928027330586e-6,-3.0929494207351274e-8,0.0038836323245214632,2.275318774487282e-6,-3.099781618751069e-8,0.0038839597921307414,2.378108423025778e-6,-3.119699030134757e-8,0.0038842242152507703,2.5254286212354412e-6,-3.148275781095068e-8,0.0038844144663355965,2.686059250390416e-6,-3.179451894543604e-8,0.0038845306688387576,2.822639547206788e-6,-3.2059675183163195e-8,0.003884587357003466,2.8959475224504465e-6,-3.220196455639171e-8,0.0038846153737523,2.8722310269464106e-6,-3.21557550736718e-8,0.003884660056959134,2.7333387608771316e-6,-3.18857668919105e-8,0.0038847732762158013,2.4869046599035173e-6,-3.1406851357082614e-8,0.0038849991252745794,2.1712642698410145e-6,-3.0793495921892944e-8,0.0038853574442500984,1.8496451423368823e-6,-3.016850650976043e-8,0.0038858330515733975,1.5925789224385644e-6,-2.9668865383990577e-8,0.003886377556622482,1.4547566015723252e-6,-2.940082528056271e-8,0.0038869241473787107,1.4569552475180457e-6,-2.9404819127186324e-8,0.0038874085176017156,1.5809669809562609e-6,-2.9645564220367717e-8,0.003887786800305342,1.7780034980890623e-6,-3.002832302171855e-8,0.0038880447159318995,1.9850173646662214e-6,-3.0430573951043864e-8,0.0038881971924163384,2.1420596256770285e-6,-3.073574438290413e-8,0.003888280961175994,2.205781072292864e-6,-3.085948449380518e-8,0.0038883435694981065,2.1568374784550173e-6,-3.076410840731744e-8,0.0038884319296096136,2.0009593416802778e-6,-3.0460718017368735e-8,0.00388858281744708,1.7646673454508626e-6,-3.000089846925649e-8,0.003888816937092785,1.487387634284406e-6,-2.9461380448588014e-8,0.003889137213009564,1.2122368285186793e-6,-2.8926083312790018e-8,0.0038895308769200843,9.77741933194379e-7,-2.8469964105098837e-8,0.0038899740437511265,8.120453633245923e-7,-2.81477220260484e-8,0.003890437171818333,7.300902557734322e-7,-2.7988343358411724e-8,0.0038908900772970704,7.333723847624609e-7,-2.7994672649499975e-8,0.0038913058202770783,8.11313345377628e-7,-2.8146131740211625e-8,0.003891663485624368,9.432958331578632e-7,-2.8402680159512044e-8,0.0038919502946732623,1.1008399990349611e-6,-2.8708996787877187e-8,0.0038921635340459903,1.2499486900889057e-6,-2.8998973546822423e-8,0.0038923125934744473,1.3541502616078596e-6,-2.9201603267134142e-8,0.0038924208408559866,1.379197734291158e-6,-2.9250157793629576e-8,0.0038925260361622285,1.3003034856014153e-6,-2.909634192665132e-8,0.0038926769630940033,1.1115916402400212e-6,-2.8728743103664676e-8,0.0038929238963934187,8.34996763450161e-7,-2.819013439953649e-8,0.003893302729372596,5.229491681716229e-7,-2.7582633768285374e-8,0.0038938176635446077,2.486270920040773e-7,-2.704868519022275e-8,0.0038944323474479204,8.290889866841129e-8,-2.6726217478885122e-8,0.0038950779585628413,6.71542862886964e-8,-2.6695708784190685e-8,0.0038956768103849595,1.9679611586948285e-7,-2.694825472718397e-8,0.003896169311776245,4.2495370109331924e-7,-2.73925766726845e-8,0.003896530677936019,6.822594553111313e-7,-2.7893606935094835e-8,0.0038967721729981984,9.007324311420936e-7,-2.8318972956552194e-8,0.003896930972109137,1.0312737312306008e-6,-2.8573056292209646e-8,0.0038970560356940956,1.0512333616440805e-6,-2.8611714898809007e-8,0.0038971954492596143,9.637576168076825e-7,-2.84410251401411e-8,0.0038973875128366286,7.922909732076531e-7,-2.8106623400673385e-8,0.003897655773663217,5.73039745366953e-7,-2.7679078820458593e-8,0.0038980074203048315,3.470975623162463e-7,-2.723855936562174e-8,0.003898434383602654,1.532557749678879e-7,-2.686076811069166e-8,0.003898916483642837,2.2273778031217942e-8,-2.6605698033749048e-8,0.003899425869944706,-2.6879705272445377e-8,-2.651026260606674e-8,0.003899931946443452,1.135752503116599e-8,-2.658517606455315e-8,0.003900405988380751,1.2952483923987927e-7,-2.6815784333920333e-8,0.0039008248607193337,3.0902597073996624e-7,-2.7165815642283763e-8,0.0039011736945926885,5.228355224148576e-7,-2.7582659172522265e-8,0.003901447733469793,7.385703341824681e-7,-2.800327930437387e-8,0.0039016535931530446,9.218576909926763e-7,-2.8360689234556944e-8,0.003901810063641041,1.0402342282423203e-6,-2.8591513682344532e-8,0.0039019482346590566,1.068114437545263e-6,-2.8645727584383664e-8,0.0039021099156309434,9.933162871447647e-7,-2.8499486010026745e-8,0.0039023425147539973,8.245733393134014e-7,-2.816985246159411e-8,0.0039026886667243655,5.973876226969504e-7,-2.7726207946250197e-8,0.0039031709184319144,3.732053312467776e-7,-2.728856993304565e-8,0.003903776436955178,2.2643689124575264e-7,-2.7002203145251322e-8,0.0039044517336320776,2.1908852626009318e-7,-2.6988107235954432e-8,0.0039051160269753435,3.7343990320735743e-7,-2.728970832405026e-8,0.0039056904602020087,6.597257455398579e-7,-2.7848816986833218e-8,0.0039061274952976715,1.008182754458275e-6,-2.8529159419230002e-8,0.003906424029832539,1.337864454440272e-6,-2.917267690733211e-8,0.0039066143239121455,1.584673185538172e-6,-2.9654276855512307e-8,0.003906751629333246,1.7160417124478927e-6,-2.991045051383723e-8,0.003906889981347287,1.7312807173328777e-6,-2.993987957694521e-8,0.003907072257425082,1.6535639424178371e-6,-2.978777180552823e-8,0.003907324953080964,1.5196860399174986e-6,-2.9525923596991393e-8,0.003907657617907691,1.3710174126904936e-6,-2.9235136326534077e-8,0.003908064791635279,1.246627938272527e-6,-2.8991808582392042e-8,0.003908529121213566,1.178355331974727e-6,-2.8858246582644022e-8,0.0039090251008069895,1.1874723538953122e-6,-2.8876064406570793e-8,0.0039095231741027164,1.2828026766380307e-6,-2.9062457134925734e-8,0.003909993971965604,1.4602429723720258e-6,-2.940930205385144e-8,0.003910412376088683,1.7037257014122688e-6,-2.9885126077279e-8,0.003910760972899444,1.9875614267849495e-6,-3.043974711070414e-8,0.003911032543742426,2.279815827653438e-6,-3.1010855542352346e-8,0.003911231493909528,2.5463069029857515e-6,-3.153173238001942e-8,0.003911374222650876,2.7549910335127733e-6,-3.193972170951845e-8,0.003911488384327841,2.880624085469085e-6,-3.218531726661661e-8,0.003911610864352182,2.909667982481857e-6,-3.224183476086153e-8,0.003911783886839922,2.84536194505679e-6,-3.211546429333361e-8,0.003912048236733935,2.7121190655270843e-6,-3.1853969077637996e-8,0.003912432956737331,2.5569177610852085e-6,-3.1549408250500364e-8,0.003912942711842446,2.4439948046497946e-6,-3.13276712957956e-8,0.003913547494005578,2.439525781374463e-6,-3.1318405148871284e-8,0.003914182801008766,2.587612510786791e-6,-3.160796365905382e-8,0.00391476670682019,2.8876813198392386e-6,-3.219515496038958e-8,0.003915229878465214,3.288612511808708e-6,-3.297977441605243e-8,0.00391554262842195,3.707168304776008e-6,-3.3798756641249064e-8,0.003915722816780819,4.061134667377567e-6,-3.449114586943816e-8,0.0039158221519932715,4.297554871760769e-6,-3.495337435976911e-8,0.003915902612886247,4.403020028690837e-6,-3.5159304982510026e-8,0.003916016771863963,4.3972762305046315e-6,-3.51476057496457e-8,0.003916198069716032,4.319425094326008e-6,-3.499472431255641e-8,0.003916459596845121,4.214738888555488e-6,-3.4789167335719515e-8,0.003916797401300606,4.125457418511884e-6,-3.46135897824814e-8,0.003917195121291198,4.085545626385126e-6,-3.453456558879286e-8,0.003917628376812855,4.118078743411213e-6,-3.459741276197698e-8,0.00391806864547818,4.234057023541767e-6,-3.4823781820516536e-8,0.0039184868549933145,4.432100524385358e-6,-3.521100643460954e-8,0.003918856894454718,4.698942282664103e-6,-3.5733089149345645e-8,0.003919159062997544,5.010909292212568e-6,-3.634366398414867e-8,0.003919383180819294,5.336673361384431e-6,-3.698142096457321e-8,0.003919530829987342,5.641296545403175e-6,-3.757799607711368e-8,0.0039196162213828035,5.891218249778886e-6,-3.8067651883344666e-8,0.0039196653747344806,6.059652716046391e-6,-3.8397777275256785E-08,0.003919713456096689,6.131770978781817e-6,-3.853905013964011e-8,0.003919800276775679,6.108967573413839e-6,-3.849390802272054e-8,0.003919964045053333,6.011521522845613e-6,-3.830191792649171e-8,0.003920233494230299,5.878730153642338e-6,-3.804014811232711e-8,0.003920618992780859,5.764983763374026e-6,-3.781547454419313e-8,0.00392110459247313,5.730010496430183e-6,-3.7745352062984805e-8,0.0039216448866342514,5.822802882578071e-6,-3.792614771435408e-8,0.00392217165582521,6.062441369382195e-6,-3.839540769990899e-8,0.003922612784897084,6.424343781374744e-6,-3.910483982583697e-8,0.003922918279510956,6.842549813656679e-6,-3.9924854655693004e-8,0.0039230801956615,7.231684285990491e-6,-4.068779460101494e-8,0.003923134148926395,7.5187772284920845e-6,-4.125047503163074e-8,0.003923141833425455,7.667435752105012e-6,-4.1541586012182924e-8,0.003923166269325025,7.683166138878378e-6,-4.1571999586433136e-8,0.003923253198934327,7.602234341381125e-6,-4.1412808153840096e-8,0.00392342418128479,7.474463541507354e-6,-4.1161593315289665e-8,0.003923678875818511,7.348774715809465e-6,-4.091417238620076e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json deleted file mode 100644 index 509a7d1..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_24.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":24000,"numberOfSamples":1000,"samples":[0.003924001349468574,7.264665173102422e-6,-4.0747989552475184e-8,0.003924366586169156,7.248790607297544e-6,-4.0715438046854016e-8,0.0039247455983737215,7.31449699975775e-6,-4.084288354023843e-8,0.003925109134008881,7.462510402409807e-6,-4.1131928535769936e-8,0.003925430619334403,7.681943579661476e-6,-4.156132990390201e-8,0.003925688916221978,7.9515663056217e-6,-4.208949033990723e-8,0.003925871139610513,8.241724001493012e-6,-4.26582543580377e-8,0.003925975343160025,8.517452558510482e-6,-4.319903585164052e-8,0.003926012408625573,8.743124708146312e-6,-4.364190844664137e-8,0.0039260062351111815,8.888393011087458e-6,-4.392721436513869e-8,0.0039259914819518545,8.934553769547599e-6,-4.401802379763859e-8,0.003926008601681654,8.87995541059872e-6,-4.391078722925618e-8,0.003926096603853184,8.742886424791559e-6,-4.364111335220435e-8,0.003926284700461693,8.560700555841224e-6,-4.328218871863738e-8,0.003926584419799495,8.38460458304358e-6,-4.293463839580567e-8,0.003926983982520055,8.27018419490559e-6,-4.270791978660203e-8,0.003927446933578442,8.26450952654458e-6,-4.269489056436631e-8,0.003927917035426422,8.392007583137403e-6,-4.294388907717355e-8,0.003928330548152765,8.643213090672838e-6,-4.343648270886796e-8,0.003928634404239271,8.97202431142347e-6,-4.4082022548759444e-8,0.003928804571353034,9.306016764539644e-6,-4.473798796749362e-8,0.003928855847415065,9.568840746130847e-6,-4.525415343428905e-8,0.0039288366735898165,9.705875342600683e-6,-4.552310678124801e-8,0.003928810708523999,9.70075387287824e-6,-4.5512697637589113e-8,0.003928834802404048,9.575566014901797e-6,-4.526632710582171e-8,0.003928943827175889,9.377534807333275e-6,-4.487669985208786e-8,0.003929146690245219,9.161289638700064e-6,-4.445102369531869e-8,0.003929431010766044,8.97479258527682e-6,-4.408344678591044e-8,0.003929771249439363,8.851942834798086e-6,-4.3840594450064106e-8,0.003930136299987928,8.810775413828423e-6,-4.375803213461219e-8,0.0039304949376361325,8.854733935909684e-6,-4.3842713182813283e-8,0.003930819251349883,8.97490756364095e-6,-4.4077307493303816e-8,0.003931086911330102,9.152169769274805e-6,-4.442436000944777e-8,0.0039312831240633185,9.359120650070548e-6,-4.4830096409770687e-8,0.003931402736278697,9.562353565431697e-6,-4.522888479978551e-8,0.0039314523679986994,9.725809891954073e-6,-4.554983213541918e-8,0.003931451821677968,9.81581544058732e-6,-4.572667330703574e-8,0.0039314335373014,9.807739373223678e-6,-4.5710846370490446e-8,0.003931438847422937,9.693139686684408e-6,-4.5485541526462294e-8,0.003931510540598468,9.485126741041124e-6,-4.507628154878644e-8,0.0039316827752822045,9.21922505098598e-6,-4.455269004539336e-8,0.003931971055312627,8.947933809120098e-6,-4.401789076476449e-8,0.0039323657307728825,8.729358784614993e-6,-4.358622919525109e-8,0.003932831731699162,8.612643855888081e-6,-4.335462841531593e-8,0.003933315344617792,8.62429738570606e-6,-4.337560654570439e-8,0.003933756715300976,8.759463349484685e-6,-4.363994931455601e-8,0.003934105106059232,8.981053856326873e-6,-4.407485811762412e-8,0.003934332913929343,9.227877438043526e-6,-4.4559891225405716e-8,0.0039344440871193175,9.430525068002884e-6,-4.4958286576969273e-8,0.003934473402796723,9.530858688927084e-6,-4.5155432327327116e-8,0.003934475863914978,9.498545685117723e-6,-4.509149078422063e-8,0.003934509718222492,9.33827824991407e-6,-4.47756142603218e-8,0.003934619792227327,9.085158588882537e-6,-4.427682786107174e-8,0.003934827415641757,8.791280140237335e-6,-4.369760258181166e-8,0.00393512933343696,8.510038014808986e-6,-4.31429928445453e-8,0.0039355035636141015,8.284081649552148e-6,-4.269695029529051e-8,0.003935918018543304,8.139406686077033e-6,-4.241070000822375e-8,0.003936338353846052,8.084775818140693e-6,-4.2301584302013366e-8,0.003936733445406277,8.114176353890525e-6,-4.235787766689351e-8,0.0039370785461212525,8.210197709692123e-6,-4.254541828860122e-8,0.003937356971767464,8.347130480599071e-6,-4.281369430236631e-8,0.003937561263758311,8.493567783692922e-6,-4.310094762045791e-8,0.003937694438031615,8.615002843389891e-6,-4.333926631812809e-8,0.003937771330134241,8.67725650150846e-6,-4.346131796842194e-8,0.003937819322870859,8.651508326884634e-6,-4.3410256470381495e-8,0.003937877058427044,8.521099894445721e-6,-4.3153137231452934e-8,0.003937989463885939,8.288931327634417e-6,-4.269550841092151e-8,0.003938198228981029,7.982475866423666e-6,-4.209131265757179e-8,0.003938529202136906,7.652421272823026e-6,-4.144024574779018e-8,0.003938981172624146,7.362348631112524e-6,-4.086748201679056e-8,0.003939521858698951,7.171057158621901e-6,-4.048891544782165e-8,0.003940094615197016,7.113880374154503e-6,-4.0374365707466556e-8,0.0039406342007793785,7.190918645244552e-6,-4.052432522098116e-8,0.003941085456845227,7.366953288287352e-6,-4.086966435709471e-8,0.003941417979926735,7.582297213206803e-6,-4.1292902967637985e-8,0.003941632550878733,7.769811582108233e-6,-4.1661704613367465e-8,0.0039417586573959,7.872367731094012e-6,-4.186332403044912e-8,0.00394184498935138,7.856147459827803e-6,-4.183089280710224e-8,0.003941946090056001,7.716963831159671e-6,-4.155595404739903e-8,0.003942108844751583,7.478721284531861e-6,-4.1085488184775086e-8,0.003942362280649743,7.1851264448118275e-6,-4.0505610055412035e-8,0.003942713056297738,6.887545188092401e-6,-3.9917635489093076e-8,0.003943147094181412,6.63285056822077e-6,-3.9414089140640513e-8,0.00394363576055283,6.45458746493619e-6,-3.906122521138246e-8,0.003944143851940386,6.3689698481875325e-6,-3.889108334065558e-8,0.003944636869159611,6.375238897636767e-6,-3.89021835862169e-8,0.003945086178514301,6.458758785510235e-6,-3.906566285644976e-8,0.003945471885644119,6.595087712929455e-6,-3.9333345409787816e-8,0.003945784062145488,6.75381682031183e-6,-3.96453240801719e-8,0.0039460231949269235,6.9018086924852714e-6,-3.993631138475404e-8,0.003946200484182494,7.0061699834473986e-6,-4.0141443325436696e-8,0.003946338123548155,7.037663514739489e-6,-4.020297398706976e-8,0.003946469030517169,6.975321308310946e-6,-4.007939202239149e-8,0.0039466347171631935,6.8125615268396335e-6,-3.9757548945000605e-8,0.003946879526314831,6.563781000662389e-6,-3.926572917290399e-8,0.003947240113576192,6.26832771088985e-6,-3.8681519815076635e-8,0.00394773162032693,5.987155767768718e-6,-3.8125213666258697e-8,0.00394833606959585,5.788678511154436e-6,-3.7731893344309e-8,0.0039490010315956,5.726070108611301e-6,-3.760663760887806e-8,0.003949653254363835,5.815841448021564e-6,-3.778221021701663e-8,0.003950222933085804,6.029784395114221e-6,-3.8203094717768544e-8,0.003950666763769117,6.305251283013329e-6,-3.874572335149639e-8,0.003950978997636163,6.567633107643007e-6,-3.926282625402561e-8,0.003951187946508848,6.753390037519353e-6,-3.9628897768472654e-8,0.003951342970045106,6.82499234587586e-6,-3.9769697357740485e-8,0.00395149899125544,6.775528812781524e-6,-3.9671369919487616e-8,0.003951703461040263,6.625121099539185e-6,-3.9373432374454456e-8,0.003951987858015527,6.412572497682793e-6,-3.8952382552237284e-8,0.003952363959429004,6.185216687773946e-6,-3.8501729618800614e-8,0.003952824318389738,5.9890392604355895e-6,-3.811248119847719e-8,0.003953346084383744,5.8605580191022866e-6,-3.7857015174201214e-8,0.003953896995412957,5.821583390244034e-6,-3.777860582122305e-8,0.003954442092751837,5.877359468380301e-6,-3.7887672658214384e-8,0.003954949781935346,6.017769412892624e-6,-3.816417373000497e-8,0.003955396289717578,6.220694202785564e-6,-3.856432318594815e-8,0.003955768174884203,6.456367672750993e-6,-3.902927598979735e-8,0.003956063179994125,6.691705169501888e-6,-3.949369249275251e-8,0.003956290051901221,6.894111093467348e-6,-3.989319559509603e-8,0.003956467854520423,7.034854759428582e-6,-4.017095218887658e-8,0.0039566249669400816,7.092436622888951e-6,-4.0284290088954386e-8,0.003956797478346305,7.056481487425291e-6,-4.021245059161304e-8,0.003957025994777186,6.932388600346256e-6,-3.996590300588929e-8,0.003957349414623954,6.7458410699163445e-6,-3.959537173887109e-8,0.003957794778545756,6.544498614818847e-6,-3.9195220973930975e-8,0.003958364489074411,6.392651543668574e-6,-3.889283923884582e-8,0.003959026190955713,6.355295837039837e-6,-3.881705762450065e-8,0.003959713978117959,6.473712946892012e-6,-3.904975388942963e-8,0.003960346658841707,6.743821961530491e-6,-3.958294960032686e-8,0.003960857575990237,7.112323350996538e-6,-4.031115186969541e-8,0.0039612197932018854,7.496174919039376e-6,-4.10699402100219e-8,0.003961452306299503,7.814588012843276e-6,-4.169936348567501e-8,0.003961606574536528,8.01530911676443e-6,-4.209596468724888e-8,0.003961744529834369,8.08439052342442e-6,-4.223205431160473e-8,0.003961919898203691,8.041055608842375e-6,-4.2145503385516964e-8,0.003962167934107929,7.92540646416268e-6,-4.1915471608097986e-8,0.003962502766954194,7.785608877629877e-6,-4.1637175222764884e-8,0.003962919504652272,7.667738377555936e-6,-4.140189174962666e-8,0.00396339860412415,7.6088866362392024e-6,-4.128330394764023e-8,0.003963911081389532,7.633028280277278e-6,-4.132919427751386e-8,0.003964423927548092,7.749152914604407e-6,-4.1557593105492124e-8,0.003964905318504584,7.951432583245587e-6,-4.1957026443146924e-8,0.003965329172806784,8.221199670866641e-6,-4.249046155503989e-8,0.0039656786145144665,8.530378408627668e-6,-4.310220299700377e-8,0.003965947990889918,8.845841392371245e-6,-4.37266017606286e-8,0.003966143368775138,9.134007815143316e-6,-4.429715430491004e-8,0.003966281763390242,9.365126081644348e-6,-4.475489492347632e-8,0.003966389432433808,9.517028569907252e-6,-4.50557398961551e-8,0.0039664994413490615,9.578380169243303e-6,-4.517691762130738e-8,0.003966648478154706,9.551562333274848e-6,-4.512279719134597e-8,0.003966872442131501,9.455213790585541e-6,-4.493010285476397e-8,0.003967200009096507,9.325645135291122e-6,-4.4670856835179115e-8,0.003967643942139405,9.215087087823338e-6,-4.4448923046119814e-8,0.0039681916280942,9.183905742556441e-6,-4.438445858297688e-8,0.003968799131557344,9.284666046934797e-6,-4.4582129386551373e-8,0.003969395714603861,9.540259293398974e-6,-4.508756258136944e-8,0.0039699037202130414,9.926237027984614e-6,-4.585222439096121e-8,0.003970268552470416,1.0371684773005795e-5,-4.673521137896835e-8,0.003970482142169558,1.078412203468818e-5,-4.755282003004367e-8,0.0039705843561092195,1.10860283048514e-5,-4.815115477383973e-8,0.003970642360386332,1.1241376583518066e-5,-4.845874452293147e-8,0.003970722821708415,1.125981504453911e-5,-4.8494689966727235e-8,0.0039708723071808566,1.11829441885822e-5,-4.834134805360363e-8,0.003971110919069601,1.1065211622363857e-5,-4.810650188240576e-8,0.003971435431608885,1.0958632735931508e-5,-4.7893216781566505e-8,0.003971826265812919,1.0903990546723049e-5,-4.778250186894762e-8,0.003972254586729742,1.0927283245886881e-5,-4.782624238951511e-8,0.003972688105211575,1.1039249843146977e-5,-4.8046116883982526e-8,0.0039730955939297884,1.1236386675066273e-5,-4.843545087392066e-8,0.00397345054557075,1.1502799362280447e-5,-4.8962807876693554e-8,0.003973734208169738,1.1812792318729848e-5,-4.9577158828296015e-8,0.003973937950405579,1.2134265111817801e-5,-5.021471558067026e-8,0.003974064679006379,1.2432918992578263e-5,-5.080734411592102e-8,0.003974128944467808,1.2676973960732623e-5,-5.129190491821449e-8,0.003974155556457899,1.2841827542246017e-5,-5.1619414061577866e-8,0.0039741767870729505,1.2914097734147498e-5,-5.1763003268766806e-8,0.003974228381508199,1.2894585117898373e-5,-5.1723840310494984e-8,0.0039743446740342315,1.2799778794775203e-5,-5.1534278839920305e-8,0.003974553031218095,1.2661651645222267e-5,-5.1257656952560386e-8,0.00397486770830553,1.252526192551265e-5,-5.0983665712715536e-8,0.003975283624309093,1.244306855380536e-5,-5.081702986908633e-8,0.003975771762776541,1.2464764616558008e-5,-5.085712444532777e-8,0.003976279358595454,1.2622668128129355e-5,-5.1168686224427466e-8,0.003976738806949802,1.2915806066879637e-5,-5.174997205879499e-8,0.00397708712480231,1.3300494013523065e-5,-5.251398213335525e-8,0.003977290708495544,1.3697307875515348e-5,-5.3302462984544026e-8,0.003977362035950759,1.4017395454687275e-5,-5.393846232144907e-8,0.003977355858695399,1.4196719691249908e-5,-5.429455632185751e-8,0.003977345605575303,1.4218583669657343e-5,-5.433755885903962e-8,0.003977394646971235,1.4112859234273654e-5,-5.412679978292305e-8,0.003977538120767945,1.3937040535825622e-5,-5.377637606636613e-8,0.003977780313015663,1.3753373811437281e-5,-5.3409789340420174E-08,0.0039781024005110955,1.361276026355333e-5,-5.312812805725196e-8,0.003978473023124186,1.3547849219766439e-5,-5.299644136530384e-8,0.003978857094370713,1.3572654477401475e-5,-5.304293291262342e-8,0.00397922161367756,1.3685187261991948e-5,-5.326404503945597e-8,0.0039795391090315735,1.387078103509612e-5,-5.363091484811033e-8,0.003979789799970764,1.4105237357237993e-5,-5.4095556401576257e-8,0.0039799632178153825,1.4357845076354077e-5,-5.45968922420498e-8,0.003980059500806607,1.4594673222991368e-5,-5.506737604277994e-8,0.003980090142970023,1.4782539911570218e-5,-5.5440930753357645e-8,0.003980077642195864,1.4893710156689642e-5,-5.566226817310781e-8,0.003980053468419345,1.4910803096605801e-5,-5.56965853216742e-8,0.0039800541106269635,1.4830983623911673e-5,-5.553787293347947e-8,0.0039801154418540406,1.466838142817004e-5,-5.5213797919344863e-8,0.003980266139921954,1.4453775388946017e-5,-5.478524269653043e-8,0.003980521287767714,1.4231023369268172e-5,-5.4339391697161045e-8,0.003980877353979621,1.4050315119139707e-5,-5.397640762167942e-8,0.003981309717837675,1.395868469966156e-5,-5.3790488944141864e-8,0.003981774090037387,1.3988628469092594e-5,-5.3846999457069773e-8,0.003982213281677193,1.4146764402475845e-5,-5.415961657859051e-8,0.003982570011449755,1.4406143821260008e-5,-5.467482526558627e-8,0.003982804131697453,1.47071498764841e-5,-5.527369286809923e-8,0.003982908778352366,1.4970992193698437e-5,-5.579891732093303e-8,0.003982916824397885,1.5124448073961797e-5,-5.6104337480320424e-8,0.003982891263406429,1.5126160410236833e-5,-5.610742482232311e-8,0.00398290215454356,1.4980743595872157e-5,-5.581730514030468e-8,0.0039830019202654705,1.4733222541316497e-5,-5.532354528930037e-8,0.003983211326857249,1.4448727937037265e-5,-5.4755680309660146e-8,0.003983520104257227,1.4189885389384998e-5,-5.423828496751849e-8,0.003983897259054235,1.4001826693159665e-5,-5.386125283385029e-8,0.003984303459136277,1.3907216352427944e-5,-5.366993275012876e-8,0.003984700579759181,1.3908279420985249e-5,-5.3669095525382856e-8,0.003985057207973846,1.399170223752423e-5,-5.3832563887307894e-8,0.00398535107067196,1.4133635001783242e-5,-5.411306762933109e-8,0.003985569881970607,1.4303771905497005e-5,-5.445033306625039e-8,0.0039857117052029475,1.4468652878353123e-5,-5.4777689929636526e-8,0.003985785248092382,1.4594817843348775e-5,-5.502840613731594e-8,0.003985809897015252,1.4652472383143383e-5,-5.514301337657362e-8,0.003985814826438397,1.4619974837042523e-5,-5.5078226609295487e-8,0.0039858363205629195,1.4488750116827408e-5,-5.481669944437828e-8,0.003985912714645442,1.426742833517886e-5,-5.4375274115178266e-8,0.003986077146685968,1.3983468945714063e-5,-5.380829619913038e-8,0.003986349418788184,1.3680607655818763e-5,-5.320267121504874e-8,0.003986729243878734,1.3411429492368585e-5,-5.266321054783875e-8,0.003987193368925278,1.3226052188088213e-5,-5.229014065094215e-8,0.0039876982347206835,1.3159498917999302e-5,-5.2153854337675876E-08,0.00398818833657533,1.3221106579292605e-5,-5.227358445765773e-8,0.003988608901007278,1.338916970518754e-5,-5.260647556617648e-8,0.003988920183252699,1.3613194193081244e-5,-5.3051916801022585e-8,0.003989109646982799,1.3824650626505712e-5,-5.347299765131535e-8,0.003989197746223967,1.3954767944424933e-5,-5.373215558025435e-8,0.003989233827788415,1.3954763566654355e-5,-5.373171638754063e-8,0.003989281800794039,1.3811236850979288e-5,-5.3444699852450874e-8,0.003989400134260441,1.3549823535973889e-5,-5.292209959911019e-8,0.003989624365284392,1.3225093106393183e-5,-5.227268643727621e-8,0.003989959279866753,1.290162083662521e-5,-5.1625249279043706e-8,0.0039903824814073756,1.2635093520500604e-5,-5.109093995112096e-8,0.00399085532254792,1.2460509228031144e-5,-5.0739748289693165e-8,0.003991335096141489,1.2389290014694273e-5,-5.0594703090057124e-8,0.003991784193685639,1.2412788238110021e-5,-5.063879306432595e-8,0.0039921750376531425,1.2508400657934924e-5,-5.082710027342623e-8,0.0039924916979013365,1.264552801312763e-5,-5.109866380876292e-8,0.003992729733420645,1.2790244411010073e-5,-5.138580639540977e-8,0.003992895505481774,1.2908774182592685e-5,-5.162109554086806e-8,0.003993005539841018,1.2970483448082949e-5,-5.1743325651077926e-8,0.003993085805853583,1.2951169554634605e-5,-5.170407528089941e-8,0.0039931702182065525,1.2837098930575677e-5,-5.1475750096119304e-8,0.003993297356816803,1.2629535465925717e-5,-5.106062222453551e-8,0.003993504537036869,1.2348458326471559e-5,-5.04982889205154e-8,0.00399381928261621,1.2033164964636035e-5,-4.9866956012253766e-8,0.003994250001187529,1.1737322154317254e-5,-4.9273662215669775e-8,0.0039947794474397376,1.1517572315967707e-5,-4.883161802180583e-8,0.003995364932969854,1.1417909076784898e-5,-4.8629022529340004e-8,0.0039959471867255245,1.145512467560501e-5,-4.8699907040692296e-8,0.003996465923696541,1.1611411554188564e-5,-4.9009176717670445e-8,0.003996876828671035,1.1837637422183225e-5,-4.9458966925161574e-8,0.003997163971009506,1.2066380201857806e-5,-4.991458667779847e-8,0.003997343759283495,1.2230228260355551e-5,-5.024110820721207e-8,0.003997459714537061,1.227962356731739e-5,-5.033913205513782e-8,0.0039975700174394516,1.2195246540345806e-5,-5.016966528746188e-8,0.0039977315793668896,1.199171433994848e-5,-4.9761614483588085e-8,0.003997985303974457,1.1711837911922054e-5,-4.920037428897476e-8,0.003998346858193554,1.1413566865496914e-5,-4.8601769213070115e-8,0.0039988053495900785,1.1154143067304714e-5,-4.808037527313077e-8,0.0039993293627035445,1.0976671983429418e-5,-4.7722620398013583e-8,0.003999877225762814,1.0902767894712806e-5,-4.7571985490559816e-8,0.004000407493370264,1.0931979187466173e-5,-4.762776490445662e-8,0.00400088668699902,1.1046120607170104e-5,-4.785368769200271e-8,0.0040012933178902805,1.1215681826101956e-5,-4.8190753288722657e-8,0.004001618824597613,1.140602944436198e-5,-4.856968419517292e-8,0.004001866716617343,1.1582292382143262e-5,-4.8920729394387654e-8,0.004002051089467816,1.1712900988527266e-5,-4.9180732644461024e-8,0.004002195134543225,1.1772393926335084e-5,-4.9298705411811596e-8,0.0040023296147842545,1.1744241358596293e-5,-4.9241438831947997e-8,0.004002490702025333,1.1624164492064202e-5,-4.9000150214148706e-8,0.004002716177242634,1.1423787492992013e-5,-4.859784391910101e-8,0.0040030390227214704,1.1173356864132723e-5,-4.8094833920023865e-8,0.004003478361347815,1.0920997712239193e-5,-4.7587334303852796e-8,0.004004029802038545,1.0725563863908767e-5,-4.719320099784125e-8,0.004004659792221574,1.0641953511935584e-5,-4.7022548424382676e-8,0.004005309358395405,1.0702231547952575e-5,-4.713991105371558e-8,0.004005909305357476,1.0900742430031743e-5,-4.7534332339053704e-8,0.004006402231050277,1.1192022790909333e-5,-4.8115061170983004e-8,0.004006761493609258,1.1504328555145381e-5,-4.8738556290387605e-8,0.004006998416788491,1.1762810600434922e-5,-4.925487801263246e-8,0.0040071557972175655,1.1911802199676452e-5,-4.955234189469917e-8,0.004007292492485376,1.1928068755813912e-5,-4.9584090451901684e-8,0.004007466154921649,1.182270536529946e-5,-4.9371962164986925e-8,0.004007719484345561,1.1633960677447274e-5,-4.8992235679285965e-8,0.004008072516982853,1.1415035698476774e-5,-4.855132546462214e-8,0.004008521247009628,1.1220739757355388e-5,-4.81591306861145e-8,0.004009041556486812,1.1095986552782165e-5,-4.790595409748483e-8,0.004009596684482728,1.1068126254001404e-5,-4.784699794194256e-8,0.004010146061004549,1.1144061978931795e-5,-4.799641499742937e-8,0.0040106533603855915,1.1311869844993711e-5,-4.833044905420133e-8,0.004011092236707525,1.1545566812726804e-5,-4.8796997573800546e-8,0.004011449171177877,1.1811239466230054e-5,-4.9327987188523245e-8,0.004011723764818403,1.2072971677857698e-5,-4.985134835693644e-8,0.00401192736389657,1.2297623888833959e-5,-5.0300619813788786e-8,0.004012080963416897,1.2458294160137046e-5,-5.06218316152855e-8,0.004012212952149902,1.2536886563441079e-5,-5.077857415701251e-8,0.004012356748830488,1.2526361690877996e-5,-5.075648134300845e-8,0.004012547921684051,1.2433048238960548e-5,-5.0567928963629637e-8,0.0040128199805693305,1.2278886932150372e-5,-5.025666471468604e-8,0.004013197985529161,1.2102470950470938e-5,-4.990002190519058e-8,0.00401369000353784,1.1956510006150005e-5,-4.960388878819715e-8,0.004014278532066863,1.1898883530667995e-5,-4.948472066423443e-8,0.0040149167491389135,1.197622246061075e-5,-4.963648586630433e-8,0.004015535619726837,1.2203997061740317e-5,-5.0090569001978953e-8,0.004016064005360639,1.2553240036393509e-5,-5.0789018255737813e-8,0.0040164548830214815,1.2954750430225737e-5,-5.1592962190804215e-8,0.004016703733644348,1.3322431746732769e-5,-5.232951731508461e-8,0.004016848431434354,1.3584310465564186e-5,-5.2854110685949694e-8,0.004016951977140229,1.3704978067918915e-5,-5.309550581731473e-8,0.00401707918422125,1.3690726517722423e-5,-5.3066050186417026e-8,0.004017278464444657,1.3580022117076173e-5,-5.284257367174307e-8,0.004017573349390648,1.3427603643939568e-5,-5.253461517336548e-8,0.004017962524787026,1.3289293461804937e-5,-5.2254123260796106e-8,0.004018424992325505,1.3210932934703492e-5,-5.2093339215260626e-8,0.0040189273729024705,1.3221997414880813e-5,-5.211190437947683e-8,0.0040194315062708425,1.3333214209773679e-5,-5.2331872879317006e-8,0.004019901334926071,1.3537385768781908e-5,-5.273915282943784e-8,0.00402030839443015,1.3812681913253474e-5,-5.3290015781132485e-8,0.004020635440219238,1.4127527132908653e-5,-5.392095666905157e-8,0.004020878035146411,1.4446146519830484e-5,-5.455996088115213e-8,0.004021044226821732,1.473392798977689e-5,-5.513737746601209e-8,0.00402115275112109,1.496191131793451e-5,-5.559493860655362e-8,0.004021230393628464,1.5110074592057919e-5,-5.589227823087387e-8,0.004021308993990323,1.5169566143298608e-5,-5.601133518705951e-8,0.004021422225284333,1.5144214158221058e-5,-5.595940175161358e-8,0.0040216019835709,1.505150937068162e-5,-5.57712373201424e-8,0.004021873939755527,1.4922916833095616e-5,-5.550989215428107e-8,0.0040222517467002885,1.4802621499919506e-5,-5.5264327043482085e-8,0.004022730175355548,1.4742845077977562e-5,-5.513999395696767e-8,0.00402327924617558,1.4793651408929851e-5,-5.5238179247849234e-8,0.004023843665981839,1.498685836194858e-5,-5.562340967782772e-8,0.004024352851506316,1.5318263529964064e-5,-5.62874975195311e-8,0.004024743118745088,1.573836892528872e-5,-5.7130821512435726e-8,0.004024984194842726,1.6162535861771282e-5,-5.7982877436069443E-08,0.004025094377176705,1.6501026274800637e-5,-5.866291758713605e-8,0.004025133037057492,1.6693810177365013e-5,-5.9050065212816505e-8,0.0040251747474465615,1.6730082192383597e-5,-5.912247029379822e-8,0.004025281332087344,1.6644195416193686e-5,-5.894897656672424e-8,0.004025485746450353,1.6495866969054968e-5,-5.864930998217878e-8,0.004025790429201538,1.634835179138792e-5,-5.8350370181822665e-8,0.0040261746462862255,1.6253223052331517e-5,-5.815584387978385e-8,0.0040266044641294775,1.624327250382378e-5,-5.813200951807451e-8,0.004027041638836209,1.633135361213576e-5,-5.8305293951082345e-8,0.00402745025711566,1.6512469372403883e-5,-5.866622925242898e-8,0.00402780134494779,1.6767326438795646e-5,-5.917637987828972e-8,0.004028075926393701,1.7066612366788847e-5,-5.977686171643531e-8,0.004028266748303052,1.7375686093179322e-5,-6.039784671300595e-8,0.004028378700267617,1.7659404592882538e-5,-6.096841423803015e-8,0.004028427921096438,1.7886793273255926e-5,-6.142604364033798e-8,0.00402843964084909,1.8035151508268353e-5,-6.172486403108444e-8,0.004028445012514573,1.809312331270539e-5,-6.184175008856881e-8,0.0040284773268235005,1.8062494703952662e-5,-6.177988665082503e-8,0.004028567910222432,1.7958723498241694e-5,-6.156990468255793e-8,0.004028741861400401,1.781021131030546e-5,-6.12686094634135e-8,0.0040290136622913525,1.765619786846825e-5,-6.095496322789188e-8,0.0040293826809504,1.754280016104753e-5,-6.07222216328837e-8,0.004029829124215082,1.751619084809753e-5,-6.066410876225836e-8,0.004030312256108125,1.7612020509539247e-5,-6.085324393616324e-8,0.004030774031389632,1.7841815454699297e-5,-6.131341293797681e-8,0.00403115142107213,1.8180564860966387e-5,-6.199433879515745e-8,0.0040313974300052735,1.8563852856182064e-5,-6.27659191383855e-8,0.004031503203472192,1.8902856758312773e-5,-6.344869780801121e-8,0.004031507215610012,1.9116091643266002e-5,-6.387812802255732e-8,0.004031481930153734,1.916242569246173e-5,-6.397118926916185e-8,0.004031503768949901,1.9055383830683572e-5,-6.375504333127174e-8,0.004031624504421274,1.885153534554923e-5,-6.334344369125224e-8,0.00403185885677837,1.8623798019755862e-5,-6.288296518438462e-8,0.004032189274944319,1.8436620157024645e-5,-6.250321630029159e-8,0.004032579178971542,1.83324637336343e-5,-6.228981683190497e-8,0.004032986090714059,1.8329161981569122e-5,-6.227911243671427e-8,0.0040333708125981456,1.8423493871162983e-5,-6.246522183995398e-8,0.004033702484811329,1.8596808258675e-5,-6.281112340841897e-8,0.0040339608469825575,1.882045266602357e-5,-6.325939983367222e-8,0.004034137070431829,1.906045203237547e-5,-6.374161530130195e-8,0.004034233855241526,1.928170635220029e-5,-6.41868612531973e-8,0.004034264876079334,1.9452018078757834e-5,-6.453000617107153e-8,0.004034253391531761,1.9546047063260236e-5,-6.47197441623075e-8,0.004034229755724816,1.9548977882390267e-5,-6.472596597020264e-8,0.004034227730682795,1.9459320969577683e-5,-6.454533452522716e-8,0.004034279865723162,1.9290186380915923e-5,-6.420383235003002e-8,0.004034412486171448,1.9068594732676885e-5,-6.375547510633614e-8,0.00403464093034948,1.8832637893526655e-5,-6.327679436677401e-8,0.004034965687074627,1.8626536313167505e-5,-6.285707244922939e-8,0.004035370034247165,1.8493819644007736e-5,-6.258465123000945e-8,0.004035819874790727,1.846886648562048e-5,-6.252971679787746e-8,0.004036266904185114,1.856732169763407e-5,-6.272465029492704e-8,0.0040366565598250765,1.8777113738250836e-5,-6.31455681508602e-8,0.0040369414612311345,1.9053783781087113e-5,-6.370271942688705e-8,0.004037098344333292,1.932539834606959e-5,-6.42504851948613e-8,0.004037141902942749,1.951083270094533e-5,-6.462457097034529e-8,0.004037125865169994,1.954813798447868e-5,-6.46995458547251e-8,0.004037125861820998,1.9419995141300983e-5,-6.444028053955575e-8,0.00403721048480607,1.9160768124473176e-5,-6.391602935018678e-8,0.004037416430514758,1.88403649270376e-5,-6.326771012194285e-8,0.0040377405727112705,1.853563684839144e-5,-6.265022145619625e-8,0.004038149143064464,1.8305856043064805e-5,-6.218312567891382e-8,0.004038594479970898,1.8181596820678142e-5,-6.192833669694351e-8,0.004039029805036155,1.8165835433560526e-5,-6.189230839848963e-8,0.004039418015136255,1.8241197474729e-5,-6.204049708155263e-8,0.0040397350446880215,1.837815198734788e-5,-6.231370568667206e-8,0.004039969999138671,1.8541650006683282e-5,-6.264136381327966e-8,0.004040124041563737,1.8695860404660215e-5,-6.295108921511804e-8,0.004040209074777056,1.8807706049100226e-5,-6.317591860236914e-8,0.004040246363654397,1.88500021655281e-5,-6.32607471793734e-8,0.004040264737547788,1.8804636954320954e-5,-6.316879237455187e-8,0.004040297831687618,1.866571824947087e-5,-6.288791561688243e-8,0.004040379958326903,1.844201983765977e-5,-6.243550964565625e-8,0.004040540705219954,1.8157672301950075e-5,-6.185990253089828e-8,0.004040799030115895,1.7850119174229367e-5,-6.123634554926798e-8,0.0040411581509778,1.7564868093298403e-5,-6.065660011340943e-8,0.004041602732207329,1.734741098407994e-5,-6.021277355052825e-8,0.0040420995762303815,1.7233639004230466e-5,-5.997796689164541e-8,0.004042602323436688,1.724067110935005e-5,-5.998756494201581e-8,0.00404305992163886,1.736012884995211e-5,-6.022533875758978e-8,0.004043427966196684,1.7555910433464828e-5,-6.061865961283453e-8,0.0040436810936756275,1.7768500926616962e-5,-6.104709566844615e-8,0.004043823230883101,1.7927149455153616e-5,-6.1367140862782e-8,0.004043891164479845,1.7968977540453174e-5,-6.145110341710769e-8,0.004043947176700689,1.7860007267002482e-5,-6.122984744605595e-8,0.0040440603521150744,1.760913353792817e-5,-6.072111082777755e-8,0.004044282997667049,1.726658843338252e-5,-6.002633777071843e-8,0.004044633306112802,1.6905912165610116e-5,-5.929416783466505e-8,0.0040450925842591984,1.6598297213721576e-5,-5.866858772554347e-8,0.004045616463144047,1.6391968202125593e-5,-5.824729428445154e-8,0.004046152091763345,1.630410509649094e-5,-5.80653572847142e-8,0.004046652760383014,1.6324348036651065e-5,-5.8102214711525505e-8,0.004047085929565268,1.6424100266681775e-5,-5.830035937199191e-8,0.004047435228495953,1.6566189179488793e-5,-5.8584786032397173e-8,0.004047698959744002,1.671216642566975e-5,-5.8877737365682856e-8,0.004047887444712365,1.6826943646276348e-5,-5.9108127517374904e-8,0.00404802049508203,1.6881670483517197e-5,-5.9217433706880595e-8,0.004048125273323472,1.6855947238255258e-5,-5.9164217502915826e-8,0.004048234127401434,1.674008799311883e-5,-5.8928701076803824e-8,0.004048381670060571,1.6537530470193916e-5,-5.851761039418674e-8,0.004048600436416601,1.6266746291805815e-5,-5.796802584768781e-8,0.004048914984056892,1.5961326425245878e-5,-5.734760338043135e-8,0.004049335282066074,1.566668088020222e-5,-5.674801447212363e-8,0.0040498513719114376,1.5432414454828066e-5,-5.626965875165331e-8,0.004050431921230339,1.5301075079280176e-5,-5.5998974280483204e-8,0.004051028668995067,1.5296083993458358e-5,-5.598395649797168e-8,0.004051586738790464,1.5412983005455173e-5,-5.62162478465142e-8,0.004052058328986434,1.5617600591062285e-5,-5.6627167195976384e-8,0.004052415758160085,1.5852514347711364e-5,-5.7100596870077054e-8,0.004052659913064241,1.6050494133565283e-5,-5.7500160816537554e-8,0.0040528214440387015,1.6151570852562244e-5,-5.7703907353645075e-8,0.004052953861013157,1.611931020329749e-5,-5.763746552942237e-8,0.004053119682835466,1.595162622613579e-5,-5.729612717276807e-8,0.004053373025435257,1.5682212292362576e-5,-5.6747852350428666e-8,0.004053744027610918,1.537106055446932e-5,-5.611410681536437e-8,0.004054230846152612,1.5086637935810276e-5,-5.553375453822118e-8,0.004054802304411898,1.488624806595296e-5,-5.5123232299645195e-8,0.0040554095026198176,1.4802029857689209e-5,-5.494808734565473e-8,0.004056000829014219,1.4836834906018199e-5,-5.501449222707493e-8,0.0040565344012080526,1.496913360261363e-5,-5.527907211829798e-8,0.004056984713435475,1.5162646600086324e-5,-5.5668377746635783e-8,0.004057343673139978,1.537616244421555e-5,-5.609881419197702e-8,0.004057618154709957,1.5570907870645105e-5,-5.6491651348612124e-8,0.004057826336088842,1.571498161585009e-5,-5.678207302107251e-8,0.004057994236563965,1.5785663812756403e-5,-5.692387796847087e-8,0.004058152876449292,1.5770755436499932e-5,-5.6892175274642595e-8,0.004058335730497766,1.56698047725992e-5,-5.6685842838322767e-8,0.004058575736492297,1.5495479753201927e-5,-5.6330312045967666e-8,0.004058901067412491,1.5274593050186677e-5,-5.587969998232432e-8,0.0040593292989023755,1.504744016568601e-5,-5.541556302293769e-8,0.004059860688647646,1.4863522530534258e-5,-5.5038323485976716e-8,0.004060472924789321,1.4772178278052189e-5,-5.484831991380623e-8,0.004061121016256655,1.4808824187926628e-5,-5.491786333355384e-8,0.004061745398388068,1.4980995070619321e-5,-5.526278213620586e-8,0.0040622878335508355,1.5260905424743596e-5,-5.58271445794069e-8,0.00406270977840194,1.5589957864201896e-5,-5.6492254117461846e-8,0.004063005280007226,1.5895053516072876e-5,-5.71096919262533e-8,0.004063202722944347,1.611033761314179e-5,-5.7545486920249105e-8,0.004063355322523949,1.6195737978189514e-5,-5.7717829505718655e-8,0.004063524982892078,1.614629397440836e-5,-5.761611433490631e-8,0.0040637654881181635,1.5990874718776372e-5,-5.729846921069878e-8,0.0040641096822484745,1.5782374878243806e-5,-5.687200018963553e-8,0.004064563196214051,1.558309622417832e-5,-5.646323142518138e-8,0.004065105372946402,1.5449401160722053e-5,-5.6186965778914343e-8,0.004065696400389077,1.5419375479983378e-5,-5.612111731815594e-8,0.004066288252635861,1.5506240841777267e-5,-5.6293121212787874e-8,0.004066836155862962,1.5698542971993716e-5,-5.668010909236039e-8,0.004067307459695976,1.5966009975132922e-5,-5.7220705532581126e-8,0.00406768613309999,1.6268363193234948e-5,-5.783296271933897e-8,0.004067972917711898,1.6564106468153707e-5,-5.8432340733695405e-8,0.004068182486831887,1.681727652571284e-5,-5.894554234053274e-8,0.00406833933892352,1.7001503611134662e-5,-5.931880776278692e-8,0.004068473756113949,1.7101841750667816e-5,-5.952159722920657e-8,0.004068618388467829,1.7115337876791556e-5,-5.9547687041123166e-8,0.004068805319711415,1.7051183194416186e-5,-5.941546370891142e-8,0.004069063045413328,1.693080237181354e-5,-5.9168176976249445e-8,0.004069412642286213,1.6787584460103433e-5,-5.887352588619779e-8,0.004069862675046376,1.6665125654505054e-5,-5.862021049541122e-8,0.0040704033862420915,1.6612132979317868e-5,-5.8507611354420696e-8,0.004071002433343476,1.6672362317351996e-5,-5.8625252169843815e-8,0.004071606146962371,1.6870078458229394e-5,-5.90230533337598e-8,0.004072150180031084,1.7195707718266797e-5,-5.968194828764344e-8,0.004072579327330133,1.7600304654934825e-5,-6.050250155157372e-8,0.004072869038903364,1.800622384140864e-5,-6.132663264350784e-8,0.004073036765467772,1.8332569931295446e-5,-6.1989505493645e-8,0.004073135737926338,1.852349328887892e-5,-6.237718185712606e-8,0.004073234663677566,1.85650892687075e-5,-6.246099877342193e-8,0.004073394556097025,1.848476914851136e-5,-6.229627231999442e-8,0.004073652726352091,1.833737723399551e-5,-6.199414171839608e-8,0.004074017372470005,1.818678426452505e-5,-6.168431508746106e-8,0.0040744707750797445,1.808984214398682e-5,-6.148259812586677e-8,0.004074977337424825,1.8085790232343694e-5,-6.14693541796517e-8,0.004075493263269258,1.8191439776279438e-5,-6.167952512829171e-8,0.004075975798354961,1.840124607827241e-5,-6.210249277646861e-8,0.004076390776901895,1.8691144047334405e-5,-6.268964660170682e-8,0.004076717622217568,1.902494399145827e-5,-6.336732629192284e-8,0.004076951353972912,1.9361837440099986e-5,-6.405219775676581e-8,0.004077101746210127,1.96635091438295e-5,-6.46659095300111e-8,0.0040771903314508785,1.989970237527024e-5,-6.514655672234517e-8,0.004077246262806788,2.005165635670929e-5,-6.545569860243698e-8,0.004077302032084395,2.0113486301099913e-5,-6.558109876386352e-8,0.0040773896466789,2.0092092019349717e-5,-6.553647593087778e-8,0.004077537342209875,2.0006253451383885e-5,-6.535969647604283e-8,0.004077766555167821,1.988527789663943e-5,-6.511016738314298e-8,0.004078088689458051,1.976710784085783e-5,-6.486516989220184e-8,0.004078501328342447,1.96951136887764e-5,-6.471343334262049e-8,0.004078984379126887,1.971216651307541e-5,-6.474300004433253e-8,0.004079498090171917,1.985082590723176e-5,-6.502100525056876e-8,0.004079986278779378,2.0120252289371937e-5,-6.55667052274478e-8,0.004080388235941525,2.0494122797303468e-5,-6.632662153528476e-8,0.004080659282108669,2.0908086133771597e-5,-6.716933519624624e-8,0.0040807921628955995,2.1274886377819846e-5,-6.791652262392293e-8,0.004080825530396653,2.151542116556529e-5,-6.840653341073122e-8,0.00408083076942298,2.1590301346052778e-5,-6.855881484240877e-8,0.00408088328291802,2.1513241158620907e-5,-6.84010788689678e-8,0.004081035155949392,2.134019848115492e-5,-6.804703209129059e-8,0.004081302546732209,2.1144355238359504e-5,-6.764545015636383e-8,0.004081668918553097,2.0992072249557375e-5,-6.733141248227607e-8,0.00408209685499066,2.092848134334002e-5,-6.719713964870882e-8,0.004082540990125184,2.09731231952271e-5,-6.72830951751148e-8,0.004082958197133572,2.112218615191573e-5,-6.758231956110174e-8,0.00408331422869279,2.1353847294547875e-5,-6.805099975797541e-8,0.0040835874057665485,2.1634567155020024e-5,-6.862106700376206e-8,0.004083770116681637,2.1925434668298697e-5,-6.921309213990532e-8,0.004083868551366543,2.218816882099307e-5,-6.974866033503243e-8,0.0040839008942840345,2.239039499761978e-5,-7.016132947403248e-8,0.004083894232067077,2.250978778831476e-5,-7.0405207142333e-8,0.004083880571241067,2.25366960163881e-5,-7.046030306590217e-8,0.00408389252947929,2.2475031488631666e-5,-7.033426314434203e-8,0.004083959249418965,2.2341562177163083e-5,-7.00608865512821e-8,0.004084102836943754,2.2163971654346905e-5,-6.969625158825354e-8,0.004084335399848269,2.1977972812721735e-5,-6.931302372966625e-8,0.004084656614019778,2.1823582213426522e-5,-6.899305140282665e-8,0.004085051725131036,2.1740298666453316e-5,-6.881758196303943e-8,0.00408549043013785,2.1760499615591525e-5,-6.88536205880247e-8,0.004085928134416261,2.1900671848150498e-5,-6.913569532030017e-8,0.0040863118371121795,2.215161693360532e-5,-6.964550832191338e-8,0.004086592559838579,2.2471365259167905e-5,-7.029728262333709e-8,0.004086743511323791,2.278742626781085e-5,-7.094245749548945e-8,0.004086777069432108,2.3014650869490377e-5,-7.140649996468963e-8,0.004086748324489586,2.3086554162397423e-5,-7.155319319147187e-8,0.004086737210606845,2.298478523801362e-5,-7.134486880118048e-8,0.0040868162246094596,2.274751838270059e-5,-7.085933294161156e-8,0.004087022774633262,2.245098166859568e-5,-7.025197183973786e-8,0.004087351063401967,2.21773293531232e-5,-6.969023534135919e-8,0.004087762942117613,2.1988078250473938e-5,-6.929965848306815e-8,0.004088206426731321,2.1912888693068682e-5,-6.914113536613453e-8,0.0040886315320029145,2.1951514131721826e-5,-6.921484527465759e-8,0.004088999563181579,2.2082048330308014e-5,-6.947683655171173e-8,0.004089286694209541,2.227007195705091e-5,-6.985740065000953e-8,0.0040894840997412005,2.2476260228544262e-5,-7.027641992708612e-8,0.004089596524746182,2.2662126678655353e-5,-7.065510425729817e-8,0.004089640201779963,2.2794420332461283e-5,-7.092513321189004e-8,0.0040896402838893646,2.284862699133553e-5,-7.103599943485881e-8,0.004089627705490863,2.2811697616913437e-5,-7.096068474456991e-8,0.004089635411507748,2.2683801109797253e-5,-7.069921973276663e-8,0.004089694115390104,2.2478677051700234e-5,-7.027932793650815e-8,0.004089828036207196,2.2222286505042233e-5,-6.975365444924291e-8,0.004090051161470819,2.1949786269337134e-5,-6.919369964114232e-8,0.004090364511991667,2.170103932630054e-5,-6.86808528694382e-8,0.004090754790796106,2.151498959955255e-5,-6.829506592183514e-8,0.004091194666195651,2.142330844766789e-5,-6.810185855541579e-8,0.004091644993372157,2.1443624281504225e-5,-6.813824314344391e-8,0.0040920596967446154,2.1572833523424404e-5,-6.83986719144852e-8,0.004092394222561333,2.1782031162445324e-5,-6.88243378416857e-8,0.00409261763274889,2.2016102025325163e-5,-6.93022303226837e-8,0.0040927261558925485,2.2201941671687712e-5,-6.968213454108016e-8,0.004092752390399775,2.226781056753669e-5,-6.98165868041908e-8,0.004092761828782771,2.217010941896625e-5,-6.961594162020133e-8,0.004092832347522563,2.191489742469643e-5,-6.90924145000651e-8,0.004093023916310563,2.1559197363135236e-5,-6.836256507621499e-8,0.004093355382863215,2.1188443825140062e-5,-6.760103065423595e-8,0.004093801442773309,2.0883140487863215e-5,-6.697239893387999e-8,0.004094308353665391,2.0693642127327703e-5,-6.657980636574702e-8,0.004094815962852751,2.0632674505226746e-5,-6.644971858931919e-8,0.0040952745320277885,2.068224872375703e-5,-6.654596569206641e-8,0.0040956524926629954,2.0806194730034872e-5,-6.67951505187713e-8,0.004095937126088291,2.0961685991746184e-5,-6.711000602505771e-8,0.004096131713874594,2.1107263596701378e-5,-6.740571701477901e-8,0.004096251810518326,2.1207630473032185e-5,-6.760979080112129e-8,0.004096321810660583,2.123646163530461e-5,-6.766796655208107e-8,0.004096371868974252,2.117828020698269e-5,-6.754820351325027e-8,0.004096434786498749,2.102987222746858e-5,-6.724363080817744e-8,0.0040965424713340064,2.0801158863912584e-5,-6.677428971329367e-8,0.004096721827951759,2.0514974467630822e-5,-6.618661611930796e-8,0.004096990403276643,2.0205057223031076e-5,-6.554934138305202e-8,0.004097352573177603,1.9911884762201487e-5,-6.494509874821933e-8,0.0040977972420050135,1.9676507214749987e-5,-6.445798705026133e-8,0.00409829795293573,1.953307645034436e-5,-6.415839226662203e-8,0.00409881595753222,1.950131413892924e-5,-6.408749767114518e-8,0.0040993062317397294,1.958041987144307e-5,-6.424454113672405e-8,0.004099725949858662,1.9745840788228674e-5,-6.457984351456717e-8,0.004100044534043069,1.9950335607570126e-5,-6.499672432697775e-8,0.004100253632198516,2.013084019847643e-5,-6.536554032319219e-8,0.004100374104936217,2.0221969791798727e-5,-6.555157283498206e-8,0.004100455954183344,2.017477740412432e-5,-6.545379905395303e-8,0.0041005675891791,1.9975516702515512e-5,-6.504358355699308e-8,0.004100774805833544,1.965545542492212e-5,-6.438482789008002e-8,0.004101116885460426,1.928372582152993e-5,-6.361922074229146e-8,0.004101591870619371,1.894360567216253e-5,-6.291755062884213e-8,0.004102159238000308,1.8703470116557066e-5,-6.242018269746027e-8,0.00410275747591571,1.859703517591237e-5,-6.219659152435074e-8,0.0041033257619690735,1.8620141853715126e-5,-6.223872071816769e-8,0.004103819526959297,1.874065523208672e-5,-6.248114525442182e-8,0.004104216341986781,1.8912959818053868e-5,-6.283064370406833e-8,0.004104514378076207,1.909031638156852e-5,-6.319144791179558e-8,0.004104727475774354,1.9232607115184218e-5,-6.348113509152911e-8,0.004104879851426564,1.931006277488053e-5,-6.363836365897142e-8,0.004105001750774871,1.9304641429037065e-5,-6.362581755356893e-8,0.004105126061105588,1.9210481227772614e-5,-6.343120965738759e-8,0.004105285298052878,1.903412670485694e-5,-6.306774716776545e-8,0.004105508333763851,1.879451414608241e-5,-6.257405625726658e-8,0.004105816518487927,1.8522105372562953e-5,-6.201237977882163e-8,0.004106219408261088,1.8256224455901378e-5,-6.146316659960243e-8,0.004106711031782206,1.8039834534071813e-5,-6.101448588822051e-8,0.00410726820104739,1.7911758794004197e-5,-6.074620274769431e-8,0.00410785241819564,1.7897526858302653e-5,-6.071123337928272e-8,0.004108416180285091,1.8001212401072268e-5,-6.091866896065255e-8,0.0041089130241994485,1.820113748087769e-5,-6.132469615222139e-8,0.004109309104207408,1.8451646262672002e-5,-6.183595690444914e-8,0.0041095931983087045,1.869153552715818e-5,-6.232669811154938e-8,0.004109782084836411,1.8857869433917337e-5,-6.266717936609684e-8,0.004109919049387194,1.890226775739589e-5,-6.275732940350907e-8,0.004110064678761718,1.8805497319272342e-5,-6.255697025959145e-8,0.004110281124285083,1.858555641793577e-5,-6.210261238000375e-8,0.004110613703963449,1.829511610327427e-5,-6.150227952510236e-8,0.004111076186029953,1.8007169267841526e-5,-6.090602884987728e-8,0.004111646199815092,1.779292050803584e-5,-6.046048759796877e-8,0.0041122733354077975,1.770055011084275e-5,-6.026514317284309e-8,0.0041128962379817155,1.774357289428051e-5,-6.034829633072815e-8,0.004113460777981091,1.790224628658376e-5,-6.06698069713779e-8,0.004113932211375858,1.8134726118468195e-5,-6.114390913053563e-8,0.004114298813701848,1.8391239948785017e-5,-6.166830949707429e-8,0.004114568894174971,1.862570592744579e-5,-6.214811466500701e-8,0.004114764817887481,1.8802594772439982e-5,-6.251002429640857e-8,0.004114916941016438,1.8899611324047082e-5,-6.270792853777051e-8,0.004115058788903396,1.8907892822336005e-5,-6.272336282371548e-8,0.004115223529956793,1.883126597625609e-5,-6.256398245923092e-8,0.00411544112890223,1.8685396522870248e-5,-6.226179188618023e-8,0.004115735426728429,1.8496880076378558e-5,-6.187126850283822e-8,0.004116120670135077,1.830166124887891e-5,-6.146615285795259e-8,0.0041165976094830435,1.8141735245261587e-5,-6.113275473128614e-8,0.0041171501459813615,1.8059102673713814e-5,-6.095761535265301e-8,0.0041177444298378775,1.808677278934742e-5,-6.100903876410642e-8,0.0041183326482072515,1.8238377845822922e-5,-6.131565461947553e-8,0.004118862644895194,1.8500025366803055e-5,-6.184947666116739e-8,0.004119291845670744,1.882888305936909e-5,-6.252277761117837e-8,0.004119600995524518,1.916129270179671e-5,-6.320463576506777e-8,0.004119802051454148,1.9429176950619105e-5,-6.375467477591138e-8,0.004119936452241972,1.9579389208801835e-5,-6.406297574667329e-8,0.004120063979010977,1.958911524116044e-5,-6.408192449547398e-8,0.004120246088908799,1.9472222424355246e-5,-6.383944294513096e-8,0.00412052913259154,1.927501773422856e-5,-6.343041897475507e-8,0.004120932292519319,1.906320686341203e-5,-6.299000026420115e-8,0.0041214433902594435,1.890409343719484e-5,-6.265701578056743e-8,0.004122023468462977,1.884920647966687e-5,-6.253815085908088e-8,0.004122618451191795,1.8922390072082127e-5,-6.268323571647604e-8,0.004123173897075194,1.911656377839061e-5,-6.307832429936484e-8,0.0041236480036418895,1.939920158835302e-5,-6.365677983994343e-8,0.004124019202185466,1.9723461236942205e-5,-6.432213367561228e-8,0.004124287288244285,2.0040448516884058e-5,-6.49734234542431e-8,0.004124469567213898,2.0308896945277934e-5,-6.552527867409888e-8,0.004124594685466592,2.050066336393985e-5,-6.591937018917111e-8,0.004124696486907284,2.0602417835979338e-5,-6.61279466825767e-8,0.004124809121272801,2.0614914334906605e-5,-6.615231627858997e-8,0.00412496354787499,2.055127128513555e-5,-6.601926590271963e-8,0.004125184918062037,2.0435134717556e-5,-6.57772755655983e-8,0.004125490124622406,2.029885113054249e-5,-6.549281651963915e-8,0.004125884999648892,2.0181120072676474e-5,-6.524562199853932e-8,0.004126361187835996,2.012312227810521e-5,-6.512079755335909e-8,0.004126893637683346,2.016202160381174e-5,-6.519543374690128e-8,0.0041274407643772945,2.0321520249793008e-5,-6.551902559572129e-8,0.0041279499280898095,2.0601210358685798e-5,-6.609131944530118e-8,0.00412836969991199,2.0969274287628928e-5,-6.684706034379096e-8,0.004128666706476001,2.1364544730577544e-5,-6.766013860494177e-8,0.0041288402130868545,2.1711284432474734e-5,-6.837410979895914e-8,0.0041289260941142205,2.1943052421982018e-5,-6.88515335136089e-8,0.0041289863790102055,2.2025323150899638e-5,-6.902071138081227e-8,0.004129088666642758,2.1966206179071726e-5,-6.889782614187511e-8,0.0041292849632450085,2.1811418243791324e-5,-6.857662713945957e-8,0.0041295982485091585,2.1627811881081866e-5,-6.819461136355642e-8,0.004130019713586947,2.1483464269815928e-5,-6.789215710034456e-8,0.004130514847826705,2.1431037977969292e-5,-6.777831067919666e-8,0.004131034556120914,2.1497848193685356e-5,-6.79102050168444e-8,0.0041315275855180284,2.1683260008845836e-5,-6.828741599827955e-8,0.0041319514162801475,2.196236627165169e-5,-6.885922779761631e-8,0.0041322797208666745,2.2294052841138688e-5,-6.95410620986726e-8,0.004132505435793167,2.2631076927335552e-5,-7.023526137874012e-8,0.004132639559466678,2.2929656701609897e-5,-7.085103297987233e-8,0.0041327068073958445,2.3156619956378226e-5,-7.131941152567361e-8,0.004132739789933165,2.329325563893979e-5,-7.160135080100659e-8,0.0041327732697304005,2.3336073204430915e-5,-7.168931655885992e-8,0.004132839498526474,2.3295362222597494e-5,-7.160425905283545e-8,0.00413296489491445,2.319267720853539e-5,-7.139037898864675e-8,0.004133167727447015,2.3058081690060263e-5,-7.110948143247038e-8,0.004133456251584568,2.2927368246838634e-5,-7.083536734083875e-8,0.004133826864680379,2.2838893766911416e-5,-7.064744138921729e-8,0.004134262246139552,2.2829234263837425e-5,-7.062178621276581e-8,0.004134730285875639,2.2926717969593375e-5,-7.081769093706275e-8,0.004135185707911027,2.31425991815179e-5,-7.125916402041035e-8,0.0041355769071945506,2.346164589422353e-5,-7.191520269449173e-8,0.004135859441965122,2.383687117408675e-5,-7.268874415754124e-8,0.00413601369908566,2.4195039750171892e-5,-7.342810252300716e-8,0.004136058529573073,2.4456681249135846e-5,-7.396855759155849e-8,0.004136050487278654,2.456513384479195e-5,-7.419258398190955e-8,0.004136065019007573,2.4509860369459744e-5,-7.407805053129414e-8,0.004136168231272512,2.4330162569653813e-5,-7.370577611668552e-8,0.004136394459822497,2.409789030051738e-5,-7.322376999160329e-8,0.0041367395368764786,2.389056192725738e-5,-7.279186780905995e-8,0.0041371686481556655,2.3768649735412706e-5,-7.253505860848046e-8,0.004137631091783037,2.3763952092816136e-5,-7.251957894397494e-8,0.0041380747660009765,2.3878490225956004e-5,-7.275049880309497e-8,0.004138456791204421,2.4090059448810835e-5,-7.318286374029693e-8,0.004138749601503419,2.4360668956780575e-5,-7.37387885346733e-8,0.004138943194899096,2.4645468588374668e-5,-7.4325712073413e-8,0.004139044422775969,2.49009409295305e-5,-7.485336553975188e-8,0.0041390740178470385,2.509158954761269e-5,-7.52478055388981e-8,0.004139062078858488,2.519450532721772e-5,-7.546109277291754e-8,0.004139042857680081,2.5201537323836e-5,-7.547591881161818e-8,0.004139049681730755,2.5119185084212284e-5,-7.530538123596477e-8,0.004139110696144454,2.4966623708413148e-5,-7.498882514872912e-8,0.004139245793706889,2.4772544989273615e-5,-7.458527889421062e-8,0.004139464664095014,2.4571523457755883e-5,-7.416602259172535e-8,0.0041397656452513715,2.4400247311316832e-5,-7.380696250121588e-8,0.004140135103394312,2.4293510720908743e-5,-7.358048043260725e-8,0.004140547313718007,2.427954414351527e-5,-7.354575599206736e-8,0.004140965413628404,2.4374141223041407e-5,-7.373639326420042e-8,0.004141344873455721,2.457362346913388e-5,-7.414551482757032e-8,0.004141641326420783,2.48483642172095e-5,-7.471205791422762e-8,0.0041418235765014145,2.5141002654557318e-5,-7.53169965475809e-8,0.004141889215372904,2.537511100337642e-5,-7.58014858398564e-8,0.004141874921065243,2.5477517766043897e-5,-7.601342829768719e-8,0.004141851043315424,2.5408217951499304e-5,-7.58696248028512e-8,0.004141897199717203,2.5181416417097176e-5,-7.539927233814727e-8,0.004142070032062376,2.4862233791190885e-5,-7.473692425033855e-8,0.004142382136416294,2.4539521848464896e-5,-7.406615519129582e-8,0.004142802962387187,2.4291862821753357e-5,-7.354938496791458e-8,0.004143276515293847,2.4165133492908547e-5,-7.328171206236878e-8,0.004143742610608551,2.416776805253065e-5,-7.328119646301892e-8,0.004144152149564842,2.427840550811608e-5,-7.350451056510971e-8,0.004144474270556827,2.4457891470911152e-5,-7.387144252687797e-8,0.004144697408744952,2.4660435604785124e-5,-7.428767698568889e-8,0.004144827026181618,2.484202674459949e-5,-7.466207837487929e-8,0.004144881994566124,2.4966196964502726e-5,-7.491871231531306e-8,0.0041448905048311665,2.500781452275799e-5,-7.500493400442998e-8,0.004144885711446158,2.4955282841337656e-5,-7.489617429690564e-8,0.004144901261135358,2.481120187725696e-5,-7.459741678649363e-8,0.004144966982912023,2.4591489692204364e-5,-7.41413441693972e-8,0.004145105121592094,2.4322991873659133e-5,-7.358329870301691e-8,0.004145327544473218,2.403980237268326e-5,-7.299364256044502e-8,0.004145634190738719,2.377879003345024e-5,-7.24485997969921e-8,0.0041460127758167105,2.3574818073592004e-5,-7.202053283003591e-8,0.00414643966336036,2.3455929817344242e-5,-7.17680808924154e-8,0.004146881876040019,2.343860803994068e-5,-7.172625974921142e-8,0.0041473004753961136,2.3523144481116746e-5,-7.189658153429537e-8,0.004147656007247302,2.3689506623327728e-5,-7.223811648289735e-8,0.004147916808771172,2.3895221603221915e-5,-7.266284458651311e-8,0.0041480699650081705,2.4078275121643128e-5,-7.304167053080141e-8,0.004148132195104441,2.4168654642653938e-5,-7.322864004199276e-8,0.004148154320381181,2.4109831376965727e-5,-7.310586674653458e-8,0.004148211444887462,2.388423375298592e-5,-7.263656875158706e-8,0.004148377033934869,2.3528252738308904e-5,-7.189610084153054e-8,0.004148691963497075,2.3123109596003326e-5,-7.105280147716092e-8,0.0041491473031022115,2.27629923552026e-5,-7.030185625864194e-8,0.004149691355374006,2.251899382813585e-5,-6.979067613092937e-8,0.004150253959921051,2.2418989460666156e-5,-6.957735617198645e-8,0.0041507716459602394,2.2449203170718728e-5,-6.963393426794152e-8,0.0041512023452277315,2.2568972898863263e-5,-6.987681903782312e-8,0.004151528686471275,2.2727414027209948e-5,-7.020106669410957e-8,0.004151754402958528,2.287579296648152e-5,-7.050582576156142e-8,0.004151898371708361,2.2974592076086222e-5,-7.070894000466604e-8,0.004151988885126911,2.2996670531363484e-5,-7.075363347500511e-8,0.004152058955955876,2.2928322974470473e-5,-7.061092750138042e-8,0.004152142382845093,2.2769356506527704e-5,-7.02799821925708e-8,0.0041522701226427315,2.253246200945357e-5,-6.978684571499767e-8,0.004152466791086021,2.2241707192617996e-5,-6.91812637823709e-8,0.004152747431065876,2.192983419561754e-5,-6.853098876725601e-8,0.004153115009949348,2.163416853510276e-5,-6.791329347391853e-8,0.004153559267504416,2.1391372281000134e-5,-6.740420502635174e-8,0.004154057371060857,2.1231670864169294e-5,-6.706668724391143e-8,0.004154576533781043,2.1173336928637963e-5,-6.693925978559595e-8,0.004155078480972005,2.121824985076246e-5,-6.702665399660066e-8,0.00415552544495053,2.1349266802329204e-5,-6.729405133405011e-8,0.004155887326128362,2.153005321203464e-5,-6.76663910045802e-8,0.004156149549489265,2.1708297200182368e-5,-6.803485371706521e-8,0.004156320429207047,2.18236504091612e-5,-6.827342868724723e-8,0.004156435436193511,2.1821325191162423e-5,-6.826745995209362e-8,0.004156554325266331,2.1670061717922965e-5,-6.795132318021076e-8,0.004156747395736589,2.137880483492358e-5,-6.734326680703699e-8,0.004157071827894007,2.100211751024774e-5,-6.655662407843876e-8,0.004157547507220719,2.0626045399976664e-5,-6.577030263586701e-8,0.004158146618620178,2.033725265562143e-5,-6.516458127082557e-8,0.0041588047435924405,2.0191197783449442e-5,-6.485500848833399e-8,0.00415944679960301,2.0196654226797564e-5,-6.486025586921148e-8,0.004160012347865569,2.0321627878139327e-5,-6.51143438105989e-8,0.004160468885463152,2.0512010737360385e-5,-6.550526134746365e-8,0.004160812154099564,2.071068901280456e-5,-6.591452917912113e-8,0.004161059067630895,2.087014425419266e-5,-6.624331294613351e-8,0.004161239040043181,2.095792204410952e-5,-6.642382604808944e-8,0.004161386829742425,2.095738077188751e-5,-6.642102047979822e-8,0.0041615375835493676,2.0866361049708102e-5,-6.622998144256762e-8,0.004161723445766619,2.069540030448162e-5,-6.587231810027344e-8,0.004161970833005958,2.0465957657424777e-5,-6.53924752623177e-8,0.004162297807662163,2.0208374532718804e-5,-6.485342857751e-8,0.004162711465524075,1.9958972538912966e-5,-6.433060157681065e-8,0.004163205788963567,1.9755721872438256e-5,-6.390289279020207e-8,0.004163760874885751,1.9632401292486634e-5,-6.364064398012052e-8,0.0041643445126078645,1.9611945515193513e-5,-6.359191191485507e-8,0.004164916661599382,1.9700370056451175e-5,-6.376982675484982e-8,0.004165436593260296,1.9883038081479463e-5,-6.414465536185601e-8,0.004165871533002719,2.0124840290481865e-5,-6.464389273479223e-8,0.004166204973161034,2.03750141868381e-5,-6.516203187808346e-8,0.0041664427071129,2.0576291719662896e-5,-6.557950750839939e-8,0.004166614831251215,2.067725739446178e-5,-6.578854573835485e-8,0.004166772201513261,2.064596860090837e-5,-6.572180046924913e-8,0.004166976394844767,2.0481684872547044e-5,-6.537706967734264e-8,0.004167283762105637,2.0220289969068403e-5,-6.482876722062341e-8,0.0041677270966903575,1.9928853053708316e-5,-6.42166276496646e-8,0.004168301889621721,1.9687639520167372e-5,-6.370817178698891e-8,0.004168964945397345,1.9564346141463034e-5,-6.344493463573707e-8,0.0041696482095524585,1.9591663234778752e-5,-6.349560115607152e-8,0.004170281928490304,1.975909669494271e-5,-6.383883261318782e-8,0.004170815776114936,2.002177562328637e-5,-6.438149484450375e-8,0.004171229165072177,2.0319307693815556e-5,-6.499787658365365e-8,0.004171529641595815,2.0594371506068787e-5,-6.556842529790701e-8,0.004171744205095692,2.08044574697309e-5,-6.600426377969002e-8,0.004171909319060356,2.0925909999591906e-5,-6.625570255367975e-8,0.004172063035543002,2.095283945319605e-5,-6.631007474738575e-8,0.004172240006446445,2.0893942567726186e-5,-6.618518936112582e-8,0.004172468631381149,2.0769185793469826e-5,-6.592244924085984e-8,0.00417276921141435,2.0606998287037323e-5,-6.558098507505531e-8,0.004173152263607924,2.044171213681954e-5,-6.523229587640529e-8,0.004173616699217774,2.0310521591751063e-5,-6.49539193513707e-8,0.004174148228173609,2.0249146804649307e-5,-6.482044670278411e-8,0.0041747190205534725,2.0285797724636808e-5,-6.489100076513135e-8,0.004175290038969232,2.043401685070224e-5,-6.519431780277011e-8,0.004175817138082009,2.0686286120805764e-5,-6.571531492271147e-8,0.004176260742955059,2.1011275247548487e-5,-6.638915896100802e-8,0.004176596947866172,2.135738903704526e-5,-6.710846106930013e-8,0.004176826283818876,2.1663316572518304e-5,-6.774516430718877e-8,0.004176976440504031,2.187329985370935e-5,-6.818241888125293e-8,0.004177097171342621,2.1952541600749897e-5,-6.834687461472092e-8,0.004177248393652027,2.1897850265493772e-5,-6.823110493770005e-8,0.004177484698447774,2.1740143881249863e-5,-6.789904756326871e-8,0.004177840456289382,2.153777152476557e-5,-6.74722389787032e-8,0.004178319648003268,2.1361956093379974e-5,-6.709951969906079e-8,0.004178893720907776,2.1277850737766288e-5,-6.69174602353876e-8,0.004179508920172153,2.1326593435868438e-5,-6.701273548062968e-8,0.00418010143870764,2.1514398644594126e-5,-6.739909921106913e-8,0.004180615325979776,2.181278040040501e-5,-6.801760816720763e-8,0.004181016588925626,2.2169477458321236e-5,-6.875930338309788e-8,0.004181298828271539,2.2524986894682156e-5,-6.949975199756988e-8,0.004181480040607371,2.282791399696808e-5,-7.013122390191389e-8,0.0041815939531634075,2.304443453220907e-5,-7.058260201965475e-8,0.004181680312312281,2.3160968578745368e-5,-7.082508197011263e-8,0.0041817771738139765,2.31820016723154e-5,-7.086767934850143e-8,0.004181916138040746,2.3125777208913207e-5,-7.074824050457918e-8,0.004182119981389813,2.301988109644779e-5,-7.052420786013162e-8,0.004182401587912403,2.2897560902910874e-5,-7.026493333350233e-8,0.004182763226082177,2.279464572132352e-5,-7.004528039888718e-8,0.004183195714757309,2.27463722411251e-5,-6.993905040066949e-8,0.0041836776903782045,2.2783245722880823e-5,-7.001037080800247e-8,0.004184175936522711,2.2925337371297516e-5,-7.030174363642383e-8,0.004184648351533992,2.3175376573468616e-5,-7.081948145094982e-8,0.00418505106926234,2.351265779926658e-5,-7.152078397866612e-8,0.00418534981740814,2.3891456557676195e-5,-7.231026107348822e-8,0.004185532699444083,2.4247798955379997e-5,-7.305402455302344e-8,0.0041856186975773695,2.4515523630203316e-5,-7.361333203789702e-8,0.004185656116733408,2.4647127383329684e-5,-7.388829334143641e-8,0.004185709463990267,2.4630561585255983e-5,-7.385309068068146e-8,0.004185839553237669,2.4494045601495442e-5,-7.356612233607162e-8,0.004186085175026919,2.4297013898756418e-5,-7.315119149276783e-8,0.004186453058714402,2.4111865678345753e-5,-7.275951997366621e-8,0.00418691819641979,2.4003918546233812e-5,-7.252797509274851e-8,0.004187432570247736,2.4015686123816057e-5,-7.254618294928173e-8,0.004187938527366445,2.4158751006996613e-5,-7.283932258420115e-8,0.00418838289655064,2.4413937365967342e-5,-7.336815666881627e-8,0.004188728513422404,2.4738606360928003e-5,-7.404399556996649e-8,0.00418896077263449,2.5078536869024493e-5,-7.475342352649681e-8,0.004189088187108331,2.5380979408035573e-5,-7.538568393181177e-8,0.004189137637378765,2.560542386655624e-5,-7.585541248978948e-8,0.004189146482758514,2.5729746333905715e-5,-7.611571356090715e-8,0.004189154226481784,2.5751295531856018e-5,-7.616056328669566e-8,0.004189195811872894,2.5684118435083626e-5,-7.601902615037475e-8,0.004189297432699497,2.55542284301067e-5,-7.574531169066045e-8,0.004189474640743976,2.539461358412779e-5,-7.54082984053367e-8,0.004189731923761839,2.5240920754474522e-5,-7.508253449426259e-8,0.004190062893369365,2.5127892543049684e-5,-7.484086743090381e-8,0.004190450577587119,2.508605327542561e-5,-7.474758404267058e-8,0.004190867863493793,2.5137902888573805e-5,-7.48504270355493e-8,0.004191278851066964,2.5293029167128904e-5,-7.517021445445091e-8,0.004191642553303303,2.55423836176811e-5,-7.568861108228818e-8,0.004191920429727899,2.585359199989586e-5,-7.633807975528864e-8,0.004192087961726734,2.6171043691637975e-5,-7.700197953776512e-8,0.0041921473996541884,2.6425138639552714e-5,-7.753404214212685e-8,0.004192134962329874,2.655208648022618e-5,-7.780007245043969e-8,0.004192114992464122,2.6518357750800253e-5,-7.772933711625707e-8,0.004192159595389882,2.6337159580545134e-5,-7.734907825665287e-8,0.0041923223662205,2.6066037508450072e-5,-7.677941655751047e-8,0.004192619875803577,2.578592305862587e-5,-7.618950486964727e-8,0.0041930293080447165,2.557321200031067e-5,-7.57392457018824e-8,0.004193500258489232,2.5478197525003033e-5,-7.553431849801728e-8,0.004193972401104941,2.5516253407646417e-5,-7.560771560475328e-8,0.004194391412284077,2.5670481527066318e-5,-7.592504671513956e-8,0.004194719476384159,2.5901118869691845e-5,-7.640387556528128e-8,0.004194939943894964,2.6157253045760205e-5,-7.693795310378307e-8,0.004195057196908215,2.6387965736528168e-5,-7.742045708403442e-8,0.004195093049339342,2.655137914482246e-5,-7.776307074307687e-8,0.0041950809049979216,2.662075619193178e-5,-7.790902792572845e-8,0.0041950589164355375,2.6587196549228087e-5,-7.783901651533447e-8,0.004195063418449753,2.6459035460426867e-5,-7.75700484300396e-8,0.004195123687424457,2.6258649342688074e-5,-7.714875237095379e-8,0.004195258624765763,2.6017731648806405e-5,-7.664139315682479e-8,0.0041954753979068695,2.5772178721423704e-5,-7.612311259338277e-8,0.004195769575099257,2.5557431308106203e-5,-7.566822001278618e-8,0.004196126138573454,2.540453466231477e-5,-7.534204817948078e-8,0.004196520954855405,2.53367037714102e-5,-7.51938225051339e-8,0.004196922622790946,2.5365966871741377e-5,-7.524954946219042e-8,0.004197295156724912,2.5489504985313087e-5,-7.550410520029874e-8,0.004197602564194241,2.5685951525308174e-5,-7.591317047680027e-8,0.004197816369561635,2.5913292788382522e-5,-7.638861304882352e-8,0.004197925960352721,2.6111518336327034e-5,-7.68040568734833e-8,0.004197949030411529,2.6213720596972247e-5,-7.701841069760118e-8,0.004197935777056729,2.6166841984154432e-5,-7.691972134593537e-8,0.004197959246279704,2.5955973534895593e-5,-7.647632694596954e-8,0.004198090449018128,2.561816100677808e-5,-7.576574198158926e-8,0.0041983690577137925,2.523320397695459e-5,-7.495518310321368e-8,0.00419878704502883,2.4893403872054307e-5,-7.423809664192561e-8,0.004199294657828197,2.466944744060831e-5,-7.37627848726335e-8,0.004199822567905109,2.4590529631573546e-5,-7.35909004360926e-8,0.004200305861270729,2.4644214422214637e-5,-7.369713717322046e-8,0.0042006995521685,2.478930388189759e-5,-7.399597656866322e-8,0.0042009837510207735,2.497203494463084e-5,-7.437531825774549e-8,0.004201161612568837,2.5139530804678885e-5,-7.472443695283559e-8,0.0042012538478359,2.524867550071118e-5,-7.495254886807737e-8,0.004201292331705662,2.527094607106964e-5,-7.49991216701699e-8,0.00420131393742547,2.5194311755950153e-5,-7.483814941996342e-8,0.004201354951284227,2.502295376661067e-5,-7.447781373617757e-8,0.0042014462866753815,2.4775206437341213e-5,-7.395626000164893e-8,0.004201609778427287,2.448005996210069e-5,-7.333420007618452e-8,0.004201855844869758,2.4172631007671907e-5,-7.268529378705414e-8,0.004202182698645817,2.3889171851144942e-5,-7.208562808425933e-8,0.004202577017310062,2.3662279170995062e-5,-7.160372968477706e-8,0.004203015758641201,2.351672818202007e-5,-7.129194406720078e-8,0.004203468829726377,2.3466037764782944e-5,-7.11792747736706e-8,0.004203902457944527,2.3509754658052647e-5,-7.126556074908164e-8,0.004204283346550584,2.3631449505063676e-5,-7.151698648158335e-8,0.004204584061959764,2.3797752657327603e-5,-7.186374646115213e-8,0.0042047900364866496,2.3959694992948275e-5,-7.22027000677904e-8,0.0042049075001769935,2.4058568751254713e-5,-7.240978381987185e-8,0.004204969667533672,2.4038460412971196e-5,-7.23666645880367e-8,0.004205036113172845,2.386531479855544e-5,-7.200115046387884e-8,0.004205179685910332,2.3546624248548318e-5,-7.132872503889457e-8,0.0042054607744250174,2.313929579412769e-5,-7.046897812798647e-8,0.00420589989798239,2.27347232082449e-5,-6.961404483515537e-8,0.004206466015888612,2.242427014344388e-5,-6.895601774624227e-8,0.004207089445384607,2.2264274521212205e-5,-6.861351443079364e-8,0.004207690765000283,2.2260358548173973e-5,-6.859880736537034e-8,0.004208207794816714,2.2375384589948536e-5,-6.883449347627073e-8,0.004208608832725967,2.2550256047354552e-5,-6.919700655526116e-8,0.004208892174623421,2.2724239908018644e-5,-6.955907850228315e-8,0.0042090782601795,2.284808125073127e-5,-6.981713891001085e-8,0.004209200296160906,2.2889691428958756e-5,-6.990328564693268e-8,0.004209296350094005,2.283492007234416e-5,-6.97870980120373e-8,0.004209403565906254,2.268592751806816e-5,-6.947247890090181e-8,0.004209554005893156,2.2458595057271006e-5,-6.899240475833879e-8,0.004209771538720962,2.2179411033598958e-5,-6.840241608206303e-8,0.00421006954601963,2.1881833085248087e-5,-6.777287276654248e-8,0.0042104495193963105,2.1602047665670182e-5,-6.717991814560981e-8,0.0042109008189892645,2.137421177667367e-5,-6.669544160393412e-8,0.004211401868604031,2.1225620883696596e-5,-6.637699983388579e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json deleted file mode 100644 index ea90103..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_25.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":25000,"numberOfSamples":1000,"samples":[0.0042119228229227776,2.117242668988509e-5,-6.625892772821196e-8,0.00421242951621424,2.1216421815835606e-5,-6.634559593072919e-8,0.004212888396602669,2.1343324948057996e-5,-6.660764965178544e-8,0.004213272077688695,2.1522955697259163e-5,-6.698208934125665e-8,0.004213565153061029,2.171164617537871e-5,-6.737707330135306e-8,0.004213769823711238,2.1857483451438128e-5,-6.768286051317844e-8,0.004213910198871436,2.190927122349849e-5,-6.779084064030356e-8,0.004214032922657624,2.1829493537962127e-5,-6.762116816618272e-8,0.004214200852587069,2.160938196621095e-5,-6.71548148810529e-8,0.004214477322022827,2.1280462370500936e-5,-6.645802296286292e-8,0.004214903100503305,2.091373094832423e-5,-6.568048925307495e-8,0.004215475880773675,2.0600151223130995e-5,-6.501412598684065e-8,0.004216145898744334,2.0417442948628495e-5,-6.462301093688222e-8,0.004216833579580056,2.0400376819345232e-5,-6.458079850055622e-8,0.004217459970123071,2.053157579362677e-5,-6.485132807375522e-8,0.004217972502130171,2.0755398012646987e-5,-6.531780445307867e-8,0.004218354775674382,2.100283844312381e-5,-6.583514699901046e-8,0.004218621473875984,2.1213061032032433e-5,-6.627523661803764e-8,0.004218806437975746,2.1344829856945014e-5,-6.655094448616457e-8,0.0042189509605779895,2.1378863630848206e-5,-6.662115374902181e-8,0.004219095409105211,2.1315105530184897e-5,-6.648517553484988e-8,0.004219274283414654,2.1168357298914947e-5,-6.617374421911176e-8,0.0042195135261831026,2.0964046864058137e-5,-6.574021509881736e-8,0.0042198289277669875,2.0734467344645254e-5,-6.52526270229363e-8,0.004220225061155502,2.0515161357874974e-5,-6.478598265567233e-8,0.004220694716869642,2.0341013243499278e-5,-6.441392136515793e-8,0.004221219187507694,2.024179213121955e-5,-6.419932023758131e-8,0.004221769966808666,2.0237378693578086e-5,-6.418431147260425e-8,0.0042223122778394,2.033346797221274e-5,-6.438129961003437e-8,0.004222810379006872,2.051879431947242e-5,-6.47670814186124e-8,0.0042232340746766765,2.0764877854194254e-5,-6.528213506219293e-8,0.004223565395287756,2.1029006330211313e-5,-6.583665389689409e-8,0.004223804128873946,2.1260585340412296e-5,-6.632374566900979e-8,0.004223970876957566,2.1410361180324564e-5,-6.663887945834917e-8,0.004224106369310762,2.14415465441151e-5,-6.670356203916723e-8,0.0042242657983087495,2.134115638552841e-5,-6.648957977625455e-8,0.004224507399419219,2.112855412696634e-5,-6.603731852191216e-8,0.004224876159364572,2.085686994094544e-5,-6.545888489491197e-8,0.004225386732174476,2.0603067839644234e-5,-6.491709513429656e-8,0.004226013160943935,2.0446027498544085e-5,-6.457905743766462e-8,0.004226693128151923,2.043932475634994e-5,-6.45585312505897e-8,0.004227347974683707,2.059163946791718e-5,-6.487440472016235e-8,0.004227909703767054,2.086563813515611e-5,-6.544822544194953e-8,0.004228341362829596,2.1195202646072075e-5,-6.614053530613902e-8,0.004228642402086946,2.1510125092377255e-5,-6.680302045077538e-8,0.004228840647210552,2.1755805619472572e-5,-6.732012834688552e-8,0.004228978598476052,2.190213346099413e-5,-6.762786101905045e-8,0.0042291010496863166,2.194302357527711e-5,-6.771287814009528e-8,0.0042292470592518745,2.1891133200885374e-5,-6.760145956889963e-8,0.004229446049571827,2.1771621167792976e-5,-6.73464393792848e-8,0.004229716468222322,2.1616855272094037e-5,-6.701607817399818e-8,0.004230065522044785,2.146232151279719e-5,-6.668539495546459e-8,0.004230489183412082,2.134317016838142e-5,-6.642880367863476e-8,0.004230972374903851,2.12906866823376e-5,-6.631261090471438e-8,0.004231489771832401,2.132821216102119e-5,-6.638640134078987e-8,0.00423200798906628,2.1466603019303647e-5,-6.667347585959588e-8,0.004232489876042049,2.1700112891328544e-5,-6.716214332465655e-8,0.004232901078212662,2.2004253231900497e-5,-6.780110661848243e-8,0.0042332180115707534,2.233735468493118e-5,-6.850259405413669e-8,0.004233435294041164,2.264690582136456e-5,-6.915558955274176e-8,0.004233570081750011,2.288024682846949e-5,-6.964836523197342e-8,0.004233661175459219,2.299740945877807e-5,-6.989570010663392e-8,0.00423376212210765,2.298272324126421e-5,-6.986362270031153e-8,0.004233929261141872,2.2851697779811398e-5,-6.958422181245012e-8,0.004234207211841524,2.2650495622957343e-5,-6.915475814576002e-8,0.004234615425259081,2.2446809897144912e-5,-6.871849564593151e-8,0.004235140014210337,2.231313047848069e-5,-6.842929415254376e-8,0.004235734703969059,2.230620625541042e-5,-6.840801170460767e-8,0.004236332511029088,2.2449320169543877e-5,-6.870475534746973e-8,0.004236865352914913,2.2724777630289437e-5,-6.928273029224622e-8,0.004237284245080581,2.3080599212484498e-5,-7.003223837757029e-8,0.004237571736415137,2.3448608166368112E-05,-7.080893495957507e-8,0.004237742342841121,2.3765484141766943e-5,-7.147847424023432e-8,0.004237833085799702,2.3988137660734125e-5,-7.194917126202141e-8,0.004237890189882673,2.4099447950975766e-5,-7.218425790080511e-8,0.004237957595590428,2.4105773514283147e-5,-7.219670738284095e-8,0.004238069919582637,2.4030269658422523e-5,-7.203516533111505e-8,0.004238249618365501,2.39056679238968e-5,-7.176871236223504e-8,0.004238506777009503,2.376842054507791e-5,-7.14744782604305e-8,0.004238839960336995,2.3654485763485328e-5,-7.122870298290076e-8,0.004239237195182148,2.359612316887198e-5,-7.109993006965748e-8,0.00423967689584437,2.3618836515735366e-5,-7.114251881836275e-8,0.00424012919339875,2.3737839999153642e-5,-7.138914208350213e-8,0.004240558555859129,2.3954028829091893e-5,-7.184219988672258e-8,0.004240928632216016,2.425035359666654e-5,-7.246603747851151e-8,0.004241209686151803,2.4590515496345863e-5,-7.31840475098621e-8,0.004241387602314709,2.4922420371615704e-5,-7.388587732093796e-8,0.00424147157146284,2.5187961743731242e-5,-7.44481247159738e-8,0.004241496426214619,2.5338027012562994e-5,-7.476619148263978e-8,0.004241516665120159,2.53481927416961e-5,-7.478765248745461e-8,0.004241592614544567,2.5228750538790737e-5,-7.453362965654456e-8,0.004241773093309497,2.5024267468472517e-5,-7.409800415341168e-8,0.004242080828456248,2.480219962828495e-5,-7.362345063271682e-8,0.004242505642303187,2.463448176734963e-5,-7.326256531566072e-8,0.004243007230734643,2.4578174120876555e-5,-7.313688342900408e-8,0.004243526169055569,2.4660842178798045e-5,-7.330574786416262e-8,0.004243999680967984,2.4874463362710607e-5,-7.375310120416703e-8,0.0042443776570801894,2.5179193207145155e-5,-7.439515440950807e-8,0.004244634361830328,2.551555261019759e-5,-7.510602778954726e-8,0.0042447725833558445,2.5820973313206575e-5,-7.575282082432305e-8,0.004244819645713096,2.6045265557054406e-5,-7.622855268466984e-8,0.004244817657500771,2.6160427534331055e-5,-7.647316726976563e-8,0.004244812063322777,2.6162998914343238e-5,-7.647870316326475e-8,0.004244842201737484,2.6070232563465724e-5,-7.628128320228887e-8,0.004244935733735506,2.5913058455968382e-5,-7.594622609168704e-8,0.004245106822619801,2.572872050475992e-5,-7.555241538069889e-8,0.004245356804103788,2.5554802441117856e-5,-7.517960510152853e-8,0.004245675934005867,2.5425040582432493e-5,-7.48995353162313e-8,0.004246045266184226,2.53664067068817e-5,-7.47697603900719e-8,0.004246438382144604,2.5396616745149382e-5,-7.482836234073875e-8,0.004246823330043397,2.552139706651534e-5,-7.508808847131201e-8,0.004247165619004974,2.5731389115804212e-5,-7.55296442638736e-8,0.004247433275937945,2.5999499171301278e-5,-7.609589214748047e-8,0.0042476044631466715,2.6280705900143398e-5,-7.669131102787287e-8,0.004247676613223559,2.6517177808645175e-5,-7.719284879324458e-8,0.004247673609435171,2.6650746595202952e-5,-7.747651982304646e-8,0.004247645708001549,2.66412350943042e-5,-7.74564776254694e-8,0.004247658309913079,2.6483856580341366e-5,-7.712204781528955e-8,0.004247771456591539,2.6216061034290582e-5,-7.655226898516179e-8,0.004248018640476505,2.590800755606473e-5,-7.589568494417051e-8,0.004248395212570714,2.563994069145496e-5,-7.532244221725396e-8,0.004248861259489376,2.5477021622606432e-5,-7.497104067998361e-8,0.00424935590167607,2.5452038700586148e-5,-7.491170753332291e-8,0.004249815624233812,2.5560514080836893e-5,-7.513587325912593e-8,0.0042501900081495896,2.5766672608186727e-5,-7.556853344785969e-8,0.004250451383611506,2.6015861961209102e-5,-7.609427999654669e-8,0.0042505977356969114,2.6248914551540066e-5,-7.658758795271883e-8,0.0042506498090625795,2.6415031884901112e-5,-7.694017883491166e-8,0.004250644097952955,2.648096828203765e-5,-7.708071584908982e-8,0.0042506237812728765,2.6435303290169302e-5,-7.698415129034421e-8,0.004250629816343292,2.6287691938557887e-5,-7.667036324682085e-8,0.0042506940711203485,2.6064200669597658e-5,-7.619435383064163e-8,0.00425083548128867,2.5800616341765846e-5,-7.563201480582007e-8,0.004251059186062351,2.5535598231431913e-5,-7.506549954746807e-8,0.004251357853991461,2.5304981396812947e-5,-7.457106386619228e-8,0.004251714123475805,2.5137752884505912e-5,-7.421052674232194e-8,0.004252103288002902,2.5053445751813735e-5,-7.402578044122805e-8,0.0042524958808914486,2.5060282096586535e-5,-7.403485203242214e-8,0.004252860347046862,2.5153483119387155e-5,-7.422821487858902e-8,0.004253166420302202,2.5313592833064807e-5,-7.4565027741937e-8,0.004253390056795452,2.5505445065978426e-5,-7.497072826604751e-8,0.004253520373611728,2.567954717105097e-5,-7.533987563241299e-8,0.004253567583483577,2.5778553226866115e-5,-7.555000192971296e-8,0.004253568477479618,2.57508981459835e-5,-7.549083696491824e-8,0.004253583802551681,2.5570092233629636e-5,-7.51055603806773e-8,0.004253683035294351,2.5251865633977112e-5,-7.44273175308893e-8,0.0042539191944363595,2.4857202588394434e-5,-7.35855734003273e-8,0.004254305764216735,2.447438286380503e-5,-7.276784994537231e-8,0.004254809815918776,2.4186839495990022e-5,-7.215147164839955e-8,0.004255365549942023,2.40441206534225e-5,-7.184200794898621e-8,0.004255899200387112,2.4050089820884473e-5,-7.184826829956902e-8,0.0042563516080044266,2.416972185021108e-5,-7.209662433728606e-8,0.004256690396141003,2.434605252160264e-5,-7.246675786316027e-8,0.0042569115892744334,2.4517943449023026e-5,-7.282912443145628e-8,0.0042570344588616455,2.463347637775471e-5,-7.30732558512375e-8,0.0042570934805204125,2.465775417313392e-5,-7.312438614433928e-8,0.004257129932313604,2.4575925834567138e-5,-7.295011734563332e-8,0.0042571843494951115,2.4392667825468296e-5,-7.255962537821784e-8,0.00425729039774817,2.4129023933815476e-5,-7.199717208281165e-8,0.004257470606229811,2.3817370327804808e-5,-7.133146006679518e-8,0.004257734255741909,2.349544247400287e-5,-7.064283667735547e-8,0.004258077393204028,2.3200390137071024e-5,-7.001050679824002e-8,0.004258484618862725,2.2963666553012255e-5,-6.950158216921607e-8,0.004258932027056634,2.2807293789006354e-5,-6.916316297269846e-8,0.0042593906153518026,2.2741586385370254e-5,-6.901757022449099e-8,0.0042598297434363165,2.276399055898611e-5,-6.905989169541386e-8,0.004260220606168873,2.2858651267932304e-5,-6.925694232532747e-8,0.004260539991874552,2.2996585299082128e-5,-6.954740578872719e-8,0.004260774793749827,2.3136869567961894e-5,-6.984415171021355e-8,0.004260927452055153,2.3230106921002925e-5,-7.004155848425731e-8,0.004261021309681241,2.3226075701983406e-5,-7.003196358517582e-8,0.004261102938290243,2.308688722779646e-5,-6.9733984200722e-8,0.004261236712509181,2.2804045770392858e-5,-6.912910597515336e-8,0.004261487734137989,2.2412204909363093e-5,-6.829103484152083e-8,0.004261895857940792,2.1987951130290533e-5,-6.738297115674651e-8,0.004262453748847359,2.1626559517556065e-5,-6.660796308383029e-8,0.004263104835077354,2.14049565306401e-5,-6.613002381831203e-8,0.004263765230072934,2.1352073118542486e-5,-6.601108302348439e-8,0.004264356348996169,2.14434400684497e-5,-6.619951822339648e-8,0.00426482929740014,2.1618744627758198e-5,-6.656745990661841e-8,0.004265171943391067,2.1807560186110623e-5,-6.696539410340849e-8,0.004265402331610535,2.194966411597293e-5,-6.726522140368924e-8,0.004265556764276095,2.2005321336605362e-5,-6.738204521109695e-8,0.004265678484351986,2.1957407300082035e-5,-6.727876331639272e-8,0.004265809259589074,2.1808924150594526e-5,-6.696101507231523e-8,0.004265983904005325,2.1578682448027443e-5,-6.646826954849454e-8,0.004266226920993157,2.1296504146896058e-5,-6.586379168206377e-8,0.004266550629286272,2.0998265292050864e-5,-6.522408289024045e-8,0.004266954602654954,2.072086530767614e-5,-6.46280184319503e-8,0.0042674264408546,2.0497353315112702e-5,-6.414629674705478e-8,0.004267943861511287,2.0352576012947905e-5,-6.383209365453901e-8,0.004268477960877023,2.0299833661802612e-5,-6.371398436365584e-8,0.004268997253092252,2.0338959047789847e-5,-6.379193925228933e-8,0.004269472004022922,2.0455923406950072e-5,-6.403649435074647e-8,0.004269878504480831,2.0623872099556896e-5,-6.439082513227808e-8,0.004270203091943123,2.0805512560485156e-5,-6.477560803074754e-8,0.004270445852852126,2.0956944805511876e-5,-6.509700275244613e-8,0.004270623800199121,2.10334314266037e-5,-6.525895403540025e-8,0.004270772558072353,2.0997890319405713e-5,-6.518152289098647e-8,0.00427094441011345,2.083220432249813e-5,-6.482534637528951e-8,0.004271199798210908,2.05492416329248e-5,-6.421755267416815e-8,0.00427159041645784,2.0199863007888447e-5,-6.346677840095314e-8,0.004272137010630017,1.986641311092636e-5,-6.274914812415897e-8,0.004272812866192905,1.9637907019181664e-5,-6.225512618287865e-8,0.004273546661830289,1.957484111226967e-5,-6.211428300886088e-8,0.004274248084309201,1.9683554754882735e-5,-6.234052528862284e-8,0.004274842584556,1.9916585609271047e-5,-6.283284863669002e-8,0.004275294989396107,2.0196932839426866e-5,-6.34271221447608e-8,0.004275612111248886,2.044876157713103e-5,-6.396157774097112e-8,0.004275829854443942,2.0618302854561106e-5,-6.432132893338302e-8,0.004275996344867708,2.068048102350494e-5,-6.445246254988373e-8,0.004276158761153353,2.0635703336763096e-5,-6.435525871581819e-8,0.00427635575964747,2.050278681984088e-5,-6.406929194779216e-8,0.004276614264766545,2.03118344130943e-5,-6.365844604760266e-8,0.004276948681532183,2.0098462742130343e-5,-6.319870838452115e-8,0.00427736112987467,1.9899240304877655e-5,-6.276838480380487e-8,0.004277842211255956,1.974773290141609e-5,-6.243949971073313e-8,0.004278372391904025,1.967077619426468e-5,-6.226968673760751e-8,0.004278924276628769,1.9684968915617704e-5,-6.229464867897638e-8,0.00427946603046503,1.9793798937027695e-5,-6.252207128612635e-8,0.004279965907331355,1.9986115124125946e-5,-6.292842834492383e-8,0.004280397398965965,2.0236567080278434e-5,-6.345990398536185e-8,0.004280744247696593,2.0508303055502708e-5,-6.403801521126411e-8,0.004281004505802116,2.075787626038736e-5,-6.45698971255669e-8,0.004281192901995228,2.0941958152062637e-5,-6.496252518206134e-8,0.004281340930710332,2.1025255578912166e-5,-6.513969573609285e-8,0.004281494037741554,2.0988991621400003e-5,-6.506040387677097e-8,0.004281705020143845,2.083884172795236e-5,-6.473613988226346e-8,0.004282022932066112,2.0609966237029076e-5,-6.424190093837948e-8,0.004282478182800925,2.0365345667199266e-5,-6.371269223823294e-8,0.004283067616495902,2.018344302717714e-5,-6.331700549222439e-8,0.004283747241477742,2.0134651144824004e-5,-6.320619458649664e-8,0.0042844407554519515,2.0253973496551404e-5,-6.345578723847007e-8,0.004285064598384449,2.0524555265033713e-5,-6.403009214368057e-8,0.004285558228008341,2.0883667246896797e-5,-6.479498002189184e-8,0.004285903068305841,2.1248575485531713e-5,-6.557331881327865e-8,0.004286121591209917,2.1546759971092086e-5,-6.620971443688664e-8,0.004286261550244254,2.173512138139228e-5,-6.661161891835543e-8,0.004286377010822107,2.1803562222643158e-5,-6.675698118613891e-8,0.004286514639174886,2.1767962224157696e-5,-6.667927461907289e-8,0.004286707249844844,2.1659831340824737e-5,-6.644549978914754e-8,0.004286972651294204,2.1517288514130502e-5,-6.613702981233638e-8,0.004287315036407035,2.137879459328305e-5,-6.583625969488997e-8,0.004287726996196279,2.1279125575024203e-5,-6.561792724729806e-8,0.00428819142343141,2.1246497524740444e-5,-6.554282703858169e-8,0.004288683412819257,2.1300005175710134e-5,-6.56522121072733e-8,0.004289172646002349,2.144705325197606e-5,-6.596225331674356e-8,0.004289626831671317,2.1681083267848825e-5,-6.64591918001667e-8,0.004290016489747565,2.1980505883871905e-5,-6.709706780234995e-8,0.0042903207017423875,2.2309974166205005e-5,-6.780039689973465e-8,0.004290532704681695,2.2624802256956494e-5,-6.847351420232322e-8,0.004290663720481053,2.2878545281189634e-5,-6.901668815447957e-8,0.004290743428588021,2.3032647343331645e-5,-6.934675430215987e-8,0.004290816160740989,2.3066060527652307e-5,-6.941783186631997e-8,0.004290932973482719,2.298241860165485e-5,-6.923692897416443e-8,0.004291140720082246,2.281268438762679e-5,-6.886989001401675e-8,0.004291469988513568,2.261171092999127e-5,-6.843422945885471e-8,0.0042919245712092595,2.244789438370406e-5,-6.807700264279899e-8,0.004292475971297328,2.238658804783379e-5,-6.793912075922681e-8,0.004293066649609138,2.2470558774809148e-5,-6.811318501504072e-8,0.004293623937526895,2.2703998892035536e-5,-6.860890598586648e-8,0.0042940818493636184,2.304812006375384e-5,-6.934344898792616e-8,0.004294402362672422,2.3432831436448893e-5,-7.016645002765099e-8,0.004294586104386337,2.378055743966283e-5,-7.091121590795328e-8,0.004294667795317409,2.4030920659155234e-5,-7.144780929009046e-8,0.004294700566059802,2.4155324165777983e-5,-7.171440891510901e-8,0.004294738209100082,2.4157840931771394e-5,-7.171925710040148e-8,0.0042948226573763385,2.4066452881318333e-5,-7.152192906009953e-8,0.004294978812281802,2.3921337639631674e-5,-7.120830502904449e-8,0.004295214901080934,2.3765000948817973e-5,-7.08694876550506e-8,0.004295525436407369,2.363587044291823e-5,-7.058807624485363e-8,0.004295894601684546,2.3564786623837452E-05,-7.04305813207749e-8,0.004296299122201778,2.357308522950433e-5,-7.044321503200956e-8,0.004296710657229467,2.367115187319423e-5,-7.064870539544668e-8,0.004297098295590391,2.38568917503796e-5,-7.104295898373251e-8,0.004297431906932636,2.4114275885103977e-5,-7.159190498213205e-8,0.004297686870625992,2.4412901902798002e-5,-7.223050607165677e-8,0.004297849991681794,2.4710049162891303e-5,-7.286710575334312e-8,0.00429792530231652,2.4956591162591826e-5,-7.339606327152146e-8,0.004297937372396556,2.5107015043400802e-5,-7.371925088269417e-8,0.004297929510021779,2.5131737805527713e-5,-7.377254984435431e-8,0.004297955548234345,2.5027789983162344e-5,-7.354890403274291e-8,0.004298066575615005,2.4823310836198834e-5,-7.310812995376074e-8,0.004298296552607654,2.4573070322224938e-5,-7.256747872959403e-8,0.004298651648983001,2.434559188780995e-5,-7.207413756368472e-8,0.004299106911661393,2.4205518413300738e-5,-7.176741926718479e-8,0.004299611453430702,2.4196312655059432e-5,-7.174150839999789e-8,0.0043001009376553104,2.4328171010078167e-5,-7.201924724959771e-8,0.004300514215980978,2.45747458074727e-5,-7.254478183774332e-8,0.00430080955408668,2.4880164403869278e-5,-7.319841098782959e-8,0.00430097535914321,2.5174795560467062e-5,-7.383040760602065e-8,0.004301031639911904,2.5394822709818133e-5,-7.430318462394381e-8,0.004301021854896047,2.549876742515806e-5,-7.452698087324046e-8,0.004300998826632299,2.5475424898201563e-5,-7.447707677090092e-8,0.0043010105133326326,2.5341837209243172e-5,-7.418955573869462e-8,0.00430109035070397,2.513426620792213e-5,-7.374198268112992e-8,0.004301253742716078,2.48970164755011e-5,-7.32294267491531e-8,0.004301499427306543,2.467299592201586e-5,-7.274417707510015e-8,0.0043018132999952385,2.4497627550464064e-5,-7.236262240548909e-8,0.004302172657874503,2.4395814589290057e-5,-7.213867310051331e-8,0.004302549817683467,2.4380785913499932e-5,-7.210122313442096e-8,0.0043029149958991805,2.44536492446394e-5,-7.225313252007961e-8,0.004303238964457443,2.460296377691644e-5,-7.2570238773880585E-08,0.00430349625434463,2.4804348391217722e-5,-7.300042578258291e-8,0.0043036695281246816,2.50209511462533e-5,-7.34645445614565e-8,0.0043037550770795956,2.5206324498041653e-5,-7.386254745634518e-8,0.004303768148276709,2.5311391686062272e-5,-7.408849797523384e-8,0.004303745290754547,2.5296058710614142e-5,-7.405564302472968e-8,0.0043037402219377715,2.5143263129179642e-5,-7.372674513257676e-8,0.004303811401843918,2.486984655474745e-5,-7.31375476237472e-8,0.004304003924871586,2.452738717704159e-5,-7.239861410051003e-8,0.004304332998053507,2.4189634346796077e-5,-7.166837537127397e-8,0.004304777053220583,2.3930305794275484e-5,-7.110548942813876e-8,0.0043052839373079,2.380055815885997e-5,-7.082046368346776e-8,0.004305786979287081,2.381512406074437e-5,-7.084577599968396e-8,0.004306223908680077,2.3950918898359302e-5,-7.113265222969439e-8,0.0043065521824008435,2.4156359154944985e-5,-7.157081214482665e-8,0.00430675720105395,2.4366745878058644e-5,-7.202132826384251e-8,0.00430685272341944,2.452074994873828e-5,-7.235202054839195e-8,0.0043068746876313785,2.457397362237289e-5,-7.246674040986775e-8,0.004306870807432403,2.450692094765032e-5,-7.232274420159353e-8,0.0043068889333198876,2.4326274108967804e-5,-7.193368553734489e-8,0.004306967157178836,2.4060115372153373e-5,-7.135951482856131e-8,0.004307127792060001,2.3749312473508598e-5,-7.068800846487233e-8,0.004307375847549257,2.3437998378882705e-5,-7.001424126954424e-8,0.0043077011487614265,2.316559033074148e-5,-6.942331161839482e-8,0.004308082476774727,2.296156998550824e-5,-6.897901648309085e-8,0.004308492160407662,2.2843008936849732e-5,-6.871848008341235e-8,0.00430890014225028,2.2814028032551207e-5,-6.865098180169714e-8,0.004309277281921247,2.2866200020617407e-5,-6.875880227967708e-8,0.004309598220494261,2.2979234337591817e-5,-6.899862356038913e-8,0.004309844408536244,2.3121853538730567e-5,-6.930329429478826e-8,0.0043100078615668095,2.3253479651415424e-5,-6.95853524949172e-8,0.004310095640386761,2.3328083445441076e-5,-6.974529757037752e-8,0.0043101338257101485,2.3301787131791224e-5,-6.968807200575135e-8,0.004310168187241177,2.3144787924465443e-5,-6.934892854607553e-8,0.004310257826444425,2.285531683637069e-5,-6.872365125157918e-8,0.004310459684221365,2.2469228310805165e-5,-6.788925321183882e-8,0.0043108073193948325,2.2056750050369026e-5,-6.699692997284909e-8,0.004311294032439131,2.170255209789584e-5,-6.622910378436072e-8,0.004311871307369093,2.1476062378587954e-5,-6.573553756794064e-8,0.004312465198993063,2.1407057452158824e-5,-6.558081946270183e-8,0.004313001977162613,2.147859710794636e-5,-6.572910476913147e-8,0.00431343005920553,2.1637960989153616e-5,-6.606750631843108e-8,0.004313730316577628,2.181691089414023e-5,-6.644950764688654e-8,0.004313914738250244,2.1951418489715036e-5,-6.673726332891451e-8,0.004314017860593639,2.1995240270097538e-5,-6.6830778021755e-8,0.00431408563427076,2.1926188546349096e-5,-6.668152880876458e-8,0.004314164844430976,2.1746350005664837e-5,-6.62931915957548e-8,0.00431429466372932,2.1478088191753095e-5,-6.571331506627689e-8,0.004314501024681896,2.1157447735519515e-5,-6.501929657323107e-8,0.004314794068269408,2.0826407239506826e-5,-6.430170217264929e-8,0.004315168523400873,2.0525388218328684e-5,-6.364798919827755e-8,0.00431560642180513,2.0287173353931803e-5,-6.31292183912412e-8,0.0043160812455876356,2.0132909454777427e-5,-6.279132138753954e-8,0.004316562520177888,2.007033177327738e-5,-6.265126152698634e-8,0.00431702006617794,2.00938082788825e-5,-6.269717769742918e-8,0.004317427588706235,2.018551638500187e-5,-6.28909388180351e-8,0.004317765712734754,2.0317234227004703e-5,-6.317193328846631e-8,0.004318024775138963,2.0452628316515763e-5,-6.34618604024906e-8,0.00431820770093002,2.0550394730606987e-5,-6.367139110618334e-8,0.004318332893899484,2.0569188001987255e-5,-6.371081436092053e-8,0.004318436011644906,2.04754635624101e-5,-6.350712260775898e-8,0.0043185681789404615,2.0254385622796044e-5,-6.302778494565895e-8,0.004318787523787666,1.9921423273137004e-5,-6.230594134708772e-8,0.004319142414166795,1.9528518015015e-5,-6.145372829533996e-8,0.004319650180655444,1.9156534321257355e-5,-6.064588141621515e-8,0.004320282432594846,1.8890460254098007e-5,-6.006610839445816e-8,0.00432096924731175,1.8786257539194468e-5,-5.983551079099197e-8,0.004321623889974825,1.8848028753740572e-5,-5.996331107102821e-8,0.004322174856199251,1.9029232241916958e-5,-6.03494594472305e-8,0.004322587553187694,1.9254995930678356e-5,-6.083272565155132e-8,0.004322867520357473,1.9450265918529555e-5,-6.125132934634046e-8,0.004323049667978551,1.956007946768571e-5,-6.148655784160723e-8,0.004323182862961931,1.9557648041747735e-5,-6.148015369528662e-8,0.004323316556168647,1.9443050480583164e-5,-6.123159791433297e-8,0.004323491840940722,1.9237131005163212e-5,-6.0785188942898e-8,0.004323736659978244,1.8974013586600857e-5,-6.021415798447603e-8,0.00432406401637427,1.8693883726101143e-5,-5.960523413418266e-8,0.004324472264424686,1.8436553474490432e-5,-5.904470094336049e-8,0.004324946983099295,1.8236033860153257e-5,-5.860648003866715e-8,0.004325464084859797,1.811635649105119e-5,-5.8342897748555724e-8,0.004325993794135984,1.8088868183602328e-5,-5.8278740560323874e-8,0.004326505053826906,1.8151193617222837e-5,-5.84090469392405e-8,0.004326969827564337,1.8287871460248693e-5,-5.870057233852731e-8,0.004327366867667058,1.8472348280178974e-5,-5.909613070587311e-8,0.004327684784604043,1.8669955227489085e-5,-5.952094345795759e-8,0.004327924409123366,1.8841706401499647e-5,-5.989069354469142e-8,0.004328100446453682,1.8948978694444737e-5,-6.012153384588638e-8,0.004328242207755195,1.8959396499784854e-5,-6.014285604854431e-8,0.00432839251061342,1.8854306712077532e-5,-5.991366270790545e-8,0.004328602976287375,1.8637363771232864e-5,-5.9441399495521534e-8,0.004328923808193235,1.834172061702968e-5,-5.879768517306489e-8,0.0043293877420519525,1.803074398317214e-5,-5.8119858923673065e-8,0.004329992303019424,1.7786082973530267e-5,-5.7585025996974733e-8,0.0043306904239555155,1.768141014178147e-5,-5.735306902442807e-8,0.004331400140317573,1.7751344357086818e-5,-5.749928204325917e-8,0.00433203358321681,1.797402614272783e-5,-5.79766211094402e-8,0.004332530332663138,1.828016466901793e-5,-5.8635303908857e-8,0.004332875915402321,1.858298602165903e-5,-5.928765562337491e-8,0.00433309804217549,1.8810034258350935e-5,-5.977689798049865e-8,0.004333248483983109,1.8921204984793378e-5,-6.001607106531904e-8,0.00433338344031064,1.891050947589809e-5,-5.999178553599807e-8,0.004333550076056095,1.879802272931174e-5,-5.974688447449809e-8,0.00433378028617974,1.8619161178224815e-5,-5.935746777534596e-8,0.004334089547866698,1.841532739235039e-5,-5.891288378805079e-8,0.004334478361386218,1.8227051919153682e-5,-5.8500987248132956e-8,0.004334934676237755,1.8089192813388756e-5,-5.819765687811798e-8,0.004335436753461419,1.8027479513569926e-5,-5.805910095808496e-8,0.0043359564346629785,1.805604332199269e-5,-5.8116315662884676e-8,0.004336462854060841,1.8175905259323786e-5,-5.837173979925861e-8,0.0043369265589401195,1.8374650843245116e-5,-5.8798606028170783e-8,0.0043373237749320314,1.8627644789034814e-5,-5.9343665372251605e-8,0.004337640287689868,1.8900903887741546e-5,-5.993342885257249e-8,0.004337874393414731,1.915541028175581e-5,-6.0483416036833585E-08,0.004338038508031595,1.935252810257927e-5,-6.090974291052553e-8,0.004338159117798005,1.9460134108828392e-5,-6.114232980148806e-8,0.004338274774933433,1.9459013263327866e-5,-6.113884811203717e-8,0.004338431681466829,1.9348999136279857e-5,-6.089826911602292e-8,0.004338676165081497,1.9153806772625883e-5,-6.047161761109011e-8,0.004339043688685932,1.8922294391678095e-5,-5.996487910391701e-8,0.004339545635601907,1.872276095381814e-5,-5.952661815361361e-8,0.004340158161930944,1.8627380820978457e-5,-5.9314042383671195e-8,0.004340820587457169,1.8688023122385006e-5,-5.944030774359304e-8,0.0043414499059315215,1.8912570225124942e-5,-5.992294543545765e-8,0.004341969354982378,1.9256317958197064e-5,-6.066513104038634e-8,0.00434233727438235,1.963727956575248e-5,-6.148895689362684e-8,0.004342559700425284,1.9968375421524345e-5,-6.22053917653275e-8,0.004342681194553419,2.0187890581981525e-5,-6.268039485374884e-8,0.004342762928135588,2.0273446998614515e-5,-6.286515201466919e-8,0.004342861762115175,2.0238340874590014e-5,-6.278807051788223e-8,0.0043430181177510525,2.0118621313219873e-5,-6.25268278416331e-8,0.004343252686041884,1.9959504096147545e-5,-6.217910056180777e-8,0.004343568466291725,1.9805367104343365e-5,-6.184105171446118e-8,0.004343954731686096,1.9693836953182042e-5,-6.159455561595036e-8,0.004344390973704534,1.9652723436851773e-5,-6.150043408182522e-8,0.004344850331140559,1.969838524407601e-5,-6.159471002910778e-8,0.004345302792489047,1.9834740731576415e-5,-6.188629404236862e-8,0.004345718569954192,2.0052786388798823e-5,-6.235588467085406e-8,0.004346071890108299,2.0330942481172956e-5,-6.295676357140448e-8,0.004346345120939216,2.0636843362656404e-5,-6.361874562488397e-8,0.004346532649407227,2.0931092520010435e-5,-6.425633112670948e-8,0.004346643556812209,2.1172987348254808e-5,-6.478105282775598e-8,0.004346702139067369,2.1327622981692872e-5,-6.511679997367014e-8,0.004346745608778673,2.137326837845882e-5,-6.521581332631904e-8,0.004346818808370958,2.130755124320618e-5,-6.507223672428581e-8,0.004346966320702236,2.1150975510158874e-5,-6.472999399619078e-8,0.004347222824520035,2.0946473775532036e-5,-6.428207114555517e-8,0.004347603087958219,2.0753784072168932e-5,-6.385844812624413e-8,0.004348093942432825,2.0637814013072452e-5,-6.36007815326696e-8,0.004348651739160019,2.0651659508830847e-5,-6.36252925003523e-8,0.0043492091234758985,2.0818025289423062e-5,-6.398208836552688e-8,0.004349692649033529,2.1116545144798856e-5,-6.462735152225057e-8,0.004350046851532632,2.148558579412229e-5,-6.542717677117046e-8,0.004350254077818288,2.1841590704683874e-5,-6.619972247540033e-8,0.004350339218690546,2.2108334127427978e-5,-6.677897296497183e-8,0.0043503570289232605,2.2241363549602545e-5,-6.706795464383658e-8,0.004350370300956235,2.2236598604831392e-5,-6.705740408002692e-8,0.004350430646805905,2.2122994339245096e-5,-6.680980212150948e-8,0.004350568672542956,2.1947338186704e-5,-6.642641374111236e-8,0.004350793241612556,2.1759652050497017e-5,-6.601571687264844e-8,0.0043510958731244245,2.1603418432720286e-5,-6.567227801223937e-8,0.004351456464205779,2.1510811396030194e-5,-6.546638399293138e-8,0.004351848247956533,2.1501213936502228e-5,-6.544069492800358e-8,0.004352241536665431,2.1581184167779784e-5,-6.560999904068952e-8,0.00435260671995346,2.174478040527643e-5,-6.596178678053824e-8,0.004352917203110646,2.1974004373243897e-5,-6.645716600620018e-8,0.004353152776554337,2.2239771173006768e-5,-6.70329889115276e-8,0.0043533034557195595,2.250423557099356e-5,-6.760694213289382e-8,0.004353373159793762,2.2725320394767957e-5,-6.808739588456914e-8,0.004353381934028024,2.2863721397970617e-5,-6.838860655220757e-8,0.004353365144473504,2.2891593869259356e-5,-6.844958399294913e-8,0.004353368520464555,2.2800891768739177e-5,-6.825225963723115e-8,0.004353439178980252,2.2608536352457108e-5,-6.783284315230564e-8,0.004353614398994551,2.235592337679717e-5,-6.728093363331758e-8,0.004353911091254241,2.210179351953395e-5,-6.672420060605343e-8,0.004354319093981324,2.1909457854221882e-5,-6.63007028625976e-8,0.00435480070535855,2.183105798865961e-5,-6.612459579585697e-8,0.004355297564439238,2.1892701313526038e-5,-6.62535720399581e-8,0.004355744274261172,2.208486894760374e-5,-6.666768156040473e-8,0.004356085988373349,2.2362140804206785e-5,-6.72684784304803e-8,0.004356294790867451,2.265429960519879e-5,-6.790310472655907e-8,0.004356378446729466,2.2886711643210605e-5,-6.840875002736263e-8,0.004356377083974059,2.300287959510685e-5,-6.866191818023424e-8,0.004356348835649946,2.2979906602058662e-5,-6.861222380829316e-8,0.004356351070803769,2.283100298627068e-5,-6.828791603511024e-8,0.0043564253033482265,2.2596103437619816e-5,-6.777550831067574e-8,0.004356590438485916,2.232692894571213e-5,-6.71873398673657e-8,0.004356843977258533,2.207328036231141e-5,-6.663181407464889e-8,0.00435716773989199,2.1874255200302816e-5,-6.619429149558181e-8,0.0043575345277402245,2.17545974438534e-5,-6.592907552880914e-8,0.00435791364940389,2.1724473774609717e-5,-6.585880479157714e-8,0.004358274835255978,2.1780736857639492e-5,-6.597708420358102e-8,0.00435859102021611,2.190842428008057e-5,-6.625166759485598e-8,0.004358840788105637,2.2082124326210005e-5,-6.66273960160543e-8,0.004359011140673432,2.2267590761594875e-5,-6.702970759557112e-8,0.004359100770459174,2.2424521416654e-5,-6.737069654700543e-8,0.0043591232349589806,2.2511572931629804e-5,-6.756005138998922e-8,0.004359108521787183,2.2494178942973776e-5,-6.752211476792377e-8,0.004359100878157092,2.235434252364082e-5,-6.721725820444066e-8,0.004359151203790916,2.209952344550378e-5,-6.666129656422452e-8,0.004359304391648528,2.1766202486049173e-5,-6.59333189575158e-8,0.004359585156155929,2.141440124607869e-5,-6.516384241477555e-8,0.004359988028082468,2.1112991988769316e-5,-6.450292098818624e-8,0.004360476321122433,2.0920264451710092e-5,-6.407788779132097e-8,0.004360991139310915,2.0866833130000284e-5,-6.395608344448584e-8,0.0043614672632936585,2.094691373648151e-5,-6.412567446990825e-8,0.00436185047259702,2.1120373710730043e-5,-6.449986452881506e-8,0.004362111124733698,2.1324180464702604e-5,-6.4941620161576e-8,0.004362250570187353,2.1489435250093217e-5,-6.53007002748905e-8,0.004362299121386524,2.155913544719217e-5,-6.54524253343876e-8,0.004362306490900004,2.1501808725852057e-5,-6.532755100187959e-8,0.004362327761153033,2.131732881203479e-5,-6.492513324816661e-8,0.0043624093738372635,2.103373524474476e-5,-6.430576510522246e-8,0.0043625793884881775,2.0697054625575986e-5,-6.356950528095524e-8,0.004362844207020741,2.0358383999011046e-5,-6.282776240788013e-8,0.004363191208127825,2.006260880711081e-5,-6.217865603614356e-8,0.004363594835992581,1.984133466131531e-5,-6.169150041406605e-8,0.004364023394089613,1.971031936272081e-5,-6.140108548051583e-8,0.004364444713893855,1.9670147056786693e-5,-6.130906149278202e-8,0.004364830116595006,1.9708457183723877e-5,-6.13887614197793e-8,0.004365157008842049,1.9802456355045293e-5,-6.159066614971228e-8,0.0043654108447642925,1.9921222630134676e-5,-6.184741174273681e-8,0.004365587133171469,2.002805687530203e-5,-6.207888714985402e-8,0.004365693773882021,2.0083687956816993e-5,-6.219920719112305e-8,0.004365753261816067,2.0051413982690625e-5,-6.21279557727769e-8,0.004365803266929434,1.990492580654581e-5,-6.18073352015643e-8,0.004365893211815998,1.963812772857377e-5,-6.122369196067238e-8,0.00436607468587738,1.9273718051626967e-5,-6.042630561545666e-8,0.004366386030933518,1.8864892817626648e-5,-5.953112197574838e-8,0.004366836077417156,1.8485075349996475e-5,-5.869834534688314e-8,0.004367395636384049,1.8206114824510273e-5,-5.808489610024617e-8,0.0043680034475078715,1.807342018736887e-5,-5.779018629925774e-8,0.004368585429190273,1.8090183319349116e-5,-5.7821670584522674e-8,0.004369078205338029,1.8218018646954217e-5,-5.8096130493753056e-8,0.004369446485515545,1.8391914972714372e-5,-5.8472137246485704e-8,0.00436968898915749,1.854111673960781e-5,-5.879546235081837e-8,0.004369833869388169,1.8607666783746486e-5,-5.893945230499611e-8,0.004369927829734204,1.8558083076927652e-5,-5.883053071818364e-8,0.0043700232722843815,1.8387261432697222e-5,-5.845686139765173e-8,0.004370166642890487,1.8115771799109823e-5,-5.78626810222891e-8,0.004370389908592708,1.778250420799372e-5,-5.7132479090411445e-8,0.004370706190176643,1.7434832951346612e-5,-5.63696521066772e-8,0.004371109765100231,1.7118586178875612e-5,-5.5674571774707e-8,0.00437157972214823,1.6869939219546253e-5,-5.5126719806860253e-8,0.004372085769119738,1.671054970042191e-5,-5.477386649502183e-8,0.004372594495239376,1.6646123535862942e-5,-5.462880762363998e-8,0.004373074761423813,1.6667710334556395e-5,-5.467217352867607e-8,0.004373501568673639,1.675457816700928e-5,-5.485876153998176e-8,0.004373858478157565,1.687756120804058e-5,-5.5124896858937915e-8,0.004374139111879542,1.7002287531392034e-5,-5.5395470307775045e-8,0.0043743482958161295,1.7092346989803696e-5,-5.559079621301812e-8,0.004374503133939031,1.7112951246571128e-5,-5.5634563689226273e-8,0.004374633720251839,1.7035925052044434e-5,-5.546478116239983e-8,0.00437478225005965,1.6846665517467146e-5,-5.504911354774486e-8,0.0043749983953135655,1.6552475631203626e-5,-5.440324873724291e-8,0.004375328872488854,1.618927976830758e-5,-5.360566541222857e-8,0.0043758013925030695,1.5821068508656155e-5,-5.2796405543630164e-8,0.004376408267399701,1.552634116046679e-5,-5.214735730105396e-8,0.004377099954417064,1.5371900421595234E-05,-5.180488666204743e-8,0.004377797060914417,1.5385036173928835e-5,-5.182897065432117e-8,0.004378418187720637,1.5540645773084347e-5,-5.2165003016123936e-8,0.004378909008357041,1.5771884933839974e-5,-5.266706122898232e-8,0.0043792572209281865,1.599719360222389e-5,-5.315697219265368e-8,0.004379488986244382,1.6147744983164754e-5,-5.34842622002332e-8,0.004379653735493992,1.6183696763184442e-5,-5.356159676976171e-8,0.004379807029548539,1.6097454183882332e-5,-5.337188796430934e-8,0.004379997377027852,1.5908215829117925e-5,-5.2956489809098333e-8,0.004380258535441446,1.5652790384862128e-5,-5.239536296392365e-8,0.004380606499311609,1.5376010872551103e-5,-5.178635373794103e-8,0.00438103981704955,1.5122274389860483e-5,-5.122678455064238e-8,0.0043815422062817,1.4928716380928159e-5,-5.079841505994918e-8,0.0043820867949589636,1.4820349015323273e-5,-5.055656434916802e-8,0.004382641303252554,1.4807475268811135e-5,-5.052422039228374e-8,0.004383173380248949,1.4885420145896664e-5,-5.0691348370280644e-8,0.004383655356796422,1.5036302184118528e-5,-5.1018815625741976e-8,0.004384067847834171,1.5232293344004387e-5,-5.144564428159387e-8,0.0043844019828522774,1.543961315370945e-5,-5.1897827868784535e-8,0.004384660446837142,1.5622634657119858e-5,-5.229728990740927e-8,0.0043848576711448175,1.5747902572815793e-5,-5.257058563354719e-8,0.0043850193932531934,1.5788236658408824e-5,-5.2657827564574646e-8,0.0043851814481957125,1.572732220635757e-5,-5.252279948825495e-8,0.004385386970873339,1.5565072314536914e-5,-5.216487783723147e-8,0.004385680534183977,1.532309143986357e-5,-5.163119876709418e-8,0.004386097920633204,1.5047759637200314e-5,-5.102352030618483e-8,0.004386652021040343,1.4806503360449029e-5,-5.0490006751438264e-8,0.004387319473877426,1.4672634763753373e-5,-5.019184730718326e-8,0.004388037475553013,1.4699180145777687e-5,-5.024571194944651e-8,0.004388719358254085,1.4892581471994294e-5,-5.066597535539156e-8,0.004389286252243407,1.5203884862031068e-5,-5.1345376667470573e-8,0.00438969797548042,1.5546829342512437e-5,-5.209476228885879e-8,0.004389964650890107,1.583302129175502e-5,-5.272030351592314e-8,0.004390134913807563,1.6002864742013964e-5,-5.309129370757188e-8,0.004390272271287374,1.6037840528340582e-5,-5.3166940446750974e-8,0.004390434097429688,1.595511112825302e-5,-5.298445643173724e-8,0.004390660057645578,1.579392903294117e-5,-5.262936255347156e-8,0.004390969109008046,1.5602006407262715e-5,-5.220585215637865e-8,0.0043913615412258964,1.542537772061049e-5,-5.1814795817357e-8,0.004391823037389939,1.5302039558842245e-5,-5.153985439117854e-8,0.004392329121287766,1.5258332624760626e-5,-5.143939304550827e-8,0.004392849551497714,1.5307073316800725e-5,-5.1542117695367437e-8,0.004393352682154456,1.54470359086033e-5,-5.18457185429351e-8,0.00439380971458905,1.566375392426153e-5,-5.23185628529972e-8,0.004394198597306122,1.5931683059558592e-5,-5.2904527284831545e-8,0.004394507186734965,1.621768345692803e-5,-5.353077333402549e-8,0.004394735227108045,1.6485492657756142e-5,-5.411762647781867e-8,0.004394894902223298,1.6700626893534787e-5,-5.45892803278868e-8,0.004395009971871057,1.6835218512750443e-5,-5.48843068576531e-8,0.004395113603586854,1.687246367982367e-5,-5.496537371682426e-8,0.004395244949411491,1.6810475067017456e-5,-5.482779901120044e-8,0.0043954442427448425,1.6665347947444088e-5,-5.450649984627839e-8,0.004395745883391455,1.6472740140844224e-5,-5.407968384406357e-8,0.0043961693024316155,1.6286178870649144e-5,-5.366522773031633e-8,0.0043967088244268844,1.616943709032258e-5,-5.340384348847231e-8,0.00439732633496883,1.6180870696195093e-5,-5.342443633742838e-8,0.004397953375547895,1.635135413255929e-5,-5.379535836427356e-8,0.0043985084347460835,1.6664842817597192e-5,-5.448152340898046e-8,0.004398926535594353,1.7055762545965226e-5,-5.533868602056141e-8,0.004399186184162931,1.7430878674003617e-5,-5.616169045398201e-8,0.004399316502889809,1.7706012639717648e-5,-5.676535310620799e-8,0.004399380619391071,1.7836085828877507e-5,-5.7050496127308454e-8,0.0043994479138703985,1.782330059445976e-5,-5.70217692683362e-8,0.004399571685962228,1.7705329205192075e-5,-5.676158687960766e-8,0.004399779842592975,1.7535919356775476e-5,-5.6387604272475e-8,0.004400076250313624,1.736849329520766e-5,-5.601691660456328e-8,0.0044004470021380936,1.7246443601718784e-5,-5.574493496590799e-8,0.0044008672958289925,1.7199144884804796e-5,-5.5636639903815625e-8,0.004401307044890794,1.724130099925887e-5,-5.572497188992369e-8,0.00440173510197177,1.737368836590099e-5,-5.6012208288017816e-8,0.004402122691783258,1.7584415933249197e-5,-5.6472543144591716e-8,0.004402446537357039,1.785064042267672e-5,-5.705582151470724e-8,0.004402691816659508,1.8141037663291022e-5,-5.7693066337959046e-8,0.004402854735432183,1.841939830699297e-5,-5.8304506128850546e-8,0.0044029441466111215,1.86494319283523e-5,-5.88101859483882e-8,0.004402981550175842,1.8800342453498846e-5,-5.914217622460607e-8,0.004402999067764595,1.8852377164001726e-5,-5.925669183407802e-8,0.004403035359985339,1.8801411674438728e-5,-5.914416507577008e-8,0.0044031298139103415,1.866162281600663e-5,-5.883524829467042e-8,0.004403315601073636,1.8465518632622366e-5,-5.8401102927705954e-8,0.004403612303337892,1.8260820798133723e-5,-5.794674902359043e-8,0.00440401903455858,1.810360352195355e-5,-5.7596036212635465e-8,0.004404509752154576,1.8047165882872968e-5,-5.746702598309528e-8,0.004405033516436402,1.812725114889848e-5,-5.763917890945277e-8,0.004405522902615492,1.834684093381671e-5,-5.8119578846809494e-8,0.0044059119457882465,1.866727755270758e-5,-5.8823215461512124e-8,0.004406159440016461,1.9013925428711905e-5,-5.958550245976834e-8,0.004406266628248096,1.9299284542711648e-5,-6.021339687547807e-8,0.004406277737108989,1.945484969608813e-5,-6.055575571644973e-8,0.004406261496645234,1.9454837423611572e-5,-6.055559500071444e-8,0.004406284449775708,1.9319660877416878e-5,-6.025761062267969e-8,0.00440639062788073,1.910099176720538e-5,-5.977521664665257e-8,0.004406594829344743,1.886022453602534e-5,-5.924323335780905e-8,0.004406887078573716,1.8651292088100253e-5,-5.878025539400848e-8,0.004407241761031286,1.8511880264080445e-5,-5.846944211875105e-8,0.0044076263524043535,1.8461551898719056e-5,-5.835435137480919e-8,0.0044080076754981525,1.8503530268696664e-5,-5.8442683603324096e-8,0.00440835579500999,1.862755742929406e-5,-5.871235534719573e-8,0.004408646532290339,1.881262321625275e-5,-5.911736690258402e-8,0.004408863496128932,1.9029458207028737e-5,-5.959328119831901e-8,0.004409000066919958,1.924325840921723e-5,-6.006330961355848e-8,0.004409061253908856,1.9417302526743488e-5,-6.044637646552229e-8,0.004409064800155661,1.9517894893698925e-5,-6.066804549783033e-8,0.00440904055014602,1.9520391771617026e-5,-6.067376479634501e-8,0.004409027212339246,1.9415263477098266e-5,-6.044217579738232e-8,0.004409066265143777,1.9212538136596372e-5,-5.99949182565613e-8,0.004409193715141178,1.8942795303234154e-5,-5.939893403493536e-8,0.0044094314113227616,1.865344497733075e-5,-5.875845298339941e-8,0.004409780143242562,1.8400286623901103e-5,-5.8196555817766816e-8,0.004410216569539457,1.8235638567657733e-5,-5.782905216370578e-8,0.004410695422717016,1.8195238170461436e-5,-5.773546974239403e-8,0.004411157650944433,1.8286844900537162e-5,-5.7933659296607315e-8,0.004411543971861461,1.8484117436023682e-5,-5.836601541020027e-8,0.004411811395675748,1.8729348317482946e-5,-5.890535923731313e-8,0.004411947793992804,1.89470109132833e-5,-5.938486561457419e-8,0.0044119780011767805,1.906592214848751e-5,-5.964712702981143e-8,0.004411956808968038,1.9042277832868503e-5,-5.9595124411453214e-8,0.004411950401682743,1.8873156757466962e-5,-5.92220569871064e-8,0.004412014554899769,1.8594182067809693e-5,-5.8606156280090905e-8,0.004412179536671111,1.8263848967560027e-5,-5.7876134214088945e-8,0.0044124466739733125,1.7943581917926447e-5,-5.716729690606632e-8,0.004412794575472388,1.7682304086576782e-5,-5.6587619247160394e-8,0.004413189368832398,1.7509204078874898e-5,-5.6201810628385806e-8,0.004413594086340192,1.743345530047553e-5,-5.603059765879325e-8,0.004413975065031127,1.7447630029714103e-5,-5.605809066694707e-8,0.004414305472350097,1.7532025516451413e-5,-5.6241179923360305e-8,0.004414567041261399,1.7658503065552773e-5,-5.651793566777759e-8,0.004414751115520992,1.779363418722658e-5,-5.681456751260478e-8,0.004414859663338807,1.7901658854669397e-5,-5.7052019121006296e-8,0.0044149062993784445,1.794805755027884e-5,-5.7153915757579485e-8,0.004414916691840586,1.7904389601374315e-5,-5.7057269944060924e-8,0.004414927200000021,1.77543682378513e-5,-5.672588204884182e-8,0.0044149804922138025,1.750003314877578e-5,-5.616395099473292e-8,0.00441511759337999,1.7165714561544804e-5,-5.542484487782527e-8,0.004415367428776234,1.679696126662312e-5,-5.460881274387819e-8,0.0044157368984729635,1.64525946058128e-5,-5.3845568238601775e-8,0.0044162055472075626,1.6190716787134946e-5,-5.3263516737987664e-8,0.004416727899593218,1.6052589799655223e-5,-5.295419024084609e-8,0.0044172437234548155,1.6049869174066154e-5,-5.294395078197559e-8,0.004417693384688244,1.615974344870538e-5,-5.3183040430361466e-8,0.004418033663467096,1.6329784446188893e-5,-5.355607037861073e-8,0.004418249405605174,1.6491255741248804e-5,-5.391129234465096e-8,0.004418357633513688,1.657727659886784e-5,-5.41007360539825e-8,0.004418402673640693,1.6540796109409133e-5,-5.4020027084270734e-8,0.004418443391223361,1.636694373579072e-5,-5.3635805163711675e-8,0.004418536429934856,1.6075637077552477e-5,-5.2991599870440183e-8,0.004418721153570862,1.5713686813819345e-5,-5.219048380509432e-8,0.004419011327149181,1.5339827180016276e-5,-5.136208116526004e-8,0.004419395436149071,1.5008693642004086e-5,-5.062720950800594e-8,0.004419843763828487,1.475917925423041e-5,-5.0072119853676645e-8,0.004420318190940414,1.4609543041482485e-5,-4.973758066953034e-8,0.004420781006999231,1.455837640529271e-5,-4.9620879180614367e-8,0.004421200875707693,1.4588855571197866e-5,-4.9685116993361385e-8,0.004421555921818236,1.4673832615992423e-5,-4.9870423302738325e-8,0.004421834861138942,1.4780363310829798e-5,-5.0103979045361175e-8,0.004422037237442245,1.4873349197413976e-5,-5.030810679146616e-8,0.0044221735003303324,1.4918708687383351e-5,-5.0407314602882546e-8,0.004422265076734925,1.488684665139391e-5,-5.0335987892971714e-8,0.004422343894139628,1.4757129675741033e-5,-5.004829930915722e-8,0.004422450182798508,1.4523472760162985e-5,-4.953057889944237e-8,0.004422627129488367,1.4199935359410018e-5,-4.8813710361903955e-8,0.004422911606825086,1.382367526534905e-5,-4.7979688149729203e-8,0.004423322237828266,1.3451651182103001e-5,-4.715436315562399e-8,0.00442384901396835,1.3148639319550321e-5,-4.6480995689175956e-8,0.004424450465700748,1.2968277830758903e-5,-4.6078384882655163e-8,0.004425062411682258,1.2934115116972632e-5,-4.599895383332543e-8,0.004425616532075163,1.3029713949506274e-5,-4.620678002907812e-8,0.00442606125460747,1.3203026493029452e-5,-4.658713648167632e-8,0.004426376247492937,1.3382921571667098e-5,-4.698291956016331e-8,0.0044265757656095205,1.3500398155340669e-5,-4.7241493967355725e-8,0.0044267015746751685,1.3506656906523134e-5,-4.7254652877251136e-8,0.004426809564985756,1.3383317501207797e-5,-4.698127400556689e-8,0.004426954798878417,1.3143641854113754e-5,-4.645015416988944e-8,0.004427178862902963,1.282611238434304e-5,-4.574598280569655e-8,0.004427502065621027,1.248309395401886e-5,-4.498442593684408e-8,0.004427921557662274,1.2167909243147152e-5,-4.4283605507852286e-8,0.0044284149290582065,1.1923590626574095e-5,-4.373914849628887e-8,0.004428947492553156,1.1775726251332769e-5,-4.340818287378602e-8,0.0044294807498054785,1.1730276245194692e-5,-4.330431159108967e-8,0.00442997978210213,1.1775616157272551e-5,-4.3402016286169154e-8,0.004430418284203898,1.1887104697408922e-5,-4.3646763807176316e-8,0.004430781078167451,1.2032394059880673e-5,-4.396683813881441e-8,0.004431064723837474,1.2176260557030221e-5,-4.428411771350637e-8,0.0044312770935376515,1.228454666456542e-5,-4.452283720664672e-8,0.004431436570445023,1.2327479539015128e-5,-4.4616919616307796e-8,0.004431571073044788,1.2282959424570596e-5,-4.451723465126646e-8,0.004431716519505703,1.2140402085948442e-5,-4.420012359781004e-8,0.004431913708413011,1.190525144918933e-5,-4.367745401611296e-8,0.004432202271488714,1.1603137979985335e-5,-4.3005902031456583e-8,0.00443261096494701,1.128105558813796e-5,-4.228959825337529e-8,0.004433145658560025,1.1001798769206879e-5,-4.166779716993523e-8,0.004433779801368679,1.082900401217352e-5,-4.12817006687968e-8,0.004434454646972603,1.0805123199301839e-5,-4.122560821070611e-8,0.004435094025680583,1.093179184586048e-5,-4.1503363883340675e-8,0.004435629850168535,1.1164738583475233e-5,-4.20170322203088e-8,0.004436026030782993,1.1428372850655338e-5,-4.259921088755147e-8,0.004436288544140871,1.1642827137621819e-5,-4.30729574358741e-8,0.00443645852333741,1.1749408550127374e-5,-4.33081550485094e-8,0.004436594888881352,1.1724150687214207e-5,-4.3251474414460785e-8,0.004436755874140951,1.1577909422798677e-5,-4.292656969019233e-8,0.00443698556045168,1.134743368171151e-5,-4.241440383930332e-8,0.004437307141160754,1.1082923092713402e-5,-4.1825890935872864e-8,0.004437722000943753,1.0835997728485317e-5,-4.1275427325207346e-8,0.004438212894918262,1.0650076781292515e-5,-4.0859608303239765e-8,0.004438749638289341,1.055393982394728e-5,-4.0642808497137944e-8,0.004439295959152751,1.0558721353467244e-5,-4.065026502851615e-8,0.004439816265453436,1.065819146280534e-5,-4.0868482817672476e-8,0.004440281272009354,1.0831676496297347e-5,-4.1251640135869176e-8,0.004440671831938921,1.1048643543678123e-5,-4.173183848769729e-8,0.004440980777783971,1.1273898329578631e-5,-4.2230779881881195e-8,0.00444121303269828,1.1472474912977608e-5,-4.267071508775094e-8,0.004441384565236301,1.1613723431763203e-5,-4.298351149337096e-8,0.004441520716355006,1.1674659260946504e-5,-4.311801611635916e-8,0.004441654103827259,1.1642927188475744e-5,-4.304658575328331e-8,0.004441821893723169,1.151970903380154e-5,-4.277157863485106e-8,0.004442061733825511,1.1322569755221519e-5,-4.2331789891194374e-8,0.004442405367359218,1.1087324544257746e-5,-4.1806717475930976e-8,0.004442869542993695,1.0866655575333044e-5,-4.1313536007648224e-8,0.004443445735403163,1.0722317764963522e-5,-4.0989728756109695e-8,0.004444093284368835,1.0708865030730829e-5,-4.0956817567218523e-8,0.0044447430760904995,1.085167507562386e-5,-4.127142029165161e-8,0.004445316435740319,1.1129602124610225e-5,-4.1886642259513546e-8,0.004445754128237322,1.1475626607160576e-5,-4.2653546623268654e-8,0.004446040101964218,1.180003031512926e-5,-4.3372752883896014e-8,0.004446205530673317,1.2024629257590159e-5,-4.387057130415036e-8,0.004446312162708855,1.2108771182796773e-5,-4.405669777283164e-8,0.004446427135514646,1.2055740045207085e-5,-4.3938284164400834e-8,0.004446602819718554,1.1902415131929761e-5,-4.3596893302424874e-8,0.004446867462772274,1.1702280581489064e-5,-4.3150880569211476e-8,0.00444722502652385,1.1510013581017392e-5,-4.272141346034424e-8,0.004447660112373166,1.1371009258943887e-5,-4.240940734950581e-8,0.004448144592351008,1.1315808141326373e-5,-4.228315760058449e-8,0.00444864413440166,1.1358103698667109e-5,-4.237371725707588e-8,0.004449124029971733,1.1495141539025288e-5,-4.2675501313854964e-8,0.004449554153193063,1.1709878328814522e-5,-4.315087896932633e-8,0.004449912835517964,1.1974488478859295e-5,-4.373794004970734e-8,0.004450189440411732,1.2254789064169708e-5,-4.4360459045246395e-8,0.004450385488268202,1.2515133469631053e-5,-4.493894052335691e-8,0.004450514285615522,1.2723218588808307e-5,-4.540139076746559e-8,0.004450599251519201,1.285424788009527e-5,-4.569253626675187e-8,0.0044506713012207,1.2894201090678989e-5,-4.578100104332719e-8,0.004450765540459394,1.2842246866083047e-5,-4.5664633203186566e-8,0.004450917284953617,1.2712332911019386e-5,-4.537412450667041e-8,0.004451157155322636,1.2533780867555994e-5,-4.497450577626395e-8,0.004451504873237557,1.2350163721766086e-5,-4.45628020467471e-8,0.004451961919675364,1.2214876307893983e-5,-4.425820466465791e-8,0.004452504731610211,1.218142064773772e-5,-4.418032467973815e-8,0.004453082319776596,1.2287689702351628e-5,-4.441399178406356e-8,0.0044536237576869794,1.2537566429059222e-5,-4.496809227303929e-8,0.004454058600129623,1.2889221277017663e-5,-4.5749448011482285e-8,0.004454344557171657,1.3261764007055407e-5,-4.657774011379726e-8,0.004454487209756872,1.356321056345686e-5,-4.724799032523849e-8,0.004454537817108847,1.3726577222573843e-5,-4.761103975360433e-8,0.004454569953530231,1.3733042945322505e-5,-4.762500825386583e-8,0.0044546503114754445,1.3611019367534598e-5,-4.7353008192290663e-8,0.004454819540444871,1.3417353161617989e-5,-4.692121901981639e-8,0.004455088006355839,1.3214963151419203e-5,-4.6469264458608674e-8,0.0044554417320164475,1.3056798315819873e-5,-4.6114776888332594e-8,0.00445585181070049,1.2978205618864193e-5,-4.5936593073707565e-8,0.004456283063848414,1.2995515360089378e-5,-4.597157388372203e-8,0.004456700455403941,1.3107894323916252e-5,-4.621850553884396e-8,0.0044570734879752745,1.3300386432833933e-5,-4.664459015113946e-8,0.004457379329847273,1.354733210799182e-5,-4.719288460843296e-8,0.004457605083715164,1.381611653844664e-5,-4.779065425340231e-8,0.004457749208594007,1.4071308351959136e-5,-4.835873390854053e-8,0.004457821935847933,1.4279162754995978e-5,-4.882171487818592e-8,0.004457844413589892,1.4412244841220207e-5,-4.9118304592704225e-8,0.004457846392811299,1.4453606997495086e-5,-4.9210578647334747e-8,0.004457862579541846,1.4399892313824196e-5,-4.909080557286075e-8,0.004457928006711199,1.4262935015950712e-5,-4.878499921089497e-8,0.0044580728160356475,1.406956442522464e-5,-4.835259699152093e-8,0.004458316817654614,1.385936585539174e-5,-4.7881662798881046e-8,0.004458664213340158,1.3680097018682372e-5,-4.7478820736234354e-8,0.004459099197509258,1.3580228791160693e-5,-4.725262339870064e-8,0.004459584026033035,1.3598195514992196e-5,-4.728940689142557e-8,0.004460062199621417,1.3749252092781208e-5,-4.762371409222547e-8,0.0044604695823886415,1.4013664681784223e-5,-4.8211740969940616e-8,0.004460753777901616,1.4333327715772738e-5,-4.8923755358978294e-8,0.004460895857321044,1.4624178301927179e-5,-4.957195585635171e-8,0.00446092230560696,1.4804495669279922e-5,-4.997383459421404e-8,0.004460896977374359,1.4826692738442146e-5,-5.002318300311229e-8,0.004460895349738283,1.4694329378561483e-5,-4.972790533985917e-8,0.004460976016780967,1.4455254987504552e-5,-4.919452719357374e-8,0.0044611646111219405,1.4178234027314433e-5,-4.857603680579923e-8,0.004461454185855782,1.3928460573193122e-5,-4.801746458935442e-8,0.0044618157539403095,1.3752419469232318e-5,-4.7622364855750946e-8,0.0044622107137216325,1.3673354803297678e-5,-4.7442825841443116e-8,0.00446260043945746,1.369354382664959e-5,-4.7484455725649896e-8,0.004462952022908023,1.3799219006272274e-5,-4.7717131725367e-8,0.004463241121058138,1.3965553328710682e-5,-4.8085882901992276e-8,0.004463453324834858,1.4160873361938923e-5,-4.852016867099879e-8,0.0044635849469705675,1.435036495631774e-5,-4.894218569650978e-8,0.004463643417515637,1.4499782775240661e-5,-4.9275285274911396e-8,0.004463647051016639,1.4579493829923948e-5,-4.945312739285398e-8,0.004463623708041326,1.456882906403381e-5,-4.9429429021382195e-8,0.004463607842406662,1.4460176219189537e-5,-4.918704040982184e-8,0.0044636357910401445,1.4261818394534823e-5,-4.874420470914212e-8,0.0044637397511841466,1.3998495202235436e-5,-4.815581116683994e-8,0.004463941391235043,1.3708962880863763e-5,-4.7508063679370155e-8,0.004464246337336341,1.3440376771153735e-5,-4.6906117413019404e-8,0.0044646407956383674,1.3240001878015215e-5,-4.645569825673976e-8,0.004465091381001237,1.3145269848031426e-5,-4.624087973870854e-8,0.004465549066273715,1.3173598219246631e-5,-4.6301165592733985e-8,0.004465957939694511,1.3314136875100861e-5,-4.661280004540448e-8,0.004466268576327031,1.352468763662037e-5,-4.708169932958065e-8,0.00446645372428031,1.3737541360524216e-5,-4.7556478385599956e-8,0.004466520878302181,1.3876287526487771e-5,-4.786615773013864e-8,0.004466514326078782,1.3880445157377903e-5,-4.7875375783545784e-8,0.004466502142877897,1.3727918531229615e-5,-4.753461483998569e-8,0.004466552086217613,1.344312403337607e-5,-4.689826847344771e-8,0.0044667082651349286,1.3085819784721498e-5,-4.609959388131855e-8,0.004466980019477852,1.2727550786706039e-5,-4.529813388914731e-8,0.004467345755137234,1.2428783962732317e-5,-4.4628795806165725e-8,0.004467765779943532,1.2225982089979055e-5,-4.4173112494455235e-8,0.004468196005854024,1.2129693991677846e-5,-4.395498255353792e-8,0.004468597642816224,1.2129490543834448e-5,-4.395156917433471e-8,0.00446894206410521,1.2201011417455164e-5,-4.410885737385981e-8,0.00446921225500677,1.2312244640502023e-5,-4.43555394468987e-8,0.004469402654481283,1.2428213420078234e-5,-4.46134499502362e-8,0.0044695185950805304,1.2514503621319245e-5,-4.48055188286882e-8,0.004469575723049835,1.2540430548831996e-5,-4.486296672886854e-8,0.004469599148903078,1.2482479511679878e-5,-4.473308223481721e-8,0.004469621667375493,1.2328204497541601e-5,-4.4387945702341005e-8,0.004469680258111596,1.2080054076724377e-5,-4.38329250854799e-8,0.004469810440791369,1.1757832861630705e-5,-4.3112118745779403e-8,0.004470038938882233,1.139812552580378e-5,-4.2307071423256166e-8,0.004470376233823944,1.1049363336854192e-5,-4.1525836645826615e-8,0.004470811437085582,1.0762470256707936e-5,-4.088220096014905e-8,0.004471311827050345,1.057885493987764e-5,-4.046892914926202e-8,0.004471828174441778,1.0518954079644614e-5,-4.0332120643179816e-8,0.00447230517930829,1.057478045414597e-5,-4.045439322306815e-8,0.004472694773246646,1.0709058764895794e-5,-4.075274930775221e-8,0.004472969079340785,1.0862056909000877e-5,-4.1093716830421817e-8,0.004473129460972397,1.096542999972803e-5,-4.1324306385980915e-8,0.004473208349376754,1.0960344314636686e-5,-4.131265117419883e-8,0.004473261801176122,1.0814980769902441e-5,-4.098727821687716e-8,0.004473353611162491,1.0535090952922028e-5,-4.036078520359405e-8,0.004473535890618031,1.0162456216834655e-5,-3.952640941680167e-8,0.004473833792415958,9.760956408521302e-6,-3.862688960352953e-8,0.004474240602953426,9.396173414810474e-6,-3.7808898628385294e-8,0.004474724001444978,9.11738920258227e-6,-3.718281945206038e-8,0.004475238859403357,8.948272943174389e-6,-3.6801887768029544e-8,0.0044757402350894555,8.887048525787006e-6,-3.6662466891908055e-8,0.004476192324498001,8.912754115928486e-6,-3.6717928510436886e-8,0.004476572466872101,8.99328366656885e-6,-3.689655835364853e-8,0.004476871540255352,9.092325994737656e-6,-3.711706737226179e-8,0.0044770926280973825,9.174281950373387e-6,-3.7299643889725875e-8,0.004477249315061717,9.207572991317009e-6,-3.737343689531388e-8,0.0044773641629216165,9.167232096321902e-6,-3.7282422144220036e-8,0.004477467204936426,9.037578898248145e-6,-3.699141801660316e-8,0.004477593756950581,8.815347168589488e-6,-3.649307148880597e-8,0.00447778058690321,8.512872182307729e-6,-3.5814955514758316e-8,0.004478059745215661,8.159958224253264e-6,-3.502372164908136e-8,0.004478450365817333,7.802247766408065e-6,-3.4221459193305144e-8,0.004478950468601355,7.494062159631074e-6,-3.3529720730520204e-8,0.004479532465119492,7.285542176108168e-6,-3.3060801908352687e-8,0.004480146136971822,7.2072554470058906e-6,-3.288331103792207e-8,0.004480730224220354,7.258279349781589e-6,-3.2995444030558204e-8,0.004481229449583244,7.4035582392112385e-6,-3.331896233314279e-8,0.004481610689525678,7.582522644393277e-6,-3.371838931973838e-8,0.004481872292063173,7.725939025928392e-6,-3.403868938062639e-8,0.00448204374844317,7.774910697168804e-6,-3.414782399457034e-8,0.004482176671298304,7.696059172490782e-6,-3.397078855811176e-8,0.004482330435030019,7.4890430319435334e-6,-3.350650916046562e-8,0.004482556672721601,7.1850969128227755e-6,-3.282465246101726e-8,0.0044828866992572885,6.837522641746615e-6,-3.2044432737991846e-8,0.0044833250857910616,6.507056498926579e-6,-3.130192899832561e-8,0.004483850858172803,6.24650987263678e-6,-3.071570165203201e-8,0.004484425307959444,6.08924159396039e-6,-3.036088489326645e-8,0.004485003194359061,6.044356934728174e-6,-3.025827024763154e-8,0.004485543401858622,6.098712850233066e-6,-3.0378643182073185e-8,0.004486016219005494,6.2234233182378906e-6,-3.0657287324259747e-8,0.0044864064166258944,6.3817652026060565e-6,-3.1011736157922704e-8,0.004486712974298434,6.536100940869929e-6,-3.135738930785751e-8,0.004486946987567679,6.652794334948827e-6,-3.16186317416998e-8,0.0044871290855611435,6.705289352964788e-6,-3.173578594963119e-8,0.004487287039748156,6.676139966458214e-6,-3.1669660514816774e-8,0.004487453549021817,6.558809591876483e-6,-3.1405558068106883e-8,0.004487663626245549,6.359694715241642e-6,-3.095779699979666e-8,0.004487950667436226,6.100153211559874e-6,-3.0374268126452117e-8,0.004488340386805238,5.817319379742182e-6,-2.973828357636435e-8,0.004488842722498734,5.561454687988725e-6,-2.9162651978515495e-8,0.004489443758855133,5.387386078451001e-6,-2.87704753805209e-8,0.00449010207955269,5.339481305214199e-6,-2.866142686948672e-8,0.004490754688042762,5.434077367358827e-6,-2.887228736862537e-8,0.004491334130057058,5.647948607453723e-6,-2.9351019643881805e-8,0.004491791249757919,5.921297869142392e-6,-2.99634549511861e-8,0.004492112629279643,6.17644552752166e-6,-3.0535254824106297e-8,0.00449232388491216,6.343735825162951e-6,-3.0910079891972617e-8,0.004492478423788278,6.3824291151391336e-6,-3.0996454297399085e-8,0.0044926387333911215,6.288994539844147e-6,-3.078631234061721e-8,0.004492858636300761,6.092913739653983e-6,-3.0345562453837724e-8,0.004493171588724417,5.844789364045817e-6,-2.9787493231587065e-8,0.00449358619792652,5.60206433789655e-6,-2.9240893731404095e-8,0.004494087869175982,5.4161245069199806e-6,-2.882123891207294e-8,0.004494644740160421,5.322864554289205e-6,-2.8609503663609465e-8,0.004495216006784931,5.337654872160231e-6,-2.864069875751362e-8,0.004495760772876803,5.45491845871229e-6,-2.8902689986086383e-8,0.00449624562807949,5.6517357057193595e-6,-2.9344127629553888e-8,0.004496649625176552,5.894052353282223e-6,-2.988837234120634e-8,0.004496966197981279,6.14368973988668e-6,-3.044936038422412e-8,0.004497202413708704,6.364618307242032e-6,-3.094585642668188e-8,0.004497376491928267,6.527582409948589e-6,-3.131194447327545e-8,0.004497514640436966,6.6129278100694005e-6,-3.150337999113445e-8,0.004497647925917268,6.612117621637158e-6,-3.150093270015358e-8,0.004497809336845073,6.528610724443239e-6,-3.131231070153016e-8,0.004498030707089667,6.3785361876222695e-6,-3.09736925859592e-8,0.004498338829174895,6.191080665260008e-6,-3.055066942661581e-8,0.004498750077775436,6.0076683654676744e-6,-3.013646953689903e-8,0.004499263612814337,5.8780642609847445e-6,-2.9843203850422515e-8,0.004499854940636369,5.851244450515609e-6,-2.9781269629881294E-08,0.004500473936466841,5.960397636023314e-6,-3.002551100540538e-8,0.004501052719345036,6.205775394502228e-6,-3.057655086561226e-8,0.00450152565398311,6.544818406940442e-6,-3.133855594471292e-8,0.004501855052718436,6.89991925988118e-6,-3.213677936923044e-8,0.004502048299394567,7.184984577129539e-6,-3.277745584916125e-8,0.00450215485481849,7.337928245096862e-6,-3.312096524996092e-8,0.004502244939964075,7.34104622514252e-6,-3.31275673941889e-8,0.0045023832883471036,7.220589179745083e-6,-3.285626158580508e-8,0.0045026110823796145,7.030850470500054e-6,-3.2428926008768215e-8,0.0045029404092560505,6.834169236371335e-6,-3.198546698313869e-8,0.004503358106314494,6.685082210089396e-6,-3.1648403907449894e-8,0.004503833931529304,6.621199922123047e-6,-3.150250475699595e-8,0.004504329393182454,6.659916022098113e-6,-3.158735035096041e-8,0.004504805490228415,6.79906815339101e-6,-3.18986098972113e-8,0.0045052288712172945,7.020052500014815e-6,-3.239479081077634e-8,0.004505576291020284,7.292536290791366e-6,-3.300768877577651e-8,0.004505837190189702,7.580099251624076e-6,-3.3655110613896705e-8,0.0045060143045280365,7.846042790020471e-6,-3.42541110553583e-8,0.004506122446663604,8.058625318459529e-6,-3.473295260761845e-8,0.0045061858442556986,8.195104654863028e-6,-3.504028264202122e-8,0.004506234642510104,8.244233774000591e-6,-3.515070923594395e-8,0.004506301185498216,8.20730170658394e-6,-3.506705303538336e-8,0.004506416396345633,8.098093426558627e-6,-3.482021907021817e-8,0.004506606235169193,7.94206498498607e-6,-3.446740371929097e-8,0.004506887964378976,7.774744655900673e-6,-3.4088620681013444e-8,0.004507265898608951,7.63883680811971e-6,-3.378026681707891e-8,0.004507726866888514,7.578827637892328e-6,-3.364294154809401e-8,0.0045082369085281135,7.631796357853752e-6,-3.376059550196789e-8,0.0045087423408103665,7.81442404265071e-6,-3.4171064362557586e-8,0.004509179270358261,8.109527450340536e-6,-3.48355963905556e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json deleted file mode 100644 index d989a12..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_26.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":26000,"numberOfSamples":1000,"samples":[0.004509493310776733,8.460255546355793e-6,-3.5625800851343465e-8,0.004509663584584268,8.78152154032578e-6,-3.634960149730122e-8,0.004509716789810693,8.989819707723907e-6,-3.681866430913203e-8,0.004509719059465651,9.037418772725032e-6,-3.692552117143939e-8,0.004509748243703133,8.930185223519827e-6,-3.668355434778159e-8,0.004509863647122957,8.719470842231082e-6,-3.620846132642241e-8,0.004510089653785742,8.476972036399517e-6,-3.5661533171045015e-8,0.004510416800722429,8.269299770251092e-6,-3.51925282944491e-8,0.004510813094911667,8.1427235238956e-6,-3.4905561743649874e-8,0.004511237012805131,8.118815983827459e-6,-3.4849442039030304e-8,0.004511647598100416,8.19695215375018e-6,-3.5023237901990346e-8,0.004512010754110658,8.359585736620415e-6,-3.538793530902102e-8,0.004512302608721269,8.577895407180773e-6,-3.5878908014654e-8,0.004512511101780664,8.817020399356672e-6,-3.6417590410461715e-8,0.004512636407156604,9.040913865577355e-6,-3.692247406897225e-8,0.004512690307657771,9.216869444768706e-6,-3.7319489010541575e-8,0.004512694498577715,9.319590010896785e-6,-3.755134208751638e-8,0.004512677812454461,9.33448051439994e-6,-3.758499305360356e-8,0.004512672525088187,9.259714461186162e-6,-3.74162487552752e-8,0.004512710155956202,9.106773676260358e-6,-3.7070886445067697e-8,0.004512817232229619,8.899452134994748e-6,-3.660239062283695e-8,0.004513011361703757,8.671416905011533e-6,-3.6086549932726506e-8,0.0045132978459024205,8.462410007400726e-6,-3.561303803422552e-8,0.00451366700674806,8.313087368408677e-6,-3.5273853268424084e-8,0.004514092641922462,8.258223307030978e-6,-3.5147920393724736e-8,0.004514532771288454,8.318077690988317e-6,-3.5281410931936163e-8,0.004514934630932754,8.4888481118899e-6,-3.566597134940736e-8,0.004515245854344678,8.735374126556136e-6,-3.622214330179837e-8,0.0045154316998782295,8.991891199064452e-6,-3.6801147360575755e-8,0.004515492902915043,9.176856590224277e-6,-3.7218586920753816e-8,0.004515473030595792,9.22132948769478e-6,-3.731873347690093e-8,0.004515445973338222,9.09843419372188e-6,-3.704104339955742e-8,0.00451548682469044,8.835578371895206e-6,-3.644751863773576e-8,0.00451564268107663,8.500985857177386e-6,-3.5692080359945736e-8,0.0045159197183348996,8.174205711565663e-6,-3.495399269113799e-8,0.004516289609363855,7.91891452501725e-6,-3.437668106843999e-8,0.004516706111846334,7.769533914623208e-6,-3.403776290168179e-8,0.004517121078763411,7.73134067417984e-6,-3.3949388348932536e-8,0.0045174946878258695,7.787734155315276e-6,-3.4074540770568025e-8,0.004517799867137044,7.908923469211388e-6,-3.434642142253354e-8,0.004518023021591153,8.059160327422076e-6,-3.468456742654183e-8,0.004518163140214663,8.202005982025426e-6,-3.50066650311153e-8,0.004518230411948181,8.30424890030949e-6,-3.523747823122548e-8,0.004518244570725208,8.33915192550796e-6,-3.531634932075353e-8,0.004518232782286238,8.28935594403696e-6,-3.5203891163581475e-8,0.004518226774465987,8.149365170645358e-6,-3.488762043767852e-8,0.004518259006711036,7.927116613346235e-6,-3.438542274392408e-8,0.004518358060544222,7.643963370228097e-6,-3.3745425584923236e-8,0.004518543856405558,7.332621283429884e-6,-3.3041356370972954e-8,0.004518823498710852,7.0329632269025115e-6,-3.236314547040654e-8,0.004519188579967757,6.785903929501321e-6,-3.180325247605029e-8,0.004519614661144808,6.626048418181081e-6,-3.14401232958339e-8,0.0045200634304379044,6.5740276672578925e-6,-3.132079397132222e-8,0.004520487966458727,6.62956304606739e-6,-3.144502131997278e-8,0.00452084147546764,6.766843341505083e-6,-3.175463526314589e-8,0.004521089187148414,6.934764185105069e-6,-3.2134004538126606e-8,0.004521221269959029,7.065025688552307e-6,-3.2428442843453624e-8,0.004521261859102045,7.089574850293132e-6,-3.248384715700535e-8,0.0045212674299407694,6.964089990219654e-6,-3.2199939344201606e-8,0.004521310513078177,6.687544084459722e-6,-3.1574464342686096e-8,0.004521453447203763,6.305670157088708e-6,-3.071085821791362e-8,0.0045217253573987225,5.893958647960642e-6,-2.9779688167653515e-8,0.004522114733755025,5.529133856038296e-6,-2.8954214723599135e-8,0.004522579377927455,5.264744210794258e-6,-2.8355366465152043e-8,0.004523065009217748,5.120982847527676e-6,-2.802885167464862e-8,0.004523521972907846,5.088150002782038e-6,-2.7952986672350293e-8,0.004523914736487703,5.136932989628306e-6,-2.8061821235107004e-8,0.004524224518460753,5.229079919518181e-6,-2.8269112293518485e-8,0.004524447866784532,5.325356167857952e-6,-2.8486202260608446e-8,0.004524593830297251,5.390497834119252e-6,-2.8633216627973057e-8,0.004524681160259874,5.396171432205578e-6,-2.864585654482284e-8,0.004524735849207278,5.323027317101781e-6,-2.8480176026552257e-8,0.0045247886943237964,5.16249823096028e-6,-2.8116730602371682e-8,0.004524872353940403,4.918444281738836e-6,-2.7564280225240977e-8,0.0045250174349796965,4.608134848323794e-6,-2.68619228883987e-8,0.004525247591606092,4.261615509273891e-6,-2.6077583364155316e-8,0.004525574321292053,3.918549452938378e-6,-2.530086898948843e-8,0.00452599277311532,3.622150479587777e-6,-2.462943302074595e-8,0.0045264801545203655,3.4107258886289212e-6,-2.4149954956603862e-8,0.004526998018263306,3.308450392319929e-6,-2.3917312554474847e-8,0.004527498775693957,3.317760005942039e-6,-2.3937301228621522e-8,0.00452793558120547,3.415707219466181e-6,-2.415823276235786e-8,0.00452827373820132,3.555942963102195e-6,-2.4475281614218993e-8,0.004528501076735233,3.677053577969154e-6,-2.4749321189987848e-8,0.004528634255226658,3.7166708540264696e-6,-2.4838951555615288e-8,0.00452871788049019,3.6288209284880697e-6,-2.4639908971730102e-8,0.004528814461392247,3.399578871249497e-6,-2.4120586107355082e-8,0.004528986348915549,3.0544546974012395e-6,-2.3338735228699577e-8,0.004529275447593868,2.652362755159554e-6,-2.2427751850493508e-8,0.0045296894826229355,2.266809562799965e-6,-2.1554061940523532e-8,0.004530201357681512,1.962172998408435e-6,-2.0863453384503786e-8,0.004530761107800889,1.7757792179593227e-6,-2.044053421769499e-8,0.004531313427122603,1.7122786235617054e-6,-2.0295983770420518e-8,0.0045318125655776954,1.749367675975404e-6,-2.037944352447753e-8,0.004532230187937357,1.8490802478591477e-6,-2.0605011670815894e-8,0.00453255650096998,1.968861091375431e-6,-2.08762767548505e-8,0.004532797413529103,2.069429992863889e-6,-2.1104137100273155e-8,0.004532970455627508,2.1191957801873115e-6,-2.121685754164669e-8,0.004533101006844266,2.0963386322046738e-6,-2.1164869031366592e-8,0.004533219236241922,1.9898190337828303e-6,-2.09231193072752e-8,0.004533357423629913,1.8001513809640854e-6,-2.0492836790277707e-8,0.004533546992225019,1.540165048997408e-6,-1.9903207651827864e-8,0.004533814625910253,1.2352637227640804e-6,-1.9211889086172134e-8,0.0045341773121543635,9.220902568912064e-7,-1.8501932634248034e-8,0.004534637007950439,6.443360771918933e-7,-1.7872295458798828e-8,0.004535176664792075,4.4499167138597644e-7,-1.7420339103780497e-8,0.004535760035304328,3.557925328380303e-7,-1.7217978115692215e-8,0.004536337215533742,3.866412902473646e-7,-1.728772350881937e-8,0.004536855876733859,5.191842687487436e-7,-1.7588072274695526e-8,0.004537275385870752,7.081369882607212e-7,-1.8016430469229954e-8,0.004537579125593926,8.912435030713721e-7,-1.8431639886474907e-8,0.004537780530744449,1.005317578228007e-6,-1.8690357071296403e-8,0.004537920538034231,1.0034699039837472e-6,-1.868616129977461e-8,0.0045380570398233745,8.682810605385142e-7,-1.837946472292758e-8,0.004538249294644987,6.169983072998986e-7,-1.780931248930263e-8,0.004538541670781989,2.970358272201004e-7,-1.708319176747392e-8,0.004538951579800054,-2.7231731686069303e-8,-1.634711520277816e-8,0.004539465565272268,-2.9245638234442717e-7,-1.5744867236873657e-8,0.004540044817016876,-4.530987714794202e-7,-1.537993968878856e-8,0.004540637691521912,-4.913904592554641e-7,-1.5292863661002783e-8,0.0045411941681401885,-4.179588426089708e-7,-1.545968048557915e-8,0.0045416771529875445,-2.646725790176748e-7,-1.580808820140591e-8,0.004542067915028178,-7.389589463817978e-8,-1.624181308946475e-8,0.004542365941693601,1.1161571806108388e-7,-1.6663601282918254e-8,0.004542585366851695,2.557719936323004e-7,-1.6991327574329404e-8,0.004542750301596352,3.328556897280507e-7,-1.7166487509062615e-8,0.004542890539772055,3.288339048433999e-7,-1.7157205799619142e-8,0.004543038110357333,2.4148307307612337e-7,-1.6958505979006495e-8,0.00454322442352209,8.020747945813414e-8,-1.659185787564851e-8,0.004543477357567356,-1.341554185295706e-7,-1.6104693284517906e-8,0.0045438176089469635,-3.6995599015852086e-7,-1.5568968349127696e-8,0.004544254057927853,-5.868612278189073e-7,-1.507632289085078e-8,0.004544778812882803,-7.409000787411416e-7,-1.4726631776247386e-8,0.0045453638821404034,-7.933529756111925e-7,-1.4607830316871693e-8,0.004545962512626217,-7.226259496806341e-7,-1.4768947865738407e-8,0.004546517831531095,-5.353354038386974e-7,-1.5194914668309396e-8,0.004546978401910495,-2.705801777601392e-7,-1.5796839796783648e-8,0.004547315606031961,7.426064280520287e-9,-1.6428760347708144e-8,0.00454753489003374,2.2771495362971647e-7,-1.6929398929145512e-8,0.004547674975302893,3.348200634734904e-7,-1.7172762210130373e-8,0.004547795269270398,3.0546407671952013e-7,-1.7106022758788838e-8,0.004547957342816333,1.5361082419481356e-7,-1.6760923023671023e-8,0.004548207818776337,-7.620926519655014e-8,-1.623857269178295e-8,0.004548567688113334,-3.2310178950335675e-7,-1.5677235728358874e-8,0.004549029689400049,-5.261904517049809e-7,-1.5215224434557068e-8,0.004549562879332015,-6.387181991297879e-7,-1.4958938590346338e-8,0.004550122119909111,-6.369676213818445e-7,-1.4962560924246113e-8,0.004550659547407562,-5.227487180281773e-7,-1.522226203843342e-8,0.00455113503524916,-3.198295674394947e-7,-1.568415057741117e-8,0.004551523306381531,-6.614611648123595e-8,-1.6261898726347644e-8,0.004551816641272785,1.9551328796095916e-7,-1.685796274830549e-8,0.004552023601182218,4.2580724108011224e-7,-1.7382583753550408e-8,0.004552165189758773,5.945892816202448e-7,-1.7766991018379748e-8,0.004552270093790798,6.837932410099917e-7,-1.7970026091410244e-8,0.004552370226282839,6.880617875256065e-7,-1.797954851084639e-8,0.004552497089156715,6.141061808103928e-7,-1.781091130786019e-8,0.004552678823971549,4.796156243032983e-7,-1.7504429067141582e-8,0.004552937441607541,3.1202357072442164e-7,-1.7122570952647516e-8,0.004553285657210565,1.4683488458868566e-7,-1.6746191281231358e-8,0.004553723072438308,2.461230159602889e-8,-1.6467701649164962e-8,0.004554232297584862,-1.4673606685835707e-8,-1.6378198838017022e-8,0.004554776931368462,5.916408340345163e-8,-1.654648595704409e-8,0.004555304544316013,2.5471410996338887e-7,-1.699210890005788e-8,0.004555757580182239,5.487508779098537e-7,-1.766206390844868e-8,0.00455609163018589,8.847980560550384e-7,-1.8427567403072217e-8,0.004556294266149341,1.1862585904106192e-6,-1.9114066338961307e-8,0.00455639356224145,1.3819276275300728e-6,-1.955944643880223e-8,0.004556449423840962,1.4320994076717743e-6,-1.967347844662727e-8,0.00455653146260646,1.3415196289400694e-6,-1.9467164239301853e-8,0.004556695250636879,1.1538974614742377e-6,-1.9040064669564954e-8,0.00455696762660136,9.337292242152009e-7,-1.8538868697838413e-8,0.004557344253094815,7.457228920368247e-7,-1.8110674855141883e-8,0.004557796262614695,6.393184058846508e-7,-1.7867944352973605e-8,0.004558280964655819,6.408021303045762e-7,-1.7870661006435703e-8,0.004558752717751708,7.521507776956689e-7,-1.812364701480733e-8,0.004559171865542613,9.545520907436515e-7,-1.8584396920373626e-8,0.004559510918417762,1.214685417394258e-6,-1.9177186559210626e-8,0.0045597577345257365,1.492268065989241e-6,-1.9810175736451022e-8,0.004559915758252532,1.747525782261627e-6,-2.0392490975707653e-8,0.004560001790681829,1.947399946982737e-6,-2.084852456530275e-8,0.004560042130719432,2.069755428846989e-6,-2.112766147211479e-8,0.004560068031127442,2.105379942421046e-6,-2.1208875035905857e-8,0.004560111313149676,2.0580137470542224e-6,-2.110073390215724e-8,0.004560200668904181,1.943025512553438e-6,-2.083829693588606e-8,0.004560358702285993,1.785412603296129e-6,-2.0478523102675264e-8,0.004560599413535639,1.6174458646150957e-6,-2.009495393525646e-8,0.004560925771429382,1.4758038902445344e-6,-1.977126696599221e-8,0.004561327227637577,1.3976103681723366e-6,-1.9592281027131787e-8,0.004561777687863393,1.414475222692563e-6,-1.963031184849548e-8,0.004562235579990404,1.5439760444566057e-6,-1.9925614673578647e-8,0.004562648675447503,1.7796412722016043e-6,-2.046341689014831e-8,0.004562966076598825,2.0834817290894464e-6,-2.1156859279096877e-8,0.004563156563769151,2.3880171788488707e-6,-2.1851733662215338e-8,0.004563226026995868,2.6134961406077906e-6,-2.236596297709388e-8,0.004563222002259049,2.697182257226839e-6,-2.255654425324677e-8,0.004563218140920344,2.6200473503104345e-6,-2.2380369070183947e-8,0.004563285177328307,2.4142697533356353e-6,-2.1911080480621846e-8,0.00456346510562536,2.1474700508499156e-6,-2.1302898831592876e-8,0.0045637614855055355,1.8952029862123072e-6,-2.0727876983910757e-8,0.004564146109374209,1.717390042126911e-6,-2.0322347502066937e-8,0.004564573586655692,1.6467160412382832e-6,-2.0160696512706902e-8,0.004564995621143562,1.6879982482464885e-6,-2.025403919365333e-8,0.004565371098880404,1.823849272809698e-6,-2.0563061761098215e-8,0.004565671575998424,2.0224636955771143e-6,-2.1015577494141815e-8,0.004565883304822525,2.2451570701558744e-6,-2.1523520714831093e-8,0.004566007062175339,2.4528861969496664e-6,-2.1997743592595424e-8,0.004566056469157245,2.6116666971517507e-6,-2.23604574329312e-8,0.004566055109573586,2.6967378051573467e-6,-2.2554903643749895e-8,0.004566032787591015,2.6952576374760298e-6,-2.2551638035756678e-8,0.004566021340058094,2.6074130943391173e-6,-2.2351082445335482e-8,0.004566050456020915,2.445916611802514e-6,-2.198229461679592e-8,0.004566143978834918,2.234071638222029e-6,-2.1498460356284963e-8,0.004566316991076654,2.002834908710053e-6,-2.0970174692905903e-8,0.004566573698773829,1.7872369419549948e-6,-2.047735188978444e-8,0.004566906025496633,1.6222415688750605e-6,-2.009987915744285e-8,0.004567292941820179,1.5378947751270364e-6,-1.9906572258774763e-8,0.0045677009482845456,1.5534732761251689e-6,-1.9941722705096247e-8,0.004568086845586504,1.6706423254153708e-6,-2.0209304708076832e-8,0.004568404479915657,1.8669001932336232e-6,-2.065787129431821e-8,0.004568616641222311,2.0927296815380814e-6,-2.1174057753546027e-8,0.004568710628782926,2.277737563029436e-6,-2.159677431671749e-8,0.004568710906383361,2.3496980887248315e-6,-2.1760931647364762e-8,0.004568678450507578,2.2627328227331568e-6,-2.1561913449607736e-8,0.004568690934995052,2.0202730399911163e-6,-2.100789416692359e-8,0.004568811461316786,1.6765736725135978e-6,-2.0223021008261412e-8,0.004569064102334118,1.3138502582226867e-6,-1.939501198865483e-8,0.00456942983638702,1.0095623883627573e-6,-1.870048308376553e-8,0.0045698609228537225,8.126805895776015e-7,-1.8250956905805127e-8,0.004570301299600792,7.370286449055343e-7,-1.8077863586350383e-8,0.004570702395164331,7.675146472653699e-7,-1.8146849034032396e-8,0.004571031105591736,8.712119800734532e-7,-1.838299920858834e-8,0.004571271553897738,1.0077872223193491e-6,-1.8694474593890068e-8,0.004571423431715869,1.1371794672960694e-6,-1.898988427190855e-8,0.00457149912894306,1.224623094486609e-6,-1.9189713805360918e-8,0.004571520661368493,1.2439529482437433e-6,-1.9233970167685107e-8,0.004571516461258664,1.1798659800376192e-6,-1.90875063062554e-8,0.004571517887299565,1.0292685411183112e-6,-1.874320617434184e-8,0.00457155544903053,8.015811947188519e-7,-1.822266996676711e-8,0.004571654890494846,5.177527012148897e-7,-1.757386049492885e-8,0.0045718335249696285,2.0776980474633583e-7,-1.686531683855287e-8,0.004572097388308316,-9.323396016944465e-8,-1.6177255542095043e-8,0.004572439665645757,-3.4987692521596087e-7,-1.5590463436344316e-8,0.004572840644505964,-5.31972816140779e-7,-1.5173961796713732e-8,0.004573269348815289,-6.200415053200593e-7,-1.4972436045635267e-8,0.004573687024026574,-6.10406095595246e-7,-1.4994491965318193e-8,0.004574052809641157,-5.192579563073559e-7,-1.520320779417572e-8,0.00457433198222599,-3.843987328357727e-7,-1.5512049283710714e-8,0.004574506433080039,-2.6231970700412053e-7,-1.57915871799184e-8,0.004574585098804139,-2.1787955603130257e-7,-1.5893271807468845e-8,0.0045746091849351205,-3.056827632750247e-7,-1.569220003592137e-8,0.004574645498676162,-5.476968892825376e-7,-1.513834525051923e-8,0.004574765267068838,-9.184797312588896e-7,-1.4290196294897466e-8,0.00457501606601899,-1.3499749934384158e-6,-1.3303575679860455e-8,0.004575402559457306,-1.7569182650377685e-6,-1.2373436343486388e-8,0.00457588755670308,-2.0690376161348062e-6,-1.1660288023729968e-8,0.004576410675222101,-2.2521266223356963e-6,-1.1242149216779647e-8,0.004576911396180024,-2.3103385627944873e-6,-1.1109414454615705e-8,0.004577344958268909,-2.275047092560445e-6,-1.119036156480763e-8,0.004577688009744958,-2.190125367673378e-6,-1.1384764724171442e-8,0.00457793703023403,-2.1001362793857524e-6,-1.1590799048558753e-8,0.004578103680851678,-2.0432033769984585e-6,-1.1721260373927869e-8,0.004578209903486739,-2.0476287663152695e-6,-1.1711299731405369e-8,0.00457828387494594,-2.1305649056463137e-6,-1.1521549135013692e-8,0.004578356691217041,-2.2974938653969773e-6,-1.113942510021554e-8,0.004578459254883159,-2.5420904405371936e-6,-1.0579494532798996e-8,0.004578618975408969,-2.8466169571197294e-6,-9.882523233547e-9,0.004578856169100808,-3.183321162571054e-6,-9.112167432714705e-9,0.004579180478803452,-3.5174083811508843e-6,-8.34808453913955e-9,0.004579588120477424,-3.8118316727193404e-6,-7.674971745318212e-9,0.004580060934558044,-4.03352156185739e-6,-7.168392305513895e-9,0.0045805679854873955,-4.1600968235078126e-6,-6.87951141941344e-9,0.0045810699651512255,-4.185692981165825e-6,-6.821782230335321e-9,0.00458152603375295,-4.124467505914989e-6,-6.962856854404446e-9,0.004581902189684743,-4.010657797913334e-6,-7.224349646031663e-9,0.004582179915574498,-3.894438306832133e-6,-7.491268811747432e-9,0.004582363424246814,-3.833098119282915e-6,-7.632267271587255e-9,0.004582483126184382,-3.8777855317296025e-6,-7.53011848341852e-9,0.004582592398102796,-4.057840675385612e-6,-7.117693448106915e-9,0.004582755475052093,-4.367487092300224e-6,-6.408428922268497e-9,0.004583027684494128,-4.761913130848646e-6,-5.505193981758026e-9,0.004583434904318093,-5.1682652158940795e-6,-4.575001218916299e-9,0.004583962740856525,-5.509717091332434e-6,-3.793847647778333e-9,0.004584562235224711,-5.731726984261732e-6,-3.286608037184449e-9,0.0045851690079899594,-5.8173444046123675e-6,-3.092013230972495e-9,0.004585724984926677,-5.785936446522613e-6,-3.1655856948169594e-9,0.004586192672434863,-5.680003803249362e-6,-3.4098510201368928e-9,0.004586558909587067,-5.549240041603622e-6,-3.710862720240599e-9,0.004586831090544941,-5.438473165345392e-6,-3.965824489806852e-9,0.004587030516411275,-5.381337431846182e-6,-4.097587491428378e-9,0.004587186126494469,-5.398361853965937e-6,-4.059053627389166e-9,0.0045873298103882906,-5.49731379182367e-6,-3.8324359563939324e-9,0.004587493095288864,-5.6741958005571095e-6,-3.427014054705955e-9,0.0045877044693880785,-5.914235263036652e-6,-2.876857912876998e-9,0.004587986651218072,-6.192958116809043e-6,-2.238299632400325e-9,0.004588353448843592,-6.477950803344133e-6,-1.5858038797377467e-9,0.004588806428404769,-6.73216177730537e-6,-1.0043412823020856e-9,0.00458933233628059,-6.919340188748711e-6,-5.769299288868636e-10,0.004589902743292579,-7.011376771941958e-6,-3.6786881572565e-10,0.004590477310455618,-6.996130497857601e-6,-4.0485922692968167e-10,0.004591011167147137,-6.883260760486553e-6,-6.656513658249578e-10,0.0045914652682251846,-6.705371049354524e-6,-1.075393733113511e-9,0.004591817010039603,-6.512924106794449e-6,-1.5182606557942965e-9,0.004592067796621043,-6.363468442006583e-6,-1.8621675068497396e-9,0.004592244944227824,-6.307637731525589e-6,-1.9909320328163395e-9,0.004592396800370081,-6.375463343972728e-6,-1.835720290287429e-9,0.004592581636072272,-6.566741952320174e-6,-1.397147556305703e-9,0.004592852503308843,-6.848670800862258e-6,-7.506592754098574e-10,0.0045932418347822595,-7.16265852740837e-6,-3.085310633349787e-11,0.004593750787773998,-7.439775464126724e-6,6.039907256439864e-10,0.004594348004365676,-7.620693551409611e-6,1.0176568839792315e-9,0.004594979307958952,-7.67285027729872e-6,1.1353900564086016e-9,0.004595584733360852,-7.597882344516838e-6,9.60993606260401e-10,0.004596115629330661,-7.427042036220201e-6,5.663444100107817e-10,0.004596545284004681,-7.208277314545172e-6,6.172570217697634e-11,0.004596870828408168,-6.9916428475073475e-6,-4.377209163440163e-10,0.004597108555701069,-6.818392915343977e-6,-8.371051908542961e-10,0.004597286586221487,-6.715617670183615e-6,-1.0741512526115635e-9,0.004597438018468549,-6.6953943241077795e-6,-1.1211643140079087e-9,0.004597595917342151,-6.7563461785649045e-6,-9.814428534041288e-10,0.0045977900559172604,-6.8858632210796456e-6,-6.841521467843064e-10,0.004598044659033155,-7.062128212677125e-6,-2.796287018101613e-10,0.004598376318128057,-7.255916920005681e-6,1.6480339335871812e-10,0.004598791545151504,-7.4327601793754e-6,5.698408862789437e-10,0.004599284036273952,-7.55641510487658e-6,8.521963256757693e-10,0.004599832545317101,-7.59449169585154e-6,9.37519703522967e-10,0.004600401089893143,-7.526267837569374e-6,7.783330705853753e-10,0.0046009435048163455,-7.351117380604259e-6,3.7337668699399923e-10,0.004601413323426574,-7.094082392306315e-6,-2.1959916877791475e-10,0.004601777276461345,-6.804398311453375e-6,-8.872456883447427e-10,0.004602027574734469,-6.544807205465784e-6,-1.4852269544859042e-9,0.004602187108824936,-6.373998484428838e-6,-1.878640796994688e-9,0.004602304305622246,-6.328662725555859e-6,-1.983290254130587e-9,0.004602439234285484,-6.4122851305789306e-6,-1.7913894121004542e-9,0.004602646341656962,-6.59454075292182e-6,-1.372856112257814e-9,0.004602959791749618,-6.820555679744346e-6,-8.539567811146143e-10,0.004603385401025903,-7.026168406663905e-6,-3.8223413598513426e-10,0.004603900535041509,-7.154432726648315e-6,-8.862971018962839e-11,0.004604461221360877,-7.16909923779504e-6,-5.6530923583887666e-11,0.004605014161836207,-7.061911347469658e-6,-3.0496913721986693e-10,0.004605510173710997,-6.852198505821913e-6,-7.894778705239851e-10,0.004605915231864156,-6.579480498016876e-6,-1.4190378636351609e-9,0.004606216233404941,-6.291994615044852e-6,-2.0824711583876744e-9,0.00460642071017142,-6.035108556079831e-6,-2.675171494544614e-9,0.00460655193149057,-5.842863718623184e-6,-3.1186589302558516e-9,0.004606641995139615,-5.733972110264688e-6,-3.369853455113043e-9,0.004606725264452894,-5.711711571864843e-6,-3.4213163304000836e-9,0.0046068334424430035,-5.7661813773756325e-6,-3.2960088168680032e-9,0.004606992447073734,-5.877366283212291e-6,-3.0401786490361465e-9,0.004607220525040382,-6.01804827384349e-6,-2.7166204947669695e-9,0.004607526828035787,-6.156368380259616e-6,-2.3987754818787228e-9,0.004607909878637184,-6.2584771004198995e-6,-2.1646433927517645e-9,0.004608355861891447,-6.292108699703443e-6,-2.0885544550141327e-9,0.004608837460403657,-6.231941022115572e-6,-2.2288041686048496e-9,0.004609314869247811,-6.066944432541149e-6,-2.610692390028512e-9,0.004609741181179981,-5.808287594175388e-6,-3.208296374163034e-9,0.004610073532643847,-5.494016982094601e-6,-3.9337217762102935e-9,0.004610288280096579,-5.185259144008995e-6,-4.645941435360547e-9,0.004610393895995997,-4.950873931477467e-6,-5.186269288801948e-9,0.004610433184336685,-4.844246198175972e-6,-5.431895389162019e-9,0.004610470758879338,-4.8829096485003395e-6,-5.342766223918112e-9,0.0046105707030473,-5.0419564476459976e-6,-4.976589310976798e-9,0.004610775446429694,-5.26417400954597e-6,-4.465310329754646e-9,0.004611094963682681,-5.480348310975678e-6,-3.968302033161426e-9,0.00461150823724263,-5.62972692844612e-6,-3.625329611994953e-9,0.004611973094222571,-5.673786679284628e-6,-3.524987578971608e-9,0.0046124390559712505,-5.60146915226002e-6,-3.692726761576285e-9,0.004612859222188488,-5.427288532920816e-6,-4.095184948750271e-9,0.004613199097686521,-5.184761096077944e-6,-4.655216115005645e-9,0.00461344157660515,-4.917463952163088e-6,-5.272388730713527e-9,0.004613587996069912,-4.669665926120923e-6,-5.844552407820035e-9,0.004613655691602776,-4.478251084401866e-6,-6.28652082530562e-9,0.004613673077859672,-4.367267921755222e-6,-6.542744128551488e-9,0.00461367367651798,-4.345651474038695e-6,-6.592631310893555e-9,0.0046136904516331,-4.407814373872608e-6,-6.449178045460803e-9,0.004613751389181142,-4.536239263420983e-6,-6.152919507168062e-9,0.004613876649815567,-4.704994955452618e-6,-5.763751856803909e-9,0.004614077028175075,-4.883303608630905e-6,-5.352690069082215e-9,0.004614353162834188,-5.038827337005442e-6,-4.994329710158694e-9,0.004614695036423012,-5.140875843306533e-6,-4.759499974144619e-9,0.004615081647533657,-5.164078436357073e-6,-4.706796509128987e-9,0.004615481345908867,-5.093156815280933e-6,-4.871507157630509e-9,0.004615854140456318,-4.928932317867542e-6,-5.251665030544923e-9,0.004616157793161933,-4.694284295014727e-6,-5.794263848231378e-9,0.004616358878782183,-4.436656622864292e-6,-6.389541647842568e-9,0.004616447225878722,-4.222062557520083e-6,-6.884973524270293e-9,0.004616447316459371,-4.117217975337249e-6,-7.126660174101772e-9,0.0046164171712829195,-4.163817419832329e-6,-7.018720722844495e-9,0.004616430002982171,-4.358091358751388e-6,-6.5703061256921416e-9,0.004616545920780777,-4.64955458388336e-6,-5.898225015384205e-9,0.004616789519416018,-4.961068379082266e-6,-5.180477898492885e-9,0.004617144952363664,-5.21797868115541e-6,-4.5890532040936815e-9,0.004617567428571435,-5.370589400078979e-6,-4.238257150629672e-9,0.004618001377383055,-5.4024523567296e-6,-4.165786813726474e-9,0.00461839617858386,-5.326689531338634e-6,-4.341319230810882e-9,0.004618715659086564,-5.176427103811998e-6,-4.688546619249612e-9,0.004618941704013463,-4.994299138923035e-6,-5.1092602716603065e-9,0.0046190738457956015,-4.823500218588578e-6,-5.503860695653606e-9,0.004619126539673815,-4.701021915286869e-6,-5.786919842108562e-9,0.00461912513350184,-4.6530002781485684e-6,-5.897985711351209e-9,0.004619101113456684,-4.692128922859444e-6,-5.8076723886911916e-9,0.004619087174435325,-4.817110070681227e-6,-5.5190059356818914e-9,0.004619112672785507,-5.013950645613634e-6,-5.064416509080086e-9,0.004619199956383798,-5.258745206492392e-6,-4.499227652478228e-9,0.004619361925076508,-5.521396310506229e-6,-3.892989039720409e-9,0.004619600861690062,-5.769630238686212e-6,-3.3201995651143257e-9,0.0046199082837785595,-5.972903127371703e-6,-2.851352592334347e-9,0.004620265553426885,-6.106140175320044e-6,-2.5443702178223045e-9,0.004620645157437597,-6.15344235394916e-6,-2.4360418005486742e-9,0.004621012910332626,-6.111969284666793e-6,-2.5329705998129033e-9,0.004621331889116244,-5.995896088586415e-6,-2.8023280874564467e-9,0.004621569196957076,-5.839257062531263e-6,-3.16525563366286e-9,0.004621705946598681,-5.6949592448301445e-6,-3.499245426945735e-9,0.0046217486369424686,-5.626269776579186e-6,-3.6579976183436843e-9,0.004621736346891752,-5.688589628394338e-6,-3.5136773121236357e-9,0.004621735560203208,-5.9056093086997374e-6,-3.011976455429588e-9,0.004621818663207311,-6.252544277839716e-6,-2.2106262735571202e-9,0.004622034186749106,-6.660327133482274e-6,-1.269447535738715e-9,0.004622386277920894,-7.0421296244785226e-6,-3.8895869566759596e-10,0.004622835921998608,-7.326987257096725e-6,2.672247922603419e-10,0.004623320597655784,-7.481387241366695e-6,6.22078154458821e-10,0.004623778166074979,-7.511256501722334e-6,6.895832720469361e-10,0.0046241631750252934,-7.4503005879202574e-6,5.476957123973267e-10,0.0046244526906444455,-7.344777280885875e-6,3.031921981158643e-10,0.004624644751104253,-7.241142852555951e-6,6.324918068849496e-11,0.0046247535293354415,-7.178329664083658e-6,-8.227089394819571e-11,0.004624803929537004,-7.1838293799132266e-6,-6.982495105222414e-11,0.004624826696230001,-7.272134715425384e-6,1.3414464882997706e-10,0.004624854095060916,-7.444583539571314e-6,5.327371256362688e-10,0.004624916026302616,-7.690267618702546e-6,1.1006291093985203e-9,0.004625036574007785,-7.98793405485864e-6,1.7885067099525766e-9,0.004625231133799637,-8.30888821439031e-6,2.5298802519654072e-9,0.004625504428824734,-8.620815020618825e-6,3.2500039740028935e-9,0.004625849747329165,-8.892151827359156e-6,3.875986187591585e-9,0.0046262495157665465,-9.09652545200698e-6,4.346970267559263e-9,0.004626677147753625,-9.216883627944467e-6,4.623605244888573e-9,0.004627100098948487,-9.249002221467704e-6,4.6961442314090165e-9,0.004627484100502901,-9.204044867914665e-6,4.590434874603475e-9,0.004627798689161824,-9.109776567161958e-6,4.3708109803278244e-9,0.004628024187515499,-9.0095003276215e-6,4.1376398888795614e-9,0.004628159602392367,-8.956974239448121e-6,4.015455545081188e-9,0.004628229255540625,-9.005485803645908e-6,4.127521100134283e-9,0.004628283803510658,-9.1910726190435e-6,4.556926589182645e-9,0.004628390435834369,-9.514454774165462e-6,5.304877259037512e-9,0.004628610918423801,-9.931843970056032e-6,6.269651296939101e-9,0.004628975503068454,-1.03648245865506e-5,7.2696549997176675e-9,0.004629467998225569,-1.0728850454589621e-5,8.10939549229837e-9,0.004630032512152586,-1.0965482676576773e-5,8.65397700401509e-9,0.004630597398772655,-1.1060056137677217e-5,8.86984853736169e-9,0.004631101082919748,-1.1038122203419039e-5,8.816457412620772e-9,0.004631507147841215,-1.0948389067229884e-5,8.606690701628071e-9,0.004631806481354592,-1.0844288661248472e-5,8.364204739480547e-9,0.004632011465302068,-1.0771358781577292e-5,8.194291991699351e-9,0.004632147892557216,-1.0761401585255883e-5,8.170455351365712e-9,0.004632247893263616,-1.0831308542105932e-5,8.331728476942694e-9,0.00463234477781505,-1.0984114505098195e-5,8.685073680741978e-9,0.004632469369290628,-1.1210771926742844e-5,9.209415190899736e-9,0.004632647141513031,-1.1492171204089592e-5,9.860291714348777e-9,0.004632895765556187,-1.1801489544677315e-5,1.0575356211698413e-8,0.004633222987185644,-1.2107161747595294e-5,1.1281365019742708e-8,0.004633625109689717,-1.2376748980879223e-5,1.1903214390625413e-8,0.004634086659004174,-1.2581610090192167e-5,1.2374746891829162e-8,0.004634581752502566,-1.2701806877036646e-5,1.2650024924146413e-8,0.004635077356706937,-1.273044813037253e-5,1.2713298103112125e-8,0.004635538281190807,-1.2676599340062202e-5,1.2585709492729057e-8,0.004635933426539173,-1.2565907068775515e-5,1.2326775887080312e-8,0.0046362425090470906,-1.2438342120984666e-5,1.202920592778017e-8,0.004636462294497865,-1.234271921279755e-5,1.1806193185873564e-8,0.004636611028747824,-1.232775517799123e-5,1.1770617073140064e-8,0.004636729067608224,-1.2429993538057063e-5,1.2006973681361427e-8,0.004636873204322435,-1.2660614669240317e-5,1.2540806146547426e-8,0.004637103047741207,-1.2995764214321633e-5,1.3316407776853431e-8,0.004637461294852211,-1.3376967540621544e-5,1.4197950262497705e-8,0.00463795534065098,-1.3726217412767458e-5,1.5004554273269622e-8,0.004638550845381015,-1.3972478316380603e-5,1.5571711376454045e-8,0.004639183148953752,-1.4077211752893863e-5,1.5810383357853653e-8,0.0046397812865391925,-1.4045280259926954e-5,1.5732214181573113e-8,0.0046402914283477465,-1.3917086868911308e-5,1.5431235497281092e-8,0.004640688992994678,-1.3749519789539588e-5,1.50396004361683e-8,0.004640977811977925,-1.3597154104758875e-5,1.4683939035007512e-8,0.0046411816590931215,-1.3500634643284917e-5,1.4458435271925997e-8,0.004641334337283517,-1.3482814716284878e-5,1.4415936504639937e-8,0.004641471841569615,-1.3549864644392499e-5,1.45705737914381e-8,0.004641627345314647,-1.36943373473814e-5,1.4904873429144573e-8,0.004641828265389255,-1.3898382253809021e-5,1.5377192152694978e-8,0.004642094369945667,-1.4136568493739574e-5,1.592827642183505e-8,0.004642436229981527,-1.4378530825307724e-5,1.648746362443435e-8,0.004642853793025203,-1.4591962398589605e-5,1.6979710468902657e-8,0.00464333536372152,-1.4746476784586312e-5,1.7334602810121096e-8,0.004643857739129038,-1.481845010519349e-5,1.749756817785199e-8,0.00464438837763796,-1.479624509342569e-5,1.7441917675913e-8,0.0046448901141322415,-1.4684572553892183e-5,1.7178880316379137e-8,0.00464532817306209,-1.4506395760338885e-5,1.676197448758261e-8,0.0046456782783954416,-1.4300948688484878e-5,1.628240091514535e-8,0.004645933875498211,-1.4117326680498562e-5,1.5854168093428857e-8,0.004646110289799332,-1.4004423473821114e-5,1.5590715394014384e-8,0.004646244116896511,-1.399911276381716e-5,1.5577449679665026e-8,0.004646387005593405,-1.41153100211975e-5,1.5846355805771457e-8,0.004646594141764705,-1.4337032558028205e-5,1.6359950354097322e-8,0.004646909305258094,-1.4618613247030586e-5,1.701188561366317e-8,0.0046473503812339495,-1.4894178333601433e-5,1.7649042879564176e-8,0.004647900916773948,-1.5095625610264924e-5,1.811329983033688e-8,0.004648512809389593,-1.5173842404411922e-5,1.829077431406508e-8,0.004649120903019922,-1.5114403601433032e-5,1.8148248545685655e-8,0.004649663817187577,-1.4940331193331636e-5,1.7739550224659373e-8,0.004650101646361556,-1.4701189768492982e-5,1.7180166575556488e-8,0.004650423559198932,-1.4455016176381626e-5,1.6605176919502795e-8,0.004650644665764515,-1.4251827770794912e-5,1.613086614501808e-8,0.004650796624019296,-1.4124141025250696e-5,1.583268895658235e-8,0.004650917415804542,-1.4084914955533756e-5,1.5740543813909623e-8,0.004651043598431591,-1.4130241265291127e-5,1.5845089278510927e-8,0.0046512057278376125,-1.4243729279101672e-5,1.6107974164142077e-8,0.0046514261340793615,-1.4400690454054686e-5,1.6471579916206996e-8,0.00465171789456136,-1.4571531090473221e-5,1.6866922638427443e-8,0.004652084137226091,-1.4724599130893931e-5,1.7220302263998086e-8,0.00465251732741125,-1.4829134893015994e-5,1.746020024223448e-8,0.004652998819609395,-1.4859005735948932e-5,1.7525983107701823e-8,0.004653499526234626,-1.4797478165342453e-5,1.7378984205893643e-8,0.004653982822792938,-1.4642447874902636e-5,1.701461884775316e-8,0.004654410522758944,-1.4410540357957179e-5,1.6471859896107837e-8,0.004654751676673082,-1.4137726039344877e-5,1.5834608479389963e-8,0.0046549921899199246,-1.3874312315314267e-5,1.5219993013443092e-8,0.004655141733859297,-1.3673984905797297e-5,1.4752835810267254e-8,0.004655234441725839,-1.3579420898515158e-5,1.4532174851046341e-8,0.00465532189043984,-1.3609191262358246e-5,1.460084197006534e-8,0.00465545992364021,-1.3750758727023153e-5,1.4929278998332993e-8,0.004655693328327301,-1.3962304090208998e-5,1.5419907146882814e-8,0.004656043110456753,-1.4183068768481111e-5,1.5931259431933548e-8,0.0046565001678516875,-1.434927671056179e-5,1.631501554350779e-8,0.004657027305155954,-1.4411158052329369e-5,1.6455548921583325e-8,0.004657569281103155,-1.434612452943196e-5,1.630052615942731e-8,0.004658068049326739,-1.41639120076071e-5,1.5872851697627348e-8,0.0046584782426453645,-1.3901969676808915e-5,1.525993191601153e-8,0.0046587776708922075,-1.3613082255371558e-5,1.458484088844579e-8,0.004658969832612916,-1.3350233172794423e-5,1.397103491590227e-8,0.004659079003760188,-1.3154157206487545e-5,1.3513330900768914e-8,0.004659141208384155,-1.3046837117797856e-5,1.3262761688597618e-8,0.004659194957403009,-1.3031068730407019e-5,1.3225604937819598e-8,0.004659274330167408,-1.3094026415269862e-5,1.3371747416260096e-8,0.0046594050651191455,-1.3212282800757067e-5,1.3646426315830232e-8,0.004659602999671059,-1.3356523513515203e-5,1.3981232874721674e-8,0.004659873789227049,-1.3495310852038219E-05,1.430287645128278e-8,0.004660213024776066,-1.359808005239616e-5,1.4540151248134795e-8,0.00466060633304002,-1.3637992835869933e-5,1.4630579714044076e-8,0.00466102965981684,-1.3595349253137439e-5,1.4528372069494455e-8,0.004661450563042212,-1.3461902340691184e-5,1.421449651710166e-8,0.004661831730217652,-1.3245578696188559e-5,1.3707678548966238e-8,0.004662137755511344,-1.2973872164911173e-5,1.307227092715899e-8,0.004662344999202101,-1.2693012432152884e-5,1.2416231574338447e-8,0.0046624519407560735,-1.2460082818593682E-05,1.1872648439435237e-8,0.004662485004202495,-1.2327880026386206e-5,1.1564379854227212e-8,0.004662494901102442,-1.2327021407297365e-5,1.1562375295099926e-8,0.004662542595555069,-1.24533420275431e-5,1.185644126351985e-8,0.0046626799506357805,-1.2667322066857839e-5,1.2354101779958266e-8,0.004662933402383711,-1.2906251170550697e-5,1.2909087247827492e-8,0.004663297073919368,-1.3103506845817271e-5,1.3366273288023952e-8,0.004663736575308624,-1.3207064274389993e-5,1.360471420722314e-8,0.00466420034455511,-1.3191474217760806e-5,1.3565421464328888e-8,0.004664633821846689,-1.3061257113502004e-5,1.3259181775894936e-8,0.0046649923454657955,-1.284657142486857e-5,1.2756441236261749e-8,0.0046652500093320995,-1.2593575575264028e-5,1.2164869400910327e-8,0.004665403125135055,-1.2352518526780268e-5,1.160163133759852e-8,0.004665468293837048,-1.2166612359423423e-5,1.1167452954822372e-8,0.004665476372929213,-1.2064179756235221e-5,1.092829431744967e-8,0.004665464527011558,-1.205536188602705e-5,1.090765701107904e-8,0.00466546866248559,-1.2133139463074206e-5,1.1088976843000324e-8,0.004665517840456056,-1.2277264814901737e-5,1.1424838647350068e-8,0.00466563119751025,-1.245936221956031e-5,1.1848924275875613e-8,0.004665817006354218,-1.2647802841822536e-5,1.2287410809984839e-8,0.004666073053110041,-1.281166414378168e-5,1.2668190698852117e-8,0.004666387542373383,-1.292381306206243e-5,1.2928022906658796e-8,0.004666740117300406,-1.2963606556451226e-5,1.3018805625924864e-8,0.004667103089208761,-1.2919782368290056e-5,1.2914336858847914e-8,0.004667443516313451,-1.2793855787151033e-5,1.261828935995056e-8,0.004667727216102982,-1.2603634007130076e-5,1.2172443742013038e-8,0.004667925717887047,-1.2385223968453717e-5,1.1661335221281164e-8,0.004668025982969037,-1.2190587373047782e-5,1.1206425769168459e-8,0.004668040124918859,-1.2077562615726495e-5,1.0942668267392677e-8,0.004668009332740903,-1.2092131257680859e-5,1.0977046211594681e-8,0.004667995963365245,-1.2248776168792324e-5,1.1342816317376177e-8,0.004668063394253834,-1.2519839245074089e-5,1.1974895693262607e-8,0.004668252213447853,-1.2842352538933383e-5,1.272604191553377e-8,0.004668565476656956,-1.3140346753934688e-5,1.3419026252516424e-8,0.004668970137839872,-1.3350798188378615e-5,1.390712963685913e-8,0.00466941145688206,-1.3440881943664238e-5,1.4114239617360718e-8,0.004669831352637258,-1.3411820715628956e-5,1.4043647933471819e-8,0.004670183125758375,-1.3292231840828618e-5,1.3762398499525709e-8,0.004670439551567326,-1.3126587614643615e-5,1.3374333363953765e-8,0.0046705947835942166,-1.2963357965618242e-5,1.2992486691062576e-8,0.004670661871582767,-1.2845325839862214e-5,1.2716578643366719e-8,0.004670667699865216,-1.2802931475699457e-5,1.2617538625965364e-8,0.004670646681376949,-1.2850763728081769e-5,1.2729307862896565e-8,0.00467063427678483,-1.2987111806417097e-5,1.304775137827414e-8,0.004670661343090428,-1.3196164916613432e-5,1.353577457443399e-8,0.004670750064167247,-1.3452020070287972e-5,1.4132715042564545e-8,0.004670911777831962,-1.3723508501828329e-5,1.4765677409608379e-8,0.004671146597861861,-1.397894625705489e-5,1.5360669460035923e-8,0.004671444375319671,-1.4190158848444865e-5,1.5851986140975655e-8,0.004671786392194452,-1.4335593144657587e-5,1.6189419371909977e-8,0.004672147385320302,-1.440277455442945e-5,1.634395024210514e-8,0.004672497882915822,-1.439047323877524e-5,1.63128171558708e-8,0.004672807221955093,-1.4310754474099981e-5,1.6124358297051074e-8,0.004673047967062916,-1.4190585450886653e-5,1.5841798023873977e-8,0.004673202402940901,-1.4071681804180103e-5,1.556283414706472e-8,0.004673270739720579,-1.4006175424222032e-5,1.5409373309145138e-8,0.004673278417874302,-1.4045585886180635e-5,1.5501616287218707e-8,0.0046732771097705355,-1.4223112429589761e-5,1.5916656213600744e-8,0.0046733335426375954,-1.4535231411889031e-5,1.6645637433110732e-8,0.0046735060396706435,-1.4934337773744007e-5,1.7576826633511244e-8,0.004673819189801707,-1.5341741234222534e-5,1.852618723245616e-8,0.004674252268579398,-1.5677278964770178e-5,1.9306615085994873e-8,0.004674748944885229,-1.5888924620635015e-5,1.9797027686382072e-8,0.004675240882951573,-1.5966460031890974e-5,1.997414641383107e-8,0.004675670613593522,-1.593625842060622e-5,1.9900119679567408e-8,0.0046760041793818975,-1.5845643844857367e-5,1.9685820881802324e-8,0.00467623309851158,-1.5746690960885734e-5,1.945294625392006e-8,0.004676369818220206,-1.568457041001168e-5,1.930686205008403e-8,0.004676440772138309,-1.5691203227189234e-5,1.932191376955323e-8,0.004676479528732202,-1.5782987495501686e-5,1.9536206216259085e-8,0.004676520954653062,-1.5961033347667108e-5,1.995215400474037e-8,0.004676596422060922,-1.6212951573783454e-5,2.0540610281932875e-8,0.004676730027189161,-1.6515837372076925e-5,2.1247813816331533e-8,0.004676935979999788,-1.6840152095742693e-5,2.2004505046599017e-8,0.004677217318990602,-1.7154102391278926e-5,2.2736247570911134e-8,0.00467756602649892,-1.7428077777037665e-5,2.3373860561672378e-8,0.004677964479425937,-1.763863379374355e-5,2.3862716425329537e-8,0.0046783879238457065,-1.7771596392012232e-5,2.4169923607945506e-8,0.004678807583239352,-1.782417897198473e-5,2.4289203675387195e-8,0.004679194192743565,-1.780618647288843e-5,2.4243687912563586e-8,0.004679521978008149,-1.7740311713799754e-5,2.4086639550366526e-8,0.0046797732769125674,-1.7661270247751158e-5,2.3899445231071237e-8,0.004679943926326737,-1.7612934963310745e-5,2.378485408762777e-8,0.00468004874105327,-1.76419904879494e-5,2.38520116422879e-8,0.0046801248137174605,-1.7786845602176726e-5,2.4190427202702886e-8,0.004680228593309382,-1.806263404032576e-5,2.4834927068767032e-8,0.004680422650323219,-1.844760764224442e-5,2.5734020536887993e-8,0.0046807527992763975,-1.8880759513499523e-5,2.674458018490809e-8,0.0046812254701966765,-1.9278549072575866e-5,2.7671099756894892e-8,0.004681800427430815,-1.9566523632612258e-5,2.8339657629219468e-8,0.004682406079741662,-1.9708395147643984e-5,2.8665861411746463e-8,0.004682968366748158,-1.9715465849410977e-5,2.867679352392317e-8,0.004683435608529261,-1.9634266355882566e-5,2.8481924313167707e-8,0.0046837883337889595,-1.952439154406978e-5,2.822106187628867e-8,0.004684035487230924,-1.9439673756009193e-5,2.8020203083391307e-8,0.004684204485088165,-1.941806770279495e-5,2.7967929163297136e-8,0.00468433116167156,-1.9479029937500837e-5,2.8109428435669545e-8,0.004684452186456466,-1.9625176187452407e-5,2.845049597540157e-8,0.004684600168465979,-1.984553498761316e-5,2.896517248241957e-8,0.0046848006032723915,-2.0118998764571928e-5,2.9603786467988204e-8,0.0046850698397548065,-2.041773635670475e-5,3.0300926191513015e-8,0.004685413783371999,-2.0710763850050337e-5,3.098384943257845e-8,0.00468582740770953,-2.096777642395736e-5,3.1581541361914726e-8,0.004686295292293071,-2.1163165376747107e-5,3.203417446835051e-8,0.004686793459251504,-2.127986172954694e-5,3.230208207219933e-8,0.004687292561605285,-2.1312386356273433e-5,3.2372809600881676e-8,0.0046877621105637915,-2.126854613740853e-5,3.2264991110637834e-8,0.004688175258111988,-2.1169442043346494e-5,3.202831932504239e-8,0.004688513640797768,-2.104761290672734e-5,3.173919627450822e-8,0.004688771804655766,-2.0943260277204035e-5,3.149188772523059e-8,0.004688960704666771,-2.089847309766487e-5,3.138494951118754e-8,0.004689109427812848,-2.0949239557927876e-5,3.150244410680444e-8,0.0046892635417487075,-2.111546408427255e-5,3.189053130139887e-8,0.004689477922148566,-2.139077308886334e-5,3.253367882818093e-8,0.004689802698454854,-2.1736387602686895e-5,3.3340499356742825e-8,0.004690264446209853,-2.2085256460148676e-5,3.415361339714332e-8,0.004690850572478942,-2.2360461861946586e-5,3.4792836260214054e-8,0.004691507905376526,-2.2503277074614084e-5,3.512087981369812e-8,0.0046921603699025816,-2.2496547289027997e-5,3.5098078105129547e-8,0.004692737515622717,-2.2369205648309436e-5,3.4792895698371355e-8,0.0046931977430484575,-2.218033828194287e-5,3.434443116540985e-8,0.004693535450245421,-2.19946049648199e-5,3.390460552743203e-8,0.004693773572452373,-2.1862829343110403e-5,3.359254933534034e-8,0.0046939501630360635,-2.181362607661693e-5,3.3475032195887265e-8,0.004694106408800557,-2.1853986931876104e-5,3.356800326714713e-8,0.004694278929507639,-2.1974145041739544e-5,3.384814078091561e-8,0.004694495986966662,-2.2153135943492177e-5,3.4265942399950725e-8,0.00469477605708682,-2.236343686777121e-5,3.475658838964401e-8,0.004695127385027143,-2.25745849279392e-5,3.5248415385464474e-8,0.004695547882976639,-2.2756322352379375e-5,3.567032900021728e-8,0.004696025355911659,-2.2881787560675736e-5,3.595935203368904e-8,0.004696538399017729,-2.2930998865573962e-5,3.6068830865346576e-8,0.0046970585118214685,-2.2894428695522926e-5,3.597678695177047e-8,0.0046975538398428066,-2.277591695522771e-5,3.569266368776685e-8,0.004697994417085737,-2.2593897361128732e-5,3.52601055038316e-8,0.004698358163045725,-2.238005741037552e-5,3.475374675121492e-8,0.0046986364344812365,-2.2175013783692378e-5,3.4269031535764016e-8,0.0046988377483364,-2.2021316841364653e-5,3.3905777612987485e-8,0.004698988505350433,-2.1954843872662592E-05,3.3747957039559153e-8,0.00469913001615439,-2.199603289469974e-5,3.384312019587815e-8,0.004699311555481439,-2.2142626039551497e-5,3.418542095617081e-8,0.004699579681160445,-2.2366028659942287e-5,3.470720003209844e-8,0.004699965159038889,-2.261379023439517e-5,3.528496641002932e-8,0.0047004707613474824,-2.2820209470544427e-5,3.576439822294622e-8,0.004701065275270101,-2.29245915141501e-5,3.600321104272019e-8,0.0047016890656927665,-2.2891951736126434e-5,3.591970431021748e-8,0.004702272011748362,-2.2726666777386748e-5,3.5524736397453896e-8,0.004702756920507253,-2.2470877734699576e-5,3.491788013206634e-8,0.004703116987165939,-2.2187808782063738e-5,3.4248104068405246e-8,0.004703359534640568,-2.193925935774467e-5,3.3660754039070295e-8,0.004703517130520162,-2.176842696306175e-5,3.325714330433221e-8,0.004703633418269326,-2.1693450292192006e-5,3.3079469125848756e-8,0.004703750784664788,-2.1710014565138826e-5,3.311710181821752e-8,0.004703902999268972,-2.1798210735348334e-5,3.332284229703271e-8,0.00470411241473192,-2.1929606093883388e-5,3.362958798550564e-8,0.004704389870876045,-2.207267688476105e-5,3.396308166894864e-8,0.0047047356012256255,-2.2196523423997598e-5,3.425061394883235e-8,0.004705140226676658,-2.2273583221930157e-5,3.4427402906015455e-8,0.004705585684179088,-2.2282131344618075e-5,3.444250019797068e-8,0.004706046484988976,-2.2209080754436687e-5,3.426539393023329e-8,0.004706492021561705,-2.205305499960459e-5,3.389321201807501e-8,0.004706890608130669,-2.182697129221664e-5,3.3356730967267744e-8,0.00470721539646339,-2.1558758464267093e-5,3.2721977504560417e-8,0.004707451321018943,-2.12887104727388e-5,3.208392178194558e-8,0.004707601124258925,-2.1062650368795808e-5,3.1550339335174934e-8,0.004707687923092548,-2.092164673284272e-5,3.1217597646232705e-8,0.004707752373939844,-2.0890881213821516e-5,3.1144495257733445e-8,0.004707844271649323,-2.097124597532204e-5,3.1332583670419434e-8,0.004708010475613604,-2.113670162270532e-5,3.172008981581706e-8,0.004708282385389394,-2.1338748014371744e-5,3.219257613945702e-8,0.0047086664359290925,-2.15173693706775e-5,3.2608780636782456e-8,0.0047091404880734164,-2.161606952423453e-5,3.283599569519555e-8,0.004709657840613588,-2.159728736032355e-5,3.278626927707014e-8,0.0047101587972046815,-2.14536381865304e-5,3.244275536750323e-8,0.004710587092019814,-2.1210639927389882e-5,3.1866026733256766e-8,0.004710905784652387,-2.0918934500008726e-5,3.11756702803512e-8,0.004711106530119068,-2.0638435018091832e-5,3.051288304831013e-8,0.004711208865517889,-2.0420804081158147e-5,2.999917704131898e-8,0.004711250995690448,-2.029710843358638e-5,2.9707348003223693e-8,0.004711277151420492,-2.0274053881011356e-5,2.9652724627549498e-8,0.00471132674977426,-2.033766978305856e-5,2.9801983439850805e-8,0.00471142806619857,-2.046071242907155e-5,3.009067825446045e-8,0.004711596296366146,-2.061020016312087e-5,3.044100612335261e-8,0.004711834389857875,-2.0753171954947886e-5,3.077533281366249e-8,0.004712134965726818,-2.086041685204148e-5,3.1024925417154556e-8,0.004712482251510385,-2.090882235568343e-5,3.1135456149055995e-8,0.004712853737906606,-2.0883211847782863e-5,3.107133595210802e-8,0.004713221881139335,-2.0778334625325025e-5,3.082042383122008e-8,0.004713556597760101,-2.0601134262572815e-5,3.0399376917884984e-8,0.004713829354068818,-2.037263915355485e-5,2.9858068237885336e-8,0.004714019207495355,-2.0127999853239356e-5,2.9279591365504785e-8,0.004714120040236812,-1.9912737159773322e-5,2.8771311538676714e-8,0.00471414655809,-1.9773869991005393e-5,2.8443873226592142e-8,0.004714135386249772,-1.9746861801332327e-5,2.83804276963628e-8,0.004714138370032906,-1.984258160661189e-5,2.8606000254505665e-8,0.004714208596707071,-2.004036454826956e-5,2.9071316232283385e-8,0.004714383927031075,-2.029154199139544e-5,2.966130936884501e-8,0.00471467478824134,-2.0532945180363846e-5,3.022705867006223e-8,0.004715061013315357,-2.070513244011117e-5,3.0628741349271914e-8,0.00471549819391272,-2.076855953990602e-5,3.0773644450018024e-8,0.004715930398805945,-2.0712828599232458e-5,3.06378229761092e-8,0.00471630479798327,-2.0557372487725065e-5,3.02675794944921e-8,0.00471658419168978,-2.0344538606421003e-5,2.9763064924636998e-8,0.004716754587575241,-2.012762846230072e-5,2.9250034311585e-8,0.004716826391143379,-1.9957347775696705e-5,2.8847903519089865e-8,0.004716829482927148,-1.9870328926400146e-5,2.8642734974974278e-8,0.004716804183631088,-1.9882591570309303e-5,2.8671899620700577e-8,0.004716791192796836,-1.9989005281011388e-5,2.8922902741116466e-8,0.004716823437325514,-2.016770532199581e-5,2.934387756265717e-8,0.004716921469150951,-2.0387043502867066e-5,2.986002387931219e-8,0.0047170924226144694,-2.0612596164450385e-5,3.0390138793191444e-8,0.004717331446500595,-2.081266616228881e-5,3.085955828244744e-8,0.00471762425529221,-2.0961852660023846e-5,3.120852397033979e-8,0.004717949786709429,-2.104309008518074e-5,3.139695112234478e-8,0.004718282560551554,-2.104890203008696e-5,3.1407378398035346e-8,0.00471859492533725,-2.0982516486430054e-5,3.1247623321056654e-8,0.004718859796079545,-2.0859052414961204e-5,3.0953605446153896e-8,0.004719054624823485,-2.0706285041295662e-5,3.059112867970817e-8,0.004719167008269947,-2.0563643657749342e-5,3.025342322589191e-8,0.0047192012609654915,-2.0477478018717793e-5,3.00498426889888e-8,0.00471918345441392,-2.0491050133859172e-5,3.0082155472353386e-8,0.004719160711673773,-2.0630138351970563e-5,3.041060704503147e-8,0.004719191097019601,-2.0889406258420564e-5,3.1021931692673706e-8,0.004719325043469325,-2.1227769789697886e-5,3.181866698159706e-8,0.0047195859260143365,-2.1578468896618452e-5,3.264310559084911e-8,0.004719960156972756,-2.187111814865657e-5,3.3329373513019146e-8,0.004720402230039262,-2.2055137896671795e-5,3.375863627291979e-8,0.004720851199728154,-2.211368644516015e-5,3.3891818178741824e-8,0.004721249742534635,-2.2064084478755165e-5,3.3770422384395773e-8,0.004721558271420089,-2.194802371751545e-5,3.349326327499581e-8,0.004721761248337392,-2.181765833721016e-5,3.318355542341268e-8,0.004721866556401599,-2.1722520963282726e-5,3.295805030285286e-8,0.004721900238871268,-2.169987115382176e-5,3.29043510790176e-8,0.004721898892204645,-2.176929055241197e-5,3.306826983285239e-8,0.004721901529417458,-2.193141803818353e-5,3.345092527192641e-8,0.004721942348745987,-2.2170269412426117e-5,3.401426136456454e-8,0.004722045516212493,-2.2458138717909424e-5,3.4692640398515564e-8,0.004722222546618573,-2.2761699487966296e-5,3.540726851507083e-8,0.0047224722135377,-2.3047940802877143e-5,3.6080226653327896e-8,0.004722782394577666,-2.3288951948910685e-5,3.6645758612571877e-8,0.004723132980101565,-2.3465103100195668e-5,3.7057739558551584e-8,0.004723499026608934,-2.3566743782828097e-5,3.729363200615465e-8,0.004723853726366984,-2.3594919509001365e-5,3.7356145869933e-8,0.004724171226410891,-2.356158846622636e-5,3.727375668144662e-8,0.00472442964344223,-2.3489522051841577e-5,3.710048713221879e-8,0.004724614776565834,-2.3411574874169688e-5,3.691415587823861e-8,0.004724724794459883,-2.3368277341243487e-5,3.6810591870453345e-8,0.0047247752100325596,-2.340213360934399e-5,3.6890033197833116e-8,0.004724801818033701,-2.354741153860014e-5,3.723294414462482e-8,0.00472485768521177,-2.3816423663497148e-5,3.786770260091306e-8,0.004725000635390749,-2.418751526032683e-5,3.8742466858000376e-8,0.004725272431033011,-2.4603620051597823e-5,3.972202334985268e-8,0.0047256788219663705,-2.4987702204493527e-5,4.062439541897351e-8,0.004726183285667441,-2.5270759185625143e-5,4.128696584233639e-8,0.004726720126803429,-2.541754230471784e-5,4.162712542300643e-8,0.004727219448344189,-2.5435941739691993e-5,4.166429361538732e-8,0.004727629770664268,-2.536784151980682e-5,4.149811650246318e-8,0.00472792886355938,-2.5270329894455154e-5,4.126387077300937e-8,0.00472812265068321,-2.5197835046972124e-5,4.109015364379114e-8,0.0047282373150355555,-2.5190669974525258e-5,4.1071880240448236e-8,0.004728309665470908,-2.5270343003186838e-5,4.125937504726307e-8,0.004728378624615121,-2.543968430350618e-5,4.165883422548709e-8,0.004728478767596398,-2.5685707126707573e-5,4.223916565564198e-8,0.004728635885651726,-2.5983880913205705e-5,4.294209090323031e-8,0.004728864409439411,-2.6303109090072288e-5,4.369389967187808e-8,0.00472916659618418,-2.6610845597161917e-5,4.44175634064523e-8,0.004729533321857145,-2.687781278328495e-5,4.5043926732075706e-8,0.00472994622235607,-2.708187235910797e-5,4.55208730022123e-8,0.004730380793270376,-2.721067737099242e-5,4.5819553184842186e-8,0.004730809906752847,-2.7262961196945158e-5,4.593735403726144e-8,0.004731207297948036,-2.724866569169805e-5,4.589813042879811e-8,0.004731550882303068,-2.7188193463415645e-5,4.5750407942570875e-8,0.004731825972564864,-2.7110878798737e-5,4.5563763450471336e-8,0.004732028530653421,-2.7052515132200603e-5,4.54229491228676e-8,0.004732168446389242,-2.7051350258781955e-5,4.541834024160813e-8,0.004732272116670077,-2.714157631827611e-5,4.563044734216501e-8,0.004732382358303023,-2.734381236381859e-5,4.610740117539504e-8,0.004732552676207028,-2.765400554259749e-5,4.6838853150868065e-8,0.004732833512182073,-2.803550331529912e-5,4.773748847006038e-8,0.004733252285295634,-2.842190019560124e-5,4.864598097253564e-8,0.004733796293531172,-2.8735835655547945e-5,4.9381511830951945e-8,0.004734411109839088,-2.891853713979851e-5,4.980557132802008e-8,0.004735019503554785,-2.895397730306729e-5,4.9880998252676156e-8,0.004735551138537044,-2.887270533546891e-5,4.9680920882470014e-8,0.00473596575267552,-2.873482839748109e-5,4.9348284107208375e-8,0.004736259519104328,-2.8605104853960317e-5,4.903667122874668e-8,0.004736457060975534,-2.8533821667809858e-5,4.886493863585071e-8,0.0047365979415711565,-2.85485921602435e-5,4.88979128990018e-8,0.004736724583238949,-2.8654807118183317e-5,4.914769787656253e-8,0.0047368742116397,-2.8840382877356432e-5,4.958511728727826e-8,0.004737074552126241,-2.9081541619000465e-5,5.015347478913712e-8,0.004737342012367782,-2.934812648323624e-5,5.078111482310837e-8,0.004737681309886265,-2.960821833601568e-5,5.139231870366264e-8,0.004738086098954303,-2.9832193363411564e-5,5.191692419486976e-8,0.004738540469209245,-2.9996259595434974e-5,5.229874245767923e-8,0.0047390212881655396,-3.0085394338945098e-5,5.2502529913061444e-8,0.004739501377336211,-3.0095423581682325e-5,5.251886124976056e-8,0.004739953305782397,-3.0033870472254683e-5,5.236603682676017e-8,0.004740353348319325,-2.9919407976351642e-5,5.208868447062693e-8,0.004740685200385828,-2.9779991128983356e-5,5.175327771239827e-8,0.004740943182403257,-2.9649741613378564e-5,5.1440738209547884e-8,0.004741134674185391,-2.9564621576085497e-5,5.1236171222247815e-8,0.004741281429687509,-2.955689735080932e-5,5.121571324845782e-8,0.004741419089674041,-2.9648317114137292e-5,5.1430346955513816e-8,0.004741593583568248,-2.984236535396184e-5,5.18876132323745e-8,0.0047418528064249385,-3.0117417530783683e-5,5.2535574522677666e-8,0.004742232999460031,-3.0424697664623252e-5,5.325821214909581e-8,0.004742742611363063,-3.069609207813721e-5,5.3894094209571386e-8,0.004743351393757184,-3.086414788615748e-5,5.4283751424790724e-8,0.004743994368040548,-3.088836563852584e-5,5.433186801908802e-8,0.004744593460110826,-3.0773559410401626e-5,5.4050676811265004e-8,0.004745086788273111,-3.0567784478253706e-5,5.3554919237006306e-8,0.004745448989905369,-3.034083898991905e-5,5.301067418598428e-8,0.0047456930853903715,-3.015732469647893e-5,5.257126350003612e-8,0.004745857698513026,-3.00585998089884e-5,5.233439298931279e-8,0.004745990240669041,-3.0058200221043662e-5,5.233146185427817e-8,0.004746133999600095,-3.01466801907586e-5,5.2539325380684306e-8,0.004746321325199566,-3.0299826522431672e-5,5.289999214373297e-8,0.004746571565708012,-3.048628868783824e-5,5.333878061980279e-8,0.004746891547053987,-3.067323831866283e-5,5.377769034777425e-8,0.004747276976592629,-3.083031101807034e-5,5.414468688672485e-8,0.0047477141402886116,-3.09325591886319E-05,5.4380693556431183e-8,0.004748181886555148,-3.096289364885244e-5,5.444541244979396e-8,0.004748654088097438,-3.09141513535335e-5,5.432224087989675e-8,0.004749102826477359,-3.079058892868887e-5,5.4021765189798875e-8,0.0047495023578297945,-3.060826542501298e-5,5.358256772490767e-8,0.004749833466407175,-3.0393770407297746e-5,5.306810148158317e-8,0.0047500874842839194,-3.018108231591561e-5,5.2559163277776153e-8,0.004750269208928283,-3.000667785776047e-5,5.214226026089898e-8,0.004750398005292498,-2.990333609399654e-5,5.1894905169507964e-8,0.004750506508683392,-2.9893424852776115e-5,5.186969825178604e-8,0.004750636541043871,-2.9982645840082855e-5,5.2079533030619567e-8,0.0047508320083346,-3.0155421919572188e-5,5.248676449937229e-8,0.004751128908639331,-3.037369192805859e-5,5.300052553271625e-8,0.0047515437134295745,-3.058146946640733e-5,5.348771766126394e-8,0.004752063484848125,-3.071700733657849e-5,5.380196084787112e-8,0.0047526432287152715,-3.073156493559227e-5,5.382809002665862e-8,0.004753215530274019,-3.060859876345908e-5,5.352758456900073e-8,0.004753711939495655,-3.0373149193153703e-5,5.2960713748294996e-8,0.004754087100048578,-3.0083973403278307e-5,5.226769683183297e-8,0.00475433293603724,-2.98112136590755e-5,5.1615475629158006e-8,0.004754476264544549,-2.9611822552670604e-5,5.113920082596975e-8,0.004754563953700199,-2.9514823359041654e-5,5.0907249040929476e-8,0.0047546455613278705,-2.9520016886330627e-5,5.0918372072733805e-8,0.004754761071596459,-2.9605722627759065e-5,5.112036823852704e-8,0.004754935662167024,-2.9739033755819657e-5,5.143462572713782e-8,0.0047551796096890735,-2.988434036747737e-5,5.1776389895648226e-8,0.004755490589258526,-3.0008869624587908e-5,5.206783588245407e-8,0.004755856442393838,-3.008584029224015e-5,5.224546763974042e-8,0.004756257668350731,-3.0096339668500227e-5,5.2264540791731686e-8,0.004756669706745484,-3.0030731792701057e-5,5.210242554479061e-8,0.004757065414585785,-2.9889908539192638e-5,5.176159886049536e-8,0.004757418195542284,-2.968619040159789e-5,5.1271759843174285e-8,0.00475770601363651,-2.9443203318333868e-5,5.0689459342253564e-8,0.004757915965546911,-2.9193873541743718e-5,5.009323271378707e-8,0.004758048438176281,-2.8975983699953833e-5,4.957295059706262e-8,0.0047581194741599594,-2.882542250153593e-5,4.921372935448555e-8,0.004758160019778779,-2.876818870394926e-5,4.9076934374705044e-8,0.004758211358591651,-2.8813062505827567e-5,4.9182827912228046e-8,0.004758317093348088,-2.894711954955259e-5,4.950002836532726e-8,0.004758513086696229,-2.913579719092093e-5,4.994582695633771e-8,0.004758817511140333,-2.932837760191171e-5,5.03993731608605e-8,0.004759223605850981,-2.9468701036464705e-5,5.072723219425754e-8,0.004759697867909933,-2.9509504216527897e-5,5.0817464553032814e-8,0.004760185864983653,-2.942696235017769e-5,5.061410130962157e-8,0.0047606259543624555,-2.9230317643366145e-5,5.0139889000795495e-8,0.004760967607467908,-2.896139174117637e-5,4.9494965504536796e-8,0.004761187350905263,-2.8682116608214554e-5,4.882704196243258e-8,0.004761294966547717,-2.8454389880011927e-5,4.828336259201367e-8,0.004761327275387122,-2.8321230768383856e-5,4.796585845162461e-8,0.004761333553681048,-2.829714704173953e-5,4.790836114893017e-8,0.0047613601652829966,-2.8369688621673795e-5,4.808053312846534e-8,0.004761440321646852,-2.8508399895063426e-5,4.8409387338905586e-8,0.004761590551451071,-2.8675522491192136e-5,4.880485640357133e-8,0.004761812082991868,-2.883449707617644e-5,4.917998782520274e-8,0.004762094385548418,-2.8955069947828657e-5,4.946298307321452e-8,0.004762418882065095,-2.9015693696433737e-5,4.960280392062293e-8,0.0047627620311700624,-2.9004461174501594e-5,4.95713500331758e-8,0.004763097828331392,-2.8919547543918302e-5,4.936452599578333e-8,0.004763400221147088,-2.8769621484632385e-5,4.90032528762637e-8,0.004763646058855578,-2.8574085268911304e-5,4.8534040160042696e-8,0.004763818946533213,-2.8362398774863e-5,4.802731915464349e-8,0.004763913739565946,-2.8171404920085826e-5,4.757097276326134e-8,0.004763940543520972,-2.8039773963918373e-5,4.725700354486537e-8,0.004763926283878361,-2.7999613583819032e-5,4.7161505527736824e-8,0.004763911790083301,-2.806694015820014e-5,4.732201788368541e-8,0.004763943561668426,-2.8234348316907707e-5,4.772020956502153e-8,0.004764061768513518,-2.846950262937871e-5,4.827848357257109e-8,0.004764288248044224,-2.8721294087771193e-5,4.8874818169044365e-8,0.004764618840848933,-2.893247019251986e-5,4.93729414401414e-8,0.004765022978940383,-2.905493603698263e-5,4.965875709174304e-8,0.004765450868508584,-2.9062967578863874e-5,4.967170122917772e-8,0.004765846191254104,-2.8960399760946087e-5,4.942169071629253e-8,0.00476616076776282,-2.8779715550303997e-5,4.8986766544630736e-8,0.004766367084636814,-2.8573141543301774e-5,4.849172329484978e-8,0.004766464911858467,-2.839814847115955e-5,4.807347695622499e-8,0.00476647980983421,-2.8301831799976193e-5,4.784386143983262e-8,0.004766454199070231,-2.830937480805551e-5,4.7862255367856655e-8,0.004766434603844106,-2.8420157629011527e-5,4.8126495550133353e-8,0.004766459867818386,-2.861169104607286e-5,4.8582435764613466e-8,0.004766553900979995,-2.8848469249434867e-5,4.9145161379864336e-8,0.004766723895020026,-2.9091731049801776e-5,4.9722271610959204e-8,0.004766962652236033,-2.9307102792118214e-5,5.023203099217928e-8,0.004767252783211253,-2.946903329270971e-5,5.061383669831442e-8,0.004767570966247876,-2.956252059197733e-5,5.083224211036534e-8,0.00476789143265435,-2.9583263200849124e-5,5.0877272768619633e-8,0.004768188657904238,-2.9537233992896767e-5,5.076341708753041e-8,0.004768439713838026,-2.9440208044921784e-5,5.0528530531352904e-8,0.004768626910754468,-2.9317193423369705e-5,5.0232483468787865e-8,0.004768741178477299,-2.9201099070795987e-5,4.9953931538163455e-8,0.004768786027644776,-2.9129513499080413e-5,4.978252629146496e-8,0.004768780936853772,-2.9138496012208616e-5,4.980400285879896e-8,0.0047687618966803106,-2.9253256552848995e-5,5.007792821246455e-8,0.004768776430770757,-2.94777909524039e-5,5.0613091054872876e-8,0.004768871988096792,-2.9788111750287958e-5,5.13515752527904e-8,0.004769080444607102,-3.013432954967566e-5,5.2173957718739495e-8,0.004769405284770623,-3.0453486715106665e-5,5.293006343952431e-8,0.004769818220406904,-3.0688999004594416e-5,5.3485350267577706e-8,0.00477026743433048,-3.080834002271513e-5,5.376298803352503e-8,0.004770693577738604,-3.081168201237658e-5,5.3764285152528835e-8,0.004771046589895863,-3.072935915638893e-5,5.3562407814568835e-8,0.004771297631526678,-3.0610999818195513e-5,5.3276237909610404e-8,0.004771443711692161,-3.051122681918304e-5,5.303613422492912e-8,0.004771505396973143,-3.047631542556714e-5,5.295212013490912e-8,0.004771519499267242,-3.0534710642808274e-5,5.3091406911566415e-8,0.004771529205577235,-3.0692816320908944e-5,5.346855026149306e-8,0.00477157418650815,-3.0936189653487376e-5,5.404847750248202e-8,0.004771682921045021,-3.123511651048176e-5,5.4759893534474465e-8,0.004771868687189363,-3.1552574400663744e-5,5.551430977654335e-8,0.004772129449714966,-3.1852223337845775e-5,5.622508871487745e-8,0.004772450721118148,-3.210457768014518e-5,5.682212037646142e-8,0.0047728099065585915,-3.2290564110685556e-5,5.726024480323222e-8,0.004773180754965365,-3.240266257319448e-5,5.752190311025016e-8,0.004773537085899212,-3.244442374528547e-5,5.761592957241243e-8,0.004773855633711976,-3.242925814099788e-5,5.757463774878549e-8,0.004774118342142201,-3.237905496994603e-5,5.7450525834272396e-8,0.004774314614586185,-3.23226647010406e-5,5.731264700502641e-8,0.004774443914942631,-3.2293765111534964e-5,5.724146147285952e-8,0.004774518652136438,-3.232717786829844e-5,5.731994509929363e-8,0.0047745663374796085,-3.245259117379958e-5,5.761852250142311e-8,0.004774628801644312,-3.268548015279706e-5,5.817341730913397e-8,0.004774755642402249,-3.301726301171104e-5,5.896332753649877e-8,0.004774990554962329,-3.340982109567715e-5,5.989660608993938e-8,0.004775353818295921,-3.3800784181514464e-5,6.082409330155231e-8,0.004775829687604098,-3.412186477507274e-5,6.158296115132251e-8,0.004776367868533359,-3.4323594773016025e-5,6.205572173406188e-8,0.004776900497853547,-3.439347655809735e-5,6.22134491263007e-8,0.004777365818310518,-3.435798439395554e-5,6.21203712505869e-8,0.004777726423271264,-3.426947678704886e-5,6.190234646575702e-8,0.004777975587727213,-3.418704078505039e-5,6.170085067616404e-8,0.004778133031878161,-3.416016772550692e-5,6.163388088984261e-8,0.004778235183303571,-3.42193194337018e-5,6.177353927618648e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json deleted file mode 100644 index 2cb2765..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_27.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":27000,"numberOfSamples":426,"samples":[0.004778324486778677,-3.437325503603603e-5,6.213990841775234e-8,0.0047784403655323285,-3.4611193149972956e-5,6.270647293317436e-8,0.004778612794687001,-3.490776213298559e-5,6.34120907874662e-8,0.004778858592736182,-3.52292773450405e-5,6.41760174740733e-8,0.004779180332297561,-3.554033000747647e-5,6.491361305699471e-8,0.0047795676373042825,-3.580972313910667e-5,6.555048782196374e-8,0.004780000304382801,-3.601491695515349e-5,6.603309632804475e-8,0.00478045244087296,-3.61445559073166e-5,6.63347373647879e-8,0.004780896788498023,-3.619907152539314e-5,6.64569282050896e-8,0.004781308537182374,-3.6189716300693844e-5,6.642701476463283e-8,0.004781668287402928,-3.613665338138569e-5,6.62935418736394e-8,0.004781964263597514,-3.606664631235279e-5,6.612070094818705e-8,0.004782194088007322,-3.6010502207012165e-5,6.598220199376154e-8,0.004782366358377176,-3.600003307813221e-5,6.595397202033107e-8,0.004782501973157172,-3.6063967015481664e-5,6.610431957871602e-8,0.004782634428155468,-3.622211612037997e-5,6.647996630880908e-8,0.004782807312744113,-3.647777437681964e-5,6.708796154697767e-8,0.004783066725500625,-3.681018070253991e-5,6.787788985789277e-8,0.004783447527929692,-3.717158351927006e-5,6.873512189479286e-8,0.004783956543699519,-3.749495769285591e-5,6.949941757309266e-8,0.004784561694818515,-3.7714824470447004e-5,7.001467512930746e-8,0.00478519734376055,-3.779386901530488e-5,7.019245393058328e-8,0.004785787298279908,-3.773988586048272e-5,7.005238005891471e-8,0.004786273540716633,-3.760159745695435e-5,6.971198893123057e-8,0.004786634261718939,-3.7446681679021194e-5,6.93338948131939e-8,0.004786883955125812,-3.7336538281738074e-5,6.90651418882107e-8,0.004787060855944783,-3.731025026111713e-5,6.89987545085644e-8,0.004787211498019626,-3.738052485901743e-5,6.916423518663561e-8,0.004787378723491085,-3.753768633517913e-5,6.953747098677388e-8,0.004787594743852002,-3.775688736390837e-5,7.005827277528313e-8,0.004787878341866488,-3.8005421267547694e-5,7.064797754466723e-8,0.004788234677867704,-3.824887091042978e-5,7.122411974828502e-8,0.004788656578890198,-3.845602832364749e-5,7.171211724931977e-8,0.004789126866304347,-3.8602762874008655e-5,7.205447458736902e-8,0.004789621527438917,-3.867476505188969e-5,7.221733392634786e-8,0.004790113453092092,-3.866900598852055e-5,7.219394452663505e-8,0.004790576389242894,-3.859380569021363e-5,7.200475975629059e-8,0.004790988658217021,-3.846749668906106e-5,7.169414035802423e-8,0.004791336185455692,-3.831592746623132e-5,7.132428928460062e-8,0.004791614602286293,-3.8169236193829984e-5,7.096748066882624e-8,0.004791830442019499,-3.8058199395276177E-05,7.069730505809583e-8,0.00479200147328233,-3.8010251494226334e-5,7.057912997799612e-8,0.00479215608282581,-3.8045112493544786e-5,7.065962097547686e-8,0.004792331243570715,-3.816988109148568e-5,7.095502401154791e-8,0.00479256801539422,-3.837391090721481e-5,7.143902873254914e-8,0.004792903356231363,-3.8625101009650084e-5,7.203412021826269e-8,0.00479335809982377,-3.887092912081732e-5,7.261428947824125e-8,0.004793923998139211,-3.904832069801235e-5,7.302876037880577e-8,0.004794557121329183,-3.910366330394545e-5,7.314982344552248e-8,0.004795186187943556,-3.901641098772414e-5,7.292918982979318e-8,0.004795737032643518,-3.881216157437762e-5,7.242916797983955e-8,0.004796161501972789,-3.855411099464743e-5,7.180203477009054e-8,0.004796453566145229,-3.831658356890081e-5,7.122636889591443e-8,0.004796644767523727,-3.815714860499036e-5,7.084000022037542e-8,0.004796785949434881,-3.8101951194646106e-5,7.070485098911682e-8,0.004796928139441377,-3.8146598603855446e-5,7.080934608157665e-8,0.004797110480654036,-3.8265789851055167e-5,7.109188904690533e-8,0.004797355877127002,-3.8424311612934556e-5,7.146748579270787e-8,0.004797671612426517,-3.8585616852327366e-5,7.184835086333892e-8,0.004798052093481322,-3.8717282547673696e-5,7.215687639979793e-8,0.004798481982683185,-3.879416904832568e-5,7.233306811500727e-8,0.0047989392109531745,-3.880032466659669e-5,7.233903786826962e-8,0.004799398014519919,-3.873014716490181e-5,7.216177815700216e-8,0.004799832156249859,-3.858883316916818e-5,7.181423253686315e-8,0.004800218353251468,-3.839193072968296e-5,7.133417138730679e-8,0.004800539728226463,-3.816370201797726e-5,7.07801739212383e-8,0.004800788798428815,-3.7934150450836535e-5,7.022440790334248e-8,0.004800969422381577,-3.773493298607536e-5,6.97427737273164e-8,0.004801097307136082,-3.7594608437565975e-5,6.940350057998089e-8,0.004801198860837516,-3.753375575082618e-5,6.925545753494772e-8,0.004801308307002621,-3.7560557353341817e-5,6.931760143740602e-8,0.004801463061629263,-3.766739513003747e-5,6.957089748412672e-8,0.0048016973159992595,-3.7829085241195104e-5,6.995424232825527e-8,0.004802033897188718,-3.800393663211438e-5,7.036721161540528e-8,0.004802475381486049,-3.8139426649914707e-5,7.068384881196978e-8,0.004802997237534293,-3.8183940325160886e-5,7.078086051437349e-8,0.0048035477616877155,-3.810365748834886e-5,7.057799420498539e-8,0.004804059432364746,-3.789890582121566e-5,7.007704800926735e-8,0.004804471058177286,-3.76100617891968e-5,6.93758159734603e-8,0.004804751226949466,-3.730566920695092e-5,6.863938578566553e-8,0.0048049094711126545,-3.705654492532993e-5,6.803781398940207e-8,0.004804988697932718,-3.691017647857788e-5,6.768458911635844e-8,0.004805045208603211,-3.687881976068849e-5,6.760819207952647e-8,0.004805128912216125,-3.6943695478478026e-5,6.776250536534154e-8,0.004805272128763522,-3.706800766501402e-5,6.805842303113509e-8,0.0048054875443432725,-3.72102043926267e-5,6.839587172762585e-8,0.004805771578807736,-3.733305531184578e-5,6.868556225257375e-8,0.004806109373196501,-3.740819210339049e-5,6.885971585954908e-8,0.004806479267214914,-3.741763766075652e-5,6.887556737614801e-8,0.00480685624919262,-3.7353970688048305e-5,6.871568343569287e-8,0.00480721474503835,-3.722005965565962e-5,6.838732853486281e-8,0.004807531254878627,-3.70285788369557e-5,6.792132402469517e-8,0.004807787168840347,-3.680107359176237e-5,6.736978068548045e-8,0.0048079717908961535,-3.656606685754552e-5,6.680147748275388e-8,0.004808085124176199,-3.635572067784862e-5,6.629375291303479e-8,0.0048081395655390005,-3.6201003683608846e-5,6.59208353445968e-8,0.004808159619935799,-3.61259119702826e-5,6.573995300854134e-8,0.004808179052187587,-3.614182096799145e-5,6.577781399967254e-8,0.0048082354644977225,-3.624339663861216e-5,6.602088125342372e-8,0.004808363016906486,-3.640739698014146e-5,6.641263422122376e-8,0.004808584568140996,-3.659514206004428e-5,6.685967165663355e-8,0.004808904762436531,-3.6758854267688404e-5,6.724710168628325e-8,0.00480930579650223,-3.685155258136531e-5,6.746239580653564e-8,0.0048097478566896616,-3.683927126708737e-5,6.742470100953433e-8,0.004810176029910032,-3.6712847565078014e-5,6.711298772615927e-8,0.0048105340254307105,-3.649482817530326e-5,6.658239512536003e-8,0.004810781727205723,-3.62365842449442e-5,6.595705126594526e-8,0.004810909644980501,-3.6003671889103674e-5,6.539470778083783e-8,0.004810942478516832,-3.5853999525254e-5,6.503419712779448e-8,0.004810929054258762,-3.581891665158464e-5,6.495006857326439e-8,0.0048109239580987374,-3.589619723046781e-5,6.513597488805307e-8,0.0048109704482596355,-3.605632765339819e-5,6.552011162684835e-8,0.004811091479469972,-3.625616637154878e-5,6.599830095926331e-8,0.0048112894999106535,-3.645235261818129e-5,6.646628961790225e-8,0.004811551496979631,-3.661003899809157e-5,6.684062633294758e-8,0.004811855326073649,-3.6706519877171644e-5,6.706718834733222e-8,0.004812175008010524,-3.673147922115121e-5,6.71216166824625e-8,0.00481248442724685,-3.668578285980148e-5,6.70063528600365e-8,0.004812759857408077,-3.6580011791983614e-5,6.67471364140862e-8,0.004812982021847438,-3.643312892218514e-5,6.638984182107787e-8,0.004813138260380984,-3.627105788419161e-5,6.599705939990736e-8,0.004813224984539436,-3.612453739463318e-5,6.56428706687843e-8,0.004813250027706149,-3.6025539008764395e-5,6.540413556464342e-8,0.004813233901618618,-3.600194055235022e-5,6.53476083256435e-8,0.004813208641342787,-3.6070981482546236e-5,6.55141956879046e-8,0.004813213185891162,-3.623309956685937e-5,6.590422431888505e-8,0.0048132853329533815,-3.6468577247922494e-5,6.646953796652841e-8,0.00481345196089862,-3.6739232782648675e-5,6.711775543238068e-8,0.004813720524850067,-3.699585543676539e-5,6.773031548224511e-8,0.004814074915372328,-3.718990777229592e-5,6.819070851646075e-8,0.004814477519636433,-3.7286327454266165e-5,6.841524919716474e-8,0.004814877412507499,-3.727371265226798e-5,6.837744468682739e-8,0.004815222824200392,-3.71687674239285e-5,6.811846623591315e-8,0.004815474776181273,-3.70132472069625e-5,6.773954080785747e-8,0.0048156180606356,-3.686348225678969e-5,6.737652512252384e-8,0.004815665783668138,-3.677486127562191e-5,6.716247159200004e-8,0.004815655222405848,-3.678604759224073e-5,6.718971555136587e-8,0.004815636005506843,-3.690868613654817e-5,6.74853269118757e-8,0.004815655154643246,-3.712641741469069e-5,6.800902880734398e-8,0.0048157448657402905,-3.740272786418989e-5,6.86723392503097e-8,0.004815916982414414,-3.769330697538445e-5,6.936842915828944e-8,0.004816164398472773,-3.79575991566434e-5,6.999989097850887e-8,0.004816466732888395,-3.8166161444911164e-5,7.049630552378684e-8,0.004816796998892661,-3.830332545250297e-5,7.082047667647441e-8,0.004817127128752034,-3.8366574426466915e-5,7.096680517792435e-8,0.004817431716377734,-3.8364425072400815e-5,7.095614538559232e-8,0.00481769031494261,-3.831406952629976e-5,7.0830151666776e-8,0.004817889007363463,-3.823930287395324e-5,7.064632660863894e-8,0.004818021924002364,-3.81685964240486e-5,7.047337979987863e-8,0.004818092995005395,-3.8132677946559405e-5,7.038533637487357e-8,0.004818117609598462,-3.8160829347254704e-5,7.045252292139183e-8,0.0048181231757472446,-3.8275439457385075e-5,7.072838433001155e-8,0.004818147032808319,-3.848524220234855e-5,7.123323584537503e-8,0.004818230263552585,-3.877913888410908e-5,7.193954194116859e-8,0.004818407376247594,-3.9123929426344404e-5,7.276667979907158e-8,0.004818694517905241,-3.946919365675648e-5,7.359290131063591e-8,0.004819081226702352,-3.975987623674142e-5,7.428575222689352e-8,0.004819530473516512,-3.99528372131395e-5,7.474192447320143e-8,0.004819988207444505,-4.003071053802827e-5,7.492052207630327e-8,0.0048203989246250615,-4.000728896884301e-5,7.485582965376748e-8,0.004820721175466344,-3.99227597487728e-5,7.464556945092878e-8,0.004820937782280773,-3.9831445677784674e-5,7.442110541926777e-8,0.004821058434419171,-3.978679151255124e-5,7.431111753324506e-8,0.004821115078288102,-3.982808284365596e-5,7.44096350669423e-8,0.0048211522270188,-3.9972043873461636e-5,7.475600152324611e-8,0.004821215190839854,-4.021085655268812e-5,7.533039650683856e-8,0.004821339447086454,-4.051642323333889e-5,7.606436621672032e-8,0.004821543793180569,-4.084903826994292e-5,7.686186217830935e-8,0.004821828560137223,-4.11675330397259e-5,7.762370019061549e-8,0.00482217843219588,-4.143791773110746e-5,7.826830249781045e-8,0.004822568060222116,-4.163862375087511e-5,7.874420409142698e-8,0.004822968276370532,-4.176204785493435e-5,7.903364411314588e-8,0.0048233512962861805,-4.1813332547424874e-5,7.914952587908982e-8,0.004823694268337095,-4.180773689787612e-5,7.912902718095061e-8,0.004823981341733217,-4.176770959006623e-5,7.902653839294732e-8,0.004824204843306262,-4.172022434438517e-5,7.890725119874452e-8,0.004824366170721857,-4.169434217802275e-5,7.884127164436675e-8,0.0048244767088938545,-4.1718500655906905e-5,7.889702962949885e-8,0.004824558542278362,-4.1816828861910714e-5,7.9132317175072e-8,0.004824644046356498,-4.2004005130913916e-5,7.958186192139638e-8,0.004824772810595939,-4.227902970506275e-5,8.02424031086156e-8,0.004824984330163837,-4.261986981161869e-5,8.105999852427741e-8,0.0048253063789773926,-4.2982701249766916e-5,8.192845535537351e-8,0.004825742302472369,-4.330968240475467e-5,8.2708249557431e-8,0.004826263889668254,-4.354578668059347e-5,8.326714000557609e-8,0.004826816164327769,-4.365883275531775e-5,8.352838122738419e-8,0.004827334389224904,-4.3652515189787744e-5,8.350199407923697e-8,0.0048277656748831246,-4.356505406150206e-5,8.328128245698638e-8,0.00482808475136242,-4.3454640222978786e-5,8.300742298950006e-8,0.0048282979694060126,-4.337986978855226e-5,8.282198985286413e-8,0.004828436715004647,-4.3383781338829196e-5,8.28283556019412e-8,0.004828545452468338,-4.3485739353153795e-5,8.307227830943268e-8,0.004828669442671055,-4.368097256269977e-5,8.354112596095182e-8,0.004828845131978453,-4.394543747541324e-5,8.417594361299053e-8,0.004829094332003,-4.42434357404026e-5,8.489003053203357e-8,0.004829422222056958,-4.453594609792681e-5,8.558908046994333e-8,0.004829818689134246,-4.4788154520325726e-5,8.618928271603903e-8,0.004830262162433468,-4.497503014521456e-5,8.663067376891177e-8,0.004830724791376845,-4.508429236527066e-5,8.688419593273334e-8,0.004831177763389958,-4.5116784857431304e-5,8.695250414418422e-8,0.0048315958105310045,-4.50848066644472e-5,8.686584714086303e-8,0.004831960372320328,-4.50092207251216e-5,8.667501419792826e-8,0.004832261385448886,-4.4916181410082026e-5,8.644339426785272e-8,0.004832498085672877,-4.4834021165063305e-5,8.623945104183476e-8,0.004832679280731162,-4.479034989518507e-5,8.612971656792317e-8,0.004832823322580668,-4.480906858922817e-5,8.61715560370843e-8,0.004832957631610085,-4.490685000713927e-5,8.640463908636807e-8,0.0048331170643941285,-4.508874878499018e-5,8.684036295819687e-8,0.004833339822081472,-4.5343323574385394e-5,8.745021561454051e-8,0.004833659599911437,-4.5639123415037367e-5,8.815754137046817e-8,0.004834094074838598,-4.592604139982e-5,8.884105976880853e-8,0.004834633097564738,-4.6145321609871045e-5,8.935914049205118e-8,0.004835233759482804,-4.624855257649796e-5,8.959560230484134e-8,0.004835829415303181,-4.621862951064732e-5,8.951018080070509e-8,0.004836352230776127,-4.6080232054244594e-5,8.916366565204528e-8,0.0048367583349983355,-4.589150422661235e-5,8.869757625100208e-8,0.004837041591904654,-4.572106996194247e-5,8.827831621545146e-8,0.004837230223456968,-4.562385027524527e-5,8.803847379686291e-8,0.004837371762779652,-4.562714338453696e-5,8.804318221037112e-8,0.004837516153686477,-4.572936473719342e-5,8.828738354028514e-8,0.004837703559825233,-4.590705729913291e-5,8.871321255880796e-8,0.00483795842100459,-4.6124666861455577e-5,8.923395641208231e-8,0.0048382884248457615,-4.634354743735913e-5,8.975592732878355e-8,0.004838686449812278,-4.652885932931713e-5,9.019505444720963e-8,0.004839134059291325,-4.6654302346770156e-5,9.048817401084265e-8,0.00483960577414928,-4.670490119196287e-5,9.059963781515475e-8,0.004840073592346507,-4.6677962776577816e-5,9.052354945919353e-8,0.004840511260350432,-4.6582397345525144e-5,9.028205993460479e-8,0.004840897899231785,-4.643670396318439e-5,8.992042145949509e-8,0.004841220660300779,-4.626596989787898e-5,8.949965282921296e-8,0.004841476202205037,-4.6098371678003375e-5,8.908802385796573e-8,0.004841671077489782,-4.596168029442229e-5,8.875259106524241e-8,0.004841821307091204,-4.587997080031785e-5,8.855125453694367e-8,0.004841951292609372,-4.587045888723051e-5,8.852512147964674e-8,0.004842091964053706,-4.5940344193465115e-5,8.869088863412212e-8,0.004842277739297711,-4.6083631809650075e-5,8.903322182845005e-8,0.004842541493972926,-4.627838807084122e-5,8.949828371537751e-8,0.004842906839177331,-4.648600438823033e-5,8.999219477976895e-8,0.004843378264295116,-4.665522221668618e-5,9.039097681872455e-8,0.004843932381435793,-4.6733606371812626e-5,9.056834871587784e-8,0.004844516593310677,-4.6686017948423326e-5,9.044026966797496e-8,0.004845061297440305,-4.651301745333522e-5,9.000924058638993e-8,0.004845504427784852,-4.6256995746914114e-5,8.93789350952813e-8,0.004845816313409309,-4.598827316210438e-5,8.872033893206934e-8,0.004846009719910427,-4.5777184591241536e-5,8.820391758061302e-8,0.004846129972474116,-4.566860671556084e-5,8.793778061329034e-8,0.0048462338316596935,-4.567181248329228e-5,8.794324136066889e-8,0.004846370227429732,-4.576600567215227e-5,8.816863162886767e-8,0.0048465699861102345,-4.591338738919411e-5,8.852141023091782e-8,0.004846844129874208,-4.6071908146491065e-5,8.889930925992923e-8,0.004847187112262369,-4.6204138643279386e-5,8.921179902089594e-8,0.004847581703514996,-4.6282067896565305e-5,8.939150694429025e-8,0.004848003735402131,-4.6289076937789076e-5,8.939877769506586e-8,0.004848426256645651,-4.6220321509909585e-5,8.922246700657916e-8,0.004848823209408606,-4.608209856359733e-5,8.887836627853265e-8,0.004849172664527739,-4.58903562975773e-5,8.840557932192903e-8,0.0048494595475039315,-4.5668426291373705e-5,8.786099087737668e-8,0.0048496777143903665,-4.544400174802944e-5,8.731188333905859e-8,0.004849831083297237,-4.524549703219852e-5,8.682706510070045e-8,0.0048499335706496585,-4.5098191704872816e-5,8.646751496052212e-8,0.004850007839811998,-4.502058698290767e-5,8.627758023189437e-8,0.004850082971399407,-4.502123491055191e-5,8.627733894012528e-8,0.00485019108473835,-4.509627653317102e-5,8.645669590689583e-8,0.004850362866722029,-4.522799803925022e-5,8.677198648497969e-8,0.004850621906510939,-4.5384910987798636e-5,8.71463393443206e-8,0.004850977946640694,-4.552441540774088e-5,8.747633199424684e-8,0.00485142013660625,-4.5599608404899196e-5,8.764862963748815e-8,0.0048519131380055204,-4.557121093968653e-5,8.756886324253519e-8,0.004852400538216197,-4.5422915883702246e-5,8.719862480298039e-8,0.004852819081156075,-4.517383633579113e-5,8.658536065820687e-8,0.004853121273694221,-4.4878623615075926e-5,8.586240756352643e-8,0.004853295526580276,-4.461012521329985e-5,8.52067471895604e-8,0.004853370910340709,-4.443133874108983e-5,8.477085726904584e-8,0.004853402989489355,-4.437253239360528e-5,8.462723494908248e-8,0.004853450340338429,-4.442557395851914e-5,8.475489986913897e-8,0.004853555566747505,-4.4554520782041413e-5,8.506551757055743e-8,0.004853737798332979,-4.471246662007726e-5,8.54446544743408e-8,0.00485399486389547,-4.485554721718429e-5,8.57858896141624e-8,0.004854309864890948,-4.495075979662197e-5,8.600964247263456e-8,0.00485465803028982,-4.497849770452831e-5,8.6069040778254e-8,0.00485501203358417,-4.493206747983682e-5,8.594850455856457e-8,0.00485534568228858,-4.481608527441229e-5,8.565974574854902e-8,0.004855636618776108,-4.464461889212684e-5,8.523726941055656e-8,0.004855868536584048,-4.4439150233652795e-5,8.473347207406128e-8,0.0048560330722339125,-4.422617519806977e-5,8.421282174134603e-8,0.004856131296365982,-4.4034205116743515e-5,8.374453608584602e-8,0.004856174444895931,-4.389004599187381e-5,8.339349699528367e-8,0.004856183359155293,-4.381463425405478e-5,8.321012126246628e-8,0.004856186304500604,-4.381908244061987e-5,8.322079181766202e-8,0.0048562152009108475,-4.3901681750652377e-5,8.342065742125228e-8,0.004856300584346492,-4.4046572784289005e-5,8.37705159905011e-8,0.004856465867596215,-4.422466583704176e-5,8.419918887759595e-8,0.004856721671702306,-4.439714167069116e-5,8.46121777512187e-8,0.004857061176355107,-4.452169624559631e-5,8.490696041970339e-8,0.004857457829840346,-4.456149265628484e-5,8.499476400738042e-8,0.00485786732258919,-4.4495941699599566e-5,8.482662558070934e-8,0.0048582357611451545,-4.433064375541632e-5,8.44172762033907e-8,0.004858514335168011,-4.4101716857274364e-5,8.385533918607352e-8,0.004858676764439197,-4.386931833014717e-5,8.32873433067394e-8,0.004858731337204977,-4.369916734671689e-5,8.287271910808891e-8,0.004858719353578516,-4.363884359422422e-5,8.272626402178683e-8,0.004858699079100403,-4.370113971203409e-5,8.287790899006382e-8,0.004858723862983524,-4.3863152455982114e-5,8.32708541147057e-8,0.004858826040038608,-4.4079389942548624e-5,8.379377681762571e-8,0.00485901243298159,-4.429951477497208e-5,8.432416681478761e-8,0.004859269289883763,-4.448198863401187e-5,8.476146671893096e-8,0.004859570954995191,-4.460045524794661e-5,8.504236029963514e-8,0.004859887795941977,-4.464428204949593e-5,8.514179476144743e-8,0.004860191622124641,-4.461614115330714e-5,8.506688634502332e-8,0.004860458789785439,-4.452889224023546e-5,8.48492775788132e-8,0.004860671945597038,-4.440278682495274e-5,8.453839235720549e-8,0.004860821241729715,-4.426305156165498e-5,8.419563819915824e-8,0.004860905419245433,-4.4137473414217795e-5,8.388856225560573e-8,0.004860932724572903,-4.405349915154474e-5,8.368376120026044e-8,0.004860921196088654,-4.403452027360999e-5,8.363778704610134e-8,0.004860897562807879,-4.4095524083173727e-5,8.378654746993848e-8,0.004860894101884112,-4.4238943389541296e-5,8.413526183041853e-8,0.0048609433408634845,-4.4451997534014956e-5,8.465211854456047e-8,0.004861071294856948,-4.470688491827875e-5,8.526891053304732e-8,0.004861290736213975,-4.4964675805282034e-5,8.589067031036176e-8,0.004861596402411748,-4.518269904195639e-5,8.641375721967553e-8,0.00486196380325942,-4.5324110154403064e-5,8.674916232953769e-8,0.0048623525742310615,-4.536760086172835e-5,8.684603658726279e-8,0.004862714420798966,-4.531482706925229e-5,8.670954354944289e-8,0.004863004623796651,-4.519303097661249e-5,8.640693812132527e-8,0.004863194723425296,-4.505076964306804e-5,8.605688184505726e-8,0.0048632825102846704,-4.494612337857568e-5,8.58005774809639e-8,0.004863294732214557,-4.492967036023607e-5,8.576036145889535e-8,0.004863279646140609,-4.50281209417457e-5,8.600009804265731e-8,0.004863291238192513,-4.5235972657266385e-5,8.650521261792416e-8,0.004863371875000471,-4.5519265521149334e-5,8.719217023603693e-8,0.004863541092600532,-4.5828989880735264e-5,8.794132978880563e-8,0.0048637941431590335,-4.611699389480268e-5,8.863570335939151e-8,0.004864108348633099,-4.6347665140982225e-5,8.918925654220265e-8,0.00486445241548828,-4.650270904600831e-5,8.95582979767788e-8,0.0048647945683711405,-4.658026758675538e-5,8.973908538631549e-8,0.004865107760312099,-4.659122884457311e-5,8.975868058567857e-8,0.004865372216069882,-4.655509521210519e-5,8.966485595145175e-8,0.004865576369720018,-4.649651590121914e-5,8.95177115085765e-8,0.004865717179949249,-4.644257685804242e-5,8.938315205316097e-8,0.004865800395588709,-4.642041241650156e-5,8.932709842864613e-8,0.004865840829426269,-4.6454505120622764e-5,8.940887781848442e-8,0.004865862139653059,-4.656317873149144e-5,8.967262906616372e-8,0.00486589520436499,-4.675433988431925e-5,9.013692766243163e-8,0.00486597415698355,-4.7021367342236717e-5,9.07848659725663e-8,0.004866129742279287,-4.7340909048838094e-5,9.15588685419079e-8,0.004866380968437412,-4.7674714425056845e-5,9.236536298478788e-8,0.004866727661902241,-4.797676853483728e-5,9.309231162293983e-8,0.004867147324684734,-4.8204752728047944e-5,9.363717379329655e-8,0.004867598631309231,-4.833237436364809e-5,9.393686151571851e-8,0.00486803127888161,-4.835807099496604e-5,9.398874966956663e-8,0.004868399226752945,-4.8306738611208255e-5,9.385460419655338e-8,0.0048686730911499205,-4.8223736532853264e-5,9.364566598366033e-8,0.004868847969216985,-4.816304071077976e-5,9.349354754634237e-8,0.0048689445715649204,-4.817300077705271e-5,9.351546946352385e-8,0.004869003383995121,-4.8283613222312364e-5,9.378341924616291e-8,0.004869073380924081,-4.849890638879081e-5,9.43059380023238e-8,0.0048691985524858695,-4.8796843985408144e-5,9.50282614209952e-8,0.004869406558763143,-4.9136789945777165e-5,9.585077822881535e-8,0.0048697031730176215,-4.947169627205198e-5,9.665881714263925e-8,0.004870073718317038,-4.9760441298475204e-5,9.735263346838005e-8,0.004870489786100687,-4.9976304469416066e-5,9.786787764373727e-8,0.004870917867218918,-5.010990840288102e-5,9.818254906626896e-8,0.004871326805083185,-5.016747905294032e-5,9.831256717497081e-8,0.004871692531052498,-5.016661596207553e-5,9.830134495028733e-8,0.004872000142688164,-5.0131652452055496e-5,9.820844897666668e-8,0.004872244237261572,-5.008976155652556e-5,9.810014547881626e-8,0.004872428488982316,-5.0068019068499616e-5,9.804229692860984e-8,0.004872565118915182,-5.0091037618228904e-5,9.809461966944169e-8,0.0048726744092658725,-5.017854275436142e-5,9.830475483883204e-8,0.004872783856378547,-5.034234927557437e-5,9.870086948139556e-8,0.00487292606572329,-5.058265619676878e-5,9.928265588588883e-8,0.0048731343054660824,-5.0884445663438285e-5,1.0001269113882292e-7,0.004873435129492483,-5.1215919899950034e-5,1.0081284930929764e-7,0.0048738390660209,-5.153170034332811e-5,1.015723136253397e-7,0.004874332805219763,-5.178266204412348e-5,1.0217165527867006e-7,0.004874877889632444,-5.1930947916088274e-5,1.0251939608479708e-7,0.004875419222669628,-5.196437324983978e-5,1.0258697726965176e-7,0.004875901546822159,-5.190279042143044e-5,1.0242405238386324e-7,0.004876286929160504,-5.179247995187442e-5,1.0214451691172397e-7,0.004876565554442809,-5.1691121210262656e-5,1.0188954108256096e-7,0.004876756238178176,-5.165032541885692e-5,1.0178476106510073e-7,0.004876898311797196,-5.170234825273362e-5,1.0190790776405611e-7,0.004877039291090606,-5.185415619525043e-5,1.0227463542533915e-7,0.004877222603926023,-5.20886997024062e-5,1.0284205932149231e-7,0.004877478233490123,-5.237148471881915e-5,1.0352515418660084e-7,0.004877817707882309,-5.2659998699574115e-5,1.0421992098956346e-7,0.004878233764547773,-5.291357147653802e-5,1.0482740644614637e-7,0.004878704103850562,-5.310151400306657e-5,1.0527339067231532e-7,0.0048791978095219886,-5.3207947753445196e-5,1.0551996632875121e-7,0.004879682486508378,-5.323275948828798e-5,1.055676880907866e-7,0.0048801303140343175,-5.318929968967715e-5,1.0544982140066945e-7,0.004880521970866183,-5.3100190207577814e-5,1.0522202640813102e-7,0.004880848294653186,-5.299267897057388e-5,1.0495098947741473e-7,0.0048811102117961675,-5.289457264711433e-5,1.0470451475918726e-7,0.004881317747189281,-5.2831136722353006e-5,1.045440020638691e-7,0.004881488756100408,-5.282274765893747e-5,1.0451875219165502e-7,0.004881647595748994,-5.2882791831743e-5,1.0466084584560046e-7,0.004881823499265498,-5.301535663747745e-5,1.0497951455693293e-7,0.004882047968987757,-5.321257874700818e-5,1.0545473459947656e-7,0.004882350207115018,-5.34522364381064e-5,1.0603152097503244e-7,0.004882749931583773,-5.3697319596594616e-5,1.0661911602920183e-7,0.004883248411975124,-5.390029444311228e-5,1.0710159048430002e-7,0.004883821223283848,-5.40142565780382e-5,1.0736509452548331e-7,0.004884418535029374,-5.400964585550486e-5,1.07338516263783e-7,0.004884977331862179,-5.388945231346987e-5,1.0703038492932809e-7,0.004885442982784979,-5.369291520334631e-5,1.0653767571805211e-7,0.0048857896031786405,-5.348285896525935e-5,1.060146273029446e-7,0.004886027899428079,-5.33225701704739e-5,1.0561598542362421e-7,0.004886197488183362,-5.3254761974328e-5,1.0544546399226637e-7,0.004886350220054461,-5.329186339414478e-5,1.0553216327134056e-7,0.00488653376420074,-5.341832436145469e-5,1.058366269418165e-7,0.004886780973520583,-5.3599972431194304e-5,1.0627419538425782e-7,0.004887105836022719,-5.379505921217329e-5,1.0674231474866518e-7,0.00488750437159898,-5.3963749688183614e-5,1.071437647657893e-7,0.004887958428542934,-5.4074868096297026e-5,1.074029666188478e-7,0.004888440866556042,-5.410987220354813e-5,1.0747544257958971e-7,0.004888921197063378,-5.406429862465683e-5,1.0735113586693954e-7,0.004889370931079509,-5.3946902121682926e-5,1.0705217492870693e-7,0.004889767913025726,-5.377692855867965e-5,1.0662613496775146e-7,0.004890099148351,-5.3580229669963764e-5,1.0613649899040003e-7,0.0048903619623596834,-5.3384985707783635e-5,1.0565218481282615e-7,0.004890563646224889,-5.321774155887791e-5,1.0523787065252472e-7,0.004890720050330306,-5.310023848256073e-5,1.0494629332969267e-7,0.00489085365033552,-5.304708763981897e-5,1.0481260896297154e-7,0.004890991351657461,-5.306401912048959e-5,1.0485014474108545e-7]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json deleted file mode 100644 index 9767b1b..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_3.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":3000,"numberOfSamples":1000,"samples":[-0.0016674126654346861,-5.729007527752374e-7,-1.4186514962201376e-8,-0.0016673064653587321,-6.734015165127343e-7,-1.4270276706700349e-8,-0.0016671184978181936,-7.942288639572809e-7,-1.4371055120518062e-8,-0.0016668581653082658,-8.937549802808163e-7,-1.4454094104781238e-8,-0.0016665462863460693,-9.416288807763305e-7,-1.4494058993362982e-8,-0.0016662092022260732,-9.201664606449159e-7,-1.4476216298494372e-8,-0.0016658745541862263,-8.237755484396502e-7,-1.4395945891238539e-8,-0.0016655683268689287,-6.578186550518726e-7,-1.4257765362438796e-8,-0.0016653124526036561,-4.3741842925891825e-7,-1.4074304544820363e-8,-0.0016651224530400707,-1.8607276082775895e-7,-1.3865132894139859e-8,-0.0016650049642489826,6.643303169026634e-8,-1.3655018765663274e-8,-0.0016649554928538104,2.8739437967418395e-7,-1.347113935991257e-8,-0.0016649572160637774,4.4604795424859426e-7,-1.3339056817593825e-8,-0.0016649817855313575,5.194876808583452e-7,-1.3277813795917761e-8,-0.0016649928181043465,4.985157505581373e-7,-1.329507262967021e-8,-0.00166495207648607,3.9179414860133283e-7,-1.3383654246342673e-8,-0.0016648274069321705,2.26664827416035e-7,-1.352084347660865e-8,-0.001664600739494372,4.5708357821865315e-8,-1.367124421905444e-8,-0.001664274219706894,-1.0088239670451744e-7,-1.3793127784445051e-8,-0.0016638726869829803,-1.6616023108150796e-7,-1.3847473701249546e-8,-0.0016634410124484337,-1.1869904209770958e-7,-1.3808176255662588e-8,-0.0016630354517974334,4.659577780072841e-8,-1.3671009811639623e-8,-0.001662709627560605,3.030262655914423e-7,-1.3458136463059741e-8,-0.0016624982880314673,5.958730436677693e-7,-1.3214963229037875e-8,-0.001662404794976831,8.568537842964569e-7,-1.2998163907749735e-8,-0.0016623988702162175,1.0254972177202318e-6,-1.2857973826241794e-8,-0.0016624271346917532,1.0685455003698803e-6,-1.2822084766277138e-8,-0.0016624319248438782,9.883600460942418e-7,-1.2888614390257493e-8,-0.001662369242835807,8.174787260993229e-7,-1.3030565315055226e-8,-0.0016622183938909184,6.041843871353809e-7,-1.3207794337616674e-8,-0.0016619818565370786,3.9717316279278375e-7,-1.3379782718210806e-8,-0.0016616789185444716,2.3502260822879676e-7,-1.3514435597222689e-8,-0.0016613377123989804,1.417265131744283e-7,-1.3591822041815075e-8,-0.0016609886089808544,1.2662367606576446e-7,-1.360423147824086e-8,-0.0016606598282278315,1.863922842656112e-7,-1.3554490273298172e-8,-0.0016603748199426104,3.0744517886406376e-7,-1.3453938412913645e-8,-0.0016601505255394024,4.680421085231016e-7,-1.3320649411749458e-8,-0.0016599957713533597,6.402384067973255e-7,-1.3177803860265977e-8,-0.0016599094977454972,7.922656339357963e-7,-1.3051723165875262e-8,-0.0016598791098382528,8.920717595398815e-7,-1.296895475612751e-8,-0.0016598798337515695,9.124839151887528e-7,-1.2952012505708826e-8,-0.001659876379622952,8.376861160842476e-7,-1.3014014454721298e-8,-0.0016598280484381447,6.695105801256583e-7,-1.3153456420237919e-8,-0.0016596973256014155,4.309782162426044e-7,-1.3351256087288848e-8,-0.001659460185844518,1.644717783767708e-7,-1.3572258355341262e-8,-0.0016591147270322442,-7.656124715275952e-8,-1.3772130406953462e-8,-0.0016586845140589572,-2.408327142852044e-7,-1.3908356700286018e-8,-0.0016582146152118225,-2.934361433791715e-7,-1.3952042824758485e-8,-0.0016577609941446497,-2.2641155822799227e-7,-1.3896646268225657e-8,-0.0016573762399432718,-6.21980795145008e-8,-1.3760786009222337e-8,-0.0016570956693766155,1.5125835864904947e-7,-1.3584155440668849e-8,-0.0016569277304044742,3.526938844470182e-7,-1.3417439166449944e-8,-0.0016568517179810498,4.838995413033776e-7,-1.3308801583491872e-8,-0.0016568239567060939,5.055051370474298e-7,-1.329085416886814e-8,-0.0016567907846579653,4.069873023778711e-7,-1.3372361772156796e-8,-0.0016567038867919353,2.0748592272561992e-7,-1.3537525963856996e-8,-0.001656532487673912,-5.231661404744325e-8,-1.375267653077842e-8,-0.0016562685745488837,-3.2332365832738283e-7,-1.3977143471321514e-8,-0.0016559247754694372,-5.607837026808751e-7,-1.4173848477561865e-8,-0.0016555275418913935,-7.327632792039998e-7,-1.4316343411791168e-8,-0.0016551092006448183,-8.233258722118555e-7,-1.4391445802169112e-8,-0.0016547013993568505,-8.316848376668471e-7,-1.439852456672699e-8,-0.0016543308264849162,-7.693391900307951e-7,-1.4347111821174578e-8,-0.0016540168884855639,-6.568154472154755e-7,-1.4254194224863743e-8,-0.00165377050241833,-5.208100635030763e-7,-1.4141844859881727e-8,-0.001653593196269087,-3.917048152325665e-7,-1.4035172614624135e-8,-0.001653476129350162,-3.0088888763530243e-7,-1.3960118899539777e-8,-0.0016533992421155022,-2.7714172882948965e-7,-1.3940479436687606e-8,-0.0016533313967630901,-3.4151069511884616e-7,-1.3993675666328718e-8,-0.001653232946576946,-5.008677652271779e-7,-1.4125420729844042e-8,-0.001653062183142646,-7.418000865678651e-7,-1.4324648124704472e-8,-0.0016527858361718897,-1.0281008249946432e-6,-1.456142157572885e-8,-0.0016523911376223348,-1.305464686483764e-6,-1.4790826634502255e-8,-0.0016518942603108112,-1.5146795210217696e-6,-1.4963914427081036e-8,-0.001651339688429203,-1.609920243457309e-6,-1.5042853245080335e-8,-0.0016507887609035258,-1.5746267527137686e-6,-1.501402985970417e-8,-0.0016503014049699613,-1.4275884845194972e-6,-1.4893009020259092e-8,-0.0016499186673924447,-1.2167625516751627e-6,-1.4719368976416159e-8,-0.0016496525262988243,-1.0042695210536724e-6,-1.4544312694847968e-8,-0.0016494852722868205,-8.488903215522008e-7,-1.4416272286595473e-8,-0.0016493768933366411,-7.916520763817829e-7,-1.4369068693422452e-8,-0.0016492770441696662,-8.477319335831267e-7,-1.441525088113211e-8,-0.0016491379089976894,-1.005586142802875e-6,-1.454535921366001e-8,-0.0016489247906258263,-1.2324077723442385e-6,-1.4732398295614608e-8,-0.0016486222435663186,-1.483745124523919e-6,-1.4939753931208416e-8,-0.0016482349077829455,-1.714387062746813e-6,-1.5130169934377415e-8,-0.0016477837047942081,-1.8876251196414704e-6,-1.5273388453025773e-8,-0.0016472992687706423,-1.9809318567924716e-6,-1.53508288088995e-8,-0.0016468148667739665,-1.987610693939075e-6,-1.5356941194346824e-8,-0.0016463605427636564,-1.915263460295526e-6,-1.529794271457019e-8,-0.0016459592556230336,-1.7824940981911972e-6,-1.5189110139549575e-8,-0.0016456248820582223,-1.6151699815473968e-6,-1.5051713360546717e-8,-0.0016453614347904178,-1.4430148462818047e-6,-1.4910218742385646e-8,-0.0016451628120618224,-1.2966201405178637e-6,-1.4789829372760213e-8,-0.0016450127057533186,-1.2044728826030512e-6,-1.4714032583746818e-8,-0.0016448847709624051,-1.1893868953393184e-6,-1.4701653351213367e-8,-0.0016447437874436506,-1.2638103881750775e-6,-1.4762980827432679e-8,-0.0016445491773054968,-1.4241708565546202e-6,-1.48951005064794e-8,-0.0016442623193067107,-1.645902905672155e-6,-1.5077791633897704e-8,-0.0016438578535539828,-1.8825890625995552e-6,-1.5272828105373147e-8,-0.0016433361724119703,-2.073293524915233e-6,-1.5430051194420875e-8,-0.0016427306855190664,-2.1595591992381907e-6,-1.5501400836018825e-8,-0.0016421028587470339,-2.107131410238427e-6,-1.545878784662949e-8,-0.0016415236596336047,-1.921503495197351e-6,-1.5306805835881395e-8,-0.0016410491716874508,-1.6475995048951014e-6,-1.508237666232406e-8,-0.0016407026930217476,-1.3532595827599134e-6,-1.4841150585489634e-8,-0.0016404710798181709,-1.1058220927750292e-6,-1.4638324030823384e-8,-0.0016403140434198668,-9.529880693486804e-7,-1.4513000663883932e-8,-0.0016401794241349037,-9.138189075949228e-7,-1.4480834585139251e-8,-0.001640017698453548,-9.79444485492997e-7,-1.4534599598191043e-8,-0.0016397921504842823,-1.1199629554508742e-6,-1.46498259445195e-8,-0.001639483962540219,-1.2938873374757163e-6,-1.4792536911725107e-8,-0.0016390929025693608,-1.4576102121358978e-6,-1.492701055511908e-8,-0.0016386346780947172,-1.5734220969873702e-6,-1.5022352898574618e-8,-0.0016381360741017184,-1.615194314249089e-6,-1.50571474431728e-8,-0.0016376290513289884,-1.5712506992188948e-6,-1.502179647791281e-8,-0.0016371449438908516,-1.4444928408342774e-6,-1.4918620999811586e-8,-0.0016367096648583616,-1.25031555175269e-6,-1.4760165902237422e-8,-0.0016363404739891797,-1.0131188796195411e-6,-1.4566365366279228e-8,-0.0016360443826047542,-7.623240043753878e-7,-1.4361298196704363e-8,-0.0016358178081207191,-5.285826195157557e-7,-1.4170084868955413e-8,-0.0016356469788772767,-3.4036970890659786e-7,-1.4016082203265821e-8,-0.001635508814606122,-2.207663722595964e-7,-1.3918227118982464e-8,-0.0016353723164385856,-1.840892669518823e-7,-1.3888261221685396e-8,-0.0016352009622329746,-2.3204470491520787e-7,-1.3927578205263703e-8,-0.0016349571713373055,-3.4963943026521634e-7,-1.4023883873503605e-8,-0.0016346099310555375,-5.023932688054426e-7,-1.4148931817790818e-8,-0.0016341454885156152,-6.3792299560969e-7,-1.4259849140121573e-8,-0.0016335782650784292,-6.955174267981529e-7,-1.4307009536395608e-8,-0.0016329555381133835,-6.248455078933967e-7,-1.4249353069369657e-8,-0.001632348566823429,-4.0811994916454653e-7,-1.4072462495238987e-8,-0.0016318292392897165,-7.307325909948915e-8,-1.3799065103672127e-8,-0.0016314426223732346,3.1411804635436726e-7,-1.348317422928833e-8,-0.0016311911484804568,6.740899862647185e-7,-1.3189486706427881e-8,-0.0016310385568320672,9.431757478148973e-7,-1.2969887537649966e-8,-0.0016309281956906096,1.0909595365989285e-6,-1.284917620325891e-8,-0.0016308035869936743,1.1218851358131656e-6,-1.2823744428951683e-8,-0.001630622539391083,1.0659851233981184e-6,-1.286910999649688e-8,-0.0016303628898681499,9.662126791094569e-7,-1.2950244535657924e-8,-0.0016300220532569065,8.673019924964457e-7,-1.303067628890683e-8,-0.0016296132995635643,8.078877149326865e-7,-1.3078931636879651e-8,-0.001629160810966706,8.157006448712503e-7,-1.3072446478192921e-8,-0.0016286945140845575,9.051596921306019e-7,-1.2999506114425888e-8,-0.001628245126395128,1.0769022975441644e-6,-1.285960415768863e-8,-0.0016278397306271277,1.3189544201936767e-6,-1.266248230864526e-8,-0.001627498165347806,1.6092434451098838e-6,-1.2426094284497363e-8,-0.0016272305284777825,1.919140067868813e-6,-1.2173739988352222e-8,-0.0016270360259148394,2.2175661941671596e-6,-1.1930728972988056e-8,-0.0016269031154630333,2.475096567993343e-6,-1.1721030329836182e-8,-0.0016268106690123906,2.6677037698851066e-6,-1.1564201830643506e-8,-0.0016267299509751117,2.7800877693262435e-6,-1.1472661493037969e-8,-0.0016266273869119789,2.808609891480967e-6,-1.1449301618478332e-8,-0.0016264683188791577,2.7638226285538478e-6,-1.148545475645509e-8,-0.001626222281076474,2.6722456015579204e-6,-1.1559486532781036e-8,-0.0016258702666007566,2.576093825543154e-6,-1.1637054006801947e-8,-0.001625413368763386,2.528652681956703e-6,-1.1674892793466553e-8,-0.0016248800163113045,2.5829769218688514e-6,-1.163000825805575e-8,-0.0016243264182511817,2.7739410660516134e-6,-1.147422855629942e-8,-0.001623824448257784,3.0994362029174313e-6,-1.1209399713251122e-8,-0.0016234371005962335,3.5125193005639037e-6,-1.0873674286989874e-8,-0.0016231924460283597,3.934280626806754e-6,-1.0531046713794774e-8,-0.0016230722116879442,4.2839261521980505e-6,-1.0247004462157263e-8,-0.0016230223920017024,4.509022315061528e-6,-1.0064052989792204e-8,-0.001622977701628644,4.599308318664541e-6,-9.990503166746648e-9,-0.0016228844735368534,4.580979504172208e-6,-1.0005062897292258e-8,-0.0016227124043607017,4.500425340947215e-6,-1.007001881606373e-8,-0.0016224552660553113,4.4079367639713336E-06,-1.0144494972609784e-8,-0.001622125516269599,4.346659224530802e-6,-1.0193467505461069e-8,-0.001621747326018003,4.347159211571133e-6,-1.0192193851439426e-8,-0.001621350394160166,4.425844840376646e-6,-1.0127472727933714e-8,-0.0016209651093993971,4.585398795260131e-6,-9.99724721593909e-9,-0.001620618755614523,4.816205832030953e-6,-9.809405621898151e-9,-0.0016203324293711152,5.0984795936064065e-6,-9.580037457445881e-9,-0.0016201185778446112,5.4050620808012625e-6,-9.331168050521922e-9,-0.0016199792751218015,5.7049341968223675e-6,-9.087925536625024e-9,-0.0016199055449921847,5.967355112173079e-6,-8.875191668941198e-9,-0.0016198780222882233,6.166231880713312e-6,-8.714053321567563e-9,-0.0016198689897785872,6.284171358720325e-6,-8.618507598772804e-9,-0.0016198456428020592,6.315766071306402e-6,-8.59280112903386e-9,-0.001619774385405621,6.26973000154361e-6,-8.629727496350617e-9,-0.0016196259296935819,6.169525357590731e-6,-8.710169915500509e-9,-0.0016193810015156772,6.052090182629365e-6,-8.804188184311565e-9,-0.0016190363271137104,5.963922429773775e-6,-8.87422587160706e-9,-0.0016186098081281857,5.953407381087274e-6,-8.88131796854117e-9,-0.0016181424573248472,6.058817784323751e-6,-8.794748910421731e-9,-0.0016176935536342239,6.293589642068541e-6,-8.60386918296675e-9,-0.001617326219104022,6.634329004002173e-6,-8.327694536227654e-9,-0.0016170853930605306,7.020289243504353e-6,-8.015286175478002e-9,-0.0016169778930223832,7.370415677596483e-6,-7.732028934152944e-9,-0.0016169675000937544,7.6131522800298654E-06,-7.535643904942126e-9,-0.0016169901136538418,7.713155380487486e-6,-7.454642010804234e-9,-0.0016169800837689205,7.679978347262525e-6,-7.481256003272846e-9,-0.0016168922572558102,7.556948303108508e-6,-7.580374851378752e-9,-0.0016167104555515727,7.400752728903742e-6,-7.706059646917471e-9,-0.0016164437683271215,7.26360821746386e-6,-7.816027752541982e-9,-0.0016161173530747812,7.183346466944154e-6,-7.879724076888564e-9,-0.0016157633104902577,7.180632707092512e-6,-7.880570755501255e-9,-0.0016154140207041772,7.260286490250837e-6,-7.814851788477083e-9,-0.001615098001463881,7.414069548772224e-6,-7.689396067402687e-9,-0.001614837378113596,7.623584166153096e-6,-7.519187049980965e-9,-0.0016146461104334338,7.863038966555796e-6,-7.325110558075486e-9,-0.0016145285922477045,8.102151822196889e-6,-7.13161729702838e-9,-0.0016144786655525626,8.30954750461279e-6,-6.963995681741373e-9,-0.0016144794389958994,8.456851025280304e-6,-6.8450772368244266e-9,-0.0016145044863076245,8.523247037034214e-6,-6.791555454796449e-9,-0.0016145208238440725,8.499790759989043e-6,-6.810504300559879e-9,-0.0016144936330299336,8.392510891781708e-6,-6.896885929710203e-9,-0.001614392228170857,8.223343280763281e-6,-7.032834909617165e-9,-0.0016141963521061268,8.028183732838383e-6,-7.189288356946133e-9,-0.0016139016436967962,7.851860839942969e-6,-7.330101133146092e-9,-0.0016135231106711163,7.740313336524296e-6,-7.4183830864822594e-9,-0.0016130954016894184,7.730606125699386e-6,-7.424519615650904e-9,-0.0016126685428214326,7.840105042654435e-6,-7.334806831697677e-9,-0.0016122981087462733,8.057474208610399e-6,-7.1585873366644e-9,-0.0016120303080747725,8.339676729142519e-6,-6.930579850289531e-9,-0.001611885615787256,8.619402313112867e-6,-6.704899178695777e-9,-0.0016118481928508355,8.824139607217275e-6,-6.539785116730204e-9,-0.001611868604140801,8.90107812285037e-6,-6.477642765675682e-9,-0.001611881154272387,8.835912981377337e-6,-6.529915716142489e-9,-0.0016118277460059921,8.655388821984905e-6,-6.674986610903632e-9,-0.001611675919713035,8.41338736769802e-6,-6.869352972909047e-9,-0.0016114237381993468,8.169993921702883e-6,-7.06452679210035e-9,-0.001611093177231819,7.974354515474472e-6,-7.220908293079042e-9,-0.0016107187721478148,7.856385780125358e-6,-7.3144902295771e-9,-0.0016103373933631776,7.826230747315016e-6,-7.33726541883732e-9,-0.0016099815773490676,7.877830737849756e-6,-7.294288237410739e-9,-0.0016096761674665666,7.993507370107692e-6,-7.199928950656389e-9,-0.0016094369744081014,8.147984768505116e-6,-7.074608444117655e-9,-0.0016092702451640983,8.311598200694667e-6,-6.942216930039938e-9,-0.00160917228355665,8.453152537768642e-6,-6.827830668858108e-9,-0.001609129179254943,8.543077992903146e-6,-6.755189047281374e-9,-0.0016091171262881026,8.557333011262786e-6,-6.743558851885236e-9,-0.0016091041391435737,8.481979668330493e-6,-6.804049103358642e-9,-0.0016090539129368906,8.317618601666572e-6,-6.9360391917084e-9,-0.0016089320065604345,8.082194724983374e-6,-7.1249350615802805e-9,-0.0016087135318696238,7.810443188597418e-6,-7.342654995567478e-9,-0.0016083904469439763,7.548814847622212e-6,-7.551773316743061e-9,-0.0016079759933311404,7.346151109873746e-6,-7.71307892483668e-9,-0.0016075042761180575,7.242056143792723e-6,-7.794939036152872e-9,-0.00160702430711951,7.255973870729432e-6,-7.782022387653911e-9,-0.0016065893832426634,7.380066935880531e-6,-7.680904798184895e-9,-0.0016062439692449664,7.578337494266571e-6,-7.520654677956422e-9,-0.0016060111996290365,7.793284040925081e-6,-7.347429731587253e-9,-0.001605884722251656,7.959699219668078e-6,-7.2134347447406345e-9,-0.0016058284903456366,8.02276170190471e-6,-7.162490523129645e-9,-0.001605786300256652,7.954794950983538e-6,-7.216659725347376e-9,-0.0016056989183379042,7.763856680531235e-6,-7.3693711382787e-9,-0.0016055223349501092,7.489910937153623e-6,-7.5884774454684e-9,-0.0016052394922760655,7.190282869697641e-6,-7.827929734487749e-9,-0.0016048613732839356,6.9214213509586415e-6,-8.042440056461898e-9,-0.0016044191014809085,6.724717813606781e-6,-8.19887721405118e-9,-0.0016039523942876091,6.620315668122966e-6,-8.281210552001504e-9,-0.0016034994404368291,6.608103489245576e-6,-8.289661775609236e-9,-0.00160309058100955,6.672612775449543e-6,-8.236730302719379e-9,-0.0016027456251598608,6.788717605477168e-6,-8.142605180973005e-9,-0.0016024734564696638,6.92643298585074e-6,-8.031328805630021e-9,-0.001602272562723833,7.054461000471735e-6,-7.927975303945096e-9,-0.0016021316395473646,7.1429733909865235e-6,-7.85643420942448e-9,-0.001602030096147785,7.166416618010949e-6,-7.837159326460504e-9,-0.0016019389325304322,7.106967943498292e-6,-7.884384590805072e-9,-0.001601822909317285,6.958748005321464e-6,-8.002733282683978e-9,-0.001601645025670833,6.732028706082511e-6,-8.183846196126166e-9,-0.0016013737843991493,6.455595568760507e-6,-8.404514185145453e-9,-0.0016009923060795966,6.174736476004758e-6,-8.628343547216521e-9,-0.0016005063926833,5.943025935706647e-6,-8.81240660038963e-9,-0.001599947436018963,5.80863970378304e-6,-8.918249717289788e-9,-0.0015993671346443959,5.799343297164342e-6,-8.923895711975885e-9,-0.001598824450917896,5.912206177088279e-6,-8.831981049727163e-9,-0.0015983691261643967,6.112691262219383e-6,-8.670353040535608e-9,-0.001598027750726865,6.34370842368762e-6,-8.484735141405814e-9,-0.001597796970333321,6.541210365541908e-6,-8.32624668865039e-9,-0.0015976453400901444,6.6511270032490696e-6,-8.237927113772566e-9,-0.0015975225826418882,6.642865882163979e-6,-8.244027233433758e-9,-0.0015973733172837778,6.5160674645092064e-6,-8.344671256899067e-9,-0.0015971514460371861,6.299134854850162e-6,-8.517063826659138e-9,-0.0015968312197721644,6.040236787256278e-6,-8.722695998097968e-9,-0.0015964119337554,5.793741677183589e-6,-8.918192024461737e-9,-0.0015959153524303371,5.606512708157547e-6,-9.066246268690955e-9,-0.0015953776009036073,5.508240931702783e-6,-9.143302312759663e-9,-0.0015948390145066778,5.5079279870896205e-6,-9.142302190616902e-9,-0.0015943353730508711,5.595937570596819e-6,-9.07100224242127E-09,-0.0015938924112206762,5.749295724445448e-6,-8.947734194601513e-9,-0.0015935237022038366,5.937745603497693e-6,-8.796600268425784e-9,-0.0015932308952599915,6.128923308494835e-6,-8.643381449495809e-9,-0.0015930050349990598,6.292138592490837e-6,-8.512542405787741e-9,-0.0015928280496299403,6.401112560124816e-6,-8.425039499555748e-9,-0.001592674118163697,6.436402325511549e-6,-8.396358552439093e-9,-0.001592511242825915,6.388162226916735e-6,-8.434284847973138e-9,-0.0015923038548076277,6.259479463662382e-6,-8.536238644079333e-9,-0.0015920175360308354,6.069704190545227e-6,-8.686647143544019e-9,-0.0015916265581974022,5.855945053772369e-6,-8.855809836079169e-9,-0.0015911234432686942,5.66982094337028e-6,-9.002557749844637e-9,-0.0015905271902137126,5.566980643098267e-6,-9.082660120678599e-9,-0.0015898846649755427,5.5901058549402035e-6,-9.062364074658102e-9,-0.0015892607401442954,5.751420421663427e-6,-8.932240034166934e-9,-0.0015887185141690312,6.0241142294602755e-6,-8.713870498328418e-9,-0.0015882979764191441,6.3490168297115175e-6,-8.454426383873467e-9,-0.0015880035039804617,6.654182728757788e-6,-8.211064945180594e-9,-0.0015878052699886624,6.877775058584288e-6,-8.032786882775957e-9,-0.0015876517590710897,6.984489838970192e-6,-7.947450754328946e-9,-0.0015874863779336544,6.971221701182685e-6,-7.957325293941682e-9,-0.0015872619917445506,6.863185748489404e-6,-8.042215733171648e-9,-0.0015869502414554443,6.704200258300083e-6,-8.167230467721707e-9,-0.0015865450265327885,6.544861833301743e-6,-8.292209810873044e-9,-0.001586060881771174,6.431419708027262e-6,-8.380562643969391e-9,-0.0015855275390838218,6.397223103243651e-6,-8.4060105625722e-9,-0.001584982293378186,6.457920516330214e-6,-8.356321717507075e-9,-0.0015844620349776742,6.61081898948137e-6,-8.233749425801078e-9,-0.0015839966677754043,6.837813403661317e-6,-8.052680242552925e-9,-0.0015836049744388627,7.110512974486875e-6,-7.83558877254055e-9,-0.00158329313272495,7.39599782801762e-6,-7.60852007937778e-9,-0.0015830553572955281,7.661943418484884e-6,-7.397063210929995e-9,-0.0015828757453601038,7.88048537908479e-6,-7.223288825216026e-9,-0.0015827305073950087,8.030921094971425e-6,-7.103576255489422e-9,-0.0015825902239223386,8.10175707948008e-6,-7.046953362750228e-9,-0.0015824222470464458,8.09261347207407e-6,-7.0535751904136625e-9,-0.0015821938020142208,8.016239439311893e-6,-7.1131587433406575e-9,-0.001581876678930113,7.90023529461386e-6,-7.203688583790658e-9,-0.0015814541506088944,7.786937005316729e-6,-7.291589958387156e-9,-0.001580929437716428,7.72886735500687e-6,-7.33539011103742e-9,-0.001580332627237802,7.777305469592599e-6,-7.294769075619663e-9,-0.0015797203731629178,7.964409090283794e-6,-7.144630568893987e-9,-0.0015791630814620142,8.285391603077017e-6,-6.889058321940481e-9,-0.001578720878001717,8.692298812053108e-6,-6.566101724486824e-9,-0.001578419502984907,9.10747486170557e-6,-6.2370916464480965e-9,-0.0015782405062512823,9.452091527792786e-6,-5.9641611304561455e-9,-0.0015781312909732138,9.674079549613374e-6,-5.7882606428250385e-9,-0.001578027360075597,9.761402781761969e-6,-5.718703551331627e-9,-0.0015778737449317608,9.738155742011253e-6,-5.736256424581671e-9,-0.0015776373992268053,9.650582774239132e-6,-5.804222309092312e-9,-0.0015773098917586672,9.551555633876995e-6,-5.88077278945436e-9,-0.0015769037319662415,9.488450878456881e-6,-5.928572703455147e-9,-0.001576445875891479,9.49569390768316e-6,-5.920653078048749e-9,-0.001575970674530697,9.591327497139855e-6,-5.84304192231517e-9,-0.0015755133171369835,9.77658865659438e-6,-5.694997471322311e-9,-0.0015751042615903047,1.003778163139329e-5,-5.487458624638412e-9,-0.001574765041689377,1.0349895109118027e-5,-5.240176643150512e-9,-0.0015745057554236149,1.0681318357532525e-5,-4.978030419643896e-9,-0.001574324361526077,1.0998934195309128e-5,-4.727059345412328e-9,-0.0015742076584801335,1.1272847997949395e-5,-4.510760254880358e-9,-0.0015741334933916324,1.148015300643822e-5,-4.347106597166391e-9,-0.0015740736145208995,1.1607546540740536e-5,-4.2464524410951475e-9,-0.0015739967905234456,1.165297766004052e-5,-4.210215818202505e-9,-0.0015738721019847755,1.1626573124438477e-5,-4.230176567081147e-9,-0.0015736725816667494,1.1550994953670337e-5,-4.288272760115865e-9,-0.0015733796828682138,1.1460984868635478e-5,-4.357060355334619e-9,-0.0015729888863822469,1.1400977627530216e-5,-4.401668546947189e-9,-0.001572515654131937,1.1418948321355508e-5,-4.38465144129614e-9,-0.0015719991378984194,1.155499016771094e-5,-4.27489553861985e-9,-0.0015714991590845522,1.1825387317786e-5,-4.059992614526739e-9,-0.0015710820407434478,1.2207971645261938e-5,-3.757587705347629e-9,-0.00157079647604091,1.2639630181296142e-5,-3.4172617851035963e-9,-0.0015706506457699233,1.3034205729014649e-5,-3.106531606911105e-9,-0.0015706061696304065,1.3315507185698884e-5,-2.885049906609442e-9,-0.0015705947849098492,1.3446774868260129e-5,-2.7815199812259615e-9,-0.0015705471798354855,1.3439686701807493e-5,-2.7865797392088607e-9,-0.0015704165589056223,1.3341690442592115e-5,-2.8627232184856177e-9,-0.0015701872847721412,1.3213818456770147e-5,-2.9617956699222407e-9,-0.0015698706765883304,1.3111683729022345e-5,-3.0400379076245207e-9,-0.0015694951802119525,1.3074916344619818e-5,-3.0664473087197053e-9,-0.0015690965559719964,1.3124045477720016e-5,-3.02518922812497E-09,-0.0015687104237655423,1.3261776187223445e-5,-2.914483963298332e-9,-0.0015683672849147719,1.3476135614623932e-5,-2.744017121960997e-9,-0.001568089331561201,1.3744221248213585e-5,-2.531925583923272e-9,-0.001567888481635352,1.4036199389495978e-5,-2.301652902586154e-9,-0.0015677654444036897,1.431949385617295e-5,-2.0787019259425203e-9,-0.001567709854690696,1.4563082634763757e-5,-1.8873090716874538e-9,-0.0015677016010537767,1.474164561397543e-5,-1.7472081474154697e-9,-0.0015677133377832947,1.4839081201440235e-5,-1.6708576042155112e-9,-0.0015677139033290711,1.4850945784761677e-5,-1.6615071481920558e-9,-0.001567672273456403,1.4785614343760266e-5,-1.712298071717079e-9,-0.001567561728035762,1.4664077909571058e-5,-1.8064872373507266e-9,-0.001567363964362006,1.4518342278869283e-5,-1.9188087740274477e-9,-0.0015670730416101715,1.4388371092908044e-5,-2.017975036911366e-9,-0.001566699009351379,1.4317124795163991e-5,-2.0706086887569183e-9,-0.001566270342050259,1.434288706438812e-5,-2.0471994116831762e-9,-0.0015658331609196012,1.4488670512990482e-5,-1.9302484376469083e-9,-0.0015654445000836176,1.4750408147840926e-5,-1.72331580198987e-9,-0.0015651576376926135,1.5088818242514955e-5,-1.4572399696723894e-9,-0.0015650016611725502,1.543273520838367e-5,-1.1875289074112136e-9,-0.0015649646525930018,1.5699315031914638e-5,-9.786981777112633e-10,-0.0015649932080395524,1.5825615668091956e-5,-8.797288461446118e-10,-0.0015650127561441629,1.5794360168681763e-5,-9.039460652179229e-10,-0.0015649578766231919,1.5637909598140213e-5,-1.0258340424130335e-9,-0.0015647946888691952,1.5419919015121727e-5,-1.1953572908828253e-9,-0.001564525408102832,1.5208671664966406e-5,-1.3589165068917122e-9,-0.0015641786040441487,1.5056893076463547e-5,-1.4752664574075088e-9,-0.00156379486909857,1.4993534545273575e-5,-1.521981552315444e-9,-0.0015634150399108117,1.5024788854757072e-5,-1.4945831313107964e-9,-0.0015630731490801214,1.5139317110787819e-5,-1.4023153307767539e-9,-0.0015627932503844573,1.5314097884522007e-5,-1.2634546568637839e-9,-0.0015625884467632353,1.5519419283943223e-5,-1.1013546330723007e-9,-0.001562460875346721,1.5722949233932406e-5,-9.412785609553453e-10,-0.0015624021479970563,1.5893311969822037e-5,-8.076525173200512e-10,-0.0015623942663999986,1.600355815982286e-5,-7.213957276926135e-10,-0.0015624113087739449,1.603464562664121e-5,-6.972120092446669e-10,-0.0015624222244725121,1.5978599480086515e-5,-7.411073308205331e-10,-0.0015623947894483653,1.5840685366149302e-5,-8.486840929629714e-10,-0.0015623003825704094,1.563995164582476e-5,-1.0047498832725248e-9,-0.00156211896716867,1.5407677934949402e-5,-1.1846143530044873e-9,-0.0015618434715127026,1.5183522199556461e-5,-1.3572122413585078e-9,-0.001561482731818114,1.5009579708722523e-5,-1.4898312300154014e-9,-0.0015610623229379093,1.492287455651844e-5,-1.553978673492256e-9,-0.0015606225925568506,1.4946887881331915e-5,-1.5318866836714567e-9,-0.001560212971251659,1.5083203136375069e-5,-1.422837639342225e-9,-0.0015598818401117295,1.530556706953706e-5,-1.2475983890907835e-9,-0.0015596626235708532,1.5560011265301256e-5,-1.0482226412439358e-9,-0.001559559627593272,1.577486934926789e-5,-8.802955933378288e-10,-0.0015595405570984476,1.5881538273988095e-5,-7.9692043926817e-10,-0.0015595430360532403,1.5839771966023374e-5,-8.291538101517867e-10,-0.0015594959955338393,1.5654660779172335e-5,-9.72801001056983e-10,-0.0015593463001946208,1.5374391353418983e-5,-1.190114515735307e-9,-0.0015590762116928854,1.5069709060576866e-5,-1.4258030022227316e-9,-0.001558703847788798,1.4807611900845037e-5,-1.6276153266680996e-9,-0.0015582703547364113,1.4632787290015397e-5,-1.7608768873779355e-9,-0.00155782354477752,1.4561962806159921e-5,-1.812864234105201e-9,-0.0015574055106049006,1.4587994709651823e-5,-1.7895075593158592e-9,-0.0015570463687551211,1.4687835068240819e-5,-1.7090593224017948e-9,-0.0015567627265973315,1.4830172836249719e-5,-1.5960694700656643e-9,-0.0015565585721585488,1.4981143223910987e-5,-1.4769346528028385e-9,-0.0015564268779924705,1.5108248878273527e-5,-1.3768878228299211e-9,-0.001556351184307716,1.5183283689987646e-5,-1.3177718726983572e-9,-0.0015563071846080817,1.518499355836712e-5,-1.3159931882651027e-9,-0.001556264759061091,1.5101840586844419e-5,-1.3803631127402186e-9,-0.0015561910289953722,1.493467497760959e-5,-1.5099983155967233e-9,-0.001556054769142461,1.4698525876528096e-5,-1.692928407678446e-9,-0.0015558319325716652,1.4422419435365395e-5,-1.9062865699394374e-9,-0.00155551134062967,1.4146276673803998e-5,-2.118820791349384e-9,-0.0015550990200105716,1.3914554215767493e-5,-2.2959501362179986e-9,-0.0015546195256492723,1.376733680242155e-5,-2.406755127218841e-9,-0.001554113115567492,1.3730683214261952e-5,-2.4314473667369036e-9,-0.001553628664032215,1.3808584379673326e-5,-2.367474165297039e-9,-0.0015532132442453931,1.3978822784027847e-5,-2.232532482775318e-9,-0.0015529002123789554,1.4194626461009348e-5,-2.063117347756414e-9,-0.0015526985302697924,1.439325938164884e-5,-1.907804521574992e-9,-0.0015525869004329388,1.4511149461068737e-5,-1.8155962076796212e-9,-0.0015525163561113226,1.4502518791870292e-5,-1.821618126894051e-9,-0.0015524229966605255,1.4355340596169604e-5,-1.934861536785402e-9,-0.0015522480046320417,1.4097085782131253e-5,-2.1337720574238567e-9,-0.0015519570630758844,1.3785964147240603e-5,-2.373056019133126e-9,-0.0015515502090884452,1.3490805690072358e-5,-2.5993134735632945e-9,-0.0015510581583219735,1.3269136012428824e-5,-2.7680732374480753e-9,-0.0015505287216183647,1.3153018247135854e-5,-2.8547493909096727e-9,-0.0015500111337097319,1.3146302784594268e-5,-2.8566824400189927e-9,-0.0015495446374244918,1.3230505435768768e-5,-2.788469542937826e-9,-0.001549153320614908,1.3373991814169866e-5,-2.6747740927702085e-9,-0.0015488458317407083,1.3540368315253085e-5,-2.543818936185515e-9,-0.0015486175736199625,1.3694424215569561e-5,-2.422826603784886e-9,-0.0015484534953238353,1.3805782453544893e-5,-2.335244042665086e-9,-0.0015483305799586244,1.3851194736815257e-5,-2.2989915178837034e-9,-0.0015482199989999771,1.3816427644258473e-5,-2.3249912029369815e-9,-0.001548089463216438,1.369826171317471e-5,-2.41558809311908e-9,-0.0015479064843226234,1.3506495043573231e-5,-2.5629790637511724e-9,-0.0015476430650823826,1.3265142070830212e-5,-2.748308110889761e-9,-0.0015472817047777522,1.3011433188873347e-5,-2.9425170054115522e-9,-0.0015468215378123499,1.2791153939947237e-5,-3.1100615838046316e-9,-0.0015462823008519895,1.264978126784404e-5,-3.2158634430605283e-9,-0.0015457034820694632,1.2620793299373853e-5,-3.23437207800151e-9,-0.0015451371557708795,1.271461979911524e-5,-3.1580199349164043e-9,-0.0015446354809309358,1.2912598720449401e-5,-3.001718234269623e-9,-0.0015442364302565255,1.3169086681883902e-5,-2.801040276875315e-9,-0.0015439524938185769,1.342193894043896e-5,-2.604019123633512e-9,-0.0015437662068975597,1.3608488064402962e-5,-2.4588197532468753e-9,-0.0015436340713854192,1.3682357584886e-5,-2.4008622169249547e-9,-0.001543497962354699,1.3626252232787606e-5,-2.4430807619033354e-9,-0.00154330101649021,1.3456844397511336e-5,-2.572263294225788e-9,-0.0015430034083978895,1.3219882326718478e-5,-2.7529027871083723e-9,-0.0015425929181858147,1.2976711436722279e-5,-2.937645646025132e-9,-0.0015420866882192013,1.278670592403656e-5,-3.080856310691857e-9,-0.00154152398796979,1.2691851204048305e-5,-3.1504613502583297e-9,-0.001540953480044075,1.2708519035282108e-5,-3.1341863973903237e-9,-0.0015404202334010281,1.2827867903263539e-5,-3.039126457904035e-9,-0.0015399566733843208,1.302256759212801e-5,-2.886485245993735e-9,-0.0015395788942260255,1.325586308652444e-5,-2.7045866919813093e-9,-0.0015392872954454852,1.3489692472678766e-5,-2.5226746116671805e-9,-0.0015390695180788213,1.3690362719305401e-5,-2.3666060094382767e-9,-0.0015389039426561332,1.3831829101966165e-5,-2.2563601055744896e-9,-0.0015387628159656927,1.3897428531583792e-5,-2.20469239650718e-9,-0.0015386148936828994,1.388103058929039e-5,-2.2162086122068876e-9,-0.0015384280799308537,1.3788188762037226e-5,-2.28644706084773e-9,-0.0015381727896268602,1.3637252599749298e-5,-2.4010335015984904e-9,-0.00153782662638598,1.3459685165893791e-5,-2.5355047694054314e-9,-0.0015373803606947806,1.3298103454663454e-5,-2.6569224773298658e-9,-0.0015368439449366434,1.3200271754010526e-5,-2.7285944715443808e-9,-0.0015362497069414172,1.3208268582747388e-5,-2.7184455758695063e-9,-0.0015356491281297727,1.3344727868614513e-5,-2.609535624585385e-9,-0.0015351012857119798,1.3601376685119754e-5,-2.4087144532296773e-9,-0.001534655333305587,1.3936432395579682e-5,-2.1484399499017215e-9,-0.0015343338675460306,1.4284442308400234e-5,-1.8790986065537597e-9,-0.001534124900712501,1.4575769360907748e-5,-1.6540268609434805e-9,-0.001533986063403117,1.4757650849527079e-5,-1.5134089313619608e-9,-0.0015338585577077514,1.4808523097929115e-5,-1.4733758294952858e-9,-0.001533684646016743,1.4741520547899112e-5,-1.5234227094639102e-9,-0.001533422629589494,1.4597945041350879e-5,-1.6315309243635806e-9,-0.0015330556633583313,1.4434363097761433e-5,-1.7541719141681908e-9,-0.0015325932941699795,1.43077142414427e-5,-1.8477863331828831e-9,-0.0015320665277323265,1.426230754346835e-5,-1.878725396982042e-9,-0.0015315185461519663,1.4321473573738102e-5,-1.8295328556822685e-9,-0.001530993934766879,1.4485180350014558e-5,-1.7006180859558923e-9,-0.001530529287402824,1.4733246178698408e-5,-1.5076755247691595e-9,-0.0015301472235543963,1.5032273750256648e-5,-1.2763383865137975e-9,-0.001529854434526647,1.5343751423442615e-5,-1.0360201232972493e-9,-0.0015296430494533845,1.5631173065596047e-5,-8.145421075795626e-10,-0.0015294939224596445,1.5865044960165455e-5,-6.343581941131169e-10,-0.0015293804665335667,1.6025681201232713e-5,-5.104211518947967e-10,-0.0015292721800424954,1.6104406698012555e-5,-4.492264661427397e-10,-0.0015291376898846022,1.610398838942385e-5,-4.484456737093128e-10,-0.0015289476443276155,1.6038826092304203e-5,-4.967851368558057e-10,-0.0015286780300962212,1.5934920116292352e-5,-5.7407767303816e-10,-0.0015283144581671828,1.5828995706173513e-5,-6.520649957069123e-10,-0.001527857433495814,1.5765420962771622e-5,-6.968641554284709e-10,-0.0015273273599870595,1.578919190086431e-5,-6.74377333345776e-10,-0.001526766307082904,1.5934197950098757e-5,-5.592021348606761e-10,-0.0015262325434225242,1.6208917896855537e-5,-3.454009983392546e-10,-0.0015257856016340661,1.6585900155219326e-5,-5.434009904032178e-11,-0.001525465322369261,1.7003376453317625e-5,2.6667254099619e-10,-0.0015252747715500247,1.738282006332563e-5,5.577945753003107e-10,-0.0015251774516648478,1.765614484759572e-5,7.673293029466002e-10,-0.0015251111941016761,1.778888314628154e-5,8.693422948032573e-10,-0.0015250108675460873,1.7788373699605145e-5,8.698678813149482e-10,-0.0015248284104435656,1.769597096092772e-5,8.008933904221264e-10,-0.001524543138352943,1.7570342537972436e-5,7.074837082249667e-10,-0.001524161958697962,1.747014596631279e-5,6.344307222398109e-10,-0.00152371290844506,1.7441141511317046e-5,6.163780060845438e-10,-0.001523235851785127,1.7509215448337496e-5,6.72585413499027e-10,-0.0015227730669315363,1.7678694633934106e-5,8.058200670495614e-10,-0.0015223612736943114,1.7934688640477055e-5,1.0043203383510617e-9,-0.0015220259505717274,1.82482101335355e-5,1.2458005545171251e-9,-0.0015217783771147274,1.858278154644696e-5,1.502482588468059e-9,-0.0015216153779278,1.8901176203271382e-5,1.7461563926156706e-9,-0.001521521286606779,1.9171184850908933e-5,1.9524855806838318e-9,-0.0015214713531420381,1.936973086375099e-5,2.1040967574472464e-9,-0.0015214357043695024,1.9485117407839795e-5,2.1923000740043392e-9,-0.001521383137404215,1.9517692447771478e-5,2.217627952739704e-9,-0.0015212844821984616,1.9479511468266107e-5,2.1895835175049778e-9,-0.0015211156742934025,1.939342867657197e-5,2.1258913140746853e-9,-0.0015208608563400331,1.9291673965034527e-5,2.0512979780619082e-9,-0.001520515854495682,1.9213505125941906e-5,1.995657851135691e-9,-0.0015200919884612346,1.9200901897949216e-5,1.9905876211772794e-9,-0.0015196190517206686,1.9290978781291798e-5,2.0637415938522103e-9,-0.001519144803733725,1.9504713196396947e-5,2.2304122471037216e-9,-0.001518727462232059,1.9834280591372538e-5,2.484141135478913e-9,-0.0015184192950395239,2.0235367514319987e-5,2.7910634415758664e-9,-0.0015182452262433325,2.0633099952696904e-5,3.0944338572009063e-9,-0.0015181877354138221,2.094520859440517e-5,3.3320858875781925e-9,-0.0015181899043198905,2.1113683302729238e-5,3.4603240998125803e-9,-0.0015181776587180065,2.1127106051478163e-5,3.4708520228233463e-9,-0.0015180885131474918,2.1021030404410242e-5,3.391091106264991e-9,-0.0015178909438639508,2.0859213783789e-5,3.2698730446144373e-9,-0.0015175877233646422,2.0709171992738493e-5,3.1587082248994756e-9,-0.0015172073558787026,2.0623842481949752e-5,3.0977101310951086e-9,-0.0015167914191089214,2.063317965218757e-5,3.109204821067375e-9,-0.0015163832619076432,2.0743705953134367e-5,3.1975368071754336e-9,-0.0015160200669873704,2.0942485608743105e-5,3.3523023756736195e-9,-0.0015157281682930876,2.1202788343014117e-5,3.5528268410564887e-9,-0.0015155208240000008,2.1490072546112796e-5,3.7727761422749006e-9,-0.0015153978329193042,2.1767775800983042e-5,3.984512020996164e-9,-0.0015153466823297202,2.2002561279956053e-5,4.162975427671088e-9,-0.0015153449752000046,2.2168662578104594e-5,4.2888951154383054e-9,-0.0015153638372301824,2.225102728825126e-5,4.351136659371982e-9,-0.001515371889179471,2.2246993016359994e-5,4.3479874066622305e-9,-0.0015153392563930425,2.216641597337143e-5,4.287271959233951e-9,-0.001515241213541778,2.2030490914074532e-5,4.1854284582402095e-9,-0.0015150613338686283,2.1869574703626888e-5,4.065761994294679e-9,-0.0015147941551076818,2.1720147110229897e-5,3.956004055400928e-9,-0.0015144474064621842,2.1620798118500058e-5,3.885163322724043e-9,-0.0015140436280418352,2.160676344805545e-5,3.879380610579873e-9,-0.0015136202312386242,2.1702388771875214e-5,3.956357484574458e-9,-0.001513226034844196,2.191177437422689e-5,4.1185205826258535e-9,-0.0015129120080209172,2.221001677650227e-5,4.346649078495528e-9,-0.001512715541928629,2.254041791686142e-5,4.597890678761155e-9,-0.001512642323751254,2.282451516198137e-5,4.8132638236435735e-9,-0.001512656112032841,2.2987226657755368e-5,4.936448725917021e-9,-0.0015126871339836351,2.2987814401065566e-5,4.937036368579893e-9,-0.0015126589666124984,2.283832816494508e-5,4.824488181507253e-9,-0.0015125191642603442,2.2596939508072832e-5,4.643164810446097e-9,-0.001512255771697461,2.234135481963672e-5,4.452159952580022e-9,-0.0015118937115124553,2.2139907404171068e-5,4.303255975411923e-9,-0.00151147883232571,2.203443093930126e-5,4.227845582902372e-9,-0.001511060993239207,2.2037202305538674e-5,4.234671953457867e-9,-0.0015106824975225093,2.213657085421608e-5,4.314282868663287e-9,-0.0015103725536317254,2.2305348342064856e-5,4.4455958177446396e-9,-0.001510145935250769,2.2508543748264166e-5,4.601885979825811e-9,-0.0015100037941396729,2.27093975733727e-5,4.75536669510632e-9,-0.0015099353530227085,2.2873996336669858e-5,4.880600371514767e-9,-0.0015099200916151164,2.2974973370313923e-5,4.957188134048892e-9,-0.0015099304637137257,2.2994496007904244e-5,4.971952359005194e-9,-0.0015099352286913673,2.2926461766264454e-5,4.920579998432417e-9,-0.0015099033645110472,2.277759522000927e-5,4.808472749402745e-9,-0.0015098082535331882,2.256704567886276e-5,4.650450638927179e-9,-0.0015096316019525189,2.2324318804894625e-5,4.469136915658275e-9,-0.0015093665766133704,2.208567924099814e-5,4.2921241199986e-9,-0.0015090197629728298,2.1889299652124044e-5,4.148176635499323e-9,-0.0015086116448405531,2.1769507934527783e-5,4.062815296740895e-9,-0.0015081753500045245,2.1750466832938717e-5,4.05360291565382e-9,-0.0015077531763032308,2.183960388547096e-5,4.125383508132904e-9,-0.0015073900399322092,2.202167990402843e-5,4.2660809956394935e-9,-0.0015071232263286609,2.225573764208077e-5,4.44462415416496e-9,-0.0015069693776782423,2.2478572667533146e-5,4.6136193435732875e-9,-0.0015069127900212765,2.261830809440704e-5,4.719430802140069e-9,-0.0015069025568193628,2.2617773461514468e-5,4.719545121206075e-9,-0.0015068654430890603,2.2459193836491986e-5,4.601005606662283e-9,-0.001506732732291867,2.2175454413684737e-5,4.388897633440769e-9,-0.0015064676102254564,2.1838262916960467e-5,4.1374773793336535e-9,-0.0015060770908259737,2.152899176668202e-5,3.9081543995164606e-9,-0.0015056034531821725,2.130964096087466e-5,3.747499605308365e-9,-0.0015051039831142801,2.120817745888039e-5,3.67616765940978e-9,-0.0015046318558587788,2.121994692951462e-5,3.6900798243215312e-9,-0.0015042251268647423,2.1317953608248667e-5,3.768369282876351e-9,-0.0015039036630436163,2.1464388035088392e-5,3.88222893943776e-9,-0.0015036707819547192,2.1619516091843104e-5,4.001665844105285e-9,-0.0015035165886605325,2.1747302655433718e-5,4.099689013291884e-9,-0.00150342132600212,2.1818716266063703e-5,4.154695925069204e-9,-0.001503358325448771,2.1813879500024203e-5,4.1519986156729824e-9,-0.0015032968462424501,2.1723736492507323e-5,4.08503905892022e-9,-0.0015032052341075262,2.155133538091197e-5,3.956368101994074e-9,-0.0015030546872407823,2.1312355770057032e-5,3.778071180337243e-9,-0.0015028235326783174,2.103420332333634e-5,3.5710789610787957e-9,-0.0015025013887804367,2.075307806093682e-5,3.362886440108658e-9,-0.0015020922453497882,2.0508886287330707e-5,3.183598559287639e-9,-0.0015016154742786625,2.0338452391119222e-5,3.0607104114683997e-9,-0.0015011040515861569,2.0268076034948164e-5,3.0134867470089806e-9,-0.001500599804274013,2.030688168146457e-5,3.04807733049152e-9,-0.0015001460726057133,2.044239395900025e-5,3.154424023362247e-9,-0.00149977856352969,2.0639604039527855e-5,3.305819021705255e-9,-0.0014995156172464786,2.0844817059723325e-5,3.461959279396227e-9,-0.0014993500137638414,2.0995399978085027e-5,3.576249789876038e-9,-0.0014992456432738306,2.1035335583678028e-5,3.60729449457631e-9,-0.0014991428844553212,2.0933644184201608e-5,3.532476786791916e-9,-0.0014989745730104767,2.0698804268457708e-5,3.3586078624101303e-9,-0.0014986888360896111,2.0380406021878866e-5,3.1231135922833585e-9,-0.0014982686733544998,2.0053717417477414e-5,2.88245886837212e-9,-0.001497737525690711,1.979300837962255e-5,2.692135997911263e-9,-0.001497148017881539,1.9647196210900128e-5,2.588415637713842e-9,-0.0014965613991866607,1.9629093705834248e-5,2.5803785904338805e-9,-0.0014960289411646245,1.971968706434261e-5,2.653283174951249e-9,-0.0014955820412908304,1.9880736800477454e-5,2.778157555940626e-9,-0.0014952309905867504,2.006787897714019e-5,2.9216817011335566e-9,-0.0014949687552116315,2.0239968863611068e-5,3.053154202397362e-9,-0.001494776174475137,2.0364131096063462e-5,3.1481831138080597e-9,-0.0014946265704327824,2.0417849223123522e-5,3.1901577490234746e-9,-0.0014944892845262566,2.038968095963877e-5,3.170735822070018e-9,-0.001494332545660484,2.0279629489477603e-5,3.090127645122555e-9,-0.0014941263545837618,2.009946410020862e-5,2.957370145196969e-9,-0.0014938459444002585,1.9872625600314708e-5,2.7902699955053625e-9,-0.0014934759328347927,1.9632856641228426e-5,2.614335134584265e-9,-0.0014930145655336932,1.9420569813598002e-5,2.4599538294097267e-9,-0.001492476702076429,1.9276431553751654e-5,2.3574741074222654e-9,-0.001491893815555032,1.923270705234934e-5,2.3306640563010123e-9,-0.0014913096645020614,1.930428755097455e-5,2.3900526656468323e-9,-0.0014907716135890666,1.9482318555866433e-5,2.5283426168944e-9,-0.0014903193643921373,1.973316438958572e-5,2.7198781518158167e-9,-0.0014899741448074898,2.0003956799043533e-5,2.9249937542774248e-9,-0.0014897315523588778,2.023395845028581e-5,3.098573729705269e-9,-0.0014895604078392077,2.036929696434408e-5,3.200967785115278e-9,-0.0014894086578894246,2.0377579597678796e-5,3.2087039570247428e-9,-0.0014892158047863976,2.0258385868426954e-5,3.122098731804692e-9,-0.001488929416536435,2.00457625312811e-5,2.9669485121319134e-9,-0.0014885210657221955,1.9800292408669174e-5,2.7885218058526498e-9,-0.0014879957071757151,1.9591794282292342e-5,2.6386436925550972e-9,-0.0014873899746012964,1.9478359809753334e-5,2.5601312681883347e-9,-0.0014867596618360918,1.949011570768919e-5,2.5748323704033555e-9,-0.0014861620498762876,1.96239922223134e-5,2.6799132147527057e-9,-0.0014856407320978139,1.9849868774778618e-5,2.8525944425785092e-9,-0.0014852179082245765,2.0123138972227992e-5,3.0595746869390322e-9,-0.001484894404555705,2.0397436089605455e-5,3.266468246613373e-9,-0.0014846544662120268,2.063358248057847e-5,3.444366312054756e-9,-0.0014844719149976677,2.080401172999627e-5,3.573026893968126e-9,-0.0014843155256631664,2.089389600951698e-5,3.6416569247405195e-9,-0.0014841529717873015,2.0900677734307805e-5,3.6485643076621275e-9,-0.0014839536957402732,2.083324538196875e-5,3.6005774495059056e-9,-0.0014836914694317035,2.0711220588510544e-5,3.5125354304605184e-9,-0.0014833473561297718,2.0564086382282243e-5,3.406608295349423e-9,-0.0014829133688975399,2.0429297886048457e-5,3.3108019367196984e-9,-0.0014823963710327067,2.0348185310062236e-5,3.25579730356668E-09,-0.0014818207428450856,2.0358734524199104e-5,3.269510016130022e-9,-0.0014812274772494347,2.048563738802864e-5,3.369725367338494e-9,-0.0014806675693328044,2.0730221397913308e-5,3.556767697544755e-9,-0.0014801896123771137,2.106481501301274e-5,3.809538836492915e-9,-0.0014798249253679303,2.143590416769047e-5,4.088059593597637e-9,-0.0014795761455542354,2.177709692752412e-5,4.3431788306475135e-9,-0.0014794146511569793,2.202796158292254e-5,4.530508461441201e-9,-0.0014792883061481331,2.21516328538685e-5,4.623353141774396e-9,-0.0014791364524373138,2.2144870224967428e-5,4.620002061129199e-9,-0.001478906684187595,2.203791530288745e-5,4.543444647931511e-9,-0.0014785683235115793,2.1885258092804413e-5,4.434360357647662e-9,-0.0014781193401062422,2.1750689691606835e-5,4.339933827235743e-9,-0.0014775854795386373,2.169092982823376e-5,4.3017291032046366e-9,-0.001477012299802205,2.1742145708306606e-5,4.345842348530162e-9,-0.0014764526498468376,2.191281179061359e-5,4.477843345187745e-9,-0.0014759534363243591,2.2184454181331846e-5,4.683549499194312e-9,-0.0014755455960484022,2.2519217855883682e-5,4.93475027814799e-9,-0.0014752396898019221,2.2870962823821085e-5,5.1974073013490225e-9,-0.0014750271342094889,2.3195958122338928e-5,5.439457561441334e-9,-0.0014748851544931095,2.3460421517391652e-5,5.636259530417908e-9,-0.0014747829673421675,2.3644120169039524e-5,5.773169265596725e-9,-0.001474687320693333,2.374080291527646e-5,5.845840169919798e-9,-0.0014745666070528286,2.3756880234768512e-5,5.859274017653767e-9,-0.0014743937130802754,2.370958754850038e-5,5.826487086509059e-9,-0.0014741482569230124,2.3625217663658505e-5,5.767179828898929e-9,-0.001473818894785108,2.353730629244631e-5,5.7063097259063755e-9,-0.0014734060778071696,2.3484074946004946e-5,5.672082995091509e-9,-0.001472924981874492,2.3504008874457454e-5,5.692603170476783e-9,-0.0014724072644037177,2.3628534088270373e-5,5.790480507708103e-9,-0.0014718991918354172,2.387197597384268e-5,5.975569281186334e-9,-0.0014714535304005726,2.422153315886059e-5,6.2378093646216116e-9,-0.0014711147480171334,2.463284924493281e-5,6.5441791770475725e-9,-0.0014709018005976526,2.5037149761910478e-5,6.844044438239558e-9,-0.0014707971735682401,2.5361087416693702e-5,7.08371765685339e-9,-0.0014707499231823534,2.5551998946229314e-5,7.224937628064112e-9,-0.0014706928556039132,2.559617122586235e-5,7.2582251778159335e-9,-0.0014705654035565266,2.5521412187611647e-5,7.204692681405604e-9,-0.0014703314954858874,2.5384704814681434e-5,7.106814374546921e-9,-0.001469986538679709,2.5252782134341083e-5,7.013936096625625e-9,-0.0014695540981764408,2.5183955143550453e-5,6.968766442288963e-9,-0.0014690762900327096,2.5215950258180403e-5,6.998456432120111e-9,-0.0014686020708823385,2.5360870206104967e-5,7.1110940673169154e-9,-0.001468176386598783,2.5606318665205407e-5,7.296811789583651e-9,-0.001467831922902369,2.592100301791191e-5,7.532134484148677e-9,-0.0014675843884544473,2.6263002803544234e-5,7.786145194716698e-9,-0.0014674316308986469,2.6588795756606222e-5,8.027060457500164e-9,-0.0014673561469447757,2.6861167542429433e-5,8.22790296065784e-9,-0.001467329858105644,2.7054651629686617e-5,8.370365121482301e-9,-0.0014673197245071011,2.7158013293985568e-5,8.446566196624374e-9,-0.0014672929285562525,2.717410966689769e-5,8.458950180331899e-9,-0.0014672208834997042,2.7118011201820044e-5,8.4189307986924e-9,-0.0014670820001531884,2.7014370775278294e-5,8.34495143072538e-9,-0.0014668636033767842,2.6894642929169563e-5,8.260369284515231e-9,-0.0014665634811135814,2.6794222102966245e-5,8.19123024785904e-9,-0.0014661914098972825,2.674909228562432e-5,8.163696466874626e-9,-0.001465770520724381,2.679114846664634e-5,8.200590836488431e-9,-0.001465337400999473,2.6941364730020337e-5,8.316505230393117e-9,-0.0014649388274165344,2.720105595585084e-5,8.511638713086152e-9,-0.0014646228477321868,2.7543744071366404e-5,8.766111014759959e-9,-0.0014644237187200332,2.791300341092992e-5,9.03854416039646e-9,-0.001464344966501293,2.8232690622237343e-5,9.273507511061049e-9,-0.00146435037296069,2.8431059296295023e-5,9.418980704214775e-9,-0.0014643722903750673,2.8469546292426055e-5,9.447272055057291e-9,-0.0014643365365555757,2.835968319109381e-5,9.367378735882624e-9,-0.0014641906956874835,2.8157374663821298e-5,9.220801767421116e-9,-0.0014639203699168175,2.793907130398366e-5,9.063972153156974e-9,-0.001463547743641747,2.777469392086682e-5,8.94819704622287e-9,-0.0014631181589848093,2.770971394278009e-5,8.906400483072525e-9,-0.0014626840013922983,2.7759615661242276e-5,8.949152904876544e-9,-0.0014622919778576426,2.7913376841285792e-5,9.067487925009645e-9,-0.0014619755187329977,2.8141209895819113e-5,9.238874894232356e-9,-0.0014617515941158011,2.840319839203045e-5,9.43374255358404e-9,-0.0014616206414562979,2.8657228590944903e-5,9.621316724398479e-9,-0.0014615686117483452,2.88656511750599e-5,9.77438646312151e-9,-0.0014615705063021332,2.9000359578134314e-5,9.872855466969257e-9,-0.0014615948598680729,2.9046009835060456e-5,9.905967029354836e-9,-0.001461608579480747,2.900124632155569e-5,9.873148682283592e-9,-0.0014615815016667387,2.8877991973552452e-5,9.783504838835818e-9,-0.001461490094774729,2.86991569091944e-5,9.65415693656674e-9,-0.0014613200429391873,2.8495379357004293e-5,9.507823393054517e-9,-0.0014610677949529376,2.8301325099769305e-5,9.370010304543687e-9,-0.0014607412749224225,2.8151769243240655e-5,9.266016170060544e-9,-0.001460359934266054,2.807741831222614e-5,9.217802419101563e-9,-0.001459954104262802,2.810012125881796e-5,9.240548810429125e-9,-0.0014595629027557774,2.8227079611997363e-5,9.338632920695437e-9,-0.001459229207373408,2.8444570378339046e-5,9.501348366973721e-9,-0.0014589903312328463,2.8713478214577256e-5,9.699906185659169e-9,-0.0014588646330113623,2.8970928160528702e-5,9.888704607981145e-9,-0.0014588380390138703,2.9143000527045176e-5,1.0014441084658272e-8,-0.0014588592510678298,2.916941323267889e-5,1.0033827086917958e-8,-0.0014588523821274818,2.9030953044343186e-5,9.933409035109415e-9,-0.0014587456644553276,2.8762477106263568e-5,9.739062259576716e-9,-0.001458501091057045,2.844024437257861e-5,9.506799999855063e-9,-0.001458127143420008,2.8150315430128008e-5,9.299622484807696e-9,-0.001457669435461303,2.7957472722960843e-5,9.164649386359438e-9,-0.0014571891196582215,2.788982620398424e-5,9.12181556433836e-9,-0.001456742655817562,2.7940470402478702e-5,9.1652351867303225E-09,-0.0014563700347164715,2.807848674258035e-5,9.271524962474886e-9,-0.0014560912588836175,2.826144010513699e-5,9.409190716108027e-9,-0.0014559078903742333,2.8445360201978687e-5,9.546033498517481e-9,-0.0014558067229891146,2.859145029300421e-5,9.65399985693406e-9,-0.0014557639343839687,2.867025540336573e-5,9.712068997365372e-9,-0.0014557492065120391,2.8664138594720785e-5,9.707890097359682e-9,-0.0014557298001960863,2.8568493551007577e-5,9.638560286519974e-9,-0.0014556745936851589,2.839177608483774e-5,9.510625422205857e-9,-0.0014555579370875656,2.815423714782051e-5,9.339183329667601e-9,-0.0014553629537277198,2.788526924195518e-5,9.14595894628804e-9,-0.0014550838573302906,2.7619586166606147e-5,8.95646433151999e-9,-0.0014547270310782067,2.7392671032165182e-5,8.796565507284847e-9,-0.0014543107698863327,2.7235881381529104e-5,8.688803061502544e-9,-0.0014538636547068316,2.7171559156514596e-5,8.648806078255112e-9,-0.0014534215710303232,2.7208440099601352e-5,8.68207399305285e-9,-0.001453023162629078,2.7337595874378007e-5,8.781285876904159e-9,-0.0014527031545351094,2.7529636906441165e-5,8.924571639210088e-9,-0.0014524833008458392,2.7735059993107925e-5,9.075970709988018e-9,-0.0014523621957538728,2.7890571544417234e-5,9.19001842577633e-9,-0.0014523077282724134,2.793379091660291e-5,9.22219677030714e-9,-0.0014522585937687897,2.7825223830983982e-5,9.144582317840528e-9,-0.0014521403795198652,2.7569149189017554e-5,8.960821255109384e-9,-0.001451893505617349,2.7219493141957345e-5,8.71038541518176e-9,-0.0014514989868257015,2.6862149989671336e-5,8.455773632611902e-9,-0.0014509858377754307,2.6581283086955036e-5,8.257991564297597e-9,-0.0014504161415827162,2.642918854125528e-5,8.154588223766253e-9,-0.0014498591074915373,2.6414918608475404e-5,8.151437565096828e-9,-0.0014493694267968629,2.6511849721997745e-5,8.228438049517682e-9,-0.001448977429522189,2.667403387196817e-5,8.351639483937653e-9,-0.0014486894408670674,2.6851542282472955e-5,8.484552463610772e-9,-0.0014484932417684118,2.700055872143433e-5,8.595494996252945e-9,-0.0014483645278005612,2.7088384874182358e-5,8.661115546099852e-9,-0.0014482724252906584,2.709519725146361e-5,8.667505390416874e-9,-0.0014481837922433506,2.7014246607076915e-5,8.610209915657879e-9,-0.0014480667630384213,2.6851367625677863e-5,8.493819386236972e-9,-0.0014478939985973695,2.6623968239600285e-5,8.331252341426477e-9,-0.0014476458307236476,2.635924813759418e-5,8.142498231074953e-9,-0.00144731311061095,2.6091231865376743e-5,7.952456649511876e-9,-0.0014468992107673786,2.5856444834127285e-5,7.787722099695875e-9,-0.0014464205463444633,2.5688537660867144e-5,7.672567457310853e-9,-0.0014459051593164764,2.5612502082256553e-5,7.624669465502379e-9,-0.0014453891705153014,2.5639343311066898e-5,7.651283894303304e-9,-0.0014449112632642608,2.5762226244715e-5,7.746636370364774e-9,-0.0014445057152640856,2.595501245227754e-5,7.891145026699935e-9,-0.0014441946694093064,2.6173960497131583e-5,8.052917461887092e-9,-0.0014439806475695987,2.636349963132186e-5,8.192048807278225e-9,-0.0014438411873451745,2.646690890427581e-5,8.268250609640819e-9,-0.0014437286296687954,2.6441511003512633e-5,8.251567637578792e-9,-0.001443578444853297,2.6275165731848128e-5,8.1339948899965e-9,-0.0014433273202660133,2.5997083928831833e-5,7.937096006765073e-9,-0.001442936409115405,2.567444219779277e-5,7.709508223593939e-9,-0.0014424086701659907,2.5391506100637698e-5,7.511889392046065e-9,-0.0014417892862947695,2.5219227646515815e-5,7.3950023164529674e-9,-0.001441147821285167,2.5191187270965408e-5,7.382424698161206e-9,-0.0014405525671188652,2.5297654232244746e-5,7.46642211059057e-9,-0.0014400506984845914,2.549697136888099e-5,7.616367322101587e-9,-0.0014396609875323325,2.573422047511667e-5,7.792362299919142e-9,-0.0014393770763216152,2.595731091946943e-5,7.956884889193762e-9,-0.0014391755390315833,2.6126299063856226e-5,8.081435414644157e-9,-0.0014390240648945822,2.621661961154909e-5,8.14872862017226e-9,-0.0014388876944924675,2.6218749094750767e-5,8.152319004850451e-9,-0.0014387330155882449,2.6136521805769236e-5,8.095315097039274e-9,-0.0014385310964584244,2.5985249879172986e-5,7.98902323659588e-9,-0.0014382599562942464,2.578984727441783e-5,7.851630723953415e-9,-0.001437907000473791,2.558258430097201e-5,7.706602007982529e-9,-0.0014374713475980292,2.539984818095332e-5,7.580298299298504e-9,-0.0014369654370357835,2.5277430919184726E-05,7.498481675769508e-9,-0.0014364149450387434,2.524445155724815e-5,7.481837634246073e-9,-0.0014358560907401488,2.531680732424275e-5,7.541239382042651e-9,-0.0014353299421923447,2.549174348391302e-5,7.67395063074306e-9,-0.0014348742608147498,2.5745447771436074e-5,7.862124322155557e-9,-0.0014345144552345818,2.6035180886781052e-5,8.074600559849243e-9,-0.0014342558619612528,2.6306381027453562e-5,8.272200047331242e-9,-0.001434079589311781,2.6503932782313694e-5,8.415841468953633e-9,-0.0014339437223416472,2.658569469617018e-5,8.476099349229682e-9,-0.0014337909162949274,2.653533090809111e-5,8.442148816768944e-9,-0.0014335620776601706,2.6370518693983798e-5,8.32738512813637e-9,-0.0014332136074441035,2.614232716045764e-5,8.16878953155742e-9,-0.0014327328436069065,2.592319956427502e-5,8.01823403658462e-9,-0.0014321447131647473,2.5785451237951414e-5,7.927095900408931e-9,-0.0014315049081303302,2.5778022969174607e-5,7.92972291182139e-9,-0.001430881462440153,2.591187567232032e-5,8.0331743458699e-9,-0.0014303331772278684,2.616035797685171e-5,8.217711692267238e-9,-0.0014298944934438224,2.6472481447071226e-5,8.446469961108673e-9,-0.0014295714210435305,2.6790920056085873e-5,8.67839265732808e-9,-0.0014293466416022695,2.706669905365202e-5,8.878682424407924e-9,-0.0014291886521796292,2.726698482237647e-5,9.024249768378522e-9,-0.0014290605250002484,2.7376714200605378e-5,9.104750656058354e-9,-0.0014289262535661926,2.7396668664601868e-5,9.121125674470142e-9,-0.0014287546376585928,2.734037378186705e-5,9.083361209742851e-9,-0.0014285215854872378,2.7231132652078738e-5,9.008387004102195e-9,-0.0014282118094740023,2.7099446056366132e-5,8.91824477219024e-9,-0.0014278205169719102,2.6980369162120895e-5,8.838165817857077e-9,-0.0014273551041353886,2.6910052790540644e-5,8.794014126806641e-9,-0.001426836217410468,2.692081607168585e-5,8.808668492982802e-9,-0.0014262969989791532,2.703467650249471e-5,8.897360695655925e-9,-0.0014257791653392638,2.7256366225002294e-5,9.062761040100194e-9,-0.0014253252294257476,2.7568169951920956e-5,9.291482753990074e-9,-0.0014249678412150235,2.7929586139618507e-5,9.554082763102208e-9,-0.001424719247272349,2.8283922152095817e-5,9.8099633515569e-9,-0.0014245649540888968,2.857138997614607e-5,1.0016784431585915e-8,-0.001424464819701088,2.874523105273305e-5,1.0141889729331605e-8,-0.0014243621807249333,2.8785614912595313e-5,1.0172034668321106e-8,-0.001424198594399113,2.8706550061364885e-5,1.0118076747905602e-8,-0.0014239298298215845,2.855338333973738e-5,1.0012952173362216e-8,-0.0014235384273948743,2.8391359153604704e-5,9.903332600293055e-9,-0.001423039068963574,2.8288237213866135e-5,9.837163726172813e-9,-0.0014224748046457894,2.8295862255426144e-5,9.850620457112531e-9,-0.0014219048911750486,2.8436423102220665e-5,9.95855573897215e-9,-0.0014213881167722824,2.8698019217145672e-5,1.0151643259449534e-8,-0.001420967450066756,2.9040746996965335e-5,1.0400951762124473e-8,-0.0014206611416994707,2.941022918094345e-5,1.066766982712532e-8,-0.001420462210050991,2.9752840746124096e-5,1.0913884054961945e-8,-0.0014203445464611544,3.0027360180390388e-5,1.111072374244291e-8,-0.0014202718523974758,3.0210625033603962e-5,1.1242230035220288e-8,-0.0014202059478694213,3.0297793467362173e-5,1.130543514634517e-8,-0.0014201126851082163,3.0299379741317255e-5,1.1308212546961511e-8,-0.001419965354967399,3.023722740125861e-5,1.126641797154726e-8,-0.0014197463754245395,3.0140745523510838e-5,1.1201222166966375e-8,-0.0014194482287997765,3.004374201377961e-5,1.1136832656018542e-8,-0.0014190743137684472,2.9981438465230445e-5,1.1098298258684281e-8,-0.001418639809555389,2.9986901963587264e-5,1.1108885328964141e-8,-0.001418171968272546,3.008617815680982e-5,1.1186579824169502e-8,-0.0014177085861886171,3.0291942135319834e-5,1.133964646008498e-8,-0.001417293059956346,3.05967206924271e-5,1.1562003200599675e-8,-0.0014169650708668305,3.0968510049347896e-5,1.1830355814926381e-8,-0.0014167481369272308,3.135278601208798e-5,1.210581797947972e-8,-0.0014166384270926171,3.168371673086619e-5,1.2341922339142801e-8,-0.001416601011852032,3.1903068064781095e-5,1.2497950944243014e-8,-0.001416577597530908,3.197990561297152e-5,1.2552765821321245e-8,-0.001416504023895075,3.192205189348772e-5,1.2512782170450044e-8,-0.0014163303334027324,3.177388113563488e-5,1.241023118085146e-8,-0.0014160352058320256,3.160197306166359e-5,1.2292773285630224e-8,-0.00141563020412267,3.147525183817631e-5,1.2209223647116733e-8,-0.001415154182806351,3.144686499940079e-5,1.219665427065755e-8,-0.0014146612944608804,3.1542588220823e-5,1.2272337128455885e-8,-0.0014142068212377667,3.17574992652059e-5,1.2431711044918489e-8,-0.0014138345495532411,3.206030619328251e-5,1.2651790954942593e-8,-0.0014135683760217552,3.240316711893786e-5,1.2898338055852669e-8,-0.0014134095167311366,3.273394154711765e-5,1.3134557510283644e-8,-0.0014133391618895421,3.300757270905415e-5,1.3329020931988017e-8,-0.0014133249690354472,3.31939594183018e-5,1.34610409333419e-8,-0.0014133289896605121,3.328119077205221e-5,1.3522794560786908e-8,-0.001413314822460721,3.3274656159752014e-5,1.3518607273504532e-8,-0.0014132527079583823,3.3193518643689525e-5,1.3462443644765452e-8,-0.0014131223461608018,3.3066195373724894e-5,1.3374722960227905e-8,-0.001412913992766144,3.292604615376844e-5,1.3279258055873786e-8,-0.0014126286522506636,3.2807704536436217e-5,1.3200599557144906e-8,-0.0014122779793304208,3.274378481004234e-5,1.3161617579820244e-8,-0.0014118840527596287,3.276134215889836e-5,1.318093997452497e-8,-0.0014114785988180107,3.287744387268909e-5,1.3269863918137662e-8,-0.0014111005438624472,3.309364278437632e-5,1.3428626290622916e-8,-0.0014107903444190032,3.339035361538781e-5,1.3642698341029341e-8,-0.0014105801213301545,3.372401496582465e-5,1.388102605623399e-8,-0.0014104809172316352,3.403140528598448e-5,1.4099169038639324e-8,-0.0014104721889999377,3.4244418459823575e-5,1.4249623837810556e-8,-0.0014105012730983308,3.431313016865975e-5,1.4297897851110098e-8,-0.0014104976530675871,3.4227232153276674e-5,1.4237483279052317e-8,-0.0014103978203613941,3.4023102917727105e-5,1.409478258989675e-8,-0.0014101683041605874,3.37710788967813e-5,1.3920030577394821e-8,-0.0014098152448564095,3.3549879175073367e-5,1.3769043937615413e-8,-0.0014093780596700428,3.342166325020871e-5,1.3685419104499984e-8,-0.0014089135400348065,3.341756238018929e-5,1.3690309226175862e-8,-0.0014084788334548454,3.3535493238112093e-5,1.37811189010826e-8,-0.0014081186845767038,3.374669781848928e-5,1.3936497322555077e-8,-0.0014078585339577186,3.400633332696204e-5,1.4124144409347155e-8,-0.0014077028508541673,3.42645878758073e-5,1.4308805334751806e-8,-0.0014076373664685578,3.4476340111075574e-5,1.4459025629545484e-8,-0.0014076339312917433,3.4608360343685586e-5,1.4552028310657353e-8,-0.0014076568208633863,3.464345854701809e-5,1.457641017245677e-8,-0.001407669277186434,3.458141606859998e-5,1.4532638817739162e-8,-0.0014076391876356137,3.443714237304597e-5,1.4431695615751243e-8,-0.0014075431589499628,3.42369134134312e-5,1.4292440206539112e-8,-0.0014073687088618709,3.401369363319955e-5,1.4138337135936162e-8,-0.0014071148025871514,3.380247774740365e-5,1.3994150056515684e-8,-0.0014067912957618034,3.363619137526845e-5,1.3882976655598566e-8,-0.001406417785833611,3.3542132876375727e-5,1.3823657520053249e-8,-0.0014060220696082155,3.3538605100390865e-5,1.3828389059174037e-8,-0.0014056380007306819,3.363132267047934e-5,1.3900311168766636e-8,-0.0014053019647113963,3.3809476163547754e-5,1.403098639393186e-8,-0.0014050467952829435,3.404235090138576e-5,1.4198316878603361e-8,-0.0014048925106380783,3.427900969237467e-5,1.4366522015636952e-8,-0.0014048352740607154,3.4454830578689884e-5,1.4490717899879615e-8,-0.0014048394576729162,3.450785686877302e-5,1.452817586539771e-8,-0.0014048405652307403,3.4402642110255266e-5,1.4454790297227312e-8,-0.001404764049178016,3.415061768516878e-5,1.4279243287251102e-8,-0.0014045544794032856,3.381223147440442e-5,1.4044512501709342e-8,-0.001404199019517501,3.34753415760048e-5,1.3812662721467575e-8,-0.0014037308928993113,3.322120032523223e-5,1.3640780805957817e-8,-0.0014032126628860826,3.309751484531842e-5,1.3561886833224022e-8,-0.0014027118105852483,3.311012467826726e-5,1.3579138976547671e-8,-0.0014022815504324637,3.3230920394382554e-5,1.3671690150678322e-8,-0.0014019518800177807,3.341272421638346e-5,1.3805518700988216e-8,-0.0014017290980962978,3.360354473780993e-5,1.3943711301648619e-8,-0.0014016000243125806,3.375694744860536e-5,1.4053807349603574e-8,-0.001401537920759662,3.383830386691697e-5,1.4112051071441454e-8,-0.001401508516602354,3.38278961316903e-5,1.4105333153706423e-8,-0.0014014756088146735,3.372177220527613e-5,1.4031568509718768e-8,-0.0014014060660440912,3.353076489929489e-5,1.3898885331730495e-8,-0.0014012739860668733,3.327793091957308e-5,1.3723815329935129e-8,-0.0014010636973225197,3.2994742987017955e-5,1.3528667448275764e-8,-0.0014007713279077503,3.271646976821572e-5,1.3338315101143095e-8,-0.0014004048383781237,3.247734073521475e-5,1.3176767910392181e-8,-0.001399982720160362,3.230609707347399e-5,1.3063963984102755e-8,-0.0013995317115542282,3.222223618554686e-5,1.3013065431940527e-8,-0.0013990837824146862,3.223298100013896e-5,1.3028362806501945e-8,-0.0013986724408224693,3.2330914871978444e-5,1.310378977963939e-8,-0.0013983280897938944,3.249234472603756e-5,1.3222059543851011e-8,-0.0013980719157413676,3.26771022098923e-5,1.3354806377875613e-8,-0.001397908301055983,3.2831582187595467E-05,1.3464847011626819e-8,-0.001397817347062273,3.289747667782527e-5,1.3512189019105797e-8,-0.001397751512132713,3.28277047548693e-5,1.3464871106866769e-8,-0.0013976423203658295,3.260691801970788e-5,1.3312974762696126e-8,-0.0013974208313565252,3.2266892279175194e-5,1.3079220779759064e-8,-0.0013970462170215551,3.188350281420138e-5,1.2816866134850941e-8,-0.001396526429072313,3.15504266134185e-5,1.2591347003175733e-8,-0.0013959162362914407,3.134208482490942e-5,1.2454319312828303e-8,-0.0013952934212709952,3.12876940613365e-5,1.2425488800691024e-8,-0.0013947290248052181,3.1368994960239776e-5,1.2491155941132685e-8,-0.0013942677926455445,3.153656609401135e-5,1.2615901943459306e-8,-0.001393923604268954,3.173094679442987e-5,1.2757639356311874e-8,-0.0013936850245932673,3.189863660685751e-5,1.287894027262053e-8,-0.0013935243292366379,3.20005016684368e-5,1.295286703830315e-8,-0.0013934059148908537,3.2014351751696166e-5,1.2964583482053157e-8,-0.0013932926868055352,3.193431439306784e-5,1.29106853876459e-8,-0.0013931506171936453,3.176890244780789e-5,1.279767711238989e-8,-0.0013929521622677431,3.153852371658084e-5,1.2640170940633758e-8,-0.0013926789463034916,3.1272453315631026e-5,1.2458806214965603e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json deleted file mode 100644 index fb9e3f3..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_4.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":4000,"numberOfSamples":1000,"samples":[-0.0013923237156324762,3.10051313115372e-5,1.227772476593132e-8,-0.0013918913030339685,3.0771749723490945e-5,1.2121506307793586e-8,-0.0013913982265213998,3.060338976954708e-5,1.2011722091998317e-8,-0.0013908707040811456,3.052231698115309e-5,1.1963565646016446e-8,-0.001390341194667023,3.053811122326968e-5,1.198311590315129e-8,-0.0013898437960375297,3.064516965374932e-5,1.206567850949141e-8,-0.0013894089283486013,3.0821985171837794e-5,1.219550046257788e-8,-0.0013890577325521491,3.103246124664618e-5,1.234697235237071e-8,-0.001388796542557306,3.12295787680487e-5,1.2487412403812631e-8,-0.0013886120720738905,3.136210718279558e-5,1.2581786671309725e-8,-0.0013884688947041909,3.1385084006792996e-5,1.2599819994917749e-8,-0.0013883119458332274,3.127360474065753e-5,1.2525244839418013e-8,-0.0013880771300425396,3.103666131759266e-5,1.2365079707027838e-8,-0.0013877108551321243,3.072388276790292e-5,1.2154123117817592e-8,-0.0013871929430152989,3.0416606360292832e-5,1.1948741207200948e-8,-0.001386550391714903,3.0201205713724095e-5,1.1808429582903155e-8,-0.0013858506737383077,3.01357997768827e-5,1.1772803776767341e-8,-0.0013851759104291312,3.0229273883448915e-5,1.1847175892297428e-8,-0.001384592881220668,3.0443874540562336e-5,1.2004550146250928e-8,-0.0013841349373795028,3.0716035009628255e-5,1.2200281016361826e-8,-0.0013838008265632472,3.098058540822912e-5,1.2389009867920565e-8,-0.0013835645353088798,3.118712181259742e-5,1.2536034707260684e-8,-0.0013833877106148682,3.130621279611001e-5,1.2621499602221395e-8,-0.0013832296076505604,3.132862793970199e-5,1.2639667607070031e-8,-0.0013830533398082588,3.12615629520694e-5,1.2596119024238894e-8,-0.0013828292717648978,3.1124447793189026e-5,1.2504739208443173e-8,-0.001382536894290198,3.094526718665489e-5,1.238515875044467e-8,-0.001382166093661862,3.0757242436986546e-5,1.2260502826500002e-8,-0.0013817180828804721,3.059536687843876e-5,1.2155030689028627e-8,-0.0013812057662645032,3.0492356610198686e-5,1.2091316281131741e-8,-0.001380652965115511,3.0473944416237442e-5,1.2086924984252354e-8,-0.0013800918794172976,3.055405387965315e-5,1.2151015510603047e-8,-0.0013795585330693598,3.073089776278415e-5,1.2281664264941277e-8,-0.0013790865545975047,3.098519781713838e-5,1.2464780864846123e-8,-0.0013787002512115332,3.128152698517288e-5,1.2675280274755086e-8,-0.0013784083744284533,3.1573186320784075e-5,1.2880703491497357e-8,-0.0013782000273174174,3.181021399913377e-5,1.3046891803617532e-8,-0.0013780438976636682,3.19495350745652e-5,1.3144947940134445E-08,-0.0013778917807731484,3.1965865743675875e-5,1.3158522917130986e-8,-0.0013776871187557247,3.186125601721507e-5,1.3090054814128084e-8,-0.0013773784345414448,3.167005542915762e-5,1.2963872114938864e-8,-0.0013769355296510653,3.145540027821075e-5,1.2823586040322064e-8,-0.0013763632310821636,3.129451925350386e-5,1.2721957602677264e-8,-0.0013757051938257864,3.12548297658547e-5,1.2704580862237566e-8,-0.0013750325167593762,3.136980980661643e-5,1.2793513871866098e-8,-0.0013744200205683455,3.162705495398507e-5,1.297932656913296e-8,-0.001373921486003332,3.197529339541822e-5,1.3226141868971426e-8,-0.0013735559011152846,3.2345581764334165e-5,1.348632479099502e-8,-0.001373308834962327,3.267443076739067e-5,1.371638565723486e-8,-0.0013731440063741707,3.2918760928589506e-5,1.3887174851188765e-8,-0.0013730169969555664,3.306017025212218e-5,1.3986670884338575e-8,-0.001372885707505598,3.310177282032628e-5,1.4017645484980559e-8,-0.0013727161916267327,3.3062157152929236e-5,1.3993385650784678e-8,-0.0013724849650755444,3.2969528124314865e-5,1.3933613214447525e-8,-0.0013721795043743403,3.2857132549704686e-5,1.3861350571725312e-8,-0.001371798199420233,3.275975393211377e-5,1.3800541749182052e-8,-0.001371350267391638,3.2710546394120883e-5,1.3773879566233536e-8,-0.0013708554660210265,3.273748651144435e-5,1.3800332746004124e-8,-0.0013703429392595617,3.285908614832062e-5,1.3892159705457934e-8,-0.0013698482842253537,3.3079732505826116e-5,1.4051723281032588e-8,-0.0013694081789119867,3.33859216188847e-5,1.4269017354682299e-8,-0.0013690527752354515,3.3745292715916165e-5,1.4521206280880815e-8,-0.0013687973523058758,3.411026251376824e-5,1.4775341685527618e-8,-0.001368635864809167,3.442685430142285e-5,1.4994571911094206e-8,-0.001368539190809793,3.464725058126877e-5,1.5146764379461272e-8,-0.0013684596653155585,3.474271507765218e-5,1.5213225547749854e-8,-0.001368341412275528,3.471292842213015e-5,1.519483961915156e-8,-0.0013681340963783179,3.458864103148684e-5,1.5113572919781048e-8,-0.001367806641243441,3.442624486265195e-5,1.50084742827696e-8,-0.0013673571913396174,3.429481060775766e-5,1.492663952720893e-8,-0.0013668159712882611,3.425816744323766e-5,1.4910976651613327e-8,-0.0013662389537410337,3.4356679623137404e-5,1.4987969233571176e-8,-0.0013656929127156684,3.45948313307106e-5,1.5159539607809455e-8,-0.0013652362239514341,3.493996318255312e-5,1.540252269790559e-8,-0.0013649025854399397,3.533339206451559e-5,1.5676457844807535e-8,-0.001364694017006319,3.5709311516460834e-5,1.5936510012581336e-8,-0.0013645848390629765,3.6013317990182196e-5,1.6146000719145376e-8,-0.001364533006244744,3.6213785847992433e-5,1.6284003030435945e-8,-0.0013644928514191061,3.630413358810897e-5,1.6346724249025713e-8,-0.0013644247321696538,3.629841553527456e-5,1.6344369702902035e-8,-0.0013643001276189908,3.622421100892573e-5,1.6296216699097295e-8,-0.0013641030557909385,3.611585301733881e-5,1.6225972675099123e-8,-0.001363829489218644,3.6009284510185593e-5,1.6158272516967093e-8,-0.0013634861732545276,3.59384398039273e-5,1.6116209694143087e-8,-0.0013630895393642458,3.593237657339973e-5,1.6119355456194334e-8,-0.0013626646638417342,3.601230966247092e-5,1.618170797397962e-8,-0.001362243629102119,3.61880268938273e-5,1.6309266089582144e-8,-0.0013618622841067652,3.64538655276576e-5,1.6497393820657673e-8,-0.0013615544772974737,3.6785502430891855e-5,1.6728827194428735e-8,-0.0013613437161679772,3.713991173468955e-5,1.697386187057922e-8,-0.001361234021080087,3.746108911824493e-5,1.719439828116546e-8,-0.0013612037638524796,3.7692536866159856e-5,1.7352457140518053e-8,-0.001361206847971344,3.779396838960132e-5,1.742144636974678e-8,-0.0013611832374142226,3.7756031020244054e-5,1.7396011201743785e-8,-0.001361076191644119,3.7606086154550635e-5,1.7295762883204998e-8,-0.0013608496577971183,3.7401677631123275e-5,1.716059227166306e-8,-0.0013604990488915285,3.721408821670011e-5,1.7039232838343093e-8,-0.0013600520125571307,3.710835900255645e-5,1.697551683056106e-8,-0.0013595600099726545,3.712640498271043e-5,1.699695432191236e-8,-0.0013590841935409244,3.727760024130748e-5,1.71086275657347e-8,-0.001358679890204125,3.7538440708709115e-5,1.7293378278633092e-8,-0.00135838372132039,3.7860514706880266e-5,1.7517577456580113e-8,-0.0013582064390924846,3.818407848658802e-5,1.7740504047095585e-8,-0.0013581329272131877,3.845318903981301e-5,1.7924558906917483e-8,-0.0013581286541984837,3.862806850028087e-5,1.804345582610699e-8,-0.0013581498661130592,3.869159882723496e-5,1.8086397228283904e-8,-0.0013581539476281528,3.8649261142348775e-5,1.8057850041261867e-8,-0.0013581071226586598,3.8524189345567815e-5,1.7974088393725628e-8,-0.0013579883897526658,3.835008509330396e-5,1.7858356144320932e-8,-0.00135779018044884,3.8164384929534315e-5,1.7736239335068338e-8,-0.001357517027048097,3.800295694389865e-5,1.7632074255281237e-8,-0.0013571835099064594,3.789645286761099e-5,1.7566453802397066e-8,-0.0013568122323385436,3.786770844912354e-5,1.7554432313878906e-8,-0.0013564319146861178,3.792940545542113e-5,1.760394100218013e-8,-0.0013560751230173448,3.808144637277682e-5,1.771409396726125e-8,-0.001355774723096159,3.830809315615486e-5,1.7873437098055103e-8,-0.0013555581129589143,3.85759738967685e-5,1.805883775217439e-8,-0.0013554390847187276,3.883530834118127e-5,1.8236503204011578e-8,-0.001355409076240439,3.9027250633763036e-5,1.836699003058032e-8,-0.0013554321238842734,3.909874292882928e-5,1.8415131641263553e-8,-0.0013554490528045462,3.90218298649933e-5,1.836291168093209e-8,-0.0013553934777036426,3.88088274293409e-5,1.8219570358978306e-8,-0.0013552148739573212,3.8513364752411945e-5,1.8022193158569097e-8,-0.0013548976458011926,3.821394753241361e-5,1.7824422483376295e-8,-0.0013544662886432806,3.7987376502045904e-5,1.767824374087245e-8,-0.001353975167144596,3.788495877740173e-5,1.7617747380746665e-8,-0.0013534897169433626,3.792082265498023e-5,1.765132964873523e-8,-0.0013530679623867672,3.807359000944715e-5,1.776318309780284e-8,-0.0013527479846985185,3.82970266342332e-5,1.7920945154219862e-8,-0.0013525427737545379,3.8534126622979775e-5,1.8085549434599747e-8,-0.0013524413684721215,3.8730475725509086e-5,1.8220348872787433e-8,-0.0013524143580498815,3.8844550459139665e-5,1.829793515757917e-8,-0.0013524218120327396,3.885388259987187e-5,1.830403299861606e-8,-0.0013524218425320289,3.8756778190668846e-5,1.8238389323156565e-8,-0.0013523781464381873,3.857000249417001e-5,1.8113029207340084e-8,-0.0013522652859119853,3.832360437107422e-5,1.7948697828581297e-8,-0.0013520711816035556,3.805446144349454e-5,1.7770522740602527e-8,-0.0013517970474576544,3.7800026057570636e-5,1.760383303417335e-8,-0.0013514555502732262,3.759328234789039e-5,1.7470765883749638e-8,-0.0013510681406707162,3.745922197053802e-5,1.7387859156658665e-8,-0.0013506622145259056,3.741251692416933e-5,1.7364450412879974e-8,-0.0013502682953014952,3.7455843878886433e-5,1.7401577299135237e-8,-0.0013499170098815133,3.757843888576176e-5,1.749114206947162e-8,-0.0013496352319221148,3.775487577483726e-5,1.7615323797154796e-8,-0.001349440649488639,3.794495617766193e-5,1.7746750386563e-8,-0.0013493347424008647,3.809671819615431e-5,1.7850659872577422e-8,-0.001349295890582923,3.8155046902679206e-5,1.7890635669466993e-8,-0.0013492766959825838,3.807708327935155e-5,1.783874654599152e-8,-0.0013492110735612106,3.785133903622449e-5,1.768815260529381e-8,-0.001349033855976422,3.751108479626499e-5,1.7461969909133265e-8,-0.0013487069795288752,3.71303580506857e-5,1.7210535401503925e-8,-0.0013482379377772538,3.67993136705882e-5,1.6994726215196717e-8,-0.001347678208637462,3.659042766946213e-5,1.6863046213677397e-8,-0.0013471024913643088,3.6534216931232214e-5,1.6835204236635903e-8,-0.0013465817610538201,3.661531138061667e-5,1.6899639174625656e-8,-0.0013461637307948591,3.67855921967629e-5,1.702274689456107e-8,-0.0013458659040266978,3.698362593147122e-5,1.716236688366139e-8,-0.0013456786096961092,3.715150481672573e-5,1.7279353443021854e-8,-0.0013455729607305563,3.7245547989349e-5,1.7344764650321256e-8,-0.0013455098437546319,3.724113849988471e-5,1.7342896275356996e-8,-0.0013454479816408654,3.713333537401668e-5,1.7271384802952297e-8,-0.0013453504339775678,3.693472237791048e-5,1.7139497446621565e-8,-0.0013451893773290563,3.66714125531848e-5,1.69653115025737e-8,-0.001344949053305138,3.6377906041960216e-5,1.677225728879621e-8,-0.0013446268270830342,3.6091487557028635e-5,1.658542561013439e-8,-0.0013442324429496473,3.584683872566402e-5,1.642801203779135e-8,-0.0013437858000863968,3.567151610583387e-5,1.6318286339007397e-8,-0.0013433138090793446,3.5582718952246464e-5,1.6267381969080993e-8,-0.0013428468552322856,3.5585336135370534e-5,1.6277959343087233e-8,-0.0013424151246411572,3.567102736278635e-5,1.6343650045473796e-8,-0.0013420448217986622,3.581815905326798e-5,1.6449191850671144e-8,-0.0013417540843769415,3.5992621037087415e-5,1.6571231526067074e-8,-0.0013415482762467888,3.6150103914661236e-5,1.6680073457991738e-8,-0.0013414149103668283,3.624123041516313e-5,1.6743183400191018e-8,-0.0013413198868642417,3.622112481074397e-5,1.6731446982117347e-8,-0.00134120845189209,3.606369069563323e-5,1.662842184473864e-8,-0.0013410151654745213,3.577732086480887e-5,1.644054815603201e-8,-0.0013406846000409867,3.5413460407537786e-5,1.6202722853245097e-8,-0.0013401964609990825,3.505743910760731e-5,1.597215167212452e-8,-0.001339580425708274,3.479926151774641e-5,1.5808809507200667e-8,-0.0013389081886428587,3.4697739505285814e-5,1.5751417893888703e-8,-0.0013382653066040724,3.475913717423584e-5,1.5803205836748927e-8,-0.0013377198411129057,3.494136132320177e-5,1.593492656261746e-8,-0.0013373043650111932,3.517656334298736e-5,1.610030358752367e-8,-0.001337015439682562,3.5396327466275055e-5,1.6253166407767607e-8,-0.0013368239990238354,3.5548502293726705e-5,1.6358821610884963e-8,-0.0013366882809558854,3.560374914900627e-5,1.639832805964985e-8,-0.001336564467218173,3.55549452941308e-5,1.636783817572624e-8,-0.001336413776905145,3.541320348266067e-5,1.627564290331889e-8,-0.0013362066349266496,3.520293709170862e-5,1.6138666700184393e-8,-0.0013359249232274644,3.4956909941254224e-5,1.5979096337218204e-8,-0.001335562924155841,3.4711420854670354e-5,1.582122151313896e-8,-0.0013351271377057652,3.4501629448674695e-5,1.568840971408109e-8,-0.0013346349529169633,3.435711455278746e-5,1.5600199028356044e-8,-0.0013341121333342526,3.429797828590833e-5,1.5569686455152157e-8,-0.0013335892705868344,3.433199575848479e-5,1.5601580165570786e-8,-0.0013330975858291425,3.4453164621146024e-5,1.5691228226897585e-8,-0.0013326644706178011,3.464175000353744e-5,1.5824749599259128e-8,-0.0013323090899715643,3.4865868704546576e-5,1.5980301002253026e-8,-0.001332038338966892,3.508467362609938e-5,1.6130447896255385e-8,-0.0013318434113794785,3.525330077002587e-5,1.6245627748951825e-8,-0.0013316975322695253,3.5330051294305984e-5,1.629891139049964e-8,-0.001331556286785722,3.528619312938393e-5,1.6272293810409786e-8,-0.0013313628892067757,3.5117465072944155e-5,1.6163989779264318e-8,-0.0013310606240185723,3.485372509921916e-5,1.5994525193249938e-8,-0.001330612092239529,3.4560074860567006e-5,1.5807325007709106e-8,-0.0013300188819388664,3.432251695865668e-5,1.5659203035008636e-8,-0.0013293294672254824,3.4218415257834896e-5,1.5600856484188996e-8,-0.0013286258106659328,3.4284781738908746e-5,1.565595284409048e-8,-0.0013279927272366466,3.45034557497139e-5,1.5811466092247673e-8,-0.001327487245815521,3.481218305757908e-5,1.6025241776050835e-8,-0.0013271243297834456,3.5132573390047304e-5,1.6244759544611692e-8,-0.0013268819281744182,3.539726971412401e-5,1.6425301589944376e-8,-0.0013267165573191055,3.556482846968116e-5,1.6539830337867083e-8,-0.0013265791200544272,3.5621827657685704e-5,1.65802341767557e-8,-0.0013264257556151145,3.5577571686315266e-5,1.6553560503722946e-8,-0.0013262233226004878,3.5456646993180176e-5,1.6476832678516347e-8,-0.0013259512363842734,3.529220284957108e-5,1.637245418374682e-8,-0.001325601512184336,3.512067149730725e-5,1.626470172512635e-8,-0.0013251780734556981,3.497753493359976e-5,1.6177001160356565e-8,-0.0013246955832461917,3.4893601735033355e-5,1.6129548566876927e-8,-0.0013241776457557696,3.48914999010468e-5,1.6137021291032074e-8,-0.001323654076904617,3.4982458503977466e-5,1.6206426975212878e-8,-0.001323157041794967,3.5163901163299414e-5,1.633548781930137e-8,-0.0013227162371304468,3.5418581049974166e-5,1.651211397605036e-8,-0.001322353687199993,3.571581068946272e-5,1.6715367990939248e-8,-0.0013220789387146789,3.601504810064792e-5,1.6918061706656873e-8,-0.0013218855424575772,3.627176280866538e-5,1.7090842854582353e-8,-0.0013217496703317407,3.644508967537851e-5,1.720733490398808e-8,-0.0013216315923340778,3.65064979819164e-5,1.7249749168249524e-8,-0.0013214807524120568,3.644842841848515e-5,1.7214291107647377e-8,-0.0013212451222116156,3.6291038759722376e-5,1.711523751546295e-8,-0.0013208846495029996,3.60839095678969e-5,1.6985751198887913e-8,-0.0013203863550454039,3.5898854230369885e-5,1.6873006904681262e-8,-0.0013197752519399667,3.581166273538234e-5,1.682623169287687e-8,-0.0013191132255276836,3.587626651540886e-5,1.6879911863534467e-8,-0.0013184815790603076,3.610241659999537e-5,1.7039381967031404e-8,-0.0013179528033887597,3.645020189165614e-5,1.7277474450637978e-8,-0.0013175658344386403,3.684610326885073e-5,1.7545256584706124e-8,-0.0013173174371027003,3.721139594219093e-5,1.7790800848516823e-8,-0.0013171711591591722,3.7487162393554715e-5,1.797564920289059e-8,-0.0013170751083556422,3.764583818573417e-5,1.8082333520008842e-8,-0.0013169783809209286,3.768958704883004e-5,1.8113134460390254e-8,-0.001316841058972772,3.764169488899078e-5,1.8084193168326844e-8,-0.001316637900558923,3.7536910324560003e-5,1.8018963620713753e-8,-0.0013163581227781179,3.74137736701684e-5,1.7943079177386814e-8,-0.0013160036253867771,3.730942928907114e-5,1.7880963442603383e-8,-0.0013155869869080489,3.725613444561233e-5,1.7853614375631473e-8,-0.0013151295414577234,3.7278505354125304e-5,1.787686235519351e-8,-0.0013146592408699255,3.7390914042800114e-5,1.7959684433815758e-8,-0.0013142077768859126,3.759497729467439e-5,1.8102557862085905e-8,-0.0013138065061219567,3.787768395385184e-5,1.829626511989185e-8,-0.0013134811566555547,3.821118959139425e-5,1.852186865762894e-8,-0.0013132460042088404,3.855535190871637e-5,1.8752556581883928e-8,-0.0013130988888896927,3.886358760935178e-5,1.895768052314085e-8,-0.0013130187880983333,3.9091668685304416e-5,1.9108648012779857e-8,-0.0013129673945528086,3.920788927157972e-5,1.9185567048502283e-8,-0.001312895240496861,3.920217618512819e-5,1.918302681873874e-8,-0.001312751730863596,3.9091588709663886e-5,1.911338071545348e-8,-0.0013124973851131767,3.892009752658912e-5,1.9006243630838438e-8,-0.0013121156803837925,3.875132474201483e-5,1.8903462645629538e-8,-0.0013116210944716046,3.865427657691962e-5,1.884969011796569e-8,-0.0013110596023093825,3.868436788208665e-5,1.8880112079492577e-8,-0.0013104989534392041,3.8865074759319735e-5,1.9008779400316116e-8,-0.0013100096397849926,3.917783531577995e-5,1.9222392671536106e-8,-0.001309642829716195,3.9566441267412706e-5,1.9483464693369486e-8,-0.0013094148936341004,3.995569860122959e-5,1.974262974906959e-8,-0.0013093055437344233,4.027611457180882e-5,1.9954738594955732e-8,-0.001309269039156997,4.048329051082387e-5,2.0091415425642147e-8,-0.0013092512762208149,4.0565121305456764e-5,2.0145608286767512e-8,-0.001309204630257768,4.053753924890765e-5,2.012862157893427e-8,-0.0013090962818779034,4.043433842048082e-5,2.0063277178960123e-8,-0.0013089102465701447,4.029664197237238e-5,1.997689758602726e-8,-0.0013086455823332675,4.0164989376255385e-5,1.9896096938048397e-8,-0.0013083132488531785,4.0074480065967925e-5,1.984365052124649e-8,-0.0013079330725531747,4.005204604799757e-5,1.9836785608003348e-8,-0.0013075312073712847,4.011466197911539e-5,1.9886069633644747e-8,-0.001307137746835643,4.026767679567208e-5,1.9994358344677895e-8,-0.0013067837953618638,4.0503094151805196e-5,2.01557240211866e-8,-0.001306497350497541,4.079836018355392e-5,2.0354765247593485e-8,-0.0013062978171497592,4.111688713507512e-5,2.0567103458832157e-8,-0.0013061898867567608,4.141184316071489e-5,2.076202115095573e-8,-0.0013061586859034154,4.163420723263055e-5,2.0907824211338083e-8,-0.001306168888940125,4.174442656977121e-5,2.097944515467198e-8,-0.0013061699709006594,4.1724685296821706e-5,2.0966324787464215e-8,-0.0013061076049721034,4.1587191985985025e-5,2.0877595932876798e-8,-0.0013059383156452651,4.137443165518275e-5,2.0741958445759947e-8,-0.0013056425938951044,4.115010375057371e-5,2.060146632532868e-8,-0.0013052319085176942,4.098302152604378e-5,2.0500810520890916e-8,-0.001304747148248314,4.092874780265062e-5,2.0475326047336553e-8,-0.0013042487662768554,4.101434730128175e-5,2.0541288681716853e-8,-0.0013038012226081626,4.1230688242288156e-5,2.0691321547541416e-8,-0.0013034559571685768,4.153480564579156e-5,2.0896370294196396e-8,-0.0013032379646765557,4.186207205593781e-5,2.111390047210881e-8,-0.0013031404096450596,4.214456168589532e-5,2.1299885763046148e-8,-0.0013031290193728036,4.232935992827865e-5,2.1420571741681682e-8,-0.0013031540596875038,4.23905340975399e-5,2.1460031357444974e-8,-0.0013031647722243158,4.233156537247573e-5,2.1421513055924925e-8,-0.0013031210288061141,4.217942322107834e-5,2.132339132411696e-8,-0.0013029993698451085,4.19743987627646e-5,2.1192421768565933e-8,-0.0013027936105723457,4.175999540557228e-5,2.1057114924379603e-8,-0.0013025120277159838,4.157542941681899e-5,2.094288448231488e-8,-0.0013021733414850117,4.145125605159004e-5,2.0869268627645957e-8,-0.001301802931785606,4.1407329810052036e-5,2.08486684580033e-8,-0.0013014297605223135,4.1451908374797514e-5,2.0885812894513818e-8,-0.001301083724057496,4.158098532303902e-5,2.097737756976615e-8,-0.0013007927456693646,4.177756479690925e-5,2.1111607157953057e-8,-0.0013005788777021498,4.201134797256275e-5,2.126826146359011e-8,-0.0013004531008736547,4.224008178027535e-5,2.1419659516259312e-8,-0.0013004095063849311,4.241435176037529e-5,2.1533904163364884e-8,-0.001300421059288809,4.248719684661846e-5,2.1581120022324038e-8,-0.0013004404355749176,4.2427837091928494e-5,2.154224223145945e-8,-0.0013004089398097013,4.223528221728633e-5,2.1417667998620045e-8,-0.001300273032166463,4.194483810430357e-5,2.1231287584532605e-8,-0.0013000028044365167,4.162178844603964e-5,2.1026176296912758e-8,-0.0012996038559836165,4.13426408192214e-5,2.0852193780685487e-8,-0.0012991166051237216,4.117141562699113e-5,2.075042537733095e-8,-0.0012986036072820868,4.11409724530234e-5,2.0741091404972655e-8,-0.00129813093698426,4.1245817779201306e-5,2.0819172199719124e-8,-0.0012977508063343123,4.144686388868798e-5,2.095795336418839e-8,-0.001297490230837804,4.168441992169005e-5,2.1117875653405696e-8,-0.0012973474395914163,4.1894427134593377e-5,2.1257279803455193e-8,-0.001297295439153459,4.2023506126082147e-5,2.1342116234441085e-8,-0.001297290782074011,4.2039616230905444e-5,2.135260920238544e-8,-0.0012972848326498105,4.193654440887813e-5,2.1285844007437435e-8,-0.0012972345579685953,4.173200901824314e-5,2.1154255926592056e-8,-0.0012971103085002236,4.146082617494708e-5,2.0981029477300475e-8,-0.0012968992859630204,4.116578087591e-5,2.0794135694006106e-8,-0.0012966049398672192,4.0888917956883526e-5,2.062073980233298e-8,-0.0012962436295018886,4.066503581169255e-5,2.048307865442981e-8,-0.0012958401889284622,4.051793533458231e-5,2.039611146731544e-8,-0.0012954236654983476,4.045897416475759e-5,2.036662737785466e-8,-0.001295023782419015,4.0486965044612695e-5,2.039320583348045e-8,-0.0012946679941183582,4.058855472756083e-5,2.04665171281949e-8,-0.001294378612670228,4.0738730472340536e-5,2.056977240662803e-8,-0.0012941693814056939,4.0901748941956324e-5,2.0679500965812705e-8,-0.0012940411451917645,4.1033526442706687e-5,2.0767257575044023e-8,-0.0012939771911233996,4.108715604463087e-5,2.0803239961642293e-8,-0.0012939403977219072,4.102298074380838e-5,2.0762689854466084e-8,-0.0012938758566673656,4.082263405184535e-5,2.0634736809638925e-8,-0.0012937224662835883,4.050242606522025e-5,2.04308134609819e-8,-0.0012934330065076513,4.0117530900919203e-5,2.0187204767311665e-8,-0.00129299496709262,3.974958987689844e-5,1.995693470396842e-8,-0.0012924399284722028,3.947942732467301e-5,1.97920270271869e-8,-0.0012918341252307118,3.935776650460108e-5,1.9724509449887175e-8,-0.0012912547182092019,3.938930857514804e-5,1.97562193674393e-8,-0.001290764690673244,3.9536318616132313E-05,1.9861433777957795e-8,-0.0012903973760540492,3.973598386964465e-5,1.999850762256767e-8,-0.001290153512484858,3.992107605315687e-5,2.0123564778314824e-8,-0.0012900074223779303,4.003630507822636e-5,2.0201177921784495e-8,-0.0012899173653183767,4.0047651738485965e-5,2.0210256251888748e-8,-0.001289836338458807,3.9945200597234635e-5,2.0145554957262593e-8,-0.0012897212998023743,3.9741174964429464E-05,2.0016045030261284e-8,-0.0012895399514628268,3.946480109359224e-5,1.984132894245313e-8,-0.001289274703109967,3.915530609271689e-5,1.9647018285539673e-8,-0.0012889236983102278,3.885435148165427e-5,1.9459904493796818e-8,-0.0012884992067051736,3.8599204907948656e-5,1.9303690980758627e-8,-0.0012880241094008248,3.841760919532316e-5,1.919581678542283e-8,-0.0012875274288492854,3.832480054634275e-5,1.9145604099175267e-8,-0.0012870398381923532,3.8322598965528926e-5,1.9153682307136752e-8,-0.001286589752637628,3.840001624621069e-5,1.921238243257403e-8,-0.001286200095515784,3.853470660398659e-5,1.9306731004946026e-8,-0.0012858854886256378,3.86948874374072e-5,1.9415831342562718e-8,-0.001285649499877651,3.8841815281819475e-5,1.9514646939711093e-8,-0.0012854817125208561,3.893347048250045e-5,1.9576511347082232e-8,-0.0012853550995704204,3.893063802338816e-5,1.957702413451274e-8,-0.0012852255062502298,3.880636244566652e-5,1.9499927026725242e-8,-0.0012850362965845573,3.855807120421911e-5,1.9344575221523857e-8,-0.0012847311762881526,3.821819412132976e-5,1.9132471126811794e-8,-0.0012842747415224602,3.785512960173213e-5,1.8907745295762985e-8,-0.0012836727720354248,3.755682902569352e-5,1.8726620068053298e-8,-0.0012829784848701268,3.739895052372073e-5,1.863702330001396e-8,-0.0012822761530718633,3.7413406126274804e-5,1.86584821716486e-8,-0.0012816490975353263,3.7576622715437714e-5,1.8774747376732938e-8,-0.0012811506382189232,3.782352818577273e-5,1.8943030423325083e-8,-0.001280792436308164,3.8075703038799706e-5,1.9112370169816575e-8,-0.0012805506354879592,3.8266803390174146e-5,1.924016463208864e-8,-0.001280380738437669,3.835616719714332e-5,1.9300925603521577e-8,-0.0012802324630361284,3.833113206068958e-5,1.9287565495948508e-8,-0.0012800605197691444,3.820264194508425e-5,1.920823586964087e-8,-0.0012798308757682997,3.799830026151315e-5,1.9081529959526996e-8,-0.001279523586304221,3.775524645033635e-5,1.8931707405877297e-8,-0.0012791333774328948,3.751366233471992e-5,1.8784512978711527e-8,-0.0012786686262423056,3.731102412992637e-5,1.866362274807214e-8,-0.001278148993439162,3.717726455085912e-5,1.858772206348688e-8,-0.001277601942460214,3.7131143654458575e-5,1.8568311190285357e-8,-0.001277058498171101,3.717813474632904e-5,1.860839408251708e-8,-0.0012765487555219646,3.7310038774287194e-5,1.8702216632045073e-8,-0.0012760977084929888,3.750624505138479e-5,1.8836075192321827e-8,-0.0012757217769639956,3.773626898786361e-5,1.8990020553034313e-8,-0.0012754261510291623,3.796321117292025e-5,1.9140234836138346e-8,-0.0012752029370164196,3.814797161205375e-5,1.92619071682081e-8,-0.0012750300928311285,3.825433491231409e-5,1.9332571089335484e-8,-0.0012748715426223701,3.825537269909844e-5,1.933609650898041e-8,-0.0012746797344262949,3.814138317428424e-5,1.926746861138821e-8,-0.0012744025805871105,3.7928235466975745e-5,1.9137729803848053e-8,-0.0012739963106319753,3.76626292022581e-5,1.897701998328715e-8,-0.0012734431088101711,3.741827327675125e-5,1.8832033009774208e-8,-0.0012727667106644165,3.7277449564075795e-5,1.875439150470419e-8,-0.0012720341118107905,3.730026444876515e-5,1.8781318347441222e-8,-0.0012713356167803904,3.749648014380484e-5,1.8917966913490027e-8,-0.0012707503868975216,3.7818967997163176e-5,1.913345694695096e-8,-0.0012703173742792029,3.818460780063819e-5,1.937431495323869e-8,-0.0012700276843224567,3.850870965846999e-5,1.958648929745315e-8,-0.0012698377681131297,3.873234768920965e-5,1.9732821725893906e-8,-0.0012696906468235986,3.883226562099348e-5,1.9799315570624595e-8,-0.0012695333572401244,3.881646913695297e-5,1.9792123553590806e-8,-0.0012693264687479164,3.8713735516634753e-5,1.9730552119127156e-8,-0.0012690470332673868,3.856312435152506e-5,1.9640099461015192e-8,-0.0012686878191508922,3.840594630060172e-5,1.9547213377593627E-08,-0.0012682550883168057,3.8280251328920796e-5,1.9475836828836382e-8,-0.0012677659821863632,3.8216972883763434e-5,1.9445125675948716e-8,-0.0012672456478990807,3.823702573972687e-5,1.9467782522189376e-8,-0.0012667239315270157,3.834915450270301e-5,1.954879813655444e-8,-0.0012662315252516165,3.8548712365379255e-5,1.9684700622829385e-8,-0.0012657956741872701,3.881779556352557e-5,1.9863631777743846E-08,-0.0012654358895180374,3.9127111421915734e-5,2.0066562567351532e-8,-0.0012651603219259492,3.943960149495701e-5,2.0269701099621573e-8,-0.0012649633922718845,3.97155188282893e-5,2.044787773900412e-8,-0.0012648251191054683,3.991847051986315e-5,2.0578512385264233e-8,-0.0012647124020133814,4.002181530954318e-5,2.0645672703362345e-8,-0.0012645824423290432,4.0014854271467307e-5,2.0643806946391964e-8,-0.001264388687972703,3.99081829052254e-5,2.0580779083148893e-8,-0.001264089784429187,3.973682895821391e-5,2.0479457047750557e-8,-0.0012636612589438738,3.955863316563664e-5,2.0376410433125773e-8,-0.001263107692385635,3.944474943991824e-5,2.031587286383709e-8,-0.0012624700916807313,3.9460627398303827e-5,2.0337965483915675e-8,-0.0012618210646095807,3.9641206055020366e-5,2.0463436185732815e-8,-0.0012612438544760331,3.997186027742948e-5,2.0682014530823786e-8,-0.0012608019231333165,4.03889145758586e-5,2.095293879084057e-8,-0.001260515403514942,4.080331509500292e-5,2.1219900523197546e-8,-0.0012603580066779792,4.1134769690694334e-5,2.143251915066937e-8,-0.0012602736669382706,4.133709908764442e-5,2.156229199212994e-8,-0.0012602001674625438,4.140455790552599e-5,2.1606510199617428e-8,-0.0012600871138250655,4.13627425982667e-5,2.1582334626039323e-8,-0.0012599037723692542,4.125395520943257e-5,2.1517286350261602e-8,-0.001259639059405887,4.112448324373034e-5,2.1440993984703374e-8,-0.0012592978126801822,4.1016374406620794e-5,2.1379934028673295e-8,-0.0012588963729254486,4.096310517242658e-5,2.1354792900167895e-8,-0.0012584587728795547,4.0987516848376617e-5,2.13793433801656e-8,-0.0012580135545439072,4.110070043061135e-5,2.145990419081642e-8,-0.001257590729174874,4.130124851631068e-5,2.1594960240885516e-8,-0.0012572184068382751,4.1574933436424366e-5,2.1774990856265992e-8,-0.0012569188758809874,4.1895365866185666e-5,2.198290829395347e-8,-0.0012567044061644376,4.2226400284913416e-5,2.2195638913385633e-8,-0.0012565736154616957,4.252676325544257e-5,2.2387154231576545e-8,-0.0012565095347204847,4.275674007069808e-5,2.2532803702984725e-8,-0.001256480413149145,4.2886024148070224e-5,2.261430451888185e-8,-0.0012564438185601924,4.290116127527485e-5,2.262433259898739e-8,-0.0012563537977570908,4.2810748157597085e-5,2.256953566001536e-8,-0.0012561701266762151,4.264685474788228e-5,2.2471059965738813e-8,-0.001255868216795208,4.246161786198218e-5,2.2362052663867524e-8,-0.00125544775922725,4.2318356345838705e-5,2.2281882031267264e-8,-0.0012549374800614776,4.22774052795677e-5,2.226731056823057e-8,-0.0012543928884045982,4.237873413357958e-5,2.2341924508824796e-8,-0.0012538846382849707,4.262624486160383e-5,2.2506767656905367e-8,-0.0012534783871114205,4.2981135163356555e-5,2.2736596297391955e-8,-0.0012532126561929605,4.3370682260662835e-5,2.2985558206766268e-8,-0.0012530852538086268,4.3711798272939364e-5,2.3201876301994538e-8,-0.0012530559769681426,4.393918260812166e-5,2.3345305957001018e-8,-0.0012530638749481211,4.4024288239515566e-5,2.3398863033464984e-8,-0.0012530490271740113,4.3977672971138264e-5,2.3370162208987406e-8,-0.0012529684380834512,4.383778762251783e-5,2.3284209882351702e-8,-0.0012528018888721966,4.365500575092296e-5,2.317318439808869e-8,-0.001252549834499636,4.34782797526141e-5,2.3067930135885604e-8,-0.0012522276998212633,4.334721846604825e-5,2.2992993745712078e-8,-0.0012518599576908918,4.3288848879161106e-5,2.2964722563118695e-8,-0.0012514754687159037,4.331706400168195e-5,2.299109201556656e-8,-0.0012511041057524219,4.343305080609753e-5,2.3072114029472213e-8,-0.0012507740089569535,4.362583037811218e-5,2.3200256491004583e-8,-0.001250508740600051,4.387284960062057e-5,2.336086149484763e-8,-0.0012503238892904954,4.414121645053139e-5,2.353297738143989e-8,-0.0012502232383400124,4.439057639247119e-5,2.3691245534858623e-8,-0.0012501953913701654,4.4578519987771495e-5,2.380937649691334e-8,-0.0012502124466062187,4.466862199857083e-5,2.386522426953918e-8,-0.0012502324655709908,4.463985453790723e-5,2.38466230351851e-8,-0.0012502066668911443,4.449465916127025e-5,2.3756267679178933e-8,-0.0012500904907569506,4.4262301368479445e-5,2.3613540810084584e-8,-0.0012498556988007213,4.3995081325114545e-5,2.3451824758728542e-8,-0.0012494996714732477,4.375734202677175e-5,2.3311357072906797e-8,-0.0012490486343557058,4.360978994232384e-5,2.3229326501100328e-8,-0.0012485532799728183,4.359328030608507e-5,2.3229896399582473e-8,-0.001248077323762565,4.3716595091107244e-5,2.331696995481848e-8,-0.0012476814413027032,4.395208150458591e-5,2.3471965518926978e-8,-0.0012474066926813987,4.424143994728845e-5,2.3657815110514976e-8,-0.001247262641945451,4.4511219507711075e-5,2.3828756487483382e-8,-0.0012472248755787513,4.469382181566311e-5,2.3943301525145774e-8,-0.0012472435198697964,4.474664503382738e-5,2.3975912178036033e-8,-0.001247259506344416,4.466205719091103e-5,2.3922954185837815e-8,-0.0012472217473297215,4.446513739596869e-5,2.3801066644975018e-8,-0.0012470987187946957,4.420202198632878e-5,2.3639715221988536e-8,-0.0012468817729012385,4.392519162060175e-5,2.3471897838937096e-8,-0.0012465817445801888,4.368137901444268e-5,2.3326586331146017e-8,-0.0012462224178688196,4.3504603084736476e-5,2.3224476425034505e-8,-0.0012458339394664786,4.3413868956406416e-5,2.317671064191687e-8,-0.0012454477067935401,4.341371210977519e-5,2.318536732956266e-8,-0.001245092875503066,4.349582099726864e-5,2.3244572533892913e-8,-0.001244793861427751,4.364070138997217e-5,2.334159650208275e-8,-0.0012445680145702208,4.381919330597018e-5,2.3457855646996076e-8,-0.0012444228840729505,4.399437802864513e-5,2.35701808197754e-8,-0.0012443530695937283,4.4124913953168016e-5,2.3652983748257247e-8,-0.0012443375127046577,4.4170905959475854e-5,2.36819578137255e-8,-0.001244339050323051,4.410267397222573e-5,2.3639490947179656e-8,-0.0012443085409083597,4.391102098493597e-5,2.352090842966235e-8,-0.0012441949428326805,4.361529559426061e-5,2.3339274923289387e-8,-0.0012439599109511782,4.3264248999509696e-5,2.3125688607710063e-8,-0.0012435919172900148,4.292632418466513e-5,2.2923014333021052e-8,-0.0012431132807987672,4.2670863701421686e-5,2.2774032688701237e-8,-0.0012425758812366372,4.2547004754978845e-5,2.2708303443627026e-8,-0.001242046681417017,4.256875652229016e-5,2.273310098467663e-8,-0.0012415887940260054,4.2711639999148036e-5,2.2831736522023835e-8,-0.0012412448848635037,4.292095325018456e-5,2.2969151481539737e-8,-0.0012410276081992223,4.312771971755229e-5,2.310214052847942e-8,-0.0012409187405165644,4.3266945611404475e-5,2.3190749585606232e-8,-0.001240876179833917,4.329319757536537e-5,2.3207763152117412e-8,-0.0012408462077011405,4.3189822733976015e-5,2.314410023143346e-8,-0.001240777320283415,4.297005585476495e-5,2.3009154427995445e-8,-0.0012406317702474867,4.267059575677806e-5,2.2826536022629307e-8,-0.0012403919863629748,4.234042689642282e-5,2.26269926746929e-8,-0.0012400610415698615,4.2028799199970334e-5,2.2440951581700866e-8,-0.0012396584394359302,4.1775753442481906e-5,2.229275950494211e-8,-0.001239213642370792,4.160681735016447e-5,2.2197568374873713e-8,-0.001238759622997134,4.153164993599383e-5,2.21606545642313e-8,-0.0012383277669794706,4.154532626799311e-5,2.217831390256571e-8,-0.0012379443945620973,4.163077699858882e-5,2.223941511624005e-8,-0.0012376284470835346,4.17613701854737e-5,2.2327028899360917e-8,-0.0012373896362990083,4.190335157601163e-5,2.2420000164546246e-8,-0.001237226498897373,4.201852746249583e-5,2.2494706995441768e-8,-0.0012371242703294284,4.2068080603654364e-5,2.2527507113518604e-8,-0.0012370533291036505,4.201858038815096e-5,2.249845761104157e-8,-0.001236970018387961,4.18506164139745e-5,2.239652980094868e-8,-0.0012368223070618539,4.1568658962976625e-5,2.2225481522563593e-8,-0.0012365619116138991,4.120801712255095e-5,2.2007914498811416e-8,-0.0012361611416612153,4.083280694899721e-5,2.1783828379414836e-8,-0.001235627714205694,4.052073423663693e-5,2.1601104914924004e-8,-0.0012350082702082678,4.0337708897671565e-5,2.149979267276202e-8,-0.0012343757042772982,4.031356310619789e-5,2.1497194944095898e-8,-0.0012338050721628741,4.043155020851939e-5,2.1581628688838263e-8,-0.001233349834870539,4.063630930677973e-5,2.1717708568439122e-8,-0.0012330286624901638,4.0854394434720134e-5,2.1859385815913868e-8,-0.001232825543872876,4.1016780529853954e-5,2.1964061307544442e-8,-0.0012326994687433222,4.1075328421856106e-5,2.20027389188401e-8,-0.001232597984556413,4.1010377237678075e-5,2.196447509602127e-8,-0.0012324701701386766,4.083038763729262e-5,2.1855784862297425e-8,-0.0012322765508626758,4.0566046838917725e-5,2.1696628675659008e-8,-0.0012319949600370919,4.026131873137667e-5,2.151464212796346e-8,-0.0012316222127142264,3.996359807215556e-5,2.1339009160521587e-8,-0.0012311720726316338,3.971485937041825e-5,2.1195127901571155e-8,-0.001230670573013148,3.954524762662862e-5,2.1100877649413684e-8,-0.0012301501032358588,3.946977464651513e-5,2.1064790494578928e-8,-0.0012296436170803153,3.9487963552311815e-5,2.108595595697376e-8,-0.0012291799191749856,3.958568949318732e-5,2.1155185653788322e-8,-0.0012287803742935324,3.973818698101526e-5,2.1256853700710867e-8,-0.001228456809047748,3.991337515449703e-5,2.1370956879184295e-8,-0.0012282101383242943,4.007518264093764e-5,2.1475236423481508e-8,-0.0012280293349605576,4.0187061533075706e-5,2.1547450730279715e-8,-0.0012278906587169442,4.0216265386799466e-5,2.1568075140606426e-8,-0.001227757733952711,4.0139660658889306e-5,2.152381649965794e-8,-0.001227584040852701,3.995131561109933e-5,2.141206714008766e-8,-0.0012273199557392438,3.9670437193476325e-5,2.1245481814044025e-8,-0.0012269256617048919,3.934568255249432e-5,2.1054357934419238e-8,-0.001226387988600605,3.9049849819512705e-5,2.088324803621528e-8,-0.0012257337792927004,3.886073981427376e-5,2.077925099285005e-8,-0.001225029176986983,3.8832259555441034e-5,2.0774438780732722e-8,-0.0012243597146831978,3.897014608672804e-5,2.087118383561181e-8,-0.001223799174185458,3.922790438935534e-5,2.1039910874573118e-8,-0.0012233842237546633,3.952612757691313e-5,2.123118242844517e-8,-0.001223107335217403,3.9782946538246464e-5,2.139456934167179e-8,-0.0012229273220081428,3.993907780657064e-5,2.1494114292522025e-8,-0.001222787747765819,3.996887325239496e-5,2.1515041468992588e-8,-0.0012226337779387417,3.987869845089384e-5,2.1462498186417195e-8,-0.0012224231672501788,3.9698352797038394e-5,2.135591073507243e-8,-0.001222131287192134,3.94706075535104e-5,2.1222223071618265e-8,-0.0012217517999359017,3.924165377627985e-5,2.1089871554669243e-8,-0.0012212945943425393,3.905340977839935e-5,2.0984126176207197e-8,-0.0012207820344604945,3.8937868022761935e-5,2.0923847255017387e-8,-0.0012202442110411317,3.891356765329418e-5,2.0919587003276005e-8,-0.0012197138193019857,3.898419985757117e-5,2.0972925719657997e-8,-0.0012192212575737466,3.913919956043711e-5,2.1076902982625034e-8,-0.0012187904880345962,3.9356035455342134e-5,2.1217396945348294e-8,-0.001218436045934365,3.960367962125383e-5,2.1375213106972125e-8,-0.00121816125440768,3.9846620466140236e-5,2.1528562534707792e-8,-0.0012179574526165029,4.004903399140244e-5,2.165570613461297e-8,-0.0012178040605647724,4.0179078031285165e-5,2.1737684879836926e-8,-0.001217669467291421,4.021348370120589e-5,2.1761144819940345e-8,-0.0012175131332450237,4.014272182328031e-5,2.1721351070588032e-8,-0.001217289990042325,3.997662689165655e-5,2.162532349147562e-8,-0.0012169585457825218,3.9749007528304005e-5,2.1494297600574853e-8,-0.0012164931847068905,3.9517836703297245e-5,2.136358703249228e-8,-0.0012158983378917096,3.9356329110915773e-5,2.1277115324960004e-8,-0.0012152176438466392,3.9332104759699913E-05,2.127493647531436e-8,-0.001214528479586985,3.947928991470707e-5,2.1376600643727462e-8,-0.0012139177363669367,3.9778311663362115e-5,2.1569180758206194e-8,-0.0012134484162272517,4.015900048914238e-5,2.180933946924029e-8,-0.0012131363021741985,4.052837642935356e-5,2.2040280902569133e-8,-0.0012129497831343294,4.080665261167639e-5,2.2213672818770073e-8,-0.0012128291159121656,4.095125233841926e-5,2.230428148992462e-8,-0.001212710628911282,4.096082546243361e-5,2.2312340353820234e-8,-0.0012125440419645064,4.0864936103992574e-5,2.2257017392004202e-8,-0.0012122998065612566,4.070927702557695e-5,2.2167052698862267e-8,-0.001211969092054254,4.054291261138361e-5,2.207270204179144e-8,-0.0012115601294701622,4.04096307802744e-5,2.2000393390250897e-8,-0.0012110935055385707,4.034290695442932e-5,2.1969806882960636e-8,-0.001210597514896922,4.0363263803066746e-5,2.1992540281281542e-8,-0.001210103734529621,4.047720018381726e-5,2.2071717239761007e-8,-0.0012096427900898502,4.0677387217859966e-5,2.22022573473533e-8,-0.0012092403935229314,4.094407090176532e-5,2.237175494917936e-8,-0.0012089138646246408,4.124773087837309e-5,2.2562054742508997e-8,-0.001208669509931094,4.155294488543246e-5,2.2751575294808985e-8,-0.0012085012343950414,4.1823087158483395e-5,2.2918206290301382e-8,-0.0012083905541689021,4.20253509279023e-5,2.304245225579731e-8,-0.0012083080279941285,4.213570362400274e-5,2.3110503419034456e-8,-0.0012082161114372763,4.2143459888724324e-5,2.3116949841108062e-8,-0.0012080735324706796,4.2055159230597596e-5,2.3066900585552403e-8,-0.001207841533426535,4.189723091537656e-5,2.297724001603263e-8,-0.0012074923383279116,4.171613868549196e-5,2.2876363669851336e-8,-0.001207019283053891,4.157362669411139e-5,2.2801120538061767e-8,-0.0012064459189305014,4.1534493783767346e-5,2.2789521758592166e-8,-0.0012058286024298984,4.164656524482071e-5,2.2869009240234377e-8,-0.0012052460554162017,4.19184087749905e-5,2.3043477200400544e-8,-0.0012047743940046401,4.2307229374438395e-5,2.3286316882609802e-8,-0.0012044572585227797,4.272895499439604e-5,2.3546579750409415e-8,-0.001204288381331058,4.308962693418823e-5,2.376779519103741e-8,-0.0012042176630236775,4.332107815521141e-5,2.390938507508682e-8,-0.0012041753802073372,4.340093341660907e-5,2.3958706867713977e-8,-0.00120409843142815,4.335014281596996e-5,2.3929491995290315e-8,-0.0012039461046134032,4.3216266495513626e-5,2.3851510393422998e-8,-0.0012037033879847602,4.305483536435831e-5,2.3758982441867673e-8,-0.001203376539335363,4.291599030590616e-5,2.368228317218689e-8,-0.00120298613557427,4.283755592078561e-5,2.364376268900528e-8,-0.00120256066507784,4.2842730196850536e-5,2.365655954004364e-8,-0.0012021315896690958,4.29401323049733e-5,2.3724918753893763e-8,-0.0012017295357681474,4.3124764351869256e-5,2.384500705422323e-8,-0.0012013810188355309,4.3379445958178134e-5,2.400589014719376e-8,-0.0012011053959982453,4.367684303151363e-5,2.4190760318183176e-8,-0.0012009120711434845,4.3982426851927915e-5,2.4378686124360526e-8,-0.001200798320179096,4.4258666524398955e-5,2.4547135559008024e-8,-0.0012007483813156155,4.447035815567847e-5,2.4675237441635286e-8,-0.0012007344048218429,4.45904789956841e-5,2.4747373111654414e-8,-0.0012007195396916456,4.4605667043112055E-05,2.475647427648304e-8,-0.0012006630679124704,4.4520319606676825e-5,2.4706349244549025e-8,-0.0012005271433299393,4.435834252862902e-5,2.4612444809990292e-8,-0.0012002844344340745,4.416178423355356e-5,2.450065938028214e-8,-0.0011999257549066937,4.39856842762662e-5,2.4403951995426074e-8,-0.0011994662184232547,4.3888471317910234e-5,2.435650342589999e-8,-0.001198947460842372,4.3917923813857226e-5,2.43855173915342e-8,-0.001198432684587654,4.409482178445086e-5,2.4501884310528832e-8,-0.0011979921332492878,4.43998509534339e-5,2.469284335350204e-8,-0.00119768078598594,4.4772044938470945e-5,2.492136091235081e-8,-0.0011975168459692923,4.512476493318901e-5,2.5135693210741254e-8,-0.00119747326559844,4.53756385533257e-5,2.528710231716238e-8,-0.0011974888649364393,4.547604253094459e-5,2.5347319618533324e-8,-0.0011974930862349044,4.542451975687877e-5,2.5316491092253453e-8,-0.0011974302262546881,4.525952548655604e-5,2.5218719541367353e-8,-0.0011972721728209824,4.5039793706352555e-5,2.509006550443868e-8,-0.0011970183063790395,4.48245155389913e-5,2.4966396418741908e-8,-0.001196687932279745,4.4660550904328974e-5,2.487559033145641e-8,-0.0011963111623788396,4.457738285834904e-5,2.4834604037411308e-8,-0.0011959215436754737,4.45871920184613e-5,2.4849769736576936e-8,-0.0011955511692190652,4.468712727908596e-5,2.4918432734679642e-8,-0.0011952275920148667,4.486193679281758e-5,2.5030717037665653e-8,-0.001194971551310585,4.508639373150898e-5,2.5171047327290172e-8,-0.001194794863314542,4.5327777567539424e-5,2.5319623085596163e-8,-0.001194698341899172,4.554901617532855e-5,2.5454274898017947e-8,-0.0011946701458042791,4.5713081220382614e-5,2.555310251854561e-8,-0.0011946854231435274,4.5788787339589856e-5,2.5597980508971714e-8,-0.0011947082714650892,4.575734391539159e-5,2.5578493326096783e-8,-0.0011946966519119835,4.561819225984636e-5,2.5495358009355167e-8,-0.0011946100335258174,4.539218001394653e-5,2.536213072497259e-8,-0.0011944184455051122,4.512031317912244e-5,2.5204163446924352e-8,-0.0011941107653257608,4.485734384224478e-5,2.5054453515492776e-8,-0.0011936999083235803,4.466088478508766e-5,2.4946937452023213e-8,-0.0011932230592092813,4.457796164782929e-5,2.4908499047797812e-8,-0.001192735881163747,4.463180004644925e-5,2.4951402925395812e-8,-0.0011923007264965835,4.481237616870531e-5,2.506816181625162e-8,-0.001191970530689217,4.507461064861558e-5,2.523093820360962e-8,-0.0011917724140860335,4.5347229185161454e-5,2.5397066980609755e-8,-0.0011916972032087528,4.5552150560644986e-5,2.552053976524705e-8,-0.0011917008223672682,4.5628853227269786e-5,2.55662585680403e-8,-0.001191718836140086,4.55536438037028e-5,2.5521241678494558e-8,-0.0011916882079971906,4.534483429463704e-5,2.5397506076360736e-8,-0.0011915661764232738,4.50523352358896e-5,2.52256885925892e-8,-0.0011913387387294007,4.47385355732246e-5,2.504346293478613e-8,-0.0011910180546011024,4.446011631860293e-5,2.4884567965759092e-8,-0.0011906333941084394,4.425692301702829e-5,2.4772196056940904e-8,-0.0011902211184680275,4.414860982271032e-5,2.4717178867113547e-8,-0.0011898169790774708,4.4136455261757274e-5,2.4719329452121577e-8,-0.0011894514485054754,4.420725000515381e-5,2.4769977404092045e-8,-0.0011891472970888017,4.43372203473938e-5,2.4854416724191735e-8,-0.0011889182539292847,4.449528806773453e-5,2.4953861754942293e-8,-0.0011887678749798924,4.464592966057503e-5,2.504712463555681e-8,-0.0011886883030289687,4.4752380198887884e-5,2.5112510632544797e-8,-0.0011886592771498138,4.478098874931083e-5,2.5130424449580425e-8,-0.0011886483992062577,4.4707117457076194e-5,2.5086889829383304e-8,-0.0011886140329250244,4.4522010180780784e-5,2.4977592415005244e-8,-0.0011885119078034235,4.4238713784012066e-5,2.4811273251672534e-8,-0.0011883051844906306,4.3894051675223444e-5,2.461069041472246e-8,-0.0011879756183442926,4.354386275480496e-5,2.4409531085824178e-8,-0.0011875317045031677,4.3250911754683235e-5,2.4244998266980886e-8,-0.001187009814984017,4.306830808202916e-5,2.4147865942933328e-8,-0.0011864667588603476,4.302388062774488e-5,2.4133330210664937e-8,-0.0011859656180111609,4.3111034611001064e-5,2.4195943412766552e-8,-0.0011855592107146609,4.328925296709795e-5,2.4310387221332328e-8,-0.0011852761111206852,4.349413359054941e-5,2.443782423047731e-8,-0.0011851131455521931,4.3654131747047644e-5,2.4535986395746288e-8,-0.0011850365116463047,4.370946428713365e-5,2.4570271546609728e-8,-0.0011849914632903148,4.362784368851426e-5,2.4522773768495008e-8,-0.001184917896100419,4.341215487751708e-5,2.43964861556252e-8,-0.0011847668283073867,4.3097519747167916e-5,2.4213256739576758e-8,-0.001184512183165127,4.273915270154866e-5,2.400637699709233e-8,-0.001184154359433377,4.239606712181469e-5,2.381082880477647e-8,-0.001183715829325232,4.211673537541401e-5,2.3654834718410355e-8,-0.001183232091457753,4.193072848064575e-5,2.355508585492585e-8,-0.001182742076052658,4.184692919527811e-5,2.351593181722576e-8,-0.001182280783554334,4.185637277082278e-5,2.3531280291149167e-8,-0.0011818749650736491,4.193705913158789e-5,2.3587563717348847e-8,-0.0011815412371566454,4.20587459208501e-5,2.3666591547139997e-8,-0.001181285518418681,4.218688550045602e-5,2.374784651401943e-8,-0.0011811028444095974,4.2285853886151184e-5,2.381037385561812e-8,-0.001180977123076948,4.232217251513254e-5,2.3834703066651765e-8,-0.0011808810539391222,4.2268560697046846e-5,2.3805269882627502e-8,-0.0011807771612472478,4.2109361969074505e-5,2.3713602572318883e-8,-0.0011806214602274067,4.1846957049957275e-5,2.356200196449372e-8,-0.0011803711677501327,4.150714518977967e-5,2.3366529209186637e-8,-0.0011799963986054275,4.113978509884284e-5,2.3157162420999488e-8,-0.0011794927933482826,4.08108363408142e-5,2.2972909369344754e-8,-0.0011788890049142986,4.058504354233647e-5,2.2851491515976213e-8,-0.0011782430294203484,4.050438512482597e-5,2.2816671906510717e-8,-0.0011776263052778516,4.0571991173592686e-5,2.2868981508891815e-8,-0.0011771016155169122,4.074982996867079e-5,2.2984703383283737e-8,-0.0011767044632477951,4.097122380197114e-5,2.3123630234264177e-8,-0.0011764349839248737,4.1161829736862925e-5,2.3241707139593455e-8,-0.0011762614801303043,4.1260299791107996e-5,2.330328303434297e-8,-0.0011761320404088328,4.1232336783918625e-5,2.328924297558214e-8,-0.0011759893133244327,4.1075838938516295e-5,2.3199711124094704e-8,-0.0011757842580515552,4.081779203779472e-5,2.3051819147004552e-8,-0.001175486057786376,4.050513963720658e-5,2.2873984543674025e-8,-0.0011750866908770193,4.0192525827399625e-5,2.2698514425147638e-8,-0.0011745998913217442,3.9930000443378806e-5,2.2554401861589946e-8,-0.0011740555181366963,3.975350915748105e-5,2.2461942074838184e-8,-0.0011734914447389271,3.967996159531561e-5,2.2430123462058758e-8,-0.001172945410878914,3.970705295686038e-5,2.245677720924922e-8,-0.0011724486794790487,3.981662159239835e-5,2.2530685939862905e-8,-0.0011720222605774908,3.997974255206267e-5,2.263458529327139e-8,-0.0011716754580197422,4.0161947727554296e-5,2.274816904236688e-8,-0.0011714059108263474,4.032766224367516e-5,2.285064391621753e-8,-0.0011712002787532773,4.044378850159482e-5,2.2922839703133115e-8,-0.001171035100466492,4.048293650443117e-5,2.2949153547451752e-8,-0.0011708778846540614,4.042697766162125e-5,2.2919658210313572e-8,-0.0011706891457959967,4.0271429475899425e-5,2.2832600750891778e-8,-0.001170426728995793,4.0030416719605716e-5,2.269711830719015e-8,-0.0011700538042031948,3.9740414742010276e-5,2.253517245414926e-8,-0.0011695506069301434,3.945916078722506e-5,2.2380689483545792e-8,-0.0011689268944945577,3.9255517922141815e-5,2.227353935744273e-8,-0.001168228173677312,3.918909798715985e-5,2.224769728531718e-8,-0.0011675279781217165,3.9285907063139966e-5,2.2317220439852915e-8,-0.0011669049542857158,3.952322670802093e-5,2.24676871654407e-8,-0.0011664145207980038,3.9834885125080155e-5,2.265953681114611e-8,-0.001166070295452867,4.013563731944959e-5,2.2842517129925196e-8,-0.0011658440641923867,4.035108613749354e-5,2.2973299450432576e-8,-0.0011656808972777184,4.043846993678506e-5,2.302764914878378e-8,-0.0011655191438936243,4.039246802510346e-5,2.300366653105076e-8,-0.0011653067613803536,4.023909875147127e-5,2.291788321046429e-8,-0.001165010689103841,4.002390781978695e-5,2.2797942341975254e-8,-0.0011646197556137458,3.979940906101893e-5,2.2674938420648966e-8,-0.0011641429633779334,3.961443280877213e-5,2.2577103601577477e-8,-0.0011636049134929856,3.950632417993853e-5,2.252541402741315e-8,-0.0011630396411959254,3.9496218494349576e-5,2.253115281543781e-8,-0.001162483900516477,3.95874667786907e-5,2.2595320378682432e-8,-0.0011619709327954436,3.976699600781008e-5,2.2709638135691125e-8,-0.0011615255979191684,4.000893838449559e-5,2.2858712233979922e-8,-0.0011611613858706039,4.0279582776409567e-5,2.3022849008527116e-8,-0.001160879376169587,4.054263299169933e-5,2.3181024514051384e-8,-0.0011606687592218374,4.076394687408465e-5,2.3313608208272293e-8,-0.0011605083240079387,4.09154288041749e-5,2.3404666156265128e-8,-0.00116036847554564,4.097823517679709e-5,2.34438834621506e-8,-0.0011602136824594566,4.0945659648512586e-5,2.3428227761797474e-8,-0.0011600057215318002,4.0826012397539306e-5,2.3363471925632195e-8,-0.0011597086232655231,4.0645264473458956e-5,2.326545539839303e-8,-0.0011592962457193116,4.0447999006798314e-5,2.3160337368834338e-8,-0.00115876229853727,4.0293821820255384e-5,2.3082332980724006e-8,-0.0011581301558147067,4.0245920350732926e-5,2.3067127381392428e-8,-0.0011574563121098651,4.035081622828792e-5,2.3140425634618856e-8,-0.0011568199270357543,4.061526212816023e-5,2.3304961265381497e-8,-0.0011562968471505665,4.099409631845051e-5,2.353376588241085e-8,-0.0011559290458727804,4.140161770840252e-5,2.3776854904296303e-8,-0.0011557078806939019,4.1744238983237644e-5,2.3980097768470524e-8,-0.0011555814912751524,4.195588110422897e-5,2.4105697188319998E-08,-0.001155479481195814,4.201658493401853e-5,2.4142985129680127e-8,-0.00115533863075793,4.194919447273282e-5,2.4106395513946268e-8,-0.0011551182129401877,4.1802901903976074e-5,2.4025610864818883e-8,-0.0011548035981328402,4.163510488935334e-5,2.3934641492285587e-8,-0.0011544024679921467,4.149790402491649e-5,2.3863731188845464e-8,-0.0011539381598193543,4.143037373269924e-5,2.3834886083816383e-8,-0.0011534428504190312,4.145529592249755e-5,2.3860242372633465e-8,-0.0011529515734318722,4.157867605802834e-5,2.3942156152824156e-8,-0.001152497126030711,4.17910018793201e-5,2.407424330087287e-8,-0.00115210581430915,4.2069853360416185e-5,2.4243037050196697e-8,-0.001151794185245135,4.238365328686831e-5,2.4430139497299415e-8,-0.0011515669930675036,4.269628302794372e-5,2.461478437537122e-8,-0.0011514166348674099,4.2972125399724006e-5,2.4776661433350763e-8,-0.0011513241096236361,4.318091082678523e-5,2.4898702175336794e-8,-0.0011512612721551612,4.330181717597658e-5,2.496949457208967e-8,-0.001151194039557355,4.332656629776271e-5,2.4985098203453446e-8,-0.0011510862887999457,4.326145348232724e-5,2.4950132422663092e-8,-0.0011509043845628019,4.312830423117919e-5,2.4878096818187747e-8,-0.0011506225888506414,4.296414251839801e-5,2.4790856099194497e-8,-0.0011502295873348479,4.281860836006933e-5,2.4716871495239724e-8,-0.0011497354598191344,4.27473669523015e-5,2.4687324428481763e-8,-0.0011491767132249047,4.27998987093043e-5,2.4729297172923822e-8,-0.0011486149745644995,4.300208635109734e-5,2.4856210146960896e-8,-0.0011481242788471762,4.333890754543513e-5,2.505836780419132e-8,-0.0011477663805973333,4.37484335258334e-5,2.529978271595454e-8,-0.0011475638693054652,4.413754488074797e-5,2.552713565537854e-8,-0.0011474880690233208,4.441675095791563e-5,2.5689536506059154e-8,-0.0011474716437174161,4.4535329714636256e-5,2.5758576446798924e-8,-0.0011474381423005444,4.4496153607781065e-5,2.573686319342581e-8,-0.0011473298248947472,4.434525522139947e-5,2.5651963688180006e-8,-0.0011471206519927625,4.4148021131686344e-5,2.5542431090685233e-8,-0.0011468143867924144,4.396712744434881e-5,2.5444745012451112e-8,-0.001146435178096694,4.384958556407789e-5,2.538566338712817e-8,-0.0011460173053052653,4.382244135856911e-5,2.537984964690841e-8,-0.0011455972066733823,4.389369052636168e-5,2.543072424927479e-8,-0.001145208205189756,4.4055310810386594e-5,2.553258147049571e-8,-0.0011448771116926027,4.4286732802865605e-5,2.5672846892049696e-8,-0.001144621838537778,4.455834866317327e-5,2.5834176207532318e-8,-0.0011444496596464482,4.483524010238264e-5,2.5996533958276677e-8,-0.0011443561757723407,4.508136367107901e-5,2.6139484084071172e-8,-0.001144325302176957,4.526422796836885e-5,2.624479996609313e-8,-0.0011443306796744088,4.5359678801102835e-5,2.629920696942144e-8,-0.001144338684074093,4.535607232962796e-5,2.6296805202445227e-8,-0.0011443128443530714,4.525711697688811e-5,2.6240674007741413e-8,-0.0011442192204715602,4.5082805045375516e-5,2.6143256225398415e-8,-0.0011440321422607781,4.4868033997148654e-5,2.6025290536327584e-8,-0.0011437397009143968,4.465876200865301e-5,2.5913293776335838e-8,-0.0011433483936894827,4.450556201387472e-5,2.5835666573269417e-8,-0.0011428859132346458,4.4454301330230345e-5,2.5817407374967364e-8,-0.0011424002463549068,4.4534205124580296e-5,2.587362598157788e-8,-0.0011419527122034946,4.474530750720313e-5,2.600289980431649e-8,-0.0011416033368196802,4.505002810376823e-5,2.618294554588382e-8,-0.001141390428908636,4.5375931822066494e-5,2.6372385764556846e-8,-0.0011413123883100827,4.5634818511907473e-5,2.6521473534591453e-8,-0.001141323589395823,4.5754058078499044e-5,2.6589641295518906e-8,-0.0011413505127724332,4.570482861131677e-5,2.65614039044391e-8,-0.0011413207093381398,4.5510745451041515e-5,2.6451239643199213e-8,-0.001141188094617734,4.523323032317512e-5,2.6295158823665544e-8,-0.0011409425267060696,4.494512245552072e-5,2.613539055975473e-8,-0.0011406039242835295,4.470782444666231e-5,2.6007055239340012e-8,-0.001140209199720666,4.455976514490526e-5,2.5931497221064563e-8,-0.0011397998215520568,4.451513360626569e-5,2.591575701768682e-8,-0.001139413450043509,4.456814837601221e-5,2.595536246540539e-8,-0.0011390795966643849,4.469876670368622e-5,2.60379203690528e-8,-0.0011388178217883774,4.487777100093782e-5,2.614620234117578e-8,-0.001138637029323737,4.507087406977781e-5,2.6260499784491232e-8,-0.0011385351171898522,4.524231213375679e-5,2.636058011508952e-8,-0.001138498908997064,4.5358536475447353e-5,2.6427687830903223e-8,-0.001138504742717813,4.539239795883406e-5,2.6446876610957435e-8,-0.0011385203577618363,4.5327686077719404e-5,2.6409596426616204e-8,-0.001138508626476679,4.5163215308385346e-5,2.6316020938140107e-8,-0.001138433164520453,4.491524922861346e-5,2.617635271007851e-8,-0.0011382651611644248,4.461705208805853e-5,2.60103768433134e-8,-0.0011379901212315725,4.431475914112068e-5,2.5844832363761734e-8,-0.0011376128472153897,4.405962607495448e-5,2.5708742448517676e-8,-0.0011371591432191399,4.38977377850055e-5,2.5627459120037902e-8,-0.0011366732292220137,4.385892899825392e-5,2.561652405049774e-8,-0.0011362103950232623,4.394710877414942e-5,2.5676581411835278e-8,-0.0011358251542952108,4.413475261191414e-5,2.5790765942044402e-8,-0.0011355565320898134,4.436471443508226e-5,2.5926126309661128e-8,-0.0011354142388612493,4.456177182242592e-5,2.6040272006294392e-8,-0.0011353715564004837,4.4653360616528623e-5,2.6092925147649926e-8,-0.0011353705510015804,4.459362909579968e-5,2.605922322764486e-8,-0.0011353404038372476,4.4380227560943225e-5,2.5938971302698022e-8,-0.0011352217466509087,4.405454262243014e-5,2.5756616732937143e-8,-0.0011349852948189293,4.368490247039827e-5,2.5551578991552723e-8,-0.0011346366674042077,4.334216194977203e-5,2.5364227495662016e-8,-0.001134208126523297,4.307971922662928e-5,2.5224447033233243e-8,-0.0011337443916172296,4.292448780803408e-5,2.5146609857361533e-8,-0.0011332897864486306,4.287791196077834e-5,2.5130427988720302e-8,-0.0011328801743606684,4.292232941936807e-5,2.5164886702881576e-8,-0.0011325395437544183,4.302832693352377e-5,2.5232645329543546e-8,-0.0011322795036267984,4.316082969546979e-5,2.5313558114926845e-8,-0.0011320999644248192,4.328354167402069e-5,2.538712994851353e-8,-0.0011319900022255828,4.336233306022805e-5,2.5434328063291953e-8,-0.0011319286947636842,4.336840808418778e-5,2.5439298179225213e-8,-0.0011318863330729578,4.328188187579225e-5,2.5391365668682646e-8,-0.001131826798984989,4.309582777844892e-5,2.5287327028303578e-8,-0.0011317119237820342,4.282000536402383e-5,2.513352362103692e-8,-0.0011315081184450266,4.248267021715128e-5,2.4946745756693704e-8,-0.0011311944679122136,4.212855215251888e-5,2.47528810798855e-8,-0.001130770145740669,4.181171313272162e-5,2.458263730132284e-8,-0.0011302581872849279,4.158375073838242e-5,2.446470685820663e-8,-0.0011297031604086858,4.1480108144529596e-5,2.4418045723061402e-8,-0.001129162188693781,4.15087736209508e-5,2.4445738038119535e-8,-0.001128691235841923,4.164541695493883e-5,2.453267453652789e-8,-0.0011283303644603515,4.1837167858544846e-5,2.464812593336712e-8,-0.0011280922029762194,4.201470996660632e-5,2.4752841228200912e-8,-0.0011279572033331556,4.2109977185660934e-5,2.480903447905591e-8,-0.0011278777807429035,4.2074869072542864e-5,2.4790706388729773e-8,-0.0011277911058960631,4.189530837193729e-5,2.4691226160505966e-8,-0.0011276372138476932,4.15954194176583e-5,2.4525357679971217e-8,-0.0011273763094417542,4.1229584247699144e-5,2.4324526909304625e-8,-0.0011269987883137111,4.0865150594873515e-5,2.4126913313744505e-8,-0.0011265246487921932,4.056282496645149e-5,2.396636013648397e-8,-0.0011259939870450367,4.0362229990203176e-5,2.3864352719984643e-8,-0.0011254538280006646,4.027651035222083e-5,2.3827236887481313e-8,-0.0011249466443459084,4.029509964658356e-5,2.3848081936514294e-8,-0.0011245033782163948,4.0390924133027086e-5,2.3910968573532058e-8,-0.0011241409403492657,4.052829514471608e-5,2.3995517170635476e-8,-0.00112386263638038,4.066934213518109e-5,2.4080458369857855e-8,-0.001123659844043524,4.077852227744454e-5,2.4146059818045725e-8,-0.0011235138537491161,4.082575535334954e-5,2.417579891950277e-8,-0.0011233975399612892,4.078906093563617e-5,2.4157813543967808e-8,-0.0011232772130354719,4.065741806846923e-5,2.4086515680471002e-8,-0.0011231154772805123,4.043402590037051e-5,2.3964410167377178e-8,-0.0011228760409062776,4.0139252991621545e-5,2.380366568263808e-8,-0.0011225309508780508,3.9811507466245704e-5,2.362643573893063e-8,-0.0011220694021852218,3.9503593998477884e-5,2.3462607402847364e-8,-0.0011215052868612503,3.927276808058977e-5,2.334405693151438e-8,-0.0011208791815421717,3.916532907922445e-5,2.32959719470691e-8,-0.0011202512996662164,3.9200465609938846e-5,2.332793726446843e-8,-0.001119685750452599,3.936055511280073e-5,2.3428801926640012e-8,-0.0011192313624241938,3.959351310628623e-5,2.3568365483427852e-8,-0.0011189067970222813,3.982728786145331e-5,2.370580293829856e-8,-0.0011186957125675833,3.9990849821071303e-5,2.380156013682102e-8,-0.0011185529359586416,4.003380335406222e-5,2.382827657042045e-8,-0.0011184183604654927,3.9938559297950844e-5,2.3777363910180102e-8,-0.0011182335261142832,3.972257873820071e-5,2.365991178424167e-8,-0.0011179561348970367,3.943138742499119e-5,2.3502406776038373e-8,-0.0011175690250342211,3.9125231705559594e-5,2.333898219278873e-8,-0.0011170818909624026,3.8863484851492184e-5,2.3202592856615218e-8,-0.0011165261146400343,3.869113689297805e-5,2.3117576365828163e-8,-0.0011159450191786187,3.863070018781825e-5,2.309541688994295e-8,-0.001115382950846316,3.8680782729081375e-5,2.3134291481037248e-8,-0.0011148763323054643,3.88202433349568e-5,2.3221657136516122e-8,-0.0011144484116093652,3.9015366788503146e-5,2.333836405534532e-8,-0.0011141077300649053,3.922741200952648e-5,2.3462821981382622e-8,-0.0011138492060015412,3.941880989590515e-5,2.357433208540127e-8,-0.0011136564631223104,3.955748183796071e-5,2.3655382121537695e-8,-0.001113504398766395,3.961966181875024e-5,2.3693174947865333e-8,-0.0011133616119702572,3.9591985478981636e-5,2.3680806672121074e-8,-0.0011131929173312004,3.9473502927766754e-5,2.3618399758240768e-8,-0.001112962646214551,3.927781992830418e-5,2.3514237054040706e-8,-0.0011126396430199091,3.903476453581059e-5,2.338553477815076e-8,-0.0011122044622860591,3.878987372235069e-5,2.325794563447264e-8,-0.0011116579050496058,3.859916050478475e-5,2.3162471082326266e-8,-0.0011110277638066819,3.8517161490373446e-5,2.3128770665243614e-8,-0.0011103686318442126,3.857932217863279e-5,2.317550345585091e-8,-0.0011097504345893342,3.878498007287958e-5,2.3301147042226735e-8,-0.0011092368658773112,3.909083067031221e-5,2.348067606937274e-8,-0.001108862561025627,3.9421677057301995e-5,2.3671766690779e-8,-0.0011086207894536008,3.969541345367182e-5,2.3828789988108746e-8,-0.001108467784835197,3.9850203582443234e-5,2.3917930158623212e-8,-0.0011083400223898265,3.986149013467848e-5,2.3926558339224554e-8,-0.0011081749835332257,3.9744019406875444e-5,2.3864144977322292e-8,-0.0011079272311021648,3.954206227866765e-5,2.3756473773474773e-8,-0.0011075764036130426,3.9314276041815806e-5,2.3636846724881514e-8,-0.0011071276513506274,3.911872082508301e-5,2.353751460723729e-8,-0.001106606712234522,3.9001210256697606e-5,2.3483218868648787e-8,-0.0011060519911277476,3.8988244203939216e-5,2.3487531140898155e-8,-0.001105505670300844,3.908468395961993e-5,2.3551953376769463e-8,-0.001105005565791467,3.927568764132802e-5,2.3667339954019526e-8,-0.0011045790708096976,3.9531788880221474e-5,2.3816896490402398e-8,-0.0011042398847317478,3.9815546406795756e-5,2.397985579796228e-8,-0.0011039874767033147,4.008822786866677e-5,2.413504494817365e-8,-0.0011038086569949937,4.031539899273079e-5,2.4263827315283715e-8,-0.0011036803427045844,4.047087645509333e-5,2.4352204679952328e-8,-0.0011035726966564098,4.053916604625667e-5,2.4392162684179795e-8,-0.0011034522434320714,4.051692930416066e-5,2.438250815301555e-8,-0.0011032850399023103,4.041397991610771e-5,2.4329393420554233e-8,-0.0011030403485004744,4.0253960514007384e-5,2.424655679752155e-8,-0.001102695483905325,4.0074227905403326e-5,2.415503580398189e-8,-0.001102242193580227,3.992352368685253e-5,2.4081660659305638e-8,-0.0011016936673696796,3.985525563697915e-5,2.4055253488353385e-8,-0.0011010891641663526,3.991473667135059e-5,2.409971221190807e-8,-0.0011004912378463276,4.012168328025906e-5,2.422468321626409e-8,-0.0010999711538006204,4.045477360482803e-5,2.4417430252093232e-8,-0.0010995842055226655,4.084938248726866e-5,2.4641830821643385e-8,-0.0010993460929871167,4.121581701041971e-5,2.484844677700392e-8,-0.0010992250658169746,4.1472215284716905e-5,2.4992557013455944e-8,-0.0010991556460179283,4.1574464276116506e-5,2.505058969589844e-8,-0.0010990652089385281,4.1527398961356164e-5,2.5026265284520233e-8,-0.001098898156768374,4.1375312448001e-5,2.4945200752454744e-8,-0.0010986280334354423,4.118167475058328e-5,2.484337320183111e-8,-0.0010982574815838655,4.100937470290851e-5,2.4755843824772127e-8,-0.0010978110406426043,4.090738485072404e-5,2.4709226856153248e-8,-0.0010973257121964122,4.0904499228446404e-5,2.471836767874099e-8,-0.0010968421791160742,4.10083665738254e-5,2.4786177550209052e-8,-0.0010963977347210852,4.120779805968306e-5,2.4905329142025246e-8,-0.0010960210677344888,4.147702335351955e-5,2.506090255556026e-8,-0.0010957289251758702,4.178110279291195e-5,2.5233456325869303e-8,-0.001095524697387541,4.2081778366454555e-5,2.540215364575196e-8,-0.0010953988246681838,4.2343079153780506e-5,2.5547670181248777e-8,-0.0010953307583887954,4.253610901231246e-5,2.5654681311269465e-8,-0.0010952920447938042,4.264254236325311e-5,2.571372890267199e-8,-0.0010952499739452775,4.2656633559821643e-5,2.5722338660353446e-8,-0.0010951713587064734,4.2585944785351156e-5,2.5685421940828945e-8,-0.0010950263137780906,4.245110365085979e-5,2.5615053368196092e-8,-0.001094792159453469,4.2284683294743016e-5,2.5529653777638224e-8,-0.0010944577225138132,4.212890345796607e-5,2.5452477208888395e-8,-0.0010940280855575993,4.2031223829935575e-5,2.5409021613321293e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json deleted file mode 100644 index 3a71254..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_5.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":5000,"numberOfSamples":1000,"samples":[-0.001093528836966317,4.203642676149489e-5,2.5422725793163846e-8,-0.0010930072646208094,4.217440867148639e-5,2.5508574660559997e-8,-0.0010925265640548522,4.2445448281040656e-5,2.566549440168746e-8,-0.0010921498584701538,4.280927315836898e-5,2.5870776828536737e-8,-0.0010919163003251823,4.318794211770871e-5,2.6081780444674054e-8,-0.001091820523294629,4.348883154959585e-5,2.624831762871915e-8,-0.00109181029138295,4.364045659227296e-5,2.6331989440280285e-8,-0.0010918072934319603,4.362110831307491e-5,2.6321766949888615e-8,-0.0010917391971531742,4.346321105608486e-5,2.6236404835428295e-8,-0.0010915640090047574,4.323393624900339e-5,2.611370862534541e-8,-0.0010912766199280236,4.3007345034387695e-5,2.599493426705449e-8,-0.0010909009016498547,4.284299979150903e-5,2.5912727223068096e-8,-0.001090476431342811,4.277625215835485e-5,2.5885719367964947e-8,-0.0010900465218413144,4.2817753215300766e-5,2.5918503099339365e-8,-0.0010896499951765957,4.2957752709860237e-5,2.6004412180594708e-8,-0.0010893164869373976,4.3171842376795946e-5,2.612906955898042e-8,-0.0010890641035068592,4.34265580743787e-5,2.6273675178051805e-8,-0.0010888984776027527,4.3684563677071033e-5,2.6417842719480934e-8,-0.0010888129019089097,4.3909513777838174e-5,2.65421057988998e-8,-0.0010887895341848287,4.407054827337014e-5,2.663018859077577e-8,-0.0010888016920848876,4.4146217427231046e-5,2.667102788931276e-8,-0.001088817192482838,4.4127450376416946e-5,2.6660363442769395e-8,-0.0010888024752733671,4.401909753500576e-5,2.6601590837686793e-8,-0.0010887270459753056,4.383981898364833e-5,2.65056658451493e-8,-0.0010885677996571497,4.362036647066958e-5,2.639002532249307e-8,-0.0010883129235325867,4.3400346577718806e-5,2.627658759927833e-8,-0.0010879651578661836,4.322346930498476e-5,2.6188934255361087e-8,-0.001087544097987234,4.313109216854214e-5,2.6148709458164907e-8,-0.001087086674855694,4.315374123594729e-5,2.617116796712862e-8,-0.001086644066498112,4.330094126455337e-5,2.6260046435218025e-8,-0.0010862728381159504,4.3551620609182124e-5,2.640284239026193e-8,-0.00108601928226965,4.38502022017017e-5,2.656903579292576e-8,-0.0010859001135970722,4.411523709589743e-5,2.6714781887700585e-8,-0.0010858889754997796,4.426383145393484e-5,2.6795876138844725e-8,-0.0010859203351680025,4.424423453619814e-5,2.6785128110422738e-8,-0.001085913618912209,4.4058578601592776e-5,2.668460538734044e-8,-0.001085805393800295,4.376072785978275e-5,2.6524487039470494e-8,-0.0010855708545136362,4.343117507166159e-5,2.6349304657863846e-8,-0.0010852250584937636,4.314592290426317e-5,2.620071963961655e-8,-0.0010848090868554553,4.295570916633156e-5,2.6105975798650347e-8,-0.001084372654611788,4.2880291469861494e-5,2.6074830737518084e-8,-0.0010839610398885847,4.291308032542563e-5,2.6102403255115617e-8,-0.0010836081790852113,4.302959653013973e-5,2.6174200961517643e-8,-0.0010833344520610171,4.3195574161869046e-5,2.6270850944433867e-8,-0.001083146945167361,4.3373198164366636e-5,2.637160337223827e-8,-0.0010830405767407777,4.352569954505452e-5,2.645674242392391e-8,-0.0010829995124754573,4.3621083270509026e-5,2.6509425138913995e-8,-0.001082998991414148,4.363548696163819e-5,2.6517334874121295e-8,-0.0010830078695757855,4.3556232067080865e-5,2.6474252100274967e-8,-0.0010829921546684827,4.338421730365343e-5,2.638134536379059e-8,-0.0010829195457739626,4.313495597945831e-5,2.6247737743075178e-8,-0.0010827645199852117,4.2837568459182473e-5,2.6089894868217516e-8,-0.0010825131481838203,4.2531405839397756e-5,2.5929625306960433e-8,-0.0010821667257754604,4.2260415291339646e-5,2.5790800121408916e-8,-0.001081743391863589,4.2065789758412284e-5,2.5695202717475755e-8,-0.0010812771260442285,4.197779093233889e-5,2.5658116797976546e-8,-0.00108081368235774,4.2007788209395396e-5,2.5684279138019833e-8,-0.0010804030553122393,4.214188129809646e-5,2.5764875776401685e-8,-0.0010800884167244415,4.2338329128859495e-5,2.5876603076949472e-8,-0.001079892778156456,4.2531881372048156e-5,2.598424858567189e-8,-0.001079807154698478,4.264767562282009e-5,2.6048107274120274e-8,-0.0010797867060579334,4.262394191909685e-5,2.6035904077434437e-8,-0.001079760973783162,4.243610779021697e-5,2.593546226975552e-8,-0.0010796577282035234,4.210950720238184e-5,2.5761387251077892e-8,-0.00107942993302375,4.171117273294466e-5,2.555057096694696e-8,-0.001079071274203828,4.132383281774707e-5,2.5348037433669575e-8,-0.001078613065447523,4.101676275871758e-5,2.5191031444188244e-8,-0.0010781076445001167,4.082789625905243e-5,2.509930154443339e-8,-0.0010776094725232313,4.076147500814069e-5,2.507401361434535e-8,-0.0010771620659250866,4.079616385676292e-5,2.5102488709573008e-8,-0.001076792527426751,4.089624684549766e-5,2.5164595184415124e-8,-0.001076511483357941,4.102115014348993e-5,2.523807558214155e-8,-0.001076315486299618,4.1131846253385905e-5,2.530198861820359e-8,-0.00107618985214185,4.1194730844247526e-5,2.533864785318205e-8,-0.0010761111699562399,4.118418519494565e-5,2.5334821170315685e-8,-0.0010760496321073894,4.1084740905426734e-5,2.5282775112651636e-8,-0.0010759717151872302,4.089317638698599e-5,2.5181368331821842e-8,-0.0010758437806077928,4.062025720268964e-5,2.5037000465379675e-8,-0.001075636874965737,4.029124488214523e-5,2.4863872287821255e-8,-0.001075332344175619,3.994403311673042e-5,2.4682887122784044e-8,-0.0010749270772761371,3.962409533524119e-5,2.4518755050929554e-8,-0.0010744366625150808,3.937631781230898e-5,2.439541151761965e-8,-0.0010738948032005251,3.92350369958662e-5,2.433057466908826e-8,-0.0010733481764564313,3.9214698025557454e-5,2.433083409288902e-8,-0.0010728472503692334,3.930384295442124e-5,2.4388737863373705e-8,-0.0010724347731497891,3.94645175457536e-5,2.44828950313044e-8,-0.0010721343835682733,3.9638151634969455e-5,2.458148402653822e-8,-0.001071942205574794,3.9757775235519326e-5,2.4648932372444277e-8,-0.001071824440490328,3.976485588304506e-5,2.4654800605721794e-8,-0.0010717234455627444,3.962693202706781e-5,2.4582909766611626e-8,-0.0010715727554048086,3.935008138551149e-5,2.4437676459267312e-8,-0.0010713175244551965,3.8979848282591754e-5,2.4244352737564492e-8,-0.0010709326265880106,3.858785169979547e-5,2.4041693976913273e-8,-0.0010704300073954966,3.8248525783302696e-5,2.386941805332488e-8,-0.0010698520086136918,3.801636200014798e-5,2.375603419291011e-8,-0.0010692550526086402,3.791333074165718e-5,2.371227592816189e-8,-0.0010686922574283954,3.792939556885814e-5,2.3731673323543086e-8,-0.0010682017404291997,3.80320722103819e-5,2.379598347049132e-8,-0.0010678024504110503,3.8178531959137147e-5,2.3881867002065674e-8,-0.001067495548138812,3.832556322890049e-5,2.3966240581430207e-8,-0.001067268273277274,3.843582509864842e-5,2.4029501058277472e-8,-0.0010670980487706369,3.848102746680633e-5,2.4057051807740725e-8,-0.0010669558863532884,3.844342728250387e-5,2.4039967070581163e-8,-0.001066809160826231,3.8316803241082525e-5,2.3975457859135465e-8,-0.0010666243579828204,3.810746586828673e-5,2.386741669396789e-8,-0.0010663705574710293,3.7835149903862285e-5,2.3726898442079206e-8,-0.0010660241691441985,3.753288897009294e-5,2.3571997852970833e-8,-0.0010655747063436035,3.724442359481839e-5,2.3426335194630528e-8,-0.0010650302250668731,3.701779702157739e-5,2.331547794071486e-8,-0.0010644199291991467,3.68949742785659e-5,2.3261297539301097e-8,-0.001063791223981958,3.6899545236002384e-5,2.327544760228617e-8,-0.0010632000453968727,3.7026820203446666e-5,2.335429289972638e-8,-0.0010626963599818942,3.7241111127013385e-5,2.3477789197827204e-8,-0.0010623095681190381,3.748268981872828e-5,2.3613519575245354e-8,-0.0010620391726174265,3.768289862153553e-5,2.3724946388273585e-8,-0.0010618540779868658,3.7782581455481364e-5,2.3781234371721873e-8,-0.0010617006609737272,3.7748061352030124e-5,2.3765573920194672e-8,-0.0010615170480434892,3.758012724746697e-5,2.367965267011593e-8,-0.0010612495768359004,3.731371428715724e-5,2.3543130785882002e-8,-0.0010608669746345562,3.700835235428079e-5,2.3388256328231037e-8,-0.001060368182069979,3.6731912216637085e-5,2.325105313533104e-8,-0.0010597813426304625,3.654245594481344e-5,2.316169727120985e-8,-0.0010591544075762823,3.647402066316346e-5,2.313718174627855e-8,-0.0010585410167500333,3.653074230958909e-5,2.317853751683003e-8,-0.001057986920975386,3.669012758790272e-5,2.327290785733631e-8,-0.0010575211579176061,3.691257472653399e-5,2.339881300069309e-8,-0.001057153350837812,3.715260399430297e-5,2.3532138314401993e-8,-0.0010568758374386459,3.736812754225494e-5,2.365093104713143e-8,-0.0010566681914793606,3.752620921432137e-5,2.3738273286109503e-8,-0.0010565020401735535,3.760563844652094e-5,2.378349597906288e-8,-0.0010563451015339039,3.759754719033252e-5,2.3782437194464704e-8,-0.0010561643423562313,3.750528822528541e-5,2.3737377447389552e-8,-0.001055928777775758,3.734426906295574e-5,2.365696343832137e-8,-0.0010556126783150875,3.714173971895337e-5,2.3556054900511646e-8,-0.0010551998123746519,3.693577609363618e-5,2.3455071168099988e-8,-0.0010546886977346502,3.677200754758798e-5,2.3378106802298378e-8,-0.001054097575413405,3.66964742503015e-5,2.33490503669857e-8,-0.001053466266416154,3.674410830929957e-5,2.338552532428398e-8,-0.0010528513171096396,3.6925144473778674e-5,2.3491902560416617e-8,-0.0010523125721679219,3.721530665965493e-5,2.365441113669717e-8,-0.0010518941136466624,3.7556866487537555e-5,2.384196911473466e-8,-0.001051607652331739,3.787365765176419e-5,2.4014260649323585e-8,-0.0010514271013640408,3.809514403546298e-5,2.4134458275138142e-8,-0.001051297410707953,3.8178799703989044e-5,2.4180962088243847e-8,-0.001051153003686843,3.812136015142763e-5,2.415318391268279e-8,-0.00105093733776516,3.795628189484318e-5,2.4069945427589834e-8,-0.001050616809646753,3.7741095264425834e-5,2.396246019827039e-8,-0.0010501863481547247,3.754067586859115e-5,2.3865199592522806e-8,-0.0010496673073456411,3.7411575394765774e-5,2.380750812194908e-8,-0.0010490998191358019,3.739064048823195e-5,2.380774834712807e-8,-0.0010485322021737509,3.748944550858809e-5,2.38707245777141e-8,-0.0010480100257824426,3.769477583367159e-5,2.398835336975793e-8,-0.0010475672083879396,3.797425178348991e-5,2.4142928600404912e-8,-0.0010472208647171518,3.8285082197056416e-5,2.4311824887822292e-8,-0.0010469704046910332,3.858335909600687e-5,2.4472287017073512e-8,-0.0010468001087383734,3.883168894481607e-5,2.4605240478689e-8,-0.0010466836675630368,3.900401645641016e-5,2.469763622155349e-8,-0.0010465891449321784,3.9087623690885925e-5,2.4743396088065535e-8,-0.00104648333056439,3.908308679776768e-5,2.4743374271449885e-8,-0.0010463351903678341,3.900321589613522e-5,2.4704818833201865e-8,-0.0010461187174899236,3.887169112109677e-5,2.4640634398441143e-8,-0.0010458157657489216,3.872153411276594e-5,2.456847676636226e-8,-0.0010454194198092652,3.8592904649491364e-5,2.4509434847279802e-8,-0.0010449379598351336,3.85290470767447e-5,2.4485769249212857e-8,-0.0010443983417922637,3.8568960460999586e-5,2.4517067123617403e-8,-0.0010438466104127784,3.8736263817727636e-5,2.4614598497805885e-8,-0.0010433416549984493,3.902636136480175e-5,2.477493404220497e-8,-0.0010429399987465788,3.9398027050649106e-5,2.4975871277955936e-8,-0.0010426746362297934,3.9777843434769186e-5,2.5178904654138547e-8,-0.0010425380922074639,4.0081503788804406e-5,2.5340291710930592e-8,-0.0010424814444555638,4.0244644241275436e-5,2.5427023133151833e-8,-0.0010424322947735387,4.024690202392131e-5,2.5429321392407133e-8,-0.0010423219582340482,4.01162830340403e-5,2.5362869290134385e-8,-0.0010421073140257824,3.9914219183457514e-5,2.526080398688154e-8,-0.0010417790504298643,3.9712303792083824e-5,2.5161204349048078e-8,-0.001041357514815806,3.957206053756882e-5,2.509620077309175e-8,-0.0010408820867983744,3.953305791576254e-5,2.5085701841939114e-8,-0.0010403994183290342,3.960922925354849e-5,2.5135719972456448e-8,-0.001039953473752625,3.979097235888994e-5,2.5239903766051643e-8,-0.0010395783534878653,4.005056096735985e-5,2.538278306056733e-8,-0.0010392939602767437,4.034918264408066e-5,2.5543680164653243e-8,-0.001039104389012981,4.0644480901831106e-5,2.5700644896490313e-8,-0.0010389988421567525,4.089757785496551e-5,2.5833941072896978e-8,-0.0010389545970551956,4.107865514075927e-5,2.5928726316951552e-8,-0.0010389412824983889,4.11705030871186e-5,2.5976731161695342e-8,-0.001038925600905446,4.116986580467381e-5,2.5976894786312716e-8,-0.0010388757116827172,4.108687415422475e-5,2.5935077860987764e-8,-0.0010387648487817887,4.094320887370908e-5,2.586310945168862e-8,-0.0010385741873378635,4.0769583233729096e-5,2.5777407288912374e-8,-0.0010382952268426782,4.0602784133407614e-5,2.569728649515853e-8,-0.0010379320091739295,4.04820837611387e-5,2.564292327050562e-8,-0.0010375031926033312,4.0444330838904017e-5,2.56327270085341e-8,-0.0010370431136598767,4.0516825192555824e-5,2.5679750881275533e-8,-0.0010365998252919112,4.07078727032145e-5,2.5787103029239512e-8,-0.0010362274507746704,4.0997023108730364e-5,2.59432896351184e-8,-0.0010359711779905647,4.133023718538513e-5,2.6120005918730713e-8,-0.0010358476721283505,4.1627586877103866e-5,2.6276137158887212e-8,-0.0010358308191826967,4.180745449119192e-5,2.6370052259346927e-8,-0.0010358552027499252,4.18193769451226e-5,2.6376375102413223e-8,-0.0010358403135057738,4.166678727036104e-5,2.6297719124715485e-8,-0.0010357228189093813,4.140456572009227e-5,2.6163449539399887e-8,-0.0010354780401623975,4.111391003936417e-5,2.6016503918615263e-8,-0.0010351214402610947,4.0871490524131414e-5,2.5897043112633257e-8,-0.0010346952781462417,4.0728626709958974e-5,2.5831362930703574e-8,-0.0010342513894169626,4.070496768499591e-5,2.582864079884688e-8,-0.0010338376130666347,4.0792468598692156e-5,2.588333975697396e-8,-0.001033489928572441,4.09637112677769e-5,2.5979990127741127e-8,-0.0010332292836012598,4.118057987218832e-5,2.6098059615421084e-8,-0.0010330613284611158,4.140165888760393e-5,2.6215931638488723e-8,-0.0010329777530100068,4.158819846524718e-5,2.631390656871405e-8,-0.0010329586810779521,4.170886241656704e-5,2.6376437158564403e-8,-0.001032975936317296,4.1743274993385874e-5,2.6393736765147437e-8,-0.0010329969885598913,4.168421213030391e-5,2.636277559384442e-8,-0.0010329892783965391,4.153821954893292e-5,2.62875676595281e-8,-0.0010329244588995863,4.132454750884092e-5,2.6178635261370543e-8,-0.001032782060381272,4.10726094101633e-5,2.6051674387741775e-8,-0.0010325522769319654,4.0818357819433007e-5,2.5925576579428118e-8,-0.0010322377709549141,4.0599882712942876e-5,2.5819988038191913e-8,-0.0010318544785740738,4.045240035953763e-5,2.575258468299546e-8,-0.001031431325710975,4.0402610592020545e-5,2.5736166079833738e-8,-0.0010310082903914864,4.04622844238969e-5,2.577556155474702e-8,-0.0010306315696239265,4.062155526853457e-5,2.586455506912295e-8,-0.0010303445107737654,4.084394736602622e-5,2.5983723580936618e-8,-0.00103017415051348,4.106712011714914e-5,2.6101034286724267e-8,-0.00103011645990442,4.121429379152592e-5,2.617762452180817e-8,-0.0010301283373702107,4.1218183604357294e-5,2.617978519094077e-8,-0.0010301360479824519,4.1049891214193474e-5,2.6093535091742128e-8,-0.0010300617418679534,4.073592787552085e-5,2.5933314593629573e-8,-0.0010298552834028627,4.0349707833675383e-5,2.5737635695545288e-8,-0.0010295123624857808,3.9981058901976845e-5,2.555325702866578e-8,-0.0010290699371210256,3.970266737753418e-5,2.541762182017323e-8,-0.0010285862799355606,3.95510226577242e-5,2.5348871652570656e-8,-0.001028119665030133,3.952567217658717e-5,2.5345604153804084e-8,-0.0010277146398166707,3.9599592103778894e-5,2.5392608827923747e-8,-0.0010273969445857086,3.9732019239784237e-5,2.54679029136312e-8,-0.0010271741439923543,3.987889635605635e-5,2.554837330653049e-8,-0.0010270387420002831,3.999979218338487e-5,2.5613362144150908e-8,-0.0010269717730998133,4.006209216467498e-5,2.564665439659544e-8,-0.0010269462335600545,4.004361181148552e-5,2.563758062373979e-8,-0.001026930475247916,3.993429582593155e-5,2.5581696150718296e-8,-0.0010268917955752411,3.9737131056284514e-5,2.54811632465487e-8,-0.0010268003254188763,3.946803547779058e-5,2.5344696049297998e-8,-0.001026633045285693,3.9154302349015926e-5,2.51867793373167e-8,-0.001026377413673644,3.883136780108241e-5,2.502596843310329e-8,-0.0010260339595217747,3.8538067531633994e-5,2.4882331374804033e-8,-0.00102561729797183,3.8310807330376756e-5,2.477430480252826e-8,-0.0010251551932449294,3.8177261675103885e-5,2.471538175976041e-8,-0.001024685487708184,3.8150384280356484e-5,2.4711128828705612e-8,-0.0010242508292970316,3.822352571453758e-5,2.475696413222644e-8,-0.0010238910923221203,3.836763523516221e-5,2.4837113045173785e-8,-0.0010236336767047106,3.853222377882937e-5,2.492543131105467e-8,-0.0010234830537858264,3.865239008611646e-5,2.49891058187856e-8,-0.0010234129983969168,3.8663590948988006e-5,2.4996031285257513e-8,-0.0010233670245726736,3.852273512816904e-5,2.492524814844594e-8,-0.001023271959887443,3.822833359285693e-5,2.4776942964655382e-8,-0.0010230632432314934,3.782769524653137e-5,2.4575998844550145e-8,-0.0010227107525744934,3.740279961889332e-5,2.436473371991324e-8,-0.0010222302402959167,3.703969137491942e-5,2.418716232193019e-8,-0.0010216740030515826,3.6798124988745376e-5,2.4073362152007457e-8,-0.001021108290579188,3.669683896443461e-5,2.4031974626159863e-8,-0.0010205912572348655,3.6717350983459955e-5,2.4052398420585333e-8,-0.0010201604372997207,3.681830406381751e-5,2.411249122180296e-8,-0.0010198303307530497,3.6950727918991715e-5,2.418666800590093e-8,-0.0010195960756659162,3.706898533184759e-5,2.4251597017513103e-8,-0.001019439056359185,3.713670445797552e-5,2.4289132019925126e-8,-0.001019332059571601,3.7129221763336125e-5,2.428734485125245e-8,-0.0010192433493335681,3.70343141516297e-5,2.4240686043212892e-8,-0.0010191400194511332,3.685229866278754e-5,2.4149908608415946e-8,-0.0010189911883879065,3.659580376531763e-5,2.402192783224623e-8,-0.0010187714343872375,3.628895436908966e-5,2.3869435845986977e-8,-0.0010184645132939021,3.596533710163379e-5,2.3709873676371996e-8,-0.001018066855839815,3.566412672527142e-5,2.3563393719128077e-8,-0.0010175898667280023,3.542425031334137e-5,2.3449761052332165e-8,-0.0010170599390659412,3.5277162817117435e-5,2.3384558945173422e-8,-0.001016515394012989,3.523949770501541e-5,2.3375440811865953e-8,-0.0010160002224420199,3.530738001007149e-5,2.3419397704779323e-8,-0.0010155553831384591,3.545419198619564e-5,2.3501928264935122e-8,-0.001015209142874551,3.563302488615149e-5,2.3598624983890202e-8,-0.0010149684067089226,3.5784346527384886e-5,2.3679292211144022e-8,-0.0010148133891465872,3.584860072421633e-5,2.3714344288769612e-8,-0.0010146982630651578,3.5782055660811007E-05,2.3682629377636572e-8,-0.0010145599654888093,3.557207326886522e-5,2.3578848270284908e-8,-0.0010143351722388912,3.5245823371830506e-5,2.3417678410022003e-8,-0.0010139811800521554,3.486632047924191e-5,2.3231576085062046e-8,-0.001013492050599654,3.4513974439642034e-5,2.3061330561170134e-8,-0.0010129013184621315,3.4259974954934804e-5,2.2942555475658693e-8,-0.0010122691652813616,3.4143842428325755e-5,2.289440024171102e-8,-0.001011660964001645,3.416527319904436e-5,2.291564249859294e-8,-0.0010111280235503381,3.429134318278579e-5,2.2988645742694414e-8,-0.0010106976785511353,3.447205752042876e-5,2.3087503664077148e-8,-0.0010103730798261847,3.465571175252602e-5,2.3185940039964153e-8,-0.0010101387428839818,3.479919616418346e-5,2.3262469964226124e-8,-0.0010099675794849883,3.487271276682596e-5,2.3302608900919384e-8,-0.0010098269209837737,3.4860699206272e-5,2.3299134968487392e-8,-0.0010096829020666328,3.476102080226269e-5,2.3251535621906485e-8,-0.0010095036482449427,3.4583741581220033e-5,2.316533851284319e-8,-0.00100926202814437,3.434990375649573e-5,2.3051517011118484e-8,-0.0010089385902406682,3.409004467856952e-5,2.2925769286763956e-8,-0.0010085248696185096,3.384168830235557e-5,2.2807227493595864e-8,-0.0010080265806791115,3.3644931550302674e-5,2.2716140262856692e-8,-0.0010074654828322916,3.353571640167953e-5,2.26703687608163e-8,-0.0010068782778092742,3.353743271134205e-5,2.268110345686206e-8,-0.0010063112194841138,3.36528689313314e-5,2.274888894220196e-8,-0.0010058104572475534,3.3859569732431347e-5,2.286150383963712e-8,-0.0010054101212326877,3.411145176628525e-5,2.2995062591133473e-8,-0.0010051217418514823,3.434769733360527e-5,2.3118734876600543e-8,-0.0010049287823506632,3.450726125747007e-5,2.3202145373587556e-8,-0.0010047886815621875,3.454511779650876e-5,2.3223469127649264e-8,-0.001004642523791172,3.444551550645358e-5,2.317587375654054e-8,-0.0010044301777682276,3.4228082912857005e-5,2.307029016040388e-8,-0.0010041070053985303,3.394428660482434e-5,2.293333606477324e-8,-0.0010036572007801948,3.366424530591849e-5,2.280046957873214e-8,-0.0010030989670374397,3.3457142010512746e-5,2.2706067870780697e-8,-0.001002478977520436,3.3371580578821594e-5,2.2673661179006083e-8,-0.0010018578283530568,3.342312200493025e-5,2.2709939398912565e-8,-0.0010012922882052613,3.359334378293894e-5,2.2804621910948108e-8,-0.0010008212275209021,3.3839363188058443e-5,2.2935524319804295e-8,-0.0010004594328713067,3.410840614322706e-5,2.3076001992787873e-8,-0.0010001992187818722,3.4351274842747164e-5,2.320166356575127e-8,-0.0010000167281470184,3.453101661995363e-5,2.3294552412610813e-8,-9.998793317252265e-4,3.462633409658824e-5,2.3344654270450874e-8,-9.997518470452732e-4,3.4631318428131296e-5,2.3349607127017085e-8,-9.996009199043014e-4,3.455348552109253e-5,2.3313647478180466e-8,-9.9939795849614e-4,3.44114906802232e-5,2.3246470434010358e-8,-9.99121407187035e-4,3.4233040893128126e-5,2.3162210737379513e-8,-9.987590833800812e-4,3.405276743515656e-5,2.3078368950141786e-8,-9.983108679056524e-4,3.390926822320403e-5,2.3014265042933495e-8,-9.97791306534957e-4,3.384032770146051e-5,2.2988554306834156e-8,-9.972307991430098e-4,3.3875718713881964e-5,2.3015580148524872e-8,-9.966733564831009e-4,3.4028221102158114e-5,2.310094837163757e-8,-9.961691020362934e-4,3.428546408696686e-5,2.3237638825588425e-8,-9.957615865134595e-4,3.46069401339788e-5,2.3404762682669036e-8,-9.954733186501152e-4,3.493021100327155e-5,2.357086532821176e-8,-9.952956330342465e-4,3.5186762200118035e-5,2.370192787102682e-8,-9.95188477807128e-4,3.532262383638006e-5,2.377162507367407e-8,-9.950913872963697e-4,3.5315508210565336e-5,2.376975873492727e-8,-9.94941500795456e-4,3.518154860532421e-5,2.3705430116577784e-8,-9.946916452042978e-4,3.496972133573339e-5,2.3603993034892922e-8,-9.943224955306555e-4,3.4747072949003844e-5,2.3499389344168517e-8,-9.938459958236127e-4,3.458033160070616e-5,2.3424766870853507e-8,-9.933002965673123e-4,3.451936283405707e-5,2.3404222600228282e-8,-9.92738532106868e-4,3.4586492210376424e-5,2.34477123751599e-8,-9.922149570488884e-4,3.47737697346077e-5,2.35500702634693e-8,-9.917723365169562e-4,3.504802300243e-5,2.369389615669735e-8,-9.91433801696836e-4,3.536137626092322e-5,2.385500900287136e-8,-9.912006576782077e-4,3.566352992413874e-5,2.4008564476421496e-8,-9.910555099664157e-4,3.591217265700787e-5,2.4134077453991628e-8,-9.909685467225334e-4,3.607935109184319e-5,2.4218367354514807e-8,-9.90904493799253e-4,3.615353059249766e-5,2.4256393376223053e-8,-9.90828480212809e-4,3.613845925610944e-5,2.4250587005171246e-8,-9.90710154736621e-4,3.605041340979941e-5,2.420946428455628e-8,-9.905262925749175e-4,3.5915102415850375e-5,2.4146106990416895e-8,-9.902625674466235e-4,3.576480559520487e-5,2.407673810359449e-8,-9.899151595612757e-4,3.563558997580312e-5,2.4019285840091026e-8,-9.894925239248037e-4,3.556393259086711e-5,2.399161892926978e-8,-9.890169789091286e-4,3.558183032668142e-5,2.400906596769323e-8,-9.885248529442735e-4,3.570977187754583e-5,2.4080982598891237e-8,-9.880631022206629e-4,3.594816942793109e-5,2.4206693186517794e-8,-9.876803749587692e-4,3.6270078383065484e-5,2.4372152484305683e-8,-9.874125517596248e-4,3.662032117452578e-5,2.4549731590826265e-8,-9.872671120179847e-4,3.6926008414473374e-5,2.470348797116585e-8,-9.872146960178598e-4,3.7118461255131244e-5,2.4799926090503432e-8,-9.871951531337715e-4,3.715829143129886e-5,2.482028574407889e-8,-9.871375620403313e-4,3.705077677427379e-5,2.476806781996489e-8,-9.869847448893906e-4,3.684329236067619e-5,2.466765451933042e-8,-9.867105450566658e-4,3.660725536650436e-5,2.4555140657066402e-8,-9.86323904247596e-4,3.641469724773145e-5,2.4466432455541804e-8,-9.858615016007492e-4,3.631928880259697e-5,2.442766534764061e-8,-9.85374633250025e-4,3.634645237112784e-5,2.4450388419430107e-8,-9.849156337300748e-4,3.649235218034662e-5,2.453139904021426e-8,-9.845270231932197e-4,3.672923823051199e-5,2.465582036281864e-8,-9.842346708626541e-4,3.7014300862134964e-5,2.4801822245291615e-8,-9.840451716688692e-4,3.729969081586018e-5,2.4945700886248175e-8,-9.839470708571595e-4,3.754181375466232e-5,2.5066377411016933e-8,-9.839150653915634e-4,3.770836043790428e-5,2.514864253568232e-8,-9.83915845150665e-4,3.778218739727299e-5,2.5184832131647895e-8,-9.839141440703577e-4,3.776204586365129e-5,2.5175023720621267e-8,-9.838778946578378e-4,3.7660825559131726e-5,2.5126110722890017e-8,-9.837819111355383e-4,3.750231363693385e-5,2.5050212268447694e-8,-9.83610120160167e-4,3.731747931219535e-5,2.4962853060990782e-8,-9.833567922937184e-4,3.714089212336408e-5,2.4881163070795294e-8,-9.830272886633775e-4,3.700727412351498e-5,2.4822096717103307e-8,-9.826385911278707e-4,3.69477424015823e-5,2.4800505830703303e-8,-9.82219396284537e-4,3.698509836147771e-5,2.4826830050034716e-8,-9.818087670899545e-4,3.712771767756578e-5,2.4904243886600084e-8,-9.814515702841564e-4,3.7362648046258683e-5,2.5025539421476875e-8,-9.811889802018954e-4,3.7650571338024e-5,2.5170939795615703e-8,-9.810442154511204e-4,3.792755371116602e-5,2.5309102919604293e-8,-9.810080333830023e-4,3.811864493199592e-5,2.5403711739960307e-8,-9.81033207624282e-4,3.8163102204115404e-5,2.5425633123846726e-8,-9.810462359989666e-4,3.804100654306584e-5,2.5365828059548833e-8,-9.809743731534347e-4,3.778505688611488e-5,2.524112956896296e-8,-9.807739041156364e-4,3.746843502401319e-5,2.508825210734586e-8,-9.804438663459916e-4,3.717577379911337e-5,2.4949313572355698e-8,-9.800204118408863e-4,3.697428727925494e-5,2.485733884169189e-8,-9.795593431768212e-4,3.6897909348930136e-5,2.4828320900585492e-8,-9.791176972697106e-4,3.694613487266822e-5,2.4860822858248447e-8,-9.78740821256568e-4,3.709208601691692e-5,2.4940346749398108e-8,-9.784561041063255e-4,3.7293678129001164e-5,2.5045249521682385e-8,-9.782718489133458e-4,3.7504071244625615e-5,2.5152145120602866e-8,-9.781792758595254e-4,3.7679941882763186e-5,2.5239992535436655e-8,-9.781562333794412e-4,3.778745647138105e-5,2.5292850462091087e-8,-9.781718882523143e-4,3.780606999115621e-5,2.530147602469855e-8,-9.781918620216884e-4,3.773013883351006e-5,2.5263886480747403e-8,-9.781832167389938e-4,3.7568458080856365e-5,2.518501010675023e-8,-9.78118742072559e-4,3.7342042791065954e-5,2.507558218052921e-8,-9.779801236071979e-4,3.708061130398327e-5,2.4950452157285786e-8,-9.777597868775496e-4,3.681839353569755e-5,2.4826535622686178e-8,-9.774615375963498e-4,3.6589861622145944e-5,2.47206704952449e-8,-9.771002958644923e-4,3.642562803302159e-5,2.464752335844287e-8,-9.767011177636903e-4,3.6348412775412787e-5,2.461757103592887e-8,-9.762974059618317e-4,3.636884684333104e-5,2.463512177599872e-8,-9.759277035517238e-4,3.648101405343806e-5,2.4696356361916733e-8,-9.75629951246629e-4,3.665840901177218e-5,2.4787660934629145e-8,-9.754322748465593e-4,3.685252659570957e-5,2.4885193908702775e-8,-9.75340987613693e-4,3.699788916582287e-5,2.495739454375517e-8,-9.753299684090048e-4,3.702722840929396e-5,2.4972198717358794e-8,-9.753395265608093e-4,3.689599167738356e-5,2.490869287630752e-8,-9.752920720559031e-4,3.6606102877796636e-5,2.4768523544825133e-8,-9.751219280535475e-4,3.62127126348543e-5,2.457919604533296e-8,-9.748035378869218e-4,3.580501071706199e-5,2.4384716721739845e-8,-9.743604317943561e-4,3.5470563709328834E-05,2.4228018734390125e-8,-9.738510761405169e-4,3.526450154078282e-5,2.4135686744524703e-8,-9.733435765106256e-4,3.519840608946445e-5,2.411249078547065e-8,-9.728943634004211e-4,3.5247780682422384e-5,2.4145284649450995e-8,-9.725377477092212e-4,3.536768335651393e-5,2.4211049479849402e-8,-9.722848444423038e-4,3.550754893515966e-5,2.428448154165182e-8,-9.72127563371285e-4,3.562150854076412e-5,2.4343174928178926e-8,-9.720441769973178e-4,3.567417242302132e-5,2.437035998268252e-8,-9.720046367152485e-4,3.56432887461309e-5,2.4355963585866076e-8,-9.719752390974952e-4,3.552063301357858e-5,2.4296779131561367e-8,-9.719228596586245e-4,3.531171554305102e-5,2.4196141313711178e-8,-9.718188423673552e-4,3.503437202507118e-5,2.406317927089353e-8,-9.716423998941957e-4,3.471621408885309e-5,2.3911605715671775e-8,-9.713832408989576e-4,3.439096166140005e-5,2.3757978780585042e-8,-9.710430366130846e-4,3.409389102193965e-5,2.361948593481193e-8,-9.70635446133547e-4,3.3856923351839665e-5,2.3511491505683215e-8,-9.701846919981149e-4,3.370390574741038e-5,2.3445165212560717e-8,-9.697228228770885e-4,3.364647614797688e-5,2.342546325722505e-8,-9.692857745624962e-4,3.368081166293388e-5,2.3449670440655165e-8,-9.689081926968012e-4,3.378557365972413e-5,2.3506650641077334e-8,-9.686168099705691e-4,3.392170644199995e-5,2.357703705485365e-8,-9.684224658620934e-4,3.4035563171401795e-5,2.3634937383161203e-8,-9.68312113340623e-4,3.406746818840269e-5,2.3652061632635778e-8,-9.682443258694862e-4,3.396706662113197e-5,2.3604922859051918e-8,-9.681538286062369e-4,3.371329935534211e-5,2.348419799835916e-8,-9.679692761326831e-4,3.333058404686902e-5,2.330235800983941e-8,-9.676407409410866e-4,3.2888734991917684e-5,2.3093584924486144e-8,-9.671629996624705e-4,3.2480309923178234e-5,2.2902797651000153e-8,-9.665791080763037e-4,3.2184835146996645e-5,2.276825671546724e-8,-9.659613244934983e-4,3.204046428493923e-5,2.270778086296016e-8,-9.653822640887052e-4,3.203767611505963e-5,2.2715798323767404e-8,-9.648929276683705e-4,3.213287335072607e-5,2.2770213229558723e-8,-9.645149837962753e-4,3.226903530996189e-5,2.2842729866168465e-8,-9.642442355567376e-4,3.239247708087407e-5,2.2907171397624284e-8,-9.640587530216115e-4,3.24620993246358e-5,2.2943963859402317e-8,-9.639270001539048e-4,3.245248074250296e-5,2.2941464499432092e-8,-9.638140578411377e-4,3.235353569481727e-5,2.2895550510650823e-8,-9.6368595444148e-4,3.2168912493880215e-5,2.28086319018673e-8,-9.635128997527551e-4,3.191410788621952e-5,2.2688634455621677e-8,-9.632720633656184e-4,3.161432337084309e-5,2.2547969983926774e-8,-9.629500908473864e-4,3.1301728190777524e-5,2.2402276055104036e-8,-9.625451789726969e-4,3.101176374193039e-5,2.226867575507521e-8,-9.620681774777247e-4,3.077836455776551e-5,2.216345368450055e-8,-9.615420329416084e-4,3.0628500411465295e-5,2.209935540113096e-8,-9.609991467969121e-4,3.057690888665009e-5,2.2082994490797295e-8,-9.604766797714861e-4,3.062205911343596e-5,2.2112942498469528e-8,-9.600102747775835e-4,3.074434601472043e-5,2.2179018433807102e-8,-9.596270214263777e-4,3.090724439259373e-5,2.2263089974248304e-8,-9.593386562986945e-4,3.1061771792007744e-5,2.2341454918293274e-8,-9.591361349101454e-4,3.1154428547892235e-5,2.2388764734143828e-8,-9.589871735461636e-4,3.113854434292479e-5,2.2383389507898628e-8,-9.588390052667267e-4,3.0987899671081076e-5,2.23137088373979e-8,-9.586285812047179e-4,3.0709291166627064e-5,2.2183841699676357e-8,-9.583004549904042e-4,3.034807980718291e-5,2.20160808943815e-8,-9.578277490469907e-4,2.9980170319710332e-5,2.1846942684937246e-8,-9.572262091683876e-4,2.968886340238766e-5,2.1716059377740093e-8,-9.565515092747311e-4,2.953507814969651e-5,2.1651963566920276e-8,-9.558790138711099e-4,2.9536365304518656e-5,2.166217296734255e-8,-9.552767930981623e-4,2.9665583334704913e-5,2.173278583758932e-8,-9.547860467171304e-4,2.9867061406297094e-5,2.1836474927304304e-8,-9.544158266696612e-4,3.0078540975903094e-5,2.1943173400982044e-8,-9.541492278461368e-4,3.024805141205629e-5,2.20281932369835e-8,-9.539540335951516e-4,3.034185193150517e-5,2.2075920768301698e-8,-9.537924048895253e-4,3.0345247140230987e-5,2.208000983233228e-8,-9.536275311546465e-4,3.025982229495277e-5,2.204185499562896e-8,-9.534275077413425e-4,3.0099841725022342e-5,2.1968736705240954e-8,-9.531675967845711e-4,2.9889041402266785e-5,2.187225621318765e-8,-9.528318988517542e-4,2.9657867759765324e-5,2.1767059789256722e-8,-9.524149404686213e-4,2.9440645440285744e-5,2.1669541941369942e-8,-9.519231274636026e-4,2.9272003957849185e-5,2.1596154336982085e-8,-9.513754532627277e-4,2.9182105324352853e-5,2.156109047838405e-8,-9.508024505321581e-4,2.9190878090889825e-5,2.1573483188737836e-8,-9.502424663511357e-4,2.9302351813132366e-5,2.1634700321363326e-8,-9.49735030418587e-4,2.9500882232911995e-5,2.1736638845838566e-8,-9.493122042363756e-4,2.975120128025421e-5,2.1861931766478845e-8,-9.489899450602254e-4,3.0003488125871785e-5,2.19865714491652e-8,-9.487620601966599e-4,3.020311750055373e-5,2.2084695992892515e-8,-9.485988957950232e-4,3.030316317880326e-5,2.2134553407674564e-8,-9.484518091654521e-4,3.0276810472256283e-5,2.2124270364054122e-8,-9.482632222856166e-4,3.0126538386465414e-5,2.205597301242971e-8,-9.479807554179524e-4,2.9887047408005317e-5,2.194689841841948e-8,-9.475724436270446e-4,2.961960692398054e-5,2.1826477535904775e-8,-9.470384606933393e-4,2.9397309036501518e-5,2.1729216202936675e-8,-9.464140919087501e-4,2.9284117233135745e-5,2.168479093152599e-8,-9.457607135250013e-4,2.931474722874649e-5,2.1708699518209903e-8,-9.451468703045619e-4,2.948415363474355e-5,2.179756824154432e-8,-9.446272642077682e-4,2.975166154093429e-5,2.19313942223417e-8,-9.442287741878977e-4,3.005706659105484e-5,2.2081348790756766e-8,-9.439480612138644e-4,3.0340177706433605e-5,2.2219059244211306e-8,-9.437587330039747e-4,3.05555047742844e-5,2.232346391891961e-8,-9.436224123828684e-4,3.0678595514250895e-5,2.2383640253534496e-8,-9.434987028230832e-4,3.0705355294702186e-5,2.2398300631400305e-8,-9.433518093842979e-4,3.0647746413302585e-5,2.2373619930447855e-8,-9.431539596951896e-4,3.052879162175852e-5,2.2320812424416252e-8,-9.42886827941632e-4,3.0378337056025078e-5,2.2254139731918605e-8,-9.425421763466582e-4,3.0229750427711546e-5,2.2189391361884014e-8,-9.421224563862095e-4,3.011700715597695e-5,2.2142531937943215e-8,-9.416414774327706e-4,3.0071346469157127e-5,2.212810620989906e-8,-9.411245660268458e-4,3.0116816661240038e-5,2.215710354642401e-8,-9.406070615964384e-4,3.026467552618603e-5,2.2234316233793085e-8,-9.40129838692488e-4,3.050774422637882e-5,2.2355753528190237e-8,-9.397312194328286e-4,3.0817081031483444e-5,2.2507225708871276e-8,-9.394363651629871e-4,3.1143952690525606e-5,2.266544635054926e-8,-9.39247469629382e-4,3.14289902634384e-5,2.2802467253505157e-8,-9.391392811567771e-4,3.161734154321736e-5,2.28928419535772e-8,-9.390631834203985e-4,3.1675072753920046e-5,2.292128485717643e-8,-9.389595011470184e-4,3.160054917881444e-5,2.2887892684632222e-8,-9.38774017044829e-4,3.142629938669554e-5,2.2808821851867562E-08,-9.384731170441491e-4,3.121073248180759e-5,2.2712144428496986e-8,-9.380529653295315e-4,3.102263562512172e-5,2.2630329259409035e-8,-9.37540421932073e-4,3.0923179639618185e-5,2.2591680785415607e-8,-9.369857583175107e-4,3.095034383443137e-5,2.261312414301245e-8,-9.364492385837592e-4,3.1109898640259824e-5,2.269626110812058e-8,-9.359853619300495e-4,3.137546064701527e-5,2.2827755619925506e-8,-9.356295240548179e-4,3.16974681512932e-5,2.2983821119346855e-8,-9.353911527823038e-4,3.2017802198202046e-5,2.313717510433112e-8,-9.35254811672147e-4,3.228479107023496e-5,2.326399499414142e-8,-9.351875597689146e-4,3.2463820357644084e-5,2.3348709349042408e-8,-9.351488611202442e-4,3.2541398176328435e-5,2.338570291153537e-8,-9.350994833205346e-4,3.25234996917194e-5,2.3378386345866902e-8,-9.350074661012362e-4,3.2430678404906835e-5,2.333682380228043e-8,-9.348510276335349e-4,3.229243028857118e-5,2.3275080016553152e-8,-9.346193314669444e-4,3.214231620297721e-5,2.3208959235950077e-8,-9.34312262797197e-4,3.2014221186669155e-5,2.3154273367792384e-8,-9.339400414025882e-4,3.193933185076618e-5,2.3125418905859264e-8,-9.33522913696338e-4,3.194305448645945e-5,2.3133910756853474e-8,-9.330904862493931e-4,3.204115275895757e-5,2.3186578394138074e-8,-9.326796244283101e-4,3.223492294630654e-5,2.3283386135426127e-8,-9.323295184334296e-4,3.250635238251842e-5,2.3415326287966734e-8,-9.320730236673442e-4,3.281574833663746e-5,2.356349553000111e-8,-9.319252711366798e-4,3.310543782936856e-5,2.3700943505328696e-8,-9.318736216132645e-4,3.331219177128394e-5,2.3798471243414568e-8,-9.318752640651988e-4,3.338676318697942e-5,2.3833655432768257e-8,-9.31866963948998e-4,3.331301147491189e-5,2.3799668733206908e-8,-9.317849968972861e-4,3.311655040946259e-5,2.3709231637614105e-8,-9.315865645433877e-4,3.2857438239323513e-5,2.3591073380549135e-8,-9.312628626536916e-4,3.2610345594110236e-5,2.3480457903216238e-8,-9.308393005661033e-4,3.24417200448329e-5,2.3408301483171562e-8,-9.303651936824847e-4,3.239281090859414e-5,2.339318150193606e-8,-9.298986864069065e-4,3.24725338782039e-5,2.343818307136948e-8,-9.29492219127464e-4,3.265959531263871e-5,2.3532245846076462e-8,-9.291818021359038e-4,3.2911055999915944e-5,2.3654527540462002e-8,-9.289814804693926e-4,3.317408157338681e-5,2.3780107907133812e-8,-9.28883102878134e-4,3.339795710135585e-5,2.3885603751994195e-8,-9.288606081706539e-4,3.3543937048918637e-5,2.3953598676844333e-8,-9.288772589118661e-4,3.3591181371482934e-5,2.3975172255395918e-8,-9.288937419745458e-4,3.353814016920971e-5,2.395033272948154e-8,-9.288751893623011e-4,3.340004673214571e-5,2.3886721538417358e-8,-9.287959268978146e-4,3.320403594462646e-5,2.3797303763589087e-8,-9.286417064222096e-4,3.298355112980294e-5,2.369778683496962e-8,-9.284099392258089e-4,3.277328729013441e-5,2.3604298515993387e-8,-9.281087947963245e-4,3.260518664063019e-5,2.3531530406527254e-8,-9.277558922978596e-4,3.25053020042501e-5,2.3491259018736307e-8,-9.27376881127838e-4,3.2490978444289704E-05,2.349102519309791e-8,-9.270036743482587e-4,3.2567791005183e-5,2.3532761106056747e-8,-9.266715169341242e-4,3.2726055504754945e-5,2.361130945511728e-8,-9.264137151151058e-4,3.293770276831043e-5,2.3713172494102367e-8,-9.262532777753961e-4,3.315574465668824e-5,2.3816439311101114e-8,-9.261924253535585e-4,3.331972423030237e-5,2.389335984974595e-8,-9.262040127993932e-4,3.336992217268715e-5,2.3916815814377182e-8,-9.262317722939682e-4,3.326872605091641e-5,2.3870037451283865e-8,-9.26204733848964e-4,3.3020183443077696e-5,2.3755545743126395e-8,-9.260627882338456e-4,3.267485106444268e-5,2.3597373291928313e-8,-9.257806549268176e-4,3.2313603001887904e-5,2.343349628055146e-8,-9.253766285983505e-4,3.201794497161325e-5,2.3301884783205278e-8,-9.249026226141552e-4,3.1842977355389055e-5,2.3227766419155888e-8,-9.244236141866019e-4,3.1804942562237756e-5,2.321783898637054e-8,-9.239978305283136e-4,3.188429203691447e-5,2.3261932645223352e-8,-9.236643245273065e-4,3.203781785436325e-5,2.3339012154274225e-8,-9.234386977616611e-4,3.221281488408803e-5,2.3424069805742805e-8,-9.233147289125141e-4,3.235906739356297e-5,2.3493825767808208e-8,-9.232692914346888e-4,3.243722377144107e-5,2.3530540271546322e-8,-9.232686902572398e-4,3.242362191865267e-5,2.3524031114582375e-8,-9.232753070314963e-4,3.231198064538372e-5,2.347219924760264e-8,-9.232537561991422e-4,3.211234823824068e-5,2.3380345332508162e-8,-9.231758558037119e-4,3.1847866001873865e-5,2.3259584838009844e-8,-9.230239270817444e-4,3.155012781518374e-5,2.3124710835478002e-8,-9.227922362546493e-4,3.1253999746506684e-5,2.299185234886264e-8,-9.224867387452752e-4,3.0992724464646724e-5,2.2876250708263638e-8,-9.221236055597706e-4,3.079385597163362e-5,2.27903811393233e-8,-9.217270560533948e-4,3.067609570471294e-5,2.2742468990955336e-8,-9.213267796337176e-4,3.064680318714811e-5,2.2735346156833847e-8,-9.20954912564315e-4,3.0699934328855683e-5,2.2765581416612138e-8,-9.206421478418023e-4,3.08143607477365e-5,2.2822873109824424e-8,-9.204122660196305e-4,3.095320827010874e-5,2.2889943688910157e-8,-9.202747886912586e-4,3.106597764009101e-5,2.2943650815208422e-8,-9.20216936947342e-4,3.1095988189358365e-5,2.2958395502173376e-8,-9.201985234595585e-4,3.099497926622176e-5,2.2912665548665453e-8,-9.201557642877907e-4,3.074296687634402e-5,2.2797948208220792e-8,-9.200186966514138e-4,3.0364621739963786e-5,2.2626137511840795e-8,-9.197385636888824e-4,2.9929213138156976e-5,2.242949417390068e-8,-9.193108394574188e-4,2.9527970187913423e-5,2.225019669376877e-8,-9.187785340875029e-4,2.9238845703639758e-5,2.2123997801802605e-8,-9.182134225021054e-4,2.9098989670442113e-5,2.2067447146301895e-8,-9.176879830111815e-4,2.9098589555165532e-5,2.2075132170368005e-8,-9.17253784391652e-4,2.9193712335522423e-5,2.212586268610836e-8,-9.169332050515159e-4,2.932621852597383e-5,2.2192168520093514e-8,-9.167219505579218e-4,2.944065181810668e-5,2.224829932694638e-8,-9.165966656263807e-4,2.949439756587482e-5,2.2274934020959177e-8,-9.165233093736817e-4,2.9461840863147958e-5,2.226094758259148e-8,-9.164642868928159e-4,2.9334685108527463e-5,2.220331133229603e-8,-9.163839913645998e-4,2.9120232422900573e-5,2.2106066579955823e-8,-9.162530317647461e-4,2.883851348103519e-5,2.1978863978225656e-8,-9.160513185398048e-4,2.8518597058158136e-5,2.1835244906513958e-8,-9.15769988624412e-4,2.8194298243653313e-5,2.1690730238489156e-8,-9.154120664548803e-4,2.7899535170271005e-5,2.1560765750180442e-8,-9.149917488095805e-4,2.7663738874698725e-5,2.1458654195702416e-8,-9.145323801553542e-4,2.7507851429598272e-5,2.1393709233720136e-8,-9.140634112563936e-4,2.744128142921948e-5,2.136983448703116e-8,-9.136166435043148e-4,2.745994641856036e-5,2.1384644526880326e-8,-9.13221944692427e-4,2.754549808736449e-5,2.1429208794373388e-8,-9.129024910120398e-4,2.7665888640565562e-5,2.148847949703196e-8,-9.126694819496386e-4,2.7777706431344518e-5,2.154253176218981e-8,-9.125166098566058e-4,2.7831321553144563e-5,2.156899691685832e-8,-9.124157000485842e-4,2.7780165658292776e-5,2.1547232079309533e-8,-9.123165267733067e-4,2.759442992476146e-5,2.1464373542698462e-8,-9.121548623777333e-4,2.7276427140508372e-5,2.1322119221499095e-8,-9.118711019526034e-4,2.6870144591949852e-5,2.114094313683426e-8,-9.114350063079968e-4,2.6455006129514234e-5,2.0957209029743784e-8,-9.108634742462995e-4,2.6120092101343845e-5,2.081139801841706e-8,-9.102178200814272e-4,2.5929424367736944e-5,2.0732255869559906e-8,-9.095797117160946e-4,2.5898353086471822e-5,2.0726067368364644e-8,-9.090202329768966e-4,2.5993933266429337e-5,2.077699539719869e-8,-9.085793014011967e-4,2.615479802733407e-5,2.0856387709915296e-8,-9.082619863653898e-4,2.6315579246745158e-5,2.09341239475786e-8,-9.080467696016204e-4,2.6424152758084614e-5,2.098656643738969e-8,-9.078974977973308e-4,2.6448875948786817e-5,2.0999792057647626e-8,-9.077736775849799e-4,2.6378608518081082e-5,2.0969414117202983e-8,-9.076374388060467e-4,2.621931034153885e-5,2.089880711320176e-8,-9.074576563940846e-4,2.598981028468818e-5,2.0797007293920687e-8,-9.072123555606045e-4,2.5717763310892864e-5,2.067680801973962e-8,-9.068901702931364e-4,2.543581375595846e-5,2.055305287961445e-8,-9.064910919600087e-4,2.51777245706118e-5,2.044096225969404e-8,-9.060264239903059e-4,2.497429600456872e-5,2.0354350101638346e-8,-9.055176396903595e-4,2.4849147035049042e-5,2.0303725663131417e-8,-9.049938331462582e-4,2.48148520431951e-5,2.0294513960783498e-8,-9.044877759473634e-4,2.487013629166907e-5,2.0325761996341625e-8,-9.040309431041147e-4,2.4998716181532725e-5,2.0389648367651206e-8,-9.036480496186143e-4,2.5170219741609872e-5,2.0472012539751645e-8,-9.033517513971097e-4,2.534346091236584e-5,2.0553994872596846e-8,-9.031382345469437e-4,2.5472113323665762e-5,2.0614734900078757e-8,-9.029845516590252e-4,2.5512741628428336e-5,2.0635033273204925e-8,-9.028490149929373e-4,2.5434954827073677e-5,2.0601836238167363e-8,-9.026764902106563e-4,2.5232408447057923e-5,2.0513003051675774e-8,-9.02410173775587e-4,2.4931333305205534e-5,2.03809375747986e-8,-9.020092509206674e-4,2.459113424824214e-5,2.0232703367730958e-8,-9.014671775780341e-4,2.4291763948560345e-5,2.0104263036672917e-8,-9.008206650653747e-4,2.4108119510329703e-5,2.0028949316011377e-8,-9.001407652157997e-4,2.40815816794724e-5,2.002473027343289e-8,-8.995076036470077e-4,2.4204454860463047e-5,2.0087372224985797e-8,-8.989819618378563e-4,2.442640209534498e-5,2.0193550978397385e-8,-8.985886426926948e-4,2.4677367529835956e-5,2.0311351442965695e-8,-8.983168875609791e-4,2.489249041554455e-5,2.0411570672683616e-8,-8.981321994515865e-4,2.5027742305275945e-5,2.0474734817052442e-8,-8.979905680705888e-4,2.506411353886881e-5,2.0492861273368607e-8,-8.978493659111419e-4,2.50042478933684e-5,2.0467761838839778e-8,-8.976735626310779e-4,2.486629512223054e-5,2.040810250953443e-8,-8.974383807300419e-4,2.46779904367794e-5,2.0326637181998767e-8,-8.971300793370073e-4,2.447195277178342e-5,2.0238087853917463e-8,-8.967460299014721e-4,2.4281946492655756e-5,2.0157529321890946e-8,-8.962944874862408e-4,2.41394984040332e-5,2.009894778188007e-8,-8.957939342688571e-4,2.4070383811391924e-5,2.0073707412014148e-8,-8.952715333108823e-4,2.4090842783267837e-5,2.0088849549234874e-8,-8.94760107898572e-4,2.420397021695154e-5,2.014545178891125e-8,-8.942933680114259e-4,2.4397265038716906e-5,2.0237535845060154e-8,-8.938997498069575e-4,2.4642474151023778e-5,2.0352064205131918e-8,-8.935958998883974e-4,2.4898610660257977E-05,2.047041270308535e-8,-8.933813137979958e-4,2.5118392150347438e-5,2.057138082449648e-8,-8.932357382837027e-4,2.525738915614616e-5,2.0635360425476936e-8,-8.931205738507962e-4,2.5284299096435977e-5,2.0648906749984923e-8,-8.929848689198422e-4,2.5190265415252555e-5,2.0608774843090036e-8,-8.927757350545704e-4,2.4994824362930195e-5,2.052437537467493e-8,-8.924519189134882e-4,2.4745797708676503e-5,2.0417514294488545e-8,-8.919975931406865e-4,2.4510848006438183e-5,2.031846414448125e-8,-8.914314961573257e-4,2.436039906856739e-5,2.0258291785338553e-8,-8.908058509117407e-4,2.4345690900774747e-5,2.0259156353576073e-8,-8.901923458736179e-4,2.4480408023514104e-5,2.032632704668696e-8,-8.896591855754514e-4,2.473538117757218e-5,2.0446077286436584e-8,-8.892494467896753e-4,2.505003874490458e-5,2.0590986107984132e-8,-8.889707658958967e-4,2.5354671159387962e-5,2.0729934824061592e-8,-8.887992171195747e-4,2.5592069573353648e-5,2.0837712880844427e-8,-8.886922966930062e-4,2.572983863637043e-5,2.0900398514110002e-8,-8.886031916452067e-4,2.576187327548421e-5,2.0915874009217856e-8,-8.884910916697882e-4,2.5702806387382103e-5,2.0891201501616617e-8,-8.883263469942507e-4,2.5580247122862124e-5,2.0839048300129043e-8,-8.880918126579759e-4,2.5427917810549098e-5,2.0774582188619598e-8,-8.877822930623571e-4,2.528066113611859e-5,2.071327182632323e-8,-8.874034503409459e-4,2.51709375729389e-5,2.0669390176493168e-8,-8.869707261418254e-4,2.5125989723721748e-5,2.0654810035291582e-8,-8.865081500699982e-4,2.5164954314173364e-5,2.067774642510077e-8,-8.86046435520712e-4,2.5295625909005256e-5,2.074132329135633e-8,-8.856195799846079e-4,2.5511276908268373e-5,2.0842176511925037e-8,-8.852594627043434e-4,2.578871501824554e-5,2.0969645761179816e-8,-8.849887434082308e-4,2.6089236359805585e-5,2.1106290594163275e-8,-8.848135668142814e-4,2.6363915683878577e-5,2.12303363316089e-8,-8.847186517320325e-4,2.6563437790964064e-5,2.132009779085571e-8,-8.846674515235134e-4,2.6650601378864086e-5,2.1359523275735847e-8,-8.846087189309281e-4,2.66117823350549e-5,2.1343206192558952e-8,-8.844884826177575e-4,2.6463259603390726e-5,2.1279054822091283e-8,-8.84264302201615e-4,2.6249677950410016e-5,2.1187425909026206e-8,-8.839176546726403e-4,2.6034332006823362e-5,2.109662263366006e-8,-8.83460649868888e-4,2.588342561020468e-5,2.1035784916221402e-8,-8.82934630955511e-4,2.584833167410523e-5,2.102703848956324e-8,-8.824002202963414e-4,2.595091364572211e-5,2.1079174189276926e-8,-8.81920975885244e-4,2.61768927835987e-5,2.1185003004173495e-8,-8.815456299885851e-4,2.648030419312936e-5,2.132360042425762e-8,-8.812952960849518e-4,2.6797977084991984e-5,2.146685384949102e-8,-8.811602994497689e-4,2.7068443874576867e-5,2.1587808754275467e-8,-8.811068251980501e-4,2.7247856141716944e-5,2.1667584069800153e-8,-8.81089260979772e-4,2.7317788146902162e-5,2.169866440830599e-8,-8.810626671495409e-4,2.7284359038585255e-5,2.168436095027221e-8,-8.809914703339173e-4,2.7171697969967655e-5,2.1635803660338795e-8,-8.80853375306616e-4,2.7013728986054004e-5,2.1568241334736312e-8,-8.806396376131523e-4,2.6847076911299085e-5,2.14978976330453e-8,-8.803534902028214e-4,2.670608170906783e-5,2.1439805851815076e-8,-8.800081064751453e-4,2.661959400830792e-5,2.140644761622855e-8,-8.796247407013677e-4,2.6608697363742646e-5,2.1406789555317838e-8,-8.792309875330124e-4,2.668453948521081e-5,2.1445354689839482e-8,-8.788585456571649e-4,2.684586308158884e-5,2.152116684744657e-8,-8.78539601693883e-4,2.7076554888474195e-5,2.162673250547703e-8,-8.783011687268403e-4,2.7344451028370228e-5,2.1747606543339466e-8,-8.781575952511767e-4,2.760340690883203e-5,2.1863392752506867e-8,-8.781030584565838e-4,2.780060405021578e-5,2.1951002414711444e-8,-8.781075985026394e-4,2.7889387640801088e-5,2.1990279643567898e-8,-8.781205807905475e-4,2.7844561840664714e-5,2.197066505165757e-8,-8.780829418086908e-4,2.767387999018061e-5,2.1896173090185512e-8,-8.779448870805086e-4,2.74194206923248e-5,2.178590013371832e-8,-8.776820355245091e-4,2.7146767973214645e-5,2.166911671129024e-8,-8.773032995196551e-4,2.692589193920319e-5,2.157667830482182e-8,-8.768478522267831e-4,2.6811226903755186e-5,2.153215088316852e-8,-8.763733034865937e-4,2.6827771709541934e-5,2.1545755773169187e-8,-8.759398672705631e-4,2.6966612293309254e-5,2.1612637371882027e-8,-8.75595423955086e-4,2.718972268856917e-5,2.171528609991872e-8,-8.753651397527334e-4,2.744156484383133e-5,2.182888124213572e-8,-8.75247681912975e-4,2.766380317219204e-5,2.1927841507686533e-8,-8.752182834583848e-4,2.7809084316441637e-5,2.1991802394858896e-8,-8.752370705991506e-4,2.78503969031841e-5,2.2009553750829985e-8,-8.752596751637627e-4,2.7784140827711733e-5,2.1980196488628183e-8,-8.752468743315799e-4,2.7627256123099378e-5,2.1911727125109708e-8,-8.751709906385506e-4,2.741056684869909e-5,2.181802519722558e-8,-8.750184292407893e-4,2.717106230583093e-5,2.1715442258405405e-8,-8.747891179445456e-4,2.6945211256019782e-5,2.161989799005169e-8,-8.744942264117304e-4,2.6764246324536103e-5,2.1544865267399724e-8,-8.741534012510591e-4,2.6651298588158375e-5,2.1500162537119337e-8,-8.73792188217311e-4,2.6619664630001775e-5,2.1491228293641114e-8,-8.734396730616577e-4,2.6671435073366737e-5,2.1518551762450664e-8,-8.731258580016011e-4,2.679606382670435e-5,2.1577100432093963e-8,-8.7287798682881e-4,2.696908317973565e-5,2.165584590639723e-8,-8.727151324958717e-4,2.7152056798777518e-5,2.1737843898724333e-8,-8.726411876491597e-4,2.7295776371153268e-5,2.180169400597056e-8,-8.72638123277193e-4,2.7348884643569248e-5,2.1825288578833227e-8,-8.726635290724197e-4,2.7272385770363037e-5,2.1792059497611342e-8,-8.726572026318421e-4,2.7056308642078688e-5,2.16981558387545e-8,-8.725583379939474e-4,2.673014546177635e-5,2.1556946339519295e-8,-8.723277672615219e-4,2.6358529275551267e-5,2.1397083391496553e-8,-8.719640776249092e-4,2.6020955368897574e-5,2.1253534423843147e-8,-8.715045501738401e-4,2.5784651947306544e-5,2.1155571953329428e-8,-8.71011034255676e-4,2.5683903518439307e-5,2.1117663450457478e-8,-8.705491307552995e-4,2.5713812934991007e-5,2.113685431521052e-8,-8.701702166525884e-4,2.5837496324388218e-5,2.119617587482424e-8,-8.699014006819977e-4,2.6000426627921144e-5,2.1271201276789622e-8,-8.697436570127698e-4,2.6145631661998167e-5,2.1336868320268546e-8,-8.696759171271625e-4,2.6225891752515828E-05,2.137282593288771e-8,-8.696624900426764e-4,2.621144415050257e-5,2.136666972028361e-8,-8.696616766384265e-4,2.609309797451578e-5,2.1315093592520665e-8,-8.696339802855976e-4,2.58812240139253e-5,2.1223246173929514e-8,-8.695486258957221e-4,2.560145694153938e-5,2.1102720086846007e-8,-8.693875014404906e-4,2.5288439658636282e-5,2.096877998090809e-8,-8.691463110554454e-4,2.4979158898865863e-5,2.083749001199522e-8,-8.688333814216199e-4,2.4707133641329762e-5,2.0723252879501703e-8,-8.684669509396333e-4,2.449818770419122e-5,2.0637035505226535e-8,-8.680718625220174e-4,2.4367943926356345e-5,2.0585317375536392e-8,-8.676763190924599e-4,2.432063005736646e-5,2.0569587886541e-8,-8.673088635246923e-4,2.4348592526606557e-5,2.0586157121313442e-8,-8.669953180759233e-4,2.4432155464044134e-5,2.0626149014017224e-8,-8.667551694766482e-4,2.4539935083866278e-5,2.0675728630559995e-8,-8.665969051568935e-4,2.4630410220170644e-5,2.0716875446414914e-8,-8.665124727648299e-4,2.4656354944466406e-5,2.0729342915038327e-8,-8.664725697134575e-4,2.4573949994687252e-5,2.0694555012387574e-8,-8.664264664054185e-4,2.43569138231536e-5,2.0601608133330403e-8,-8.663110139622543e-4,2.401199304406164e-5,2.0453867175701917e-8,-8.660704693962533e-4,2.3586965902470763e-5,2.0272378725582345e-8,-8.656806366986982e-4,2.316147155005631e-5,2.0091868871878088e-8,-8.651633988921566e-4,2.281978312873848e-5,1.9948869925345905e-8,-8.645805810525198e-4,2.2618527290404762e-5,1.9867633866200034e-8,-8.640097643843145e-4,2.256770525095591e-5,1.9851904328723277e-8,-8.635166675543678e-4,2.2633614094821955e-5,1.9886336038762515e-8,-8.63137948012429e-4,2.2757311910044172e-5,1.9944743482180508e-8,-8.628781813717942e-4,2.2875933655872637e-5,1.9999555353413913e-8,-8.62716501594731e-4,2.2938215554097242e-5,2.0028639520069148e-8,-8.626167844185233e-4,2.291219190087368e-5,2.0018587878018706e-8,-8.625373867297079e-4,2.2786717609544522e-5,1.9965210231098124e-8,-8.624388179572647e-4,2.256927580919071e-5,1.987237287145151e-8,-8.62289189850553e-4,2.2281913356921493e-5,1.975006320331657e-8,-8.620677332013985e-4,2.195621272300181e-5,1.9612130462789248e-8,-8.617664966194991e-4,2.16277997444501e-5,1.9473928068892485e-8,-8.613902656342819e-4,2.1330954467429593e-5,1.935006757875441e-8,-8.609548908336364e-4,2.109389378252815e-5,1.9252475069560743e-8,-8.60484364617139e-4,2.0935189055747062e-5,1.9188905233103563e-8,-8.600071436128826e-4,2.086164348674763e-5,1.91620410767755e-8,-8.595522857630777e-4,2.086763182325774e-5,1.916920143547591e-8,-8.591457649603986e-4,2.0935595960451394e-5,1.9202563113239573e-8,-8.588070106868445e-4,2.103741778004402e-5,1.9249802291736785e-8,-8.585455278490724e-4,2.1136657572340328e-5,1.9295144248855717e-8,-8.583574459539792e-4,2.119206027325631e-5,1.9320951414396224e-8,-8.582223041875423e-4,2.1163256231024873e-5,1.9310193204886934e-8,-8.581015046639913e-4,2.1019633830437e-5,1.9250187621650533e-8,-8.579412331421961e-4,2.0752106826417253e-5,1.913751847356446e-8,-8.576831677947019e-4,2.0384459053393114e-5,1.898276909784322e-8,-8.572838524692297e-4,1.997686961930766e-5,1.8811952221028124e-8,-8.567366035007616e-4,1.9613260947646273e-5,1.8661045623987466e-8,-8.560824766647061e-4,1.9371935268362093e-5,1.8563376708157653e-8,-8.553990379155328e-4,1.9293084341216936e-5,1.8535706064271064e-8,-8.547703530167884e-4,1.936321412352537e-5,1.8571651992880513e-8,-8.542559556665059e-4,1.952555465174852e-5,1.864632532315067e-8,-8.538756727449201e-4,1.970687106733324e-5,1.8727989569739696e-8,-8.536133022643489e-4,1.9843141688829028e-5,1.8789169711081318e-8,-8.534305325201742e-4,1.989357508587466e-5,1.8812667709058706e-8,-8.532814843157356e-4,1.984307509264013e-5,1.879252452479186e-8,-8.531232008002682e-4,1.969807749884717e-5,1.8732068113313398e-8,-8.529215833508998e-4,1.9480194465247334e-5,1.864101205609392e-8,-8.526540395091069e-4,1.9220106769211913e-5,1.8532719999846374e-8,-8.523103008730304e-4,1.8952387630912345e-5,1.8421969114052342e-8,-8.518922166171214e-4,1.8711017815063302e-5,1.83230973754797e-8,-8.514126718644334e-4,1.8525339647629737e-5,1.8248378472723516e-8,-8.508935758492765e-4,1.8416482805648164e-5,1.820658103690855e-8,-8.503628746581636e-4,1.839451037204468e-5,1.8201787199229734e-8,-8.498506739728784e-4,1.8456726342008194e-5,1.823266217066025e-8,-8.493848597949864e-4,1.858755364818312e-5,1.8292382925859e-8,-8.489867877928165e-4,1.8760075533750793e-5,1.8369304773500778e-8,-8.486675197616957e-4,1.8939094885436825e-5,1.8448317961918758e-8,-8.484249414374999e-4,1.908551666785093e-5,1.8512794690847823e-8,-8.482420318448436e-4,1.9161892414962764e-5,1.854700959220887e-8,-8.480866947760388e-4,1.9139120485201888e-5,1.853898427741999e-8,-8.47914089849887e-4,1.9004229019293404e-5,1.8483705191242097e-8,-8.476729841454053e-4,1.8768219337488148e-5,1.8386304668266145e-8,-8.473174336537129e-4,1.847105600233066e-5,1.8264025543393118e-8,-8.46823043761053e-4,1.8178888378359918e-5,1.814493877116609e-8,-8.462024594710862e-4,1.7968779622830955e-5,1.8061442704564362e-8,-8.455100213327113e-4,1.790201857047041e-5,1.8039011781499097e-8,-8.44827387250912e-4,1.7997506299222376e-5,1.8085063263440332e-8,-8.442336473553949e-4,1.82219741246474e-5,1.8184995677384506e-8,-8.437761660142642e-4,1.8504766407932626e-5,1.8308588065556925e-8,-8.434584576481965e-4,1.8767662195956877e-5,1.842267679658266e-8,-8.4324815382798e-4,1.895151458304113e-5,1.8502419193258396e-8,-8.430953104809079e-4,1.9028223922689918e-5,1.853631028756183e-8,-8.429494942284543e-4,1.8998849917980934e-5,1.852528741826402e-8,-8.427701821877676e-4,1.8884905878580218e-5,1.8478909462789927E-08,-8.425307640973115e-4,1.8718917804788393e-5,1.8411232187863652e-8,-8.4221863676526e-4,1.853706175763964e-5,1.8337626368837928e-8,-8.418337179676496e-4,1.837420046907955e-5,1.827269721178165e-8,-8.413866423383756e-4,1.8260484347668602e-5,1.822893007494307e-8,-8.408968704231464e-4,1.8218648925198794e-5,1.821564458019552e-8,-8.403904546985228e-4,1.8261602613572497e-5,1.8238040596675744e-8,-8.398971047784783e-4,1.8390365569227584e-5,1.8296347683661744e-8,-8.394462933471349e-4,1.859286581010708e-5,1.8385307406524103e-8,-8.390625554693548e-4,1.8844349042141637e-5,1.849434016111365e-8,-8.387606740926772e-4,1.9109956838288736e-5,1.86086555425353e-8,-8.38541735765671e-4,1.934955354341349e-5,1.871133966197072e-8,-8.383910411803681e-4,1.9524369896896514e-5,1.8786212347626552e-8,-8.382786396254357e-4,1.9604517498810704e-5,1.882101552190826e-8,-8.381628606157513e-4,1.957613104080785e-5,1.8810378176449664e-8,-8.379968680478822e-4,1.9446885164135782e-5,1.8758024552986323e-8,-8.377380159940519e-4,1.924845999124919e-5,1.8677651607636933e-8,-8.373591718549969e-4,1.9034058927322546e-5,1.8591733411884385e-8,-8.368597531357094e-4,1.886904423475679e-5,1.8527502435010273e-8,-8.362722099438048e-4,1.881422597460021e-5,1.8509963766801086e-8,-8.356585036787218e-4,1.890516421021724e-5,1.8553367099453363e-8,-8.350935969910999e-4,1.913599743885326e-5,1.865465529485676e-8,-8.346403242080155e-4,1.945802313397077e-5,1.8793064946602195e-8,-8.34327545916489e-4,1.979670869488179e-5,1.893732043323308e-8,-8.341432058884843e-4,2.0079064624085877e-5,1.905704488089487e-8,-8.340443957116498e-4,2.0256813697895776e-5,1.9132370964305275e-8,-8.339762461212966e-4,2.0315496394862994e-5,1.915767659009268e-8,-8.338890176634837e-4,2.0269954024688864e-5,1.9139616310843984e-8,-8.337477088005211e-4,2.015310994528189e-5,1.9092327487425826e-8,-8.335344195487556e-4,2.0004740360878148e-5,1.9032641784256222e-8,-8.332464619472108e-4,1.9863456916696745e-5,1.897669433393755e-8,-8.328930721117551e-4,1.9762094713418337e-5,1.8938027533986976e-8,-8.32492297882966e-4,1.9725314418621403e-5,1.8926665101186917e-8,-8.32068415293489e-4,1.97681582273195e-5,1.8948588036477114e-8,-8.316495311428089e-4,1.9894810847537727e-5,1.900526818571205e-8,-8.312647852018803e-4,2.0097427747145573e-5,1.909320121864192e-8,-8.309406311115315e-4,2.0355522535096095e-5,1.9203660731413604e-8,-8.306961138447342e-4,2.0636898921431595e-5,1.9323105247655924e-8,-8.305378232200559e-4,2.0901137965268803e-5,1.9434664802670044e-8,-8.304559556956476e-4,2.1106081507306507e-5,1.9520878928693548e-8,-8.304232734093543e-4,2.121667553013109e-5,1.9567400873830927e-8,-8.303983658234531e-4,2.121422167099143e-5,1.9566836162855173e-8,-8.303333870477527e-4,2.1103220227911646e-5,1.952153119702011e-8,-8.301848490250651e-4,2.0913258553630374e-5,1.9444248405592745e-8,-8.299248979192241e-4,2.069466744819484e-5,1.935621254368111e-8,-8.295501421522738e-4,2.0508232040964325e-5,1.928269583340997e-8,-8.290853574454966e-4,2.0410715377186484e-5,1.9246942812164235e-8,-8.285801055587781e-4,2.0439332177392955e-5,1.9263794111536346e-8,-8.2809766077195e-4,2.059951905236773e-5,1.9334808940806114e-8,-8.276980402284858e-4,2.086083916102179e-5,1.944680759157122e-8,-8.274201421640853e-4,2.1164367562493242e-5,1.957510063623294e-8,-8.272700826664273e-4,2.1440488239337026e-5,1.9690891838981256e-8,-8.272211164209307e-4,2.163042771909038e-5,1.9770119508971764e-8,-8.272248984694739e-4,2.1702369405362463e-5,1.980002378644996e-8,-8.27228099796603e-4,2.1656229173428763e-5,1.9781034701150995e-8,-8.271868289199328e-4,2.151765544352276e-5,1.9724204114230814e-8,-8.270743741962598e-4,2.1326531390819485e-5,1.9646358599563786e-8,-8.26882219952542e-4,2.1125677324855516e-5,1.9565355735798533e-8,-8.266169368517766e-4,2.095292185174144e-5,1.94967870339568e-8,-8.262957480189584e-4,2.0836914464318622e-5,1.9452286083130493e-8,-8.25942474644233e-4,2.0795532754586838e-5,1.9438941053262905e-8,-8.255843718992038e-4,2.083550384946244e-5,1.9459206265133282e-8,-8.252495647333255e-4,2.095228065573517e-5,1.9510899184512012e-8,-8.249644062349847e-4,2.112985311313308e-5,1.958715392852858e-8,-8.247500865889223e-4,2.1340896571258705e-5,1.96765117319045e-8,-8.24618243855376e-4,2.1548299489712724e-5,1.9763583444848516e-8,-8.245661579256653e-4,2.1709369314150928e-5,1.983081139445514e-8,-8.245731982415894e-4,2.1783542272099323e-5,1.9861656355918796e-8,-8.246010337711906e-4,2.174293624505869e-5,1.9844932417100713e-8,-8.24599762693081e-4,2.1582829143363222e-5,1.9779092489063103e-8,-8.245199320168276e-4,2.1327443144663598e-5,1.9674559193285197e-8,-8.243271463267552e-4,2.1027056964939968e-5,1.9552443886955017e-8,-8.240137478913354e-4,2.0745880537874062E-05,1.9439417625111437e-8,-8.236027048837928e-4,2.054443207807126e-5,1.9360323569771445e-8,-8.231420981185931e-4,2.046260583006955e-5,1.9331166390175837e-8,-8.226923062309316e-4,2.050897293837082e-5,1.9354816716611825e-8,-8.223101620532402e-4,2.065914064149752e-5,1.9420558033546697e-8,-8.220346412416486e-4,2.0863033376546166e-5,1.9507310836051278e-8,-8.218778118280972e-4,2.1058697312165184e-5,1.958944171580837e-8,-8.218233231961076e-4,2.1188662210092975e-5,1.964349015093813e-8,-8.218326197553458e-4,2.1214125651217814e-5,1.9653903415513317e-8,-8.21856605729153e-4,2.112285109501725e-5,1.9616154125454246e-8,-8.218486723198633e-4,2.092896166987658e-5,1.9536534435121197e-8,-8.21774900682099e-4,2.0665900016862456e-5,1.9429164058162805e-8,-8.216189955439171e-4,2.0376078120981753e-5,1.9311669317101807e-8,-8.213819939742871e-4,2.010103213726683e-5,1.9201115798957357e-8,-8.210785719648872e-4,1.987447711399243e-5,1.911118281263017e-8,-8.20732153301422e-4,1.9718757169934105e-5,1.905076891931154e-8,-8.203703758138432e-4,1.964388881521585e-5,1.9023668998090353e-8,-8.200215277640999e-4,1.9647991667492965e-5,1.9028805308153496e-8,-8.197118007420141e-4,1.971813517172542e-5,1.906061049159396e-8,-8.194627667111748e-4,1.983118207998987e-5,1.910940136475893e-8,-8.192884188063901e-4,1.99548908795387e-5,1.9161861647232118e-8,-8.191914615513263e-4,2.005020377589606e-5,1.920200887423933e-8,-8.191593400069361e-4,2.0076033762683125e-5,1.92131658914827e-8,-8.191616964490206e-4,1.999753215727303e-5,1.918132541360626e-8,-8.191520734989105e-4,1.9797250015148836e-5,1.909967483876304e-8,-8.190765586708921e-4,1.948575838000759e-5,1.8972896885336155e-8,-8.188893026085382e-4,1.9105659284594878e-5,1.881876618035338e-8,-8.185698549347501e-4,1.8723588649551148e-5,1.8664805935860888e-8,-8.181336800547649e-4,1.8410527065246534e-5,1.8540121068539456e-8,-8.176292682317155e-4,1.8218322499468568e-5,1.8465698823274743e-8,-8.171225750854558e-4,1.816336880244077e-5,1.844774602721915e-8,-8.166763753560664e-4,1.8224017124166648e-5,1.8476781130729858e-8,-8.163333375780404e-4,1.8350561857245017e-5,1.853193523194076e-8,-8.16107745214289e-4,1.8481632209535812e-5,1.8587831243527868e-8,-8.159860616604793e-4,1.8560533642340127e-5,1.8621333711184525e-8,-8.159338548044192e-4,1.8547406867931718e-5,1.8616474714546974e-8,-8.159059685028022e-4,1.8425544094309115e-5,1.856691337547998e-8,-8.158571772717478e-4,1.8201877478809365e-5,1.8475986230218312e-8,-8.157511568267292e-4,1.790263037304738e-5,1.8354797984609146e-8,-8.155662647845826e-4,1.756578402681822e-5,1.8219061692464088e-8,-8.152974777324008e-4,1.7232463817564305e-5,1.80855624276064e-8,-8.149548380423059e-4,1.6939285910434784e-5,1.79690735294896e-8,-8.14559552341495e-4,1.6713010048744217e-5,1.7880250136234366e-8,-8.141391520903434e-4,1.6567887899189816e-5,1.7824625038532265e-8,-8.13722894907782e-4,1.65052911686815e-5,1.7802510165505718e-8,-8.133380240113629e-4,1.6514764792978118e-5,1.7809448528021547e-8,-8.130068823177181e-4,1.6575692411162992e-5,1.7836899066496914e-8,-8.127444898746023e-4,1.6659173301351172e-5,1.787301036505299e-8,-8.12556110967037e-4,1.6730231029844328e-5,1.79035428156178e-8,-8.1243455505061e-4,1.6751012160459823e-5,1.7913194389418595e-8,-8.123576337801389e-4,1.6686038010803166e-5,1.7887740556088877e-8,-8.122873281432063e-4,1.6510317217035855e-5,1.7817300812807638e-8,-8.12173296759821e-4,1.6219656866485414e-5,1.7700472205744483e-8,-8.119633169768517e-4,1.5839706948872637e-5,1.754794502201198e-8,-8.116204935794114e-4,1.5427302108426434e-5,1.7382995748216617e-8,-8.111412381260521e-4,1.5058049525129414e-5,1.723638629723847e-8,-8.105632272728717e-4,1.4801145884299286e-5,1.713607209252042e-8,-8.099554919138893e-4,1.4692744717581516e-5,1.7096374287795603e-8,-8.093939263332287e-4,1.4722847634811913e-5,1.7112747706322244e-8,-8.089353936498745e-4,1.484233801753127e-5,1.7164799969601408e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json deleted file mode 100644 index 36daa45..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_6.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":6000,"numberOfSamples":1000,"samples":[-8.086030009769924e-4,1.4983810405869992e-5,1.7224897231104907e-8,-8.083859978917138e-4,1.5083891420443416e-5,1.7267300877946733e-8,-8.082495498012613e-4,1.5098334698112563e-5,1.727428602498279e-8,-8.08147627922185e-4,1.5007880436382382e-5,1.72384405012867e-8,-8.080344588306433e-4,1.4817024022017442e-5,1.716203842239244e-8,-8.078727223656254e-4,1.4548770451198794e-5,1.705477562558989e-8,-8.076383715174149e-4,1.4237727414253643e-5,1.6930867623711068e-8,-8.07322519250199e-4,1.3922902257012772e-5,1.6806096847405343e-8,-8.069308512481781e-4,1.3641062334595963e-5,1.6695163186853533e-8,-8.064810674365431e-4,1.3421371907981373e-5,1.6609600165603765e-8,-8.059989962711845e-4,1.3281793410593358e-5,1.65564122262766e-8,-8.055140919096513e-4,1.3227437282497666e-5,1.6537470119423336e-8,-8.050550211507427e-4,1.3250758311506548e-5,1.654960752689265e-8,-8.046459011976815e-4,1.3333167640947059e-5,1.658525704041747e-8,-8.04303377210941e-4,1.3447472960351647e-5,1.6633415280209964e-8,-8.040343930544604e-4,1.3560785131852206e-5,1.6680814883554258e-8,-8.038344371049681e-4,1.3637887698738715e-5,1.6713305884428016e-8,-8.036861808400415e-4,1.3645376246194308e-5,1.6717552173535383e-8,-8.035588881624019e-4,1.355715046434086e-5,1.668324932697258e-8,-8.034098545481887e-4,1.3361633179672876e-5,1.660599824235996e-8,-8.031899161995416e-4,1.3069806636622722e-5,1.6490473396248044e-8,-8.028548171317579e-4,1.2720836118968e-5,1.635260915989386e-8,-8.023817298130074e-4,1.2379672673151174e-5,1.6218567533971117e-8,-8.017848916609258e-4,1.21214866090865e-5,1.6118432225501397e-8,-8.011195394685814e-4,1.2004672862047483e-5,1.6075358566152277e-8,-8.004664161243661e-4,1.2045064498369676e-5,1.6095295025865495e-8,-7.999018683719954e-4,1.2207888551202842e-5,1.6163899894807838e-8,-7.994702224832471e-4,1.242340488168506e-5,1.625294935668257e-8,-7.991732540075557e-4,1.2615665237930678e-5,1.6331930886767175e-8,-7.989782632286061e-4,1.2727385321542004e-5,1.6378010390939176e-8,-7.988353176257354e-4,1.2731278778766297e-5,1.6380533700705246e-8,-7.98693545654588e-4,1.262891363153558e-5,1.6340492793338305e-8,-7.985117563218257e-4,1.2443008649451221e-5,1.6267331548458157e-8,-7.982633092416262e-4,1.2208291416633506e-5,1.617517573988445e-8,-7.97937024226046e-4,1.1963551111059878e-5,1.6079587401967125e-8,-7.975359220318068e-4,1.1745517867734186e-5,1.5995123017000115e-8,-7.970748169146011e-4,1.1584298423249006e-5,1.5933578635139873e-8,-7.96577147084504e-4,1.1500116000004205e-5,1.59027823489698e-8,-7.960712612774264e-4,1.1501312858278244e-5,1.5905873133149612e-8,-7.955863788122124e-4,1.1583659586297626e-5,1.5941057128577827e-8,-7.951485028139105e-4,1.1731083070377464e-5,1.6001886167851592e-8,-7.947767272267163e-4,1.191780985300591e-5,1.607808021319529e-8,-7.944803671342594e-4,1.2111620389700717e-5,1.615680382240154e-8,-7.942570988685387e-4,1.2277833661532118e-5,1.622426162217438e-8,-7.940921495251726e-4,1.2383811890041994e-5,1.6267523534675877e-8,-7.939586304605242e-4,1.2403888228974189e-5,1.627651653757225e-8,-7.938193280601158e-4,1.2324675476991541e-5,1.6246136706354253e-8,-7.936307142675456e-4,1.2150538325271284e-5,1.6178380649204796e-8,-7.933502814410618e-4,1.1908091876990174e-5,1.608405253597014e-8,-7.929477558193591e-4,1.164701184564693e-5,1.5982993948326116e-8,-7.924185834346178e-4,1.1433225812865484e-5,1.5901308272972388e-8,-7.91794201526995e-4,1.1331683271163489e-5,1.5864503448445484e-8,-7.911404620961953e-4,1.1381697803054312e-5,1.5887775959579784e-8,-7.905387505296019e-4,1.1576581858174432e-5,1.5968081661271605e-8,-7.900557579253249e-4,1.1862063556780149e-5,1.6083659449037498e-8,-7.897185238722374e-4,1.2157584885353175e-5,1.6202533533502623e-8,-7.895090488599649e-4,1.238821600505574e-5,1.629512295943271e-8,-7.893784662655317e-4,1.2508703453700893e-5,1.6343711956180873e-8,-7.892687928634058e-4,1.2510154891614356e-5,1.6345059350363414e-8,-7.891303130012338e-4,1.2412762325594466e-5,1.630746636423513e-8,-7.889301607306106e-4,1.22532563576661e-5,1.6245726990312346e-8,-7.886537075923972e-4,1.207350096757021e-5,1.6176528951831164e-8,-7.883021088407754e-4,1.1912612868365128e-5,1.611529698390703e-8,-7.878886554381245e-4,1.1802366938175958e-5,1.6074404646753326e-8,-7.874351827903575e-4,1.1764678405500699e-5,1.606225725212218e-8,-7.869686785579548e-4,1.1810193745663737e-5,1.6082821884922013e-8,-7.865178808041266e-4,1.1937644143326378e-5,1.613543027797478e-8,-7.861097334099989e-4,1.2134002375285157e-5,1.621485643068633e-8,-7.857657050956631e-4,1.2375715139896458e-5,1.631178566628287e-8,-7.854982761710509e-4,1.2631342722271491e-5,1.6413830995212057e-8,-7.853082129742637e-4,1.2865627763957707e-5,1.650712800670973e-8,-7.851832404152557e-4,1.3044611801087987e-5,1.6578365268496393e-8,-7.850984979333072e-4,1.3141234772513003e-5,1.661701655440917e-8,-7.850189859904393e-4,1.314074642924285e-5,1.6617484545055545e-8,-7.849040783473408e-4,1.3045167089176555e-5,1.658083277620777e-8,-7.847140887854131e-4,1.2875989940709468e-5,1.6515781106734278e-8,-7.84418739673568e-4,1.2674020385660439e-5,1.643854403323704e-8,-7.840067264380274e-4,1.2494690124657561e-5,1.637089555624342e-8,-7.834940629310338e-4,1.2397202649814611e-5,1.633586078646625e-8,-7.829269123445694e-4,1.242762480633356e-5,1.6351121218225165e-8,-7.823738580167101e-4,1.2600199243328678e-5,1.6421819173272966e-8,-7.819059640317111e-4,1.2886068491034284e-5,1.6536310251172648e-8,-7.815711190078477e-4,1.3218908359013295e-5,1.6668481029581357e-8,-7.813760467322517e-4,1.3518369457025356e-5,1.678692018769316e-8,-7.812866097556989e-4,1.3719738169680302e-5,1.6866455278038853e-8,-7.81245043675736e-4,1.3793772038801468e-5,1.689586528796916e-8,-7.811924892995569e-4,1.3748855436262393e-5,1.6878708749903426e-8,-7.810853126995724e-4,1.3619700644445478e-5,1.6828864667497608e-8,-7.809012145161698e-4,1.3452099763330615e-5,1.6764485192192976e-8,-7.806376216935296e-4,1.3290653946538645e-5,1.6703112676782687e-8,-7.803066615377375e-4,1.31716120529323e-5,1.6658847878700447e-8,-7.799298430182615e-4,1.311988593603372e-5,1.6641219568441624e-8,-7.795337437080761e-4,1.3148379669826384e-5,1.665500141543589e-8,-7.791466519745774e-4,1.3258192670318894e-5,1.6700371540229692e-8,-7.787956166079658e-4,1.3439123013885566e-5,1.6773161126941902e-8,-7.785034521569552e-4,1.3670540636302536e-5,1.6865211246133127e-8,-7.782855194761558e-4,1.3923070098588027e-5,1.6965022456657025e-8,-7.781465158733033e-4,1.4161671472159447e-5,1.705894395665733e-8,-7.780780274644127e-4,1.4350439747166847e-5,1.713304166764391e-8,-7.780578724819625e-4,1.4458808126371696e-5,1.717552433911576e-8,-7.780520945693767e-4,1.4468165316748068e-5,1.7179332308174036e-8,-7.780199264883032e-4,1.4377381074197417e-5,1.7144283672725583e-8,-7.779212697790456e-4,1.42055818063788e-5,1.707811591367681e-8,-7.777254715128031e-4,1.399092160934568e-5,1.6995928407681764e-8,-7.774196852037493e-4,1.37848241088391e-5,1.691784077706239e-8,-7.770148281025337e-4,1.3641905255902624e-5,1.68649932739021e-8,-7.7654695118254e-4,1.3606723344494496e-5,1.6854386908037733e-8,-7.760719733956719e-4,1.3699981752654324e-5,1.6893614104122298e-8,-7.756528920660803e-4,1.3908611710779359e-5,1.6977171984468366e-8,-7.753414973715193e-4,1.4185135339496087e-5,1.708636928482128e-8,-7.751607783545031e-4,1.4459758828692502e-5,1.7194078255654558e-8,-7.750965022472446e-4,1.4662655192892729e-5,1.7273331572288793e-8,-7.751031768498831e-4,1.4747011345581016e-5,1.730618293517172e-8,-7.751215862559233e-4,1.4701900854900151e-5,1.7288656969080978e-8,-7.750986283316115e-4,1.45502732264208e-5,1.7229950783472687e-8,-7.750005720993924e-4,1.4336090541435382e-5,1.714739884303355e-8,-7.748166257563864e-4,1.4108830030091316e-5,1.7060381671628664e-8,-7.74555246270904e-4,1.3911680743308552e-5,1.6985680755460048e-8,-7.742375216046733e-4,1.3775437312394145e-5,1.6935101840957774e-8,-7.738908672395347e-4,1.3716934985120997e-5,1.691492118059338e-8,-7.735443296708602e-4,1.373987657547806e-5,1.6926288994825302e-8,-7.732253688257358e-4,1.3836379992091725e-5,1.6965903557041073e-8,-7.729574201870145e-4,1.398850143961783e-5,1.702664562074045e-8,-7.727575479089458e-4,1.41697546103367e-5,1.7098179346093112e-8,-7.726338127068317e-4,1.4347167415583573e-5,1.7167741915981117e-8,-7.72582526013079e-4,1.4484672906976143e-5,1.7221441721592798e-8,-7.725862452751478e-4,1.4548420666369706e-5,1.724630156120042e-8,-7.726138958417847e-4,1.4513823225779425e-5,1.723297684502607e-8,-7.726244080267737e-4,1.4372974279860863e-5,1.717861929269323e-8,-7.725743889406402e-4,1.4139927504773041e-5,1.708890500581759e-8,-7.724286327675101e-4,1.3851021527237483e-5,1.6978122122320604e-8,-7.721705055599232e-4,1.3558663671444288e-5,1.6866694872960056e-8,-7.718085762849863e-4,1.3319387181004731e-5,1.6776479385700888e-8,-7.713767987397502e-4,1.3179295367351444e-5,1.6725086614472134e-8,-7.709275714331829e-4,1.3161122848693512e-5,1.6720920077215314e-8,-7.705191844169844e-4,1.3256827859980563e-5,1.6760442718757147e-8,-7.702008063045723e-4,1.3428227793557443e-5,1.6828582942267516e-8,-7.699990644679152e-4,1.361618554202354e-5,1.6902388068197547e-8,-7.699104039245936e-4,1.3756467861176603e-5,1.6957151603506948e-8,-7.699023224946573e-4,1.3797806695198463e-5,1.697331252819716e-8,-7.69923693570122e-4,1.3715970518988264e-5,1.6941802014512077e-8,-7.699204730517889e-4,1.3518607018056203e-5,1.686585566047806e-8,-7.698506029324883e-4,1.3239647040700348e-5,1.675881321149357e-8,-7.696928309426752e-4,1.292679553392078e-5,1.663924458294889e-8,-7.694477547487295e-4,1.2627916951666916e-5,1.6525649634657365e-8,-7.691330174202381e-4,1.2380977939982187e-5,1.6432564147368763e-8,-7.687761526504343e-4,1.2209237379755138e-5,1.6368739832210366e-8,-7.684079653894965e-4,1.2120781661778011e-5,1.633703602331063e-8,-7.680577369530784e-4,1.2110432408898472e-5,1.6335228492463344e-8,-7.677501944254693e-4,1.21623329271923e-5,1.6357054465017322e-8,-7.675035516029946e-4,1.2252353588631538e-5,1.6393155437041988e-8,-7.673278510063229e-4,1.2350244031443248e-5,1.6431898304259127e-8,-7.672231013092557e-4,1.2422047112441263e-5,1.6460286860244704e-8,-7.671772688900853e-4,1.243363156115782e-5,1.6465302548663993e-8,-7.671649640707796e-4,1.2356108383738767e-5,1.6435971563363704e-8,-7.671484101972802e-4,1.2173134658280302e-5,1.6366160768870968e-8,-7.670825263514741e-4,1.188858814480631e-5,1.6257519307403445e-8,-7.669249561884815e-4,1.153125860759139e-5,1.6121270567197454e-8,-7.666492306156377e-4,1.115245465159126e-5,1.5977261511360678e-8,-7.662560978121537e-4,1.0814456656206232e-5,1.5849466079461248e-8,-7.657770512027595e-4,1.05724402594284e-5,1.5758977593618244e-8,-7.65267023298901e-4,1.0456872508954073e-5,1.571723833544501e-8,-7.647885985095952e-4,1.0463873633946137e-5,1.5722417018223885e-8,-7.643941100002343e-4,1.0557097979145212e-5,1.5760262592280024e-8,-7.641121194876584e-4,1.0679365871370066e-5,1.580868049828012e-8,-7.639418824019487e-4,1.0769014504534602e-5,1.5844044262621295e-8,-7.63856040874777e-4,1.0775642632836637e-5,1.5847200884499e-8,-7.638095816807227e-4,1.067134664327151e-5,1.5807708446849496e-8,-7.637520719001363e-4,1.0455341968064698e-5,1.5725533933861105e-8,-7.636398633410946e-4,1.015159717703648e-5,1.5610082730947348e-8,-7.634452271731003e-4,9.80080001717917e-6,1.547706895850993e-8,-7.63160419406769e-4,9.449412193445568e-6,1.5344290126782374e-8,-7.627963935193374e-4,9.13916163473737e-6,1.522760366709052e-8,-7.623775983584871e-4,8.899634906261868e-6,1.5138131787055436e-8,-7.619351862275943e-4,8.745021320744058e-6,1.5081084100568852e-8,-7.615007251523846e-4,8.674467790722235e-6,1.5055961298020598E-08,-7.611015754607918e-4,8.674636046522299e-6,1.5057573206547553e-8,-7.607580727699104e-4,8.723012138457471e-6,1.507730793528806e-8,-7.604819845856674e-4,8.79104729455283e-6,1.5104310215033872e-8,-7.602755220059144e-4,8.84693302571431e-6,1.512651308174354e-8,-7.60130395955743e-4,8.858401879917029e-6,1.5131688225382546e-8,-7.600268787531797e-4,8.796280560370882e-6,1.5108794499177295e-8,-7.599335469922736e-4,8.639531259323042e-6,1.5049899963453894e-8,-0.000759809210702789,8.381910431287344e-6,1.495271925500096e-8,-7.596089689111743e-4,8.038852722231386e-6,1.4823230368913413e-8,-7.592954714676379e-4,7.651012523481406e-6,1.4677004696445236e-8,-7.588534536653339e-4,7.279557888325591e-6,1.4537373653592984e-8,-7.583012167940397e-4,6.990438849818558e-6,1.4429384557414762e-8,-7.576907836367265e-4,6.831496399448591e-6,1.4371061617021388e-8,-7.570930731261787e-4,6.813281142864784e-6,1.4366159181078007e-8,-7.56573893838745e-4,6.904553518906711e-6,1.440256548875904e-8,-7.561728030269616e-4,7.044803405478948e-6,1.445716559337654e-8,-7.55894167206311e-4,7.166043359666975e-6,1.450415417168199e-8,-7.55711412564325e-4,7.212993883249746e-6,1.4522671727194704e-8,-7.555791656848098e-4,7.1549930276133835e-6,1.4501273602714309e-8,-7.554470640511585e-4,6.988776194001312e-6,1.443893097512812e-8,-7.552712370159999e-4,6.734529749762169e-6,1.4343479112262025e-8,-7.550218631592772e-4,6.428246653777687e-6,1.422866437274883e-8,-7.546866678361489e-4,6.112788824185316e-6,1.4110719482184918e-8,-7.542707923333388e-4,5.8292867079302145e-6,1.400510243390426e-8,-7.537936783321645e-4,5.610111184424559e-6,1.392387568318107e-8,-7.532839358400108e-4,5.474383321977379e-6,1.3874075234006555e-8,-7.527734587962739e-4,5.42640635004478e-6,1.3857186797906472e-8,-7.522919859404003e-4,5.45669894844625e-6,1.386957766596827e-8,-7.518629339501932e-4,5.544851652733658e-6,1.3903575419281547e-8,-7.515008253699221e-4,5.66324214311497e-6,1.3948838400251825e-8,-7.51210094786353e-4,5.780767390543559e-6,1.3993723032625362e-8,-7.509847483529711e-4,5.866229168685598e-6,1.4026532943938554e-8,-7.508084438557491e-4,5.891537175053618e-6,1.4036723339664531e-8,-7.506548991499108e-4,5.835186884660035e-6,1.4016225902040902e-8,-7.504890649576297e-4,5.6865153995048614e-6,1.3961069522205696e-8,-7.502702069824309e-4,5.450810519333698e-6,1.3873309470797243e-8,-7.499584705215199e-4,5.154093641144201e-6,1.376281194863296e-8,-7.495258303846799e-4,4.844492327076601e-6,1.3647730610076522e-8,-7.489697010459084e-4,4.585680212391129e-6,1.3551982235163058e-8,-7.483229773845283e-4,4.439424944083938e-6,1.3498642646116442e-8,-7.47651384167147e-4,4.441135789993236e-6,1.3500781498633393e-8,-7.47033630108719e-4,4.5810783550153105e-6,1.3554518828823992e-8,-7.465319640685318e-4,4.8048662841334895e-6,1.3639340521473976e-8,-7.461696806020518e-4,5.035072310667735e-6,1.3726250888424918e-8,-7.45927649234082e-4,5.200984456189078e-6,1.3788876550238137e-8,-7.457581262680648e-4,5.260058265685222e-6,1.3811432021938078e-8,-7.456046602651826e-4,5.203880705388684e-6,1.3790914319102578e-8,-7.454181631269655e-4,5.052110434397819e-6,1.373481274651468e-8,-7.451656280700271e-4,4.841472760620587e-6,1.3656958068869079e-8,-7.448325507537849e-4,4.61494382342504e-6,1.357343640410499e-8,-7.444214445461733e-4,4.413322175715639e-6,1.3499417669267064e-8,-7.439484346229335e-4,4.2694368736615086e-6,1.3447009746671435e-8,-7.434389857049532e-4,4.204518303627032e-6,1.3423957631836567e-8,-7.429232000552066e-4,4.22642353337615e-6,1.3433047936838739e-8,-7.424310713391792e-4,4.3296407656193255e-6,1.3472159698785832e-8,-7.419881612882491e-4,4.496920195240808e-6,1.3534885426142835e-8,-7.416121363128246e-4,4.702242436589464e-6,1.3611614172495427e-8,-7.413105280088105e-4,4.9146848337064315e-6,1.369092983616905e-8,-7.410798564648585e-4,5.102579289552534e-6,1.3761123342581654e-8,-7.409059284613239e-4,5.2374620959614515e-6,1.3811649751762265e-8,-7.40765021747722e-4,5.2976581500819286e-6,1.3834473325427858e-8,-7.406258251361314e-4,5.271569720175211e-6,1.3825313013330133e-8,-7.404522940607082e-4,5.16079816624066e-6,1.3784817350730312e-8,-7.402080188256512e-4,4.982998369865964e-6,1.3719616164717567e-8,-7.398629579022926e-4,4.773502162654375e-6,1.3642888630399176e-8,-7.394027814983437e-4,4.583451075155526e-6,1.3573616754794363e-8,-7.388391120671625e-4,4.471358391383276e-6,1.3533406453527241e-8,-7.382156353710173e-4,4.486293417993243e-6,1.3540246689754017e-8,-7.376025584177996e-4,4.646263952038066e-6,1.360057244394542e-8,-7.370753966750942e-4,4.923220958661702e-6,1.3703844593894654e-8,-7.366853493943496e-4,5.247831278658755e-6,1.3824412277992002e-8,-7.364384127765779e-4,5.535851078356583e-6,1.3931243008841947e-8,-7.362964904189415e-4,5.721421847439438e-6,1.400013251189647e-8,-7.361977969831083e-4,5.777834083495166e-6,1.4021317172913075e-8,-7.360817614101209e-4,5.717840477241389e-6,1.3999596259483795e-8,-7.359055977095308e-4,5.580085272187351e-6,1.3949330970951832e-8,-7.356494891230436e-4,5.412741838724204e-6,1.3888375540751401e-8,-7.353140711726487e-4,5.2611317114854454e-6,1.3833462198014537e-8,-7.349148352444343e-4,5.160747629068616e-6,1.3797605620566516e-8,-7.34476381499244e-4,5.134402307300587e-6,1.378907362699951e-8,-7.340275945238301e-4,5.1916865952263e-6,1.3811240956866352e-8,-7.335976379390709e-4,5.3295409738639065e-6,1.386285790594125e-8,-7.332124264851362e-4,5.533583318487555e-6,1.393857552488052e-8,-7.328914883847182e-4,5.780224195792896e-6,1.4029729175094004e-8,-7.326453464977734e-4,6.039657534633526e-6,1.412541622107681e-8,-7.324737353478441e-4,6.279722160979335e-6,1.4213885118568412e-8,-7.323650721376349e-4,6.470322863277057e-6,1.4284138014656952e-8,-7.322974036581984e-4,6.587844288483066e-6,1.4327549734585913e-8,-7.322407659586676e-4,6.619032470350085e-6,1.4339305787613665e-8,-7.321607813179032e-4,6.563928060747684e-6,1.4319492082724502e-8,-7.320233046863541e-4,6.4374966021072834e-6,1.4273690279829042e-8,-7.317999978283977e-4,6.269641412024475e-6,1.4212954276300681e-8,-7.314747508146167e-4,6.103003158628865e-6,1.415295567438129e-8,-7.310503956340962e-4,5.987372946262786e-6,1.4111888222525968e-8,-7.30553886574779e-4,5.969501086118192e-6,1.4106716472582734e-8,-7.300364338939657e-4,6.078516230287104e-6,1.4147877299553037e-8,-7.295642924788504e-4,6.3107236580662384e-6,1.4233817360402606e-8,-7.29198788762624e-4,6.622175486804494e-6,1.4348383535941494e-8,-7.289720333664855e-4,6.9380135239147e-6,1.4464270004578152e-8,-7.288720132220635e-4,7.178968146684719e-6,1.4552629285696456e-8,-7.288478475491566e-4,7.292033122646066e-6,1.4594189017363577e-8,-7.288324425920637e-4,7.267653302542506e-6,1.4585519239748402e-8,-7.287681356467766e-4,7.1358561174840265e-6,1.4537665753835853e-8,-7.286220514824529e-4,6.9483598487620115e-6,1.4469630977301123e-8,-7.28388085845522e-4,6.7592678922152605e-6,1.4401275496516345e-8,-7.280804913481166e-4,6.612273121504457e-6,1.4348581630811597e-8,-7.277252407959589e-4,6.5354231757555416e-6,1.4321716844225746e-8,-7.273527660572583e-4,6.540950211029966e-6,1.4324997142073501e-8,-7.269930114233965e-4,6.6273182842564705e-6,1.4357691570767854e-8,-7.26672240266485e-4,6.781718300136292e-6,1.4414990002890305e-8,-7.264107154812758e-4,6.982473886382033e-6,1.4488915944389668e-8,-7.262207318281119e-4,7.201524453767113e-6,1.4569238469116222e-8,-7.261048945983162e-4,7.407366857871365e-6,1.464452799757507e-8,-7.260549073749619e-4,7.568797659062485e-6,1.4703494431167381e-8,-7.26051465526772e-4,7.659436861891897e-6,1.4736614332348274e-8,-7.260658689683676e-4,7.662469338693832e-6,1.4737849783051846e-8,-7.260636091525101e-4,7.574690894230019e-6,1.4706123818166879e-8,-7.260097162467727e-4,7.408843381596091e-6,1.4646170303919831e-8,-7.258751869359084e-4,7.193327753172565e-6,1.4568414770672015e-8,-7.256434329193616e-4,6.968816351578809e-6,1.4487705994885722e-8,-7.253155606930208e-4,6.781829885047062e-6,1.4420936000282275e-8,-7.249132562182546e-4,6.6756763505280914e-6,1.4383719471977372e-8,-7.244778292372096e-4,6.679612946037396e-6,1.438647617104953e-8,-7.240638597492315e-4,6.798235959896041e-6,1.443065370266917e-8,-7.237266826504071e-4,7.004766318589259e-6,1.4506391489857573e-8,-7.235054613225411e-4,7.243025516191428e-6,1.4593301323513466e-8,-7.2340765660686e-4,7.441405783647142e-6,1.4665511557876749e-8,-7.234034010785615e-4,7.53631382926181e-6,1.4700082991218885e-8,-7.234351925205399e-4,7.495034347391305e-6,1.468523799630331e-8,-7.234393429224217e-4,7.325932982914151e-6,1.462407472647779e-8,-7.233679091640017e-4,7.071240070168453e-6,1.4531993918580552e-8,-7.2320061796834e-4,6.7884821942071435e-6,1.4429962503804012e-8,-7.229442000740695e-4,6.531515408382787e-6,1.4337580335722595e-8,-7.226237824510028e-4,6.338676971745417e-6,1.4268730878278133e-8,-7.222726609371696e-4,6.229186086844068e-6,1.4230270463511608e-8,-7.219243370456767e-4,6.204979076589403e-6,1.4222735101428858e-8,-7.216077209136364e-4,6.254637305234233e-6,1.424182454315981e-8,-7.213447052154808e-4,6.357313551246988e-6,1.427987548429127e-8,-7.211489353260135e-4,6.485977719230195e-6,1.432706196354135e-8,-7.210249390732579e-4,6.610178726644471e-6,1.4372391800318248e-8,-7.209673047686168e-4,6.69888928465445e-6,1.440471413451235e-8,-7.209601280974389e-4,6.7240278150433335e-6,1.4413965009805703e-8,-7.20977427897608e-4,6.664882671759e-6,1.4392744472576701e-8,-7.209854343714221e-4,6.51295128433434e-6,1.4338056762127022e-8,-7.209473640933031e-4,6.27595967171071e-6,1.4252764848687728e-8,-7.20830498270342e-4,5.979351536502665e-6,1.4146129546232638e-8,-7.206142541252474e-4,5.663667819126294e-6,1.4032848951131945e-8,-7.202969652261338e-4,5.377288241995543e-6,1.3930404038766788e-8,-7.198989165010806e-4,5.1656853148451214e-6,1.3855144520274798e-8,-7.194600346572165e-4,5.059761967389392e-6,1.381807600558674e-8,-7.190320840484526e-4,5.066413372274996e-6,1.3821501796020195e-8,-7.186667008859963e-4,5.164217116728777e-6,1.3857550892980985e-8,-7.184018625214499e-4,5.306290101127747e-6,1.3909277458429183e-8,-7.182503872805278e-4,5.430848543585556e-6,1.3954476928807232e-8,-7.181945402363831e-4,5.477745639924967e-6,1.3971593615188382e-8,-7.181899363308149e-4,5.406401461740874e-6,1.3946114620028615e-8,-7.181787956068019e-4,5.208432912413644e-6,1.3875092760960466e-8,-7.181080232052682e-4,4.909307597908525e-6,1.3767756999698908e-8,-7.179446434546303e-4,4.558250395919083e-6,1.3641890350548404e-8,-7.176825410055812e-4,4.2115104900122955e-6,1.3517783575060329e-8,-7.173394303115774e-4,3.9166207270580965e-6,1.3412530864261023e-8,-7.169476918402883e-4,3.7030604472824477e-6,1.3336657086835069e-8,-7.165441754546074e-4,3.5802790936875876e-6,1.3293434686648582e-8,-7.161624370313028e-4,3.540740334466443e-6,1.3280030267105057e-8,-7.158283342384227e-4,3.5648889198243974e-6,1.3289336702046267e-8,-7.155582446948228e-4,3.6259309695520506e-6,1.3311712356351884e-8,-7.153587035969551e-4,3.6936410852722728e-6,1.3336343509346127e-8,-7.152264834437153e-4,3.7373251672731826e-6,1.3352284086218272e-8,-7.151486443905965e-4,3.7285507918335262e-6,1.3349406474614047e-8,-7.151027106872547e-4,3.6443643170977546e-6,1.3319531867733131e-8,-7.150577088567976e-4,3.471371309569102e-6,1.3257885044742072e-8,-7.149771233861474e-4,3.2102934517910352e-6,1.3164734543938834e-8,-7.148246566289133e-4,2.879607352494538e-6,1.304671174381637e-8,-7.145727155168279e-4,2.5159715205526265e-6,1.2916970172838227e-8,-7.14211741474117e-4,2.1691340011926946e-6,1.2793345447593278e-8,-7.13756704294834e-4,1.8907340958244058e-6,1.2694309938959155e-8,-7.13246867286023e-4,1.7195895090076379e-6,1.263368292154631e-8,-7.127372110269032e-4,1.6687917986243744e-6,1.2616035558109819e-8,-7.122837106314069e-4,1.7200599947476228e-6,1.2634736954970411e-8,-7.11927625851379e-4,1.8279231828251246e-6,1.2673513419775649e-8,-7.116842639270483e-4,1.9322272870562014e-6,1.2710931582090524e-8,-7.115395372739504e-4,1.9745795969288553e-6,1.2726232447310445e-8,-7.114547557725002e-4,1.9136654302389338e-6,1.270474472926178e-8,-7.113777961538001e-4,1.735292690655213e-6,1.2641441637291946e-8,-7.112572859060644e-4,1.4546876493828617e-6,1.2541763992937194e-8,-7.110556761496227e-4,1.1107338000528394e-6,1.2419577806846834e-8,-7.107574398631749e-4,7.542984399074633e-7,1.2293006190122626e-8,-7.103703854584871e-4,4.3467766591549663e-7,1.2179579666103922e-8,-7.099206413352514e-4,1.8848792044254664e-7,1.209227121863942e-8,-7.094440058956009e-4,3.38112439872334e-8,1.2037433652280913e-8,-7.089770272256449e-4,-3.005946575574514e-8,1.2014751159396523e-8,-7.085502677011695e-4,-1.8942666134325098e-8,1.2018584823579895e-8,-7.081845728037587e-4,4.1504324056836106e-8,1.2039859175127503e-8,-7.078898530136206e-4,1.2085396250360532e-7,1.2067846450829226e-8,-7.07665357590904e-4,1.8796389173417595e-7,1.2091574008084617e-8,-7.075005062641622e-4,2.1404627281451953e-7,1.2100880394544461e-8,-7.073757642706145e-4,1.7527949313218791e-7,1.2087321949694448e-8,-7.072636271028598e-4,5.563556618695607e-8,1.2045175593473184e-8,-7.07130371455471e-4,-1.496666377152965e-7,1.1972682276401499e-8,-7.069396260706627e-4,-4.3038263800395507e-7,1.1873415802529695e-8,-7.06658736467273e-4,-7.585342773530107e-7,1.1757266370952408e-8,-7.062679103912365e-4,-1.0893111587869973e-6,1.164011958067034e-8,-7.057699493448573e-4,-1.3683565279279107e-6,1.1541242460665835e-8,-7.051958014848092e-4,-1.546143275736306e-6,1.1478149826314971e-8,-7.046006461074884e-4,-1.5955509000684547e-6,1.1460378253613378e-8,-7.040489785775769e-4,-1.5244730508863847e-6,1.1485082661954835e-8,-7.035938487042454e-4,-1.3758182686775965e-6,1.1537113738876136e-8,-7.032597812034259e-4,-1.2137575651664247e-6,1.1593901613711014e-8,-7.030369079407669e-4,-1.1027795845962554e-6,1.1632801609042198e-8,-7.028872532957906e-4,-1.0889580682558247e-6,1.1637630789638363e-8,-7.027584678100196e-4,-1.1897271998792792e-6,1.1602238033439061e-8,-7.025988796732991e-4,-1.3932883666335377e-6,1.1530725736851102e-8,-7.02369467900341e-4,-1.6652872066721532e-6,1.1435125811886794e-8,-7.020507465969052e-4,-1.959328698109832e-6,1.1331711320640786e-8,-7.016442939978633e-4,-2.2282184952551496e-6,1.1237034626369414e-8,-7.011697035243303e-4,-2.4335618600813347e-6,1.1164544945400339e-8,-7.006583801112918e-4,-2.5521150452073807e-6,1.1122365961218336e-8,-7.001460060304543e-4,-2.5781375982917395e-6,1.1112496075816941e-8,-6.996655112290227e-4,-2.5220161431554106e-6,1.1131319063948755e-8,-6.992418776281199e-4,-2.4062965783673872e-6,1.1171004748331547e-8,-6.988893060139256e-4,-2.260591788360715e-6,1.1221277939326513e-8,-6.986105278643894e-4,-2.1166353920163535e-6,1.1271116834225942e-8,-6.983975667488254e-4,-2.0042272969958953e-6,1.1310137596645092e-8,-6.982331775114807e-4,-1.948167868728002e-6,1.1329646935505253e-8,-6.980924984224593e-4,-1.9658036073505293e-6,1.1323502940205919e-8,-6.979449169280985e-4,-2.064692866216944e-6,1.128895545665963e-8,-6.977566158534427e-4,-2.240091878769088e-6,1.1227562045779688e-8,-6.974946560896657e-4,-2.4725062008836e-6,1.1146078731656455e-8,-6.971334322778307e-4,-2.7265579611108132e-6,1.1056870056968845e-8,-6.966634001809645e-4,-2.9535495920723803e-6,1.0976992639682918e-8,-6.960998225694706e-4,-3.1003923112501523e-6,1.0925024976391107e-8,-6.954864809875409e-4,-3.125514095301827e-6,1.0915470365326537e-8,-6.94888405730523e-4,-3.0171655312078273e-6,1.0952385872816837e-8,-6.943721615170897e-4,-2.8040956720319907e-6,1.1025740558355747e-8,-6.939812476892919e-4,-2.5493950355256136e-6,1.111363121856989e-8,-6.937199582600355e-4,-2.328052856844355e-6,1.119007794880418e-8,-6.935545525919977e-4,-2.199995786806156e-6,1.123431816683279e-8,-6.93429179173718e-4,-2.1924546956316556e-6,1.1236874298485071e-8,-6.932862200777068e-4,-2.2974342328778687e-6,1.1200440938200634e-8,-6.930818299262455e-4,-2.4806963116481874e-6,1.1136809772812793e-8,-6.927932877982263e-4,-2.69515791678022e-6,1.1062250907052743e-8,-6.924193527516066e-4,-2.8932872464684024e-6,1.0993214408490107e-8,-6.919763333906085e-4,-3.036081365862266e-6,1.0943205101581768e-8,-6.91492215226939e-4,-3.098326934476717e-6,1.0920952638432522e-8,-6.910002904512773e-4,-3.070683044984637e-6,1.0929697707612377e-8,-6.905331356871504e-4,-2.959140124946023e-6,1.0967394783237994e-8,-6.90117596465121e-4,-2.7823877442401985e-6,1.1027633804261848e-8,-6.897712626577218e-4,-2.567793687719598e-6,1.1101026790081565e-8,-6.895006358475275e-4,-2.3467550008997916e-6,1.1176795508382824e-8,-6.89300944615274e-4,-2.150115599113473e-6,1.1244329229978124e-8,-6.891573100006782e-4,-2.00424231133623e-6,1.1294520632905088e-8,-6.890467540316551e-4,-1.9280356409594636e-6,1.1320793607430406e-8,-6.889406381638624e-4,-1.930734024848246e-6,1.1319874885504703e-8,-6.888074504279619e-4,-2.0102414136189414e-6,1.1292397488351405e-8,-6.886161724085662e-4,-2.1518695593095066e-6,1.1243363432643985e-8,-6.883407101463712e-4,-2.327739840236361e-6,1.1182368829498123e-8,-6.879658514959947e-4,-2.497813089077346e-6,1.1123245267791766e-8,-6.874944007746656e-4,-2.6143891697839814e-6,1.108247815801189e-8,-6.869533275424424e-4,-2.6320148015926607e-6,1.1075749525894508e-8,-6.863944546199724e-4,-2.522826202578732e-6,1.1112635168862053e-8,-6.858844538666012e-4,-2.2926275030821306e-6,1.1191109583836215e-8,-6.854832279089802e-4,-1.9877298379677976e-6,1.1295269233710088e-8,-6.852191743942243e-4,-1.6834486218362717e-6,1.1399318636952878e-8,-6.850762207670568e-4,-1.4561494259965552e-6,1.1477115718733162e-8,-6.850017506227822e-4,-1.353885669014518e-6,1.1512169978020316e-8,-6.849299395502611e-4,-1.382232489232581e-6,1.1502489363880025e-8,-6.848057305429362e-4,-1.5099055715152289e-6,1.1458706325152704e-8,-6.845983153559325e-4,-1.6859188037799119e-6,1.1398245647313847e-8,-6.843027428170722e-4,-1.8571846721204412e-6,1.1339299333489303e-8,-6.839342878524915e-4,-1.9804742909492373e-6,1.1296704524613013e-8,-6.83520537940993e-4,-2.0280142608472192e-6,1.1280001238857747e-8,-6.830941226507634e-4,-1.9884992920636643e-6,1.1293074773063915e-8,-6.826870433621648e-4,-1.8656132505174621e-6,1.13346680053564e-8,-6.823264387413217e-4,-1.6753696630438363e-6,1.1399305110651174e-8,-6.82031487121087e-4,-1.4427423697938251e-6,1.1478456664893744e-8,-6.818114056550049e-4,-1.1978017957364357e-6,1.1561864398442774e-8,-6.816645845240956e-4,-9.716026242010502e-7,1.1638940368353777e-8,-6.81578901101889e-4,-7.920793248862827e-7,1.1700156773758746e-8,-6.815332503350359e-4,-6.803319074311323e-7,1.173830361103633e-8,-6.815001275355418e-4,-6.477490111422285e-7,1.1749467706559448e-8,-6.814489184104265e-4,-6.941843501332436e-7,1.1733661035226025e-8,-6.813496403718091e-4,-8.071935459534741e-7,1.1695093476635976e-8,-6.81177053403738e-4,-9.623862476189849e-7,1.164206416834527e-8,-6.809151476327394e-4,-1.1251098518570805e-6,1.158639073471916e-8,-6.80561933977751e-4,-1.254012468855875e-6,1.154218474453644e-8,-6.801338767888566e-4,-1.307464024167702e-6,1.1523643336190613e-8,-6.79668066854345e-4,-1.2535982747354408e-6,1.1541612761355467e-8,-6.792188902309273e-4,-1.0830088825351644e-6,1.1599275967291585e-8,-6.78845970446115e-4,-8.196398734036575e-7,1.1688487599342648e-8,-6.785938804680131e-4,-5.21865523976247e-7,1.1789443842818592e-8,-6.784716853381285e-4,-2.670917135713526e-7,1.1875898145539714e-8,-6.784454801674145e-4,-1.229862560247459e-7,1.1924869708763637e-8,-6.78451422731065e-4,-1.2039502744957288e-7,1.1925808501975738e-8,-6.784224136183189e-4,-2.4413852327126643e-7,1.188376744728601e-8,-6.783122474568518e-4,-4.450160638167141e-7,1.1815400961230667e-8,-6.781056774875232e-4,-6.622121589485789e-7,1.1741382274874111e-8,-6.778146379208505e-4,-8.426921141446391e-7,1.1679787181502826e-8,-6.774678679897052e-4,-9.513665380458594e-7,1.1642596348323024e-8,-6.771004646386013e-4,-9.730261227384026e-7,1.163500954750871e-8,-6.767463032638174e-4,-9.096388229470013e-7,1.165635793010542e-8,-6.764335621130428e-4,-7.761178639860844e-7,1.170155308564171e-8,-6.761823408651586e-4,-5.962181208590508e-7,1.1762500661860506e-8,-6.76003339470729e-4,-3.9886548663780184e-7,1.1829366116277767e-8,-6.758971746004418e-4,-2.1465214616865e-7,1.189177429067364e-8,-6.75854349008327e-4,-7.229850977163453e-8,1.1940006997847552e-8,-6.758560464209218e-4,4.947983413017979e-9,1.1966210837941946e-8,-6.75876029123182e-4,2.7488136745964224e-9,1.196554475242547e-8,-6.758837935815457e-4,-8.161918553295126e-8,1.1937085753012027e-8,-6.758487615666738e-4,-2.3790708629766936e-7,1.1884286585775744e-8,-6.757450114730958e-4,-4.432901815565406e-7,1.1814847546413683e-8,-6.75555981832124e-4,-6.647221873892998e-7,1.1739927591423942e-8,-6.752785440219556e-4,-8.632714013106472e-7,1.1672680443195546e-8,-6.749257989924772e-4,-1.0003070529774613e-6,1.1626159710092367e-8,-6.745277736728225e-4,-1.04533785405786e-6,1.1610666373841045e-8,-6.74128768082691e-4,-9.849061499935828e-7,1.1630749295767326e-8,-6.737798662443241e-4,-8.306924641557072e-7,1.1682486866486084e-8,-6.735259935027122e-4,-6.231378273326227e-7,1.1752281613645974e-8,-6.733897881249691e-4,-4.257941722485988e-7,1.1818755484053001e-8,-6.733589931298577e-4,-3.0779861157673254e-7,1.185861347121806e-8,-6.733862647382449e-4,-3.189045445843042e-7,1.1855019353474524e-8,-6.734052719418553e-4,-4.6933352922082787e-7,1.1804407956455615e-8,-6.73356095178138e-4,-7.26669545411652e-7,1.1717608951207223e-8,-6.732058920007578e-4,-1.03135768079192e-6,1.1614681309859787e-8,-6.729549688437168e-4,-1.3203085634674708e-6,1.1516948301661333e-8,-6.726292231984343e-4,-1.5456410863813466e-6,1.1440629950089799e-8,-6.722669138054278e-4,-1.6825813512472906e-6,1.1394139323916218e-8,-6.719069745690607e-4,-1.728292691642922e-6,1.1378462534167964e-8,-6.715817867987357e-4,-1.6963310651301452e-6,1.1389032635968985e-8,-6.713140269531039e-4,-1.6104898771342205e-6,1.1417818254359392e-8,-6.711159576172181e-4,-1.4997911391117643e-6,1.1455027849828653e-8,-6.7098967808978e-4,-1.3947627025395655e-6,1.1490377166722129e-8,-6.709276170943395e-4,-1.3244157649111584e-6,1.1514110299334853e-8,-6.709132260466664e-4,-1.3133527174552276e-6,1.1517964713543777e-8,-6.709221924822578e-4,-1.3787160274900425e-6,1.1496180968261428e-8,-6.709246793383498e-4,-1.5271024239717297e-6,1.144652479963841e-8,-6.708890101922466e-4,-1.7521057789037506e-6,1.1371108056069637e-8,-6.707867329827515e-4,-2.03349427394575e-6,1.1276673671676083e-8,-6.705983390374779e-4,-2.3389296906621046e-6,1.1174033427878806e-8,-6.703183942720542e-4,-2.6286525837106187e-6,1.1076507144233978e-8,-6.699586275639561e-4,-2.862764821608109e-6,1.0997482902064068e-8,-6.695477636789244e-4,-3.009877260332382e-6,1.0947514998244096e-8,-6.691275106414471e-4,-3.0553669347500317e-6,1.093155672567259e-8,-6.687448110835039e-4,-3.0073333148598256e-6,1.0946969098039167e-8,-6.684411914721439e-4,-2.8982694801256994e-6,1.09829603567278e-8,-6.682410506419115e-4,-2.7805932569171573e-6,1.1022061743662119e-8,-6.681420923177971e-4,-2.7151112480580224e-6,1.1043947687668447e-8,-6.681122430425281e-4,-2.7538322953627776e-6,1.103115103055556e-8,-6.680967532338296e-4,-2.922229780866871e-6,1.0975005824736362e-8,-6.680351768836946e-4,-3.208938989025025e-6,1.0879155445024393e-8,-6.678818198079746e-4,-3.569206800689314e-6,1.07584697087957e-8,-6.676199799142348e-4,-3.941264216912157e-6,1.0633592515886972e-8,-6.672637124200508e-4,-4.26723863883779e-6,1.0523919613312888e-8,-6.668484745365341e-4,-4.508722102625259e-6,1.0442353880863865e-8,-6.664173881818245e-4,-4.652194081672177e-6,1.0393476953270497e-8,-6.660096559372878e-4,-4.705856726945458e-6,1.0374609216835914e-8,-6.6565400917304e-4,-4.692450116383464e-6,1.0378215067070535e-8,-6.65366691378365e-4,-4.641992506869934e-6,1.0394325668100645e-8,-6.651520724436302e-4,-4.586289293999795e-6,1.0412367136578511e-8,-6.650041770194664e-4,-4.555288303349263e-6,1.0422370733593156e-8,-6.649082145975189e-4,-4.574557922642622e-6,1.0415807035090087e-8,-6.648419516531094e-4,-4.663098319825658e-6,1.0386306849815094e-8,-6.647772977923628e-4,-4.830967209773467e-6,1.0330446811403125e-8,-6.64682793482468e-4,-5.0767082913095886e-6,1.0248610310513204e-8,-6.645276535009935e-4,-5.385272368662441e-6,1.014569716509483e-8,-6.642874935506787e-4,-5.727739295789978e-6,1.0031241672519338e-8,-6.639508926581502e-4,-6.064303841982294e-6,9.918438764338643e-9,-6.635248175263377e-4,-6.351327713612035e-6,9.821803180388749e-9,-6.630363208422775e-4,-6.551644593751551e-6,9.753736842483382e-9,-6.625286011154107e-4,-6.6453412099685115e-6,9.720943269391243e-9,-6.620515220562129e-4,-6.637210765563028e-6,9.721958663164957e-9,-6.616490030515382e-4,-6.557815458928014e-6,9.746799934408593e-9,-6.613470434299081e-4,-6.457206611119339e-6,9.779019488102298e-9,-6.611460182660693e-4,-6.3927400851426745e-6,9.799687434697574e-9,-6.610196289517972e-4,-6.414181155194645e-6,9.79227361540468e-9,-6.609211623926225e-4,-6.550090663171576e-6,9.747151909141079e-9,-6.607958578615187e-4,-6.799453044112043e-6,9.664428684028409e-9,-6.605961968829965e-4,-7.131600161094896e-6,9.554052462247139e-9,-6.602952658559864e-4,-7.495192731900008e-6,9.432897717263338e-9,-6.59893337291204e-4,-7.833471097170003e-6,9.319721647992294e-9,-6.594154199307799e-4,-8.10003951822256e-6,9.229912967892944e-9,-6.589015974741606e-4,-8.26940720505979e-6,9.171982193286219e-9,-6.583948475325114e-4,-8.339570999084169e-6,9.146702941363071e-9,-6.579310057521284e-4,-8.32782653290947e-6,9.1484953460235e-9,-6.575332522116057e-4,-8.26326332931551e-6,9.167892353553748e-9,-6.572109057110091e-4,-8.179301464685762e-6,9.193979644439203e-9,-6.569608894446945e-4,-8.108097437895046e-6,9.21621770862212e-9,-6.56770170806039e-4,-8.077049399664383e-6,9.225578151807406e-9,-6.566181353193237e-4,-8.106736580969876e-6,9.2152178288862e-9,-6.56478602741209e-4,-8.209430423295186e-6,9.18097422655523e-9,-6.563217982510564e-4,-8.387533414582957e-6,9.121895607077113e-9,-6.561169927829369e-4,-8.631800308226666e-6,9.04085550962115e-9,-6.558365936151278e-4,-8.91992576094595e-6,8.945052981019506e-9,-6.55462020900297e-4,-9.216878126763627e-6,8.845932484547084e-9,-6.549905970801155e-4,-9.47883318251498e-6,8.757896962005024e-9,-6.544410174747893e-4,-9.66200422791736e-6,8.695387849400742e-9,-6.538536905887626e-4,-9.73541782277881e-6,8.668667779698704e-9,-6.532830284212719e-4,-9.693338183562016e-6,8.679746644976681e-9,-6.527824423394355e-4,-9.561069012846983e-6,8.72050444633388e-9,-6.523874598641779e-4,-9.389804754378765e-6,8.77438033627454e-9,-6.521043283306284e-4,-9.24162630277522e-6,8.821227300503736e-9,-6.519088365606864e-4,-9.170835057503315e-6,8.843328210896267e-9,-6.517549256998489e-4,-9.20896440435165e-6,8.83024338053133e-9,-6.515887679402991e-4,-9.35797527614904e-6,8.781065819974303e-9,-6.513631828401716e-4,-9.592194273994584e-6,8.703882366870197e-9,-6.510485784423071e-4,-9.866901365965093e-6,8.613066195460134e-9,-6.506383852720353e-4,-1.0130449155765347e-5,8.525370284901691e-9,-6.501484713535216e-4,-1.0336665778532513e-5,8.455876704000505e-9,-6.496113485493177e-4,-1.0454609877589606e-5,8.414782975243667e-9,-6.490671674646127e-4,-1.0473577830441985e-5,8.405737418544261e-9,-6.485542315122563e-4,-1.0402716045749107e-5,8.42594207718587e-9,-6.48101570190052e-4,-1.0266290315339773e-5,8.467673384414735e-9,-6.477249772667448e-4,-1.0096801161149698e-5,8.520499798179897e-9,-6.474264817325805e-4,-9.928189624151298e-6,8.573469231980985e-9,-6.471962142913522e-4,-9.790591753984345e-6,8.616798727509629e-9,-6.470153398393853e-4,-9.707072173579713e-6,8.642931881769316e-9,-6.4685902944632e-4,-9.691946903899617e-6,8.647090904414083e-9,-6.466990567131604e-4,-9.749935634588221e-6,8.627569008879582e-9,-6.465061945891082e-4,-9.875497327061216e-6,8.585973740369635e-9,-6.462529770962636e-4,-1.005213254042066e-5,8.527489357020453e-9,-6.459175297868126e-4,-1.0252057697941712e-5,8.46101921967877e-9,-6.454888874271263e-4,-1.0437434177263124e-5,8.398808897746156e-9,-6.449732096697071e-4,-1.0564966265109888e-5,8.354946495019238e-9,-6.4439852831923e-4,-1.0595381812212404e-5,8.34225639995346e-9,-6.438138844513587e-4,-1.0507072144502154e-5,8.367854756241516e-9,-6.432790367365826e-4,-1.0308974899831868e-5,8.428993979308454e-9,-6.428454586197086e-4,-1.0044472629606271e-5,8.511840347096126e-9,-6.425364546618369e-4,-9.780404242463435e-6,8.595019151624936e-9,-6.423374992473061e-4,-9.584105091257316e-6,8.656940621566346e-9,-6.422025862017104e-4,-9.499924509528801e-6,8.683268961814048e-9,-6.420723318815535e-4,-9.536788226021915e-6,8.6709032555823e-9,-6.418937058551346e-4,-9.670339340684684e-6,8.62736165406817e-9,-6.416333150807353e-4,-9.854985606826542e-6,8.567021549391805e-9,-6.412819489618678e-4,-1.0038675384978085e-5,8.506456394204669e-9,-6.40852233208935e-4,-1.0175358821881159e-5,8.460459308358457e-9,-6.403723843214741e-4,-1.0233119886925515e-5,8.439407583253215e-9,-6.398785177155639e-4,-1.0197922583846564e-5,8.44800812947473e-9,-6.394070755339369e-4,-1.0073651943128085e-5,8.485229457435074e-9,-6.389883923031362e-4,-9.879211991447938e-6,8.545190825663756e-9,-6.386421940044092e-4,-9.643564938301254e-6,8.61872891621823e-9,-6.383754932638375e-4,-9.399866438278023e-6,8.695270282083074e-9,-6.381828126059341e-4,-9.179868626602678e-6,8.764629424150486e-9,-6.380482197594612e-4,-9.009455497870036e-6,8.818449463555083e-9,-6.379484020972791e-4,-8.905757191846968e-6,8.851137444227476e-9,-6.378559844764216e-4,-8.875794396678722e-6,8.860308373744816e-9,-6.37742611576723e-4,-8.916182840260416e-6,8.846890961194638e-9,-6.375817826161573e-4,-9.013389503892508e-6,8.815063136955268e-9,-6.373517365413405e-4,-9.144324590548281e-6,8.772088767448038e-9,-6.37038822435467e-4,-9.277480646007872e-6,8.727983133697308e-9,-6.366416476230471e-4,-9.375433709051482e-6,8.69473010267958e-9,-6.361755073060954e-4,-9.400076070259292e-6,8.68460137525384e-9,-6.356751215483993e-4,-9.321725715954837e-6,8.70721463674457e-9,-6.351921226563311e-4,-9.131431137281154e-6,8.765577089452952e-9,-6.34783668220924e-4,-8.851983055038034e-6,8.852573074499977e-9,-6.34492590110691e-4,-8.53933103808297e-6,8.950528563696693e-9,-6.343273922649219e-4,-8.26772377613986e-6,9.035920785086607e-9,-6.342551582389573e-4,-8.102013804904856e-6,9.088118007656425e-9,-6.342142013915741e-4,-8.071933386762328e-6,9.097504097485443e-9,-6.341394360266019e-4,-8.163387841999844e-6,9.06827899549311e-9,-6.339853162802021e-4,-8.329403778276332e-6,9.01508325066568e-9,-6.337359214736137e-4,-8.510810762680521e-6,8.956528860220945e-9,-6.334023030696212e-4,-8.65473815155575e-6,8.909374863487501e-9,-6.330132471509208e-4,-8.725202991217194e-6,8.885158614041552e-9,-6.326051717095914e-4,-8.706169178413972e-6,8.889176992237429e-9,-6.32214019748295e-4,-8.599843727994052e-6,8.920959050065301e-9,-6.318697327111989e-4,-8.422780448879686e-6,8.975440229886825e-9,-6.315928418750007e-4,-8.20125617049522e-6,9.044392176943476e-9,-6.313926873838825e-4,-7.966459175451952e-6,9.117945199759327e-9,-6.31267082506243e-4,-7.749777386235528e-6,9.186104282521891e-9,-6.312033160743475e-4,-7.5785372180136775e-6,9.240130028371382e-9,-6.311803126735913e-4,-7.472534294452365e-6,9.273661681811642e-9,-6.311716770969148e-4,-7.441681249593242e-6,9.283469414099118e-9,-6.311491861629334e-4,-7.484987837433047e-6,9.269772409499044e-9,-6.310862639818491e-4,-7.590780571477355e-6,9.236162458649285e-9,-6.309612058273856e-4,-7.737892241529536e-6,9.189230845951367e-9,-6.307601275839634e-4,-7.897660405035442e-6,9.137956611667645e-9,-6.304796987183105e-4,-8.036756534142556e-6,9.09284140190737e-9,-6.301296693209371e-4,-8.121168651637492e-6,9.064674114885852e-9,-6.297347052073675e-4,-8.122014010732786e-6,9.062695008476826e-9,-6.293340333682221e-4,-8.02357893613418e-6,9.092032490280441e-9,-6.289764922907992e-4,-7.832498886235678e-6,9.150771158405365e-9,-6.287088356458074e-4,-7.584313389584958e-6,9.227855564074418e-9,-6.285582300395714e-4,-7.340955663643736e-6,9.303857526237659e-9,-6.285162181702288e-4,-7.173981894358338e-6,9.35622506385365e-9,-6.28535844534191e-4,-7.137050918742098e-6,9.367918818323381e-9,-6.285482266619833e-4,-7.242236086511384e-6,9.334891322630107e-9,-6.284908233474023e-4,-7.4556587282647425e-6,9.267547066221383e-9,-6.28330425274692e-4,-7.714648020679488e-6,9.185435045716488e-9,-6.28069302206002e-4,-7.95377724697567e-6,9.109102634548203e-9,-6.277362671666278e-4,-8.124785819023314e-6,9.053825972438715e-9,-6.273721375619873e-4,-8.204270724462586e-6,9.02715680817319e-9,-6.27017398081553e-4,-8.191793049541557e-6,9.029461806338658e-9,-6.267047725449272e-4,-8.103665827061228e-6,9.055810702686439e-9,-6.26456043916988e-4,-7.966249400547607e-6,9.098033223137005e-9,-6.26281416479543e-4,-7.810389877515416e-6,9.146451274581206e-9,-6.261800463441795e-4,-7.667092566462788e-6,9.191260130576387e-9,-6.261411718711373e-4,-7.564004290537873e-6,9.223675064183579e-9,-6.261457836463466e-4,-7.522438367703082e-6,9.23690378724907e-9,-6.261689058554466e-4,-7.554911651594159e-6,9.226935824039986e-9,-6.26182575765119e-4,-7.663394769762143e-6,9.193084339014298e-9,-6.261594321595429e-4,-7.83867655737204e-6,9.138166390547462e-9,-6.26076519398364e-4,-8.061135092227624e-6,9.068247870454783e-9,-6.259188201018052e-4,-8.302926480673475e-6,8.991964522431026e-9,-6.256821123187454e-4,-8.531474630101965e-6,8.919455933728389e-9,-6.253747887567023e-4,-8.714062415411706e-6,8.860964423618094e-9,-6.250183114255093e-4,-8.823240323023451e-6,8.825167866103795e-9,-6.246458882436894e-4,-8.842823215536685e-6,8.817300503612222e-9,-6.242985755887415e-4,-8.774026346559433e-6,8.837199099376945e-9,-6.240177934968095e-4,-8.640273119230142e-6,8.87774343727035e-9,-6.238340168367981e-4,-8.487734929015043e-6,8.924628410892147e-9,-6.237537835039231e-4,-8.37786762163323e-6,8.958649435262117e-9,-6.237508622334895e-4,-8.370050553809897e-6,8.961109428361436e-9,-6.237694285501078e-4,-8.498608243715725e-6,8.921029687418638e-9,-6.237425116459058e-4,-8.75592709653261e-6,8.840509552635665e-9,-6.236182223750581e-4,-9.0935440897417e-6,8.734482255018053e-9,-6.233789176946422e-4,-9.44210315649724e-6,8.62453087546554e-9,-6.230431618178639e-4,-9.738006393072087e-6,8.530559779025655e-9,-6.226528415322329e-4,-9.942072412796151e-6,8.464944949980187e-9,-6.222558156538971e-4,-1.0044216892862036e-5,8.431044644216811e-9,-6.218928123420268e-4,-1.0057759649626142e-5,8.424931676993069e-9,-6.215911924046659e-4,-1.0010051523072495e-5,8.438260126232764e-9,-6.213639804945358e-4,-9.934048776771606e-6,8.460847692598394e-9,-6.212115296909202e-4,-9.862436775050359e-6,8.482499035264433e-9,-6.211238864357817e-4,-9.823973462843352e-6,8.494171700339035e-9,-6.210830596535341e-4,-9.841115150435778e-6,8.488757155704299e-9,-6.210651942122257e-4,-9.928215073960674e-6,8.461672312188594e-9,-6.210429443543682e-4,-1.0090001829574346e-5,8.411340895070526e-9,-6.209883936927952e-4,-1.032045635967511e-5,8.339532086435201e-9,-6.208766895726924e-4,-1.0602611237518307e-5,8.251410557946112e-9,-6.206901011511374e-4,-1.0909904384581257e-5,8.155117882712867e-9,-6.204217801816662e-4,-1.1209428967393452e-5,8.060785794006027e-9,-6.200783346355796e-4,-1.1467000570356854e-5,7.978999665257574e-9,-6.196803527606607e-4,-1.1653487857353938e-5,7.918867885019981e-9,-6.192602675084233e-4,-1.1751341629004252e-5,7.886009589301413e-9,-6.18857430993645e-4,-1.1760013081941588e-5,7.880853644284182e-9,-6.185107199373036e-4,-1.1698990162283051e-5,7.897639687734814e-9,-6.182494033759342e-4,-1.1607106693188978e-5,7.924550386176266e-9,-6.180837782626559e-4,-1.1536704553317361e-5,7.945441153139379e-9,-6.17998354061986e-4,-1.1541930108901036e-5,7.943422534415343e-9,-6.179514865732182e-4,-1.1662608663681637e-5,7.905878369024749e-9,-6.178847530264709e-4,-1.1908666705688085e-5,7.829382187794986e-9,-6.177413716940561e-4,-1.225291771545529e-5,7.722050838337925e-9,-6.174866683392963e-4,-1.2638281908291842e-5,7.601388082277714e-9,-6.171202061499132e-4,-1.2997807711744528e-5,7.488094639614473e-9,-6.166733164451345e-4,-1.3277552122048224e-5,7.398956214429256e-9,-6.161948260617495e-4,-1.3451111439177265e-5,7.342324255674225e-9,-6.157338992816079e-4,-1.3521276834735159e-5,7.317585667968248e-9,-6.153277910312762e-4,-1.351221220619276e-5,7.3175400954822244e-9,-6.149969832299286e-4,-1.345864223227892e-5,7.331678474457581e-9,-6.147459001310118e-4,-1.3396792379450818e-5,7.3489284361196675e-9,-6.14566195981989e-4,-1.335865891362545e-5,7.3594093806847335e-9,-6.144404163975216e-4,-1.3369061432935648e-5,7.3553652588823905e-9,-6.143451013492217e-4,-1.3444276092296466e-5,7.331624223806665e-9,-6.142533201726146e-4,-1.3591271145411236e-5,7.285864502738724e-9,-6.141370824533147e-4,-1.3807054893883965e-5,7.2188286363125555e-9,-6.139701752177742e-4,-1.4078197634895255e-5,7.134475176715785e-9,-6.137317622253945e-4,-1.4381127354302392e-5,7.03989660873347e-9,-6.13410548401449e-4,-1.4684067691371548e-5,6.944744457685035e-9,-6.130086364730966e-4,-1.4951295234998012e-5,6.8599511266353936e-9,-6.125436581487522e-4,-1.5149749237378634e-5,6.795727421966501e-9,-6.120476639627279e-4,-1.5256983677622905e-5,6.759136642679807e-9,-6.115619176413706e-4,-1.5268340231572266e-5,6.751886205597447e-9,-6.111281095430912e-4,-1.520077746265615e-5,6.769114447606619e-9,-6.107779587857513e-4,-1.5091461683002552e-5,6.799746818271109e-9,-6.10524015294988e-4,-1.4990666324170982e-5,6.828571027830531e-9,-6.103544553284269e-4,-1.4950126437351983e-5,6.839718154874809e-9,-6.10233932630094e-4,-1.5009403395997819e-5,6.820816675408024e-9,-6.101112797303565e-4,-1.5183860384006196e-5,6.7667449207401965e-9,-6.099330136988942e-4,-1.5458296216177136e-5,6.6817180549403645e-9,-6.096591780398321e-4,-1.5789545255279567e-5,6.578625916310926e-9,-6.092759401267423e-4,-1.611861496564348e-5,6.475384794437283e-9,-6.087995316766636e-4,-1.638857118742033e-5,6.389456320634693e-9,-6.082696917744599e-4,-1.656102986792536e-5,6.332762451172584e-9,-6.07735931357823e-4,-1.6624724248411486e-5,6.309028251969762e-9,-6.07243028636269e-4,-1.659408062376702e-5,6.314176973263146e-9,-6.068212130456064e-4,-1.6500688633924005e-5,6.3388763395423195e-9,-6.064828882107512e-4,-1.6382732655089433e-5,6.3716957047222936e-9,-6.062244250029457e-4,-1.6276375396916556e-5,6.401688363734559e-9,-6.060303124501623e-4,-1.6210566121514825e-5,6.41997117246288e-9,-6.058775295989655e-4,-1.6204774019256874e-5,6.420448907864246e-9,-6.057391575612956e-4,-1.6268443228459086e-5,6.400024095330046e-9,-6.055871563899351e-4,-1.640110876257458e-5,6.358597590462493e-9,-6.053947651586242e-4,-1.6592563064539658e-5,6.299040120511544e-9,-6.051391799853258e-4,-1.6823062293831563e-5,6.2271479239230684e-9,-6.04804958969757e-4,-1.7064185629920318e-5,6.15140407656365e-9,-6.043880305658054e-4,-1.7281339145854306e-5,6.082244629251485e-9,-6.038993664978827e-4,-1.743882255386278e-5,6.03054138334135e-9,-6.033664982363028e-4,-1.7507647128342022e-5,6.005236775662678e-9,-6.028306776843586e-4,-1.747471621344875e-5,6.0105545030052955e-9,-6.02338498179153e-4,-1.7350074414647643e-5,6.043785475000533e-9,-6.019293636463869e-4,-1.7168208077473955e-5,6.094852354472843e-9,-6.016229799273229e-4,-1.6981102965108023e-5,6.148328418570691e-9,-6.014120043088848e-4,-1.6844415703121967e-5,6.1875079574704055e-9,-6.012631542790681e-4,-1.6801491798937394e-5,6.199152357907398e-9,-6.011264926259588e-4,-1.687094638850435e-5,6.177250027198649e-9,-6.009494858060641e-4,-1.7041783355707502e-5,6.124605564008008e-9,-6.006912495843881e-4,-1.7277030403387907e-5,6.051910031149934e-9,-6.003329547922971e-4,-1.7524265175610315e-5,5.974701125327572e-9,-5.998817609412311e-4,-1.7729749635034893e-5,5.909152133979997e-9,-5.993674834698096e-4,-1.7852060415235455e-5,5.8679359897686786e-9,-5.98833377167506e-4,-1.7871308208750187e-5,5.857377281089162e-9,-5.983242961249349e-4,-1.7791603804934904e-5,5.876628602108236e-9,-5.978761089750183e-4,-1.763692721889734e-5,5.9188348328191164e-9,-5.97509246371083e-4,-1.744281060909608e-5,5.973566370425565e-9,-5.972272340443155e-4,-1.724717783696112e-5,6.029530158965291e-9,-5.970191412732754e-4,-1.708303930127975e-5,6.076760853223087e-9,-5.968639601907031e-4,-1.6974182393121108e-5,6.107949062772968e-9,-5.967351618909186e-4,-1.6933562355692315e-5,6.1189757620988596e-9,-5.966044914543551e-4,-1.6963408114122988e-5,6.108924653343465e-9,-5.964448552706594e-4,-1.7056054741231575e-5,6.079858424794432e-9,-5.962326779452772e-4,-1.719488339402509e-5,6.036551327657856e-9,-5.959503269411983e-4,-1.7355296242159556e-5,5.9862122504836265e-9,-5.955890709894159e-4,-1.7506243438176608e-5,5.9380510048463094e-9,-5.951525234145372e-4,-1.7613258416163484e-5,5.902393637339857e-9,-5.946596553230791e-4,-1.764400034962936e-5,5.889033529766786e-9,-5.941454005656148e-4,-1.757658081028564e-5,5.9047300999132285e-9,-5.936562505153676e-4,-1.740909145309199e-5,5.9503386560754e-9,-5.932393300043767e-4,-1.7166185049999746e-5,6.018820818675055e-9,-5.929270253618056e-4,-1.6897363809678338e-5,6.095715953083003e-9,-5.927235829331455e-4,-1.6664334583585255e-5,6.162832492505709e-9,-5.926012168281408e-4,-1.6521086061127168e-5,6.204080876826821e-9,-5.925088318791681e-4,-1.6495650783895652e-5,6.2108462578212325e-9,-5.923893296595289e-4,-1.6581983910685432e-5,6.18445634623603e-9,-5.921973240230338e-4,-1.6744373968298434e-5,6.135018198325406e-9,-5.919105305805832e-4,-1.6930486544110382e-5,6.077709827522491e-9,-5.915325837551485e-4,-1.708674963487434e-5,6.028320742756395e-9,-5.910887401414671e-4,-1.7171114333858196e-5,5.999481940305171e-9,-5.906173977802621e-4,-1.7160751663905477e-5,5.998318193545036e-9,-5.901602907269286e-4,-1.7054266849847147e-5,6.025679671747184e-9,-5.897536026274595e-4,-1.6869186278252847e-5,6.076768658723353e-9,-5.894215706944987e-4,-1.6636088071657184e-5,6.142787676934763e-9,-5.891734417193177e-4,-1.639112845867565e-5,6.21311247089221e-9,-5.890037891503861e-4,-1.616881901687457e-5,6.277444531418832e-9,-5.888953870874903e-4,-1.599649526801642e-5,6.32750261058349e-9,-5.888234156540204e-4,-1.5891120266408232e-5,6.358035497480615e-9,-5.887598278097893e-4,-1.585830828911002e-5,6.36716114540014e-9,-5.886770911880141e-4,-1.5892951435849457e-5,6.356201350362242e-9,-5.88551067772663e-4,-1.598065881617845e-5,6.329251478975357e-9,-5.883632730491481e-4,-1.609944079656462e-5,6.292675486505938e-9,-5.881029486085081e-4,-1.622153632414498e-5,6.254574948934901e-9,-5.877692932525501e-4,-1.6315735016464423e-5,6.224131558643309e-9,-5.873738337045345e-4,-1.6350916709415508e-5,6.2105932820424296e-9,-5.869421485315761e-4,-1.630165097021894e-5,6.221632150191717e-9,-5.865131121598357e-4,-1.6156063475258574e-5,6.261002414793579e-9,-5.861331744440621e-4,-1.592434760802166e-5,6.325989749491587e-9,-5.858441940187316e-4,-1.5643598634390996e-5,6.405942312898085e-9,-5.856671951075539e-4,-1.5373106219251778e-5,6.483607719282582e-9,-5.855897763285556e-4,-1.517729276675414e-5,6.540086767802591e-9,-5.855664407766135e-4,-1.5101743305100796e-5,6.561819413722951e-9,-5.855345304499817e-4,-1.5154956209859986e-5,6.545946710766161e-9,-5.854378007236991e-4,-1.5306366023333386e-5,6.500984799091855e-9,-5.852448952227367e-4,-1.550045098503084e-5,6.442830961710452e-9,-5.849551516575722e-4,-1.567734639813534e-5,6.388848412759949e-9,-5.845930082893017e-4,-1.5789777542943528e-5,6.352965558410412e-9,-5.841969678310368e-4,-1.5811729052473348e-5,6.343113417189745e-9,-5.838084552194186e-4,-1.5739511632880423e-5,6.360814546463471e-9,-5.834633032295308e-4,-1.5588003820527e-5,6.402145833924053e-9,-5.831864760835484e-4,-1.538472081382847e-5,6.4593502606737386e-9,-5.829896181558738e-4,-1.5163375096637597e-5,6.5226561160815544e-9,-5.828708999533577e-4,-1.4957769589611858e-5,6.582074977801076e-9,-5.828167555766546e-4,-1.479662672105976e-5,6.628984531476504e-9,-5.828049993600993e-4,-1.46998740108272e-5,6.657304486326205e-9,-5.828086784632086e-4,-1.4676619073704028e-5,6.664156600488167e-9,-5.828000486403008e-4,-1.472477456925716e-5,6.649997471487258e-9,-5.827541399829672e-4,-1.4832100153552331e-5,6.618295601842242e-9,-5.826515746817173e-4,-1.4978198357449995e-5,6.574915976578972e-9,-5.824806499688132e-4,-1.5136975222470618e-5,6.5273858129103555e-9,-0.00058223891266244855,-1.5279382997478107e-5,6.484113573877451e-9,-5.819343932522649e-4,-1.537659130322262e-5,6.453510098108357e-9,-5.815864337643335e-4,-1.540395190071223e-5,6.442875322162274e-9,-5.812255138914551e-4,-1.5346207013270155e-5,6.456887019322757e-9,-5.808906783087563e-4,-1.5203879326331496e-5,6.495696015125998e-9,-5.806227398257667e-4,-1.4999252917115385e-5,6.553106536171523e-9,-5.804523980144355e-4,-1.4778150938693694E-05,6.6159779015583296e-9,-5.803857787226134e-4,-1.460244790593015e-5,6.666344613112382e-9,-5.803949019080188e-4,-1.453107430828226e-5,6.68691651811743e-9,-5.804222577193308e-4,-1.4595598468279076e-5,6.6681996557004115e-9,-5.804015691477434e-4,-1.4784365571006996e-5,6.613182223466211e-9,-5.802844416075218e-4,-1.504659664064087e-5,6.536251455252701e-9,-5.800572407115345e-4,-1.5314205201811868e-5,6.456956105272316e-9,-5.79740462121484e-4,-1.5527257460748158e-5,6.392682319350163e-9,-5.793754455308698e-4,-1.564997575685766e-5,6.354031421288331e-9,-5.79008526869674e-4,-1.5673984575231003E-05,6.3438332685434564e-9,-5.786793595545836e-4,-1.561305703577987e-5,6.358555023821292e-9,-5.78414926698478e-4,-1.5494822966848187e-5,6.390561211013941e-9,-5.782279782895778e-4,-1.535291284406682e-5,6.430282529202295e-9,-5.781179986625985e-4,-1.5220866757312826e-5,6.467953037038186e-9,-5.780733038593612e-4,-1.5127728821522725e-5,6.494942808591026e-9,-5.780737214613339e-4,-1.5094878202343984e-5,6.5047765753731806e-9,-5.780937304323509e-4,-1.5133945325895573e-5,6.493829724860568e-9,-5.781059012122124e-4,-1.5245845768728994e-5,6.461654192249107e-9,-5.780844231366714e-4,-1.5420967008494582E-05,6.410916404303534e-9,-5.780084375089962e-4,-1.5640566187065733e-5,6.346952753693187e-9,-5.778647777628711e-4,-1.5879285361295647e-5,6.277008199105833e-9,-5.776498175490725e-4,-1.6108436934896513e-5,6.209288793870668e-9,-5.773703656839252e-4,-1.6299721111280603e-5,6.151931069035016e-9,-5.770436111533959e-4,-1.6429208290678547e-5,6.111913238799296e-9,-5.766960225533119e-4,-1.6481506020845262e-5,6.093889659946264e-9,-5.763608734161528e-4,-1.6454038016908552e-5,6.098936037071565e-9,-5.760736744361726e-4,-1.6361021724264736e-5,6.123317511020036e-9,-5.758647102549619e-4,-1.6235696451862072e-5,6.157725998483951e-9,-5.757488547335339e-4,-1.612803540234014e-5,6.1878352067051535e-9,-5.757153315080947e-4,-1.609480237938911e-5,6.197125012537102e-9,-5.757234435926061e-4,-1.6181340271018654e-5,6.17217305833007e-9,-5.757111211388329e-4,-1.6400971995423106e-5,6.108703432860775e-9,-5.756170143529824e-4,-1.6724228696811727e-5,6.014819069588441e-9,-5.754058752564376e-4,-1.7087730422599016e-5,5.908527015219574e-9,-5.750819117894468e-4,-1.7419566737748216e-5,5.810457691770534e-9,-5.746829127406637e-4,-1.7665934924859706e-5,5.736209930949652e-9,-5.742617293776332e-4,-1.7804887133825812e-5,5.692403621165638e-9,-5.738676244788915e-4,-1.7844643668928444e-5,5.677123312045796e-9,-5.735352118200017e-4,-1.781324586487339e-5,5.682774688163753e-9,-5.732813705044003e-4,-1.774712544477777e-5,5.699224028512855e-9,-5.731070706253558e-4,-1.7682465513048927e-5,5.716183635261324e-9,-5.730010810481334e-4,-1.7650014543434743e-5,5.7246996299768535e-9,-5.729437243720952e-4,-1.7672436560521165e-5,5.717992329661441e-9,-5.729101327422091e-4,-1.77629912703616e-5,5.691943387538161e-9,-5.728732254490138e-4,-1.7924881686606425e-5,5.645364913125561e-9,-5.728066872098459e-4,-1.8151183111504288e-5,5.580046983978404e-9,-5.726880446715707e-4,-1.8425518479711568e-5,5.500544376149344e-9,-5.725017360320156e-4,-1.8723776519021976e-5,5.4136497171616706e-9,-5.722417478110209e-4,-1.901709758465021e-5,5.327525281669176e-9,-5.719132058612187e-4,-1.9275973453983113e-5,5.250556794951275e-9,-5.715324599224961e-4,-1.9474966424702655e-5,5.190061549896955e-9,-5.711254487065863e-4,-1.9597425970417595e-5,5.150993130292952e-9,-5.707243215314012e-4,-1.963951786184574e-5,5.134796911166756e-9,-5.703624645452386e-4,-1.961289496480425e-5,5.138582384870229e-9,-5.700681701023597e-4,-1.9545349551733103e-5,5.154808129149603e-9,-5.698573617980196e-4,-1.947850234148492e-5,5.171796776237571e-9,-5.697265168248463e-4,-1.946126166119291e-5,5.175504776714801e-9,-5.696483046445741e-4,-1.9538307489946467e-5,5.152814866181088e-9,-5.695737447050487e-4,-1.9735023712205888e-5,5.095954657144991e-9,-5.694440581573207e-4,-2.0044122435153433e-5,5.006492424902162e-9,-5.692107976121244e-4,-2.0422259733411498e-5,4.896447185420986e-9,-5.688556702159739e-4,-2.080239735784011e-5,4.784807248298537e-9,-5.683984430252771e-4,-2.1118146298752406e-5,4.69055903235853e-9,-5.678877874524411e-4,-2.1327200844530532e-5,4.6259837892894646e-9,-5.673813072802742e-4,-2.1421699487486857e-5,4.593705379214873e-9,-5.669266461901139e-4,-2.1423333992840117e-5,4.588040913127525e-9,-5.665515251973581e-4,-2.1370168449335505e-5,4.598631280140418e-9,-5.66262954244887e-4,-2.1303510202976556e-5,4.614029495947506e-9,-5.660516519242294e-4,-2.1259150169743164e-5,4.624106881604416e-9,-5.658977760906469e-4,-2.1263246516499423e-5,4.621241923637268e-9,-5.657758344743934e-4,-2.1331262909287216e-5,4.600715978969188e-9,-5.656582879656547e-4,-2.146824690958318e-5,4.560744399958647e-9,-5.655182799852074e-4,-2.166944979816653e-5,4.502372881234427e-9,-5.653320939464026e-4,-2.19210611198664e-5,4.429288721729575e-9,-5.650817267772786e-4,-2.2201302733604196e-5,4.347494108741701e-9,-5.647576281566446e-4,-2.248238891148829e-5,4.2647329227178e-9,-5.64361175875774e-4,-2.273385814627313e-5,4.1895539317782425e-9,-5.639060211063388e-4,-2.2927360460003696e-5,4.129994037758887e-9,-5.634173669126164e-4,-2.3042324624474837e-5,4.092025805841426e-9,-5.629285951340259e-4,-2.3071330028784256e-5,4.078067292741761e-9,-5.624753358397186e-4,-2.3023652525244365e-5,4.085953126634584e-9,-5.620879235594856e-4,-2.2925599059856908e-5,4.1087412604200885e-9,-5.617838311213657e-4,-2.2816948292584702e-5,4.13556726191145e-9,-5.615618506350042e-4,-2.274366245931516e-5,4.1535543827756625e-9,-5.613996862607292e-4,-2.2747751693369897e-5,4.150602400752755e-9,-5.61256426475516e-4,-2.2855979724977274e-5,4.1186293748158945e-9,-5.61080812039059e-4,-2.307016575944345e-5,4.056477812301431e-9,-5.608247544560862e-4,-2.3362823347901296e-5,3.971353014138016e-9,-5.6045888275338e-4,-2.3681771753724775e-5,3.877666551810311e-9,-5.599840255643514e-4,-2.3964648029816697e-5,3.7929726560466655e-9,-5.594323224548366e-4,-2.4158896301923775e-5,3.732284697554104e-9,-5.588562140180068e-4,-2.4238382403495358e-5,3.7033386543166194e-9,-5.583104935056323e-4,-2.4208922097151482e-5,3.7049913841555217e-9,-5.578362118896362e-4,-2.4101634993633252e-5,3.729013562684922e-9,-5.574526700823866e-4,-2.395959922159319e-5,3.763717738012945e-9,-5.571580150477938e-4,-2.3824918225424018e-5,3.7974724057465164e-9,-5.56934945270612e-4,-2.3730431642789787e-5,3.820986693463586e-9,-5.567575402096818e-4,-2.369650431855389e-5,3.828264474037562e-9,-5.565968561839238e-4,-2.3731175634325677e-5,3.81667238499676e-9,-5.564247258473144e-4,-2.383170766272784e-5,3.786608603817477e-9,-5.562162343773809e-4,-2.3986308687498875e-5,3.741076017959136e-9,-5.559516320965893e-4,-2.41756410521933e-5,3.6852669334650524e-9,-5.556182989939095e-4,-2.4374329729557413e-5,3.626126257835752e-9,-5.552129829469255e-4,-2.455308708972398e-5,3.5717509128408136e-9,-5.547439478003086e-4,-2.4682169708976556e-5,3.5304410056635687e-9,-5.542320441001034e-4,-2.4736519034990855e-5,3.509299202176376e-9,-5.537093394875636e-4,-2.470209240070845e-5,3.5124945121858324e-9,-5.532141884717492e-4,-2.4581739735308707e-5,3.539625413001244e-9,-5.527827987017785e-4,-2.4398065123244182e-5,3.584874043486559e-9,-5.524392207026548e-4,-2.419093064879187e-5,3.6375935558350362E-09,-5.521871673866484e-4,-2.400904254983496e-5,3.6845003460724823e-9,-5.52006996859421e-4,-2.3897600320895216e-5,3.7129769442225496e-9,-5.518594417411545e-4,-2.3885806156130697e-5,3.714505319352247e-9,-5.516952472542898e-4,-2.3978206075858976e-5,3.6871706513466653e-9,-5.514680023266997e-4,-2.415252676916681e-5,3.636467576060659e-9,-5.511466570996784e-4,-2.436472997812125e-5,3.5741160763841065e-9,-5.507243054631822e-4,-2.456016575596165e-5,3.5151030037156743e-9,-5.502204943898792e-4,-2.4688078368491355e-5,3.4736716022299434e-9,-5.49675845316952e-4,-2.4715297420699776e-5,3.4594450841273604e-9,-5.491403496431156e-4,-2.4634524609268043e-5,3.475010754579904e-9,-5.486594079579832e-4,-2.4464309834586896e-5,3.5158016687115214e-9,-5.482626949453814e-4,-2.424130364105868e-5,3.572121989232335e-9,-5.479593003710058e-4,-2.400859263852101e-5,3.6322781071167195e-9,-5.477393924139225e-4,-2.380483572567349e-5,3.685543859039702e-9,-5.475800136344878e-4,-2.365734300350956e-5,3.7241138416981567e-9,-5.47451900115605e-4,-2.3579686113701558e-5,3.743864278401933e-9,-5.473251545092862e-4,-2.3572576485177517e-5,3.744220422532077e-9,-5.471730460260657e-4,-2.3626248739021626e-5,3.727569108803425e-9,-5.469742478632765e-4,-2.3723043848052887e-5,3.6985616396725427e-9,-5.467142469598954e-4,-2.3839630731377964e-5,3.6634824609621807e-9,-5.463866264206015e-4,-2.3948973655604125e-5,3.6296880385067596e-9,-5.4599456793534e-4,-2.4022629138410048e-5,3.604980769764583e-9,-5.455523444943196e-4,-2.4034135649642785e-5,3.5967054365603564e-9,-5.450858818683846e-4,-2.396401744104895e-5,3.6104037986387385e-9,-5.446308564687652e-4,-2.380610222496027e-5,3.648086038965713e-9,-5.442267710418497e-4,-2.3573376044700058e-5,3.7065940327411654e-9,-5.43906780201333e-4,-2.3300037015731352e-5,3.776970362392915e-9,-5.436858585814063e-4,-2.303631065445945e-5,3.8457757017923984e-9,-5.43552613478327e-4,-2.28353475000358e-5,3.898554409891338e-9,-5.434699258623914e-4,-2.2736277504907688e-5,3.924381501274142e-9,-5.433855832143338e-4,-2.275078970747129e-5,3.919540539705527e-9,-5.43248646299094e-4,-2.285936214945721e-5,3.888688548443496e-9,-5.430245801652687e-4,-2.3018194797770242e-5,3.8431759853901846e-9,-5.427037893107168e-4,-2.3172944399802506e-5,3.7974973736510936e-9,-5.423020260258028e-4,-2.3273629234107787e-5,3.765329016282113e-9,-5.418542195221602e-4,-2.328631805513169e-5,3.756319626683319e-9,-5.414045400541133e-4,-2.3199382210688513e-5,3.774257587440266e-9,-5.409955890221134e-4,-2.302384304625818e-5,3.8167930066406206e-9,-5.406592269132189e-4,-2.2788582348018324e-5,3.876564618794517e-9,-5.404109156371855e-4,-2.253214165155441e-5,3.943315026925249e-9,-5.402484736817223e-4,-2.2293496058127136e-5,4.00637464546443e-9,-5.401548723226671e-4,-2.210423231623976e-5,4.056855142789439e-9]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json deleted file mode 100644 index f56819c..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_7.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":7000,"numberOfSamples":1000,"samples":[-5.401035826582183e-4,-2.1983771746004456e-5,4.089071108861903e-9,-5.400645679375473e-4,-2.1937995914044596e-5,4.1010390739496695e-9,-5.400093979365809e-4,-2.1960549237341188e-5,4.094200825458988e-9,-5.399147607226752e-4,-2.203560775605646e-5,4.072680770337793e-9,-5.397644338651072e-4,-2.2140989396072942e-5,4.0424039620270295e-9,-5.395502643031555e-4,-2.2250959079911428e-5,4.010291455194114e-9,-5.392727708698771e-4,-2.233868896010399e-5,3.983582390762636e-9,-5.389417235021638e-4,-2.2378792834005243e-5,3.969178139964558e-9,-5.385766058145648e-4,-2.235055698671764e-5,3.972815745495291e-9,-5.382062428829531e-4,-2.2242365349685453e-5,3.9978965146973945e-9,-5.378662132655593e-4,-2.205712418011711e-5,4.043993326717811e-9,-5.375924932704364e-4,-2.181705877637256e-5,4.105479870305896e-9,-5.374109340395555e-4,-2.1564488189815053e-5,4.171221914461289e-9,-5.373252109046606e-4,-2.13546121672999e-5,4.226432351021938e-9,-5.373095626709229e-4,-2.123923851906108e-5,4.256999417283581e-9,-5.373130817418842e-4,-2.1246850964482913e-5,4.25485673473855e-9,-5.372765380678705e-4,-2.136960735856047e-5,4.221561718856039e-9,-5.371540300970259e-4,-2.156549994879516e-5,4.167859343731849e-9,-5.36928145915775e-4,-2.177449463181616e-5,4.109507993256763e-9,-5.36612298142394e-4,-2.193926959851254e-5,4.061836554881471e-9,-5.362421974391817e-4,-2.202084762893932e-5,4.035594559950374e-9,-5.358628658080441e-4,-2.200502185841941e-5,4.035163172736923e-9,-5.355167351147426e-4,-2.1900830823744038e-5,4.058798324504693e-9,-5.35235449411885e-4,-2.173439788390032e-5,4.100071676730384e-9,-5.350357193602122e-4,-2.15410881740401e-5,4.14980207032798e-9,-5.349185757880749e-4,-2.135782693181579e-5,4.198050291539687e-9,-5.348712290073628e-4,-2.121657442592248e-5,4.2359280087428855e-9,-5.348708000481933e-4,-2.1139615342117445e-5,4.257004944159546e-9,-5.348890826615417e-4,-2.113709309176623e-5,4.258128208977309e-9,-5.348974104172614e-4,-2.1206799246401138e-5,4.239584522007182e-9,-5.348708384321045e-4,-2.1335822917691524e-5,4.204678615706449e-9,-5.347911231697716e-4,-2.1503424398811796e-5,4.158913513206647e-9,-5.346483663470459e-4,-2.1684383203511062e-5,4.109023325019758e-9,-5.344415971986584e-4,-2.185222293312799e-5,4.062070768370815e-9,-5.341787121227865e-4,-2.198213649495927e-5,4.024683100836483e-9,-5.338760303296781e-4,-2.2053786749643512e-5,4.002365575691231e-9,-5.335574557412858e-4,-2.2054309116071213e-5,3.998758028608726e-9,-5.332528017860458e-4,-2.198181627770456e-5,4.014702338546216e-9,-5.32994271803446e-4,-2.1849184863030615e-5,4.047158626760407e-9,-5.328099775273082e-4,-2.1686695872980368E-05,4.088373074123842e-9,-5.327143982259301e-4,-2.1540670747909262e-5,4.1261167888255816e-9,-5.326982547305342e-4,-2.146472539588816e-5,4.145954976805639e-9,-5.327237676269208e-4,-2.150269819024173e-5,4.135827219007261e-9,-5.32732172820136e-4,-2.166880035547954e-5,4.091442962833996e-9,-5.32664363807273e-4,-2.193675634261866e-5,4.019307535221708e-9,-5.324850262715923e-4,-2.2247356034033065e-5,3.93482109123221e-9,-5.321959712692641e-4,-2.253169043764306e-5,3.856170494966331e-9,-5.318318024819819e-4,-2.2736299986202895e-5,3.797697407775919e-9,-5.314434001136979e-4,-2.283727543038531e-5,3.7661716224598815e-9,-5.310801862783224e-4,-2.2840328090950416e-5,3.760701663621395e-9,-5.307784695622606e-4,-2.277209911293882e-5,3.774865010501329e-9,-5.305570300482153e-4,-2.2669296597542187e-5,3.799377675031908e-9,-5.304177923198672e-4,-2.2569563199808032e-5,3.824373068544768e-9,-5.303490345079164e-4,-2.2505211219014473e-5,3.841055895162692e-9,-5.303294436667859e-4,-2.2499458669989806e-5,3.842819986704146e-9,-5.303323047521583e-4,-2.2564506861846283e-5,3.825934653411622e-9,-5.303295770130921e-4,-2.2701095439328812e-5,3.78981094362531e-9,-5.302956400451363e-4,-2.2899349303107257e-5,3.736840685640963e-9,-5.30210473665667e-4,-2.314073527658426e-5,3.6718507329490764e-9,-5.300620142371433e-4,-2.340093393614476e-5,3.601265981895817e-9,-5.298474349228372e-4,-2.3653284469214588e-5,3.532132956929273e-9,-5.29573308984056e-4,-2.3872320401723e-5,3.4711768964710575e-9,-5.292548431176042e-4,-2.403707365259649e-5,3.4239812057610383e-9,-5.289143407918906e-4,-2.4134058857944783e-5,3.3942741989696835e-9,-5.285789266630395e-4,-2.4159906281443744e-5,3.3832709646259577e-9,-5.282773952237134e-4,-2.4123609199085298e-5,3.389033411558258e-9,-5.280357364388392e-4,-2.404808982327215e-5,3.4059246595776906e-9,-5.278708810726782e-4,-2.3969949940549298e-5,3.4245089739342943e-9,-5.277831391864141e-4,-2.3935357712190903e-5,3.4325187746853774e-9,-5.277497546540487e-4,-2.3990053843999665e-5,3.417490568679712e-9,-5.277243373408124e-4,-2.416362760309801e-5,3.371043381811958e-9,-5.276472969010053e-4,-2.4453303594010498e-5,3.2933522318209953e-9,-5.274672038760931e-4,-2.4817592116745615e-5,3.1949762152372857e-9,-5.271634422555336e-4,-2.5188059386224728e-5,3.0937979755767632e-9,-5.267559068389037e-4,-2.549567899523349e-5,3.008057415556971e-9,-5.262952781608044e-4,-2.569664316277229e-5,2.9495561606916857e-9,-5.258412694183832e-4,-2.5783493066863733e-5,2.9207489680924703e-9,-5.254425066389419e-4,-2.5779503885456728e-5,2.9161612247094987e-9,-5.251263833011977e-4,-2.5724489785007588e-5,2.925940256027055e-9,-5.248986095698239e-4,-2.566102959629115e-5,2.9392604634341714e-9,-5.247480432907525e-4,-2.5625368004893986e-5,2.946595015690205e-9,-5.246528338231885e-4,-2.5643091786020372e-5,2.940887498147975e-9,-5.245858121778989e-4,-2.572797628618578e-5,2.918009092055048e-9,-5.245186697908287e-4,-2.5882406676612352e-5,2.8768303754599108e-9,-5.244252403009383e-4,-2.6098529986454154e-5,2.8190430572214277e-9,-5.242842104460674e-4,-2.6359918036558112e-5,2.748752781998075e-9,-5.240813809095547e-4,-2.664376012583758e-5,2.6718566779627634e-9,-5.23811405473642e-4,-2.6923697743507696e-5,2.5952305181850944e-9,-5.234786998958045e-4,-2.7173303690041893e-5,2.5257824612885647e-9,-5.230971720563157e-4,-2.7369871435687406e-5,2.4694878843742183e-9,-5.226886747385083e-4,-2.749801736194075e-5,2.4305157487672832e-9,-5.222802740203602e-4,-2.7552679878417226e-5,2.410501767346455e-9,-5.219004721067165e-4,-2.7541114744677728e-5,2.4080150610133087e-9,-5.215746064004773e-4,-2.748348611429587e-5,2.4182963593044943e-9,-5.213196916609409e-4,-2.741169261001642e-5,2.433387542607336e-9,-5.211390633776294e-4,-2.7365830864708946e-5,2.442883976030173e-9,-5.210177939670833e-4,-2.7387386588784694e-5,2.4356382416405185e-9,-5.2092103264559e-4,-2.7508753633437043e-5,2.4025749182162106e-9,-5.207983793056417e-4,-2.7740648686792387e-5,2.3401865242185253e-9,-5.205966266482828e-4,-2.806223642295004e-5,2.253350576167634e-9,-5.202789824851698e-4,-2.8421269302758358e-5,2.1554312055901617e-9,-5.198423209709797e-4,-2.8748981292602243e-5,2.064380772209385e-9,-5.193213569961983e-4,-2.8985277857182498e-5,1.996093068377223e-9,-5.187754286828383e-4,-2.9100856801229018e-5,1.95860814721846e-9,-5.182654734879904e-4,-2.910408008464851e-5,1.950328402209735e-9,-5.17834468885133e-4,-2.903146570281326e-5,1.9624204795998646e-9,-5.174994717055985e-4,-2.8930642345991606e-5,1.9830589980046977e-9,-5.172543344144145e-4,-2.8845521813800735e-5,2.0010793286060667e-9,-5.170775031307184e-4,-2.8808046397317225e-5,2.0080420772500573e-9,-5.169400421587481e-4,-2.883586587420426e-5,1.998918998843043e-9,-5.168116638617822e-4,-2.8933416322078027e-5,1.9719933681402133e-9,-5.166645952694134e-4,-2.9094191480639365e-5,1.928446821526537e-9,-5.16476024252827e-4,-2.930309443473024e-5,1.8718459878098334e-9,-5.162298604848831e-4,-2.9538674218475745e-5,1.8075644448687839e-9,-5.15918183163581e-4,-2.9775463189840496e-5,1.7421226458261029e-9,-5.155423951219354e-4,-2.9986754143992856e-5,1.682415416929058e-9,-5.151137407302886e-4,-3.0148054298078004e-5,1.6348102041026057e-9,-5.14652612618079e-4,-3.024103796625174e-5,1.6041685250154395e-9,-5.141862173715009e-4,-3.025736743569097e-5,1.5929194416540232e-9,-5.137445594032925e-4,-3.0201544061071227e-5,1.6003442662174793e-9,-5.133551073665073e-4,-3.0091913298744713e-5,1.6222546448333353e-9,-5.130369284461957e-4,-2.9959105712960137e-5,1.651244127376648e-9,-5.127954099507898e-4,-2.9841663506552026e-5,1.6776263789056898e-9,-5.126187743607301e-4,-2.977911818282605e-5,1.6910763709352394e-9,-5.124775920139699e-4,-2.980317215645477e-5,1.6828919402962205e-9,-5.123285291058596e-4,-2.992827896807966e-5,1.6485704768880652e-9,-5.121232184702717e-4,-3.0144080674584436e-5,1.5900146804836555e-9,-5.118216874803194e-4,-3.041333535976552e-5,1.5163090868023582e-9,-5.114069216089788e-4,-3.06788578426189e-5,1.4420450362417905e-9,-5.108941341159282e-4,-3.087997193374652e-5,1.383045829244638e-9,-5.103283884814538e-4,-3.097314754523197e-5,1.350950290890561e-9,-5.097696659935665e-4,-3.0946985077149386e-5,1.3492802047218747e-9,-5.092722871601308e-4,-3.0823751756630565e-5,1.3729826486285837e-9,-5.088689790088103e-4,-3.064783528784369e-5,1.4112787115572115e-9,-5.085657929059659e-4,-3.046880866802487e-5,1.4518356546063253e-9,-5.08346811352875e-4,-3.032757248561428e-5,1.4841879987672864e-9,-5.081833205273989e-4,-3.024951848205968e-5,1.5014927928567059e-9,-5.080425577921641e-4,-3.024389232124672e-5,1.5008319918093534e-9,-5.078937898414977e-4,-3.0306504584070308e-5,1.4827093655212703e-9,-5.077117106050379e-4,-3.042331137863873e-5,1.4502784815439696e-9,-5.074781087294359e-4,-3.0573627604291196e-5,1.4085697181512755e-9,-5.071827632231985e-4,-3.0732762305829554e-5,1.363783212066794e-9,-5.068241386956512e-4,-3.087440447664662e-5,1.322616276444108e-9,-5.064099743494193e-4,-3.097328317084115e-5,1.2915471371343079e-9,-5.059573813360568e-4,-3.100850766576199e-5,1.2759963019804067e-9,-5.054917280931815e-4,-3.09675266499804e-5,1.2793674539120017e-9,-5.050436028710859e-4,-3.085000943630236e-5,1.3021016279347987e-9,-5.046435847782699e-4,-3.067039629349787e-5,1.3410151010863194e-9,-5.043154041700915e-4,-3.0457621016956392e-5,1.3892739397176436e-9,-5.040690924503929e-4,-3.025093383015183e-5,1.4372920683562972e-9,-5.038963498673596e-4,-3.0091976510982597e-5,1.4745708467378526e-9,-5.037701041335682e-4,-3.001474285367648e-5,1.4921523724764496e-9,-5.036491510419384e-4,-3.0036038672483e-5,1.4850891219563646e-9,-5.034873278369172e-4,-3.0149240525066758e-5,1.4542250103523055e-9,-5.032453132593057e-4,-3.032361586041559e-5,1.4066373962624775e-9,-5.029021178492986e-4,-3.0510322165871625e-5,1.3543382658568904e-9,-5.024627404979756e-4,-3.06545113386691e-5,1.3112907864465489e-9,-5.01958677253733e-4,-3.0710749963624354e-5,1.2894420761309303e-9,-5.014397693770699e-4,-3.065674386674007e-5,1.2951067361437504e-9,-5.009594637119274e-4,-3.0499774007028698e-5,1.327181960804589e-9,-5.005591265624038e-4,-3.027289359707675e-5,1.3779593095465411e-9,-5.002577464773517e-4,-3.002286754188913e-5,1.4360302437884732e-9,-5.000502980916162e-4,-2.9795642680252517e-5,1.4898545010720947e-9,-4.999135018056022e-4,-2.96252177016554e-5,1.530564984614016e-9,-4.998148703059288e-4,-2.9528734833433275e-5,1.5533180663703762e-9,-4.997210391324866e-4,-2.9507108813167577e-5,1.557313949211449e-9,-4.996033580441727e-4,-2.95486805281199e-5,1.5450349761472517e-9,-4.994407134467235e-4,-2.963354086042027e-5,1.5212284427432084e-9,-4.99220513807549e-4,-2.9737275227078863e-5,1.4919412361183264e-9,-4.989388300780407e-4,-2.9833867578447486e-5,1.4637165471569636e-9,-4.986003615032496e-4,-2.989808300652266e-5,1.442933990607473e-9,-4.982184149831263e-4,-2.9907927865987277e-5,1.4351810441446417e-9,-4.978145252172193e-4,-2.9847712851288548e-5,1.4445248582206659e-9,-4.974169169914042e-4,-2.971176155615385e-5,1.4726359068551763e-9,-4.970569165391165e-4,-2.9508056286774713e-5,1.517893845763169e-9,-4.967628303390822e-4,-2.926026998042455e-5,1.574829976621728e-9,-4.96551978398408e-4,-2.900608455871382e-5,1.634431128285346e-9,-4.96423302209712e-4,-2.879027553840682e-5,1.6857146709917446e-9,-4.963541060645736e-4,-2.865323310167557e-5,1.7184681499924557e-9,-4.963036761354488e-4,-2.861842652841363e-5,1.7263462753477494e-9,-4.962236841992082e-4,-2.8683800491744274e-5,1.7091218148852898e-9,-4.960720233794146e-4,-2.8820919804120417e-5,1.673117417745899e-9,-4.958250916601518e-4,-2.898244031513813e-5,1.6295915726764063e-9,-4.954843911405692e-4,-2.911516518981793e-5,1.591663143962164e-9,-4.950757567029083e-4,-2.9174289607850693e-5,1.5708062654753593e-9,-4.946419883627445e-4,-2.9134683182893188e-5,1.5739443674704452e-9,-4.942313197632331e-4,-2.899634780038582e-5,1.601897900139963e-9,-4.938850760519116e-4,-2.8782878175581034e-5,1.6495407345080696e-9,-4.936280480341194e-4,-2.8533738897703263e-5,1.707525662802973e-9,-4.934641902772148e-4,-2.8293088750190768e-5,1.7649546067683797e-9,-4.933783032088761e-4,-2.80988640410467e-5,1.8121051613246878e-9,-4.933422254005704e-4,-2.7975289802310766e-5,1.8424210940995162e-9,-4.933227875226166e-4,-2.793022331205908e-5,1.853363241919422e-9,-4.932888738289174e-4,-2.7956735636432285e-5,1.8461872237371115e-9,-4.932160962554518e-4,-2.8037116641906087e-5,1.8250326211687373e-9,-4.930889594766327e-4,-2.8147435486230603e-5,1.7957702854856959e-9,-4.929012427190119e-4,-2.8261502965497104e-5,1.7649326447086253e-9,-4.926554961798312e-4,-2.835390391705434e-5,1.7388763334173934e-9,-4.923623095573031e-4,-2.8402349479687208e-5,1.7231683216680764e-9,-4.920395867133475e-4,-2.8389889647024718e-5,1.722073563894763e-9,-4.917115540492151e-4,-2.8307497965287012e-5,1.7379836944677346e-9,-4.914067695061618e-4,-2.815714883271202e-5,1.7707008124423624e-9,-4.911541935152892e-4,-2.7954758530073625e-5,1.8166878141640076e-9,-4.9097673506944e-4,-2.773135265619518e-5,1.868683014872907e-9,-4.908829819257416e-4,-2.753002578310636e-5,1.9163130986412e-9,-4.908600342594571e-4,-2.7396792960745575e-5,1.9482274136412787e-9,-4.908721173909682e-4,-2.736633164669827e-5,1.9555585722015448e-9,-4.908685218729858e-4,-2.7447945016454782e-5,1.935427847646306e-9,-4.907995565142859e-4,-2.7619289411182313e-5,1.8926347984558103e-9,-4.906336832509187e-4,-2.7832348344015255e-5,1.8383867655335314e-9,-4.903676923646972e-4,-2.802925951189207e-5,1.7865984348223615e-9,-4.900260027571856e-4,-2.81603898676814e-5,1.7495716625922467e-9,-4.89651135545775e-4,-2.8197278587712897e-5,1.7348223698973235e-9,-4.892906052692192e-4,-2.8137212384925217e-5,1.7438257478064728e-9,-4.889850187707911e-4,-2.800028120231637e-5,1.7725003438639047e-9,-4.887600631930353e-4,-2.782169608840279e-5,1.8128296668897378e-9,-4.886231415493295e-4,-2.764229676123075e-5,1.8550063239660704e-9,-4.885642484701803e-4,-2.7499550273375093e-5,1.8896080581632753e-9,-4.88560103003217e-4,-2.7420633789239168e-5,1.9094190965771907e-9,-4.885802098906471e-4,-2.741859369588705e-5,1.9105887095828677e-9,-4.885932963466409e-4,-2.749186494528233e-5,1.892958847920264e-9,-4.885727070221833e-4,-2.7626586385723848e-5,1.8596151082628022e-9,-4.884999125827284e-4,-2.780056601507957e-5,1.815912403162441e-9,-4.883659918181414e-4,-2.7987688626019622e-5,1.7683031663824352e-9,-4.881714965792303e-4,-2.8161857991136438e-5,1.7232621331153711e-9,-4.879253817230721e-4,-2.8300053385778088e-5,1.6864793191295907e-9,-4.876435954604153e-4,-2.838460913858599e-5,1.6623231380987314e-9,-4.87347570898538e-4,-2.8405127125376862e-5,1.6534487206287574e-9,-4.870624676766653e-4,-2.8360400428380635e-5,1.660397458157364e-9,-4.8681464921107224e-4,-2.8260451760282097e-5,1.6810999234867354e-9,-4.8662762504571956e-4,-2.8128194590838857e-5,1.710378936760407e-9,-4.865159493111669e-4,-2.7999259061439134e-5,1.7398402884595435e-9,-4.864778001628795e-4,-2.7917688216241995e-5,1.758782346831438e-9,-4.864891773662556e-4,-2.7925623648319725e-5,1.7566564873211407e-9,-4.8650469881442816e-4,-2.8048055389582203e-5,1.7268436941845679e-9,-4.8646900022718986e-4,-2.8278862045047066e-5,1.6701987909042514e-9,-4.863366661408441e-4,-2.8577505119019685e-5,1.596014686119699e-9,-4.8609095859314307e-4,-2.888149066944309e-5,1.5191180487893385e-9,-4.8575031131327785e-4,-2.9129303897496962e-5,1.4543917377772392e-9,-4.853594628443761e-4,-2.928127077721007e-5,1.4117786999065398e-9,-4.8497195747729835e-4,-2.932864068445588e-5,1.394071849831376e-9,-4.846337505125269e-4,-2.92901557766113e-5,1.397598481510503e-9,-4.8437354423659196e-4,-2.9201624636557654e-5,1.4144787727407432e-9,-4.842002284292061e-4,-2.9104393029698005e-5,1.4351477859261177e-9,-4.841052181270292e-4,-2.903609161431683e-5,1.4504558263885193e-9,-4.84067228217977e-4,-2.9024670479161186e-5,1.4531643834621424e-9,-4.840577748119623e-4,-2.90853939257728e-5,1.438879930124667e-9,-4.8404655015113853e-4,-2.9220176531956694e-5,1.4064663055144139e-9,-4.840061936266715e-4,-2.9418854952069273e-5,1.3579222509944927e-9,-4.839159970403585e-4,-2.9661986241126522e-5,1.2977592972372048e-9,-4.8376421255598803e-4,-2.99245694584744e-5,1.2320364517035848e-9,-4.8354887698368103e-4,-3.0180063885511402e-5,1.1672683012708056e-9,-4.832772700501507e-4,-3.0404142004948953e-5,1.1094257627540442e-9,-4.829643557323166e-4,-3.0577722626730395e-5,1.06319106972272e-9,-4.826306810340864e-4,-3.068915192762852e-5,1.0314937573263063e-9,-4.823000236618913e-4,-3.073572511170575e-5,1.0152261736262526e-9,-4.819967854440488e-4,-3.07247596187981e-5,1.0130129991719876e-9,-4.8174290438235536e-4,-3.067424662353938e-5,1.0209817846856487e-9,-4.8155387647187757e-4,-3.061273027346073e-5,1.032629336411569e-9,-4.814336608023644e-4,-3.057734555154527e-5,1.0391143981355627e-9,-4.813692597631775e-4,-3.060832201910778e-5,1.0304832601707698e-9,-4.813275459614071e-4,-3.073869463472397e-5,9.981998565152625e-10,-4.812585659790297e-4,-3.09804507134622e-5,9.386721541243323e-10,-4.811087866201458e-4,-3.1312961751180574e-5,8.56262021686922e-10,-4.8084200197442165e-4,-3.168291882514008e-5,7.634346976835111e-10,-4.804573453938174e-4,-3.202098523525012e-5,6.767668830172286e-10,-4.799919742448245e-4,-3.226863232885468e-5,6.104833504614054e-10,-4.7950561722214457e-4,-3.239963129412474e-5,5.713324640502453e-10,-4.7905711130771735e-4,-3.2424683834516966e-5,5.57489239643948e-10,-4.7868648919253005e-4,-3.2380572165611614e-5,5.61014998658449e-10,-4.78408756745913e-4,-3.231372536823076e-5,5.715060758294507e-10,-0.00047821695541208484,-3.226672810540936e-5,5.790543339561175e-10,-4.780892929635116e-4,-3.2270696159169436e-5,5.759797425532569e-10,-4.7799654019284706e-4,-3.2342694027153804e-5,5.575709307492149e-10,-4.7790798337904856e-4,-3.2486240286347094e-5,5.222191413059654e-10,-4.7779572256916394e-4,-3.269322339193252e-5,4.712137846897875e-10,-4.776377532430203e-4,-3.294643314889626e-5,4.0828191455557877e-10,-4.7742011900052996e-4,-3.322255415686779e-5,3.3887550315425643e-10,-4.7713813362436103e-4,-3.3495522236272236e-5,2.692723543611399e-10,-4.767966058786844e-4,-3.374005506219493e-5,2.0561845121165476e-10,-4.764089810761079e-4,-3.3935100660724256e-5,1.5304719488686107e-10,-4.759953978571277e-4,-3.4066794130658526e-5,1.150012473363178e-10,-4.75579914293648e-4,-3.4130529894258694e-5,9.281539758685568e-11,-4.7518726401693057e-4,-3.4132012358599385e-5,8.552166664277137e-11,-4.7483937947707337e-4,-3.4087283256587925e-5,8.9808001360197e-11,-4.745518134530909e-4,-3.402168289331611e-5,1.0012352749726892e-10,-4.743301302744044e-4,-3.396758918434555e-5,1.0901384685598315e-10,-4.7416643965561046e-4,-3.3960444197777966e-5,1.0790405985855532e-10,-4.740368979791793e-4,-3.4032281179469596e-5,8.86169595898152e-11,-4.739021227586955e-4,-3.420250408423377e-5,4.5725881072999446e-11,-4.7371326042227083e-4,-3.446757033559661e-5,-2.0710561717845824e-11,-4.734254927457585e-4,-3.479429725681101e-5,-1.0330249928567228e-10,-4.7301639236006836e-4,-3.5123672220509924e-5,-1.881476569178234e-10,-4.725000431178112e-4,-3.5388839961071916e-5,-2.591876480176443e-10,-4.7192604541348076e-4,-3.554105374407855e-5,-3.044707002743182e-10,-4.7136099969806975e-4,-3.556883779945993e-5,-3.206993534357789e-10,-4.7086294225468346e-4,-3.549888047725581e-5,-3.1342792392102554e-10,-4.7046352272326177e-4,-3.538050951555742e-5,-2.935213287305637e-10,-4.7016473226171217e-4,-3.5265590743997314e-5,-2.726806915020762e-10,-4.699464136836216e-4,-3.5194260656001715e-5,-2.6030955535709985e-10,-4.697770469616606e-4,-3.518932915329649e-5,-2.622205939252974e-10,-4.696228012465099e-4,-3.5256920462369833e-5,-2.8060094716625834e-10,-4.6945333703288087e-4,-3.538992906669341e-5,-3.145484253008059e-10,-4.69244867902677e-4,-3.5571919634512485e-5,-3.607624652693146e-10,-4.6898164086817774e-4,-3.5780529452895425e-5,-4.1425452821863957e-10,-4.686566863176195e-4,-3.5990449974228233e-5,-4.690962154934373e-10,-4.6827208786035787e-4,-3.617631589754077e-5,-5.192139267408718e-10,-4.678386863652773e-4,-3.631568320727738e-5,-5.591870571551936e-10,-4.6737497335989225e-4,-3.6392083291211825e-5,-5.849904896303589e-10,-4.6690488301707415e-4,-3.639782201853782e-5,-5.94602599597509e-10,-4.6645445102384944e-4,-3.633592139146378e-5,-5.883906819014525e-10,-4.660476945176547e-4,-3.6220661871468307e-5,-5.692228942796334e-10,-4.657022695838701e-4,-3.6076407131886816e-5,-5.422815071321678e-10,-4.6542554666657507e-4,-3.5934607127357874e-5,-5.145430862929582e-10,-4.6521176990474016e-4,-3.582914597600692e-5,-4.93889587145379e-10,-4.650408921003716e-4,-3.579037660247443e-5,-4.878228226654467e-10,-4.6487973809540686e-4,-3.583822677071e-5,-5.017887049330647e-10,-4.646864289969452e-4,-3.5975183793548686e-5,-5.37296846788472e-10,-4.64418929535433e-4,-3.618107017587765e-5,-5.903807450996709e-10,-4.640473748557744e-4,-3.641280549063968e-5,-6.513004445318026e-10,-4.6356706963375163e-4,-3.6612571972860786e-5,-7.064066461510136e-10,-4.6300573393137634e-4,-3.672503075757567e-5,-7.42296675743031e-10,-4.624182914159778e-4,-3.671797163766815e-5,-7.508047679955584e-10,-4.6186855565977626e-4,-3.659550128472903e-5,-7.321670756526646e-10,-4.614064225580401e-4,-3.6395389241618036e-5,-6.944563282812404e-10,-4.610528332327597e-4,-3.6172385710832e-5,-6.498299076742612e-10,-4.607987283925611e-4,-3.597801715887471e-5,-6.100320374056605e-10,-4.6061468507508637e-4,-3.5846959612404006e-5,-5.833503649471653e-10,-4.6046349004600013e-4,-3.579313229929127e-5,-5.736387227312834e-10,-4.6030994274539054e-4,-3.5812705095171745e-5,-5.807834219497946e-10,-4.601262422144594e-4,-3.588972134772124e-5,-6.017486078129592e-10,-4.5989390505752053e-4,-3.600142119002202e-5,-6.316505581854882e-10,-4.596038614192552e-4,-3.61222398339944e-5,-6.646706362294414e-10,-4.592559568531993e-4,-3.6226694452753686e-5,-6.948193567656552e-10,-4.5885834703375316e-4,-3.629175808199892e-5,-7.166060109300918e-10,-4.584267277797475e-4,-3.629920933167143e-5,-7.25651034334448e-10,-4.5798303120869814e-4,-3.623817319516776e-5,-7.192617233124736e-10,-4.575530806030977e-4,-3.610762730040304e-5,-6.969458465337379e-10,-4.571628892970559e-4,-3.591815255208761e-5,-6.607620683323364e-10,-4.56833823604343e-4,-3.569198142091502e-5,-6.153534493322551e-10,-4.5657747279228704e-4,-3.54605678450924e-5,-5.675121322431022e-10,-4.5639155317605325e-4,-3.525945503013983e-5,-5.251872676244543e-10,-4.562582877399368e-4,-3.5121101489857186e-5,-4.960025021303906e-10,-4.561462404911574e-4,-3.5067166813251846e-5,-4.855281510313871e-10,-4.560157354184803e-4,-3.510209657136758e-5,-4.956760285975314e-10,-4.558271844438492e-4,-3.520973052125918e-5,-5.23642942124648e-10,-4.555509722539143e-4,-3.5354377231198915e-5,-5.618485388203806e-10,-4.551767900011865e-4,-3.5487271728465515e-5,-5.99216862288837e-10,-4.547194931700101e-4,-3.555821241925147e-5,-6.238372524193589e-10,-4.5421824807652514e-4,-3.553016757808225e-5,-6.264728450339745e-10,-4.537270827198009e-4,-3.539206308847836e-5,-6.037125880351339e-10,-4.532987076358123e-4,-3.5163679660655164e-5,-5.592847955933052e-10,-4.5296792741134556e-4,-3.488912728160238e-5,-5.027086388929701e-10,-4.527422313081323e-4,-3.462138798450755e-5,-4.458766460131134e-10,-4.5260323410913533e-4,-3.4405453702598874e-5,-3.9926413768010085e-10,-4.5251644486876176e-4,-3.426740951649623e-5,-3.6938487658784766e-10,-4.5244332300902997e-4,-3.421213627964388e-5,-3.5808595438001316e-10,-4.523505626185003e-4,-3.4227480505678286e-5,-3.632636675315268e-10,-4.5221482312207624e-4,-3.4290899461766846e-5,-3.8020116677613763e-10,-4.5202375557595886e-4,-3.437554371425792e-5,-4.029081427514244e-10,-4.5177505774483904e-4,-3.445460262322402e-5,-4.251869797649234e-10,-4.514749547370295e-4,-3.4504079311446706e-5,-4.4139362238526164e-10,-4.5113679020358777e-4,-3.450468018923218e-5,-4.469651496899405e-10,-4.507797731939009e-4,-3.444350711070474e-5,-4.388225099902334e-10,-4.504274678763231e-4,-3.431595710739258e-5,-4.1574789980056126e-10,-4.501053968208255e-4,-3.412772239306382e-5,-3.7876689398194317e-10,-4.49837245052929e-4,-3.3896171321560205e-5,-3.3143923698792594e-10,-4.4963967883302245e-4,-3.364990241377015e-5,-2.7982500286964254e-10,-4.495167350280108e-4,-3.342519780636138e-5,-2.3182893325347959e-10,-4.494557916595384e-4,-3.32588698365336e-5,-1.9575098987866422e-10,-4.494275238613324e-4,-3.317868246084438e-5,-1.7822526619476317e-10,-4.493912544321645e-4,-3.319433112785999e-5,-1.8215182067943742e-10,-4.4930491559363935e-4,-3.329257874488547e-5,-2.0541584757431906e-10,-4.491366544886963e-4,-3.343893518934762e-5,-2.409915239755049e-10,-4.4887423428689434e-4,-3.358582747083409e-5,-2.785249749837473e-10,-4.4852918924545023e-4,-3.3684857564196356e-5,-3.069592004180854e-10,-4.481345025764483e-4,-3.3699547562141865E-05,-3.174400965017838e-10,-4.477364173205387e-4,-3.36150453685436e-5,-3.056899582009406e-10,-4.473824653024104e-4,-3.3442075559446554e-5,-2.731645840371916e-10,-4.471089794236686e-4,-3.3213746559910004e-5,-2.2659609678642381e-10,-4.4693193476726584e-4,-3.2975892326254515e-5,-1.7600234698550785e-10,-4.4684415933761597e-4,-3.2774072581832724e-5,-1.318180279743324e-10,-4.468195596048631e-4,-3.264180812728822e-5,-1.0215906621877542e-10,-4.468221350963377e-4,-3.259390394722096e-5,-9.111564082088563e-11,-4.468159270102211e-4,-3.262613831507543e-5,-9.843768488394674e-11,-4.4677253154619184e-4,-3.271981887431175e-5,-1.2037327381122013e-10,-4.466747593938944e-4,-3.2848326037323585e-5,-1.5107991793165482e-10,-4.465169535590928e-4,-3.298315215165685e-5,-1.8405170853296948e-10,-4.4630337571044507e-4,-3.309824656748056e-5,-2.1323351666357844e-10,-4.4604597579605345e-4,-3.317263929462189e-5,-2.337308573244723e-10,-4.45762317539977e-4,-3.3191928530204014e-5,-2.421841171496663e-10,-4.454738218877487e-4,-3.314935956184844e-5,-2.369644191333686e-10,-4.4520398080873634e-4,-3.304699535971351e-5,-2.1835135532547503e-10,-4.449759188950929e-4,-3.289697404544757e-5,-1.887628854791514e-10,-4.448087241116615e-4,-3.2722220146874976e-5,-1.529489231537002e-10,-4.4471242614531716e-4,-3.2555363695373645e-5,-1.1787226547448037e-10,-4.446825403539786e-4,-3.2434324371631275e-5,-9.188130706746193e-11,-4.4469655992664646e-4,-3.2393735943472714e-5,-8.291075104452407e-11,-4.4471563063769776e-4,-3.245364245052461e-5,-9.596818943647909e-11,-4.446933654754844e-4,-3.2609831845342675e-5,-1.3086158754423952e-10,-4.445900359888028e-4,-3.2831347836709934e-5,-1.814400172328324e-10,-4.4438642125605143e-4,-3.306811219248421e-5,-2.370680722983898e-10,-4.4409080264432883e-4,-3.326622792760892e-5,-2.858581212801058e-10,-4.437360837083105e-4,-3.33843518504114e-5,-3.1823887552277983e-10,-4.433690949210459e-4,-3.340463330407339e-5,-3.294487374573945e-10,-4.430370755530498e-4,-3.3335321031998855e-5,-3.203184353265311e-10,-4.427759960089928e-4,-3.320596713714179e-5,-2.9650278742528307e-10,-4.4260339341241914e-4,-3.305809413124731e-5,-2.666935334285821e-10,-4.425164934095727e-4,-3.293443729480453e-5,-2.403889490512539e-10,-4.424951037855245e-4,-3.286939195932481e-5,-2.2573681301802528e-10,-4.4250792553513906e-4,-3.2882577323854434e-5,-2.2789539745179735e-10,-4.425203905633074e-4,-3.297653466831185e-5,-2.4823497974085815e-10,-4.425019734590562e-4,-3.313848660280707e-5,-2.8448803781729026e-10,-4.424313311491289e-4,-3.334499881923905e-5,-3.3168004394333305e-10,-4.422985572981347e-4,-3.3567784931305844e-5,-3.834657566606249e-10,-4.4210484891880924e-4,-3.377905354369237e-5,-4.3346022827032136e-10,-4.4186050614891556e-4,-3.3955460677570604e-5,-4.762630706971752e-10,-0.00044158229376506733,-3.408047587119074e-5,-5.080560853142402e-10,-4.4129088951131405e-4,-3.4145537682724034e-5,-5.268328707022444e-10,-4.4100864451780675e-4,-3.415060214756904e-5,-5.324321778308508e-10,-4.4075744431709034e-4,-3.4104538515809105e-5,-5.265509515466792e-10,-4.405562048159596e-4,-3.402543308853396e-5,-5.128193797311413e-10,-4.4041749799388676e-4,-3.394031824044413e-5,-4.968520411437988e-10,-4.4034317371603764e-4,-3.388321666420194e-5,-4.859836819661576e-10,-4.4031985380117906e-4,-3.389003663385937e-5,-4.882781596747447e-10,-4.4031667309458187e-4,-3.398947734201114e-5,-5.105417250572887e-10,-4.40288726603928e-4,-3.419139460117802e-5,-5.556392875995702e-10,-4.4018852720764694e-4,-3.447763007612022e-5,-6.202734840122589e-10,-4.3998312776834925e-4,-3.4802253044518366e-5,-6.948530997978604e-10,-4.396688525708522e-4,-3.510470657110431e-5,-7.662719727894685e-10,-4.3927463938373874e-4,-3.533108692677226e-5,-8.225278615720626e-10,-4.388514849831018e-4,-3.545261924397217e-5,-8.567545923869293e-10,-4.384542114569926e-4,-3.5472467064472854e-5,-8.687704570663886e-10,-4.381250309194333e-4,-3.542007387575285e-5,-8.640367362840351e-10,-4.3788477725332484e-4,-3.533865244353876e-5,-8.512299465652137e-10,-4.377321566231613e-4,-3.52722511840646e-5,-8.396926899517458e-10,-4.3764830456916964e-4,-3.525614476523123e-5,-8.374333127536711e-10,-4.376036478383992e-4,-3.531151963905395e-5,-8.498330044244647e-10,-4.3756499698159503e-4,-3.544392307484552e-5,-8.790159276265403e-10,-4.3750174764789934e-4,-3.56445680225368e-5,-9.238259471745557e-10,-4.3739057794072914e-4,-3.5893675770702265e-5,-9.803621067461992e-10,-4.372182577922428e-4,-3.6165025749781834e-5,-1.042950971201023e-9,-4.369824734841252e-4,-3.6430802734025703e-5,-1.1053246753441703e-9,-4.36690901264442e-4,-3.6665949804834746e-5,-1.1617407465670032e-9,-4.3635900542241446e-4,-3.685147801086402e-5,-1.2078249534317108e-9,-4.360071976804138e-4,-3.697647114841903e-5,-1.2410262063482944e-9,-4.356579555231565e-4,-3.7038915732516285e-5,-1.260728985867218e-9,-4.353331667358742e-4,-3.704575670653252e-5,-1.2681800873321904e-9,-4.350516275750907e-4,-3.701249208677096e-5,-1.2663789075441324e-9,-4.348264748497907e-4,-3.696235632581322e-5,-1.2599873663792249e-9,-4.3466228069439307e-4,-3.692480626009468e-5,-1.2551736513394884e-9,-4.3455177288540366e-4,-3.6932510170417106e-5,-1.25912798564809e-9,-4.3447301468774706e-4,-3.701572674939781e-5,-1.278902275184977e-9,-4.3438916026796164e-4,-3.71935894381788e-5,-1.3194060826546412e-9,-4.3425376802956616e-4,-3.74638561498117e-5,-1.3809346111075104e-9,-4.340236163024067e-4,-3.779593543622154e-5,-1.4574024307369292e-9,-4.3367640876553675e-4,-3.8134118564692025e-5,-1.5369256916288049e-9,-4.332244241737091e-4,-3.8414502041651824e-5,-1.6055222702572017e-9,-4.3271386018431076e-4,-3.858948430017033e-5,-1.652481129483999e-9,-4.3220787923143326e-4,-3.864607462666557e-5,-1.6743270763616353e-9,-4.317629656468537e-4,-3.860761863456337e-5,-1.6752156913577408e-9,-4.3141176547786695e-4,-3.8520414864384305e-5,-1.6642240440609935e-9,-4.3115868222643985e-4,-3.8435327419660585e-5,-1.651702421749401e-9,-4.3098557996193025e-4,-3.8393580822086956e-5,-1.6464759363415677e-9,-4.3086147835504085e-4,-3.841992287116871e-5,-1.65440671246263e-9,-4.307516674336233e-4,-3.8521823132790755e-5,-1.6780078303099869e-9,-4.306243804306794e-4,-3.8692067403099935e-5,-1.716664885505569e-9,-4.3045497513185133e-4,-3.891267180424769e-5,-1.7671843133691706e-9,-4.302282105989142e-4,-3.9159095494623204e-5,-1.824566327370246e-9,-4.299390751286171e-4,-3.940438880534627e-5,-1.8829431790449586e-9,-4.295924025130069e-4,-3.9623034498814555e-5,-1.936562263178734e-9,-4.292014630930585e-4,-3.9794261037469396e-5,-1.9806593157273097e-9,-4.287856876623859e-4,-3.9904630596068394e-5,-2.0120950226613972e-9,-4.28367754503315e-4,-3.994964610903417e-5,-2.0296763544745215e-9,-4.279704452993792e-4,-3.9934237516808346e-5,-2.0341813886434956e-9,-4.276136265667553e-4,-3.987227137249826e-5,-2.0282039753249915e-9,-4.273114688402678e-4,-3.978527077197651e-5,-2.0159259234067885e-9,-4.2706992488113834e-4,-3.9700366198973295e-5,-2.002829069662559e-9,-4.268845197863682e-4,-3.964737840173896e-5,-1.9952647642030475e-9,-4.267386265969893e-4,-3.965471131576109e-5,-1.999700373052887e-9,-4.266029510717304e-4,-3.9743544324180614e-5,-2.0214358793739664e-9,-4.26437834568534e-4,-3.992039295746758e-5,-2.0627867533072652e-9,-4.2620038657907274e-4,-4.016980373449743e-5,-2.1212012265236316e-9,-4.2585728334790284e-4,-4.0451299582123726e-5,-2.1883606719571155e-9,-4.25400265363133e-4,-4.070596598753596e-5,-2.25155109322746e-9,-4.248561337280175e-4,-4.0874859811857436e-5,-2.2977411834001216e-9,-4.242820619720334e-4,-4.092274432793028e-5,-2.3187965446079723e-9,-4.237451316903482e-4,-4.085341822572131e-5,-2.3147791360394584e-9,-4.2329694415442286e-4,-4.070654441064251e-5,-2.2932869092235596e-9,-4.229578411734412e-4,-4.0538947222353454e-5,-2.2656447239000503e-9,-4.2271688421275413e-4,-4.040304127911455e-5,-2.2426165588610284e-9,-4.225427433080427e-4,-4.0333144803596924e-5,-2.231704275563879e-9,-4.223968689264773e-4,-4.0342043136537935e-5,-2.2363639652971267e-9,-4.222434398179648e-4,-4.042433106460874e-5,-2.256430112670042e-9,-4.220548334090586e-4,-4.056222883882198e-5,-2.2890006714688703e-9,-4.218136677594013e-4,-4.073117018433807e-5,-2.3293788637137593e-9,-4.21512946299068e-4,-4.0904258616967875e-5,-2.3719643641673716e-9,-4.2115531676598317e-4,-4.105575217512033e-5,-2.4111025484600863e-9,-4.207517952197999e-4,-4.1163907229954436e-5,-2.441863734119646e-9,-4.203200113401336e-4,-4.121333480514526e-5,-2.460678044086568e-9,-4.198819221794372e-4,-4.119688223171917e-5,-2.4657691210332674e-9,-4.194609188969578e-4,-4.111682572964086e-5,-2.4573520283086842e-9,-4.1907848888926417e-4,-4.0985005162454883e-5,-2.4375869987131062e-9,-4.1875086145044143e-4,-4.082171835588424e-5,-2.4103369791762464e-9,-4.1848604840921634e-4,-4.065342570658751e-5,-2.3807851127628465e-9,-4.182816061708275e-4,-4.050935427302264e-5,-2.3549026071762925e-9,-4.1812347686722286e-4,-4.041715861848515e-5,-2.3387103150409148e-9,-4.1798629068454416e-4,-4.039789505126642e-5,-2.337275945283984e-9,-4.178356307985684e-4,-4.046059638808345e-5,-2.353438615303446e-9,-4.1763304542852736e-4,-4.0597133531294696e-5,-2.3864309135234715e-9,-4.17344485054109e-4,-4.07791348421971e-5,-2.4308988000567276e-9,-4.1695157842682465e-4,-4.095991780817399e-5,-2.477108670627579e-9,-4.16462448119742e-4,-4.108433698392642e-5,-2.5130503328766345e-9,-4.15915771968092e-4,-4.1106404871525956e-5,-2.528346010590168e-9,-4.153721159190534e-4,-4.100833523430551e-5,-2.5184530965389194e-9,-4.1489323356661917e-4,-4.0810007275967356e-5,-2.4867440031700544e-9,-4.1451934265011636e-4,-4.056149998336314e-5,-2.443004015897615e-9,-4.14257057163492e-4,-4.032253315069391e-5,-2.399280027476654e-9,-4.140829643037679e-4,-4.014115402159914e-5,-2.365624213252662e-9,-4.139573594589503e-4,-4.004203540654317e-5,-2.347719850083814e-9,-4.1383883902764264e-4,-4.0026135838993726e-5,-2.346648557292666e-9,-4.1369395521428763e-4,-4.007714518494776e-5,-2.359918634965156e-9,-4.1350116283010187e-4,-4.0169438678037385e-5,-2.3828275358386247e-9,-4.132509204849382e-4,-4.02745458009851e-5,-2.409672202656709e-9,-4.12944098431814e-4,-4.036544899383293e-5,-2.434693727626981e-9,-4.1259003312596384e-4,-4.0419283786942026e-5,-2.4528076757501718e-9,-4.1220463180241106e-4,-4.041920894315126e-5,-2.460165886913844e-9,-4.118084241146482e-4,-4.035589750016881e-5,-2.4545551866637317e-9,-4.114243079808707e-4,-4.0228769440772255e-5,-2.4356339267987566e-9,-4.1107472547243434e-4,-4.004674770704506e-5,-2.4050065497151834e-9,-4.107782411517076e-4,-3.982801465533893e-5,-2.3661110631512318e-9,-4.1054594259781567e-4,-3.959827057314572e-5,-2.3238887851075064e-9,-4.10378395758591e-4,-3.938732383127705e-5,-2.2842171118400988e-9,-4.1026395191599125e-4,-3.922422342717951e-5,-2.2530908614786637e-9,-4.101791123460307e-4,-3.9131562701737556e-5,-2.23557803383868e-9,-4.100913745510124e-4,-3.911997116984464e-5,-2.2346619299068557e-9,-4.099645570075549e-4,-3.9183950507037974e-5,-2.250178149363926e-9,-4.097661972198411e-4,-3.930021397784681e-5,-2.278150153434694e-9,-4.0947612025577423e-4,-3.9429780090729804e-5,-2.310922006873919e-9,-4.090943862753506e-4,-3.952493336780649e-5,-2.338459230035468e-9,-4.086456517799025e-4,-3.954111611657848e-5,-2.3508883014153373e-9,-4.081763984351799e-4,-3.945141594102922e-5,-2.34172318966217e-9,-4.0774310491620253e-4,-3.9258165010706924e-5,-2.3105104000586573e-9,-4.0739410414728915e-4,-3.899487440782558e-5,-2.2634068239480487e-9,-4.071530517716821e-4,-3.8715380711305496e-5,-2.2110648360130516e-9,-4.07012517735472e-4,-3.8474663908117465e-5,-2.1647814676881445e-9,-4.0694031503661626e-4,-3.83111097332982e-5,-2.132885090794267e-9,-4.0689355328915437e-4,-3.823811500140989e-5,-2.118905391336737e-9,-4.0683245131795863e-4,-3.824611552137267e-5,-2.121744169365106e-9,-4.0672875066320724e-4,-3.83106584547127e-5,-2.137053712749919e-9,-4.065681541205749e-4,-3.8401284561318635e-5,-2.1588842425524963e-9,-4.063489170280104e-4,-3.848820200325258e-5,-2.181051087605659e-9,-4.0607899542711783e-4,-3.854620981262006e-5,-2.198080022710527e-9,-4.0577321760118843e-4,-3.855665233157998e-5,-2.2057933114142437e-9,-4.054509336224549e-4,-3.850839314776131e-5,-2.2016348705458945e-9,-4.051339790749997e-4,-3.839848304650612e-5,-2.1848218714545927e-9,-4.0484452728607707e-4,-3.8232763492249975e-5,-2.1563917184551757e-9,-4.046024009615301e-4,-3.8026166396044666e-5,-2.1191704389762e-9,-4.0442170184689123e-4,-3.780206287518215e-5,-2.0776109012345515e-9,-4.043071522932379e-4,-3.7589916539575194e-5,-2.037394588277785e-9,-4.0425112417486777e-4,-3.7420805564781884e-5,-2.0046841607319565e-9,-4.0423270413599097e-4,-3.732108474951415e-5,-1.9850017433876396e-9,-4.042199941499895e-4,-3.7305461211264305e-5,-1.9818909364028005e-9,-4.041759729458141e-4,-3.7371576180890595e-5,-1.995722476799383e-9,-4.040669367934563e-4,-3.749819781395151e-5,-2.023080949156707e-9,-4.038714430168704e-4,-3.764824543910441e-5,-2.0570719150784504e-9,-4.0358723837979936e-4,-3.777652245214125e-5,-2.088652532821821e-9,-4.0323392522940814e-4,-3.784066890271968e-5,-2.108786263221883e-9,-4.028499668827034e-4,-3.7812733764463005e-5,-2.110917795052249e-9,-4.024839213955273e-4,-3.768809159565209e-5,-2.0930452841422504e-9,-4.0218154105103323e-4,-3.748838143603014e-5,-2.0586134771402745e-9,-4.0197245691300375e-4,-3.7256296497542606e-5,-2.0156987881971886e-9,-4.0186148165965595e-4,-3.7042976733979594e-5,-1.974586200188155e-9,-4.018283808339541e-4,-3.6892494178303976e-5,-1.944623987475064e-9,-4.0183608868270894e-4,-3.6829760565161567e-5,-1.9316327261505804e-9,-4.0184323029191903e-4,-3.685629057238657e-5,-1.9367984159228025e-9,-4.0181540972463755e-4,-3.6953941902521246e-5,-1.9571606390107712e-9,-4.0173160962337696e-4,-3.7093205760581396e-5,-1.9871078224997477e-9,-4.015852743493223e-4,-3.724183204408453e-5,-2.0200937211791826e-9,-4.013819118193629e-4,-3.737112093517171e-5,-2.0500268935527753e-9,-4.0113546642722405e-4,-3.745934046666174e-5,-2.072145790532876e-9,-4.008649162475529e-4,-3.749303145455463e-5,-2.0834320591036338e-9,-4.005915876567197e-4,-3.746722429672266e-5,-2.0827005722215756e-9,-4.00337051736825e-4,-3.7385338843855984e-5,-2.0705219071079996e-9,-4.0012112723467486e-4,-3.725911600757237e-5,-2.0491068141487655e-9,-3.9995945006566694e-4,-3.710838880148392e-5,-2.02219878218256e-9,-3.9986036290861937e-4,-3.696000071532959e-5,-1.9948926212214277e-9,-3.9982147601925637e-4,-3.684496081292581e-5,-1.9731958999948373e-9,-3.998270224104261e-4,-3.6793151712941985e-5,-1.9631309255681626e-9,-3.9984782850540707e-4,-3.6825820017548094e-5,-1.9693326621769157e-9,-3.9984567314217234e-4,-3.6947721487253395e-5,-1.9934475370821446e-9,-3.997823060669654e-4,-3.714229558595796e-5,-2.0329994613703186e-9,-3.996308094008664e-4,-3.7373115060623765e-5,-2.0814266273117242e-9,-3.99384988712439e-4,-3.759249203934011e-5,-2.1295566994293455e-9,-3.9906271036433164e-4,-3.775472405457742e-5,-2.1681019565900638e-9,-3.987016202917927e-4,-3.7829193936713294e-5,-2.190272534708571e-9,-3.9834887836798216e-4,-3.780875269054671e-5,-2.193608295241445e-9,-3.980485538263064e-4,-3.7711034648837475e-5,-2.1805271009791155e-9,-3.978305141809676e-4,-3.75729460791574e-5,-2.157555028882998e-9,-3.9770366530245046e-4,-3.744037328616604e-5,-2.1335311050243456e-9,-3.9765504299890545e-4,-3.735613027207092e-5,-2.1172878104897155e-9,-3.976546923721489e-4,-3.7349520461290274e-5,-2.1154458093897077e-9,-3.976645841027215e-4,-3.7430385886824955e-5,-2.1309453027747796e-9,-3.9764857481630915e-4,-3.7588969553787584e-5,-2.16269710822895e-9,-3.975803240688057e-4,-3.78008285196242e-5,-2.206328545718188e-9,-3.9744725472712117e-4,-3.8034406317778884e-5,-2.2556260006985536e-9,-3.972504331599879e-4,-3.825848207709496e-5,-2.304116143937135e-9,-3.970016678082849e-4,-3.8447576129588216e-5,-2.346328968114079e-9,-3.967195597523896e-4,-3.85847761019194e-5,-2.378535140950185e-9,-3.9642580202908984e-4,-3.8662499543895226e-5,-2.3989805580658325e-9,-3.9614227617272086e-4,-3.8682093918056946e-5,-2.407778956750608e-9,-3.9588887819566896e-4,-3.865305185717903e-5,-2.406662527805749e-9,-3.9568165300506234e-4,-3.8592229765188354e-5,-2.3987512411946675e-9,-3.9553072846361295e-4,-3.852295871827556e-5,-2.3883867003944353e-9,-3.9543774790634314e-4,-3.847345808670505e-5,-2.3809297326839213e-9,-3.9539305003282924e-4,-3.847364136251777e-5,-2.382287114028292e-9,-3.9537371824626544e-4,-3.854948972135635e-5,-2.397910865159832e-9,-3.9534454501332527e-4,-3.8715107497318946e-5,-2.4312142198376576e-9,-3.952641095528031e-4,-3.896460770802551e-5,-2.4818178598376683e-9,-3.9509636929992376e-4,-3.9268210077471814e-5,-2.5445577437541576e-9,-3.9482433024793544e-4,-3.957704143478872e-5,-2.6102337078048142e-9,-3.944590437311957e-4,-3.983728465279895e-5,-2.66827632892777e-9,-3.9403811672779804e-4,-4.000826568398732e-5,-2.7102607573795425e-9,-3.936136334447647e-4,-4.007582516475161e-5,-2.732568246881595e-9,-3.932354489171214e-4,-4.005509986930359e-5,-2.7370829288428234e-9,-3.9293735005261444e-4,-3.9983124149450465e-5,-2.730028550413103e-9,-3.927304162113228e-4,-3.990616554842289e-5,-2.7198283129693987e-9,-3.926037104670152e-4,-3.986712394333029e-5,-2.7148744382944538e-9,-3.925300340245018e-4,-3.989630581245046e-5,-2.721726552456415e-9,-3.924740322961887e-4,-4.000673567964125e-5,-2.7439566656949624e-9,-3.9240044960224226e-4,-4.0193797020507027e-5,-2.781711773518208e-9,-3.9228100027058804e-4,-4.043835453992976e-5,-2.8319939335662753e-9,-3.920988397429943e-4,-4.071220949346134e-5,-2.8895632795737313e-9,-3.918501286346216e-4,-4.098447018044798e-5,-2.9482215655903276e-9,-3.915428759247042e-4,-4.1227354423628e-5,-3.002126932202798e-9,-3.911938860598323e-4,-4.142035578932055e-5,-3.0468184632871506e-9,-3.908248865257149e-4,-4.1552391217979064e-5,-3.079773043002786e-9,-3.904587877773441e-4,-4.162213920665322e-5,-3.100490246668063e-9,-3.901166540589265e-4,-4.163716629526032e-5,-3.1102498369570066e-9,-3.898154596295406e-4,-4.1612528206521545e-5,-3.1117545046976984e-9,-3.895663343014008e-4,-4.15692477287104e-5,-3.108816873159751e-9,-3.893729274795302e-4,-4.1532643167673676e-5,-3.106122424164249e-9,-3.8922964958095066e-4,-4.1530120920376783e-5,-3.108959796232942e-9,-3.8911993547672825e-4,-4.158773400879558e-5,-3.1226873440949273e-9,-3.890154780111431e-4,-4.172477613316137e-5,-3.1516937951170783e-9,-3.8887832398421657e-4,-4.1946490302301866e-5,-3.1978260954989524e-9,-3.8866798799491536e-4,-4.2236923527193535e-5,-3.2587392014650204e-9,-3.883541075724722e-4,-4.255643026767475e-5,-3.3271796700881e-9,-3.879309179981178e-4,-4.2848970224092304e-5,-3.3923178303223024e-9,-3.874252936797595e-4,-4.3060086306725585e-5,-3.4432808142227515e-9,-3.8689085406422015e-4,-4.315822428367038e-5,-3.473343383367832e-9,-3.863889877673784e-4,-4.3147231358598694e-5,-3.4823712443678767e-9,-3.859670303418556e-4,-4.306282988945449e-5,-3.476235200012914e-9,-3.856450179732965e-4,-4.29567332020061e-5,-3.4640108169692097e-9,-3.8541502948697586e-4,-4.287851646215824e-5,-3.4548315486565543e-9,-3.852493149355605e-4,-4.2863147399264384e-5,-3.4556957290431317e-9,-3.851111325842977e-4,-4.2926194690833945e-5,-3.4704676625369628e-9,-3.849641750666217e-4,-4.306488479653104e-5,-3.4997555963823663e-9,-3.8477904449105344e-4,-4.326230537360815e-5,-3.541315667419064e-9,-3.845368505256895e-4,-4.349269606106779e-5,-3.5907716079917845e-9,-3.842305470775176e-4,-4.372677264988809e-5,-3.6425556238611925e-9,-3.838644713396162e-4,-4.393662457551494e-5,-3.690971057311515e-9,-3.834524001017426e-4,-4.4099766813166904e-5,-3.731195660582228e-9,-3.8301455462920074e-4,-4.4201952462350065e-5,-3.760022682061001e-9,-3.8257407697839317e-4,-4.42385677285092e-5,-3.776219192075404e-9,-3.821534971407641e-4,-4.42146190699868e-5,-3.78049345493217e-9,-3.8177167811354886e-4,-4.414353188785048e-5,-3.775176115440497e-9,-3.814415037458072e-4,-4.404520966037506e-5,-3.763795599090132e-9,-3.811682438952999e-4,-4.3943745048884684e-5,-3.750686091708826e-9,-3.8094841874788385e-4,-4.3864881721126706e-5,-3.740645067077998e-9,-3.807690606418496e-4,-4.383310219135978e-5,-3.738542478624394e-9,-3.8060747113549404e-4,-4.3868015094879415e-5,-3.7487069852998005e-9,-3.8043212896826716e-4,-4.397964230952124e-5,-3.77392849591353e-9,-3.8020614214202126e-4,-4.416283549922484e-5,-3.814126337469046e-9,-3.7989477348660916e-4,-4.43925934432593e-5,-3.8651369785543476e-9,-3.7947723172862823e-4,-4.462397219530305e-5,-3.918497560033356e-9,-3.789593875598948e-4,-4.4800964639163135e-5,-3.96317158934382e-9,-3.783796554624242e-4,-4.487522211492297e-5,-3.989310173516736e-9,-3.7780028171270733e-4,-4.482731494297352e-5,-3.992457390009027e-9,-3.772848187336151e-4,-4.4677289049787794e-5,-3.975587279866091e-9,-3.768738589342568e-4,-4.4476302813578715e-5,-3.947557776892742e-9,-3.765731596693725e-4,-4.4284647088400656e-5,-3.919157973229763e-9,-3.763583684669076e-4,-4.415011216339383e-5,-3.8993178944763496e-9,-3.7618935482083637e-4,-4.409689236608701e-5,-3.893153730927883e-9,-3.760245905568384e-4,-4.412564418670974e-5,-3.901816527226052e-9,-3.758305281239963e-4,-4.4219737409461237e-5,-3.923290331122069e-9,-3.755856622553639e-4,-4.435289044370741e-5,-3.953443754350989e-9,-3.752809867131644e-4,-4.449563849145108e-5,-3.987032034029203e-9,-3.749186681115099e-4,-4.462002058569582e-5,-4.018598786101294e-9,-3.745100126286204e-4,-4.4702883418774216e-5,-4.043293546650498e-9,-3.740730272909859e-4,-4.472824114947566e-5,-4.057558558959361e-9,-3.736296275242296e-4,-4.4688796131403827e-5,-4.059581153155581e-9,-3.732025909944763e-4,-4.4586579231906474e-5,-4.049448013925343e-9,-3.7281240901532864e-4,-4.4432606619089756e-5,-4.029008414573869e-9,-3.724743361521061e-4,-4.4245446122239154e-5,-4.001513612609417e-9,-3.7219604683176886e-4,-4.404881315412431e-5,-3.971147889469539e-9,-3.719761559946201e-4,-4.386851506422404e-5,-3.942550572712875e-9,-3.718036869016746e-4,-4.3729011292962504e-5,-3.920339561133363e-9,-3.716585476438696e-4,-4.364979112255484e-5,-3.908574248164302e-9,-3.715130942800803e-4,-4.364173138022532e-5,-3.910078188684471e-9,-3.713350457921283e-4,-4.370352841575415e-5,-3.925586069346227e-9,-3.7109238380513845e-4,-4.3818651024463044e-5,-3.9528488394828995e-9,-3.707607845405598e-4,-4.395425389302266e-5,-3.986112633364346e-9,-3.7033298488081413e-4,-4.406449097933762e-5,-4.01659369367896e-9,-3.698271408886742e-4,-4.4100617660546984e-5,-4.034478858226037e-9,-3.6928850300559833e-4,-4.402761136944001e-5,-4.032309510928544e-9,-3.6877886950402043e-4,-4.3841161627626426e-5,-4.008397336623387e-9,-3.68354844176475e-4,-4.3574127073054776e-5,-3.9681227490621515e-9,-3.680456442399449e-4,-4.328536888044946e-5,-3.921896540270247e-9,-3.678438514995482e-4,-4.303605390842075e-5,-3.88088052714649e-9,-3.6771344272492777e-4,-4.286765668321312e-5,-3.853066475373028e-9,-3.6760744211130974e-4,-4.279271827029995e-5,-3.841571155142976e-9,-3.6748400287878505e-4,-4.279868404809011e-5,-3.845110101089603e-9,-3.6731503805980255e-4,-4.2858040425471004e-5,-3.859505188909107e-9,-3.670878782353395e-4,-4.293828963274571e-5,-3.879232548481663e-9,-3.668030259099282e-4,-4.300887457302174e-5,-3.8986149146387406e-9,-3.664707239972699e-4,-4.304497730933188e-5,-3.912649349560868e-9,-3.6610775839668016e-4,-4.302929792015812e-5,-3.917575783781463e-9,-3.657347454762509e-4,-4.295287241734541e-5,-3.911245377621743e-9,-3.653736412651876e-4,-4.2815417391808795e-5,-3.893281236926014e-9,-3.650452228879931e-4,-4.2625259277326516e-5,-3.865029786249455e-9,-3.6476641984123815e-4,-4.239866016669585e-5,-3.8293301914713776e-9,-3.645476115673927e-4,-4.215819173345968e-5,-3.790137077788593e-9,-3.643903517009124e-4,-4.192994909126311e-5,-3.752032661708107e-9,-3.642861036996599e-4,-4.173977362622034e-5,-3.71966635491313e-9,-3.642164327955368e-4,-4.160892942215545e-5,-3.697132215015159e-9,-3.641549093482707e-4,-4.1549858066543754e-5,-3.6872863278909777e-9,-3.6407072313266787e-4,-4.1562773802817286e-5,-3.6910546876715064e-9,-3.639337297548633e-4,-4.1633785245227165e-5,-3.706842402789998e-9,-3.637205402382895e-4,-4.17351263688552e-5,-3.730239026226662e-9,-3.634210733541716e-4,-4.182826882524199e-5,-3.7543125950062615e-9,-3.6304426985984744e-4,-4.187077889867399e-5,-3.770791848359487e-9,-3.626205679360432e-4,-4.1827023967553126e-5,-3.772195287003563e-9,-3.621980590998262e-4,-4.168082324199709e-5,-3.754465893092228e-9,-3.6183040236259707e-4,-4.144515737090433e-5,-3.719051514202747e-9,-3.615588707716338e-4,-4.1162290906568653e-5,-3.6731031521314867e-9,-3.61396538504054e-4,-4.089083947416614e-5,-3.627175685529882e-9,-3.6132387086853867e-4,-4.0684523717909506e-5,-3.5913642442355727e-9,-3.612984871112935e-4,-4.057381858184938e-5,-3.57191628278744e-9,-3.6127263538453984e-4,-4.0559572504084276e-5,-3.5699106570700582e-9,-3.6120844626298833e-4,-4.061897653845609e-5,-3.5820719173724824e-9,-3.610852118619653e-4,-4.0717434213808e-5,-3.6026558942381903e-9,-3.608991626924136e-4,-4.0819528038116416e-5,-3.625305177385425e-9,-3.6065929725962267e-4,-4.0895889554540754e-5,-3.644354040211268e-9,-3.6038248887045136e-4,-4.092611299111932e-5,-3.6555594903413846e-9,-3.6008948797461456e-4,-4.089924983103489e-5,-3.6564197922185135e-9,-3.598020583044798e-4,-4.0813324951301555e-5,-3.6462285238279096e-9,-3.5954081132138837e-4,-4.06746448702424e-5,-3.625955167087689e-9,-3.593232203764928e-4,-4.049706401005377e-5,-3.5980159849031315e-9,-3.591614767911618e-4,-4.030096233320472e-5,-3.5659792059672047e-9,-3.5906017581369425e-4,-4.011143008152642e-5,-3.5342021902016163e-9,-3.590142746293756e-4,-3.9955202075565014e-5,-3.5073577657903728e-9,-3.5900813493897933e-4,-3.9856294031816824e-5,-3.4898049410216977e-9,-3.590165228657977e-4,-3.9830885148132995e-5,-3.484809323888809e-9,-3.5900811619758537e-4,-3.988259608517585e-5,-3.4937187933879266e-9,-3.589513508368191e-4,-3.9999692692636196e-5,-3.515316951993148e-9,-3.588215300116031e-4,-4.015553409221791e-5,-3.5456245459726613e-9,-3.586074994236263e-4,-4.031277515563591e-5,-3.578347724118303e-9,-3.5831611404968134e-4,-4.0430887172238557e-5,-3.6060328154525907e-9,-3.5797300106842354e-4,-4.0475752013014714e-5,-3.621798180660383e-9,-3.5761860209188446e-4,-4.0429328523306393E-05,-3.6212892232579545e-9,-3.572993273213688e-4,-4.029669010026284e-5,-3.604282007806e-9,-3.5705516107877836e-4,-4.01074134564653e-5,-3.575261109336151e-9,-3.56907171864305e-4,-3.990910227757714e-5,-3.542466178765705e-9,-3.5685000952815797e-4,-3.975360446642084e-5,-3.51546370509442e-9,-3.568535768631939e-4,-3.968060851260814e-5,-3.502095452651505e-9,-3.568738387353768e-4,-3.9705767185260144e-5,-3.506123139270059e-9,-3.568676969066613e-4,-3.981847075560239e-5,-3.526548679024781e-9,-3.568050583051709e-4,-3.9988930782059254e-5,-3.558632436406407e-9,-3.56673931076042e-4,-4.017965642244248e-5,-3.595815124716367e-9,-3.564788653472729e-4,-4.035578451744323e-5,-3.631596410599711e-9,-3.562358193015023e-4,-4.049130472750036e-5,-3.6608170038248088e-9,-3.5596655047241536e-4,-4.057119598922274e-5,-3.6802591959901357e-9,-3.556941971200325e-4,-4.059099060777297e-5,-3.688733399766354e-9,-3.554403466676326e-4,-4.055530827745248e-5,-3.6868596918516015e-9,-3.552231502274103e-4,-4.047630480756108e-5,-3.6767210257453985e-9,-3.550558309426621e-4,-4.0372330118324426e-5,-3.6615103358701634e-9,-3.549450842029947e-4,-4.0266541812810685e-5,-3.6452166207126978e-9,-3.5488926874896996e-4,-4.018488717008979e-5,-3.6323023478007748e-9,-3.5487679855453013e-4,-4.0152863925988295e-5,-3.6272565039705226e-9,-3.5488564634128154e-4,-4.019082120417089e-5,-3.6339063053833576e-9,-3.548851821818268e-4,-4.030831790087331e-5,-3.6544836887830023e-9,-3.548412788564619e-4,-4.049915486044093e-5,-3.6886696467672877e-9,-3.547243771613122e-4,-4.073952000048624e-5,-3.733057102710848e-9,-3.5451840841679887e-4,-4.0991294984085655e-5,-3.781467494098887e-9,-3.5422725173712733e-4,-4.121070540757682e-5,-3.826258266543762e-9,-3.538757710829669e-4,-4.136004087638724e-5,-3.8603033376723175e-9,-3.53504443877645e-4,-4.1418554823238366e-5,-3.879000807542093e-9,-3.5315908496719346e-4,-4.1388813578662445e-5,-3.881636157749867e-9,-3.528788443462086e-4,-4.1296476166252965e-5,-3.871679975513234e-9,-3.5268596813342254e-4,-4.118364620333568e-5,-3.855939529728651e-9,-3.525801622010045e-4,-4.109766926615156e-5,-3.84277572321506e-9,-3.5253922633776333e-4,-4.107846753507557e-5,-3.839853266345332e-9,-3.5252589900936437e-4,-4.1148172477191464e-5,-3.852089139473279e-9,-3.5249873593641004e-4,-4.130635182893659e-5,-3.880468677924388e-9,-3.524232758040045e-4,-4.153215835850133e-5,-3.922098707575269e-9,-3.5227977421103506e-4,-4.179200475176239e-5,-3.971370515911904e-9,-3.5206553777650213e-4,-4.2049383308559924e-5,-4.02168889154195e-9,-3.517923456022032e-4,-4.22732706596802e-5,-4.067108127961648e-9,-3.5148116482799436e-4,-4.2443054420599876e-5,-4.103423630040207e-9,-3.5115656427665365e-4,-4.254990072284108e-5,-4.128602719456839e-9,-3.508422977149487e-4,-4.259571927212223e-5,-4.1426852963775e-9,-3.505584283820493e-4,-4.2591075740938084e-5,-4.1473814440995675e-9,-3.503196597354921e-4,-4.2553010117369735e-5,-4.145588069811775e-9,-3.5013425081355416e-4,-4.250315194947812e-5,-4.140977734111264e-9,-3.5000296732766683e-4,-4.246594915992028e-5,-4.1376949637137355e-9,-3.4991789475969336e-4,-4.2466442610266224e-5,-4.140069290235601e-9,-3.4986146693382345e-4,-4.252696515740907e-5,-4.152177172551735e-9,-3.498066307483597e-4,-4.266243723623054e-5,-4.177099698568324e-9,-3.497195305195477e-4,-4.287472041112924e-5,-4.215884841538455e-9,-3.495659175480646e-4,-4.31478811621325e-5,-4.266536865943841e-9,-3.4932096349046604e-4,-4.3447520413318964e-5,-4.323660910585198e-9,-3.4897946134101256e-4,-4.372699512012349e-5,-4.379354851830018e-9,-3.4856132871286715e-4,-4.394038767390347e-5,-4.425380590164783e-9,-3.481082489458901e-4,-4.4057719624662955e-5,-4.455829749739181e-9,-3.4767160295073125e-4,-4.407548988414973e-5,-4.469069235668393e-9,-3.4729671592580966e-4,-4.401761276765464e-5,-4.468122927844235e-9,-3.470101043459885e-4,-4.392694681445468e-5,-4.459514042827404e-9,-3.4681399513372885e-4,-4.3851866775344917e-5,-4.4512484058967996e-9,-3.466884675872167e-4,-4.383320048423082e-5,-4.450711814114548e-9,-3.465989335162038e-4,-4.3895141685846634e-5,-4.463003731704032e-9,-3.4650592936654275e-4,-4.404155435899953e-5,-4.4899789588464385e-9,-3.4637451628011674e-4,-4.425746261242522e-5,-4.53010146035591e-9,-3.46181278482088e-4,-4.451449326164072e-5,-4.579071229769213e-9,-3.459177599712526e-4,-4.477844122387709e-5,-4.631023039653653e-9,-3.4559013570456575e-4,-4.501691233562397e-5,-4.679952084717743e-9,-3.452158716119919e-4,-4.520525913805162e-5,-4.720973867124305e-9,-3.4481879495999203e-4,-4.532981541959789e-5,-4.7511223937350465e-9,-3.4442408015957925e-4,-4.538843813449534e-5,-4.769589480143558e-9,-3.440542089166945e-4,-4.5389084894805184e-5,-4.7774936884748956e-9,-3.437263070319252e-4,-4.534740102436488e-5,-4.77738576894948e-9,-3.4345067735983324e-4,-4.5284143124787143e-5,-4.772713716467364e-9,-3.4323003778487113e-4,-4.5222842054429787e-5,-4.76739691027074e-9,-3.4305901194424496e-4,-4.518761784714889e-5,-4.765524511352927e-9,-3.429236989818069e-4,-4.52007347246193e-5,-4.771068404277782e-9,-3.428015696217947e-4,-4.5279382227483e-5,-4.787430575127021e-9,-3.426625060919474e-4,-4.543136538951815e-5,-4.8166784633623644E-09,-3.424723163020663e-4,-4.565015092623224e-5,-4.858517932523486e-9,-3.4219991287895055e-4,-4.591113849483137e-5,-4.9093917591879784e-9,-3.418278103507178e-4,-4.6172490727433865e-5,-4.962406765475092e-9,-3.413624942079579e-4,-4.6383736833411844e-5,-5.008742784565768e-9,-3.408383536332906e-4,-4.650185695871724e-5,-5.040476506469633e-9,-3.4030994982600497e-4,-4.650853684917004e-5,-5.053640312983224e-9,-3.398339484712107e-4,-4.641889431496161e-5,-5.0498114969366615e-9,-3.394494690556336e-4,-4.627597601679743e-5,-5.03533340901495e-9,-3.3916682212753793e-4,-4.6134299214963423e-5,-5.018789578479401e-9,-3.389684970747851e-4,-4.60416761329767e-5,-5.0082068715226695e-9,-3.388189563580666e-4,-4.602714616208865e-5,-5.009119290870518e-9,-3.386770001401216e-4,-4.609734320211425e-5,-5.023773996416256e-9,-3.385060967047203e-4,-4.623938128036451e-5,-5.051224680335727e-9,-3.382808819877009e-4,-4.642712042057251e-5,-5.0879722483668916e-9,-3.3798991630609986e-4,-4.662831095629719e-5,-5.128915587919849e-9,-3.3763548039858775e-4,-4.6811176467318076e-5,-5.16845422831316e-9,-3.3723121913479214e-4,-4.694969103565298e-5,-5.201576989894772e-9,-3.367983998553216e-4,-4.7027084779648636e-5,-5.224733145745607e-9,-3.3636159656376993e-4,-4.703738149569362e-5,-5.236319126134027e-9,-3.359445418555763e-4,-4.698513068870385e-5,-5.236724866703748e-9,-3.3556670577894265e-4,-4.688372871358966e-5,-5.228009274195705e-9,-3.3524095168534554e-4,-4.675286146676685e-5,-5.213367901026198e-9,-3.3497229454820115e-4,-4.661567260074138e-5,-5.196589566113095e-9,-3.3475746495397114e-4,-4.6496053972731513e-5,-5.181629379466889e-9,-3.3458496403935856e-4,-4.6416067332450106e-5,-5.172290074158099e-9,-3.3443550989848553e-4,-4.639329367171046e-5,-5.171902756508261e-9,-3.3428303229029717e-4,-4.64378573046309e-5,-5.182859497219969e-9,-3.3409679136510515e-4,-4.654895942300463e-5,-5.205901867299847e-9,-3.3384565314112754e-4,-4.671137333713532e-5,-5.2392644177281354e-9,-3.3350538321036714e-4,-4.689360879171389e-5,-5.278078891925973e-9,-3.330683964243518e-4,-4.705068211910057e-5,-5.314688239576653e-9,-3.3255256023083976e-4,-4.713428191609814e-5,-5.340419822664278e-9,-3.320027438393118e-4,-4.71097541805525e-5,-5.3486420687704235e-9,-3.314797357602177e-4,-4.6972927801329136e-5,-5.337761831657595e-9,-3.3103860655846234e-4,-4.67558263411006e-5,-5.312260680512601e-9,-3.307076685003807e-4,-4.651535747158061e-5,-5.28090259224886e-9,-3.30480214378984e-4,-4.6310845214460665e-5,-5.2532057684234896e-9,-3.303220348953695e-4,-4.618357322333606e-5,-5.236272390095169e-9,-3.301874844254908e-4,-4.61477186883596e-5,-5.233313814606197e-9,-3.3003452239918076e-4,-4.619282888887948e-5,-5.243799607308075e-9,-3.2983367667361197e-4,-4.6292393090905275e-5,-5.264447531098321e-9,-3.2957087722242947e-4,-4.6413211027825386e-5,-5.2904004316313725e-9,-3.2924630863698787e-4,-4.652281087401979e-5,-5.316302669134748e-9,-3.288714144932077e-4,-4.659436358753661e-5,-5.337217434375077e-9,-3.284653025069503e-4,-4.6609576179093505e-5,-5.349376028202255e-9,-3.2805103471112654e-4,-4.656006986482792e-5,-5.35069069746132e-9,-3.2765205016821133e-4,-4.6447489372098676E-05,-5.340948027169847e-9,-3.2728894386480116e-4,-4.628254233746377e-5,-5.321669265696422e-9,-3.2697676918230653e-4,-4.608314579988514e-5,-5.295709141439522e-9,-3.2672307735294367e-4,-4.5871826451843845e-5,-5.266715731905392e-9,-3.265269163253492e-4,-4.567268490866273e-5,-5.238595811180517e-9,-3.263787833299249e-4,-4.5508326939279494e-5,-5.2150856928611045e-9,-3.262613612892449e-4,-4.5396953226487785e-5,-5.199410066665686e-9,-3.26150973687626e-4,-4.5349627530952965e-5,-5.193932690177878e-9,-3.2601983786595027e-4,-4.5367769831319596e-5,-5.1997081785981995e-9,-3.2583937029624085e-4,-4.544098475670977e-5,-5.215918457321146e-9,-3.2558503734766617e-4,-4.554569690961154e-5,-5.2393381578890325e-9,-3.252430307869566e-4,-4.5645933134909383e-5,-5.264196058241929e-9,-3.248178384294444e-4,-4.56983335628188e-5,-5.282923877448141e-9,-3.2433764411315686e-4,-4.566298738150629e-5,-5.288101154267343e-9,-3.238524934028116e-4,-4.55187894312056e-5,-5.275271384380036e-9,-3.2342122598822694e-4,-4.527677794176033e-5,-5.245365700942163e-9,-3.230898582700321e-4,-4.498163827286755e-5,-5.205044425823437e-9,-3.228725935037573e-4,-4.469651453348592e-5,-5.164266989512154e-9,-3.2274750094473347e-4,-4.4478159074842894e-5,-5.13235180184745e-9,-3.226689152698676e-4,-4.435700005748701e-5,-5.114830829337623e-9,-3.225871774071815e-4,-4.433186738587753e-5,-5.112508862693316e-9,-3.2246425807672813e-4,-4.437776497525427e-5,-5.1224162241922625e-9,-3.2228031504722966e-4,-4.445858657848031e-5,-5.139485592758135e-9,-3.2203286741891803e-4,-4.4538062588412724E-05,-5.1580709737048375e-9,-3.217324318411406e-4,-4.4586481028774453E-05,-5.173027330322962e-9,-3.213975733128406e-4,-4.458364652752997e-5,-5.180397855754135e-9,-3.210507152123642e-4,-4.451955192695055e-5,-5.177821168001773e-9,-3.20714821071863e-4,-4.43939735421001e-5,-5.164703758157465e-9,-3.2041064399458284e-4,-4.421548906702248e-5,-5.1421458139077516e-9,-3.2015437220027257e-4,-4.400000934734236e-5,-5.112638550353013e-9,-3.199556359923085e-4,-4.3768795235697604e-5,-5.079609309330488e-9,-3.1981598750983545e-4,-4.354585021416585e-5,-5.046904699548832e-9,-3.197281840014739e-4,-4.3354726543107915e-5,-5.018289250760496e-9,-3.196765829420705e-4,-4.321510531744181e-5,-4.997015044656991e-9,-3.1963870183165634e-4,-4.313959806056474e-5,-4.985452141399794e-9,-3.195878597550035e-4,-4.313112514042971e-5,-4.984725308729074e-9,-3.1949679113388595e-4,-4.318123126172128e-5,-4.994338339842217e-9,-3.1934206103072054e-4,-4.326970683766678e-5,-5.0118522340722995e-9,-3.191090769027233e-4,-4.336592775766331e-5,-5.032784985900198e-9,-3.1879727330728615e-4,-4.3432619842126424e-5,-5.0510003085641095e-9,-3.184242585414621e-4,-4.3432905625344e-5,-5.059844813029959e-9,-3.180265341602522e-4,-4.3340679734383175e-5,-5.054050804727019e-9,-3.1765375634226675e-4,-4.315212077889462e-5,-5.031931810784182e-9,-3.173550483018549e-4,-4.289299386726835e-5,-4.996837554368338e-9,-3.1716080997909414e-4,-4.261505262909454e-5,-4.9567039021442e-9,-3.170692069796597e-4,-4.237923706416617e-5,-4.921374850462595e-9,-3.170465026363197e-4,-4.223264659485568e-5,-4.898891858407981e-9,-3.170418960140496e-4,-4.21921256965402e-5,-4.892790866082162e-9,-3.1700761388347835e-4,-4.224278875220216e-5,-4.901672313350512e-9,-3.169131831034806e-4,-4.234911923149743e-5,-4.920678900423363e-9,-3.16749371627084e-4,-4.246978287171236e-5,-4.943593716023741e-9,-3.165243898644444e-4,-4.2568904032282556e-5,-4.964541739482594e-9,-3.1625720934575716e-4,-4.262161789567898e-5,-4.9789925323940574e-9,-3.159714090148497e-4,-4.2615163483100204e-5,-4.984192983307216e-9,-3.1569080936814757e-4,-4.254769010175503e-5,-4.979239205595006e-9,-3.154366980394452e-4,-4.242640923152246e-5,-4.964927408765917e-9,-3.1522594108550356e-4,-4.226576420878259e-5,-4.9434488536958256e-9,-3.150694594909588e-4,-4.2085617046374826e-5,-4.9179780034059015e-9,-3.1497088780468846e-4,-4.190919872197873e-5,-4.892216555795521e-9,-3.1492551795328115e-4,-4.1760510317359374e-5,-4.869937621819285e-9,-3.1491993926755705e-4,-4.166103135750512e-5,-4.85453930904946e-9,-3.1493292291119807e-4,-4.162602317937051e-5,-4.8486082924002386e-9,-3.149378852148921e-4,-4.166109759027768e-5,-4.853496717228234e-9,-3.149068763252208e-4,-4.1759869297922245e-5,-4.8689420569251265e-9,-3.1481563886056355e-4,-4.1903492821241635e-5,-4.892817724760096e-9,-3.146489018901334e-4,-4.206263788736928e-5,-4.921152563389806e-9,-3.1440486675449474e-4,-4.220199291018188e-5,-4.948556753677259e-9,-3.1409782736031844e-4,-4.2286972882281444e-5,-4.969141215356648e-9,-3.1375783301927705e-4,-4.229193221838251e-5,-4.9779020409811375e-9,-3.1342629281164673e-4,-4.2208473219180394e-5,-4.972322659694826e-9,-3.131469410284784e-4,-4.205134100763301e-5,-4.953675901336095e-9,-3.129532228356514e-4,-4.185850783786602e-5,-4.927339367737182e-9,-3.128559402293983e-4,-4.168268583803075e-5,-4.901590331357037e-9,-3.128372712174129e-4,-4.157504774094596e-5,-4.884996661975068e-9,-3.1285591758021213e-4,-4.1567376446027606e-5,-4.883435028626847e-9,-3.1286216261514294e-4,-4.166161325502891e-5,-4.898203035129861e-9,-3.128152510161355e-4,-4.1832011412133305e-5,-4.926093299613993e-9,-3.1269456478840265e-4,-4.2037319835952676e-5,-4.96108661782143e-9,-3.1250114325379443e-4,-4.2235381879465134e-5,-4.996540702951394e-9,-3.1225205877241923e-4,-4.239361488219513e-5,-5.026892948270938e-9,-3.119724750885652e-4,-4.249330688871886e-5,-5.048533140222312e-9,-3.116889276893549e-4,-4.252921835778996e-5,-5.059987008882629e-9,-3.1142503078342897e-4,-4.25069961860904e-5,-5.0616921955618265e-9,-3.111992283429283e-4,-4.244023805497469e-5,-5.055583300773006e-9,-3.1102368764590496e-4,-4.234797844643438e-5,-5.044617784933671e-9,-3.1090358734081304e-4,-4.22526006575234e-5,-5.032321067688745e-9,-3.108364399804756e-4,-4.217778740604939e-5,-5.022387283844178e-9,-3.108115257297438e-4,-4.214600986581236e-5,-5.018313830814128e-9,-3.1080993296466673e-4,-4.2175257475328325e-5,-5.023008475613783e-9,-3.1080593916080375e-4,-4.227521362395652e-5,-5.038322479284464e-9,-3.1077034837130563e-4,-4.244369565068855e-5,-5.06453984568056e-9,-3.1067585579162317e-4,-4.266468404943358e-5,-5.099969884051941e-9,-3.105035849258535e-4,-4.290936505875487e-5,-5.140877929168914e-9,-3.1024899896644803e-4,-4.314094465863473e-5,-5.181956628701638e-9,-3.0992505626402714e-4,-4.332264950955875e-5,-5.217361941575282e-9,-3.095610883380589e-4,-4.342700451466909e-5,-5.2421145403966415e-9,-3.091971222357173e-4,-4.3443817524911114e-5,-5.253502474396329e-9,-3.088746927985775e-4,-4.338445254519018e-5,-5.252067765269822e-9,-3.086262289687441e-4,-4.328075377912741e-5,-5.241813665026146e-9,-3.084657459880443e-4,-4.317815751980895e-5,-5.229427402694319e-9,-3.083838136062314e-4,-4.312402180818095e-5,-5.222569664693657e-9,-3.083492587428513e-4,-4.315408297432371e-5,-5.227650075739371e-9,-3.083181203766566e-4,-4.328165458806027e-5,-5.247856867561176e-9,-3.082471429138195e-4,-4.349411061585933e-5,-5.2822613795529054e-9,-3.081064848257633e-4,-4.375827146070421e-5,-5.3263709887758225e-9,-3.0788661043989416e-4,-4.403198008161343e-5,-5.373792020884821e-9,-3.0759759139367557e-4,-4.4276497491867025e-5,-5.418190385136207e-9,-3.072628362842785e-4,-4.4465056129220834e-5,-5.454790327401472e-9,-3.0691106900856074e-4,-4.458588788817899e-5,-5.481074258715986e-9,-3.0656967318466223e-4,-4.4640878311394534e-5,-5.496772186340735e-9,-3.0626062010192915e-4,-4.464213768265969e-5,-5.5034243148592386e-9,-3.0599865177202766e-4,-4.460833959835805e-5,-5.503787246380918e-9,-3.057908013060658e-4,-4.4561687503291136e-5,-5.501265100167681e-9,-3.0563641143263365e-4,-4.4525580714277986e-5,-5.4994619326435316e-9,-3.0552715792361276e-4,-4.4522582031122806e-5,-5.501861033144501e-9,-3.0544706109613843e-4,-4.457210286773981e-5,-5.511548919490009e-9,-0.00030537297561927964,-4.4687381552856436e-5,-5.5308628299553145e-9]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json deleted file mode 100644 index 2eec942..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_8.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":8000,"numberOfSamples":1000,"samples":[-3.0527640252829807e-4,-4.487182696660493e-5,-5.56088448082571e-9,-3.051274863200565e-4,-4.511556230951057e-5,-5.6008437940501195e-9,-3.049014822200931e-4,-4.5393887171247894e-5,-5.647698563779582e-9,-3.045865825423837e-4,-4.566978863347711e-5,-5.696284894052496e-9,-3.041902526794886e-4,-4.590165294193654e-5,-5.7403050551512475e-9,-3.0374053440293064e-4,-4.605480630272924e-5,-5.774008768966934e-9,-3.032803042778928e-4,-4.6112832816305496e-5,-5.793973590280497e-9,-3.028557483245855e-4,-4.608383761616052e-5,-5.800251345674449e-9,-3.025032355259023e-4,-4.599882516164128e-5,-5.796427523208801e-9,-3.022393949447573e-4,-4.5902896545994185e-5,-5.788631331365615e-9,-3.020574267495867e-4,-4.5842714571687194e-5,-5.7838921806700334e-9,-3.019300694661608e-4,-4.585434504667538e-5,-5.7883384069394884e-9,-3.0181769376023336e-4,-4.595468543172006e-5,-5.805682519418446e-9,-3.0167899235319e-4,-4.613834629665025e-5,-5.83635658405951e-9,-3.014813398322303e-4,-4.638044052124705e-5,-5.877534282545917e-9,-3.0120806044062887e-4,-4.664417952898078e-5,-5.924029708374941e-9,-3.008608032921932e-4,-4.689076983299546e-5,-5.969769115749644e-9,-3.004568895018775e-4,-4.70885065576558e-5,-6.009334760264992e-9,-3.000232042040917e-4,-4.7218579979817117e-5,-6.039104695872155e-9,-2.995891071912802e-4,-4.72766796425179e-5,-6.057736521969508e-9,-2.9918053358217385e-4,-4.7271135672653113e-5,-6.066024169441235e-9,-2.9881634126882297e-4,-4.721922325858296e-5,-6.066350982343671e-9,-2.9850682571005375e-4,-4.714317647578276e-5,-6.0620073426491385e-9,-2.982536857147729e-4,-4.706682514849363e-5,-6.056588919504954e-9,-2.9805063249734796e-4,-4.7013055973122464e-5,-6.053577596287479e-9,-2.978841024009395e-4,-4.700177778028711e-5,-6.0560846647952315e-9,-2.97733963612634e-4,-4.7047861809806975e-5,-6.066639640409404e-9,-2.975745746966664e-4,-4.715862391952254e-5,-6.086875521052076e-9,-2.9737697702912646e-4,-4.733079302488828e-5,-6.117026762619431e-9,-2.9711318240313096e-4,-4.754766231303244e-5,-6.1553289826818086e-9,-2.967630328757633e-4,-4.777820603997843e-5,-6.1976547684464505e-9,-2.963225516133362e-4,-4.7980702799556336e-5,-6.237878353608434e-9,-2.9581034269964766e-4,-4.8112531767448336e-5,-6.26929277722192e-9,-2.952671701271256e-4,-4.8144449769795835e-5,-6.286810452998715e-9,-2.9474584957997816e-4,-4.807330163392616e-5,-6.28897999422168e-9,-2.942942146728656e-4,-4.7925741507049555e-5,-6.278697823265868e-9,-2.939390776646052e-4,-4.774982986598883e-5,-6.2621933111198565e-9,-2.9367888471910724e-4,-4.759858957460034e-5,-6.246887112949443e-9,-2.9348722961036977e-4,-4.751366495959348e-5,-6.239195834786848e-9,-2.933236015115482e-4,-4.7515401306169104e-5,-6.243051945843658e-9,-2.9314581436119905e-4,-4.760093779409941e-5,-6.2593279168203955e-9,-2.9292007500896937e-4,-4.774844549298213e-5,-6.286013467788338e-9,-2.926269983387905e-4,-4.792463505513392e-5,-6.318926256564662e-9,-2.9226350769051096e-4,-4.80930810595307e-5,-6.352759512595941e-9,-2.918412941194005e-4,-4.822168516898902e-5,-6.382264012712696e-9,-2.9138274761924426e-4,-4.8288192173938596e-5,-6.4033284884177525e-9,-2.9091546827443674e-4,-4.828307144331461e-5,-6.4137142155758484e-9,-2.904666459630382e-4,-4.820960531850297e-5,-6.413290100567614e-9,-2.9005845372039675e-4,-4.808169188193544e-5,-6.403779607548024e-9,-2.897051121066428e-4,-4.7920298339887756e-5,-6.388175539851937e-9,-2.894117280467004e-4,-4.77495594070045e-5,-6.3700487926475646e-9,-2.891745460224369e-4,-4.7593309240161246e-5,-6.352958916462981e-9,-2.889819981834109e-4,-4.7472392700331755e-5,-6.340071065896678e-9,-2.8881605249833365e-4,-4.740260960082055e-5,-6.333942633116508e-9,-2.886536932128631e-4,-4.739292957383811e-5,-6.336355114475078e-9,-2.884687014832789e-4,-4.7443667570689896e-5,-6.348050662755428e-9,-2.8823427250380447e-4,-4.754452904089668e-5,-6.368308311532382e-9,-2.879272735231633e-4,-4.767303651414079e-5,-6.394467888137689e-9,-2.875345818250315e-4,-4.7794856179294424e-5,-6.4217381728864196e-9,-2.8706055734247936e-4,-4.786832012302628e-5,-6.443756519509059e-9,-2.865324198422822e-4,-4.785486234755549e-5,-6.4542037210419195e-9,-2.859983895327293e-4,-4.773390713864742e-5,-6.449179015088165e-9,-2.8551497623516194e-4,-4.7515537099475336e-5,-6.429222290163076e-9,-2.8512656698742036e-4,-4.724172825041583e-5,-6.399602792241161e-9,-2.8484791237568235e-4,-4.697228518879425e-5,-6.368414825098121e-9,-2.846599731981497e-4,-4.676227057336778e-5,-6.343524830079535e-9,-2.845204990113826e-4,-4.664360730421715e-5,-6.330077698450703e-9,-2.8438137789211793e-4,-4.661903031892221e-5,-6.32954910609419e-9,-2.842033332610527e-4,-4.666740117899054e-5,-6.340163616828402e-9,-2.8396352830062366e-4,-4.6754274987887116e-5,-6.357961127061933e-9,-2.836566692220362e-4,-4.684229725179311e-5,-6.377959739889069e-9,-2.8329216427076527e-4,-4.689886773239183e-5,-6.395189096969708e-9,-2.828896488527907e-4,-4.6900720390375284e-5,-6.405540596281919e-9,-2.824742018907562e-4,-4.6836037546351875e-5,-6.4064023526000905e-9,-2.8207178859335354e-4,-4.670471097933904e-5,-6.397002591025266e-9,-2.817052464373959e-4,-4.6517083949337426e-5,-6.378389721142845e-9,-2.8139115347079264e-4,-4.629149712487325e-5,-6.3530658178796655e-9,-2.811378256204399e-4,-4.605106192105769e-5,-6.324396845660935e-9,-2.8094456582733565e-4,-4.582011369839805e-5,-6.295969795469077e-9,-2.8080213121061873e-4,-4.562084808863251e-5,-6.271061910825657e-9,-2.806941282722342e-4,-4.547056083835451e-5,-6.252305778500468e-9,-2.805989529923734e-4,-4.537959014034061e-5,-6.241511789741509e-9,-2.80492067241958e-4,-4.5349843601162954e-5,-6.239532828776588e-9,-2.803485913613245e-4,-4.5373805665704785e-5,-6.246068068716576e-9,-2.8014639891832464e-4,-4.543399639996473e-5,-6.259380228216586e-9,-2.7987013346108646e-4,-4.550321157816095e-5,-6.276047783203556e-9,-2.795162996405821e-4,-4.5546626057891795e-5,-6.291045688354151e-9,-2.790984739623287e-4,-4.5527321372703615e-5,-6.298505516465384e-9,-2.7865004000894166e-4,-4.541620148794469e-5,-6.2933199008508685e-9,-2.7822043288384707e-4,-4.520484869900707e-5,-6.273276588202333e-9,-2.7786184532760936e-4,-4.4915535087074116e-5,-6.240723143326448e-9,-2.776091852793529e-4,-4.459975553570474e-5,-6.202458787212566e-9,-2.774638632702066e-4,-4.432123225548417e-5,-6.167368360824802e-9,-2.7739275622409024e-4,-4.41307893297388e-5,-6.142942429461774e-9,-2.7734363791847937e-4,-4.404793703195258e-5,-6.132712569902154e-9,-2.772666481119829e-4,-4.405873879426259e-5,-6.135803693451539e-9,-2.7712954630060494e-4,-4.41272344392883e-5,-6.148198003690473e-9,-2.769220926915838e-4,-4.421078330515423e-5,-6.164515668643785e-9,-2.7665243775120893e-4,-4.4271847046803456e-5,-6.179465722684056e-9,-2.7634044414996943e-4,-4.42840858576599e-5,-6.188763867311319e-9,-2.760112787880964e-4,-4.4233969441495255e-5,-6.1896325079837635e-9,-2.7569053678467995e-4,-4.4119908832911274e-5,-6.1810143630256235e-9,-2.7540081443001705e-4,-4.395037973603709e-5,-6.1635500652351195e-9,-2.7515925763830574e-4,-4.374163186724933e-5,-6.13931893200916e-9,-2.7497583229343773e-4,-4.351509382685275e-5,-6.1113765985356755e-9,-2.7485228599034487e-4,-4.3294504323835476e-5,-6.083191373407955e-9,-2.747818899337699e-4,-4.3102814240736015e-5,-6.0580978536060394e-9,-2.7475014030275356e-4,-4.2959058861573174e-5,-6.038863549547172e-9,-2.747364727847155e-4,-4.287561578709453e-5,-6.027414092691353e-9,-2.7471679197166814e-4,-4.2856211898555225e-5,-6.024680664675889e-9,-2.74666552518033e-4,-4.2894856634732136e-5,-6.0304870842090665e-9,-2.745641634544586e-4,-4.297583426922976e-5,-6.043429961128174e-9,-2.7439449831047824e-4,-4.307484329777695e-5,-6.060781782144661e-9,-2.7415239183585174e-4,-4.316139154284506e-5,-6.078538519547611e-9,-2.738458939963984e-4,-4.320289628151456e-5,-6.0918223659286445e-9,-2.7349833665268886e-4,-4.317111271140737e-5,-6.095829254040278e-9,-2.731473286401864e-4,-4.305077016877184e-5,-6.087300751131777e-9,-2.728384066406977e-4,-4.284850797286421e-5,-6.0661306830069746e-9,-2.726122464122091e-4,-4.2597682445614436e-5,-6.036317211131248e-9,-2.724883882208636e-4,-4.2353186226421395e-5,-6.005346149629137e-9,-2.724538993112942e-4,-4.21739660621937e-5,-5.981721324392774e-9,-2.7246601864680027e-4,-4.209994110375406e-5,-5.971667694606237e-9,-2.724694960632973e-4,-4.2136627145050584e-5,-5.976871636177898e-9,-2.724184831524113e-4,-4.225643997788255e-5,-5.9944559253544774e-9,-2.7229051896981396e-4,-4.241362759713718e-5,-6.018773549341146e-9,-2.720878961454436e-4,-4.2562043557314734e-5,-6.043635716054438e-9,-2.718303929497391e-4,-4.266714123706157e-5,-6.063913242192316e-9,-2.715458512132313e-4,-4.271024379125761e-5,-6.076285881259704e-9,-2.712626659453091e-4,-4.268748746246162e-5,-6.07938776767281e-9,-2.710052329722968e-4,-4.260653559518088e-5,-6.073631332430156e-9,-2.707916949070718e-4,-4.248307887576607e-5,-6.060863861100873e-9,-2.7063291676093104e-4,-4.233782096456377e-5,-6.043919283576518e-9,-2.70531999054325e-4,-4.2193858972839276e-5,-6.026112658845783e-9,-2.7048412159524855e-4,-4.207417276834723e-5,-6.010749252660998e-9,-2.704768085276078e-4,-4.199898085891688e-5,-6.0007083249929064e-9,-2.7049091718653486e-4,-4.198292846456885e-5,-5.998122765150181e-9,-2.705026716692996e-4,-4.203245930769175e-5,-6.0041500657964715e-9,-2.704867786001442e-4,-4.2143960157053555e-5,-6.018813110137525e-9,-2.7042033326989443e-4,-4.2303217237346e-5,-6.0408918160634616e-9,-2.702869966792254e-4,-4.248659500899885e-5,-6.067897441023674e-9,-2.7008072908028737e-4,-4.26641123975258e-5,-6.096212887106141e-9,-2.698083301299173e-4,-4.2804202514864496e-5,-6.121495193355481e-9,-2.6949017078992116e-4,-4.287971029548579e-5,-6.139410707238995e-9,-2.6915846953213103e-4,-4.287457712691834e-5,-6.146692366322419e-9,-2.688523188530164e-4,-4.2790136468926805e-5,-6.142330933965789e-9,-2.6860905054935876e-4,-4.2648942394378234e-5,-6.128480097984698e-9,-2.684529386021688e-4,-4.249325511328419e-5,-6.110525799006696e-9,-2.683846561272461e-4,-4.237577162193681e-5,-6.0958916495610374e-9,-2.6837713845480256e-4,-4.2343242447415576e-5,-6.091676533973367e-9,-2.6838259865424467e-4,-4.241897119821026e-5,-6.1020278393601044e-9,-2.6834954243159544e-4,-4.259356052706968e-5,-6.126618946744287e-9,-2.682414538672124e-4,-4.282968580925502e-5,-6.161071746178656e-9,-2.680473788683876e-4,-4.307777590451198e-5,-6.198928228542621e-9,-2.6778068952418554e-4,-4.329323584064263e-5,-6.233932842908828e-9,-2.6746984498891765e-4,-4.3447294758245534e-5,-6.261585257801009e-9,-2.6714767994234935e-4,-4.3529579126087075e-5,-6.279696539448954e-9,-2.6684354540698494e-4,-4.3545106782298875e-5,-6.288235271926127e-9,-2.6657927046700944e-4,-4.3509317188260445e-5,-6.288838671033637e-9,-2.6636794026195363e-4,-4.3443465401146905e-5,-6.284232359286678e-9,-2.662140688653375e-4,-4.33711394559145e-5,-6.277670357631493e-9,-2.661141777281877e-4,-4.331570058397092e-5,-6.272450417208355e-9,-2.660574130223562e-4,-4.329813146063895e-5,-6.271533343649169e-9,-2.6602631028516745e-4,-4.3334832510506525e-5,-6.277259574999488e-9,-2.6599810856047266e-4,-4.3435186752350394e-5,-6.291119283070944e-9,-2.6594709819864e-4,-4.35991710667151e-5,-6.313534449691571e-9,-2.6584826187483416e-4,-4.3815728146144786e-5,-6.3436577175095264e-9,-2.6568197080015167e-4,-4.406282185693006e-5,-6.379260979809167e-9,-2.654388737832523e-4,-4.4309976961368614e-5,-6.416844899921613e-9,-2.651235904796523e-4,-4.452352360454744e-5,-6.45208973946681e-9,-2.6475574490715504e-4,-4.467379291793127e-5,-6.480660100582804e-9,-2.643674413816663e-4,-4.474263772198858e-5,-6.499235785255884e-9,-2.639972203386808e-4,-4.472932230357101e-5,-6.506524425656316e-9,-2.636814333534693e-4,-4.4652981742684745e-5,-6.50394943475184e-9,-2.6344474410546685e-4,-4.455031096217054e-5,-6.4957052750673075e-9,-2.6329215242018296e-4,-4.446797824163044e-5,-6.487971527226249e-9,-2.6320539661309406e-4,-4.445066132419316e-5,-6.487318143828218e-9,-2.63146231141766e-4,-4.452761326611089e-5,-6.498693327228091e-9,-2.630670795117471e-4,-4.4702593314460794e-5,-6.523735117410233e-9,-2.629259962418986e-4,-4.495205403355389e-5,-6.560195481816707e-9,-2.626998326199566e-4,-4.523322969000845e-5,-6.6028055138425835e-9,-2.6238984542081514e-4,-4.5498615964264204e-5,-6.645151128486782e-9,-2.620181139265042e-4,-4.57101034480172e-5,-6.681643636040315e-9,-2.6161796896905014e-4,-4.584720776675456e-5,-6.7088001834994565e-9,-2.6122365300701173e-4,-4.590801043953323e-5,-6.725594759670876e-9,-2.608629732320002e-4,-4.590508421570969e-5,-6.733110680725014e-9,-2.605538971319134e-4,-4.585973386898697e-5,-6.733869753505527e-9,-2.6030410219870376e-4,-4.5796853823059685e-5,-6.731122265893311e-9,-2.601120119629486e-4,-4.574121346938611e-5,-6.728248726724007e-9,-2.5996821459528486e-4,-4.571499884470834e-5,-6.728333811525041e-9,-2.5985675252670267e-4,-4.573601546615178e-5,-6.733900781581118e-9,-2.597563470776258e-4,-4.581593891770877e-5,-6.7467347208660815e-9,-2.596420276961034e-4,-4.5958327928148174e-5,-6.76770494879153e-9,-2.594877524327709e-4,-4.6156630892450285e-5,-6.796534200413236e-9,-2.5927042693107434e-4,-4.6392942692009576e-5,-6.8315565589601714e-9,-2.589751849875842e-4,-4.663871238482509e-5,-6.86962752289666e-9,-2.586008062635789e-4,-4.685864046342157e-5,-6.906416881867135e-9,-2.5816311466290005e-4,-4.7018104873896896e-5,-6.937219567577798e-9,-2.5769402554871504e-4,-4.70926588010539e-5,-6.9581636155644655e-9,-2.5723517884218273e-4,-4.707644773329669e-5,-6.967428938305518e-9,-2.568273908815006e-4,-4.6986025040791123e-5,-6.966001210496018e-9,-2.564992393431867e-4,-4.685748280218821e-5,-6.957630999254399e-9,-2.5625871902160277e-4,-4.6737400412949545e-5,-6.947966529409689e-9,-2.5609074998136574e-4,-4.667043573132832e-5,-6.943105351110571e-9,-2.5596122517727485e-4,-4.6687347367702306e-5,-6.947967062704738e-9,-2.5582634783583117e-4,-4.6796866950713174e-5,-6.964938644351132e-9,-2.5564461158371896e-4,-4.698373076282578e-5,-6.993209196686726e-9,-2.553879109156633e-4,-4.7213518226825917E-05,-7.029044733220987e-9,-2.5504832832596024e-4,-4.744277599023395e-5,-7.066933407213379e-9,-2.5463858429774843e-4,-4.7630969964505535e-5,-7.1011838454172516e-9,-2.541865650862485e-4,-4.775023325017012e-5,-7.127396703046114e-9,-2.537265402404863e-4,-4.7790107831489385e-5,-7.143345909601783e-9,-2.532904918374822e-4,-4.775683549761495e-5,-7.1491178104008635e-9,-2.529021042786563e-4,-4.766889086299671e-5,-7.146663004807935e-9,-2.525741732148423e-4,-4.7551249353078e-5,-7.139062192878236e-9,-2.5230871169483677e-4,-4.743029000875771e-5,-7.129782907503167e-9,-2.5209851175530824e-4,-4.733012368995658e-5,-7.12209759254885e-9,-2.519291245187472e-4,-4.7270279788107355e-5,-7.1187265860613594e-9,-2.517806968882801e-4,-4.726422556842384e-5,-7.12166746585097e-9,-2.5162963986732293e-4,-4.731809415808857e-5,-7.132097650423624e-9,-2.514505510713131e-4,-4.742927313984141e-5,-7.1502341423829864e-9,-2.512190030433243e-4,-4.758501628393123e-5,-7.175103678264232e-9,-2.5091568236328035e-4,-4.7761815907209246e-5,-7.204305121348925e-9,-2.5053181294401e-4,-4.7926849500478765e-5,-7.233991717484305e-9,-2.500746237911642e-4,-4.804301276238442e-5,-7.259360514494356e-9,-2.495701519604955e-4,-4.8078046570921506e-5,-7.275783141609628e-9,-2.490601882212913e-4,-4.8015746621047336e-5,-7.280321967292176e-9,-2.4859206990471175e-4,-4.786450499113676e-5,-7.272987851368456e-9,-2.4820404096295365e-4,-4.7657974491023386e-5,-7.2570490683069305e-9,-2.479123719305355e-4,-4.744593983612639e-5,-7.238137844085153e-9,-2.477062542180496e-4,-4.7278801363755583e-5,-7.2225323219480234e-9,-2.475523859045091e-4,-4.719243023421515e-5,-7.2153509223338515e-9,-2.4740634073176207e-4,-4.7199163254914456e-5,-7.21928276128765e-9,-2.472256149075255e-4,-4.728689651818537e-5,-7.234113502680999e-9,-2.469800996566623e-4,-4.742481447800407e-5,-7.2570090226968695e-9,-2.4665781472638505e-4,-4.757279635380423e-5,-7.283374548153914e-9,-2.462655369996502e-4,-4.769151536169288e-5,-7.308038135183422e-9,-2.458251322065457e-4,-4.775085456159175e-5,-7.326465854721028e-9,-2.4536711100036463e-4,-4.77350886691006e-5,-7.3357152755733405e-9,-2.4492329122390537e-4,-4.764420066221715e-5,-7.334911212083219e-9,-2.4452039783219196e-4,-4.749169496663902e-5,-7.3251748443696005e-9,-2.441758732145271e-4,-4.7300134577938174e-5,-7.309112821670338e-9,-2.4389627170717684e-4,-4.7095968591426874e-5,-7.2900891206745445e-9,-2.4367780651202367e-4,-4.6904922721911e-5,-7.2715143086660904e-9,-2.4350820404063506e-4,-4.674862028056588e-5,-7.2563236900772534e-9,-2.4336901910568495e-4,-4.6642494199979074e-5,-7.246701350541432e-9,-2.4323787902715116e-4,-4.6594604978692496e-5,-7.243991435989502e-9,-2.4309057272598025e-4,-4.6604855006113405e-5,-7.248666445835073e-9,-2.4290326713360635e-4,-4.666429753503088e-5,-7.260234391154556e-9,-2.4265533867043101e-4,-4.67546250155109e-5,-7.2770527231963495e-9,-2.4233328045250883e-4,-4.684845105661854e-5,-7.29615811529741e-9,-2.4193563237893614e-4,-4.6911622727816726e-5,-7.313363425619466e-9,-2.4147769061437337e-4,-4.690904210391057e-5,-7.323911274472526e-9,-2.409931846698145e-4,-4.68145030450435e-5,-7.3237831866979765e-9,-2.405293638181594e-4,-4.6622304985804496e-5,-7.311327256640174e-9,-2.4013397134164407e-4,-4.6354911420302454e-5,-7.288398575368516e-9,-2.3983792521253927e-4,-4.606009583001144e-5,-7.260171753226957e-9,-2.396424964711392e-4,-4.579591722183568e-5,-7.233460507133913e-9,-2.3951876787466002e-4,-4.561007369104896e-5,-7.21434469153871e-9,-2.394196251219914e-4,-4.552433842374012e-5,-7.206304347525716e-9,-2.3929702425245816e-4,-4.553082614515197e-5,-7.209572961363757e-9,-2.3911604156302504e-4,-4.559902693265397e-5,-7.221607636814043e-9,-2.3886148969033618e-4,-4.56878141259867e-5,-7.238141334743658e-9,-2.385376124584638e-4,-4.57569458542221e-5,-7.25434375948497e-9,-2.381635151221613e-4,-4.5775227331894453e-5,-7.265844606590987e-9,-2.3776689984276165e-4,-4.57248113055291e-5,-7.26951760352044e-9,-2.3737775512568452e-4,-4.560224089873021e-5,-7.26396202658587e-9,-2.3702288262502963e-4,-4.541701560695537e-5,-7.249620171308552e-9,-2.3672182048234104e-4,-4.518837706556744e-5,-7.228512886555455e-9,-2.3648451210419064e-4,-4.494110071809932e-5,-7.203679129923876e-9,-2.3631073766417756e-4,-4.470112417759971e-5,-7.1784915077864556e-9,-2.3619104748406788e-4,-4.449166637344944e-5,-7.156032804897266e-9,-2.361087730659606e-4,-4.433028327220373e-5,-7.138674148007875e-9,-2.3604256281260482e-4,-4.422705852302139e-5,-7.1278965459513375e-9,-2.3596896071219697e-4,-4.41837594790764e-5,-7.124282211477298e-9,-2.358648734407393e-4,-4.419359846967748e-5,-7.127541904743606e-9,-2.3571005457793368e-4,-4.424139308519803e-5,-7.136477505700135e-9,-2.3548986076137152e-4,-4.4304182265018096e-5,-7.148875985336727e-9,-2.3519855436410849e-4,-4.435271161882365e-5,-7.16145714276836e-9,-2.348430390860336e-4,-4.4354724701945077e-5,-7.170110582162483e-9,-2.3444587375598763e-4,-4.428117792866847e-5,-7.170657306550671e-9,-2.3404509111068765e-4,-4.411557127942225e-5,-7.1601656476032516e-9,-2.3368771973065835e-4,-4.386412570504797e-5,-7.138447255205115e-9,-2.334157329157928e-4,-4.356117057573164e-5,-7.108920211252188e-9,-2.3324859251575434e-4,-4.326304457334257e-5,-7.077986722810363e-9,-2.3317225159038513e-4,-4.3029164658112595e-5,-7.0528241170588876e-9,-2.3314325821755143e-4,-4.289880884221161e-5,-7.038651316312173e-9,-2.3310674475310233e-4,-4.287707539508815e-5,-7.037006731343113e-9,-2.330173793949718e-4,-4.2937138101060195e-5,-7.045793591462278e-9,-2.3285221519255721e-4,-4.303448249497462e-5,-7.060613085178226e-9,-2.3261221161084732e-4,-4.312326355963217e-5,-7.076380098752534e-9,-2.3231616237874106e-4,-4.3167782922615494e-5,-7.0885642907420745e-9,-2.3199226213489643e-4,-4.3147504709399666e-5,-7.093925360427784e-9,-2.3167066135599025e-4,-4.305722178644823e-5,-7.090854405127532e-9,-2.3137815592412457e-4,-4.290464072813479e-5,-7.079431225173229e-9,-2.3113482317374794e-4,-4.2706990561187926e-5,-7.061239222047379e-9,-2.3095210624270325e-4,-4.248733394858226e-5,-7.0389514644621475e-9,-2.3083209319112942e-4,-4.22708356697799e-5,-7.0157556508521975e-9,-2.3076787058155768e-4,-4.208124244565444e-5,-6.994754152444318e-9,-2.3074481404720975e-4,-4.193779429781794e-5,-6.978475418029599e-9,-2.3074269629111773e-4,-4.185278131262165e-5,-6.9685812919441475e-9,-2.3073838954341724e-4,-4.183002690679065e-5,-6.9657828504140465e-9,-2.307087773182823e-4,-4.1864416184094224e-5,-6.969890191920407e-9,-2.3063358371772487e-4,-4.19423194920427e-5,-6.979881232260712e-9,-2.304980447362638e-4,-4.204276810737836e-5,-6.993919691136392e-9,-2.3029541532778425e-4,-4.2139396145542684e-5,-7.00935383163725e-9,-2.3002929420596648e-4,-4.220331442258605e-5,-7.022821179996584e-9,-2.297155277725766e-4,-4.220735882242904e-5,-7.0306406913778314e-9,-2.2938274641947577e-4,-4.2132214476566026e-5,-7.029632424365228e-9,-2.2906972807424893e-4,-4.197407643695822e-5,-7.018296801761733e-9,-2.2881761972917472e-4,-4.175160042946605e-5,-6.997961873684011e-9,-2.286567093282979e-4,-4.15075256296687e-5,-6.9732029722847966e-9,-2.2859182172845228e-4,-4.129977684881916e-5,-6.9508561159118375e-9,-2.2859518852719337e-4,-4.118158264999498e-5,-6.937623078004585e-9,-2.2861445669427582e-4,-4.1179317366699686e-5,-6.937368890191579e-9,-2.2859373178187907e-4,-4.128165726085842e-5,-6.949709434593278e-9,-2.2849535207625107e-4,-4.144683429672747e-5,-6.970641653126126e-9,-2.283102601143957e-4,-4.162180946726997e-5,-6.994513297007544e-9,-2.280546314648973e-4,-4.1760936140705576e-5,-7.015996457807604e-9,-2.2775905137933017e-4,-4.1836162324814815e-5,-7.0312662464705675e-9,-2.2745750303615093e-4,-4.183854159207291e-5,-7.038384862713035e-9,-2.2717978153226345e-4,-4.1774688473891304e-5,-7.037214328561364e-9,-2.269476550317656e-4,-4.166168283592476e-5,-7.029107904443636e-9,-2.2677360769187676e-4,-4.152239765949198e-5,-7.016489998134974e-9,-2.2666086428735168e-4,-4.13817553708349e-5,-7.002360297324509e-9,-2.2660400530891817e-4,-4.126365474609324e-5,-6.989766583218536e-9,-2.2659004542151717e-4,-4.1188304668478054e-5,-6.981333927974789e-9,-2.266000219235072e-4,-4.116989011754661e-5,-6.978931288333946e-9,-2.266111881676761e-4,-4.12146495166316e-5,-6.9835033237536505e-9,-2.2659985001449061e-4,-4.131967774449151e-5,-6.9950455254666655e-9,-2.2654460748588225e-4,-4.147283960401956e-5,-7.012666563520272e-9,-2.264295628693442e-4,-4.165394006870694e-5,-7.034672741319516e-9,-2.2624709886908756e-4,-4.183709352380845e-5,-7.058654437906543e-9,-2.259998866238783e-4,-4.1994173550205136e-5,-7.081632424729571e-9,-2.2570180047419192e-4,-4.20991362790095e-5,-7.100361989265034e-9,-2.2537742095192945e-4,-4.213298776272619e-5,-7.111886301353217e-9,-2.2505959382885995e-4,-4.208912506154797e-5,-7.114348718520941e-9,-2.2478421898691062e-4,-4.197821401236689e-5,-7.107904138739319e-9,-2.2458174592226204e-4,-4.1830607186345735e-5,-7.0953504217620375e-9,-2.244663606137209e-4,-4.169327376221295e-5,-7.081979987657558e-9,-2.2442665203386655e-4,-4.1618683723854355e-5,-7.074284006802257e-9,-2.2442408061700852e-4,-4.1646821969372816e-5,-7.077692877238242e-9,-2.2440397415766895e-4,-4.178786877968106e-5,-7.0943342038050634e-9,-2.2431615173148974e-4,-4.201628734466668e-5,-7.122132208245681e-9,-2.2413418489370047e-4,-4.2281316841771065e-5,-7.155838491573877e-9,-2.238625036955378e-4,-4.252762716447894e-5,-7.189267752364687e-9,-2.2352958981585374e-4,-4.271389191467571e-5,-7.217364886846549e-9,-2.231742512295794e-4,-4.2821232086966055e-5,-7.2372470959088515e-9,-2.2283320562756947e-4,-4.285179730744506e-5,-7.2482661351785805e-9,-2.2253387205703278e-4,-4.282232746248896e-5,-7.2515555960049095e-9,-2.2229206566917885e-4,-4.275713751688142e-5,-7.2494356512215224e-9,-2.2211260756237194e-4,-4.2682685880708425e-5,-7.244838453971768e-9,-2.2199099538278396e-4,-4.262399641811782e-5,-7.240796077498677e-9,-2.2191514949620428e-4,-4.260230497054901e-5,-7.240011891369483e-9,-2.2186707232957353e-4,-4.26332616889838e-5,-7.244543832697758e-9,-2.2182464125580366e-4,-4.2725338241283515e-5,-7.255615619695993e-9,-2.217638453501513e-4,-4.287842690194515e-5,-7.273534478793906e-9,-2.2166170729793913e-4,-4.308298693357485e-5,-7.2976765517466445e-9,-2.2149980429336165e-4,-4.332033803452491e-5,-7.326522432477613e-9,-2.2126785688274673e-4,-4.3564584276414805e-5,-7.357751075488498e-9,-2.20966584781167e-4,-4.3786290015324124e-5,-7.388436436288333e-9,-2.2060898292754956e-4,-4.395759483340187e-5,-7.415404439706891e-9,-2.202193504707468e-4,-4.405796910551689e-5,-7.435775583366592e-9,-2.1982983813928416e-4,-4.407947682940211e-5,-7.4476444040565705e-9,-2.1947474914701923e-4,-4.403040203489803e-5,-7.450766846569757e-9,-2.1918316392070605e-4,-4.393615767618415e-5,-7.447040423172644e-9,-2.1897091886597989e-4,-4.3836355658260945e-5,-7.440501159279104e-9,-2.188338255077648e-4,-4.3777167322247025e-5,-7.4366017543605706e-9,-2.187450180632313e-4,-4.379926707359548e-5,-7.440747299185002e-9,-2.1865951766138927e-4,-4.3924079338995526e-5,-7.456451577868975e-9,-2.1852701523895825e-4,-4.414394644131482e-5,-7.48388495394003e-9,-2.1830915181893224e-4,-4.442241000664643e-5,-7.51964660486929e-9,-2.1799327092026865e-4,-4.47064341649404e-5,-7.558021886353412e-9,-2.1759542948186208e-4,-4.4945093539923776e-5,-7.593080121112747e-9,-2.1715190572061313e-4,-4.510525927973701e-5,-7.62051102463403e-9,-2.1670511352975532e-4,-4.5177775919498044e-5,-7.63846614779529e-9,-2.1629130702600425e-4,-4.5174263035486545e-5,-7.647414111500688e-9,-2.1593400226015044e-4,-4.511913434864514e-5,-7.649461867526958e-9,-2.1564283671687278e-4,-4.504151932089862e-5,-7.647573809127245e-9,-2.1541555700511315e-4,-4.496945565191675e-5,-7.644907915657562e-9,-2.152409460728591e-4,-4.4926547873120016E-05,-7.644326527091175e-9,-2.1510150205944102e-4,-4.493027145003056e-5,-7.648080390942638e-9,-2.1497560662559327e-4,-4.499101379307958e-5,-7.65764086825275e-9,-2.1483945926710325e-4,-4.511125926355644e-5,-7.673632641449619e-9,-2.1466926637521481e-4,-4.528477274004901e-5,-7.695803268049495e-9,-2.144441173207301e-4,-4.549613641988964e-5,-7.722992976764426e-9,-2.1414962209211983e-4,-4.572138551931352e-5,-7.753133503949428e-9,-2.137817825713578e-4,-4.5930557875204e-5,-7.783365806364265e-9,-2.1334992695909555e-4,-4.609259275443571e-5,-7.810385927253544e-9,-2.1287718132165904e-4,-4.6182138061975344e-5,-7.831058043246478e-9,-2.123972901802133e-4,-4.618667111745394e-5,-7.843194529569795e-9,-2.1194776550871445e-4,-4.611156504767954e-5,-7.846275859882824e-9,-2.1156084382754122e-4,-4.598097245517623e-5,-7.841849026160612e-9,-2.1125475027746477e-4,-4.5833615902049135e-5,-7.833415837621815e-9,-2.1102786191385352e-4,-4.57141563789811e-5,-7.825754714870187e-9,-2.1085766176323766e-4,-4.5662121102797614e-5,-7.823773717687805e-9,-2.1070526783781765e-4,-4.570112440445812e-5,-7.831148800367581e-9,-2.1052503260910168e-4,-4.5831388471697066e-5,-7.84914193292144e-9,-2.1027715631769618e-4,-4.602835716858338e-5,-7.876058836978009e-9,-2.0993957436240816e-4,-4.6248926026246374e-5,-7.90766713758257e-9,-2.095146194759454e-4,-4.644402823389973e-5,-7.938509723459188e-9,-2.0902749841148404e-4,-4.6573103373786205e-5,-7.963593692431587e-9,-2.085173003005473e-4,-4.6614726939852604e-5,-7.979751223426029e-9,-2.080247685004384e-4,-4.656971988276465e-5,-7.986202202748241e-9,-2.0758195037667867e-4,-4.645702153575651e-5,-7.984303236040702e-9,-2.0720680107128868e-4,-4.630568678322192e-5,-7.976805592462343e-9,-2.069027746736158e-4,-4.6146864470554793E-05,-7.967006829227965e-9,-2.0666149949068237e-4,-4.6008053738656595e-5,-7.958051544835984e-9,-2.0646643337144435e-4,-4.591001322147901e-5,-7.952478950941206e-9,-2.0629619473845173e-4,-4.586558575032321e-5,-7.952010523962518e-9,-2.0612715730170046e-4,-4.587946155808738e-5,-7.957511462395227e-9,-2.0593551752786214e-4,-4.594814009737746e-5,-7.969025447952002e-9,-2.0569936999224403e-4,-4.6059814191126656e-5,-7.985789917193825e-9,-2.054013396767555e-4,-4.619444426954505e-5,-8.006201300389058e-9,-2.0503200586908336e-4,-4.632476440606799e-5,-8.027795774410303e-9,-2.0459370977526643e-4,-4.6419232557928356e-5,-8.04739911864323e-9,-2.0410341514187733e-4,-4.644771828424737e-5,-8.061606874456355e-9,-2.0359249297940358e-4,-4.6389591386022976e-5,-8.06761967917358e-9,-2.0310152417526018e-4,-4.6241943470151586e-5,-8.064208675557398e-9,-2.026701314330422e-4,-4.602412220191169e-5,-8.05238930586289e-9,-2.0232482212882342e-4,-4.5775201703916056e-5,-8.035415203185357e-9,-2.0206981769589567e-4,-4.5543952383211005e-5,-8.017995799141722e-9,-2.0188503857131567e-4,-4.5374719563007136e-5,-8.005002937932091e-9,-2.0173208974531864e-4,-4.5294685661682146e-5,-8.000132839061242e-9,-2.0156558865288865e-4,-4.530694102432007e-5,-8.004940251523124e-9,-2.0134563404935994e-4,-4.5390862347908655e-5,-8.018476540387911e-9,-2.010477628284383e-4,-4.5508700213428396e-5,-8.037583629336856e-9,-2.0066816008643582e-4,-4.56159424839469e-5,-8.05775420557668e-9,-2.002233040454102e-4,-4.5672547498502866e-5,-8.074324603901956e-9,-1.9974456130923202e-4,-4.5652156194690424e-5,-8.083656540042794e-9,-1.992695170896543e-4,-4.554701856445397e-5,-8.083957366931921e-9,-1.9883270591920156e-4,-4.5367698049175715e-5,-8.075522287619769e-9,-1.9845841745310465e-4,-4.513832170771045e-5,-8.060398815725766e-9,-1.981572124953109e-4,-4.488951139782889e-5,-8.041672208553757e-9,-1.9792619199168255e-4,-4.46514605035761e-5,-8.022654713173082e-9,-1.97751818665741e-4,-4.444885607769098e-5,-8.006221420156825e-9,-1.9761372928278598e-4,-4.429815409582809e-5,-7.994418534127477e-9,-1.9748834183331958e-4,-4.4206787770554826e-5,-7.988349103172298e-9,-1.9735172150645567e-4,-4.417347840913245e-5,-7.988243219864344e-9,-1.9718177685405577e-4,-4.4188897515318655e-5,-7.993577576316224e-9,-1.969602185929472e-4,-4.423633228093872e-5,-8.003137811219496e-9,-1.96674791367231e-4,-4.429249144944042e-5,-8.01500158984719e-9,-1.9632209229852586e-4,-4.43290434847933e-5,-8.026530943997656e-9,-1.9591072087203853e-4,-4.4315855466975366e-5,-8.03455558004738e-9,-1.9546352222861362e-4,-4.422685189198833e-5,-8.035926730100295e-9,-1.9501665604001342e-4,-4.404835137258371e-5,-8.028456381532183e-9,-1.9461311284592976e-4,-4.3787482447394696e-5,-8.011956426634773e-9,-1.9429036612252486e-4,-4.3475903590539156e-5,-7.988819905738023e-9,-1.9406609579109184e-4,-4.31641133352837e-5,-7.963631507898714e-9,-1.939293801808378e-4,-4.290607476846081e-5,-7.941776010191559e-9,-1.9384326424020214e-4,-4.274050836180446e-5,-7.927647618378034e-9,-1.9375801371840964e-4,-4.267820492195053e-5,-7.923311832665135e-9,-1.9362806935360174e-4,-4.270088509049269e-5,-7.928124868965717e-9,-1.934249241067107e-4,-4.277008015595093e-5,-7.93923136862352e-9,-1.931422172148227e-4,-4.284026359050476e-5,-7.952533831849908e-9,-1.9279378906395382e-4,-4.287086605432226e-5,-7.963753390058145e-9,-1.9240746774724533e-4,-4.283438753175265e-5,-7.96935681810304e-9,-1.9201729184363728e-4,-4.272004332166115e-5,-7.967224995384466e-9,-1.9165604145344355e-4,-4.253352928312996e-5,-7.956980058119363e-9,-1.9134921912310286e-4,-4.229384282667856e-5,-7.939923003820991e-9,-1.9111121492372828e-4,-4.202818834980984e-5,-7.91860535841166e-9,-1.9094402083634387e-4,-4.176615800307559e-5,-7.896162848299419e-9,-1.9083831639714896e-4,-4.1534410208336746e-5,-7.87561120850624e-9,-1.9077625422079947e-4,-4.1352743879738196e-5,-7.859295143438076e-9,-1.9073505303328413e-4,-4.123196142628293e-5,-7.848605195695082e-9,-1.9069054410135802e-4,-4.1173414159399545e-5,-7.843964753064974e-9,-1.906201224278099e-4,-4.116971136664543e-5,-7.844982280018888e-9,-1.905050256123524e-4,-4.1205978856558556e-5,-7.850625899117948e-9,-1.9033218543530693e-4,-4.126132493487268e-5,-7.859318656901609e-9,-1.9009597946679268e-4,-4.131052250053904e-5,-7.868951080561997e-9,-1.8980014139863044e-4,-4.1326260782891054e-5,-7.876912836277283e-9,-1.8945967012305145e-4,-4.128269700216912e-5,-7.880323549005257e-9,-1.8910169760086778e-4,-4.116102678475968e-5,-7.876614821307504e-9,-0.00018876338867391296,-4.0956863108143176e-5,-7.864445949430287e-9,-1.884847853602136e-4,-4.0687258733253435e-5,-7.844654109638144e-9,-1.8829616966925856e-4,-4.039278804799636e-5,-7.820672655457958e-9,-1.88203845813791e-4,-4.012954778719805e-5,-7.797856014628003e-9,-1.8818277508791647e-4,-3.995054240701812e-5,-7.781684520999545e-9,-1.881832875362198e-4,-3.988448188439229e-5,-7.77566376533795e-9,-1.8815018874959586e-4,-3.992443525486756e-5,-7.780096416824334e-9,-1.880434791354815e-4,-4.003285000490112e-5,-7.792321866458137e-9,-1.8784973035415947e-4,-4.015822215563545e-5,-7.808013539986401e-9,-1.8758115050261835e-4,-4.025292234742e-5,-7.822655543413694e-9,-1.872668184883031e-4,-4.02846843903453e-5,-7.832609350063291e-9,-1.869421745375567e-4,-4.024036343886389e-5,-7.835668960723405e-9,-1.866405011096358e-4,-4.012421563344865e-5,-7.831233109466725e-9,-1.8638746606769327e-4,-3.9953517066443375e-5,-7.820209997762073e-9,-1.8619833336478678e-4,-3.9753447846682424E-05,-7.804705559277455e-9,-1.8607713456172942e-4,-3.955211791223761e-5,-7.787528077260694e-9,-1.8601733956143633e-4,-3.937609305312275e-5,-7.771594675631029e-9,-1.8600372362801028e-4,-3.924671808006975e-5,-7.759377516311174e-9,-1.860151033940145e-4,-3.9177490549839045e-5,-7.752521038826082e-9,-1.86027579535179e-4,-3.917265795237302e-5,-7.751697825195558e-9,-1.8601784500762417e-4,-3.922712275877602e-5,-7.756683939980297e-9,-1.859660991240961e-4,-3.932748873083235e-5,-7.76655338904938e-9,-1.858583415306685e-4,-3.945386020008228e-5,-7.779863803220138e-9,-1.856880765199331e-4,-3.9582104032858643e-5,-7.794764745634513e-9,-1.8545751111847034e-4,-3.968648336286518e-5,-7.80905273811186e-9,-1.8517832726768282e-4,-3.974272194646584e-5,-7.820277095975539e-9,-1.8487191715710737e-4,-3.973182286832981e-5,-7.826043324454552e-9,-1.84568326062585e-4,-3.964498003485806e-5,-7.824607063924266e-9,-1.8430252736954805e-4,-3.948909619720772e-5,-7.81567723225054e-9,-1.841068015813026e-4,-3.9290916557531185e-5,-7.801120265142914e-9,-1.8399941650295114e-4,-3.9096168023688346e-5,-7.785080204503404e-9,-1.8397315757144196e-4,-3.8959732030985414e-5,-7.773061430941858e-9,-1.8399121969710352e-4,-3.892667494260442e-5,-7.769999153806498e-9,-1.8399720413110593e-4,-3.9012062532908605e-5,-7.778165646339316e-9,-1.8393709799280938e-4,-3.919247414624714e-5,-7.796192327999907e-9,-1.837809253347292e-4,-3.94159913142451e-5,-7.81983562463752e-9,-1.835314504140859e-4,-3.9624174692404916e-5,-7.843866044999501e-9,-1.832175926465497e-4,-3.9772376929694886e-5,-7.863852973816922e-9,-0.00018288007799367867,-3.983939802399363e-5,-7.877101234873762e-9,-1.825581525567214e-4,-3.9826609012344015e-5,-7.88278698428171e-9,-1.8228153953364634e-4,-3.975151493070294e-5,-7.881673076367993e-9,-1.8206747389102235e-4,-3.96403257759107e-5,-7.87567869457065e-9,-1.8192093438847728e-4,-3.952183195728649e-5,-7.867403264403688e-9,-1.818363144226791e-4,-3.94230088792691e-5,-7.859627774104685e-9,-1.8179960057993597e-4,-3.9365938879669173e-5,-7.854836651382487e-9,-1.817908037429815e-4,-3.9365650403408574e-5,-7.85483970570868e-9,-1.817866154295425e-4,-3.9428705477013426e-5,-7.860566324909944e-9,-1.81763290141203e-4,-3.955254076382139e-5,-7.872043997922005e-9,-1.8169966125836646e-4,-3.9725745338659054e-5,-7.888521312020506e-9,-1.8157997375724025e-4,-3.992943179925509e-5,-7.908654800013727e-9,-1.8139615201193202e-4,-4.01395859443014e-5,-7.930677800847704e-9,-1.8114926843234067e-4,-4.0330149429537525e-5,-7.952524911278175e-9,-1.808500494869329e-4,-4.047662276442048e-5,-7.971962158343955e-9,-1.8051827933978514e-4,-4.055992560857808e-5,-7.986810256067089e-9,-1.8018101316444614e-4,-4.0570277674346596e-5,-7.995336625795394e-9,-1.7986930754112723e-4,-4.0510916503467394e-5,-7.996822725172099e-9,-1.796128754203871e-4,-4.0400967753350356e-5,-7.992167447243349e-9,-1.7943243126465743e-4,-4.027577035424067e-5,-7.984224841668468e-9,-1.793308527151646e-4,-4.0182267013651894e-5,-7.97751603843064e-9,-1.7928650189256697e-4,-4.016762654034507e-5,-7.977085620844553e-9,-1.7925412028238575e-4,-4.026237728195528e-5,-7.986681974367066e-9,-1.791774416147169e-4,-4.046502137035069e-5,-8.007050548514257e-9,-1.79010578141659e-4,-4.07384889308924e-5,-8.03541534862946e-9,-1.7873692411944845e-4,-4.102346717380981e-5,-8.066621496285543e-9,-1.783741420058078e-4,-4.1261830836882335e-5,-8.095249938080533e-9,-1.7796361074475225e-4,-4.1416463164230464e-5,-8.117421582789139e-9,-1.7755290410782594e-4,-4.1478368578888085e-5,-8.131520449449486e-9,-1.7718135033389617e-4,-4.146198733197798e-5,-8.13797055610707e-9,-1.768730990346715e-4,-4.139529321745453e-5,-8.138602365296292e-9,-1.766365818208645e-4,-4.131042648440153e-5,-8.135996394797593e-9,-1.7646729539195152e-4,-4.123728457209718e-5,-8.132931548149722e-9,-1.7635140912427015e-4,-4.119998363428822e-5,-8.131940782911007e-9,-1.7626901592075078e-4,-4.1215139264067615e-5,-8.13497319552361e-9,-1.7619688175239353e-4,-4.129104627639256e-5,-8.143187102834443e-9,-1.7611095329391106e-4,-4.142731358893801e-5,-8.156888519239014e-9,-1.7598889716912629e-4,-4.1614887437690714e-5,-8.17558928584182e-9,-1.7581281192462515e-4,-4.183670829192403e-5,-8.198133122013413e-9,-1.7557194116890116e-4,-4.206939570725801e-5,-8.222846596370708e-9,-1.7526489185315834e-4,-4.2286145337228534e-5,-8.247693685378518e-9,-1.749007892130791e-4,-4.246067239676419e-5,-8.27045287578726e-9,-1.7449889291473196e-4,-4.257177890837406e-5,-8.288966601271894e-9,-1.7408636134491067e-4,-4.260785569445014e-5,-8.301502622549816e-9,-1.7369417612683185e-4,-4.257044116629862e-5,-8.307207425135431e-9,-1.733515749373912e-4,-4.247603925671317e-5,-8.306560538240727e-9,-1.7307951561946385e-4,-4.235546258407321e-5,-8.301660768772593e-9,-1.7288404300892215e-4,-4.224980670333177e-5,-8.296116391034056e-9,-1.7275126742316764e-4,-4.220232082429011e-5,-8.29435675977847e-9,-1.7264662508130276e-4,-4.2246603872407674e-5,-8.300377709365537e-9,-1.7252121501086634e-4,-4.239390927424923e-5,-8.316260399484159e-9,-1.723259194563172e-4,-4.262512746453453e-5,-8.341125038747223e-9,-1.7202921853819408e-4,-4.289359303196469e-5,-8.371205255110296e-9,-1.7163005621497463e-4,-4.314027956941037e-5,-8.401196120311941e-9,-1.7115808212438073e-4,-4.3314891182245837e-5,-8.426208336859534e-9,-1.706611339045414e-4,-4.3391899781138715e-5,-8.4432830383759e-9,-1.701876762651756e-4,-4.3374419715413495e-5,-8.4518562411058e-9,-1.6977323193821857e-4,-4.328714577136297e-5,-8.4533209117178e-9,-1.6943492968409378e-4,-4.316484300779904e-5,-8.450215049832509e-9,-1.691728141266524e-4,-4.304229490465962e-5,-8.445454567334958e-9,-1.689743734967421e-4,-4.294814563749508e-5,-8.441762371783732e-9,-1.6881942342299218e-4,-4.2902261156559144e-5,-8.441296223429344e-9,-1.6868404487941965e-4,-4.291519214458628e-5,-8.445444774098598e-9,-1.6854347563705814e-4,-4.2988495594045744e-5,-8.454766529152133e-9,-1.6837439851704656e-4,-4.3115257163194266e-5,-8.469036389597806e-9,-1.681571293442517e-4,-4.3280710287122344e-5,-8.487346444855007e-9,-1.6787800682957013e-4,-4.3463272785180736e-5,-8.508217625345404e-9,-1.675319055511752e-4,-4.363653952219832e-5,-8.529718093993882e-9,-1.6712433065999726e-4,-4.3772654109465174e-5,-8.549625270960761e-9,-1.6667221550076703e-4,-4.3847053130506195e-5,-8.565688893545171e-9,-1.6620251090174813e-4,-4.384394863589244e-5,-8.576022891083493e-9,-1.6574805161057994e-4,-4.3761243185843136e-5,-8.57958137502147e-9,-1.653410166729793e-4,-4.361321227414499e-5,-8.57659196538238e-9,-1.6500526069332353e-4,-4.3429595920686075e-5,-8.568780938240553e-9,-1.6474941938175833e-4,-4.325061380526027e-5,-8.559242374508827e-9,-1.6456278474184848e-4,-4.311845658282386e-5,-8.551872091484495e-9,-1.6441558827007797e-4,-4.306679435913246e-5,-8.55041163875152e-9,-1.6426459590353389e-4,-4.31107428021797e-5,-8.55731514316368e-9,-1.6406370565747632e-4,-4.324040567689213e-5,-8.572814975918328e-9,-1.6377738091422734e-4,-4.3421136814201817e-5,-8.594619277300757e-9,-1.6339259528422065e-4,-4.360218549923664e-5,-8.618509053213847e-9,-1.6292403742707357e-4,-4.3731933663244515e-5,-8.639692356752142e-9,-1.6240945516230828e-4,-4.3773994492029846e-5,-8.654343911008955e-9,-1.618968607756375e-4,-4.371721460881521e-5,-8.660647603934844e-9,-1.614295836691662e-4,-4.357579691594396e-5,-8.658990171403235e-9,-1.6103554540079272e-4,-4.338116258064244e-5,-8.65143750147207e-9,-1.6072371734170566e-4,-4.317072694826411e-5,-8.640899300411265e-9,-1.60486597377181e-4,-4.2978486922922624e-5,-8.630346264051817e-9,-1.6030553083480994e-4,-4.28295955015562e-5,-8.622255741822829e-9,-1.6015613527411944e-4,-4.2738546072660895e-5,-8.618310231123223e-9,-1.6001252941236853e-4,-4.270953342717434e-5,-8.619310983523769e-9,-1.5985023392522713e-4,-4.27376696865566e-5,-8.62524258194941e-9,-1.5964820616548375e-4,-4.281026269130828e-5,-8.635407427994393e-9,-1.5939063606626693e-4,-4.290797545834162e-5,-8.648555381100611e-9,-1.5906893911632526e-4,-4.300622619989431e-5,-8.662980381924239e-9,-1.586839320425307e-4,-4.307745905419132e-5,-8.6766176574788e-9,-1.5824763893893554e-4,-4.309485149551601e-5,-8.687224944489166e-9,-1.577836553301402e-4,-4.303761508032331e-5,-8.692728743322592e-9,-1.5732473003351639e-4,-4.2897150815443866e-5,-8.691735505534104e-9,-1.5690673041701025e-4,-4.2682099455994495e-5,-8.684069583127032e-9,-1.5655967783061677e-4,-4.241963218334136e-5,-8.671100768675983e-9,-1.5629842252569848e-4,-4.215106331379977e-5,-8.65564776892293e-9,-1.5611654367897435e-4,-4.1922027222526855e-5,-8.641393519477788e-9,-1.5598634365727104e-4,-4.1769990723229766e-5,-8.631943434242865e-9,-1.558655337576891e-4,-4.171332468953909e-5,-8.62980875112357e-9,-1.55708599326998e-4,-4.1745676230751626e-5,-8.635639653747643e-9,-1.5547926756793228e-4,-4.183738871643539e-5,-8.64796410233513e-9,-1.5516040876164026e-4,-4.194344529267842e-5,-8.663544317198107e-9,-1.5475857077794318e-4,-4.2015642345345564e-5,-8.678275332417251e-9,-1.5430178219828054e-4,-4.2015487508945786e-5,-8.688346657903147e-9,-1.538312653883322e-4,-4.1923888974596855e-5,-8.691272266061803e-9,-1.5338985144061818e-4,-4.174464729428951e-5,-8.686443715723425e-9,-1.5301108912570144e-4,-4.150107912857046e-5,-8.675074640975934e-9,-1.5271247020407983e-4,-4.1227745509928506e-5,-8.659650972450587e-9,-1.5249412865362623e-4,-4.096082102643691e-5,-8.643154944543995e-9,-1.5234202142190386e-4,-4.0730361657362306e-5,-8.628341074666747e-9,-1.522332666590427e-4,-4.0556036818412694e-5,-8.617240877586801e-9,-1.5214146355814283e-4,-4.044607832465574e-5,-8.610948820189256e-9,-1.5204082770238207e-4,-4.0398276306418136e-5,-8.609649713449356e-9,-1.5190894966737008e-4,-4.040182404940597e-5,-8.612791693953891e-9,-1.5172855998777816e-4,-4.04392073340307e-5,-8.619289651721801e-9,-1.5148890221367985e-4,-4.048788673301634e-5,-8.627671304566296e-9,-1.511871960678653e-4,-4.052207249406931e-5,-8.636154913727928e-9,-1.5083025434630082e-4,-4.051521495503619e-5,-8.642725787473477e-9,-1.5043574158394175e-4,-4.044383852156764e-5,-8.645327734018624e-9,-1.500319353466808e-4,-4.029297377626192e-5,-8.642261093560134e-9,-1.496544166579292e-4,-4.006242686937451e-5,-8.632759521112276e-9,-1.4933857066749907e-4,-3.9771500609913104e-5,-8.61753525645397e-9,-1.4910878327908136e-4,-3.9458613965874134e-5,-8.598961074703302e-9,-1.4896817540041468e-4,-3.9173255620837376e-5,-8.580634729706417e-9,-1.4889434793359147e-4,-3.896143953895252e-5,-8.566369717397555e-9,-1.488446779231985e-4,-3.885027635490195e-5,-8.558992598500318e-9,-1.4876971971684565e-4,-3.883878985692342e-5,-8.559461170923111e-9,-1.4862882605840358e-4,-3.889897430693147e-5,-8.566637964807312e-9,-1.484015496846831e-4,-3.8985699273179814e-5,-8.577719545041904e-9,-1.4809146958670756e-4,-3.9050500471712874e-5,-8.589075917670951e-9,-1.4772283139077166e-4,-3.90541832810773e-5,-8.597200861671296e-9,-1.4733252302452735e-4,-3.8975093804996464e-5,-8.599531021666814e-9,-1.46960319709348e-4,-3.8811988524448995e-5,-8.594969943036304e-9,-1.4663989849332713e-4,-3.8581911562734315e-5,-8.58402541962936e-9,-1.4639243737691714e-4,-3.831439622032589e-5,-8.568556760394407e-9,-1.4622381432699978e-4,-3.8043832331238845e-5,-8.551221326080342e-9,-1.4612546696149864e-4,-3.780203085357788e-5,-8.534793996272362e-9,-1.4607800835754142e-4,-3.761267871861787e-5,-8.521560570514165e-9,-1.46056126596556e-4,-3.748848840769632e-5,-8.512936995642796e-9,-1.4603336462438332e-4,-3.743087337648366e-5,-8.509368863912567e-9,-1.4598588657925202e-4,-3.743138625583485e-5,-8.510465027645555e-9,-1.4589496353338089e-4,-3.747399290628529e-5,-8.515247763091069e-9,-1.4574843347403674e-4,-3.753744263121957e-5,-8.522385868843517e-9,-1.4554162934537264e-4,-3.759745129656199e-5,-8.530332304446479e-9,-1.4527818133022795e-4,-3.7628889350479104e-5,-8.537375532161534e-9,-1.4497079464529807e-4,-3.76084521534279e-5,-8.541699439939246e-9,-1.446416124057033e-4,-3.751836753687077e-5,-8.541581339326527e-9,-1.4432111704455668e-4,-3.7351398285757994e-5,-8.535812444372269e-9,-1.4404404714688575e-4,-3.711638518574359e-5,-8.524282605408122e-9,-1.438412079624837e-4,-3.684187866182322e-5,-8.508477097627533e-9,-1.4372811461076546e-4,-3.657397293866363e-5,-8.491503673689153e-9,-1.436949746655447e-4,-3.636532952138359e-5,-8.477371791217123e-9,-1.437049148338037e-4,-3.625715011489158e-5,-8.469647157873269e-9,-1.4370460041685984e-4,-3.626225419817731e-5,-8.470096677118393e-9,-1.436435657655829e-4,-3.6359182629031623e-5,-8.478059693349249e-9,-1.4349217679652826e-4,-3.650097828056397e-5,-8.49083875172551e-9,-1.4324944734727836e-4,-3.663301747612782e-5,-8.50476357027434e-9,-1.4293924274250757e-4,-3.6710244446883646e-5,-8.516318183217591e-9,-1.42599606440927e-4,-3.670734481993864e-5,-8.522934387042323e-9,-1.4227107692698355e-4,-3.66208983276144e-5,-8.523380609554418e-9,-1.4198762087161575e-4,-3.646586091026803e-5,-8.517827359725516e-9,-1.4177127123896665e-4,-3.626931158012475e-5,-8.507668428407443e-9,-1.4163010445375599e-4,-3.606360234221836e-5,-8.495144285064709e-9,-1.4155881398565556e-4,-3.588006957388633e-5,-8.482821921176052e-9,-1.4154122929864088e-4,-3.574396664003745e-5,-8.473039059830415e-9,-1.4155410250967632e-4,-3.5671120527783085e-5,-8.467454781925923e-9,-1.4157137341078065e-4,-3.5666522461359366e-5,-8.46681890030178e-9,-1.4156819516112225e-4,-3.572468450852716e-5,-8.4709875707388e-9,-1.4152418460917606e-4,-3.58313730753767e-5,-8.47912807725831e-9,-1.4142558873947818e-4,-3.59661705458511e-5,-8.489992557926502e-9,-1.412664184643966e-4,-3.6105261696455e-5,-8.502137383045136e-9,-1.4104888166358994e-4,-3.6224110895191465e-5,-8.514032189748423e-9,-1.4078340386514088e-4,-3.630008132933925e-5,-8.524097794432883e-9,-1.4048831120426743e-4,-3.6315244359799485e-5,-8.530777751256682e-9,-1.4018893987105985e-4,-3.6259700669489686e-5,-8.532761075544734e-9,-1.399154045802046e-4,-3.613554770648095e-5,-8.529406358796928e-9,-1.396978493880879e-4,-3.5960758369385744e-5,-8.5212719609298e-9,-1.395584274220083e-4,-3.5770777754258144e-5,-8.510484614118273e-9,-1.395010799090941e-4,-3.5614419533547606e-5,-8.500584815712752e-9,-1.3950347955379841e-4,-3.554134224026499e-5,-8.495600252331792e-9,-1.395181326667312e-4,-3.5583057711782186e-5,-8.49852886633527e-9,-1.3948692048425989e-4,-3.573661667274257e-5,-8.509976577861838e-9,-1.3936409233349114e-4,-3.596248146847602e-5,-8.52783178092342e-9,-1.3913464178440764e-4,-3.6200002121230084e-5,-8.548219699136488e-9,-1.3881747770678196e-4,-3.6391341144876804e-5,-8.567072309384218e-9,-1.384540237025143e-4,-3.650005380239695e-5,-8.581375137160207e-9,-1.380914704582618e-4,-3.6517145395985524e-5,-8.589669620504838e-9,-1.3776939627770373e-4,-3.645667302158028e-5,-8.591982763540148e-9,-1.375129529417687e-4,-3.634680402050186e-5,-8.589508759325445e-9,-1.373315794560991e-4,-3.622095854655851e-5,-8.584220023840957e-9,-1.3722091216789167e-4,-3.61110737959683e-5,-8.578448656336925e-9,-1.3716598999432205e-4,-3.6043161150447865e-5,-8.574449379800085e-9,-1.37144819913883e-4,-3.6034601772228566e-5,-8.573995788120039e-9,-1.3713202193536196e-4,-3.60927847497726e-5,-8.578098184526851e-9,-1.3710237308793484e-4,-3.621495858814332e-5,-8.586914569799196e-9,-1.3703402980724396e-4,-3.6389181641333254e-5,-8.5998516774355e-9,-1.36911205202354e-4,-3.65962542961265e-5,-8.615789199981454e-9,-1.3672602214730465e-4,-3.68124573584491e-5,-8.633327431858329e-9,-1.36479349089764e-4,-3.701271677512592e-5,-8.650970819822634e-9,-1.3618068653054776e-4,-3.717379627140313e-5,-8.667222550115315e-9,-1.358472662707308e-4,-3.7277344343605105e-5,-8.680647089426607e-9,-1.3550242612119607e-4,-3.731274903926245e-5,-8.68999424871703e-9,-1.3517320152061808e-4,-3.727978006702851e-5,-8.694459140313209e-9,-1.3488680793789882e-4,-3.719092897384664e-5,-8.694073713436727e-9,-1.3466544021457864e-4,-3.707279073129639e-5,-8.69010051987593e-9,-1.3451925275556113e-4,-3.696481485133304e-5,-8.685177236944263e-9,-1.344388658671642e-4,-3.69131046298267e-5,-8.682934876706395e-9,-1.3439108416693466e-4,-3.695778715724225e-5,-8.68695839392729e-9,-1.3432331140892352e-4,-3.7116200157038535e-5,-8.699334814541392e-9,-1.3417981211901297e-4,-3.737010340084863e-5,-8.71951455375979e-9,-1.339246580951755e-4,-3.7667420214442775e-5,-8.744316749020727e-9,-1.3355816900488716e-4,-3.7941435370631326e-5,-8.769244026211392e-9,-1.3311593340372153e-4,-3.813725721253883e-5,-8.79029609068621e-9,-1.3265197371800877e-4,-3.8229929052285945e-5,-8.80518898519348e-9,-1.3221793913426716e-4,-3.822643977336777e-5,-8.813555366407018e-9,-1.318492290963614e-4,-3.8155740932226004e-5,-8.816480101901048e-9,-1.3156091565529496e-4,-3.8055615871408505e-5,-8.815891247203971e-9,-1.3135036452187486e-4,-3.796239043644523e-5,-8.814051427765528e-9,-1.31202438800492e-4,-3.7905049072083586e-5,-8.813160873514698e-9,-1.3109463784149872e-4,-3.79028210263575e-5,-8.81503385420893e-9,-1.3100122611687848e-4,-3.796469387651649e-5,-8.820852830416448e-9,-1.3089648863076503e-4,-3.80897908046812e-5,-8.83104051118581e-9,-1.3075748536931842e-4,-3.826825886682798e-5,-8.84527997381368e-9,-1.3056648321026467e-4,-3.848267424904795e-5,-8.862659526172724e-9,-1.3031305885508222e-4,-3.871009371470224e-5,-8.881878607082005e-9,-1.2999564462678402e-4,-3.8924886973358905e-5,-8.90144922639146e-9,-1.296221126551315e-4,-3.9102224081252054e-5,-8.919852317394064e-9,-1.292091137554164e-4,-3.9221787764163894e-5,-8.935653170963314e-9,-1.287801342980387e-4,-3.9271231345139034e-5,-8.947626178113364e-9,-1.2836237102655372e-4,-3.924893370147562e-5,-8.954946573809908e-9,-1.2798264289840097e-4,-3.916561004732102e-5,-8.957459750970044e-9,-1.2766262594780724e-4,-3.9044431207776e-5,-8.955969094344736e-9,-1.2741366297480022e-4,-3.891923161696911e-5,-8.952404162384802e-9,-1.2723168997357461e-4,-3.883000967390067e-5,-8.949679509496966e-9,-1.27093748029005e-4,-3.881487829910734e-5,-8.951097831921052e-9,-1.2695870357679422e-4,-3.8898685950468335e-5,-8.959323326278861e-9,-1.267751555869125e-4,-3.908106724078372e-5,-8.975233990146882e-9,-1.2649729890266872e-4,-3.933002315131596e-5,-8.997238422616873e-9,-1.2610380646318407e-4,-3.958793924368254e-5,-9.021623338742478e-9,-1.2560933231630603e-4,-3.979117636916569e-5,-9.043949542052622e-9,-1.250601064281325e-4,-3.989428803618717e-5,-9.060747657363913e-9,-1.2451535807132656e-4,-3.988519479442612e-5,-9.070550347589108e-9,-1.2402584828578883e-4,-3.978414776435241e-5,-9.073886011159246e-9,-1.236205981940215e-4,-3.963065544738354e-5,-9.07260038223968e-9,-1.2330492479386814e-4,-3.946804731107443e-5,-9.06907791995821e-9,-1.2306592379153069e-4,-3.9332584341514184e-5,-9.065663183276685e-9,-1.228800828847495e-4,-3.9248605036294036e-5,-9.064298093394783e-9,-1.2271974809462355e-4,-3.9227959023930204e-5,-9.066308761174449e-9,-1.2255751932836511e-4,-3.9271422800291845e-5,-9.07230522767062e-9,-1.2236902385258616e-4,-3.937056825807537e-5,-9.082190481665708e-9,-1.2213485314795255e-4,-3.950953825587356e-5,-9.0952670217167e-9,-1.2184219766310128e-4,-3.966680598205627e-5,-9.110401741288104e-9,-1.2148636162885278e-4,-3.981726696521993e-5,-9.12619905571748e-9,-1.2107197250418744e-4,-3.9935062083796264e-5,-9.141156188037495e-9,-1.2061333772280514e-4,-3.9997258003077964e-5,-9.153805898123638e-9,-1.2013331124746263e-4,-3.998800386203117e-5,-9.162873756252375e-9,-1.1966030668005657e-4,-3.990236796499482e-5,-9.167476141008514e-9,-1.1922355711720542e-4,-3.9748848224879454e-5,-9.16735668291749e-9,-1.1884727409519039e-4,-3.9549573910041856e-5,-9.163106709226148e-9,-1.1854484500946807e-4,-3.9337626281964046e-5,-9.156273357353645e-9,-1.1831435745928925e-4,-3.9151554868869843e-5,-9.149247534449742e-9,-1.1813661119487769e-4,-3.9027669333984225e-5,-9.144851147026704e-9,-1.1797667960421902e-4,-3.899110483450793e-5,-9.145628060950681e-9,-1.1778991790734548e-4,-3.904737063700308e-5,-9.15299150810211e-9,-1.175325624741728e-4,-3.9177091689939015e-5,-9.166537396277783e-9,-1.1717523308225653e-4,-3.933731131848976e-5,-9.183898816605155e-9,-1.1671489921126038e-4,-3.947171279421601e-5,-9.20137620436505e-9,-1.1617906373001206e-4,-3.952820645458404e-5,-9.215188158288917e-9,-1.1561807446250038e-4,-3.947694802803824e-5,-9.222771080593783e-9,-1.1508795403832579e-4,-3.931977427169145e-5,-9.223487247363517e-9,-1.1463218392673738e-4,-3.9086539305895255e-5,-9.21849929028679e-9,-1.142709592978943e-4,-3.8821745934336895e-5,-9.210076040428456e-9,-1.1400074179654687e-4,-3.856946273893001e-5,-9.20078618611514e-9,-1.1380094799943816e-4,-3.836294492571193e-5,-9.192886631995141e-9,-1.1364261812623197e-4,-3.822069459714716e-5,-9.1879765359956e-9,-1.1349551541127026e-4,-3.814719957123449e-5,-9.186871306246775e-9,-1.1333258761490281e-4,-3.8135736535814055e-5,-9.189633338269424e-9,-1.1313230069867286e-4,-3.817141008984336e-5,-9.195706259883106e-9,-1.1287982382393343e-4,-3.823369291997683e-5,-9.204097657482591e-9,-1.1256786310513337e-4,-3.829851605574717e-5,-9.213553802888529e-9,-1.1219751803139118e-4,-3.8340376762559447e-5,-9.22269414066259e-9,-1.1177904223869293e-4,-3.833503671167999e-5,-9.230116686601745e-9,-1.1133191698447232e-4,-3.826315103578705e-5,-9.234523255112086e-9,-1.1088335748373442e-4,-3.811461096830071e-5,-9.234910233392347e-9,-1.1046449079987319e-4,-3.789262697562118e-5,-9.230826308386785e-9,-1.1010413601670693e-4,-3.7615910350771354e-5,-9.222627139411862e-9,-1.0982130517158393e-4,-3.731722308065027e-5,-9.21160402770721e-9,-1.0961868889767661e-4,-3.703748088216355e-5,-9.199872312326249e-9,-1.0947969429209346e-4,-3.681630820680492e-5,-9.189976537874282e-9,-1.0937067838856088e-4,-3.668157414423921e-5,-9.184272074658242e-9,-1.0924829447019257e-4,-3.664109554625678e-5,-9.18424056176897e-9,-1.0907020550257687e-4,-3.667913877536005e-5,-9.189954915184103e-9,-1.0880642515705916e-4,-3.6759033088402764e-5,-9.199907267392656e-9,-1.0844824947981108e-4,-3.683171835853091e-5,-9.211326762762983e-9,-1.0801195079731945e-4,-3.684853152381634e-5,-9.220949393187014e-9,-1.0753533107081977e-4,-3.6774884340293415e-5,-9.225997564122934e-9,-1.0706735543311275e-4,-3.6600269285523224e-5,-9.22499909034669e-9,-1.0665405844386353e-4,-3.634060345263345e-5,-9.218128116932532e-9,-1.0632599695639417e-4,-3.6031911809698865e-5,-9.206981038369621e-9,-1.0609189824736788e-4,-3.5718319405997615e-5,-9.19395506438557e-9,-1.0593992002165717e-4,-3.543962353913638e-5,-9.181522987160879e-9,-1.0584432970216088e-4,-3.5222894444418944e-5,-9.171654265312317e-9,-1.0577377509585269e-4,-3.5079615353876484e-5,-9.165501882736301e-9,-1.0569811427307857e-4,-3.500714701067259e-5,-9.163352800650679e-9,-1.0559264518508524e-4,-3.499226206662488e-5,-9.164771801813917e-9,-1.0544004786505433e-4,-3.5014920510423576e-5,-9.16883982493074e-9,-1.0523095671395252e-4,-3.5051391464275926e-5,-9.174389778026609e-9,-1.0496405295401565e-4,-3.507665669286638e-5,-9.180172150801203e-9,-1.0464618835727268e-4,-3.506655725701059e-5,-9.184939032839345e-9,-1.0429252092118758e-4,-3.500030193581135e-5,-9.187495988674884e-9,-1.039261276946598e-4,-3.48637823947789e-5,-9.186800523449334e-9,-1.0357615793353864e-4,-3.46536541858101e-5,-9.182170455832e-9,-1.0327350441689744e-4,-3.4381246691956354e-5,-9.173580720955574e-9,-1.0304364939716516e-4,-3.4074253186413085e-5,-9.161923230549191e-9,-1.0289802766204464e-4,-3.3773697803369534e-5,-9.149039646343281e-9,-1.0282725778280255e-4,-3.3524929232600696e-5,-9.137394421723031e-9,-1.0280029662432293e-4,-3.336441855594974e-5,-9.129418606410994e-9,-1.0277162008556858e-4,-3.3307298589755e-5,-9.126750143428798e-9,-1.0269452672034878e-4,-3.334132380659976e-5,-9.129679824022376e-9,-1.0253530901109662e-4,-3.3430128766657056e-5,-9.137028969170211e-9,-1.0228281327026914e-4,-3.352418168582912e-5,-9.146483951023313e-9,-1.0195058478501845e-4,-3.357486167811767e-5,-9.155243273725392e-9,-1.0157200536431759e-4,-3.354696552794696e-5,-9.160762004820197e-9,-1.0119077576295845e-4,-3.3426523116505044e-5,-9.161389983981338e-9,-1.0084972538708518e-4,-3.322258471680729e-5,-9.1567428994038e-9,-1.0058085340582454e-4,-3.296319855077416e-5,-9.1477233287177e-9,-1.0039895151362752e-4,-3.268715204906611e-5,-9.13620386476633e-9,-1.0030009479870362e-4,-3.243403248359135e-5,-9.124482475916777e-9,-1.0026481761500761e-4,-3.2235448634192776e-5,-9.114685797381227e-9,-1.002643617789796e-4,-3.210959204158094e-5,-9.108299298278605e-9,-1.0026767382911762e-4,-3.205986487873324e-5,-9.105941746310106e-9,-1.0024717983614368e-4,-3.207681406252085e-5,-9.107401083971613e-9,-1.0018239318013028e-4,-3.214184576455504e-5,-9.111860642617299e-9,-1.0006142614792553e-4,-3.223125875718116e-5,-9.118191582072067e-9,-9.988108258667136e-5,-3.2319691729833556e-5,-9.1251948611398e-9,-9.964632646321523e-5,-3.238278403756544e-5,-9.131729422340635e-9,-9.936964829441685e-5,-3.239938756272473e-5,-9.136742201877834e-9,-9.907040628933112e-5,-3.2353857807257145e-5,-9.139278262243717e-9,-9.877374852922494e-5,-3.22388541842853e-5,-9.138569270716463e-9,-9.850827687016545e-5,-3.2058685656720396e-5,-9.13425646517205e-9,-9.830143939364078e-5,-3.1832365719454527e-5,-9.126703455871307e-9,-9.817223068137955e-5,-3.159432274657247e-5,-9.117234559865558e-9,-9.812252419680496e-5,-3.138997708142053e-5,-9.108071823699427e-9,-9.813089016549055e-5,-3.126452109365012e-5,-9.10182146027846e-9,-9.815412222958905e-5,-3.124710157480261e-5,-9.100604093125194e-9,-9.813914491830552e-5,-3.1337456387429606e-5,-9.105211374499513e-9,-9.804153498796248e-5,-3.150322611607172e-5,-9.11475449547984e-9,-9.784154686536156e-5,-3.1690737195221436e-5,-9.127000792101932e-9,-9.754967528636868e-5,-3.1843765894223964e-5,-9.139172281973027e-9,-9.720055366819144e-5,-3.192085559051927e-5,-9.148776150107598e-9,-9.684015327249356e-5,-3.1904655488520306e-5,-9.154172659673398e-9,-9.651257696551535e-5,-3.180236177111936e-5,-9.154822358487452e-9,-9.62504127431069e-5,-3.163996841124646e-5,-9.151274976782774e-9,-9.60698168291565e-5,-3.145374077091899e-5,-9.144961054288212e-9,-9.596984265486474e-5,-3.128151423757891e-5,-9.137828523893096e-9,-9.593497386265119e-5,-3.115537334164327e-5,-9.131885483864583e-9,-9.593976606922285e-5,-3.109656681303233e-5,-9.128751308860314e-9,-9.595447136657913e-5,-3.111310201829616e-5,-9.129337933414458e-9,-9.595049936624177e-5,-3.119999178987712e-5,-9.133745810921736e-9,-9.590477548725535e-5,-3.134160856925637e-5,-9.141380171958168e-9,-9.580246226255177e-5,-3.151529116825042e-5,-9.151211708597388e-9,-9.563797539391283e-5,-3.16952830703858e-5,-9.162060481302314e-9,-9.541467373049275e-5,-3.185625961327806e-5,-9.172796825714589e-9,-9.514380915860319e-5,-3.197615493895167e-5,-9.182419310694514e-9,-9.48431552537596e-5,-3.2038443093745316e-5,-9.190051974883061e-9,-9.453543133902659e-5,-3.2034182987011704e-5,-9.194952520053085e-9,-9.424633486772374e-5,-3.1964113362905855e-5,-9.19662086089252e-9,-9.400158823504068e-5,-3.18408340759899e-5,-9.195038235111904e-9,-9.382220633420554e-5,-3.169033305608827e-5,-9.19095818861579e-9,-9.371778135278529e-5,-3.155104568024974e-5,-9.186065400464665e-9,-9.367914980804929e-5,-3.1468046822899884e-5,-9.182785199579648e-9,-9.367412170350315e-5,-3.1480918711509026e-5,-9.183626205872267e-9,-9.365156347345576e-5,-3.160755715402989e-5,-9.19020294586336e-9,-9.355668865963729e-5,-3.183175941432533e-5,-9.202419571888166e-9,-9.335267713728581e-5,-3.210430056471749e-5,-9.218371347956345e-9,-9.303667906521569e-5,-3.236020861117679e-5,-9.235103819495216e-9,-9.264032211325917e-5,-3.2543385860012626e-5,-9.249755228307922e-9,-9.221548591093086e-5,-3.262483810785695e-5,-9.26041652356236e-9,-9.181507378196565e-5,-3.260698117914955e-5,-9.266413523353581e-9,-9.147845491400025e-5,-3.251632942914815e-5,-9.268166415699002e-9,-9.122520847559706e-5,-3.239154168921172e-5,-9.266889513425695e-9,-9.105564635912965e-5,-3.227244723700269e-5,-9.2642646836748e-9,-9.095498913811478e-5,-3.219240887699171e-5,-9.262101784399266e-9,-9.08987318910297e-5,-3.217406213098664e-5,-9.261994204243429e-9,-9.085793054099272e-5,-3.222762121230062e-5,-9.265019829464496e-9,-9.080392835417925e-5,-3.2351052738033134e-5,-9.271567916967034e-9,-9.071228168806134e-5,-3.253168391369461e-5,-9.28134185774094e-9,-9.056569168800201e-5,-3.2748874236925676e-5,-9.293522462109239e-9,-9.035578936575062e-5,-3.297739074658915e-5,-9.307015941925984e-9,-9.008365802729651e-5,-3.319108369388331e-5,-9.32068773621464e-9,-8.975916266917992e-5,-3.336636099032471e-5,-9.33350717957054e-9,-8.939940883763627e-5,-3.348509546284864e-5,-9.344592008056796e-9,-8.902663953210632e-5,-3.353691102753202e-5,-9.353211946825554e-9,-8.866569313938621e-5,-3.352090126483869e-5,-9.35883336145802e-9,-8.834103551839693e-5,-3.3446806313605515e-5,-9.361261938630803e-9,-8.807317448099914e-5,-3.333560303798455e-5,-9.360872293875294e-9,-8.787408489854848e-5,-3.321895898344246e-5,-9.35881896249169e-9,-8.774178162211213e-5,-3.313618048205553e-5,-9.357051719661311e-9,-8.765551941425548e-5,-3.312704407820512e-5,-9.357971217288903e-9,-8.75747733839315e-5,-3.3219976944643985e-5,-9.363691049098633e-9,-8.74461410016907e-5,-3.341812218722618e-5,-9.375114762347986e-9,-8.7220065678816e-5,-3.3690479945789706e-5,-9.391311854138805e-9,-8.687212463896635e-5,-3.397702246395055e-5,-9.409699673510456e-9,-8.641654285989432e-5,-3.420979174434094e-5,-9.427069578077248e-9,-8.590181922728967e-5,-3.433967242416912e-5,-9.440848661633535e-9,-8.539061620032401e-5,-3.435314501297649e-5,-9.44984340985916e-9,-8.493672097339013e-5,-3.4271269582614564e-5,-9.454233252297501e-9,-8.45709727893319e-5,-3.413584988272384e-5,-9.45513539359531e-9,-8.429907159057472e-5,-3.399315338192215e-5,-9.454135610822126e-9,-8.410710066635141e-5,-3.388222278476255e-5,-9.452932691116559e-9,-8.39694300761685e-5,-3.382927951155617e-5,-9.453065287658341e-9,-8.385576288840835e-5,-3.384661045247159e-5,-9.455682021020762e-9,-8.373632656338405e-5,-3.39337961074905e-5,-9.461372860972362e-9,-8.358545827544782e-5,-3.407987563331084e-5,-9.470111676055729e-9,-8.338408132706894e-5,-3.426590539557689e-5,-9.481331913003121e-9,-8.312136430352067e-5,-3.446778153328366e-5,-9.494105686910258e-9,-8.279564587432089e-5,-3.465932720987703e-5,-9.507355644814983e-9,-8.241450667287213e-5,-3.481564090403858e-5,-9.520030613693909e-9,-8.19937854235765e-5,-3.491646452503521e-5,-9.531207314372736e-9,-8.155553782746594e-5,-3.494912799250977e-5,-9.540129776878508e-9,-8.112514759519504e-5,-3.491073158250606e-5,-9.546243568285508e-9,-8.072780222779476e-5,-3.480934834136822e-5,-9.549283156140592e-9,-8.038456389393579e-5,-3.466401475530754e-5,-9.549426224657887e-9,-8.010831362600719e-5,-3.450333338545574e-5,-9.54746360191402e-9,-7.989980971585162e-5,-3.4362440274271346e-5,-9.544875278633311e-9,-7.974437782718713e-5,-3.427773727254322e-5,-9.543676237437192e-9,-7.961061805952735e-5,-3.427884237468908e-5,-9.545950110564333e-9,-7.945341861300056e-5,-3.437837958684637e-5,-9.553132576768602e-9,-7.922353858236074e-5,-3.456254513569184e-5,-9.56529984876067e-9,-7.888371631202135e-5,-3.478810345141471e-5,-9.580865713138687e-9,-7.842594949679023e-5,-3.499174125974583e-5,-9.597013547859506e-9,-7.787972052612896e-5,-3.5111823238104886e-5,-9.61077091176288e-9,-7.730339317992335e-5,-3.5112654366270275e-5,-9.620133730535203e-9,-7.676190727235558e-5,-3.4997103078953485e-5,-9.624598331243174e-9,-7.630368913524509e-5,-3.480106932702219e-5,-9.62496228087358e-9,-7.594864786183333e-5,-3.457584341541249e-5,-9.622755990773589e-9,-7.568955618661085e-5,-3.4369955647098174e-5,-9.619710536672963e-9,-7.550120699012476e-5,-3.4218070735318946e-5,-9.617407235355379e-9,-7.53506844299028e-5,-3.4137703834965904e-5,-9.617061902570326e-9,-7.520512620818642e-5,-3.4130887726558557e-5,-9.619389347609227e-9,-7.503635353608889e-5,-3.4187713250424024e-5,-9.624544759331411e-9,-7.482323554456231e-5,-3.4289930549698735e-5,-9.63216195796353e-9,-7.455284746952063e-5,-3.441408243113663e-5,-9.641484197830746e-9,-7.422104933606681e-5,-3.4534311144901265e-5,-9.651545196785234e-9,-7.383266982034839e-5,-3.4625139821498456e-5,-9.661340808730684e-9,-7.340115252227199e-5,-3.466447763315732e-5,-9.669951148188559e-9,-7.29472860281118e-5,-3.4636811794840895e-5,-9.676610258024069e-9,-7.249670181575391e-5,-3.453612755069931e-5,-9.680751536488109e-9,-7.207617225320659e-5,-3.436789907206864e-5,-9.682071150846721e-9,-7.170907254595313e-5,-3.414954611457939e-5,-9.680633872207702e-9,-7.141062395474628e-5,-3.39088790257861e-5,-9.676997430229804e-9,-7.118375946617258e-5,-3.3680346460547944e-5,-9.672282908069223e-9,-7.101650731517465e-5,-3.349931488623629e-5,-9.668098481187566e-9,-7.088172523947388e-5,-3.33948756399492e-5,-9.666247026220778e-9,-7.074007291564022e-5,-3.3381977619494795e-5,-9.668224096412342e-9,-7.054706001923604e-5,-3.345448175111133e-5,-9.674640120668145e-9,-7.026421186175586e-5,-3.358188659485631e-5,-9.68481262676929e-9,-6.987236648803186e-5,-3.371310919852034e-5,-9.69679586348801e-9,-6.938216497629712e-5,-3.3789366876241454e-5,-9.707962916374584e-9,-6.883511643281062e-5,-3.376368965928737e-5,-9.715940864866819e-9,-6.829161852117123e-5,-3.3618736578177726e-5,-9.719434092883315e-9,-6.781005922500603e-5,-3.337302815858778e-5,-9.718519685799377e-9,-6.742756648217968e-5,-3.307197650765509e-5,-9.714369050431293e-9,-6.715167109481134e-5,-3.276964162612763e-5,-9.70868572509175e-9,-6.696431540140377e-5,-3.251149483555875e-5,-9.703181489926008e-9,-6.683272014943683e-5,-3.23249804831107e-5,-9.699229967536756e-9,-6.672046595425307e-5,-3.221830593712131e-5,-9.69768646622021e-9,-6.659514882482948e-5,-3.218413792480631e-5,-9.69883261424372e-9,-6.643222102070501e-5,-3.2204715407059465e-5,-9.702422223220024e-9,-6.621623206383647e-5,-3.225639014403438e-5,-9.707811412099236e-9,-6.594084229704343e-5,-3.231307689206832e-5,-9.714134303646899e-9,-6.560847130759857e-5,-3.234892257240772e-5,-9.720473000120565e-9,-6.522984548096849e-5,-3.2340745725612146e-5,-9.725978398839142e-9,-6.482324202400488e-5,-3.227068092840828e-5,-9.72993539962299e-9,-6.441292964570893e-5,-3.212909927557402e-5,-9.731798587080863e-9,-6.402628163536215e-5,-3.1917364877182857e-5,-9.731239839313383e-9,-6.368937200887575e-5,-3.164953586182567e-5,-9.728232443086724e-9,-6.342148728367543e-5,-3.135192586641782e-5,-9.723155862069091e-9,-6.3229704409613e-5,-3.105968506127635e-5,-9.716864968224381e-9,-6.310518395759158e-5,-3.081035792541784e-5,-9.710646408580894e-9,-6.302274843342547e-5,-3.0635492967811876e-5,-9.706009068758345e-9,-6.294459210654977e-5,-3.055226083848084e-5,-9.704313675315504e-9,-6.282790628516361e-5,-3.0557342633427204e-5,-9.706329094269245e-9,-6.263513206345579e-5,-3.062513212686725e-5,-9.711875217337033e-9]} \ No newline at end of file diff --git a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json b/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json deleted file mode 100644 index 76c3a68..0000000 --- a/debug/cesium/Assets/IAU2006_XYS/IAU2006_XYS_9.json +++ /dev/null @@ -1 +0,0 @@ -{"version":"1.0","updated":"2008 Dec 02 20:00:00 UTC","interpolationOrder":9,"xysAlgorithm":"SOFA_DEL_PSI_EPS","sampleZeroJulianEphemerisDate":2442396.5,"stepSizeDays":1,"startIndex":9000,"numberOfSamples":1000,"samples":[-6.23446137633139e-5,-3.071164556992463e-5,-9.719731332151204e-9,-6.19586809157847e-5,-3.076438157665265e-5,-9.727914890125598e-9,-6.150587794551883e-5,-3.073654937098242e-5,-9.734280833128142e-9,-6.1034943329782044e-5,-3.060168191808949e-5,-9.737216476929997e-9,-6.0601038606681665e-5,-3.036287029042388e-5,-9.736134809126074e-9,-6.024888746053323e-5,-3.0051869736974383e-5,-9.731565682588457e-9,-5.999994090928063e-5,-2.971789522758825e-5,-9.724862066857019e-9,-5.9848834314815545e-5,-2.9411354882677176e-5,-9.71770907732456e-9,-5.976923198886019e-5,-2.916989718887004e-5,-9.711648469978378e-9,-5.972462316432335e-5,-2.9011586735457638e-5,-9.707751149758674e-9,-5.967870819510338e-5,-2.8935387308633597e-5,-9.70647628370283e-9,-5.9602228253192676e-5,-2.89259970676844e-5,-9.707695687073557e-9,-5.947591112549622e-5,-2.8959747148304846e-5,-9.710838540242717e-9,-5.929077173354268e-5,-2.9009608654381066e-5,-9.715094525623705e-9,-5.904719567985657e-5,-2.9048773862964067e-5,-9.71960852884578e-9,-5.8753773367436014e-5,-2.9053136374370507e-5,-9.72361187781754e-9,-5.842624685184096e-5,-2.9003338061866847e-5,-9.726475623750488e-9,-5.8086360356536405e-5,-2.8886966009567993e-5,-9.727714468149827e-9,-5.776002754298137e-5,-2.870105742876016e-5,-9.726995392498005e-9,-5.74741651198525e-5,-2.845449366073143e-5,-9.72419549652686e-9,-5.725183467800746e-5,-2.8169256139263426e-5,-9.71951151762819e-9,-5.7106100541113594e-5,-2.7879041181757347e-5,-9.713564114276547e-9,-5.7034227249689176e-5,-2.7623923778951554e-5,-9.707405962417725e-9,-5.7014849044397024e-5,-2.744114170465607e-5,-9.702361282140308e-9,-5.701050918052841e-5,-2.735425399096375e-5,-9.699698830847758e-9,-5.697609718243167e-5,-2.7364576162975244e-5,-9.700232368303819e-9,-5.6871038817050416e-5,-2.7448633497066595e-5,-9.704002376450864e-9,-5.667116781282969e-5,-2.7563221973356075e-5,-9.710182005555758e-9,-5.637617678776307e-5,-2.765667320675218e-5,-9.717264987992663e-9,-5.601027591624169e-5,-2.7682736375781414e-5,-9.723480590272698e-9,-5.561600483675091e-5,-2.7612936285683867e-5,-9.727297528384073e-9,-5.524303937361784e-5,-2.7443956618506687e-5,-9.727850312943274e-9,-5.493513840003189e-5,-2.7197955922928915e-5,-9.725154651913568e-9,-5.471906725691787e-5,-2.6915691607899557e-5,-9.72005407261872e-9,-5.4598911019501836e-5,-2.6644703453075705e-5,-9.713934027115233e-9,-5.455730383150816e-5,-2.64266189741069e-5,-9.708311206523093e-9,-5.4562420129529145e-5,-2.6287768574123053e-5,-9.704433569738843e-9,-5.457752704343605e-5,-2.623553492658023e-5,-9.703008653848694e-9,-5.456957532646678e-5,-2.6260220049275858e-5,-9.704121931504624e-9,-5.451464446828428e-5,-2.6340246599419492e-5,-9.707335422027123e-9,-5.439995050230707e-5,-2.6448131932234545e-5,-9.711898924726039e-9,-5.422339633670513e-5,-2.6555532499365036e-5,-9.716981565914689e-9,-5.399194066121386e-5,-2.663678226094542e-5,-9.721842938139277e-9,-5.37197431734721e-5,-2.667116151947731e-5,-9.725902670942154e-9,-5.342650643560834e-5,-2.6644534881516494e-5,-9.728727486336505e-9,-5.313587618209729e-5,-2.655097739679037e-5,-9.729995225631237e-9,-5.287334596399925e-5,-2.639462790136861e-5,-9.72950469114869e-9,-5.266297173036476e-5,-2.619143036945524e-5,-9.727266597271218e-9,-5.252243553464907e-5,-2.596971389861331e-5,-9.723645863256587e-9,-5.245681707745194e-5,-2.5767877042401753e-5,-9.719459836489783e-9,-5.245295661436816e-5,-2.562748717562385e-5,-9.715914975816248e-9,-5.247784135201871e-5,-2.558182145120203e-5,-9.714321344765071e-9,-5.248433005910525e-5,-2.5643167778965002e-5,-9.71565414605581e-9,-5.242443255043768e-5,-2.5794981125069657e-5,-9.720157774265109e-9,-5.2265507859568556e-5,-2.599424952537427e-5,-9.727205074415084e-9,-5.200192042456586e-5,-2.6184413784918434e-5,-9.735490249337039e-9,-5.165673914621095e-5,-2.6313264574752945e-5,-9.743443035999223e-9,-5.127351919687404e-5,-2.6348054742647138e-5,-9.749667801257827e-9,-5.0902725125982576e-5,-2.6282713166082426e-5,-9.75326720347049e-9,-5.0588284184408174e-5,-2.6136491038281e-5,-9.754009356253531e-9,-5.0357993370069754e-5,-2.5946393683606597e-5,-9.752342082004198e-9,-5.0219232993974796e-5,-2.5756667981670227e-5,-9.749262933352734e-9,-5.015982106504244e-5,-2.5608303159542794e-5,-9.746061951023208e-9,-5.0152906269271166e-5,-2.5530759317958693e-5,-9.743991748123502e-9,-5.016424167598713e-5,-2.5537314473559887e-5,-9.743957229389409e-9,-5.015987799753719e-5,-2.5624510658344092e-5,-9.746324283706057e-9,-5.011244865581866e-5,-2.5775123374663638e-5,-9.750904754883811e-9,-5.000492623338741e-5,-2.596321755352963e-5,-9.757101352467545e-9,-4.9831698223674514e-5,-2.6159651038122543e-5,-9.764134932390347e-9,-4.959756293540752e-5,-2.6336794409959954e-5,-9.77125471218565e-9,-4.9315586018946434e-5,-2.6471880876366733e-5,-9.777857341227311e-9,-4.900467765247903e-5,-2.6549048296052148e-5,-9.78350042703132e-9,-4.868733505302663e-5,-2.6560573645593127e-5,-9.787854781108205e-9,-4.8387507995782974e-5,-2.6507830841147043e-5,-9.790671063781774e-9,-4.812820015775109e-5,-2.640221991296037e-5,-9.791823659827242e-9,-4.792822925558667e-5,-2.626586053182433e-5,-9.791440657019166e-9,-4.7797688235235664e-5,-2.6131146731513124e-5,-9.790058210807481e-9,-4.7732434736905576e-5,-2.603750245204811e-5,-9.788680030956192e-9,-4.770949127982192e-5,-2.602362103765612e-5,-9.788622629016349e-9,-4.768699088683465e-5,-2.6115132800391774e-5,-9.791115783371455e-9,-4.7612514838547504e-5,-2.6311416798164514e-5,-9.796791594098938e-9,-4.744004786748611e-5,-2.6579162837951064e-5,-9.805340798551625e-9,-4.714894275327642e-5,-2.68596183979786e-5,-9.81558384504337e-9,-4.675409408145582e-5,-2.7088789244523173e-5,-9.82593563524379e-9,-4.63007016373858e-5,-2.7220538865820394e-5,-9.834966162719081e-9,-4.584698755933853e-5,-2.7240537539346205e-5,-9.841756608580806e-9,-4.544489497457328e-5,-2.716612358051693e-5,-9.845989371386469e-9,-4.512720869220526e-5,-2.7035870592725035e-5,-9.847894204339548e-9,-4.490350340869352e-5,-2.6895966227287968e-5,-9.848150476851382e-9,-4.4762813526265216e-5,-2.6788619054627426e-5,-9.847749002642056e-9,-4.467974944751262e-5,-2.6744535726717833e-5,-9.847788854326644e-9,-4.4621551529998665e-5,-2.67793858092927e-5,-9.849227199555758e-9,-4.4554711427458415e-5,-2.6893402551401513e-5,-9.852654250504786e-9,-4.445048423814215e-5,-2.7073346152810357e-5,-9.858177344922723e-9,-4.428881976659844e-5,-2.7296183901073322e-5,-9.865455416384905e-9,-4.406041691263042e-5,-2.753370714423536e-5,-9.873857188997167e-9,-4.376691930956634e-5,-2.7757247847319554e-5,-9.882664459772306e-9,-4.3419538053046194e-5,-2.7941805347373132e-5,-9.891234414250543e-9,-4.303660454191013e-5,-2.8069095603610774e-5,-9.899069051818642e-9,-4.264069174434751e-5,-2.8129368229640377e-5,-9.90579879900749e-9,-4.2255769073996823e-5,-2.8122238695490774e-5,-9.911139409555858e-9,-4.1904486407320275e-5,-2.8056896725693683e-5,-9.914892497705433e-9,-4.160543814119917e-5,-2.7951878164291356e-5,-9.9170275201943e-9,-4.137010911506443e-5,-2.783431847991674e-5,-9.917825281106567e-9,-4.119921521788755e-5,-2.7738086497587085e-5,-9.917998408072091e-9,-4.107878264055179e-5,-2.769954625238172e-5,-9.91867215364473e-9,-4.097763615938715e-5,-2.7749689768273665e-5,-9.921139370467895e-9,-4.0849404904229084e-5,-2.7902797854934692e-5,-9.926407792259145e-9,-4.0642441010064514e-5,-2.8145057541786642e-5,-9.934713814169385e-9,-4.031787237599612e-5,-2.8430538779043658e-5,-9.945298702787681e-9,-3.9868810330146976e-5,-2.8691908882654146e-5,-9.9566665170196e-9,-3.932833565054289e-5,-2.8864961803409028e-5,-9.967212572062042e-9,-3.875854394725441e-5,-2.891437192128338e-5,-9.975808367109482e-9,-3.822616913640833e-5,-2.8845330760606945e-5,-9.98201180056612e-9,-3.777943806979286e-5,-2.869613572190929e-5,-9.98594693625295e-9,-3.743725664498184e-5,-2.8519754654329504e-5,-9.98810862349428e-9,-3.719134397363045e-5,-2.8366020937962917e-5,-9.989234069973608e-9,-3.701525587842487e-5,-2.8270836040562245e-5,-9.99020103086058e-9,-3.6874340673262915e-5,-2.8252557552493445E-05,-9.991881928374356e-9,-3.6733633947777075e-5,-2.831302992680173e-5,-9.994958846882884e-9,-3.656313374093195e-5,-2.844073037686516e-5,-9.999766501751608e-9,-3.634100881655143e-5,-2.8614561011922926e-5,-1.000623541918002e-8,-3.605533964519792e-5,-2.8807801587885512e-5,-1.0013957531492734e-8,-3.570465334841229e-5,-2.8992079074828512e-5,-1.0022338457116705e-8,-3.529734816247884e-5,-2.914116709250595e-5,-1.0030762046344616e-8,-3.485006993645185e-5,-2.92343805861204e-5,-1.0038702615702036e-8,-3.4385142229079815e-5,-2.9259238226273796e-5,-1.0045757091094494e-8,-3.3927359255493513e-5,-2.9213049460563632e-5,-1.0051621058011619e-8,-3.350058407226353e-5,-2.9103332940466208e-5,-1.0056066702504657e-8,-3.3124457063630464e-5,-2.8947189972084985e-5,-1.0058976990550987e-8,-3.2811366323358286e-5,-2.8769735723801098e-5,-1.0060445345746964e-8,-3.256375787328263e-5,-2.8601623226662544e-5,-1.0060897143616392e-8,-3.2371816097269846e-5,-2.8475488693954947e-5,-1.0061145174295647e-8,-3.221189052935458e-5,-2.842075314931494e-5,-1.0062287880142022e-8,-3.204694100578321e-5,-2.8456309260332803e-5,-1.0065415316236122e-8,-3.183109485034811e-5,-2.8581804503757855e-5,-1.007118993199182e-8,-3.152026648812525e-5,-2.877048997646703e-5,-1.0079484318373714e-8,-3.108835216793204e-5,-2.8969238348406404e-5,-1.0089312218910324e-8,-3.0542974461299724e-5,-2.911131486583659e-5,-1.0099182540644034e-8,-2.992994780628945e-5,-2.9140766616140142e-5,-1.0107715115987456e-8,-2.9319253695152042e-5,-2.9036541761832005e-5,-1.0114124886146775e-8,-2.877809393386789e-5,-2.8820960229194144e-5,-1.0118307228329601e-8,-2.8346852894650365e-5,-2.8547443251060635e-5,-1.0120625267983092e-8,-2.803055359693186e-5,-2.8277133796314353e-5,-1.0121677071264258e-8,-2.7805852942645365e-5,-2.8058810315545394e-5,-1.0122171969069935e-8,-2.7634885870697304e-5,-2.7919586021142028e-5,-1.0122851241518537e-8,-2.7477784344898564e-5,-2.7865136011979794e-5,-1.0124374041290903e-8,-2.73005681768325e-5,-2.788470342701019e-5,-1.0127178785398857e-8,-2.707876938176712e-5,-2.7957027015369363e-5,-1.0131386580299943e-8,-2.6798428484780897e-5,-2.8055381987984983e-5,-1.0136799525049531e-8,-2.6455880523470634e-5,-2.8151496961065997e-5,-1.0142993650083491e-8,-2.6056989964450905e-5,-2.8218751221123247e-5,-1.0149458252670142e-8,-2.5615936366383297e-5,-2.82350089513246e-5,-1.0155717100330529e-8,-2.5153423477268736e-5,-2.8185218808561722e-5,-1.0161389371918144e-8,-2.469410784372093e-5,-2.80636100261117e-5,-1.0166188348621973e-8,-2.426321414819864e-5,-2.787501653366006e-5,-1.0169893731105325e-8,-2.3882668480529245e-5,-2.763487038497263e-5,-1.01723489245492e-8,-2.3567286234310905e-5,-2.7367666919278267e-5,-1.017351616196784e-8,-2.332156842397692e-5,-2.7103905438103306e-5,-1.017357593949472e-8,-2.3137641969046203e-5,-2.6875705732266855e-5,-1.0173013410180529e-8,-2.299476051584912e-5,-2.6711500845227497E-05,-1.017261329344951e-8,-2.2860705750699917e-5,-2.663018704620786e-5,-1.0173308322342749e-8,-2.2695665047880168e-5,-2.663518611623227e-5,-1.017589092482202e-8,-2.2459337873909423e-5,-2.6709603552242226e-5,-1.0180685150351775e-8,-2.212140867809451e-5,-2.6814846177850375e-5,-1.0187337375833014e-8,-2.1673671732367735e-5,-2.6895869468464378e-5,-1.0194873028803975e-8,-2.1139047774474032e-5,-2.68952440266726e-5,-1.0202044877588625e-8,-2.0570501852735378e-5,-2.6773653165214853e-5,-1.0207808391111026e-8,-2.0035779945461135e-5,-2.6527596262472074e-5,-1.0211650200164242e-8,-1.95929968856085e-5,-2.6192859779762135e-5,-1.0213616507492086e-8,-1.9270119523824262e-5,-2.5830075681245798e-5,-1.021413380368983e-8,-1.905933904298975e-5,-2.5500927912146165e-5,-1.021381348729072e-8,-1.892657043021345e-5,-2.5248592103061754e-5,-1.0213321886218076e-8,-1.8827443033921196e-5,-2.5090146839981592e-5,-1.0213277816654462e-8,-1.8720869387209668e-5,-2.5019585350191788e-5,-1.0214142627298827e-8,-1.8576464284264876e-5,-2.5015668692887527e-5,-1.0216127260583814e-8,-1.8376611843414558e-5,-2.504980617624261e-5,-1.0219166169699748e-8,-1.8115567499788158e-5,-2.5091878000311348e-5,-1.022297593256864e-8,-1.77975879404375e-5,-2.511396168920078e-5,-1.0227169183059294e-8,-1.743505293856026e-5,-2.5092754555130803e-5,-1.0231368833090536e-8,-1.7046707371919865e-5,-2.5011456803880348e-5,-1.0235274298180084e-8,-1.6655740859370975e-5,-2.4861532084328557e-5,-1.023866489114029e-8,-1.6287282974612118e-5,-2.464432330060455e-5,-1.0241365206381334e-8,-1.596501252310151e-5,-2.4372025169081737e-5,-1.024321801882643e-8,-1.570702113141324e-5,-2.406725812436014e-5,-1.0244103967347291e-8,-1.552160951313559e-5,-2.376063009939192e-5,-1.0244017040254267e-8,-1.5404061827608693e-5,-2.3486101581026236e-5,-1.0243161489551215e-8,-1.5335535519959935e-5,-2.327460877469775e-5,-1.0242006517918706e-8,-1.5284891552236783e-5,-2.314712391361825e-5,-1.0241237021644048e-8,-1.5213603604440276e-5,-2.3108728191468194e-5,-1.0241580512137116e-8,-1.5083201808082548e-5,-2.3145172717351075e-5,-1.0243555303704379e-8,-1.4864218209902013e-5,-2.32231622645874e-5,-1.0247243960115732e-8,-1.4545036900022462e-5,-2.3295366098052616e-5,-1.0252208937023976e-8,-1.4138251105215157e-5,-2.3310524416851092e-5,-1.0257614027791928e-8,-1.368146422366092e-5,-2.322748601135849e-5,-1.0262512342819018e-8,-1.322989051622768e-5,-2.3029486169829173e-5,-1.0266164007946504e-8,-1.2840855736179594e-5,-2.2732545405069593e-5,-1.0268236392507776e-8,-1.2555169579427251e-5,-2.238231187733215e-5,-1.0268825150242116e-8,-1.2383914527037539e-5,-2.2038912589209548e-5,-1.0268347802691693e-8,-1.2307249887307113e-5,-2.1756613087809175e-5,-1.0267393640885903e-8,-1.2284812012886326e-5,-2.156813016555327e-5,-1.0266572608916944e-8,-1.2270971936084373e-5,-2.1479552451146128e-5,-1.0266376938115249e-8,-1.2227457536302338e-5,-2.1474911265539056e-5,-1.0267077590847187e-8,-1.2129749205895953e-5,-2.1525263563921737e-5,-1.0268689111523196e-8,-1.1967892292312714e-5,-2.1597450054922837e-5,-1.0271017429226725e-8,-1.174422548889918e-5,-2.166023896731968e-5,-1.0273764819876203e-8,-1.1470257655664928e-5,-2.1687790859828148e-5,-1.0276640831595281e-8,-1.1163872918540682e-5,-2.16613873970703e-5,-1.0279429528370393e-8,-1.0847087574647729e-5,-2.1570437594962387e-5,-1.0281991235380007e-8,-1.0544002989509588e-5,-2.141339145539365e-5,-1.0284216045362617e-8,-1.0278390240021108e-5,-2.1198652865103365e-5,-1.0285974464584003e-8,-1.0070447996162899e-5,-2.0945037086426453e-5,-1.028711043152021e-8,-9.932690801530476e-6,-2.068088652200719e-5,-1.028749799157689e-8,-9.86563644678306e-6,-2.0440844298465255e-5,-1.0287141168707594e-8,-9.854764583517574e-6,-2.0259766952748523e-5,-1.028626273479879e-8,-9.870619619233569e-6,-2.01644508838674e-5,-1.0285319481300823e-8,-9.8733786193769e-6,-2.0165339281957866e-5,-1.0284908068411034e-8,-9.821625784056985e-6,-2.0251252759600633e-5,-1.0285579389915266e-8,-9.683168074476673e-6,-2.0389683901633625e-5,-1.0287635145367275e-8,-9.444561568473699e-6,-2.053338593781372e-5,-1.0290997813059452e-8,-9.116224347150207e-6,-2.063177957102368e-5,-1.0295216467786993e-8,-8.731339354531077e-6,-2.0644132770129046e-5,-1.0299605534523448e-8,-8.338457137712565e-6,-2.055092931652111e-5,-1.030345694288755e-8,-7.98933323349338e-6,-2.0360097137701205e-5,-1.0306242488373733e-8,-7.72506620945875e-6,-2.0105711184980106e-5,-1.0307743277604975e-8,-7.564775484823967e-6,-1.983876173135379e-5,-1.0308080804889762e-8,-7.500921681843046e-6,-1.9612526930376168e-5,-1.0307656350511951e-8,-7.503139782780013e-6,-1.946768074753192e-5,-1.0307019062928134e-8,-7.528820005869814e-6,-1.9422601531502887e-5,-1.0306699910081859e-8,-7.535794278292598e-6,-1.947177763761887e-5,-1.0307063665786794e-8,-7.492269894596984e-6,-1.959128917115925e-5,-1.0308233957531626e-8,-7.381486721375345e-6,-1.974765598713154e-5,-1.0310113143840973e-8,-7.201498312177095e-6,-1.990624677978869e-5,-1.031247670749912e-8,-6.962107167616799e-6,-2.0037161470478344e-5,-1.031508699283958e-8,-6.680993863389137e-6,-2.011834907841151e-5,-1.0317770097194946e-8,-6.380273436048308e-6,-2.0136768138740442e-5,-1.032042648831648e-8,-6.0838277247680745e-6,-2.0088636779103125e-5,-1.0322983928965702e-8,-5.815108860030673e-6,-1.9979521669310532e-5,-1.0325335032912242e-8,-5.594817165694961e-6,-1.9824453315227466e-5,-1.0327309582072665e-8,-5.437930590768389e-6,-1.9647685779100526e-5,-1.0328712972235372e-8,-5.349939383493514e-6,-1.948122710398913e-5,-1.0329423078834094e-8,-5.3228826376455855e-6,-1.936095973346019e-5,-1.0329498903693821e-8,-5.332864110333339e-6,-1.9319532507723174e-5,-1.0329235310495402e-8,-5.341522628441661e-6,-1.9376734531154476e-5,-1.0329117209882681e-8,-5.303353476159965e-6,-1.953039383977173e-5,-1.0329676054612896e-8,-5.17823507516099e-6,-1.9752454282041895e-5,-1.0331308373795825e-8,-4.945019491343102e-6,-1.9993909540435985e-5,-1.0334140752283602e-8,-4.610138350751177e-6,-2.019829297048899e-5,-1.0337995748268947e-8,-4.206914461260477e-6,-2.0318725218684748e-5,-1.0342450652703292e-8,-3.7858145479968068e-6,-2.033162353691172e-5,-1.0346947057188743e-8,-3.3999204340748854e-6,-2.0242322080569558e-5,-1.0350921705190584e-8,-3.090978422107698e-6,-2.0081863583639396e-5,-1.035394277316305e-8,-2.879939472361453e-6,-1.9897267305424163e-5,-1.0355827001534681e-8,-2.7637461044958318e-6,-1.9738805558921248e-5,-1.035669501194934e-8,-2.7182918430026305e-6,-1.9647845328083208e-5,-1.0356930437472887e-8,-2.706078182001334e-6,-1.964815539595743e-5,-1.0357046501868146e-8,-2.6861280184476436e-6,-1.9742416449230415e-5,-1.035751449251452e-8,-2.623356484294166e-6,-1.9914165200530054e-5,-1.0358627867133187e-8,-2.495051690997066e-6,-2.0133848461016657e-5,-1.0360457505484327e-8,-2.2933525948354025e-6,-2.0366613404506264e-5,-1.0362901596694904e-8,-2.024101506874866e-6,-2.057945330065126e-5,-1.036578541391425e-8,-1.703438490176005e-6,-2.0746243231691587e-5,-1.0368950180661795e-8,-1.353670649395772e-6,-2.085034603832491e-5,-1.0372285844231933e-8,-9.995092065925437e-7,-2.0885306200609506e-5,-1.0375703780683756e-8,-6.650892091385618e-7,-2.085449651147433e-5,-1.0379079635308058e-8,-3.715968940342627e-7,-2.0770428531116953e-5,-1.0382217349452199e-8,-1.3503446063713592e-7,-2.065397945826239e-5,-1.0384871607393536e-8,3.635039213145238e-8,-2.053328258334241e-5,-1.0386834569506982e-8,1.451554926153161e-7,-2.0441523455916053e-5,-1.038805057918194e-8,2.0789280435282035e-7,-2.041250688557186e-5,-1.0388697272151172e-8,2.56355366977416e-7,-2.047315309918241e-5,-1.0389176849844525e-8,3.3464806040304173e-7,-2.0633626967615144e-5,-1.039000389350313e-8,4.896682666698106e-7,-2.0878520990299207e-5,-1.0391635630909641e-8,7.558554175414243e-7,-2.1164864508976094e-5,-1.0394332164603972e-8,1.1400137473200676e-6,-2.143168146622313e-5,-1.039811235383832e-8,1.6149011662753742e-6,-2.161972150492724e-5,-1.040278944838272e-8,2.1267889603254867e-6,-2.169252145724684e-5,-1.0408016370122865e-8,2.613791080986166e-6,-2.1648099623553002e-5,-1.0413314414030032e-8,3.0255611796536674e-6,-2.1516600834236966e-5,-1.0418136661790554e-8,3.335896657502066e-6,-2.1347475609993867e-5,-1.0422008383847894e-8,3.5455028334495375e-6,-2.1193595706788387e-5,-1.0424695027343131e-8,3.6771057866818085e-6,-2.1098205117584193e-5,-1.0426297045670991e-8,3.766730983759074e-6,-2.1087212163472165e-5,-1.0427207186394536e-8,3.8543118584060025e-6,-2.116678673670468e-5,-1.0427955059979016e-8,3.97556153049034e-6,-2.1325112935168602e-5,-1.0429021553114722e-8,4.156112148298531e-6,-2.1536968915716497e-5,-1.043071137120023e-8,4.4083884967787636e-6,-2.1769858276116903e-5,-1.0433124870667529e-8,4.731238299426264e-6,-2.199039967092715e-5,-1.0436213182297564e-8,5.111871251593329e-6,-2.216982148981789e-5,-1.0439862617282118e-8,5.5293180610449155e-6,-2.228781360239789e-5,-1.0443951826756803e-8,5.958483105439134e-6,-2.2334471279948907e-5,-1.0448355486385057e-8,6.3739591557127685e-6,-2.2310548005592115e-5,-1.0452908274701619e-8,6.753167656295747e-6,-2.2226596306971968e-5,-1.0457371227043073e-8,7.0788641774440105e-6,-2.2101555638768476e-5,-1.0461442256004719e-8,7.341270437022586e-6,-2.19610250197676e-5,-1.0464828194753588e-8,7.540107011405848e-6,-2.18351220744106e-5,-1.0467357564690674e-8,7.686656069240698e-6,-2.1755428418429816e-5,-1.0469080980364281e-8,7.805377469636384e-6,-2.175014455624397e-5,-1.047029980195859e-8,7.933563002743403e-6,-2.1836872868918745e-5,-1.0471493607166954e-8,8.116719413656968e-6,-2.2013889674084526e-5,-1.0473170238320335e-8,8.397782946960609e-6,-2.2253242470900754e-5,-1.0475713376965965e-8,8.801167458084262e-6,-2.2501424654771112e-5,-1.0479313312473675e-8,9.31809147430383e-6,-2.2692544610459407e-5,-1.0483994091602052e-8,9.903277804372193e-6,-2.2771894060168208e-5,-1.0489651043077342e-8,1.0488693236733184e-5,-2.2718401944810526e-5,-1.0496011071352977e-8,1.1008517592282977e-5,-2.2552507598399298e-5,-1.0502567400688094e-8,1.14214527653244e-5,-2.2325484053898436e-5,-1.0508639692043991e-8,1.1719729539192924e-5,-2.2098427892878435e-5,-1.051360321451119e-8,1.192434757606461e-5,-2.192293983959106e-5,-1.0517149141774825e-8,1.2073148493867486e-5,-2.1830348879371115e-5,-1.0519399549919799e-8,1.2208507379845121e-5,-2.1829582167914723e-5,-1.0520823108331641e-8,1.2368142087573956e-5,-2.1910517424363665e-5,-1.0522026852220468e-8,1.2579647860001937e-5,-2.204963465047748e-5,-1.0523548294514526e-8,1.2858046046948135e-5,-2.2216044306126058e-5,-1.052573427092128e-8,1.3205504635807662e-5,-2.2377097194277054e-5,-1.0528728383253077e-8,1.3612660353343853e-5,-2.2503232700248113e-5,-1.0532528837699294e-8,1.4061128311368573e-5,-2.257179941745656e-5,-1.053705767622001e-8,1.4526835423976653e-5,-2.2569659248670465e-5,-1.0542194374134102e-8,1.4983796312142356e-5,-2.2494425657141477e-5,-1.0547763574333112e-8,1.5407831934948618e-5,-2.2354282969079747e-5,-1.0553504640982075e-8,1.5779770461427512e-5,-2.2166624359187616e-5,-1.0559067684047334e-8,1.608797482690634e-5,-2.195590135189993e-5,-1.0564065337397685e-8,1.6330245854374478e-5,-2.1750905552668204e-5,-1.0568177866410433e-8,1.6515130621988764e-5,-2.1581513602797013e-5,-1.0571271898841906e-8,1.6662595891771928e-5,-2.1474755707688038e-5,-1.0573475716392125e-8,1.680367989659793e-5,-2.144982680559584e-5,-1.0575164031555221e-8,1.6977991855744892e-5,-2.15119081550659e-5,-1.0576851619497795e-8,1.7227451460833117e-5,-2.164590037929872e-5,-1.0579043607594197e-8,1.758528349482335e-5,-2.1813063305720084e-5,-1.0582122319913347e-8,1.8061786594786307e-5,-2.1955189701945334e-5,-1.058632473338257e-8,1.8632948981106676e-5,-2.200995658499017e-5,-1.0591773118012249e-8,1.9241195983456193e-5,-2.193466323120593e-5,-1.0598445172373046e-8,1.981317133003406e-5,-2.1726452282952587e-5,-1.0606040069575834e-8,2.0287448616256157e-5,-2.1425281858291863e-5,-1.061388459734303e-8,2.0636332778655594e-5,-2.109672690297479e-5,-1.0621077002227759e-8,2.087033260256244e-5,-2.0805852875933422e-5,-1.0626847060734854e-8,2.1026869693195923e-5,-2.0597119217422514e-5,-1.0630882019558624e-8,2.115329294074093e-5,-2.0487273010198692e-5,-1.0633405474768798e-8,2.129300028400665e-5,-2.0468775249628576e-5,-1.0635008899056331e-8,2.1477766769687902e-5,-2.0517857674518222e-5,-1.0636384654839218e-8,2.172530639983127e-5,-2.0602735888928814e-5,-1.0638109815842078e-8,2.203989369531137e-5,-2.0690072956350867e-5,-1.0640550610319622e-8,2.2414327228279076e-5,-2.0749586688981025e-5,-1.0643876480653403e-8,2.2832428864176618e-5,-2.075731437602081e-5,-1.0648123545462657e-8,2.327186373709147e-5,-2.06979052512023e-5,-1.065324691100052e-8,2.370725263408254e-5,-2.056607264478361e-5,-1.065912813728469e-8,2.4113571523498897e-5,-2.0367140342581537e-5,-1.0665546197757955e-8,2.4469666599175597e-5,-2.011644324456059e-5,-1.067215081453571e-8,2.4761457155718238e-5,-1.9837455761494462e-5,-1.0678483547801098e-8,2.4984396740016067e-5,-1.9558825643028435e-5,-1.0684064625935296e-8,2.5144939672969598e-5,-1.9310587473940774e-5,-1.0688525639022025e-8,2.5260818881569855e-5,-1.9119802585786575e-5,-1.06917361236997e-8,2.535994562171527e-5,-1.9005914717674657e-5,-1.069386581323808e-8,2.5477696466233576e-5,-1.897609088271257e-5,-1.0695349149176802e-8,2.5652094341733997e-5,-1.902096367210599e-5,-1.0696767956414568e-8,2.5916298087693046e-5,-1.9111975005796678e-5,-1.0698709732170148e-8,2.628859728374691e-5,-1.9202643001807574e-5,-1.0701666562329869e-8,2.6762094197675117e-5,-1.9236556751696734e-5,-1.0705996336353121e-8,2.729911355674748e-5,-1.9163344524585584e-5,-1.0711891767678148e-8,2.783684602254258e-5,-1.895885387153898e-5,-1.0719277613221644e-8,2.8306670586864564e-5,-1.8639334239086277e-5,-1.072766183557865e-8,2.8659855505782475e-5,-1.8258763113995928e-5,-1.073612159190717e-8,2.8885279659063856e-5,-1.7888184927921706e-5,-1.0743575505291491e-8,2.9009231738796605e-5,-1.7588764782654586e-5,-1.0749225136080199e-8,2.908000233439939e-5,-1.7393518711195572e-5,-1.0752864147570606e-8,2.914855079008243e-5,-1.7304111401313012e-5,-1.0754868997586099e-8,2.9254770735155143e-5,-1.7298721919266967e-5,-1.0755947029287413e-8,2.9421960148790195e-5,-1.73433769434448e-5,-1.0756840443938963e-8,2.9657262395368594e-5,-1.7401543433202763e-5,-1.075813349050785e-8,2.9954830790562838e-5,-1.7440335048629465e-5,-1.0760197584755174e-8,3.0299471035757358e-5,-1.7433879737981824e-5,-1.0763229561035464e-8,3.066988743140981e-5,-1.7365039408173015e-5,-1.0767308977273792e-8,3.104156445903691e-5,-1.7226340848682806e-5,-1.0772421289059723e-8,3.138958150404849e-5,-1.7020431608455362e-5,-1.0778433463519163e-8,3.169160978062888e-5,-1.67599800034654e-5,-1.0785050830896731e-8,3.193113385062856e-5,-1.6466649719056538e-5,-1.0791801522036606e-8,3.2100549457274216e-5,-1.6168735086317945e-5,-1.0798090040294278e-8,3.2203473041458363e-5,-1.5897357896149383e-5,-1.080332573716205e-8,3.225558795119785e-5,-1.568153341658853e-5,-1.0807089151843031e-8,3.2283527758016355e-5,-1.5542734995758057e-5,-1.0809272801144117e-8,3.232156973954858e-5,-1.548986537631878e-5,-1.0810136690642487e-8,3.24062788787755e-5,-1.551564386066977e-5,-1.0810253821627843E-08,3.256954672694955e-5,-1.5595319915829232e-5,-1.0810370807169095e-8,3.2830743045217534e-5,-1.5688646392023816e-5,-1.0811243374832355e-8,3.318930936264058e-5,-1.5746136030541182e-5,-1.0813499406816032e-8,3.362016828548337e-5,-1.572010074949781e-5,-1.0817540474292183e-8,3.4075238666891787e-5,-1.5579179787124913e-5,-1.0823450353064908e-8,3.449382518613816e-5,-1.532196370613026e-5,-1.0830892582439516e-8,3.482107455406541e-5,-1.498254328611866e-5,-1.0839063244369992e-8,3.502767239053273e-5,-1.4622079522363778e-5,-1.0846829814097262e-8,3.5120439857015004e-5,-1.4307820231652071e-5,-1.085309302508078e-8,3.51375862864246e-5,-1.4089687106817873e-5,-1.085719959088525e-8,3.513199200269295e-5,-1.3986345854532377e-5,-1.085914650566585e-8,3.51525500412995e-5,-1.3985560988209588e-5,-1.085947705163363e-8,3.523209339490654e-5,-1.4054646803086456e-5,-1.0858988747294016e-8,3.5384088933798624e-5,-1.4153334684894148e-5,-1.0858452300955869e-8,3.560538153213612e-5,-1.4243709791482467e-5,-1.0858457682387729e-8,3.5881218350812025e-5,-1.4295764431560704e-5,-1.0859389106431877e-8,3.619005612992247e-5,-1.4289538747822578e-5,-1.0861464399875234e-8,3.650727263331189e-5,-1.4215445163763979e-5,-1.0864770150441248e-8,3.680795793798622e-5,-1.4073968871802461e-5,-1.0869255064842456e-8,3.7069338849790505e-5,-1.3875233842953704e-5,-1.0874690311021376e-8,3.7273324238066565e-5,-1.3638322204225281e-5,-1.0880636211450608e-8,3.740935211446729e-5,-1.338984019635138e-5,-1.0886460859978193e-8,3.747723555199965e-5,-1.3161108246832657e-5,-1.0891439508632244e-8,3.748918890039127e-5,-1.2983612439641286e-5,-1.0894923864558378e-8,3.746992648426565e-5,-1.2882969889767162e-5,-1.0896531846094513e-8,3.745388166964016e-5,-1.2872486930655807e-5,-1.089628939077259e-8,3.7479301400060466e-5,-1.2948111531254483e-5,-1.089466332568615e-8,3.758006931596514e-5,-1.3086710784613064e-5,-1.0892467653005773e-8,3.7777099336497654e-5,-1.3248905734680901e-5,-1.0890674230236611e-8,3.807156828641263e-5,-1.3386503835473725e-5,-1.0890190192257392e-8,3.844207700891592e-5,-1.3453370708504295e-5,-1.0891659080748418e-8,3.8847217212184006e-5,-1.341755372714709e-5,-1.0895313751720727e-8,3.9234030267991595e-5,-1.3271607631699584e-5,-1.090089279363746e-8,3.955132226947631e-5,-1.3037539781839813e-5,-1.0907643242370493e-8,3.976462669241938e-5,-1.2763223288738137e-5,-1.0914452499003047e-8,3.9867493531828635e-5,-1.250952451713426e-5,-1.0920130006578416e-8,3.988372523989806e-5,-1.2331758085782543e-5,-1.0923768775661982e-8,3.9858740281902724e-5,-1.226291312067013e-5,-1.0925025267279314e-8,3.98438771345933e-5,-1.2305852412647015e-5,-1.0924174807119913e-8,3.988096864166715e-5,-1.2436775734862486e-5,-1.092193559817097e-8,3.9993234799773925e-5,-1.2616327199137168e-5,-1.0919186656117713e-8,4.0184029323987886e-5,-1.2802124998079611e-5,-1.0916728214422174e-8,4.0441034122307655e-5,-1.295806215039957e-5,-1.0915158387722742e-8,4.07423430323965e-5,-1.3059008181614689e-5,-1.0914851840032176e-8,4.106194258997215e-5,-1.309190696252388e-5,-1.0915982377055156e-8,4.137369026554492e-5,-1.305496471159586e-5,-1.0918538217819229e-8,4.165397699143815e-5,-1.295627528662622e-5,-1.0922312589289403e-8,4.188372567499801e-5,-1.281253335343146e-5,-1.0926886273075621e-8,4.205038798547874e-5,-1.2647779157268254e-5,-1.0931637253225023e-8,4.2150263329725885e-5,-1.2491600175957169e-5,-1.0935808929506866e-8,4.219089514943613e-5,-1.2376014975777942e-5,-1.0938645719799141e-8,4.219264556971658e-5,-1.2330443038611213e-5,-1.0939574041035733e-8,4.2187994684927e-5,-1.2374868917154073e-5,-1.0938381011529256e-8,4.221708942536862e-5,-1.251262722220375e-5,-1.0935330563847715e-8,4.2319148750577894e-5,-1.272563608677644e-5,-1.0931164753811414e-8,4.252146931834362e-5,-1.2975210570017808e-5,-1.0926967333923104e-8,4.282981205890698e-5,-1.3209939979367455e-5,-1.0923913734952636e-8,4.3224317253663856e-5,-1.3379021269503886e-5,-1.092296888156952e-8,4.3663191015489984e-5,-1.3446687017306154e-5,-1.0924616375420668e-8,4.40932553261884e-5,-1.3402692615521834e-5,-1.0928699864093918e-8,4.446391154055205e-5,-1.3265486287865059e-5,-1.0934436131087437e-8,4.4740262897078254e-5,-1.3077370375528966e-5,-1.0940609312170373e-8,4.491180449520049e-5,-1.2893262674070154e-5,-1.0945898968800855e-8,4.49944176700801e-5,-1.2766207079580588e-5,-1.0949239480507803e-8,4.502512200115446e-5,-1.273370298418019e-5,-1.0950092267772875e-8,4.505116850684658e-5,-1.2808910095088956e-5,-1.0948539845884595e-8,4.511705275984765e-5,-1.2979305349759284e-5,-1.0945188231944347e-8,4.5253768849291526e-5,-1.3212635289537497e-5,-1.0940942427650663e-8,4.547343858202198e-5,-1.3467274984818715e-5,-1.093675586758881e-8,4.576991139681106e-5,-1.370288962080165e-5,-1.0933437996680767e-8,4.6123562686564354e-5,-1.3888173614010929e-5,-1.0931552459312198e-8,4.6507586318521756e-5,-1.4004532581867268e-5,-1.0931388495325245e-8,4.689364295154041e-5,-1.404638935558007e-5,-1.0932970781736282e-8,4.725592017948633e-5,-1.401955872819049e-5,-1.0936077710211673e-8,4.7573669880768315e-5,-1.3939013934426217e-5,-1.0940262282537435e-8,4.783282623871706e-5,-1.3826794886489019e-5,-1.0944887017204275e-8,4.8027394648472436e-5,-1.3710116999369636e-5,-1.0949190756732851e-8,4.816102679731794e-5,-1.361918978051325e-5,-1.095239527820225e-8,4.824866180786038e-5,-1.3583965343721564e-5,-1.0953844774146032e-8,4.8317389669767263E-05,-1.3629077500997938e-5,-1.0953156144793383e-8,4.8404937665998705e-5,-1.3766894228811147e-5,-1.0950352515756894e-8,4.85539270343216e-5,-1.3990186698127629e-5,-1.094594628661613e-8,4.880120852726276e-5,-1.4267952993854126e-5,-1.0940929580088114e-8,4.9164604434804093e-5,-1.4548760923785778e-5,-1.0936627198037842e-8,4.963284107903462e-5,-1.4773613411439147e-5,-1.0934389782899522e-8,5.016508945338154e-5,-1.4894876338232566e-5,-1.0935178671721424e-8,5.070227547728938e-5,-1.4892932210451892e-5,-1.0939190020118924e-8,5.118560276541905e-5,-1.4782534477633037e-5,-1.0945713139716886e-8,5.157392379064546e-5,-1.4606625431828425e-5,-1.095332893238933e-8,5.185338963389235e-5,-1.4421810233716862e-5,-1.0960371481365232e-8,5.203770610741841e-5,-1.4282157086463557e-5,-1.0965440644733544e-8,5.216122418436789e-5,-1.422646572966351e-5,-1.0967760623641757e-8,5.226841451573015e-5,-1.4271353392898255e-5,-1.0967288706004566e-8,5.2402901302713924e-5,-1.4410350265664105e-5,-1.0964601820102489e-8,5.2598368352539667e-5,-1.4617978010402564e-5,-1.0960658830434025e-8,5.2872840342696726e-5,-1.4857176091440661e-5,-1.0956540629101209e-8,5.322704970841118e-5,-1.5088075305254894e-5,-1.0953236332976238e-8,5.364663492512684e-5,-1.5275993367745722e-5,-1.0951500603035131e-8,5.410696514106418e-5,-1.539698624027727e-5,-1.095178087382418e-8,5.457893133346143e-5,-1.5440298921740233e-5,-1.0954194761142424e-8,5.50342383558213e-5,-1.540806131983914e-5,-1.0958542424790509e-8,5.544932692850507e-5,-1.5313173657149106e-5,-1.096434545062792e-8,5.580777697902618e-5,-1.5176465955951547e-5,-1.0970910845978872e-8,5.610161114139606e-5,-1.502389729946295e-5,-1.0977420875607443e-8,5.633207828382777e-5,-1.4883981469539802e-5,-1.0983045974823884e-8,5.651030827952544e-5,-1.4785143953867945e-5,-1.0987069782932988e-8,5.6657843445042456E-05,-1.475241870537396e-5,-1.098900869828785e-8,5.68064043339674e-5,-1.480281230944594e-5,-1.0988713689162896e-8,5.6995445257911e-5,-1.493919710310919e-5,-1.0986451645489575e-8,5.726569833881333e-5,-1.5144085304198487e-5,-1.0982961665724738e-8,5.7647873217573626e-5,-1.537676462498628e-5,-1.097945336000276e-8,5.8148783022304093e-5,-1.5578618482013747e-5,-1.0977468969124607e-8,5.8741629395056166e-5,-1.5689303712884644e-5,-1.0978518978595156e-8,5.936880170599819e-5,-1.5669452550320848e-5,-1.0983516728908241e-8,5.995982222233368e-5,-1.5518212400740367e-5,-1.0992265385709335e-8,6.045655109961612e-5,-1.5274524989521094e-5,-1.100336461316192e-8,6.083213388443301e-5,-1.500128721893175e-5,-1.1014687824535179e-8,6.109517706905173e-5,-1.476232162248893e-5,-1.1024177858417426e-8,6.128078642644321e-5,-1.4603933293794295e-5,-1.1030515003487311e-8,6.14360565632286e-5,-1.4546623392676997e-5,-1.1033379525122147e-8,6.160676979381152e-5,-1.4585862441534919e-5,-1.1033325129027129e-8,6.182836446050053e-5,-1.4698115916188576e-5,-1.103144492460905e-8,6.212137962144658e-5,-1.4848716247797194e-5,-1.1029016395917635e-8,6.249043218855688e-5,-1.499957486442772e-5,-1.1027231651313366e-8,6.292575713367833e-5,-1.5115848315998846e-5,-1.1027035010884309e-8,6.340659244996193e-5,-1.5171078050374148e-5,-1.1029042575856415e-8,6.39057084276371e-5,-1.5150397168465046e-5,-1.1033511588368882e-8,6.439430170432664e-5,-1.5051632264841132e-5,-1.1040338007405747e-8,6.484651366485014e-5,-1.4884453987230887e-5,-1.1049078955669309e-8,6.524295871579131e-5,-1.4668006957840344e-5,-1.1059009733669053e-8,6.557293822920603e-5,-1.4427696477046931e-5,-1.106922243082436e-8,6.583546021894932e-5,-1.4191801641639522e-5,-1.1078757988711264e-8,6.603942429151922e-5,-1.3988227254888844e-5,-1.1086754263160646e-8,6.620324712438544e-5,-1.3841351539194972e-5,-1.1092584244638724e-8,6.635399675116738e-5,-1.376871069724712e-5,-1.1095960923446284e-8,6.652567539394843e-5,-1.377713360613599e-5,-1.1097002545640146e-8,6.675562941069513e-5,-1.3858317394900903e-5,-1.109626926494747e-8,6.707780774668518e-5,-1.3985038180359028e-5,-1.1094780789983727e-8,6.751241829499467e-5,-1.4110813964274978e-5,-1.1093985695546706e-8,6.805398404589733e-5,-1.4176969697956724e-5,-1.1095592658974113e-8,6.866384590550756e-5,-1.4129570457204582e-5,-1.1101140430408416e-8,6.927548828970987e-5,-1.3942193950697216e-5,-1.1111323602410547e-8,6.981586375490909e-5,-1.3632135932979031e-5,-1.1125409233657399e-8,7.023376113526364e-5,-1.3257268294156674e-5,-1.1141255562749935e-8,7.051856313032443e-5,-1.2893039413830864e-5,-1.1156102060587921e-8,7.06990864524921e-5,-1.2603544775620664e-5,-1.1167680283957444e-8,7.082667807448929e-5,-1.2422764469719474e-5,-1.1174960488599823e-8,7.095499623308146e-5,-1.2351727669469376e-5,-1.1178226969257668e-8,7.112590319904138e-5,-1.2366745927631601e-5,-1.1178667858819269e-8,7.136360199813396e-5,-1.2431038164156497e-5,-1.117783577309838e-8,7.167471562637514e-5,-1.2504825814492575e-5,-1.1177222677717251e-8,7.20513073116622e-5,-1.2552337068439892e-5,-1.1178022183958767e-8,7.247483939519828e-5,-1.2546082636510993e-5,-1.1181041603564716e-8,7.292025057925622e-5,-1.2469246626440453e-5,-1.1186692155499417e-8,7.335996924164086e-5,-1.2316707228409032e-5,-1.1195001134773114e-8,7.376777185043507e-5,-1.2094851223874839e-5,-1.1205627668886617e-8,7.41223204444516e-5,-1.1820215935622424e-5,-1.1217891224875756e-8,7.441008632046292e-5,-1.1516986111407657e-5,-1.1230839822596301e-8,7.462727595584035e-5,-1.121357421653002e-5,-1.1243374292470443e-8,7.478054238337684e-5,-1.0938760084437633e-5,-1.1254418929902535e-8,7.48865297826223e-5,-1.0717820966566956e-5,-1.1263107130437595e-8,7.497036903850236e-5,-1.0568904309436396e-5,-1.1268942299422062e-8,7.506321783824891e-5,-1.0499811842188604e-5,-1.1271900341615984e-8,7.519881869817697e-5,-1.0505257389349248e-5,-1.1272463646632064e-8,7.540869080999105e-5,-1.056479190521469e-5,-1.1271600290428743e-8,7.571546174872404e-5,-1.0642370424357846e-5,-1.1270700670162078e-8,7.61246291272292e-5,-1.0689513165947758e-5,-1.1271446895380041e-8,7.661678435223831e-5,-1.0654320433158899e-5,-1.1275546237460665e-8,7.71448147730922e-5,-1.0497201563490087e-5,-1.1284249952033519e-8,7.764205458950148e-5,-1.0209521680141907e-5,-1.1297711821998253e-8,7.804347387462571e-5,-9.824875614952504e-6,-1.1314530735816466e-8,7.831185681715099e-5,-9.411967862924406e-6,-1.133196933848187e-8,7.84533388443129e-5,-9.048847109690942e-6,-1.134696307423481e-8,7.851205357156255e-5,-8.792740654590127e-6,-1.1357361358067248e-8,7.854866512846068e-5,-8.662856311024963e-6,-1.1362623719687482e-8,7.861729582289454e-5,-8.642245361453145e-6,-1.1363680031735883e-8,7.875197622822127e-5,-8.691794929389404e-6,-1.1362277223349593e-8,7.896418283479847e-5,-8.765841602924702e-6,-1.1360297098831838e-8,7.924709191886245e-5,-8.823284793479496e-6,-1.1359315593534433e-8,7.95818503140842e-5,-8.833269852576455e-6,-1.1360426738010168e-8,7.994322616848324e-5,-8.777041367256928e-6,-1.1364233495034238e-8,8.030394161526125e-5,-8.647855079034407e-6,-1.1370898907447606e-8,8.063800618353983e-5,-8.450099063104403e-6,-1.13801913797548e-8,8.092351739561471e-5,-8.197986994855086e-6,-1.139151507594174e-8,8.114517708580553e-5,-7.913748681025796e-6,-1.1403947928868321e-8,8.129649091610874e-5,-7.625053643838189e-6,-1.1416325803923466e-8,8.13812925714093e-5,-7.361498470228608e-6,-1.1427396960663914e-8,8.141408671042445e-5,-7.150374877007221e-6,-1.143603391639288e-8,8.141887617018724e-5,-7.012246466696308e-6,-1.1441458496670813e-8,8.142639354204631e-5,-6.9569547070524565e-6,-1.1443423882852663e-8,8.146989071188947e-5,-6.980733178277085e-6,-1.1442305223764873e-8,8.157988588747373e-5,-7.0650386142183395e-6,-1.1439079612900346e-8,8.177834068751832e-5,-7.177494714956207e-6,-1.1435206339439226e-8,8.207274310460953e-5,-7.275416748518267e-6,-1.1432431508335396e-8,8.24510452990543e-5,-7.312655501458012e-6,-1.1432513684254343e-8,8.287939415777408e-5,-7.250137973215447e-6,-1.14368513607406e-8,8.330545375814392e-5,-7.068926237825051e-6,-1.1446018896562171e-8,8.366980628525399e-5,-6.781801504635946e-6,-1.1459328098698728e-8,8.392475651610919e-5,-6.436424280153653e-6,-1.147469615909485e-8,8.405365240588183e-5,-6.103856380286995e-6,-1.1489120917511639e-8,8.407948845031888e-5,-5.853970011362507e-6,-1.1499731792143241e-8,8.405583920133282e-5,-5.729599983451548e-6,-1.1504887252346792e-8,8.404479026302159e-5,-5.733734864168806e-6,-1.1504668019600196e-8,8.409487550610288e-5,-5.8348805222652595e-6,-1.1500567610929476e-8,8.422953279231353e-5,-5.983832090974439e-6,-1.1494726575699467e-8,8.44475135877195e-5,-6.130958240035688e-6,-1.1489203384318796e-8,8.473016954110671e-5,-6.237308506807428e-6,-1.1485549198160168e-8,8.504997460131159e-5,-6.278822698858891e-6,-1.1484684339034437e-8,8.537722202659041e-5,-6.24604350020151e-6,-1.1486947837148801e-8,8.56843216611937e-5,-6.141962433049987e-6,-1.149219497561945e-8,8.594839135529726e-5,-5.979584647913548e-6,-1.1499878642207251e-8,8.615303700245352e-5,-5.7797022876110846e-6,-1.1509108282661373e-8,8.628989016331793e-5,-5.568700527437504e-6,-1.1518717192858226e-8,8.636003840534361e-5,-5.3759285752394796e-6,-1.1527377565087991e-8,8.637502793286532e-5,-5.230188533993722e-6,-1.1533784620290696e-8,8.635675385529202e-5,-5.155286769746592e-6,-1.1536897415011626e-8,8.63355224875678e-5,-5.165182714998419e-6,-1.1536184302568082e-8,8.634591892159362e-5,-5.259775561616308e-6,-1.1531803962477889e-8,8.642073115040163e-5,-5.4226586174864975e-6,-1.152465872996433e-8,8.65839351077441e-5,-5.622046886179956e-6,-1.1516287597576716e-8,8.684430755827092e-5,-5.8153923203604484e-6,-1.1508609070013934e-8,8.719130249188195e-5,-5.95728092691672e-6,-1.1503558232602766e-8,8.759455242721197e-5,-6.009491974966764e-6,-1.150267039330855e-8,8.800800850055604e-5,-5.95147211987009e-6,-1.1506668360848453e-8,8.837913286366379e-5,-5.7886627769627485e-6,-1.1515138637633855e-8,8.866225574551908e-5,-5.555373933240397e-6,-1.1526431984484355e-8,8.883301404506053e-5,-5.309063543337344e-6,-1.1537937388838975e-8,8.889840023466499e-5,-5.115164449411993e-6,-1.1546777723907165e-8,8.889656623832367e-5,-5.026383401286591e-6,-1.1550737585091733e-8,8.888441107440784e-5,-5.065123260574208e-6,-1.154900893343037e-8,8.891787950494431e-5,-5.21765631045529e-6,-1.1542374452129857e-8,8.903443511633252e-5,-5.442337151279303e-6,-1.1532775965427147e-8,8.924516874443352e-5,-5.686194762207577e-6,-1.1522563607641413e-8,8.953744138069596e-5,-5.90108623252899e-6,-1.1513813593362013e-8,8.988360538093972e-5,-6.053558073616242e-6,-1.1507938669655695e-8,9.025045498071756e-5,-6.127657333921901e-6,-1.1505594789433005e-8,9.06062942791196e-5,-6.123105910016481e-6,-1.1506768232466762e-8,9.092503624012695e-5,-6.051676523403866e-6,-1.1510921388865986e-8,9.118813404710323e-5,-5.933591903961702e-6,-1.1517128603869335e-8,9.138545565664259e-5,-5.794575433039127e-6,-1.1524189430321015e-8,9.151591271894805e-5,-5.66334449111308e-6,-1.1530742462923101e-8,9.158811085003475e-5,-5.568946066028995e-6,-1.1535410442970295e-8,9.162072310193748e-5,-5.537335450390624e-6,-1.1536995250412474e-8,9.164182458652515e-5,-5.58694690455087e-6,-1.1534711584048976e-8,9.168620213239225e-5,-5.723696108466005e-6,-1.152841879943091e-8,9.178992959661302e-5,-5.936777568263604e-6,-1.1518779345972147e-8,9.198249027190544e-5,-6.197337314678204e-6,-1.1507263760530225e-8,9.227820821065515e-5,-6.461935833751877e-6,-1.1495944136778205e-8,9.266993147833276e-5,-6.6812950165578724e-6,-1.1487076652143873e-8,9.31278874804674e-5,-6.8125918600802576e-6,-1.1482550916430714e-8,9.360510332344588e-5,-6.831677883244499e-6,-1.1483350519634967e-8,9.404841563306238e-5,-6.741163582188049e-6,-1.1489195433374426e-8,9.441208477567966e-5,-6.57151688468949e-6,-1.1498505989231926e-8,9.467017588287623e-5,-6.374429642810231e-6,-1.1508741618074349e-8,9.482411049793587e-5,-6.20983930092064e-6,-1.1517053215341923e-8,9.490280063124226e-5,-6.12986333255191e-6,-1.1521069363394867e-8,9.49546446025167e-5,-6.164351503798526e-6,-1.1519561592846616e-8,9.503343971679581e-5,-6.312991752990002e-6,-1.1512751366586703e-8,9.518296893644879e-5,-6.546957614728857e-6,-1.1502154648514587e-8,9.54258618892581e-5,-6.819249442704191e-6,-1.1490053068776307e-8,9.576033063758811e-5,-7.079181183195936e-6,-1.147882172959562e-8,9.616458460450145e-5,-7.285251177458946e-6,-1.1470361003639736e-8,9.660557779129375e-5,-7.412533789784719e-6,-1.1465779950685564e-8,9.70480253349657e-5,-7.454061673847203e-6,-1.1465342600263835e-8,9.746107955264904e-5,-7.418094434670623e-6,-1.1468592015480105e-8,9.782204348641294e-5,-7.323724614127018e-6,-1.1474549309030842e-8,9.811778004559563e-5,-7.196576837891347e-6,-1.1481914889362466e-8,9.834488254743438e-5,-7.065336659585935e-6,-1.1489242896633806e-8,9.85094970832235e-5,-6.958985648334306e-6,-1.1495095179541215e-8,9.862717385640469e-5,-6.90413645241066e-6,-1.1498196338733799e-8,9.8722513616579e-5,-6.921815594705209e-6,-1.1497607920369037e-8,9.882784972662761e-5,-7.023345607949021e-6,-1.1492923262731212e-8,9.897986411696639e-5,-7.205665995436498e-6,-1.148446098537155e-8,9.921318771121227e-5,-7.447586546246423e-6,-1.1473395307025696e-8,9.955120060763667e-5,-7.709619295232465e-6,-1.146172404791077e-8,9.999642762624879e-5,-7.940035443749168e-6,-1.1451968869426325e-8,1.0052494732063333e-4,-8.087647613726074e-6,-1.1446579632065744e-8,1.0108913471724907e-4,-8.117933472199266e-6,-1.1447169892722494e-8,1.016297505105532e-4,-8.025879558080473e-6,-1.1453875399227287e-8,1.0209339869072522e-4,-7.839290063002508e-6,-1.1465163461608666e-8,1.0244827762320929e-4,-7.610760831100816e-6,-1.1478236898852096e-8,1.0269227243374284e-4,-7.4019405703705335e-6,-1.1489879553959839e-8,1.0285149371859283e-4,-7.266368505272329e-6,-1.1497391887392736e-8,1.0297118136782965e-4,-7.236336161787715e-6,-1.1499280042755185e-8,1.0310270675950262e-4,-7.316726316035047e-6,-1.1495523318503002e-8,1.0329056362595021e-4,-7.486349598341804e-6,-1.148742159707798e-8,1.0356255453322497e-4,-7.705430672579288e-6,-1.1477144225777614e-8,1.0392519544575366e-4,-7.926623660176716e-6,-1.1467147125266295e-8,1.0436481553339658e-4,-8.106347722194308e-6,-1.1459615835618466e-8,1.048532139215313e-4,-8.213492770649762e-6,-1.1456056721422704e-8,1.0535556460250918e-4,-8.23373787288498e-6,-1.1457100913129077e-8,1.0583805546501133e-4,-8.169439622731186e-6,-1.1462518463608636e-8,1.0627352735391126e-4,-8.036400609196678e-6,-1.1471385560392026e-8,1.066445607363988e-4,-7.859266130393587e-6,-1.1482325768957206e-8,1.0694441306334356e-4,-7.666977342055716e-6,-1.1493758257334187e-8,1.0717666268625118e-4,-7.489017281889044e-6,-1.1504111986789331e-8,1.0735435490295485e-4,-7.35244966639261e-6,-1.1511999323604564e-8,1.0749903983642938e-4,-7.2792806829164845e-6,-1.1516363131548234e-8,1.0763957831135115e-4,-7.283580274524651e-6,-1.151661702847303e-8,1.0781007680501017e-4,-7.368012685883945e-6,-1.1512793302970118e-8,1.0804590054700001e-4,-7.520061810504988e-6,-1.1505692043057436e-8,1.0837680611466255e-4,-7.709425069854278e-6,-1.1496977420176755e-8,1.0881740161785823e-4,-7.889347522041987e-6,-1.1489103221812277e-8,1.0935759791410143e-4,-8.004876957400208e-6,-1.1484917776821892e-8,1.099584343313986e-4,-8.008601428695032e-6,-1.1486882532745956e-8,1.1055881062444225e-4,-7.879155597116695e-6,-1.1496092004950944e-8,1.1109371258594231e-4,-7.633039843956237e-6,-1.1511581608136922E-08,1.1151663459051103e-4,-7.321605202687162e-6,-1.1530431309502565e-8,1.1181492903404441e-4,-7.013454241810893e-6,-1.1548741122352925e-8,1.1201106022014476e-4,-6.771340174468865e-6,-1.1562985724005811e-8,1.1215140197415839e-4,-6.634405209780007e-6,-1.1571068149846324e-8,1.1228984212495073e-4,-6.611278102413541e-6,-1.1572697123814852e-8,1.1247315925664164e-4,-6.6831267112462406e-6,-1.1569144942454731e-8,1.127316993096942e-4,-6.812598750203812e-6,-1.156266778319374e-8,1.1307579932787652e-4,-6.954602663343077e-6,-1.1555859496188551e-8,1.1349688400417341e-4,-7.066217820959545e-6,-1.1551101049908461e-8,1.139717903089487e-4,-7.114299397794903e-6,-1.1550167056351804e-8,1.1446891416054345e-4,-7.080077937874377e-6,-1.1554002562827165e-8,1.149548174283551e-4,-6.960537575809596e-6,-1.1562667346861427e-8,1.1540007923220339e-4,-6.766933444370123e-6,-1.1575426285469924e-8,1.1578354861211906e-4,-6.521295786051894e-6,-1.1590947546989276e-8,1.1609463410885247e-4,-6.2519478086589645e-6,-1.160756007562344e-8,1.1633376296363593e-4,-5.989012039941205e-6,-1.1623518348194946e-8,1.1651156393922294e-4,-5.760573051355079e-6,-1.1637234212047214e-8,1.1664740182339614e-4,-5.589622358594828e-6,-1.1647459659802337e-8,1.1676759334021895e-4,-5.4915067272458905e-6,-1.1653428976732367e-8,1.1690326783015823e-4,-5.471531648050538e-6,-1.1654974611229112e-8,1.1708746557034123e-4,-5.5225030012895636e-6,-1.1652632718742514e-8,1.1735068033667883e-4,-5.622479874781477e-6,-1.1647735276380047e-8,1.1771412944112854e-4,-5.734062550996382e-6,-1.1642435438662262e-8,1.1818113725851937e-4,-5.8076621481172495e-6,-1.163954187668793e-8,1.1872926880585935e-4,-5.791344442245663e-6,-1.1642004245374285e-8,1.1930855430309953e-4,-5.647553044674574e-6,-1.1651984086518556e-8,1.1985155215788543e-4,-5.371443175151925e-6,-1.1669760410394222e-8,1.2029547121095116e-4,-4.99995084485974e-6,-1.1693115291372944e-8,1.2060678781026997e-4,-4.6024408688642385e-6,-1.1717833613867049e-8,1.2079400904598451e-4,-4.255199093046226e-6,-1.173926368756903e-8,1.2090126966665237e-4,-4.0137842781003e-6,-1.1754062382778059e-8,1.2098843584166365e-4,-3.897678566972292e-6,-1.176115704922468e-8,1.2111008984554611e-4,-3.891400665164609e-6,-1.1761637208694449e-8,1.213022496940009e-4,-3.95630760713687e-6,-1.1757971241563372e-8,1.2157839399120963e-4,-4.044896229076136e-6,-1.1753097167220337e-8,1.2193195516922581e-4,-4.112420305157807e-6,-1.1749718015863004e-8,1.2234182152848596e-4,-4.124267718560327e-6,-1.174987984666976e-8,1.227785275255919e-4,-4.059624660286843e-6,-1.1754780294877045e-8,1.2321007408265877e-4,-3.9124489345179326e-6,-1.1764728817057517e-8,1.2360698042256985e-4,-3.6904598768444323e-6,-1.1779212189448352e-8,1.2394631226203136e-4,-3.4126109266878824e-6,-1.1797041115608418e-8,1.242144823774108e-4,-3.1055077065965403e-6,-1.1816559520484416e-8,1.2440867826661164e-4,-2.799226073876711e-6,-1.1835897138338729e-8,1.2453685337986063e-4,-2.523031477587932e-6,-1.1853238148010125e-8,1.2461646512564885e-4,-2.301547896694e-6,-1.186706784611472e-8,1.2467235994619418e-4,-2.1516861724259745e-6,-1.1876371614580685e-8,1.2473410454800834e-4,-2.0803083645591164e-6,-1.1880779589050701e-8,1.2483283115915695e-4,-2.0825349597226646e-6,-1.1880660082478308e-8,1.2499748069359724e-4,-2.14069314709482e-6,-1.1877165836353078e-8,1.2525010295091812e-4,-2.2241823656063393e-6,-1.1872226457607199e-8,1.2559995192754653e-4,-2.2912602137460035e-6,-1.1868437590207958e-8,1.2603705811992328e-4,-2.2945068883105327e-6,-1.1868742828901586e-8,1.2652772420829495e-4,-2.191539426597471e-6,-1.1875794007561012e-8,1.2701630641300356e-4,-1.9604423994929207e-6,-1.1890987874401511e-8,1.2743771444703272e-4,-1.6147035257241735e-6,-1.1913481241468902e-8,1.2774003479321577e-4,-1.2075860053489198e-6,-1.1939854087612531e-8,1.2790733523272295e-4,-8.17705683285339e-7,-1.1965019553764724e-8,1.279679628288094e-4,-5.194673008425952e-7,-1.1984174542305361e-8,1.279816584662349e-4,-3.5470155045429583e-7,-1.1994671485721905e-8,1.280138942373341e-4,-3.2155917529888203e-7,-1.1996712018024326e-8,1.2811314916667707e-4,-3.832848611376374e-7,-1.1992721904466058e-8,1.2830082617175774e-4,-4.869902782138533e-7,-1.198611016092719e-8,1.2857305116365837e-4,-5.810461096132203e-7,-1.1980164163535222E-08,1.289084172136336e-4,-6.257202090277428e-7,-1.197740043466469e-8,1.2927653296285668e-4,-5.972525154990381e-7,-1.1979329944634138e-8,1.2964491995966202e-4,-4.877474608997493e-7,-1.1986472365228349e-8,1.2998387075651414e-4,-3.031311612369654e-7,-1.1998477370081351e-8,1.3026979244258862e-4,-6.038288953220458e-8,-1.2014282732417834e-8,1.3048752957989842e-4,2.1562191863560383e-7,-1.2032296857404085e-8,1.3063183983413705e-4,4.956069602951913e-7,-1.2050612633462722e-8,1.3070798712429174e-4,7.49696777087375e-7,-1.2067254493324593e-8,1.3073127127371782e-4,9.513984761652111e-7,-1.2080450782354818e-8,1.3072533232997706e-4,1.0813761032640532e-6,-1.2088898078971734e-8,1.3071932425519906e-4,1.1305045965556356e-6,-1.2091976791290884e-8,1.3074424349902703e-4,1.1018477731859764e-6,-1.2089887050399828e-8,1.3082870101893535e-4,1.0113362985932872e-6,-1.2083690937629776e-8,1.3099441618179766e-4,8.869501908669666e-7,-1.2075251931326807e-8,1.3125168068481923e-4,7.662116754938402e-7,-1.2067066918911372e-8,1.3159510738595574e-4,6.915586905267705e-7,-1.2061965515433264e-8,1.3200056820097142e-4,7.028841658829567e-7,-1.2062624571151364e-8,1.3242528918228636e-4,8.270198550287169e-7,-1.2070869118686841e-8,1.3281385380364976e-4,1.0657937989025924e-6,-1.2086852795495238e-8,1.3311208615874337e-4,1.3873940278361398e-6,-1.2108442324416934e-8,1.3328674475046086e-4,1.728378788589479e-6,-1.2131335420364398e-8,1.333423026531807e-4,2.011359960326922e-6,-1.2150284217646462e-8,1.333230859574093e-4,2.173641367897251e-6,-1.2161076558038903e-8,1.3329628509418603e-4,2.1916886718834704e-6,-1.2162183678561086e-8,1.3332488742110422e-4,2.0869799011873835e-6,-1.2155091872515184e-8,1.3344631607287334e-4,1.9118834458728775e-6,-1.214330168860428e-8,1.3366614959370036e-4,1.7270017762180142e-6,-1.213081977253317e-8,1.339647660819936e-4,1.5827822630531564e-6,-1.2120978054806648e-8,1.3430900171919165e-4,1.5107505188582636e-6,-1.2115885232530696e-8,1.346625507586368e-4,1.5227555156633589e-6,-1.2116379839448163e-8,1.3499278908367805e-4,1.6143357752029857e-6,-1.2122232655650623e-8,1.352743630890875e-4,1.7691319425712106e-6,-1.2132411706736463e-8,1.3549082147805045e-4,1.9628976716705375e-6,-1.214532559179744e-8,1.3563536205606977e-4,2.1669414090184472e-6,-1.2159041601093816e-8,1.3571114539193986e-4,2.3513531864422336e-6,-1.2171504657912729e-8,1.3573115122892719e-4,2.488365757099318e-6,-1.218077928907646e-8,1.3571726302195615e-4,2.555989521491244e-6,-1.2185316078541546e-8,1.3569814446294577e-4,2.5416602671032738e-6,-1.2184217684665625e-8,1.3570568585111713e-4,2.4452206623935392e-6,-1.2177449976565543e-8,1.3577024230789847e-4,2.280427964073108e-6,-1.216594442676682e-8,1.3591527737192273e-4,2.0743135607314645e-6,-1.2151550454018783e-8,1.361522991152803e-4,1.8640121265254014e-6,-1.213681987513195e-8,1.3647708727637718e-4,1.6911483786144465e-6,-1.2124630980449703e-8,1.3686810998498884e-4,1.5943000966245994e-6,-1.211767957644585e-8,1.3728794824521178e-4,1.6002951590033876e-6,-1.2117875538135754e-8,1.376885995265603e-4,1.715563961241601e-6,-1.2125719871977474e-8,1.380212492054774e-4,1.9198116421548985e-6,-1.2139827416802713e-8,1.3824979653251647e-4,2.16545754172393e-6,-1.2156862702966804e-8,1.3836476748777283e-4,2.3863798766054845e-6,-1.2172165361997345e-8,1.3839118089512586e-4,2.516681597723158e-6,-1.2181109204786456e-8,1.383836958661086e-4,2.5139173425388923e-6,-1.2180756018019766e-8,1.3840809682379775e-4,2.3754960365028225e-6,-1.2170971847677191e-8,1.3851731397930713e-4,2.1385549249810985e-6,-1.2154358737266609e-8,1.387345180742526e-4,1.8635150257748393e-6,-1.2135089041809021e-8,0.00013905061657867654,1.6115027181214983e-6,-1.21173713319074e-8,1.3943376606727773e-4,1.4271981388203693e-6,-1.2104305360794658e-8,1.3984300364040437e-4,1.3321511005655048e-6,-1.2097427842395805e-8,1.4023941764179271e-4,1.3266107575433846e-6,-1.2096814698533307e-8,1.4059252722173118e-4,1.3952876797859035e-6,-1.2101447432625885e-8,1.4088264636512158e-4,1.5134604515907064e-6,-1.2109616882522158e-8,1.4110100645417162e-4,1.651840139911393e-6,-1.211925900245617e-8,1.4124909369002032e-4,1.780117071596497e-6,-1.212821380203447e-8,1.41337902381737e-4,1.8698047521882043e-6,-1.2134441476175163e-8,1.413871243968482e-4,1.897057213198281e-6,-1.2136236886680415e-8,1.4142383018431504e-4,1.845841427761066e-6,-1.2132461012287831e-8,1.4147997719204125e-4,1.7113175489430788e-6,-1.2122777537746821e-8,1.4158823504138685e-4,1.502646517645388e-6,-1.2107840476713205e-8,1.4177619737628733e-4,1.2439767012537168e-6,-1.2089354094720186e-8,1.420599003828967e-4,9.723315462248096e-7,-1.206992596215161e-8,1.4243837480090518e-4,7.317359454874271e-7,-1.205266945550483e-8,1.428912639706557e-4,5.641719353741576e-7,-1.2040586686537376e-8,1.4338097885540922e-4,4.993306811954009e-7,-1.2035847099509482e-8,1.4385960277296563e-4,5.458783176763343e-7,-1.2039139663143369e-8,1.4427940471458366e-4,6.868122641353136e-7,-1.2049291370737595e-8,1.4460478846783334e-4,8.807411239238364e-7,-1.2063317321420302e-8,1.4482281559751307e-4,1.069839105541091e-6,-1.2076991054963683e-8,0.00014494904837242869,1.1937309248725323e-6,-1.2085887289049307e-8,1.4502568900064648e-4,1.2064426101944527e-6,-1.208665562177113e-8,1.4511070047506638e-4,1.0911379333922037e-6,-1.2078100163221958e-8,1.4526028585175462e-4,8.663198283372468e-7,-1.2061600256805915e-8,1.4551122674497707e-4,5.797058648325919e-7,-1.204063541031233e-8,1.45870714182893e-4,2.919007977922922e-7,-1.2019605889673682e-8,1.4631756661427476e-4,5.7383281304037876e-8,-1.2002481688680475e-8,1.4681257082234934e-4,-8.908235910099019e-8,-1.199182771411262e-8,1.4731178048653533e-4,-1.3681974382092278e-7,-1.1988462719314775e-8,1.4777718123388823e-4,-9.589928020150776e-8,-1.1991666707489123e-8,1.4818241807458256e-4,9.827970495226143e-9,-1.1999669866292774e-8,1.4851424057603252e-4,1.4975826284681487e-7,-1.2010174857616424e-8,1.4877150780700368e-4,2.9190903564939884e-7,-1.2020776035974408e-8,1.4896338718739874e-4,4.064988238931833e-7,-1.2029249027716422e-8,1.491076446423247e-4,4.6841038637613003e-7,-1.2033745868534184e-8,1.4922916257107874e-4,4.5938546572257956e-7,-1.2032953779941988e-8,1.493582247095228e-4,3.705242197180493e-7,-1.2026262139108474e-8,1.4952777954767635e-4,2.051005400277564e-7,-1.2013946805018194e-8,1.4976894050346446e-4,-1.904479417246828e-8,-1.19973299130609e-8,1.5010454947427974e-4,-2.6906541765304796e-7,-1.1978814248321542e-8,1.5054183504320976e-4,-5.005400438808663e-7,-1.1961656886072548e-8,1.510667193509588e-4,-6.659267765992611e-7,-1.1949384554955782e-8,1.5164312623254563e-4,-7.269820831206918e-7,-1.1944897119523432e-8,1.5221953156980696e-4,-6.673181911368249e-7,-1.1949511382214759e-8,1.5274192731700445e-4,-4.998737686083151e-7,-1.1962335916114308e-8,1.5316902981055573e-4,-2.655106490847173e-7,-1.198030645635063e-8,1.5348421088217352e-4,-2.266891378647792e-8,-1.1998944827432675e-8,1.537000877768807e-4,1.6834438575237464e-7,-1.2013585861232607e-8,1.538547110431581e-4,2.613132906223005e-7,-1.2020649305678164e-8,1.5400096519828458e-4,2.3581112219275996e-7,-1.2018566303697278e-8,1.5419235863208593e-4,1.0173672189554832e-7,-1.2008120314198619e-8,1.5446908544374386e-4,-1.043344103221339e-7,-1.1992147545698048e-8,1.548482390991489e-4,-3.2985719788034745e-7,-1.1974709621771796e-8,1.5532098094650596e-4,-5.207662508907146e-7,-1.1959996690102956e-8,1.5585716932915963e-4,-6.350241871756243e-7,-1.1951293605787887e-8,1.5641522266013897e-4,-6.511187991959759e-7,-1.1950307300835039e-8,1.569532769257661e-4,-5.697016549164902e-7,-1.1957005001839564e-8,1.5743798528095797e-4,-4.09469379855435e-7,-1.1969906863521253e-8,1.5784917981561064e-4,-2.0015710169451744e-7,-1.1986632887038163e-8,1.5818066995231428e-4,2.4528128874972442e-8,-1.2004482272335572e-8,1.584385964221662e-4,2.3238212408654543e-7,-1.2020894960770384e-8,1.5863886107822444e-4,3.9624199560292434e-7,-1.2033748244121223e-8,1.588046247824748e-4,4.961257588820515e-7,-1.2041519855910776e-8,1.5896414577085214e-4,5.208075434900433e-7,-1.2043387212766305e-8,1.5914861628490783e-4,4.6946391491526275e-7,-1.2039325589190074e-8,1.5938926955830503e-4,3.53541008361074e-7,-1.2030232908600866e-8,1.5971294009466412e-4,1.982741610365036e-7,-1.2018050074089633e-8,1.601357000258253e-4,4.2346553631336995e-8,-1.2005764507559371e-8,1.6065547610377416e-4,-6.653262914643824e-8,-1.199711354071502e-8,1.6124655500583345e-4,-8.178371801242496e-8,-1.1995829366236498e-8,1.618604147678731e-4,2.7237558855628032e-8,-1.200446695222325e-8,1.624361983654284e-4,2.6113543526894443e-7,-1.2023214939678597e-8,1.6291924082183584e-4,5.850389636777833e-7,-1.2049358081100115e-8,1.6328002909722807e-4,9.37029053897171e-7,-1.2077889657121621e-8,1.6352419934365228e-4,1.2479123374621913e-6,-1.2103126439366304e-8,1.6368904604779273e-4,1.4631281062483648e-6,-1.2120552485357369e-8,1.6382956183236765e-4,1.557395384432055e-6,-1.2128060940280816e-8,1.6400122926582002e-4,1.5381144862877748e-6,-1.2126239058948575e-8,1.6424588726093894e-4,1.439208355081074e-6,-1.2117853915445577e-8,1.6458370748174056e-4,1.3096328102448778e-6,-1.2106913755361764e-8,1.6501154402339606e-4,1.200644338827852e-6,-1.2097641160415495e-8,1.6550648589063686e-4,1.1547586852730628e-6,-1.2093577694547275e-8,1.6603290776267415e-4,1.198176070928625e-6,-1.209694831318382e-8,1.665511035023388e-4,1.3375614745420673e-6,-1.2108362039271342e-8,1.6702550418416318e-4,1.5612138983333382e-6,-1.2126873437650308e-8,1.674307780932752e-4,1.8436692523999273e-6,-1.2150349328123835e-8,1.677549195800197e-4,2.152050182706575e-6,-1.2176009110305286e-8,1.6799940801179606e-4,2.4524165413076667e-6,-1.2200981766056503e-8,1.6817724583540448e-4,2.7148658232038214e-6,-1.2222754118217347e-8,1.683099873280913e-4,2.9168866968960664e-6,-1.2239454785978735e-8,1.6842467146592558e-4,3.0452180407235236e-6,-1.224999322944638e-8,1.6855102695086848e-4,3.0968539557096263e-6,-1.2254119042353992e-8,1.6871880126855085e-4,3.079744230574199e-6,-1.2252464324778996e-8,1.6895472067160068e-4,3.0133940896606534e-6,-1.2246598903420829e-8,1.6927840464195295e-4,2.9289893043908684e-6,-1.2239070910506032e-8,1.6969685867088022e-4,2.8677904600524987e-6,-1.2233319274918822e-8,1.7019831718506845e-4,2.875824828445984e-6,-1.2233272151029017e-8,1.7074810284391787e-4,2.993272269193482e-6,-1.224246480019927e-8,1.7129098425295404e-4,3.2394101336393448e-6,-1.2262719249205929e-8,1.7176398102373194e-4,3.5987654038797006e-6,-1.2292867630372567e-8,1.7211809981800891e-4,4.018086806079489e-6,-1.2328398800877828e-8,1.723391427347796e-4,4.420818917734477e-6,-1.2362681188303285e-8,1.7245473153053103e-4,4.734662467285292e-6,-1.2389396409868513e-8,1.7252252726735316e-4,4.917578549027333e-6,-1.2404843785782865e-8,1.726071540897258e-4,4.968749604148368e-6,-1.2408893192054333e-8,1.727589046978858e-4,4.9221724964740185e-6,-1.2404411962237101e-8,1.7300260344177033e-4,4.83048076677902e-6,-1.2395876284086118e-8,1.7333699122422784e-4,4.748210739532242e-6,-1.2387966354953343e-8,1.7374060169450008e-4,4.719717242328655e-6,-1.2384556320964524e-8,1.7417998643729247e-4,4.77276442662093e-6,-1.2388155529251713e-8,1.7461775716833916e-4,4.916710446013261e-6,-1.2399710045232228e-8,1.7501937203030822e-4,5.1438468128633355e-6,-1.24186647572412e-8,1.7535828951289732e-4,5.432860035887848e-6,-1.2443225854658522e-8,1.756192629618798e-4,5.753664444472852e-6,-1.247077258016822e-8,1.7579965373443565e-4,6.07283129609336e-6,-1.249834752183416e-8,1.7590884946030766e-4,6.358829228718526e-6,-1.2523139875377372e-8,1.759661130968674e-4,6.586381943570775e-6,-1.2542883039875933e-8,1.759974500115724e-4,6.739459298134962e-6,-1.2556116611078232e-8,1.760321637278397e-4,6.812845618154416e-6,-1.2562313354106072e-8,1.7609950601134763e-4,6.812603660833107e-6,-1.2561914546371991e-8,1.7622548831381987e-4,6.755770295736606e-6,-1.2556315384687489e-8,1.7642970412317874e-4,6.669448359319251e-6,-1.2547819558221092e-8,1.7672181959903853e-4,6.589129298634931e-6,-1.2539538164845853e-8,1.7709754531837021e-4,6.555409184978373e-6,-1.253513882005936e-8,1.7753484841258758e-4,6.6077367992058346e-6,-1.2538298544744623e-8,1.7799261074736457e-4,6.774298835042637e-6,-1.2551762208519981e-8,1.7841520147040621e-4,7.059131678797954e-6,-1.2576102085454612e-8,1.7874610453487877e-4,7.431432411420299e-6,-1.2608660039097732e-8,1.7894917443968755e-4,7.825953175386766e-6,-1.264353962001558e-8,1.7902774380033063e-4,8.161207083206408e-6,-1.2673296174765145e-8,1.790278108183074e-4,8.37057801926549e-6,-1.2691829535203863e-8,1.7902000252517539e-4,8.429111940731165e-6,-1.2696822098010562e-8,1.7907052731275117e-4,8.359865779353108e-6,-1.2690259514578959e-8,1.792184376056174e-4,8.218710920752939e-6,-1.2677033409507345e-8,1.7946899122588982e-4,8.070217272528202e-6,-1.2662824877992331e-8,1.798005516314884e-4,7.968098174834111e-6,-1.2652431102927129e-8,1.8017678902342154e-4,7.945639373964074e-6,-1.2648941656457344e-8,1.8055783018827178e-4,8.014489469180937e-6,-1.2653594995131369e-8,1.809079743025977e-4,8.167991049630246e-6,-1.2666002492302427e-8,1.8120015594670137e-4,8.386055770599257e-6,-1.2684515636010646e-8,1.81418169137406e-4,8.640136272423779e-6,-1.2706635648062213e-8,1.8155745362714864e-4,8.897929471115659e-6,-1.2729437938407207e-8,1.816247890930127e-4,9.127778918254038e-6,-1.2749994232411722e-8,1.8163698371062952e-4,9.302709168045539e-6,-1.2765766433492419e-8,1.8161856182727902e-4,9.403888438419948e-6,-1.2774938041748913e-8,1.815985642893323e-4,9.423138551089404e-6,-1.2776645313126941e-8,1.8160681506560852e-4,9.36415692920561e-6,-1.2771087603012172e-8,1.8167007529985502e-4,9.242389932513445e-6,-1.2759527269267482e-8,1.8180839374719023e-4,9.083630182385395e-6,-1.2744194260900506e-8,1.8203189191582484e-4,8.921407254932055e-6,-1.272809684680252e-8,1.8233811686921964e-4,8.793234923543979e-6,-1.271472568547752e-8,1.8271007573164471e-4,8.735513832696627e-6,-1.2707603433132443e-8,1.831156226205783e-4,8.776587215035303e-6,-1.2709611967731912e-8,1.835098044135818e-4,8.927979072561361e-6,-1.2722097762312471e-8,1.8384221630675696e-4,9.175500192615347e-6,-1.27439367278731e-8,1.840705475552472e-4,9.474371020128938e-6,-1.2771002906062082e-8,1.841780628060236e-4,9.754616948466088e-6,-1.279667951127827e-8,1.8418683651227492e-4,9.940934290960093e-6,-1.281380356682737e-8,1.8415563603335129e-4,9.98187460304554e-6,-1.281747050358581e-8,1.8415861263877017e-4,9.872544364405676e-6,-1.2807136409084753e-8,1.842552921475183e-4,9.65575714304891e-6,-1.278665574601449e-8,1.8446960989311107e-4,9.401323160175794e-6,-1.2762350921109002e-8,1.847878917819339e-4,9.177921705907351e-6,-1.274048999348862e-8,1.851716145817177e-4,9.033077144764868e-6,-1.2725517880425859e-8,1.8557404333119885e-4,8.98674862545095e-6,-1.2719465951244568e-8,1.8595285565285299e-4,9.03489153155634e-6,-1.2722206457539776e-8,1.8627673471227903e-4,9.156961441484826e-6,-1.2732052732514901e-8,1.8652737698281774e-4,9.323291635298407e-6,-1.2746379558568107e-8,1.8669908398996258e-4,9.500851281252383e-6,-1.276214259667023e-8,1.867974540649122e-4,9.657494220093313e-6,-1.2776296198795173e-8,1.868377674238962e-4,9.765290802188679e-6,-1.2786140679959678e-8,1.8684306967336814e-4,9.803397871508996e-6,-1.2789619363565743e-8,1.868417147083351e-4,9.760610094037025e-6,-1.2785567727151342e-8,1.8686412458466885e-4,9.637324414561794e-6,-1.2773894189412115e-8,1.8693880886411663e-4,9.44635537749392e-6,-1.2755655110877828e-8,1.8708806034181723e-4,9.212124471751703e-6,-1.2732996276901077e-8,1.873239407935784e-4,8.968006164774606e-6,-1.2708946706398693e-8,1.8764524855502274e-4,8.751851247504868e-6,-1.2687053344743047e-8,1.8803613506589658e-4,8.600047003777075e-6,-1.267086308882513e-8,1.884668350213392e-4,8.540750156571121e-6,-1.266327943929974e-8,1.8889688401037388e-4,8.586957156317759e-6,-1.2665841049346619e-8,1.892813662336039e-4,8.7303677532984365E-06,-1.2678028004774141e-8,1.8958055151708885e-4,8.937957777496288e-6,-1.269682650981506e-8,1.8977205698003573e-4,9.154221964303619e-6,-1.2716894887330907e-8,1.8986226816951858e-4,9.312023948278568e-6,-1.2731645634466873e-8,1.8989097282145473e-4,9.3523306591095e-6,-1.2735235873700964e-8,1.899229344963519e-4,9.246977657328054e-6,-1.2724818924541804e-8,1.9002600500419477e-4,9.012639158824845e-6,-1.2701873808086355e-8,1.90245267253111e-4,8.705899735453676e-6,-1.267169944090641e-8,1.9058743747324758e-4,8.400731767561984e-6,-1.2641284800066107e-8,1.9102317062649488e-4,8.161375525659737e-6,-1.261678823134974e-8,1.915028135995743e-4,8.024638131175617e-6,-1.2601877107848063e-8]} \ No newline at end of file diff --git a/debug/cesium/Assets/Images/bing_maps_credit.png b/debug/cesium/Assets/Images/bing_maps_credit.png deleted file mode 100644 index 15109db3cd4937eddafbb1400e5cd778cc4cb7e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18831 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 z 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 diff --git a/debug/cesium/Assets/Images/google_earth_credit.png b/debug/cesium/Assets/Images/google_earth_credit.png deleted file mode 100644 index a7622d822d38c661a56b32be271b815691b6df7f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7703 zcmV+y9_ZnTP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!TpF8gxZibW?9;ba!ELWdKlNX>N2bPDNB8b~7$DE-^4L^m3s903CBlL_t(| zUhSL*cvQs}$N#(OeK)-)r0i};0)!M&AqgS$su2)Sc_1h#7En=v2cjql3MkThXrZKU z5<&ZmtWqYRE}j_3A$*kqD4|r$q??B2!Fi>yHU7?ik{|5JKXB#)^gbG#;+ zh_UTI!M{Elz7-eXQ<@+tWfw5C`ZE0LuV6&uNsMXQj`7X&F{Z%_qv{MWyh>I&(%(l1 zAd6KpuJ}Y|9==mpk8q7#L}=z>y=pb4DSQuGS$S#8Uj1eACU-ntq>m}0Sr{)0f^X$b zxZI3@UBoKz4@`sAzTvRm>kIyoQLqV_3;Tqh;go&_o>dtHcM?X{pTX#+ZSbp}3(sOh z>8O7{ZC4tKQ1uEN*QmxyrE*M_n?bcKiLqCIji!ne@MfDY0@`Iml3dtmU18Cjn10+_Fn0be*6eQ&10GBg@G^PQ;nS#OB{FCA3(Lm0OTM>XrPN~Ij{ zC`_T+UZ5FS?_oi3qU&>E9cBpLDPLHHzhJoPFJe)M;Xx%F{w??6aQig$KeQ*y^Phaz zbQ##5pA3tmTcI_xAJzPQS3V99(4pLF0=gdGsZ{g=OOJ4 z{r{l8cPP(_+zY{}JK#SR=oj$N{#8mC*A|4)?Kk03nG4&~Kf&-5C8_n5tCkCPgE|bF zR4}ei2H(}OWPWR8$?a%@!nSJ2uPukdf>J0C%7T(|HZ*&N;RKZ!$PmcJ?a}zCMTmV> zhY?e>7w4OUaiQ%L;zY4HOtxjMLJVvUhiqA(v~zcw+|0%Vkt)Ww+hT0%>loiW2a}rK zM?mwtc&%{`Ce+WznEFpKv~~$RD_6qt&bzP|GP4t~U(+AK+Ko7@)r=LYm6*{r&vHL=(`npvz3m5}+W9P*>mp`>sdDw0nBt9s=?k8JV4*!C+J z)|`StC26pUBsZ`8%0q=hik|AY;IwF9LbW0*Fp({DU?=3~FNM;m@1Z;@1nM8(hemh_ z)Gt;-ExH7ppL3z@5D)Wik4+Q>Rncj@)htBJ-7N?S`~dSOJ7b`?0M;93z&mLTR@WTF zeUT99)b<8Jy`=sqx{l)*O>X02QrkofuQ>v*jBvQ#J^;_0V1hRhqgty)T%H;u@lfDE1*#u+Rf^iRjPo)r&z3? zRzoh}Ybf}gfb!gXP&rfvrG#oIMVCSShjeIK`~h8Q?^myfGtWz#AtXTWkpgWit?j5D zfbRJ?ylHA2-ts<1wkN@-F#|3ochEO>nAG}8)uIWtW-i`qQb14$OLom{$T1*19ty|? zLc{qgbdC|oNrlk-qZqnJ??ZRc#;&|vB*7eqf3(El?6q|WTQ~;H$?6bVtQZHC#BcC^ z?QZ0XLXl5kXS4=mL;7}fo{<7*@}JVa6eAlhpkK%`n60n{XRHn^*PEf=A0NQA;bm^w%VqTR3jvZvN7mfnU zfU3o9Ea@B^geor;8XPE9 z(2aOO%GA~eeBlQy>&V3v_s*lwUa$}EdWtZOP=FwsM>n-DhU{Sxj3(em&4J+L+Ym&m zA|Qxzs|aH{1{*5D5X7c}A29}k2mu|R0Cr)I#(fOvW%NC;`ocb(+b<|jD zBbfy|$hTGre$5-;-F15ZgRqH^#NfYliDzi?UWyuH9)zOriI%zAo z7T2JEE)#lbxzM|p1H&`7VAx@*qPSR=JoCE*bZpiZoL@T`gQTWTI`|e8A1uex`kg3m zKY?;l2+A4`U`fhGC`y}9PSM68n7^bD<1z;Rz608CJhCw|{6ZG}uD(qUARX>ig>bLS zf=liK*q!SL+Agi(IHJ>v{o3tVD&G3;0Cb}|r%@~4Uc>+3^Zi;#Wvz6MlQ@chgG$tJ%FT!6sk_2c019Ze3I?mbjoe$`95gkLa z_;>JQ8>l{;#+gjN@v(F6Tg`=U%YF=PPREe?Tns9`4!bxHsr8kpQ3LFHF8rD_ur*Ic zE@3lNW=T!m>J;?n-G*Ua1`IMYVU&9V#%n)>)t{k9Yc%)-b7*@6Ze9EuI|f^H2IFyE z{tQ-S>ygxQ5OtzssB7AXJDKazUu+!L$ReOeh}YwNYwyA~awb#;bea(;G~>V}KMWo< z1@NTeS{jFex6GwhiFOjuhjrSqPg^7gdU{8o>ohQcLar?(va)A)Kxvw^x`Xnd&AJWU z34g#K`8bSf_P{WIC3NPIsr%52=4CcNtRF#jnMy7}w3KZf=1D*~vaG{jqt78?SozUw z2$~MF7{NS@z|0}rZ5BUb78O_OH-L&e!8e~kx<~d@dOuj&MItfK(G@gaJbmW_dcT{z zX#h(=UR@BbMDVf6=1cwFrq^>cMjpMA=VzAaqNzN#<}CKmC(G&eEWKue7qgYc3m-*o z9jT6H8{s1Q4LNiycVQVJxo%>4R%pY!OK9yGNdMq|@1G-t2I3bE0zMGj-zHd9F?Q18M1>}YX)Cj|h5a;Cw( zx5c#{7+E$b5<##HdRpIRztU}QP7_4wRPQL;H-ydH9AYt^+)BtM&+JO$)=}9dwMZlZx{4sH zp^$()YoxsFfJm0_3JMwmf~WxvWF5hR?s=IGNudQDk9{Nywnru7Fp>aGo;#|9#fzB6 zu{bKHZ+cK-Gmocngfi5IJatPK46e(ATV*;1+?o#62|WVw z@2FlLj*SWksbaG!bl{vm08M6Vy+=htPx%Ur*4>A3Q8G+Q5@A*l3gdSj>B6^#!-QZy zDvH3JhJ7fA`4F?E-Fj61Pw=kaj+(ZEXl~q&mYi=9Z(sl!3~p7!@YV|$(RQDJPQ`#r zuY>E+_4#nkvV~jKJvwhiaLg%zAm$yZMWSswBXCeh)Fsez&}~t`IyxWGnNYZ}8Hxj# z`g*Xns-ZZs8fqJEK;v`>ID40Z^QJ$Pcw~O2o842|FW6$U#6y#ZV~2k=AzBGp};Q z(pbVDl`Kzmee?3fu{RR}{U)s;xnwH9yhs}MmrtIi08Z&Ypl@Wy_~<372CTOm zS*+7#kh^>nnhD3D*>$G-m{viPbs0u89>65~9!$%AhgroD7_XZFjv@g)h=4xd9)|RW zJt#T92=k@gdQ{mam^AFdowh(U*KR^<#u8-Aaf23x5Ss95zKx-+nRHHa;gqr%eM7sR z-rY(K;ZYY4*YaWvNGXQp!KqS1r5MC*FnH ztYoO}y9BkM9Z>t4VjZV9p{zm8pKmRmCmctfvW4L4c!NDA7C+pSfId$i?mT#*I^s&l za7x^Sas;^?tWJ;@jONf-h6ElZco7B!qB?nKN-|^O2&CjLfTkEaavddl-6yTjwQLtL z13H_el~0HtW=6+XMaQvQT0?TY%7Sarhwz|q!>g8JK`MiaPr>02ZE1^V*T^z9Cbg(y zY?(U7l}O6iQgw_d(ZJvm4tX&S^L^!z|Dq0Zmr9^~BMI79gQ4jx9ic~EgNauv%#v@z zto#hjYWBit=PYQcwj75qMZ34!Ly_CC7iBk=VTHE#(|0JVw?nIWKcZU$(NeVmZ7B

&Pa4A+IkP|SZIZs^N%fjFg+O?PPtkj2RLkygYN??2aE=+%Qky<2r2=t!LK$k+! zss?hxD#%{Sh3cI!s4v-~8bVKO(p&;fnZ@V$(6*l*t6&B?wO5 zAs7YHo}{f5T0{`+ku=81AWFi{Qn^UU9fcw>2WiYD1knxhQnb5h8temB%w58`0!ezcaYM%&Hz zkm_a(O}M1Wz_oZK+^TcMv)15-Ot|I@g+oH8utUbD!jfX>YZ#DT1j}Q;Li-Wr9hymA`sjg=YybJWdXp4Rc%V8J4lc3!MLD*_IT-*ll(wp!pyaAWoJlI@_ zh4wpEOqcuMzL^Wn)O=_>NQZXDd1y(Jv8U)3j4cW1q^mHm3WjOrO6V;jdSnYWfmgo= zmzocuqUjJS%eUZS;y2(+yLGGP15j%Z!ahn2TML$;{p_2FrfON3|C4^xHG4Sa#>1tQ z&IjG(UJYUJDzkxG&LgPDisax^zkqJ&d~t%MHM8?~GC&7Pf&Pksp85#rBye=I!3`{c z`u##^+)sv9Tqrb57~8)sUKDxJ7-o6wbAn?$C3xKzevBUhD2aLd&?_(M3_+X2;ziD& zBvADnJjJH1Tt7-Cqm&6`2kJvH^na^|W;7sq9vlnu31lhMwJ8`>@D>Io_WUPQ{Vvd# z?^A-&LQSZT(x3!f4YEecu)8q=&Lx>}&MkudgGyM%?1284;!TI&p<{msy7w5Ev!Rob z1f5ggKxN6nLj9FZfWHJxP|L4Z<%Cpf79n`p_gTSxkdy*58`wVX|G*I|}5!OD+` zC3ydffwsGBOw(ovobpS=Pv>3(o5&VfT#1#E9u!!l|M^uH4C z1jRs4^#b&F-hh5VDs*!)pqG9D+9SQY0zxV#`ABA&jk=3ISs^fOSPs2lLnx?9&A7b; z!;03RvT_URS^`m9y$fLpE74r zsh8lBe+px&!!V&ih+)mQ=!QN3jbYtCv-=wXy`O;INkA`FtH$ImQA-${mU zc0RPz3ZRpa3T-#3`NhQ-`V(A~6bhLo%&uh>u0mjbO<~D$0$-9d@gipuNQEq3_>9N% zy$<@H0J_f(Hu|0$fdOe5K3LKwmM? zo5@3qf!+Z{VD1VuRBu5;%Ry9B?7_IoeO)JqqEN6X+?ZDP8yfGwhnimoW5H14Zf*e1 za77reHiP9(J2+k%2j7|t7*>Bv{2-SggqC6~ z^tWGzVetd#=jK8;jmps!=as{{I>Y!c?eo}z&PnPqS( zBu`zDjUm-B@F^cg$zAsc`J@JB4uw-u7J2Fl*xVqX!#6|kvp@Ih{VAW?4gJ}XFwRYY zaru215!6O&l3@I&*L|oQ7_%S1e8M&KNvBXFXBM>PSwXSWbVw1O#m)C|B6BfX%6>*u zb0F?gOg*OgNJpp%W?9iOcs1|9{gjVUwcQUtP<7X9u20If%n|N2_u*B;%wUBWRP-A> zi@V*n$4}Sx26BCz1BS9o07*nK(OZ2QjGb?Mn$Zd2pWv~Td zU2m$rG@#9Qs=_+v1N6O>BmR3p$J`Qll;yyuCIP;cA7N+-^WeJq4^P`YsX^K11avGss*0#kvRIo8@0v9j%se~zgoIXX{Gz=GKX66(LQRCv z)!ML}6Njw^Gw_S9AC_^%kIXFwN9IT9dhUba#ZVa6oPlx0Z5S73!1!JcOpd3+cufjS z7SRl~>@F-0N5SO8B4|3#glhL|)5bvrXIMYF*vtkocJcB<918lDdJ}rEq8dlDqseyen41r*t&D z3;V*S$OJxlI^?~z;ZtX04}{=)IV|HUU>=zXycl)5vfHRkdpijE(T4*>Iv3hcIJ9sCS!v4DfRLg-Jl2mCO+J&+%Pa>EhW$e zaLg}-TWJBjYt!IU7Y@%NCwQhmI=+P*GrX&^4P)eDFj873D8%9|m3U00dOyVu&wWe- z$M8Goe*YT`ukVFX@i7=z(QmIh1=ET+nB_&lG-(Z;hmlZYc2>I&Hy)Q&qz!=+Ow)S- zfk@ssqDlNJ{w&-sLeOjCYbe$6pvFF5w#S&u$~iJKHXUS=vexWVj8OkHfKv|Twke`0s0LH&fFr{1Ee*b z#S1g0-$uuHa=o;s2PyN}Fj!>*(>-%xDU1T|_k7sisYL(GayaD`Q8SEVFt}LgJHL4Jp2QvVA6r<7{C1uc+DILx`iH2W`r*7T2{y?7zCzxfo}Uw;Ix88g8hM3g+= zdFUI&B5$cfkPRhZKBDkq36=NR{D@&}n^28z6F*+K5+#<-)aM`6{%eB&Ga6$8eKv(< zm<$9bdGwjiZpfp&!#bFf%xHIlybr<~-i{RsQ0Ku>f4T8nd z?dY@b2N?e}54sD-L49;TsE^PFXNElFtr(B>Y~Dm776-CyQ^?6EgU#Fk&(pUjG2=Yj zSd+*jzur6)@UYd-J5x6r+e?n4Pe1+l_qQxe}zL%862`o(f8u_(0KjXSA=@i zt5+iLN_qG-tbl)A5?qT5DE54&EqSqQ|FFfttW*q0D+lk?251a_dW_zyUcFMeSE#_N zE);`nv*1!(1lx0;Ni9#;z$_gM%sU7B)DoBneFhos|3?VctN&p+=PARbEEuj8#p2?W zc?g)(^RnJUIp>+eAvXzvYw6Hk^kR<-^r}}cRs9oX;gI?j2IdyQxu}$&&W3CLSa_Gn zV`PD}(Gyxuxw%)79GnY3fPG34%=c`7qD|Ki_4KM&f4Ta`S;9Uk1pO%%cFZfIFyuCd zRD6Y@6*d@Iqw?XdjgkbB*>D+MBa0zr7H}*36#Y}~!Ti8haHqVS$3J`3tCu2f02}7} z?7>SAqVMfO$ulhldGM?}1FzEE7*etfgG)YvSMg%F6>Ne_Q7r7PU4_|}W#GQa{P$`9 z-gv}~{IUS*LzzEc zdg_*ZuX^>Lm#T*bbQku4;W`HxuXBg-PaZJ((GfZyTSIA}HgVj$n(<#F;9q`A4>qwR Rvh4r>002ovPDHLkV1jBLV0Hii diff --git a/debug/cesium/Assets/Images/ion-credit.png b/debug/cesium/Assets/Images/ion-credit.png deleted file mode 100644 index 71b7bdf1c993b6a03d5ee7e021a3116173b2fd62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6028 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

-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%0AGV@2|d;eeu^iq@gYmFr!di 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%0DUz<)3u)Mq?O05Y3|nMn{x%p?;Ula0o30%ZgN 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

tS)XRORWB8Mt2rUnXP5R@#$;Zf?EB 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%0A+}OQql|61ruuq<&g(RD(Wf3__M0>0$sb? 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/0/1/0.jpg deleted file mode 100644 index 7e63bd63e15e41ae5cc6de1cf5c9d16ce6a3ac48..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14055 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�^LnCJNOiE^|dQAevN1N8_>y7MSL3^S0uzkkUwQ+k)H z?Kg~*G@`El5ZO9O>6%A;_7tCfa@F4meqU}kDTcmjt|LbJg5xzSY;QgnvsT+r>Qp=Rq5=|3NKa1-vHE8V zuGxk;F+o`+YL_Z~E(LlRsOL4%CSRKbEZ=Fu^W08hmrS%2sLz0sN?GbEk1^{^N@4q( zaKvhwSCI5{Okbroit$ra|J{rrE#6hmqWS0oSKnlr*n)t70FpyOWJmvYx8;wtmf#7!~$b-~V)Sby55kTW^=>;-Ehojjp8yTtq>Oxo5Y#a-|71RM9kj0^5_d7qf9Q--=%KLzi*p z9ocbR>`7D%3hh;Ln}!|q&DhSddnl8;#uzeDL0D(?Ep8TT@5;K z7vk6-FDH28qOnrR2JH^#{c()JI88V9?rMsHl9NJ044bdYta-=OB%8k%Q{=#r&if!k z^Ge)@h|!fL-dBq}QDHX^HvI3cT!853CcI2;s=>TgWl8knEdzHN{%kD*m-&O^$4>8; zSL7IGQ>)6t^cyj%9loE-)nw$tz%ndvQ|Ha{hfJcG5ldXHA6U6Ndbu^JE8>*@im0g? zHzdNtw=(~fd+k!6JoYS=NMT0Lj}kifl~1iUYTU@Jht{1>j&g7|S=GO^ttT_GPkADu zHcv`3-Lk_=@tR{1CWK5XP-<#E`h7 zuceLahG|F^D9^>K{(g5LRuF&S&!|KHnq&PSEhkqN$AJkty)C%JSMw*)**3A(ZzWxE0nT{fI5#KymTA!jo`W;;%R! zcW>Lgd!c9F2%d^q!;2_Ut*Ts-%ogYEAX}}#cngNR5fEr_o<>1j)5sz zl|FHot?eYynAh>A2lR5QgMp9nJoVc?0D1A#+p%ibJ+@MyYf0!C zz^R`9q55mh?9QN;rZ_K)BoV=OY-B|Ifv%EB59(B!V~F-i`)n1 zPY9~ytvu&n-Irbjq6?_PelFhH3B9~-$uCS3k&ar8tJ`-4E? zgQlUS0*<1K084rB6G=<#>;%jsKmaDAI7E*sH8y@5MZj+^#&blIEc!14vZBr^G9sn z%DrL1HaM8wnAH0$umb6<{scRCXn~^On;ex=iM({c=C_POSsqIGri@mSqO>8_v&<~T zpVZzPVp)3qmZ86bII#8d{gZx$qn!MzSoh)6NtxD&ihO3ed!V$xG%5e>4#+si&0V=t#1#RJa(Net{;vh{h z1tK^4vqbS#`6-4)`m2rNB7*~$w>pbJmaiaIz`pucvO7}Wzr|cD1>_{NH`$M~N7`F3 zj*4^`D6&`3Bn$e@Z!DvicV$mX;~h;vpS)oWyCv9GZhkbY^NBEHWqaIqNPN`@7wFHN z@A~%>+8QHPULO%TCQ7frQd^YE8>7fm)!!iu(TO=3QZ-qtUw%^T`u1g7uc5olN!hWV zSz-%nz548z9>|i?d}HWogA`+()D-qln=9#|%4Yg<=oh4-*=^GAG+^PIBfVR{2-U z2Uc$#Y>%q)`@%b07vN(cXECuscm7m~E)JDo2=Y;*)W_d`dezjH=vCsfcoVx-KUOUk zbZ>xuQ9xSw^u9;$9>sr^C(FoS%#d>gd53jS%=;PO1*uV3C^??@UnIyfaX7|+Sq7)7 z9di47q#25t%$AYzT~cOHz6{`uM!$^cHBrrk;UVQ?~@O*}D@z0&+I%{NAQL4(bY5U{mrcr4Q`MW`~b~T@dz3Vn*7G$oAo&PZZ zMI;pha*IpF%?w}OmAcGLMKa`^yp5fH2AC>?#QHO98e(v7`-Rvo?^XNW0w1F+?@3fW z0&o_IGN(7)_T(X6{_|561Z`%0@}F>N%*+MP1Fi@>6|$PuADIoQ`#y^c8M3QB(4Ob~ zmD+?HTb$(2qbgZ{hphO6JPfatcNJ1F%BuX|BHd`{WLqf0CLc`@grzmUOl}a6VEZ;= z#fJSlav=SzFaC)#(a>g|mbohK=QS;4v^*s?gcL=?e2P^&@OxzJ6iu{gj}iVl@dqdQ nGEs^3tOoyPaiQ126}_~o(HS23x87XbhQfdK3C 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 N=ZW^Fvg+)|e*opc=PUpK diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/1/0/1.jpg deleted file mode 100644 index 605f63f13ae6f7304fca2ebffa0420afdc3e1f8c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11399 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 M%z23(+5O!A0yWH#b^rhX diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/1/1/0.jpg deleted file mode 100644 index 319458e12a338f54f662f01f8a5966acbb26a891..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10652 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 O(89*{jodQtXa5H+guAo= diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/1/1/1.jpg deleted file mode 100644 index a6a3859d6c448595bf674abb88bc3c51c7d083b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13142 zcmbWdWmFtp5U@Ff1QHTR(BK3Q8r(g&+u*Lj-5ml17@Q$6Sa2N(?iOTlcMAaqmjs^y zhL3mmlXLdh?pB}fAARd|*K_XeuDVtAxb(OQc&8|*(e)#_^k39g~muLVq06H2C;2AC&IxgB{KY$7V zKzs3I?SBUUPeFTz{`>_7=F3-Dub&he-vOSXp`$;0vi}L-NjvCi9Pk|X1s*l0BnG~Q zIVO!80asXZ{!3b^+FnA<>A!T`7VhD%u!!ChlaSIgFn(lW=Hcbz7Z4QsEG;7|C$FHW zr47{4)zdeyw6eCb{bFbD;pye=U;n@$Y-o67W_E6VVR31B<OSog0~ zEAflLPkp@X{o=jIX?W?4xWSzg6|MUxb}Gb;+TGD3phf}S`=pMKLOueH=C*iIyW*tA zwP8ydBkw<)pF9Hg)CL9aXhi*8>x#Ec(N_xga^ zUEbN-k@zX3?cb-7xAm)(c{7Q1eJD4rvxvLadnS>g09m;|GD*fs4=JQ#FdX5K-@s3h zPH^`bL}Yf^>JiZOr9tXA;#kA~?cE_{!6BCb<>fGzit-zN1O(11$**gwjewJ8tv}l) zB5WQ3Inq-Vj{x6bpeG{lS5Zih-wzmf&#a3 zzKw=~sd-{U<|80<`XN_*uM{P$1WwE(Y0!zO{Tg%xHvLt|*VI`fi($EAOx#dlyx-@rvvTat}+T*760h8CNd)%)YZ6T^hN97Pe+dK$9w673NbV8NkE>- z{C5XG*4HGhU2mDhxogfsFE{z*Hd!W+$M9gKU`Chu576*~ym0@}PI)B>dbpzzKa9uk^I)8C>t?gaiAK6pzZJ~Zobal>e zQOKnw7bG9|*b;uNoewB}@Poi!snrXr-Ri!ldCOtH;Ld-8ITB*Rt?ClZ{n|y~h-er! zyn5eT4L0pdm#!ZOa@T%m6eS*|?V)b$JKE>(x6WTObZ?_djc)>W57 z&A7kPRxo!$z!oYs4v@4+sAKpeVDTk?@@+O`KVq=cuo()n`WYu(bKtHY$VxqU;yxGg zJNf>fHhV*4vp7SoC1crzAXVtN%NL|cVcEJIc^B1uadPabA3YN>$xiNj#A3eOrXjEP zBOt~G((aC9$(DS(m*?-^KUegCFg?Y~S9Ms|xtqi{WRq2H?5tYEO+?rcIBKH=D&Ot< zum4KL&Uf^}06q^Usqvq^N-X~j8v#X~Wv z;`JT@k>+J*WTzvth9o+=ANCI-2Hg4XYdvkQ!5ewRgZ+*+MXG`b?-Kh^$|Kx}ot-uDx8(n<)sv`SNBYj^bGEHe*%k!MDc1t>>9^&py^=8C~=k znc*<)fr?J${n;5+ed&GKztwJ>1Lkq~n#o5BkaURRkPvp!MTXPao3n>LJ8Ig00|7FF zaV}!~ibHbiz0coH)H~mc(rgybD(2`pFQY;@b!vfy?cM7r=?+mQN9fHXAam;m>9`UY zM}B=SOC^l6p4I&Z$j~U`(ZxsSg^0c+Jk}NRS+=;KZmf${?~w0*7F_)qvMUE-+l^@SrWqR*x zF!FsI)o-cpFpxBS`C6{9`wn5Z*5MmGRN^HLyn>LLcY~EtIw>7EpPsEg95hN z7{1G=eBu%(g5g#3OYQs|I!K5{#E#d`?aWsfL&RV9d61m-e7LJ6MgeV<_AfJ=l{QzY zIJ?Zrj98jP)7~Jj2mE+x$60u7SN@59R010dS6?T4pztV|yhk7q#e*9kS&6-TkyMnw zPj!BWsijxR!;cNSnh#Q=#5si)vLVrSX5v^qv-fH>Dd(RePIB=Fr|=l4w3?B+qLuNM z{kBBGWX(<178Dk^XA?o8=2H(2FU>dCbMtr{gwC7tQpupVv$`qBFUMCeyT+D2NN0uL zVOVR1FvD$f9Wo(yJ6uBnje1?vUO_zQK_%nPrMH;^_ebKGQ;W@tIRZ87MSeg=LGhp* zqRg!zsb6%>YV~vugE#dFQlbbWRO8Bi7fV-%7X0_YuBz%{vy9jp5%K-e@Z>^Pl=y(& z{4c4Jc5VZ`%s!RrGa=nrdIc+E!+s)qIp!p}D0LhhiOFCD6n)zT2QGJgOvN$u8@&CG z@Z#4Q>gGUoBG~xQ;l+1Y>cs&DMbvCYIO6RZMH#_;{(8?N%?V~1UJzNFRb zJm0Q`>gAl#8MmL$1y0{*3<1ls{T{dJ=}p;dK+>fAbprnpA0NeH)**Rgjk!pVg{ zm)>Zz89Gh$`iu7awv;BVVc^|~Q z7|D~Ps(@N_?S)DhcUcl)=eoCu%BhX%Mt{`W0o!{_-x%h$mGjdpy3L(p|9nZS`7B{R z&Zoq{ubH3AWbHGs|S)u0%7kMl_At4G~K z+aC+Ma33ef;Ff)syw_1+ZMdo-=@v_cH)#66^`L2bxv^uaxZklwIDt!aXy?Jh2vxiZ zZ+**`^{#mpRDGQP2-phY*4v=S)5|^A^K9_I%Q?>P(kAXXlo;;0*=oBBAv8MBQgA4% zG*AqE&p8C0!%yL!+!S7@=KXomK<~4PLWAUx{_WUyIcgm=_0>FF;IK?neVD`UtaHol zMs=1SSP zxj)E#pmsLg-K>lIGRkk9#xeZ-KseE{Uo;>KozuK})jJogl%g;JN$@?k4Z@v?i3V&w zucl$L!$?x&l`Eb9(V1EzLU8XuWz_aIo_%0K?U>a^sH(eTaEGPcTS)gaMM*jD zc;~=a@{07?cloIjv{MP<2M-f=hHx#XwXfSc&B=^X@|X!HKC4zB~?F*e9B-u)fp+M znY^~FD8m-MccAa%GsDD8cOG-s37bRe4CC1;PFKL!9|2f0DOl7JxY zRQ+a3j^>{&=hY>#9?O3m3B|sWZy#y1-v^k}nHV)4c!2&6k*LZ|1&0_^D>R;#u=~m! zPRkx?#>$gAv}|5jn_ju?(jHCx^((b|1T6C-1MBtIQcK6DbT~ zud#(?!>3N^c$DB*SG|I~lk^R%UjVq(&rp^; zvkf6cZ`-z!TCuh87J_-BOOjG^BaLv(GXV16eK}~FDfo6!wufaSBEW44toMp(lp}$PuwmG^K{CNQqMZzg zk3va|5=k6sxwi4Kb=P0oNu7fnk(thKEEwL!tEq9S76<=Qu#i(WbMKBJ3=>ictlKa+ z79H=wuR z{McLk4K;8G7-Efu_O!Q5{`OqHuZ)=qH1@J}pK@^fZrY|dh+h5(aA<`t{1eT&6h7wt z$Y!l6J6hYoe}v-Q((YR*{W5Iq^ZQ@pq)v{#d%Nm}=|WV1FHEl~B}m+$*^R{FHJHw_ z850S_w$+}JcDN1@sAe#4cfD)90f2BH>`$RJbWJL@<;!p6UnR(Ai#W>_K708H5UhT+ z?9;S?;cqKYqlFzEFE?pR=IzfN)oCZ`&NzP9_!*Ry-SjNnqrsD4X2eifM%FM_^#u>- z$v}WGrF9&~(6nMI(}&7uF9k#b77O-;pip@JuiEn{qv21%OFffNzl2jEk3;M)cF5G_ zk@oN7p-Cn*u2rsX2&+Y$PdJq@mFfBDssp7Vq>{`RT@}gaUGA4JRK4%KD#v=NO=&6W zAv+>e)dyS$VQe5K?!XPjCaZfjsHgjSIfdX&O`dwnbm7vjnzp3Z2Ozy=h@%(pkOL)M z{q!{CWNEw?_r<6g(l$ajP_EKcZ-r<2SLVdC)Qcd8K`$o*6-Akm5PUH;^4ty_PUK=? zbn(Q=)GkyvMa)*sZ98T0&0o=;2=wTcDz!kTLE)=$D-+*7?UtB=1e-9jmgKk)kznw| z`_y^4X?xn?VGGzC1)cPv<9k1K<02 z`4-GP{a>@1#{kwMe`Wpl#f2KFLfJ)bw*uDNL+QR8Sf$g);w?=j1A$pYnK*()7uRoZHZx)Q9}y0fxAGB z_6agzqQ?nx@ipV=jwfqPLo!%|v@xjK0n!oKh^?p}cKDhc?H~ax@kfq?ac(h~H0KNB zNwG&tN4Y|cEg6oD3>D|zEU$r6RpBl=<3;&m?(ZDY0$r6!kS)b+b(2{Gchmhkhqx)K zQPlFPGFX}A5y1BBDW33`{%ZA1uAI1B<5ZVp#K>(1x^}Rb9^p06PVdT z+{#*ioOZ<6mD*H&JW|EE(??H&g33gwp!@|h74<>$bV#hyUE1l6x2zFz>HJ@dER-v+ zT}&RjnfEsi)q8Nn9L;JRk$Z$az8?MWmAr_ueE*zeDl$1^xxvK1%W|$XIpEB2sth70 z*kAPKg|7FUUk|qEcAMvrtZeclDGJBJn$w=^S`O<5ehD2IIx8W_t6l%`oX)6vH+$M- z8nxD3g>72K`^y?Fez)sA(czvd3I#_v&BE3O4e{y2%Eg4=q)CIB2Z=e{u4#MqXRS7^ zhVhpPe8u{f&bfl-MoV%~@bxi3IQ3TBCtXX=ShVvOp|uEQzklrIIP-6nhL`C-Syj=7 zDddq?Wg?%8_1Ela#97$00zEu_?O&~_W_Qw^?+j}9)@ z@6rpN&%&{T&d+LpH@g4 z`>a(}$Upamkl4GX>GrwJB<3&PBZGp1pF)YROczQtH4?c==a(XZ1bb(VEK04S7d;f5 z#vlk=mfqk`Vly&9aN)+;sbEjF?BPfA)-OLY#^UY++)@#Xd0)qvEO!39UJo(JiyyBv z-&35BGik0>&LVsB_HXXjfO(}jQFis$l5on_#6(o1H3C!$*cMIXwPy+g`Q`ai^)L2n zK{ew#1$q2c$`9y12bq`3SkpC~aDv@J`w5ROtJ=+Kg!(TUKHd{)kW2u4BjMFG` zS??^qpsI;y=9KqO4#@=nyB1`Kf&E4w%g0O!?}_m>JW+>FC+`q`77|C{irX`VSy~=k zveUG0tf)>GSPT!!15q|ri)^;8#*3Wc&)q+1<#LAUY|c}stig6_X$9Z3z`Fc(Fjr`j zv)Ft5DX+-C;}#@UQ;|QzcvU>s>NICxsJfqWy{g!r#TppRD*G;Q{MIrL)oHPD0JYaO z^TRY7Zb0dee~~>T9wI-5X=S5A6mw_QqyFTsv50&%m$t0g3dso|771pCH1h1EKXkK+ zU8EEXdHj~0u=T5{QQ6p0!?QV&UN)u-p*?YXWB=FkUyKh~-vIiNaM zdo>QrGmGMMiar)#QA{CPhO50d8y?0aRKBVeQIWg#)<|nXZxSeYg#m_HAjv(^7m7V# zj%Zg^>!YBHTg@1Exv}4wrEYpHu-HUb%vAL#w!{tcAf^EUL3b7MUbBtjUJExhe&tXn zx*+E6brH>b=uHddTs0BBjaX@Hertgvt<^jKdA?lZohG$~Jl=@( z-KN3J@bDQb)p@Q}zO$V9Aiv4;GFJBYLtb}PLCCqbNO5NSbu%#`{b@V>eEVtEOMi&*|Gp=G}r`8g?Q9;(Wz zQ5P*79x5j#G&?dJN%o3yF1T@Y%+5^P<~i6*yaPiHzESDq<8tYHk=Swe>k)uFJd&uS zT&Ab2^4S zDN=7O`ghw@_|;NgGhEPGUxcnV1m2>~nmaulYX>VT)H1q#_Ygr$&+C}zcYhsE*2A-p)IXw6|X(}$rbpUtA`GrS%jWRZFtY`)5xp|M0hGfXqs zp0NqE={kQ}$ZmoRov(Q3#*J#coNGC;R7LG`PfDQ*Y&)r9dH`WG4JTVcpa>Fcplfhg ztgvtIK<)RWo5l-TNE(a(c~BV%bF=tFsYZK3#zC$f!q@RVxm--Apts}^gG?M)ktPbF0%fc*6lvQv zjgG6P1LS}-<31{|l~Cv_K=Pp=RSqrFikK|s+-1H(KCg$Hb3sz}Pp$p=Pc7BH@_&C) zhl%BP_skZyg2||tf_V$d*P?M?<_-=)Wm2Q$zuSplD47KV{TKTt>DaCd%#tXvl6qp{ z(3 zc0_Hjs5tV9GOfb#{5>We{*mEqoOiQV5_*z*L@sk|nanG^3Yu%ee{O@H$~#0G-8=80 zwfjOL9ed~8pID_+SxBPJ{U!nQN_6SDW`=YzMYQMuR7<7%^2)^Oo>af(?YH7(tdga9 zOOU(wO?6)NpmzSNR(?tdJ@WUdbO8U@%Ar<3z$B-S3Rbzuu~yzfG1x?kb_lmwoeauc z{vl_{1R;VIernzLO|e*ixQ8m5H`b#@VD>8zsjt`mkzp0jhK3U39)gO(O^2U*mo1FKYrk3e&#aQ?L0YT3r%kV}YQR-TEvQ($e>+0=$ zM}KWR$dHL%d`hxt}~83 z0!H%a?kur>Jagyrf3OeJHJiat@JR7rV1pFNpVvUF%-eG@{IPPENl(7vBMkkY_0RJy zhrYi!wby$yC77&RT6Ulr`(r zdr@A+rOU6;>FR&(ydcvJGd#3vrBvpq$Uo|gz`wWMTOn#F!Ke)>c!!<^k5NGYzk%h>Wp2?veXv^c0*E*dQ4T(s>xxfn8ZQH!?=P9;D8 zc59;MZeP^=CSXp}=p%WqeKTatVc!TuprGHZ<#GJ#2c9gaDsV5!o}bmh9kcA-L)rO- zo>|MOuuXoF6S{lygB`DVl7?KVB80y`Sf3?aPGFd7wvhz{VmebZiWG3f`tBHzxM3!$ zDn6JS`!(qJ4ri{PPoVd1%wzUhsZtVoe!8p!;rQ_{wSeG3wuz2%J<*Ufrek^ z5v+ALgToO0$Dth0DGR<|tUNZuCWZhYReRS8(L}Lybbz=iV`oqw2&MC$Gy!Xzz9z57 zzp7e`(_jDtC50Egg@BH1sODi`d&upzoR^3r4vDpNhWWEem~M^_a|;I5{c zwk&d!=lEqjuMIHyl*g)3q3K}wI6uvqo81WP55S5_`0 zURA9fz6g1`{H)pZ%wjiMiJNCJ<5BX~YWZ-*; zfpM-w-pzl6^dno{l{qcS(g)*G%r~}$CPx)q+J+eyIdw#d&*e z_ok-iD@5*EDG1_u@N4lXAPwS(I~SpN%7LRmcVX0Ls%rIX=ysAs;8{_^xfi+8?%V4G zhnfeIe)n|+)27nMtClO-ZYK&-5({bTLFLZ@pvSapG?U$1Z=s1p|c5BQ=FYMf>y)TRlRqv$E~9; z@ZY9%n}DxoH(+$aX>ScugdAfDTX@QRtFYr-5dpnktc59PgJ0NkdjinaSuAS^;^~EB z``}47KYYB&6t*&EoJ*q192=swrp__An8J%Rxx=}S?a)4$xZ_hURjOC(k=xD`fB+H$ zMj-S#on&b)ZR52oLILX-4l%^#iAEk+h+@5V^`gw229@z}6_of5~e=-r$X!&>0l z95&}=*_+4&h5LARiz=gw*1cjCvKYN+vzP?G6aB0@U-8Ux9WVJMKl>dJ_Bv)Kmc%sS zT+h&kp85N~JJ%K6eid>S>vp&S3)aUdvAnLKnhZ5qXeroW%; z-ih`E7v>{@4;BJ*D9_o_(~AD8>FwJ zo|WX!izG_G+|y!9_oS3 z(&>~9M+|qy2-04Z(WQo?4G5{FWk=*`04ZuuuC}5ElR!(ulZuh>0Y14kH;s2NMmreP zYS|9YuZYyY%MB7reJNP#{<0)WZ)jE31dO#?Dmhds%{9i7!mT^zR6mNMY!9%hlpGX* z#&J|Fn{fzMf2+(GUTQ7eZzheus?N>iQeL%;`#DLMrTa48Qs_RY_&{*{Tp@m zCsu{4r-k@R@_)t3_n{1erV-XE%GAK*`ZxF%9g=f$72ZKN%#*j$f+8l zTXJcL%taYT!xNhz^C($fXmP)D#MnBeFRS?Ep1~sSn&DtYRmPsWKMFyYvdzZc3(&t&+2=GE97Fn%OMJYk|acwqoE!`=%M(#o` z9IDtE9+DQBMYZr_`9}-Fw)JV)6t^VfLOy)lw$r#r+?Qj-&W^X8TEI4>`hzh#{mc)> z-CGzs#$23Br5^!HH*sAKUuSm#7;H2ZsrwiqU|S^u&NWtziDv0bJtOV_uLE`VyyBj6 zxD3naT=~jVZwj-=BzA|SNJR5pZPQfnj|7MGNYb<{cq$yFQ**<|xAmYnvox`AM^|g6 zD^d_Hw@`ap7&SlYS2#MswWe!K6+<68`Xz#xTAOGhNKHbZ>g2QbY~u&9>5?Bwcs_(; z(ann5l@|2;Br|nqUI;tncdK;J4r?Nuy4#BP5xUFveoW z(e_<4wX)reVQD`A$f7u2RtR4?e!5Gu$GcqHwp48bg3l`5ao<@nIUaVtcj!Ndi?sY# z`R1e%aW#4;|uv1FBI@R9^7D+86c*R%&(joEY?v=gHZ9UkT1HGCb5N-!UAeI!%t6CMLH; zPbm17H`eaUroo@!qcD3;;gJ3J>xN5&V?kS@n4y3UZAFv-^nkrkvhCxdufTeO!}*$V z{lnEDgfo1BlMZL(=eqvRnSW_rk{Zj)Nbfj(!mDDnJ|bHoq*YBV?0q}oCi%*SyY zPG0FBk*w!FsODC#N=C~dj#K5FU`ns*yVamI+>FqJAI`271+s=Nc+SvO`%tRMFqD_| z-sMjU<&lXHZ4KCZrP$yACVJLB6@Pxnb9keO$DldB1PTTwyHu^Y=$-O^5^?UuTq51a zp5uSnEub;E zkVj4*({rSgKMS`VEgjttSd^(2#np7yvm}#~U@n@e#)>_1_LO&W)Y;k+NM8FxZ659R zaO_QGFxEXi_67*;58ULNZMcirs0C7shdnjs0V;XhIN36DC0HEqYfIf4bOQO_$B*IH1w2!W!7MWZ&PVmx9VP&A}XlpFUV@gMQ3ZdylCD?PwZ7jQpxS0M~ z_Vx!%e4*}a+q7ZFBYFIDRHUpdhgSO!%#|u>@9bt8aI#0XMb^}UcWv=##b{!>=G#Ix zrMqDa0C_Ox{e?DR?TOBx)Q2A-IhyqGU=k0Q*kFZFw%7fUl#Em9hZH%3QaYzRR3r8? z7MB%Y63VSYyM*n?!2p20Y`x3_rlvwxW@!~{WG)D~Bu2?UPPzxN zWatVKHkQ<~d^l8GsP$QzkVoSDnh+M{TA9|9r;gY1sm6F!ogd0jd^scsS=RY+mIQ+Yps#L8i)NlxHqcT*(e@{4C+k~|z%6*`4W9Ti< zn~1%%w1fz|Ydt}!7$oSk)6>YUVAA1i%#ZBO@&Zo{?27Fqbm{r_A~w=anJ%oTpt9$z zw74Z(f?{*q=Nxo!(@UNJ9c^37Jx2_cuhu~gKDqdpt!30W)0>Rp&P=_K7~vXx z<;AgDU{E2pBP@GBBjBP#a&rZceG zC9YpPC0|s~r`hCp*m88y_pWb0a{o9xo!aW9tZQV#1FeZK!hTNySX3IW=ko{p*~q!x zNqG0+FC__S6fX~Wga{31;!US9U+GO6S>~HB3Y?0v`0Ydjb7h%DF;4Rg5Qj@KQf}(g zu!^hh!>0{zyi)nZ=w_u~fr7}5YPaWBh3Tygu@j#hYd{phf@|r9E^n4F-=l)iRzACW zL)-b}cQ;~Ol757c%ndwox)aVJdQ>17C1`L(3CU0-Xp`RZdhOxjuI?nP&AvlUIs#eG z+M}%@+!%>P=x9^7Rfl}mP9ZU={Az0j=vk8p_DI}HQW{$ zIq5-AdF zGT%K&=gxMvw$pnGL7rBnR%0Sw6a(ev78K!@wr_a&3bqZ@*H{X;^8FmnUB@Kz ze&7b0P-lltb{fdi-T8Z$dt;g!O*=#$+xUstmi{b3_|iucLuH$>);uXLG!PP3Yaz_J z8W#l5Qh#5TR)z2ya59~Q9ci+GjvQ{SV zu`tPXJmW9O$*(JJ<=6I)8|f3^R!vD~PmRwf#;2K;aYMKnPR{XbJG#le?*9Z>R+<|+ zZ5+IN(F#Siy^xDBS@1`IQR$>gz|lYB__8_A;vN6&_soUf_X(lETj%gol3|fWT)Q$k zt{4kfiIX+pe0Ng1X1}#tTenbobQ;|@y-lJjFSy#9b3H!NN~8_0`o$2QyrrAOe(JwX z=V1gfwGr^))0bV~xr^K1X|!6+-6qBq>oyo&x?AAAMpA~<(voE)$py~)6|wrFX?qf~ ze56f+N0>I&@2RiH?%6qh()9nQIMSYMmPmro_Tl-K!oRMSx~4OjSgaCwLi6GU z&RXqVVJj*GYOYgcCo`8-CsVXq#~aA+(j2HVyz<@^^-p{XF9d6;F&p8WL`9>t3@}An zV#T*k){G|H@6E*36Ba2r*>rcFPaMB_ff){41EF2_IC#=Gd@_D)zIg)*i3fUFXL9^zf2%fA5OoOD`aVn(!KX(~I&AE$6*%;hAM$HI%M@A0*;f!ZY}$m)JY zW{rA5isWNjXEmsLt2*6wvBQQOxsUP(-FH_~5AqfG5)`Ua+@_UMibVw5^-tB7%(tBY_t6ZkJ^tonJ}mx6k1hLz@thdtIhJkqMwiWz z7i(6l{P_xLn*kY9#Y9b;(r|ElB2^^ckx56J7S_-&v8*;CDn;1vRWXHqXCztaP{X-o I`Q!5c09|P>?*IS* diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/1/2/0.jpg deleted file mode 100644 index 6913a2b087bcaab44d4b1cb2a4cf7e92cea59062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9643 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/1/2/1.jpg deleted file mode 100644 index df89ed220abff86b7a6ebde048cd6427533a1e68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15312 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

^0hw>=ycdl0c0`L%NK1XE9zY5 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/1/3/0.jpg deleted file mode 100644 index 8f27415e273302f8e68b11f041dabc05d323e8f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10532 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 CbCZDp diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/1/3/1.jpg deleted file mode 100644 index ce2b06ecb08af6d7f0ed5a71aede2e75d7c1da79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13262 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 Q{d+fdY9K(zemDKU0L;K*x&QzG diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/0/0.jpg deleted file mode 100644 index e3c0312010a8ff72e5d03f840ec730869f9d7642..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8157 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/0/1.jpg deleted file mode 100644 index f3ec3215035c09e69bb908d948cf84ac199f847d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9307 zcmbWcc{G%79RGcf!AKg^D3fKZO@_)?XN1;R90$C%xv9yjam9VE*lol%j+0<0ITBPYJ?LOP@iWl|d;ftEghI zYL_lw(bdy8z*|^aSzo(;!^Y9+uCt4)n>*pbLqGq3Kw`v`$fwVuo<}DpC8wmOy-d$| zlb2smNG>Wasr*n?T~k|E-|*#YYg;>|gWB0YF!+6Fc;v_E^bCD=Zl1BQ_-k!_W0U!J z>)-aye_a1@{;&AI!Tujy{D)j@hiPGl{Ko}i^FMsS{Ola!XwKt0W{^8RCnOZYxnLJb zuPa)PNGh8D5peMR#(h#sXFXX#n>&9p^r11>5%G1Ky1Brg4Z z?#6IV=Ue5T<|i@z}_3AanMs@oaH7!Z7suotdys?qxg7{U)A}6iLaeVard_hq|t zZ29C`k5pj8bp{l^QzaCLbS)1_lC+1zKCmVcp%KXX!-!=G{BDqRg64f z<|8#U+?5?bbS2LFAVUZtn*)h^?|NKxHY4O_ya^HTZpWEz7J9Pt>;d318O`Js@exKX z-H2)yZm@~_oSe1o4p7}x0W7UdG0`_PMgOEG)SvK8*XaCr_Qa3O7R);fUwNU3%#ajy zvtsL%r`m|1Y?(Y)*4+RlJMzChY2wYxzQt zPyL#85oSc+H;``o^1<0aaLSXp`9{ymsKk=7o41+ES;1hfySqZaz|OL-4Uh$k1pHOY zKi#U0i7l%lbWmq!GA=rGdD^L>R3h)wD|SMx?DSQV9&8V3UbY6J&$IzVKgyl&A-rB)kbE=T6LS;6zUtW-X=)i)L)@kl$=qTbmu4Dv}qDs zG(e~r5uEyKJNPQ|eBVXlmKK@$X8O*xa#+EmfP6s;VRH&W%fQeawAB1TEqb>~)W9<@U!xWw^JLKo)ao zv=i>b`m)Bx@OsItH>bZm9g=1YAIXw&|L@v2*V z*TF2WnwKcrUjWx|oIDzHms5T@YnIvWt0CiuxX`4T;@B0alGk}L4t63^bUy$3Uq^p2 zI;lP6+0J(<*_1ce#<@S7r&oDkdh}2p$r73CKAWZYb_?X>1$oml?RWMqTkhin%Q|>LIqYDi2Gt;I^Xt`++WX^6(ag(eO8Ir z?2_A;EU0pZs&Wdt03!Gi{h#w24UGjh$uL*hL~Ma4wlGzyPvOFc`dcj+^$oKsWVJ_+ z=Q8Bwi-emI?QDN{{+8SWt3XW38T$h2x%s9imnm>%&$E8Z){@A9^0Hgkha^UvoO>0p z@Ddv8-8KKirRVf7_^2oJP$>h|2G!RH3Ta860)+n3ZPu)>;=sErO5+9*^UcO zbN#Epxj0^AUl73}>{=n`3P#}at#_(?AWA1hXHTXppbUjd__#5Qh{r19^{OUkYRh5C>^I!83%N6#piy5e;%8|2mLGOqoU z6oKYwP_J02&VeKtB(}wCkr^2({P3+p4~asQc9#rdbsEI#4aGZpsB_XP--Tw&jNe^f z)AOq+c9zzrV8FHTHUoLmYnQBHPH%yZ_D9}Cx-x9kH^IAz zEMAKk4ntKd_C3~LPT*Cc^IVhG>(*wWGW3Krhx}qfp{9uj3mPSJ?H(SpNu6#ZwL9%} z;KZ2d_Z!Zk*;6yu?gQ(>^c<4`whuuW64;L^-lVHdar!fF&g4gq)LCC|Cr}~W8ez)$ ze^u67C2La*JCAsO72E_@to9dBFGM+`XE$lpm!~UDh#zYb(O+URXI^Ja>W9e{=rCWu zF0{Ba0yXBqlKSN-Kz6#MRtknL`DZ>4>C;7^%$b@wPp%DmV8s4{;|>72O=>x#{Z0+7`Ph?iWb-(|lrN`3htbBWBgo|C}(h-%N7zrTX^U4}9{{U0Cc zz;-N~=X*&k+oe;NGqUfwSj#=(g9)FN91l}lvvTk>6B2kV;{a@@H)a$4)%}YhQgP3= z2mVsuNA`Z7d!P3Xij_!z&&WKFdzfD(s27nb`sk6yVq-F4#PT&~Pvbf+0c~u#-X#wv zuZccmg>pNHSxiG$#E)Ub(>6O11^U*K&XF?^McIo zOP@xsTsySRcs&KF6;_yieb4=g5~>^*s1#$#wDCJ^*Y94%8SC;Eh^Yu9?}g+r`m=-U zZa=%9fT4jAk-FW8BbmQvv&ns6z3x08F|sLVD9-`FT)H~m;bVph4AM1$-^nC0>D5;E zga|@+kD}Ex6V(0!Q0YLCRSgyM~kx$tR0 z&yte^a&waP;~xtB#b+IdwHO5t{f&_9!a&{aUxa_x1kPyHe91ikQUg7I%-8>tJ{i0C z+3CJex_FdCm&9~9*UO_!&1$Q860Lj0*3mtYQ!~9-NYpN99aY;yYS&nlzZ~b!(ZOAU zZf^hY)Ld}6*>P@h$++&z<{$S^v?n8w9NMLmNl4H}SVTW~5%WOl zTjq(eMKgz&NLj|!;yO?gF^$}B*1jsD5$Z>D{ zgC{$VKoxjRI)8DNl_&ZpJK8qL>BLyfpp*AYnw0%kDL3?cEX*nAqX{=I<27vc{0XN- zxFw*%>IvTzp#0FkZC+pZ3&h2{w0H0J^@cdOQ=;H$OGE_HXsUE0VtTVxdPCWNb85*@!Nf!i$}~?CIRZ9QTZwdA2u#U@n^N zAANBAlGOu_8wq*SX~)8cqm3u9%uTZ9kV99bhzTU)R^1fyZ$7#a{=Sr|5mw4)^E&BX zM{%#<2T<+OqFK>hkCu2*Rx_23w3xS@td0=qyx#Y_x%c7&}wy) zGA*wQ9)Gw1Fos?&#_8e9TIDJgQF+q|{;MXjAJbK3CgQLM0Ak6EuRFISX}CbF-LIH2 zP;fr)f{x})H(jo@uCdk@8YW6+$rL$041`KVp28eW^;+w(&{Dze!^yI|=kn}3*1g|| z50C~(s|L|+bp?{n-bdh)SP60<*yB#E2(NGsCAY+pU_uc!{r6?hM(<^ zN_3Ru$_OQGGm?f%U)mP@L=sPdWiwrBh#|_>*PAte?l}BF}hfY!?B|` zkmg?F{DQkInf-199l;oS@oYWMPdquniuY3ZFmvDXeQocpI9_`beCLoSNyzDbh!quB zhYVL67PyYP-5Qx^rmOEp{ichh+20mPCiLKQBe(UyG2ex*Y!sxf)ld2r2A#7z7Ky?@ z$^}|PZjwef@sgyM18IIt)T?;ghlQS25Li7fP#7^(Efzp(b(a6f+r4i*Yc6)d*cEa4ZM7_?8&Gj_Z7IV8V7Yu1;o+@$QhPH0;6 zn=5ynTJBD*D_&*bTRBrm@;XNs_hdxUbL6_c!+5fRB}3;cQ4#g|QXXLPUrE4r zj{AM#{@>ZZMUAXa8jE4U&CJbW()t2iM~5Zb9*Wqn1{7HgWwD95KN#BdzX1(nF3D^x zSwYF8x^LD`@CbT81nXY6*{bI|gBZHO)*!{LOa)CDnrvBz#Y6GF0uGej5iXSYt{ z@i<6%*;Ux*tJ|;4C|ml?O3nAr&B;W5XB7&5sTqIB3f$>eY$MH$OUULV13qJ{!+(0Q zwF$bm+wTOG8?*DUSjzRJcf}htLbXQ>verx|8*b%;V?R#baDEb2hh5Hyyaw63K`Ss2 zX)QhdrXhDKF=sE-1RvONJTmsjV;QQWXg_5zhqAeB0FGcv*V$xPJ{U8+fCLNC@+wC-vNGR9xV^Qd_0)(8~}sob#t#>$_(`Q`0Vc04OIo zpGb6WEHl2ahO_Z+dtFr?MceU`DjBUgBMfJ4kj(Oskw4vwo@!O65aNlqDjl^5|>hd zck^1ye7-W*=HkzaWfdj$_$+NQ520*dV`~i4fHI^EKRT zLWFi2wI3FG=xwMG<}o5!X|l~WgB@Li1x^mV+lOw|tf;J{$(diHGnVmk*FUJ3aAU~# z`cY%JGnO0+CN{-|a`!yA4Vz@_bTkx)cZP)v0!MyDZ+Y6tL4A6zR0(JAxwj@nnlC1a zdgsTS_-7fgZG>Z!w8Pr_?S|%TWH<`*EMqlrj(_ z9F2oc4szJ`or-PUPyRUb5-K>h=f*1%1s;BP)|A3-zMKo8P&xC@Wd{F@LrK%;C8N{8 z86u1KV!N22ym zB=8XMM%7W36>7evHdB0q_CjfRAQOkm`V^9$4<^;kCdiw>Htjq0k0HI1hL_rd9?)#= zo#*@mh4Knql!}#{sK4f?0AiMYQ+TCor5DKM&@Chc5uxeye=z&wfBcxqC!6DCb?^N7 ztN7d-j#E$m48qMOmL~E_`H381Dz!i3X?e=&L$l%e%X%)E=;wSctK?JD1(W8}_4ogb zW6Xpkz+dVGh4;y8uwnbVx=(y48t5HMIkIx#OMy#u-ncM@K=@`+aE(_(y=c~99vx(% zV^`EqT;e$tkcRU~N<3yU-*nYLLs{CVBerUd&TyAxLl7y_o7uKzU+WaLy4|ndJtKAm zp?Z$__LljgVWL57GzK7Y`}#dUa_c2=c9L+#^`*yh1chvqa7RFUvmF)r;n4@vz#s5_ zxhFJ)%{R$^bpow9ioR;2mHO#t2<$H^6@0R~Ll#(TW~Dwc-%jXOeDvkqer6gwWG_ci*p%wh zWP*1Mq-oz zM;OzQ)JMpqV^}ivc}2NL*={Rlb$=D41&89TpYWzTf&!>amb>)Cyev=VLz>o5p%k6q zJNXH1#N~WwR&EhuKgJQw!NY=D#zwj~kw~(QKfl`Nn`C;lYVn=l0Y!uk4TC(S+rH%r zM}b_lz|FZ$^=NNTG6KDtonnbCzC?6c2rQJaPVl;Gn*uKNNs4!O4g}WlAJ?{LGQ~%a zxI3KqL(Q94YPw+jn3V4CVYM1<@BS+Oe9wgOPdSf8mR0M$QwkCZF*jy$+Do@I%g}NB zUZN_LVUaQNVt*a&-_GDuJ?bf~Si*49$WSsd?e{m2Y5ly}I0H$p_nI6Q2Y{0w}Ch`dqL zX?XoX#v7uA{ePbYm0YV(Mvpqmp#0F@D_pJI$#RQw=jT!e_G!wPYl0 zpIyZ)WQ#G6FcNY50i&|rte_B+yuq%9`?;CBgVIf>Z-0uzg;U%)Z|rW{9ohWlGrSlb zHH-MPZGHeiFzwjp1K@-{K66@IcsBzutmVc@M$rjm&{Vla$fErh(L+~ z=ICVRJN@>3jW~BP&Y$V}lyU*F33JtzI zcAZbJT)9U&&~{YqvR?quB*=(6G+G9D@&4U1&wSL^-JhUh2uV5aL`kKHu4YmlaCp7u z8=scom#w&jCxZvZO@WGVA-K@7Iu1JqI2*_9M@tD<&IrCQ&ZC2st%d*6`jR7VL<%!V zh~A;SNi1VgcSWrqJ@GTUTH7vq!agz$OX%WXGVAetS2t<^!3sFZIF!aD zUeW!19phL5NYR_BZ>2;v)+b3xVQoDmYY1k6!9y{*PL)ME1LM2jb%lqFPM^`8_78p$ z9;RS~db*%!%xxgJpk&5OWwaTnCoCmHE(>X(+66%)fp?y0Kz$JM?*}vx%lat@UGtYYIl< zv%4qXQSB7JjZlA}-p65H#otjX ze#%=;ACisDM?n=6&c3%TpUkTAn4KMbMHr2rrr?2h)QFBkhJfOp+cWllkv3b>-Z9zW zCRIaUw_kZ)<+XS#)Ym!2PZ)@w6xD)(|N6-oCEvJ;cqO*4oA=PxMR?FY5{cZLNo}dO zZ|dq2-g5&jQ9^BE-N$(B3?^sLpo2Y747pkPZ;-n~P_XJ+mJGu(^KU+M+<4c=X;SUFZIIKT z#>lXaeI@kSY7<;wB4gWr>0)QzT(deI*2r7n{xbLnTM2>LE2G&y7R4Q~dNnz?{dV$% z35;@!>}4?y{hp_U;}vnwtxa>Rpw|l)yMHyFbGG=(<{#t-TgVT7`D~StDWgI2b?XuG z6iV~bICk+XuEA+gA=34(b}ulNEfNR>9SUR4ZJ7V&p4(WI*h#sMcL`y71qR48S-8Mu zd{4FGvHJL?{`@z>Q#q-mn@u*U`lIT3uP@~^Ot=gCFKZt!?&5hb$ROi=H=70Nxyxpb z!<%GTd5T>?FENANAk$?igEFwBLxqjLKANGMpTBRVDp)t4=QHk&vKrUtK7x!pyu2Cv zlj{_SX_KIf#1EyhR}>}?qDgTbavG>ICxl!e&jt-e*!VJr zl43vl27&NdYWqs94}aac-N+qZh70y+Z;3aw(o&)qNrYc$TDn!MC!OvZsq2Pk0n8Tz48Fac#(3YdH+FsdM^gBCeY*paRcCA z?iHUKCK`zw&8Aw^{9jV$;RPD&t(v}yrsvk#aZaP3mxe0I&KrV_oWbip{jVpej1j+? z%7^eb;hytrg?~*6Z5A79F{ZS}Z3~RRD~}ARt96JkVdGCN9%Fkh8;`pbXx!AS0?GS! zUoFpA?!ECGyL@?QU3=g5#Z!@I?(uco^*e(La}sxr^85+3xqX6m6zu7O`=v0wu8!Qu zbCKq}hD=Sy=o@r{K`k)l5*Mn*X=t+5knOJElle}gc=|@v)QOb# z)(2*Da!z1Uh-oqQ7WiGT_OXr~b5Y`v^8*b3XU^oO9pjzOUE0&UM}I&vh_(Fa`)(n3$UY zAP@*}J$!(JVcgOigB!X?1PB_JgtEF$&)YzK{i5Elpl0br0c zz$OF&3xN(=0R#YmI1au2*Wv#(5F41CgA>BV&BJ@Rph^&61A)P8hyEV|9Ig&MoCny2 zID}6ijX96n+=NJDp{kLDJT94Y6-^?x-&bVSZuv)X^N1dUi5)+AN={xuQC&k*3#F}d z{=!8QQ!{f5jGeuMqm%O$H+K)u+g{#20S_Jq1_eLDML&so`s|K_{53Q_!I+$yp7}F7x4O2zvAMPV zcW3usu75fI%lX&T#_CDQs*5xrse0ts2P%Jx9o^ zXyTSpvt1Fn<^P>WR91cbkoDSlR4tOTiNpuX)GtXhy-p@Pybr+Y5zIj_1W{_jcr@+NiFW_SzqovwgxZF8vFeD4+O8tam)g{a0}=-P0;7|8B+gu(XD zp?vRPgZwbN1!=@t*{rvr=DtNcwwtg8{aFg)fwK8#VJeSbpy<|&WIrIRVv4gjs7IQ! zdQ`pa=d;67TFu0;?Ey^k=j{TQHJo)9vgPQ!C40A?Car?XFslp*A|ka2SQA+W7+s3wrd(sgSfMC@__DH&>^8>Fw-yTgfAlh?TYg4X-YTzQRX0z#iY_ZlCwaAj$ z{kePVRud`~_ohAt!l`^Sk<@&Tn;)iBm&VqkDusG}%t!>!x)d36%f_Rxs8OIZCYZ|A z&BEA3DCWa&R6ZN=n8Du?U~FGOUxz1Aff29oU4uwP9=TRaPVpOL=Xo|QH^m-nO+oDA zfQ*QqAorYCITn_y$&Ci}v)VV8LKRfddi!2Lhs>Fti>P}eStNb(D`zVKPNG`Ql##G| zGV9{$h31m>;JHf=_Z1Do6(7MLcIuZrKdyq-pAA_ZO;k1so+iFl!k72f=DO8Ds4-28 zfBSl265%{vgb!Jy`)=`uI*vl}Fx0Zy`M|>G9(r*RZhCywM^rv#!5l0#tGT88hjf%q zb}0FcY{rz`o@;FIqoBn#(k=9e{oMmV$LoCUQh!REjO)D^ZoM%ilqOR)`rL5&0}Hwn z)k?~nPSHY%Tzi+CC}g@{*}FknM8ce8ry0+u@!b0P~pEm4teD+ox50Si`ufstA6< z>@J=fp~Vfmg|^1+d++g&Gs({4eqBuZ@vio?)1Q2myYk(l1l%r7N#a&~uH|{E-91w` z#5x#b@u0a!A<&G8U3gH`Z&y!+lWU-+xk9MydoSuAxR2arqPvA zI9Gvh(~&%cr{de=oScsuizj!qgidjWz}=~8YKsh>&m{){#u};gTg`3GtEMTv`nvZV zH=Jhrl6107-hD18R5NEKU)9wBvut~BxP=d4ImR-`i8DDF=eFY(unA*%W=yZA*dzXK z>c+NoF(;GIAHB7hH9g2dJ7c2TgM#OCD!{Up8dBH#i4C3axTBcV5Ge+ww?SDa&D=5w zCFw^R_PieX9dLBXt5c5Y@6~^ywA$A$$x3^KB?5m8S7?&>)7hziSvr}vv%xH8JBK#< zWe}abi^&jse(S1?jMQ2Wm+Dnsw?Qdo$o{J#7{1><N6%AV7qEjMn{rf%SRw$XVx?eB%+~ z0SOqJ@#lNFq25du)E3rvH7rPIqsR|Mna{K)is}Q4n9o5g~3gaS5K@Lpp17Nfk4D#pDt8T!eKA=s$-TyN3YOG)32?n8QyO4q3B$X;p^+2uw zMz7Prvqp$#>I)v^Jji=0L+My>B9IKE-`kd(}UUhc+Q`!uF0euzU;1g%8we0|4h50 zF4S&Q?t(~^^j9=YpP3%BHH|cwj=Ayo%iS4p6`&R$f-xhjaGzNt`&%`JEvm7dEQIFCRLYrrp($<2JPfve!-`MU;CulbncNV z)3Z7D`ViUyP-ZJjRWP15BauPHf&=KZsm`t9t&axF2#XK0-O_bj11d99j>%YX!vXLv zZ>9{`Ej#>(5UY5$lGBwjn(yh7la^!akFHlCW^$g?egw^`_qL-6NkQwp7OmJ>&{nPc zk||HZ>`%3lzEdp0tJQ4z z_NldItDA=7Mm(=``f#ymMc=ngc5pw%i%;0Nl}*=~u zY$A#|8+NmcKNzg!^Y%m}KMJ2bKa_B$p)P?eBCQ~MZEI zAYk*&9nW|3@T>Xv>RwGrov}-No>-vk;;4AHTkfU)+;=?90!J-h zavZ7)?iP1`)S&U7wRZP%fHa-{vHo&o^7nHYLRcdx~W{voFAS=r&3yY#$(rT9u-V-G&`>UO#&vzS7FeRPc_2c-n96}yxA`)aFTwv zUU|xjr$Uj+@Fn}Ie(aER{{lBtN+^Fo~33H-4*zB z;Q=|6m4y%*1Re$*|6Q-k6#!8TETpd(L4G!c7mut1LhMqm$K_W%(bF=Azkf^u%RZPP%-T&V zuT^?b&vA>VHBbpJw8a)3O3x`Tl-rtU2@!2-KAz@K#K!thmyNg#nAZ(b(X>siqvqJ5-XxzR$;8{{^Pr`!~S%_GuJ@TrMH%o_^g#vL0)Uq)Y? zzKN6O3&!gy)iLt#avO__a0O>#@ntB9)EPL zomIe3s@;Mh_6rih->8|k-YF%((+>fg;`5UC7f z@B3QaqyLPD=G?Vdij-`iVPbJ+x9_|Bmz+xR&OIPm$*N0V={i`nJwYVnBofr3f?^u( zHmB~z4h+7$#GPa#Nrlhw(tiX#j}|nw`trkbXzW+g)_8RGJEP76z%WZkH*dZ26#1~w3bFItzUNUIE-wYo(_Xb?54m(9N3bjM8H^w zNs1xsQwcM``F&!z0Rudw+_Ygp?P>SB}shf2LiMXbRbTc<5iuG2WxMb7m|I zF!&gQ{2!q$U>Vu1qUe~B4!Lp{8@~#-Ang%?l{cpfHuCqt8|AChUY&5s%V#lP-3Bo= zZ_%G`M-IbnCyC6@A^my_ljV}nVsRbgVOzRuYE~2FEU5b!X4^Ef(mfju=XrAPhHWU> z@)^h!2oHg}C?O~OG}E^dEZ6NPZQmL%E;?pP)Fq@r@79N158wU0@AI4_9*_cTb@UDt zww-bik6>il9#G?%<;C58&+|EHysYIzdHxJqMpwFAcV9MO`SM83nvW6- znm14~QK7v@lFLpfFHTlJQ@boiNP8W>X=dJS9{D>qzp=r9EIaV!1_6pqJ5yo$jT3kK z04T*2WTkBNN{207=fYRRcO85aR(hDQ1W=wf&`;YI(;we?AkB|bV4x(HaXm$X93ixAC zIWfv8)q3Ne=>VH{xA_pS;)kPMoz^~`^H;z^EupS)3zi$w$M$$otV80Ng%&OohNt=A zCK5ZL;LiIkhkEH;HSV^|&IYNv9(h!rQ9Y)h8Zdt@Cv6}Nj}feueOSo+lK-7xVOlI5 zp>btY^CpWRB;_s}yboxX^xjtv^BUIIOtRA5C~0uZ_9>VXyF!IW%so#@W5ma(*kX~>M*Ps=LQtMT3eG> zbN6-uoc}T)BkXNZS@3?eG9|(~cs@3G20k;CH=LcS7$21hq8zqnmShaGl=~oOE~Wnz zlTMG}tMfM#k&2lfidAim5pfI>PY3S?lD~f}`&QfQinU;rH?BNkN8Yjmz+lOI+Hs== z=Vvb;{V@R~AnP;r0*QMc1uoYEk|}LFuu!UFzh5{HA-0!L(*XXNF!i(4T!>I@_D{jl zH(EfbkIL$sWqB<=J{7wDVV!xG@tpnfJ7mA)GiqvMt?--5SCbdGB^RQz={(t9Uvq~a zy#FU4Rrq#Um5qW@lTdS9hIpXc{aR*&Mbf2*u_|M4ico&F5Td<{1LD-$s~nc|;}YyL zHSeyU$pT`T&#vH#!$si?6(lkGH#~^)m-=C+z`>}*ZcGIbC;*IFqFGQnnUPoEtIE$Q zP^!L3DRb#V?zO0_AM=mIM|Ye4EDV>d6rJ4A+nO~`x(LWmWEbgeZWXUn)CCX!aLUD} zx1euZU=#`MlCf&zUhN)jQi8QXVWblwM{L%-K{8dWspt2%6$Rw---#FTtxemS;hjZG zu=!oP(|vy7ipf*$=y%A&+Wycmge~s(mHS^49nWOqW@NVSB~0z~fw|?18Pv3FT}-)i zum_}17`;}+bpX_#pcDh)aZ=LYfi(YkHH;FL&EWEHOlI(1H-Ha^wQ8>Aa+I0E@0+#h zcBSc+-=Jt{PN3CmHbfjmIxZkLJ(WUrFi}NbjZ8J>?A~Q5*r^vBU4*3*FiISK*{$tb z+y#QBHW(4-NqXGmoZvF1#Xj)F@dY2J%B%G4S({_@LX)pQ?@yZ;Dn>+h%miH&IgPFj z?baaOd$ms4DCEKye=WYYcQrb`rjR*o5p}Lw2_kj?=-H9iMI1xl&>2Nj18G=KrI;{R zTp4f9q0|;odQ8W~Gt?EQ-lN%PcnO%b-uHUK!3FNTF-LMR@s&=>yv=-3#uB@d0ajg4 z6e&QqicZk%4o#Cx|26x2mCRQ5wJzjne;{SX^1R28JBPUp*iat6xuCzdYv&Qndgw8Z zTpmf-!V)Dzur@p43imBnDi@BOCUo{%SQDAKnTcc|qDFg3JKvt)$icu(voBq4bM^q3 z%SUR$10ok5<$L_X6R{NIob_0Oy?rdR$h+P6P$|sQZg9NtbB+&)1w0|PX1m#yW17W7 z^^c0=dwuo2Cnx#SA-RQ#?~E(m{nR$PwOk>Q3At@f)}J>JaVHw#0e@}Z^AbwlnN0QW zY!}6SrA_tvAD=L`BzDC-vHM$A!P~fssb3{_x3-ijrQ5EzQ^>wGi z=>*>zvVF>oqABd(##{c=E7>D2jmAi##;mfxe!6?x#g<{d(~6pSS0KFCM{kD>*8hdZ zRGbQ{k_w6dsR|DV$2~Qj2sWIw_cFgm()+}?wPI#auP9xMLKKPIx`<53Vwh^9C}4w( zdCMUO6~pv=YdYt}3kkr($D50N0tIUKySR5(9bp9DoAyIae93d65TB=(f`irevr(|s zi&2w2DykvW)jF}>dI;XF;l3r!bQEq4UY~8uXEaP%{V5{yf5zaB4n**stt*d%Pn%xW%|^ZQ(!Z80O;dxS$SjF<_y*x-54Q;+|CN2M7fwFBC;M_iP>1As* zvgt_eKV_2pI0x>zk+}t$UeS@|fs%5?Ux>)pR(m`;d?M0rGE<$eFDiEVqv3)oDAt4Y z+4it1`Mia%6uDS`Et#b7{fDB#D8q5I3*g+a{{ZBEYHGwhN`IeR()MU1HpAK33d_>S z1DjqKC&Zijr26+PE5&~c$wnit*a#lken!o98)8joo~u=|{>=C`^zFtQP4hpHsaU@I z62Icb06kPAMC^}B$N{iB7tD7L#S60zzSf--4jOoS-Gt}e{yVfKK1?s%;?1?Ap_U&< zd#Gl;3Wlv$4Mudr75~}Tso9!!ILCYu!+drqN(pO15jHg|oXACsHka27DZ%^zdf%~W za>dSeVQ~vC^A-Q(-6Fl!zqBBKZOTB=a`J9}h@<3&`my5zF7S0*atByez_^oHBB^G3 z+6`QKB3hyGB-V1cNpIih8U+y~SGzTD^D!V{$|yRQw3@$YArH&Bg2~nmp+&8QdIttj z=B=8=I-r}-8U~^()lna$-p2#QQ8QIc3zPvynZ;|%seNF~E;h7Bp*VQ9+f2(fd*qI6 z9Be8*LxIp49n#u6Ub-G zVs0iT8bjsj^!{hr{U!zRY?I$_#?vXu8xyJG?4HlAk=PS*3*&3r!zx>ygwI<0Jj@c6 zv~tO5C*RY(#L*o8ch;f^Hci&N94CM6qr|sc=hu>}4Kj+}4lF$DcD#iPTb2st^vUdA zyVv`e#t6>{tQeUSkS=~DI&BuvC=TVXk)$X8+vu|Y6{>=o9e8(@@S&5ytcipl8`(ev z%~SI-PvO_QvY$LCDUWSXW$Xkp$q;av`W9@m-!4{=ilc6}vA;tmf#zcqWmw7?Malt0 z+w8Ep!>aa6%OBXK!tk)YSOLD^nd~FFZjzSK2GN;*aU!9iy?@iidlzb~jTipqbXcI#kkp6lN%IvjKgD4)bP2=Ufpe)#bvI zd%q4POI$RMKLTT9Z#a4SOx3~64hY9HJ$bdL!^z3T+XN3Bm3S9=h<4vXdwZX^sq%KL>-lAFyrExE`SR%+1$m{ z06@S%EI0a0kV* z-!Q*@!rr22)#KIL8=t-!A-bSSKyxZnXY*}oOV8cTX-!CjFJz6J+GFuH#O^^;kN%wt z9bQQf6Tay>ZH`I4&K*(>7~CXx9F=$KUuyT`^ye@dPT?3{5-0^g!4UlryB7#C%IrW! zeeKQ%qW`0bLKBC*Z=m@e01>ASe*8r(r=#Dp<}OdUAB8t51TdZ;DXB3J`;0=7(eqYP zv>%SZ68NJ6#W#e;rUAHV7rCtz@Tg^?M({MjSB@3=e}ZQ>ibV4Z+2U&_C$f69=NE^P g!L_7ni9aA-w^FS@Z@++Ul(N%p{O(ph&zUoGXC}9^x2u4As){O#06aWAfEn%sxLp9e0uT}6 z62ZS;Vj?19(z~RjBqXHw$SLmJeQ=NF0rfp400AB+0RKK7!F{~j9snBv zfJcNw`w#GcB|LlrLLy=k(mQ12IDxu*0DL?G0(=~P908oPAFduic%O)xLqwkVfu=bL zr!$RcU`#eC*UPF-TCK5TZZQj&pgUxA59t{gA3f&b<>MEBCLsxwl797CK~YIrMO9lz zSMQy^fuW_<2WuN!h@Gq3XLk=zFYhm3zXgYceh-U{i%&>QO8%LWlbe@c04ppiuCA%A zt8Zv*YVPXp>FtB}4-Ae^OioSD%+AfPts^%!w@}+VyMInj&(1F{|6Za0@%qQ}ztevb z`#*Ty$MM3)xrLDAA1^$758Op?pOA<{gqT`hlf>Nl0jFpnDb356?5fT?Tw+?sv=%O7 zWOUr(Ymff?qxK)n{_ltd{eLn0pTzzbuXz9k0UpkI1or_Tzy=m!a|-}z-U3!EqH5+Y zo1?I3+IN@GQ^YNR^%k(Fc>+a%Fg~|{GE+0(BFFx!TR>*sE#Oz-$tMtM2P$21atm-h z|0f8?oYLUg3{5~$+nP0RaAHAFvWi>4r|EFXOOg%SNpdE)m8)IUab92gEkKqVr$hbS zRmgGFVBF(~7c~vwTR=uEbcHyg8Hzbe!rr6=g3F;tDel|Xw}5SNyvIwDSnr`*fG?xO zPW$P!>GkTQPY(8&?U>9-_!fYW$JK-Z{6|1oA2nQ7%YNb(fGS{U zn|0_aXTV*Y{_|Aq&G>(a-xTfos0 zkef9Mrn zEj`8HP_;?k{LwlLS;1cAy0I`#6)V=;%LDN(W6tuaUQa3bk|)HWgRMcH`|oi-RZqyzUaSU3n-b z4ZV@X(Ey>(e&Q^$(|&`4J5%($?i^IcB-j2kr_=d=E6@EeX(;-fC(%!x_1(;=_Y&q(I?_9tXLw@+yqYG85}HeiP|q{12-@nD|6+9$d3#=UISBRHMYQU7t9I4Pr$x&bx~* zpTqgSTyn^N9Ov(-9aXMqC<91SrRBQEpJr)jTb=HO+UCH`76yQ=ZDC`s!K%GwhPtvD zIu6`)@K%zacvoS>)WUB8Lp)qJE7&@fFEc|xG@kk=NlXpF?i@BgSaJ&&t2TcO)eml_ z*uL>HuiEoWFce7sO!FmHzfr+O6G%|oz20k}XfoU5 zwX}qP;iO+K0T~z0msEcz$XItF`F@4?;M$Qf-}dYEm~v~jo)YXXS(M{+ie`%tN337| z>F`%90fw(@4H~A1YZW1X8m0Mn!utX>BaZhG5yD)FVZH@KNFI=a2N8cC=vJvURR#3; z@sd9jUGN}sJyg^3>Vw;!2ys6$@N&Yp9$#&5sCUQO~NFq4w* zh)iX*kk`1#sy*vgd^?+L7nPX`R@YdP1uE@Qc?+<*!OM3SpmqeWSzGRBA~l91X53}} z7KAq};i5KBoBVX*ynwJ1y7SW!XN~hhcGNe`tCSD~d}-nD*cN6*yco2^kh3kQp5X5yVZUNLH=rpKmO9cE#!oLYyyDSoMg$~nW8PqpE2IRKqYv{VpX6EBR zmc92ywbwWVOQeL-BWijkJ%<|^1fwP=D$C!Jq(FzFeuk{yHM!;)X|RjR%9@3bZow;a zx|(?tqhLe-8Hqa~Y~2liXg`;FU708~(5zGrWVXVvgnR~(+eLL%=|xy5qk|O6adk>& zK@o;Z5W`+TzHz}1$1;yQ@7BfqY65%@j-JvN31FtvVL4t{Ee&nW|XT2>B>@` zh-*e8TLJ-$td?}45w`!yo6McIFWhDe6j1a!88_}oT|OTtwc-K-^RETNy-asr;5Ei5 zUHT=3MUA?HZoK367ZgnbE(Gm3TkkR0;tkF*HNnemMGI+Y@m%z4{DVsR%?U2Qc;p=J zU1_z2m`8{=P!h-Klbswooe*0WF)fOb&65=t$@qw*NRB2ClYx2Hm{kBnMpNPWvqIWd}W&!o% zA1l4>aR&LLvI$*WbTT>z{077kK_uE*A(r7g=k!rWVi3tYH9t( zQ=oZ^r^?5>9!;5(8s>SKM_h4;t+jZn8kyK2^5`yOR5Qf4AFg~0Fbob8BwV(`%{-v# z=>9Scehz$1?FBX6E8HXDs5jOO$f$gYFu=>L)L=)|Xf4!oGQ~pYR?Izt2X!^O>L90l z3KD14?#AR#ETykl#lqLWsyB8%Y6E+Fr0!F#DI;W9s;UcozM@X^E6MBMq<8p4JL_(o zB)Ay!v`|AvKDu;cbq zy|vcUYi|LbTHj=wFuZt;tY@n^nYH8la3-)Lqg9*j=;+3Hy0GaRwx#1D`y98wl{drR{awaq^GP7`0ahiTw$aoMX<}CG}dvS z889D9QFQ;h{Qq_lEvYo3Q}~X%pY;Usa(Wq`>1e57iX`pzg%m@?*SIJXYHZf*4bK^J zB4`sXL}kpr9KAyxvzCus50vG;M>+GH^tz}qgha-sNOOgh2<42L_*VDyw?qQb?(W4KM;lh8mp7RwDGaIkEC+A)%RX=W4dpw!ark z&h9V;6HEr>(oUSGP);Xq$@LZgN@dQjiuU$*>;A}&3fCK-TM?PB7pr1XieFjNijdLr zyex>5i8}J4P&z3y&T5W1a+f;dlvn05AF`ya;1qYP_kjwvk+NfJi9(vwbPcb`llzg( z4Knw68hRv3>mG3u{0=j%QKX_mPgEKgR%Xm%cIEFJ>G|fH zwuC*eSzt@ol>7kY_MT`>DC)6~)bUe)tm(ZTc#oFrOXr#RBI5;QwfctWl^z@)p) z4m4|A3f8aL>2!P3^I;=}e{xrN_rUz3iX=vI`G8 z-1mj#D*w%RSm!X@Pw#J;Io=FBL^cP2KZ-w4LJZU2e^1OMUZ$j?)lj~YwCi14sk3XZ zwPhW*=J!-R(Bl>D@IJun5mU8a$O{2?;A$vsgr@T(XC#O}Yr=S-={IMO+*@ThC??pgXv@sO=ynF3Pu|C%pQW|aRuBn6XGa7$nTRcv@Zt=X zZm2#hk%f-EmPa<24o2^fkmgwQ&L(ao5Ta-$`hYwb0fxF^dvZIINbvHiCFcCH@D|YU zgdTW;)LuNH(g5^1PqdrbK}Gau@AtApMRemgH8w|;{_1MmWCg+Z^}GPFZv+-rXrn(1 zR8m;w)SCK02>pSwkZM);hM&MV=GbDq4!Jzt;u~ia5Eu_7baXxcf{9$>YdO&EBor$grNPHL=vejf zgEF?4s|&b-TBAOwURGa+nArZJY5i(3*#*YSB9z<^+u6|{|NHdKO7dr!WW4R_&ZdwV zLMZ=|TIdkr+i_JA?h^ofM_WLI2NKE(0|GBsr@BQdsDd3&F~gg|*|O^{2de?^ME2A& zFV^@$XZ*vzjtd&B52~liEm&9|G{&6mq2GC2|e48 zD|BbbnY4VzNN?3tj(As*DGpFa5hS7*hJNKf%ROAqZ}&V70Wkn zq&vP;mL=~J&g3rK1Mu8Iyw9i`l1JLhnKKScd zcR6@V6lBQLbb_4UpEG;$i5EUm=DShzebl(lEX@bnIe9*9N?+2YE{95sqO+rZtz{q~ zw@<9Y^nxct_G4~CYm*z8OQR`?^bYaD~QMYgPo7Jbw>~!qsd%qcdV?@HgF)4QfGO_J-qH5RoLMs>g7bsVC-6?LEQGfCn zTk?wOM(Xj>@blY`iZ#|zhePBa#ESc82#CJ0YDl_+u+1t*WkR|4y0HoDJQ=D%K2h3- zcD3_mz5Pr%_X}K4i~GSFM4HsE+5!w7#YtIP(CR=lCVNnhU#lJ+TexgDKIbI9f>KO6 z3XY3BHo!Wr^VK3J;xeaWSzfAneWmUJFxy8_DCjemQmb9}s}YSZtu@Nsv?r)MA2q6x zHH-5EwVETiQEa27pM+z(-q;j)4WR#wK=O`9-BISCWiEnaE}EcwW3@w0OqEXpzM!eb zlXzX^f;}650%Mgz*{-%`v8G5piv)V%5AM!^O#?ee8PFTIYW>B-w|n^Z&-otdpPvEQ z5)`WiUE?!kqhbQ2AM9)J&1Ks)NaQY77WN%V`T@^&#!FPhyuP^%HM+PB8B%CALekEi}7;pRb~w|?eCYt8K13=s3~ zj3nuNTY%#PqPDzE}Km-VxyzhX=GaitOBJhHg2b}!3MU0%Ve=%vsgAJ4Y!u1a3s zVFcmW(fhTsQ$Rcvukj_g99DTdoYgV^!sE8KLLf}geb1+1A+v`Gu_Ip_#q@)P8pus z)?NlyOr$GQK2@1Lt&7r~oTNu)?7xdY5zx(C}y zCf(~7((M@+UWR_HJ#27&-{~~mjINxX816& z?{R!|040F-y?~S<+Y=3W1Rwz?iTm!p*{I`Jp5Ch${8_NK2@h(;Eh{pnEa*3E8zXd? zB1+-(=a(gqN2hxj?AL~#Qfj*7Hg)zN?DZN)?wFGeIWP>al5oV^L@T+%KathZ=|Bde zmGX>DtQg$;Jo$4A`$T%V(I%}Tp_?hZi*DiPrhiJ34BIC79hwsfU-~Opv^2sMI^Ye@ zh)V9f>Sr0snv3oB;5otS7_zX8&~VhSM~)+cgf>GPVDzXW+>*xn_kKA|{|uPnaK#h4 z4ceHhw1^0h{KS&vj4zL=I>A0qsc_~pjNwh-CSd?AvEg>+Knb#3%}igZTNG%=9vewC z2JhtEk8M!`o*`GF5cAoQTPFkad}Y(`4*w)@`y0@Ty*FmidK~@u&$mU1z`rSDCfrMc zqR-A;>y2r`eOI2oS3w=;$X)b*O}LrB)ntc%(B>laTL<0(W&WdH?yetb0;II}a#>l`m%^m#IGHb~cY z%8bl4aAKj|Fy8b{RPBl+!C_!4Is*@}ZYP^5tUoT8nf#$95dM3s^ii{y9g~~tl5nde zD^mPkT1D2%f#|)X$aj_|du2{*DOofjluZPeQE!<-iJ$QQU6@(Vd)^_=hvq$wg3Y(83{8k|0! zZ5;Xz=`kq?J<|Wy=eONQC7xcSVZ^|Fqs~so#|H`J(;XE4uo~%Y9a~?D>sHkrW9j^T zFQK75qW*Oe1{xxlTqCDdPMVI(?viePE`G0jt)?TY9#D=|8poVtfQT}?n>MQ{I*t$g zL8Zm}As=I+IzI1(oz}M`9aNjhW5W-7tEdJa&id%($#HoOyA0Vd&xiz-hyan>z>4(V z4_b~X;ck9UYp%AvW9bs06$2C zccH|<;|^*5@ETpd^3UY?u>vgoJE6~&N4eNEQ$n@lFEECtKZW`pEsa0xSJ?~(k{w5k zD(_^@&<|{-J3FE616EugkbGL#@7hO_q%Slg3t33=U7r@RaEzNO~=U|N!=`V`aLrY@w(NBj;a2CD-0nHji0 zMRkYy#lL$>pYqv^{y;w`p2!?Kt^E9=_`-EN+K{-(EwnTEelJJNAyXqVK(5W(c{;+V zH`C73a=doIho0j)FU!WU!tzQ7PQYL7oUJi-cncW4xQ_g6ptMpVm%^^3GAHxbX?I8o8j(Pf{t?xS}u)PTWEtR9M`X=L2p8*-(R*@M? zKGT^OANoUO`%*1hs?u9@3R&bXw=_H}_;9brL&i-_kc~+gk4)tv{|$*_SA+Nw%P#(3 zaIt_L-L-o%GPyJEW*-LaO1jXsY6fLqrIh-~rjN}U+e*wwp%qFLOXrBR-d;I05`lre zmc~ZAj0%fbXHg?!CSy!qW&sc-+vc1CEBuRI-}Ur|Q%uLaRwIgaJSze0i6A5U#G_z~C`>M}O>i&WcW8>pGo5U~RQ*MeDW_H%8yFkVpM)+`|rB9Lr z_hS1wqGC^jdT@qF*QwY^%{ObxnJe%l_Rf(;lr5Vuh2K?vg|n@#Yk)FmY}P|EdOSKB z%91^_R%)YI#9xL!Wnh_9l9u4Wj)*GL3h+Fy|9r$`fQ%PWN7KQ3q(DQeE2A&GD^)U+ z(wFVa;J{<8jbV=loWWJI6$PZUzRt%d%nNC#7>Fs(7)}b=C|$oArXiXWpwp7&vp<)8 zHFA<2cUQoSIy*IPg69}!xXqY9?)AgL^2hawZx+;WTG`En^_fvu(nA^W&+vMxEF{}> ztFO8-x6#|6w3XKtm+5ZVhDI$<_Q$CW=X$CJoLyr3??3`Xh2d*xi|p9-A$6z(QY*y~ z7~I8)uPByAyA+vDEW1a1X#xo}640$%4rEm5cOm%{IhF7weRR%sGNTT)R{e9*c&hf- zwaG0YX5zWA+06)UBG^g2M4w}`YK&$Tf6v7PQ)H)-d>I8|MD!cz#*H}dm?x0CEq;@y zzbtz^vvsn*;D|rMc<_!4cn-=!{<$dqv1E`hIFr;8C{v%f>z_X2u~wv4Flk9kDsw1e`2r}z2|d=Dee-4{4QR#;a(*}7&yHD zVa_Q}V^`9v)*6YK^l6}oRMPSx1IpFqJYY5X>Aq@)9?ub$$+alk#hp0Xo3+$qn)W9B zL zTBm=HnNyr7`NVx=BEia}gH92MU?|A>{>gd^E0lY)9Pg|*KYuzzl=|tDb87*~X~B>U zZ7W1D3EyOKpH09r%JDReMY(U_oQQ7lFG96a@G$(n<6OQ7im9I22Dqmi_cm z7|r%X5_DKVvSr65mn|t+{N<)z2(7E71A$V~T@kkBVWpUkT&Yj=(`;bR^pINLUpbm( znOVBuDb3`BFo_vII9nz2HhK;7zav*r=NdPgK$>IlwBpHkBU=h*B%o^VYSMIWT*e^- zoP5!%(i#b%&yo;!r|Q?4NB5U3m=D>|*f87tp3Hc^JewEh{{2#stdW`dtcY&2KDyh7 z`Lu;3v#UtoFr207h7Y=`gNhXk$OKUvDXM}v4BZsrrW9Ch$xPNF(ffRHVjf|A6c zu~cg2<&^>ClZ}~17ho4mYc2FFb<6!N$*+&BNWGNTy0I7Zzuo44g1*C_WlF#va$Tz` zg7yQ5p4!PNj&|=KcQKVD0C@sP)*)7&ugysp+m!G2I*k;)cKz;PjrpT~?US&;k}7;S ztZyA#W)I&_m3ew#q;M*_)6VgNCE&)c<)fSt1GQ)m^2j%+=|j_`bLhc1sElXsa7zZ( z%q1I}ROe`Z{b+I})3DX671bJsH%jP>w+~paww|JU2_3gdZwc)qdYLHE?;&peY8Ukk zV(^aXEiY?A3iv~|H*L>lBp`T-leOAKU1tCC3DoCvlx^R9HRY}-kzt7Y6NjEV=AS50 z+PDe&(^i?FYM6ngu4Z6Ifn%-*YvWEzxqjI)Hl3t8&SiIHktE^c4pNus$wjM<-oU!=Koqdgk3o^@905Bchiin65Y6JKKb3-MBx)zdoEY%pI{YRc-i~> ziT@D~b7of#MK_5nh0htRS7CFgQyybIX>&@+8-C5gKfJZ%sAJfprmC@8|pmReqO0!?q zDwegq$JSnMm?C-~w2V81VO!roYt@DmFI}-F4A@>sJM>)B#%A?!$zdj@1>77H>EXY1 zJ_O&9Yuk~e_>6Vi|Dx3`eCL}kD%=A-{$#aX!V?vvDX>;e2}XjsdEv}Xr1S+G`q51T zd6bHx>XJ~oFDyk2jUBi`tog>d+*wOISvXZ0(9ahCttadR#2D%h+pvTo)kTOQovBgs z3w2^`0Aw8i=(ZQ89Uk{vTjsaV#s+%KiP;a*`OBCx;i0)&41#Sd#<5`C6iG$6kC zr z0Nguy0Qw|w6<}sMG0?v)3o|nd8y6cJD=XV+4$f0te5b*DXHK6v13o7r2tF%(_RN{{ z66b|QA>!iVU_nVKNwG^JV&Y=|euROUg@uikjfahmM~wdrzu5n?(c1uCHU@wJ05Mzu z7 zGM^DwHe}(mabdlH0;@zP|HCF>RQ-h?{%u`S)zv@d6#Ln80)po+UXqfQkyTUI(A3ht za`l?AiK&^n1;Wi)sMT>o@(f&jBe+L%x|3&t{!2UPa1i%SmI2k+;F8~F$!pjC4 z=d(p_)*MH&XZVItvTl4HU2WOjt1L6y&wjn%4b=!(woKFpQ^qnj%Br|JwT-1gy6$*8 zWOTxzd+swOMXM<6-JJ_btZ>shK(uc^z;cN&qV`pg75t}xn8bdk&i?e8-q7giOM|_V z`Yj5KW62;+)1zASEeJ0SW?pQXI|ksTf`b9qua04xLU#yKtnr?N8Q<{MZamaahBBbc zN!G`WaGCkZs-O(GhPo=FgT6knl zAse2;1@)~K=G=1TxX~MGl@feCb^x1uU@UH<&J0RUY$u=(<|ll>cL4=wc*wBT8ILg zS9gjw2M9~1cUzCk{Dcp!L4x{lbG^TOE3*CBrgu;2f~T>;URIeLpLZnw` z3XnvcuU41rrLJ%()JeGPXZIuq}zE)Pkl&FIO5hGCH=+T@(j zzhdn>ltFKmD|uK1?4D5mgnn&%d2UA*iJXad}7EyH@jJeipe?qiFWvZd%Cu zR>i&vJA7PCauSZGm=2WXHJoE-d+@S)WPuq*g_GCNY2Vm!p^;aT9mHfg1E%J_J63=z zZl+Ok1V_U*U1u$h11c*Ot<6P?wK!Ye5Dq8 z4i*ZvaF^S*!Ni}GU!^$Z;FS>E!3d8aS!&t98@Nq8yNg?

B(0oLYLG5>jB|SL<8z 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/1/3.jpg deleted file mode 100644 index 32c6e5ae28e354be0e2bc54ad06cdd5421087c4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15862 zcmbWecT^K!5I-8E3JB7a4$_-c=_LZv1*CTnLXl4Bp+!Vc5Qy{+A~iIncLC{5dhgOf zT0%<*;m7yAUpeRf_1?QVyXRzg?#}(p+@1OC&fUBDyLG^0O;rt501gfg;O+enaJK|d z2H@k}H{AdB1o-#_M30Dw2nmTElaM}qMD>`Oit;ffCG}G#I_f8kPbewr+36XXS)M(6 zMoq`T&B4mW#QKc&zl-4D6A%y)5|I-Tk+afJ(y;!2Zg-sk3L+c;4geR24e)>h2bTip zt_Q#Z0N~)?kM_R-|Idc=02dFRfRN}RG0D9^{bRrb99-N7_v60@a4#Kte;$BGflv8N zM3I0>&z6u4Of4FokWa*}RNY0RKXJ+-X6OCkA@P%^v~={GT--dod@sZ$B&DQflwYZ+ zs;O&e8Wx#u&B7C z6kb+STUX!E*wozeySt~iuYX{0XmV+;6xPc=*pm2q+cx2yMYsY@*>r)Jh5Y)m;zS z#q>{U?7Sz4pK!d`;5_>e+W&>@{~fRo|G$v^Z(#oi*CK!v7w6u2xD)^&U<>-!<_@5J z2RMOY+l4S%9s3=(r_QS;H)|P12%nWZfS3))F{G#u+S7>5x&y3n!LC#90REd;RLN~l zy9Kh~ANHTKS>*ls)|)h73O7dU4zQauwyleh&rBP_y*B@XKX3>5PlsF;luxYW4lu@_ zH&lq2yQx&|W%+$>DyVh`pu7X1Hhoa~cYvM_EMyt0nzxPS4>SCw1@*dD`NEXw{t6bi z!?1ygd)c+)<*<7JjoYzF7#9dbZAx(8t?{OjC7}Sz*>S!cssbEH!$LaNc|)Rst&+D0 zVBZ%U<`v1CsW3zLDd=uty-)&o;o4RI9l-i)x1>YXnYjR7u%X6eTr{_8al%}tA*mtW(0Y_U$~zdFZ1z6uzTctH4zK@y2XazV zu32{X>;a4y21b#emN-5*x>r|`>~_B|$0kFBZny3Lzf3T^tFM~Y^X~xfg|78}yhTNC z@2?>j;31VjY%smTn9%pU>j!s$NTEcvRU1rH$A)TqB$8_I=N%xoIPKph5INDoXCnyw zYZ(e++0fdyxYD}=gg`Ig@7LJ6u|eX@DxWatFK$!UkYm78Mt%3j`+lH{5?f1!Vf!Fi zy-Qi(iR8ArF*$0hBjXN0FQItv7!xe|g{hz!JCj-T9RQ-jpmw8%CFs~Rx>5yx#42On zA)nSki$thUuJ^L@cYw|`%)5vCboW?N%TZtMkM(k$T)sqS3gTDB-TxcAJ+EuEsRG;q z!inK2CuqmqdpKa&hDxtp|LE;FltKdu9b*eiA!I=wLn)n=L0B^omhcWRTjEtMK^PnW z{B-Y_B#Ntg=*`Y|(MAlCP>N_O&y(J5G}H!*B|rT}2tMez8f6i>0bY$t z2DIMKWxLp$pXiQzfbW?Q(As;?O=3D$&0*45_IsTM4IK{L2hN`@(K1-OBp>M5E6l#X zCLv$J>DWc#;_cbJIKAK#DxW(*7;qAncXNidi_hx;oxb!*9lw`St@`);RXaY(d`c;A9#dM5$zt+Cce>p3{ zxUwrQ09Olqf~Ft^XD{A|-5V+QW7rE1JBU9py7+_q{>J+w^f=xZym+zg0kz6!BrFUj z3MYCE9CF`5`$_1XWB?(t^ZTPaz`v3W)eY=G;bzl|TlgWG<+S*jq)>Co!}p9rD9j#( zy^|D+vO37}4p6B(`<`6#HihMsLTe`!c#@#84LgZAFGAb_7Qf++Ft4RBL^9j73#I6c z5CT^G8xJ*FbDJ=G2*NA1ZQaK#ngTsy0jQm{%=DMt*NW&#lxW_@XL5%-z~R)-D&&aMP`drHaE<=7l;>xaLDvy2 zOGXLN(oDxXzj52_J${>6nDi%14KU>i$ydJ36OKw0v9QJ+0A@2<2J%`-`Gg_J^kBH@ zM^N8Kvh7A!2bOqfk?b(^SojX$dmjWs^E=v{<#vFG@fd-pRIcP3N#}O}VoM+f>DkY+ zq5qpZS0(1rkvucH_L&spPNym5@*b45FR?(0Zd zP*8-LLS54fz;-3;+L#OO`v-p6;xW04ECvYzFSiU-ph_qTZ9bfhLM zQ-$S}anef~DRyl@)2Z}5ZP?~G#$!jGfqL@(UVIFU6Xv{~KMYsB#@3U~{*fBRCx>pU zeAL?c;i4;i*{h7$iO-Ry#*s{4EkG0^S#G9#`9^4(@Gj)>UDXOK)GO`)OA?BTeH!4T zJ<$SSxRbEId-~5*x;=Qde-|oz%-Fu+Resx zHokSbkUm2__tEqAH0;$41e%Vzn#^pdYze99U7q&ClW zkZg0j;tK^K7G({T*}em8@YE7Wchrn{7vMJV{Cx?=PUyRqG@cpf1JeZaih2jePCUNi z{(F#(mB#S*RGk4`bvrNiZpdp(GhyL%3!Cl@VanuxBWDKCKg35GBQ7c>c0<1ie93(Y zqGO+kQrmN#aPwQEeyv3!j7a*e=2h`6jO_>1*_BGP{SpQs6((_WyGgP<>zOSn2(W?F zl^WzW)FQ@F9n}Bc5C=%Xsd;bO<|cAkI~D5AW{XU_6n-thXYo(^H*|WIs|w`r0Gb)L zZcf`6MfmJ}>TXRs=6lU|ACtsiE!(N|S$F^`bZ+M_fSPezbT>V>Vy{;_R*Tu7(k910 zcAP80Tr%$!k{f<945uG$IIKM*ZcWF@Tx&QjjN`v8(XWl-=@J~|y0qzz8S-+gM!WTZXwK_P~c$+q@?LLU;sLM|)fRM(8psH0yPi_P~OCQi1>B+TRM^&jd; z!5dH1QUdM(tf|ZogKJv<`AD3ZYLL*K7EB56?DhD$PCb!h@ZQ2TEsWfT)cw8VG+7rzC zd$b!V6Il18UVGBTpQ3t8<5CLIp%hrwk_#7)gKPNlc%)b`yn2(fcKWzy^R$Xf%RlmR zm_&6owh36N?dpl&6UosWzl?KL_$cB&$wcT~n4IaDpxAXQ%DsO}puUcI&pjmC>{3TI&&Q}p%2n|D;?ix+hWn;HC6Jh@VGC`4W&&HP^A8Tr;?a<=Vl}~J(cQYlrlv*H zLY@~I9yaAas5D>J3f#91hFhw*t^R0MmGLqqh96e#y_wR^kni|h&!8)8p3X|X$TLlP zbCzUYeO<0U&nXl4*%P((HjRCW6>2_~)onoZv7ymxx&Ls7Z4)W3->sI2c8s)Q_3Iyg z_EvWam!-7IS^1IpX#RMKHF=r=y#B1H;%i+{QL7kB+Lcza?KvoO+fQP$FkPeg`Oq=P z&vZe;DH=$dLbX&3^2p!YiH^6OVNIGA?PE@H{RF~=^1~MfML)>7=PdV*|6!(laPBZl zXMuQ;)>zSO-m#-U)n)+&5nHGa3-EUic@vi48BZPtkriVtGreU?WOopM36XAC#yQ!_ zz_48v^}B!tC2el3Kqej}R?UUj;>_l18LiK54=yillDLwT`g~BIWwz3)4{O z`EXEi-lLiRjJJ!SW!}WMmC|UtTF3g9$#JdA0RwO!Yq|*V4LP#v)1Onh1G6LhkGY2( zs0U!P#))fvwRi@S=KQhMYH|1^{4ApY5J#hX!!1YxS7_$RM=mWbLc6FX4}(_;Glx2U3rmf!}3NOzyc>Mh@>I0{Hjxa-S5b;$q_0O(#CyrRRJ`mA2)?AaXMH#-(VY;p!i$<~^k|)TS0!?Nh?b)Owih~b}uD0=NSC+?4F9p$v1`z%&Uq2rZe=m3kZXf&Jq9P za2v2%nu&LAx@Xz~qgHa%1tqdt!@8q2++Skrw{+*wYQe65J<0axENrvhWJ)ju$UafI z!ik4!)~pJij{FXE2*)&TG%AU31)XE-cY&?IF7(V);hI~#?myI}#_ykT)pPZxJaxo7|FZ!i1%I=|5Y5bR#Op~e;NGQ*e`j$(h7Otia}6En~{|>7U8OL zMOS0V@wAdFOT0&qyveNLmps{G{cSt^$iZwvS>i9Ax_2mqCjCLum9{*)af0E7H#n91 zL93NiN3`XZLE^Pl+!FcYKXZ64i;?4vhYgPkuHJq?fGvxAJ!SB+BN>4{@5qiIKpZ$DA&(OFU~tAl-EQT6pXxN1L@ zDocr$Nm1a9bhQ0btkIwwn|3TQddtVkS3Y|mG3m~p`9qG+`nz^+io4VL8FjVt3$J5* z`$yhq)y(T(!Dtiqzt1IKPZfXO4}i;gJ9$UrQe#?8v~1V2XjFoK3*rEd&4|V}V29@H zzZIC@7%pVzdONtmX4|gqcqiat5a8kTamvG)$Yx6EI{?9fxmB4q9^!f1No-qU$d5h1 z9)HCr(@Cy`zaJ0;JP@4syGye*_NUe#=n9>kUiGh#eIxIQ*}O<^lXo#^;&c6yq1fff z2VzkIjFM43 z4w3lorf_0UxzEzTVYeN-%3A7f8%UlA7+$z5wVwBSE=_qe)P;ejQKX9_MwrWw^Yhg% z-fZx7mbH`9jZg7$J~a-eyf@0otRV-cw?mycxts5*z%zAjkSE z+gLm||1a>dW!vd-!&Ee@yPpzt{S_68c)g^hsU>~XPi*wrrcX6jp1be(D1{`I8ht~U zj`~F>H$l6)!$gU$mJj3rti`}PcJs@ex#P*FlE{&X(CRVHW7?5^EPDUi_=9Q!kGc^% zlW=*=UjaXD9QQ5-)?c6GK}6NCK?B&Is_v>lTMfVIlCO7wDKiJ@t1ecPFETV9Cjkhj z65?sJS;)lr>cVZ!LVhAbeWHd|mHG*D2J2t={B?lF&syQ<6#;<6-dz=+^FK015@-Gq zw8V`btG^|HReb7gM)|s(?en3GqOfVZGT|Oo2|fRFhLnezN9E|RF4lC_EwM#8adm=< zx0j~w^1t-DN(C^isrk4rBz)js((W@|7hQ6&eTz$z@l~~E&hRd7&m=AkEG&Dby$zwZ ztK2*DVarY7ho){0d+cl*%e%`YOJ{J+>n{mU{u(v!R_TCE93&AHGTH%-#>^#WqiSXUz(KIgpk4j`@9fCE&5&E#GuQ!KM%yEH%fdB0`r>% zYAufW{68FyRVf}?Tm5zCL+Z|~RB@yR7Vhw7r*c4j^YpAMJ(=dRq?>(t+fc!Tr{W;bmOZhuZ@rjrmX@H}f zZeW`ERQ1`DAH|)l^(}0I0|&I^#jayLZ#nglN+w}W?xZdswv&Ak^73`@!>dfKk z80B85y7{c@2P@8I>|WsQXkM|Ro8R;-UjP<)yLw75Q}N3%Mw1!PG(X2(|xiE^-& z-jup5ZmZ!FgP=C0gzB{&1gy*kb@T&N6H0U*_Npl-rghOL2LLQanR@6BuNat7fB3K^ z>noS36Z_!O3`HbeVW+3h+VV?JF+C1Kar8S24~pIG!&EVDX;v;?2EH>+LT4|C%6nzB~UgZ#^ckR8O`f`?8ehchc=O`A6ixtoC*^u|2 zkQ^*g9|G=XkU=>)=1N^C7|OXC<2Q~Ls*(NKv5!O5tn=c`6uDMA{RgX>cE!J^{KKkJ z4(~S>O>E9eJ}+F!5Ik=>eiKW3OjR-^e^_60CK)xtw`P08+t2s>ny`cKkzXPmaSi)# z`+l7Gm+07OMRTGrx9N~3hPEP-CNybg=0czem)&gFnc1B+i^s`Z<$;Fq$s53p&YZfA_*VMD(+zlR<)+W z=`1zNgSDaN*JD^qrH84|6no6t0XUl)t~rTJgeK(8I?#EKT0ywcx#`i2d~~*N3_<*~ zV|%=mmk&7*MneM{44Pk;gXxhc4S@*T@JBe39ETm5B`S3-zBLMRdh$x|;w% z8=Xgxqn^yR01AovN83GWI|wePH}iea^r|eaI_$V{%hY)&A5jobo@kRo3CkQoT`q-Q zO!Bthwrl9sEm1uCqO7V6Y7LFiE*GNRYXpl83M~jPz0CU1Jr_G$XYzO@{rI^M#X2FO zEotTTtgrctNp7^?neP}TxSPIEUIv7hdwZDIe#$`No#{T})_a93_0}*{jSx}gz$mco zAZXJYroNQfX3`Dq#{BtxskK)W{qL{FG^Ub@vgGz?p4G1DHo$bojj_LUala8P`{1d^ zQM&Zf;NW_gUk-SEjY83lG=SGj)rZkLmvA$7_I0MvXG&a;MXNz=l&tNt20A?R{ItpC zVaXA@P#4yTDQL#Lk>6%6U+1EuPN+)or~*^!lanAc6v0xW#*4B6 z@Lp`48E>A>MQ5%g2soMAoILZ&uReIV^94$FcxK&~2Wp8RytQ*8mPLqJ*Z#m~Hr0`V ztX;@m=;)XvTbCHFkyottiCbhmYsTFPIWY#lCPyC5mR9DrZjkt}wwSqV2n?|cMl@^= zubaHC3nm*lO&Jim_O*z*!%FPNNB<`MdUA`qe0VhXIqYzsApxGCEHE0F@m`I3an zje@b!UIruTX)6(<>M1b zDm&6gc~{s6ZoV|aD@0%<x{iSH zz*r8)toR-8e$wbmZ^e~9aQ2jT_Pa<9j^Z%gtZnA`(vP!Vu{BHu#5K;e=aZ8 zBs=)|^m9vJ$OC`>0;}X?r|pSXveP;&b?zCw7!y^07-;IPu)mpyJkm9*T>Z=O#rI{D zTP-g)6HpGDTqFK#l~a)RQU?c{>^)!!`~J)V&XGjas+pHgkvCWLx>kK)$XiW0asX{e zLY~165o;kk%qG2+?o}3DQwlSTQOtf|k)Z!~LIJV-{2cZCXj@_mKRIdp!$b8xXlrJ? zyt2**)=5i?oc34Bd?g)6^pe+ z*Zq<`kgG*9``M$I+J2_CtBkJ2uZaq6f6J`{f4h1=ktIpSo-C5BO~&cfbB6yKbBtvu zS07MS_;^tj#6Z%Ze7W1CH2SVllt?nf$X#?n1&!x(d4u%B(b>2&u+&jLb*$ zE*6b+oSiv2M%*0q9o2$CaoA4AE8O8kraA#q$H6a`Si)@W9i%J zqAXwxY}Z_A%q+~GPsf5?U38Nn8E1bnn=}xmbMmdiMs$2$jXGiZXa!p(5#TF*Y?vs5 zrT%-BD#VZK`#WR62TOV;x0`V7$J`cE^>X)x2dmi}K424P0f*Jz3kPk?oL6AA-_nMx z926e$sgde52=8PKUG|xRZTW39LuiFNVT=W#r=h1VdOSXepPt|W>KU`&f+UV)6iNF3 zG%J8@P`;q%^UkZ%h{w`^+eZx9+5dp?{J45)PYwE%mX_#FMb{+OI-Nd1DGU^SYn3=2 zvN`3{@ah9`-_(kx{880W(96367`>@mRBrwcl4jb5-I+%aN+;bb`OG`@B_r ztkRKM%|ZMhApw-^ObSNNK94C5o@AyRbu%4G;bsd$EV0r|W1e%FfGFkdfsnQ%{oyO@ zhl3o`r1b%9(>Z4xx1J%b;0~h9S1!+9J>{+RViFt<~;KsfuKlDjruns znbg;P>KG;BvF0qDjzFY)GE*;*E7-WceUuU;*Q z+0^~&;J8fa{X12y&aE^>_Xdcqn0S&j2hwsruI2Thb|I0-;ZR*br385E$ZR%F*5#-9 zWZ?Cjv|p;w9utjq*jgn-sw=O#Ft>IjkX10&X=BxN z%Y;%MFUU!ZiP@G|xL@~4am$~@yLeuwGc$vTslEVdwKg~B;IdXw()29z3=aZ$a0lQxmx$R3S%TVtT{wmNN-cj8 zNJ`^nCRhKNrW(=mB2Zgw#@6F+?=Iw{3{#;g087mL=Ar3gUlMc4 zWkBYv85aq1km@}=){j(Gje9L-@gqC0(7S)J2ik=wqlKR}rY>x1HBTBT`-sel35?vl z#IQ6Z=CsM!?9qF61vvJ|zIAamX}M1rT7eZii5#>EIo&PcQ@C0<;$JrX!GM)TH}3zkAy@UT3$WtAbFpY zSf_T*(e{tzDg}N&`S)k?l|4%S(R63ub*L8VOfOp$NzF~>bfuRtCy24epqIC{x*@R zqh}9^nMjhe=wtrc_RIG2;K$A4htk~py3;}x6>iI`L*FGVsku{`yWyp6MVt&) z9YP3tXa2SOwFRPcOWei|5@OPdi4*G)|3npmDNbvF1=`iIs8Iof6oKkN68KmN`$ZL> z?o%s^KX-tIw_W5aYVPYW8;`Y0&;fl_e%U}=C@`y5R(1Tr?*2K=i7g^yNMpv>x&_;j zu{+(*(cTZAu+aAOKq#3N!&nK79r!!tTVSXAqox+K!-DH)yF6>F48hr#Sl{6l=KEDi zzake*dxii$Nv*V(o5=pza;qh{T62AxC=a2>LniP5ItV%W%R{fWdf`OHjNMpjCTk>W zlmyoHrxkL!8P8WaI_)ro5@L+b1_UzI##qpCITB>Y91S2?!sT( zYC7Y8ms~Vfe&#R`Yfn~)dmTTcoI_l381+rj^_B6kOk)-Z&FVxWlHR}t|ZNY=5t zn%b^$8RuagwF9ZV6pp8nv-fjJa(k?rzsxi`(VEv+{;HgTeB~=)y{Udx_q)L{LYkbJ z5sw8qaGTKQEkp$KM|-Gd^UX5p%F~m2>Ilq1mNxxxbe2FHaxrs`f2V4Jx^G3DBLQW2 zFx(!+Z)vG{rn-^t{VHDUViWzh+)}Mvlr{m!`iQO%s^GGen&?Y$93$*Acb~Lv6pze3 z8FW2>{wAJuaYJ_i_EA5*p1$PiWU7m~3sn!s!SZbQl#nS*l2}*!$e=il-c6E4(pzy; zAq5Vm2CKm~^s=v*vGrE=3VL0}%FFRH3nr31GnViL$UD2Ar(XokP;dITe?JjtJe8Tu zmVTE`{=7-HEJm*Ei4ux#kFKlBimrsq8=zFRquA z9Wi)b9xcP~ppJ_a9}@gIr5UpB4{NQ5VEw`vE)c^+TW^A?LAU(he=$&KuNInan3Jp5 zeou9_UdfMf`r_5MCB;@|WjW|l{fBwujpT`3TeXKs(ip1Ou6|R)yQZ#2jh4lW_l+)G z-02ADM$&MILnKS6da2N+U%X7;ItAAWS@Lk}h4-?3nM*Y`NRCrg-TWt;bh2+^Kh1U{ z`$D?OYyAZn(=Xq3UNJhM{#aPwAO#S*c3OJmUQpkb_?M}3NZ172b%mZZD885*#>7b% z#;2}oaD-diBXT+-Sii~!I~K&FS2c2J?U808t;2YcV{k@e#+p^4tii>^pTDc6m(YIj z7k=2W@I*C%KMSBFB;!TDUGS7;c9nk6xeBti&}I3hQ>HX1x!Z?g=%*B!ES#wen>z!s z$NSnF5J2~bFUiv4PnILm@ZM&TCRZd@uRb}5jMry{!=)l;f~Kb-$b2kt3Zj=?`;DD+ zwdpXIf5gw-eAl?$xzHaGu3#COY+|q}4ZE}#$zQA#8j%ka@Ajp+XqI3W%$wyb4+=6p z1JBq<)>;tY(|wOYi;c)?LFp`&^OyE(OH!x{0v6frOyj!=BZ29aG?TV1HL2*)2BoKI zWa@*PgyDyC3Fkk6IiMJ`XU2~x2UEIkR)_{qx+?DgWY@8Kjg-n@irhcSAM&NS6|ifX z*D-Ze8dV)>x+7O`JMrxd2)Bg=>beN&xJW-YF_AowxgACer`&a)PP7(C`06kG zYF&8!Li(^@XC~j}GEvd{h(Vh%)+)^2jiPQVXSI7VYm4^Zs`Ix8(#y3pw2N&{{Bw*V zW6eJ}yPoSU4bK;FR0}I|c=JdBYVa(v3K@r(GHLgSkcoj3yDj^Osc$Fe@U1qAk(Wk} zj84*<+*2jWQ&ZFo<<3b%NJAmIH*1pI3b#J9C8`pw2^o}bkR@73a43Onz;4M8adYgf z{HGzKPFhlO8{M=+Z0P-bvcmfEm2MG`GQ!80(4jth-64^WDn8j~;|!uA9^(MccN+=f zCWO*95>zGlEPR6var1oi3F7VxbT=PVI1hQ+h$Ou_L_C_$|9&nI^a{Kh!(D9N&hO`# z`gul=$M;zjGFSpB8AfdCEO3c;0b%#6*HSk4!b1DUak8fcYateL?Voi^?vH-o%TYU8 zG%8$ff4_e{owXCgG+`~8?OhasgPImu3Xd3WwDfg>jk!=?d%2E>ydGOvuM2<9flL?UeM**dZaKTkhPY zSLGCD-HcWDOTA1loTPh|qHnsn=KT8wRse8)<6SRIIm85Bne(H)j#K67Oj^^QP+kuA zGS%NI`l)-JWg`^?5dOtnORHC5(3DSxQkXc~p?`&!5<3=tER7>?D+=Phw520kPAN1l z$|kx!3GCyA3r{udG`6BoU%^p*uIEU&<)SW0vQ@R&IN!3-$D4N>=u5DeiCLMUS?!B;`O% zilCUilITj+Axf9UxH3NlPM<#me7&Y`<*tza=$H3=GzO zcL`6F=wDs2d0RUoo+f@Wrw!vj@Ds1@i>-;MrQMTa%=DIXBUgf zuF;b#uRLIY=(esVRWe8?UMjaI$kGB|$xx8!@S+?oKexbr^Oy15u9fc*(60Nvj+~>462ei{e%Zlof%}J4tL>&iHc{PdZ|&y zhty8laN5lV;2*wTxSm?zaAV*u^HOUEIMYFYOHt1}W;(LvlHebn= zhK}yG8NBHrmb0vuwpzt|B$8wP>7)H66xg_6#jWFoZ1Ur$o@eAp*q{8D+aGNc zbdKd^9P=0k%Ggcge&=cm5@A}yd{Nnrl(oyPOp{3nK7v2g37I(#3D8-htw;T<9w~;( z)ax3!m^}i;3yfNa?pbkU4x4jv-1{*f*jO&`k1MY}AsxGhefXsMfFftYJsd`ef^C8#>~4tKaqq=?p9$zR}u|lsD5gIxqduabs#_nJurc8R&{ZrF)PFssp!-&wls~bLS_OOh*hQv1Z^3%7Da) zm#L&8)w~~iCWjGJ4%FKBRlWHj8$1=gS}fl@c$f)>Q~%%uODRN}aot`6+z*GC`Vnw4 zWk|)?djN5Hrjh!{2)kZewg~lhW2!XABj$&)%^o7xGd{13?d_f*XH~tw;l4Md_~3jD zkyXb?(cqzJsjs*$y1Q>Y%h(^?Fd&wV6OJ-~vw#H6-p%f@ zEvF2AZ#LF0=VmTn%x#n+bheZCG4m<=KsD&E1R#pvyv+(ON% zi%&qR46(Hi{>MzRMk$tg8Hmv42Q?A+-ANZ?ipo|@aU8Y-Or3}4rJDa{G?%hdeTJ#_ z)lL*w7#QQT&r6N^#0+>h#nDNcuBjHxf=iT;cvI9jUU>o$-M($PuVPE>s{RA281V8` z*E~R)6-wn3lWq_T`nOuj;J)1GT&nHFW8e9j=B=vYSfl3N+?&RhI3=Z5d`$`29!vy; z+}m5=M45zr%L;qVb=AMh^Utkn+vAr)0<;DDtUf+aa|;Dv_;+dlie~3R>5UwaFVLk4=uaJdT^3Ng+d?Yiyv^3~F3|W05E=~;f1CI-!=K+FZ zDG0>F!}l`hSk<3(1zJ`b$++}>2EMOl-=4kE*g6N~MsR04mc%$KMRu*eM`?vOqnW*ROPSC(Yq{w| zH<=|qiZ8|l$9v2<1J9yXiNAuAE-nx6DFuYhYumz6hYlPOFNQXXdbj-uTr$!jjKIWV zV&$c2@gmOGuXd7dG>$hVCKn?!)I@GaKQ&o5-)GsI2`N=2FI|v{_PbnhO4Tp973*U3 zhqh4!aa6;dOavo1s5$ZytI$+E()S*nev95-L1DQU^GhSeoC!H|%-`EcUvU(HTpqgV zjDG+pU}?-MAvZn5>A-X!^~w9sNw~+2ABxp36o|Uw+i5oAT`lz*CeEO#IpV`~d@Sr6 z1LsMxMvS8#)e=rNVvGRqHEheQ+!CE;vfd}=tjlPvL3Vs5|7=n;F@si=+&?v-F*j=V zAJ3Z8n^~+LE`tUk%jc5FHzhm)VZJLG+#n!`f$`%R#FV7v+4$p(vRp&GW6xFft;E3X zIDgSD1}LD6YB5rOVjJ?$ReeUfNVT7;)O3JV(m*{B)lh?IK2mo}{X1#~K!X36<_5>t zk88ZEsO6kkt`Zi@24jPbeJ^XwINQqEA@ZC!jre19giOCu&S~BJH2NOLR`RsVJa3q4 z-ZlK5T>M?^qkb?w2<^o$Ek6g0ddBCB)h#=5LN7C#50_bMv~)~xBObN zmRZ>~jRvtebMo-zb*hBKmrP^ZZ(4s+(|QALu;1_%Y=H>6v)YUksi{ z8VF8&$mrT#EPqeSC^>xPP4-CYt;Eb`qjidUqV-1_0L5A}JaOaHuvFw?o`3)xdo#_@ zbX8HGu9N0rPp;il&P;`PvP(Y$3h=G+|A$%&R{fR7_C*A-6Gg2e7S z<_zZdSU=NK^_!C7Ajc}z+BP7^yTdDRhcnBrI5It!`sZK+>f4%$<1e?95{sPu0>L<) z*?r95LnPbp9!;P3L5Qs(l6GI1RIH zoPt%ltPlD=OL_l!eT(NcnGQti{(Z!4$Xr590lmIu{26p6V@b2F%v#j=UAuVSiuChM zRn?U0UnZ>fXJ19)MPNS^F7T&%T`DhCWH;VaXMfeuLuBLr)7WjgEVTobE`PC5B@N&) zBKA^U@6Yxb&kk~mpD8Fa9i&Zj_-X9e>Y@6(T z=A`z|H#4gWoL?>4eSJWyAkr$uBu|JK3!2NzJbGL--p0J)7-J)}D-d9Be>r9Y9iv&? zPaG9*f${Gi2lz4_Mza0+5+#CWOfJ9AviXCym|s$#@bUDSs|xI18)q;k(q6ISVm|Hg?j20pX$Y^3SYbJ8{(rkCb9bT%$5m-M;bNOHv}B@X2fo zcSOK&^R(ak-+YPoprive^I38F8OGzBKMn$*pY@1>Zk(hK8e6j=si*x2zJI7MA#FZZ zDl27`t&JSpmqLaLhna!YJ;Ed^&IixX?qWc|R5Vr3D$o{Cd6!lv7>n}g-8 ztKwn&?6iug=aaDXbxOjydVz$&Na2C%6xyZ6ZSg~`q*P)_oyA5pgi%Ab^+4@XzLs6! zBmO4dE&@(t5$wtSZXHJ}nqHXk{mLcFwz{3sV((Do9l*8HacBEX_S5qQsr(0usUDEnDhMge-YM(lnyL>3tyY%R>e4sRZu?kXm#P-g z^;ww3KkC!?zBf7R3KKbId=Icw)d4P?qi2SrZIQS=J>f@j9k3}(j9*IZ6k#IGyD6yw zJdgEY-@(HAnoOj@lM`W%UrK_PgjE_IK66bc<0d;g0mh!MLP<^9!zxzB-M2of__g}_ zICzyK!2|NpR9O?#O8Vc0ls=ubgIsXaePkH}1VQ8iBnnIV>V0GB@Mo(vSGIKxy!~W zRh3Mm!xp;E98v)HrDhxq0aSrsfrLa}N?p(>`{Sa6c40_A9?v-*&dFSn=p&sM_8Csl zufp@KiVkD=QGv(cIhGV}nULWXwO1Cp#_r{d%a-aN9^{kZLL8trr*M^=D)OwS8Lc;W z07>Qu`7)j#?pyVV{>^c0u#+a*#ZaOneT!jt5hpVoKwEx`kfVAT`d8Ev~F9*kg5Q%MV*J1lbz*ao8;%in|QPNr-k zI{BK|lj1K()F%#3;g$krhI#s;YAkucTbH`!Us_%~ne}-->@wRl5d|pLb4-dMlIo?zdRbpOl)aQLxCf1TizRoH8{xR pr7a3CE8Y}W57PzVX3qFwLYN+^hg5y|>jZi@z6;mN^M~Fo{10APf$snS diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/2/0.jpg deleted file mode 100644 index 7c390948178866dcbea9f05c0726c306ef073385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10657 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 M*_KK>`gZ!i0SZmd6aWAK diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/2/1.jpg deleted file mode 100644 index 3e7abe713796c195cd9b2fdd35bab1a56d93d923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12456 zcmbWdXHb(*`2HIR5PDHSN@xNiMJ4nW5ctx2?+Aq61Bwv33Mz)sK|0bxN2Ci%HKBv_ z-U39rbm@P7r_P*L=bU?IpEtX+bAM)cXRqDox}CmV2GDA%YN!GT2nYancLi`e2T%qO z6Ws;yf4(Hd#3ZCtq@*AaDJ=yh8P$DS`uq22@7<$+z{X6^2xh!@kA<5B%+A5Z#YNA| z!^gweqr^M3{*ASNLp1(DK_lG1Q8++*PU{~WjN06J0v0096<@DM;qM*yTFxa|gT z000EUciH|=!v9AQ5CVyaNkF7z

(UqMK&i1Or?IyTt{CzX<&VbSiEcEjuuy@wiy zC%cWLNR6B}>dzBhOgvRSP(d|dX`6sX5{0uY$Jy7kF1Wx|tb@N6giQp1?qhtjqGOPu&?UddxE zN&;7e>g+_D9IBPI{e1Q#rhhLA9S*Eg2%gjy1}W|1xWwa~L3Fs3LKiKyPCYRhhPam! zYzZcfT7NaG^~@`@hmkfeGj+}Z&g1!xLax^21znKQl4-m&YA8fp*Rj(ZX^-uq5J1lzQ?T`9OH#Z2j>^5#eE~rmE16z$^N! zae4vg4Lw(a;yz9>oN)PJPDL%{3-JnfYbGrus41Z=YwL^6!QDSf){`) zBZHT5CDiJ$1a0<3b+=bL_i;}f1gVXnLZ{<8*Ep7$!#PlY5T4aaOEQ8OjbHft5*~E2 z96bun=UJsW8JmCNJbo%0-L}_+g0RNAMGEQp?t)4UyJO)E&E*=8Q;sUMrr8X*>B6!a z{!NtFTT1aii=IcVTPC|j4l@rZ>Eq2Fj1R1tNPpkNaTYSZ-RG{yE+Mmt-wldl-_%!d z+;=2a-}zLY&pIWYnX`BW?V1NAw#XB=Mg}-zNpWZR3&4$S^QN0Op8R-f zlMyU{f%92D3oxNjQ^?2_rD0ERDI2%JE`-E+>MuF&DcA!okarc= zdOhnssKRvV*MuA&Px$v4(7Eq(FNF)h$;cJromw&2uKsDVdb`>FGVbs0`QSq|iRUV= zSa{y_e#uJ~^(FBzx&Y=(y516hBeSLzlkH1wcPFNb=1{$Q=6ASkU6;PR1|vo2O{ZrWOH|0*KG-N|uP4nu{xc zY>{_5jRZuT!W_#f-0e^8Ng7fl)7{DbrS=5_tLVS5C`czcPiT$~z5v%$(`! zb1s6X1|t?~iaAE&5J6#HYvNBfLH=hw(C0ZLyGcV>&L3i;c}F-YFDpwhWup-hzBds` z-0Lg+_GeZw4uYdkn_A4)v1FqmkX7F_QLP(=ZinuF_~k`0sDPMPa3lr&@?9sFeX({6 zn{b{=Z0LyT<6F3v?auzpPGi`QK*E3IX4zoBb17KbP7lfAt2p3AR>|@4MU7H3?(^q!_XkzAu*C7 z%`gKm|9jt9>wdcTK4+bCKAgSw+P}S@^TdAk-Td7;;E9@&suBPP2M1tze*x~60IvZL z@b3lhzbC^H3c=(|7W@D1dtQq0B`_!I4l5MavVHzoV#8C z5CFh=a6j7r2K+w-2Nw_j0RbV=L*hsG4eFl&aB=YPaPP-|4{+Z)`2ITppZoy@v*0TN zN*yag7I!M4u!LM9R>kTrYTaMQY{J$apC1y_Jbgy{`~^D)Cl|MfsF=8fq}1y-Zes6AV@1Xwd?)^JCJv+a+yt+pJ$MqlQ z|C0Y3?Ek?bfj!|lAWLOlI#gP7%%lhmd5z&Ba@9d=v+%V~gBA;V0(B2vUB|LRV;HAFSZLDY zKk`yqnG+#i<$~#V0K24HJY8^39SpMnHq;(N0J(ZB4KsOn^UIR*7EgIY9TxEJW)er@ zEFYrgi&yrnXJj4ONx;60gt z(h2ipmqz|5uU21KsSl2t(kF}e?7K&^G1^{T0p#$G1$Rc!=Z;xj z+usx=4Z9w}h7dCIPpi`I0Kvo#Ee*is`&laW_^~7CBc5BZWO7)tL@LgS2BS+mTw}2_ zhIfEa#Fg$;)F?;m>ND^x{bIrJ;}Ga1Dwx%ZEdl; z=`#8S0?y_+u!GyTAm|ox=><{c}$mh7o zDWC~~Fc2l8R}InXj5de`u7AfqU}DWHe-v~F!0#yJPwZT01$X`g7XrN8chSA2?b44j zp3Yd=0e_Tk{Hk9Fe|B~~w)&%p2=h3AAUw}}S&6N2ie|~lDz|B}Q##le7dCua`J11# z=lO=njduDiEhGQdWB+r(BdPZcI$gzO_MwBIGR0nXTd4%3Abp5mNyEw$O$j_Uv{5U6 z_$L|%wj1@A7t8r08BjSXo=8HV+4RImKHC8H7}G?XMT6X?k?2*d2ic~o9e=eJeoM|H zXIFP0;4t(B&%*M{kc@p(pLWtYQ6fWi=@^Ik^EmclvMSfvwuZ-YW3%_G+GyJ%ejpn(C{?@6@}ji zhg5+(S1d~}Fj{gJ1Vtw`R}hVFq<>$op`v4M$yJ7_EuQRF-T_ujzp!EDT%4L$9IW$R zm-zF_X_xK{87(=M>1nooW*wlQg`+B;S4=5 zlP@I7I@?Xit;hOFJx|>Sx3LZ5zPWaaaxKY5L5s+!=|hc|r{GJILv2WpyU0?omW6`y zMUZyV@WYosJ^zOKml+T32ZrFczIa-H2cR4;I=;;%x&wT0yv=-}2Q6CEtOzw6^T)XZ zMWfr$hWr8aMY4w$zt-jKokQXY9!7 zLdELCcj7F@HVitqhQP1F+H~rM+o?+Erpg`XkKJ#yuY6`veq+vC?+JG(U=9pBd6C1% z*#)m87#$Dq01Hl4`$9Uc8&~<6d%G=)7U2@Mh$tl%1m2prXdbL4Ho%p7Zq3i$DCI*$ z5zH~4jc6eZIN9{z{fEz$#z~=oF{h#wV}0}8aow!a4!^Jp7y3Iu={Ioa9RPjC_vH(w zOJ1r?v{o^!^(^Qdj|tKlhSuk!hf}4v(dDuNusm<_&W$9=NbI3i;^Vm**>N$ zVEonW-wD~A3|}eAxLrDD4BDXM>P@Q>+31fI1O_nO^vc0Yq;P&~1VCyKgi&%11#JZ( z!ce}257MbeLPGfHTFkMWCncp~E<>CQ{+;`kY}2!^)Jbcs7%mfb0Ew>{3ykAOHb0~lx?v9 zMceKGGI}4ZK+VSap0|@bMZ$;xnaySX-&~k4iZ#fmkJe~dfmbkg z`NT@{y3A-T96hwq=%vK+FggqEt;BXO;D8dfL$&7cFiy2gM1Q7plf8m&>KKKb^@6XwLL>E`8eY9OzlNfR0(Pp4CO`d(QTE?L zA@FZgV6_eXIlpAjBtM>gc9Y>f>wxLhl|k$4)erNg`* zl&cp;|MB1ju zq~3KLBW|TtbH876ulc+>lgGO2sFJSg3c?H|InK(I$HrGNYETEerNnvU4J(G5*I)?F z0ZLWO$1X#&lrb8}>DZ~7;;U*^1P60RAq~Sg{N!V?^W`Xingw^@7B~)g%lA@qww3@jM(bGM&_-p;S6pJnkBTH^Cf?A(B zCVT;}Vd4bRksX`*EW&sRUC)Z>{Hu|;g%rI~iG)8(>|4Ju8*itW&KSv$=uH!!utm%1 zmaismglvUKZhRiIg(mm8gTu*_+ z=c7K&70Bo>kmnVxm#o_??AsDYbWFFPU9)L)ar8#Qmy<6`kc4i|%4X7n55H&Hd@;0x zritpSZCEjZm!JD;*aU@fwK6Cvh-3-Pm(lt{J@ksQh=*L>%Zhj>f%KumXQN))eu;)t zl`$soMV4)z0hY<|&$s4;q}J)7XS~rVio9d@HgF8uX=Tt%MKPGS*(UV)hQt-aZbA!|=?f_55f6(SzGF&$6gvvTnx+904 z-BLeIKOo&<3ecBiNwgWUO=#%vCDYN6v&NM7VjYFqe}%4vQuTQ9YZ9G_igWj7+yNvD zR>n;nhbppn5xb)@oSr8Vp8|Xe2xn~qr&R6$j!97Gpr*e+kvICFRcJ^ZK@qb&bDfvV1Xrco`k`SC`klWO>YekCZ2={ojkW)?Mn!@|!L; z-cX^NPr51?FukEhKf+1G+HWiBwcyFRKwZFaTJuT;Ck?fRu(IhjA_+_T{90hvg)@4KRLS~b>Hg;2n7>}uDvhNCuKtwsQYA)GWMvc@DCUq+@g#JRqe5v?yh0M1&tA%G_TlgyA2SD^(qBgn)J^{o^~9bc`Ud${l+2B>nf z!sc?arV�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 E1AMk3J^%m! diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/4/0.jpg deleted file mode 100644 index eabb83c797f17f2d050def7490a89ec0dadfd923..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8474 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 DwUaJM diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/4/1.jpg deleted file mode 100644 index 54e6b007638c5635711fd66bf0e865cf2d293713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12265 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 L57JeI-u?a`tsc*t diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/4/2.jpg deleted file mode 100644 index 311241c8d8dd68f5e0c9e6bdd93c92450720fc7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16477 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 ONjPipD?QNFkN*H+1YbM= diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/5/1.jpg deleted file mode 100644 index 01a1caf81b392c69579a146845461cb84fa24c72..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10274 zcmbWdc{o&W7(YA=M#vUL_Rt`ep&09+vSnu^sqD*SSA!8_iAs~5&=_PHOV+X_S;~w- zMwaaB3}eYomIgoH_x&x`_5Ss~?|rUw{yEP%=lNXsbAO)ubKmD=*urdG`06>OI z07f1LAP>XI4}cf|z`%Su+y5r~KaGJA$i&P7Vm-sgembC*8^Fi_1Tvn^{}jOK=&;lK z045%0UI~Z}%Q*{2&?SF9#mJ;QR!QCJHh#-r8&XP60a0hz&R-A^yeNGcEF&v-qCA)VG+K#q_pPK=i0jZhQ=@L-+y!vh@GUa{(-@v-@_xLW3zJ<>ihz2acOyTYkOz+ z@815w;eWXP!}-7L{|5H|z{PWli}BPgOrZa8F)#+5oXT=48Q?oICUP72LJ=i zJS=5Vy>Y;Glc%y=%Rx4kJ|mV#{GEBfCMxIR+Ir-&XW4L8`c1E00He~%?_>b+o2>nf zn9TQ5b!*xyCxGRW7v9NgGjrKeceFLj?%KakTwOPuD(JWd!8*qw8MQ(yn8hi0R9foZ zB8u%*!tX@R30puwE2ICu6_EoSn9}Dh%=Ke?|KEVQuo6z2U-62Pa);^?mKUwmdgN*A z65)R3xQcc*daq@aoV$kT3BAt|YtDu#0gBoD68jAywpgWY@qbqVMN1Zf5+6kcYo-Z~mW;EQJDt>tSX=`{p zfn~~5rC8rlF|^+;DLdmI%F?p&RvXh?Y7$nqbGP{4K&*lx^uvt7$1WjHLhxJ+P#n^_ zyKyVAs{^Uw`D=>ff*hZ#O^H$MoNsr?_qgY5OyMno*iHH7$9^1fr z=pN++Fl3$TEjbu!QWj<>5vlu;n_Ghy@a4isFWC?)@Ipd%_8`3l>l+KNX6d2 zbB67g#|M(JOVvSGX|x_ZcAjeK;Tb2nEoIFXaA5&vg*%e1(JPl|?ZRLVaXXw00)m=L z6olUBnu4s9dXmb70f8mthI4=jQFf;lc7#v`H!MQ`$Pld5mEsF<%o52C%7$*L)Z|I@ z;gH-8rHlg*!5FxV;MUuKB%85)&Dq{9;j0#B6nr0#7p3hvD{;Px*cx3j|Te?{bH%$ooBAzQt_zo=8xZCarsW;~I#m^A=u&*`!*D0t zy)yRJ1 z-Dc;SyW2`v>nQb@NqJrJn2k^j6y4hBQ zw-m2}8j3;>TfRS{hm;R}EH>5qYZ*PJaioPE@SgJ&ma)&V>a%+AYT$J^+0DguV#|Lb zX&-)NbjlS{@G@x136+4rQ4j=krB5+qT0RU~E$>#W*9|>+ZpXuKDRJiRFjkn|h?^}9x_-|%{BgPRpFcM^~_hdjUSw(CVDW;oL@4! zAjNTflbe@QDZ#?>+8Q($q{zHDx)7rW_BFb5b?;L=!eA7W|1ESOBXUp=Ftdr1;|`qW zI~dIzd`ih(H?~UekVqLX{%7P`-CujHAOWq!3?-fb>}qD1dhip^%Ixsna=Oj@dj3=8 z>X+=Aq~Mm6p3X;KIdZz2^`&Yi_1-LmApb6#LPfX^=*viptXBjEwlYkVy8nLo>pmMkFS2Est$V8zJkx_#m*9w`S(|wAOkt_9d^wAw>ll3T0PIgArp^v87z`--T z5+mNtR#Xw{=?9axz)flu)wm|cu&3Efpx=^6r@JKAcAs5crUXZa4zv}j875aZJv-6z z5)jI8jJ9JzM=;(42)m26mw0el&N@+ge7^?&UA6WRl1=xzE61@*!8@DY9FP~ z6xZEwb^Z|RLoDe$0j%V-W2d6x#7W}SLLsw(Sk56KF}rZC6$@PL>*C088>t-;8ND%` z0#NkvQXw!&yJMRZ6=D)ARA*63Ha^I}E)&7r+pCXx;a{ zc~I<8RK~0Eh37|q;xj2L^rabqqNhfORolNGX@|%>9R~xS)I?Ibkx<&2K2`Q6c>7w; zljpgc>y}H22YaC!t%?PaO;Ujth&R*;rpXk{PKVXL;Xl3iatDRdY32;+QX8_~ln0F+ zUyN_-Z2iOl6NdTu{8f|2^c9ur3~v@bL3Gs793+{d<3=ya6VZ}B&xfr}M zK%e`npQUTtIXnB&Zn|gE0wMh8yCa5cpjQ9wkL}+dwE!zAa6%xlnAYEn)a8Q+bEZLH zmnVW~TT6$7P-32D@Tw&($amR8TUH~*R9C07sC1ibgi0f|Em>b0l)hV>7{rfQ_E_EE z^Kt&AL_Pu7!b6$1uX7{CAX-rcU&dcNCF~F$ zg1_Xtrv#y4I1T@b(KZT&leIgKH))p&%vlz^W;P?IS5^;gkn-$F0$?Fkb^R+jNAC~9 zJbRiTL$7CCznlPG+C3zH{&e=MvjFLodK5_u=Oq*Lh?Ic?uHLsVlvJIHM}g{Cu5IGM z0`~2v1k(v&ODD5;QX64_C>AAV1h~zF z1EE5JO=4Zx^17RpLH64Tk9NO)Is4`IZOnS2AIdpl`**EGy=R`_!-iHT z6m1~xK*N`(qvJbU?b-?8_A{$CQd19cFmDtuW$`0-b*w}07sh?-xc0{s;nCHo0x2c6p@#QYpg#z~#4mO}F2&wIffwa=pC1)s7eiewF`~T~jQVWCLZ?1{jpTkX^J8jMUs%?WQDy0(?OcDe|iiQ9Z)E) z$|b|bI9F}>&Z1^XLFt{Sk*iUxVvs}5W~HA(?EY^hq@0T;r*&40{qBjpUY{OcI`z_$ z!+q(e0s zi>b%_K!7^+1W?->)(nGn+9=+*ZPIA%YE~hO#LXnM=U_JcY&nucag8@B@}=+LrBZf? z`$w`IuPTK%??y0dYD>y{KL1MH1@;%;3Iot;uS;*5I4N!Q1EaG5;dHGTv|RW?V$2w) z*?fQLn)Dn0=swQR8)lE9`}~b4)rC(KYQjE~c5>e(;xi=dnuZ6~AY&G(w`*YWzQ zCPl&up9qfhS~S*`*G+}6GCdXcgY{l{|JL|RR4!D#5oWh!ck_v|Nh>E-G_7}xS?!Zc zA`oo{SJC0b_i+8Z!#u^X%q!X-Z$BXsEz#fke?7V2Pg3j+ zQq;p79B-~=@m~UH&&%j67 z@6K@g8-GWIS~n|%g`(IBF4^`~w^#VzTYVJlqW!qbtT{V3S?N^W<(oYT_=w@8`^VGx z&;Fc^4YJ8@l~d}q{m0gv);XhVF`7+%j@Lt@Za z>t8xI36zTv`*?k;4&zHaiDjb7Tc(O=(=_B|>RBNUm$Sskl-hfXYJYdd>~6n}mqt#F z09-b0>aN`lOley^Mjye?2?Mcgs-bbzfajA(HHiGPjglL?W$(=-nW_cHmn>45W=+Ek zG__J8AM*8r_~ey_5jnJ_W7MFNhBDQ@f|GTIXLlK$X6x8+6sFa3gnGgZNQ&N>`_M5_ z{`n(T1}q3&TBR35qLkOb8p$YzQ$>6+$0jQ99s^gxPId1` zS*bAzviFGCz(N1+L*hEOy0w=;SJ`K7n8dN>2>^zAz@ax|rF|Lq{W8YS6VTr3$H(Rq zB-*Go$ls|-9jwl^NEaX?SX7aOmqGTl6dP|BdAgt4kdsQS=g5yU!h!4e_)9qYP6<-` z0Bwa0hj)+jx=w{ZoN({|Vxn`my*jTw>Oy3^iNmExcEw^j#Q?o9bbGc*U*0FJ=zsG5 z6~DeSs=^Qd9>%q8GEbzBJ^uq%pWbukS@rb^bxwKE!GvJ{w&0w;cas=g^em*GWZg*4 zFzr`RC0a!H-J|U6BDK;{dNiKmmd=tron^IIeFQOap>mqEFj-Tnt~b5;k;a6q90(ZG zBA(^jL$zdX?@Ir?f>}4x{L&A9rJvq5!V%qGb&Q^U^qMJg{BwVSYmI(4sndQdtogt7 zSAON^)$*&!A$NIc9?+R1m>v0Trma@E@1vbh-SQbaQW?wP&LkS$gez0J>*`ctw$|KO zFA_I5S;4PAVHFWxo4IYGZf|V#DY@;g&j^fIe*!2iaG%j@QK@WZsKZptK?a={I_}ljv-}<_xDvX=hw*CkX=u7bs90T>80OSL8(=C;- zl*AC#-5s%#V)%w0>QJ;LXWuGuhiMB%!5oXGJxI0{dj8Q_oFc_}W)DVNGAF(L*;Ku> zv~L~Pns|#-brJ`nS@_H_i>Xp&g#TfYML%x0u8sHMju3(hr4y9mUbI=cn%DZ+4I!g6gE$|12)VQ&pGK)C#t?Y#I09+pI?WFb&o zQx67PIp%9u{1y?1y=>j+h}k_pH~}!ky%F@{GD^Zo1{{X=&&c~?4gsL%E250WbQ5vQ z?j_v*T!df)^%9LKvW;M(&Ze{8ros7b+U{Ws1U7pd<_Xug8t+ewRa3|_r}~IvLy_g| znvukxIrF<8*P^2nHp|IDj1luNbwUl4Y8N7&QR}AuPY*SyYdsf0y~p&=yu#_2vwnLNu2v zBo4-2;O_dH96VUZM4?|sCm3O>>9RlvYYg@i54np0>;X(DIW4!z-H{hkkJZ=yjvKNS z)fRhw${9z9@cD!4PV&`6)dHsRxC+5oTL&qJ|4c zvRcrM6Tmy6PZ7aPS!J)VfD082yK@D)`ggjq&No?~^`a;(cuIdx1LIv`N(0p$KbTdP zeE;=phX>$qex_(q&7*IhRR!hz6vDkIDT85VzdvxC88bWD9iacSep~MWwP=`e2nbWq zgsvOk)_)1u5QtYW)G8P>!gS%G0)Qi>emq;j(G=GpZRJ?Zi1nD;f1(fa9*4`FgxYdl~8k_kZ{uYc2Oz4<2@HSFaA@8qS* z@sLH{Y9zzjlipXFo&eseGYArlXq&rb$m)aSbFJb*bTpx)eo7O@);HihEkQQo1yzgY zHq^3zlBdd*ank4s^T|k&_(sr+^H2#PJK|Bu4JXzelfqe zaq#-OkyMI_xapR%_My%5za9B*&!*afuMyez;YUA7@+=@zTn@hF_Xkgn`K@6#p(r!Q zxL>*u`)V7BE|bX&F9m~MGouPZ-8K2!evEm+g6emiYqnU0Z7fZEJhBOE1)QT~(+Nv& z+IX`7xYqDiw0mUhZXs#4HSZoU$&`8#;5fr(j0y1kcOR>lFE!|{+Le&jFctcYwo?H4 z_XWqIHkge>tqGhKVRNXSY>H`c`>0m&Ma}({@!$CImm%*3>0i zW-8d=aE2mMgC^4~LjoWV%d)2?RZE7>ODB+huOmvvcXx?fbEz7}d3Bv_$L2;;zheDBI_qnQB&qK1v)u`^W6eg#nl0pJSTPp{*eV)LpUdnuq6mFT%AsZXdvSM_ za(Q9?(o0E_Pu;v*uAJ)~pldw4@!OuF2@32mNi)|usE*8;rPMd;`GxOwfdW)dqtKHh z`da|3J$oJ}OiLm1;XNe%4y<>U(PSejH!02+4$l8RB(^4&VQ9beNzMb!*Dl1Hg0}NA zo<2SSz!iiB1~!TsTZsdgvWZhGN1k6(aGxQsO3hBg`{GdbTPKsAR)&e+D0+d*P^a|R zOeyuct{HIf)Ipnh9^jIz?96 zwpf~`%f**b3r=Q_8t9*l%_R@~&R0O-3GA_s^xJMFJstWP zw&9oSYcc8hK4AEpOqd)&W|g2^WIAncUDMfn0#I5L2`)M>Aaw%R{pk$u@#c5Bj_|V} zq6?V<)HoRc$P)mxgby2I-Cf;UEaUzTgF1Y6gU<^UM4@ln)Dfb6Zi!N#YJEMl5)6W@ z1$lc>CakI|;A0o&?PEJhJAYy2cZJp8b+uaa@^>z4lVG!E2G5CGBb0@)AMQ|%93o@+ z`1o3IeO2W1cS$FJQ4aLcGg$<@GY`{^)G{}!bR5=fF{2sBJ>I#T1Yr0AfeK?O7#Da< z>deoJ@lZ>uTm=JgWe_KqzM#A$)G!hux4IT2nqv{?t8?yCsp<0$#V(LMCE0%jxpQds zD8v=X+4JMscuFsdOXryXOh8agQZfT{DW#8VyFXPH@RkTF0jKCPnvfgn{y0l$AB*+I z0D&0J{6?*vR*r2MTUD`9xNOP$WAU5)d(ndhsyh_kBb2Ms!oNj8v zSx(ZR1wcig>X>>M;tta7K!;orLO@?X0X)>@0xulACP`MFZnzhN<@DP2{3kZ_TXqiz zcof(slz^XiK$7txyQ@aw3k#jJoIr~*ABUbF6@KbK8$KV2*t^bRGOc1}n=95Ybm}<- zBd?B}!-bhZ5~jvXL#T&C7>;C3=qjBrl@3v2Cx^V$6_XOHi*sXaZk-WAhrA3N|_6OsfoiE>d64iATJv6uZJ z8VxG+*oVA*`;`HE0x(-LzAosS7QFmGBm5a&PN`w^wKdp-?30$Y>Fd;=O`ERuFeI&{ zSW~4R6sjV4#GgFX@FDhR{O(e<5li5k`>|KVttK{T<3os}UKQ0cSHfjbZd6ytxVVaG zK{fqxYR6CaCRpVZMp{X8uM)%Z1tuN{9#Sz}{U175OMh@er}8~S3(#r-w_4_xMQ;uC zxgX@vOe0xeyJ+fu&LEfp5edB&ZGgBZF3BeOUDW6StrI}Z8GDnFGM=MZ^IJ;mfmrAC z*4;m9mSnA^ige#=y01>l=nYP$VTkhY*Y?we16eurz0@d`b)Nl~N7rm40BPFhEYMS# ztM-0JV5!iP_rA271@F$DxIeL4V6W8T&Z}X+E_}}vRxV*M+Om85L02hk*jSrZAGqEh z>)p#8_G@M0^l7_yWwIV%DW5Kc|%N}VX=TZk=`Z^DCe(qP{;Ga1Guxf~vtXoUm z^CW9<;)S_3VTJ1I89|zUre=c!I-MkO%6>H=EJoHR_gwTr*7;nhiZi)Hb7_3zRFh;w zLUB9uY2UU{hhegjYOBI3Q2Mv1 zf`13s$>{ghH}40xIwps@r~EW+<}}d4*IG)aIA*@SN^}JlN^)?}G>vlrgVJAHk!3dT~1TmjZdoNx0 zAzp2Vj!2ewjQxcb-XX(`n$C!e(gg5)m$eqW!g>Oiuc&@=j8*>^0Oi;CnJ(Fas`xG- zY=wI5@n~C-!UQ+WFqB~5W+1Fvty-$WyVm^V_$WO|HP+lLnh^yf{oF*dDJp1L2H;-Y z=EZ=6B-jPL!^+xM*$X4D4sVI|rWU-#$_l&76$H^sjbsfagru$z!N7*q^`CZ_boa#B zm@gH7P!#Y%Lf6L!;|K92^?*dwLfM(R#bK{vq;Y>S)g{?rcjs>jiYp+X{Ni2iwsEE> zBmf8Y*m`N+*2g`_@kUZRpMwJ@>_=Rsnp4mnru+yvTX^N?-M5WLG6%t$vLmeRIG9li_74+qV)sV2($O3w2Vrautix~| zg@5K)Wsfjb)ZhPS>Eb>;+>ecLj5Q>Yz$J%$zQEAm|mGH-p}OGXqw zur&29gPU}1VI+eoian7NWD1fLX|jMU|t%^)nBw7 z_qNm@PUOqSnV84Yr-xVc8-K$1no!7}S2&PEmvwvdeY;b}2PsRY%G5Sq#Z^un@eNZ` zvkFgw^aI;j)qozpS-&%2T+3U#?FWhm9FAl*JyXcw_V}VFfGm42lq6SVOZB0*knr-3 zXF3x_P%aB#Ol^ zNLiI&AV#sKsF!=s+&h{&>OU8u@EF#;g@0&L!zd|E!B7NYIE1q5>rJ|xsac7T{!-S< zMgtuQXkv6umJJ~UJkNjLh){s_N(kPSHzZP3O9bKYp#baB9gQRm*L+s|t==FPidaJB z61~*Rf~lvw9>>QITq17YJdYg6S#Wb6+~XH=vEG$Ih7|tPGnLhWk`aJZ$ZiSzQy-;P zJC{;uBET;CXZ{Prp_TFN??UyW=%y@lEeo8Kfw4%%vU)l!D6S$5l?lto5Ujk0ui z-yBqKAqh#xM}PKj6)|%(Fq5pxEpY(NMjAM$(!fd3v* zB+f1qN)$UnZ|0pz(HA4fSl&;tG&S7SEFHB?^_r*{p@IBB;N9XGC#gHOdk{LTlh07% z0`Dhp`vABp`f*pKlc30VdD$0Y>Y|DvmrD~n_L?q)N8lnt*~0Dgw{v0yd2$y)*_~GKzE=DOP|S)Hx^I$36gLPuDApVQZO==@6SA$jJHHz)E~3-l5U{2f0QOmDm&d zYZ|Elg}oy04~$<`APBFj9$G3tE(qSc@lo--PXjQhWEDO>onlqPY=6alFz!Vq#i)Zj z$yoAt5yH`))}NP`m_{P%n6{CtX4q1T;e-L~_Ufv!W0W>aK`w_Lq(k*gC($RhqvS&D ziU}(g0I*0o?S0y^r8;XQnj-ie^dG5(AyxtspOqZ{YBVl{IiHAuSYFFxbVf!=|A5Z-_M= zHmRpO)8wKQB-w|~=}OAXypMbV!qE77%_xhq^ZIzRM}vP1`tc&HT1Um>Bmw+9IwnY^ zP*rcDBEZa2EsR+~ax}i#^96_XYC>=RSkJyiiZ;jiSenH3ZLwYSAreYFqRXcJgY@X(Ft~`6zIx$WR_LEMmUrXJKXu9S4D3M;#EryDbc7S zEI8U2T5?|4DR!|)z|X^in7J0=!qenGC^e-d zn|i)X>N{N!vP}qi^Hvu9a+v372663klV|&z(?8en)shW(8aN)8+F`#lR}`;A@)`0- zmjTsYgYhDCwczbJ+Z`%Q|JcfS1!#H5oz=Vb`#B3*nRD3*Y5Mhr42DG#R^^7%V;P!D z7w-T8;nqJ)8aPw?repL}g7BPZHbD3qbjE6^VI|T6EoV%dK&t^VI{Dlqaf+TVubE}} zWvAr99&Z%Up13$vQ8Zunr>H_FLUwY`1o_7gHhtMP-!R z52$ZoXk=_{V{2#c;OGSY*pWwIWj6b=1Xi+^0$=KwDgS3ANd7^Ma3nhWp(up zjZMuht!;h%13w4hL&GD}GqZE^3yVw3TiZy~&Mx}b-u~&?`Niec^`D#D|KR!$&i@(z z9oYYYi{ud(=Hs?t-shl>hC5Y^`Ko}mmd}3a0FFuo?&Tk4U z&nW^*W}z*X)BiyGZ^-`dfQA2mA^Tsz{x_~=03jB}w7cqhnQcQ^EGaz4-1;X~k}H)E;wt)197z_*Xx*(|t~^ zn1ZInybJ>6V(gbzUc>0+Zo|NOXuQ(O{nT06X>fFnug?0QI@3|6?$E1{PG{!!RMumR z!JxnA(`_s!e$UH)z83q1kIi3AJt_4*;JZ2X_c)u#A%TI7L7afA1M}9cZi=7VG~&5; zLd)qxI%W~&q~g6jdw-ob&$;UgUnW&tMhADxG@r}lK7m9k59UlCs=K>&IWs3Eq0oR+ zy1BiF1CGpU|7)fXrsxg7?Z4m=CrV@z3FR^E3wfdz8k;8w9yPe9ewIc1?=Bn@~)=JsmYX~C7Gc_m* zDod-S{9h-@CUZ}IG|rk0=G!s6IK)TFqA8eto-dc!)~2{l1?#=H>ZkSEdjO3q{p~DP zXrjtOps_yfy2P6cNK0%deEijnts;yPDQA@zYT9|~f8WnYJQAs>Vyx^Iq#fj?&NDln zp~DYrNK61wqjIvlwbv`YR8T!jBe@IgzrT`Au~=JoaBoow07(Vu$+dY|Uo5L$-P!;t za$SmS>sup7DdI(rP26zDG;ky=h<7v$odSw2bW1KJ4!(Xhd`^?CL-Pracg{(9YZF^? z>+&*Zi7A8Ddt-rO=pUfi$>64|GgZ=-O5X$=b~zC;TqzdF+bwA9EUJw72aqZ}JJ0RE ze_*Y<(pDXB&*m6+%8=(_rNlH`>S46Zzaf$yK|=olgx@Ul{)iqH=p19isHO7EU-P~0 zrSG_%&kS=eUKLd5NHnET5$R5qjEF)o9MNZ7mo@}cH}ad5G9`J*t|4&~_#c8h9rcp) z>vxsD<+GpUO^jPxmKz-j$gZS)_Q56%Y3r{!%Jtt-3$Wq*H8k3*!zWj5lRCK6tUM25 z0-a+F(-#<|{fRKVvnvFXdpB(hdzS4zC+gJ@FsTeuB0@UrdFDI+^gH_NEj1Q|$6RJU z{=jNLyE*^EX(9JFl#Z7{n3N-M*LN|j;WX+WAdKW@{#`(gXLrgcbISRDfZD2}mEulR zeP|hzEZ?A~^j$FUvZZ?KyaX&nq-cE1OiK%gE~IvPJ7!f=bK=?7i`-XtHU)ep02Xnqgpm_>q^nmBm?88i*{$Iy=x&`kZZe zU*ZW~d>QMQxI!{e@n>RNGRVOg%Z8cs^NlZD7wRnY;SO&}$L})>6gQo~=0Uh%!_hE4 z^-e=J(lew|ejXui1G{OTafpfQr{8ySr@344BjHe8rf@ysS>M(BoJxRs6KX4y!C>6# zcNKrQz&_)(5|hR)_wd$Bb|R5w%5`Bh^Fh)p9#3izKW7yaY;@Z?Dg0E<`EQlEFyc5r z9RsS#ge#K{cbX>O;V7nRfS6v?+e;L>9j9`U>vN?FjFi95WBcRJMc*ps<~Q6^T0H5N z!<S5<>dJh@y*ME*g^`oe>0IvUo$xosD)tSBfc)Q|JrBQerN9PEbF3ZeO)t%6 zntZMC32>{F;Tm((^DHBKh7+bu;#c9@k4L0XI7MH&P1-AjhQ?d0YU=Cq)1UqpO5p)d zfS~R}$J*y14J)Dl0Q7y|=XjZ$GoNGvW>8I29vEmbD(YdlOUUIpQFEE8X44by7o3p8 zDgaW7F!`@oRSJ#br4TDg^5U;dmHf}ctc6tifgFK^cRTT8A(~Eu9rNj5UNsqAiZTYy zw{Ru+^9nWupl3m9L9&M3xf9*9Y&}|KuU4q<`Gawji>TLR~Tap4KpE$UTIp zQnEf(&g3Naqi%EYIlD>b&8L7tWRdHv=OSl*%(bhUG95YDW#i3JukB==T2lA2U`Ymv zGhzoDm7i|iA{^af`mi_t0i>mB3PL`f&o`23d{#9K9DsUy$a11mRFeXJxjR%QBH&wh z0WMSnPKI>rIxxr;bMk$p#7ciE58JqdQ9MQr4;=aP(*`$x%;eF>_xWQ(J;S$|qiJJ4 ziAfI(lgOBgWkVxL2}bOY4XOBvdejtrNoM@z&}k_l_L*`I>=q@uHU8;mdVE@}+Y%nS zP$wlDIhk7BI*t)U63Zd9Sx$vvs5U06rTJ$*V$}X=xtZL{R5VHL=08BY37J3ysnr)Ti~2M^Ik_qDbIuoZwjtdOwVK>GFx5RnPI^ zgUky}636-vgxb}&rm8!MXJ%oW6c0h-4;`pmZU)p84^Pr=*lWrATl#NnEiQDpjpi3*i4l~F8jm!Jg z1pLJZpbxcbLEx^fE&Y09Eh${iTp8Dc*%RuE=yKLEGdZfTuEX&H97{fBX9#1+4t9=D z^8Hfc>QlCON66L5eqAg0k)xI9xEG%>MLY8L7C7gS>!?InIrRUP4O^3VpVKeY0i&1%o;|{c#Zy?;6`ozz(LJ1R4QDrr8##0%)zxkbtPeCP#HUtmWWS+>^zu)?MiJ% zoJ>`XKm5=G^S27T3P+rYmbmA_-CiiUVytAS!1CJGcY;3x!8~iAe{_Y9Og>TD50g8a z(`8IhIhef|cRwlv8}E9?{sM<@ua8B?;>-HAk9wA#Bp(pO}(Ya_Od9iDRGp1k!KO8-_KLA{(i#}M|Zm-qf1n2K$T((7oU5!(L$|zj0{)~Wa>Bz8mp(sUZq`7-5dd6Y zZKciJx)(XJDre@QdAE7&8|u1r6N_w~5g+$*u3lVeT8VV_wq3>Aw6Ld^MQ5Jbeg-A) z7}J^0Nsm{g%CzKr_xS#_SE_Kl=9C%r{oG1Gq@)8f=3+P&85G^Le^qbTG9vx7&E|b` z^3huzPUTA80*HWo4+wUuGfXQoH0~oYNZ}cRFrU*d)3LlN}F76hHe&ctEnsXp`kstzrOljvKE;6k=`6hYMTS~0O2yn7!wjcmzPJy z5$;A*s?F9R6ZKj(D>W@yvLYI@=AD{bdNvE@g4`Z!Chaznd`l{fwAYLY{3k{@PY--o zP2_O!*H95jDi7Q_*~CnlU6yuUtpNuOpQz5J-&%{qwR+BH?swa*<@pzX&bChUbz2A& zSTH+$u!kvjn{VV+n#Of4{>0p5*Vog)M?w-23b}*TPTqV9Pn-HC76F^L@tT^a74fWG zdXN=U#n_);^v%}divp@kuB)?(c_I6YoxreW6zuup=!JW*9_r<%ge=FeYKwz7 zL>n$4F~#q}+yd|~TKC`UtkHp>g_)I{&RXC}s(4^|kpm?BEy0I#vgASBgC2z2Wo4Bk zPKNFs{SLhfw^i&mDTe!Fg^blCOAr6WS-^V0h0U+d-QE=c?f&nu-5@zp`h;`Yj9tA7 zFZaWUmEj*2k0`ZErWtC6Z1rbzm8e8G%XU7d;{8_ZudcZ|*F7GU6n2$E@Tk2tVO{R? zFLd(ZOk~fCv3~<(`O!BZgCF%B-QVEFE2b>9a@VJ%B=J}No1bU{7Ibjp9iO*2M)2Pi zDXoSO=5XGNYIm6A6P6KkuYw*Z>I!{M_|HqKy=Yy3=426my=vDc8vxue+qiWuTFbPY zXbppkk5;_UkzCEV0oK0;++<5C?^a6O?c?(L>PBmqh{t*e6Nt?h{{b$6e(shZKF1wR z>D}jDoiJZf@5_=Isgjs|*mciKdG@ozBYpY9mv180NjlcjcgW@~W08d-M^p@l-8))7 zPEd{nG=v~(clqg7jIKK_Hynbd(cD%tokQ?CxQ6D)a>_+gy&4t${ts~QkTS6~MKS3K z=c?t2JevOz@D(rm_WcYcRbPdRKXQe7_eWdDtSgg6GbO1Q)3pnY_{k(VUPCg-DPvBU zsY$7!IZ6S-?^;K4C>bO!HP=rZWMi{Ct~e($sJ}WuBc?55;6OE@M0-bgs%JZYc+8w^ zqtoHiZu5;-6mlM3EJk}i0~O3H^b=st+O?P&5nGM$mdGIj9l-Q;))fe14zKE!W#=eY z1)&u$sHkNBIvvIl1VN6+Lylt14Kum?C^wQhY$PcFuYg}EhS`$g0P8MiF1@)QZH~M; zr(=##Qnl~<_{_u^T^9TZE&or|B_^h-l;WSsMht7A?*uR)9Ab9jSO9O@Pe1NdYrpVt zyVcSTlbc%*2+*)VJ&LI(G~GDP`e3a|WOLMM#-B$Cr}{z6N#k6^Z8)@$vT9SZ8F4ZC z?+G-tll^Yzg7xiges0)hqB}JviIZ-FZ{g+|>JI+^HoYt;MVgkA;7Qe@xt_NMR6}%p zM1E||VC{X0r;7cDk-SFCWJl$6C2DbP8o0atsc2gb8E;zE;0{9lh%*U3=@tryFJv~%Q7u2rtg`IN7Xq1lMCwSr=k)YoNx-dd-wA{fz6)Vf!djK#0vAo05>6 zmINwBdx0*(#cVWC`#O}8$pNWNgkZK3XyD5#z?mTn?62Ev23&Vl2V558cABj~VNtXf zQr3&xjV{O8uOcQ!*l|RC22CcrFaWtjkTb4Inb5mT*5QtC+4*0ek9J~(D<1czdDGln zA}Sr1g?DpZYK=Q#9?Cw!N8xk>sNW{y6CuRL;Tz`lNi&k$G%9w!xjq&u{T7#uA(6~J zsm)*LW|pLf&32UEOVQ&pEfh)4czk6&V-+wpGb292FM{D<=<9e=^wm@D6mp86p<93>uv{g8Cgduk`&E-}yt_;BEkfl+7o& zW}#Vy`my=qipkCd?pq8y8Q3g$9s3isL+b-euWa#I5zTN%qw6mLqB);lw!J;|*sW_f zL%enG(yjP~_|qb+&nC*I>P*SWsl)#OaA=4`#k#H-sS;CNDI?uLLNLs#n$&D|l(qNT z;{|pOI_KNGt~(iV13p&vR1uzq_`&e8w4@G>CeP2xwdSQNYlorK#p_ z!DerY$Il zYcelZQBfsD+07S?)6z}p=%MgZjY{#u5t}&er5Ll#1-jZvD~+pORO9X$RQ8Aib5w9( zG`un~^1>AIT>7WX_J`4clyDOui^)zx75KOS_<`mNrD9}O08uV07Dl|jRFL4tdfQWz zAHQ67t#@ntq`odRY54nGR2~HxHP|jzB(5sBqE$S3EWaoSW@p?IhRbSPN~r1^x=yzG z$&r5O5YT;)tN-kxW86#7UXyRd=m>=pgwl$i~K<2^_54$iVt1RD+v3Izmfwd zKeDR!bWSz=gd`Xuv%X1GK7q)(_E-cPb7Nrq60P@;Z_lZVngz(tb$vs;N$tw0T5?k4YxigI-fAx#vQ7ZCmpNfwBoKSX7Gzw3{J^y7~Z8|pf>^oh148m=0SKYy8!uVX}JjVzbKkCPSMsX8ga_hmB)-`ka zOoFjaMew_Yx6(OTxH24lfS}lC8r9<<4G(DDyF~cs`#58Nk6X27Nk__RJ~XOJz1!<% z%JkR=QC?4~yY$_Qr}+?hXy6SJyF5fNz-5wxoQbnFzQ6kN2K`j8!d3CVDckp4ibL3?=UFP zh1TG?!b2vp+c4v-KJNw&=|phSh#htiaUSYc4Md{_zKF%;ubge(Z-@lpYOkD@wHam| z3aazRb<9&Gz;|G126lJ})zKmmCrVIp@+ifd6f@O!xx=4qMkcq?i|0e<7pv%r-g7#F zq_@M2WCze}erQg%x^d{>f=N*tZ$G2^(ni>I{X@u0t6rf*Kkrd0P-w-CIGZ&8qz#e( zoFA`kb0S4$&g(Pmpd`T)=B8~vK}aZn*pOSJzKiMb%kdP`pgeu1POh)*T>8ozquQK; zk|j^%u?AJoH%d<~3+=8briF}vc7qpI!4??WEkrGw$-}g{=8d#d^7E*150aRh0)=LW ztCN3#`7&&i<%i!gi>7Dm<{wD$aTy`(bVIV*`aqCYEZ!JOww-%2Y=) zx7}_HkG~b5jsXy_ihwxc50cAVLa{n4kVIR2>3BM);|l_jBxy&rlD(Y zzN~tacOYtP1Ij285L@*mRsLNP6niFd^;ojadceIpT+$kON3eHU68CqR{!nP ze1oK)ogDX-3sWw$4Jxh@f&t}^4cBjhZYtT|m3$R^ZbEMy))$t$^OtM8OumS|pk#JU zaF0V>FBax)7YUmgW==hvs39=oDY3*p$*i`9RJAnKHNOT2cnbdrgpV>Pf zY1X9cgKz*b&cj=*!=>xPR!S;|+%0E?hKhU*xoiUapC}(>ZeJ=03H<1HW!4=5lUrYx z^_nn2aRX2HjP+%_qJFdmp-@bNn5t9>M;nYDMCt|tCPWS_v)*l;V?;d02#6BJ>Q15>D){|^g}LI3BVKVXenAn}@ak{>^9 zfTt*_FQQsHD6FdQZY1+fecg_=`?uVYT0_N!QWSfR;Y|M^6`Xb7L@M&^*EY~Fe}M|Dmu zuW62q*G$|2f{6{Rj7v(RFkG*OXi=E&X7 zA3U68>S0xJeq`?FK39lQqS*oy{eu4ex46A&Zp&_U(A+B@Q*;q zMpruJFy8FqhK$q!@CIi>`4_OHgHFvon?+Nbc7;-`LM`7px0=T5cx)6AqYao&LzPuk zDB#JIsukAGf)rdif{;fBr=z51)yb}}v#*c#V$KZeAF+8pr02%PfYHLh>-P(M^XW)O ziCM)nB(Mat;vJJ^Jq#8=oD2XZtv3!C{fXA>?2g@V>Z#ZfO&U0jSYV=}UwiLbbx`2< z%Ds7j+#^YxYC^yu8DSm}>@`{JWzp0u{6a5N8MQ(6w%9R&I2~qR$_66^LFb${be^Wa z??@E5Z%@pK0wBi2U|~l&#FgNyrW$j#l~28|EK^qE#w18_-xlA9&WME6A0iV|CCTHW zM|zYZ5J78x6B1BaqgHzmc{vCBJ%grkGdX{P#JmwOSmKssIi@%hcZrF#bu;Jkod4QK znnV5{0N;8*hOYjU^4q*9?^LKlK`f45d`b0_`HN?oa$O?Jk?o3tXUgJA^n+aqO^LQZ zi#2D+pOoUpjp(D})CB}|*<;2<$42=dAf{SuZ-Ma=K~-Ho0;(?*);t{g4QlZcYrRy0 z7&#f-f+dYiJ0u5b+!b#ldaJtSPZO43&sQ<*Y}qK^aQZ_fALtv?N_=(HC3{8aU*~M4 zekc{WA^dDXn<9S8AsbU=-x$Oa$ohhTa(Vu$Z9`LVq}aTPx?DC*VFBH89-Zb^X7S`> zk?5Ohx1gRuVw_UbRiRqGBn7uDs>TjLL|C}S=HpaezxcrB_O4!Fd$E@KmZWvtJ!Umv z^fs50`t&7_V_^cdO>;~JYswc!ADLF`n}tYjD7kK_esNnzys>z}zA^dMiD1RFb^R=1 z{ocYyhup|?P3rZ~TT+d!g(`odjPXzNartJBqt5v#+muCE_Q+jl zu|Jcwz&~jaw~nhjZ#jQ)jU4c7_!4%exFN~GhC7MQaUSfDaoymRy!saoZ|J62^UCPLX|Z4^98?mq_yJtH%?1heI8HY+E6{E_ z?X=b(W+q+1r@cd8RC4faHM;X|y_W9>DQ$({C7)c-&+%l(!D@{*_LARADdBm0sfbx= zRuKyoQnQS^VrYmqUJBWeuCEWfu{h+#M|tgQ77GVcSvQ7RM&j`6MF_pBkk6$#(Ypw6Noud`H* zfDi@k4a6*f_Wg;C^O^X9iDxr=>sbd}5eci0%Df)0$Y73X?mmLk{~^UrG4ZRb3#+(` zr{B?Ayu45(o#A=rR}(P4llG#vX!HgNx(ajxJm#583xj!b9ww&9{u*r-=cc_cxFeb~ zY94sY70DL1a3(vQdB*QBmZcem6tm7LApTvkbm66fojCL>BxWn5uZ?GFEH8}^mzu7u zy+xeFPWSJsO|Vx7r@D(RGt}-xB}tD1_5O8Yd~UVdKR|S${qWz?V)+9{p;RQ1_jm4s z1U(NW+wHbX?t=1nL)~g&H{L}eb*3)t}> zz7=Rth3eKCLJ+Te%38{d!vUF6j5JlLM<+x?9!v()5^fT1w*}R<9jjMJzt>Ii_R#eh z!a6W}O2am3J`JxLSk$tnR^d}rdR_6vDDP~{@1Tc5afmy$s+hA?Ogg6Wsn^+2Uvl#5 zyrV;aptnt?f~%ut!tdzVZXxYe6Dd-5hgAv-|L6X5K_cA49_YBSCnmJ~bkY8MMVaB^ zWe2Q&{{Zm~e}RG2j)jii<6wIy@)1<{ehFVbou*qvqn~YeRG^%XOS8x=4{C~^Q9vFp zcF(mZ*5mj)AhsMN9?wNXp?zS!M!4?lWZF@>@7KsjQYpFmdmO7LbG@{zmtr>;?pR0^^M`isQI=Rp0b0_oLtlw{DNUdS;-M zGpM|w9!Y15JxrL5>lR%JUbxjWj;xJxrI$2XM328;esz!g?6G#ds{Z&iN0Bd1;&jgI zBMP)I0xLkj|8-06)6GT&@0Oiz;JF;v8C>nRFEjl~V(ZQ==sJV~<;K|cpmPr9#Y`-||os&w;HS6-QU65?|cRq+#+4($zi)_xXiqA_q!Mf02 zSCtZ*8|%`eTnum6BUW1PLsGeHhMS)@9AEtOEsCyEFWBecj@)Tt_DeuVVKI964k0Lh z!3T}8dXf}`;yD<(KTr$U&rtmg4uOtvS?+$*O$ySvM-=oU^YlfNRkA5}-=tCjkf$YX zEEaO_adTC_NDY3SNFt%3xGU^>q#x#q1=u#C8ja^(%&Bm%kve7DR_{b808R}E;%w{} z_eDl}6n44wQ{54VKknNDP|J+K%8O{Tv96frvq&ao0pC&`Y!~e10PysgST{DB#P1Vo+h#vt$ zlE%P@Mu$h|Ulstsf9zEEjf~o?Mrj1&K;H*H-G*NJy$@@=w{fzG=FUKAb16%l;acx9 zC$oka6$Kjsm);uGc>2JOqS*^CHDXm|r*Y`%C!`BLE6j|<@xm4GJUg3f~sf;i@s zLYo5B5(95#xY%}K_;|2RNAhxG<;BHXs@8x{q3XA+$>l=Z+S~wl*1&q|M5SUmJ#+R< z4qn!$q{X}@Vez_qCf6#oCI$N9atPtA2cFZ5G!coY7gg-hD=xLJ@ zKG;!DxhyMDCd$8l-%d9X5P+c(*gUk#PDkwCzut8~tSH1$=CQ=^M!%qJe8L18iwrE< z7a|zX<<9Zukh0z&KTJ&?^A;Eh`7!}|Apg0iNp(>fYKh1-np%f#Ra-IF~X%s?;F}aNAbfg1_GLOZ)Q3qUu0Ap=L*^lo<9u|uTC!R zKkJ(=H||*IJ90-9Z~6oI_bc+LcuOt6nIXS##g-UQFhW5Vfo+Nj$<}ywP zyV2ROfSAc^*#{sy*h$Dr>YF(gu7L>AD3&%ZBe6!GVs_L@Y1KZ>?Oa9DamkqJ_$fbJ ziOY0Y=fX2b&!LD^5iun5Wud+o?zJDcKh_GvL)%}>9QE+XN}83~GZy`VX8Wm0M+R-Wl<0)M@aPDu)9@I<4?&w`xo zkM83_7x}3I)h!L=;(YCHDyoJ3M?vCRJ6)|skQ0`xH=XBqtY6ORy!iq*sw0M8uVFL1 zzblG!ZpyDf$1LJJ+=jK$qtT>b=$vcuyJ&IDR_E>)zWzTmpT_Bvr(dnXXAaCYx2wOj zRStGaNw7?QpnCh>p)VUv&6W_H8(rz&qAJYUZU5oK{+Ux^@rl|=p!O*yTyE|e#QSVb zBUC6<=BFtn3`PdCxHvJ#2=Hi&DwXaVc>P&<>O7hLx7qghAu)7^1F+w3gn zHTG~Ize_`IzwuOvC{>SmDZ|m#LJkMzCr_P)U}W!x>I$Yb6Q{5KzW4k1hE?Fl z6QZ@TE8n5;4NSY0$dkz52OXQ29ExCiBbm;Q2syvePaAJ${{7xwEm9>h*yU1paQ|1) zEtRI+>BvBug&xPyFtu>%wWO>0P7lEnsO9hK?W{!PUM#@PhKm*!^JDX`;L2lqVG1c# z3F41p+UcblB>Qp8etju?vU3Ae)74p){s$OBmd9x8nL_FJirRDE6E&|hRBD(MbN#%@{X zLOx}!nTB1b6(1O|`ZZC;yc!y2sWnwE$_E$k(sIvFK}u!WwP!C5ahx@-2fUj}6`nv> zps^mK4g80m&S!dvZjjGpE~0}p?M&Nd0*mrl{HV;O(=&N5_lxlXP!wb{zW+WGbs0}B zlH&H0JCVg;C3P4JD~CwB{XBD9n3!fi4cfPEk}|ZF`8F$LlM_c)(9F<~0AkWaBRYsrK;U0+MsU3v^tp z2imi|On$s>JAn||=5=(~$poiZ+E63Lw}vVeF;wnES2f1BGE&cKM_KjmYK7jP$iF{! z@;}8MVdAdd`0RhkhF=zvY$on4tj_l7-Q6i}be?-^TE@d=QwUL*R5;Qm;o=t$DJO*# zwWzgAc8PDJ_IYrmvgt7cZ^+Ax9t&y%s+*=<CggCzIem(o@DhkI1L(LHHb>;iF z{{Szeg(gX~k)UL|J7^MKZls_RDVV`aF7!R1oK4-1p_j zp$krt*boPSia540W@!Nr9DcYoSMIEo!jn3&aP>2L0vcxf?)hf6coOAk&-(%#W^XEl z@wr-Qs)2i^`Xcqia|wePR11M&t12*fykYPBE}n@@TydDvz1qzS^M@xUuf`k|wJ_#u z2xke9E>g&c8I|cPMsYn`D*sK-q9PG3vcyBT7rRtgIm771F0^bu_tyQRa}>wR^*Lmx z*>|BNjy{q>GHD5~vS$CI%P}r;k>5*Yp;%QPp!Z~x=t+W!rzw4d(Vf$X~M zr(nAM{lyWWVd>MvnT6(?t4b4wXXb0GKZ0`J$FnyAF{_0XdG-bzU9y)DaRjw!@leE43rul{qk-Nbw^=g zlOefPj$pNk^~FM*65OjFS(&Djm{Tg5g714cl{J`YxAVrui6>+_9p1YAeE7b(n{HTM zN<9cl9^~Kqll(rP>3#1Blmn8dovAZWZiBL?MptWGR*rr7fFmu_xae@5WIYUQDZh1HQQWZS1=3z#U)($QB0Q1?EN}A4q20Vie;m&=XD`KUQm&0=4$$%b441S99x^#tkQ@b4Lzj%dO1GOi*CJ_+h^_vuf* zkmd`{<}@S~u^>2Ip*yf!U-?A6OzfuN!F9IWn!{QL`nGia^ojge_4nkd6Jo3EnI^7r z2{9A~7qr0?%&A-~BWp^*z>qK0ijOL9xvQ&es!<)N$Gn9ivBZh8O+9k_a^bcmY8zMo z5O6JJ@Y<~)X{|obvt<32Xc%;9LNV#r;JpktKGKk~!9gr#vHZ*l({m&S&tuJK@RfNK( zj66mpo?J@Ho=!dXA9Um=Y~(1-Y8&++0BQ9Pv@S$GZX|%!=fPI|E0ZC{&jny#n|EXb zRyz4xq~>bEm2^!-?Q|+ENi45V&AMECJ=?UkvRXa@3Pbq1!gCJ=M`n8v%OXlzVch=gJgfkrJ z?X|#zFA^RVgluXz6P|unr3K+e+N6#Burq5vo3-3y)PtA(z_OZ0g-=s$Xo<(Z$)h;_ z50Jxk=+On|(fgegd~td6t9vV6LIY@$`wnbYGS06Fn7+HJ_U#FF1Zz+4rjruj8oN0u z_plW?V6ARLDk8vS(1=1K6`4R*g*&g3wc4}DVJxB345d^)s%tFj>YtRwzd|T0eA`+q zYt#lFiaMINDH~aSZccB0qq1Zgzc?3v_=q%5EH{6j_e<0mGW{e;=(W^&nyk+O;<6f} zrOUfDrI)l8J6dWp2Q7TLghQgCNg|W^=HnmS$V`JBRfxo~R;H$aLKOGcK~1psRe_d# z80_wLru+~A5Rki3!JYLkr-6XrlqMcGG3cGOnG1%JBDOSIXRiARI7!|fTwkXDGLL`v zg}3Bl8cQb_KA%pBBqRyF`EYtpA6`+8^Da`3K=PB+Ic!eYrD?L2jf(O2+Y{Y9&Mb|f zK@ZJ8pN@`WvcQ;`(GtNW+g*bGgggmm9M$#hD#ghaiI=XrJTl zJ&K;HNFFbt#uR#mhF8yEr^Y_!jMGaG(~lKud`hqjG2+%>*xt~%5yV%j%CqMxA@mRM zY@&@+l}JFm73mysbCi|K)56vw%~9~6*DsW2Ah@n3(lHLRrlKnaf7DjWT7u^W7ZHQN zsxPzF!-L8_m3E7p&Bpws{DH=;PQ}hzOdAxybkX2TDbSDF6e#(pf_E4z(qdACmK3JbiAr+-FH(f(_5{v0m(Sic^;OgNjC%cgsy4G$R z?7IE*S)F%}y_{-O;Fz_wC_$NoT@LlE{TQ!5Y|c4?IaUKt-aC1@8<;0g<*)jUGUi5n zHbtd%wA3s-920h$2?X}~(YQE2ig}a7U6bekP!P^ZDXF>IVXjd#~d{5ZLsllllB$N>D>7;Jp3j=k{DD%7l(pq_HuWUbnyI>fz+TRDppK+wmRfye17QeNkxy z#EWMN*Wn+c8%7bk%rP=Oy4lLX8_9}-Etkla0=py?dKIb{E}u3Dy|Jc4$8d2<@ywIx z#v|gEXwP+uR3`Yo2X;Ij1q@m$fL$1l=DMEtBzW(G1-JVv6Q{rU)c0Y%mE3H}T>LVhtg8^2e)Gg#C+D-A{p#uPnd$bK#BJEFSH8;G_=wS!j3Yo;r$M z?hF#H>FK0KxCO(MmSA`*i;$Xm3ZQX%fNdwr6Y*(M9j%639w^Q{vbZush;00c!sr){-xT8;$H6tjVyG)L=IWOJdM2l&;v+5(O)Q@M>zBwWo}cD_DS z>03S7224A^f%&uBXEga&P~=CaScSn=(24eSNo(Pk=Ado3`0(W;yPo~j`W;_T@z_Db zBxUVL-AXV~W1IdZ43UFNAT2qoXBU>rWJ~lEY^>d`jO~;a^!V?k{iBD}&6o!K8lF6p MtS(79^>69F0GRHO1ONa4 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/5/3.jpg deleted file mode 100644 index fbcfa628f1d8b16cb5923858a851722ac939ab2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11877 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 bIl1ie$J5y!#kB{r>L`lu6K13!ALjlW031w_ diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/6/0.jpg deleted file mode 100644 index 334ab2581e88ff5d677a0f9d27b6647242f5d6bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6636 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/6/1.jpg deleted file mode 100644 index ebbc3a099b5bbe6d8d22b0e79231e6ccf595a969..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11564 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/6/2.jpg deleted file mode 100644 index c3a8e97c87b91e3dfd53501aec18385b34ad3f5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16411 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/6/3.jpg deleted file mode 100644 index 8f730f364ebd0a3db37383a638b4384662f1f733..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12756 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 V@<3z0L8+)r-_^Uk2K+GpKL7*R`uP9= diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/7/0.jpg deleted file mode 100644 index 75235d6f8763163e1aff35b916422c00cc3a12a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9032 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/7/1.jpg deleted file mode 100644 index 036d682ec89d85ce8bd3a0aaf645ad008a621850..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12957 zcmbWcbyyT{827tKiU@+B#FC42_fktp3rKe(DP7Vaf{IHmU5iL8jpULN0!xE*EalP& zNGwRd{LXpfy3SwcoO`aBf9APnp3gk@%zb~qb2oRl3V5QftfmaW!NCDo-*14sMSvmz zAMZYJ|2q=k;}Z})CL$svBzp3QbJXZPs%

{${_o=QKd%2c z|5yCqVE+#;@_Via_sfDu_#YR}gMj-TmmCkDS&)E2UWd@e>nV#+BoU=TQhrU>Ly)lU zUn*PgU&PN?Mb=&%{fG8{k^R2|d;kB7?05|Ava0k_8*-E z&~paVY?0CJfU?v#i7`5D8B|a^MSnkqbQNZjrZ21k;en{o3fcRVS(6hKJlp=IZ=!2u zp%qzX5nipgu|}i41~x=CHNO7S!F^8eqSHD=qD5%Bec)EHOb-*#%2{8Fhj3N0B`_n0 zT?!q`&Z*+*#Ji_Whf*)@0Px({;`H4@uzm77x9`dlHtzuCPMNF&12&!X7ner*(y*(-lGE;iIvK3 z%C>G@^SIaw;%l?mGVlb(6D@=9)V&`O+Xg?Kd)u1>TQci^u;o4r;SV3TEv(CO-h?>| zc6CyDZD+uXCP=5vVNQ!Ekqw6hZN*o-y}s1=3WG&I9D3DW`SL{HKetLY5#5Z7xLW4C zuLfR5U;7o{z&^ve*pkJ$=-~ahxuiRECx>{79_9)CKv7ErZRQrEwYH zY~lGs;$6CzE(kz@3`^~1FdSPULdNm4^KviL*{9)h_kW#C1rG>RXhtO}OJ*wNm!Vmw z!l?`%!ns*}s%ncZHY;uhN+h`WjFwH8M%t1WUIQtKDehk>Bp_OCjyom`IYN@GGvhI~ zo?Y_&)T645qdyAxM-kvM*ZqPG=1TRmU_Thv#9#UA-eG-8GirHRT>)3 zypGPuWR>Xt3JjAr_*eO@0jbgY`NuHSztmx2G&pkdr0SIxOPr*;Ua;@U1+9Wma;>0! zyz1onU`36f9W7(Z)+`t@no&!gSwza3?!>=gz0c0xq19k|VyLO0(Ldv~MzR0d4r-sO zt8JR6*mB+s7Stp435DZb4o@_N)|JXR@t1e7#+pE+8Ioh7g8 zSi=u<7-!mg{b%_QFYPg<3T|4fYREuC?vsxeoqp>9c;}thtqs?uEKP8!OuP>?79S!N zf#Jd6y@Znyy=((xG>Y;O3of(+QH&3{(xpi(i}K*Ez23rCejIcMm~U#p*O~MW?HKZ^ z&}Y4{9}Fs*JqyWpXEG~&VKKPzeJJVY6M}b`sDZ7l%|+cdWM*4FwXXKcTi>%g0PVi$ z7vA4uN!Rn!r0VgW!O1(Y&|}x6DG}bm#1b|~u!OYT^=A9?9}F;!hLj4>E#k_iekpOG9c>rS4CIVu?jzd&!)^JP_{}11|K|uT zPXV%-Z+Tj6jgK~d>k=531GBK48}-gZaDh6(vl~8pzGPRb=E3Hqj*S9wmhw3(iyiT9 zv1DIX=(8JFYmYet%+J-EO~_0heZm4RNSVlP%$l(D(#YdQ%dBzPog+f^hwcakA$m-9ToP^b>B3 zhVzGa*L|=cYIt6Bw%uCzhS#FM8{G$)h6N=C>;CkNV_gTIvBYF(Bl{ z;VU?u4eel+I3N({b0D$V(*8}8?~2?NRx6VG9bZ3_h1w#RuHjvbYz(SxI{ba=k(U(XBi1If{>rsmhFozek}_k$?<_s6|em>S*2j2W-!KO z)Yd{2sr&$wIc`PwV^#>-T_}1W{hKBs$On-s5?S%sGrS!MOuXf7EjZvu;ld{VDu zisz2S%NItr)q8vV#t35Fj(ukjUz z=cVj97a#3ld(E3PjO}hV#(8%bhvhNH2s8PoFZuXhmIAImkr&vSavpU#Fos_H;=H1_31<^|CDD{?7R|naI|a`uJDct9 z3o(CLNrS=j4%}aaM9T&*v2eb~qIv&Wj&PXTUCJv_%1|H#zPDGMo{8Wc;+dTUSgsjJ z5vhQXjF?!}w|Yab;im3hIX2m|rJ@#CS2Z2og{3WW_*wN?LyAPSsQLY@^-TTsH?%eW7$%70+ zWeAsu%flO&XP*uk*`y-CpbjjR|Eug&H52N-z|>&hek_#- zAGeK`%lnaryFXm({{i+NM#ZBiT$|N0H^tEJMj>2EmJrhE2Ku%D^0asXAxVY?qd!74 z0{Tfg*2Lz}kY0uY+0#3~!B+LXbl97Tbrx1bGOeD(ZE3eYar!Z-FNRl$~SbiVwIxuk5 zlw)OpzucpCzryI=!qO!7)WD^cqRmv^RHvzhp*_ zm9(JMQ%5@%ajW{y|jc_*~9x6E$;q(Ah|6ij~mjLEwfM zOh3`xlkDpj<)n}7AvTjCH7wY8-72XMyLw{cK^ZGtKjHi>^# zJjX`i9eu;m1%5cU(|L10x)~6_R&S%mYUm*>D5m_!du}hm!$%V)p&z=6gKECMIy)7PR{beBsb?$Pjb~uu~VcnwfoZFrH=P z_gct~o~|PHx3h6*sf+RR#QjRwG$Nz~E#rFMAx7j8zBTdf*Ls?TBvJnZi2!av>?oI- zbje!xlU^T~;F$JaR{0W(nA^im7_kZnhq>!Q4$pDr@)yIzaPMHXQGiT11LFEf(=v)F z4h;zGyoS)GkSd0>${+UMa3EjPd6BpqqZm_~cqUZkc!KT|Ud9>j_p`?~{s{rPKK|b& z{9|llVYm?73?g+p#*|~XQptDwfak5stbTGc?Y00b8+KH z!tlBjfVCpd*{@wQ{R0_&p%(4N>$44Ncs^_>gEvg?$rRz!{kxWrk;%SkZ>_yG>}aeI z4I#=p@Lxq*BHXC7MbS%mBR8%%yMz>aHMBHzH~5QGHkc$ppxz$nEdhyBV%hg@je6ph z=nav)Dw+E5=l7vcuXE){H8JKYi0V!M!eYYtyS*C-E%sr4ysO) z(QdidQ3)Y=JC-qJhx>e zbQ*biA6BDYgvHbK`{q+Yd)rYU}7b1PE#VxSrzna}U^%#P)QIoR$eW zPcUD2tJrc|eDQ3;ly-LZaySsiHvmi13V)5NJykg`ec$N#VFV<*)Z=%luk8SW*657` zgiV_2l$eQVZC+DK(YhPp7@IVx1&Ry2vw^w$!M+mCrHM0%86ZpzaP`Qt= zFg?Phzn#+i`S;84yt1^;7z^{Zs6UvE&+odSj^m+(Hm4=j^`kz0zrnZLlp4nmR#1n! zDnPH^%~w|uGz$=U9ovCr$`_RGZ@uO4Fc5Y3y^_v&4!D&=H)fm^`zQi#*8dWgd@kIb zfGFZ#mX%ZN+H#`Cy*`=w5*_!2dLuzq;lD7B2_ErjVDOtjMfN!dy&9&^}pvHP2}Y|3)R)OcWaG3f3o2X1)Fxl^o%$fbjuF1a_VmK5&fBAr9If z8}1}CRU!;udW2-(+}T%a_6Erv3xXZEytS((?f{HM&mU2Iri!0>i-9Kh(lF(Ou@$PC z3qI8<9b4)OC#N%pqj*k;P$UOOK zT)nO;PBzIh!YsnoPsjL&*x9*f;XVqr>Xqyvr_~ySnZE_xS|}PuUFOvN!dQKRw32VK zUFkd69la%UHXGaC%Z-NRy4-Y^EDTIi;RB~Nt2>GMjrzm95zs|PR!F9>|uTSJ;DP3sDBmuh4vd=p+5)Swl>4@ z$b*gd%IwgMGB>uH50P z=X4M4KeGSx4%gGm{rFFb;|bJL?X)tB{Iwd}4BC5Sma?$EN4X|lcC$DD3K{(9QC%rF zy!ba4Q81e)w-9CJABQcuYWL{Fn3Cx{lygDwEgB zeRl?}e&SqA7nLX1W?T01hx+Gr7Z+&g0=fLl zE>G0*i;ZBTXrJaxlxb+gH?;few<^ZXZLj;fmJipAZo!@0=nJou1RD>EKYRVot#T?z z$6l(oeah=1{yVDq9H%Wg8D4nrd}5896LB_@v;LA;+JBTtwU)imJi!Ec{Qyqx94%FqcFh{_8X`gE!J-T6cg1 z$`+*_&tBfP%(yxH(dB|hF5XgYedowy*w0dco-w}Yi^;}Qo;_LtTwCnU%EVX4tw#qw zUF?$$E=4}vqMe@e(s8Yr_32-Y=w|?uNE=2}}^BW)rV6kmC#i zp(ICrL9_ITSSa!*pbAaP%c1QD3|g2n+vg=OE~r) zMs^K0+*E@VCPum6i{oO(e z8-ft|JCJHyX?s-oVj})sX;r?{!A64fy){MPiVcx@XM~_l3NF~%cuphIHM_AlIq}uz z1D`RIrJ5)h5+@J2Y+PjUmYRX#iQyd}oS^RII!Zu}V!0kHYa;9 za(Ru6?*Qp}t4__9(0Jn+6XHUTw)hI~hqnz;rDknB$wU{*Lu5J@FY_GV@Y4}MF>)p1*W=Mn+ z(u>0@9W|v}{6P*YgtoG8!)slY!TFhX#tW=cJ~6)=GzDBsI)w7Ft0d2^IsMZ|Wv#+b zumv86Y5^~mZpA>?@Ra!~-h3O1VUrfBxBxI@@~EsG$<~#e_$2QHi+JX=#y8SHpfZx< zh(5=5-dE)kdEyIapv_6=zVxs>RH8CMBl@)0ZQdHWj#;xexL2#B6&0!^fKO;5!_|$`=>C5ZfD}7xw zH;5~@!?djSBlW1-zEv!1STt>riz~|4bM7KyJ1ERgJo7eT6CbS&Fp#32bsYk^;X)lN zOR719w$cHSpQdd*{2$F_urOG1&!lT%YQOJZ09i?6HIB?v1yHl;Tb_U=BhZ=EBk zIWGcHMdG%(S)xhM42OFkQ8%|x=wz04+96XH#G2W;&E*h!wvo6FPmQ}*3?zHaxMqLQ z8lG+5K{HgnHM%CUC;pXz1`9gxRlpKuu&DM(Lx5fKO7(rObXxTZC@Koh{$j%BA;cpV zIB?kO6X4ZmL}DVwef$Hvtl}QqYG*A+-%5*`;x(AhcBu^@k-D61PIDk5G=tBY36J!= zK1%}Q9!}(^InA)KM@S6pm_C1235=9OSA|&xZ5`Ok`p<5Y8o{|w-`O&o68kPqN{1=u z7CM<~<=HCfFCVDc29tIp(B*JcF}_V*z0ZZq967cx2wREY@_CVaY|1bxQT+vMMU)uI zN>Wp^GJUeLqsB%a!J8(NKqc5?3odkARtE5PUULmF45SiE>O=gzgQxPpknp?Maq}ycOwNfxxm4t@5!PDi!1kz?T#IVH|*e=i4kpyXs!GAkT! zAD7DM zK&e+4%x)TwVMhFDfm}0gVxFNgH{3@}T?5-;36eQU9F;k-_VMzcu0&Nh-?1$;S(n3& zAerS0?LT=Q0bk}zr%^pFWH6Vm&e)H;*s4^EO-oP8sSP}~8)3pO?&)fJhD?93dAA_E z{Ove>Kb&uF$qZrsJL4!pQrTf(SHPRgx7lAa`I+^fw(ldVRr8OV&aUwl8|4`$gyy@b zBuO}cr@e}TS&C+^5B6sAgMC=7le%aKt2DLjx+L(f^pezLmhw`3DXYAjGGn;k+1Wp8 z{z#3|GcghKeE?_`zkXg{G(^D7i~Vl zt|&0EL%bn~0O8W7tc5EchM@ZC@@#kFz+quf5b7s-o{2YEB;nWM82#BW%OL=e!=bZy z9i*QaGm?=5R9@DP$4$_38!T0Acx3M;g&tfetw zP*BxL#k+05?~W*ETGchHa&*`o28?~L9R4!6802-s#V=L0(iW7qKJ@{AOgh#!zG>H0 zQKjCI**25XnlOV7rS#2N3u1DWPocy#=2Z`>N<%o8EbsbAr?H;x$Y%a)igmlS2`RAdx9M z6$)GbYA*Peam(O=yG>-*t)I83u76Db%|mSYOW_4veDeJe;1+xuiCC&I)THzE_6`b# zm~K?uju#oOX>jb%)EAH;ZEN&Bv;wP9JNoOXzb<)Qocm_^%`N0vzxIDfaQ~Joz-c?? z%4xm+z?Dyh90k&Zfp*o_^NvdEFW6n5!<4!Q!(Ph>zs9~Oth8+{co-G1hY}67MqYtl zQC~zj!u!gGi4yJb0tgB-+d7uYt;ut6jnUpSUATmF+JqAoAw{vtQ3k(zxSP}6gD11> zNwp^0?2<;5;$7m0Ys-w+DF~~$UPb8hzZeBz%Z~bw%kiZn|Al3g50(?1h{5Cz7mBv6 z*Y(rp`m}aPgVuei(gQ>iQEZgr9a`MV$A`XJEP5UP>gJ53!hO35yvcAQ-c^<=U*)8} zc#}V7IXt-p88t}3M8$)tx?TAmPu9W+mG+b2kW@b*a~@lh{J1YvXp0zv@M_aF`$V)w z+x|IaV!>=f=%|u98Y}aB_YR=g+cUV&Y^r!>h+L`>s(3dbu??wS)1U(aglCH(TraHz zr{ym)YX&;0{0E;Pt0rY%Io8}7U^RRa+j%H>+gOxA5_H-gCnIVe)F=If`CVsaljc0L z#LX9qq(QMA#1%SXD;YJ?`v8)eJww|wg2h2-&ZMztufdL*&b_ zlEOwUnR=G$dD0jt%eH^;N0ZV1ocM0IitBF<=&^Wdfxh&#R0p4!>qKW zXJYstwbc=&QffXF`%KZ&Ajh1e5l*K_mw~|w!(A;((!e_aME$k&JPDMvM;Zqus-7v6@#5yUlKMCq!rEsK`x zD5_tPogt5jL z9=l~h-fe@ZL6ZE|b}(&-xM2O)&oqJe(zznn!-6)n?z@e2;Xc$IWr_W_&oN!CE3#V6 z7TVg=C+M!N=%a@u7#dz^=05>|M}xxEi}Akq3CvLg4IAp={vRom_XA-9Bk>kWrVv3$cLrl!nBRLsy*T>^h=xfc_?(M!iNtfEBhX-NWEhh`&>_ILOTB^PJ$m5wck_rV}n99W& zVsQyar1tR!{pb=Vw|VcneB4x6yvA`DY9WjiJQ$_KKrp5{XwmLQqoGstqxh9*N3|FA z&9c^yBcWNX*8RM|59`VARd^3gQ9j_e#;0^YQmEV`Vx2vIg0h0I+qvyn8u#lSulRp6 z4=uX5C>J2iFCGFfuiG~+N1Kf4$>@X>vXgz&T26gpZN)Kq z2yLZ^rkHd+&8?rNdCD-lZUbo#_lkfdBJdgY^cq@ASTXSh3pwK#R@|Pb8tkRMae3T( znPHsr=Sq#dU$w}FSL7!lYg))f277md=U!!NmKGDL6_$E%c~%3N3efj2Jq#)zF`r5I z8eZVI56xX+dvzwBnKZof;3F@JGp}ns7Qz9sA6JDf?^q}dFf9k3{%)8)U8&uFcVKGK z7ShQfx;{jx6(<=RJ5zM9?_YglMo(N(#BtKj62L$|n{`Q-2idR>D=5ItA*-hP)k{1= zn7b*IJf5hEnrMraQTV+~#x{4s+3E!<57qu>+s^niD0x@%l}iV=$`x{84Ag;{`5_J- zEQ)q-msogwv-|^58P$8G?X9i%CiVHc9w+_7G1E_7vR3O3P~UAKu1>wY_LY)Kkpzy) zS*qjfGa3EimAXb*Z@qb!cS*9F0$iabUxmKEIp|n3$T}R5n^0j;kr-1qpM6@Awy`k} zWXf43OBel8qKUU&<*j9ePS%`iQ+URd)K}q^*O9Q3wZT_yDMzcqU~?7QwlCuyE_%He zB*J>Ll|Q8WEr{9A$>vxgv5WF>uCfcFmAaL6`*pCJ5=Y^>?CZT-u~(ID+L59nEEQ7n zHOD&PWaV$QbRcU}YH=dgmP#qKSSdPaHeK_-I#IQi{5kjLS4m;W$a_>3=g)SIQ5k$0 zWnpCU>5i3UQV&ZNxX()?4v{pl8QGkWR%X$%8gTx#)bI_6@P~7R+VN3qwL3OIGc}1; z6q>vrc{xq^TEG*>4m$ZQd+5!JALhpe@54u(w1zb;=<;XTH@4pa&P%NhNWHap^j{tc z?uK~2TWlx_zA_kX7}PR3({VG2blt3bWf#wrP&-6cWw z(kAb~f+4QJUT#v%#p3b$)(xCfIhelv-=R*%9iTPox^%lpe(8i3PYS{}^A@@l8;}x` z(`Ns`o4T4YMoC$lni$`rrZrx~zFG5Ec)fU7D(XwAAylSF;>65vW8GO(S!=?dbAO=_ z)*=3u%(CHOoJpjN*W{j|y%n3kC8>b2jAX)&!SzU0NCOS-Aw$$1V0y$?*(*msZ8%%x z4{Mh=Z*30w$He&M_n9CfeW8$1BbP14&nS;OfC2yC96wucl=RiO(bj-2+8Q89%%_W0i>jJc7G>)~d-+d(bCS=XQ78RHi6zSq87G6Tg+oTWYI*tU<195*h>D;89l zA-(2M4#Ed*X^X~FZsUdGq>4}8$v`CMkVm51gXof!0P2OG$JMdrKaDdiCS9zeu6?hy z)$CSpc}ZI^rdN`G%J<1974I7J>yY@#(-W%J_nk5?E>Wa;gx3X%T+ro#v%KV^s z$21R)p-w;}@zKBYiXH63H+n!97V|p*VfdtIwot#qhvXre_1Q2wmQo2HqmUmOdf?v^ z{*gYWO_3Fw)`KRsC=acSJ@c%at{X{%?8ZRGfu|lyS3OS$ZnzkWLJ6KfzSp-}l7&8l zT3UZ7?boLw)9HL(y&m?jW*^tRFZ`!l4Csi2iO{@)Ci%s6<0)~v7II!?t$0NB(CeAm=ajssX!=sL$6}r!2e$qJe>d67*xVZ;74JiNesp{*HFjuxsk55A=5n ze|~fWTY{7BlD52V6tZ3MZD+pjSIjcpMA=g?PrXosVI`vY>a65kxBMx})Rw-%X9E6| zYpLm)^Cxjpj{mA-DME?9_ZKHcM43=vCw(*9HyUz$vKd1)7WfdECf8t>!IzGVb&Le>3!Zw*pIy@-`}9;Evm zM^5gUWi{sGG%}bxZH+?^;>g4V&2mMqJ0{jqpd#ZVj3!r)sP?)BD+1k5E!?*503`8T zDQkpIt(nAao9RyAQYlAJwYoqcC>EVh%#n~cBvTUiUVu5sSL7x?Re2IyocfcG^tV7? z#+S5{8k>_RuC_}PI@^@iMqVWsLQOPtZ2s*v(l70;yaVv{C6IBb zWWCyqL|1fq7Ut-S3X|~t8UX4WV|OfTSOAak7dzOgWp;YcpVFr4>(mM6wU4n&03EWl z2Nl@BjNo0u5ZzUL153gpEeu1MVAG|ZdiAif4>VY>sgJWL#gPW0o==|R7cCtaftbl!;SbYP?WGsgRbG5Sf}j>9eTN|Zki3XEEhdO)9*$9NIfSlRkymBIL$nV};sIs;>VIA_XNN=uZr`JSZ-@L@nuR&-TO__WsU`@qeJaIIZIbM zI-=OJc@L|>?DH?;0EU%H&3d0bY)P1d0X4H%Cl)i?&i?h$;@?866f8?RwRsRp(21&w zP1o1Q!F2Btw$*svu7;1I^?j|$$GDbUa~g~sS%h$jf7Ho#)5v-lbWu@l|0LI*A5KBP z7>@reidSb~U3L&=6SK1j?)6#7U0D#-Ljqx29@JwG3IdA^AZ>AheeZ7l3@N@D`Ma&> zwa+wp28K#=Z^qY#hQzTO8i>!;Hnuhc9pNtZzle^Bub0aHwY&zHJE9#*%vGsNgglsl zN0#L^vCT#@EfY~=?IOvs&t*cn9^=~*QvQm;BX&lkkQiO&2at4X5KL;K>Cw5*djOW; zo81li#+fzgGjV%Z{dh%C1DoJVoV5Gx;kYA>NN3xL))vziB~k0+ZeCLY(+dBf|yX!N5^P&L0W2U3X_a?>jj4PJ@m!YnO zb(3qaS=*Y1I+nO3EHMe5WV2MFH6nkHHcNVGy-T@Y7LoAtlmfl#Sb~Lg|3iG#Q9i*6mA}asnO!$gWXt zi@rAe#c6d~?-oT**yekr7~K61khDG7r3~9D9cTHBX%ruOgmR`vkLHp}k!Ie=RcYv^ z(QE5a2=zDi3zUr{?-@2QKHW{PC4cejGuid`h__b#e%G!bA1QacF-zB9gU5)EVH52+ zEoO*oM&Ug2*t0Kbv@CO1JZjN#UWX(2YkM2)8?j|5xN}jh7A42|=8pusG2ToTCNh3( cfdKh!MP6x{SuDa1Bh!zA%^s=Id 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 n!t@hwGU0hTWP&Zid5IhuC%> diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/7/3.jpg deleted file mode 100644 index 82c2a34aae83ac3608136b3b6faaf132a409dc25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11859 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 DcH2J` diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml b/debug/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml deleted file mode 100644 index d7734cc..0000000 --- a/debug/cesium/Assets/Textures/NaturalEarthII/tilemapresource.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - NE2_HR_LC_SR_W_DR_recolored.tif - - EPSG:4326 - - - - - - - - - diff --git a/debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg b/debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_mx.jpg deleted file mode 100644 index 67192282d950d99c8a6e46de20c6e2291295be2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118775 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 KC|1t+AOG1BP&b$W diff --git a/debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg b/debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_my.jpg deleted file mode 100644 index 3dfe883b32634e08fef90982bbfe4f75388bdb0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152501 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 eF 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®J-Y=N_BX>PM&2>Pl*4dvTzM zoh^+F5=|+1_0{z{*9bc{MnEzHo7U(Mk4a<^>PM(jynB_B^h#Y`w2MYjXoYc)@CVC5 F|Jn05A1?p^ diff --git a/debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg b/debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_mz.jpg deleted file mode 100644 index 7ef2363f27a8b6743202502fa4183362e9540def..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167980 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�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 diff --git a/debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg b/debug/cesium/Assets/Textures/SkyBox/tycho2t3_80_py.jpg deleted file mode 100644 index a8421113e0b4a7a51160372eb19a6f2ab2e35884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152999 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 UE9TaW1e4Xu)s0izmhVrFn?oG1&1>9)rdqYW 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� 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

    b*&C#e?R-c!Y+IkGbf!#zix}h$ez$2xDZM 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
  1. 1gDa_Mei!z}iDsxNWvxUXUPBWjvR%B0?&YB26}8}w^22-X3p z)tut4rs+oaA<*9nqLGr&qQ4BAhw%8!59Jh|uQ@+s z=NzBXNAh~5MnnSIl!sS9NZAQv`T1IgZlF`>Zs$+L(F{|Ap1kntG&0B+J9#oh!o`yg zLL)Xnex{KO6P8+M&HCPtfvFwNJCQ0!wU zs!?CL894SSf9F-r*9|u1vE;v6_s(W*`aJ`v#Q0WE?yT8v^ z`b1|$aqqz{UYWi|ihB1ul;_(ti>Ie<$q_)FgqH4yRrmonWy7)Od^D-nBWA+{Oxbi? zxz^hiqgJ)qRMWy%ncq`U!QX8ZBwQ1wll-Yh!$B5ARH0!;GPi#FvmO(Kw`?1PrRSWp zmuR2_+V0{`3y++eVNrZ_Bpu_$FM>N;xsikJ{_a-?jrTP@oE7AVX9%$7pRlnP&EwJP z!{*WQUPK_F*8t@`m|M>j%_KS*X!`);Yd5%kiejzv8W4fanQ%(`Wp1mM3B5m=hN(gw zex!eSnSXQ*HUTsQ4P9dG-z{Cev2}dD6eLEOjt-B@t>fnZN0h_NJyXZ{sn1tX-cB|h zHnn{q691wD|E&o)yU&pPr*Lrh&fma;qI3U&y;DZ z60ktfLbaH9pi@sBbzI5c(S5Y4U8`w?NmY5YIp5-YAOU~(M)bi{Ou3oKy+Acm<)S7` zX;6WI;kjq&2m*G~#d6S)Rz|+8iKfQlTH1PIn6?C%TcsT@7lZ!9@Ose$p4rBq)Z6sJ zdFNLie2PsJ6|r9bZX$2t!4eRz{$0FHnRT7A??-dpH?o?;zQ&o<*$B&gvA-FT5A=8zt!|q3mpxv{y@jT5H&*e&DWd)%L;~{k)L~oF zB5li-*}JD_%guS;8(%xwDUYSfp{thjL-a)NV1MDnLd}9w50*-tw))O|yI)@nsck*! zeuLe!_pc;H{+s%PGpX~{E>B9gGOJLd!^;H<;#kYDgz`2ToZ+klEeY4@;dD*GCsIPM zWQNz_`GQ5W+z|gn6$+}?AyeRebxX*kUg5OE{D-2sp88~0^`(Fivd}=E_NZ{IQENdEM93;*;R;+Ju|j-!BCNYl4Q+ri20i@0~hWg?Oo^)uZaPd*;xfB193DM&MXzcKaW3vQiIx+Q_jy&BX4Cyf=yHgIB1 zi)nkAhHk217?CK9#^&kYZy`_Pm}CJhC)B<`2vh1__2SCd$I8e*)5H}8*-WN}2{(

    U+p|UPy^_6=WSVr}?kN_M8tN`>HdZ_u>u!JY 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 M5gp@4I2{N7*#rT|-v9sr diff --git a/debug/cesium/Assets/Textures/maki/airfield.png b/debug/cesium/Assets/Textures/maki/airfield.png deleted file mode 100644 index b7746842450337edd3077787e78714d54613eac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1188 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 Ef)m}|HUIzs diff --git a/debug/cesium/Assets/Textures/maki/alcohol-shop.png b/debug/cesium/Assets/Textures/maki/alcohol-shop.png deleted file mode 100644 index b75a5d9eaa9f28c1903123abfb7e53f381abe74e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1293 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 FV1ko^?Tr8c diff --git a/debug/cesium/Assets/Textures/maki/art-gallery.png b/debug/cesium/Assets/Textures/maki/art-gallery.png deleted file mode 100644 index a663512ef383476c5371146562eb372718a0936d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3159 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 diff --git a/debug/cesium/Assets/Textures/maki/bank.png b/debug/cesium/Assets/Textures/maki/bank.png deleted file mode 100644 index a67cee06eb706317409be669ca47654565aca264..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qt-49vEkE{-7;x8BZ;^$1RsIDVa7R8XW;P$JMJ zJa$S#S+K~ZZBf}bRisT8`k0BnVa{K6K|H5Pg7+Z5T4O-?B&pPJrQK4BPUfBFuI5fX z@7Ut5nQbLj zwE=b4IntjL%1$|A`EW`>$g3T%GS}6H%;GTXkK#x=X%DLDzKcZ8bqqtJ7N>`^j zmz`g~&_eX_o(;C~2OcI#>+9&;>2O=TZ{|!%`xnW1dGFGUX6^}EvTbX9_x{igS>_V* z^80V!xbfp++GgG8wbyv29MPYC`s>!^%b#a5GWsRXcdZM_{BL1qR(3ycd;Ri;wu$dv zy{cNbcJrGbSF_kcp7XELynNxpht5Tk-7=n&Hb%VJ=GGK@w&C*6=2thC_5_+d=44?~ zz7?5pQct3Yd7{S?#-m2<+qP{p&*qYlk*V?7c;?{y@B5t@m;@RcdKDbzntlELoxQ!i zUEZm3$K7}5cd@Q$jj)m1f2?%&r;imj@&XMEED8*a91buIcR61JL1?$3M*pv0zw~3e z9z+Si6(FfaVTy=exN=40^@|r3OWVJF`*z)Iwyx_#UI7CGgAXq6doxO%=kxzkWMCAL zW8_%DvUcs-e0O(u=GU#)U)TPR=YH|-om}Mk^8G6xDFGc~;M(x&o1wk^`>V~bx)qq} zLcAQ()1Q0qU4PLdDk^H3ukeDfEw9e*viceM@|uC_9=F32{_j7uRYC6tb%!1nWR#VC3!8XaJU#XK{W;n9R~tG&3EE#Uk9ySpymVO!_+$xbtytlqqd{9MhFa(M5dk2(ICDN~NOzPZjM kb3*nrCvxhYaO#FVdQ&MBb@0JrL$(*X{S~Knx0v0)W;cxF|w$-$6+@4;P?$So8C~z!E%zlK?>W&+mZxaolDU< z-fx}b4eV-*ON+5CRdz7C7Z&S+P>P(8180KrA(?pdV#=vQx8|BxoI8A|yrC~&Si@A( zc1}?an!sl9Dk_CSwq~EfV3Z{^mCCxR%KWH7olg}1o~M?-H>QxmzM0_4 z=P*2wW>>m@gYO|Sy5vVhaX@&NB3Qh5BRwcIv`I@{{l)0?^p3mn{T)M+@9YyAZBI7h z_`0>N?d+AfxR*AzwtR74U*B0viSyIK=;P(uupF1*Y&L# zu#da(JR3I!2@DLJg+xK;SK2dwc_uS7G7<*Jd_vhu*%_lGhlMd%E~yGKl9LcV19#y@lT(2 zgXQLbr95!!>B*Zy&dL`u2_GgVlAS!cb#--TVS;GZk&ms#JZEkK79*vxQ zO;z4P1UsU5Rw4$2Q6wcOYKhF>;5IhuE+kTQ=6S8_>hIPZ-xMHALi9|qj@o+zeq09! zhj=-gJ*gz0Zh$r*t(@6j@+n zZvHk}Qan0}do|8My-hdNJp62#n(%z(3@eEu;ffs>O{gsBp@ySW?YTr536aUzdYxoC~pui4x(wx>6kX=D;Zf-meuQ%9R z)V~NfKI-~mbo6Ttqcw*P>=BKv4u#w$lgVMX;V&gBp6(t+qu7&*F$e9Sv+`a;dmoG7 z_RLyq!dQl@1H7%Pizqc6o7z0oUK5i+RP~~I32YoE!1Y^(S&H6a!X4cix;v`LMlHLg l-Mc}esmip9dtGU8T_^QbC-5%0ym|jn0WWuqTeC}e=6|d!rZfNm diff --git a/debug/cesium/Assets/Textures/maki/baseball.png b/debug/cesium/Assets/Textures/maki/baseball.png deleted file mode 100644 index 23f344bbfab9618ca1eb6d1390c104547211f9ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1838 zcmV+}2hsS6P)Px#32;bRa{vGi!vFvd!vV){sAK>D2E$22K~#9!?VWo_ zWK|r;$F*{)WDBF(h~3zww%x7WUQ4(ewUv(Z&>SamOeGb~K&8?me3We=>pBR&(0m|< zsG#K^4U`ZWNSTFFlOQY~x z3{?!G_?zr@RFtv!OG`^Bb8~a9si~=~g@uJwivKx@%IXwl@L7#9DyoOqJJmmu*snQwJ>A;)!r`tK^gIVS^y9$ zDJkgzAUuYuE42R3&dzeJ;%``1R@P@gOn4BL2LR|5f5Xz!(!K^f;V`Pt833{T{QM69 zPdFgD_(_N0EksoRI~w}aI?q&9`G0BoOH1UK&-d7_hkUWb)o_=`-_p2lk+hT z0K_~VPZ0niN<;v${zBB$)YS3WB`zw4sQU&a6Z8#Kjm0mU0sI|f?SMqI2=D30O1kH zkogE4837PTe;vd`Ede1&mXwtAQxJ26TM&X|85tR$2MdA}4|X90$%>1M2YCW;I-TEQ z%}4=4U0vN-o)88G242KvE|($LmLXb3uY2+(gbvIWcBu zXP@B(z~OLwkMZCNgky4IEH5u7^McUY+WNZCl~X?mcPb=oM&}3jiU{F0h5FH|!SP_X za1f*~eLVz$jOAGau-om67!S63LKFm{s;a7)HH6B_%C`~1R!@k8Ak56nWEi-_CDtVB zrL=DhlNcj+ zjDqM8B9!7ndV2a7oRhS@CebfaK87HW4d4tQ_=KO-SMY|Ll)OQ2_MDlS`6&ivon4aN z>CVBy!I!XTr(76{GF&1Zxg83oz|$jU4h%LTO%yk4(E zm~sViZC>JUSW!{YyJ{goXBr7plAf5D$WBg9{$aB)wY9Z1S|ChLPCm=9Tw&iS;s-26 zukS$y3vY#mh41l>3(%G*$#dg&Z0n~LC^0edycP%v2?-Zi%qfR;q9%QTQ!GXc9XK3$Xv)TRtKI@?!)B0U5*H;X)*chc%7^S79?=U)4>d1}&ptX!36PWEZqbxPE zZ3P7d?*pH8G@QhbGNP8_cTd?B+lz~fPt)F~yu7>}fN(5q3v1)!<2gJ5tV2jpnDV5$ zS6f@#Yhew6$MH9`2~(iczqEKEuo;BdJz+V~qE&p7tf|RZ$>u!;2tJ)FutPs4u-w*4 zGUfoEcS4~N>{giW{Fmn5_4V~{h2<)2GD`7(;OXh zG&D543B?4GolABfd6AK1_e;Ou7_xH$DlMA#^GKfXD-DE>j*bcq&;NKxdxApC-(^&z zpe<)BBx~Fo64RIvj8~pO^&{HRQG0uPrA7z`gFQsGD?H#SgFI6ff^;n~NY)^)-V-Wi zi|F+NUR0>XC^9QY1EHy@>5V{3?cHwoIXn|pCj^_#_B#!Po}QjpHpLMyML9*xP32mK zsIyn;6 zf4$}3jp}Ml&QelRzSG(AkD{{l0Jg0&B0Fq!OkLv3OI5~zYXS*L7W1kd?MQYPD#|b) z$ji(7khaf9@%4GZwa}VVx7&RddOs!xTsB^ybxQRJs>cq3MWy&S&gTFjmQsA|^Nk)E cX??ZI|7*Dd*pJ!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1quc4ZA&E978H@y`AgtArdHaeEFp}@-1#IWh*{} z1Xg?$`r8;&e%n4TReM>`t|XU9>=&IKQ>r%lxhioe-Q`jIG9@KZT##AtkX|L%eY5BN^Ru(Rr?uVppX8(WvBKv5t4VXhJQn*2 zx8|&1QlBBeX=jbWeWp!QKT1nWN6$&ww^m_-@ZGgnI!>NE`8sU+rJs|}ZM}Nx*>ml= zHJ+X)<@=9sPAqLb{7_PqWA_@1HzHbdO)_uHl0D;p;{EskL6VdBqE>e zq6f@cm(P@%&zLXpGRHn7@0_L5S^K3)b$5K9sXzJrQ!G^Bjd@Am{w-TdPWB!ZxU1?T6RcGan z!w0@R{rQ&&^Z{P0uDod?1xM*WN>+!M9OGl0z;cbh2oyO#$ z{AS68=QwyD+q&F+|`-i+)(K2t(8R?ZSk4=RRym^yzEiFblcc$Q6Al5E)?U2#3{rmTOF8OJq&Q!Jk*ip&a zD$PTGrcIj`=l5Q};kTBvpzji&;_0r7FPcxCI`#3F)q6!u;=;qf?^?e6xt#CONf-a@ zFPlG2YK6>>d5;284p`rG+Hto1fvJRpU`$xN{1d4wpUWfGuB~VM6h3uUQEOs0D3y7- L`njxgN@xNAi`h+a diff --git a/debug/cesium/Assets/Textures/maki/beer.png b/debug/cesium/Assets/Textures/maki/beer.png deleted file mode 100644 index a15cf99119df13c3f50968f637e6df3170134342..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1403 zcmV->1%&#EP)Px#32;bRa{vGi!vFvd!vV){sAK>D1rSL@K~#9!?VVdl zltC27*X&}Z(M?T5iry-^5SG1^L3?+#%vDpe+{M5mkZ4gN5)75dkbDu$$`|v=hm>%; z;6qO)A{Lq9qalT135I5vZZr6xjpI7sef;JO{NMJQ@67ql?#!7vGi$LhmbtmP1f(Po zvl1;z3#udz$pccXWXaACg+e>Paq0>AbC1;C4~|n=QhI+hILtr*=)=3nhsVdqv-jA(9dE;Ez!@d~FA0Ni9nd3kw#EJg$Zfv08yP*+!1#nNuK z+dZZxfE2Q#^78V>EQaLf=JqR|3ma6BohM1#OG-+fv$Wgi^Sz?9`;1&elF7>2+S*DP zzlw9J^#uI^EU`N?Gjo`w-8D5e_bJaGkYxy(ipFp;7;ylAwavY~y_YD@Cm3RkhyYZJ z0RR9eZB}9oZC6N9Z_uHjpWQXw18_Q>zvQloAjNXt`!^~{NYDa+jjYh?^$sWq#`bd# zAfB{27z~!MwAbVDeA5EJak9eF($Z%v2KoK|AjKdj=Kzk8Hdj?uJz!~Xetv#8WfkKvo|Lv=RHe%F(?XvBT4~8iM}eTZ~-z=lU@M;bewhr z00000NZIZ7DHfxqr>8Slv-5E<$p~OpO8|DV;`H?N?~nnpAQYTVPyo2q0+2>lURGB2 z1RTF0G*$gTnSxr?0)x)cyq2UhY8<3*b0#yX$iprX7Y~x~y7LsuR000000Kj|z zGBPs0fb;bOuq0Qey1Kd+oNo;k78btM13&`#g2BPTd;nk#wYRrlrvNyt_GWb?`I3o= ziE{wJ8X6fH$)QBSQECH#U`#^x2hOhGDqjW$U;qFB0DuMnSkDWXRSt(^N>2bO5DWaT z;^N{L6aWt0vc@_)JFkiips}&>HU+>wtrAzG73`UsQawFAmnl=wtz4#Vi!uNs0P6vO z*=9fhfMWo5yZtu+&<}u$rop5 zXMchiK&R_?(2G*Zmj?m?q0S57;8XV)Al!KYG$j)%N2s>8wp#Tw!4iIg)`~t5FLNFs z&d?L(Fat99NIw7o0Ad5M*=*B-0GQkY$V02qjuU51VU0HVx*00000004kf0A8>6BW%Rz2Vlv*Kz)7v zU6bbm1q~0v76I5!8q?q3f6>eU@GZK!=K{gLK=?cGG)+gBGY+`j?jL4!K9@HEE4}J* zwfBA=0L0Ra!p54(`S=R^Wjb5D#pn|5-c6i8iBA&ZEP~Z0pU?MtU|^siT>C7%6f^#H z;Yz~yXK(`m8M96>0GlnmmF50_#e_Y7y@lt3j67sg=clUetAEZ&&<#%~#s~la002ov JPDHLkV1oGCVwV5_ diff --git a/debug/cesium/Assets/Textures/maki/bicycle.png b/debug/cesium/Assets/Textures/maki/bicycle.png deleted file mode 100644 index fb871be483a439271a6a9ec1123dcd82729f1ce8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3989 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 diff --git a/debug/cesium/Assets/Textures/maki/building.png b/debug/cesium/Assets/Textures/maki/building.png deleted file mode 100644 index 885f1128a60dd5382036528c43f8fde8a1a432d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1765 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 UyCZWW6#xJL07*qoM6N<$g0*?N_5c6? diff --git a/debug/cesium/Assets/Textures/maki/camera.png b/debug/cesium/Assets/Textures/maki/camera.png deleted file mode 100644 index ec54e12a21c131a7d455fc6735e0b48356b0d1be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1976 zcmV;p2S@mcP)Px#32;bRa{vGi!vFvd!vV){sAK>D2Te&tK~#9!?Oh8@ z990yhAL~Cx>L;nS(U>$Q8f~nfCMNX@?7s-REG#q#Xjv8#@B=Lgh!)!NiM657)Gwha zrXXsIO)F7Cup%a!U=gXL4F*F|6h%=hN?Cj-F3mEX-FdUjEDUpRaISKo@idAR&sCWBEdK`Z89y+ZZ0_+I{Nzhl9H2?JENkaybRMyBPAu}Q`itG``U%({A*-5{-U-OH^g)-k+AWw z|8)}+6E?fu{*4-r_lLvb=p7#)kM*~WvPhLToX)?N70RGM`+8Rp8&?S1{_^tjO0}Io z1K1Ll7iC%q&c7^ByBrFbu3G{$Kas+7Q&Ush!bLz@TH41V<&B(=fzR~}cQD+`utC@? z0F#rG*4oC;Y;o5GW{K?ECx=O!g3eGx7K zU`wQ|8v~S83isn_M~8&@Zv~IzmtZvL8*K)y!DyFRZQ-h!X0!R{BS((pg!;53CMJFv zE&^anrEaZ}`Si;Me~oTm8GFwxP`ks%-<8c)E3{s&uI zTQk*)x9A<)wrzV&_!LA4<2w8H?JFi{sROs$eOQu!nwpvta+W$kFOUcz0*C-2fCx|) zY|QeP)9L&wFE8(HHt4B1aNxl6M~@!$w6wHj<2#PwH$-gbb9}Sd2=KD;N`Gl->F)mi z{zTq5%$YN161Q*P{tB)QcXxZy5U^>}rop{?_r8evh)@G!xE4B~iwNMy`RwfMcSc7? z(4BcwKA2dsV!C?6F;K75>sU4@UudmN%w*DXj zW(TqU*}s2(QMfYVU<+YnA|OZrOKmWluM+{j>A^rVN@@Z&)tCm=6ai=k5E_^3xTdD2 zJUlfXkLO(gwHe3c5_#;{u`D!yx+NeZBjZCkj^DX+XQkC@JsTt|; zDcupUb?eqQc%0*QyWbDhMpjnVdptG@3JTuT9RZDvjk!F{!(3jH?Apm73o|YNFL0%r zAx#i~aKO;ekb|T4A68?IR*2!@VY^Zx3QZ7Tv)P8EqMZ0WSdT}JEuLNx&eIJ6>;-&E z${|RXM4pWjVGf=i5jq9BApo;hQVuzB;zT+-cS;F+ot>R&Qua_L-4K9vT2c<_?(R-e zC}1`fU}4@YurhtE8v>Bb%G3Wh8jZir)fUq+#xovZWg5^80Vb2_cb*xq&6_uWGFMyB z!9%veU>MiaIKYcGUdl1m)zvS})fVQ2rR=n~w?C!SbfsnnVr6AzFY^T8un=%A3o&>` z!pOSN-AI@<4IMnrLArM+?*i7$jiF}q*ifRW(;NXvv_k$4kAoT-8lE+q&7-`!aW1am z(apvi2}+DNG&vu@8;}Fgm-p=>5o~NQ#m@PRr{AweAWm}xpr#@YBWD(?v9a+P;1n?cl@S7Z6h(}?4v##fakuWu1`vv)uwe&qHk5~JUl$PQLWHO^iqPFv~sfd~@L^Yio3ddmOxtcX!?d7?e&yGf~MvZp@bTZu| zlpW2Pu!U|VZ)%BDN{h$iX;v#2bWyL6VSV&puw_nfZ?8+P<8ckHg$`OFqresb7~vKb z71d&07;3fuoHD-S7}kpw7Z=yKT&^xPx|p;|(l4t5BUqcw_C0{_3uWUGTBb?_5CKF0 z5ujgWW@fgC5wKA>!9mVa2f4Yq4Ppe`=YL>iWF+2XGW|*pQ$E?CuCA^?xR*8vxK+ps z`pe`nWr4AZNY3j6Gn-`_#WrSDaz0egH6IiE0W!XCp4l+_PO%|7qL0{391GnD@=;P! zQXOcim2dObr89ent`OUto1hwu7wyQ-4qVCbC^;uA&R-SiuR|{NZC7t5N2&G~S&=;d z;j$9@-uwQrfykH}Vtifw)$}KEBqSsxBqSsxBqSsxBqSvBEdK%j+k|KG;WoVh0000< KMNUMnLSTZ}C8~D- diff --git a/debug/cesium/Assets/Textures/maki/campsite.png b/debug/cesium/Assets/Textures/maki/campsite.png deleted file mode 100644 index 36e0a92deb342424d23a58fe325c74c07b11deb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2411 zcmV-x36%DUP)Px#32;bRa{vGi!vFvd!vV){sAK>D2>?k%K~#9!?Oh8{ zlvNZ)C9N!})N;&6<|{QP?V)KSR>Cf@yg?rElsCj93@UAyK?ea8k~W1La#qklO~er;{- z>vZJPICSVx3H?1NTREfJMgKg4muVtBJw00{A|GIFZ9UM{)#X7C$mDuvoLSAIe>F}1 zi4!N{3Bh+Ja{wSJD(VwtEO>!4t6B7$3Nzbr1d>7aCr!u)NFb*!`-fNuK*?HFRTYCcVFhPg z)dA1YL?tFB7KtTa0e5%z9}ow;3Z*V*{Vw^7V8*IUQg3hXeyHhL9RMgPDM>;mXHRnG z?>gXlnxL4Nm~vf^4{&jD`FVJF*q#>Z_~MPpnASgze5m22Qt7|CasU97Q{+{&kqd5e z`7WB6u&}VtbxA(J-roKyD5=!FtjKS;cQ(IzROIHy#>OC0y$tKx0f3a0lma9Ro}SIo zuOc`5`S~^IgM5HYCi@eUs|gm)#^`?>lbbaa+{7Y2KK?@_3%1X;=${LDp&vLsJv~<}`OePHzeYz#SBU+-kB?6ik_CH>G7AK`d7R+Z-{0?I zYirvll0bQWetv34N5^Xnvc>Jn%E~toC#*Ea!FL<|ph-zd#bTq^$;qixA+SY7MO8A$ z)on;uopH(4g4`@qe#q|bZg*0X-w;b&K|w*9;#!w4U-n|i0(o(9@!Li%S3^q(A~%1` z5dBwZd70GqCt1c4BnvE|WHtu!AEBeay}jKVT1UhZcJ%1c4BDYE7O-41J3BkeDCKHw zQ$=WKXsuYHNXgo*rV|=u>}s*sb#QR#85kIFqONIe(B0M00z#7nwKt30{0=d7djeWp zTYXuw;K-39?-`9;EeLMrh}`@&LzH$ypU^}bGbZYu)7dk_B;baiz$0pEb1TpGV8h01pq3?^%`vF*n34pM4UwKwbM|d-;~}| z2Q@ovArec7ot<4T68#cIosPA&1P2G7VUVkD!X7ll35yLO`c>rS+}zxB7U>uSJ1qK@ zoNh*EL349+086zM5D-vjaB?-Yc+he)w1PnG&Jz7deJ-JAsn}Q$7#R2^gUo%auC6Z3 zpyX<(ndu*#mX?;s68)*Esrg7Gu1B12Mt`oUsVR^p3%tF(o7KqGb7vy?3$gBIsIA2k z0G-iD^h?!gG{Sii;|POS2}1zLD=I2tkt|qc5OQ;3VqytP^dCNaxKJB?Mrd=CAz3h@ zOSu}>v}crDjg^A1Q<0^+88QcHC4}goKgn-V*;#+!z=3*}EGQ}}N=5=*ARVK;j zUZkDi@9+N=OBP@vpe6yK@Av*3Ol}Se3OdUe{U5MAES3dOQnF+Ll*2QwyBca@HQmj( zSQ==N=(o~Vm&e-PeSLi!^-vUSozCdri#+57mWND8NGL`ga+8SPw}gH*LKd*JKib&X z`~_R5kdC^A)A8(Jwa5u`GaIAeI0*c<|sy(=JzIax>J*q-Jhq zc{uE(6WBY<5F|_K>($iMM6v`4DXss3_2+4otD$9sez0T5j=ja0-q(@zW*X$w6$vB@ zzF`TJ@bK_Y^)6QnM?{(l8!6TR=?Y+HxVgBv{KE23YF485D&JQO;PpUX_w?!0Q7l;i z`V!V%4V4;o|5d^@_P)sSn*#y@ z&S`N!(8#tEJUD6PfE^Vx5ui49aB#S)hk;G6fP?;6R_LJAuC1+&(DJ^}8@mo&QxIx; z8*Lv1s#o>gjFpXEGL;LYyQ}^rwS~CvEqz6HP`;l z&CRVHUav@(#a(R+>Q{Qk2$4;`{Nq$^88T*oyaHQr5hrYb=--5_BAw&J=@ua7A+vmQ zmDdk+F0+Vf99nhu$xLWL?fCKIiJUC`AR;0{Wd?0RpVt6;rZ`#p0i1!P;s7!TKSy^m zfb7Z%(>dhj<>hbES{K^K34NGTy>Z&u0jIzq8%uU5Hcwk)4OLR9bdZzBjN8zsiu5Rxzq5hep_?(S9>Q9o;NU(zr9&uuoWwS!&cr;c(-|jT<*^+_-V$#*G^{ dZrlvP{s+?D&v1Hi2uJ_`002ovPDHLkV1mPx#32;bRa{vGi!vFvd!vV){sAK>D1#d}2K~#9!?VWE( zWknRgpVqDvyT-B*!NRh&R3F-~jqSrCv=sWD_ui)>rajGn*_Rg@f{7XSQg9Ip6gK~) zi5lV;2@(V~h#(^&1Cu}q(`1FPtcdvYnqEWamqVV8yuY?d`(R(b4Aq{{Dp5bYfznVRv^o-$Fe# z8P0!{XHYB_Tg=JHIq;h{H#ZL@fsmm@>-VGMO?pduS419mF`&->SEJGBCaeB*LL#m8 zFD)%q1O)(9P839>0idB7BmkPG{VJs!A`iJ5KRl-QC^Sg+>7> zJQG|0A>9)V;7Fovet!P>00ZE4Ls`PQA6?gf3^IUtJU%HT3dkJyK8Wte3%MPjI%T-t z`g?nO6Lt&@hr>I51hBHQ5@VE;Ct~hz%h0v8wU`$Gw6(RpWv5>G`T5_v+6|Gyvdx9l zETJE}AINTqblay~YyCAfH6Pl1bNt260B92QB$1w8$zgKQO^)P@m2mlQY4dbBogqr(LPENkW zX#F{g?dmvE&$_z0_iWa6pA+fnU`7oO54Qk?W~O2Q9(J)C$_4|Fo16QW9fNdT|H;cc z9_#`rEiL^5q#GhXdI-Xx+1c5+mjP5)SAPUF;kf76t-q^92!S@7E z-hVHM03wmdZ^!C}SU=v{+A6kd$nx^?bAA9&Sy}lBP~>Y?oUcRW{mFp+w_nt5-8(xw z-{e4eFq!i&vwq|x@rKGD|7d#0)<#=&rZX)pEWBxX7abj?A<_=0hjnahtce5R%I&TH zB*el5DqDAUb_$Y40q?USbe`)QdM|OOoyEn)U!mjRw5O-1of`$%`sK}vsPpeN|8aG7 z^;vWnyt2Nwp#YvR|FNs9>pD6NUN<&2N?8DoghfR~#i!^ncx5fzGXa#Bmw$#1gV)8y z#YzN#01yBI2oeCA$}K1;xT$H{&t7sCO~2DUpLC~#Cjo@R;Xher$K&z$Rd)OvMBGZp z3j@G&{{PzE-hM+x=g-Z}y#Tp1DGh*?^A#XN8z^`GO)8rg78a_#0N|FDb=E{8(W?>w zy5{Z10=;kmMMXtlTd9a@`6jn^NC*cIjYhw-Qjw{tsX7GU(imW+B4uS|pQ{9*qobqS zHvszj`d)XlBC?{Owzl>I&%6iFK0b-__f!O67{(7gn+FF6TRrzCY#t9h$9^nsgJ90#@-$$W)HC zeDwWsE?__a006As1AqYB1(1mV!~-~V84x{Y(e6b&2*5Fbh?BE}E|?1%8X9`lsnL;0 zs(vWaz$EVUf&w5d8+$uF(Sn1Fy+ELykP_H0$|QRaGBDjblRZjZ}6ka_V8ynxXy6Zd1AbVQc-C^V7<1d@<I5*| z?IRvfxG)WTMAAWhPkHiIJp$njpwZbOiNZUi#Nmrox-i3e2YlEx_<|xwR$c+9OPVa> zFF7zctlFKt|0N}zM8mld3JMAe3JMAe3W~SnAJQa`BcMZwk^lez07*qoM6N<$g1=t3 A7XSbN diff --git a/debug/cesium/Assets/Textures/maki/cemetery.png b/debug/cesium/Assets/Textures/maki/cemetery.png deleted file mode 100644 index df244fda024b8220e1b9e4dc496c24dedb952efa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 967 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 diff --git a/debug/cesium/Assets/Textures/maki/chemist.png b/debug/cesium/Assets/Textures/maki/chemist.png deleted file mode 100644 index eb1ea3574940e0d0fb4332518e3393016880bcfe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1603 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 diff --git a/debug/cesium/Assets/Textures/maki/circle-stroked.png b/debug/cesium/Assets/Textures/maki/circle-stroked.png deleted file mode 100644 index 88689e47fcd3e61645900d6b2f763264df148c45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2126 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 N002ovPDHLkV1g;=myiGe diff --git a/debug/cesium/Assets/Textures/maki/city.png b/debug/cesium/Assets/Textures/maki/city.png deleted file mode 100644 index 37d8fad8850f8e449ca94b0848c5d46d3ea7d99a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 788 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qt-3`{FMT^vIyZoR#0*e&HKa-h(3f{PQ!&K8mI zmSzW!T_WN;PMKuKl-P1abQH)x$hox4E4_5<()$N)ou6<_Yihz&Jy(HslSJ~;{8=}@ zd3F14VS4%d{U4;xOCJATTz3DAXt0**jT>^}PFbcxm8OOlQpDfPC@_kIW)%kb@w zp7!(=56~w-(4)Tl75`U(x^ymu6dV3zF=76uU%?+eE^HGrns(f3)tvM|?;|3N-;TOJ z{Qg_v&3eHL-?nbZ)z14g|M<#_#!LkTN7wv|>%aBf@AhYj?CD-tqWdNnGpN52TNGC> zxOqSK)DuN#ww=}3|8F`gV?p1B+Mvsp(+n6+->)#6U8=hJ+QEc^#nKMnyDVSSUi!Br zclzn4OH16k*lxW3TKB?l&B`Lv7qy;gaX0$azNsleoQohOSzmnroqUqPeep%}yT9#r zeeVfkx*er0s1yG#}1VRO%%mCKZ6E5`U8Qg;0K(kFk#PH4?(Vz)N;R71 z{YzAQdA?hPVe-i*Q9_pty?A{-5c9Juv+M z0UzUyf8xg6fiJ^TFXPK)-mo`e7KnB!@b{p Z{~2!INpjQb4|osK^j!HCg}w diff --git a/debug/cesium/Assets/Textures/maki/clothing-store.png b/debug/cesium/Assets/Textures/maki/clothing-store.png deleted file mode 100644 index ff5f8a2b18022fa2455b1c539a72a7e3599687e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2037 zcmbW2`9IT-1IOQ+jg977QG^v*nj=lt{~OLIiA=1!Sf z7M8^3C~}{DB-gM|R=z&JeSZGF9*^hi`FQ;WuT&drON6MLC;$KmJkG*y&!m5V3Gekx zLD<#N7UT#&>FDeG^#Ay%W#sXB*WTHl4OZ-5e2nLgVTT-)G) zqU<7g(APa0^(iUpT^*$};$sYpr}64)W&KmNy~uOwOXF1HRQ^(|KTE z;P%480@YweBqb|rw~4`E-16`^YRa+)4YhQ*kl#9ukkpEEdI$1ybD2lTRCmO*iJRL5 zp3{uE@@>|VlkQa$!vEGcAHD@?Z*LbkySfSnc|6{LH7@0jw-f(Uc7ugx{UHT~7m9}A zwc5J6n~9x(xD$O)>+Fydt=`=A6hvC+?ZVQZzP`Tvt(Ec7&!eLhWpl9P;_8`9hy61M zaq)^#|E4YCu>mEH9A}^Td6vzQW`|nQH-oqz!wueCe0gMc$r`o0yIYZm1WS`9>LW{{ z{?JQ%b2DgKSSU zg=dd&w+|dRP?I=wLT*QiKp;#^5&u%OlS^vtc8L5_Y5#N`8*2&I(a|xM%9bqai0=6O zcvUMjDD!yRt(R}P78b;m+QWYWLVa&n|>pX{IOYX%1t zKlBzXEiGj=`k-bZyT-R?EJ{#;4fiT^1-@Btlc%&N>Ub(Sb-R`tp;kEDwm5hn2rh4A z1`e2e1Rv~3mqmWq{zCHVmQ zyztm(Wo2bRv=p)QZ+pG6zO%#q{dPyYluQlWE^;SPU2ZEQFBW$qbeX5G1%2>)5eq+c z1*YYG@cy(34Mr@tj?>lEb$~^`L#E-2jpC52W-&1_!-RGHAq*<`rjJj!8&AbQ#DMaY zEg?guJ;^7Rl@!fqqY%m{_m-eH@);7-$klcZ$C@(i{|AA1UT}Y*tE~k^zREflmTP@lu zd`u59Z0zxhiaQd5VM5Y7blP3I?(-&d!o{ZPt1FXlcdx0ij7)?bYcmi3jJuU0?W+z7so$&n?aVQJIMo;BUm99lB$~4YIkzMtFT2JKJI5};L=N7+;_B63^xGpXC zA2|FZ#axJ{$DFadU~u@hp6-|BO&Qfo;BM7o(L&M}5X0~5XW`Rw`MG>Rzkje=e;?)?U6GYrVK!Ly&#yzFZLY`Y}AdO02(*`Cml|C@69K zOoe_)#h^-So{h8fNc&u7b?5Ws?}Y&HS5HHff}OoR7Z%C1JvG~)f2|EXnOf_ z^s8tE-x>f2suBtY{Pnu)?;juV=M7A3=hAWRemBp=BmhwP?o}S2ol)+G=iLSy21b7n zekF+(O(F~xh7wz4&@O>(^D*-(8Z)Bt<8yo?vA)x7A}t?>`iGDQWA4WTzq;;`3boQJ zv;;6!>f}=f;Ao{Y^#WL8Lm0lJ-mt00&)lh=85-o<0#*SBNXJ7^p#NL(Y>0X;(_O(0 z{D4Z`P0%yvRlmFDt{j29rBpUUp*s&y*M9Cye82cxga?Q5j{&!|a n`7&TH1_(RJwlw`$9%6REODgbgc`LT!-cG diff --git a/debug/cesium/Assets/Textures/maki/college.png b/debug/cesium/Assets/Textures/maki/college.png deleted file mode 100644 index 102638704ac3a302655240bc8b51071492960438..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2502 zcmV;%2|4zOP)Px#32;bRa{vGi!vFvd!vV){sAK>D30p}-K~#9!?Oh8{ zRAm&#@R3=Tr8y>LS~{7NrDd9BfSeM@I-tA)p|~ z%#3l+&@3{F95KtWEGLV!ED$=MU6|!^@BRN}ciFqU|Cu=h!!UPuzw*OR% zm@r|&gb5QSOqeiX!h{JECQQqknwoBJY-}7x{sQ>~@)6{H1TvNf{#F9|F>+7xDGEM@ z{->8f%KX50A%BDbc2@!3(7ot?pTsN?$e9j&X9DygayJg(<&If0oV>e0(slpb7=gg78A{LVDv;#>p1|ryKVQ@W_44J*ev1|@%J%T^_|4VT_1}ny zh?2_6%Gr!SOeTLAvq~VXJmPy3K+kG{cw;N?!U;!1LI@^;J;#xuv0 z--qBkaxOm-S&JG-_4V~rb8>Q${r&yFB5)g7;2XM^m)FnBmoHyeS6Ao52*fz@dmSba z9J%~WFD@>Q4G9T3Mqu7B26(won>Ov-x^?T)5KKlOz#;CkXW+Z?@C&a?l&x$* zF5iK`w{mcZdGqGIfBg9IFb)neSoa*l)LhZzdqI5 z+xx6ufLGuUzb7Up?!fHi;1K<-p1N8(m$#PdoGBVQAxxBT!5gcOQzI|LAf-t+S z!*coa=g$YupFcm3a`~%v2z(nd7aAIR4QmmTGTaiQjLmc7* zvvUZZT>kp?>(eNgU#+KH-pU*zzqYnE$RrLS)#b;qa``oD)};CP_?&Ze;1xK;AK(xd zFJAO#%!mnXI0XISeyz;L7IS%Pa)@QimaXUD5W{Z@=6RDu*a5D~px~0RebM z{>SX>?ALvLeQN}8=5cp-_qwE{r0rL(T=A8w_z-|0YGvcM$fi!6`lA4`{r!fBh=}4- zr%ugM*#n-tS>MrOx`^76B}+DWdV2mUK;>U@LPA0+l$IQshP8J~S((Lpu{SJSxNs-( zT>-GV`}z6RY}>Xig;BTzJMO1ca2rVOsuhT;s;Zf>v9a$G1N>V6-YWn9B`qy&4VG@L zQO|7lON!(nQj}B!ff~r1IdeY5I_Jp1qX3zZkg$t`0i$Es)7YlVFjnoqq@*Nf=FFMp zw%T+tVS}xw0a(T%3dSj(zU}Usp{`B-gjU-TzGu&#g@J*ApF7B?uPZ7liemupYE}`j zRI(Vw>i>fEVI#8V0H6xYp(W~Kk+vi~{2ubLEa{0oa|o3HU|^0kODBvo5Piv?X9WTr z0vUp>*81b(;`TyU$`OFUR*@gl3%f`<8BO_NVq#*Bt#Ake{;!yrm;&^;@&1E?f=;jk zfM$!e1-MKOar*S>8G7arXfsAdMHS22jJgj%J2^xdKCoVZpF4MM>CvM{Us8I%HWL7Y z{h=EVhd`|)G&J;6YjFtV^5Nm(2U!XSn+t$UGs-;Eo0pgO3Vq0v9oTh)JpJ&20|%mb z-k;3|K+?r<9jrFs5Z_ub5Dl|t%_@gv(wIZvHW>g(TQuI-6Yl7tu2``mlQ_f=<}44- zm@(rRhpNr40^lq^54L;v?nGV?z#*0{UAmDt#3d7tB%Qz#$Mc#q0cdq{ao4V0Nj#$!90EDJj6*bH z^WMC9^Aar`PP5~J58N-Ir2KHi0JH=G?@#1WAFk8qbY2!_A4#fWb z`{Pm6GX?l&r_}f}g#c8_0`QZ<02raG+g7AzO{+tFnVFd@%vsyPp>J~^gM~0z4z5(O zZ6!s~SPsYO=C&1i%My}zJ zWMr&VSO(AFbg0$|7(E1_kCJ}K9BZ|?Rm`}WKn={Anwk)$5(sYN0{d1ujx<5HC25F! z^#VRr-#j;IMMXswYCPj|R#sMK8|}YN_JRINA1Em)DaXn)p#gnq2nBe!1*)>RJ3{Sw z$ne^ne$i25W|UehQj#-voHVdv)NCNOS68Ld=3rOd0=rUGElq*v{ZL1&54Xlc0$ zG3u{5YD`Z_PHc0IInDshzlbUR~>T{@9-X6SlWGQCb%0D0DOmmlb%f~RrHgT z)?PfFFkFd)lurZrGln%H4WB4ooZ)Q5?Crsl=gTDOJ)LaDF#V-NAfBubhbwYYQ&ZOh zY=fFmEtV`6@Y2oc1C0S*ArLqxF-&@vS{cGNzt2Y6BZg>vxK=_gv@ch!T9v^AJnm&M z1$dREw1;%B5}rLsx{cl0$<|HM6uHQ+QE1Obh^yAbmo}I-EAGaI#owfne^5kW()C>{83lk!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qt-49xYOE{-7;x8C0M_n2HLbNplE1kTd+-U_8J z1fD9sJ-;%i`dO9PaWg@0GlMr5l7yGJHd?zlaVp9k>b`Mnp?!k-($jjPWn6D2t=TVd zMN#a~f~b(yYwrtNpD{gpzyG-9_V3K{aw6Yq>d$}Q`uyYb{NgB`u4udY_a~ixI?MHz z%PrR}Rb3YKt8d7Q{@$Ck|8CGqUy(a1T<^p-c3Yg>|6-B8?y<>5YiI9|6v^|Sl_;gD1&a7EJ>>78<{%P;nvE#+uS+jPT7#S5Uo@ZodSC^WY`0$I7Ks&2T z^USmPI_2l*&zR9+HTRr<*lN@G{);AWt5t+L(>F(k&(uzApUH6c>8$+CH#dE~_2&^w z^Fj8f>zIrgr``E|`Q?`7^XC6d{Zw65Wfj9zaLK3P+oR^=k3Vvo)Mh#@yzuwZ>H|Iu zYkwSAym;~Tj9-_&eEq7b#a0lTV8}^(=qAtA zlIp!TWvytZOWt*z0~an_(4A`fZQZ(c;#>^&lTSX;ycuO|Z2X*&fuUg*i-d&4j${*8 zGrRfvE14#EsGK`>t?Ou#_)JzqZYE%K!aze5(~o4GNhjTG^p*$tFP-*k_E|F)2Mv*3 z=JxjQr}zHw{jt>PbN$(K=jKgbYiem(IdiMRwI-0}&y0WS{!jMWr(|Yhb4EMK#~ElX z94y$!SQ7jH&DW~LEbNq3ocJ%7an?Kun3+lLn6<(2Pxc#2d-v}7Ui&MPd)K|zoO-^{*v`j)TUdSl zf9GjR5nW)lD=Zl%VXHv5`A3ebv>5!7J&{a=V+UPeZhxYOh&>999Se4jf}V@%;0(N#Fh14nO>G*DEzI z@7)=$vt?6$*Qre|k z)V{Y1W-`n^!Wg~!CCkwneVw(7ZKBvc46gR8gIwn6>gTe~DWM4fpr)u0 diff --git a/debug/cesium/Assets/Textures/maki/cricket.png b/debug/cesium/Assets/Textures/maki/cricket.png deleted file mode 100644 index 6642a3af2a8342896188779f3b75939d26565cc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1677 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 diff --git a/debug/cesium/Assets/Textures/maki/disability.png b/debug/cesium/Assets/Textures/maki/disability.png deleted file mode 100644 index 1cc355097788c5fe5252fe1958f04d492b68c279..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3437 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 diff --git a/debug/cesium/Assets/Textures/maki/embassy.png b/debug/cesium/Assets/Textures/maki/embassy.png deleted file mode 100644 index 46b7e1e1cd9a0e7a5a4eb7b18fd6b68ccaf59ad2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1680 zcmb7?YgEz)7{>pYre$v45(Uc4dF^PKnP91FX~Gs>7)F6b<}EKI>QXXwG%v$~Fg3F@ zZ`jmK$y*H5jCrZN;2EYS^Va?r;VnQ^YAUnu`?B|(=Y7s|-uKIM&M({F*GF$VY&!q| zdKk19Zqv_yk;;j$w}hKm%KMEm&(aLlSU4-vRYPgmg1(qoU6w0KiwB zUj%s(TOA4jTdgo&$M7`q!u{xzh(O~PcSd~nMNv3)6l`tXZ`Lj~BSh~ylgzMd@2qsL ze@lP7)qnEqPD@1=z4iLGz=~f~^HAmxD0GER8YSUs6c?nwX1TxuXf;Q*Gmh`DuzO=LyXJlkF=;-L^@jzcQHh81tCYiQ>jJ@l`&z=<|5W}-~ zD#3CeJ!;d3!;b_Xyz8i~t*zb#gC*NpTZg;Z*hnt;`3>GUn3|Duvo*n`no&AM)>a+{ zzjiBhDmvusY(x$UTHAeh-N)ZQXCQk6i$<&JIULaHuE$_*;?qu=mHdXXkYMI{H~us{5@4wRYu!&b*HM#Ix0mf zYy~BXUta$9c1uf(j!#HH&}wddV$#~tII&oKZUjL;5Mr!-&fi}qIK|=(CF5|S=?@<+ z=H@k&&X_)!)QbY4euylt84xhd?$h#caalf@mbUS$v8wdap|m_2yop$MS$Ha4HV~I{ zq2qeneJrMg`|x3M-bXXc*%IQ}v#gmN zcVEAL4G|VY09VNL)#9UlcM1wF>ZTJc6}dU0_vh`Z(6Yic}+^v`F7BEDIJ6K2FiIa#7mpNbZUdI-;sQbbp*$bl}C z$;fkabL1b9pn3CHjBCQ-qwcHQQG9{$)RyJ-hc^4Q^W>gOroz7^KiN)byzK4$d{Pi2 zneR#cN@0lPyz{l#8Q91!FE4LasZ<{)B2z*`XV`6{o9uhN>QZ+-$@i1#)0>VC?Y!Ah zL||~9y{Q(7L`fein_IoX2sj*0GQM;>;z?a%W)Vb_s$~oXk+U%_%GK3~?(S|@jf;o9 z{jB!0KZGyNY3*Bq5WrDgdMAn5J$0rY#@#x}lfpqLU!^+E<@5O%!KsjuE}FZBepvKw zsNu(N^gv3+YFx4>6UOSf%__WDLqvhB~Zs^21j3e(u>RB;t^)f%YS*+4+< zwLfDJTsgF3uuSqE3wZ5Gj01ZxATEd-Igq_~w10sNk;Mvfbb@^YFo00n55 zxBM@F{_9y52{c}Y{r;Y0_4bObfcalJvxMh%S1lb(`k=yo zNh2gZJzZ*eg||V)yVE;YfS#V767V|VX4>24%F3Cu*}Z!u?FYTl+9Z9oNo)@Of#E;m z9oBhLu0o;UJ;*JuVTVwMF6;OphQmM1&f3>hSJQ4pACmP_a|~fGF~ijOXwsjNP@{6} zy`8PHhQP-|nK4TL;*@b+fuA=eE1}hn_BQ=5gV6<)ojm@%QVobGO5QH&Z10MBa_8yN U_qHjIzLdmx`+C)Xcm9`u0ez_m1^@s6 diff --git a/debug/cesium/Assets/Textures/maki/emergency-telephone.png b/debug/cesium/Assets/Textures/maki/emergency-telephone.png deleted file mode 100644 index fac62396845e81e45b98752d76b3cd6cc35f1910..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1533 zcmVPx#32;bRa{vGi!vFvd!vV){sAK>D1(HcbK~#9!?OaVr zRY4Sf_CuObN=XDoY5vfUErbXmiolya-m`jXkz&>>7ZSM9+_@;Ql_4m!EdrrcySJ%L zhzk=D7s*?_jU<&I2!bFzdapa=gWL7qnYs7QnYlk_;4CWh&V1jQ?|d`&&ctF8Td`Oy z)8llZP&g99Ca>v$SL%^8hfYQtq5}{9Nh|OT(T*s=fnUo2zZ8{{B(O?<)@9B1NbNGI+)Al9uV-M2_RNi0r;RZ*>mO_!G|P32Y)XMpqZJOr@g(sv&R1LL^7HD zF+M*2%9kXtG~YZJh)xq7rhzgwHTBXd=yuW3(Xq-PA>j+RV+B400j$hVBoeG4X>Dz-ld~{afVv&8 z1o*w+T7kc{wRPKxJCdULZU_h>_(XQ>ezv>2dyb0$k#5H=0UWaP$B&xtIq{$~pSL4H zb2~iXlbD~Me`Gsu2)E;gfS|b@E6ulyp`oGomg6SX7^>j%5)eeU<1{hH#>QUT5g-kG z2aA=!xgFOtUxw_sCBP>Ix8O$exd_mwe!0~@bar-Tp(0@57e#Y%lw_} zuQo5jTEi?mcHmo(P!N&%3kwTotc2 zRG`~&Av=s&UBeG&v$)F(Uy$YXJg2Phmy^fWhY=p&1E~bo`%sze0p|Li13X&$G=PH3D{h3Ebb` zpHX?`i*G&!mqb8|d9ayG<{5Sjz^?fUbF=#vl-z>=>2{pFu#du)MBHlNBO@bkWnFMbIsSh(vKw7ivfvv?Xy6?;5(dE+?T*O%1V+ZA>_ECB&Oo;#W1WC*2bP2u7k8{xA#wuS j&RuJ94)9wLt$*z=x$v=T>eQds00000NkvXXu0mjfj>pns diff --git a/debug/cesium/Assets/Textures/maki/entrance.png b/debug/cesium/Assets/Textures/maki/entrance.png deleted file mode 100644 index b0ba8c5d6ad858d5b79edfe30fb0cefd28ddaf26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1307 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 BqFDd{ diff --git a/debug/cesium/Assets/Textures/maki/ferry.png b/debug/cesium/Assets/Textures/maki/ferry.png deleted file mode 100644 index 58c2f27a8567c693ec875537330915b00cafa33b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2879 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 diff --git a/debug/cesium/Assets/Textures/maki/garden.png b/debug/cesium/Assets/Textures/maki/garden.png deleted file mode 100644 index 265edb8d6751d7cc9a4d15f4b81af52ab10e9163..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2057 zcmV+k2=@1hP)Px#32;bRa{vGi!vFvd!vV){sAK>D2cAhpK~#9!?Ol6J z97P!47VE3NpS8yNjIr@Wv6k9mQz^$C$D89gI1V^SN-#b`fW%fHsSQ3Lxf)4>z#nL0 z|7g<03V)PDG-*V{hz3QXL5QghYKRXaDUm`8&NO%C#GToh-I?8;WxnJK$+7#*%D-QupU}YEBS_d={XbP~u9sFI-(l)S}1oSDOw<{tFsJI(w z7D9I!04EV+7wT>Ub$%RU*DVtGStP2%ZYD?DT{Q7p_{pjOe!%E}MpfhsO8{zBvF z+8DL<2g@$q21&6xK0_t#+T?u>%J0at!aP0jo9Hhn(dcR~{YVLDdv-xV^#}xJqjNK$$xq(37OBI{TLKA=j3KFAd{KbJE)4931JX*Vjg@xau>^YJE zs9vx4ch=zJKtpMMe*OflEk_UlH6tVAFGBDy&=7zcI#z2=PR)Mmf*)t__KQMTXO{1O(g-607-x(KoTGc zkOW8q=m~JSTnmx_3kfJKEgcdW{M_8!GeQ&4)z#G~G64+@4Lu?e;C9+PKy%P<2LkRe zy7Oo!h4UAJfX9UL3xY?4A`*Z)U$(nrR=QfHL!r>8B7qOjA%q%!NW9G)F!n>=rOOq& z3(A{qX=y221n@Cl6&Z>sf_j4NP6E!QMG;9rg>TjHMmTFH;5{DCISseT`xMbcE12Tc zsZ-C|0sNkxo|iP-S9U3)3aq@AZ%#)?N3#{czX626cPLd6T?oR8F6qq7j4vDxf5a2? zl9G~P=-f-_HMdJ~ih#!4M(eLRFfdTv+}wQB@ArQL-b&BYI%WBMzV8nnJlNIO*Y})` zc!e#B(lrr!fVSc03mpW&=$M-&y7WC`yAc8anR_LQk^o776iI+2K#C+l5+FqqAPJBn z2_W7QfQj+$0S)mG?yqD-vz%P(L;`@VtD}iT+@!gRfIdK-tPq#2gf>|c&^tvY0A@|3 z09@;wA(5oOOh(}U?|4to?xPh1M4ii?OuCW=s3XM|_O_wy2fas8$W&#G8sK#cQ zrLduPA^=>w$ISMtRp2_*#S04yIfoA)e$(&wf9-O)7FBXF{BY>dp|^&Ihr>E5bFY;I zpj_&4IyN>IYH4YS6c!eatJLEH{Jp8EsRL&Bq9I@_LxOplgef_6Gui5kmy9aw~_vm#{$u zB<$r$0LkiRettgJ>-GM|)6E@4zz(&G>+9>^VHkDz6U`*Wk^qtyO7O&f#j360aCiVw z&OY3vWJ+*FcX#*81ic}F1py@E{mGLjUob1kLu)y+Q(e&E1?ZZimIZ*PBvR~z86n@NZhxZx@*q8+QN zt9yA80Nvd!imu$GXDimFW^8b9u!?6RDk>^I=0O0Q77< z2P_HT{p2$ndQ=Fw+p56p#>U3CSrE|K+1X@OU^mc*SsV*`P_OK~8-`jPkrFUEIvV0# z$LZ;5Kh?fJ%b{p!XsD8R1J&LWNC+?^C>%z3niALz4Bmt)C=?2vHoJ?H5CFHuElTJC z^)4PRBD+xq>P-tws(E>NKhh8Y773qm&Lwo-=xLu`61=E_X+ueMboV9_0(idVM)jhl zU)y8+r3+m{5sm=P;4fSLkvCA#6&fU57>Gri`n$5jSKs`CN@wfuzy zSOvaO2QFIyd{LXvKho8ZgZ3A(^f)KY0j{%A|V-9$*QWV zei6YhDk>TkCY259C^M!fPMmmAB=94V$g3LQ?@{a~Bwp1V$7xnCSc?Sb5y^^Og(LyT zkt0W1>QkH&Y)2e<)7#toJnJuSz{wSU%Yf2jJ3(=hXf0Jy3NtCv z5(0;pU@$nOGk7FLak7{c3Z*NkP+3btGD(}HnWk(b+n9)b76I>3r2J>aw1H!o?7vSt n(2WvpvYxSn5$I3bwT=G(+JH4uNBw=x00000NkvXXu0mjfmN2@u diff --git a/debug/cesium/Assets/Textures/maki/gift.png b/debug/cesium/Assets/Textures/maki/gift.png deleted file mode 100644 index 866263e16b72f6bf5abdf6ffede21aeddc5a7c79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1606 zcmV-M2D$l(P)Px#32;bRa{vGi!vFvd!vV){sAK>D1=~qPK~#9!?VVpp zB~=)}N3FfGq*A505+iBQUy6np8#EPM#e zSHVXK^g&FBz`!6PF$|FvM35reySeMGtM+|xh0EQ0&dixRbIvz&zkv@$XXg9!JLfxR z&U`atSq8R)gM$b6_xGOwc?F~f1#@*fBw+{DTUtez+9v&Wa5{#9V zmF7ZPKI%bzhsU8EtE;O`km~MY3eSP1m45BS9EkBEbkxHemXYX5ASGO$Mx3#tPCl$R74Gq65 z08EktFf=sug-RZ^xo)^+*P^$#w^O2h;P`D-otTpHooi%d_U*~fmd)lcgkY@f;nYZKqZgq*qfWg7Rp+Eqbot=F@ zp9A&v^?$ex%HrbUyD9*1f492O&V1*bo15z-2LLWaUQ$UJ0|Nu!c%6p4Oh0I!$~n=0 z(>>svYOrw085|vUa$%$c0NR1}pk0!4?g;>#A-NVbJw5$_A8RtEWO;e{8rc<5$#U@R zFa*E3x%n4?k8u(Jpc|gjxgx4l;7U3zxieO7QQ2fUwzjtR&maaLrk!6&{EAzYHfRkG z*bR2Qy}e`L*goZ;<5KzP=;&t-?hBV#)HX2eaZQy8Mg@ZZFy+dKr$Qe56G5mAIu_F4 zmsvsDz~~o368K6h$QzcP2QcvQK%^T%z)SEF9m~S8#5`Lv_mE$P-`{Xi#`t<>pg${- zNAdis!3KF1=r5JPmu6a!i8N7>v7y{x znkqFJ{7Tcg+U_bmw1adeH&PfZj}e(EUDP?fJWpu0a+Q!R=Z!DCO-)UG7>mVj>a5Sy zwF--Vp?`%wLRDz+6OtmTw4V!QrU5uvqW1L(8c`vxu62JZ0PO7XZDu5zZYC0me~J+R z`mOa|K|W#yR=tB6nkBeE&xf2juHgm z&pU))TS?e6KeQ0MKu(Z%e^a5Pn~fqxS{*_ljd#Wdwd_rAPqmX|ITI zS{*SqHukAsAP4~1L;sAvGcE(*0-*|o*9h67@6)!B=c5yV4;n~D#H!uIbN~PV07*qoM6N<$ Ef(ec2SpWb4 diff --git a/debug/cesium/Assets/Textures/maki/golf.png b/debug/cesium/Assets/Textures/maki/golf.png deleted file mode 100644 index 2169d91589d4f1e5de6ef5d7fa32ccec863040dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1999 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 diff --git a/debug/cesium/Assets/Textures/maki/harbor.png b/debug/cesium/Assets/Textures/maki/harbor.png deleted file mode 100644 index 2814f3cd541ec74cc62887ac81597d334a21dd38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2048 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 diff --git a/debug/cesium/Assets/Textures/maki/hospital.png b/debug/cesium/Assets/Textures/maki/hospital.png deleted file mode 100644 index faf294e870656bbc24bb750a80e42df7d219ed7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 909 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qt-49rTNE{-7;x8B~}m@S+rbL`{lrs&1q?MkBN zTW7ektSq@;=KFpPr=rJ&7J-grw*PFcK7J?nCw}welVsVRcTjPKLdsgvRv*jz@)Z(~ z@0uExzn@#VpZ)xm3(xB2pDw)cyf!&f(({@cc8m!}EQ<2}|u0zkTE3>e~)_4q|{pP3Mu#5Na zhids(7k_M;$S~FGsf&683ozJlf)BDWZucH+@-%KZbyee>;i|^_7p|W66m*a|sb^B5 zTH#x6n01u#nSQ-$sJID>!XCDj8|Cth8tj{N5ngwhWmk+nE9l(2oJ~`^)M@>{pp{=HDjtjG;A465{r7pv zxDw7)$4$J;W3q ze{U|@`KNKA>#ZJ(*cGCNGJNxmcDzuM7Sv-=SQ)nZz2v=56MH$Fs~y+9e#f?V!NrU{ zsU832ZgvhHvElQM=5{Y^}n^Nv=&W;imb*EQTTZ$~_tDxaKh$T(-W%sZjlZ_0MmEWR-?@ZrgHPGCobOlv9mtp3=+V``_;2*(F>D zHwiurnmadiKX2vLA1kh_pOC8nidZgP$*sn?M*Ys&Is5f?9OAInl>DcB`ik;Nrw{8b troD7;y82_c*l~G*-Lu&K8|Xg&BYZe;o8YC=yNf{X@O1TaS?83{1OSi{ej)$> diff --git a/debug/cesium/Assets/Textures/maki/ice-cream.png b/debug/cesium/Assets/Textures/maki/ice-cream.png deleted file mode 100644 index 323c964948a2a1fd4cad80d51262d13b60b3b242..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1602 zcmV-I2EF--P)Px#32;bRa{vGi!vFvd!vV){sAK>D1=mSLK~#9!?Okt3 z97h!2R3X&XK$GS}C?rrqghC`FCLte$hM2p0|Ee(;bN1}lsFc{$1O%@IK`5d0OTkuJ zLMs$S2&ErH@N@emfzVQlVkriS(Ao+ng5_Ehuk%_DuHMYt&hE_ao7ow7pyIxH@AsSc zX7|nPtm7bSrBbPm$csBtFH7(C_V$4topp|F{{sCC0i~HpN<_$Yhl%VVKQ|F+6}_Gz z&0tR?fG5r#k_4J6Ib`aHKa3pssz@^h_nEB{=ok8Tsi##Z@ME75HVDo}PZk4GGz7_D8om!ETPOz1Rq#8ag#Kbwf4yW%>Nhoncw2s4QSV zOAjXSkJAiXT3X5l1%6pbpI2)UaAR=rOF^AEhOXnNM}N@Zmqm6I@N{B$(mg>l>{4gv z&tVaePA31TML{bRNf)`$gx1?B&Y~l61z=q@Us8;ZLy;@b>lVQ#=ADCns-->LmVs zh9(U$M*mYR1gJ1c09yBA{wV!}kv! z^hSXI@Dl?8uT<5378Y_*AOQTtK)_3O4hVM+sIvsv+fYluZt3jkc!-FAr#$diS6914 zb+Xos(GUQuQdkHWA0K~@N5DXT|5u_qCnhEemhjxcFA>mb%!3Y1azaMbY@X>z~ zH32*C@R}R}dmQY|PQKw2aKumojySqBngdXuff_t^VbzfwofVIw!&9TwZ(T^~J5B3bB<|^=IGV#?(f0`ANn_b^z)txyzEex zDbT-h_x>CL4q{6~jP!HRF}2Ygez#EgI1KQi-^iq&TFaG~wlEq^0BcM8Yw`G>L4ptc zq1$R6W)$3=nHda{0O&7rqrV~wPKBL@7^DAGR0yE%9eSgu=Ux!tLqFQ?`B9mMR37f? z=1^8AN)0|K5>^^w-2EJIqSk0Y6cj%b6ryUq|W zfc=cuTZ=Nl2R&%ta>ty8W+Z+5VTSP$28;Ut2{@}N4KYUlS&O=h0$n1Jc={uYa_k0|Kt>-*Xb`0#&r^!q0u;WY}hIbsYs0gYb1 z%*y!!YNJI}oCIo_I-k!|*9ze8w(KnTnV^AHN*Ea#`J@tj_?>geQiDa)dla<#JmaU; zqNu1yXUqv#rjlS$lTSjsOYqw*S|Lo#I!?I%09b?*A1i|?9{>OV07*qoM6N<$f_oR< AT>t<8 diff --git a/debug/cesium/Assets/Textures/maki/industrial.png b/debug/cesium/Assets/Textures/maki/industrial.png deleted file mode 100644 index 9b3b525db81c45627bcd6719793834151e035a1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1092 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qt-49qt@T^vIyZoQrBogwVV&~{sE>%If*FGAmV zuD;UEK3~*xk>@Ovi_WtaY?>(3n!xAe@3odw%_-A0bwa;N5ABe9Qru^y zM)BLtYp!NF?)_jMDDqTx9c%2XIyE)5eH&O-I5(-V^q!ss zjf(O$3}Mrig=RR;-1R?no45nt3mx4ly}i8+CnofrxO1E@e&MG?77}j6^?d(=NP5i*GTW%{usx+iTyc^#9+I9D= z;SMK@OH(^THAGfP@OrN{JegvoyLn%((t@dpn%S0n7RyXLHsMojTJ7zShOXJ7`(}q7 z{Pd~lMoz%m-j&y1+s*tM>Co_RFaM{u?r#e-On!xhMQ9yOGF04br_HGllf_@}a*VM_ zx5n=N_10F_)}rHi=AUOLZP_Ywz}-ON&x*%oiSRf*vs42%pwSqI`J6&&0f zmj87vEmmYvo4<7FQtO!AOFQ2D=lKyhfAIp<1O{oduWSotHwUe}Qrx1}fAr|lYA2?U zPe1<%x1`UzdiAR3+#dIx+n3FsJ-gb*+S;1;hlU7Oe@of<(D_N~h2aqgo~^ic?P$25 zkH3ZM?LEIum|kfeub4mKiDN|2!OhPD1FTNPAI^7;m+tLX0OouKPgg&ebxsLQ0D`K| Ai2wiq diff --git a/debug/cesium/Assets/Textures/maki/land-use.png b/debug/cesium/Assets/Textures/maki/land-use.png deleted file mode 100644 index f86b21bcd08af8c9ba96eda25409fe0357bd6245..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1773 zcmVPx#32;bRa{vGi!vFvd!vV){sAK>D27*aMK~#9!?VVjr z9Yqv?(Q345YOy~?s|hBJ+L&OgR;#Hsid=r~DuML!FW^r|6o|%zAP;CTQi7ByQt|0FB$Y?v0}1+oxh*&+xi`68c4lXH=XZB*a$aEX-E+=2J9FmD z%-NhAPM_V~-NQ&uQp!U)A^RYk9uaCM`thfbyvayP_V)G;=;m~!^Jxz@9%AMAqYNE? zhaiJq(Wu2g=fl1uL2vpDFXv~ACIH0RhQ6F9!udKtK>EET)GqYs+)et??d|RIWHMQ^ zva-@ZBWr7G^_!cUmt2&6UE#jJ(5^4oWVdr?XQzw_0GyMSmX_WrEG*m$A`J}<^MpP# zSJ5XRX4loStWCRZ03k2{Xo*hF86O}2G^q145{t!lbn1$P0YG0kfpZKi=Vzp@uI?J< zUhyac5aRrdtgf!Ujk)Kk$N|7Pzp}FOIxheqgz?}mh7Pcd0MG>mPCwq>-aanU`Dxh=(iNfWE{L4D2L^x(IboJ7!TFicbP;2)<t(nZvIiU-c$h4A79{==V6$tNYO%o?#X`5`uci}482_es1S0}%IN6m=NMft zx;@QBMMWtk0T7&jTQvYKp=mD3CRzFt0Vo!7(#kEju1E_2xOH6!&lGlkX8qtQDKymu zfEN9}7sJwWRCxfnFs-VpYE>5igz>;q9)MF;aCv#TNhjy0L(~6g(*&wL0r`IO9S{o2 zjCTBrHe)~t0F>$izzQP(-R1%DkO4TX6@aWAy_V(x&b!U-l?C8+DNiPVAe#vc00Y1P zFaQhy1Hb?<01N;FzyL4+3;+XwYB%u_kz4y%9d1)e=RiBW5rBIXQv71%0Hlp6RY7Su zrRkyJ+^aAEOW1*AhR#3kL+2;7Z~Zod@@2G^AoU~C$B}>Q8}?N|oSvTkNcHXLtmA#J zvazvI#iaNk`qDXvqe|b02>{Od6%`dXIGtNNZUDH%`;(KCpYS}VKpiNA830tT<$Z3T zv9a;zK!b9~0SGyY3v(sRy$T`=fKc`855c>-k8uN#NF@HWe|KhP=0jQqc>%yxdz_!2 ze_uw49pZQpHUPMIU&P#|zP|n!&*MP|0Z6U-1-11sI$Q`n09?q4X0E@hT4EDEIdE4vKn8sTOC#3c%@IFFex`6B831z8Xqc0XTi9udnY*2{YjHkplpa zzKmpCe}Dgg=f)BQKyh*LzW^ayaOp(b0LHn-n=;*j2F%NVuG7B=e5LA?|XmmrK>nhB=v5VG01<>$Jl?^3dP!S0))J`+NYavNo6};9wAC3;+Yb z05AYl0x&o@*bA>2cayfZwkfBVz|nlyi--U~t4lJOtYHcOMrs{S$TJ4Ov?N22(mGm{ z`f@P%@qqR|rd0U^^drwkrS-FJbl4fLkFMyfCas@Y5huTCi!6E6%l-ZbAf3MZbLKKk P00000NkvXXu0mjfJQXlO diff --git a/debug/cesium/Assets/Textures/maki/laundry.png b/debug/cesium/Assets/Textures/maki/laundry.png deleted file mode 100644 index 53fd20de4216737841f12430ee9fb6d7d338b0be..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2407 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 diff --git a/debug/cesium/Assets/Textures/maki/lighthouse.png b/debug/cesium/Assets/Textures/maki/lighthouse.png deleted file mode 100644 index a78e21a5b5a78a08a78d660a0129a7e0eaffbda5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1944 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 diff --git a/debug/cesium/Assets/Textures/maki/london-underground.png b/debug/cesium/Assets/Textures/maki/london-underground.png deleted file mode 100644 index 94972f7dd657dc83ea14b64875909009c651aedf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2979 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 diff --git a/debug/cesium/Assets/Textures/maki/marker.png b/debug/cesium/Assets/Textures/maki/marker.png deleted file mode 100644 index 825eeca6997b7946c5308d0208d9a39fbcf2bb77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2448 zcmV;B32*j^P)Px#32;bRa{vGi!vFvd!vV){sAK>D2_;EHK~#9!?Oh8@ z)>Rb$i<*zrOr;c4QO$ z(cRrWg2?!;uCB+3%qQ|J5oaQ6iEIENf4`o5t|qdQ$U-7cL?)6yA1T;}O`wk?06tD+ zDfzyUe7X_YVuR?&zh6aUHj%M*Wcy#~lL2%h1{(plCT6;GX4rQI13Wb^>xKbzp1eqY zcOH>Zng*W$;YjWGpa5)dZ}+@;^QQOp>(_m+UAwjozPGitZSCyrbRW$BLw?(pe9k4G z4q99FW2wXJ*S2?bbaHc+fb-hcz-!Yrb zH$6Q)8$&}wE92tg-YqF9No;9p@fn~pT!>83%Br8$pN$95j~zRfuw%!L3Ig`81mt@} zx(6$uq`<(yOIcZ2hXyLWFfIBzQ^X+A`0N?!TX>1wigz~<&=zwq$zPi(dC zLnYqc-rtv%l|@_G4bLc23G^gu#vbbA$&;^;RsXY;z_Vs4EiEnAN*JpwC6LKZ0JP8R2`HJHcR?EsMlL%gV~iRGQQ6Pr|~&KINnYQ@FHNysi(C8h1RSp9qU z?0HXx;NKS?AD;%ORmfr&&~!r|@ayX8f=njUpK4VA?1J3f+;l8gB!&4|sioE5YZrWn zB<=K~R?=w7!ORxQY5A~Q<4rM)+hMrtA1gs4tB%LgV0>)!GAGIC4`jgn$ z*bfjhG*_%rW1k;ROiV1&68Io~etxxx0+xxPfT!3W4i69iSZfM^{1BU}2AZWL4%pk< z`-;{S045hQz6=%yF?N76693=OpaQyq-N7zKF%+VEWUpq z1!QMuXJ}0UK&?ko5sSsx0i#$F)`bff!eL8lNdX5B9?VCwq0_~x2drm#KwGzN{ZUKy zzp}D25-HA)6RRS&Sc~=GUbkwlAm(R-XnaxHQlQTSDk>_Xv{DmDNJw}aQNTj6IYFCQ zGvw*%*`xsl+(XO{*#Aewrlma1PU66U18=Hb0sj8}HOT7UBn2_c!VEPuGz1t7hC6Cj z0Ed{hKoV*q)@TDL8)^lA%a$$ISvCaaM~xGt7#KMh8f&Q48OO)RzatxRF5Lwqv0Lzg zfq@s*20j#>;Bq;lfN4_S5m>}d>coi?acZj(z%5U#v4`Y$#c1yzBO8*EXrWp~tN%7I zzYzt%_gkirgLvga0Y zkt3Oi?O!k3)-|**oGUx&ef#z)j=byV=l3mAa)g|}qaf!&COC&x0Nfu?Qo#oN7N?7r zvmp0DQ`Ii)c=;%{es~TuNC@5jj!o8akuQ5S?i>9U~f5mppvPNSEhYWGG z0`CEDR$QNH8kSmg$W2dA&yj1kG&nf8iqp8yNl@Z|9&1=zVmaoCj7H-vPBT|$L8*f} zohzteU?*fSMF9Z; zmt>G^`=h$LI+SzbRmXb;Xk(`r*oTA%hg;`TMm^ct*{>lh-=w+@>a?M&g(-qtCQ_NA zu&}VtI1Tyc32GelHB=V;<;Vf;a|sv@zi{&WYZToveE?C>8jMdQa)-sc*bPTjL_Gu8 z1!#}af`Woq#mW^$MMa(FL_M;z{P1gJhi zOR(X5Yeso_`O8=nRw82rEe)D0(y?Fw^Vnc8+#ZgQGb1A-o74MqhM>hkTi;lutq&bK z^!iYTrVw&+5^YNbEf0+5KGem0cr6x2E2PXeZNFEN@=Gn=BMFXjC@y?Jd6CoQ&?sr! zVHt*|283xH4UY3c>^{5#QPUykAe7*Q0R@iJR(}v08u}&DYFPTN=Q38pQjR}3X9KC~ zDu+%EoX*j9wE6zP1@i~w05#yYXe5knKXc|x43^~-{W6_G3phsXd@#Vq;JkPrWR4x- zfhl1oc0S0>%}s+unl%ML_{vE!+wJ}!m9PW@GA1VGBWv%4GZ8=cJe?*b%i&3FEPRQB6%v2sBRZeS1AGFE5Rg=W((l`Cz8V5%UM|&iI~g zjo1|;$=+37= diff --git a/debug/cesium/Assets/Textures/maki/minefield.png b/debug/cesium/Assets/Textures/maki/minefield.png deleted file mode 100644 index 60e174abbcb228c0a069449a161e8d777fc7621e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1907 zcmV-(2aNcMP)Px#32;bRa{vGi!vFvd!vV){sAK>D2M9?-K~#9!?Oj_; zV?`J)yRe|^eb)q|LR{Urn%##@$ZpiQ>jes>7bpS+DHo$4ay10CMj~Xn2?_+cB$bqy z00KUUgr`Ok#gK>~F@^^*E2cqFOp!=LK@^-ZttrQr&YW{*=CqwZ`5s8yGc(^e^Us-o z{uxv%Zrr$W+dBbp5#WB#23_J~0d!t)iL*o4_V@Q=e2~vYpw#2E(r#ke0gfSuwjQgA=M1Sl#h8s{uha6iCSy$JvjXhZ%8T*LrGD4;GkOX>Y? z?Ck8EQ$Sn7UA!Li^@S)Ofvr;vdw(Jd`Kzm|>4yoBo0~h$uni}C@OskoOOgH>sbu$~ z*Xvgf6TmeYhcl?Z+E3kMu^I})0ThR9v>fiojp^y>B#Ok}f?9W60jP}z)Vd4|47`9M z0GOnIpj7Wi@M76I(!%lpjNB@KoP*@h9U^o_j=rpj6DJp5)!rrLTF)_n04e6 z6$=XsPZAeuRc5XneM|pYquowZr$o-Rcug}iT{>;Zq z!FAXTH=E5L`)XWcW8>>mMgv?dk?j2*ZYY+9ulKh?7pfa4X46B6#Kgqk1iwkf=wX*= z2vAZ|@-9Z59v9i`KR>JvrKP1KLX{)rYsd%7#KoUQXjS7$!>z=LXL= zCDd|LQ&Yc{Ljc!X$Wf2-9}`1940Yp{3j~W}vIv4`YHDf~?l-{LI8FEC#@yUof>>X_ zwY8N(Wc~pU*Pv8jW@hFou@&&Liblf7$jI|@3IOLaG4)7KPhS*UrbeUr)t>;j(dv!; z{rxZDG#t3G9XSPXtqG9JUt3#yLTY*Q^Yccgu^5y$B^vI>4X4wYhEg_|v_F)iJXym5 zFe)k+5v{GQO^20bv)L>p1n@Tspg?k#g(|>(a;%DRk(89QNwfF+6CfuiXGYF)tXAtQ zsIiYQmTqBaXsC*&06jfDuafLo9zsXT9+i~KH+p$f`fvBGqN3s*k^;c8Jc5m%k}3x` z^m-8^_CbuCuCA^+lFxU;;c#SG7z+xv{aaa!$6_fZxwj1&HNtNIV7y z2XhsjC>89GC3O=cbFP<@egN_u76;^>7n}VR%4lwGevNv(i!7IK!CedN;RB?8Y=qw`d&7h&7T+y28T|k`!P8=*$EFhNKFC;&sm2DG~i`V z@W2JUao5X@FuriB63M?&3ehmP2oSQSv>h#&(d?tn7nDSPlo-;7hli^IDack?Svg4a z&Lm=Mf~u;jw*xua30&4!Ebr12l7E&})R8rydjg|BK45x(FvkAt>gqZJLV#f2fMIq` zzSN7gg9RxmDGzf27$PexD^Bq)2qvip@dkW2pM)6!o{?j{2#dxML8H<95-fS2t~Q-l z!dd`phYaSBVqE&9H2h_^+n-g;LQLuoS#@=_Ef9!@DVOlF4#8ePgkl81IbH7yQ&UsV z6c-o2rv$=HCes(Aqob9+BBYA_Pkkg}|L}@5cxeW_t_+IQ-Q8VVUtixL7A-9;&Ew9AMBi4-Fgts`+?w%nuPB#K))t-Ei)wRtU}p?LUTg tZQz_%7~$t&mWPTPH*VaxapM*m_74Whh|T#d9P0o8002ovPDHLkV1hw3Z7=`; diff --git a/debug/cesium/Assets/Textures/maki/mobilephone.png b/debug/cesium/Assets/Textures/maki/mobilephone.png deleted file mode 100644 index a40ef9c1f6a026e82e340c37c3dcb7667399555e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1474 zcmZWoXHXMp5dDH8k)o8LoeBXYaMCWK5I~fYUJW_M?Qy!Uoz-bPznT@(@gO%MPeVva%C@cQ+= zgdXD6iS!^OuN`zXwloHyB2kFz#Lt@{B%6ySpzQte8QyT%2V+kH;7IdcLfXBb5&_`1 zGe;T!b9;nCyN4m#9&dM*m$WcWbQq~o4#W=$$2^A(J-VURl|l1ulWl)h6_eO!(}zN1 ziarG{C(0G9t4bzgl zR~Zc^W~LmGQe$enunc$G)437`t4EO1IcgzmA!kAy4j){ABiDB!*`iF&{5<(R+b?+D z2ic%}r>d&z!YqdqY{u7w2rn1WytUIqdVJG8IC#5sX=%x$Ff^~ft*s5W^fxNk_dqu5 zT&QV%es6EDJv?P5IdWsSgHXXeZ(xuGH$nmx-QD%t2f9@Z2E*|^H(+IL%}xkRjDMem zu)4E`2L@Kd#Y1y)a`YjMN`(Ric}j&0%&SkddWX`)ysc(nBtnRuaMI5`aRouS_~TS% zD-`V9s(0i}dKY2ksQO_tpm7=LmX--&Y1l4xc6MH(QmNjjAgZdWGR0+O3$ZnvL+1VN0GkYaHBg5Qva#qU7)YKIJax3VNfI#k( zy7d+4b>`fPi`lWpt}d)1)&4UiPpgR@6~$lVL)cQyX9TLX)}^AgFWJ~M@P&q`xNxG4 z+8QMGHu--nL&uXpOj+O#0J`Q(IwwI+UOq%|1V~9srwqN0)P$s_rq&$K#xMypxbPlKjK4fHBV)r2hZ|7ws~qKMPmC@vzY@wP>SXPX zJ5R4&pb}CKP4x(xs6qFufF^;^=Y!3#j^dJ%SrJHM6iW|(dG9s$DRBZEYZf?4>Pg3spyKlFCTdEhwdMZA8 z%~xj=$8^~eV_Kgvh3r>_DN0mn4)*uInG9qYuv=>0NaC)nMd{~6zssI<&bFG;#Ukcg zj}n_YBKKghXJ9N=0Zdhcanw_(xJSx8$(1~V2a}am;Bdj0bq@-WeuHCUV=!?0asc29 zYxJ7%>cTaPKY&)dQ0(o8WusXNR`H;QU)ONVdN@BnKZeC(9eswI`{2o?YKT1vtRP2N z9(U35wMh4dJGfdqD?oK)@gqO)RjV?stYe9*Vvd85h)f~dAAx#ML>@9iO3-#$$~VY1 zz8f{-{n6&|g4Wv$uRoOAM?9%wtRrdd3N?Lf+{UslWx>Dh@|)D2z0=LnR;V(Q>*46G==`!I=i?(ehDRa~;!Aa6ClAGk5)eKM* zw?$cM&LnCc!!XokmT3f%i%^`Ih1tNVsez9Eh@Epk_j5i!+;i^v+|Rk^q9Q2>xFZ|@ z00cFR7-QlCUjSQU>VMZ12ABvuLZA@Agu<=7uHH0l>QF z3m|tQ- z=a88;D$cwbdj7gS3O5&(0OKxU$yf;txuA)KRT06e!hO z6%`ewUh6NkO*`LHLkb{c$hv0>S?TF-YBZ}(zYWzOUT7nR$VfwH zXXm5-?&`}t-a?YU?e!^eSBs_Q_Ig~pJqo21&a0glXOD7fYnSko-JPi3j-ZXQg-{xe zrnegp>IUH;F$Ps)7?X8zOBG5bFI$)-IR;I=PckYM3PvRM;5wclDSo%#fwKQdbqf^8)g^`#>gp1a0G!M zrAZds$Cqt%&{rx|>}e9dsHh0{#c79_V#VavvVT5JT0nV`s+CKMtRwdn+oMKQvOe?8 zJq5?VT~VRTPr~D-^^-TDoCaOVe9BaHtgDA8Z?Y8n=79ilqSAm}dFc&{;@Y%)WBBUS z&9$gMqT^FjnJze-5vkJB!ouENvc+IlA0>iqH?BURA2Nj}(|hYyi8Szjvk&FpyZcV? z^qB5Fl{Rl)O75urhKUpk)8;N&R^XW?W*RKokeVUQamy_H>;vz6`&j&sda+n+>+xOl z`$EqxTYi6Q(ZqxD9cN6zP5~KH*KgbimeGpm0?$ogQUzwu>o4>91}7*MfMOq_&2{K; zrBYeZ($ezz@mO49VzqXs*}}2K(90o@nkTJbYogk1n;VL2Uu+lzf|e2;rl$371A#JC kPMO<>jKk$Y8}hn<{9 diff --git a/debug/cesium/Assets/Textures/maki/museum.png b/debug/cesium/Assets/Textures/maki/museum.png deleted file mode 100644 index 23c179003a5028a6345a3240900e1837ef04b8ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2578 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 diff --git a/debug/cesium/Assets/Textures/maki/music.png b/debug/cesium/Assets/Textures/maki/music.png deleted file mode 100644 index dbef56f228820e5b9270f81cba7fb9eac3fbe0e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1371 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�a=nmM0A^3^Z z)RF~IJYqoIwIX=#LX83pRS^alWd{7jiJS@!D1Iix#UDC!Xfa$omD?&`O4LlAJh@sU z2LQ=~FDrOM^%pK&NF~~N$jI5>OZ*^cS``HxJ$iJZH#d?S;+)RVguCAV@)sKRLf^R4o z_WjDr$~59o*1-q^JRx=#^sEYIQUk|bKyGesu~DaJtviSX3lk31l zTM4XuK_%4t^y$;-SoSJ=hPOdapFaJUNP9)$56oELu?{QZ&fK|k%g|R978OJxv7Zdk z(*Pc&hPkUK9rMX%{JVP0cpUo5%E}f{61$CMmw2!OKrk;6wF71~7u~7(Jj# zMnIDj{diIj@5cjvIEiMY;@=0ZBaqhLE6KBG&(2CuPyaF7d+r$7XQ$Ko2H_2j@v8WFVY;t%}v5gP;zYlPw%ZlBN? zKs-^)t$*_@6&@ZRCS!!x_pb#PTWR_3f5NK7gF&v`waPzq0%M}#gSLKZtZiwD8hQQ$q zr(vB8;nG;ekNRSOzW&D5Q%8RsbN~YqiU*wZ@uyf43;_;{s#_-t_BMV{^y?)LjfWuy z`r`eJBBxrGg&=t`e;xH7d(%}xG_XEsSeP{u! zB5;;s9jT|JxZ(|~%frj4^%M)qQi8)K3QYOHSv64S7Nz%Ts2A=)yDGAbuer%B3B~s| zvo0Hd$E=5pA;8*lx?CEXaG~V$i+%ik$I)W7E6}d88BFR2F_bd}mqj2W82KI?UorroF6G0*pgbcW;KkBt$NQ>?ABNFV7;{c}xa= zJl=UhfUFMLj>!4yY2{an_=@O8z4WB&1p>B|->32N&dckvtffY_W0;+uhiV2*9xSlz zbtPhq2yQ6KD-3yg=cPe1Sm}4c^h6+)U8xWQ+o@7daFGP`WOuh30UPBgs zK=oR_s)%p&O0ldrbmYj9T&eeIDEI-rD*GXgN+-5|shX++sqz33XbmYCqHew> zPMr9rw8c#vB4}ujCN}ZSymMEL~Nx9^d0iwjPL)nv`#(ikeyvazNjZ{JyDcYU- zNHk%9R`DNMDntsue^+tVTLm6hv&cJ^j2&{x8X%n51HS7eo~JP}G4an-xH-6_kRba} z`avub=g1ngXm~KH#N>>S3O{itV1S5%|BE^hNasOT3vS1>DqLB*wx;i^ptBZ7gcCBH z5aDm7_~1m5+4g#rVc(6g@(;!U!It^XZT__T!#W nKb|$J6_14T!!YcLT9fntSflJP1jA9f00000NkvXXu0mjf3%pY& diff --git a/debug/cesium/Assets/Textures/maki/park.png b/debug/cesium/Assets/Textures/maki/park.png deleted file mode 100644 index 741110e37e065804f2460167763c03760291687c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2059 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 W83OF7@gwd40000!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qt-49sslT^vIyZoQp*He1+HrY(Ewwulw-x*bXt z9}+TOuho#t`Fmnk&f-iT?oP(rBDb0=M59~;PC71OuYR%cNc8^}E=!F?;*R_~GuCn_ zR(uKId8--ZIj2#l?dHt8H{Y0?eYelPfZ`>n z$y=k|N@Q%|tI|K2>$u3pOypba`+qauKk@6=FXel-DjYxV|IYp``=(8Sfe8~evF(d4N&mEf<%;{MzTZ+d zKO5$T9q!9xk5AdWY15}OX(u*a?%x}?S-PypMd@i6#{>z@#XH|kkF!_!yyeiFH*a=_ z9bA6V*UB8XROw4xd(WJQ}lR0mp*fv7vi-ek3olpEYNWj_E$lPrEV-7aEDNFqXtMX1toR z?)84@+a61U=Ig4=5&TxSdvzE$r=vi^t$n+8{n|3~_WgBjY_4H{bsC;DdButR3)uWU z$IQ%3u1IR{t768-b7ptHpS^eQ!MRFXHf;D1wd|me+UIHJ?@v8vQoE6RG2_d0pX%AO zXJ^i1xTn(TZ^WxM`DD|Xi}%u*d=mNhEV^LJ&Emj7CDibrWyZ6Tr$sxD-^}^8H1^uH zYx6!_>rdD|)obYzpX#?_7k^2-*(Sau<<{f1{_1;IEo|2O(X4el`*2Ly&3T(rx!$N5 z{Z>hwzCT|_#9-BmgA=Q&YwJW3*8E)jp}g<6^!09uqMJ81beERwVc6dtdFRQp(`NqV j3xGL}tJP}9FZSpA`Bn$LE&L2D3>Z9J{an^LB{Ts5?4$8s diff --git a/debug/cesium/Assets/Textures/maki/playground.png b/debug/cesium/Assets/Textures/maki/playground.png deleted file mode 100644 index 5270d3c424195b82c728422293fc4589edfebe11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3856 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 UK|+Dz9{>OV07*qoM6N<$g531-egFUf diff --git a/debug/cesium/Assets/Textures/maki/polling-place.png b/debug/cesium/Assets/Textures/maki/polling-place.png deleted file mode 100644 index b2d02a9041f5e01f43c9b4f73359efcfd8e51ad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1772 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 diff --git a/debug/cesium/Assets/Textures/maki/prison.png b/debug/cesium/Assets/Textures/maki/prison.png deleted file mode 100644 index 355cba44adc86fa9820f59fe440e1c0d99d05702..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1371 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 X_$`j+;@B!`00000NkvXXu0mjfxTOP= diff --git a/debug/cesium/Assets/Textures/maki/rail-underground.png b/debug/cesium/Assets/Textures/maki/rail-underground.png deleted file mode 100644 index 42cfeb7e18d5bfa514901f2417063be45cb6f3f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1996 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 D-P^wD diff --git a/debug/cesium/Assets/Textures/maki/religious-christian.png b/debug/cesium/Assets/Textures/maki/religious-christian.png deleted file mode 100644 index 201bc81ca35ce5287e40f87e5974a3fef1f77a97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 948 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qt-49uRME{-7;x8B}8pMAMN;`m3asSAUT_y(vM z2^{&Eyx@UL!R)-hFIR0{)Wl&`y&scd+Q0UIB6ZRU8 zzj9mtFF(Ag=dns=@srhocQo#JEftE4kKey{+qSawNIC#1?NJiNBJ-a$TQ zVL*id58LUqL)UjLJHWH8>9We5DsG8u?90FX6g%|)?!}BRiy04y3gzu(?RnKang7oD zFvcrk6HcZ)+LanB{2+G89hroh;*3`U!Ll!JFs#tm(Xlc9u|Gjy)BHYb>|L2#r%s)+ zEiFlAPsq!AxAb7%ivB5#3=K>S48TO7!N9P90mwPH_j48H9U{8zXA(0e0>tIl~0b4ow^mP$5U|0?gZ z>gucBq>UB#SDs7T-2awoNzh7jzje_oLv}57FJMk6`pms<-MV{Qh0m3}xOwwtI4~_? z0|(65W?Y!Rf4<-H`PNrIsm0HpE4}Q!i_*t)CreL1E$X*oESM*sA{DQ8uy?Z<-^!V4 z3=-R{Co^pAPGtD-UgU;h`1&i0mi^D3&wly8VZ*HAXTiqS)GXV=XZCH$ zVTQlCG1ud!GNvCZ%u>SU1RP=xj0_CG>>$Fx5Wv8I;6PMg*l4tC{)bDKE?qu)^yrkU zVcVUa*B!dHy`h*dF6OZQ>HD6i&Ten0V`uc6xWTezGGC0yE2G8tr49wY6^o4Cx4!#J fXJ5?u<1T-hk`4c;O8@(n2r|{v)z4*}Q$iB}k9V4L diff --git a/debug/cesium/Assets/Textures/maki/religious-jewish.png b/debug/cesium/Assets/Textures/maki/religious-jewish.png deleted file mode 100644 index e3c75f6b3087ab511b5d5b1f75c391633b7d5f2b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2384 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%0AZtWr z)nphO^i;rNm_;QAB4Q9izzuop)~%aw^1c~FRqKY$jd>QGwmN}?cF~({_3G6N;L!rF z$qVT|3nYJl03j4A@Ibg2I)J-o+&r;T(e*SvTr5SZ8f+Ndunm(IZ2;hv0yLbPo4XRX z8{yV%z{AlF1{REwSW$$oTRPGiJ=6=qZ{dq_I+Uz%sG8W`gtZtfL@AySX`;FYR}&@j zwvjc%-mG-Wn?@RtBhxzB-Hy@=XxoDODivHMk8(lE^HgD7o}29uz$r=Km>=ME8gi)O jv&G(;DS1ksr~3Inte7zh<8AW#00000NkvXXu0mjf$I5Zq diff --git a/debug/cesium/Assets/Textures/maki/restaurant.png b/debug/cesium/Assets/Textures/maki/restaurant.png deleted file mode 100644 index 816282a6e07e44e9e667a42d5c4e8759b0438144..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2499 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 diff --git a/debug/cesium/Assets/Textures/maki/school.png b/debug/cesium/Assets/Textures/maki/school.png deleted file mode 100644 index fb20bf4e24eb49d5b4acfae16c143e714274f338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3838 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 Af&c&j diff --git a/debug/cesium/Assets/Textures/maki/scooter.png b/debug/cesium/Assets/Textures/maki/scooter.png deleted file mode 100644 index 41f74164946dfdadec10b1851bd68a6a2cc58b3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2942 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 diff --git a/debug/cesium/Assets/Textures/maki/shop.png b/debug/cesium/Assets/Textures/maki/shop.png deleted file mode 100644 index 11a6b755a2b887a911ba0833071d857352fd307a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1544 zcmV+j2KV`iP)Px#32;bRa{vGi!vFvd!vV){sAK>D1)WJmK~#9!?VVd_ zV?`LptLuucyC}QL>WX&+7jLY)EGsK6?j~)LUQN;~y`+-XqD$2h@u9JW7Ao~Yi(>7I z#rC1JFV)s66s>}_R9tI)s6`(X!5WBEBE@Rlu8C)q#qH!f$;p{HC+Ru=!2d1zCiDNz zne)w@nK=aodHzWx68jY$63~GHe6)R%$>bG^VW$+87$v0)hoURtc4|xa7->8uxc*HY!$ES8JD+mKyYGWo4x<7K=Tu0Yb5z%)dLG z8I_flUppL*q->RymHn6j!g0G~I-~(ZLqlOBjOP^&hX>O@*k|?DPgcCOwROr2^DnBZ zs_HA-Wk+gVk6A6BS6f@#J1P(!vQ6uc$Kz$`Ome&3zZDl3NA*hieJox4wY9ZMTU-T7 z-@litXklUDpOi77Q0Oh0sb+tF|4S+m5-PtrXtmbw7$oE-VN|iS@ zHujw5uL7!qN*D19Z-&?F{m#fiS0E7hh=6dxmH?>MXvWA_Yq?6dd6`xE|J{NBoC4BR zZZsP85dijB_6EGXyj*WaS3t${cs%QT*)uaUPZ8feWR>pcF1~W(>vDp zV1q;AKOEi(E&N0_b1}oi!!Piacez}@o4FD~8FMTV4`|-aGS10d8-GS;<-g=B9}EUR zFcW~vQ@DiActv?}V-=Z=oSU0#F?&6b?Ach;W>532;`#JH%($sK03fa0Mw-7T&9ajB za08m{<^MGss$M`}91_pWoz>y3D0v{T_+@0!v>gwt~2Y`R|x8XNp^#9psLjV8( z000000001xBLLDy!x#l;Ry-armA$6vQUJH|!6T7~561s5wgZO%a7-ByM_JLpvqVR;!f181w6wfW0C-d{fRuxlnwpwEhSBP(sHpf}+KreB zq*%61U88vyhv5{dYQx2-Bax(3@)^=Wo?_DQ1g9?13z zxRDRShS@MUvjztTUnBtBpY0WJgb&i!*Y`3E&a7ZCI70v^6h3FIp`qbZ7@S!ikLOq6 zOh{!x?s*t&QYwlJ2mk;800000G95PzX+OkC2mpJvER5AI>ZL&0n13^|FW3)bwTqq1 zD+1tf7Ow(?2sJl1&*=t0%>%8kuX|yv*n}Lipq-wE&d<+30dq5JWMt%d830aFLD(th zFj-yf-3Thn6J1gsNnUz2G&VMV!cI=KyV%yG$;rvH(vP-Resp~4N9 diff --git a/debug/cesium/Assets/Textures/maki/skiing.png b/debug/cesium/Assets/Textures/maki/skiing.png deleted file mode 100644 index 4fc11e2e5edaede5a1efa409aca19b46619e7149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3345 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 bNwxn1+}=3eX&$w^00000NkvXXu0mjfOz$Od diff --git a/debug/cesium/Assets/Textures/maki/slaughterhouse.png b/debug/cesium/Assets/Textures/maki/slaughterhouse.png deleted file mode 100644 index 9b094cabd1d164d2d71bd420993478ed4a355baf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2270 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 diff --git a/debug/cesium/Assets/Textures/maki/soccer.png b/debug/cesium/Assets/Textures/maki/soccer.png deleted file mode 100644 index 2385daf916c328a4581974f3793f9d0d48a617d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2420 zcmV-)35)iLP)Px#32;bRa{vGi!vFvd!vV){sAK>D2?&^7?e%~kc;{Gdd8C^1}%wz~oOkLjx< z+RKUQO0-*AY0H)x<98U$bS3g|b-Dg5DU+tAru@gp$AgB4hr_O3y&84p%9WVG!NJIp zk&#e%KRrF|M*#>=SDW!W^)dk%Sz20J=IiS_;^pNvhfBf1!CzHXRlR}(gfw9uclH^- zUeAClD=Uj^Hro#*4A-K-z`$?LpFf|j6Nr1Aan@T=XS$D%&-W~uu0;O+{?~PY;N>ig z-+(e85DP{yU4dpnpCE#0fhI$uqoaE}Iy%z& z`}P z(9)_I2L{tP;f{`uhV0+J|5uX!96EHUK?8*4JjKo$rH;UC!5w5kK)`iMCt1~#H11i$ zY&PFCd?iR9S*bQSoPlL$XV)8H`$SPqb~}0pQ&Lh=E`kv*K0dxnZ{H08 zftJ_-c`TYG6vp7~?L9*Y1RD$HTWN?L*s%y|ivE|*o;{mO352aQnZJp2=I`6L?+=j~ zFEg%L3OZpGQ@M}I{HUm?Pn?DMcapSQ`jK>ZL}T{b6i&B4qjWAaGqc$lnZH0`VPT(> zoD+zws8R!u$u-*4)bs*Mr{GlT%*b&rf#RGtXf`V$wyP;WvmA4xi07=&UrS^e}ii%>Afn2e<4I&NPT+FYkO`_t3YThtmpaNxj) z&LDnB0f>%{?j!lOLM-ZbO#pc8EJOwX*T*dv5UeVOlpO6E4c{hZeoalyOQHe*b|}`{ z;5%o(r{f=cdU_Jo8qCVdYNTM?8Wj-$76(IBJs|f-yWRe=tB4=H0I>MJLXya~B_aPs z001&|6vdDc0311T@4Mfe0=-|ya9lH zz0m;3h1&xFTV&Ej3t0jX8you(ZvY^n+h_nFi9}8WEviTY;o>X-7#bRi;0=HX`Uyn4 z+zMFafRBlZ>1BNeK=G^6BE2Sao~sZ5c*gN%Mn=Y4yxe=Nncvvh_@drErKF_1%c3uG zE=mC43CEY^<>e(j{j0ULwTEdBHZn5uQ_&^{6c~}y0gvd-Ze$hi0TB$OgA57^`kF>x z<{dCxc0u<$zJ#Ts)(~VJvI3#FxVQpma1h1JBB75a0MH)NNf?k)YpAcUFP=lX&@{@R zA|fI_V;v0#ajHVug0ix*ns|f(0?u0J2M@Xdpm(T*@@p~?a=R7)c-rxgZEbBCY7Ij988`Fq zif{c*uO$?U)2dcIp}h}IN=oWC@QQSP*OR1GTb| z67zTj&$4DbPL!LpZTt=~N8lZ`c3^cNCuzw2Bgkvf940)inh-uu(!N4^)Ltb3JdBKB zpvm}#hK5{P{elo0T;I0tA|7%-2n-Ay;sF3H#VqZ~Cs_2azP>&Ob?2iJj_9M6q-Qa5 z73AmV*NW_6Ti8;f=thM;?!d|u_Ve@mR&-IsJK9c-ph7Tqw!G2NY>*W04AFLaClTDA zfLbeJxm*JU1qD^2t^zGD9#2xTlTj(u#4D*zF94`Dj93$tX;$dtPQB%7?vZNY)6 zXv!r-59%#QEcF2n08pdH2Ml-~wQ=SbjHH?6AE@K>EN#Jj4+$0LP9UJ8GcV0p_pZaec`qr4G1LTM4vJ%n%R^!Ma+Z@vs7Ep9jFsq;YqQ zaaXFV>4ZB((yU0PVjUj3DTFJmR*G<$+Zrvgz|)jXgP=?^!UdmV-NcO|pLu%L7&?Qj zCQ%>M%bR&Q`cVmr(;_PQP0nzo?ON0w%Y59CAvyv|azb5H#J<{u6FCS#Y!$JD0aSz3 zd878DCTD%-J!>|-dwIxD&`J_PB`CiJHSjR*l=m{Z%A@4y*F%sW2F`czJV7!!Wb{K> z1*mNS1xBFC3)EwPdPjucvO1l((J7iNA|_e5)Qm?2!b1?|Z!|6CXFfE33umTpHn|_g mm9bhbagdNag)kd9JpTY$dWdjeo!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1qt-3{3K#E{-7;x8B~}*d^>J!~P&f`9|l`x2Eao z3tN3x@d~|L-02Z7U`-pt!xtz_=~T(3W%O7P#wsVS#FyB%#8K0mc|M~nHl#k)T3 z_R3QA5B5ISn$-8jbH}}u@ALM=t-rr6Y<2nRr=Rwkc)!Wsd~?sr*I(~1eQs2GD97w~ zh={9Z`RSyMKLU0eE}u8YM=gFzc|}Xazr$CAy-v?paftXoKa~I6^UwWUr{`apHzB6( z*yE4ktxx^$%#dc}X+QiPDE#9s2QVZU{8$%UfBpB>_uuyKs-495_cIwt@Jw6x`pvp^ zf*@%IhK9w=d*00XzzpHhf;^DR80Xp|+$W#+_3&Dd1qC$?9}d|oAFB1AqmtCtqiDy( z(2&9?(d%|!`jwVQu)2o-Jo*Tgd%$ zV-WbH+Sl&?HF{d=M{$Ke9~0!AV)`D<6EJ`FTKn! zJpXvZwM(MQPoGtP*uZ)E@6r1A)z{u~7QK#Xi#xw6_CMn${@LdfjZ&OIF7$Nub6Mw< G&;$SjWBh^u diff --git a/debug/cesium/Assets/Textures/maki/square.png b/debug/cesium/Assets/Textures/maki/square.png deleted file mode 100644 index babc9c531005241fba7a844629e8acc4abff26a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 582 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaMM3p^r=85sBugD~Uq{1quc1-Ct2978H@y}i3I?@)k5+r#EaqwPNDl4i`l zp|dJ2aRuvTC#&>zO@SltXBMJX9yH|D{-dY_x+@rRrNELy_|LMPx!Q_XIKlO|8H2eO0)Ur`j1~+>H&%5o>g(CiXowIv zvHR=(&Ube?mMcE_d)u-)mnSn5^)B5ok^RT{ciAfC&zCc+)h?``z2en^eP69x9Uqo; Su*@+4IndM9&t;ucLK6V=cF+_6 diff --git a/debug/cesium/Assets/Textures/maki/star-stroked.png b/debug/cesium/Assets/Textures/maki/star-stroked.png deleted file mode 100644 index 242e42e206ac917a8f6f2115291f97e9ecffc2d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3460 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 diff --git a/debug/cesium/Assets/Textures/maki/telephone.png b/debug/cesium/Assets/Textures/maki/telephone.png deleted file mode 100644 index 6d57dc61a8a62c84825a83c8fae7c1ddcc6d694b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1702 zcmV;X23h%uP)Px#32;bRa{vGi!vFvd!vV){sAK>D20KYaK~#9!?VVpp zWK|r;XSb!7AcB3V-g+pamW{2pjh$LC9c8sqM|XBni;5nkfB0WVt#&nEL&twPGp&}X z=z~6p2tG=P`5=anwX01#IS7Iv2$E#XbPsgvdb;=AKXcDL=g#jO_~GE(nS0LXd*^rl z|BlB4ETz-whf}H43zA)vtXQ%)b?kNNGtWwP&Lff~;13yqY}S0z_nsAWod=Iwu@FKf zNnl=d0KU>L3F`mBFLW6GzrO|nKb0yn0&9PNzkGRl`MrgOg%9TD=04K0`T6+|S65fx zIXpZpGb#jR_{0{?z`(%m{QUfMhL)O`m}t-wL8=$dK!dLdBOZ_6v;qA8Ykl z!Nc$G@4rI>zHFgTC<isjI8|ju-gD!^59u zU5}Ymi2C~aF<#(DqtSL{-bzbLw~@Je?1%)vp`qa$Uf_?6jI?6#i`n`mX?+nFYt$khCa&_zR%}7;Yt9vwDZwiGS<$2VC8#`kB>{Z z5x^}y+}_^aPG#Q8%F5z4&mZT38rum5gFnjms;Q}&BVF6m)6=EQTObhFwsOy8G8yEi z7tC^06Ricp@430TS*dnyI2^{|-?tmSWKZ%mors6@00k|1CrKxr#h`wXQ=xJku5ymp-5NiZvadpQn=7C$z3dPqdMH z>MUL72Yz#N^Vc-t>-gV%LY^;ZeGb7T-4n04F}uvuG-AZ*PL>h)a+0ojO|OMiRaLd@ z^ZEX)uCD%G2RyPXV8-(g4h{ll+>TWdOc+1#+uPfR7{brBP!@02!0+hj7-R@PCxbFw zvLe`jas26XsEtl%dS ziJ+71d>-NFvhw*Tum;T@t{dQ=Cv>u64B_W^AS5jS-QC?^GK8NC1%93y02DcjmCt9g zc9OTJpH*we$V^r?!GBr}0$S6~XjBspe66Q{YisKki?y1d+zv?qtBX<%L=)KtU*Q@N zfY#H$wzl>*=%%I${70P>U}IyWS_D2lEx=Q1>tHCxSNmB+pFJ(WB^(5LN}b&D3Az$i z3v|7{zW$ceo1XEQ{Xzf+JI_J7BbEXnL)(Kui@;I<}13!fkefWx1io&A^~!W%*W zx;xPCtA+o<#)lpg0@z^TaQKcIeAy-^C+k5Sj^JcJps%m*HVM9LOG``dYy1k%WupL& z^n~${FIwh%YzIh~cLV`ThRi&3wL~px_Tk0z9MPhW@ewe|mbl)@)EygZqAqK+TF- zsSE6YujPIm--YO8`e)x$M(cvCMwB(W10BM^oa(QjtE;QWY!q>;@CkbYK#Yu@C+q>c zODm$Rk-fiQjt4{|k7j}_sYH}bQdlc=(E}-w_6H~r%)!r0p#=X`55z>;A%jG~PYY5z zIl_iRF=4{jtCVq5o|$4}bipegk@Q7CCk0V}|B4`QPy{R6mUQ4>7Q{`~31&8Ha~0Io zg(7$}30I&~;R^Vfx}%wynNQTf7Zw&Cot&KbxrwU@p>>2pNa{qj67Zd9qUxA%I}Ak- w@NE*oXBNKXb{-exY)t5=ZiDc>g4XHuH{NepCC=3qnE(I)07*qoM6N<$g31Lx@&Et; diff --git a/debug/cesium/Assets/Textures/maki/tennis.png b/debug/cesium/Assets/Textures/maki/tennis.png deleted file mode 100644 index 6cb63205403a91c1a22f1bc01fd498ae0da7865e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1658 zcmV-=28H>FP)Px#32;bRa{vGi!vFvd!vV){sAK>D1`kO@K~#9!?VW8% zWK|f)$8|TU*r?rFqM(8z0;9g!Zbh}Ncizmo^R#)RcI(>X9h!*tKNFLUm_=Q;OWcvwFybI^ZWfb$H&LtHVC3vto)<&)D?z^hHuV zcyIlxg&rFl8-^l&#+H|tTS@Ckpn~q~?CcxR#Lw8?-d+s>!h>LDxlqN=7zkG+s`%*% zTY^wOFE8R3sTHuZv-1-X0ARx_u7puh0S^Gm)Yf%G5nsa-=srA!(0dmE6aMAi9EjO68xw*O5 zx!6T>W9v`bEyvvudf}Ze29R(YZn~f5Hg8+7R zc4{R62LYrH*h&C$7%Bls01|*p0mNdlFC+l_mZP7@efh$|LWcxkAAl2XcSAhviv6zu zUavPH0XTRjXmWD$P0@r#v2BT00H;NFLs)!Lowzt3q*jQ=#>Ov25I-7?eobpsya0GX z#9okl4wPE}q+Zb6+`I@?{HCU+D|#9fPXPR)^aAAbKi69qu1-p;6=r^Z{xwMAH#9VS zW#mgA-T<6eD^P81?Iz^2|6l-Ud?$7bYRiWP;0&~n^+-M+B!Ki9(MzOUKoCYd-~rHF z5&q~Iiq8iPfChnwz2oc|uCM^KvLZSam@{iTRsle!@YD;a$yi%jT0VmyzCi%|K)~na zwJHYrI7=uL`h~m9i)veydaSRn?|q06@I;df2&64aqc$`&^e*IOYey1#pqD(rI;S%p zvewnrtwDhh4u`*|q&X|KQvBPkPOyz9aWgYB7t71buk#F{qN3tDr5=7O+)e>axRsTa zR~1G1E4z@ry}cjgkzm^~>+kQM&;y~SrshZ6VgmMWYA@3BwM=_^`=_EpKrvz6@}59S zQ)A>q4V=_NR0xqs1z!1uq0x&yzz}a-UO9l2{Jxi=~N2VdL{7jV;3piTSDzP{)D@Of)A?vRsdC$w4 zc7aw7QI))UK%O7z{R1IKGYbeBleM5DF`%uj?J|^mTxb_k=!HOAw$NQ~0svFjknHd8 zSF8Nq;~q{QMlpf5fafy>z|6Yq%-1lm<4c&ib)m*3T1*wfSVp-7jg*)UHC&|c1T z&Bg=tVKF+=IIHwB?d43?XrSMU%_1gLRaIT3X!MxjBZ;E7d@CS?LZP2c>11+y@~lU& zheb@NudiPr{KkuV){5>W?H9P>+E_*qMn*>7Vd5>)i+4pHmpv?os3N;-5HUgRRzIn# zjYCwN07U|@I3^4X42)AQ7mZ2)HuMCwR6pTx_y-vSY>Ww+t=;wY^%(wF^f?okJwb;( zEEQw};b{}%D^fXz51Jp{V?g{1QZeg#L$QYVXR`nQzfY;c1)GgeumAu607*qoM6N<$ Eg3(O{?*IS* diff --git a/debug/cesium/Assets/Textures/maki/theatre.png b/debug/cesium/Assets/Textures/maki/theatre.png deleted file mode 100644 index 772c96e4e31b501c5ec76fd5838bcc98d7c4214e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3233 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 CG6nJg diff --git a/debug/cesium/Assets/Textures/maki/toilets.png b/debug/cesium/Assets/Textures/maki/toilets.png deleted file mode 100644 index e87cf19c072126f496cc1918a344fc3d595d8a0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2917 zcmai0`8U*!7yir`W0x2T$>g;j{i9$loppV zgOzCs;(;(l06=vT%O59t8U_X4G1LJnhpw#C0F%FwZ6E-!cm3y}KEF~|0AQvd^$?aJ z)0_4z{+3^P*~3q?3mEZtK-@5?k;R@ciRK!v9tjf)RGI|&uIQP9So`(df`6Ja*cK`(7(3p+{faO_hKj~%J9uM z8r2DIq%7GNY6{4YayvGp;JjqFn*ed;H{${5w_KVvTJVorW~z*VXQ>sodu51`p`9%a zhNN`FuCb;K21E?Qnxg|%-~CD8SAyoKV;)=D+S=|CGoLEMil(psEkT$2`=y#E5nM?>l%{oS-|5c}S zA`B3HA|fKvF3O4(?fB&f1!WwD+90Q6EI36c*p<>uW{9j$SJCd@c;8s>wx5R)oConF$N~qRj7;92o z4IeKyoiVP!N7DlbH4ed>(;u(Jhn`DX2(AvC9rvgFwVa}P)!qwMUVVEpocE^Z$bu_f za&9gb1m!$k1p5ujQ06~)S)@FCrcL7Y$c_q0r{sW1WgtH(*#_T*wr5&~(Br=jUiL+R z=hK-1gZRq<(+wuEX%BrSE6-jqyCAG9Y^qaj_NtBY7MN*;wFCR&MzNB(ANr1N7bGbV%eet}3nWap)(<%8F z^xO{6DVdrq+|n4Z-20-N)b82@AI~ZKn8>fRb>@Hf)Awo@E#SP^yZTxMQF(r0`M9}b zW_^8~%2>|>C_Y4_%s(uFTxMnt@+Cf-@7 z(C)u)6UEwJyhWSXL=c`*>}3+1zqpv6t{!^exmAQrlWcL=ehq3kloC%B)ciXHPq>=x zTz}9Pme#)&fB17!#vL*JQu{^WHQlHQX__RoI*Q=cw?7QUoa)18hramHnADppVuH1> zv1#Ci>>1KzBnMfPwM(k6YZRK%anv(Uu_`MsuO*1ktIETB2CX0Pnz5n&fj^QM+1L}_ zZfTf7!atA%TxWlQ>|J1Bw4GaGu@P%^W0-ZiJ*yTgKan2uIcYoe4UX zPVwsqbDc4g-P{m5Jl>f)X+D8-(}CX_V+Z^7Z}Om2c6>YZKN@qKQ!7~#&(U8r#&E_`BP-{gnBBhe5mZ=E04^Ak5%R<}G2W1JN+&-}yRp!-WT-M&Pc?~G2hI79d4C93bYPCQYI3X5QdTzpPN81Zj1@pV|TfNW`Q&udl=}A-K)Ha!dSd7$9 z{#q079P~IbMz2+!d#iqr5co+LSnf+&DB%Xm;9Ww*NjLsmfvbb2k>!&YgSGeDin59U z9FNf)pdROU*|$!vf1kiJt9c)A+PjH`M$TYw2pWGK= z^b?M|5ZteFCcq%^%5RS)+ry%bj?Xf?P&GSC-iDy{F-1!@9fnzY7DKp+VZC91Rhwp#Fh@Q4=k8 zIylcb$I2dkv)o6FmhpNY67cuH73ALz!e~i@hd$Yd5o`0&;Ep1tqPf!maiCgRGU^sg zV4mYwr5F%Hb)Zd4P9zK(?fkF=P$S85lxpFnmMBn6EssYKgWGh3Ou;UavK5lmygG9& z=L1H!3PH#4U?P|Pk!fQ`BXd37*RG?x&W6Uf3;1GPw2PWzr6~B-lDf!8L0o#l@oIMmr+YsoiTO_bvhXBgw{o zMparBadH%uptTV_tFQ?Dd5!>YD>FVk0TrdBHW5mlWh2YoN+I~UY zR6YA|o@Fw&MV=Lc`C=`Qx{3Q(W)_x(TVEk>v!dGSJ6}Ka6Q8x;r z4hkAO969Jr*~JSGdW}n_z=y)4pP$}UbHs1XHU>`DJ(^+G=Nt;hRCRGa?T$GYo#omR zAnB`Z77nl_^pGQ_FNPRJ)rv{?%K_m-UTaDBc=(^gdoQ>c`$B+_ou8%!V8FM3Q)%?~ z6-HcAdtnVmR;*wY>?kLmD=0V~A$SM!{?*23FK>bl0KKdPPvRuAcr-Ygx){rM<=gQXj2X IspE+MA2>mI{Qv*} diff --git a/debug/cesium/Assets/Textures/maki/town-hall.png b/debug/cesium/Assets/Textures/maki/town-hall.png deleted file mode 100644 index 1af5c7ce4d8f5c83c0f596136ec9b8995874d52d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2005 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 diff --git a/debug/cesium/Assets/Textures/maki/triangle.png b/debug/cesium/Assets/Textures/maki/triangle.png deleted file mode 100644 index d9c47f42180c8f91fa40e5d77abbd3bcf4bdb253..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2137 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 VA@*_T;r3eq93@h$sw_Q|{|C9P$Q%Fw diff --git a/debug/cesium/Assets/Textures/maki/warehouse.png b/debug/cesium/Assets/Textures/maki/warehouse.png deleted file mode 100644 index 910f1e4c940c73334fe62ac0845f2783189dc191..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1908 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 Dn66b{ diff --git a/debug/cesium/Assets/Textures/maki/water.png b/debug/cesium/Assets/Textures/maki/water.png deleted file mode 100644 index 159a557de69a1b2f8998b56d3ebc85aec3203a6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2411 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 diff --git a/debug/cesium/Assets/Textures/moonSmall.jpg b/debug/cesium/Assets/Textures/moonSmall.jpg deleted file mode 100644 index 47f52522ea7501f58eb0cf14bd89e4f90c32fde5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18196 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 diff --git a/debug/cesium/Assets/Textures/pin.svg b/debug/cesium/Assets/Textures/pin.svg deleted file mode 100644 index 7892c36..0000000 --- a/debug/cesium/Assets/Textures/pin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/debug/cesium/Assets/Textures/waterNormals.jpg b/debug/cesium/Assets/Textures/waterNormals.jpg deleted file mode 100644 index eb1baa2d62829297680a99ef890ef719599965cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 294196 zcmbTdc{p3!|3B)So=#MIT2)2MX$@_SHH5a5 uQswqg2qvk}UhM39cv_(sC%oWoy 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�+MF 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

    wyy2=a9FLQ8h}6#D77{rNRn8IRs)5W|CzsVe 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𝔒gs%v+c8CCNCS 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 z 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μ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%0A{Q_eH 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 Ql)4Vfg;7(EzyCA+|7<^4(EtDd diff --git a/debug/cesium/Assets/Textures/waterNormalsSmall.jpg b/debug/cesium/Assets/Textures/waterNormalsSmall.jpg deleted file mode 100644 index 57b19d8f46fdc4a7e6fe249da37f0fe9c3c461e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34121 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�MKo&Lj{(*y=W)D+k z1YZEH#0F9xPW8@d!7WkJiW6+*hA(mNPqZ2%c{BK7a+c0woL$drk`<4n2!O_H19ed8 z$rzra;(iBZ;fv`07_F1ZL|2`FtlHTd20aMdw14T*6aFh*PV1$n9gEEb+=&O>pmYca z%6;t}Z#{xOp71OC3A=wn4G2Bp89OGP?O_ zbS?UdNk6>O>3gj%?O1#{zM@$}Cy;uZgnzsWnvDAPKQh!CW2?O@*2?8}8krk@V!N}g zhnF;E%Q3bq_nXsee^i02EOhC8Q};X+GI%5eI)w{Y?na^~N_gJ|YfA}xhP>B35Fbx` z;G9Tz%(ADmgy~+v%^aVnuXuA3l=_UAtW2oi(-h-!+yqeemXg zG!~8jXe>3sVvC5hxylqT%7aNtoi(>GfGr*0V+1N}6eYM6AcD%9+~2GXRorX}iFkeb zq7lngn;bKvMiN|DShPZ`4lukH(rPyS;LV$Ikw{8)b`x7P-f|)~*pB1VtGUWt-})V_ zmdLALa6m!}0FWqD2Bq-#Xu-9TnetHz4<>OTy_-7K=>@`G>-%XHsC{n;W9kh`SC6j~ z8;>0cpDR!w-DQbcc;yJwIs>XtgjPUsG{lh{P(;ENiZ7K=97q=2Ez%>sk(TOFd(WLtp(O%*3};DM$7_N8cG zgK*s2c*o9bMaFYByd$48D5hwh@5cJFFm&90lq|(_<4VfVr=5{9G^^Xf+@$3EDm~IU z$V`-;l={xM{5rt1z(>{~YA{fEy0EWvpbxmt{dh}c|B-Day@A=Ss#yIM3T$*J0RKqoO1w2Kon~cileBf6|pY 1) { - thisProgram = process["argv"][1].replace(/\\/g, "/"); - } - arguments_ = process["argv"].slice(2); - process["on"]("uncaughtException", function(ex) { - if (!(ex instanceof ExitStatus)) { - throw ex; - } - }); - process["on"]("unhandledRejection", abort); - quit_ = function(status) { - process["exit"](status); - }; - Module["inspect"] = function() { - return "[Emscripten Module object]"; - }; - } else if (ENVIRONMENT_IS_SHELL) { - if (typeof read != "undefined") { - read_ = function shell_read(f) { - return read(f); - }; - } - readBinary = function readBinary2(f) { - var data; - if (typeof readbuffer === "function") { - return new Uint8Array(readbuffer(f)); - } - data = read(f, "binary"); - assert(typeof data === "object"); - return data; - }; - if (typeof scriptArgs != "undefined") { - arguments_ = scriptArgs; - } else if (typeof arguments != "undefined") { - arguments_ = arguments; - } - if (typeof quit === "function") { - quit_ = function(status) { - quit(status); - }; - } - if (typeof print !== "undefined") { - if (typeof console === "undefined") - console = {}; - console.log = print; - console.warn = console.error = typeof printErr !== "undefined" ? printErr : print; - } - } else if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { - if (ENVIRONMENT_IS_WORKER) { - scriptDirectory = self.location.href; - } else if (typeof document !== "undefined" && document.currentScript) { - scriptDirectory = document.currentScript.src; - } - if (_scriptDir) { - scriptDirectory = _scriptDir; - } - if (scriptDirectory.indexOf("blob:") !== 0) { - scriptDirectory = scriptDirectory.substr(0, scriptDirectory.lastIndexOf("/") + 1); - } else { - scriptDirectory = ""; - } - { - read_ = function(url) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", url, false); - xhr.send(null); - return xhr.responseText; - }; - if (ENVIRONMENT_IS_WORKER) { - readBinary = function(url) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", url, false); - xhr.responseType = "arraybuffer"; - xhr.send(null); - return new Uint8Array(xhr.response); - }; - } - readAsync = function(url, onload, onerror) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", url, true); - xhr.responseType = "arraybuffer"; - xhr.onload = function() { - if (xhr.status == 200 || xhr.status == 0 && xhr.response) { - onload(xhr.response); - return; - } - onerror(); - }; - xhr.onerror = onerror; - xhr.send(null); - }; - } - setWindowTitle = function(title) { - document.title = title; - }; - } else { - } - var out = Module["print"] || console.log.bind(console); - var err = Module["printErr"] || console.warn.bind(console); - for (key in moduleOverrides) { - if (moduleOverrides.hasOwnProperty(key)) { - Module[key] = moduleOverrides[key]; - } - } - moduleOverrides = null; - if (Module["arguments"]) - arguments_ = Module["arguments"]; - if (Module["thisProgram"]) - thisProgram = Module["thisProgram"]; - if (Module["quit"]) - quit_ = Module["quit"]; - var tempRet0 = 0; - var setTempRet0 = function(value) { - tempRet0 = value; - }; - var wasmBinary; - if (Module["wasmBinary"]) - wasmBinary = Module["wasmBinary"]; - var noExitRuntime = Module["noExitRuntime"] || true; - if (typeof WebAssembly !== "object") { - abort("no native wasm support detected"); - } - var wasmMemory; - var ABORT = false; - var EXITSTATUS; - function assert(condition, text) { - if (!condition) { - abort("Assertion failed: " + text); - } - } - var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : void 0; - function UTF8ArrayToString(heap, idx, maxBytesToRead) { - var endIdx = idx + maxBytesToRead; - var endPtr = idx; - while (heap[endPtr] && !(endPtr >= endIdx)) - ++endPtr; - if (endPtr - idx > 16 && heap.subarray && UTF8Decoder) { - return UTF8Decoder.decode(heap.subarray(idx, endPtr)); - } else { - var str = ""; - while (idx < endPtr) { - var u0 = heap[idx++]; - if (!(u0 & 128)) { - str += String.fromCharCode(u0); - continue; - } - var u1 = heap[idx++] & 63; - if ((u0 & 224) == 192) { - str += String.fromCharCode((u0 & 31) << 6 | u1); - continue; - } - var u2 = heap[idx++] & 63; - if ((u0 & 240) == 224) { - u0 = (u0 & 15) << 12 | u1 << 6 | u2; - } else { - u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | heap[idx++] & 63; - } - if (u0 < 65536) { - str += String.fromCharCode(u0); - } else { - var ch = u0 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); - } - } - } - return str; - } - function UTF8ToString(ptr, maxBytesToRead) { - return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ""; - } - function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) { - if (!(maxBytesToWrite > 0)) - return 0; - var startIdx = outIdx; - var endIdx = outIdx + maxBytesToWrite - 1; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) { - var u1 = str.charCodeAt(++i); - u = 65536 + ((u & 1023) << 10) | u1 & 1023; - } - if (u <= 127) { - if (outIdx >= endIdx) - break; - heap[outIdx++] = u; - } else if (u <= 2047) { - if (outIdx + 1 >= endIdx) - break; - heap[outIdx++] = 192 | u >> 6; - heap[outIdx++] = 128 | u & 63; - } else if (u <= 65535) { - if (outIdx + 2 >= endIdx) - break; - heap[outIdx++] = 224 | u >> 12; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; - } else { - if (outIdx + 3 >= endIdx) - break; - heap[outIdx++] = 240 | u >> 18; - heap[outIdx++] = 128 | u >> 12 & 63; - heap[outIdx++] = 128 | u >> 6 & 63; - heap[outIdx++] = 128 | u & 63; - } - } - heap[outIdx] = 0; - return outIdx - startIdx; - } - function stringToUTF8(str, outPtr, maxBytesToWrite) { - return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); - } - function lengthBytesUTF8(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var u = str.charCodeAt(i); - if (u >= 55296 && u <= 57343) - u = 65536 + ((u & 1023) << 10) | str.charCodeAt(++i) & 1023; - if (u <= 127) - ++len; - else if (u <= 2047) - len += 2; - else if (u <= 65535) - len += 3; - else - len += 4; - } - return len; - } - var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : void 0; - function UTF16ToString(ptr, maxBytesToRead) { - var endPtr = ptr; - var idx = endPtr >> 1; - var maxIdx = idx + maxBytesToRead / 2; - while (!(idx >= maxIdx) && HEAPU16[idx]) - ++idx; - endPtr = idx << 1; - if (endPtr - ptr > 32 && UTF16Decoder) { - return UTF16Decoder.decode(HEAPU8.subarray(ptr, endPtr)); - } else { - var str = ""; - for (var i = 0; !(i >= maxBytesToRead / 2); ++i) { - var codeUnit = HEAP16[ptr + i * 2 >> 1]; - if (codeUnit == 0) - break; - str += String.fromCharCode(codeUnit); - } - return str; - } - } - function stringToUTF16(str, outPtr, maxBytesToWrite) { - if (maxBytesToWrite === void 0) { - maxBytesToWrite = 2147483647; - } - if (maxBytesToWrite < 2) - return 0; - maxBytesToWrite -= 2; - var startPtr = outPtr; - var numCharsToWrite = maxBytesToWrite < str.length * 2 ? maxBytesToWrite / 2 : str.length; - for (var i = 0; i < numCharsToWrite; ++i) { - var codeUnit = str.charCodeAt(i); - HEAP16[outPtr >> 1] = codeUnit; - outPtr += 2; - } - HEAP16[outPtr >> 1] = 0; - return outPtr - startPtr; - } - function lengthBytesUTF16(str) { - return str.length * 2; - } - function UTF32ToString(ptr, maxBytesToRead) { - var i = 0; - var str = ""; - while (!(i >= maxBytesToRead / 4)) { - var utf32 = HEAP32[ptr + i * 4 >> 2]; - if (utf32 == 0) - break; - ++i; - if (utf32 >= 65536) { - var ch = utf32 - 65536; - str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023); - } else { - str += String.fromCharCode(utf32); - } - } - return str; - } - function stringToUTF32(str, outPtr, maxBytesToWrite) { - if (maxBytesToWrite === void 0) { - maxBytesToWrite = 2147483647; - } - if (maxBytesToWrite < 4) - return 0; - var startPtr = outPtr; - var endPtr = startPtr + maxBytesToWrite - 4; - for (var i = 0; i < str.length; ++i) { - var codeUnit = str.charCodeAt(i); - if (codeUnit >= 55296 && codeUnit <= 57343) { - var trailSurrogate = str.charCodeAt(++i); - codeUnit = 65536 + ((codeUnit & 1023) << 10) | trailSurrogate & 1023; - } - HEAP32[outPtr >> 2] = codeUnit; - outPtr += 4; - if (outPtr + 4 > endPtr) - break; - } - HEAP32[outPtr >> 2] = 0; - return outPtr - startPtr; - } - function lengthBytesUTF32(str) { - var len = 0; - for (var i = 0; i < str.length; ++i) { - var codeUnit = str.charCodeAt(i); - if (codeUnit >= 55296 && codeUnit <= 57343) - ++i; - len += 4; - } - return len; - } - function alignUp(x, multiple) { - if (x % multiple > 0) { - x += multiple - x % multiple; - } - return x; - } - var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64; - function updateGlobalBufferAndViews(buf) { - buffer = buf; - Module["HEAP8"] = HEAP8 = new Int8Array(buf); - Module["HEAP16"] = HEAP16 = new Int16Array(buf); - Module["HEAP32"] = HEAP32 = new Int32Array(buf); - Module["HEAPU8"] = HEAPU8 = new Uint8Array(buf); - Module["HEAPU16"] = HEAPU16 = new Uint16Array(buf); - Module["HEAPU32"] = HEAPU32 = new Uint32Array(buf); - Module["HEAPF32"] = HEAPF32 = new Float32Array(buf); - Module["HEAPF64"] = HEAPF64 = new Float64Array(buf); - } - var INITIAL_MEMORY = Module["INITIAL_MEMORY"] || 16777216; - var wasmTable; - var __ATPRERUN__ = []; - var __ATINIT__ = []; - var __ATMAIN__ = []; - var __ATPOSTRUN__ = []; - var runtimeInitialized = false; - function preRun() { - if (Module["preRun"]) { - if (typeof Module["preRun"] == "function") - Module["preRun"] = [Module["preRun"]]; - while (Module["preRun"].length) { - addOnPreRun(Module["preRun"].shift()); - } - } - callRuntimeCallbacks(__ATPRERUN__); - } - function initRuntime() { - runtimeInitialized = true; - callRuntimeCallbacks(__ATINIT__); - } - function preMain() { - callRuntimeCallbacks(__ATMAIN__); - } - function postRun() { - if (Module["postRun"]) { - if (typeof Module["postRun"] == "function") - Module["postRun"] = [Module["postRun"]]; - while (Module["postRun"].length) { - addOnPostRun(Module["postRun"].shift()); - } - } - callRuntimeCallbacks(__ATPOSTRUN__); - } - function addOnPreRun(cb) { - __ATPRERUN__.unshift(cb); - } - function addOnInit(cb) { - __ATINIT__.unshift(cb); - } - function addOnPostRun(cb) { - __ATPOSTRUN__.unshift(cb); - } - var runDependencies = 0; - var runDependencyWatcher = null; - var dependenciesFulfilled = null; - function addRunDependency(id) { - runDependencies++; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies); - } - } - function removeRunDependency(id) { - runDependencies--; - if (Module["monitorRunDependencies"]) { - Module["monitorRunDependencies"](runDependencies); - } - if (runDependencies == 0) { - if (runDependencyWatcher !== null) { - clearInterval(runDependencyWatcher); - runDependencyWatcher = null; - } - if (dependenciesFulfilled) { - var callback = dependenciesFulfilled; - dependenciesFulfilled = null; - callback(); - } - } - } - Module["preloadedImages"] = {}; - Module["preloadedAudios"] = {}; - function abort(what) { - if (Module["onAbort"]) { - Module["onAbort"](what); - } - what += ""; - err(what); - ABORT = true; - EXITSTATUS = 1; - what = "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."; - var e = new WebAssembly.RuntimeError(what); - readyPromiseReject(e); - throw e; - } - function hasPrefix(str, prefix) { - return String.prototype.startsWith ? str.startsWith(prefix) : str.indexOf(prefix) === 0; - } - var dataURIPrefix = "data:application/octet-stream;base64,"; - function isDataURI(filename) { - return hasPrefix(filename, dataURIPrefix); - } - var fileURIPrefix = "file://"; - function isFileURI(filename) { - return hasPrefix(filename, fileURIPrefix); - } - var wasmBinaryFile = "basis_transcoder.wasm"; - if (!isDataURI(wasmBinaryFile)) { - wasmBinaryFile = locateFile(wasmBinaryFile); - } - function getBinary(file) { - try { - if (file == wasmBinaryFile && wasmBinary) { - return new Uint8Array(wasmBinary); - } - if (readBinary) { - return readBinary(file); - } else { - throw "both async and sync fetching of the wasm failed"; - } - } catch (err2) { - abort(err2); - } - } - function getBinaryPromise() { - if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) { - if (typeof fetch === "function" && !isFileURI(wasmBinaryFile)) { - return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { - if (!response["ok"]) { - throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"; - } - return response["arrayBuffer"](); - }).catch(function() { - return getBinary(wasmBinaryFile); - }); - } else { - if (readAsync) { - return new Promise(function(resolve, reject) { - readAsync(wasmBinaryFile, function(response) { - resolve(new Uint8Array(response)); - }, reject); - }); - } - } - } - return Promise.resolve().then(function() { - return getBinary(wasmBinaryFile); - }); - } - function createWasm() { - var info = { "a": asmLibraryArg }; - function receiveInstance(instance, module2) { - var exports3 = instance.exports; - Module["asm"] = exports3; - wasmMemory = Module["asm"]["K"]; - updateGlobalBufferAndViews(wasmMemory.buffer); - wasmTable = Module["asm"]["O"]; - addOnInit(Module["asm"]["L"]); - removeRunDependency("wasm-instantiate"); - } - addRunDependency("wasm-instantiate"); - function receiveInstantiatedSource(output) { - receiveInstance(output["instance"]); - } - function instantiateArrayBuffer(receiver) { - return getBinaryPromise().then(function(binary) { - var result = WebAssembly.instantiate(binary, info); - return result; - }).then(receiver, function(reason) { - err("failed to asynchronously prepare wasm: " + reason); - abort(reason); - }); - } - function instantiateAsync() { - if (!wasmBinary && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && !isFileURI(wasmBinaryFile) && typeof fetch === "function") { - return fetch(wasmBinaryFile, { credentials: "same-origin" }).then(function(response) { - var result = WebAssembly.instantiateStreaming(response, info); - return result.then(receiveInstantiatedSource, function(reason) { - err("wasm streaming compile failed: " + reason); - err("falling back to ArrayBuffer instantiation"); - return instantiateArrayBuffer(receiveInstantiatedSource); - }); - }); - } else { - return instantiateArrayBuffer(receiveInstantiatedSource); - } - } - if (Module["instantiateWasm"]) { - try { - var exports2 = Module["instantiateWasm"](info, receiveInstance); - return exports2; - } catch (e) { - err("Module.instantiateWasm callback failed with error: " + e); - return false; - } - } - instantiateAsync().catch(readyPromiseReject); - return {}; - } - function callRuntimeCallbacks(callbacks) { - while (callbacks.length > 0) { - var callback = callbacks.shift(); - if (typeof callback == "function") { - callback(Module); - continue; - } - var func = callback.func; - if (typeof func === "number") { - if (callback.arg === void 0) { - wasmTable.get(func)(); - } else { - wasmTable.get(func)(callback.arg); - } - } else { - func(callback.arg === void 0 ? null : callback.arg); - } - } - } - var structRegistrations = {}; - function runDestructors(destructors) { - while (destructors.length) { - var ptr = destructors.pop(); - var del = destructors.pop(); - del(ptr); - } - } - function simpleReadValueFromPointer(pointer) { - return this["fromWireType"](HEAPU32[pointer >> 2]); - } - var awaitingDependencies = {}; - var registeredTypes = {}; - var typeDependencies = {}; - var char_0 = 48; - var char_9 = 57; - function makeLegalFunctionName(name) { - if (void 0 === name) { - return "_unknown"; - } - name = name.replace(/[^a-zA-Z0-9_]/g, "$"); - var f = name.charCodeAt(0); - if (f >= char_0 && f <= char_9) { - return "_" + name; - } else { - return name; - } - } - function createNamedFunction(name, body) { - name = makeLegalFunctionName(name); - return new Function("body", "return function " + name + '() {\n "use strict"; return body.apply(this, arguments);\n};\n')(body); - } - function extendError(baseErrorType, errorName) { - var errorClass = createNamedFunction(errorName, function(message) { - this.name = errorName; - this.message = message; - var stack = new Error(message).stack; - if (stack !== void 0) { - this.stack = this.toString() + "\n" + stack.replace(/^Error(:[^\n]*)?\n/, ""); - } - }); - errorClass.prototype = Object.create(baseErrorType.prototype); - errorClass.prototype.constructor = errorClass; - errorClass.prototype.toString = function() { - if (this.message === void 0) { - return this.name; - } else { - return this.name + ": " + this.message; - } - }; - return errorClass; - } - var InternalError = void 0; - function throwInternalError(message) { - throw new InternalError(message); - } - function whenDependentTypesAreResolved(myTypes, dependentTypes, getTypeConverters) { - myTypes.forEach(function(type) { - typeDependencies[type] = dependentTypes; - }); - function onComplete(typeConverters2) { - var myTypeConverters = getTypeConverters(typeConverters2); - if (myTypeConverters.length !== myTypes.length) { - throwInternalError("Mismatched type converter count"); - } - for (var i = 0; i < myTypes.length; ++i) { - registerType(myTypes[i], myTypeConverters[i]); - } - } - var typeConverters = new Array(dependentTypes.length); - var unregisteredTypes = []; - var registered = 0; - dependentTypes.forEach(function(dt, i) { - if (registeredTypes.hasOwnProperty(dt)) { - typeConverters[i] = registeredTypes[dt]; - } else { - unregisteredTypes.push(dt); - if (!awaitingDependencies.hasOwnProperty(dt)) { - awaitingDependencies[dt] = []; - } - awaitingDependencies[dt].push(function() { - typeConverters[i] = registeredTypes[dt]; - ++registered; - if (registered === unregisteredTypes.length) { - onComplete(typeConverters); - } - }); - } - }); - if (0 === unregisteredTypes.length) { - onComplete(typeConverters); - } - } - function __embind_finalize_value_object(structType) { - var reg = structRegistrations[structType]; - delete structRegistrations[structType]; - var rawConstructor = reg.rawConstructor; - var rawDestructor = reg.rawDestructor; - var fieldRecords = reg.fields; - var fieldTypes = fieldRecords.map(function(field) { - return field.getterReturnType; - }).concat(fieldRecords.map(function(field) { - return field.setterArgumentType; - })); - whenDependentTypesAreResolved([structType], fieldTypes, function(fieldTypes2) { - var fields = {}; - fieldRecords.forEach(function(field, i) { - var fieldName = field.fieldName; - var getterReturnType = fieldTypes2[i]; - var getter = field.getter; - var getterContext = field.getterContext; - var setterArgumentType = fieldTypes2[i + fieldRecords.length]; - var setter = field.setter; - var setterContext = field.setterContext; - fields[fieldName] = { read: function(ptr) { - return getterReturnType["fromWireType"](getter(getterContext, ptr)); - }, write: function(ptr, o) { - var destructors = []; - setter(setterContext, ptr, setterArgumentType["toWireType"](destructors, o)); - runDestructors(destructors); - } }; - }); - return [{ name: reg.name, "fromWireType": function(ptr) { - var rv = {}; - for (var i in fields) { - rv[i] = fields[i].read(ptr); - } - rawDestructor(ptr); - return rv; - }, "toWireType": function(destructors, o) { - for (var fieldName in fields) { - if (!(fieldName in o)) { - throw new TypeError('Missing field: "' + fieldName + '"'); - } - } - var ptr = rawConstructor(); - for (fieldName in fields) { - fields[fieldName].write(ptr, o[fieldName]); - } - if (destructors !== null) { - destructors.push(rawDestructor, ptr); - } - return ptr; - }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: rawDestructor }]; - }); - } - function getShiftFromSize(size) { - switch (size) { - case 1: - return 0; - case 2: - return 1; - case 4: - return 2; - case 8: - return 3; - default: - throw new TypeError("Unknown type size: " + size); - } - } - function embind_init_charCodes() { - var codes = new Array(256); - for (var i = 0; i < 256; ++i) { - codes[i] = String.fromCharCode(i); - } - embind_charCodes = codes; - } - var embind_charCodes = void 0; - function readLatin1String(ptr) { - var ret = ""; - var c = ptr; - while (HEAPU8[c]) { - ret += embind_charCodes[HEAPU8[c++]]; - } - return ret; - } - var BindingError = void 0; - function throwBindingError(message) { - throw new BindingError(message); - } - function registerType(rawType, registeredInstance, options) { - options = options || {}; - if (!("argPackAdvance" in registeredInstance)) { - throw new TypeError("registerType registeredInstance requires argPackAdvance"); - } - var name = registeredInstance.name; - if (!rawType) { - throwBindingError('type "' + name + '" must have a positive integer typeid pointer'); - } - if (registeredTypes.hasOwnProperty(rawType)) { - if (options.ignoreDuplicateRegistrations) { - return; - } else { - throwBindingError("Cannot register type '" + name + "' twice"); - } - } - registeredTypes[rawType] = registeredInstance; - delete typeDependencies[rawType]; - if (awaitingDependencies.hasOwnProperty(rawType)) { - var callbacks = awaitingDependencies[rawType]; - delete awaitingDependencies[rawType]; - callbacks.forEach(function(cb) { - cb(); - }); - } - } - function __embind_register_bool(rawType, name, size, trueValue, falseValue) { - var shift = getShiftFromSize(size); - name = readLatin1String(name); - registerType(rawType, { name, "fromWireType": function(wt) { - return !!wt; - }, "toWireType": function(destructors, o) { - return o ? trueValue : falseValue; - }, "argPackAdvance": 8, "readValueFromPointer": function(pointer) { - var heap; - if (size === 1) { - heap = HEAP8; - } else if (size === 2) { - heap = HEAP16; - } else if (size === 4) { - heap = HEAP32; - } else { - throw new TypeError("Unknown boolean type size: " + name); - } - return this["fromWireType"](heap[pointer >> shift]); - }, destructorFunction: null }); - } - function ClassHandle_isAliasOf(other) { - if (!(this instanceof ClassHandle)) { - return false; - } - if (!(other instanceof ClassHandle)) { - return false; - } - var leftClass = this.$$.ptrType.registeredClass; - var left = this.$$.ptr; - var rightClass = other.$$.ptrType.registeredClass; - var right = other.$$.ptr; - while (leftClass.baseClass) { - left = leftClass.upcast(left); - leftClass = leftClass.baseClass; - } - while (rightClass.baseClass) { - right = rightClass.upcast(right); - rightClass = rightClass.baseClass; - } - return leftClass === rightClass && left === right; - } - function shallowCopyInternalPointer(o) { - return { count: o.count, deleteScheduled: o.deleteScheduled, preservePointerOnDelete: o.preservePointerOnDelete, ptr: o.ptr, ptrType: o.ptrType, smartPtr: o.smartPtr, smartPtrType: o.smartPtrType }; - } - function throwInstanceAlreadyDeleted(obj) { - function getInstanceTypeName(handle) { - return handle.$$.ptrType.registeredClass.name; - } - throwBindingError(getInstanceTypeName(obj) + " instance already deleted"); - } - var finalizationGroup = false; - function detachFinalizer(handle) { - } - function runDestructor($$) { - if ($$.smartPtr) { - $$.smartPtrType.rawDestructor($$.smartPtr); - } else { - $$.ptrType.registeredClass.rawDestructor($$.ptr); - } - } - function releaseClassHandle($$) { - $$.count.value -= 1; - var toDelete = 0 === $$.count.value; - if (toDelete) { - runDestructor($$); - } - } - function attachFinalizer(handle) { - if ("undefined" === typeof FinalizationGroup) { - attachFinalizer = function(handle2) { - return handle2; - }; - return handle; - } - finalizationGroup = new FinalizationGroup(function(iter) { - for (var result = iter.next(); !result.done; result = iter.next()) { - var $$ = result.value; - if (!$$.ptr) { - console.warn("object already deleted: " + $$.ptr); - } else { - releaseClassHandle($$); - } - } - }); - attachFinalizer = function(handle2) { - finalizationGroup.register(handle2, handle2.$$, handle2.$$); - return handle2; - }; - detachFinalizer = function(handle2) { - finalizationGroup.unregister(handle2.$$); - }; - return attachFinalizer(handle); - } - function ClassHandle_clone() { - if (!this.$$.ptr) { - throwInstanceAlreadyDeleted(this); - } - if (this.$$.preservePointerOnDelete) { - this.$$.count.value += 1; - return this; - } else { - var clone = attachFinalizer(Object.create(Object.getPrototypeOf(this), { $$: { value: shallowCopyInternalPointer(this.$$) } })); - clone.$$.count.value += 1; - clone.$$.deleteScheduled = false; - return clone; - } - } - function ClassHandle_delete() { - if (!this.$$.ptr) { - throwInstanceAlreadyDeleted(this); - } - if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { - throwBindingError("Object already scheduled for deletion"); - } - detachFinalizer(this); - releaseClassHandle(this.$$); - if (!this.$$.preservePointerOnDelete) { - this.$$.smartPtr = void 0; - this.$$.ptr = void 0; - } - } - function ClassHandle_isDeleted() { - return !this.$$.ptr; - } - var delayFunction = void 0; - var deletionQueue = []; - function flushPendingDeletes() { - while (deletionQueue.length) { - var obj = deletionQueue.pop(); - obj.$$.deleteScheduled = false; - obj["delete"](); - } - } - function ClassHandle_deleteLater() { - if (!this.$$.ptr) { - throwInstanceAlreadyDeleted(this); - } - if (this.$$.deleteScheduled && !this.$$.preservePointerOnDelete) { - throwBindingError("Object already scheduled for deletion"); - } - deletionQueue.push(this); - if (deletionQueue.length === 1 && delayFunction) { - delayFunction(flushPendingDeletes); - } - this.$$.deleteScheduled = true; - return this; - } - function init_ClassHandle() { - ClassHandle.prototype["isAliasOf"] = ClassHandle_isAliasOf; - ClassHandle.prototype["clone"] = ClassHandle_clone; - ClassHandle.prototype["delete"] = ClassHandle_delete; - ClassHandle.prototype["isDeleted"] = ClassHandle_isDeleted; - ClassHandle.prototype["deleteLater"] = ClassHandle_deleteLater; - } - function ClassHandle() { - } - var registeredPointers = {}; - function ensureOverloadTable(proto, methodName, humanName) { - if (void 0 === proto[methodName].overloadTable) { - var prevFunc = proto[methodName]; - proto[methodName] = function() { - if (!proto[methodName].overloadTable.hasOwnProperty(arguments.length)) { - throwBindingError("Function '" + humanName + "' called with an invalid number of arguments (" + arguments.length + ") - expects one of (" + proto[methodName].overloadTable + ")!"); - } - return proto[methodName].overloadTable[arguments.length].apply(this, arguments); - }; - proto[methodName].overloadTable = []; - proto[methodName].overloadTable[prevFunc.argCount] = prevFunc; - } - } - function exposePublicSymbol(name, value, numArguments) { - if (Module.hasOwnProperty(name)) { - if (void 0 === numArguments || void 0 !== Module[name].overloadTable && void 0 !== Module[name].overloadTable[numArguments]) { - throwBindingError("Cannot register public name '" + name + "' twice"); - } - ensureOverloadTable(Module, name, name); - if (Module.hasOwnProperty(numArguments)) { - throwBindingError("Cannot register multiple overloads of a function with the same number of arguments (" + numArguments + ")!"); - } - Module[name].overloadTable[numArguments] = value; - } else { - Module[name] = value; - if (void 0 !== numArguments) { - Module[name].numArguments = numArguments; - } - } - } - function RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast) { - this.name = name; - this.constructor = constructor; - this.instancePrototype = instancePrototype; - this.rawDestructor = rawDestructor; - this.baseClass = baseClass; - this.getActualType = getActualType; - this.upcast = upcast; - this.downcast = downcast; - this.pureVirtualFunctions = []; - } - function upcastPointer(ptr, ptrClass, desiredClass) { - while (ptrClass !== desiredClass) { - if (!ptrClass.upcast) { - throwBindingError("Expected null or instance of " + desiredClass.name + ", got an instance of " + ptrClass.name); - } - ptr = ptrClass.upcast(ptr); - ptrClass = ptrClass.baseClass; - } - return ptr; - } - function constNoSmartPtrRawPointerToWireType(destructors, handle) { - if (handle === null) { - if (this.isReference) { - throwBindingError("null is not a valid " + this.name); - } - return 0; - } - if (!handle.$$) { - throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); - } - if (!handle.$$.ptr) { - throwBindingError("Cannot pass deleted object as a pointer of type " + this.name); - } - var handleClass = handle.$$.ptrType.registeredClass; - var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); - return ptr; - } - function genericPointerToWireType(destructors, handle) { - var ptr; - if (handle === null) { - if (this.isReference) { - throwBindingError("null is not a valid " + this.name); - } - if (this.isSmartPointer) { - ptr = this.rawConstructor(); - if (destructors !== null) { - destructors.push(this.rawDestructor, ptr); - } - return ptr; - } else { - return 0; - } - } - if (!handle.$$) { - throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); - } - if (!handle.$$.ptr) { - throwBindingError("Cannot pass deleted object as a pointer of type " + this.name); - } - if (!this.isConst && handle.$$.ptrType.isConst) { - throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name); - } - var handleClass = handle.$$.ptrType.registeredClass; - ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); - if (this.isSmartPointer) { - if (void 0 === handle.$$.smartPtr) { - throwBindingError("Passing raw pointer to smart pointer is illegal"); - } - switch (this.sharingPolicy) { - case 0: - if (handle.$$.smartPtrType === this) { - ptr = handle.$$.smartPtr; - } else { - throwBindingError("Cannot convert argument of type " + (handle.$$.smartPtrType ? handle.$$.smartPtrType.name : handle.$$.ptrType.name) + " to parameter type " + this.name); - } - break; - case 1: - ptr = handle.$$.smartPtr; - break; - case 2: - if (handle.$$.smartPtrType === this) { - ptr = handle.$$.smartPtr; - } else { - var clonedHandle = handle["clone"](); - ptr = this.rawShare(ptr, __emval_register(function() { - clonedHandle["delete"](); - })); - if (destructors !== null) { - destructors.push(this.rawDestructor, ptr); - } - } - break; - default: - throwBindingError("Unsupporting sharing policy"); - } - } - return ptr; - } - function nonConstNoSmartPtrRawPointerToWireType(destructors, handle) { - if (handle === null) { - if (this.isReference) { - throwBindingError("null is not a valid " + this.name); - } - return 0; - } - if (!handle.$$) { - throwBindingError('Cannot pass "' + _embind_repr(handle) + '" as a ' + this.name); - } - if (!handle.$$.ptr) { - throwBindingError("Cannot pass deleted object as a pointer of type " + this.name); - } - if (handle.$$.ptrType.isConst) { - throwBindingError("Cannot convert argument of type " + handle.$$.ptrType.name + " to parameter type " + this.name); - } - var handleClass = handle.$$.ptrType.registeredClass; - var ptr = upcastPointer(handle.$$.ptr, handleClass, this.registeredClass); - return ptr; - } - function RegisteredPointer_getPointee(ptr) { - if (this.rawGetPointee) { - ptr = this.rawGetPointee(ptr); - } - return ptr; - } - function RegisteredPointer_destructor(ptr) { - if (this.rawDestructor) { - this.rawDestructor(ptr); - } - } - function RegisteredPointer_deleteObject(handle) { - if (handle !== null) { - handle["delete"](); - } - } - function downcastPointer(ptr, ptrClass, desiredClass) { - if (ptrClass === desiredClass) { - return ptr; - } - if (void 0 === desiredClass.baseClass) { - return null; - } - var rv = downcastPointer(ptr, ptrClass, desiredClass.baseClass); - if (rv === null) { - return null; - } - return desiredClass.downcast(rv); - } - function getInheritedInstanceCount() { - return Object.keys(registeredInstances).length; - } - function getLiveInheritedInstances() { - var rv = []; - for (var k in registeredInstances) { - if (registeredInstances.hasOwnProperty(k)) { - rv.push(registeredInstances[k]); - } - } - return rv; - } - function setDelayFunction(fn) { - delayFunction = fn; - if (deletionQueue.length && delayFunction) { - delayFunction(flushPendingDeletes); - } - } - function init_embind() { - Module["getInheritedInstanceCount"] = getInheritedInstanceCount; - Module["getLiveInheritedInstances"] = getLiveInheritedInstances; - Module["flushPendingDeletes"] = flushPendingDeletes; - Module["setDelayFunction"] = setDelayFunction; - } - var registeredInstances = {}; - function getBasestPointer(class_, ptr) { - if (ptr === void 0) { - throwBindingError("ptr should not be undefined"); - } - while (class_.baseClass) { - ptr = class_.upcast(ptr); - class_ = class_.baseClass; - } - return ptr; - } - function getInheritedInstance(class_, ptr) { - ptr = getBasestPointer(class_, ptr); - return registeredInstances[ptr]; - } - function makeClassHandle(prototype, record) { - if (!record.ptrType || !record.ptr) { - throwInternalError("makeClassHandle requires ptr and ptrType"); - } - var hasSmartPtrType = !!record.smartPtrType; - var hasSmartPtr = !!record.smartPtr; - if (hasSmartPtrType !== hasSmartPtr) { - throwInternalError("Both smartPtrType and smartPtr must be specified"); - } - record.count = { value: 1 }; - return attachFinalizer(Object.create(prototype, { $$: { value: record } })); - } - function RegisteredPointer_fromWireType(ptr) { - var rawPointer = this.getPointee(ptr); - if (!rawPointer) { - this.destructor(ptr); - return null; - } - var registeredInstance = getInheritedInstance(this.registeredClass, rawPointer); - if (void 0 !== registeredInstance) { - if (0 === registeredInstance.$$.count.value) { - registeredInstance.$$.ptr = rawPointer; - registeredInstance.$$.smartPtr = ptr; - return registeredInstance["clone"](); - } else { - var rv = registeredInstance["clone"](); - this.destructor(ptr); - return rv; - } - } - function makeDefaultHandle() { - if (this.isSmartPointer) { - return makeClassHandle(this.registeredClass.instancePrototype, { ptrType: this.pointeeType, ptr: rawPointer, smartPtrType: this, smartPtr: ptr }); - } else { - return makeClassHandle(this.registeredClass.instancePrototype, { ptrType: this, ptr }); - } - } - var actualType = this.registeredClass.getActualType(rawPointer); - var registeredPointerRecord = registeredPointers[actualType]; - if (!registeredPointerRecord) { - return makeDefaultHandle.call(this); - } - var toType; - if (this.isConst) { - toType = registeredPointerRecord.constPointerType; - } else { - toType = registeredPointerRecord.pointerType; - } - var dp = downcastPointer(rawPointer, this.registeredClass, toType.registeredClass); - if (dp === null) { - return makeDefaultHandle.call(this); - } - if (this.isSmartPointer) { - return makeClassHandle(toType.registeredClass.instancePrototype, { ptrType: toType, ptr: dp, smartPtrType: this, smartPtr: ptr }); - } else { - return makeClassHandle(toType.registeredClass.instancePrototype, { ptrType: toType, ptr: dp }); - } - } - function init_RegisteredPointer() { - RegisteredPointer.prototype.getPointee = RegisteredPointer_getPointee; - RegisteredPointer.prototype.destructor = RegisteredPointer_destructor; - RegisteredPointer.prototype["argPackAdvance"] = 8; - RegisteredPointer.prototype["readValueFromPointer"] = simpleReadValueFromPointer; - RegisteredPointer.prototype["deleteObject"] = RegisteredPointer_deleteObject; - RegisteredPointer.prototype["fromWireType"] = RegisteredPointer_fromWireType; - } - function RegisteredPointer(name, registeredClass, isReference, isConst, isSmartPointer, pointeeType, sharingPolicy, rawGetPointee, rawConstructor, rawShare, rawDestructor) { - this.name = name; - this.registeredClass = registeredClass; - this.isReference = isReference; - this.isConst = isConst; - this.isSmartPointer = isSmartPointer; - this.pointeeType = pointeeType; - this.sharingPolicy = sharingPolicy; - this.rawGetPointee = rawGetPointee; - this.rawConstructor = rawConstructor; - this.rawShare = rawShare; - this.rawDestructor = rawDestructor; - if (!isSmartPointer && registeredClass.baseClass === void 0) { - if (isConst) { - this["toWireType"] = constNoSmartPtrRawPointerToWireType; - this.destructorFunction = null; - } else { - this["toWireType"] = nonConstNoSmartPtrRawPointerToWireType; - this.destructorFunction = null; - } - } else { - this["toWireType"] = genericPointerToWireType; - } - } - function replacePublicSymbol(name, value, numArguments) { - if (!Module.hasOwnProperty(name)) { - throwInternalError("Replacing nonexistant public symbol"); - } - if (void 0 !== Module[name].overloadTable && void 0 !== numArguments) { - Module[name].overloadTable[numArguments] = value; - } else { - Module[name] = value; - Module[name].argCount = numArguments; - } - } - function dynCallLegacy(sig, ptr, args) { - var f = Module["dynCall_" + sig]; - return args && args.length ? f.apply(null, [ptr].concat(args)) : f.call(null, ptr); - } - function dynCall(sig, ptr, args) { - if (sig.indexOf("j") != -1) { - return dynCallLegacy(sig, ptr, args); - } - return wasmTable.get(ptr).apply(null, args); - } - function getDynCaller(sig, ptr) { - var argCache = []; - return function() { - argCache.length = arguments.length; - for (var i = 0; i < arguments.length; i++) { - argCache[i] = arguments[i]; - } - return dynCall(sig, ptr, argCache); - }; - } - function embind__requireFunction(signature, rawFunction) { - signature = readLatin1String(signature); - function makeDynCaller() { - if (signature.indexOf("j") != -1) { - return getDynCaller(signature, rawFunction); - } - return wasmTable.get(rawFunction); - } - var fp = makeDynCaller(); - if (typeof fp !== "function") { - throwBindingError("unknown function pointer with signature " + signature + ": " + rawFunction); - } - return fp; - } - var UnboundTypeError = void 0; - function getTypeName(type) { - var ptr = ___getTypeName(type); - var rv = readLatin1String(ptr); - _free(ptr); - return rv; - } - function throwUnboundTypeError(message, types) { - var unboundTypes = []; - var seen = {}; - function visit(type) { - if (seen[type]) { - return; - } - if (registeredTypes[type]) { - return; - } - if (typeDependencies[type]) { - typeDependencies[type].forEach(visit); - return; - } - unboundTypes.push(type); - seen[type] = true; - } - types.forEach(visit); - throw new UnboundTypeError(message + ": " + unboundTypes.map(getTypeName).join([", "])); - } - function __embind_register_class(rawType, rawPointerType, rawConstPointerType, baseClassRawType, getActualTypeSignature, getActualType, upcastSignature, upcast, downcastSignature, downcast, name, destructorSignature, rawDestructor) { - name = readLatin1String(name); - getActualType = embind__requireFunction(getActualTypeSignature, getActualType); - if (upcast) { - upcast = embind__requireFunction(upcastSignature, upcast); - } - if (downcast) { - downcast = embind__requireFunction(downcastSignature, downcast); - } - rawDestructor = embind__requireFunction(destructorSignature, rawDestructor); - var legalFunctionName = makeLegalFunctionName(name); - exposePublicSymbol(legalFunctionName, function() { - throwUnboundTypeError("Cannot construct " + name + " due to unbound types", [baseClassRawType]); - }); - whenDependentTypesAreResolved([rawType, rawPointerType, rawConstPointerType], baseClassRawType ? [baseClassRawType] : [], function(base) { - base = base[0]; - var baseClass; - var basePrototype; - if (baseClassRawType) { - baseClass = base.registeredClass; - basePrototype = baseClass.instancePrototype; - } else { - basePrototype = ClassHandle.prototype; - } - var constructor = createNamedFunction(legalFunctionName, function() { - if (Object.getPrototypeOf(this) !== instancePrototype) { - throw new BindingError("Use 'new' to construct " + name); - } - if (void 0 === registeredClass.constructor_body) { - throw new BindingError(name + " has no accessible constructor"); - } - var body = registeredClass.constructor_body[arguments.length]; - if (void 0 === body) { - throw new BindingError("Tried to invoke ctor of " + name + " with invalid number of parameters (" + arguments.length + ") - expected (" + Object.keys(registeredClass.constructor_body).toString() + ") parameters instead!"); - } - return body.apply(this, arguments); - }); - var instancePrototype = Object.create(basePrototype, { constructor: { value: constructor } }); - constructor.prototype = instancePrototype; - var registeredClass = new RegisteredClass(name, constructor, instancePrototype, rawDestructor, baseClass, getActualType, upcast, downcast); - var referenceConverter = new RegisteredPointer(name, registeredClass, true, false, false); - var pointerConverter = new RegisteredPointer(name + "*", registeredClass, false, false, false); - var constPointerConverter = new RegisteredPointer(name + " const*", registeredClass, false, true, false); - registeredPointers[rawType] = { pointerType: pointerConverter, constPointerType: constPointerConverter }; - replacePublicSymbol(legalFunctionName, constructor); - return [referenceConverter, pointerConverter, constPointerConverter]; - }); - } - function heap32VectorToArray(count, firstElement) { - var array = []; - for (var i = 0; i < count; i++) { - array.push(HEAP32[(firstElement >> 2) + i]); - } - return array; - } - function __embind_register_class_constructor(rawClassType, argCount, rawArgTypesAddr, invokerSignature, invoker, rawConstructor) { - assert(argCount > 0); - var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); - invoker = embind__requireFunction(invokerSignature, invoker); - var args = [rawConstructor]; - var destructors = []; - whenDependentTypesAreResolved([], [rawClassType], function(classType) { - classType = classType[0]; - var humanName = "constructor " + classType.name; - if (void 0 === classType.registeredClass.constructor_body) { - classType.registeredClass.constructor_body = []; - } - if (void 0 !== classType.registeredClass.constructor_body[argCount - 1]) { - throw new BindingError("Cannot register multiple constructors with identical number of parameters (" + (argCount - 1) + ") for class '" + classType.name + "'! Overload resolution is currently only performed using the parameter count, not actual type info!"); - } - classType.registeredClass.constructor_body[argCount - 1] = function unboundTypeHandler() { - throwUnboundTypeError("Cannot construct " + classType.name + " due to unbound types", rawArgTypes); - }; - whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) { - classType.registeredClass.constructor_body[argCount - 1] = function constructor_body() { - if (arguments.length !== argCount - 1) { - throwBindingError(humanName + " called with " + arguments.length + " arguments, expected " + (argCount - 1)); - } - destructors.length = 0; - args.length = argCount; - for (var i = 1; i < argCount; ++i) { - args[i] = argTypes[i]["toWireType"](destructors, arguments[i - 1]); - } - var ptr = invoker.apply(null, args); - runDestructors(destructors); - return argTypes[0]["fromWireType"](ptr); - }; - return []; - }); - return []; - }); - } - function new_(constructor, argumentList) { - if (!(constructor instanceof Function)) { - throw new TypeError("new_ called with constructor type " + typeof constructor + " which is not a function"); - } - var dummy = createNamedFunction(constructor.name || "unknownFunctionName", function() { - }); - dummy.prototype = constructor.prototype; - var obj = new dummy(); - var r = constructor.apply(obj, argumentList); - return r instanceof Object ? r : obj; - } - function craftInvokerFunction(humanName, argTypes, classType, cppInvokerFunc, cppTargetFunc) { - var argCount = argTypes.length; - if (argCount < 2) { - throwBindingError("argTypes array size mismatch! Must at least get return value and 'this' types!"); - } - var isClassMethodFunc = argTypes[1] !== null && classType !== null; - var needsDestructorStack = false; - for (var i = 1; i < argTypes.length; ++i) { - if (argTypes[i] !== null && argTypes[i].destructorFunction === void 0) { - needsDestructorStack = true; - break; - } - } - var returns = argTypes[0].name !== "void"; - var argsList = ""; - var argsListWired = ""; - for (var i = 0; i < argCount - 2; ++i) { - argsList += (i !== 0 ? ", " : "") + "arg" + i; - argsListWired += (i !== 0 ? ", " : "") + "arg" + i + "Wired"; - } - var invokerFnBody = "return function " + makeLegalFunctionName(humanName) + "(" + argsList + ") {\nif (arguments.length !== " + (argCount - 2) + ") {\nthrowBindingError('function " + humanName + " called with ' + arguments.length + ' arguments, expected " + (argCount - 2) + " args!');\n}\n"; - if (needsDestructorStack) { - invokerFnBody += "var destructors = [];\n"; - } - var dtorStack = needsDestructorStack ? "destructors" : "null"; - var args1 = ["throwBindingError", "invoker", "fn", "runDestructors", "retType", "classParam"]; - var args2 = [throwBindingError, cppInvokerFunc, cppTargetFunc, runDestructors, argTypes[0], argTypes[1]]; - if (isClassMethodFunc) { - invokerFnBody += "var thisWired = classParam.toWireType(" + dtorStack + ", this);\n"; - } - for (var i = 0; i < argCount - 2; ++i) { - invokerFnBody += "var arg" + i + "Wired = argType" + i + ".toWireType(" + dtorStack + ", arg" + i + "); // " + argTypes[i + 2].name + "\n"; - args1.push("argType" + i); - args2.push(argTypes[i + 2]); - } - if (isClassMethodFunc) { - argsListWired = "thisWired" + (argsListWired.length > 0 ? ", " : "") + argsListWired; - } - invokerFnBody += (returns ? "var rv = " : "") + "invoker(fn" + (argsListWired.length > 0 ? ", " : "") + argsListWired + ");\n"; - if (needsDestructorStack) { - invokerFnBody += "runDestructors(destructors);\n"; - } else { - for (var i = isClassMethodFunc ? 1 : 2; i < argTypes.length; ++i) { - var paramName = i === 1 ? "thisWired" : "arg" + (i - 2) + "Wired"; - if (argTypes[i].destructorFunction !== null) { - invokerFnBody += paramName + "_dtor(" + paramName + "); // " + argTypes[i].name + "\n"; - args1.push(paramName + "_dtor"); - args2.push(argTypes[i].destructorFunction); - } - } - } - if (returns) { - invokerFnBody += "var ret = retType.fromWireType(rv);\nreturn ret;\n"; - } else { - } - invokerFnBody += "}\n"; - args1.push(invokerFnBody); - var invokerFunction = new_(Function, args1).apply(null, args2); - return invokerFunction; - } - function __embind_register_class_function(rawClassType, methodName, argCount, rawArgTypesAddr, invokerSignature, rawInvoker, context, isPureVirtual) { - var rawArgTypes = heap32VectorToArray(argCount, rawArgTypesAddr); - methodName = readLatin1String(methodName); - rawInvoker = embind__requireFunction(invokerSignature, rawInvoker); - whenDependentTypesAreResolved([], [rawClassType], function(classType) { - classType = classType[0]; - var humanName = classType.name + "." + methodName; - if (isPureVirtual) { - classType.registeredClass.pureVirtualFunctions.push(methodName); - } - function unboundTypesHandler() { - throwUnboundTypeError("Cannot call " + humanName + " due to unbound types", rawArgTypes); - } - var proto = classType.registeredClass.instancePrototype; - var method = proto[methodName]; - if (void 0 === method || void 0 === method.overloadTable && method.className !== classType.name && method.argCount === argCount - 2) { - unboundTypesHandler.argCount = argCount - 2; - unboundTypesHandler.className = classType.name; - proto[methodName] = unboundTypesHandler; - } else { - ensureOverloadTable(proto, methodName, humanName); - proto[methodName].overloadTable[argCount - 2] = unboundTypesHandler; - } - whenDependentTypesAreResolved([], rawArgTypes, function(argTypes) { - var memberFunction = craftInvokerFunction(humanName, argTypes, classType, rawInvoker, context); - if (void 0 === proto[methodName].overloadTable) { - memberFunction.argCount = argCount - 2; - proto[methodName] = memberFunction; - } else { - proto[methodName].overloadTable[argCount - 2] = memberFunction; - } - return []; - }); - return []; - }); - } - function __embind_register_constant(name, type, value) { - name = readLatin1String(name); - whenDependentTypesAreResolved([], [type], function(type2) { - type2 = type2[0]; - Module[name] = type2["fromWireType"](value); - return []; - }); - } - var emval_free_list = []; - var emval_handle_array = [{}, { value: void 0 }, { value: null }, { value: true }, { value: false }]; - function __emval_decref(handle) { - if (handle > 4 && 0 === --emval_handle_array[handle].refcount) { - emval_handle_array[handle] = void 0; - emval_free_list.push(handle); - } - } - function count_emval_handles() { - var count = 0; - for (var i = 5; i < emval_handle_array.length; ++i) { - if (emval_handle_array[i] !== void 0) { - ++count; - } - } - return count; - } - function get_first_emval() { - for (var i = 5; i < emval_handle_array.length; ++i) { - if (emval_handle_array[i] !== void 0) { - return emval_handle_array[i]; - } - } - return null; - } - function init_emval() { - Module["count_emval_handles"] = count_emval_handles; - Module["get_first_emval"] = get_first_emval; - } - function __emval_register(value) { - switch (value) { - case void 0: { - return 1; - } - case null: { - return 2; - } - case true: { - return 3; - } - case false: { - return 4; - } - default: { - var handle = emval_free_list.length ? emval_free_list.pop() : emval_handle_array.length; - emval_handle_array[handle] = { refcount: 1, value }; - return handle; - } - } - } - function __embind_register_emval(rawType, name) { - name = readLatin1String(name); - registerType(rawType, { name, "fromWireType": function(handle) { - var rv = emval_handle_array[handle].value; - __emval_decref(handle); - return rv; - }, "toWireType": function(destructors, value) { - return __emval_register(value); - }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: null }); - } - function enumReadValueFromPointer(name, shift, signed) { - switch (shift) { - case 0: - return function(pointer) { - var heap = signed ? HEAP8 : HEAPU8; - return this["fromWireType"](heap[pointer]); - }; - case 1: - return function(pointer) { - var heap = signed ? HEAP16 : HEAPU16; - return this["fromWireType"](heap[pointer >> 1]); - }; - case 2: - return function(pointer) { - var heap = signed ? HEAP32 : HEAPU32; - return this["fromWireType"](heap[pointer >> 2]); - }; - default: - throw new TypeError("Unknown integer type: " + name); - } - } - function __embind_register_enum(rawType, name, size, isSigned) { - var shift = getShiftFromSize(size); - name = readLatin1String(name); - function ctor() { - } - ctor.values = {}; - registerType(rawType, { name, constructor: ctor, "fromWireType": function(c) { - return this.constructor.values[c]; - }, "toWireType": function(destructors, c) { - return c.value; - }, "argPackAdvance": 8, "readValueFromPointer": enumReadValueFromPointer(name, shift, isSigned), destructorFunction: null }); - exposePublicSymbol(name, ctor); - } - function requireRegisteredType(rawType, humanName) { - var impl = registeredTypes[rawType]; - if (void 0 === impl) { - throwBindingError(humanName + " has unknown type " + getTypeName(rawType)); - } - return impl; - } - function __embind_register_enum_value(rawEnumType, name, enumValue) { - var enumType = requireRegisteredType(rawEnumType, "enum"); - name = readLatin1String(name); - var Enum = enumType.constructor; - var Value = Object.create(enumType.constructor.prototype, { value: { value: enumValue }, constructor: { value: createNamedFunction(enumType.name + "_" + name, function() { - }) } }); - Enum.values[enumValue] = Value; - Enum[name] = Value; - } - function _embind_repr(v) { - if (v === null) { - return "null"; - } - var t = typeof v; - if (t === "object" || t === "array" || t === "function") { - return v.toString(); - } else { - return "" + v; - } - } - function floatReadValueFromPointer(name, shift) { - switch (shift) { - case 2: - return function(pointer) { - return this["fromWireType"](HEAPF32[pointer >> 2]); - }; - case 3: - return function(pointer) { - return this["fromWireType"](HEAPF64[pointer >> 3]); - }; - default: - throw new TypeError("Unknown float type: " + name); - } - } - function __embind_register_float(rawType, name, size) { - var shift = getShiftFromSize(size); - name = readLatin1String(name); - registerType(rawType, { name, "fromWireType": function(value) { - return value; - }, "toWireType": function(destructors, value) { - if (typeof value !== "number" && typeof value !== "boolean") { - throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name); - } - return value; - }, "argPackAdvance": 8, "readValueFromPointer": floatReadValueFromPointer(name, shift), destructorFunction: null }); - } - function __embind_register_function(name, argCount, rawArgTypesAddr, signature, rawInvoker, fn) { - var argTypes = heap32VectorToArray(argCount, rawArgTypesAddr); - name = readLatin1String(name); - rawInvoker = embind__requireFunction(signature, rawInvoker); - exposePublicSymbol(name, function() { - throwUnboundTypeError("Cannot call " + name + " due to unbound types", argTypes); - }, argCount - 1); - whenDependentTypesAreResolved([], argTypes, function(argTypes2) { - var invokerArgsArray = [argTypes2[0], null].concat(argTypes2.slice(1)); - replacePublicSymbol(name, craftInvokerFunction(name, invokerArgsArray, null, rawInvoker, fn), argCount - 1); - return []; - }); - } - function integerReadValueFromPointer(name, shift, signed) { - switch (shift) { - case 0: - return signed ? function readS8FromPointer(pointer) { - return HEAP8[pointer]; - } : function readU8FromPointer(pointer) { - return HEAPU8[pointer]; - }; - case 1: - return signed ? function readS16FromPointer(pointer) { - return HEAP16[pointer >> 1]; - } : function readU16FromPointer(pointer) { - return HEAPU16[pointer >> 1]; - }; - case 2: - return signed ? function readS32FromPointer(pointer) { - return HEAP32[pointer >> 2]; - } : function readU32FromPointer(pointer) { - return HEAPU32[pointer >> 2]; - }; - default: - throw new TypeError("Unknown integer type: " + name); - } - } - function __embind_register_integer(primitiveType, name, size, minRange, maxRange) { - name = readLatin1String(name); - if (maxRange === -1) { - maxRange = 4294967295; - } - var shift = getShiftFromSize(size); - var fromWireType = function(value) { - return value; - }; - if (minRange === 0) { - var bitshift = 32 - 8 * size; - fromWireType = function(value) { - return value << bitshift >>> bitshift; - }; - } - var isUnsignedType = name.indexOf("unsigned") != -1; - registerType(primitiveType, { name, "fromWireType": fromWireType, "toWireType": function(destructors, value) { - if (typeof value !== "number" && typeof value !== "boolean") { - throw new TypeError('Cannot convert "' + _embind_repr(value) + '" to ' + this.name); - } - if (value < minRange || value > maxRange) { - throw new TypeError('Passing a number "' + _embind_repr(value) + '" from JS side to C/C++ side to an argument of type "' + name + '", which is outside the valid range [' + minRange + ", " + maxRange + "]!"); - } - return isUnsignedType ? value >>> 0 : value | 0; - }, "argPackAdvance": 8, "readValueFromPointer": integerReadValueFromPointer(name, shift, minRange !== 0), destructorFunction: null }); - } - function __embind_register_memory_view(rawType, dataTypeIndex, name) { - var typeMapping = [Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, Float64Array]; - var TA = typeMapping[dataTypeIndex]; - function decodeMemoryView(handle) { - handle = handle >> 2; - var heap = HEAPU32; - var size = heap[handle]; - var data = heap[handle + 1]; - return new TA(buffer, data, size); - } - name = readLatin1String(name); - registerType(rawType, { name, "fromWireType": decodeMemoryView, "argPackAdvance": 8, "readValueFromPointer": decodeMemoryView }, { ignoreDuplicateRegistrations: true }); - } - function __embind_register_std_string(rawType, name) { - name = readLatin1String(name); - var stdStringIsUTF8 = name === "std::string"; - registerType(rawType, { name, "fromWireType": function(value) { - var length = HEAPU32[value >> 2]; - var str; - if (stdStringIsUTF8) { - var decodeStartPtr = value + 4; - for (var i = 0; i <= length; ++i) { - var currentBytePtr = value + 4 + i; - if (i == length || HEAPU8[currentBytePtr] == 0) { - var maxRead = currentBytePtr - decodeStartPtr; - var stringSegment = UTF8ToString(decodeStartPtr, maxRead); - if (str === void 0) { - str = stringSegment; - } else { - str += String.fromCharCode(0); - str += stringSegment; - } - decodeStartPtr = currentBytePtr + 1; - } - } - } else { - var a = new Array(length); - for (var i = 0; i < length; ++i) { - a[i] = String.fromCharCode(HEAPU8[value + 4 + i]); - } - str = a.join(""); - } - _free(value); - return str; - }, "toWireType": function(destructors, value) { - if (value instanceof ArrayBuffer) { - value = new Uint8Array(value); - } - var getLength; - var valueIsOfTypeString = typeof value === "string"; - if (!(valueIsOfTypeString || value instanceof Uint8Array || value instanceof Uint8ClampedArray || value instanceof Int8Array)) { - throwBindingError("Cannot pass non-string to std::string"); - } - if (stdStringIsUTF8 && valueIsOfTypeString) { - getLength = function() { - return lengthBytesUTF8(value); - }; - } else { - getLength = function() { - return value.length; - }; - } - var length = getLength(); - var ptr = _malloc(4 + length + 1); - HEAPU32[ptr >> 2] = length; - if (stdStringIsUTF8 && valueIsOfTypeString) { - stringToUTF8(value, ptr + 4, length + 1); - } else { - if (valueIsOfTypeString) { - for (var i = 0; i < length; ++i) { - var charCode = value.charCodeAt(i); - if (charCode > 255) { - _free(ptr); - throwBindingError("String has UTF-16 code units that do not fit in 8 bits"); - } - HEAPU8[ptr + 4 + i] = charCode; - } - } else { - for (var i = 0; i < length; ++i) { - HEAPU8[ptr + 4 + i] = value[i]; - } - } - } - if (destructors !== null) { - destructors.push(_free, ptr); - } - return ptr; - }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: function(ptr) { - _free(ptr); - } }); - } - function __embind_register_std_wstring(rawType, charSize, name) { - name = readLatin1String(name); - var decodeString, encodeString, getHeap, lengthBytesUTF, shift; - if (charSize === 2) { - decodeString = UTF16ToString; - encodeString = stringToUTF16; - lengthBytesUTF = lengthBytesUTF16; - getHeap = function() { - return HEAPU16; - }; - shift = 1; - } else if (charSize === 4) { - decodeString = UTF32ToString; - encodeString = stringToUTF32; - lengthBytesUTF = lengthBytesUTF32; - getHeap = function() { - return HEAPU32; - }; - shift = 2; - } - registerType(rawType, { name, "fromWireType": function(value) { - var length = HEAPU32[value >> 2]; - var HEAP = getHeap(); - var str; - var decodeStartPtr = value + 4; - for (var i = 0; i <= length; ++i) { - var currentBytePtr = value + 4 + i * charSize; - if (i == length || HEAP[currentBytePtr >> shift] == 0) { - var maxReadBytes = currentBytePtr - decodeStartPtr; - var stringSegment = decodeString(decodeStartPtr, maxReadBytes); - if (str === void 0) { - str = stringSegment; - } else { - str += String.fromCharCode(0); - str += stringSegment; - } - decodeStartPtr = currentBytePtr + charSize; - } - } - _free(value); - return str; - }, "toWireType": function(destructors, value) { - if (!(typeof value === "string")) { - throwBindingError("Cannot pass non-string to C++ string type " + name); - } - var length = lengthBytesUTF(value); - var ptr = _malloc(4 + length + charSize); - HEAPU32[ptr >> 2] = length >> shift; - encodeString(value, ptr + 4, length + charSize); - if (destructors !== null) { - destructors.push(_free, ptr); - } - return ptr; - }, "argPackAdvance": 8, "readValueFromPointer": simpleReadValueFromPointer, destructorFunction: function(ptr) { - _free(ptr); - } }); - } - function __embind_register_value_object(rawType, name, constructorSignature, rawConstructor, destructorSignature, rawDestructor) { - structRegistrations[rawType] = { name: readLatin1String(name), rawConstructor: embind__requireFunction(constructorSignature, rawConstructor), rawDestructor: embind__requireFunction(destructorSignature, rawDestructor), fields: [] }; - } - function __embind_register_value_object_field(structType, fieldName, getterReturnType, getterSignature, getter, getterContext, setterArgumentType, setterSignature, setter, setterContext) { - structRegistrations[structType].fields.push({ fieldName: readLatin1String(fieldName), getterReturnType, getter: embind__requireFunction(getterSignature, getter), getterContext, setterArgumentType, setter: embind__requireFunction(setterSignature, setter), setterContext }); - } - function __embind_register_void(rawType, name) { - name = readLatin1String(name); - registerType(rawType, { isVoid: true, name, "argPackAdvance": 0, "fromWireType": function() { - return void 0; - }, "toWireType": function(destructors, o) { - return void 0; - } }); - } - function requireHandle(handle) { - if (!handle) { - throwBindingError("Cannot use deleted val. handle = " + handle); - } - return emval_handle_array[handle].value; - } - function __emval_as(handle, returnType, destructorsRef) { - handle = requireHandle(handle); - returnType = requireRegisteredType(returnType, "emval::as"); - var destructors = []; - var rd = __emval_register(destructors); - HEAP32[destructorsRef >> 2] = rd; - return returnType["toWireType"](destructors, handle); - } - var emval_symbols = {}; - function getStringOrSymbol(address) { - var symbol = emval_symbols[address]; - if (symbol === void 0) { - return readLatin1String(address); - } else { - return symbol; - } - } - var emval_methodCallers = []; - function __emval_call_void_method(caller, handle, methodName, args) { - caller = emval_methodCallers[caller]; - handle = requireHandle(handle); - methodName = getStringOrSymbol(methodName); - caller(handle, methodName, null, args); - } - function emval_get_global() { - if (typeof globalThis === "object") { - return globalThis; - } - return function() { - return Function; - }()("return this")(); - } - function __emval_get_global(name) { - if (name === 0) { - return __emval_register(emval_get_global()); - } else { - name = getStringOrSymbol(name); - return __emval_register(emval_get_global()[name]); - } - } - function __emval_addMethodCaller(caller) { - var id = emval_methodCallers.length; - emval_methodCallers.push(caller); - return id; - } - function __emval_lookupTypes(argCount, argTypes) { - var a = new Array(argCount); - for (var i = 0; i < argCount; ++i) { - a[i] = requireRegisteredType(HEAP32[(argTypes >> 2) + i], "parameter " + i); - } - return a; - } - function __emval_get_method_caller(argCount, argTypes) { - var types = __emval_lookupTypes(argCount, argTypes); - var retType = types[0]; - var signatureName = retType.name + "_$" + types.slice(1).map(function(t) { - return t.name; - }).join("_") + "$"; - var params = ["retType"]; - var args = [retType]; - var argsList = ""; - for (var i = 0; i < argCount - 1; ++i) { - argsList += (i !== 0 ? ", " : "") + "arg" + i; - params.push("argType" + i); - args.push(types[1 + i]); - } - var functionName = makeLegalFunctionName("methodCaller_" + signatureName); - var functionBody = "return function " + functionName + "(handle, name, destructors, args) {\n"; - var offset = 0; - for (var i = 0; i < argCount - 1; ++i) { - functionBody += " var arg" + i + " = argType" + i + ".readValueFromPointer(args" + (offset ? "+" + offset : "") + ");\n"; - offset += types[i + 1]["argPackAdvance"]; - } - functionBody += " var rv = handle[name](" + argsList + ");\n"; - for (var i = 0; i < argCount - 1; ++i) { - if (types[i + 1]["deleteObject"]) { - functionBody += " argType" + i + ".deleteObject(arg" + i + ");\n"; - } - } - if (!retType.isVoid) { - functionBody += " return retType.toWireType(destructors, rv);\n"; - } - functionBody += "};\n"; - params.push(functionBody); - var invokerFunction = new_(Function, params).apply(null, args); - return __emval_addMethodCaller(invokerFunction); - } - function __emval_get_module_property(name) { - name = getStringOrSymbol(name); - return __emval_register(Module[name]); - } - function __emval_get_property(handle, key2) { - handle = requireHandle(handle); - key2 = requireHandle(key2); - return __emval_register(handle[key2]); - } - function __emval_incref(handle) { - if (handle > 4) { - emval_handle_array[handle].refcount += 1; - } - } - function craftEmvalAllocator(argCount) { - var argsList = ""; - for (var i = 0; i < argCount; ++i) { - argsList += (i !== 0 ? ", " : "") + "arg" + i; - } - var functionBody = "return function emval_allocator_" + argCount + "(constructor, argTypes, args) {\n"; - for (var i = 0; i < argCount; ++i) { - functionBody += "var argType" + i + " = requireRegisteredType(Module['HEAP32'][(argTypes >>> 2) + " + i + '], "parameter ' + i + '");\nvar arg' + i + " = argType" + i + ".readValueFromPointer(args);\nargs += argType" + i + "['argPackAdvance'];\n"; - } - functionBody += "var obj = new constructor(" + argsList + ");\nreturn __emval_register(obj);\n}\n"; - return new Function("requireRegisteredType", "Module", "__emval_register", functionBody)(requireRegisteredType, Module, __emval_register); - } - var emval_newers = {}; - function __emval_new(handle, argCount, argTypes, args) { - handle = requireHandle(handle); - var newer = emval_newers[argCount]; - if (!newer) { - newer = craftEmvalAllocator(argCount); - emval_newers[argCount] = newer; - } - return newer(handle, argTypes, args); - } - function __emval_new_cstring(v) { - return __emval_register(getStringOrSymbol(v)); - } - function __emval_run_destructors(handle) { - var destructors = emval_handle_array[handle].value; - runDestructors(destructors); - __emval_decref(handle); - } - function _abort() { - abort(); - } - function _emscripten_memcpy_big(dest, src, num) { - HEAPU8.copyWithin(dest, src, src + num); - } - function emscripten_realloc_buffer(size) { - try { - wasmMemory.grow(size - buffer.byteLength + 65535 >>> 16); - updateGlobalBufferAndViews(wasmMemory.buffer); - return 1; - } catch (e) { - } - } - function _emscripten_resize_heap(requestedSize) { - var oldSize = HEAPU8.length; - requestedSize = requestedSize >>> 0; - var maxHeapSize = 2147483648; - if (requestedSize > maxHeapSize) { - return false; - } - for (var cutDown = 1; cutDown <= 4; cutDown *= 2) { - var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); - overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296); - var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536)); - var replacement = emscripten_realloc_buffer(newSize); - if (replacement) { - return true; - } - } - return false; - } - var SYSCALLS = { mappings: {}, buffers: [null, [], []], printChar: function(stream, curr) { - var buffer2 = SYSCALLS.buffers[stream]; - if (curr === 0 || curr === 10) { - (stream === 1 ? out : err)(UTF8ArrayToString(buffer2, 0)); - buffer2.length = 0; - } else { - buffer2.push(curr); - } - }, varargs: void 0, get: function() { - SYSCALLS.varargs += 4; - var ret = HEAP32[SYSCALLS.varargs - 4 >> 2]; - return ret; - }, getStr: function(ptr) { - var ret = UTF8ToString(ptr); - return ret; - }, get64: function(low, high) { - return low; - } }; - function _fd_close(fd) { - return 0; - } - function _fd_seek(fd, offset_low, offset_high, whence, newOffset) { - } - function _fd_write(fd, iov, iovcnt, pnum) { - var num = 0; - for (var i = 0; i < iovcnt; i++) { - var ptr = HEAP32[iov + i * 8 >> 2]; - var len = HEAP32[iov + (i * 8 + 4) >> 2]; - for (var j = 0; j < len; j++) { - SYSCALLS.printChar(fd, HEAPU8[ptr + j]); - } - num += len; - } - HEAP32[pnum >> 2] = num; - return 0; - } - function _setTempRet0($i) { - setTempRet0($i | 0); - } - InternalError = Module["InternalError"] = extendError(Error, "InternalError"); - embind_init_charCodes(); - BindingError = Module["BindingError"] = extendError(Error, "BindingError"); - init_ClassHandle(); - init_RegisteredPointer(); - init_embind(); - UnboundTypeError = Module["UnboundTypeError"] = extendError(Error, "UnboundTypeError"); - init_emval(); - var asmLibraryArg = { "t": __embind_finalize_value_object, "I": __embind_register_bool, "x": __embind_register_class, "w": __embind_register_class_constructor, "d": __embind_register_class_function, "k": __embind_register_constant, "H": __embind_register_emval, "n": __embind_register_enum, "a": __embind_register_enum_value, "A": __embind_register_float, "i": __embind_register_function, "j": __embind_register_integer, "h": __embind_register_memory_view, "B": __embind_register_std_string, "v": __embind_register_std_wstring, "u": __embind_register_value_object, "c": __embind_register_value_object_field, "J": __embind_register_void, "m": __emval_as, "s": __emval_call_void_method, "b": __emval_decref, "y": __emval_get_global, "p": __emval_get_method_caller, "r": __emval_get_module_property, "e": __emval_get_property, "g": __emval_incref, "q": __emval_new, "f": __emval_new_cstring, "l": __emval_run_destructors, "o": _abort, "E": _emscripten_memcpy_big, "F": _emscripten_resize_heap, "G": _fd_close, "C": _fd_seek, "z": _fd_write, "D": _setTempRet0 }; - var asm = createWasm(); - var ___wasm_call_ctors = Module["___wasm_call_ctors"] = function() { - return (___wasm_call_ctors = Module["___wasm_call_ctors"] = Module["asm"]["L"]).apply(null, arguments); - }; - var _malloc = Module["_malloc"] = function() { - return (_malloc = Module["_malloc"] = Module["asm"]["M"]).apply(null, arguments); - }; - var _free = Module["_free"] = function() { - return (_free = Module["_free"] = Module["asm"]["N"]).apply(null, arguments); - }; - var ___getTypeName = Module["___getTypeName"] = function() { - return (___getTypeName = Module["___getTypeName"] = Module["asm"]["P"]).apply(null, arguments); - }; - var ___embind_register_native_and_builtin_types = Module["___embind_register_native_and_builtin_types"] = function() { - return (___embind_register_native_and_builtin_types = Module["___embind_register_native_and_builtin_types"] = Module["asm"]["Q"]).apply(null, arguments); - }; - var dynCall_jiji = Module["dynCall_jiji"] = function() { - return (dynCall_jiji = Module["dynCall_jiji"] = Module["asm"]["R"]).apply(null, arguments); - }; - var calledRun; - function ExitStatus(status) { - this.name = "ExitStatus"; - this.message = "Program terminated with exit(" + status + ")"; - this.status = status; - } - dependenciesFulfilled = function runCaller() { - if (!calledRun) - run(); - if (!calledRun) - dependenciesFulfilled = runCaller; - }; - function run(args) { - args = args || arguments_; - if (runDependencies > 0) { - return; - } - preRun(); - if (runDependencies > 0) { - return; - } - function doRun() { - if (calledRun) - return; - calledRun = true; - Module["calledRun"] = true; - if (ABORT) - return; - initRuntime(); - preMain(); - readyPromiseResolve(Module); - if (Module["onRuntimeInitialized"]) - Module["onRuntimeInitialized"](); - postRun(); - } - if (Module["setStatus"]) { - Module["setStatus"]("Running..."); - setTimeout(function() { - setTimeout(function() { - Module["setStatus"](""); - }, 1); - doRun(); - }, 1); - } else { - doRun(); - } - } - Module["run"] = run; - if (Module["preInit"]) { - if (typeof Module["preInit"] == "function") - Module["preInit"] = [Module["preInit"]]; - while (Module["preInit"].length > 0) { - Module["preInit"].pop()(); - } - } - run(); - return BASIS2.ready; - }; -}(); -if (typeof exports === "object" && typeof module === "object") - module.exports = BASIS; -else if (typeof define === "function" && define["amd"]) - define([], function() { - return BASIS; - }); -else if (typeof exports === "object") - exports["BASIS"] = BASIS; diff --git a/debug/cesium/ThirdParty/Workers/draco_decoder_nodejs.js b/debug/cesium/ThirdParty/Workers/draco_decoder_nodejs.js deleted file mode 100644 index c11bcae..0000000 --- a/debug/cesium/ThirdParty/Workers/draco_decoder_nodejs.js +++ /dev/null @@ -1,1828 +0,0 @@ -var $jscomp = $jscomp || {}; -$jscomp.scope = {}; -$jscomp.arrayIteratorImpl = function(k) { - var n = 0; - return function() { - return n < k.length ? { done: false, value: k[n++] } : { done: true }; - }; -}; -$jscomp.arrayIterator = function(k) { - return { next: $jscomp.arrayIteratorImpl(k) }; -}; -$jscomp.makeIterator = function(k) { - var n = "undefined" != typeof Symbol && Symbol.iterator && k[Symbol.iterator]; - return n ? n.call(k) : $jscomp.arrayIterator(k); -}; -$jscomp.ASSUME_ES5 = false; -$jscomp.ASSUME_NO_NATIVE_MAP = false; -$jscomp.ASSUME_NO_NATIVE_SET = false; -$jscomp.SIMPLE_FROUND_POLYFILL = false; -$jscomp.ISOLATE_POLYFILLS = false; -$jscomp.FORCE_POLYFILL_PROMISE = false; -$jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION = false; -$jscomp.getGlobal = function(k) { - k = ["object" == typeof globalThis && globalThis, k, "object" == typeof window && window, "object" == typeof self && self, "object" == typeof global && global]; - for (var n = 0; n < k.length; ++n) { - var l = k[n]; - if (l && l.Math == Math) - return l; - } - throw Error("Cannot find global object"); -}; -$jscomp.global = $jscomp.getGlobal(this); -$jscomp.defineProperty = $jscomp.ASSUME_ES5 || "function" == typeof Object.defineProperties ? Object.defineProperty : function(k, n, l) { - if (k == Array.prototype || k == Object.prototype) - return k; - k[n] = l.value; - return k; -}; -$jscomp.IS_SYMBOL_NATIVE = "function" === typeof Symbol && "symbol" === typeof Symbol("x"); -$jscomp.TRUST_ES6_POLYFILLS = !$jscomp.ISOLATE_POLYFILLS || $jscomp.IS_SYMBOL_NATIVE; -$jscomp.polyfills = {}; -$jscomp.propertyToPolyfillSymbol = {}; -$jscomp.POLYFILL_PREFIX = "$jscp$"; -var $jscomp$lookupPolyfilledValue = function(k, n) { - var l = $jscomp.propertyToPolyfillSymbol[n]; - if (null == l) - return k[n]; - l = k[l]; - return void 0 !== l ? l : k[n]; -}; -$jscomp.polyfill = function(k, n, l, p) { - n && ($jscomp.ISOLATE_POLYFILLS ? $jscomp.polyfillIsolated(k, n, l, p) : $jscomp.polyfillUnisolated(k, n, l, p)); -}; -$jscomp.polyfillUnisolated = function(k, n, l, p) { - l = $jscomp.global; - k = k.split("."); - for (p = 0; p < k.length - 1; p++) { - var h = k[p]; - if (!(h in l)) - return; - l = l[h]; - } - k = k[k.length - 1]; - p = l[k]; - n = n(p); - n != p && null != n && $jscomp.defineProperty(l, k, { configurable: true, writable: true, value: n }); -}; -$jscomp.polyfillIsolated = function(k, n, l, p) { - var h = k.split("."); - k = 1 === h.length; - p = h[0]; - p = !k && p in $jscomp.polyfills ? $jscomp.polyfills : $jscomp.global; - for (var A = 0; A < h.length - 1; A++) { - var f = h[A]; - if (!(f in p)) - return; - p = p[f]; - } - h = h[h.length - 1]; - l = $jscomp.IS_SYMBOL_NATIVE && "es6" === l ? p[h] : null; - n = n(l); - null != n && (k ? $jscomp.defineProperty($jscomp.polyfills, h, { configurable: true, writable: true, value: n }) : n !== l && (void 0 === $jscomp.propertyToPolyfillSymbol[h] && (l = 1e9 * Math.random() >>> 0, $jscomp.propertyToPolyfillSymbol[h] = $jscomp.IS_SYMBOL_NATIVE ? $jscomp.global.Symbol(h) : $jscomp.POLYFILL_PREFIX + l + "$" + h), $jscomp.defineProperty(p, $jscomp.propertyToPolyfillSymbol[h], { configurable: true, writable: true, value: n }))); -}; -$jscomp.polyfill("Promise", function(k) { - function n() { - this.batch_ = null; - } - function l(f) { - return f instanceof h ? f : new h(function(q, v) { - q(f); - }); - } - if (k && (!($jscomp.FORCE_POLYFILL_PROMISE || $jscomp.FORCE_POLYFILL_PROMISE_WHEN_NO_UNHANDLED_REJECTION && "undefined" === typeof $jscomp.global.PromiseRejectionEvent) || !$jscomp.global.Promise || -1 === $jscomp.global.Promise.toString().indexOf("[native code]"))) - return k; - n.prototype.asyncExecute = function(f) { - if (null == this.batch_) { - this.batch_ = []; - var q = this; - this.asyncExecuteFunction(function() { - q.executeBatch_(); - }); - } - this.batch_.push(f); - }; - var p = $jscomp.global.setTimeout; - n.prototype.asyncExecuteFunction = function(f) { - p(f, 0); - }; - n.prototype.executeBatch_ = function() { - for (; this.batch_ && this.batch_.length; ) { - var f = this.batch_; - this.batch_ = []; - for (var q = 0; q < f.length; ++q) { - var v = f[q]; - f[q] = null; - try { - v(); - } catch (z) { - this.asyncThrow_(z); - } - } - } - this.batch_ = null; - }; - n.prototype.asyncThrow_ = function(f) { - this.asyncExecuteFunction(function() { - throw f; - }); - }; - var h = function(f) { - this.state_ = 0; - this.result_ = void 0; - this.onSettledCallbacks_ = []; - this.isRejectionHandled_ = false; - var q = this.createResolveAndReject_(); - try { - f(q.resolve, q.reject); - } catch (v) { - q.reject(v); - } - }; - h.prototype.createResolveAndReject_ = function() { - function f(z) { - return function(O) { - v || (v = true, z.call(q, O)); - }; - } - var q = this, v = false; - return { resolve: f(this.resolveTo_), reject: f(this.reject_) }; - }; - h.prototype.resolveTo_ = function(f) { - if (f === this) - this.reject_(new TypeError("A Promise cannot resolve to itself")); - else if (f instanceof h) - this.settleSameAsPromise_(f); - else { - a: - switch (typeof f) { - case "object": - var q = null != f; - break a; - case "function": - q = true; - break a; - default: - q = false; - } - q ? this.resolveToNonPromiseObj_(f) : this.fulfill_(f); - } - }; - h.prototype.resolveToNonPromiseObj_ = function(f) { - var q = void 0; - try { - q = f.then; - } catch (v) { - this.reject_(v); - return; - } - "function" == typeof q ? this.settleSameAsThenable_(q, f) : this.fulfill_(f); - }; - h.prototype.reject_ = function(f) { - this.settle_(2, f); - }; - h.prototype.fulfill_ = function(f) { - this.settle_(1, f); - }; - h.prototype.settle_ = function(f, q) { - if (0 != this.state_) - throw Error("Cannot settle(" + f + ", " + q + "): Promise already settled in state" + this.state_); - this.state_ = f; - this.result_ = q; - 2 === this.state_ && this.scheduleUnhandledRejectionCheck_(); - this.executeOnSettledCallbacks_(); - }; - h.prototype.scheduleUnhandledRejectionCheck_ = function() { - var f = this; - p(function() { - if (f.notifyUnhandledRejection_()) { - var q = $jscomp.global.console; - "undefined" !== typeof q && q.error(f.result_); - } - }, 1); - }; - h.prototype.notifyUnhandledRejection_ = function() { - if (this.isRejectionHandled_) - return false; - var f = $jscomp.global.CustomEvent, q = $jscomp.global.Event, v = $jscomp.global.dispatchEvent; - if ("undefined" === typeof v) - return true; - "function" === typeof f ? f = new f("unhandledrejection", { cancelable: true }) : "function" === typeof q ? f = new q("unhandledrejection", { cancelable: true }) : (f = $jscomp.global.document.createEvent("CustomEvent"), f.initCustomEvent("unhandledrejection", false, true, f)); - f.promise = this; - f.reason = this.result_; - return v(f); - }; - h.prototype.executeOnSettledCallbacks_ = function() { - if (null != this.onSettledCallbacks_) { - for (var f = 0; f < this.onSettledCallbacks_.length; ++f) - A.asyncExecute(this.onSettledCallbacks_[f]); - this.onSettledCallbacks_ = null; - } - }; - var A = new n(); - h.prototype.settleSameAsPromise_ = function(f) { - var q = this.createResolveAndReject_(); - f.callWhenSettled_(q.resolve, q.reject); - }; - h.prototype.settleSameAsThenable_ = function(f, q) { - var v = this.createResolveAndReject_(); - try { - f.call(q, v.resolve, v.reject); - } catch (z) { - v.reject(z); - } - }; - h.prototype.then = function(f, q) { - function v(t, x) { - return "function" == typeof t ? function(D) { - try { - z(t(D)); - } catch (R) { - O(R); - } - } : x; - } - var z, O, ba = new h(function(t, x) { - z = t; - O = x; - }); - this.callWhenSettled_(v(f, z), v(q, O)); - return ba; - }; - h.prototype.catch = function(f) { - return this.then(void 0, f); - }; - h.prototype.callWhenSettled_ = function(f, q) { - function v() { - switch (z.state_) { - case 1: - f(z.result_); - break; - case 2: - q(z.result_); - break; - default: - throw Error("Unexpected state: " + z.state_); - } - } - var z = this; - null == this.onSettledCallbacks_ ? A.asyncExecute(v) : this.onSettledCallbacks_.push(v); - this.isRejectionHandled_ = true; - }; - h.resolve = l; - h.reject = function(f) { - return new h(function(q, v) { - v(f); - }); - }; - h.race = function(f) { - return new h(function(q, v) { - for (var z = $jscomp.makeIterator(f), O = z.next(); !O.done; O = z.next()) - l(O.value).callWhenSettled_(q, v); - }); - }; - h.all = function(f) { - var q = $jscomp.makeIterator(f), v = q.next(); - return v.done ? l([]) : new h(function(z, O) { - function ba(D) { - return function(R) { - t[D] = R; - x--; - 0 == x && z(t); - }; - } - var t = [], x = 0; - do - t.push(void 0), x++, l(v.value).callWhenSettled_(ba(t.length - 1), O), v = q.next(); - while (!v.done); - }); - }; - return h; -}, "es6", "es3"); -$jscomp.owns = function(k, n) { - return Object.prototype.hasOwnProperty.call(k, n); -}; -$jscomp.assign = $jscomp.TRUST_ES6_POLYFILLS && "function" == typeof Object.assign ? Object.assign : function(k, n) { - for (var l = 1; l < arguments.length; l++) { - var p = arguments[l]; - if (p) - for (var h in p) - $jscomp.owns(p, h) && (k[h] = p[h]); - } - return k; -}; -$jscomp.polyfill("Object.assign", function(k) { - return k || $jscomp.assign; -}, "es6", "es3"); -$jscomp.checkStringArgs = function(k, n, l) { - if (null == k) - throw new TypeError("The 'this' value for String.prototype." + l + " must not be null or undefined"); - if (n instanceof RegExp) - throw new TypeError("First argument to String.prototype." + l + " must not be a regular expression"); - return k + ""; -}; -$jscomp.polyfill("String.prototype.startsWith", function(k) { - return k ? k : function(n, l) { - var p = $jscomp.checkStringArgs(this, n, "startsWith"); - n += ""; - var h = p.length, A = n.length; - l = Math.max(0, Math.min(l | 0, p.length)); - for (var f = 0; f < A && l < h; ) - if (p[l++] != n[f++]) - return false; - return f >= A; - }; -}, "es6", "es3"); -$jscomp.polyfill("Array.prototype.copyWithin", function(k) { - function n(l) { - l = Number(l); - return Infinity === l || -Infinity === l ? l : l | 0; - } - return k ? k : function(l, p, h) { - var A = this.length; - l = n(l); - p = n(p); - h = void 0 === h ? A : n(h); - l = 0 > l ? Math.max(A + l, 0) : Math.min(l, A); - p = 0 > p ? Math.max(A + p, 0) : Math.min(p, A); - h = 0 > h ? Math.max(A + h, 0) : Math.min(h, A); - if (l < p) - for (; p < h; ) - p in this ? this[l++] = this[p++] : (delete this[l++], p++); - else - for (h = Math.min(h, A + p - l), l += h - p; h > p; ) - --h in this ? this[--l] = this[h] : delete this[--l]; - return this; - }; -}, "es6", "es3"); -$jscomp.typedArrayCopyWithin = function(k) { - return k ? k : Array.prototype.copyWithin; -}; -$jscomp.polyfill("Int8Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -$jscomp.polyfill("Uint8Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -$jscomp.polyfill("Uint8ClampedArray.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -$jscomp.polyfill("Int16Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -$jscomp.polyfill("Uint16Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -$jscomp.polyfill("Int32Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -$jscomp.polyfill("Uint32Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -$jscomp.polyfill("Float32Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -$jscomp.polyfill("Float64Array.prototype.copyWithin", $jscomp.typedArrayCopyWithin, "es6", "es5"); -var DracoDecoderModule = function() { - var k = "undefined" !== typeof document && document.currentScript ? document.currentScript.src : void 0; - "undefined" !== typeof __filename && (k = k || __filename); - return function(n) { - function l(e) { - return a.locateFile ? a.locateFile(e, U) : U + e; - } - function p(e, b, c) { - var d = b + c; - for (c = b; e[c] && !(c >= d); ) - ++c; - if (16 < c - b && e.buffer && va) - return va.decode(e.subarray(b, c)); - for (d = ""; b < c; ) { - var g = e[b++]; - if (g & 128) { - var u = e[b++] & 63; - if (192 == (g & 224)) - d += String.fromCharCode((g & 31) << 6 | u); - else { - var X = e[b++] & 63; - g = 224 == (g & 240) ? (g & 15) << 12 | u << 6 | X : (g & 7) << 18 | u << 12 | X << 6 | e[b++] & 63; - 65536 > g ? d += String.fromCharCode(g) : (g -= 65536, d += String.fromCharCode(55296 | g >> 10, 56320 | g & 1023)); - } - } else - d += String.fromCharCode(g); - } - return d; - } - function h(e, b) { - return e ? p(ea, e, b) : ""; - } - function A() { - var e = ja.buffer; - a.HEAP8 = Y = new Int8Array(e); - a.HEAP16 = new Int16Array(e); - a.HEAP32 = ca = new Int32Array(e); - a.HEAPU8 = ea = new Uint8Array(e); - a.HEAPU16 = new Uint16Array(e); - a.HEAPU32 = V = new Uint32Array(e); - a.HEAPF32 = new Float32Array(e); - a.HEAPF64 = new Float64Array(e); - } - function f(e) { - if (a.onAbort) - a.onAbort(e); - e = "Aborted(" + e + ")"; - da(e); - wa = true; - e = new WebAssembly.RuntimeError(e + ". Build with -sASSERTIONS for more info."); - ka(e); - throw e; - } - function q(e) { - try { - if (e == P && fa) - return new Uint8Array(fa); - if (ma) - return ma(e); - throw "both async and sync fetching of the wasm failed"; - } catch (b) { - f(b); - } - } - function v() { - if (!fa && (xa || ha)) { - if ("function" == typeof fetch && !P.startsWith("file://")) - return fetch(P, { credentials: "same-origin" }).then(function(e) { - if (!e.ok) - throw "failed to load wasm binary file at '" + P + "'"; - return e.arrayBuffer(); - }).catch(function() { - return q(P); - }); - if (na) - return new Promise(function(e, b) { - na(P, function(c) { - e(new Uint8Array(c)); - }, b); - }); - } - return Promise.resolve().then(function() { - return q(P); - }); - } - function z(e) { - for (; 0 < e.length; ) - e.shift()(a); - } - function O(e) { - this.excPtr = e; - this.ptr = e - 24; - this.set_type = function(b) { - V[this.ptr + 4 >> 2] = b; - }; - this.get_type = function() { - return V[this.ptr + 4 >> 2]; - }; - this.set_destructor = function(b) { - V[this.ptr + 8 >> 2] = b; - }; - this.get_destructor = function() { - return V[this.ptr + 8 >> 2]; - }; - this.set_refcount = function(b) { - ca[this.ptr >> 2] = b; - }; - this.set_caught = function(b) { - Y[this.ptr + 12 >> 0] = b ? 1 : 0; - }; - this.get_caught = function() { - return 0 != Y[this.ptr + 12 >> 0]; - }; - this.set_rethrown = function(b) { - Y[this.ptr + 13 >> 0] = b ? 1 : 0; - }; - this.get_rethrown = function() { - return 0 != Y[this.ptr + 13 >> 0]; - }; - this.init = function(b, c) { - this.set_adjusted_ptr(0); - this.set_type(b); - this.set_destructor(c); - this.set_refcount(0); - this.set_caught(false); - this.set_rethrown(false); - }; - this.add_ref = function() { - ca[this.ptr >> 2] += 1; - }; - this.release_ref = function() { - var b = ca[this.ptr >> 2]; - ca[this.ptr >> 2] = b - 1; - return 1 === b; - }; - this.set_adjusted_ptr = function(b) { - V[this.ptr + 16 >> 2] = b; - }; - this.get_adjusted_ptr = function() { - return V[this.ptr + 16 >> 2]; - }; - this.get_exception_ptr = function() { - if (ya(this.get_type())) - return V[this.excPtr >> 2]; - var b = this.get_adjusted_ptr(); - return 0 !== b ? b : this.excPtr; - }; - } - function ba() { - function e() { - if (!la && (la = true, a.calledRun = true, !wa)) { - za = true; - z(oa); - Aa(a); - if (a.onRuntimeInitialized) - a.onRuntimeInitialized(); - if (a.postRun) - for ("function" == typeof a.postRun && (a.postRun = [a.postRun]); a.postRun.length; ) - Ba.unshift(a.postRun.shift()); - z(Ba); - } - } - if (!(0 < aa)) { - if (a.preRun) - for ("function" == typeof a.preRun && (a.preRun = [a.preRun]); a.preRun.length; ) - Ca.unshift(a.preRun.shift()); - z(Ca); - 0 < aa || (a.setStatus ? (a.setStatus("Running..."), setTimeout(function() { - setTimeout(function() { - a.setStatus(""); - }, 1); - e(); - }, 1)) : e()); - } - } - function t() { - } - function x(e) { - return (e || t).__cache__; - } - function D(e, b) { - var c = x(b), d = c[e]; - if (d) - return d; - d = Object.create((b || t).prototype); - d.ptr = e; - return c[e] = d; - } - function R(e) { - if ("string" === typeof e) { - for (var b = 0, c = 0; c < e.length; ++c) { - var d = e.charCodeAt(c); - 127 >= d ? b++ : 2047 >= d ? b += 2 : 55296 <= d && 57343 >= d ? (b += 4, ++c) : b += 3; - } - b = Array(b + 1); - c = 0; - d = b.length; - if (0 < d) { - d = c + d - 1; - for (var g = 0; g < e.length; ++g) { - var u = e.charCodeAt(g); - if (55296 <= u && 57343 >= u) { - var X = e.charCodeAt(++g); - u = 65536 + ((u & 1023) << 10) | X & 1023; - } - if (127 >= u) { - if (c >= d) - break; - b[c++] = u; - } else { - if (2047 >= u) { - if (c + 1 >= d) - break; - b[c++] = 192 | u >> 6; - } else { - if (65535 >= u) { - if (c + 2 >= d) - break; - b[c++] = 224 | u >> 12; - } else { - if (c + 3 >= d) - break; - b[c++] = 240 | u >> 18; - b[c++] = 128 | u >> 12 & 63; - } - b[c++] = 128 | u >> 6 & 63; - } - b[c++] = 128 | u & 63; - } - } - b[c] = 0; - } - e = r.alloc(b, Y); - r.copy(b, Y, e); - return e; - } - return e; - } - function pa(e) { - if ("object" === typeof e) { - var b = r.alloc(e, Y); - r.copy(e, Y, b); - return b; - } - return e; - } - function Z() { - throw "cannot construct a VoidPtr, no constructor in IDL"; - } - function S() { - this.ptr = Da(); - x(S)[this.ptr] = this; - } - function Q() { - this.ptr = Ea(); - x(Q)[this.ptr] = this; - } - function W() { - this.ptr = Fa(); - x(W)[this.ptr] = this; - } - function w() { - this.ptr = Ga(); - x(w)[this.ptr] = this; - } - function C() { - this.ptr = Ha(); - x(C)[this.ptr] = this; - } - function F() { - this.ptr = Ia(); - x(F)[this.ptr] = this; - } - function G() { - this.ptr = Ja(); - x(G)[this.ptr] = this; - } - function E() { - this.ptr = Ka(); - x(E)[this.ptr] = this; - } - function T() { - this.ptr = La(); - x(T)[this.ptr] = this; - } - function B() { - throw "cannot construct a Status, no constructor in IDL"; - } - function H() { - this.ptr = Ma(); - x(H)[this.ptr] = this; - } - function I() { - this.ptr = Na(); - x(I)[this.ptr] = this; - } - function J() { - this.ptr = Oa(); - x(J)[this.ptr] = this; - } - function K() { - this.ptr = Pa(); - x(K)[this.ptr] = this; - } - function L() { - this.ptr = Qa(); - x(L)[this.ptr] = this; - } - function M() { - this.ptr = Ra(); - x(M)[this.ptr] = this; - } - function N() { - this.ptr = Sa(); - x(N)[this.ptr] = this; - } - function y() { - this.ptr = Ta(); - x(y)[this.ptr] = this; - } - function m() { - this.ptr = Ua(); - x(m)[this.ptr] = this; - } - n = void 0 === n ? {} : n; - var a = "undefined" != typeof n ? n : {}, Aa, ka; - a.ready = new Promise(function(e, b) { - Aa = e; - ka = b; - }); - var Va = false, Wa = false; - a.onRuntimeInitialized = function() { - Va = true; - if (Wa && "function" === typeof a.onModuleLoaded) - a.onModuleLoaded(a); - }; - a.onModuleParsed = function() { - Wa = true; - if (Va && "function" === typeof a.onModuleLoaded) - a.onModuleLoaded(a); - }; - a.isVersionSupported = function(e) { - if ("string" !== typeof e) - return false; - e = e.split("."); - return 2 > e.length || 3 < e.length ? false : 1 == e[0] && 0 <= e[1] && 5 >= e[1] ? true : 0 != e[0] || 10 < e[1] ? false : true; - }; - var Xa = Object.assign({}, a), xa = "object" == typeof window, ha = "function" == typeof importScripts, Ya = "object" == typeof process && "object" == typeof process.versions && "string" == typeof process.versions.node, U = ""; - if (Ya) { - var Za = require("fs"), qa = require("path"); - U = ha ? qa.dirname(U) + "/" : __dirname + "/"; - var $a = function(e, b) { - e = e.startsWith("file://") ? new URL(e) : qa.normalize(e); - return Za.readFileSync(e, b ? void 0 : "utf8"); - }; - var ma = function(e) { - e = $a(e, true); - e.buffer || (e = new Uint8Array(e)); - return e; - }; - var na = function(e, b, c) { - e = e.startsWith("file://") ? new URL(e) : qa.normalize(e); - Za.readFile(e, function(d, g) { - d ? c(d) : b(g.buffer); - }); - }; - 1 < process.argv.length && process.argv[1].replace(/\\/g, "/"); - process.argv.slice(2); - a.inspect = function() { - return "[Emscripten Module object]"; - }; - } else if (xa || ha) - ha ? U = self.location.href : "undefined" != typeof document && document.currentScript && (U = document.currentScript.src), k && (U = k), U = 0 !== U.indexOf("blob:") ? U.substr(0, U.replace(/[?#].*/, "").lastIndexOf("/") + 1) : "", $a = function(e) { - var b = new XMLHttpRequest(); - b.open("GET", e, false); - b.send(null); - return b.responseText; - }, ha && (ma = function(e) { - var b = new XMLHttpRequest(); - b.open("GET", e, false); - b.responseType = "arraybuffer"; - b.send(null); - return new Uint8Array(b.response); - }), na = function(e, b, c) { - var d = new XMLHttpRequest(); - d.open("GET", e, true); - d.responseType = "arraybuffer"; - d.onload = function() { - 200 == d.status || 0 == d.status && d.response ? b(d.response) : c(); - }; - d.onerror = c; - d.send(null); - }; - var ud = a.print || console.log.bind(console), da = a.printErr || console.warn.bind(console); - Object.assign(a, Xa); - Xa = null; - var fa; - a.wasmBinary && (fa = a.wasmBinary); - "object" != typeof WebAssembly && f("no native wasm support detected"); - var ja, wa = false, va = "undefined" != typeof TextDecoder ? new TextDecoder("utf8") : void 0, Y, ea, ca, V, Ca = [], oa = [], Ba = [], za = false, aa = 0, ra = null, ia = null; - var P = "draco_decoder.wasm"; - P.startsWith("data:application/octet-stream;base64,") || (P = l(P)); - var vd = 0, wd = [null, [], []], xd = { b: function(e, b, c) { - new O(e).init(b, c); - vd++; - throw e; - }, a: function() { - f(""); - }, g: function(e, b, c) { - ea.copyWithin(e, b, b + c); - }, e: function(e) { - var b = ea.length; - e >>>= 0; - if (2147483648 < e) - return false; - for (var c = 1; 4 >= c; c *= 2) { - var d = b * (1 + 0.2 / c); - d = Math.min(d, e + 100663296); - var g = Math; - d = Math.max(e, d); - g = g.min.call(g, 2147483648, d + (65536 - d % 65536) % 65536); - a: { - d = ja.buffer; - try { - ja.grow(g - d.byteLength + 65535 >>> 16); - A(); - var u = 1; - break a; - } catch (X) { - } - u = void 0; - } - if (u) - return true; - } - return false; - }, f: function(e) { - return 52; - }, d: function(e, b, c, d, g) { - return 70; - }, c: function(e, b, c, d) { - for (var g = 0, u = 0; u < c; u++) { - var X = V[b >> 2], ab = V[b + 4 >> 2]; - b += 8; - for (var sa = 0; sa < ab; sa++) { - var ta = ea[X + sa], ua = wd[e]; - 0 === ta || 10 === ta ? ((1 === e ? ud : da)(p(ua, 0)), ua.length = 0) : ua.push(ta); - } - g += ab; - } - V[d >> 2] = g; - return 0; - } }; - (function() { - function e(g, u) { - a.asm = g.exports; - ja = a.asm.h; - A(); - oa.unshift(a.asm.i); - aa--; - a.monitorRunDependencies && a.monitorRunDependencies(aa); - 0 == aa && (null !== ra && (clearInterval(ra), ra = null), ia && (g = ia, ia = null, g())); - } - function b(g) { - e(g.instance); - } - function c(g) { - return v().then(function(u) { - return WebAssembly.instantiate(u, d); - }).then(function(u) { - return u; - }).then(g, function(u) { - da("failed to asynchronously prepare wasm: " + u); - f(u); - }); - } - var d = { a: xd }; - aa++; - a.monitorRunDependencies && a.monitorRunDependencies(aa); - if (a.instantiateWasm) - try { - return a.instantiateWasm(d, e); - } catch (g) { - da("Module.instantiateWasm callback failed with error: " + g), ka(g); - } - (function() { - return fa || "function" != typeof WebAssembly.instantiateStreaming || P.startsWith("data:application/octet-stream;base64,") || P.startsWith("file://") || Ya || "function" != typeof fetch ? c(b) : fetch(P, { credentials: "same-origin" }).then(function(g) { - return WebAssembly.instantiateStreaming(g, d).then(b, function(u) { - da("wasm streaming compile failed: " + u); - da("falling back to ArrayBuffer instantiation"); - return c(b); - }); - }); - })().catch(ka); - return {}; - })(); - var bb = a._emscripten_bind_VoidPtr___destroy___0 = function() { - return (bb = a._emscripten_bind_VoidPtr___destroy___0 = a.asm.k).apply(null, arguments); - }, Da = a._emscripten_bind_DecoderBuffer_DecoderBuffer_0 = function() { - return (Da = a._emscripten_bind_DecoderBuffer_DecoderBuffer_0 = a.asm.l).apply(null, arguments); - }, cb = a._emscripten_bind_DecoderBuffer_Init_2 = function() { - return (cb = a._emscripten_bind_DecoderBuffer_Init_2 = a.asm.m).apply(null, arguments); - }, db = a._emscripten_bind_DecoderBuffer___destroy___0 = function() { - return (db = a._emscripten_bind_DecoderBuffer___destroy___0 = a.asm.n).apply(null, arguments); - }, Ea = a._emscripten_bind_AttributeTransformData_AttributeTransformData_0 = function() { - return (Ea = a._emscripten_bind_AttributeTransformData_AttributeTransformData_0 = a.asm.o).apply(null, arguments); - }, eb = a._emscripten_bind_AttributeTransformData_transform_type_0 = function() { - return (eb = a._emscripten_bind_AttributeTransformData_transform_type_0 = a.asm.p).apply(null, arguments); - }, fb = a._emscripten_bind_AttributeTransformData___destroy___0 = function() { - return (fb = a._emscripten_bind_AttributeTransformData___destroy___0 = a.asm.q).apply(null, arguments); - }, Fa = a._emscripten_bind_GeometryAttribute_GeometryAttribute_0 = function() { - return (Fa = a._emscripten_bind_GeometryAttribute_GeometryAttribute_0 = a.asm.r).apply(null, arguments); - }, gb = a._emscripten_bind_GeometryAttribute___destroy___0 = function() { - return (gb = a._emscripten_bind_GeometryAttribute___destroy___0 = a.asm.s).apply(null, arguments); - }, Ga = a._emscripten_bind_PointAttribute_PointAttribute_0 = function() { - return (Ga = a._emscripten_bind_PointAttribute_PointAttribute_0 = a.asm.t).apply(null, arguments); - }, hb = a._emscripten_bind_PointAttribute_size_0 = function() { - return (hb = a._emscripten_bind_PointAttribute_size_0 = a.asm.u).apply(null, arguments); - }, ib = a._emscripten_bind_PointAttribute_GetAttributeTransformData_0 = function() { - return (ib = a._emscripten_bind_PointAttribute_GetAttributeTransformData_0 = a.asm.v).apply(null, arguments); - }, jb = a._emscripten_bind_PointAttribute_attribute_type_0 = function() { - return (jb = a._emscripten_bind_PointAttribute_attribute_type_0 = a.asm.w).apply(null, arguments); - }, kb = a._emscripten_bind_PointAttribute_data_type_0 = function() { - return (kb = a._emscripten_bind_PointAttribute_data_type_0 = a.asm.x).apply(null, arguments); - }, lb = a._emscripten_bind_PointAttribute_num_components_0 = function() { - return (lb = a._emscripten_bind_PointAttribute_num_components_0 = a.asm.y).apply(null, arguments); - }, mb = a._emscripten_bind_PointAttribute_normalized_0 = function() { - return (mb = a._emscripten_bind_PointAttribute_normalized_0 = a.asm.z).apply(null, arguments); - }, nb = a._emscripten_bind_PointAttribute_byte_stride_0 = function() { - return (nb = a._emscripten_bind_PointAttribute_byte_stride_0 = a.asm.A).apply(null, arguments); - }, ob = a._emscripten_bind_PointAttribute_byte_offset_0 = function() { - return (ob = a._emscripten_bind_PointAttribute_byte_offset_0 = a.asm.B).apply(null, arguments); - }, pb = a._emscripten_bind_PointAttribute_unique_id_0 = function() { - return (pb = a._emscripten_bind_PointAttribute_unique_id_0 = a.asm.C).apply(null, arguments); - }, qb = a._emscripten_bind_PointAttribute___destroy___0 = function() { - return (qb = a._emscripten_bind_PointAttribute___destroy___0 = a.asm.D).apply(null, arguments); - }, Ha = a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0 = function() { - return (Ha = a._emscripten_bind_AttributeQuantizationTransform_AttributeQuantizationTransform_0 = a.asm.E).apply(null, arguments); - }, rb = a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1 = function() { - return (rb = a._emscripten_bind_AttributeQuantizationTransform_InitFromAttribute_1 = a.asm.F).apply(null, arguments); - }, sb = a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0 = function() { - return (sb = a._emscripten_bind_AttributeQuantizationTransform_quantization_bits_0 = a.asm.G).apply(null, arguments); - }, tb = a._emscripten_bind_AttributeQuantizationTransform_min_value_1 = function() { - return (tb = a._emscripten_bind_AttributeQuantizationTransform_min_value_1 = a.asm.H).apply(null, arguments); - }, ub = a._emscripten_bind_AttributeQuantizationTransform_range_0 = function() { - return (ub = a._emscripten_bind_AttributeQuantizationTransform_range_0 = a.asm.I).apply(null, arguments); - }, vb = a._emscripten_bind_AttributeQuantizationTransform___destroy___0 = function() { - return (vb = a._emscripten_bind_AttributeQuantizationTransform___destroy___0 = a.asm.J).apply(null, arguments); - }, Ia = a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0 = function() { - return (Ia = a._emscripten_bind_AttributeOctahedronTransform_AttributeOctahedronTransform_0 = a.asm.K).apply(null, arguments); - }, wb = a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1 = function() { - return (wb = a._emscripten_bind_AttributeOctahedronTransform_InitFromAttribute_1 = a.asm.L).apply( - null, - arguments - ); - }, xb = a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0 = function() { - return (xb = a._emscripten_bind_AttributeOctahedronTransform_quantization_bits_0 = a.asm.M).apply(null, arguments); - }, yb = a._emscripten_bind_AttributeOctahedronTransform___destroy___0 = function() { - return (yb = a._emscripten_bind_AttributeOctahedronTransform___destroy___0 = a.asm.N).apply(null, arguments); - }, Ja = a._emscripten_bind_PointCloud_PointCloud_0 = function() { - return (Ja = a._emscripten_bind_PointCloud_PointCloud_0 = a.asm.O).apply( - null, - arguments - ); - }, zb = a._emscripten_bind_PointCloud_num_attributes_0 = function() { - return (zb = a._emscripten_bind_PointCloud_num_attributes_0 = a.asm.P).apply(null, arguments); - }, Ab = a._emscripten_bind_PointCloud_num_points_0 = function() { - return (Ab = a._emscripten_bind_PointCloud_num_points_0 = a.asm.Q).apply(null, arguments); - }, Bb = a._emscripten_bind_PointCloud___destroy___0 = function() { - return (Bb = a._emscripten_bind_PointCloud___destroy___0 = a.asm.R).apply(null, arguments); - }, Ka = a._emscripten_bind_Mesh_Mesh_0 = function() { - return (Ka = a._emscripten_bind_Mesh_Mesh_0 = a.asm.S).apply(null, arguments); - }, Cb = a._emscripten_bind_Mesh_num_faces_0 = function() { - return (Cb = a._emscripten_bind_Mesh_num_faces_0 = a.asm.T).apply(null, arguments); - }, Db = a._emscripten_bind_Mesh_num_attributes_0 = function() { - return (Db = a._emscripten_bind_Mesh_num_attributes_0 = a.asm.U).apply(null, arguments); - }, Eb = a._emscripten_bind_Mesh_num_points_0 = function() { - return (Eb = a._emscripten_bind_Mesh_num_points_0 = a.asm.V).apply(null, arguments); - }, Fb = a._emscripten_bind_Mesh___destroy___0 = function() { - return (Fb = a._emscripten_bind_Mesh___destroy___0 = a.asm.W).apply(null, arguments); - }, La = a._emscripten_bind_Metadata_Metadata_0 = function() { - return (La = a._emscripten_bind_Metadata_Metadata_0 = a.asm.X).apply(null, arguments); - }, Gb = a._emscripten_bind_Metadata___destroy___0 = function() { - return (Gb = a._emscripten_bind_Metadata___destroy___0 = a.asm.Y).apply(null, arguments); - }, Hb = a._emscripten_bind_Status_code_0 = function() { - return (Hb = a._emscripten_bind_Status_code_0 = a.asm.Z).apply(null, arguments); - }, Ib = a._emscripten_bind_Status_ok_0 = function() { - return (Ib = a._emscripten_bind_Status_ok_0 = a.asm._).apply(null, arguments); - }, Jb = a._emscripten_bind_Status_error_msg_0 = function() { - return (Jb = a._emscripten_bind_Status_error_msg_0 = a.asm.$).apply(null, arguments); - }, Kb = a._emscripten_bind_Status___destroy___0 = function() { - return (Kb = a._emscripten_bind_Status___destroy___0 = a.asm.aa).apply(null, arguments); - }, Ma = a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0 = function() { - return (Ma = a._emscripten_bind_DracoFloat32Array_DracoFloat32Array_0 = a.asm.ba).apply(null, arguments); - }, Lb = a._emscripten_bind_DracoFloat32Array_GetValue_1 = function() { - return (Lb = a._emscripten_bind_DracoFloat32Array_GetValue_1 = a.asm.ca).apply(null, arguments); - }, Mb = a._emscripten_bind_DracoFloat32Array_size_0 = function() { - return (Mb = a._emscripten_bind_DracoFloat32Array_size_0 = a.asm.da).apply(null, arguments); - }, Nb = a._emscripten_bind_DracoFloat32Array___destroy___0 = function() { - return (Nb = a._emscripten_bind_DracoFloat32Array___destroy___0 = a.asm.ea).apply(null, arguments); - }, Na = a._emscripten_bind_DracoInt8Array_DracoInt8Array_0 = function() { - return (Na = a._emscripten_bind_DracoInt8Array_DracoInt8Array_0 = a.asm.fa).apply(null, arguments); - }, Ob = a._emscripten_bind_DracoInt8Array_GetValue_1 = function() { - return (Ob = a._emscripten_bind_DracoInt8Array_GetValue_1 = a.asm.ga).apply(null, arguments); - }, Pb = a._emscripten_bind_DracoInt8Array_size_0 = function() { - return (Pb = a._emscripten_bind_DracoInt8Array_size_0 = a.asm.ha).apply(null, arguments); - }, Qb = a._emscripten_bind_DracoInt8Array___destroy___0 = function() { - return (Qb = a._emscripten_bind_DracoInt8Array___destroy___0 = a.asm.ia).apply(null, arguments); - }, Oa = a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0 = function() { - return (Oa = a._emscripten_bind_DracoUInt8Array_DracoUInt8Array_0 = a.asm.ja).apply(null, arguments); - }, Rb = a._emscripten_bind_DracoUInt8Array_GetValue_1 = function() { - return (Rb = a._emscripten_bind_DracoUInt8Array_GetValue_1 = a.asm.ka).apply(null, arguments); - }, Sb = a._emscripten_bind_DracoUInt8Array_size_0 = function() { - return (Sb = a._emscripten_bind_DracoUInt8Array_size_0 = a.asm.la).apply(null, arguments); - }, Tb = a._emscripten_bind_DracoUInt8Array___destroy___0 = function() { - return (Tb = a._emscripten_bind_DracoUInt8Array___destroy___0 = a.asm.ma).apply(null, arguments); - }, Pa = a._emscripten_bind_DracoInt16Array_DracoInt16Array_0 = function() { - return (Pa = a._emscripten_bind_DracoInt16Array_DracoInt16Array_0 = a.asm.na).apply(null, arguments); - }, Ub = a._emscripten_bind_DracoInt16Array_GetValue_1 = function() { - return (Ub = a._emscripten_bind_DracoInt16Array_GetValue_1 = a.asm.oa).apply(null, arguments); - }, Vb = a._emscripten_bind_DracoInt16Array_size_0 = function() { - return (Vb = a._emscripten_bind_DracoInt16Array_size_0 = a.asm.pa).apply(null, arguments); - }, Wb = a._emscripten_bind_DracoInt16Array___destroy___0 = function() { - return (Wb = a._emscripten_bind_DracoInt16Array___destroy___0 = a.asm.qa).apply(null, arguments); - }, Qa = a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0 = function() { - return (Qa = a._emscripten_bind_DracoUInt16Array_DracoUInt16Array_0 = a.asm.ra).apply(null, arguments); - }, Xb = a._emscripten_bind_DracoUInt16Array_GetValue_1 = function() { - return (Xb = a._emscripten_bind_DracoUInt16Array_GetValue_1 = a.asm.sa).apply(null, arguments); - }, Yb = a._emscripten_bind_DracoUInt16Array_size_0 = function() { - return (Yb = a._emscripten_bind_DracoUInt16Array_size_0 = a.asm.ta).apply(null, arguments); - }, Zb = a._emscripten_bind_DracoUInt16Array___destroy___0 = function() { - return (Zb = a._emscripten_bind_DracoUInt16Array___destroy___0 = a.asm.ua).apply(null, arguments); - }, Ra = a._emscripten_bind_DracoInt32Array_DracoInt32Array_0 = function() { - return (Ra = a._emscripten_bind_DracoInt32Array_DracoInt32Array_0 = a.asm.va).apply(null, arguments); - }, $b = a._emscripten_bind_DracoInt32Array_GetValue_1 = function() { - return ($b = a._emscripten_bind_DracoInt32Array_GetValue_1 = a.asm.wa).apply(null, arguments); - }, ac = a._emscripten_bind_DracoInt32Array_size_0 = function() { - return (ac = a._emscripten_bind_DracoInt32Array_size_0 = a.asm.xa).apply(null, arguments); - }, bc = a._emscripten_bind_DracoInt32Array___destroy___0 = function() { - return (bc = a._emscripten_bind_DracoInt32Array___destroy___0 = a.asm.ya).apply(null, arguments); - }, Sa = a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0 = function() { - return (Sa = a._emscripten_bind_DracoUInt32Array_DracoUInt32Array_0 = a.asm.za).apply(null, arguments); - }, cc = a._emscripten_bind_DracoUInt32Array_GetValue_1 = function() { - return (cc = a._emscripten_bind_DracoUInt32Array_GetValue_1 = a.asm.Aa).apply(null, arguments); - }, dc = a._emscripten_bind_DracoUInt32Array_size_0 = function() { - return (dc = a._emscripten_bind_DracoUInt32Array_size_0 = a.asm.Ba).apply(null, arguments); - }, ec = a._emscripten_bind_DracoUInt32Array___destroy___0 = function() { - return (ec = a._emscripten_bind_DracoUInt32Array___destroy___0 = a.asm.Ca).apply(null, arguments); - }, Ta = a._emscripten_bind_MetadataQuerier_MetadataQuerier_0 = function() { - return (Ta = a._emscripten_bind_MetadataQuerier_MetadataQuerier_0 = a.asm.Da).apply(null, arguments); - }, fc = a._emscripten_bind_MetadataQuerier_HasEntry_2 = function() { - return (fc = a._emscripten_bind_MetadataQuerier_HasEntry_2 = a.asm.Ea).apply(null, arguments); - }, gc = a._emscripten_bind_MetadataQuerier_GetIntEntry_2 = function() { - return (gc = a._emscripten_bind_MetadataQuerier_GetIntEntry_2 = a.asm.Fa).apply(null, arguments); - }, hc = a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3 = function() { - return (hc = a._emscripten_bind_MetadataQuerier_GetIntEntryArray_3 = a.asm.Ga).apply(null, arguments); - }, ic = a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2 = function() { - return (ic = a._emscripten_bind_MetadataQuerier_GetDoubleEntry_2 = a.asm.Ha).apply(null, arguments); - }, jc = a._emscripten_bind_MetadataQuerier_GetStringEntry_2 = function() { - return (jc = a._emscripten_bind_MetadataQuerier_GetStringEntry_2 = a.asm.Ia).apply(null, arguments); - }, kc = a._emscripten_bind_MetadataQuerier_NumEntries_1 = function() { - return (kc = a._emscripten_bind_MetadataQuerier_NumEntries_1 = a.asm.Ja).apply(null, arguments); - }, lc = a._emscripten_bind_MetadataQuerier_GetEntryName_2 = function() { - return (lc = a._emscripten_bind_MetadataQuerier_GetEntryName_2 = a.asm.Ka).apply(null, arguments); - }, mc = a._emscripten_bind_MetadataQuerier___destroy___0 = function() { - return (mc = a._emscripten_bind_MetadataQuerier___destroy___0 = a.asm.La).apply(null, arguments); - }, Ua = a._emscripten_bind_Decoder_Decoder_0 = function() { - return (Ua = a._emscripten_bind_Decoder_Decoder_0 = a.asm.Ma).apply(null, arguments); - }, nc = a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3 = function() { - return (nc = a._emscripten_bind_Decoder_DecodeArrayToPointCloud_3 = a.asm.Na).apply(null, arguments); - }, oc = a._emscripten_bind_Decoder_DecodeArrayToMesh_3 = function() { - return (oc = a._emscripten_bind_Decoder_DecodeArrayToMesh_3 = a.asm.Oa).apply(null, arguments); - }, pc = a._emscripten_bind_Decoder_GetAttributeId_2 = function() { - return (pc = a._emscripten_bind_Decoder_GetAttributeId_2 = a.asm.Pa).apply(null, arguments); - }, qc = a._emscripten_bind_Decoder_GetAttributeIdByName_2 = function() { - return (qc = a._emscripten_bind_Decoder_GetAttributeIdByName_2 = a.asm.Qa).apply(null, arguments); - }, rc = a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3 = function() { - return (rc = a._emscripten_bind_Decoder_GetAttributeIdByMetadataEntry_3 = a.asm.Ra).apply(null, arguments); - }, sc = a._emscripten_bind_Decoder_GetAttribute_2 = function() { - return (sc = a._emscripten_bind_Decoder_GetAttribute_2 = a.asm.Sa).apply(null, arguments); - }, tc = a._emscripten_bind_Decoder_GetAttributeByUniqueId_2 = function() { - return (tc = a._emscripten_bind_Decoder_GetAttributeByUniqueId_2 = a.asm.Ta).apply(null, arguments); - }, uc = a._emscripten_bind_Decoder_GetMetadata_1 = function() { - return (uc = a._emscripten_bind_Decoder_GetMetadata_1 = a.asm.Ua).apply(null, arguments); - }, vc = a._emscripten_bind_Decoder_GetAttributeMetadata_2 = function() { - return (vc = a._emscripten_bind_Decoder_GetAttributeMetadata_2 = a.asm.Va).apply(null, arguments); - }, wc = a._emscripten_bind_Decoder_GetFaceFromMesh_3 = function() { - return (wc = a._emscripten_bind_Decoder_GetFaceFromMesh_3 = a.asm.Wa).apply(null, arguments); - }, xc = a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2 = function() { - return (xc = a._emscripten_bind_Decoder_GetTriangleStripsFromMesh_2 = a.asm.Xa).apply(null, arguments); - }, yc = a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3 = function() { - return (yc = a._emscripten_bind_Decoder_GetTrianglesUInt16Array_3 = a.asm.Ya).apply(null, arguments); - }, zc = a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3 = function() { - return (zc = a._emscripten_bind_Decoder_GetTrianglesUInt32Array_3 = a.asm.Za).apply(null, arguments); - }, Ac = a._emscripten_bind_Decoder_GetAttributeFloat_3 = function() { - return (Ac = a._emscripten_bind_Decoder_GetAttributeFloat_3 = a.asm._a).apply(null, arguments); - }, Bc = a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3 = function() { - return (Bc = a._emscripten_bind_Decoder_GetAttributeFloatForAllPoints_3 = a.asm.$a).apply(null, arguments); - }, Cc = a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3 = function() { - return (Cc = a._emscripten_bind_Decoder_GetAttributeIntForAllPoints_3 = a.asm.ab).apply(null, arguments); - }, Dc = a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3 = function() { - return (Dc = a._emscripten_bind_Decoder_GetAttributeInt8ForAllPoints_3 = a.asm.bb).apply(null, arguments); - }, Ec = a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3 = function() { - return (Ec = a._emscripten_bind_Decoder_GetAttributeUInt8ForAllPoints_3 = a.asm.cb).apply(null, arguments); - }, Fc = a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3 = function() { - return (Fc = a._emscripten_bind_Decoder_GetAttributeInt16ForAllPoints_3 = a.asm.db).apply(null, arguments); - }, Gc = a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3 = function() { - return (Gc = a._emscripten_bind_Decoder_GetAttributeUInt16ForAllPoints_3 = a.asm.eb).apply(null, arguments); - }, Hc = a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3 = function() { - return (Hc = a._emscripten_bind_Decoder_GetAttributeInt32ForAllPoints_3 = a.asm.fb).apply(null, arguments); - }, Ic = a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3 = function() { - return (Ic = a._emscripten_bind_Decoder_GetAttributeUInt32ForAllPoints_3 = a.asm.gb).apply(null, arguments); - }, Jc = a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5 = function() { - return (Jc = a._emscripten_bind_Decoder_GetAttributeDataArrayForAllPoints_5 = a.asm.hb).apply(null, arguments); - }, Kc = a._emscripten_bind_Decoder_SkipAttributeTransform_1 = function() { - return (Kc = a._emscripten_bind_Decoder_SkipAttributeTransform_1 = a.asm.ib).apply(null, arguments); - }, Lc = a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1 = function() { - return (Lc = a._emscripten_bind_Decoder_GetEncodedGeometryType_Deprecated_1 = a.asm.jb).apply(null, arguments); - }, Mc = a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2 = function() { - return (Mc = a._emscripten_bind_Decoder_DecodeBufferToPointCloud_2 = a.asm.kb).apply(null, arguments); - }, Nc = a._emscripten_bind_Decoder_DecodeBufferToMesh_2 = function() { - return (Nc = a._emscripten_bind_Decoder_DecodeBufferToMesh_2 = a.asm.lb).apply(null, arguments); - }, Oc = a._emscripten_bind_Decoder___destroy___0 = function() { - return (Oc = a._emscripten_bind_Decoder___destroy___0 = a.asm.mb).apply(null, arguments); - }, Pc = a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM = function() { - return (Pc = a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_INVALID_TRANSFORM = a.asm.nb).apply(null, arguments); - }, Qc = a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM = function() { - return (Qc = a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_NO_TRANSFORM = a.asm.ob).apply(null, arguments); - }, Rc = a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM = function() { - return (Rc = a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_QUANTIZATION_TRANSFORM = a.asm.pb).apply(null, arguments); - }, Sc = a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM = function() { - return (Sc = a._emscripten_enum_draco_AttributeTransformType_ATTRIBUTE_OCTAHEDRON_TRANSFORM = a.asm.qb).apply(null, arguments); - }, Tc = a._emscripten_enum_draco_GeometryAttribute_Type_INVALID = function() { - return (Tc = a._emscripten_enum_draco_GeometryAttribute_Type_INVALID = a.asm.rb).apply(null, arguments); - }, Uc = a._emscripten_enum_draco_GeometryAttribute_Type_POSITION = function() { - return (Uc = a._emscripten_enum_draco_GeometryAttribute_Type_POSITION = a.asm.sb).apply(null, arguments); - }, Vc = a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL = function() { - return (Vc = a._emscripten_enum_draco_GeometryAttribute_Type_NORMAL = a.asm.tb).apply(null, arguments); - }, Wc = a._emscripten_enum_draco_GeometryAttribute_Type_COLOR = function() { - return (Wc = a._emscripten_enum_draco_GeometryAttribute_Type_COLOR = a.asm.ub).apply(null, arguments); - }, Xc = a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD = function() { - return (Xc = a._emscripten_enum_draco_GeometryAttribute_Type_TEX_COORD = a.asm.vb).apply(null, arguments); - }, Yc = a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC = function() { - return (Yc = a._emscripten_enum_draco_GeometryAttribute_Type_GENERIC = a.asm.wb).apply(null, arguments); - }, Zc = a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE = function() { - return (Zc = a._emscripten_enum_draco_EncodedGeometryType_INVALID_GEOMETRY_TYPE = a.asm.xb).apply(null, arguments); - }, $c = a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD = function() { - return ($c = a._emscripten_enum_draco_EncodedGeometryType_POINT_CLOUD = a.asm.yb).apply(null, arguments); - }, ad = a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH = function() { - return (ad = a._emscripten_enum_draco_EncodedGeometryType_TRIANGULAR_MESH = a.asm.zb).apply(null, arguments); - }, bd = a._emscripten_enum_draco_DataType_DT_INVALID = function() { - return (bd = a._emscripten_enum_draco_DataType_DT_INVALID = a.asm.Ab).apply(null, arguments); - }, cd = a._emscripten_enum_draco_DataType_DT_INT8 = function() { - return (cd = a._emscripten_enum_draco_DataType_DT_INT8 = a.asm.Bb).apply(null, arguments); - }, dd = a._emscripten_enum_draco_DataType_DT_UINT8 = function() { - return (dd = a._emscripten_enum_draco_DataType_DT_UINT8 = a.asm.Cb).apply(null, arguments); - }, ed = a._emscripten_enum_draco_DataType_DT_INT16 = function() { - return (ed = a._emscripten_enum_draco_DataType_DT_INT16 = a.asm.Db).apply(null, arguments); - }, fd = a._emscripten_enum_draco_DataType_DT_UINT16 = function() { - return (fd = a._emscripten_enum_draco_DataType_DT_UINT16 = a.asm.Eb).apply(null, arguments); - }, gd = a._emscripten_enum_draco_DataType_DT_INT32 = function() { - return (gd = a._emscripten_enum_draco_DataType_DT_INT32 = a.asm.Fb).apply(null, arguments); - }, hd = a._emscripten_enum_draco_DataType_DT_UINT32 = function() { - return (hd = a._emscripten_enum_draco_DataType_DT_UINT32 = a.asm.Gb).apply(null, arguments); - }, id = a._emscripten_enum_draco_DataType_DT_INT64 = function() { - return (id = a._emscripten_enum_draco_DataType_DT_INT64 = a.asm.Hb).apply(null, arguments); - }, jd = a._emscripten_enum_draco_DataType_DT_UINT64 = function() { - return (jd = a._emscripten_enum_draco_DataType_DT_UINT64 = a.asm.Ib).apply(null, arguments); - }, kd = a._emscripten_enum_draco_DataType_DT_FLOAT32 = function() { - return (kd = a._emscripten_enum_draco_DataType_DT_FLOAT32 = a.asm.Jb).apply( - null, - arguments - ); - }, ld = a._emscripten_enum_draco_DataType_DT_FLOAT64 = function() { - return (ld = a._emscripten_enum_draco_DataType_DT_FLOAT64 = a.asm.Kb).apply(null, arguments); - }, md = a._emscripten_enum_draco_DataType_DT_BOOL = function() { - return (md = a._emscripten_enum_draco_DataType_DT_BOOL = a.asm.Lb).apply(null, arguments); - }, nd = a._emscripten_enum_draco_DataType_DT_TYPES_COUNT = function() { - return (nd = a._emscripten_enum_draco_DataType_DT_TYPES_COUNT = a.asm.Mb).apply(null, arguments); - }, od = a._emscripten_enum_draco_StatusCode_OK = function() { - return (od = a._emscripten_enum_draco_StatusCode_OK = a.asm.Nb).apply(null, arguments); - }, pd = a._emscripten_enum_draco_StatusCode_DRACO_ERROR = function() { - return (pd = a._emscripten_enum_draco_StatusCode_DRACO_ERROR = a.asm.Ob).apply(null, arguments); - }, qd = a._emscripten_enum_draco_StatusCode_IO_ERROR = function() { - return (qd = a._emscripten_enum_draco_StatusCode_IO_ERROR = a.asm.Pb).apply(null, arguments); - }, rd = a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER = function() { - return (rd = a._emscripten_enum_draco_StatusCode_INVALID_PARAMETER = a.asm.Qb).apply(null, arguments); - }, sd = a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION = function() { - return (sd = a._emscripten_enum_draco_StatusCode_UNSUPPORTED_VERSION = a.asm.Rb).apply(null, arguments); - }, td = a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION = function() { - return (td = a._emscripten_enum_draco_StatusCode_UNKNOWN_VERSION = a.asm.Sb).apply(null, arguments); - }; - a._malloc = function() { - return (a._malloc = a.asm.Tb).apply(null, arguments); - }; - a._free = function() { - return (a._free = a.asm.Ub).apply(null, arguments); - }; - var ya = function() { - return (ya = a.asm.Vb).apply(null, arguments); - }; - a.___start_em_js = 15856; - a.___stop_em_js = 15954; - var la; - ia = function b() { - la || ba(); - la || (ia = b); - }; - if (a.preInit) - for ("function" == typeof a.preInit && (a.preInit = [a.preInit]); 0 < a.preInit.length; ) - a.preInit.pop()(); - ba(); - t.prototype = Object.create(t.prototype); - t.prototype.constructor = t; - t.prototype.__class__ = t; - t.__cache__ = {}; - a.WrapperObject = t; - a.getCache = x; - a.wrapPointer = D; - a.castObject = function(b, c) { - return D(b.ptr, c); - }; - a.NULL = D(0); - a.destroy = function(b) { - if (!b.__destroy__) - throw "Error: Cannot destroy object. (Did you create it yourself?)"; - b.__destroy__(); - delete x(b.__class__)[b.ptr]; - }; - a.compare = function(b, c) { - return b.ptr === c.ptr; - }; - a.getPointer = function(b) { - return b.ptr; - }; - a.getClass = function(b) { - return b.__class__; - }; - var r = { buffer: 0, size: 0, pos: 0, temps: [], needed: 0, prepare: function() { - if (r.needed) { - for (var b = 0; b < r.temps.length; b++) - a._free(r.temps[b]); - r.temps.length = 0; - a._free(r.buffer); - r.buffer = 0; - r.size += r.needed; - r.needed = 0; - } - r.buffer || (r.size += 128, r.buffer = a._malloc(r.size), r.buffer || f(void 0)); - r.pos = 0; - }, alloc: function(b, c) { - r.buffer || f(void 0); - b = b.length * c.BYTES_PER_ELEMENT; - b = b + 7 & -8; - r.pos + b >= r.size ? (0 < b || f(void 0), r.needed += b, c = a._malloc(b), r.temps.push(c)) : (c = r.buffer + r.pos, r.pos += b); - return c; - }, copy: function(b, c, d) { - d >>>= 0; - switch (c.BYTES_PER_ELEMENT) { - case 2: - d >>>= 1; - break; - case 4: - d >>>= 2; - break; - case 8: - d >>>= 3; - } - for (var g = 0; g < b.length; g++) - c[d + g] = b[g]; - } }; - Z.prototype = Object.create(t.prototype); - Z.prototype.constructor = Z; - Z.prototype.__class__ = Z; - Z.__cache__ = {}; - a.VoidPtr = Z; - Z.prototype.__destroy__ = Z.prototype.__destroy__ = function() { - bb(this.ptr); - }; - S.prototype = Object.create(t.prototype); - S.prototype.constructor = S; - S.prototype.__class__ = S; - S.__cache__ = {}; - a.DecoderBuffer = S; - S.prototype.Init = S.prototype.Init = function(b, c) { - var d = this.ptr; - r.prepare(); - "object" == typeof b && (b = pa(b)); - c && "object" === typeof c && (c = c.ptr); - cb(d, b, c); - }; - S.prototype.__destroy__ = S.prototype.__destroy__ = function() { - db(this.ptr); - }; - Q.prototype = Object.create(t.prototype); - Q.prototype.constructor = Q; - Q.prototype.__class__ = Q; - Q.__cache__ = {}; - a.AttributeTransformData = Q; - Q.prototype.transform_type = Q.prototype.transform_type = function() { - return eb(this.ptr); - }; - Q.prototype.__destroy__ = Q.prototype.__destroy__ = function() { - fb(this.ptr); - }; - W.prototype = Object.create(t.prototype); - W.prototype.constructor = W; - W.prototype.__class__ = W; - W.__cache__ = {}; - a.GeometryAttribute = W; - W.prototype.__destroy__ = W.prototype.__destroy__ = function() { - gb(this.ptr); - }; - w.prototype = Object.create(t.prototype); - w.prototype.constructor = w; - w.prototype.__class__ = w; - w.__cache__ = {}; - a.PointAttribute = w; - w.prototype.size = w.prototype.size = function() { - return hb(this.ptr); - }; - w.prototype.GetAttributeTransformData = w.prototype.GetAttributeTransformData = function() { - return D(ib(this.ptr), Q); - }; - w.prototype.attribute_type = w.prototype.attribute_type = function() { - return jb(this.ptr); - }; - w.prototype.data_type = w.prototype.data_type = function() { - return kb(this.ptr); - }; - w.prototype.num_components = w.prototype.num_components = function() { - return lb(this.ptr); - }; - w.prototype.normalized = w.prototype.normalized = function() { - return !!mb(this.ptr); - }; - w.prototype.byte_stride = w.prototype.byte_stride = function() { - return nb(this.ptr); - }; - w.prototype.byte_offset = w.prototype.byte_offset = function() { - return ob(this.ptr); - }; - w.prototype.unique_id = w.prototype.unique_id = function() { - return pb(this.ptr); - }; - w.prototype.__destroy__ = w.prototype.__destroy__ = function() { - qb(this.ptr); - }; - C.prototype = Object.create(t.prototype); - C.prototype.constructor = C; - C.prototype.__class__ = C; - C.__cache__ = {}; - a.AttributeQuantizationTransform = C; - C.prototype.InitFromAttribute = C.prototype.InitFromAttribute = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return !!rb(c, b); - }; - C.prototype.quantization_bits = C.prototype.quantization_bits = function() { - return sb(this.ptr); - }; - C.prototype.min_value = C.prototype.min_value = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return tb(c, b); - }; - C.prototype.range = C.prototype.range = function() { - return ub(this.ptr); - }; - C.prototype.__destroy__ = C.prototype.__destroy__ = function() { - vb(this.ptr); - }; - F.prototype = Object.create(t.prototype); - F.prototype.constructor = F; - F.prototype.__class__ = F; - F.__cache__ = {}; - a.AttributeOctahedronTransform = F; - F.prototype.InitFromAttribute = F.prototype.InitFromAttribute = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return !!wb(c, b); - }; - F.prototype.quantization_bits = F.prototype.quantization_bits = function() { - return xb(this.ptr); - }; - F.prototype.__destroy__ = F.prototype.__destroy__ = function() { - yb(this.ptr); - }; - G.prototype = Object.create(t.prototype); - G.prototype.constructor = G; - G.prototype.__class__ = G; - G.__cache__ = {}; - a.PointCloud = G; - G.prototype.num_attributes = G.prototype.num_attributes = function() { - return zb(this.ptr); - }; - G.prototype.num_points = G.prototype.num_points = function() { - return Ab(this.ptr); - }; - G.prototype.__destroy__ = G.prototype.__destroy__ = function() { - Bb(this.ptr); - }; - E.prototype = Object.create(t.prototype); - E.prototype.constructor = E; - E.prototype.__class__ = E; - E.__cache__ = {}; - a.Mesh = E; - E.prototype.num_faces = E.prototype.num_faces = function() { - return Cb(this.ptr); - }; - E.prototype.num_attributes = E.prototype.num_attributes = function() { - return Db(this.ptr); - }; - E.prototype.num_points = E.prototype.num_points = function() { - return Eb(this.ptr); - }; - E.prototype.__destroy__ = E.prototype.__destroy__ = function() { - Fb(this.ptr); - }; - T.prototype = Object.create(t.prototype); - T.prototype.constructor = T; - T.prototype.__class__ = T; - T.__cache__ = {}; - a.Metadata = T; - T.prototype.__destroy__ = T.prototype.__destroy__ = function() { - Gb(this.ptr); - }; - B.prototype = Object.create(t.prototype); - B.prototype.constructor = B; - B.prototype.__class__ = B; - B.__cache__ = {}; - a.Status = B; - B.prototype.code = B.prototype.code = function() { - return Hb(this.ptr); - }; - B.prototype.ok = B.prototype.ok = function() { - return !!Ib(this.ptr); - }; - B.prototype.error_msg = B.prototype.error_msg = function() { - return h(Jb(this.ptr)); - }; - B.prototype.__destroy__ = B.prototype.__destroy__ = function() { - Kb(this.ptr); - }; - H.prototype = Object.create(t.prototype); - H.prototype.constructor = H; - H.prototype.__class__ = H; - H.__cache__ = {}; - a.DracoFloat32Array = H; - H.prototype.GetValue = H.prototype.GetValue = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return Lb(c, b); - }; - H.prototype.size = H.prototype.size = function() { - return Mb(this.ptr); - }; - H.prototype.__destroy__ = H.prototype.__destroy__ = function() { - Nb(this.ptr); - }; - I.prototype = Object.create(t.prototype); - I.prototype.constructor = I; - I.prototype.__class__ = I; - I.__cache__ = {}; - a.DracoInt8Array = I; - I.prototype.GetValue = I.prototype.GetValue = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return Ob(c, b); - }; - I.prototype.size = I.prototype.size = function() { - return Pb(this.ptr); - }; - I.prototype.__destroy__ = I.prototype.__destroy__ = function() { - Qb(this.ptr); - }; - J.prototype = Object.create(t.prototype); - J.prototype.constructor = J; - J.prototype.__class__ = J; - J.__cache__ = {}; - a.DracoUInt8Array = J; - J.prototype.GetValue = J.prototype.GetValue = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return Rb(c, b); - }; - J.prototype.size = J.prototype.size = function() { - return Sb(this.ptr); - }; - J.prototype.__destroy__ = J.prototype.__destroy__ = function() { - Tb(this.ptr); - }; - K.prototype = Object.create(t.prototype); - K.prototype.constructor = K; - K.prototype.__class__ = K; - K.__cache__ = {}; - a.DracoInt16Array = K; - K.prototype.GetValue = K.prototype.GetValue = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return Ub(c, b); - }; - K.prototype.size = K.prototype.size = function() { - return Vb(this.ptr); - }; - K.prototype.__destroy__ = K.prototype.__destroy__ = function() { - Wb(this.ptr); - }; - L.prototype = Object.create(t.prototype); - L.prototype.constructor = L; - L.prototype.__class__ = L; - L.__cache__ = {}; - a.DracoUInt16Array = L; - L.prototype.GetValue = L.prototype.GetValue = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return Xb(c, b); - }; - L.prototype.size = L.prototype.size = function() { - return Yb(this.ptr); - }; - L.prototype.__destroy__ = L.prototype.__destroy__ = function() { - Zb(this.ptr); - }; - M.prototype = Object.create(t.prototype); - M.prototype.constructor = M; - M.prototype.__class__ = M; - M.__cache__ = {}; - a.DracoInt32Array = M; - M.prototype.GetValue = M.prototype.GetValue = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return $b(c, b); - }; - M.prototype.size = M.prototype.size = function() { - return ac(this.ptr); - }; - M.prototype.__destroy__ = M.prototype.__destroy__ = function() { - bc(this.ptr); - }; - N.prototype = Object.create(t.prototype); - N.prototype.constructor = N; - N.prototype.__class__ = N; - N.__cache__ = {}; - a.DracoUInt32Array = N; - N.prototype.GetValue = N.prototype.GetValue = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return cc(c, b); - }; - N.prototype.size = N.prototype.size = function() { - return dc(this.ptr); - }; - N.prototype.__destroy__ = N.prototype.__destroy__ = function() { - ec(this.ptr); - }; - y.prototype = Object.create(t.prototype); - y.prototype.constructor = y; - y.prototype.__class__ = y; - y.__cache__ = {}; - a.MetadataQuerier = y; - y.prototype.HasEntry = y.prototype.HasEntry = function(b, c) { - var d = this.ptr; - r.prepare(); - b && "object" === typeof b && (b = b.ptr); - c = c && "object" === typeof c ? c.ptr : R(c); - return !!fc(d, b, c); - }; - y.prototype.GetIntEntry = y.prototype.GetIntEntry = function(b, c) { - var d = this.ptr; - r.prepare(); - b && "object" === typeof b && (b = b.ptr); - c = c && "object" === typeof c ? c.ptr : R(c); - return gc(d, b, c); - }; - y.prototype.GetIntEntryArray = y.prototype.GetIntEntryArray = function(b, c, d) { - var g = this.ptr; - r.prepare(); - b && "object" === typeof b && (b = b.ptr); - c = c && "object" === typeof c ? c.ptr : R(c); - d && "object" === typeof d && (d = d.ptr); - hc(g, b, c, d); - }; - y.prototype.GetDoubleEntry = y.prototype.GetDoubleEntry = function(b, c) { - var d = this.ptr; - r.prepare(); - b && "object" === typeof b && (b = b.ptr); - c = c && "object" === typeof c ? c.ptr : R(c); - return ic(d, b, c); - }; - y.prototype.GetStringEntry = y.prototype.GetStringEntry = function(b, c) { - var d = this.ptr; - r.prepare(); - b && "object" === typeof b && (b = b.ptr); - c = c && "object" === typeof c ? c.ptr : R(c); - return h(jc(d, b, c)); - }; - y.prototype.NumEntries = y.prototype.NumEntries = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return kc(c, b); - }; - y.prototype.GetEntryName = y.prototype.GetEntryName = function(b, c) { - var d = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - return h(lc(d, b, c)); - }; - y.prototype.__destroy__ = y.prototype.__destroy__ = function() { - mc(this.ptr); - }; - m.prototype = Object.create(t.prototype); - m.prototype.constructor = m; - m.prototype.__class__ = m; - m.__cache__ = {}; - a.Decoder = m; - m.prototype.DecodeArrayToPointCloud = m.prototype.DecodeArrayToPointCloud = function(b, c, d) { - var g = this.ptr; - r.prepare(); - "object" == typeof b && (b = pa(b)); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return D(nc(g, b, c, d), B); - }; - m.prototype.DecodeArrayToMesh = m.prototype.DecodeArrayToMesh = function(b, c, d) { - var g = this.ptr; - r.prepare(); - "object" == typeof b && (b = pa(b)); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return D(oc(g, b, c, d), B); - }; - m.prototype.GetAttributeId = m.prototype.GetAttributeId = function(b, c) { - var d = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - return pc(d, b, c); - }; - m.prototype.GetAttributeIdByName = m.prototype.GetAttributeIdByName = function(b, c) { - var d = this.ptr; - r.prepare(); - b && "object" === typeof b && (b = b.ptr); - c = c && "object" === typeof c ? c.ptr : R(c); - return qc(d, b, c); - }; - m.prototype.GetAttributeIdByMetadataEntry = m.prototype.GetAttributeIdByMetadataEntry = function(b, c, d) { - var g = this.ptr; - r.prepare(); - b && "object" === typeof b && (b = b.ptr); - c = c && "object" === typeof c ? c.ptr : R(c); - d = d && "object" === typeof d ? d.ptr : R(d); - return rc(g, b, c, d); - }; - m.prototype.GetAttribute = m.prototype.GetAttribute = function(b, c) { - var d = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - return D(sc(d, b, c), w); - }; - m.prototype.GetAttributeByUniqueId = m.prototype.GetAttributeByUniqueId = function(b, c) { - var d = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - return D(tc(d, b, c), w); - }; - m.prototype.GetMetadata = m.prototype.GetMetadata = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return D(uc(c, b), T); - }; - m.prototype.GetAttributeMetadata = m.prototype.GetAttributeMetadata = function(b, c) { - var d = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - return D(vc(d, b, c), T); - }; - m.prototype.GetFaceFromMesh = m.prototype.GetFaceFromMesh = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!wc(g, b, c, d); - }; - m.prototype.GetTriangleStripsFromMesh = m.prototype.GetTriangleStripsFromMesh = function(b, c) { - var d = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - return xc(d, b, c); - }; - m.prototype.GetTrianglesUInt16Array = m.prototype.GetTrianglesUInt16Array = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!yc(g, b, c, d); - }; - m.prototype.GetTrianglesUInt32Array = m.prototype.GetTrianglesUInt32Array = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!zc(g, b, c, d); - }; - m.prototype.GetAttributeFloat = m.prototype.GetAttributeFloat = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Ac(g, b, c, d); - }; - m.prototype.GetAttributeFloatForAllPoints = m.prototype.GetAttributeFloatForAllPoints = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Bc(g, b, c, d); - }; - m.prototype.GetAttributeIntForAllPoints = m.prototype.GetAttributeIntForAllPoints = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Cc(g, b, c, d); - }; - m.prototype.GetAttributeInt8ForAllPoints = m.prototype.GetAttributeInt8ForAllPoints = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Dc(g, b, c, d); - }; - m.prototype.GetAttributeUInt8ForAllPoints = m.prototype.GetAttributeUInt8ForAllPoints = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Ec(g, b, c, d); - }; - m.prototype.GetAttributeInt16ForAllPoints = m.prototype.GetAttributeInt16ForAllPoints = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Fc(g, b, c, d); - }; - m.prototype.GetAttributeUInt16ForAllPoints = m.prototype.GetAttributeUInt16ForAllPoints = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Gc(g, b, c, d); - }; - m.prototype.GetAttributeInt32ForAllPoints = m.prototype.GetAttributeInt32ForAllPoints = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Hc(g, b, c, d); - }; - m.prototype.GetAttributeUInt32ForAllPoints = m.prototype.GetAttributeUInt32ForAllPoints = function(b, c, d) { - var g = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - return !!Ic(g, b, c, d); - }; - m.prototype.GetAttributeDataArrayForAllPoints = m.prototype.GetAttributeDataArrayForAllPoints = function(b, c, d, g, u) { - var X = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - d && "object" === typeof d && (d = d.ptr); - g && "object" === typeof g && (g = g.ptr); - u && "object" === typeof u && (u = u.ptr); - return !!Jc(X, b, c, d, g, u); - }; - m.prototype.SkipAttributeTransform = m.prototype.SkipAttributeTransform = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - Kc(c, b); - }; - m.prototype.GetEncodedGeometryType_Deprecated = m.prototype.GetEncodedGeometryType_Deprecated = function(b) { - var c = this.ptr; - b && "object" === typeof b && (b = b.ptr); - return Lc(c, b); - }; - m.prototype.DecodeBufferToPointCloud = m.prototype.DecodeBufferToPointCloud = function(b, c) { - var d = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - return D(Mc(d, b, c), B); - }; - m.prototype.DecodeBufferToMesh = m.prototype.DecodeBufferToMesh = function(b, c) { - var d = this.ptr; - b && "object" === typeof b && (b = b.ptr); - c && "object" === typeof c && (c = c.ptr); - return D(Nc(d, b, c), B); - }; - m.prototype.__destroy__ = m.prototype.__destroy__ = function() { - Oc(this.ptr); - }; - (function() { - function b() { - a.ATTRIBUTE_INVALID_TRANSFORM = Pc(); - a.ATTRIBUTE_NO_TRANSFORM = Qc(); - a.ATTRIBUTE_QUANTIZATION_TRANSFORM = Rc(); - a.ATTRIBUTE_OCTAHEDRON_TRANSFORM = Sc(); - a.INVALID = Tc(); - a.POSITION = Uc(); - a.NORMAL = Vc(); - a.COLOR = Wc(); - a.TEX_COORD = Xc(); - a.GENERIC = Yc(); - a.INVALID_GEOMETRY_TYPE = Zc(); - a.POINT_CLOUD = $c(); - a.TRIANGULAR_MESH = ad(); - a.DT_INVALID = bd(); - a.DT_INT8 = cd(); - a.DT_UINT8 = dd(); - a.DT_INT16 = ed(); - a.DT_UINT16 = fd(); - a.DT_INT32 = gd(); - a.DT_UINT32 = hd(); - a.DT_INT64 = id(); - a.DT_UINT64 = jd(); - a.DT_FLOAT32 = kd(); - a.DT_FLOAT64 = ld(); - a.DT_BOOL = md(); - a.DT_TYPES_COUNT = nd(); - a.OK = od(); - a.DRACO_ERROR = pd(); - a.IO_ERROR = qd(); - a.INVALID_PARAMETER = rd(); - a.UNSUPPORTED_VERSION = sd(); - a.UNKNOWN_VERSION = td(); - } - za ? b() : oa.unshift(b); - })(); - if ("function" === typeof a.onModuleParsed) - a.onModuleParsed(); - a.Decoder.prototype.GetEncodedGeometryType = function(b) { - if (b.__class__ && b.__class__ === a.DecoderBuffer) - return a.Decoder.prototype.GetEncodedGeometryType_Deprecated(b); - if (8 > b.byteLength) - return a.INVALID_GEOMETRY_TYPE; - switch (b[7]) { - case 0: - return a.POINT_CLOUD; - case 1: - return a.TRIANGULAR_MESH; - default: - return a.INVALID_GEOMETRY_TYPE; - } - }; - return n.ready; - }; -}(); -"object" === typeof exports && "object" === typeof module ? module.exports = DracoDecoderModule : "function" === typeof define && define.amd ? define([], function() { - return DracoDecoderModule; -}) : "object" === typeof exports && (exports.DracoDecoderModule = DracoDecoderModule); diff --git a/debug/cesium/ThirdParty/Workers/package.js b/debug/cesium/ThirdParty/Workers/package.js deleted file mode 100644 index 958f65d..0000000 --- a/debug/cesium/ThirdParty/Workers/package.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = { type: "commonjs" }; diff --git a/debug/cesium/ThirdParty/Workers/package.json b/debug/cesium/ThirdParty/Workers/package.json deleted file mode 100644 index 0292b99..0000000 --- a/debug/cesium/ThirdParty/Workers/package.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"commonjs"} \ No newline at end of file diff --git a/debug/cesium/ThirdParty/Workers/pako_deflate.min.js b/debug/cesium/ThirdParty/Workers/pako_deflate.min.js deleted file mode 100644 index df9a324..0000000 --- a/debug/cesium/ThirdParty/Workers/pako_deflate.min.js +++ /dev/null @@ -1,605 +0,0 @@ -/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */ -!function(t, e) { - "object" == typeof exports && "undefined" != typeof module ? e(exports) : "function" == typeof define && define.amd ? define(["exports"], e) : e((t = "undefined" != typeof globalThis ? globalThis : t || self).pako = {}); -}(this, function(t) { - "use strict"; - function e(t2) { - let e2 = t2.length; - for (; --e2 >= 0; ) - t2[e2] = 0; - } - const a = 256, s = 286, n = 30, r = 15, i = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0]), _ = new Uint8Array([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13]), l = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7]), h = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]), o = new Array(576); - e(o); - const d = new Array(60); - e(d); - const u = new Array(512); - e(u); - const f = new Array(256); - e(f); - const c = new Array(29); - e(c); - const p = new Array(n); - function g(t2, e2, a2, s2, n2) { - this.static_tree = t2, this.extra_bits = e2, this.extra_base = a2, this.elems = s2, this.max_length = n2, this.has_stree = t2 && t2.length; - } - let w, m, b; - function y(t2, e2) { - this.dyn_tree = t2, this.max_code = 0, this.stat_desc = e2; - } - e(p); - const v = (t2) => t2 < 256 ? u[t2] : u[256 + (t2 >>> 7)], z = (t2, e2) => { - t2.pending_buf[t2.pending++] = 255 & e2, t2.pending_buf[t2.pending++] = e2 >>> 8 & 255; - }, k = (t2, e2, a2) => { - t2.bi_valid > 16 - a2 ? (t2.bi_buf |= e2 << t2.bi_valid & 65535, z(t2, t2.bi_buf), t2.bi_buf = e2 >> 16 - t2.bi_valid, t2.bi_valid += a2 - 16) : (t2.bi_buf |= e2 << t2.bi_valid & 65535, t2.bi_valid += a2); - }, x = (t2, e2, a2) => { - k(t2, a2[2 * e2], a2[2 * e2 + 1]); - }, A = (t2, e2) => { - let a2 = 0; - do { - a2 |= 1 & t2, t2 >>>= 1, a2 <<= 1; - } while (--e2 > 0); - return a2 >>> 1; - }, E = (t2, e2, a2) => { - const s2 = new Array(16); - let n2, i2, _2 = 0; - for (n2 = 1; n2 <= r; n2++) - _2 = _2 + a2[n2 - 1] << 1, s2[n2] = _2; - for (i2 = 0; i2 <= e2; i2++) { - let e3 = t2[2 * i2 + 1]; - 0 !== e3 && (t2[2 * i2] = A(s2[e3]++, e3)); - } - }, Z = (t2) => { - let e2; - for (e2 = 0; e2 < s; e2++) - t2.dyn_ltree[2 * e2] = 0; - for (e2 = 0; e2 < n; e2++) - t2.dyn_dtree[2 * e2] = 0; - for (e2 = 0; e2 < 19; e2++) - t2.bl_tree[2 * e2] = 0; - t2.dyn_ltree[512] = 1, t2.opt_len = t2.static_len = 0, t2.sym_next = t2.matches = 0; - }, U = (t2) => { - t2.bi_valid > 8 ? z(t2, t2.bi_buf) : t2.bi_valid > 0 && (t2.pending_buf[t2.pending++] = t2.bi_buf), t2.bi_buf = 0, t2.bi_valid = 0; - }, R = (t2, e2, a2, s2) => { - const n2 = 2 * e2, r2 = 2 * a2; - return t2[n2] < t2[r2] || t2[n2] === t2[r2] && s2[e2] <= s2[a2]; - }, S = (t2, e2, a2) => { - const s2 = t2.heap[a2]; - let n2 = a2 << 1; - for (; n2 <= t2.heap_len && (n2 < t2.heap_len && R(e2, t2.heap[n2 + 1], t2.heap[n2], t2.depth) && n2++, !R(e2, s2, t2.heap[n2], t2.depth)); ) - t2.heap[a2] = t2.heap[n2], a2 = n2, n2 <<= 1; - t2.heap[a2] = s2; - }, T = (t2, e2, s2) => { - let n2, r2, l2, h2, o2 = 0; - if (0 !== t2.sym_next) - do { - n2 = 255 & t2.pending_buf[t2.sym_buf + o2++], n2 += (255 & t2.pending_buf[t2.sym_buf + o2++]) << 8, r2 = t2.pending_buf[t2.sym_buf + o2++], 0 === n2 ? x(t2, r2, e2) : (l2 = f[r2], x(t2, l2 + a + 1, e2), h2 = i[l2], 0 !== h2 && (r2 -= c[l2], k(t2, r2, h2)), n2--, l2 = v(n2), x(t2, l2, s2), h2 = _[l2], 0 !== h2 && (n2 -= p[l2], k(t2, n2, h2))); - } while (o2 < t2.sym_next); - x(t2, 256, e2); - }, L = (t2, e2) => { - const a2 = e2.dyn_tree, s2 = e2.stat_desc.static_tree, n2 = e2.stat_desc.has_stree, i2 = e2.stat_desc.elems; - let _2, l2, h2, o2 = -1; - for (t2.heap_len = 0, t2.heap_max = 573, _2 = 0; _2 < i2; _2++) - 0 !== a2[2 * _2] ? (t2.heap[++t2.heap_len] = o2 = _2, t2.depth[_2] = 0) : a2[2 * _2 + 1] = 0; - for (; t2.heap_len < 2; ) - h2 = t2.heap[++t2.heap_len] = o2 < 2 ? ++o2 : 0, a2[2 * h2] = 1, t2.depth[h2] = 0, t2.opt_len--, n2 && (t2.static_len -= s2[2 * h2 + 1]); - for (e2.max_code = o2, _2 = t2.heap_len >> 1; _2 >= 1; _2--) - S(t2, a2, _2); - h2 = i2; - do { - _2 = t2.heap[1], t2.heap[1] = t2.heap[t2.heap_len--], S(t2, a2, 1), l2 = t2.heap[1], t2.heap[--t2.heap_max] = _2, t2.heap[--t2.heap_max] = l2, a2[2 * h2] = a2[2 * _2] + a2[2 * l2], t2.depth[h2] = (t2.depth[_2] >= t2.depth[l2] ? t2.depth[_2] : t2.depth[l2]) + 1, a2[2 * _2 + 1] = a2[2 * l2 + 1] = h2, t2.heap[1] = h2++, S(t2, a2, 1); - } while (t2.heap_len >= 2); - t2.heap[--t2.heap_max] = t2.heap[1], ((t3, e3) => { - const a3 = e3.dyn_tree, s3 = e3.max_code, n3 = e3.stat_desc.static_tree, i3 = e3.stat_desc.has_stree, _3 = e3.stat_desc.extra_bits, l3 = e3.stat_desc.extra_base, h3 = e3.stat_desc.max_length; - let o3, d2, u2, f2, c2, p2, g2 = 0; - for (f2 = 0; f2 <= r; f2++) - t3.bl_count[f2] = 0; - for (a3[2 * t3.heap[t3.heap_max] + 1] = 0, o3 = t3.heap_max + 1; o3 < 573; o3++) - d2 = t3.heap[o3], f2 = a3[2 * a3[2 * d2 + 1] + 1] + 1, f2 > h3 && (f2 = h3, g2++), a3[2 * d2 + 1] = f2, d2 > s3 || (t3.bl_count[f2]++, c2 = 0, d2 >= l3 && (c2 = _3[d2 - l3]), p2 = a3[2 * d2], t3.opt_len += p2 * (f2 + c2), i3 && (t3.static_len += p2 * (n3[2 * d2 + 1] + c2))); - if (0 !== g2) { - do { - for (f2 = h3 - 1; 0 === t3.bl_count[f2]; ) - f2--; - t3.bl_count[f2]--, t3.bl_count[f2 + 1] += 2, t3.bl_count[h3]--, g2 -= 2; - } while (g2 > 0); - for (f2 = h3; 0 !== f2; f2--) - for (d2 = t3.bl_count[f2]; 0 !== d2; ) - u2 = t3.heap[--o3], u2 > s3 || (a3[2 * u2 + 1] !== f2 && (t3.opt_len += (f2 - a3[2 * u2 + 1]) * a3[2 * u2], a3[2 * u2 + 1] = f2), d2--); - } - })(t2, e2), E(a2, o2, t2.bl_count); - }, F = (t2, e2, a2) => { - let s2, n2, r2 = -1, i2 = e2[1], _2 = 0, l2 = 7, h2 = 4; - for (0 === i2 && (l2 = 138, h2 = 3), e2[2 * (a2 + 1) + 1] = 65535, s2 = 0; s2 <= a2; s2++) - n2 = i2, i2 = e2[2 * (s2 + 1) + 1], ++_2 < l2 && n2 === i2 || (_2 < h2 ? t2.bl_tree[2 * n2] += _2 : 0 !== n2 ? (n2 !== r2 && t2.bl_tree[2 * n2]++, t2.bl_tree[32]++) : _2 <= 10 ? t2.bl_tree[34]++ : t2.bl_tree[36]++, _2 = 0, r2 = n2, 0 === i2 ? (l2 = 138, h2 = 3) : n2 === i2 ? (l2 = 6, h2 = 3) : (l2 = 7, h2 = 4)); - }, O = (t2, e2, a2) => { - let s2, n2, r2 = -1, i2 = e2[1], _2 = 0, l2 = 7, h2 = 4; - for (0 === i2 && (l2 = 138, h2 = 3), s2 = 0; s2 <= a2; s2++) - if (n2 = i2, i2 = e2[2 * (s2 + 1) + 1], !(++_2 < l2 && n2 === i2)) { - if (_2 < h2) - do { - x(t2, n2, t2.bl_tree); - } while (0 != --_2); - else - 0 !== n2 ? (n2 !== r2 && (x(t2, n2, t2.bl_tree), _2--), x(t2, 16, t2.bl_tree), k(t2, _2 - 3, 2)) : _2 <= 10 ? (x(t2, 17, t2.bl_tree), k(t2, _2 - 3, 3)) : (x(t2, 18, t2.bl_tree), k(t2, _2 - 11, 7)); - _2 = 0, r2 = n2, 0 === i2 ? (l2 = 138, h2 = 3) : n2 === i2 ? (l2 = 6, h2 = 3) : (l2 = 7, h2 = 4); - } - }; - let D = false; - const N = (t2, e2, a2, s2) => { - k(t2, 0 + (s2 ? 1 : 0), 3), U(t2), z(t2, a2), z(t2, ~a2), a2 && t2.pending_buf.set(t2.window.subarray(e2, e2 + a2), t2.pending), t2.pending += a2; - }; - var I = (t2, e2, s2, n2) => { - let r2, i2, _2 = 0; - t2.level > 0 ? (2 === t2.strm.data_type && (t2.strm.data_type = ((t3) => { - let e3, s3 = 4093624447; - for (e3 = 0; e3 <= 31; e3++, s3 >>>= 1) - if (1 & s3 && 0 !== t3.dyn_ltree[2 * e3]) - return 0; - if (0 !== t3.dyn_ltree[18] || 0 !== t3.dyn_ltree[20] || 0 !== t3.dyn_ltree[26]) - return 1; - for (e3 = 32; e3 < a; e3++) - if (0 !== t3.dyn_ltree[2 * e3]) - return 1; - return 0; - })(t2)), L(t2, t2.l_desc), L(t2, t2.d_desc), _2 = ((t3) => { - let e3; - for (F(t3, t3.dyn_ltree, t3.l_desc.max_code), F(t3, t3.dyn_dtree, t3.d_desc.max_code), L(t3, t3.bl_desc), e3 = 18; e3 >= 3 && 0 === t3.bl_tree[2 * h[e3] + 1]; e3--) - ; - return t3.opt_len += 3 * (e3 + 1) + 5 + 5 + 4, e3; - })(t2), r2 = t2.opt_len + 3 + 7 >>> 3, i2 = t2.static_len + 3 + 7 >>> 3, i2 <= r2 && (r2 = i2)) : r2 = i2 = s2 + 5, s2 + 4 <= r2 && -1 !== e2 ? N(t2, e2, s2, n2) : 4 === t2.strategy || i2 === r2 ? (k(t2, 2 + (n2 ? 1 : 0), 3), T(t2, o, d)) : (k(t2, 4 + (n2 ? 1 : 0), 3), ((t3, e3, a2, s3) => { - let n3; - for (k(t3, e3 - 257, 5), k(t3, a2 - 1, 5), k(t3, s3 - 4, 4), n3 = 0; n3 < s3; n3++) - k(t3, t3.bl_tree[2 * h[n3] + 1], 3); - O(t3, t3.dyn_ltree, e3 - 1), O(t3, t3.dyn_dtree, a2 - 1); - })(t2, t2.l_desc.max_code + 1, t2.d_desc.max_code + 1, _2 + 1), T(t2, t2.dyn_ltree, t2.dyn_dtree)), Z(t2), n2 && U(t2); - }, C = { _tr_init: (t2) => { - D || ((() => { - let t3, e2, a2, h2, y2; - const v2 = new Array(16); - for (a2 = 0, h2 = 0; h2 < 28; h2++) - for (c[h2] = a2, t3 = 0; t3 < 1 << i[h2]; t3++) - f[a2++] = h2; - for (f[a2 - 1] = h2, y2 = 0, h2 = 0; h2 < 16; h2++) - for (p[h2] = y2, t3 = 0; t3 < 1 << _[h2]; t3++) - u[y2++] = h2; - for (y2 >>= 7; h2 < n; h2++) - for (p[h2] = y2 << 7, t3 = 0; t3 < 1 << _[h2] - 7; t3++) - u[256 + y2++] = h2; - for (e2 = 0; e2 <= r; e2++) - v2[e2] = 0; - for (t3 = 0; t3 <= 143; ) - o[2 * t3 + 1] = 8, t3++, v2[8]++; - for (; t3 <= 255; ) - o[2 * t3 + 1] = 9, t3++, v2[9]++; - for (; t3 <= 279; ) - o[2 * t3 + 1] = 7, t3++, v2[7]++; - for (; t3 <= 287; ) - o[2 * t3 + 1] = 8, t3++, v2[8]++; - for (E(o, 287, v2), t3 = 0; t3 < n; t3++) - d[2 * t3 + 1] = 5, d[2 * t3] = A(t3, 5); - w = new g(o, i, 257, s, r), m = new g(d, _, 0, n, r), b = new g(new Array(0), l, 0, 19, 7); - })(), D = true), t2.l_desc = new y(t2.dyn_ltree, w), t2.d_desc = new y(t2.dyn_dtree, m), t2.bl_desc = new y(t2.bl_tree, b), t2.bi_buf = 0, t2.bi_valid = 0, Z(t2); - }, _tr_stored_block: N, _tr_flush_block: I, _tr_tally: (t2, e2, s2) => (t2.pending_buf[t2.sym_buf + t2.sym_next++] = e2, t2.pending_buf[t2.sym_buf + t2.sym_next++] = e2 >> 8, t2.pending_buf[t2.sym_buf + t2.sym_next++] = s2, 0 === e2 ? t2.dyn_ltree[2 * s2]++ : (t2.matches++, e2--, t2.dyn_ltree[2 * (f[s2] + a + 1)]++, t2.dyn_dtree[2 * v(e2)]++), t2.sym_next === t2.sym_end), _tr_align: (t2) => { - k(t2, 2, 3), x(t2, 256, o), ((t3) => { - 16 === t3.bi_valid ? (z(t3, t3.bi_buf), t3.bi_buf = 0, t3.bi_valid = 0) : t3.bi_valid >= 8 && (t3.pending_buf[t3.pending++] = 255 & t3.bi_buf, t3.bi_buf >>= 8, t3.bi_valid -= 8); - })(t2); - } }; - var B = (t2, e2, a2, s2) => { - let n2 = 65535 & t2 | 0, r2 = t2 >>> 16 & 65535 | 0, i2 = 0; - for (; 0 !== a2; ) { - i2 = a2 > 2e3 ? 2e3 : a2, a2 -= i2; - do { - n2 = n2 + e2[s2++] | 0, r2 = r2 + n2 | 0; - } while (--i2); - n2 %= 65521, r2 %= 65521; - } - return n2 | r2 << 16 | 0; - }; - const H = new Uint32Array((() => { - let t2, e2 = []; - for (var a2 = 0; a2 < 256; a2++) { - t2 = a2; - for (var s2 = 0; s2 < 8; s2++) - t2 = 1 & t2 ? 3988292384 ^ t2 >>> 1 : t2 >>> 1; - e2[a2] = t2; - } - return e2; - })()); - var M = (t2, e2, a2, s2) => { - const n2 = H, r2 = s2 + a2; - t2 ^= -1; - for (let a3 = s2; a3 < r2; a3++) - t2 = t2 >>> 8 ^ n2[255 & (t2 ^ e2[a3])]; - return -1 ^ t2; - }, P = { 2: "need dictionary", 1: "stream end", 0: "", "-1": "file error", "-2": "stream error", "-3": "data error", "-4": "insufficient memory", "-5": "buffer error", "-6": "incompatible version" }, j = { Z_NO_FLUSH: 0, Z_PARTIAL_FLUSH: 1, Z_SYNC_FLUSH: 2, Z_FULL_FLUSH: 3, Z_FINISH: 4, Z_BLOCK: 5, Z_TREES: 6, Z_OK: 0, Z_STREAM_END: 1, Z_NEED_DICT: 2, Z_ERRNO: -1, Z_STREAM_ERROR: -2, Z_DATA_ERROR: -3, Z_MEM_ERROR: -4, Z_BUF_ERROR: -5, Z_NO_COMPRESSION: 0, Z_BEST_SPEED: 1, Z_BEST_COMPRESSION: 9, Z_DEFAULT_COMPRESSION: -1, Z_FILTERED: 1, Z_HUFFMAN_ONLY: 2, Z_RLE: 3, Z_FIXED: 4, Z_DEFAULT_STRATEGY: 0, Z_BINARY: 0, Z_TEXT: 1, Z_UNKNOWN: 2, Z_DEFLATED: 8 }; - const { _tr_init: K, _tr_stored_block: Y, _tr_flush_block: G, _tr_tally: X, _tr_align: W } = C, { Z_NO_FLUSH: q, Z_PARTIAL_FLUSH: J, Z_FULL_FLUSH: Q, Z_FINISH: V, Z_BLOCK: $, Z_OK: tt, Z_STREAM_END: et, Z_STREAM_ERROR: at, Z_DATA_ERROR: st, Z_BUF_ERROR: nt, Z_DEFAULT_COMPRESSION: rt, Z_FILTERED: it, Z_HUFFMAN_ONLY: _t, Z_RLE: lt, Z_FIXED: ht, Z_DEFAULT_STRATEGY: ot, Z_UNKNOWN: dt, Z_DEFLATED: ut } = j, ft = 258, ct = 262, pt = 42, gt = 113, wt = 666, mt = (t2, e2) => (t2.msg = P[e2], e2), bt = (t2) => 2 * t2 - (t2 > 4 ? 9 : 0), yt = (t2) => { - let e2 = t2.length; - for (; --e2 >= 0; ) - t2[e2] = 0; - }, vt = (t2) => { - let e2, a2, s2, n2 = t2.w_size; - e2 = t2.hash_size, s2 = e2; - do { - a2 = t2.head[--s2], t2.head[s2] = a2 >= n2 ? a2 - n2 : 0; - } while (--e2); - e2 = n2, s2 = e2; - do { - a2 = t2.prev[--s2], t2.prev[s2] = a2 >= n2 ? a2 - n2 : 0; - } while (--e2); - }; - let zt = (t2, e2, a2) => (e2 << t2.hash_shift ^ a2) & t2.hash_mask; - const kt = (t2) => { - const e2 = t2.state; - let a2 = e2.pending; - a2 > t2.avail_out && (a2 = t2.avail_out), 0 !== a2 && (t2.output.set(e2.pending_buf.subarray(e2.pending_out, e2.pending_out + a2), t2.next_out), t2.next_out += a2, e2.pending_out += a2, t2.total_out += a2, t2.avail_out -= a2, e2.pending -= a2, 0 === e2.pending && (e2.pending_out = 0)); - }, xt = (t2, e2) => { - G(t2, t2.block_start >= 0 ? t2.block_start : -1, t2.strstart - t2.block_start, e2), t2.block_start = t2.strstart, kt(t2.strm); - }, At = (t2, e2) => { - t2.pending_buf[t2.pending++] = e2; - }, Et = (t2, e2) => { - t2.pending_buf[t2.pending++] = e2 >>> 8 & 255, t2.pending_buf[t2.pending++] = 255 & e2; - }, Zt = (t2, e2, a2, s2) => { - let n2 = t2.avail_in; - return n2 > s2 && (n2 = s2), 0 === n2 ? 0 : (t2.avail_in -= n2, e2.set(t2.input.subarray(t2.next_in, t2.next_in + n2), a2), 1 === t2.state.wrap ? t2.adler = B(t2.adler, e2, n2, a2) : 2 === t2.state.wrap && (t2.adler = M(t2.adler, e2, n2, a2)), t2.next_in += n2, t2.total_in += n2, n2); - }, Ut = (t2, e2) => { - let a2, s2, n2 = t2.max_chain_length, r2 = t2.strstart, i2 = t2.prev_length, _2 = t2.nice_match; - const l2 = t2.strstart > t2.w_size - ct ? t2.strstart - (t2.w_size - ct) : 0, h2 = t2.window, o2 = t2.w_mask, d2 = t2.prev, u2 = t2.strstart + ft; - let f2 = h2[r2 + i2 - 1], c2 = h2[r2 + i2]; - t2.prev_length >= t2.good_match && (n2 >>= 2), _2 > t2.lookahead && (_2 = t2.lookahead); - do { - if (a2 = e2, h2[a2 + i2] === c2 && h2[a2 + i2 - 1] === f2 && h2[a2] === h2[r2] && h2[++a2] === h2[r2 + 1]) { - r2 += 2, a2++; - do { - } while (h2[++r2] === h2[++a2] && h2[++r2] === h2[++a2] && h2[++r2] === h2[++a2] && h2[++r2] === h2[++a2] && h2[++r2] === h2[++a2] && h2[++r2] === h2[++a2] && h2[++r2] === h2[++a2] && h2[++r2] === h2[++a2] && r2 < u2); - if (s2 = ft - (u2 - r2), r2 = u2 - ft, s2 > i2) { - if (t2.match_start = e2, i2 = s2, s2 >= _2) - break; - f2 = h2[r2 + i2 - 1], c2 = h2[r2 + i2]; - } - } - } while ((e2 = d2[e2 & o2]) > l2 && 0 != --n2); - return i2 <= t2.lookahead ? i2 : t2.lookahead; - }, Rt = (t2) => { - const e2 = t2.w_size; - let a2, s2, n2; - do { - if (s2 = t2.window_size - t2.lookahead - t2.strstart, t2.strstart >= e2 + (e2 - ct) && (t2.window.set(t2.window.subarray(e2, e2 + e2 - s2), 0), t2.match_start -= e2, t2.strstart -= e2, t2.block_start -= e2, t2.insert > t2.strstart && (t2.insert = t2.strstart), vt(t2), s2 += e2), 0 === t2.strm.avail_in) - break; - if (a2 = Zt(t2.strm, t2.window, t2.strstart + t2.lookahead, s2), t2.lookahead += a2, t2.lookahead + t2.insert >= 3) - for (n2 = t2.strstart - t2.insert, t2.ins_h = t2.window[n2], t2.ins_h = zt(t2, t2.ins_h, t2.window[n2 + 1]); t2.insert && (t2.ins_h = zt(t2, t2.ins_h, t2.window[n2 + 3 - 1]), t2.prev[n2 & t2.w_mask] = t2.head[t2.ins_h], t2.head[t2.ins_h] = n2, n2++, t2.insert--, !(t2.lookahead + t2.insert < 3)); ) - ; - } while (t2.lookahead < ct && 0 !== t2.strm.avail_in); - }, St = (t2, e2) => { - let a2, s2, n2, r2 = t2.pending_buf_size - 5 > t2.w_size ? t2.w_size : t2.pending_buf_size - 5, i2 = 0, _2 = t2.strm.avail_in; - do { - if (a2 = 65535, n2 = t2.bi_valid + 42 >> 3, t2.strm.avail_out < n2) - break; - if (n2 = t2.strm.avail_out - n2, s2 = t2.strstart - t2.block_start, a2 > s2 + t2.strm.avail_in && (a2 = s2 + t2.strm.avail_in), a2 > n2 && (a2 = n2), a2 < r2 && (0 === a2 && e2 !== V || e2 === q || a2 !== s2 + t2.strm.avail_in)) - break; - i2 = e2 === V && a2 === s2 + t2.strm.avail_in ? 1 : 0, Y(t2, 0, 0, i2), t2.pending_buf[t2.pending - 4] = a2, t2.pending_buf[t2.pending - 3] = a2 >> 8, t2.pending_buf[t2.pending - 2] = ~a2, t2.pending_buf[t2.pending - 1] = ~a2 >> 8, kt(t2.strm), s2 && (s2 > a2 && (s2 = a2), t2.strm.output.set(t2.window.subarray(t2.block_start, t2.block_start + s2), t2.strm.next_out), t2.strm.next_out += s2, t2.strm.avail_out -= s2, t2.strm.total_out += s2, t2.block_start += s2, a2 -= s2), a2 && (Zt(t2.strm, t2.strm.output, t2.strm.next_out, a2), t2.strm.next_out += a2, t2.strm.avail_out -= a2, t2.strm.total_out += a2); - } while (0 === i2); - return _2 -= t2.strm.avail_in, _2 && (_2 >= t2.w_size ? (t2.matches = 2, t2.window.set(t2.strm.input.subarray(t2.strm.next_in - t2.w_size, t2.strm.next_in), 0), t2.strstart = t2.w_size, t2.insert = t2.strstart) : (t2.window_size - t2.strstart <= _2 && (t2.strstart -= t2.w_size, t2.window.set(t2.window.subarray(t2.w_size, t2.w_size + t2.strstart), 0), t2.matches < 2 && t2.matches++, t2.insert > t2.strstart && (t2.insert = t2.strstart)), t2.window.set(t2.strm.input.subarray(t2.strm.next_in - _2, t2.strm.next_in), t2.strstart), t2.strstart += _2, t2.insert += _2 > t2.w_size - t2.insert ? t2.w_size - t2.insert : _2), t2.block_start = t2.strstart), t2.high_water < t2.strstart && (t2.high_water = t2.strstart), i2 ? 4 : e2 !== q && e2 !== V && 0 === t2.strm.avail_in && t2.strstart === t2.block_start ? 2 : (n2 = t2.window_size - t2.strstart, t2.strm.avail_in > n2 && t2.block_start >= t2.w_size && (t2.block_start -= t2.w_size, t2.strstart -= t2.w_size, t2.window.set(t2.window.subarray(t2.w_size, t2.w_size + t2.strstart), 0), t2.matches < 2 && t2.matches++, n2 += t2.w_size, t2.insert > t2.strstart && (t2.insert = t2.strstart)), n2 > t2.strm.avail_in && (n2 = t2.strm.avail_in), n2 && (Zt(t2.strm, t2.window, t2.strstart, n2), t2.strstart += n2, t2.insert += n2 > t2.w_size - t2.insert ? t2.w_size - t2.insert : n2), t2.high_water < t2.strstart && (t2.high_water = t2.strstart), n2 = t2.bi_valid + 42 >> 3, n2 = t2.pending_buf_size - n2 > 65535 ? 65535 : t2.pending_buf_size - n2, r2 = n2 > t2.w_size ? t2.w_size : n2, s2 = t2.strstart - t2.block_start, (s2 >= r2 || (s2 || e2 === V) && e2 !== q && 0 === t2.strm.avail_in && s2 <= n2) && (a2 = s2 > n2 ? n2 : s2, i2 = e2 === V && 0 === t2.strm.avail_in && a2 === s2 ? 1 : 0, Y(t2, t2.block_start, a2, i2), t2.block_start += a2, kt(t2.strm)), i2 ? 3 : 1); - }, Tt = (t2, e2) => { - let a2, s2; - for (; ; ) { - if (t2.lookahead < ct) { - if (Rt(t2), t2.lookahead < ct && e2 === q) - return 1; - if (0 === t2.lookahead) - break; - } - if (a2 = 0, t2.lookahead >= 3 && (t2.ins_h = zt(t2, t2.ins_h, t2.window[t2.strstart + 3 - 1]), a2 = t2.prev[t2.strstart & t2.w_mask] = t2.head[t2.ins_h], t2.head[t2.ins_h] = t2.strstart), 0 !== a2 && t2.strstart - a2 <= t2.w_size - ct && (t2.match_length = Ut(t2, a2)), t2.match_length >= 3) - if (s2 = X(t2, t2.strstart - t2.match_start, t2.match_length - 3), t2.lookahead -= t2.match_length, t2.match_length <= t2.max_lazy_match && t2.lookahead >= 3) { - t2.match_length--; - do { - t2.strstart++, t2.ins_h = zt(t2, t2.ins_h, t2.window[t2.strstart + 3 - 1]), a2 = t2.prev[t2.strstart & t2.w_mask] = t2.head[t2.ins_h], t2.head[t2.ins_h] = t2.strstart; - } while (0 != --t2.match_length); - t2.strstart++; - } else - t2.strstart += t2.match_length, t2.match_length = 0, t2.ins_h = t2.window[t2.strstart], t2.ins_h = zt(t2, t2.ins_h, t2.window[t2.strstart + 1]); - else - s2 = X(t2, 0, t2.window[t2.strstart]), t2.lookahead--, t2.strstart++; - if (s2 && (xt(t2, false), 0 === t2.strm.avail_out)) - return 1; - } - return t2.insert = t2.strstart < 2 ? t2.strstart : 2, e2 === V ? (xt(t2, true), 0 === t2.strm.avail_out ? 3 : 4) : t2.sym_next && (xt(t2, false), 0 === t2.strm.avail_out) ? 1 : 2; - }, Lt = (t2, e2) => { - let a2, s2, n2; - for (; ; ) { - if (t2.lookahead < ct) { - if (Rt(t2), t2.lookahead < ct && e2 === q) - return 1; - if (0 === t2.lookahead) - break; - } - if (a2 = 0, t2.lookahead >= 3 && (t2.ins_h = zt(t2, t2.ins_h, t2.window[t2.strstart + 3 - 1]), a2 = t2.prev[t2.strstart & t2.w_mask] = t2.head[t2.ins_h], t2.head[t2.ins_h] = t2.strstart), t2.prev_length = t2.match_length, t2.prev_match = t2.match_start, t2.match_length = 2, 0 !== a2 && t2.prev_length < t2.max_lazy_match && t2.strstart - a2 <= t2.w_size - ct && (t2.match_length = Ut(t2, a2), t2.match_length <= 5 && (t2.strategy === it || 3 === t2.match_length && t2.strstart - t2.match_start > 4096) && (t2.match_length = 2)), t2.prev_length >= 3 && t2.match_length <= t2.prev_length) { - n2 = t2.strstart + t2.lookahead - 3, s2 = X(t2, t2.strstart - 1 - t2.prev_match, t2.prev_length - 3), t2.lookahead -= t2.prev_length - 1, t2.prev_length -= 2; - do { - ++t2.strstart <= n2 && (t2.ins_h = zt(t2, t2.ins_h, t2.window[t2.strstart + 3 - 1]), a2 = t2.prev[t2.strstart & t2.w_mask] = t2.head[t2.ins_h], t2.head[t2.ins_h] = t2.strstart); - } while (0 != --t2.prev_length); - if (t2.match_available = 0, t2.match_length = 2, t2.strstart++, s2 && (xt(t2, false), 0 === t2.strm.avail_out)) - return 1; - } else if (t2.match_available) { - if (s2 = X(t2, 0, t2.window[t2.strstart - 1]), s2 && xt(t2, false), t2.strstart++, t2.lookahead--, 0 === t2.strm.avail_out) - return 1; - } else - t2.match_available = 1, t2.strstart++, t2.lookahead--; - } - return t2.match_available && (s2 = X(t2, 0, t2.window[t2.strstart - 1]), t2.match_available = 0), t2.insert = t2.strstart < 2 ? t2.strstart : 2, e2 === V ? (xt(t2, true), 0 === t2.strm.avail_out ? 3 : 4) : t2.sym_next && (xt(t2, false), 0 === t2.strm.avail_out) ? 1 : 2; - }; - function Ft(t2, e2, a2, s2, n2) { - this.good_length = t2, this.max_lazy = e2, this.nice_length = a2, this.max_chain = s2, this.func = n2; - } - const Ot = [new Ft(0, 0, 0, 0, St), new Ft(4, 4, 8, 4, Tt), new Ft(4, 5, 16, 8, Tt), new Ft(4, 6, 32, 32, Tt), new Ft(4, 4, 16, 16, Lt), new Ft(8, 16, 32, 32, Lt), new Ft(8, 16, 128, 128, Lt), new Ft(8, 32, 128, 256, Lt), new Ft(32, 128, 258, 1024, Lt), new Ft(32, 258, 258, 4096, Lt)]; - function Dt() { - this.strm = null, this.status = 0, this.pending_buf = null, this.pending_buf_size = 0, this.pending_out = 0, this.pending = 0, this.wrap = 0, this.gzhead = null, this.gzindex = 0, this.method = ut, this.last_flush = -1, this.w_size = 0, this.w_bits = 0, this.w_mask = 0, this.window = null, this.window_size = 0, this.prev = null, this.head = null, this.ins_h = 0, this.hash_size = 0, this.hash_bits = 0, this.hash_mask = 0, this.hash_shift = 0, this.block_start = 0, this.match_length = 0, this.prev_match = 0, this.match_available = 0, this.strstart = 0, this.match_start = 0, this.lookahead = 0, this.prev_length = 0, this.max_chain_length = 0, this.max_lazy_match = 0, this.level = 0, this.strategy = 0, this.good_match = 0, this.nice_match = 0, this.dyn_ltree = new Uint16Array(1146), this.dyn_dtree = new Uint16Array(122), this.bl_tree = new Uint16Array(78), yt(this.dyn_ltree), yt(this.dyn_dtree), yt(this.bl_tree), this.l_desc = null, this.d_desc = null, this.bl_desc = null, this.bl_count = new Uint16Array(16), this.heap = new Uint16Array(573), yt(this.heap), this.heap_len = 0, this.heap_max = 0, this.depth = new Uint16Array(573), yt(this.depth), this.sym_buf = 0, this.lit_bufsize = 0, this.sym_next = 0, this.sym_end = 0, this.opt_len = 0, this.static_len = 0, this.matches = 0, this.insert = 0, this.bi_buf = 0, this.bi_valid = 0; - } - const Nt = (t2) => { - if (!t2) - return 1; - const e2 = t2.state; - return !e2 || e2.strm !== t2 || e2.status !== pt && 57 !== e2.status && 69 !== e2.status && 73 !== e2.status && 91 !== e2.status && 103 !== e2.status && e2.status !== gt && e2.status !== wt ? 1 : 0; - }, It = (t2) => { - if (Nt(t2)) - return mt(t2, at); - t2.total_in = t2.total_out = 0, t2.data_type = dt; - const e2 = t2.state; - return e2.pending = 0, e2.pending_out = 0, e2.wrap < 0 && (e2.wrap = -e2.wrap), e2.status = 2 === e2.wrap ? 57 : e2.wrap ? pt : gt, t2.adler = 2 === e2.wrap ? 0 : 1, e2.last_flush = -2, K(e2), tt; - }, Ct = (t2) => { - const e2 = It(t2); - var a2; - return e2 === tt && ((a2 = t2.state).window_size = 2 * a2.w_size, yt(a2.head), a2.max_lazy_match = Ot[a2.level].max_lazy, a2.good_match = Ot[a2.level].good_length, a2.nice_match = Ot[a2.level].nice_length, a2.max_chain_length = Ot[a2.level].max_chain, a2.strstart = 0, a2.block_start = 0, a2.lookahead = 0, a2.insert = 0, a2.match_length = a2.prev_length = 2, a2.match_available = 0, a2.ins_h = 0), e2; - }, Bt = (t2, e2, a2, s2, n2, r2) => { - if (!t2) - return at; - let i2 = 1; - if (e2 === rt && (e2 = 6), s2 < 0 ? (i2 = 0, s2 = -s2) : s2 > 15 && (i2 = 2, s2 -= 16), n2 < 1 || n2 > 9 || a2 !== ut || s2 < 8 || s2 > 15 || e2 < 0 || e2 > 9 || r2 < 0 || r2 > ht || 8 === s2 && 1 !== i2) - return mt(t2, at); - 8 === s2 && (s2 = 9); - const _2 = new Dt(); - return t2.state = _2, _2.strm = t2, _2.status = pt, _2.wrap = i2, _2.gzhead = null, _2.w_bits = s2, _2.w_size = 1 << _2.w_bits, _2.w_mask = _2.w_size - 1, _2.hash_bits = n2 + 7, _2.hash_size = 1 << _2.hash_bits, _2.hash_mask = _2.hash_size - 1, _2.hash_shift = ~~((_2.hash_bits + 3 - 1) / 3), _2.window = new Uint8Array(2 * _2.w_size), _2.head = new Uint16Array(_2.hash_size), _2.prev = new Uint16Array(_2.w_size), _2.lit_bufsize = 1 << n2 + 6, _2.pending_buf_size = 4 * _2.lit_bufsize, _2.pending_buf = new Uint8Array(_2.pending_buf_size), _2.sym_buf = _2.lit_bufsize, _2.sym_end = 3 * (_2.lit_bufsize - 1), _2.level = e2, _2.strategy = r2, _2.method = a2, Ct(t2); - }; - var Ht = { deflateInit: (t2, e2) => Bt(t2, e2, ut, 15, 8, ot), deflateInit2: Bt, deflateReset: Ct, deflateResetKeep: It, deflateSetHeader: (t2, e2) => Nt(t2) || 2 !== t2.state.wrap ? at : (t2.state.gzhead = e2, tt), deflate: (t2, e2) => { - if (Nt(t2) || e2 > $ || e2 < 0) - return t2 ? mt(t2, at) : at; - const a2 = t2.state; - if (!t2.output || 0 !== t2.avail_in && !t2.input || a2.status === wt && e2 !== V) - return mt(t2, 0 === t2.avail_out ? nt : at); - const s2 = a2.last_flush; - if (a2.last_flush = e2, 0 !== a2.pending) { - if (kt(t2), 0 === t2.avail_out) - return a2.last_flush = -1, tt; - } else if (0 === t2.avail_in && bt(e2) <= bt(s2) && e2 !== V) - return mt(t2, nt); - if (a2.status === wt && 0 !== t2.avail_in) - return mt(t2, nt); - if (a2.status === pt && 0 === a2.wrap && (a2.status = gt), a2.status === pt) { - let e3 = ut + (a2.w_bits - 8 << 4) << 8, s3 = -1; - if (s3 = a2.strategy >= _t || a2.level < 2 ? 0 : a2.level < 6 ? 1 : 6 === a2.level ? 2 : 3, e3 |= s3 << 6, 0 !== a2.strstart && (e3 |= 32), e3 += 31 - e3 % 31, Et(a2, e3), 0 !== a2.strstart && (Et(a2, t2.adler >>> 16), Et(a2, 65535 & t2.adler)), t2.adler = 1, a2.status = gt, kt(t2), 0 !== a2.pending) - return a2.last_flush = -1, tt; - } - if (57 === a2.status) { - if (t2.adler = 0, At(a2, 31), At(a2, 139), At(a2, 8), a2.gzhead) - At(a2, (a2.gzhead.text ? 1 : 0) + (a2.gzhead.hcrc ? 2 : 0) + (a2.gzhead.extra ? 4 : 0) + (a2.gzhead.name ? 8 : 0) + (a2.gzhead.comment ? 16 : 0)), At(a2, 255 & a2.gzhead.time), At(a2, a2.gzhead.time >> 8 & 255), At(a2, a2.gzhead.time >> 16 & 255), At(a2, a2.gzhead.time >> 24 & 255), At(a2, 9 === a2.level ? 2 : a2.strategy >= _t || a2.level < 2 ? 4 : 0), At(a2, 255 & a2.gzhead.os), a2.gzhead.extra && a2.gzhead.extra.length && (At(a2, 255 & a2.gzhead.extra.length), At(a2, a2.gzhead.extra.length >> 8 & 255)), a2.gzhead.hcrc && (t2.adler = M(t2.adler, a2.pending_buf, a2.pending, 0)), a2.gzindex = 0, a2.status = 69; - else if (At(a2, 0), At(a2, 0), At(a2, 0), At(a2, 0), At(a2, 0), At(a2, 9 === a2.level ? 2 : a2.strategy >= _t || a2.level < 2 ? 4 : 0), At(a2, 3), a2.status = gt, kt(t2), 0 !== a2.pending) - return a2.last_flush = -1, tt; - } - if (69 === a2.status) { - if (a2.gzhead.extra) { - let e3 = a2.pending, s3 = (65535 & a2.gzhead.extra.length) - a2.gzindex; - for (; a2.pending + s3 > a2.pending_buf_size; ) { - let n3 = a2.pending_buf_size - a2.pending; - if (a2.pending_buf.set(a2.gzhead.extra.subarray(a2.gzindex, a2.gzindex + n3), a2.pending), a2.pending = a2.pending_buf_size, a2.gzhead.hcrc && a2.pending > e3 && (t2.adler = M(t2.adler, a2.pending_buf, a2.pending - e3, e3)), a2.gzindex += n3, kt(t2), 0 !== a2.pending) - return a2.last_flush = -1, tt; - e3 = 0, s3 -= n3; - } - let n2 = new Uint8Array(a2.gzhead.extra); - a2.pending_buf.set(n2.subarray(a2.gzindex, a2.gzindex + s3), a2.pending), a2.pending += s3, a2.gzhead.hcrc && a2.pending > e3 && (t2.adler = M(t2.adler, a2.pending_buf, a2.pending - e3, e3)), a2.gzindex = 0; - } - a2.status = 73; - } - if (73 === a2.status) { - if (a2.gzhead.name) { - let e3, s3 = a2.pending; - do { - if (a2.pending === a2.pending_buf_size) { - if (a2.gzhead.hcrc && a2.pending > s3 && (t2.adler = M(t2.adler, a2.pending_buf, a2.pending - s3, s3)), kt(t2), 0 !== a2.pending) - return a2.last_flush = -1, tt; - s3 = 0; - } - e3 = a2.gzindex < a2.gzhead.name.length ? 255 & a2.gzhead.name.charCodeAt(a2.gzindex++) : 0, At(a2, e3); - } while (0 !== e3); - a2.gzhead.hcrc && a2.pending > s3 && (t2.adler = M(t2.adler, a2.pending_buf, a2.pending - s3, s3)), a2.gzindex = 0; - } - a2.status = 91; - } - if (91 === a2.status) { - if (a2.gzhead.comment) { - let e3, s3 = a2.pending; - do { - if (a2.pending === a2.pending_buf_size) { - if (a2.gzhead.hcrc && a2.pending > s3 && (t2.adler = M(t2.adler, a2.pending_buf, a2.pending - s3, s3)), kt(t2), 0 !== a2.pending) - return a2.last_flush = -1, tt; - s3 = 0; - } - e3 = a2.gzindex < a2.gzhead.comment.length ? 255 & a2.gzhead.comment.charCodeAt(a2.gzindex++) : 0, At(a2, e3); - } while (0 !== e3); - a2.gzhead.hcrc && a2.pending > s3 && (t2.adler = M(t2.adler, a2.pending_buf, a2.pending - s3, s3)); - } - a2.status = 103; - } - if (103 === a2.status) { - if (a2.gzhead.hcrc) { - if (a2.pending + 2 > a2.pending_buf_size && (kt(t2), 0 !== a2.pending)) - return a2.last_flush = -1, tt; - At(a2, 255 & t2.adler), At(a2, t2.adler >> 8 & 255), t2.adler = 0; - } - if (a2.status = gt, kt(t2), 0 !== a2.pending) - return a2.last_flush = -1, tt; - } - if (0 !== t2.avail_in || 0 !== a2.lookahead || e2 !== q && a2.status !== wt) { - let s3 = 0 === a2.level ? St(a2, e2) : a2.strategy === _t ? ((t3, e3) => { - let a3; - for (; ; ) { - if (0 === t3.lookahead && (Rt(t3), 0 === t3.lookahead)) { - if (e3 === q) - return 1; - break; - } - if (t3.match_length = 0, a3 = X(t3, 0, t3.window[t3.strstart]), t3.lookahead--, t3.strstart++, a3 && (xt(t3, false), 0 === t3.strm.avail_out)) - return 1; - } - return t3.insert = 0, e3 === V ? (xt(t3, true), 0 === t3.strm.avail_out ? 3 : 4) : t3.sym_next && (xt(t3, false), 0 === t3.strm.avail_out) ? 1 : 2; - })(a2, e2) : a2.strategy === lt ? ((t3, e3) => { - let a3, s4, n2, r2; - const i2 = t3.window; - for (; ; ) { - if (t3.lookahead <= ft) { - if (Rt(t3), t3.lookahead <= ft && e3 === q) - return 1; - if (0 === t3.lookahead) - break; - } - if (t3.match_length = 0, t3.lookahead >= 3 && t3.strstart > 0 && (n2 = t3.strstart - 1, s4 = i2[n2], s4 === i2[++n2] && s4 === i2[++n2] && s4 === i2[++n2])) { - r2 = t3.strstart + ft; - do { - } while (s4 === i2[++n2] && s4 === i2[++n2] && s4 === i2[++n2] && s4 === i2[++n2] && s4 === i2[++n2] && s4 === i2[++n2] && s4 === i2[++n2] && s4 === i2[++n2] && n2 < r2); - t3.match_length = ft - (r2 - n2), t3.match_length > t3.lookahead && (t3.match_length = t3.lookahead); - } - if (t3.match_length >= 3 ? (a3 = X(t3, 1, t3.match_length - 3), t3.lookahead -= t3.match_length, t3.strstart += t3.match_length, t3.match_length = 0) : (a3 = X(t3, 0, t3.window[t3.strstart]), t3.lookahead--, t3.strstart++), a3 && (xt(t3, false), 0 === t3.strm.avail_out)) - return 1; - } - return t3.insert = 0, e3 === V ? (xt(t3, true), 0 === t3.strm.avail_out ? 3 : 4) : t3.sym_next && (xt(t3, false), 0 === t3.strm.avail_out) ? 1 : 2; - })(a2, e2) : Ot[a2.level].func(a2, e2); - if (3 !== s3 && 4 !== s3 || (a2.status = wt), 1 === s3 || 3 === s3) - return 0 === t2.avail_out && (a2.last_flush = -1), tt; - if (2 === s3 && (e2 === J ? W(a2) : e2 !== $ && (Y(a2, 0, 0, false), e2 === Q && (yt(a2.head), 0 === a2.lookahead && (a2.strstart = 0, a2.block_start = 0, a2.insert = 0))), kt(t2), 0 === t2.avail_out)) - return a2.last_flush = -1, tt; - } - return e2 !== V ? tt : a2.wrap <= 0 ? et : (2 === a2.wrap ? (At(a2, 255 & t2.adler), At(a2, t2.adler >> 8 & 255), At(a2, t2.adler >> 16 & 255), At(a2, t2.adler >> 24 & 255), At(a2, 255 & t2.total_in), At(a2, t2.total_in >> 8 & 255), At(a2, t2.total_in >> 16 & 255), At(a2, t2.total_in >> 24 & 255)) : (Et(a2, t2.adler >>> 16), Et(a2, 65535 & t2.adler)), kt(t2), a2.wrap > 0 && (a2.wrap = -a2.wrap), 0 !== a2.pending ? tt : et); - }, deflateEnd: (t2) => { - if (Nt(t2)) - return at; - const e2 = t2.state.status; - return t2.state = null, e2 === gt ? mt(t2, st) : tt; - }, deflateSetDictionary: (t2, e2) => { - let a2 = e2.length; - if (Nt(t2)) - return at; - const s2 = t2.state, n2 = s2.wrap; - if (2 === n2 || 1 === n2 && s2.status !== pt || s2.lookahead) - return at; - if (1 === n2 && (t2.adler = B(t2.adler, e2, a2, 0)), s2.wrap = 0, a2 >= s2.w_size) { - 0 === n2 && (yt(s2.head), s2.strstart = 0, s2.block_start = 0, s2.insert = 0); - let t3 = new Uint8Array(s2.w_size); - t3.set(e2.subarray(a2 - s2.w_size, a2), 0), e2 = t3, a2 = s2.w_size; - } - const r2 = t2.avail_in, i2 = t2.next_in, _2 = t2.input; - for (t2.avail_in = a2, t2.next_in = 0, t2.input = e2, Rt(s2); s2.lookahead >= 3; ) { - let t3 = s2.strstart, e3 = s2.lookahead - 2; - do { - s2.ins_h = zt(s2, s2.ins_h, s2.window[t3 + 3 - 1]), s2.prev[t3 & s2.w_mask] = s2.head[s2.ins_h], s2.head[s2.ins_h] = t3, t3++; - } while (--e3); - s2.strstart = t3, s2.lookahead = 2, Rt(s2); - } - return s2.strstart += s2.lookahead, s2.block_start = s2.strstart, s2.insert = s2.lookahead, s2.lookahead = 0, s2.match_length = s2.prev_length = 2, s2.match_available = 0, t2.next_in = i2, t2.input = _2, t2.avail_in = r2, s2.wrap = n2, tt; - }, deflateInfo: "pako deflate (from Nodeca project)" }; - const Mt = (t2, e2) => Object.prototype.hasOwnProperty.call(t2, e2); - var Pt = function(t2) { - const e2 = Array.prototype.slice.call(arguments, 1); - for (; e2.length; ) { - const a2 = e2.shift(); - if (a2) { - if ("object" != typeof a2) - throw new TypeError(a2 + "must be non-object"); - for (const e3 in a2) - Mt(a2, e3) && (t2[e3] = a2[e3]); - } - } - return t2; - }, jt = (t2) => { - let e2 = 0; - for (let a3 = 0, s2 = t2.length; a3 < s2; a3++) - e2 += t2[a3].length; - const a2 = new Uint8Array(e2); - for (let e3 = 0, s2 = 0, n2 = t2.length; e3 < n2; e3++) { - let n3 = t2[e3]; - a2.set(n3, s2), s2 += n3.length; - } - return a2; - }; - let Kt = true; - try { - String.fromCharCode.apply(null, new Uint8Array(1)); - } catch (t2) { - Kt = false; - } - const Yt = new Uint8Array(256); - for (let t2 = 0; t2 < 256; t2++) - Yt[t2] = t2 >= 252 ? 6 : t2 >= 248 ? 5 : t2 >= 240 ? 4 : t2 >= 224 ? 3 : t2 >= 192 ? 2 : 1; - Yt[254] = Yt[254] = 1; - var Gt = (t2) => { - if ("function" == typeof TextEncoder && TextEncoder.prototype.encode) - return new TextEncoder().encode(t2); - let e2, a2, s2, n2, r2, i2 = t2.length, _2 = 0; - for (n2 = 0; n2 < i2; n2++) - a2 = t2.charCodeAt(n2), 55296 == (64512 & a2) && n2 + 1 < i2 && (s2 = t2.charCodeAt(n2 + 1), 56320 == (64512 & s2) && (a2 = 65536 + (a2 - 55296 << 10) + (s2 - 56320), n2++)), _2 += a2 < 128 ? 1 : a2 < 2048 ? 2 : a2 < 65536 ? 3 : 4; - for (e2 = new Uint8Array(_2), r2 = 0, n2 = 0; r2 < _2; n2++) - a2 = t2.charCodeAt(n2), 55296 == (64512 & a2) && n2 + 1 < i2 && (s2 = t2.charCodeAt(n2 + 1), 56320 == (64512 & s2) && (a2 = 65536 + (a2 - 55296 << 10) + (s2 - 56320), n2++)), a2 < 128 ? e2[r2++] = a2 : a2 < 2048 ? (e2[r2++] = 192 | a2 >>> 6, e2[r2++] = 128 | 63 & a2) : a2 < 65536 ? (e2[r2++] = 224 | a2 >>> 12, e2[r2++] = 128 | a2 >>> 6 & 63, e2[r2++] = 128 | 63 & a2) : (e2[r2++] = 240 | a2 >>> 18, e2[r2++] = 128 | a2 >>> 12 & 63, e2[r2++] = 128 | a2 >>> 6 & 63, e2[r2++] = 128 | 63 & a2); - return e2; - }; - var Xt = function() { - this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0; - }; - const Wt = Object.prototype.toString, { Z_NO_FLUSH: qt, Z_SYNC_FLUSH: Jt, Z_FULL_FLUSH: Qt, Z_FINISH: Vt, Z_OK: $t, Z_STREAM_END: te, Z_DEFAULT_COMPRESSION: ee, Z_DEFAULT_STRATEGY: ae, Z_DEFLATED: se } = j; - function ne(t2) { - this.options = Pt({ level: ee, method: se, chunkSize: 16384, windowBits: 15, memLevel: 8, strategy: ae }, t2 || {}); - let e2 = this.options; - e2.raw && e2.windowBits > 0 ? e2.windowBits = -e2.windowBits : e2.gzip && e2.windowBits > 0 && e2.windowBits < 16 && (e2.windowBits += 16), this.err = 0, this.msg = "", this.ended = false, this.chunks = [], this.strm = new Xt(), this.strm.avail_out = 0; - let a2 = Ht.deflateInit2(this.strm, e2.level, e2.method, e2.windowBits, e2.memLevel, e2.strategy); - if (a2 !== $t) - throw new Error(P[a2]); - if (e2.header && Ht.deflateSetHeader(this.strm, e2.header), e2.dictionary) { - let t3; - if (t3 = "string" == typeof e2.dictionary ? Gt(e2.dictionary) : "[object ArrayBuffer]" === Wt.call(e2.dictionary) ? new Uint8Array(e2.dictionary) : e2.dictionary, a2 = Ht.deflateSetDictionary(this.strm, t3), a2 !== $t) - throw new Error(P[a2]); - this._dict_set = true; - } - } - function re(t2, e2) { - const a2 = new ne(e2); - if (a2.push(t2, true), a2.err) - throw a2.msg || P[a2.err]; - return a2.result; - } - ne.prototype.push = function(t2, e2) { - const a2 = this.strm, s2 = this.options.chunkSize; - let n2, r2; - if (this.ended) - return false; - for (r2 = e2 === ~~e2 ? e2 : true === e2 ? Vt : qt, "string" == typeof t2 ? a2.input = Gt(t2) : "[object ArrayBuffer]" === Wt.call(t2) ? a2.input = new Uint8Array(t2) : a2.input = t2, a2.next_in = 0, a2.avail_in = a2.input.length; ; ) - if (0 === a2.avail_out && (a2.output = new Uint8Array(s2), a2.next_out = 0, a2.avail_out = s2), (r2 === Jt || r2 === Qt) && a2.avail_out <= 6) - this.onData(a2.output.subarray(0, a2.next_out)), a2.avail_out = 0; - else { - if (n2 = Ht.deflate(a2, r2), n2 === te) - return a2.next_out > 0 && this.onData(a2.output.subarray(0, a2.next_out)), n2 = Ht.deflateEnd(this.strm), this.onEnd(n2), this.ended = true, n2 === $t; - if (0 !== a2.avail_out) { - if (r2 > 0 && a2.next_out > 0) - this.onData(a2.output.subarray(0, a2.next_out)), a2.avail_out = 0; - else if (0 === a2.avail_in) - break; - } else - this.onData(a2.output); - } - return true; - }, ne.prototype.onData = function(t2) { - this.chunks.push(t2); - }, ne.prototype.onEnd = function(t2) { - t2 === $t && (this.result = jt(this.chunks)), this.chunks = [], this.err = t2, this.msg = this.strm.msg; - }; - var ie = ne, _e = re, le = function(t2, e2) { - return (e2 = e2 || {}).raw = true, re(t2, e2); - }, he = function(t2, e2) { - return (e2 = e2 || {}).gzip = true, re(t2, e2); - }, oe = j, de = { Deflate: ie, deflate: _e, deflateRaw: le, gzip: he, constants: oe }; - t.Deflate = ie, t.constants = oe, t.default = de, t.deflate = _e, t.deflateRaw = le, t.gzip = he, Object.defineProperty(t, "__esModule", { value: true }); -}); diff --git a/debug/cesium/ThirdParty/Workers/pako_inflate.min.js b/debug/cesium/ThirdParty/Workers/pako_inflate.min.js deleted file mode 100644 index 557a550..0000000 --- a/debug/cesium/ThirdParty/Workers/pako_inflate.min.js +++ /dev/null @@ -1,800 +0,0 @@ -/*! pako 2.1.0 https://github.com/nodeca/pako @license (MIT AND Zlib) */ -!function(e, t) { - "object" == typeof exports && "undefined" != typeof module ? t(exports) : "function" == typeof define && define.amd ? define(["exports"], t) : t((e = "undefined" != typeof globalThis ? globalThis : e || self).pako = {}); -}(this, function(e) { - "use strict"; - var t = (e2, t2, i2, n2) => { - let a2 = 65535 & e2 | 0, r2 = e2 >>> 16 & 65535 | 0, o2 = 0; - for (; 0 !== i2; ) { - o2 = i2 > 2e3 ? 2e3 : i2, i2 -= o2; - do { - a2 = a2 + t2[n2++] | 0, r2 = r2 + a2 | 0; - } while (--o2); - a2 %= 65521, r2 %= 65521; - } - return a2 | r2 << 16 | 0; - }; - const i = new Uint32Array((() => { - let e2, t2 = []; - for (var i2 = 0; i2 < 256; i2++) { - e2 = i2; - for (var n2 = 0; n2 < 8; n2++) - e2 = 1 & e2 ? 3988292384 ^ e2 >>> 1 : e2 >>> 1; - t2[i2] = e2; - } - return t2; - })()); - var n = (e2, t2, n2, a2) => { - const r2 = i, o2 = a2 + n2; - e2 ^= -1; - for (let i2 = a2; i2 < o2; i2++) - e2 = e2 >>> 8 ^ r2[255 & (e2 ^ t2[i2])]; - return -1 ^ e2; - }; - const a = 16209; - var r = function(e2, t2) { - let i2, n2, r2, o2, s2, l2, d2, f2, c2, h2, u2, w2, b2, m2, k2, _2, g2, p2, v2, x2, y2, E2, R2, A2; - const Z2 = e2.state; - i2 = e2.next_in, R2 = e2.input, n2 = i2 + (e2.avail_in - 5), r2 = e2.next_out, A2 = e2.output, o2 = r2 - (t2 - e2.avail_out), s2 = r2 + (e2.avail_out - 257), l2 = Z2.dmax, d2 = Z2.wsize, f2 = Z2.whave, c2 = Z2.wnext, h2 = Z2.window, u2 = Z2.hold, w2 = Z2.bits, b2 = Z2.lencode, m2 = Z2.distcode, k2 = (1 << Z2.lenbits) - 1, _2 = (1 << Z2.distbits) - 1; - e: - do { - w2 < 15 && (u2 += R2[i2++] << w2, w2 += 8, u2 += R2[i2++] << w2, w2 += 8), g2 = b2[u2 & k2]; - t: - for (; ; ) { - if (p2 = g2 >>> 24, u2 >>>= p2, w2 -= p2, p2 = g2 >>> 16 & 255, 0 === p2) - A2[r2++] = 65535 & g2; - else { - if (!(16 & p2)) { - if (0 == (64 & p2)) { - g2 = b2[(65535 & g2) + (u2 & (1 << p2) - 1)]; - continue t; - } - if (32 & p2) { - Z2.mode = 16191; - break e; - } - e2.msg = "invalid literal/length code", Z2.mode = a; - break e; - } - v2 = 65535 & g2, p2 &= 15, p2 && (w2 < p2 && (u2 += R2[i2++] << w2, w2 += 8), v2 += u2 & (1 << p2) - 1, u2 >>>= p2, w2 -= p2), w2 < 15 && (u2 += R2[i2++] << w2, w2 += 8, u2 += R2[i2++] << w2, w2 += 8), g2 = m2[u2 & _2]; - i: - for (; ; ) { - if (p2 = g2 >>> 24, u2 >>>= p2, w2 -= p2, p2 = g2 >>> 16 & 255, !(16 & p2)) { - if (0 == (64 & p2)) { - g2 = m2[(65535 & g2) + (u2 & (1 << p2) - 1)]; - continue i; - } - e2.msg = "invalid distance code", Z2.mode = a; - break e; - } - if (x2 = 65535 & g2, p2 &= 15, w2 < p2 && (u2 += R2[i2++] << w2, w2 += 8, w2 < p2 && (u2 += R2[i2++] << w2, w2 += 8)), x2 += u2 & (1 << p2) - 1, x2 > l2) { - e2.msg = "invalid distance too far back", Z2.mode = a; - break e; - } - if (u2 >>>= p2, w2 -= p2, p2 = r2 - o2, x2 > p2) { - if (p2 = x2 - p2, p2 > f2 && Z2.sane) { - e2.msg = "invalid distance too far back", Z2.mode = a; - break e; - } - if (y2 = 0, E2 = h2, 0 === c2) { - if (y2 += d2 - p2, p2 < v2) { - v2 -= p2; - do { - A2[r2++] = h2[y2++]; - } while (--p2); - y2 = r2 - x2, E2 = A2; - } - } else if (c2 < p2) { - if (y2 += d2 + c2 - p2, p2 -= c2, p2 < v2) { - v2 -= p2; - do { - A2[r2++] = h2[y2++]; - } while (--p2); - if (y2 = 0, c2 < v2) { - p2 = c2, v2 -= p2; - do { - A2[r2++] = h2[y2++]; - } while (--p2); - y2 = r2 - x2, E2 = A2; - } - } - } else if (y2 += c2 - p2, p2 < v2) { - v2 -= p2; - do { - A2[r2++] = h2[y2++]; - } while (--p2); - y2 = r2 - x2, E2 = A2; - } - for (; v2 > 2; ) - A2[r2++] = E2[y2++], A2[r2++] = E2[y2++], A2[r2++] = E2[y2++], v2 -= 3; - v2 && (A2[r2++] = E2[y2++], v2 > 1 && (A2[r2++] = E2[y2++])); - } else { - y2 = r2 - x2; - do { - A2[r2++] = A2[y2++], A2[r2++] = A2[y2++], A2[r2++] = A2[y2++], v2 -= 3; - } while (v2 > 2); - v2 && (A2[r2++] = A2[y2++], v2 > 1 && (A2[r2++] = A2[y2++])); - } - break; - } - } - break; - } - } while (i2 < n2 && r2 < s2); - v2 = w2 >> 3, i2 -= v2, w2 -= v2 << 3, u2 &= (1 << w2) - 1, e2.next_in = i2, e2.next_out = r2, e2.avail_in = i2 < n2 ? n2 - i2 + 5 : 5 - (i2 - n2), e2.avail_out = r2 < s2 ? s2 - r2 + 257 : 257 - (r2 - s2), Z2.hold = u2, Z2.bits = w2; - }; - const o = 15, s = new Uint16Array([3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0]), l = new Uint8Array([16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78]), d = new Uint16Array([1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0]), f = new Uint8Array([16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64]); - var c = (e2, t2, i2, n2, a2, r2, c2, h2) => { - const u2 = h2.bits; - let w2, b2, m2, k2, _2, g2, p2 = 0, v2 = 0, x2 = 0, y2 = 0, E2 = 0, R2 = 0, A2 = 0, Z2 = 0, S2 = 0, T2 = 0, O2 = null; - const U2 = new Uint16Array(16), D2 = new Uint16Array(16); - let I2, B2, N2, C2 = null; - for (p2 = 0; p2 <= o; p2++) - U2[p2] = 0; - for (v2 = 0; v2 < n2; v2++) - U2[t2[i2 + v2]]++; - for (E2 = u2, y2 = o; y2 >= 1 && 0 === U2[y2]; y2--) - ; - if (E2 > y2 && (E2 = y2), 0 === y2) - return a2[r2++] = 20971520, a2[r2++] = 20971520, h2.bits = 1, 0; - for (x2 = 1; x2 < y2 && 0 === U2[x2]; x2++) - ; - for (E2 < x2 && (E2 = x2), Z2 = 1, p2 = 1; p2 <= o; p2++) - if (Z2 <<= 1, Z2 -= U2[p2], Z2 < 0) - return -1; - if (Z2 > 0 && (0 === e2 || 1 !== y2)) - return -1; - for (D2[1] = 0, p2 = 1; p2 < o; p2++) - D2[p2 + 1] = D2[p2] + U2[p2]; - for (v2 = 0; v2 < n2; v2++) - 0 !== t2[i2 + v2] && (c2[D2[t2[i2 + v2]]++] = v2); - if (0 === e2 ? (O2 = C2 = c2, g2 = 20) : 1 === e2 ? (O2 = s, C2 = l, g2 = 257) : (O2 = d, C2 = f, g2 = 0), T2 = 0, v2 = 0, p2 = x2, _2 = r2, R2 = E2, A2 = 0, m2 = -1, S2 = 1 << E2, k2 = S2 - 1, 1 === e2 && S2 > 852 || 2 === e2 && S2 > 592) - return 1; - for (; ; ) { - I2 = p2 - A2, c2[v2] + 1 < g2 ? (B2 = 0, N2 = c2[v2]) : c2[v2] >= g2 ? (B2 = C2[c2[v2] - g2], N2 = O2[c2[v2] - g2]) : (B2 = 96, N2 = 0), w2 = 1 << p2 - A2, b2 = 1 << R2, x2 = b2; - do { - b2 -= w2, a2[_2 + (T2 >> A2) + b2] = I2 << 24 | B2 << 16 | N2 | 0; - } while (0 !== b2); - for (w2 = 1 << p2 - 1; T2 & w2; ) - w2 >>= 1; - if (0 !== w2 ? (T2 &= w2 - 1, T2 += w2) : T2 = 0, v2++, 0 == --U2[p2]) { - if (p2 === y2) - break; - p2 = t2[i2 + c2[v2]]; - } - if (p2 > E2 && (T2 & k2) !== m2) { - for (0 === A2 && (A2 = E2), _2 += x2, R2 = p2 - A2, Z2 = 1 << R2; R2 + A2 < y2 && (Z2 -= U2[R2 + A2], !(Z2 <= 0)); ) - R2++, Z2 <<= 1; - if (S2 += 1 << R2, 1 === e2 && S2 > 852 || 2 === e2 && S2 > 592) - return 1; - m2 = T2 & k2, a2[m2] = E2 << 24 | R2 << 16 | _2 - r2 | 0; - } - } - return 0 !== T2 && (a2[_2 + T2] = p2 - A2 << 24 | 64 << 16 | 0), h2.bits = E2, 0; - }, h = { Z_NO_FLUSH: 0, Z_PARTIAL_FLUSH: 1, Z_SYNC_FLUSH: 2, Z_FULL_FLUSH: 3, Z_FINISH: 4, Z_BLOCK: 5, Z_TREES: 6, Z_OK: 0, Z_STREAM_END: 1, Z_NEED_DICT: 2, Z_ERRNO: -1, Z_STREAM_ERROR: -2, Z_DATA_ERROR: -3, Z_MEM_ERROR: -4, Z_BUF_ERROR: -5, Z_NO_COMPRESSION: 0, Z_BEST_SPEED: 1, Z_BEST_COMPRESSION: 9, Z_DEFAULT_COMPRESSION: -1, Z_FILTERED: 1, Z_HUFFMAN_ONLY: 2, Z_RLE: 3, Z_FIXED: 4, Z_DEFAULT_STRATEGY: 0, Z_BINARY: 0, Z_TEXT: 1, Z_UNKNOWN: 2, Z_DEFLATED: 8 }; - const { Z_FINISH: u, Z_BLOCK: w, Z_TREES: b, Z_OK: m, Z_STREAM_END: k, Z_NEED_DICT: _, Z_STREAM_ERROR: g, Z_DATA_ERROR: p, Z_MEM_ERROR: v, Z_BUF_ERROR: x, Z_DEFLATED: y } = h, E = 16180, R = 16190, A = 16191, Z = 16192, S = 16194, T = 16199, O = 16200, U = 16206, D = 16209, I = (e2) => (e2 >>> 24 & 255) + (e2 >>> 8 & 65280) + ((65280 & e2) << 8) + ((255 & e2) << 24); - function B() { - this.strm = null, this.mode = 0, this.last = false, this.wrap = 0, this.havedict = false, this.flags = 0, this.dmax = 0, this.check = 0, this.total = 0, this.head = null, this.wbits = 0, this.wsize = 0, this.whave = 0, this.wnext = 0, this.window = null, this.hold = 0, this.bits = 0, this.length = 0, this.offset = 0, this.extra = 0, this.lencode = null, this.distcode = null, this.lenbits = 0, this.distbits = 0, this.ncode = 0, this.nlen = 0, this.ndist = 0, this.have = 0, this.next = null, this.lens = new Uint16Array(320), this.work = new Uint16Array(288), this.lendyn = null, this.distdyn = null, this.sane = 0, this.back = 0, this.was = 0; - } - const N = (e2) => { - if (!e2) - return 1; - const t2 = e2.state; - return !t2 || t2.strm !== e2 || t2.mode < E || t2.mode > 16211 ? 1 : 0; - }, C = (e2) => { - if (N(e2)) - return g; - const t2 = e2.state; - return e2.total_in = e2.total_out = t2.total = 0, e2.msg = "", t2.wrap && (e2.adler = 1 & t2.wrap), t2.mode = E, t2.last = 0, t2.havedict = 0, t2.flags = -1, t2.dmax = 32768, t2.head = null, t2.hold = 0, t2.bits = 0, t2.lencode = t2.lendyn = new Int32Array(852), t2.distcode = t2.distdyn = new Int32Array(592), t2.sane = 1, t2.back = -1, m; - }, z = (e2) => { - if (N(e2)) - return g; - const t2 = e2.state; - return t2.wsize = 0, t2.whave = 0, t2.wnext = 0, C(e2); - }, F = (e2, t2) => { - let i2; - if (N(e2)) - return g; - const n2 = e2.state; - return t2 < 0 ? (i2 = 0, t2 = -t2) : (i2 = 5 + (t2 >> 4), t2 < 48 && (t2 &= 15)), t2 && (t2 < 8 || t2 > 15) ? g : (null !== n2.window && n2.wbits !== t2 && (n2.window = null), n2.wrap = i2, n2.wbits = t2, z(e2)); - }, L = (e2, t2) => { - if (!e2) - return g; - const i2 = new B(); - e2.state = i2, i2.strm = e2, i2.window = null, i2.mode = E; - const n2 = F(e2, t2); - return n2 !== m && (e2.state = null), n2; - }; - let M, H, j = true; - const K = (e2) => { - if (j) { - M = new Int32Array(512), H = new Int32Array(32); - let t2 = 0; - for (; t2 < 144; ) - e2.lens[t2++] = 8; - for (; t2 < 256; ) - e2.lens[t2++] = 9; - for (; t2 < 280; ) - e2.lens[t2++] = 7; - for (; t2 < 288; ) - e2.lens[t2++] = 8; - for (c(1, e2.lens, 0, 288, M, 0, e2.work, { bits: 9 }), t2 = 0; t2 < 32; ) - e2.lens[t2++] = 5; - c(2, e2.lens, 0, 32, H, 0, e2.work, { bits: 5 }), j = false; - } - e2.lencode = M, e2.lenbits = 9, e2.distcode = H, e2.distbits = 5; - }, P = (e2, t2, i2, n2) => { - let a2; - const r2 = e2.state; - return null === r2.window && (r2.wsize = 1 << r2.wbits, r2.wnext = 0, r2.whave = 0, r2.window = new Uint8Array(r2.wsize)), n2 >= r2.wsize ? (r2.window.set(t2.subarray(i2 - r2.wsize, i2), 0), r2.wnext = 0, r2.whave = r2.wsize) : (a2 = r2.wsize - r2.wnext, a2 > n2 && (a2 = n2), r2.window.set(t2.subarray(i2 - n2, i2 - n2 + a2), r2.wnext), (n2 -= a2) ? (r2.window.set(t2.subarray(i2 - n2, i2), 0), r2.wnext = n2, r2.whave = r2.wsize) : (r2.wnext += a2, r2.wnext === r2.wsize && (r2.wnext = 0), r2.whave < r2.wsize && (r2.whave += a2))), 0; - }; - var Y = { inflateReset: z, inflateReset2: F, inflateResetKeep: C, inflateInit: (e2) => L(e2, 15), inflateInit2: L, inflate: (e2, i2) => { - let a2, o2, s2, l2, d2, f2, h2, B2, C2, z2, F2, L2, M2, H2, j2, Y2, G2, X2, W2, q2, J2, Q2, V2 = 0; - const $2 = new Uint8Array(4); - let ee2, te2; - const ie2 = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]); - if (N(e2) || !e2.output || !e2.input && 0 !== e2.avail_in) - return g; - a2 = e2.state, a2.mode === A && (a2.mode = Z), d2 = e2.next_out, s2 = e2.output, h2 = e2.avail_out, l2 = e2.next_in, o2 = e2.input, f2 = e2.avail_in, B2 = a2.hold, C2 = a2.bits, z2 = f2, F2 = h2, Q2 = m; - e: - for (; ; ) - switch (a2.mode) { - case E: - if (0 === a2.wrap) { - a2.mode = Z; - break; - } - for (; C2 < 16; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (2 & a2.wrap && 35615 === B2) { - 0 === a2.wbits && (a2.wbits = 15), a2.check = 0, $2[0] = 255 & B2, $2[1] = B2 >>> 8 & 255, a2.check = n(a2.check, $2, 2, 0), B2 = 0, C2 = 0, a2.mode = 16181; - break; - } - if (a2.head && (a2.head.done = false), !(1 & a2.wrap) || (((255 & B2) << 8) + (B2 >> 8)) % 31) { - e2.msg = "incorrect header check", a2.mode = D; - break; - } - if ((15 & B2) !== y) { - e2.msg = "unknown compression method", a2.mode = D; - break; - } - if (B2 >>>= 4, C2 -= 4, J2 = 8 + (15 & B2), 0 === a2.wbits && (a2.wbits = J2), J2 > 15 || J2 > a2.wbits) { - e2.msg = "invalid window size", a2.mode = D; - break; - } - a2.dmax = 1 << a2.wbits, a2.flags = 0, e2.adler = a2.check = 1, a2.mode = 512 & B2 ? 16189 : A, B2 = 0, C2 = 0; - break; - case 16181: - for (; C2 < 16; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (a2.flags = B2, (255 & a2.flags) !== y) { - e2.msg = "unknown compression method", a2.mode = D; - break; - } - if (57344 & a2.flags) { - e2.msg = "unknown header flags set", a2.mode = D; - break; - } - a2.head && (a2.head.text = B2 >> 8 & 1), 512 & a2.flags && 4 & a2.wrap && ($2[0] = 255 & B2, $2[1] = B2 >>> 8 & 255, a2.check = n(a2.check, $2, 2, 0)), B2 = 0, C2 = 0, a2.mode = 16182; - case 16182: - for (; C2 < 32; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - a2.head && (a2.head.time = B2), 512 & a2.flags && 4 & a2.wrap && ($2[0] = 255 & B2, $2[1] = B2 >>> 8 & 255, $2[2] = B2 >>> 16 & 255, $2[3] = B2 >>> 24 & 255, a2.check = n(a2.check, $2, 4, 0)), B2 = 0, C2 = 0, a2.mode = 16183; - case 16183: - for (; C2 < 16; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - a2.head && (a2.head.xflags = 255 & B2, a2.head.os = B2 >> 8), 512 & a2.flags && 4 & a2.wrap && ($2[0] = 255 & B2, $2[1] = B2 >>> 8 & 255, a2.check = n(a2.check, $2, 2, 0)), B2 = 0, C2 = 0, a2.mode = 16184; - case 16184: - if (1024 & a2.flags) { - for (; C2 < 16; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - a2.length = B2, a2.head && (a2.head.extra_len = B2), 512 & a2.flags && 4 & a2.wrap && ($2[0] = 255 & B2, $2[1] = B2 >>> 8 & 255, a2.check = n(a2.check, $2, 2, 0)), B2 = 0, C2 = 0; - } else - a2.head && (a2.head.extra = null); - a2.mode = 16185; - case 16185: - if (1024 & a2.flags && (L2 = a2.length, L2 > f2 && (L2 = f2), L2 && (a2.head && (J2 = a2.head.extra_len - a2.length, a2.head.extra || (a2.head.extra = new Uint8Array(a2.head.extra_len)), a2.head.extra.set(o2.subarray(l2, l2 + L2), J2)), 512 & a2.flags && 4 & a2.wrap && (a2.check = n(a2.check, o2, L2, l2)), f2 -= L2, l2 += L2, a2.length -= L2), a2.length)) - break e; - a2.length = 0, a2.mode = 16186; - case 16186: - if (2048 & a2.flags) { - if (0 === f2) - break e; - L2 = 0; - do { - J2 = o2[l2 + L2++], a2.head && J2 && a2.length < 65536 && (a2.head.name += String.fromCharCode(J2)); - } while (J2 && L2 < f2); - if (512 & a2.flags && 4 & a2.wrap && (a2.check = n(a2.check, o2, L2, l2)), f2 -= L2, l2 += L2, J2) - break e; - } else - a2.head && (a2.head.name = null); - a2.length = 0, a2.mode = 16187; - case 16187: - if (4096 & a2.flags) { - if (0 === f2) - break e; - L2 = 0; - do { - J2 = o2[l2 + L2++], a2.head && J2 && a2.length < 65536 && (a2.head.comment += String.fromCharCode(J2)); - } while (J2 && L2 < f2); - if (512 & a2.flags && 4 & a2.wrap && (a2.check = n(a2.check, o2, L2, l2)), f2 -= L2, l2 += L2, J2) - break e; - } else - a2.head && (a2.head.comment = null); - a2.mode = 16188; - case 16188: - if (512 & a2.flags) { - for (; C2 < 16; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (4 & a2.wrap && B2 !== (65535 & a2.check)) { - e2.msg = "header crc mismatch", a2.mode = D; - break; - } - B2 = 0, C2 = 0; - } - a2.head && (a2.head.hcrc = a2.flags >> 9 & 1, a2.head.done = true), e2.adler = a2.check = 0, a2.mode = A; - break; - case 16189: - for (; C2 < 32; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - e2.adler = a2.check = I(B2), B2 = 0, C2 = 0, a2.mode = R; - case R: - if (0 === a2.havedict) - return e2.next_out = d2, e2.avail_out = h2, e2.next_in = l2, e2.avail_in = f2, a2.hold = B2, a2.bits = C2, _; - e2.adler = a2.check = 1, a2.mode = A; - case A: - if (i2 === w || i2 === b) - break e; - case Z: - if (a2.last) { - B2 >>>= 7 & C2, C2 -= 7 & C2, a2.mode = U; - break; - } - for (; C2 < 3; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - switch (a2.last = 1 & B2, B2 >>>= 1, C2 -= 1, 3 & B2) { - case 0: - a2.mode = 16193; - break; - case 1: - if (K(a2), a2.mode = T, i2 === b) { - B2 >>>= 2, C2 -= 2; - break e; - } - break; - case 2: - a2.mode = 16196; - break; - case 3: - e2.msg = "invalid block type", a2.mode = D; - } - B2 >>>= 2, C2 -= 2; - break; - case 16193: - for (B2 >>>= 7 & C2, C2 -= 7 & C2; C2 < 32; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if ((65535 & B2) != (B2 >>> 16 ^ 65535)) { - e2.msg = "invalid stored block lengths", a2.mode = D; - break; - } - if (a2.length = 65535 & B2, B2 = 0, C2 = 0, a2.mode = S, i2 === b) - break e; - case S: - a2.mode = 16195; - case 16195: - if (L2 = a2.length, L2) { - if (L2 > f2 && (L2 = f2), L2 > h2 && (L2 = h2), 0 === L2) - break e; - s2.set(o2.subarray(l2, l2 + L2), d2), f2 -= L2, l2 += L2, h2 -= L2, d2 += L2, a2.length -= L2; - break; - } - a2.mode = A; - break; - case 16196: - for (; C2 < 14; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (a2.nlen = 257 + (31 & B2), B2 >>>= 5, C2 -= 5, a2.ndist = 1 + (31 & B2), B2 >>>= 5, C2 -= 5, a2.ncode = 4 + (15 & B2), B2 >>>= 4, C2 -= 4, a2.nlen > 286 || a2.ndist > 30) { - e2.msg = "too many length or distance symbols", a2.mode = D; - break; - } - a2.have = 0, a2.mode = 16197; - case 16197: - for (; a2.have < a2.ncode; ) { - for (; C2 < 3; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - a2.lens[ie2[a2.have++]] = 7 & B2, B2 >>>= 3, C2 -= 3; - } - for (; a2.have < 19; ) - a2.lens[ie2[a2.have++]] = 0; - if (a2.lencode = a2.lendyn, a2.lenbits = 7, ee2 = { bits: a2.lenbits }, Q2 = c(0, a2.lens, 0, 19, a2.lencode, 0, a2.work, ee2), a2.lenbits = ee2.bits, Q2) { - e2.msg = "invalid code lengths set", a2.mode = D; - break; - } - a2.have = 0, a2.mode = 16198; - case 16198: - for (; a2.have < a2.nlen + a2.ndist; ) { - for (; V2 = a2.lencode[B2 & (1 << a2.lenbits) - 1], j2 = V2 >>> 24, Y2 = V2 >>> 16 & 255, G2 = 65535 & V2, !(j2 <= C2); ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (G2 < 16) - B2 >>>= j2, C2 -= j2, a2.lens[a2.have++] = G2; - else { - if (16 === G2) { - for (te2 = j2 + 2; C2 < te2; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (B2 >>>= j2, C2 -= j2, 0 === a2.have) { - e2.msg = "invalid bit length repeat", a2.mode = D; - break; - } - J2 = a2.lens[a2.have - 1], L2 = 3 + (3 & B2), B2 >>>= 2, C2 -= 2; - } else if (17 === G2) { - for (te2 = j2 + 3; C2 < te2; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - B2 >>>= j2, C2 -= j2, J2 = 0, L2 = 3 + (7 & B2), B2 >>>= 3, C2 -= 3; - } else { - for (te2 = j2 + 7; C2 < te2; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - B2 >>>= j2, C2 -= j2, J2 = 0, L2 = 11 + (127 & B2), B2 >>>= 7, C2 -= 7; - } - if (a2.have + L2 > a2.nlen + a2.ndist) { - e2.msg = "invalid bit length repeat", a2.mode = D; - break; - } - for (; L2--; ) - a2.lens[a2.have++] = J2; - } - } - if (a2.mode === D) - break; - if (0 === a2.lens[256]) { - e2.msg = "invalid code -- missing end-of-block", a2.mode = D; - break; - } - if (a2.lenbits = 9, ee2 = { bits: a2.lenbits }, Q2 = c(1, a2.lens, 0, a2.nlen, a2.lencode, 0, a2.work, ee2), a2.lenbits = ee2.bits, Q2) { - e2.msg = "invalid literal/lengths set", a2.mode = D; - break; - } - if (a2.distbits = 6, a2.distcode = a2.distdyn, ee2 = { bits: a2.distbits }, Q2 = c(2, a2.lens, a2.nlen, a2.ndist, a2.distcode, 0, a2.work, ee2), a2.distbits = ee2.bits, Q2) { - e2.msg = "invalid distances set", a2.mode = D; - break; - } - if (a2.mode = T, i2 === b) - break e; - case T: - a2.mode = O; - case O: - if (f2 >= 6 && h2 >= 258) { - e2.next_out = d2, e2.avail_out = h2, e2.next_in = l2, e2.avail_in = f2, a2.hold = B2, a2.bits = C2, r(e2, F2), d2 = e2.next_out, s2 = e2.output, h2 = e2.avail_out, l2 = e2.next_in, o2 = e2.input, f2 = e2.avail_in, B2 = a2.hold, C2 = a2.bits, a2.mode === A && (a2.back = -1); - break; - } - for (a2.back = 0; V2 = a2.lencode[B2 & (1 << a2.lenbits) - 1], j2 = V2 >>> 24, Y2 = V2 >>> 16 & 255, G2 = 65535 & V2, !(j2 <= C2); ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (Y2 && 0 == (240 & Y2)) { - for (X2 = j2, W2 = Y2, q2 = G2; V2 = a2.lencode[q2 + ((B2 & (1 << X2 + W2) - 1) >> X2)], j2 = V2 >>> 24, Y2 = V2 >>> 16 & 255, G2 = 65535 & V2, !(X2 + j2 <= C2); ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - B2 >>>= X2, C2 -= X2, a2.back += X2; - } - if (B2 >>>= j2, C2 -= j2, a2.back += j2, a2.length = G2, 0 === Y2) { - a2.mode = 16205; - break; - } - if (32 & Y2) { - a2.back = -1, a2.mode = A; - break; - } - if (64 & Y2) { - e2.msg = "invalid literal/length code", a2.mode = D; - break; - } - a2.extra = 15 & Y2, a2.mode = 16201; - case 16201: - if (a2.extra) { - for (te2 = a2.extra; C2 < te2; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - a2.length += B2 & (1 << a2.extra) - 1, B2 >>>= a2.extra, C2 -= a2.extra, a2.back += a2.extra; - } - a2.was = a2.length, a2.mode = 16202; - case 16202: - for (; V2 = a2.distcode[B2 & (1 << a2.distbits) - 1], j2 = V2 >>> 24, Y2 = V2 >>> 16 & 255, G2 = 65535 & V2, !(j2 <= C2); ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (0 == (240 & Y2)) { - for (X2 = j2, W2 = Y2, q2 = G2; V2 = a2.distcode[q2 + ((B2 & (1 << X2 + W2) - 1) >> X2)], j2 = V2 >>> 24, Y2 = V2 >>> 16 & 255, G2 = 65535 & V2, !(X2 + j2 <= C2); ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - B2 >>>= X2, C2 -= X2, a2.back += X2; - } - if (B2 >>>= j2, C2 -= j2, a2.back += j2, 64 & Y2) { - e2.msg = "invalid distance code", a2.mode = D; - break; - } - a2.offset = G2, a2.extra = 15 & Y2, a2.mode = 16203; - case 16203: - if (a2.extra) { - for (te2 = a2.extra; C2 < te2; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - a2.offset += B2 & (1 << a2.extra) - 1, B2 >>>= a2.extra, C2 -= a2.extra, a2.back += a2.extra; - } - if (a2.offset > a2.dmax) { - e2.msg = "invalid distance too far back", a2.mode = D; - break; - } - a2.mode = 16204; - case 16204: - if (0 === h2) - break e; - if (L2 = F2 - h2, a2.offset > L2) { - if (L2 = a2.offset - L2, L2 > a2.whave && a2.sane) { - e2.msg = "invalid distance too far back", a2.mode = D; - break; - } - L2 > a2.wnext ? (L2 -= a2.wnext, M2 = a2.wsize - L2) : M2 = a2.wnext - L2, L2 > a2.length && (L2 = a2.length), H2 = a2.window; - } else - H2 = s2, M2 = d2 - a2.offset, L2 = a2.length; - L2 > h2 && (L2 = h2), h2 -= L2, a2.length -= L2; - do { - s2[d2++] = H2[M2++]; - } while (--L2); - 0 === a2.length && (a2.mode = O); - break; - case 16205: - if (0 === h2) - break e; - s2[d2++] = a2.length, h2--, a2.mode = O; - break; - case U: - if (a2.wrap) { - for (; C2 < 32; ) { - if (0 === f2) - break e; - f2--, B2 |= o2[l2++] << C2, C2 += 8; - } - if (F2 -= h2, e2.total_out += F2, a2.total += F2, 4 & a2.wrap && F2 && (e2.adler = a2.check = a2.flags ? n(a2.check, s2, F2, d2 - F2) : t(a2.check, s2, F2, d2 - F2)), F2 = h2, 4 & a2.wrap && (a2.flags ? B2 : I(B2)) !== a2.check) { - e2.msg = "incorrect data check", a2.mode = D; - break; - } - B2 = 0, C2 = 0; - } - a2.mode = 16207; - case 16207: - if (a2.wrap && a2.flags) { - for (; C2 < 32; ) { - if (0 === f2) - break e; - f2--, B2 += o2[l2++] << C2, C2 += 8; - } - if (4 & a2.wrap && B2 !== (4294967295 & a2.total)) { - e2.msg = "incorrect length check", a2.mode = D; - break; - } - B2 = 0, C2 = 0; - } - a2.mode = 16208; - case 16208: - Q2 = k; - break e; - case D: - Q2 = p; - break e; - case 16210: - return v; - default: - return g; - } - return e2.next_out = d2, e2.avail_out = h2, e2.next_in = l2, e2.avail_in = f2, a2.hold = B2, a2.bits = C2, (a2.wsize || F2 !== e2.avail_out && a2.mode < D && (a2.mode < U || i2 !== u)) && P(e2, e2.output, e2.next_out, F2 - e2.avail_out), z2 -= e2.avail_in, F2 -= e2.avail_out, e2.total_in += z2, e2.total_out += F2, a2.total += F2, 4 & a2.wrap && F2 && (e2.adler = a2.check = a2.flags ? n(a2.check, s2, F2, e2.next_out - F2) : t(a2.check, s2, F2, e2.next_out - F2)), e2.data_type = a2.bits + (a2.last ? 64 : 0) + (a2.mode === A ? 128 : 0) + (a2.mode === T || a2.mode === S ? 256 : 0), (0 === z2 && 0 === F2 || i2 === u) && Q2 === m && (Q2 = x), Q2; - }, inflateEnd: (e2) => { - if (N(e2)) - return g; - let t2 = e2.state; - return t2.window && (t2.window = null), e2.state = null, m; - }, inflateGetHeader: (e2, t2) => { - if (N(e2)) - return g; - const i2 = e2.state; - return 0 == (2 & i2.wrap) ? g : (i2.head = t2, t2.done = false, m); - }, inflateSetDictionary: (e2, i2) => { - const n2 = i2.length; - let a2, r2, o2; - return N(e2) ? g : (a2 = e2.state, 0 !== a2.wrap && a2.mode !== R ? g : a2.mode === R && (r2 = 1, r2 = t(r2, i2, n2, 0), r2 !== a2.check) ? p : (o2 = P(e2, i2, n2, n2), o2 ? (a2.mode = 16210, v) : (a2.havedict = 1, m))); - }, inflateInfo: "pako inflate (from Nodeca project)" }; - const G = (e2, t2) => Object.prototype.hasOwnProperty.call(e2, t2); - var X = function(e2) { - const t2 = Array.prototype.slice.call(arguments, 1); - for (; t2.length; ) { - const i2 = t2.shift(); - if (i2) { - if ("object" != typeof i2) - throw new TypeError(i2 + "must be non-object"); - for (const t3 in i2) - G(i2, t3) && (e2[t3] = i2[t3]); - } - } - return e2; - }, W = (e2) => { - let t2 = 0; - for (let i3 = 0, n2 = e2.length; i3 < n2; i3++) - t2 += e2[i3].length; - const i2 = new Uint8Array(t2); - for (let t3 = 0, n2 = 0, a2 = e2.length; t3 < a2; t3++) { - let a3 = e2[t3]; - i2.set(a3, n2), n2 += a3.length; - } - return i2; - }; - let q = true; - try { - String.fromCharCode.apply(null, new Uint8Array(1)); - } catch (e2) { - q = false; - } - const J = new Uint8Array(256); - for (let e2 = 0; e2 < 256; e2++) - J[e2] = e2 >= 252 ? 6 : e2 >= 248 ? 5 : e2 >= 240 ? 4 : e2 >= 224 ? 3 : e2 >= 192 ? 2 : 1; - J[254] = J[254] = 1; - var Q = (e2) => { - if ("function" == typeof TextEncoder && TextEncoder.prototype.encode) - return new TextEncoder().encode(e2); - let t2, i2, n2, a2, r2, o2 = e2.length, s2 = 0; - for (a2 = 0; a2 < o2; a2++) - i2 = e2.charCodeAt(a2), 55296 == (64512 & i2) && a2 + 1 < o2 && (n2 = e2.charCodeAt(a2 + 1), 56320 == (64512 & n2) && (i2 = 65536 + (i2 - 55296 << 10) + (n2 - 56320), a2++)), s2 += i2 < 128 ? 1 : i2 < 2048 ? 2 : i2 < 65536 ? 3 : 4; - for (t2 = new Uint8Array(s2), r2 = 0, a2 = 0; r2 < s2; a2++) - i2 = e2.charCodeAt(a2), 55296 == (64512 & i2) && a2 + 1 < o2 && (n2 = e2.charCodeAt(a2 + 1), 56320 == (64512 & n2) && (i2 = 65536 + (i2 - 55296 << 10) + (n2 - 56320), a2++)), i2 < 128 ? t2[r2++] = i2 : i2 < 2048 ? (t2[r2++] = 192 | i2 >>> 6, t2[r2++] = 128 | 63 & i2) : i2 < 65536 ? (t2[r2++] = 224 | i2 >>> 12, t2[r2++] = 128 | i2 >>> 6 & 63, t2[r2++] = 128 | 63 & i2) : (t2[r2++] = 240 | i2 >>> 18, t2[r2++] = 128 | i2 >>> 12 & 63, t2[r2++] = 128 | i2 >>> 6 & 63, t2[r2++] = 128 | 63 & i2); - return t2; - }, V = (e2, t2) => { - const i2 = t2 || e2.length; - if ("function" == typeof TextDecoder && TextDecoder.prototype.decode) - return new TextDecoder().decode(e2.subarray(0, t2)); - let n2, a2; - const r2 = new Array(2 * i2); - for (a2 = 0, n2 = 0; n2 < i2; ) { - let t3 = e2[n2++]; - if (t3 < 128) { - r2[a2++] = t3; - continue; - } - let o2 = J[t3]; - if (o2 > 4) - r2[a2++] = 65533, n2 += o2 - 1; - else { - for (t3 &= 2 === o2 ? 31 : 3 === o2 ? 15 : 7; o2 > 1 && n2 < i2; ) - t3 = t3 << 6 | 63 & e2[n2++], o2--; - o2 > 1 ? r2[a2++] = 65533 : t3 < 65536 ? r2[a2++] = t3 : (t3 -= 65536, r2[a2++] = 55296 | t3 >> 10 & 1023, r2[a2++] = 56320 | 1023 & t3); - } - } - return ((e3, t3) => { - if (t3 < 65534 && e3.subarray && q) - return String.fromCharCode.apply(null, e3.length === t3 ? e3 : e3.subarray(0, t3)); - let i3 = ""; - for (let n3 = 0; n3 < t3; n3++) - i3 += String.fromCharCode(e3[n3]); - return i3; - })(r2, a2); - }, $ = (e2, t2) => { - (t2 = t2 || e2.length) > e2.length && (t2 = e2.length); - let i2 = t2 - 1; - for (; i2 >= 0 && 128 == (192 & e2[i2]); ) - i2--; - return i2 < 0 || 0 === i2 ? t2 : i2 + J[e2[i2]] > t2 ? i2 : t2; - }, ee = { 2: "need dictionary", 1: "stream end", 0: "", "-1": "file error", "-2": "stream error", "-3": "data error", "-4": "insufficient memory", "-5": "buffer error", "-6": "incompatible version" }; - var te = function() { - this.input = null, this.next_in = 0, this.avail_in = 0, this.total_in = 0, this.output = null, this.next_out = 0, this.avail_out = 0, this.total_out = 0, this.msg = "", this.state = null, this.data_type = 2, this.adler = 0; - }; - var ie = function() { - this.text = 0, this.time = 0, this.xflags = 0, this.os = 0, this.extra = null, this.extra_len = 0, this.name = "", this.comment = "", this.hcrc = 0, this.done = false; - }; - const ne = Object.prototype.toString, { Z_NO_FLUSH: ae, Z_FINISH: re, Z_OK: oe, Z_STREAM_END: se, Z_NEED_DICT: le, Z_STREAM_ERROR: de, Z_DATA_ERROR: fe, Z_MEM_ERROR: ce } = h; - function he(e2) { - this.options = X({ chunkSize: 65536, windowBits: 15, to: "" }, e2 || {}); - const t2 = this.options; - t2.raw && t2.windowBits >= 0 && t2.windowBits < 16 && (t2.windowBits = -t2.windowBits, 0 === t2.windowBits && (t2.windowBits = -15)), !(t2.windowBits >= 0 && t2.windowBits < 16) || e2 && e2.windowBits || (t2.windowBits += 32), t2.windowBits > 15 && t2.windowBits < 48 && 0 == (15 & t2.windowBits) && (t2.windowBits |= 15), this.err = 0, this.msg = "", this.ended = false, this.chunks = [], this.strm = new te(), this.strm.avail_out = 0; - let i2 = Y.inflateInit2(this.strm, t2.windowBits); - if (i2 !== oe) - throw new Error(ee[i2]); - if (this.header = new ie(), Y.inflateGetHeader(this.strm, this.header), t2.dictionary && ("string" == typeof t2.dictionary ? t2.dictionary = Q(t2.dictionary) : "[object ArrayBuffer]" === ne.call(t2.dictionary) && (t2.dictionary = new Uint8Array(t2.dictionary)), t2.raw && (i2 = Y.inflateSetDictionary(this.strm, t2.dictionary), i2 !== oe))) - throw new Error(ee[i2]); - } - function ue(e2, t2) { - const i2 = new he(t2); - if (i2.push(e2), i2.err) - throw i2.msg || ee[i2.err]; - return i2.result; - } - he.prototype.push = function(e2, t2) { - const i2 = this.strm, n2 = this.options.chunkSize, a2 = this.options.dictionary; - let r2, o2, s2; - if (this.ended) - return false; - for (o2 = t2 === ~~t2 ? t2 : true === t2 ? re : ae, "[object ArrayBuffer]" === ne.call(e2) ? i2.input = new Uint8Array(e2) : i2.input = e2, i2.next_in = 0, i2.avail_in = i2.input.length; ; ) { - for (0 === i2.avail_out && (i2.output = new Uint8Array(n2), i2.next_out = 0, i2.avail_out = n2), r2 = Y.inflate(i2, o2), r2 === le && a2 && (r2 = Y.inflateSetDictionary(i2, a2), r2 === oe ? r2 = Y.inflate(i2, o2) : r2 === fe && (r2 = le)); i2.avail_in > 0 && r2 === se && i2.state.wrap > 0 && 0 !== e2[i2.next_in]; ) - Y.inflateReset(i2), r2 = Y.inflate(i2, o2); - switch (r2) { - case de: - case fe: - case le: - case ce: - return this.onEnd(r2), this.ended = true, false; - } - if (s2 = i2.avail_out, i2.next_out && (0 === i2.avail_out || r2 === se)) - if ("string" === this.options.to) { - let e3 = $(i2.output, i2.next_out), t3 = i2.next_out - e3, a3 = V(i2.output, e3); - i2.next_out = t3, i2.avail_out = n2 - t3, t3 && i2.output.set(i2.output.subarray(e3, e3 + t3), 0), this.onData(a3); - } else - this.onData(i2.output.length === i2.next_out ? i2.output : i2.output.subarray(0, i2.next_out)); - if (r2 !== oe || 0 !== s2) { - if (r2 === se) - return r2 = Y.inflateEnd(this.strm), this.onEnd(r2), this.ended = true, true; - if (0 === i2.avail_in) - break; - } - } - return true; - }, he.prototype.onData = function(e2) { - this.chunks.push(e2); - }, he.prototype.onEnd = function(e2) { - e2 === oe && ("string" === this.options.to ? this.result = this.chunks.join("") : this.result = W(this.chunks)), this.chunks = [], this.err = e2, this.msg = this.strm.msg; - }; - var we = he, be = ue, me = function(e2, t2) { - return (t2 = t2 || {}).raw = true, ue(e2, t2); - }, ke = ue, _e = h, ge = { Inflate: we, inflate: be, inflateRaw: me, ungzip: ke, constants: _e }; - e.Inflate = we, e.constants = _e, e.default = ge, e.inflate = be, e.inflateRaw = me, e.ungzip = ke, Object.defineProperty(e, "__esModule", { value: true }); -}); diff --git a/debug/cesium/ThirdParty/Workers/z-worker-pako.js b/debug/cesium/ThirdParty/Workers/z-worker-pako.js deleted file mode 100644 index d06119b..0000000 --- a/debug/cesium/ThirdParty/Workers/z-worker-pako.js +++ /dev/null @@ -1,502 +0,0 @@ -!function() { - "use strict"; - const { Array: t, Object: e, Math: n, Error: s, Uint8Array: r, Uint16Array: a, Uint32Array: i, Int32Array: c, DataView: o, TextEncoder: l, crypto: h, postMessage: p } = globalThis, d = []; - for (let t2 = 0; 256 > t2; t2++) { - let e2 = t2; - for (let t3 = 0; 8 > t3; t3++) - 1 & e2 ? e2 = e2 >>> 1 ^ 3988292384 : e2 >>>= 1; - d[t2] = e2; - } - class u { - constructor(t2) { - this.crc = t2 || -1; - } - append(t2) { - let e2 = 0 | this.crc; - for (let n2 = 0, s2 = 0 | t2.length; s2 > n2; n2++) - e2 = e2 >>> 8 ^ d[255 & (e2 ^ t2[n2])]; - this.crc = e2; - } - get() { - return ~this.crc; - } - } - const f = { concat(t2, e2) { - if (0 === t2.length || 0 === e2.length) - return t2.concat(e2); - const n2 = t2[t2.length - 1], s2 = f.getPartial(n2); - return 32 === s2 ? t2.concat(e2) : f._shiftRight(e2, s2, 0 | n2, t2.slice(0, t2.length - 1)); - }, bitLength(t2) { - const e2 = t2.length; - if (0 === e2) - return 0; - const n2 = t2[e2 - 1]; - return 32 * (e2 - 1) + f.getPartial(n2); - }, clamp(t2, e2) { - if (32 * t2.length < e2) - return t2; - const s2 = (t2 = t2.slice(0, n.ceil(e2 / 32))).length; - return e2 &= 31, s2 > 0 && e2 && (t2[s2 - 1] = f.partial(e2, t2[s2 - 1] & 2147483648 >> e2 - 1, 1)), t2; - }, partial: (t2, e2, n2) => 32 === t2 ? e2 : (n2 ? 0 | e2 : e2 << 32 - t2) + 1099511627776 * t2, getPartial: (t2) => n.round(t2 / 1099511627776) || 32, _shiftRight(t2, e2, n2, s2) { - for (void 0 === s2 && (s2 = []); e2 >= 32; e2 -= 32) - s2.push(n2), n2 = 0; - if (0 === e2) - return s2.concat(t2); - for (let r3 = 0; r3 < t2.length; r3++) - s2.push(n2 | t2[r3] >>> e2), n2 = t2[r3] << 32 - e2; - const r2 = t2.length ? t2[t2.length - 1] : 0, a2 = f.getPartial(r2); - return s2.push(f.partial(e2 + a2 & 31, e2 + a2 > 32 ? n2 : s2.pop(), 1)), s2; - } }, g = { bytes: { fromBits(t2) { - const e2 = f.bitLength(t2) / 8, n2 = new r(e2); - let s2; - for (let r2 = 0; e2 > r2; r2++) - 0 == (3 & r2) && (s2 = t2[r2 / 4]), n2[r2] = s2 >>> 24, s2 <<= 8; - return n2; - }, toBits(t2) { - const e2 = []; - let n2, s2 = 0; - for (n2 = 0; n2 < t2.length; n2++) - s2 = s2 << 8 | t2[n2], 3 == (3 & n2) && (e2.push(s2), s2 = 0); - return 3 & n2 && e2.push(f.partial(8 * (3 & n2), s2)), e2; - } } }, w = { sha1: function(t2) { - t2 ? (this._h = t2._h.slice(0), this._buffer = t2._buffer.slice(0), this._length = t2._length) : this.reset(); - } }; - w.sha1.prototype = { blockSize: 512, reset: function() { - const t2 = this; - return t2._h = this._init.slice(0), t2._buffer = [], t2._length = 0, t2; - }, update: function(t2) { - const e2 = this; - "string" == typeof t2 && (t2 = g.utf8String.toBits(t2)); - const n2 = e2._buffer = f.concat(e2._buffer, t2), r2 = e2._length, a2 = e2._length = r2 + f.bitLength(t2); - if (a2 > 9007199254740991) - throw new s("Cannot hash more than 2^53 - 1 bits"); - const c2 = new i(n2); - let o2 = 0; - for (let t3 = e2.blockSize + r2 - (e2.blockSize + r2 & e2.blockSize - 1); a2 >= t3; t3 += e2.blockSize) - e2._block(c2.subarray(16 * o2, 16 * (o2 + 1))), o2 += 1; - return n2.splice(0, 16 * o2), e2; - }, finalize: function() { - const t2 = this; - let e2 = t2._buffer; - const s2 = t2._h; - e2 = f.concat(e2, [f.partial(1, 1)]); - for (let t3 = e2.length + 2; 15 & t3; t3++) - e2.push(0); - for (e2.push(n.floor(t2._length / 4294967296)), e2.push(0 | t2._length); e2.length; ) - t2._block(e2.splice(0, 16)); - return t2.reset(), s2; - }, _init: [1732584193, 4023233417, 2562383102, 271733878, 3285377520], _key: [1518500249, 1859775393, 2400959708, 3395469782], _f: (t2, e2, n2, s2) => t2 > 19 ? t2 > 39 ? t2 > 59 ? t2 > 79 ? void 0 : e2 ^ n2 ^ s2 : e2 & n2 | e2 & s2 | n2 & s2 : e2 ^ n2 ^ s2 : e2 & n2 | ~e2 & s2, _S: (t2, e2) => e2 << t2 | e2 >>> 32 - t2, _block: function(e2) { - const s2 = this, r2 = s2._h, a2 = t(80); - for (let t2 = 0; 16 > t2; t2++) - a2[t2] = e2[t2]; - let i2 = r2[0], c2 = r2[1], o2 = r2[2], l2 = r2[3], h2 = r2[4]; - for (let t2 = 0; 79 >= t2; t2++) { - 16 > t2 || (a2[t2] = s2._S(1, a2[t2 - 3] ^ a2[t2 - 8] ^ a2[t2 - 14] ^ a2[t2 - 16])); - const e3 = s2._S(5, i2) + s2._f(t2, c2, o2, l2) + h2 + a2[t2] + s2._key[n.floor(t2 / 20)] | 0; - h2 = l2, l2 = o2, o2 = s2._S(30, c2), c2 = i2, i2 = e3; - } - r2[0] = r2[0] + i2 | 0, r2[1] = r2[1] + c2 | 0, r2[2] = r2[2] + o2 | 0, r2[3] = r2[3] + l2 | 0, r2[4] = r2[4] + h2 | 0; - } }; - const y = { getRandomValues(t2) { - const e2 = new i(t2.buffer), s2 = (t3) => { - let e3 = 987654321; - const s3 = 4294967295; - return () => (e3 = 36969 * (65535 & e3) + (e3 >> 16) & s3, (((e3 << 16) + (t3 = 18e3 * (65535 & t3) + (t3 >> 16) & s3) & s3) / 4294967296 + 0.5) * (n.random() > 0.5 ? 1 : -1)); - }; - for (let r2, a2 = 0; a2 < t2.length; a2 += 4) { - const t3 = s2(4294967296 * (r2 || n.random())); - r2 = 987654071 * t3(), e2[a2 / 4] = 4294967296 * t3() | 0; - } - return t2; - } }, _ = { importKey: (t2) => new _.hmacSha1(g.bytes.toBits(t2)), pbkdf2(t2, e2, n2, r2) { - if (n2 = n2 || 1e4, 0 > r2 || 0 > n2) - throw new s("invalid params to pbkdf2"); - const a2 = 1 + (r2 >> 5) << 2; - let i2, c2, l2, h2, p2; - const d2 = new ArrayBuffer(a2), u2 = new o(d2); - let w2 = 0; - const y2 = f; - for (e2 = g.bytes.toBits(e2), p2 = 1; (a2 || 1) > w2; p2++) { - for (i2 = c2 = t2.encrypt(y2.concat(e2, [p2])), l2 = 1; n2 > l2; l2++) - for (c2 = t2.encrypt(c2), h2 = 0; h2 < c2.length; h2++) - i2[h2] ^= c2[h2]; - for (l2 = 0; (a2 || 1) > w2 && l2 < i2.length; l2++) - u2.setInt32(w2, i2[l2]), w2 += 4; - } - return d2.slice(0, r2 / 8); - }, hmacSha1: class { - constructor(t2) { - const e2 = this, n2 = e2._hash = w.sha1, s2 = [[], []], r2 = n2.prototype.blockSize / 32; - e2._baseHash = [new n2(), new n2()], t2.length > r2 && (t2 = n2.hash(t2)); - for (let e3 = 0; r2 > e3; e3++) - s2[0][e3] = 909522486 ^ t2[e3], s2[1][e3] = 1549556828 ^ t2[e3]; - e2._baseHash[0].update(s2[0]), e2._baseHash[1].update(s2[1]), e2._resultHash = new n2(e2._baseHash[0]); - } - reset() { - const t2 = this; - t2._resultHash = new t2._hash(t2._baseHash[0]), t2._updated = false; - } - update(t2) { - this._updated = true, this._resultHash.update(t2); - } - digest() { - const t2 = this, e2 = t2._resultHash.finalize(), n2 = new t2._hash(t2._baseHash[1]).update(e2).finalize(); - return t2.reset(), n2; - } - encrypt(t2) { - if (this._updated) - throw new s("encrypt on already updated hmac called!"); - return this.update(t2), this.digest(t2); - } - } }, m = "Invalid pasword", b = 16, k = { name: "PBKDF2" }, v = e.assign({ hash: { name: "HMAC" } }, k), z = e.assign({ iterations: 1e3, hash: { name: "SHA-1" } }, k), C = ["deriveBits"], S = [8, 12, 16], B = [16, 24, 32], I = 10, D = [0, 0, 0, 0], V = void 0 !== h, H = V && void 0 !== h.subtle, K = g.bytes, A = class { - constructor(t2) { - const e2 = this; - e2._tables = [[[], [], [], [], []], [[], [], [], [], []]], e2._tables[0][0][0] || e2._precompute(); - const n2 = e2._tables[0][4], r2 = e2._tables[1], a2 = t2.length; - let i2, c2, o2, l2 = 1; - if (4 !== a2 && 6 !== a2 && 8 !== a2) - throw new s("invalid aes key size"); - for (e2._key = [c2 = t2.slice(0), o2 = []], i2 = a2; 4 * a2 + 28 > i2; i2++) { - let t3 = c2[i2 - 1]; - (i2 % a2 == 0 || 8 === a2 && i2 % a2 == 4) && (t3 = n2[t3 >>> 24] << 24 ^ n2[t3 >> 16 & 255] << 16 ^ n2[t3 >> 8 & 255] << 8 ^ n2[255 & t3], i2 % a2 == 0 && (t3 = t3 << 8 ^ t3 >>> 24 ^ l2 << 24, l2 = l2 << 1 ^ 283 * (l2 >> 7))), c2[i2] = c2[i2 - a2] ^ t3; - } - for (let t3 = 0; i2; t3++, i2--) { - const e3 = c2[3 & t3 ? i2 : i2 - 4]; - o2[t3] = 4 >= i2 || 4 > t3 ? e3 : r2[0][n2[e3 >>> 24]] ^ r2[1][n2[e3 >> 16 & 255]] ^ r2[2][n2[e3 >> 8 & 255]] ^ r2[3][n2[255 & e3]]; - } - } - encrypt(t2) { - return this._crypt(t2, 0); - } - decrypt(t2) { - return this._crypt(t2, 1); - } - _precompute() { - const t2 = this._tables[0], e2 = this._tables[1], n2 = t2[4], s2 = e2[4], r2 = [], a2 = []; - let i2, c2, o2, l2; - for (let t3 = 0; 256 > t3; t3++) - a2[(r2[t3] = t3 << 1 ^ 283 * (t3 >> 7)) ^ t3] = t3; - for (let h2 = i2 = 0; !n2[h2]; h2 ^= c2 || 1, i2 = a2[i2] || 1) { - let a3 = i2 ^ i2 << 1 ^ i2 << 2 ^ i2 << 3 ^ i2 << 4; - a3 = a3 >> 8 ^ 255 & a3 ^ 99, n2[h2] = a3, s2[a3] = h2, l2 = r2[o2 = r2[c2 = r2[h2]]]; - let p2 = 16843009 * l2 ^ 65537 * o2 ^ 257 * c2 ^ 16843008 * h2, d2 = 257 * r2[a3] ^ 16843008 * a3; - for (let n3 = 0; 4 > n3; n3++) - t2[n3][h2] = d2 = d2 << 24 ^ d2 >>> 8, e2[n3][a3] = p2 = p2 << 24 ^ p2 >>> 8; - } - for (let n3 = 0; 5 > n3; n3++) - t2[n3] = t2[n3].slice(0), e2[n3] = e2[n3].slice(0); - } - _crypt(t2, e2) { - if (4 !== t2.length) - throw new s("invalid aes block size"); - const n2 = this._key[e2], r2 = n2.length / 4 - 2, a2 = [0, 0, 0, 0], i2 = this._tables[e2], c2 = i2[0], o2 = i2[1], l2 = i2[2], h2 = i2[3], p2 = i2[4]; - let d2, u2, f2, g2 = t2[0] ^ n2[0], w2 = t2[e2 ? 3 : 1] ^ n2[1], y2 = t2[2] ^ n2[2], _2 = t2[e2 ? 1 : 3] ^ n2[3], m2 = 4; - for (let t3 = 0; r2 > t3; t3++) - d2 = c2[g2 >>> 24] ^ o2[w2 >> 16 & 255] ^ l2[y2 >> 8 & 255] ^ h2[255 & _2] ^ n2[m2], u2 = c2[w2 >>> 24] ^ o2[y2 >> 16 & 255] ^ l2[_2 >> 8 & 255] ^ h2[255 & g2] ^ n2[m2 + 1], f2 = c2[y2 >>> 24] ^ o2[_2 >> 16 & 255] ^ l2[g2 >> 8 & 255] ^ h2[255 & w2] ^ n2[m2 + 2], _2 = c2[_2 >>> 24] ^ o2[g2 >> 16 & 255] ^ l2[w2 >> 8 & 255] ^ h2[255 & y2] ^ n2[m2 + 3], m2 += 4, g2 = d2, w2 = u2, y2 = f2; - for (let t3 = 0; 4 > t3; t3++) - a2[e2 ? 3 & -t3 : t3] = p2[g2 >>> 24] << 24 ^ p2[w2 >> 16 & 255] << 16 ^ p2[y2 >> 8 & 255] << 8 ^ p2[255 & _2] ^ n2[m2++], d2 = g2, g2 = w2, w2 = y2, y2 = _2, _2 = d2; - return a2; - } - }, R = class { - constructor(t2, e2) { - this._prf = t2, this._initIv = e2, this._iv = e2; - } - reset() { - this._iv = this._initIv; - } - update(t2) { - return this.calculate(this._prf, t2, this._iv); - } - incWord(t2) { - if (255 == (t2 >> 24 & 255)) { - let e2 = t2 >> 16 & 255, n2 = t2 >> 8 & 255, s2 = 255 & t2; - 255 === e2 ? (e2 = 0, 255 === n2 ? (n2 = 0, 255 === s2 ? s2 = 0 : ++s2) : ++n2) : ++e2, t2 = 0, t2 += e2 << 16, t2 += n2 << 8, t2 += s2; - } else - t2 += 1 << 24; - return t2; - } - incCounter(t2) { - 0 === (t2[0] = this.incWord(t2[0])) && (t2[1] = this.incWord(t2[1])); - } - calculate(t2, e2, n2) { - let s2; - if (!(s2 = e2.length)) - return []; - const r2 = f.bitLength(e2); - for (let r3 = 0; s2 > r3; r3 += 4) { - this.incCounter(n2); - const s3 = t2.encrypt(n2); - e2[r3] ^= s3[0], e2[r3 + 1] ^= s3[1], e2[r3 + 2] ^= s3[2], e2[r3 + 3] ^= s3[3]; - } - return f.clamp(e2, r2); - } - }, W = _.hmacSha1; - class T { - constructor(t2, n2, s2) { - e.assign(this, { password: t2, signed: n2, strength: s2 - 1, pendingInput: new r(0) }); - } - async append(e2) { - const n2 = this; - if (n2.password) { - const r2 = E(e2, 0, S[n2.strength] + 2); - await (async (t2, e3, n3) => { - await L(t2, n3, E(e3, 0, S[t2.strength])); - const r3 = E(e3, S[t2.strength]), a2 = t2.keys.passwordVerification; - if (a2[0] != r3[0] || a2[1] != r3[1]) - throw new s(m); - })(n2, r2, n2.password), n2.password = null, n2.aesCtrGladman = new R(new A(n2.keys.key), t.from(D)), n2.hmac = new W(n2.keys.authentication), e2 = E(e2, S[n2.strength] + 2); - } - return G(n2, e2, new r(e2.length - I - (e2.length - I) % b), 0, I, true); - } - flush() { - const t2 = this, e2 = t2.pendingInput, n2 = E(e2, 0, e2.length - I), s2 = E(e2, e2.length - I); - let a2 = new r(0); - if (n2.length) { - const e3 = K.toBits(n2); - t2.hmac.update(e3); - const s3 = t2.aesCtrGladman.update(e3); - a2 = K.fromBits(s3); - } - let i2 = true; - if (t2.signed) { - const e3 = E(K.fromBits(t2.hmac.digest()), 0, I); - for (let t3 = 0; I > t3; t3++) - e3[t3] != s2[t3] && (i2 = false); - } - return { valid: i2, data: a2 }; - } - } - class U { - constructor(t2, n2) { - e.assign(this, { password: t2, strength: n2 - 1, pendingInput: new r(0) }); - } - async append(e2) { - const n2 = this; - let s2 = new r(0); - n2.password && (s2 = await (async (t2, e3) => { - const n3 = (s3 = new r(S[t2.strength]), V && "function" == typeof h.getRandomValues ? h.getRandomValues(s3) : y.getRandomValues(s3)); - var s3; - return await L(t2, e3, n3), P(n3, t2.keys.passwordVerification); - })(n2, n2.password), n2.password = null, n2.aesCtrGladman = new R(new A(n2.keys.key), t.from(D)), n2.hmac = new W(n2.keys.authentication)); - const a2 = new r(s2.length + e2.length - e2.length % b); - return a2.set(s2, 0), G(n2, e2, a2, s2.length, 0); - } - flush() { - const t2 = this; - let e2 = new r(0); - if (t2.pendingInput.length) { - const n3 = t2.aesCtrGladman.update(K.toBits(t2.pendingInput)); - t2.hmac.update(n3), e2 = K.fromBits(n3); - } - const n2 = E(K.fromBits(t2.hmac.digest()), 0, I); - return { data: P(e2, n2), signature: n2 }; - } - } - function G(t2, e2, n2, s2, a2, i2) { - const c2 = e2.length - a2; - let o2; - for (t2.pendingInput.length && (e2 = P(t2.pendingInput, e2), n2 = ((t3, e3) => { - if (e3 && e3 > t3.length) { - const n3 = t3; - (t3 = new r(e3)).set(n3, 0); - } - return t3; - })(n2, c2 - c2 % b)), o2 = 0; c2 - b >= o2; o2 += b) { - const r2 = K.toBits(E(e2, o2, o2 + b)); - i2 && t2.hmac.update(r2); - const a3 = t2.aesCtrGladman.update(r2); - i2 || t2.hmac.update(a3), n2.set(K.fromBits(a3), o2 + s2); - } - return t2.pendingInput = E(e2, o2), n2; - } - async function L(t2, n2, s2) { - const a2 = ((t3) => { - if (void 0 === l) { - const e2 = new r((t3 = unescape(encodeURIComponent(t3))).length); - for (let n3 = 0; n3 < e2.length; n3++) - e2[n3] = t3.charCodeAt(n3); - return e2; - } - return new l().encode(t3); - })(n2), i2 = await ((t3, e2, n3, s3, r2) => V && H && "function" == typeof h.subtle.importKey ? h.subtle.importKey("raw", e2, n3, false, r2) : _.importKey(e2))(0, a2, v, 0, C), c2 = await (async (t3, e2, n3) => V && H && "function" == typeof h.subtle.deriveBits ? await h.subtle.deriveBits(t3, e2, n3) : _.pbkdf2(e2, t3.salt, z.iterations, n3))(e.assign({ salt: s2 }, z), i2, 8 * (2 * B[t2.strength] + 2)), o2 = new r(c2); - t2.keys = { key: K.toBits(E(o2, 0, B[t2.strength])), authentication: K.toBits(E(o2, B[t2.strength], 2 * B[t2.strength])), passwordVerification: E(o2, 2 * B[t2.strength]) }; - } - function P(t2, e2) { - let n2 = t2; - return t2.length + e2.length && (n2 = new r(t2.length + e2.length), n2.set(t2, 0), n2.set(e2, t2.length)), n2; - } - function E(t2, e2, n2) { - return t2.subarray(e2, n2); - } - class M { - constructor(t2, n2) { - e.assign(this, { password: t2, passwordVerification: n2 }), O(this, t2); - } - append(t2) { - const e2 = this; - if (e2.password) { - const n2 = x(e2, t2.subarray(0, 12)); - if (e2.password = null, n2[11] != e2.passwordVerification) - throw new s(m); - t2 = t2.subarray(12); - } - return x(e2, t2); - } - flush() { - return { valid: true, data: new r(0) }; - } - } - class j { - constructor(t2, n2) { - e.assign(this, { password: t2, passwordVerification: n2 }), O(this, t2); - } - append(t2) { - const e2 = this; - let n2, s2; - if (e2.password) { - e2.password = null; - const a2 = h.getRandomValues(new r(12)); - a2[11] = e2.passwordVerification, n2 = new r(t2.length + a2.length), n2.set(F(e2, a2), 0), s2 = 12; - } else - n2 = new r(t2.length), s2 = 0; - return n2.set(F(e2, t2), s2), n2; - } - flush() { - return { data: new r(0) }; - } - } - function x(t2, e2) { - const n2 = new r(e2.length); - for (let s2 = 0; s2 < e2.length; s2++) - n2[s2] = J(t2) ^ e2[s2], q(t2, n2[s2]); - return n2; - } - function F(t2, e2) { - const n2 = new r(e2.length); - for (let s2 = 0; s2 < e2.length; s2++) - n2[s2] = J(t2) ^ e2[s2], q(t2, e2[s2]); - return n2; - } - function O(t2, e2) { - t2.keys = [305419896, 591751049, 878082192], t2.crcKey0 = new u(t2.keys[0]), t2.crcKey2 = new u(t2.keys[2]); - for (let n2 = 0; n2 < e2.length; n2++) - q(t2, e2.charCodeAt(n2)); - } - function q(t2, e2) { - t2.crcKey0.append([e2]), t2.keys[0] = ~t2.crcKey0.get(), t2.keys[1] = Q(t2.keys[1] + N(t2.keys[0])), t2.keys[1] = Q(n.imul(t2.keys[1], 134775813) + 1), t2.crcKey2.append([t2.keys[1] >>> 24]), t2.keys[2] = ~t2.crcKey2.get(); - } - function J(t2) { - const e2 = 2 | t2.keys[2]; - return N(n.imul(e2, 1 ^ e2) >>> 8); - } - function N(t2) { - return 255 & t2; - } - function Q(t2) { - return 4294967295 & t2; - } - const X = "deflate", Y = "inflate", Z = "Invalid signature"; - class $ { - constructor(t2, { signature: n2, password: s2, signed: r2, compressed: a2, zipCrypto: i2, passwordVerification: c2, encryptionStrength: o2 }, { chunkSize: l2 }) { - const h2 = !!s2; - e.assign(this, { signature: n2, encrypted: h2, signed: r2, compressed: a2, inflate: a2 && new t2({ chunkSize: l2 }), crc32: r2 && new u(), zipCrypto: i2, decrypt: h2 && i2 ? new M(s2, c2) : new T(s2, r2, o2) }); - } - async append(t2) { - const e2 = this; - return e2.encrypted && t2.length && (t2 = await e2.decrypt.append(t2)), e2.compressed && t2.length && (t2 = await e2.inflate.append(t2)), (!e2.encrypted || e2.zipCrypto) && e2.signed && t2.length && e2.crc32.append(t2), t2; - } - async flush() { - const t2 = this; - let e2, n2 = new r(0); - if (t2.encrypted) { - const e3 = t2.decrypt.flush(); - if (!e3.valid) - throw new s(Z); - n2 = e3.data; - } - if ((!t2.encrypted || t2.zipCrypto) && t2.signed) { - const n3 = new o(new r(4).buffer); - if (e2 = t2.crc32.get(), n3.setUint32(0, e2), t2.signature != n3.getUint32(0, false)) - throw new s(Z); - } - return t2.compressed && (n2 = await t2.inflate.append(n2) || new r(0), await t2.inflate.flush()), { data: n2, signature: e2 }; - } - } - class tt { - constructor(t2, { encrypted: n2, signed: s2, compressed: r2, level: a2, zipCrypto: i2, password: c2, passwordVerification: o2, encryptionStrength: l2 }, { chunkSize: h2 }) { - e.assign(this, { encrypted: n2, signed: s2, compressed: r2, deflate: r2 && new t2({ level: a2 || 5, chunkSize: h2 }), crc32: s2 && new u(), zipCrypto: i2, encrypt: n2 && i2 ? new j(c2, o2) : new U(c2, l2) }); - } - async append(t2) { - const e2 = this; - let n2 = t2; - return e2.compressed && t2.length && (n2 = await e2.deflate.append(t2)), e2.encrypted && n2.length && (n2 = await e2.encrypt.append(n2)), (!e2.encrypted || e2.zipCrypto) && e2.signed && t2.length && e2.crc32.append(t2), n2; - } - async flush() { - const t2 = this; - let e2, n2 = new r(0); - if (t2.compressed && (n2 = await t2.deflate.flush() || new r(0)), t2.encrypted) { - n2 = await t2.encrypt.append(n2); - const s2 = t2.encrypt.flush(); - e2 = s2.signature; - const a2 = new r(n2.length + s2.data.length); - a2.set(n2, 0), a2.set(s2.data, n2.length), n2 = a2; - } - return t2.encrypted && !t2.zipCrypto || !t2.signed || (e2 = t2.crc32.get()), { data: n2, signature: e2 }; - } - } - const et = { init(t2) { - t2.scripts && t2.scripts.length && importScripts.apply(void 0, t2.scripts); - const e2 = t2.options; - let n2; - self.initCodec && self.initCodec(), e2.codecType.startsWith(X) ? n2 = self.Deflate : e2.codecType.startsWith(Y) && (n2 = self.Inflate), nt = ((t3, e3, n3) => e3.codecType.startsWith(X) ? new tt(t3, e3, n3) : e3.codecType.startsWith(Y) ? new $(t3, e3, n3) : void 0)(n2, e2, t2.config); - }, append: async (t2) => ({ data: await nt.append(t2.data) }), flush: () => nt.flush() }; - let nt; - function st(t2, n2, s2) { - return class { - constructor(a3) { - const i2 = this; - i2.codec = new t2(e.assign({}, n2, a3)), s2(i2.codec, (t3) => { - if (i2.pendingData) { - const e2 = i2.pendingData; - i2.pendingData = new r(e2.length + t3.length), i2.pendingData.set(e2, 0), i2.pendingData.set(t3, e2.length); - } else - i2.pendingData = new r(t3); - }); - } - append(t3) { - return this.codec.push(t3), a2(this); - } - flush() { - return this.codec.push(new r(0), true), a2(this); - } - }; - function a2(t3) { - if (t3.pendingData) { - const e2 = t3.pendingData; - return t3.pendingData = null, e2; - } - return new r(0); - } - } - addEventListener("message", async (t2) => { - const e2 = t2.data, n2 = e2.type, s2 = et[n2]; - if (s2) - try { - e2.data && (e2.data = new r(e2.data)); - const t3 = await s2(e2) || {}; - if (t3.type = n2, t3.data) - try { - t3.data = t3.data.buffer, p(t3, [t3.data]); - } catch (e3) { - p(t3); - } - else - p(t3); - } catch (t3) { - p({ type: n2, error: { message: t3.message, stack: t3.stack } }); - } - }), self.initCodec = () => { - const { Deflate: t2, Inflate: e2 } = ((t3, e3 = {}, n2) => ({ Deflate: st(t3.Deflate, e3.deflate, n2), Inflate: st(t3.Inflate, e3.inflate, n2) }))(pako, { deflate: { raw: true }, inflate: { raw: true } }, (t3, e3) => t3.onData = e3); - self.Deflate = t2, self.Inflate = e2; - }; -}(); diff --git a/debug/cesium/ThirdParty/basis_transcoder.wasm b/debug/cesium/ThirdParty/basis_transcoder.wasm deleted file mode 100644 index 71328587dfdfaa13f30072ca2bd8d658938ab415..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 500839 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

    p={AyovsD$zv@J>UY{B&w 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%0AE8r7Pddr!xOz@H2nYEofc!|_CNZ^S$^2Sx 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ⅅ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%0A|_Zcaav1H>G(>H(G9d3Np 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

    &3_)eib&RyWihF>+lN6ZX?BF+fXrAx@5^(COSMg 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 diff --git a/debug/cesium/ThirdParty/draco_decoder.wasm b/debug/cesium/ThirdParty/draco_decoder.wasm deleted file mode 100644 index e5a5e06eb51fb061a94a9682cc7e338038fae25c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 285747 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 z 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 jI`!dwO0TC5&f<9B@5#l>$GA4> { - // Source/ThirdParty/google-earth-dbroot-parser.js - window.cesiumGoogleEarthDbRootParser = function($protobuf) { - "use strict"; - var $Reader = $protobuf.Reader, $util = $protobuf.util; - var $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {}); - $root.keyhole = function() { - var keyhole = {}; - keyhole.dbroot = function() { - var dbroot = {}; - dbroot.StringEntryProto = function() { - function StringEntryProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - StringEntryProto.prototype.stringId = 0; - StringEntryProto.prototype.stringValue = ""; - StringEntryProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.StringEntryProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.stringId = reader.fixed32(); - break; - } - case 2: { - message.stringValue = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("stringId")) - throw $util.ProtocolError("missing required 'stringId'", { instance: message }); - if (!message.hasOwnProperty("stringValue")) - throw $util.ProtocolError("missing required 'stringValue'", { instance: message }); - return message; - }; - StringEntryProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isInteger(message.stringId)) - return "stringId: integer expected"; - if (!$util.isString(message.stringValue)) - return "stringValue: string expected"; - return null; - }; - StringEntryProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.StringEntryProto) - return object; - var message = new $root.keyhole.dbroot.StringEntryProto(); - if (object.stringId != null) - message.stringId = object.stringId >>> 0; - if (object.stringValue != null) - message.stringValue = String(object.stringValue); - return message; - }; - StringEntryProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.stringId = 0; - object.stringValue = ""; - } - if (message.stringId != null && message.hasOwnProperty("stringId")) - object.stringId = message.stringId; - if (message.stringValue != null && message.hasOwnProperty("stringValue")) - object.stringValue = message.stringValue; - return object; - }; - StringEntryProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - StringEntryProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.StringEntryProto"; - }; - return StringEntryProto; - }(); - dbroot.StringIdOrValueProto = function() { - function StringIdOrValueProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - StringIdOrValueProto.prototype.stringId = 0; - StringIdOrValueProto.prototype.value = ""; - StringIdOrValueProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.StringIdOrValueProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.stringId = reader.fixed32(); - break; - } - case 2: { - message.value = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - StringIdOrValueProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.stringId != null && message.hasOwnProperty("stringId")) { - if (!$util.isInteger(message.stringId)) - return "stringId: integer expected"; - } - if (message.value != null && message.hasOwnProperty("value")) { - if (!$util.isString(message.value)) - return "value: string expected"; - } - return null; - }; - StringIdOrValueProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.StringIdOrValueProto) - return object; - var message = new $root.keyhole.dbroot.StringIdOrValueProto(); - if (object.stringId != null) - message.stringId = object.stringId >>> 0; - if (object.value != null) - message.value = String(object.value); - return message; - }; - StringIdOrValueProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.stringId = 0; - object.value = ""; - } - if (message.stringId != null && message.hasOwnProperty("stringId")) - object.stringId = message.stringId; - if (message.value != null && message.hasOwnProperty("value")) - object.value = message.value; - return object; - }; - StringIdOrValueProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - StringIdOrValueProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.StringIdOrValueProto"; - }; - return StringIdOrValueProto; - }(); - dbroot.PlanetModelProto = function() { - function PlanetModelProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - PlanetModelProto.prototype.radius = 6378.137; - PlanetModelProto.prototype.flattening = 0.00335281066474748; - PlanetModelProto.prototype.elevationBias = 0; - PlanetModelProto.prototype.negativeAltitudeExponentBias = 0; - PlanetModelProto.prototype.compressedNegativeAltitudeThreshold = 0; - PlanetModelProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.PlanetModelProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.radius = reader.double(); - break; - } - case 2: { - message.flattening = reader.double(); - break; - } - case 4: { - message.elevationBias = reader.double(); - break; - } - case 5: { - message.negativeAltitudeExponentBias = reader.int32(); - break; - } - case 6: { - message.compressedNegativeAltitudeThreshold = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - PlanetModelProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.radius != null && message.hasOwnProperty("radius")) { - if (typeof message.radius !== "number") - return "radius: number expected"; - } - if (message.flattening != null && message.hasOwnProperty("flattening")) { - if (typeof message.flattening !== "number") - return "flattening: number expected"; - } - if (message.elevationBias != null && message.hasOwnProperty("elevationBias")) { - if (typeof message.elevationBias !== "number") - return "elevationBias: number expected"; - } - if (message.negativeAltitudeExponentBias != null && message.hasOwnProperty("negativeAltitudeExponentBias")) { - if (!$util.isInteger(message.negativeAltitudeExponentBias)) - return "negativeAltitudeExponentBias: integer expected"; - } - if (message.compressedNegativeAltitudeThreshold != null && message.hasOwnProperty("compressedNegativeAltitudeThreshold")) { - if (typeof message.compressedNegativeAltitudeThreshold !== "number") - return "compressedNegativeAltitudeThreshold: number expected"; - } - return null; - }; - PlanetModelProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.PlanetModelProto) - return object; - var message = new $root.keyhole.dbroot.PlanetModelProto(); - if (object.radius != null) - message.radius = Number(object.radius); - if (object.flattening != null) - message.flattening = Number(object.flattening); - if (object.elevationBias != null) - message.elevationBias = Number(object.elevationBias); - if (object.negativeAltitudeExponentBias != null) - message.negativeAltitudeExponentBias = object.negativeAltitudeExponentBias | 0; - if (object.compressedNegativeAltitudeThreshold != null) - message.compressedNegativeAltitudeThreshold = Number(object.compressedNegativeAltitudeThreshold); - return message; - }; - PlanetModelProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.radius = 6378.137; - object.flattening = 0.00335281066474748; - object.elevationBias = 0; - object.negativeAltitudeExponentBias = 0; - object.compressedNegativeAltitudeThreshold = 0; - } - if (message.radius != null && message.hasOwnProperty("radius")) - object.radius = options.json && !isFinite(message.radius) ? String(message.radius) : message.radius; - if (message.flattening != null && message.hasOwnProperty("flattening")) - object.flattening = options.json && !isFinite(message.flattening) ? String(message.flattening) : message.flattening; - if (message.elevationBias != null && message.hasOwnProperty("elevationBias")) - object.elevationBias = options.json && !isFinite(message.elevationBias) ? String(message.elevationBias) : message.elevationBias; - if (message.negativeAltitudeExponentBias != null && message.hasOwnProperty("negativeAltitudeExponentBias")) - object.negativeAltitudeExponentBias = message.negativeAltitudeExponentBias; - if (message.compressedNegativeAltitudeThreshold != null && message.hasOwnProperty("compressedNegativeAltitudeThreshold")) - object.compressedNegativeAltitudeThreshold = options.json && !isFinite(message.compressedNegativeAltitudeThreshold) ? String(message.compressedNegativeAltitudeThreshold) : message.compressedNegativeAltitudeThreshold; - return object; - }; - PlanetModelProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - PlanetModelProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.PlanetModelProto"; - }; - return PlanetModelProto; - }(); - dbroot.ProviderInfoProto = function() { - function ProviderInfoProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ProviderInfoProto.prototype.providerId = 0; - ProviderInfoProto.prototype.copyrightString = null; - ProviderInfoProto.prototype.verticalPixelOffset = -1; - ProviderInfoProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ProviderInfoProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.providerId = reader.int32(); - break; - } - case 2: { - message.copyrightString = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.verticalPixelOffset = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("providerId")) - throw $util.ProtocolError("missing required 'providerId'", { instance: message }); - return message; - }; - ProviderInfoProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isInteger(message.providerId)) - return "providerId: integer expected"; - if (message.copyrightString != null && message.hasOwnProperty("copyrightString")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.copyrightString); - if (error) - return "copyrightString." + error; - } - if (message.verticalPixelOffset != null && message.hasOwnProperty("verticalPixelOffset")) { - if (!$util.isInteger(message.verticalPixelOffset)) - return "verticalPixelOffset: integer expected"; - } - return null; - }; - ProviderInfoProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.ProviderInfoProto) - return object; - var message = new $root.keyhole.dbroot.ProviderInfoProto(); - if (object.providerId != null) - message.providerId = object.providerId | 0; - if (object.copyrightString != null) { - if (typeof object.copyrightString !== "object") - throw TypeError(".keyhole.dbroot.ProviderInfoProto.copyrightString: object expected"); - message.copyrightString = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.copyrightString); - } - if (object.verticalPixelOffset != null) - message.verticalPixelOffset = object.verticalPixelOffset | 0; - return message; - }; - ProviderInfoProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.providerId = 0; - object.copyrightString = null; - object.verticalPixelOffset = -1; - } - if (message.providerId != null && message.hasOwnProperty("providerId")) - object.providerId = message.providerId; - if (message.copyrightString != null && message.hasOwnProperty("copyrightString")) - object.copyrightString = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.copyrightString, options); - if (message.verticalPixelOffset != null && message.hasOwnProperty("verticalPixelOffset")) - object.verticalPixelOffset = message.verticalPixelOffset; - return object; - }; - ProviderInfoProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ProviderInfoProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.ProviderInfoProto"; - }; - return ProviderInfoProto; - }(); - dbroot.PopUpProto = function() { - function PopUpProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - PopUpProto.prototype.isBalloonStyle = false; - PopUpProto.prototype.text = null; - PopUpProto.prototype.backgroundColorAbgr = 4294967295; - PopUpProto.prototype.textColorAbgr = 4278190080; - PopUpProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.PopUpProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.isBalloonStyle = reader.bool(); - break; - } - case 2: { - message.text = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.backgroundColorAbgr = reader.fixed32(); - break; - } - case 4: { - message.textColorAbgr = reader.fixed32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - PopUpProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.isBalloonStyle != null && message.hasOwnProperty("isBalloonStyle")) { - if (typeof message.isBalloonStyle !== "boolean") - return "isBalloonStyle: boolean expected"; - } - if (message.text != null && message.hasOwnProperty("text")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.text); - if (error) - return "text." + error; - } - if (message.backgroundColorAbgr != null && message.hasOwnProperty("backgroundColorAbgr")) { - if (!$util.isInteger(message.backgroundColorAbgr)) - return "backgroundColorAbgr: integer expected"; - } - if (message.textColorAbgr != null && message.hasOwnProperty("textColorAbgr")) { - if (!$util.isInteger(message.textColorAbgr)) - return "textColorAbgr: integer expected"; - } - return null; - }; - PopUpProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.PopUpProto) - return object; - var message = new $root.keyhole.dbroot.PopUpProto(); - if (object.isBalloonStyle != null) - message.isBalloonStyle = Boolean(object.isBalloonStyle); - if (object.text != null) { - if (typeof object.text !== "object") - throw TypeError(".keyhole.dbroot.PopUpProto.text: object expected"); - message.text = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.text); - } - if (object.backgroundColorAbgr != null) - message.backgroundColorAbgr = object.backgroundColorAbgr >>> 0; - if (object.textColorAbgr != null) - message.textColorAbgr = object.textColorAbgr >>> 0; - return message; - }; - PopUpProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.isBalloonStyle = false; - object.text = null; - object.backgroundColorAbgr = 4294967295; - object.textColorAbgr = 4278190080; - } - if (message.isBalloonStyle != null && message.hasOwnProperty("isBalloonStyle")) - object.isBalloonStyle = message.isBalloonStyle; - if (message.text != null && message.hasOwnProperty("text")) - object.text = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.text, options); - if (message.backgroundColorAbgr != null && message.hasOwnProperty("backgroundColorAbgr")) - object.backgroundColorAbgr = message.backgroundColorAbgr; - if (message.textColorAbgr != null && message.hasOwnProperty("textColorAbgr")) - object.textColorAbgr = message.textColorAbgr; - return object; - }; - PopUpProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - PopUpProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.PopUpProto"; - }; - return PopUpProto; - }(); - dbroot.StyleAttributeProto = function() { - function StyleAttributeProto(properties) { - this.drawFlag = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - StyleAttributeProto.prototype.styleId = ""; - StyleAttributeProto.prototype.providerId = 0; - StyleAttributeProto.prototype.polyColorAbgr = 4294967295; - StyleAttributeProto.prototype.lineColorAbgr = 4294967295; - StyleAttributeProto.prototype.lineWidth = 1; - StyleAttributeProto.prototype.labelColorAbgr = 4294967295; - StyleAttributeProto.prototype.labelScale = 1; - StyleAttributeProto.prototype.placemarkIconColorAbgr = 4294967295; - StyleAttributeProto.prototype.placemarkIconScale = 1; - StyleAttributeProto.prototype.placemarkIconPath = null; - StyleAttributeProto.prototype.placemarkIconX = 0; - StyleAttributeProto.prototype.placemarkIconY = 0; - StyleAttributeProto.prototype.placemarkIconWidth = 32; - StyleAttributeProto.prototype.placemarkIconHeight = 32; - StyleAttributeProto.prototype.popUp = null; - StyleAttributeProto.prototype.drawFlag = $util.emptyArray; - StyleAttributeProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.StyleAttributeProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.styleId = reader.string(); - break; - } - case 3: { - message.providerId = reader.int32(); - break; - } - case 4: { - message.polyColorAbgr = reader.fixed32(); - break; - } - case 5: { - message.lineColorAbgr = reader.fixed32(); - break; - } - case 6: { - message.lineWidth = reader.float(); - break; - } - case 7: { - message.labelColorAbgr = reader.fixed32(); - break; - } - case 8: { - message.labelScale = reader.float(); - break; - } - case 9: { - message.placemarkIconColorAbgr = reader.fixed32(); - break; - } - case 10: { - message.placemarkIconScale = reader.float(); - break; - } - case 11: { - message.placemarkIconPath = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 12: { - message.placemarkIconX = reader.int32(); - break; - } - case 13: { - message.placemarkIconY = reader.int32(); - break; - } - case 14: { - message.placemarkIconWidth = reader.int32(); - break; - } - case 15: { - message.placemarkIconHeight = reader.int32(); - break; - } - case 16: { - message.popUp = $root.keyhole.dbroot.PopUpProto.decode(reader, reader.uint32()); - break; - } - case 17: { - if (!(message.drawFlag && message.drawFlag.length)) - message.drawFlag = []; - message.drawFlag.push($root.keyhole.dbroot.DrawFlagProto.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("styleId")) - throw $util.ProtocolError("missing required 'styleId'", { instance: message }); - return message; - }; - StyleAttributeProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isString(message.styleId)) - return "styleId: string expected"; - if (message.providerId != null && message.hasOwnProperty("providerId")) { - if (!$util.isInteger(message.providerId)) - return "providerId: integer expected"; - } - if (message.polyColorAbgr != null && message.hasOwnProperty("polyColorAbgr")) { - if (!$util.isInteger(message.polyColorAbgr)) - return "polyColorAbgr: integer expected"; - } - if (message.lineColorAbgr != null && message.hasOwnProperty("lineColorAbgr")) { - if (!$util.isInteger(message.lineColorAbgr)) - return "lineColorAbgr: integer expected"; - } - if (message.lineWidth != null && message.hasOwnProperty("lineWidth")) { - if (typeof message.lineWidth !== "number") - return "lineWidth: number expected"; - } - if (message.labelColorAbgr != null && message.hasOwnProperty("labelColorAbgr")) { - if (!$util.isInteger(message.labelColorAbgr)) - return "labelColorAbgr: integer expected"; - } - if (message.labelScale != null && message.hasOwnProperty("labelScale")) { - if (typeof message.labelScale !== "number") - return "labelScale: number expected"; - } - if (message.placemarkIconColorAbgr != null && message.hasOwnProperty("placemarkIconColorAbgr")) { - if (!$util.isInteger(message.placemarkIconColorAbgr)) - return "placemarkIconColorAbgr: integer expected"; - } - if (message.placemarkIconScale != null && message.hasOwnProperty("placemarkIconScale")) { - if (typeof message.placemarkIconScale !== "number") - return "placemarkIconScale: number expected"; - } - if (message.placemarkIconPath != null && message.hasOwnProperty("placemarkIconPath")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.placemarkIconPath); - if (error) - return "placemarkIconPath." + error; - } - if (message.placemarkIconX != null && message.hasOwnProperty("placemarkIconX")) { - if (!$util.isInteger(message.placemarkIconX)) - return "placemarkIconX: integer expected"; - } - if (message.placemarkIconY != null && message.hasOwnProperty("placemarkIconY")) { - if (!$util.isInteger(message.placemarkIconY)) - return "placemarkIconY: integer expected"; - } - if (message.placemarkIconWidth != null && message.hasOwnProperty("placemarkIconWidth")) { - if (!$util.isInteger(message.placemarkIconWidth)) - return "placemarkIconWidth: integer expected"; - } - if (message.placemarkIconHeight != null && message.hasOwnProperty("placemarkIconHeight")) { - if (!$util.isInteger(message.placemarkIconHeight)) - return "placemarkIconHeight: integer expected"; - } - if (message.popUp != null && message.hasOwnProperty("popUp")) { - var error = $root.keyhole.dbroot.PopUpProto.verify(message.popUp); - if (error) - return "popUp." + error; - } - if (message.drawFlag != null && message.hasOwnProperty("drawFlag")) { - if (!Array.isArray(message.drawFlag)) - return "drawFlag: array expected"; - for (var i = 0; i < message.drawFlag.length; ++i) { - var error = $root.keyhole.dbroot.DrawFlagProto.verify(message.drawFlag[i]); - if (error) - return "drawFlag." + error; - } - } - return null; - }; - StyleAttributeProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.StyleAttributeProto) - return object; - var message = new $root.keyhole.dbroot.StyleAttributeProto(); - if (object.styleId != null) - message.styleId = String(object.styleId); - if (object.providerId != null) - message.providerId = object.providerId | 0; - if (object.polyColorAbgr != null) - message.polyColorAbgr = object.polyColorAbgr >>> 0; - if (object.lineColorAbgr != null) - message.lineColorAbgr = object.lineColorAbgr >>> 0; - if (object.lineWidth != null) - message.lineWidth = Number(object.lineWidth); - if (object.labelColorAbgr != null) - message.labelColorAbgr = object.labelColorAbgr >>> 0; - if (object.labelScale != null) - message.labelScale = Number(object.labelScale); - if (object.placemarkIconColorAbgr != null) - message.placemarkIconColorAbgr = object.placemarkIconColorAbgr >>> 0; - if (object.placemarkIconScale != null) - message.placemarkIconScale = Number(object.placemarkIconScale); - if (object.placemarkIconPath != null) { - if (typeof object.placemarkIconPath !== "object") - throw TypeError(".keyhole.dbroot.StyleAttributeProto.placemarkIconPath: object expected"); - message.placemarkIconPath = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.placemarkIconPath); - } - if (object.placemarkIconX != null) - message.placemarkIconX = object.placemarkIconX | 0; - if (object.placemarkIconY != null) - message.placemarkIconY = object.placemarkIconY | 0; - if (object.placemarkIconWidth != null) - message.placemarkIconWidth = object.placemarkIconWidth | 0; - if (object.placemarkIconHeight != null) - message.placemarkIconHeight = object.placemarkIconHeight | 0; - if (object.popUp != null) { - if (typeof object.popUp !== "object") - throw TypeError(".keyhole.dbroot.StyleAttributeProto.popUp: object expected"); - message.popUp = $root.keyhole.dbroot.PopUpProto.fromObject(object.popUp); - } - if (object.drawFlag) { - if (!Array.isArray(object.drawFlag)) - throw TypeError(".keyhole.dbroot.StyleAttributeProto.drawFlag: array expected"); - message.drawFlag = []; - for (var i = 0; i < object.drawFlag.length; ++i) { - if (typeof object.drawFlag[i] !== "object") - throw TypeError(".keyhole.dbroot.StyleAttributeProto.drawFlag: object expected"); - message.drawFlag[i] = $root.keyhole.dbroot.DrawFlagProto.fromObject(object.drawFlag[i]); - } - } - return message; - }; - StyleAttributeProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.drawFlag = []; - if (options.defaults) { - object.styleId = ""; - object.providerId = 0; - object.polyColorAbgr = 4294967295; - object.lineColorAbgr = 4294967295; - object.lineWidth = 1; - object.labelColorAbgr = 4294967295; - object.labelScale = 1; - object.placemarkIconColorAbgr = 4294967295; - object.placemarkIconScale = 1; - object.placemarkIconPath = null; - object.placemarkIconX = 0; - object.placemarkIconY = 0; - object.placemarkIconWidth = 32; - object.placemarkIconHeight = 32; - object.popUp = null; - } - if (message.styleId != null && message.hasOwnProperty("styleId")) - object.styleId = message.styleId; - if (message.providerId != null && message.hasOwnProperty("providerId")) - object.providerId = message.providerId; - if (message.polyColorAbgr != null && message.hasOwnProperty("polyColorAbgr")) - object.polyColorAbgr = message.polyColorAbgr; - if (message.lineColorAbgr != null && message.hasOwnProperty("lineColorAbgr")) - object.lineColorAbgr = message.lineColorAbgr; - if (message.lineWidth != null && message.hasOwnProperty("lineWidth")) - object.lineWidth = options.json && !isFinite(message.lineWidth) ? String(message.lineWidth) : message.lineWidth; - if (message.labelColorAbgr != null && message.hasOwnProperty("labelColorAbgr")) - object.labelColorAbgr = message.labelColorAbgr; - if (message.labelScale != null && message.hasOwnProperty("labelScale")) - object.labelScale = options.json && !isFinite(message.labelScale) ? String(message.labelScale) : message.labelScale; - if (message.placemarkIconColorAbgr != null && message.hasOwnProperty("placemarkIconColorAbgr")) - object.placemarkIconColorAbgr = message.placemarkIconColorAbgr; - if (message.placemarkIconScale != null && message.hasOwnProperty("placemarkIconScale")) - object.placemarkIconScale = options.json && !isFinite(message.placemarkIconScale) ? String(message.placemarkIconScale) : message.placemarkIconScale; - if (message.placemarkIconPath != null && message.hasOwnProperty("placemarkIconPath")) - object.placemarkIconPath = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.placemarkIconPath, options); - if (message.placemarkIconX != null && message.hasOwnProperty("placemarkIconX")) - object.placemarkIconX = message.placemarkIconX; - if (message.placemarkIconY != null && message.hasOwnProperty("placemarkIconY")) - object.placemarkIconY = message.placemarkIconY; - if (message.placemarkIconWidth != null && message.hasOwnProperty("placemarkIconWidth")) - object.placemarkIconWidth = message.placemarkIconWidth; - if (message.placemarkIconHeight != null && message.hasOwnProperty("placemarkIconHeight")) - object.placemarkIconHeight = message.placemarkIconHeight; - if (message.popUp != null && message.hasOwnProperty("popUp")) - object.popUp = $root.keyhole.dbroot.PopUpProto.toObject(message.popUp, options); - if (message.drawFlag && message.drawFlag.length) { - object.drawFlag = []; - for (var j = 0; j < message.drawFlag.length; ++j) - object.drawFlag[j] = $root.keyhole.dbroot.DrawFlagProto.toObject(message.drawFlag[j], options); - } - return object; - }; - StyleAttributeProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - StyleAttributeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.StyleAttributeProto"; - }; - return StyleAttributeProto; - }(); - dbroot.StyleMapProto = function() { - function StyleMapProto(properties) { - this.channelId = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - StyleMapProto.prototype.styleMapId = 0; - StyleMapProto.prototype.channelId = $util.emptyArray; - StyleMapProto.prototype.normalStyleAttribute = 0; - StyleMapProto.prototype.highlightStyleAttribute = 0; - StyleMapProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.StyleMapProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.styleMapId = reader.int32(); - break; - } - case 2: { - if (!(message.channelId && message.channelId.length)) - message.channelId = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.channelId.push(reader.int32()); - } else - message.channelId.push(reader.int32()); - break; - } - case 3: { - message.normalStyleAttribute = reader.int32(); - break; - } - case 4: { - message.highlightStyleAttribute = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("styleMapId")) - throw $util.ProtocolError("missing required 'styleMapId'", { instance: message }); - return message; - }; - StyleMapProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isInteger(message.styleMapId)) - return "styleMapId: integer expected"; - if (message.channelId != null && message.hasOwnProperty("channelId")) { - if (!Array.isArray(message.channelId)) - return "channelId: array expected"; - for (var i = 0; i < message.channelId.length; ++i) - if (!$util.isInteger(message.channelId[i])) - return "channelId: integer[] expected"; - } - if (message.normalStyleAttribute != null && message.hasOwnProperty("normalStyleAttribute")) { - if (!$util.isInteger(message.normalStyleAttribute)) - return "normalStyleAttribute: integer expected"; - } - if (message.highlightStyleAttribute != null && message.hasOwnProperty("highlightStyleAttribute")) { - if (!$util.isInteger(message.highlightStyleAttribute)) - return "highlightStyleAttribute: integer expected"; - } - return null; - }; - StyleMapProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.StyleMapProto) - return object; - var message = new $root.keyhole.dbroot.StyleMapProto(); - if (object.styleMapId != null) - message.styleMapId = object.styleMapId | 0; - if (object.channelId) { - if (!Array.isArray(object.channelId)) - throw TypeError(".keyhole.dbroot.StyleMapProto.channelId: array expected"); - message.channelId = []; - for (var i = 0; i < object.channelId.length; ++i) - message.channelId[i] = object.channelId[i] | 0; - } - if (object.normalStyleAttribute != null) - message.normalStyleAttribute = object.normalStyleAttribute | 0; - if (object.highlightStyleAttribute != null) - message.highlightStyleAttribute = object.highlightStyleAttribute | 0; - return message; - }; - StyleMapProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.channelId = []; - if (options.defaults) { - object.styleMapId = 0; - object.normalStyleAttribute = 0; - object.highlightStyleAttribute = 0; - } - if (message.styleMapId != null && message.hasOwnProperty("styleMapId")) - object.styleMapId = message.styleMapId; - if (message.channelId && message.channelId.length) { - object.channelId = []; - for (var j = 0; j < message.channelId.length; ++j) - object.channelId[j] = message.channelId[j]; - } - if (message.normalStyleAttribute != null && message.hasOwnProperty("normalStyleAttribute")) - object.normalStyleAttribute = message.normalStyleAttribute; - if (message.highlightStyleAttribute != null && message.hasOwnProperty("highlightStyleAttribute")) - object.highlightStyleAttribute = message.highlightStyleAttribute; - return object; - }; - StyleMapProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - StyleMapProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.StyleMapProto"; - }; - return StyleMapProto; - }(); - dbroot.ZoomRangeProto = function() { - function ZoomRangeProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ZoomRangeProto.prototype.minZoom = 0; - ZoomRangeProto.prototype.maxZoom = 0; - ZoomRangeProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ZoomRangeProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.minZoom = reader.int32(); - break; - } - case 2: { - message.maxZoom = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("minZoom")) - throw $util.ProtocolError("missing required 'minZoom'", { instance: message }); - if (!message.hasOwnProperty("maxZoom")) - throw $util.ProtocolError("missing required 'maxZoom'", { instance: message }); - return message; - }; - ZoomRangeProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isInteger(message.minZoom)) - return "minZoom: integer expected"; - if (!$util.isInteger(message.maxZoom)) - return "maxZoom: integer expected"; - return null; - }; - ZoomRangeProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.ZoomRangeProto) - return object; - var message = new $root.keyhole.dbroot.ZoomRangeProto(); - if (object.minZoom != null) - message.minZoom = object.minZoom | 0; - if (object.maxZoom != null) - message.maxZoom = object.maxZoom | 0; - return message; - }; - ZoomRangeProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.minZoom = 0; - object.maxZoom = 0; - } - if (message.minZoom != null && message.hasOwnProperty("minZoom")) - object.minZoom = message.minZoom; - if (message.maxZoom != null && message.hasOwnProperty("maxZoom")) - object.maxZoom = message.maxZoom; - return object; - }; - ZoomRangeProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ZoomRangeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.ZoomRangeProto"; - }; - return ZoomRangeProto; - }(); - dbroot.DrawFlagProto = function() { - function DrawFlagProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - DrawFlagProto.prototype.drawFlagType = 1; - DrawFlagProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DrawFlagProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.drawFlagType = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("drawFlagType")) - throw $util.ProtocolError("missing required 'drawFlagType'", { instance: message }); - return message; - }; - DrawFlagProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - switch (message.drawFlagType) { - default: - return "drawFlagType: enum value expected"; - case 1: - case 2: - case 3: - case 4: - case 5: - break; - } - return null; - }; - DrawFlagProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.DrawFlagProto) - return object; - var message = new $root.keyhole.dbroot.DrawFlagProto(); - switch (object.drawFlagType) { - case "TYPE_FILL_ONLY": - case 1: - message.drawFlagType = 1; - break; - case "TYPE_OUTLINE_ONLY": - case 2: - message.drawFlagType = 2; - break; - case "TYPE_FILL_AND_OUTLINE": - case 3: - message.drawFlagType = 3; - break; - case "TYPE_ANTIALIASING": - case 4: - message.drawFlagType = 4; - break; - case "TYPE_CENTER_LABEL": - case 5: - message.drawFlagType = 5; - break; - } - return message; - }; - DrawFlagProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.drawFlagType = options.enums === String ? "TYPE_FILL_ONLY" : 1; - if (message.drawFlagType != null && message.hasOwnProperty("drawFlagType")) - object.drawFlagType = options.enums === String ? $root.keyhole.dbroot.DrawFlagProto.DrawFlagType[message.drawFlagType] : message.drawFlagType; - return object; - }; - DrawFlagProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - DrawFlagProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.DrawFlagProto"; - }; - DrawFlagProto.DrawFlagType = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[1] = "TYPE_FILL_ONLY"] = 1; - values[valuesById[2] = "TYPE_OUTLINE_ONLY"] = 2; - values[valuesById[3] = "TYPE_FILL_AND_OUTLINE"] = 3; - values[valuesById[4] = "TYPE_ANTIALIASING"] = 4; - values[valuesById[5] = "TYPE_CENTER_LABEL"] = 5; - return values; - }(); - return DrawFlagProto; - }(); - dbroot.LayerProto = function() { - function LayerProto(properties) { - this.zoomRange = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - LayerProto.prototype.zoomRange = $util.emptyArray; - LayerProto.prototype.preserveTextLevel = 30; - LayerProto.prototype.lodBeginTransition = false; - LayerProto.prototype.lodEndTransition = false; - LayerProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.LayerProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.zoomRange && message.zoomRange.length)) - message.zoomRange = []; - message.zoomRange.push($root.keyhole.dbroot.ZoomRangeProto.decode(reader, reader.uint32())); - break; - } - case 2: { - message.preserveTextLevel = reader.int32(); - break; - } - case 4: { - message.lodBeginTransition = reader.bool(); - break; - } - case 5: { - message.lodEndTransition = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - LayerProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.zoomRange != null && message.hasOwnProperty("zoomRange")) { - if (!Array.isArray(message.zoomRange)) - return "zoomRange: array expected"; - for (var i = 0; i < message.zoomRange.length; ++i) { - var error = $root.keyhole.dbroot.ZoomRangeProto.verify(message.zoomRange[i]); - if (error) - return "zoomRange." + error; - } - } - if (message.preserveTextLevel != null && message.hasOwnProperty("preserveTextLevel")) { - if (!$util.isInteger(message.preserveTextLevel)) - return "preserveTextLevel: integer expected"; - } - if (message.lodBeginTransition != null && message.hasOwnProperty("lodBeginTransition")) { - if (typeof message.lodBeginTransition !== "boolean") - return "lodBeginTransition: boolean expected"; - } - if (message.lodEndTransition != null && message.hasOwnProperty("lodEndTransition")) { - if (typeof message.lodEndTransition !== "boolean") - return "lodEndTransition: boolean expected"; - } - return null; - }; - LayerProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.LayerProto) - return object; - var message = new $root.keyhole.dbroot.LayerProto(); - if (object.zoomRange) { - if (!Array.isArray(object.zoomRange)) - throw TypeError(".keyhole.dbroot.LayerProto.zoomRange: array expected"); - message.zoomRange = []; - for (var i = 0; i < object.zoomRange.length; ++i) { - if (typeof object.zoomRange[i] !== "object") - throw TypeError(".keyhole.dbroot.LayerProto.zoomRange: object expected"); - message.zoomRange[i] = $root.keyhole.dbroot.ZoomRangeProto.fromObject(object.zoomRange[i]); - } - } - if (object.preserveTextLevel != null) - message.preserveTextLevel = object.preserveTextLevel | 0; - if (object.lodBeginTransition != null) - message.lodBeginTransition = Boolean(object.lodBeginTransition); - if (object.lodEndTransition != null) - message.lodEndTransition = Boolean(object.lodEndTransition); - return message; - }; - LayerProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.zoomRange = []; - if (options.defaults) { - object.preserveTextLevel = 30; - object.lodBeginTransition = false; - object.lodEndTransition = false; - } - if (message.zoomRange && message.zoomRange.length) { - object.zoomRange = []; - for (var j = 0; j < message.zoomRange.length; ++j) - object.zoomRange[j] = $root.keyhole.dbroot.ZoomRangeProto.toObject(message.zoomRange[j], options); - } - if (message.preserveTextLevel != null && message.hasOwnProperty("preserveTextLevel")) - object.preserveTextLevel = message.preserveTextLevel; - if (message.lodBeginTransition != null && message.hasOwnProperty("lodBeginTransition")) - object.lodBeginTransition = message.lodBeginTransition; - if (message.lodEndTransition != null && message.hasOwnProperty("lodEndTransition")) - object.lodEndTransition = message.lodEndTransition; - return object; - }; - LayerProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - LayerProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.LayerProto"; - }; - return LayerProto; - }(); - dbroot.FolderProto = function() { - function FolderProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - FolderProto.prototype.isExpandable = true; - FolderProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.FolderProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.isExpandable = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - FolderProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.isExpandable != null && message.hasOwnProperty("isExpandable")) { - if (typeof message.isExpandable !== "boolean") - return "isExpandable: boolean expected"; - } - return null; - }; - FolderProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.FolderProto) - return object; - var message = new $root.keyhole.dbroot.FolderProto(); - if (object.isExpandable != null) - message.isExpandable = Boolean(object.isExpandable); - return message; - }; - FolderProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.isExpandable = true; - if (message.isExpandable != null && message.hasOwnProperty("isExpandable")) - object.isExpandable = message.isExpandable; - return object; - }; - FolderProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - FolderProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.FolderProto"; - }; - return FolderProto; - }(); - dbroot.RequirementProto = function() { - function RequirementProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - RequirementProto.prototype.requiredVram = ""; - RequirementProto.prototype.requiredClientVer = ""; - RequirementProto.prototype.probability = ""; - RequirementProto.prototype.requiredUserAgent = ""; - RequirementProto.prototype.requiredClientCapabilities = ""; - RequirementProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.RequirementProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 3: { - message.requiredVram = reader.string(); - break; - } - case 4: { - message.requiredClientVer = reader.string(); - break; - } - case 5: { - message.probability = reader.string(); - break; - } - case 6: { - message.requiredUserAgent = reader.string(); - break; - } - case 7: { - message.requiredClientCapabilities = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - RequirementProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.requiredVram != null && message.hasOwnProperty("requiredVram")) { - if (!$util.isString(message.requiredVram)) - return "requiredVram: string expected"; - } - if (message.requiredClientVer != null && message.hasOwnProperty("requiredClientVer")) { - if (!$util.isString(message.requiredClientVer)) - return "requiredClientVer: string expected"; - } - if (message.probability != null && message.hasOwnProperty("probability")) { - if (!$util.isString(message.probability)) - return "probability: string expected"; - } - if (message.requiredUserAgent != null && message.hasOwnProperty("requiredUserAgent")) { - if (!$util.isString(message.requiredUserAgent)) - return "requiredUserAgent: string expected"; - } - if (message.requiredClientCapabilities != null && message.hasOwnProperty("requiredClientCapabilities")) { - if (!$util.isString(message.requiredClientCapabilities)) - return "requiredClientCapabilities: string expected"; - } - return null; - }; - RequirementProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.RequirementProto) - return object; - var message = new $root.keyhole.dbroot.RequirementProto(); - if (object.requiredVram != null) - message.requiredVram = String(object.requiredVram); - if (object.requiredClientVer != null) - message.requiredClientVer = String(object.requiredClientVer); - if (object.probability != null) - message.probability = String(object.probability); - if (object.requiredUserAgent != null) - message.requiredUserAgent = String(object.requiredUserAgent); - if (object.requiredClientCapabilities != null) - message.requiredClientCapabilities = String(object.requiredClientCapabilities); - return message; - }; - RequirementProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.requiredVram = ""; - object.requiredClientVer = ""; - object.probability = ""; - object.requiredUserAgent = ""; - object.requiredClientCapabilities = ""; - } - if (message.requiredVram != null && message.hasOwnProperty("requiredVram")) - object.requiredVram = message.requiredVram; - if (message.requiredClientVer != null && message.hasOwnProperty("requiredClientVer")) - object.requiredClientVer = message.requiredClientVer; - if (message.probability != null && message.hasOwnProperty("probability")) - object.probability = message.probability; - if (message.requiredUserAgent != null && message.hasOwnProperty("requiredUserAgent")) - object.requiredUserAgent = message.requiredUserAgent; - if (message.requiredClientCapabilities != null && message.hasOwnProperty("requiredClientCapabilities")) - object.requiredClientCapabilities = message.requiredClientCapabilities; - return object; - }; - RequirementProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - RequirementProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.RequirementProto"; - }; - return RequirementProto; - }(); - dbroot.LookAtProto = function() { - function LookAtProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - LookAtProto.prototype.longitude = 0; - LookAtProto.prototype.latitude = 0; - LookAtProto.prototype.range = 0; - LookAtProto.prototype.tilt = 0; - LookAtProto.prototype.heading = 0; - LookAtProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.LookAtProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.longitude = reader.float(); - break; - } - case 2: { - message.latitude = reader.float(); - break; - } - case 3: { - message.range = reader.float(); - break; - } - case 4: { - message.tilt = reader.float(); - break; - } - case 5: { - message.heading = reader.float(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("longitude")) - throw $util.ProtocolError("missing required 'longitude'", { instance: message }); - if (!message.hasOwnProperty("latitude")) - throw $util.ProtocolError("missing required 'latitude'", { instance: message }); - return message; - }; - LookAtProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (typeof message.longitude !== "number") - return "longitude: number expected"; - if (typeof message.latitude !== "number") - return "latitude: number expected"; - if (message.range != null && message.hasOwnProperty("range")) { - if (typeof message.range !== "number") - return "range: number expected"; - } - if (message.tilt != null && message.hasOwnProperty("tilt")) { - if (typeof message.tilt !== "number") - return "tilt: number expected"; - } - if (message.heading != null && message.hasOwnProperty("heading")) { - if (typeof message.heading !== "number") - return "heading: number expected"; - } - return null; - }; - LookAtProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.LookAtProto) - return object; - var message = new $root.keyhole.dbroot.LookAtProto(); - if (object.longitude != null) - message.longitude = Number(object.longitude); - if (object.latitude != null) - message.latitude = Number(object.latitude); - if (object.range != null) - message.range = Number(object.range); - if (object.tilt != null) - message.tilt = Number(object.tilt); - if (object.heading != null) - message.heading = Number(object.heading); - return message; - }; - LookAtProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.longitude = 0; - object.latitude = 0; - object.range = 0; - object.tilt = 0; - object.heading = 0; - } - if (message.longitude != null && message.hasOwnProperty("longitude")) - object.longitude = options.json && !isFinite(message.longitude) ? String(message.longitude) : message.longitude; - if (message.latitude != null && message.hasOwnProperty("latitude")) - object.latitude = options.json && !isFinite(message.latitude) ? String(message.latitude) : message.latitude; - if (message.range != null && message.hasOwnProperty("range")) - object.range = options.json && !isFinite(message.range) ? String(message.range) : message.range; - if (message.tilt != null && message.hasOwnProperty("tilt")) - object.tilt = options.json && !isFinite(message.tilt) ? String(message.tilt) : message.tilt; - if (message.heading != null && message.hasOwnProperty("heading")) - object.heading = options.json && !isFinite(message.heading) ? String(message.heading) : message.heading; - return object; - }; - LookAtProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - LookAtProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.LookAtProto"; - }; - return LookAtProto; - }(); - dbroot.NestedFeatureProto = function() { - function NestedFeatureProto(properties) { - this.children = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - NestedFeatureProto.prototype.featureType = 1; - NestedFeatureProto.prototype.kmlUrl = null; - NestedFeatureProto.prototype.databaseUrl = ""; - NestedFeatureProto.prototype.layer = null; - NestedFeatureProto.prototype.folder = null; - NestedFeatureProto.prototype.requirement = null; - NestedFeatureProto.prototype.channelId = 0; - NestedFeatureProto.prototype.displayName = null; - NestedFeatureProto.prototype.isVisible = true; - NestedFeatureProto.prototype.isEnabled = true; - NestedFeatureProto.prototype.isChecked = false; - NestedFeatureProto.prototype.layerMenuIconPath = "icons/773_l.png"; - NestedFeatureProto.prototype.description = null; - NestedFeatureProto.prototype.lookAt = null; - NestedFeatureProto.prototype.assetUuid = ""; - NestedFeatureProto.prototype.isSaveLocked = true; - NestedFeatureProto.prototype.children = $util.emptyArray; - NestedFeatureProto.prototype.clientConfigScriptName = ""; - NestedFeatureProto.prototype.dioramaDataChannelBase = -1; - NestedFeatureProto.prototype.replicaDataChannelBase = -1; - NestedFeatureProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.NestedFeatureProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.featureType = reader.int32(); - break; - } - case 2: { - message.kmlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 21: { - message.databaseUrl = reader.string(); - break; - } - case 3: { - message.layer = $root.keyhole.dbroot.LayerProto.decode(reader, reader.uint32()); - break; - } - case 4: { - message.folder = $root.keyhole.dbroot.FolderProto.decode(reader, reader.uint32()); - break; - } - case 5: { - message.requirement = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32()); - break; - } - case 6: { - message.channelId = reader.int32(); - break; - } - case 7: { - message.displayName = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 8: { - message.isVisible = reader.bool(); - break; - } - case 9: { - message.isEnabled = reader.bool(); - break; - } - case 10: { - message.isChecked = reader.bool(); - break; - } - case 11: { - message.layerMenuIconPath = reader.string(); - break; - } - case 12: { - message.description = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 13: { - message.lookAt = $root.keyhole.dbroot.LookAtProto.decode(reader, reader.uint32()); - break; - } - case 15: { - message.assetUuid = reader.string(); - break; - } - case 16: { - message.isSaveLocked = reader.bool(); - break; - } - case 17: { - if (!(message.children && message.children.length)) - message.children = []; - message.children.push($root.keyhole.dbroot.NestedFeatureProto.decode(reader, reader.uint32())); - break; - } - case 18: { - message.clientConfigScriptName = reader.string(); - break; - } - case 19: { - message.dioramaDataChannelBase = reader.int32(); - break; - } - case 20: { - message.replicaDataChannelBase = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("channelId")) - throw $util.ProtocolError("missing required 'channelId'", { instance: message }); - return message; - }; - NestedFeatureProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.featureType != null && message.hasOwnProperty("featureType")) - switch (message.featureType) { - default: - return "featureType: enum value expected"; - case 1: - case 2: - case 3: - case 4: - break; - } - if (message.kmlUrl != null && message.hasOwnProperty("kmlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlUrl); - if (error) - return "kmlUrl." + error; - } - if (message.databaseUrl != null && message.hasOwnProperty("databaseUrl")) { - if (!$util.isString(message.databaseUrl)) - return "databaseUrl: string expected"; - } - if (message.layer != null && message.hasOwnProperty("layer")) { - var error = $root.keyhole.dbroot.LayerProto.verify(message.layer); - if (error) - return "layer." + error; - } - if (message.folder != null && message.hasOwnProperty("folder")) { - var error = $root.keyhole.dbroot.FolderProto.verify(message.folder); - if (error) - return "folder." + error; - } - if (message.requirement != null && message.hasOwnProperty("requirement")) { - var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirement); - if (error) - return "requirement." + error; - } - if (!$util.isInteger(message.channelId)) - return "channelId: integer expected"; - if (message.displayName != null && message.hasOwnProperty("displayName")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.displayName); - if (error) - return "displayName." + error; - } - if (message.isVisible != null && message.hasOwnProperty("isVisible")) { - if (typeof message.isVisible !== "boolean") - return "isVisible: boolean expected"; - } - if (message.isEnabled != null && message.hasOwnProperty("isEnabled")) { - if (typeof message.isEnabled !== "boolean") - return "isEnabled: boolean expected"; - } - if (message.isChecked != null && message.hasOwnProperty("isChecked")) { - if (typeof message.isChecked !== "boolean") - return "isChecked: boolean expected"; - } - if (message.layerMenuIconPath != null && message.hasOwnProperty("layerMenuIconPath")) { - if (!$util.isString(message.layerMenuIconPath)) - return "layerMenuIconPath: string expected"; - } - if (message.description != null && message.hasOwnProperty("description")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.description); - if (error) - return "description." + error; - } - if (message.lookAt != null && message.hasOwnProperty("lookAt")) { - var error = $root.keyhole.dbroot.LookAtProto.verify(message.lookAt); - if (error) - return "lookAt." + error; - } - if (message.assetUuid != null && message.hasOwnProperty("assetUuid")) { - if (!$util.isString(message.assetUuid)) - return "assetUuid: string expected"; - } - if (message.isSaveLocked != null && message.hasOwnProperty("isSaveLocked")) { - if (typeof message.isSaveLocked !== "boolean") - return "isSaveLocked: boolean expected"; - } - if (message.children != null && message.hasOwnProperty("children")) { - if (!Array.isArray(message.children)) - return "children: array expected"; - for (var i = 0; i < message.children.length; ++i) { - var error = $root.keyhole.dbroot.NestedFeatureProto.verify(message.children[i]); - if (error) - return "children." + error; - } - } - if (message.clientConfigScriptName != null && message.hasOwnProperty("clientConfigScriptName")) { - if (!$util.isString(message.clientConfigScriptName)) - return "clientConfigScriptName: string expected"; - } - if (message.dioramaDataChannelBase != null && message.hasOwnProperty("dioramaDataChannelBase")) { - if (!$util.isInteger(message.dioramaDataChannelBase)) - return "dioramaDataChannelBase: integer expected"; - } - if (message.replicaDataChannelBase != null && message.hasOwnProperty("replicaDataChannelBase")) { - if (!$util.isInteger(message.replicaDataChannelBase)) - return "replicaDataChannelBase: integer expected"; - } - return null; - }; - NestedFeatureProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.NestedFeatureProto) - return object; - var message = new $root.keyhole.dbroot.NestedFeatureProto(); - switch (object.featureType) { - case "TYPE_POINT_Z": - case 1: - message.featureType = 1; - break; - case "TYPE_POLYGON_Z": - case 2: - message.featureType = 2; - break; - case "TYPE_LINE_Z": - case 3: - message.featureType = 3; - break; - case "TYPE_TERRAIN": - case 4: - message.featureType = 4; - break; - } - if (object.kmlUrl != null) { - if (typeof object.kmlUrl !== "object") - throw TypeError(".keyhole.dbroot.NestedFeatureProto.kmlUrl: object expected"); - message.kmlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlUrl); - } - if (object.databaseUrl != null) - message.databaseUrl = String(object.databaseUrl); - if (object.layer != null) { - if (typeof object.layer !== "object") - throw TypeError(".keyhole.dbroot.NestedFeatureProto.layer: object expected"); - message.layer = $root.keyhole.dbroot.LayerProto.fromObject(object.layer); - } - if (object.folder != null) { - if (typeof object.folder !== "object") - throw TypeError(".keyhole.dbroot.NestedFeatureProto.folder: object expected"); - message.folder = $root.keyhole.dbroot.FolderProto.fromObject(object.folder); - } - if (object.requirement != null) { - if (typeof object.requirement !== "object") - throw TypeError(".keyhole.dbroot.NestedFeatureProto.requirement: object expected"); - message.requirement = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirement); - } - if (object.channelId != null) - message.channelId = object.channelId | 0; - if (object.displayName != null) { - if (typeof object.displayName !== "object") - throw TypeError(".keyhole.dbroot.NestedFeatureProto.displayName: object expected"); - message.displayName = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.displayName); - } - if (object.isVisible != null) - message.isVisible = Boolean(object.isVisible); - if (object.isEnabled != null) - message.isEnabled = Boolean(object.isEnabled); - if (object.isChecked != null) - message.isChecked = Boolean(object.isChecked); - if (object.layerMenuIconPath != null) - message.layerMenuIconPath = String(object.layerMenuIconPath); - if (object.description != null) { - if (typeof object.description !== "object") - throw TypeError(".keyhole.dbroot.NestedFeatureProto.description: object expected"); - message.description = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.description); - } - if (object.lookAt != null) { - if (typeof object.lookAt !== "object") - throw TypeError(".keyhole.dbroot.NestedFeatureProto.lookAt: object expected"); - message.lookAt = $root.keyhole.dbroot.LookAtProto.fromObject(object.lookAt); - } - if (object.assetUuid != null) - message.assetUuid = String(object.assetUuid); - if (object.isSaveLocked != null) - message.isSaveLocked = Boolean(object.isSaveLocked); - if (object.children) { - if (!Array.isArray(object.children)) - throw TypeError(".keyhole.dbroot.NestedFeatureProto.children: array expected"); - message.children = []; - for (var i = 0; i < object.children.length; ++i) { - if (typeof object.children[i] !== "object") - throw TypeError(".keyhole.dbroot.NestedFeatureProto.children: object expected"); - message.children[i] = $root.keyhole.dbroot.NestedFeatureProto.fromObject(object.children[i]); - } - } - if (object.clientConfigScriptName != null) - message.clientConfigScriptName = String(object.clientConfigScriptName); - if (object.dioramaDataChannelBase != null) - message.dioramaDataChannelBase = object.dioramaDataChannelBase | 0; - if (object.replicaDataChannelBase != null) - message.replicaDataChannelBase = object.replicaDataChannelBase | 0; - return message; - }; - NestedFeatureProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.children = []; - if (options.defaults) { - object.featureType = options.enums === String ? "TYPE_POINT_Z" : 1; - object.kmlUrl = null; - object.layer = null; - object.folder = null; - object.requirement = null; - object.channelId = 0; - object.displayName = null; - object.isVisible = true; - object.isEnabled = true; - object.isChecked = false; - object.layerMenuIconPath = "icons/773_l.png"; - object.description = null; - object.lookAt = null; - object.assetUuid = ""; - object.isSaveLocked = true; - object.clientConfigScriptName = ""; - object.dioramaDataChannelBase = -1; - object.replicaDataChannelBase = -1; - object.databaseUrl = ""; - } - if (message.featureType != null && message.hasOwnProperty("featureType")) - object.featureType = options.enums === String ? $root.keyhole.dbroot.NestedFeatureProto.FeatureType[message.featureType] : message.featureType; - if (message.kmlUrl != null && message.hasOwnProperty("kmlUrl")) - object.kmlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlUrl, options); - if (message.layer != null && message.hasOwnProperty("layer")) - object.layer = $root.keyhole.dbroot.LayerProto.toObject(message.layer, options); - if (message.folder != null && message.hasOwnProperty("folder")) - object.folder = $root.keyhole.dbroot.FolderProto.toObject(message.folder, options); - if (message.requirement != null && message.hasOwnProperty("requirement")) - object.requirement = $root.keyhole.dbroot.RequirementProto.toObject(message.requirement, options); - if (message.channelId != null && message.hasOwnProperty("channelId")) - object.channelId = message.channelId; - if (message.displayName != null && message.hasOwnProperty("displayName")) - object.displayName = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.displayName, options); - if (message.isVisible != null && message.hasOwnProperty("isVisible")) - object.isVisible = message.isVisible; - if (message.isEnabled != null && message.hasOwnProperty("isEnabled")) - object.isEnabled = message.isEnabled; - if (message.isChecked != null && message.hasOwnProperty("isChecked")) - object.isChecked = message.isChecked; - if (message.layerMenuIconPath != null && message.hasOwnProperty("layerMenuIconPath")) - object.layerMenuIconPath = message.layerMenuIconPath; - if (message.description != null && message.hasOwnProperty("description")) - object.description = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.description, options); - if (message.lookAt != null && message.hasOwnProperty("lookAt")) - object.lookAt = $root.keyhole.dbroot.LookAtProto.toObject(message.lookAt, options); - if (message.assetUuid != null && message.hasOwnProperty("assetUuid")) - object.assetUuid = message.assetUuid; - if (message.isSaveLocked != null && message.hasOwnProperty("isSaveLocked")) - object.isSaveLocked = message.isSaveLocked; - if (message.children && message.children.length) { - object.children = []; - for (var j = 0; j < message.children.length; ++j) - object.children[j] = $root.keyhole.dbroot.NestedFeatureProto.toObject(message.children[j], options); - } - if (message.clientConfigScriptName != null && message.hasOwnProperty("clientConfigScriptName")) - object.clientConfigScriptName = message.clientConfigScriptName; - if (message.dioramaDataChannelBase != null && message.hasOwnProperty("dioramaDataChannelBase")) - object.dioramaDataChannelBase = message.dioramaDataChannelBase; - if (message.replicaDataChannelBase != null && message.hasOwnProperty("replicaDataChannelBase")) - object.replicaDataChannelBase = message.replicaDataChannelBase; - if (message.databaseUrl != null && message.hasOwnProperty("databaseUrl")) - object.databaseUrl = message.databaseUrl; - return object; - }; - NestedFeatureProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - NestedFeatureProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.NestedFeatureProto"; - }; - NestedFeatureProto.FeatureType = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[1] = "TYPE_POINT_Z"] = 1; - values[valuesById[2] = "TYPE_POLYGON_Z"] = 2; - values[valuesById[3] = "TYPE_LINE_Z"] = 3; - values[valuesById[4] = "TYPE_TERRAIN"] = 4; - return values; - }(); - return NestedFeatureProto; - }(); - dbroot.MfeDomainFeaturesProto = function() { - function MfeDomainFeaturesProto(properties) { - this.supportedFeatures = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - MfeDomainFeaturesProto.prototype.countryCode = ""; - MfeDomainFeaturesProto.prototype.domainName = ""; - MfeDomainFeaturesProto.prototype.supportedFeatures = $util.emptyArray; - MfeDomainFeaturesProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.MfeDomainFeaturesProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.countryCode = reader.string(); - break; - } - case 2: { - message.domainName = reader.string(); - break; - } - case 3: { - if (!(message.supportedFeatures && message.supportedFeatures.length)) - message.supportedFeatures = []; - if ((tag & 7) === 2) { - var end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) - message.supportedFeatures.push(reader.int32()); - } else - message.supportedFeatures.push(reader.int32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("countryCode")) - throw $util.ProtocolError("missing required 'countryCode'", { instance: message }); - if (!message.hasOwnProperty("domainName")) - throw $util.ProtocolError("missing required 'domainName'", { instance: message }); - return message; - }; - MfeDomainFeaturesProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isString(message.countryCode)) - return "countryCode: string expected"; - if (!$util.isString(message.domainName)) - return "domainName: string expected"; - if (message.supportedFeatures != null && message.hasOwnProperty("supportedFeatures")) { - if (!Array.isArray(message.supportedFeatures)) - return "supportedFeatures: array expected"; - for (var i = 0; i < message.supportedFeatures.length; ++i) - switch (message.supportedFeatures[i]) { - default: - return "supportedFeatures: enum value[] expected"; - case 0: - case 1: - case 2: - break; - } - } - return null; - }; - MfeDomainFeaturesProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.MfeDomainFeaturesProto) - return object; - var message = new $root.keyhole.dbroot.MfeDomainFeaturesProto(); - if (object.countryCode != null) - message.countryCode = String(object.countryCode); - if (object.domainName != null) - message.domainName = String(object.domainName); - if (object.supportedFeatures) { - if (!Array.isArray(object.supportedFeatures)) - throw TypeError(".keyhole.dbroot.MfeDomainFeaturesProto.supportedFeatures: array expected"); - message.supportedFeatures = []; - for (var i = 0; i < object.supportedFeatures.length; ++i) - switch (object.supportedFeatures[i]) { - default: - case "GEOCODING": - case 0: - message.supportedFeatures[i] = 0; - break; - case "LOCAL_SEARCH": - case 1: - message.supportedFeatures[i] = 1; - break; - case "DRIVING_DIRECTIONS": - case 2: - message.supportedFeatures[i] = 2; - break; - } - } - return message; - }; - MfeDomainFeaturesProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.supportedFeatures = []; - if (options.defaults) { - object.countryCode = ""; - object.domainName = ""; - } - if (message.countryCode != null && message.hasOwnProperty("countryCode")) - object.countryCode = message.countryCode; - if (message.domainName != null && message.hasOwnProperty("domainName")) - object.domainName = message.domainName; - if (message.supportedFeatures && message.supportedFeatures.length) { - object.supportedFeatures = []; - for (var j = 0; j < message.supportedFeatures.length; ++j) - object.supportedFeatures[j] = options.enums === String ? $root.keyhole.dbroot.MfeDomainFeaturesProto.SupportedFeature[message.supportedFeatures[j]] : message.supportedFeatures[j]; - } - return object; - }; - MfeDomainFeaturesProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - MfeDomainFeaturesProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.MfeDomainFeaturesProto"; - }; - MfeDomainFeaturesProto.SupportedFeature = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "GEOCODING"] = 0; - values[valuesById[1] = "LOCAL_SEARCH"] = 1; - values[valuesById[2] = "DRIVING_DIRECTIONS"] = 2; - return values; - }(); - return MfeDomainFeaturesProto; - }(); - dbroot.ClientOptionsProto = function() { - function ClientOptionsProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ClientOptionsProto.prototype.disableDiskCache = false; - ClientOptionsProto.prototype.disableEmbeddedBrowserVista = false; - ClientOptionsProto.prototype.drawAtmosphere = true; - ClientOptionsProto.prototype.drawStars = true; - ClientOptionsProto.prototype.shaderFilePrefix = ""; - ClientOptionsProto.prototype.useProtobufQuadtreePackets = false; - ClientOptionsProto.prototype.useExtendedCopyrightIds = true; - ClientOptionsProto.prototype.precipitationsOptions = null; - ClientOptionsProto.prototype.captureOptions = null; - ClientOptionsProto.prototype.show_2dMapsIcon = true; - ClientOptionsProto.prototype.disableInternalBrowser = false; - ClientOptionsProto.prototype.internalBrowserBlacklist = ""; - ClientOptionsProto.prototype.internalBrowserOriginWhitelist = "*"; - ClientOptionsProto.prototype.polarTileMergingLevel = 0; - ClientOptionsProto.prototype.jsBridgeRequestWhitelist = "http://*.google.com/*"; - ClientOptionsProto.prototype.mapsOptions = null; - ClientOptionsProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.disableDiskCache = reader.bool(); - break; - } - case 2: { - message.disableEmbeddedBrowserVista = reader.bool(); - break; - } - case 3: { - message.drawAtmosphere = reader.bool(); - break; - } - case 4: { - message.drawStars = reader.bool(); - break; - } - case 5: { - message.shaderFilePrefix = reader.string(); - break; - } - case 6: { - message.useProtobufQuadtreePackets = reader.bool(); - break; - } - case 7: { - message.useExtendedCopyrightIds = reader.bool(); - break; - } - case 8: { - message.precipitationsOptions = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.decode(reader, reader.uint32()); - break; - } - case 9: { - message.captureOptions = $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions.decode(reader, reader.uint32()); - break; - } - case 10: { - message.show_2dMapsIcon = reader.bool(); - break; - } - case 11: { - message.disableInternalBrowser = reader.bool(); - break; - } - case 12: { - message.internalBrowserBlacklist = reader.string(); - break; - } - case 13: { - message.internalBrowserOriginWhitelist = reader.string(); - break; - } - case 14: { - message.polarTileMergingLevel = reader.int32(); - break; - } - case 15: { - message.jsBridgeRequestWhitelist = reader.string(); - break; - } - case 16: { - message.mapsOptions = $root.keyhole.dbroot.ClientOptionsProto.MapsOptions.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - ClientOptionsProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.disableDiskCache != null && message.hasOwnProperty("disableDiskCache")) { - if (typeof message.disableDiskCache !== "boolean") - return "disableDiskCache: boolean expected"; - } - if (message.disableEmbeddedBrowserVista != null && message.hasOwnProperty("disableEmbeddedBrowserVista")) { - if (typeof message.disableEmbeddedBrowserVista !== "boolean") - return "disableEmbeddedBrowserVista: boolean expected"; - } - if (message.drawAtmosphere != null && message.hasOwnProperty("drawAtmosphere")) { - if (typeof message.drawAtmosphere !== "boolean") - return "drawAtmosphere: boolean expected"; - } - if (message.drawStars != null && message.hasOwnProperty("drawStars")) { - if (typeof message.drawStars !== "boolean") - return "drawStars: boolean expected"; - } - if (message.shaderFilePrefix != null && message.hasOwnProperty("shaderFilePrefix")) { - if (!$util.isString(message.shaderFilePrefix)) - return "shaderFilePrefix: string expected"; - } - if (message.useProtobufQuadtreePackets != null && message.hasOwnProperty("useProtobufQuadtreePackets")) { - if (typeof message.useProtobufQuadtreePackets !== "boolean") - return "useProtobufQuadtreePackets: boolean expected"; - } - if (message.useExtendedCopyrightIds != null && message.hasOwnProperty("useExtendedCopyrightIds")) { - if (typeof message.useExtendedCopyrightIds !== "boolean") - return "useExtendedCopyrightIds: boolean expected"; - } - if (message.precipitationsOptions != null && message.hasOwnProperty("precipitationsOptions")) { - var error = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.verify(message.precipitationsOptions); - if (error) - return "precipitationsOptions." + error; - } - if (message.captureOptions != null && message.hasOwnProperty("captureOptions")) { - var error = $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions.verify(message.captureOptions); - if (error) - return "captureOptions." + error; - } - if (message.show_2dMapsIcon != null && message.hasOwnProperty("show_2dMapsIcon")) { - if (typeof message.show_2dMapsIcon !== "boolean") - return "show_2dMapsIcon: boolean expected"; - } - if (message.disableInternalBrowser != null && message.hasOwnProperty("disableInternalBrowser")) { - if (typeof message.disableInternalBrowser !== "boolean") - return "disableInternalBrowser: boolean expected"; - } - if (message.internalBrowserBlacklist != null && message.hasOwnProperty("internalBrowserBlacklist")) { - if (!$util.isString(message.internalBrowserBlacklist)) - return "internalBrowserBlacklist: string expected"; - } - if (message.internalBrowserOriginWhitelist != null && message.hasOwnProperty("internalBrowserOriginWhitelist")) { - if (!$util.isString(message.internalBrowserOriginWhitelist)) - return "internalBrowserOriginWhitelist: string expected"; - } - if (message.polarTileMergingLevel != null && message.hasOwnProperty("polarTileMergingLevel")) { - if (!$util.isInteger(message.polarTileMergingLevel)) - return "polarTileMergingLevel: integer expected"; - } - if (message.jsBridgeRequestWhitelist != null && message.hasOwnProperty("jsBridgeRequestWhitelist")) { - if (!$util.isString(message.jsBridgeRequestWhitelist)) - return "jsBridgeRequestWhitelist: string expected"; - } - if (message.mapsOptions != null && message.hasOwnProperty("mapsOptions")) { - var error = $root.keyhole.dbroot.ClientOptionsProto.MapsOptions.verify(message.mapsOptions); - if (error) - return "mapsOptions." + error; - } - return null; - }; - ClientOptionsProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.ClientOptionsProto) - return object; - var message = new $root.keyhole.dbroot.ClientOptionsProto(); - if (object.disableDiskCache != null) - message.disableDiskCache = Boolean(object.disableDiskCache); - if (object.disableEmbeddedBrowserVista != null) - message.disableEmbeddedBrowserVista = Boolean(object.disableEmbeddedBrowserVista); - if (object.drawAtmosphere != null) - message.drawAtmosphere = Boolean(object.drawAtmosphere); - if (object.drawStars != null) - message.drawStars = Boolean(object.drawStars); - if (object.shaderFilePrefix != null) - message.shaderFilePrefix = String(object.shaderFilePrefix); - if (object.useProtobufQuadtreePackets != null) - message.useProtobufQuadtreePackets = Boolean(object.useProtobufQuadtreePackets); - if (object.useExtendedCopyrightIds != null) - message.useExtendedCopyrightIds = Boolean(object.useExtendedCopyrightIds); - if (object.precipitationsOptions != null) { - if (typeof object.precipitationsOptions !== "object") - throw TypeError(".keyhole.dbroot.ClientOptionsProto.precipitationsOptions: object expected"); - message.precipitationsOptions = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.fromObject(object.precipitationsOptions); - } - if (object.captureOptions != null) { - if (typeof object.captureOptions !== "object") - throw TypeError(".keyhole.dbroot.ClientOptionsProto.captureOptions: object expected"); - message.captureOptions = $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions.fromObject(object.captureOptions); - } - if (object.show_2dMapsIcon != null) - message.show_2dMapsIcon = Boolean(object.show_2dMapsIcon); - if (object.disableInternalBrowser != null) - message.disableInternalBrowser = Boolean(object.disableInternalBrowser); - if (object.internalBrowserBlacklist != null) - message.internalBrowserBlacklist = String(object.internalBrowserBlacklist); - if (object.internalBrowserOriginWhitelist != null) - message.internalBrowserOriginWhitelist = String(object.internalBrowserOriginWhitelist); - if (object.polarTileMergingLevel != null) - message.polarTileMergingLevel = object.polarTileMergingLevel | 0; - if (object.jsBridgeRequestWhitelist != null) - message.jsBridgeRequestWhitelist = String(object.jsBridgeRequestWhitelist); - if (object.mapsOptions != null) { - if (typeof object.mapsOptions !== "object") - throw TypeError(".keyhole.dbroot.ClientOptionsProto.mapsOptions: object expected"); - message.mapsOptions = $root.keyhole.dbroot.ClientOptionsProto.MapsOptions.fromObject(object.mapsOptions); - } - return message; - }; - ClientOptionsProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.disableDiskCache = false; - object.disableEmbeddedBrowserVista = false; - object.drawAtmosphere = true; - object.drawStars = true; - object.shaderFilePrefix = ""; - object.useProtobufQuadtreePackets = false; - object.useExtendedCopyrightIds = true; - object.precipitationsOptions = null; - object.captureOptions = null; - object.show_2dMapsIcon = true; - object.disableInternalBrowser = false; - object.internalBrowserBlacklist = ""; - object.internalBrowserOriginWhitelist = "*"; - object.polarTileMergingLevel = 0; - object.jsBridgeRequestWhitelist = "http://*.google.com/*"; - object.mapsOptions = null; - } - if (message.disableDiskCache != null && message.hasOwnProperty("disableDiskCache")) - object.disableDiskCache = message.disableDiskCache; - if (message.disableEmbeddedBrowserVista != null && message.hasOwnProperty("disableEmbeddedBrowserVista")) - object.disableEmbeddedBrowserVista = message.disableEmbeddedBrowserVista; - if (message.drawAtmosphere != null && message.hasOwnProperty("drawAtmosphere")) - object.drawAtmosphere = message.drawAtmosphere; - if (message.drawStars != null && message.hasOwnProperty("drawStars")) - object.drawStars = message.drawStars; - if (message.shaderFilePrefix != null && message.hasOwnProperty("shaderFilePrefix")) - object.shaderFilePrefix = message.shaderFilePrefix; - if (message.useProtobufQuadtreePackets != null && message.hasOwnProperty("useProtobufQuadtreePackets")) - object.useProtobufQuadtreePackets = message.useProtobufQuadtreePackets; - if (message.useExtendedCopyrightIds != null && message.hasOwnProperty("useExtendedCopyrightIds")) - object.useExtendedCopyrightIds = message.useExtendedCopyrightIds; - if (message.precipitationsOptions != null && message.hasOwnProperty("precipitationsOptions")) - object.precipitationsOptions = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.toObject(message.precipitationsOptions, options); - if (message.captureOptions != null && message.hasOwnProperty("captureOptions")) - object.captureOptions = $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions.toObject(message.captureOptions, options); - if (message.show_2dMapsIcon != null && message.hasOwnProperty("show_2dMapsIcon")) - object.show_2dMapsIcon = message.show_2dMapsIcon; - if (message.disableInternalBrowser != null && message.hasOwnProperty("disableInternalBrowser")) - object.disableInternalBrowser = message.disableInternalBrowser; - if (message.internalBrowserBlacklist != null && message.hasOwnProperty("internalBrowserBlacklist")) - object.internalBrowserBlacklist = message.internalBrowserBlacklist; - if (message.internalBrowserOriginWhitelist != null && message.hasOwnProperty("internalBrowserOriginWhitelist")) - object.internalBrowserOriginWhitelist = message.internalBrowserOriginWhitelist; - if (message.polarTileMergingLevel != null && message.hasOwnProperty("polarTileMergingLevel")) - object.polarTileMergingLevel = message.polarTileMergingLevel; - if (message.jsBridgeRequestWhitelist != null && message.hasOwnProperty("jsBridgeRequestWhitelist")) - object.jsBridgeRequestWhitelist = message.jsBridgeRequestWhitelist; - if (message.mapsOptions != null && message.hasOwnProperty("mapsOptions")) - object.mapsOptions = $root.keyhole.dbroot.ClientOptionsProto.MapsOptions.toObject(message.mapsOptions, options); - return object; - }; - ClientOptionsProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ClientOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.ClientOptionsProto"; - }; - ClientOptionsProto.PrecipitationsOptions = function() { - function PrecipitationsOptions(properties) { - this.weatherMapping = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - PrecipitationsOptions.prototype.imageUrl = ""; - PrecipitationsOptions.prototype.imageExpireTime = 900; - PrecipitationsOptions.prototype.maxColorDistance = 20; - PrecipitationsOptions.prototype.imageLevel = 5; - PrecipitationsOptions.prototype.weatherMapping = $util.emptyArray; - PrecipitationsOptions.prototype.cloudsLayerUrl = ""; - PrecipitationsOptions.prototype.animationDecelerationDelay = 20; - PrecipitationsOptions.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.imageUrl = reader.string(); - break; - } - case 2: { - message.imageExpireTime = reader.int32(); - break; - } - case 3: { - message.maxColorDistance = reader.int32(); - break; - } - case 4: { - message.imageLevel = reader.int32(); - break; - } - case 5: { - if (!(message.weatherMapping && message.weatherMapping.length)) - message.weatherMapping = []; - message.weatherMapping.push($root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.decode(reader, reader.uint32())); - break; - } - case 6: { - message.cloudsLayerUrl = reader.string(); - break; - } - case 7: { - message.animationDecelerationDelay = reader.float(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - PrecipitationsOptions.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.imageUrl != null && message.hasOwnProperty("imageUrl")) { - if (!$util.isString(message.imageUrl)) - return "imageUrl: string expected"; - } - if (message.imageExpireTime != null && message.hasOwnProperty("imageExpireTime")) { - if (!$util.isInteger(message.imageExpireTime)) - return "imageExpireTime: integer expected"; - } - if (message.maxColorDistance != null && message.hasOwnProperty("maxColorDistance")) { - if (!$util.isInteger(message.maxColorDistance)) - return "maxColorDistance: integer expected"; - } - if (message.imageLevel != null && message.hasOwnProperty("imageLevel")) { - if (!$util.isInteger(message.imageLevel)) - return "imageLevel: integer expected"; - } - if (message.weatherMapping != null && message.hasOwnProperty("weatherMapping")) { - if (!Array.isArray(message.weatherMapping)) - return "weatherMapping: array expected"; - for (var i = 0; i < message.weatherMapping.length; ++i) { - var error = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.verify(message.weatherMapping[i]); - if (error) - return "weatherMapping." + error; - } - } - if (message.cloudsLayerUrl != null && message.hasOwnProperty("cloudsLayerUrl")) { - if (!$util.isString(message.cloudsLayerUrl)) - return "cloudsLayerUrl: string expected"; - } - if (message.animationDecelerationDelay != null && message.hasOwnProperty("animationDecelerationDelay")) { - if (typeof message.animationDecelerationDelay !== "number") - return "animationDecelerationDelay: number expected"; - } - return null; - }; - PrecipitationsOptions.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions) - return object; - var message = new $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions(); - if (object.imageUrl != null) - message.imageUrl = String(object.imageUrl); - if (object.imageExpireTime != null) - message.imageExpireTime = object.imageExpireTime | 0; - if (object.maxColorDistance != null) - message.maxColorDistance = object.maxColorDistance | 0; - if (object.imageLevel != null) - message.imageLevel = object.imageLevel | 0; - if (object.weatherMapping) { - if (!Array.isArray(object.weatherMapping)) - throw TypeError(".keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.weatherMapping: array expected"); - message.weatherMapping = []; - for (var i = 0; i < object.weatherMapping.length; ++i) { - if (typeof object.weatherMapping[i] !== "object") - throw TypeError(".keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.weatherMapping: object expected"); - message.weatherMapping[i] = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.fromObject(object.weatherMapping[i]); - } - } - if (object.cloudsLayerUrl != null) - message.cloudsLayerUrl = String(object.cloudsLayerUrl); - if (object.animationDecelerationDelay != null) - message.animationDecelerationDelay = Number(object.animationDecelerationDelay); - return message; - }; - PrecipitationsOptions.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.weatherMapping = []; - if (options.defaults) { - object.imageUrl = ""; - object.imageExpireTime = 900; - object.maxColorDistance = 20; - object.imageLevel = 5; - object.cloudsLayerUrl = ""; - object.animationDecelerationDelay = 20; - } - if (message.imageUrl != null && message.hasOwnProperty("imageUrl")) - object.imageUrl = message.imageUrl; - if (message.imageExpireTime != null && message.hasOwnProperty("imageExpireTime")) - object.imageExpireTime = message.imageExpireTime; - if (message.maxColorDistance != null && message.hasOwnProperty("maxColorDistance")) - object.maxColorDistance = message.maxColorDistance; - if (message.imageLevel != null && message.hasOwnProperty("imageLevel")) - object.imageLevel = message.imageLevel; - if (message.weatherMapping && message.weatherMapping.length) { - object.weatherMapping = []; - for (var j = 0; j < message.weatherMapping.length; ++j) - object.weatherMapping[j] = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.toObject(message.weatherMapping[j], options); - } - if (message.cloudsLayerUrl != null && message.hasOwnProperty("cloudsLayerUrl")) - object.cloudsLayerUrl = message.cloudsLayerUrl; - if (message.animationDecelerationDelay != null && message.hasOwnProperty("animationDecelerationDelay")) - object.animationDecelerationDelay = options.json && !isFinite(message.animationDecelerationDelay) ? String(message.animationDecelerationDelay) : message.animationDecelerationDelay; - return object; - }; - PrecipitationsOptions.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - PrecipitationsOptions.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions"; - }; - PrecipitationsOptions.WeatherMapping = function() { - function WeatherMapping(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - WeatherMapping.prototype.colorAbgr = 0; - WeatherMapping.prototype.weatherType = 0; - WeatherMapping.prototype.elongation = 1; - WeatherMapping.prototype.opacity = 0; - WeatherMapping.prototype.fogDensity = 0; - WeatherMapping.prototype.speed0 = 0; - WeatherMapping.prototype.speed1 = 0; - WeatherMapping.prototype.speed2 = 0; - WeatherMapping.prototype.speed3 = 0; - WeatherMapping.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.colorAbgr = reader.uint32(); - break; - } - case 2: { - message.weatherType = reader.int32(); - break; - } - case 3: { - message.elongation = reader.float(); - break; - } - case 4: { - message.opacity = reader.float(); - break; - } - case 5: { - message.fogDensity = reader.float(); - break; - } - case 6: { - message.speed0 = reader.float(); - break; - } - case 7: { - message.speed1 = reader.float(); - break; - } - case 8: { - message.speed2 = reader.float(); - break; - } - case 9: { - message.speed3 = reader.float(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("colorAbgr")) - throw $util.ProtocolError("missing required 'colorAbgr'", { instance: message }); - if (!message.hasOwnProperty("weatherType")) - throw $util.ProtocolError("missing required 'weatherType'", { instance: message }); - return message; - }; - WeatherMapping.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isInteger(message.colorAbgr)) - return "colorAbgr: integer expected"; - switch (message.weatherType) { - default: - return "weatherType: enum value expected"; - case 0: - case 1: - case 2: - break; - } - if (message.elongation != null && message.hasOwnProperty("elongation")) { - if (typeof message.elongation !== "number") - return "elongation: number expected"; - } - if (message.opacity != null && message.hasOwnProperty("opacity")) { - if (typeof message.opacity !== "number") - return "opacity: number expected"; - } - if (message.fogDensity != null && message.hasOwnProperty("fogDensity")) { - if (typeof message.fogDensity !== "number") - return "fogDensity: number expected"; - } - if (message.speed0 != null && message.hasOwnProperty("speed0")) { - if (typeof message.speed0 !== "number") - return "speed0: number expected"; - } - if (message.speed1 != null && message.hasOwnProperty("speed1")) { - if (typeof message.speed1 !== "number") - return "speed1: number expected"; - } - if (message.speed2 != null && message.hasOwnProperty("speed2")) { - if (typeof message.speed2 !== "number") - return "speed2: number expected"; - } - if (message.speed3 != null && message.hasOwnProperty("speed3")) { - if (typeof message.speed3 !== "number") - return "speed3: number expected"; - } - return null; - }; - WeatherMapping.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping) - return object; - var message = new $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping(); - if (object.colorAbgr != null) - message.colorAbgr = object.colorAbgr >>> 0; - switch (object.weatherType) { - case "NO_PRECIPITATION": - case 0: - message.weatherType = 0; - break; - case "RAIN": - case 1: - message.weatherType = 1; - break; - case "SNOW": - case 2: - message.weatherType = 2; - break; - } - if (object.elongation != null) - message.elongation = Number(object.elongation); - if (object.opacity != null) - message.opacity = Number(object.opacity); - if (object.fogDensity != null) - message.fogDensity = Number(object.fogDensity); - if (object.speed0 != null) - message.speed0 = Number(object.speed0); - if (object.speed1 != null) - message.speed1 = Number(object.speed1); - if (object.speed2 != null) - message.speed2 = Number(object.speed2); - if (object.speed3 != null) - message.speed3 = Number(object.speed3); - return message; - }; - WeatherMapping.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.colorAbgr = 0; - object.weatherType = options.enums === String ? "NO_PRECIPITATION" : 0; - object.elongation = 1; - object.opacity = 0; - object.fogDensity = 0; - object.speed0 = 0; - object.speed1 = 0; - object.speed2 = 0; - object.speed3 = 0; - } - if (message.colorAbgr != null && message.hasOwnProperty("colorAbgr")) - object.colorAbgr = message.colorAbgr; - if (message.weatherType != null && message.hasOwnProperty("weatherType")) - object.weatherType = options.enums === String ? $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.WeatherType[message.weatherType] : message.weatherType; - if (message.elongation != null && message.hasOwnProperty("elongation")) - object.elongation = options.json && !isFinite(message.elongation) ? String(message.elongation) : message.elongation; - if (message.opacity != null && message.hasOwnProperty("opacity")) - object.opacity = options.json && !isFinite(message.opacity) ? String(message.opacity) : message.opacity; - if (message.fogDensity != null && message.hasOwnProperty("fogDensity")) - object.fogDensity = options.json && !isFinite(message.fogDensity) ? String(message.fogDensity) : message.fogDensity; - if (message.speed0 != null && message.hasOwnProperty("speed0")) - object.speed0 = options.json && !isFinite(message.speed0) ? String(message.speed0) : message.speed0; - if (message.speed1 != null && message.hasOwnProperty("speed1")) - object.speed1 = options.json && !isFinite(message.speed1) ? String(message.speed1) : message.speed1; - if (message.speed2 != null && message.hasOwnProperty("speed2")) - object.speed2 = options.json && !isFinite(message.speed2) ? String(message.speed2) : message.speed2; - if (message.speed3 != null && message.hasOwnProperty("speed3")) - object.speed3 = options.json && !isFinite(message.speed3) ? String(message.speed3) : message.speed3; - return object; - }; - WeatherMapping.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - WeatherMapping.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping"; - }; - WeatherMapping.WeatherType = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "NO_PRECIPITATION"] = 0; - values[valuesById[1] = "RAIN"] = 1; - values[valuesById[2] = "SNOW"] = 2; - return values; - }(); - return WeatherMapping; - }(); - return PrecipitationsOptions; - }(); - ClientOptionsProto.CaptureOptions = function() { - function CaptureOptions(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - CaptureOptions.prototype.allowSaveAsImage = true; - CaptureOptions.prototype.maxFreeCaptureRes = 2400; - CaptureOptions.prototype.maxPremiumCaptureRes = 4800; - CaptureOptions.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.allowSaveAsImage = reader.bool(); - break; - } - case 2: { - message.maxFreeCaptureRes = reader.int32(); - break; - } - case 3: { - message.maxPremiumCaptureRes = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - CaptureOptions.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.allowSaveAsImage != null && message.hasOwnProperty("allowSaveAsImage")) { - if (typeof message.allowSaveAsImage !== "boolean") - return "allowSaveAsImage: boolean expected"; - } - if (message.maxFreeCaptureRes != null && message.hasOwnProperty("maxFreeCaptureRes")) { - if (!$util.isInteger(message.maxFreeCaptureRes)) - return "maxFreeCaptureRes: integer expected"; - } - if (message.maxPremiumCaptureRes != null && message.hasOwnProperty("maxPremiumCaptureRes")) { - if (!$util.isInteger(message.maxPremiumCaptureRes)) - return "maxPremiumCaptureRes: integer expected"; - } - return null; - }; - CaptureOptions.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions) - return object; - var message = new $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions(); - if (object.allowSaveAsImage != null) - message.allowSaveAsImage = Boolean(object.allowSaveAsImage); - if (object.maxFreeCaptureRes != null) - message.maxFreeCaptureRes = object.maxFreeCaptureRes | 0; - if (object.maxPremiumCaptureRes != null) - message.maxPremiumCaptureRes = object.maxPremiumCaptureRes | 0; - return message; - }; - CaptureOptions.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.allowSaveAsImage = true; - object.maxFreeCaptureRes = 2400; - object.maxPremiumCaptureRes = 4800; - } - if (message.allowSaveAsImage != null && message.hasOwnProperty("allowSaveAsImage")) - object.allowSaveAsImage = message.allowSaveAsImage; - if (message.maxFreeCaptureRes != null && message.hasOwnProperty("maxFreeCaptureRes")) - object.maxFreeCaptureRes = message.maxFreeCaptureRes; - if (message.maxPremiumCaptureRes != null && message.hasOwnProperty("maxPremiumCaptureRes")) - object.maxPremiumCaptureRes = message.maxPremiumCaptureRes; - return object; - }; - CaptureOptions.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - CaptureOptions.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.ClientOptionsProto.CaptureOptions"; - }; - return CaptureOptions; - }(); - ClientOptionsProto.MapsOptions = function() { - function MapsOptions(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - MapsOptions.prototype.enableMaps = false; - MapsOptions.prototype.docsAutoDownloadEnabled = false; - MapsOptions.prototype.docsAutoDownloadInterval = 0; - MapsOptions.prototype.docsAutoUploadEnabled = false; - MapsOptions.prototype.docsAutoUploadDelay = 0; - MapsOptions.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto.MapsOptions(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.enableMaps = reader.bool(); - break; - } - case 2: { - message.docsAutoDownloadEnabled = reader.bool(); - break; - } - case 3: { - message.docsAutoDownloadInterval = reader.int32(); - break; - } - case 4: { - message.docsAutoUploadEnabled = reader.bool(); - break; - } - case 5: { - message.docsAutoUploadDelay = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - MapsOptions.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.enableMaps != null && message.hasOwnProperty("enableMaps")) { - if (typeof message.enableMaps !== "boolean") - return "enableMaps: boolean expected"; - } - if (message.docsAutoDownloadEnabled != null && message.hasOwnProperty("docsAutoDownloadEnabled")) { - if (typeof message.docsAutoDownloadEnabled !== "boolean") - return "docsAutoDownloadEnabled: boolean expected"; - } - if (message.docsAutoDownloadInterval != null && message.hasOwnProperty("docsAutoDownloadInterval")) { - if (!$util.isInteger(message.docsAutoDownloadInterval)) - return "docsAutoDownloadInterval: integer expected"; - } - if (message.docsAutoUploadEnabled != null && message.hasOwnProperty("docsAutoUploadEnabled")) { - if (typeof message.docsAutoUploadEnabled !== "boolean") - return "docsAutoUploadEnabled: boolean expected"; - } - if (message.docsAutoUploadDelay != null && message.hasOwnProperty("docsAutoUploadDelay")) { - if (!$util.isInteger(message.docsAutoUploadDelay)) - return "docsAutoUploadDelay: integer expected"; - } - return null; - }; - MapsOptions.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.ClientOptionsProto.MapsOptions) - return object; - var message = new $root.keyhole.dbroot.ClientOptionsProto.MapsOptions(); - if (object.enableMaps != null) - message.enableMaps = Boolean(object.enableMaps); - if (object.docsAutoDownloadEnabled != null) - message.docsAutoDownloadEnabled = Boolean(object.docsAutoDownloadEnabled); - if (object.docsAutoDownloadInterval != null) - message.docsAutoDownloadInterval = object.docsAutoDownloadInterval | 0; - if (object.docsAutoUploadEnabled != null) - message.docsAutoUploadEnabled = Boolean(object.docsAutoUploadEnabled); - if (object.docsAutoUploadDelay != null) - message.docsAutoUploadDelay = object.docsAutoUploadDelay | 0; - return message; - }; - MapsOptions.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.enableMaps = false; - object.docsAutoDownloadEnabled = false; - object.docsAutoDownloadInterval = 0; - object.docsAutoUploadEnabled = false; - object.docsAutoUploadDelay = 0; - } - if (message.enableMaps != null && message.hasOwnProperty("enableMaps")) - object.enableMaps = message.enableMaps; - if (message.docsAutoDownloadEnabled != null && message.hasOwnProperty("docsAutoDownloadEnabled")) - object.docsAutoDownloadEnabled = message.docsAutoDownloadEnabled; - if (message.docsAutoDownloadInterval != null && message.hasOwnProperty("docsAutoDownloadInterval")) - object.docsAutoDownloadInterval = message.docsAutoDownloadInterval; - if (message.docsAutoUploadEnabled != null && message.hasOwnProperty("docsAutoUploadEnabled")) - object.docsAutoUploadEnabled = message.docsAutoUploadEnabled; - if (message.docsAutoUploadDelay != null && message.hasOwnProperty("docsAutoUploadDelay")) - object.docsAutoUploadDelay = message.docsAutoUploadDelay; - return object; - }; - MapsOptions.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - MapsOptions.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.ClientOptionsProto.MapsOptions"; - }; - return MapsOptions; - }(); - return ClientOptionsProto; - }(); - dbroot.FetchingOptionsProto = function() { - function FetchingOptionsProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - FetchingOptionsProto.prototype.maxRequestsPerQuery = 1; - FetchingOptionsProto.prototype.forceMaxRequestsPerQuery = false; - FetchingOptionsProto.prototype.sortBatches = false; - FetchingOptionsProto.prototype.maxDrawable = 2; - FetchingOptionsProto.prototype.maxImagery = 2; - FetchingOptionsProto.prototype.maxTerrain = 5; - FetchingOptionsProto.prototype.maxQuadtree = 5; - FetchingOptionsProto.prototype.maxDioramaMetadata = 1; - FetchingOptionsProto.prototype.maxDioramaData = 0; - FetchingOptionsProto.prototype.maxConsumerFetchRatio = 1; - FetchingOptionsProto.prototype.maxProEcFetchRatio = 0; - FetchingOptionsProto.prototype.safeOverallQps = 0; - FetchingOptionsProto.prototype.safeImageryQps = 0; - FetchingOptionsProto.prototype.domainsForHttps = "google.com gstatic.com"; - FetchingOptionsProto.prototype.hostsForHttp = ""; - FetchingOptionsProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.FetchingOptionsProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.maxRequestsPerQuery = reader.int32(); - break; - } - case 12: { - message.forceMaxRequestsPerQuery = reader.bool(); - break; - } - case 13: { - message.sortBatches = reader.bool(); - break; - } - case 2: { - message.maxDrawable = reader.int32(); - break; - } - case 3: { - message.maxImagery = reader.int32(); - break; - } - case 4: { - message.maxTerrain = reader.int32(); - break; - } - case 5: { - message.maxQuadtree = reader.int32(); - break; - } - case 6: { - message.maxDioramaMetadata = reader.int32(); - break; - } - case 7: { - message.maxDioramaData = reader.int32(); - break; - } - case 8: { - message.maxConsumerFetchRatio = reader.float(); - break; - } - case 9: { - message.maxProEcFetchRatio = reader.float(); - break; - } - case 10: { - message.safeOverallQps = reader.float(); - break; - } - case 11: { - message.safeImageryQps = reader.float(); - break; - } - case 14: { - message.domainsForHttps = reader.string(); - break; - } - case 15: { - message.hostsForHttp = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - FetchingOptionsProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.maxRequestsPerQuery != null && message.hasOwnProperty("maxRequestsPerQuery")) { - if (!$util.isInteger(message.maxRequestsPerQuery)) - return "maxRequestsPerQuery: integer expected"; - } - if (message.forceMaxRequestsPerQuery != null && message.hasOwnProperty("forceMaxRequestsPerQuery")) { - if (typeof message.forceMaxRequestsPerQuery !== "boolean") - return "forceMaxRequestsPerQuery: boolean expected"; - } - if (message.sortBatches != null && message.hasOwnProperty("sortBatches")) { - if (typeof message.sortBatches !== "boolean") - return "sortBatches: boolean expected"; - } - if (message.maxDrawable != null && message.hasOwnProperty("maxDrawable")) { - if (!$util.isInteger(message.maxDrawable)) - return "maxDrawable: integer expected"; - } - if (message.maxImagery != null && message.hasOwnProperty("maxImagery")) { - if (!$util.isInteger(message.maxImagery)) - return "maxImagery: integer expected"; - } - if (message.maxTerrain != null && message.hasOwnProperty("maxTerrain")) { - if (!$util.isInteger(message.maxTerrain)) - return "maxTerrain: integer expected"; - } - if (message.maxQuadtree != null && message.hasOwnProperty("maxQuadtree")) { - if (!$util.isInteger(message.maxQuadtree)) - return "maxQuadtree: integer expected"; - } - if (message.maxDioramaMetadata != null && message.hasOwnProperty("maxDioramaMetadata")) { - if (!$util.isInteger(message.maxDioramaMetadata)) - return "maxDioramaMetadata: integer expected"; - } - if (message.maxDioramaData != null && message.hasOwnProperty("maxDioramaData")) { - if (!$util.isInteger(message.maxDioramaData)) - return "maxDioramaData: integer expected"; - } - if (message.maxConsumerFetchRatio != null && message.hasOwnProperty("maxConsumerFetchRatio")) { - if (typeof message.maxConsumerFetchRatio !== "number") - return "maxConsumerFetchRatio: number expected"; - } - if (message.maxProEcFetchRatio != null && message.hasOwnProperty("maxProEcFetchRatio")) { - if (typeof message.maxProEcFetchRatio !== "number") - return "maxProEcFetchRatio: number expected"; - } - if (message.safeOverallQps != null && message.hasOwnProperty("safeOverallQps")) { - if (typeof message.safeOverallQps !== "number") - return "safeOverallQps: number expected"; - } - if (message.safeImageryQps != null && message.hasOwnProperty("safeImageryQps")) { - if (typeof message.safeImageryQps !== "number") - return "safeImageryQps: number expected"; - } - if (message.domainsForHttps != null && message.hasOwnProperty("domainsForHttps")) { - if (!$util.isString(message.domainsForHttps)) - return "domainsForHttps: string expected"; - } - if (message.hostsForHttp != null && message.hasOwnProperty("hostsForHttp")) { - if (!$util.isString(message.hostsForHttp)) - return "hostsForHttp: string expected"; - } - return null; - }; - FetchingOptionsProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.FetchingOptionsProto) - return object; - var message = new $root.keyhole.dbroot.FetchingOptionsProto(); - if (object.maxRequestsPerQuery != null) - message.maxRequestsPerQuery = object.maxRequestsPerQuery | 0; - if (object.forceMaxRequestsPerQuery != null) - message.forceMaxRequestsPerQuery = Boolean(object.forceMaxRequestsPerQuery); - if (object.sortBatches != null) - message.sortBatches = Boolean(object.sortBatches); - if (object.maxDrawable != null) - message.maxDrawable = object.maxDrawable | 0; - if (object.maxImagery != null) - message.maxImagery = object.maxImagery | 0; - if (object.maxTerrain != null) - message.maxTerrain = object.maxTerrain | 0; - if (object.maxQuadtree != null) - message.maxQuadtree = object.maxQuadtree | 0; - if (object.maxDioramaMetadata != null) - message.maxDioramaMetadata = object.maxDioramaMetadata | 0; - if (object.maxDioramaData != null) - message.maxDioramaData = object.maxDioramaData | 0; - if (object.maxConsumerFetchRatio != null) - message.maxConsumerFetchRatio = Number(object.maxConsumerFetchRatio); - if (object.maxProEcFetchRatio != null) - message.maxProEcFetchRatio = Number(object.maxProEcFetchRatio); - if (object.safeOverallQps != null) - message.safeOverallQps = Number(object.safeOverallQps); - if (object.safeImageryQps != null) - message.safeImageryQps = Number(object.safeImageryQps); - if (object.domainsForHttps != null) - message.domainsForHttps = String(object.domainsForHttps); - if (object.hostsForHttp != null) - message.hostsForHttp = String(object.hostsForHttp); - return message; - }; - FetchingOptionsProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.maxRequestsPerQuery = 1; - object.maxDrawable = 2; - object.maxImagery = 2; - object.maxTerrain = 5; - object.maxQuadtree = 5; - object.maxDioramaMetadata = 1; - object.maxDioramaData = 0; - object.maxConsumerFetchRatio = 1; - object.maxProEcFetchRatio = 0; - object.safeOverallQps = 0; - object.safeImageryQps = 0; - object.forceMaxRequestsPerQuery = false; - object.sortBatches = false; - object.domainsForHttps = "google.com gstatic.com"; - object.hostsForHttp = ""; - } - if (message.maxRequestsPerQuery != null && message.hasOwnProperty("maxRequestsPerQuery")) - object.maxRequestsPerQuery = message.maxRequestsPerQuery; - if (message.maxDrawable != null && message.hasOwnProperty("maxDrawable")) - object.maxDrawable = message.maxDrawable; - if (message.maxImagery != null && message.hasOwnProperty("maxImagery")) - object.maxImagery = message.maxImagery; - if (message.maxTerrain != null && message.hasOwnProperty("maxTerrain")) - object.maxTerrain = message.maxTerrain; - if (message.maxQuadtree != null && message.hasOwnProperty("maxQuadtree")) - object.maxQuadtree = message.maxQuadtree; - if (message.maxDioramaMetadata != null && message.hasOwnProperty("maxDioramaMetadata")) - object.maxDioramaMetadata = message.maxDioramaMetadata; - if (message.maxDioramaData != null && message.hasOwnProperty("maxDioramaData")) - object.maxDioramaData = message.maxDioramaData; - if (message.maxConsumerFetchRatio != null && message.hasOwnProperty("maxConsumerFetchRatio")) - object.maxConsumerFetchRatio = options.json && !isFinite(message.maxConsumerFetchRatio) ? String(message.maxConsumerFetchRatio) : message.maxConsumerFetchRatio; - if (message.maxProEcFetchRatio != null && message.hasOwnProperty("maxProEcFetchRatio")) - object.maxProEcFetchRatio = options.json && !isFinite(message.maxProEcFetchRatio) ? String(message.maxProEcFetchRatio) : message.maxProEcFetchRatio; - if (message.safeOverallQps != null && message.hasOwnProperty("safeOverallQps")) - object.safeOverallQps = options.json && !isFinite(message.safeOverallQps) ? String(message.safeOverallQps) : message.safeOverallQps; - if (message.safeImageryQps != null && message.hasOwnProperty("safeImageryQps")) - object.safeImageryQps = options.json && !isFinite(message.safeImageryQps) ? String(message.safeImageryQps) : message.safeImageryQps; - if (message.forceMaxRequestsPerQuery != null && message.hasOwnProperty("forceMaxRequestsPerQuery")) - object.forceMaxRequestsPerQuery = message.forceMaxRequestsPerQuery; - if (message.sortBatches != null && message.hasOwnProperty("sortBatches")) - object.sortBatches = message.sortBatches; - if (message.domainsForHttps != null && message.hasOwnProperty("domainsForHttps")) - object.domainsForHttps = message.domainsForHttps; - if (message.hostsForHttp != null && message.hasOwnProperty("hostsForHttp")) - object.hostsForHttp = message.hostsForHttp; - return object; - }; - FetchingOptionsProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - FetchingOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.FetchingOptionsProto"; - }; - return FetchingOptionsProto; - }(); - dbroot.TimeMachineOptionsProto = function() { - function TimeMachineOptionsProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - TimeMachineOptionsProto.prototype.serverUrl = ""; - TimeMachineOptionsProto.prototype.isTimemachine = false; - TimeMachineOptionsProto.prototype.dwellTimeMs = 500; - TimeMachineOptionsProto.prototype.discoverabilityAltitudeMeters = 15e3; - TimeMachineOptionsProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.TimeMachineOptionsProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.serverUrl = reader.string(); - break; - } - case 2: { - message.isTimemachine = reader.bool(); - break; - } - case 3: { - message.dwellTimeMs = reader.int32(); - break; - } - case 4: { - message.discoverabilityAltitudeMeters = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - TimeMachineOptionsProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.serverUrl != null && message.hasOwnProperty("serverUrl")) { - if (!$util.isString(message.serverUrl)) - return "serverUrl: string expected"; - } - if (message.isTimemachine != null && message.hasOwnProperty("isTimemachine")) { - if (typeof message.isTimemachine !== "boolean") - return "isTimemachine: boolean expected"; - } - if (message.dwellTimeMs != null && message.hasOwnProperty("dwellTimeMs")) { - if (!$util.isInteger(message.dwellTimeMs)) - return "dwellTimeMs: integer expected"; - } - if (message.discoverabilityAltitudeMeters != null && message.hasOwnProperty("discoverabilityAltitudeMeters")) { - if (!$util.isInteger(message.discoverabilityAltitudeMeters)) - return "discoverabilityAltitudeMeters: integer expected"; - } - return null; - }; - TimeMachineOptionsProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.TimeMachineOptionsProto) - return object; - var message = new $root.keyhole.dbroot.TimeMachineOptionsProto(); - if (object.serverUrl != null) - message.serverUrl = String(object.serverUrl); - if (object.isTimemachine != null) - message.isTimemachine = Boolean(object.isTimemachine); - if (object.dwellTimeMs != null) - message.dwellTimeMs = object.dwellTimeMs | 0; - if (object.discoverabilityAltitudeMeters != null) - message.discoverabilityAltitudeMeters = object.discoverabilityAltitudeMeters | 0; - return message; - }; - TimeMachineOptionsProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.serverUrl = ""; - object.isTimemachine = false; - object.dwellTimeMs = 500; - object.discoverabilityAltitudeMeters = 15e3; - } - if (message.serverUrl != null && message.hasOwnProperty("serverUrl")) - object.serverUrl = message.serverUrl; - if (message.isTimemachine != null && message.hasOwnProperty("isTimemachine")) - object.isTimemachine = message.isTimemachine; - if (message.dwellTimeMs != null && message.hasOwnProperty("dwellTimeMs")) - object.dwellTimeMs = message.dwellTimeMs; - if (message.discoverabilityAltitudeMeters != null && message.hasOwnProperty("discoverabilityAltitudeMeters")) - object.discoverabilityAltitudeMeters = message.discoverabilityAltitudeMeters; - return object; - }; - TimeMachineOptionsProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - TimeMachineOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.TimeMachineOptionsProto"; - }; - return TimeMachineOptionsProto; - }(); - dbroot.AutopiaOptionsProto = function() { - function AutopiaOptionsProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - AutopiaOptionsProto.prototype.metadataServerUrl = "http://cbk0.google.com/cbk"; - AutopiaOptionsProto.prototype.depthmapServerUrl = "http://cbk0.google.com/cbk"; - AutopiaOptionsProto.prototype.coverageOverlayUrl = ""; - AutopiaOptionsProto.prototype.maxImageryQps = 0; - AutopiaOptionsProto.prototype.maxMetadataDepthmapQps = 0; - AutopiaOptionsProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.AutopiaOptionsProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.metadataServerUrl = reader.string(); - break; - } - case 2: { - message.depthmapServerUrl = reader.string(); - break; - } - case 3: { - message.coverageOverlayUrl = reader.string(); - break; - } - case 4: { - message.maxImageryQps = reader.float(); - break; - } - case 5: { - message.maxMetadataDepthmapQps = reader.float(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - AutopiaOptionsProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.metadataServerUrl != null && message.hasOwnProperty("metadataServerUrl")) { - if (!$util.isString(message.metadataServerUrl)) - return "metadataServerUrl: string expected"; - } - if (message.depthmapServerUrl != null && message.hasOwnProperty("depthmapServerUrl")) { - if (!$util.isString(message.depthmapServerUrl)) - return "depthmapServerUrl: string expected"; - } - if (message.coverageOverlayUrl != null && message.hasOwnProperty("coverageOverlayUrl")) { - if (!$util.isString(message.coverageOverlayUrl)) - return "coverageOverlayUrl: string expected"; - } - if (message.maxImageryQps != null && message.hasOwnProperty("maxImageryQps")) { - if (typeof message.maxImageryQps !== "number") - return "maxImageryQps: number expected"; - } - if (message.maxMetadataDepthmapQps != null && message.hasOwnProperty("maxMetadataDepthmapQps")) { - if (typeof message.maxMetadataDepthmapQps !== "number") - return "maxMetadataDepthmapQps: number expected"; - } - return null; - }; - AutopiaOptionsProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.AutopiaOptionsProto) - return object; - var message = new $root.keyhole.dbroot.AutopiaOptionsProto(); - if (object.metadataServerUrl != null) - message.metadataServerUrl = String(object.metadataServerUrl); - if (object.depthmapServerUrl != null) - message.depthmapServerUrl = String(object.depthmapServerUrl); - if (object.coverageOverlayUrl != null) - message.coverageOverlayUrl = String(object.coverageOverlayUrl); - if (object.maxImageryQps != null) - message.maxImageryQps = Number(object.maxImageryQps); - if (object.maxMetadataDepthmapQps != null) - message.maxMetadataDepthmapQps = Number(object.maxMetadataDepthmapQps); - return message; - }; - AutopiaOptionsProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.metadataServerUrl = "http://cbk0.google.com/cbk"; - object.depthmapServerUrl = "http://cbk0.google.com/cbk"; - object.coverageOverlayUrl = ""; - object.maxImageryQps = 0; - object.maxMetadataDepthmapQps = 0; - } - if (message.metadataServerUrl != null && message.hasOwnProperty("metadataServerUrl")) - object.metadataServerUrl = message.metadataServerUrl; - if (message.depthmapServerUrl != null && message.hasOwnProperty("depthmapServerUrl")) - object.depthmapServerUrl = message.depthmapServerUrl; - if (message.coverageOverlayUrl != null && message.hasOwnProperty("coverageOverlayUrl")) - object.coverageOverlayUrl = message.coverageOverlayUrl; - if (message.maxImageryQps != null && message.hasOwnProperty("maxImageryQps")) - object.maxImageryQps = options.json && !isFinite(message.maxImageryQps) ? String(message.maxImageryQps) : message.maxImageryQps; - if (message.maxMetadataDepthmapQps != null && message.hasOwnProperty("maxMetadataDepthmapQps")) - object.maxMetadataDepthmapQps = options.json && !isFinite(message.maxMetadataDepthmapQps) ? String(message.maxMetadataDepthmapQps) : message.maxMetadataDepthmapQps; - return object; - }; - AutopiaOptionsProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - AutopiaOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.AutopiaOptionsProto"; - }; - return AutopiaOptionsProto; - }(); - dbroot.CSIOptionsProto = function() { - function CSIOptionsProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - CSIOptionsProto.prototype.samplingPercentage = 0; - CSIOptionsProto.prototype.experimentId = ""; - CSIOptionsProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.CSIOptionsProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.samplingPercentage = reader.int32(); - break; - } - case 2: { - message.experimentId = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - CSIOptionsProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.samplingPercentage != null && message.hasOwnProperty("samplingPercentage")) { - if (!$util.isInteger(message.samplingPercentage)) - return "samplingPercentage: integer expected"; - } - if (message.experimentId != null && message.hasOwnProperty("experimentId")) { - if (!$util.isString(message.experimentId)) - return "experimentId: string expected"; - } - return null; - }; - CSIOptionsProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.CSIOptionsProto) - return object; - var message = new $root.keyhole.dbroot.CSIOptionsProto(); - if (object.samplingPercentage != null) - message.samplingPercentage = object.samplingPercentage | 0; - if (object.experimentId != null) - message.experimentId = String(object.experimentId); - return message; - }; - CSIOptionsProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.samplingPercentage = 0; - object.experimentId = ""; - } - if (message.samplingPercentage != null && message.hasOwnProperty("samplingPercentage")) - object.samplingPercentage = message.samplingPercentage; - if (message.experimentId != null && message.hasOwnProperty("experimentId")) - object.experimentId = message.experimentId; - return object; - }; - CSIOptionsProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - CSIOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.CSIOptionsProto"; - }; - return CSIOptionsProto; - }(); - dbroot.SearchTabProto = function() { - function SearchTabProto(properties) { - this.inputBox = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SearchTabProto.prototype.isVisible = false; - SearchTabProto.prototype.tabLabel = null; - SearchTabProto.prototype.baseUrl = ""; - SearchTabProto.prototype.viewportPrefix = ""; - SearchTabProto.prototype.inputBox = $util.emptyArray; - SearchTabProto.prototype.requirement = null; - SearchTabProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.SearchTabProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.isVisible = reader.bool(); - break; - } - case 2: { - message.tabLabel = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.baseUrl = reader.string(); - break; - } - case 4: { - message.viewportPrefix = reader.string(); - break; - } - case 5: { - if (!(message.inputBox && message.inputBox.length)) - message.inputBox = []; - message.inputBox.push($root.keyhole.dbroot.SearchTabProto.InputBoxInfo.decode(reader, reader.uint32())); - break; - } - case 6: { - message.requirement = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("isVisible")) - throw $util.ProtocolError("missing required 'isVisible'", { instance: message }); - return message; - }; - SearchTabProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (typeof message.isVisible !== "boolean") - return "isVisible: boolean expected"; - if (message.tabLabel != null && message.hasOwnProperty("tabLabel")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.tabLabel); - if (error) - return "tabLabel." + error; - } - if (message.baseUrl != null && message.hasOwnProperty("baseUrl")) { - if (!$util.isString(message.baseUrl)) - return "baseUrl: string expected"; - } - if (message.viewportPrefix != null && message.hasOwnProperty("viewportPrefix")) { - if (!$util.isString(message.viewportPrefix)) - return "viewportPrefix: string expected"; - } - if (message.inputBox != null && message.hasOwnProperty("inputBox")) { - if (!Array.isArray(message.inputBox)) - return "inputBox: array expected"; - for (var i = 0; i < message.inputBox.length; ++i) { - var error = $root.keyhole.dbroot.SearchTabProto.InputBoxInfo.verify(message.inputBox[i]); - if (error) - return "inputBox." + error; - } - } - if (message.requirement != null && message.hasOwnProperty("requirement")) { - var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirement); - if (error) - return "requirement." + error; - } - return null; - }; - SearchTabProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.SearchTabProto) - return object; - var message = new $root.keyhole.dbroot.SearchTabProto(); - if (object.isVisible != null) - message.isVisible = Boolean(object.isVisible); - if (object.tabLabel != null) { - if (typeof object.tabLabel !== "object") - throw TypeError(".keyhole.dbroot.SearchTabProto.tabLabel: object expected"); - message.tabLabel = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.tabLabel); - } - if (object.baseUrl != null) - message.baseUrl = String(object.baseUrl); - if (object.viewportPrefix != null) - message.viewportPrefix = String(object.viewportPrefix); - if (object.inputBox) { - if (!Array.isArray(object.inputBox)) - throw TypeError(".keyhole.dbroot.SearchTabProto.inputBox: array expected"); - message.inputBox = []; - for (var i = 0; i < object.inputBox.length; ++i) { - if (typeof object.inputBox[i] !== "object") - throw TypeError(".keyhole.dbroot.SearchTabProto.inputBox: object expected"); - message.inputBox[i] = $root.keyhole.dbroot.SearchTabProto.InputBoxInfo.fromObject(object.inputBox[i]); - } - } - if (object.requirement != null) { - if (typeof object.requirement !== "object") - throw TypeError(".keyhole.dbroot.SearchTabProto.requirement: object expected"); - message.requirement = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirement); - } - return message; - }; - SearchTabProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.inputBox = []; - if (options.defaults) { - object.isVisible = false; - object.tabLabel = null; - object.baseUrl = ""; - object.viewportPrefix = ""; - object.requirement = null; - } - if (message.isVisible != null && message.hasOwnProperty("isVisible")) - object.isVisible = message.isVisible; - if (message.tabLabel != null && message.hasOwnProperty("tabLabel")) - object.tabLabel = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.tabLabel, options); - if (message.baseUrl != null && message.hasOwnProperty("baseUrl")) - object.baseUrl = message.baseUrl; - if (message.viewportPrefix != null && message.hasOwnProperty("viewportPrefix")) - object.viewportPrefix = message.viewportPrefix; - if (message.inputBox && message.inputBox.length) { - object.inputBox = []; - for (var j = 0; j < message.inputBox.length; ++j) - object.inputBox[j] = $root.keyhole.dbroot.SearchTabProto.InputBoxInfo.toObject(message.inputBox[j], options); - } - if (message.requirement != null && message.hasOwnProperty("requirement")) - object.requirement = $root.keyhole.dbroot.RequirementProto.toObject(message.requirement, options); - return object; - }; - SearchTabProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SearchTabProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.SearchTabProto"; - }; - SearchTabProto.InputBoxInfo = function() { - function InputBoxInfo(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - InputBoxInfo.prototype.label = null; - InputBoxInfo.prototype.queryVerb = ""; - InputBoxInfo.prototype.queryPrepend = ""; - InputBoxInfo.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.SearchTabProto.InputBoxInfo(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.label = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.queryVerb = reader.string(); - break; - } - case 3: { - message.queryPrepend = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("label")) - throw $util.ProtocolError("missing required 'label'", { instance: message }); - if (!message.hasOwnProperty("queryVerb")) - throw $util.ProtocolError("missing required 'queryVerb'", { instance: message }); - return message; - }; - InputBoxInfo.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.label); - if (error) - return "label." + error; - } - if (!$util.isString(message.queryVerb)) - return "queryVerb: string expected"; - if (message.queryPrepend != null && message.hasOwnProperty("queryPrepend")) { - if (!$util.isString(message.queryPrepend)) - return "queryPrepend: string expected"; - } - return null; - }; - InputBoxInfo.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.SearchTabProto.InputBoxInfo) - return object; - var message = new $root.keyhole.dbroot.SearchTabProto.InputBoxInfo(); - if (object.label != null) { - if (typeof object.label !== "object") - throw TypeError(".keyhole.dbroot.SearchTabProto.InputBoxInfo.label: object expected"); - message.label = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.label); - } - if (object.queryVerb != null) - message.queryVerb = String(object.queryVerb); - if (object.queryPrepend != null) - message.queryPrepend = String(object.queryPrepend); - return message; - }; - InputBoxInfo.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.label = null; - object.queryVerb = ""; - object.queryPrepend = ""; - } - if (message.label != null && message.hasOwnProperty("label")) - object.label = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.label, options); - if (message.queryVerb != null && message.hasOwnProperty("queryVerb")) - object.queryVerb = message.queryVerb; - if (message.queryPrepend != null && message.hasOwnProperty("queryPrepend")) - object.queryPrepend = message.queryPrepend; - return object; - }; - InputBoxInfo.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - InputBoxInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.SearchTabProto.InputBoxInfo"; - }; - return InputBoxInfo; - }(); - return SearchTabProto; - }(); - dbroot.CobrandProto = function() { - function CobrandProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - CobrandProto.prototype.logoUrl = ""; - CobrandProto.prototype.xCoord = null; - CobrandProto.prototype.yCoord = null; - CobrandProto.prototype.tiePoint = 6; - CobrandProto.prototype.screenSize = 0; - CobrandProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.CobrandProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.logoUrl = reader.string(); - break; - } - case 2: { - message.xCoord = $root.keyhole.dbroot.CobrandProto.Coord.decode(reader, reader.uint32()); - break; - } - case 3: { - message.yCoord = $root.keyhole.dbroot.CobrandProto.Coord.decode(reader, reader.uint32()); - break; - } - case 4: { - message.tiePoint = reader.int32(); - break; - } - case 5: { - message.screenSize = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("logoUrl")) - throw $util.ProtocolError("missing required 'logoUrl'", { instance: message }); - return message; - }; - CobrandProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isString(message.logoUrl)) - return "logoUrl: string expected"; - if (message.xCoord != null && message.hasOwnProperty("xCoord")) { - var error = $root.keyhole.dbroot.CobrandProto.Coord.verify(message.xCoord); - if (error) - return "xCoord." + error; - } - if (message.yCoord != null && message.hasOwnProperty("yCoord")) { - var error = $root.keyhole.dbroot.CobrandProto.Coord.verify(message.yCoord); - if (error) - return "yCoord." + error; - } - if (message.tiePoint != null && message.hasOwnProperty("tiePoint")) - switch (message.tiePoint) { - default: - return "tiePoint: enum value expected"; - case 0: - case 1: - case 2: - case 3: - case 4: - case 5: - case 6: - case 7: - case 8: - break; - } - if (message.screenSize != null && message.hasOwnProperty("screenSize")) { - if (typeof message.screenSize !== "number") - return "screenSize: number expected"; - } - return null; - }; - CobrandProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.CobrandProto) - return object; - var message = new $root.keyhole.dbroot.CobrandProto(); - if (object.logoUrl != null) - message.logoUrl = String(object.logoUrl); - if (object.xCoord != null) { - if (typeof object.xCoord !== "object") - throw TypeError(".keyhole.dbroot.CobrandProto.xCoord: object expected"); - message.xCoord = $root.keyhole.dbroot.CobrandProto.Coord.fromObject(object.xCoord); - } - if (object.yCoord != null) { - if (typeof object.yCoord !== "object") - throw TypeError(".keyhole.dbroot.CobrandProto.yCoord: object expected"); - message.yCoord = $root.keyhole.dbroot.CobrandProto.Coord.fromObject(object.yCoord); - } - switch (object.tiePoint) { - case "TOP_LEFT": - case 0: - message.tiePoint = 0; - break; - case "TOP_CENTER": - case 1: - message.tiePoint = 1; - break; - case "TOP_RIGHT": - case 2: - message.tiePoint = 2; - break; - case "MID_LEFT": - case 3: - message.tiePoint = 3; - break; - case "MID_CENTER": - case 4: - message.tiePoint = 4; - break; - case "MID_RIGHT": - case 5: - message.tiePoint = 5; - break; - case "BOTTOM_LEFT": - case 6: - message.tiePoint = 6; - break; - case "BOTTOM_CENTER": - case 7: - message.tiePoint = 7; - break; - case "BOTTOM_RIGHT": - case 8: - message.tiePoint = 8; - break; - } - if (object.screenSize != null) - message.screenSize = Number(object.screenSize); - return message; - }; - CobrandProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.logoUrl = ""; - object.xCoord = null; - object.yCoord = null; - object.tiePoint = options.enums === String ? "BOTTOM_LEFT" : 6; - object.screenSize = 0; - } - if (message.logoUrl != null && message.hasOwnProperty("logoUrl")) - object.logoUrl = message.logoUrl; - if (message.xCoord != null && message.hasOwnProperty("xCoord")) - object.xCoord = $root.keyhole.dbroot.CobrandProto.Coord.toObject(message.xCoord, options); - if (message.yCoord != null && message.hasOwnProperty("yCoord")) - object.yCoord = $root.keyhole.dbroot.CobrandProto.Coord.toObject(message.yCoord, options); - if (message.tiePoint != null && message.hasOwnProperty("tiePoint")) - object.tiePoint = options.enums === String ? $root.keyhole.dbroot.CobrandProto.TiePoint[message.tiePoint] : message.tiePoint; - if (message.screenSize != null && message.hasOwnProperty("screenSize")) - object.screenSize = options.json && !isFinite(message.screenSize) ? String(message.screenSize) : message.screenSize; - return object; - }; - CobrandProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - CobrandProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.CobrandProto"; - }; - CobrandProto.Coord = function() { - function Coord(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - Coord.prototype.value = 0; - Coord.prototype.isRelative = false; - Coord.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.CobrandProto.Coord(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.value = reader.double(); - break; - } - case 2: { - message.isRelative = reader.bool(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("value")) - throw $util.ProtocolError("missing required 'value'", { instance: message }); - return message; - }; - Coord.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (typeof message.value !== "number") - return "value: number expected"; - if (message.isRelative != null && message.hasOwnProperty("isRelative")) { - if (typeof message.isRelative !== "boolean") - return "isRelative: boolean expected"; - } - return null; - }; - Coord.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.CobrandProto.Coord) - return object; - var message = new $root.keyhole.dbroot.CobrandProto.Coord(); - if (object.value != null) - message.value = Number(object.value); - if (object.isRelative != null) - message.isRelative = Boolean(object.isRelative); - return message; - }; - Coord.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.value = 0; - object.isRelative = false; - } - if (message.value != null && message.hasOwnProperty("value")) - object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value; - if (message.isRelative != null && message.hasOwnProperty("isRelative")) - object.isRelative = message.isRelative; - return object; - }; - Coord.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - Coord.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.CobrandProto.Coord"; - }; - return Coord; - }(); - CobrandProto.TiePoint = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "TOP_LEFT"] = 0; - values[valuesById[1] = "TOP_CENTER"] = 1; - values[valuesById[2] = "TOP_RIGHT"] = 2; - values[valuesById[3] = "MID_LEFT"] = 3; - values[valuesById[4] = "MID_CENTER"] = 4; - values[valuesById[5] = "MID_RIGHT"] = 5; - values[valuesById[6] = "BOTTOM_LEFT"] = 6; - values[valuesById[7] = "BOTTOM_CENTER"] = 7; - values[valuesById[8] = "BOTTOM_RIGHT"] = 8; - return values; - }(); - return CobrandProto; - }(); - dbroot.DatabaseDescriptionProto = function() { - function DatabaseDescriptionProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - DatabaseDescriptionProto.prototype.databaseName = null; - DatabaseDescriptionProto.prototype.databaseUrl = ""; - DatabaseDescriptionProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DatabaseDescriptionProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.databaseUrl = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("databaseUrl")) - throw $util.ProtocolError("missing required 'databaseUrl'", { instance: message }); - return message; - }; - DatabaseDescriptionProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.databaseName != null && message.hasOwnProperty("databaseName")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.databaseName); - if (error) - return "databaseName." + error; - } - if (!$util.isString(message.databaseUrl)) - return "databaseUrl: string expected"; - return null; - }; - DatabaseDescriptionProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.DatabaseDescriptionProto) - return object; - var message = new $root.keyhole.dbroot.DatabaseDescriptionProto(); - if (object.databaseName != null) { - if (typeof object.databaseName !== "object") - throw TypeError(".keyhole.dbroot.DatabaseDescriptionProto.databaseName: object expected"); - message.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.databaseName); - } - if (object.databaseUrl != null) - message.databaseUrl = String(object.databaseUrl); - return message; - }; - DatabaseDescriptionProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.databaseName = null; - object.databaseUrl = ""; - } - if (message.databaseName != null && message.hasOwnProperty("databaseName")) - object.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.databaseName, options); - if (message.databaseUrl != null && message.hasOwnProperty("databaseUrl")) - object.databaseUrl = message.databaseUrl; - return object; - }; - DatabaseDescriptionProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - DatabaseDescriptionProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.DatabaseDescriptionProto"; - }; - return DatabaseDescriptionProto; - }(); - dbroot.ConfigScriptProto = function() { - function ConfigScriptProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - ConfigScriptProto.prototype.scriptName = ""; - ConfigScriptProto.prototype.scriptData = ""; - ConfigScriptProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ConfigScriptProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.scriptName = reader.string(); - break; - } - case 2: { - message.scriptData = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("scriptName")) - throw $util.ProtocolError("missing required 'scriptName'", { instance: message }); - if (!message.hasOwnProperty("scriptData")) - throw $util.ProtocolError("missing required 'scriptData'", { instance: message }); - return message; - }; - ConfigScriptProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isString(message.scriptName)) - return "scriptName: string expected"; - if (!$util.isString(message.scriptData)) - return "scriptData: string expected"; - return null; - }; - ConfigScriptProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.ConfigScriptProto) - return object; - var message = new $root.keyhole.dbroot.ConfigScriptProto(); - if (object.scriptName != null) - message.scriptName = String(object.scriptName); - if (object.scriptData != null) - message.scriptData = String(object.scriptData); - return message; - }; - ConfigScriptProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.scriptName = ""; - object.scriptData = ""; - } - if (message.scriptName != null && message.hasOwnProperty("scriptName")) - object.scriptName = message.scriptName; - if (message.scriptData != null && message.hasOwnProperty("scriptData")) - object.scriptData = message.scriptData; - return object; - }; - ConfigScriptProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - ConfigScriptProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.ConfigScriptProto"; - }; - return ConfigScriptProto; - }(); - dbroot.SwoopParamsProto = function() { - function SwoopParamsProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SwoopParamsProto.prototype.startDistInMeters = 0; - SwoopParamsProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.SwoopParamsProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.startDistInMeters = reader.double(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - SwoopParamsProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.startDistInMeters != null && message.hasOwnProperty("startDistInMeters")) { - if (typeof message.startDistInMeters !== "number") - return "startDistInMeters: number expected"; - } - return null; - }; - SwoopParamsProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.SwoopParamsProto) - return object; - var message = new $root.keyhole.dbroot.SwoopParamsProto(); - if (object.startDistInMeters != null) - message.startDistInMeters = Number(object.startDistInMeters); - return message; - }; - SwoopParamsProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.startDistInMeters = 0; - if (message.startDistInMeters != null && message.hasOwnProperty("startDistInMeters")) - object.startDistInMeters = options.json && !isFinite(message.startDistInMeters) ? String(message.startDistInMeters) : message.startDistInMeters; - return object; - }; - SwoopParamsProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SwoopParamsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.SwoopParamsProto"; - }; - return SwoopParamsProto; - }(); - dbroot.PostingServerProto = function() { - function PostingServerProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - PostingServerProto.prototype.name = null; - PostingServerProto.prototype.baseUrl = null; - PostingServerProto.prototype.postWizardPath = null; - PostingServerProto.prototype.fileSubmitPath = null; - PostingServerProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.PostingServerProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.name = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.baseUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.postWizardPath = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 4: { - message.fileSubmitPath = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - PostingServerProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.name); - if (error) - return "name." + error; - } - if (message.baseUrl != null && message.hasOwnProperty("baseUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.baseUrl); - if (error) - return "baseUrl." + error; - } - if (message.postWizardPath != null && message.hasOwnProperty("postWizardPath")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.postWizardPath); - if (error) - return "postWizardPath." + error; - } - if (message.fileSubmitPath != null && message.hasOwnProperty("fileSubmitPath")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.fileSubmitPath); - if (error) - return "fileSubmitPath." + error; - } - return null; - }; - PostingServerProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.PostingServerProto) - return object; - var message = new $root.keyhole.dbroot.PostingServerProto(); - if (object.name != null) { - if (typeof object.name !== "object") - throw TypeError(".keyhole.dbroot.PostingServerProto.name: object expected"); - message.name = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.name); - } - if (object.baseUrl != null) { - if (typeof object.baseUrl !== "object") - throw TypeError(".keyhole.dbroot.PostingServerProto.baseUrl: object expected"); - message.baseUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.baseUrl); - } - if (object.postWizardPath != null) { - if (typeof object.postWizardPath !== "object") - throw TypeError(".keyhole.dbroot.PostingServerProto.postWizardPath: object expected"); - message.postWizardPath = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.postWizardPath); - } - if (object.fileSubmitPath != null) { - if (typeof object.fileSubmitPath !== "object") - throw TypeError(".keyhole.dbroot.PostingServerProto.fileSubmitPath: object expected"); - message.fileSubmitPath = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.fileSubmitPath); - } - return message; - }; - PostingServerProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.name = null; - object.baseUrl = null; - object.postWizardPath = null; - object.fileSubmitPath = null; - } - if (message.name != null && message.hasOwnProperty("name")) - object.name = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.name, options); - if (message.baseUrl != null && message.hasOwnProperty("baseUrl")) - object.baseUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.baseUrl, options); - if (message.postWizardPath != null && message.hasOwnProperty("postWizardPath")) - object.postWizardPath = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.postWizardPath, options); - if (message.fileSubmitPath != null && message.hasOwnProperty("fileSubmitPath")) - object.fileSubmitPath = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.fileSubmitPath, options); - return object; - }; - PostingServerProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - PostingServerProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.PostingServerProto"; - }; - return PostingServerProto; - }(); - dbroot.PlanetaryDatabaseProto = function() { - function PlanetaryDatabaseProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - PlanetaryDatabaseProto.prototype.url = null; - PlanetaryDatabaseProto.prototype.name = null; - PlanetaryDatabaseProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.PlanetaryDatabaseProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.name = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("url")) - throw $util.ProtocolError("missing required 'url'", { instance: message }); - if (!message.hasOwnProperty("name")) - throw $util.ProtocolError("missing required 'name'", { instance: message }); - return message; - }; - PlanetaryDatabaseProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url); - if (error) - return "url." + error; - } - { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.name); - if (error) - return "name." + error; - } - return null; - }; - PlanetaryDatabaseProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.PlanetaryDatabaseProto) - return object; - var message = new $root.keyhole.dbroot.PlanetaryDatabaseProto(); - if (object.url != null) { - if (typeof object.url !== "object") - throw TypeError(".keyhole.dbroot.PlanetaryDatabaseProto.url: object expected"); - message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url); - } - if (object.name != null) { - if (typeof object.name !== "object") - throw TypeError(".keyhole.dbroot.PlanetaryDatabaseProto.name: object expected"); - message.name = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.name); - } - return message; - }; - PlanetaryDatabaseProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.url = null; - object.name = null; - } - if (message.url != null && message.hasOwnProperty("url")) - object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options); - if (message.name != null && message.hasOwnProperty("name")) - object.name = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.name, options); - return object; - }; - PlanetaryDatabaseProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - PlanetaryDatabaseProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.PlanetaryDatabaseProto"; - }; - return PlanetaryDatabaseProto; - }(); - dbroot.LogServerProto = function() { - function LogServerProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - LogServerProto.prototype.url = null; - LogServerProto.prototype.enable = false; - LogServerProto.prototype.throttlingFactor = 1; - LogServerProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.LogServerProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.enable = reader.bool(); - break; - } - case 3: { - message.throttlingFactor = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - LogServerProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.url != null && message.hasOwnProperty("url")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url); - if (error) - return "url." + error; - } - if (message.enable != null && message.hasOwnProperty("enable")) { - if (typeof message.enable !== "boolean") - return "enable: boolean expected"; - } - if (message.throttlingFactor != null && message.hasOwnProperty("throttlingFactor")) { - if (!$util.isInteger(message.throttlingFactor)) - return "throttlingFactor: integer expected"; - } - return null; - }; - LogServerProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.LogServerProto) - return object; - var message = new $root.keyhole.dbroot.LogServerProto(); - if (object.url != null) { - if (typeof object.url !== "object") - throw TypeError(".keyhole.dbroot.LogServerProto.url: object expected"); - message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url); - } - if (object.enable != null) - message.enable = Boolean(object.enable); - if (object.throttlingFactor != null) - message.throttlingFactor = object.throttlingFactor | 0; - return message; - }; - LogServerProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.url = null; - object.enable = false; - object.throttlingFactor = 1; - } - if (message.url != null && message.hasOwnProperty("url")) - object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options); - if (message.enable != null && message.hasOwnProperty("enable")) - object.enable = message.enable; - if (message.throttlingFactor != null && message.hasOwnProperty("throttlingFactor")) - object.throttlingFactor = message.throttlingFactor; - return object; - }; - LogServerProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - LogServerProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.LogServerProto"; - }; - return LogServerProto; - }(); - dbroot.EndSnippetProto = function() { - function EndSnippetProto(properties) { - this.mfeDomains = []; - this.searchTab = []; - this.cobrandInfo = []; - this.validDatabase = []; - this.configScript = []; - this.planetaryDatabase = []; - this.filmstripConfig = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - EndSnippetProto.prototype.model = null; - EndSnippetProto.prototype.authServerUrl = null; - EndSnippetProto.prototype.disableAuthentication = false; - EndSnippetProto.prototype.mfeDomains = $util.emptyArray; - EndSnippetProto.prototype.mfeLangParam = "hl=$5Bhl5D"; - EndSnippetProto.prototype.adsUrlPatterns = ""; - EndSnippetProto.prototype.reverseGeocoderUrl = null; - EndSnippetProto.prototype.reverseGeocoderProtocolVersion = 3; - EndSnippetProto.prototype.skyDatabaseIsAvailable = true; - EndSnippetProto.prototype.skyDatabaseUrl = null; - EndSnippetProto.prototype.defaultWebPageIntlUrl = null; - EndSnippetProto.prototype.numStartUpTips = 17; - EndSnippetProto.prototype.startUpTipsUrl = null; - EndSnippetProto.prototype.numProStartUpTips = 0; - EndSnippetProto.prototype.proStartUpTipsUrl = null; - EndSnippetProto.prototype.startupTipsIntlUrl = null; - EndSnippetProto.prototype.userGuideIntlUrl = null; - EndSnippetProto.prototype.supportCenterIntlUrl = null; - EndSnippetProto.prototype.businessListingIntlUrl = null; - EndSnippetProto.prototype.supportAnswerIntlUrl = null; - EndSnippetProto.prototype.supportTopicIntlUrl = null; - EndSnippetProto.prototype.supportRequestIntlUrl = null; - EndSnippetProto.prototype.earthIntlUrl = null; - EndSnippetProto.prototype.addContentUrl = null; - EndSnippetProto.prototype.sketchupNotInstalledUrl = null; - EndSnippetProto.prototype.sketchupErrorUrl = null; - EndSnippetProto.prototype.freeLicenseUrl = null; - EndSnippetProto.prototype.proLicenseUrl = null; - EndSnippetProto.prototype.tutorialUrl = null; - EndSnippetProto.prototype.keyboardShortcutsUrl = null; - EndSnippetProto.prototype.releaseNotesUrl = null; - EndSnippetProto.prototype.hideUserData = false; - EndSnippetProto.prototype.useGeLogo = true; - EndSnippetProto.prototype.dioramaDescriptionUrlBase = null; - EndSnippetProto.prototype.dioramaDefaultColor = 4291281607; - EndSnippetProto.prototype.dioramaBlacklistUrl = null; - EndSnippetProto.prototype.clientOptions = null; - EndSnippetProto.prototype.fetchingOptions = null; - EndSnippetProto.prototype.timeMachineOptions = null; - EndSnippetProto.prototype.csiOptions = null; - EndSnippetProto.prototype.searchTab = $util.emptyArray; - EndSnippetProto.prototype.cobrandInfo = $util.emptyArray; - EndSnippetProto.prototype.validDatabase = $util.emptyArray; - EndSnippetProto.prototype.configScript = $util.emptyArray; - EndSnippetProto.prototype.deauthServerUrl = null; - EndSnippetProto.prototype.swoopParameters = null; - EndSnippetProto.prototype.bbsServerInfo = null; - EndSnippetProto.prototype.dataErrorServerInfo = null; - EndSnippetProto.prototype.planetaryDatabase = $util.emptyArray; - EndSnippetProto.prototype.logServer = null; - EndSnippetProto.prototype.autopiaOptions = null; - EndSnippetProto.prototype.searchConfig = null; - EndSnippetProto.prototype.searchInfo = null; - EndSnippetProto.prototype.elevationServiceBaseUrl = "http://maps.google.com/maps/api/elevation/"; - EndSnippetProto.prototype.elevationProfileQueryDelay = 500; - EndSnippetProto.prototype.proUpgradeUrl = null; - EndSnippetProto.prototype.earthCommunityUrl = null; - EndSnippetProto.prototype.googleMapsUrl = null; - EndSnippetProto.prototype.sharingUrl = null; - EndSnippetProto.prototype.privacyPolicyUrl = null; - EndSnippetProto.prototype.doGplusUserCheck = false; - EndSnippetProto.prototype.rocktreeDataProto = null; - EndSnippetProto.prototype.filmstripConfig = $util.emptyArray; - EndSnippetProto.prototype.showSigninButton = false; - EndSnippetProto.prototype.proMeasureUpsellUrl = null; - EndSnippetProto.prototype.proPrintUpsellUrl = null; - EndSnippetProto.prototype.starDataProto = null; - EndSnippetProto.prototype.feedbackUrl = null; - EndSnippetProto.prototype.oauth2LoginUrl = null; - EndSnippetProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.model = $root.keyhole.dbroot.PlanetModelProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.authServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.disableAuthentication = reader.bool(); - break; - } - case 4: { - if (!(message.mfeDomains && message.mfeDomains.length)) - message.mfeDomains = []; - message.mfeDomains.push($root.keyhole.dbroot.MfeDomainFeaturesProto.decode(reader, reader.uint32())); - break; - } - case 5: { - message.mfeLangParam = reader.string(); - break; - } - case 6: { - message.adsUrlPatterns = reader.string(); - break; - } - case 7: { - message.reverseGeocoderUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 8: { - message.reverseGeocoderProtocolVersion = reader.int32(); - break; - } - case 9: { - message.skyDatabaseIsAvailable = reader.bool(); - break; - } - case 10: { - message.skyDatabaseUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 11: { - message.defaultWebPageIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 12: { - message.numStartUpTips = reader.int32(); - break; - } - case 13: { - message.startUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 51: { - message.numProStartUpTips = reader.int32(); - break; - } - case 52: { - message.proStartUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 64: { - message.startupTipsIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 14: { - message.userGuideIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 15: { - message.supportCenterIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 16: { - message.businessListingIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 17: { - message.supportAnswerIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 18: { - message.supportTopicIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 19: { - message.supportRequestIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 20: { - message.earthIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 21: { - message.addContentUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 22: { - message.sketchupNotInstalledUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 23: { - message.sketchupErrorUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 24: { - message.freeLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 25: { - message.proLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 48: { - message.tutorialUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 49: { - message.keyboardShortcutsUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 50: { - message.releaseNotesUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 26: { - message.hideUserData = reader.bool(); - break; - } - case 27: { - message.useGeLogo = reader.bool(); - break; - } - case 28: { - message.dioramaDescriptionUrlBase = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 29: { - message.dioramaDefaultColor = reader.uint32(); - break; - } - case 53: { - message.dioramaBlacklistUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 30: { - message.clientOptions = $root.keyhole.dbroot.ClientOptionsProto.decode(reader, reader.uint32()); - break; - } - case 31: { - message.fetchingOptions = $root.keyhole.dbroot.FetchingOptionsProto.decode(reader, reader.uint32()); - break; - } - case 32: { - message.timeMachineOptions = $root.keyhole.dbroot.TimeMachineOptionsProto.decode(reader, reader.uint32()); - break; - } - case 33: { - message.csiOptions = $root.keyhole.dbroot.CSIOptionsProto.decode(reader, reader.uint32()); - break; - } - case 34: { - if (!(message.searchTab && message.searchTab.length)) - message.searchTab = []; - message.searchTab.push($root.keyhole.dbroot.SearchTabProto.decode(reader, reader.uint32())); - break; - } - case 35: { - if (!(message.cobrandInfo && message.cobrandInfo.length)) - message.cobrandInfo = []; - message.cobrandInfo.push($root.keyhole.dbroot.CobrandProto.decode(reader, reader.uint32())); - break; - } - case 36: { - if (!(message.validDatabase && message.validDatabase.length)) - message.validDatabase = []; - message.validDatabase.push($root.keyhole.dbroot.DatabaseDescriptionProto.decode(reader, reader.uint32())); - break; - } - case 37: { - if (!(message.configScript && message.configScript.length)) - message.configScript = []; - message.configScript.push($root.keyhole.dbroot.ConfigScriptProto.decode(reader, reader.uint32())); - break; - } - case 38: { - message.deauthServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 39: { - message.swoopParameters = $root.keyhole.dbroot.SwoopParamsProto.decode(reader, reader.uint32()); - break; - } - case 40: { - message.bbsServerInfo = $root.keyhole.dbroot.PostingServerProto.decode(reader, reader.uint32()); - break; - } - case 41: { - message.dataErrorServerInfo = $root.keyhole.dbroot.PostingServerProto.decode(reader, reader.uint32()); - break; - } - case 42: { - if (!(message.planetaryDatabase && message.planetaryDatabase.length)) - message.planetaryDatabase = []; - message.planetaryDatabase.push($root.keyhole.dbroot.PlanetaryDatabaseProto.decode(reader, reader.uint32())); - break; - } - case 43: { - message.logServer = $root.keyhole.dbroot.LogServerProto.decode(reader, reader.uint32()); - break; - } - case 44: { - message.autopiaOptions = $root.keyhole.dbroot.AutopiaOptionsProto.decode(reader, reader.uint32()); - break; - } - case 54: { - message.searchConfig = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.decode(reader, reader.uint32()); - break; - } - case 45: { - message.searchInfo = $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto.decode(reader, reader.uint32()); - break; - } - case 46: { - message.elevationServiceBaseUrl = reader.string(); - break; - } - case 47: { - message.elevationProfileQueryDelay = reader.int32(); - break; - } - case 55: { - message.proUpgradeUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 56: { - message.earthCommunityUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 57: { - message.googleMapsUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 58: { - message.sharingUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 59: { - message.privacyPolicyUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 60: { - message.doGplusUserCheck = reader.bool(); - break; - } - case 61: { - message.rocktreeDataProto = $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto.decode(reader, reader.uint32()); - break; - } - case 62: { - if (!(message.filmstripConfig && message.filmstripConfig.length)) - message.filmstripConfig = []; - message.filmstripConfig.push($root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.decode(reader, reader.uint32())); - break; - } - case 63: { - message.showSigninButton = reader.bool(); - break; - } - case 65: { - message.proMeasureUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 66: { - message.proPrintUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 67: { - message.starDataProto = $root.keyhole.dbroot.EndSnippetProto.StarDataProto.decode(reader, reader.uint32()); - break; - } - case 68: { - message.feedbackUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 69: { - message.oauth2LoginUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - EndSnippetProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.model != null && message.hasOwnProperty("model")) { - var error = $root.keyhole.dbroot.PlanetModelProto.verify(message.model); - if (error) - return "model." + error; - } - if (message.authServerUrl != null && message.hasOwnProperty("authServerUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.authServerUrl); - if (error) - return "authServerUrl." + error; - } - if (message.disableAuthentication != null && message.hasOwnProperty("disableAuthentication")) { - if (typeof message.disableAuthentication !== "boolean") - return "disableAuthentication: boolean expected"; - } - if (message.mfeDomains != null && message.hasOwnProperty("mfeDomains")) { - if (!Array.isArray(message.mfeDomains)) - return "mfeDomains: array expected"; - for (var i = 0; i < message.mfeDomains.length; ++i) { - var error = $root.keyhole.dbroot.MfeDomainFeaturesProto.verify(message.mfeDomains[i]); - if (error) - return "mfeDomains." + error; - } - } - if (message.mfeLangParam != null && message.hasOwnProperty("mfeLangParam")) { - if (!$util.isString(message.mfeLangParam)) - return "mfeLangParam: string expected"; - } - if (message.adsUrlPatterns != null && message.hasOwnProperty("adsUrlPatterns")) { - if (!$util.isString(message.adsUrlPatterns)) - return "adsUrlPatterns: string expected"; - } - if (message.reverseGeocoderUrl != null && message.hasOwnProperty("reverseGeocoderUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.reverseGeocoderUrl); - if (error) - return "reverseGeocoderUrl." + error; - } - if (message.reverseGeocoderProtocolVersion != null && message.hasOwnProperty("reverseGeocoderProtocolVersion")) { - if (!$util.isInteger(message.reverseGeocoderProtocolVersion)) - return "reverseGeocoderProtocolVersion: integer expected"; - } - if (message.skyDatabaseIsAvailable != null && message.hasOwnProperty("skyDatabaseIsAvailable")) { - if (typeof message.skyDatabaseIsAvailable !== "boolean") - return "skyDatabaseIsAvailable: boolean expected"; - } - if (message.skyDatabaseUrl != null && message.hasOwnProperty("skyDatabaseUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.skyDatabaseUrl); - if (error) - return "skyDatabaseUrl." + error; - } - if (message.defaultWebPageIntlUrl != null && message.hasOwnProperty("defaultWebPageIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.defaultWebPageIntlUrl); - if (error) - return "defaultWebPageIntlUrl." + error; - } - if (message.numStartUpTips != null && message.hasOwnProperty("numStartUpTips")) { - if (!$util.isInteger(message.numStartUpTips)) - return "numStartUpTips: integer expected"; - } - if (message.startUpTipsUrl != null && message.hasOwnProperty("startUpTipsUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.startUpTipsUrl); - if (error) - return "startUpTipsUrl." + error; - } - if (message.numProStartUpTips != null && message.hasOwnProperty("numProStartUpTips")) { - if (!$util.isInteger(message.numProStartUpTips)) - return "numProStartUpTips: integer expected"; - } - if (message.proStartUpTipsUrl != null && message.hasOwnProperty("proStartUpTipsUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proStartUpTipsUrl); - if (error) - return "proStartUpTipsUrl." + error; - } - if (message.startupTipsIntlUrl != null && message.hasOwnProperty("startupTipsIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.startupTipsIntlUrl); - if (error) - return "startupTipsIntlUrl." + error; - } - if (message.userGuideIntlUrl != null && message.hasOwnProperty("userGuideIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.userGuideIntlUrl); - if (error) - return "userGuideIntlUrl." + error; - } - if (message.supportCenterIntlUrl != null && message.hasOwnProperty("supportCenterIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.supportCenterIntlUrl); - if (error) - return "supportCenterIntlUrl." + error; - } - if (message.businessListingIntlUrl != null && message.hasOwnProperty("businessListingIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.businessListingIntlUrl); - if (error) - return "businessListingIntlUrl." + error; - } - if (message.supportAnswerIntlUrl != null && message.hasOwnProperty("supportAnswerIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.supportAnswerIntlUrl); - if (error) - return "supportAnswerIntlUrl." + error; - } - if (message.supportTopicIntlUrl != null && message.hasOwnProperty("supportTopicIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.supportTopicIntlUrl); - if (error) - return "supportTopicIntlUrl." + error; - } - if (message.supportRequestIntlUrl != null && message.hasOwnProperty("supportRequestIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.supportRequestIntlUrl); - if (error) - return "supportRequestIntlUrl." + error; - } - if (message.earthIntlUrl != null && message.hasOwnProperty("earthIntlUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.earthIntlUrl); - if (error) - return "earthIntlUrl." + error; - } - if (message.addContentUrl != null && message.hasOwnProperty("addContentUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.addContentUrl); - if (error) - return "addContentUrl." + error; - } - if (message.sketchupNotInstalledUrl != null && message.hasOwnProperty("sketchupNotInstalledUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.sketchupNotInstalledUrl); - if (error) - return "sketchupNotInstalledUrl." + error; - } - if (message.sketchupErrorUrl != null && message.hasOwnProperty("sketchupErrorUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.sketchupErrorUrl); - if (error) - return "sketchupErrorUrl." + error; - } - if (message.freeLicenseUrl != null && message.hasOwnProperty("freeLicenseUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.freeLicenseUrl); - if (error) - return "freeLicenseUrl." + error; - } - if (message.proLicenseUrl != null && message.hasOwnProperty("proLicenseUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proLicenseUrl); - if (error) - return "proLicenseUrl." + error; - } - if (message.tutorialUrl != null && message.hasOwnProperty("tutorialUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.tutorialUrl); - if (error) - return "tutorialUrl." + error; - } - if (message.keyboardShortcutsUrl != null && message.hasOwnProperty("keyboardShortcutsUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.keyboardShortcutsUrl); - if (error) - return "keyboardShortcutsUrl." + error; - } - if (message.releaseNotesUrl != null && message.hasOwnProperty("releaseNotesUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.releaseNotesUrl); - if (error) - return "releaseNotesUrl." + error; - } - if (message.hideUserData != null && message.hasOwnProperty("hideUserData")) { - if (typeof message.hideUserData !== "boolean") - return "hideUserData: boolean expected"; - } - if (message.useGeLogo != null && message.hasOwnProperty("useGeLogo")) { - if (typeof message.useGeLogo !== "boolean") - return "useGeLogo: boolean expected"; - } - if (message.dioramaDescriptionUrlBase != null && message.hasOwnProperty("dioramaDescriptionUrlBase")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.dioramaDescriptionUrlBase); - if (error) - return "dioramaDescriptionUrlBase." + error; - } - if (message.dioramaDefaultColor != null && message.hasOwnProperty("dioramaDefaultColor")) { - if (!$util.isInteger(message.dioramaDefaultColor)) - return "dioramaDefaultColor: integer expected"; - } - if (message.dioramaBlacklistUrl != null && message.hasOwnProperty("dioramaBlacklistUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.dioramaBlacklistUrl); - if (error) - return "dioramaBlacklistUrl." + error; - } - if (message.clientOptions != null && message.hasOwnProperty("clientOptions")) { - var error = $root.keyhole.dbroot.ClientOptionsProto.verify(message.clientOptions); - if (error) - return "clientOptions." + error; - } - if (message.fetchingOptions != null && message.hasOwnProperty("fetchingOptions")) { - var error = $root.keyhole.dbroot.FetchingOptionsProto.verify(message.fetchingOptions); - if (error) - return "fetchingOptions." + error; - } - if (message.timeMachineOptions != null && message.hasOwnProperty("timeMachineOptions")) { - var error = $root.keyhole.dbroot.TimeMachineOptionsProto.verify(message.timeMachineOptions); - if (error) - return "timeMachineOptions." + error; - } - if (message.csiOptions != null && message.hasOwnProperty("csiOptions")) { - var error = $root.keyhole.dbroot.CSIOptionsProto.verify(message.csiOptions); - if (error) - return "csiOptions." + error; - } - if (message.searchTab != null && message.hasOwnProperty("searchTab")) { - if (!Array.isArray(message.searchTab)) - return "searchTab: array expected"; - for (var i = 0; i < message.searchTab.length; ++i) { - var error = $root.keyhole.dbroot.SearchTabProto.verify(message.searchTab[i]); - if (error) - return "searchTab." + error; - } - } - if (message.cobrandInfo != null && message.hasOwnProperty("cobrandInfo")) { - if (!Array.isArray(message.cobrandInfo)) - return "cobrandInfo: array expected"; - for (var i = 0; i < message.cobrandInfo.length; ++i) { - var error = $root.keyhole.dbroot.CobrandProto.verify(message.cobrandInfo[i]); - if (error) - return "cobrandInfo." + error; - } - } - if (message.validDatabase != null && message.hasOwnProperty("validDatabase")) { - if (!Array.isArray(message.validDatabase)) - return "validDatabase: array expected"; - for (var i = 0; i < message.validDatabase.length; ++i) { - var error = $root.keyhole.dbroot.DatabaseDescriptionProto.verify(message.validDatabase[i]); - if (error) - return "validDatabase." + error; - } - } - if (message.configScript != null && message.hasOwnProperty("configScript")) { - if (!Array.isArray(message.configScript)) - return "configScript: array expected"; - for (var i = 0; i < message.configScript.length; ++i) { - var error = $root.keyhole.dbroot.ConfigScriptProto.verify(message.configScript[i]); - if (error) - return "configScript." + error; - } - } - if (message.deauthServerUrl != null && message.hasOwnProperty("deauthServerUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.deauthServerUrl); - if (error) - return "deauthServerUrl." + error; - } - if (message.swoopParameters != null && message.hasOwnProperty("swoopParameters")) { - var error = $root.keyhole.dbroot.SwoopParamsProto.verify(message.swoopParameters); - if (error) - return "swoopParameters." + error; - } - if (message.bbsServerInfo != null && message.hasOwnProperty("bbsServerInfo")) { - var error = $root.keyhole.dbroot.PostingServerProto.verify(message.bbsServerInfo); - if (error) - return "bbsServerInfo." + error; - } - if (message.dataErrorServerInfo != null && message.hasOwnProperty("dataErrorServerInfo")) { - var error = $root.keyhole.dbroot.PostingServerProto.verify(message.dataErrorServerInfo); - if (error) - return "dataErrorServerInfo." + error; - } - if (message.planetaryDatabase != null && message.hasOwnProperty("planetaryDatabase")) { - if (!Array.isArray(message.planetaryDatabase)) - return "planetaryDatabase: array expected"; - for (var i = 0; i < message.planetaryDatabase.length; ++i) { - var error = $root.keyhole.dbroot.PlanetaryDatabaseProto.verify(message.planetaryDatabase[i]); - if (error) - return "planetaryDatabase." + error; - } - } - if (message.logServer != null && message.hasOwnProperty("logServer")) { - var error = $root.keyhole.dbroot.LogServerProto.verify(message.logServer); - if (error) - return "logServer." + error; - } - if (message.autopiaOptions != null && message.hasOwnProperty("autopiaOptions")) { - var error = $root.keyhole.dbroot.AutopiaOptionsProto.verify(message.autopiaOptions); - if (error) - return "autopiaOptions." + error; - } - if (message.searchConfig != null && message.hasOwnProperty("searchConfig")) { - var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.verify(message.searchConfig); - if (error) - return "searchConfig." + error; - } - if (message.searchInfo != null && message.hasOwnProperty("searchInfo")) { - var error = $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto.verify(message.searchInfo); - if (error) - return "searchInfo." + error; - } - if (message.elevationServiceBaseUrl != null && message.hasOwnProperty("elevationServiceBaseUrl")) { - if (!$util.isString(message.elevationServiceBaseUrl)) - return "elevationServiceBaseUrl: string expected"; - } - if (message.elevationProfileQueryDelay != null && message.hasOwnProperty("elevationProfileQueryDelay")) { - if (!$util.isInteger(message.elevationProfileQueryDelay)) - return "elevationProfileQueryDelay: integer expected"; - } - if (message.proUpgradeUrl != null && message.hasOwnProperty("proUpgradeUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proUpgradeUrl); - if (error) - return "proUpgradeUrl." + error; - } - if (message.earthCommunityUrl != null && message.hasOwnProperty("earthCommunityUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.earthCommunityUrl); - if (error) - return "earthCommunityUrl." + error; - } - if (message.googleMapsUrl != null && message.hasOwnProperty("googleMapsUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.googleMapsUrl); - if (error) - return "googleMapsUrl." + error; - } - if (message.sharingUrl != null && message.hasOwnProperty("sharingUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.sharingUrl); - if (error) - return "sharingUrl." + error; - } - if (message.privacyPolicyUrl != null && message.hasOwnProperty("privacyPolicyUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.privacyPolicyUrl); - if (error) - return "privacyPolicyUrl." + error; - } - if (message.doGplusUserCheck != null && message.hasOwnProperty("doGplusUserCheck")) { - if (typeof message.doGplusUserCheck !== "boolean") - return "doGplusUserCheck: boolean expected"; - } - if (message.rocktreeDataProto != null && message.hasOwnProperty("rocktreeDataProto")) { - var error = $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto.verify(message.rocktreeDataProto); - if (error) - return "rocktreeDataProto." + error; - } - if (message.filmstripConfig != null && message.hasOwnProperty("filmstripConfig")) { - if (!Array.isArray(message.filmstripConfig)) - return "filmstripConfig: array expected"; - for (var i = 0; i < message.filmstripConfig.length; ++i) { - var error = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.verify(message.filmstripConfig[i]); - if (error) - return "filmstripConfig." + error; - } - } - if (message.showSigninButton != null && message.hasOwnProperty("showSigninButton")) { - if (typeof message.showSigninButton !== "boolean") - return "showSigninButton: boolean expected"; - } - if (message.proMeasureUpsellUrl != null && message.hasOwnProperty("proMeasureUpsellUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proMeasureUpsellUrl); - if (error) - return "proMeasureUpsellUrl." + error; - } - if (message.proPrintUpsellUrl != null && message.hasOwnProperty("proPrintUpsellUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proPrintUpsellUrl); - if (error) - return "proPrintUpsellUrl." + error; - } - if (message.starDataProto != null && message.hasOwnProperty("starDataProto")) { - var error = $root.keyhole.dbroot.EndSnippetProto.StarDataProto.verify(message.starDataProto); - if (error) - return "starDataProto." + error; - } - if (message.feedbackUrl != null && message.hasOwnProperty("feedbackUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.feedbackUrl); - if (error) - return "feedbackUrl." + error; - } - if (message.oauth2LoginUrl != null && message.hasOwnProperty("oauth2LoginUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.oauth2LoginUrl); - if (error) - return "oauth2LoginUrl." + error; - } - return null; - }; - EndSnippetProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto(); - if (object.model != null) { - if (typeof object.model !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.model: object expected"); - message.model = $root.keyhole.dbroot.PlanetModelProto.fromObject(object.model); - } - if (object.authServerUrl != null) { - if (typeof object.authServerUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.authServerUrl: object expected"); - message.authServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.authServerUrl); - } - if (object.disableAuthentication != null) - message.disableAuthentication = Boolean(object.disableAuthentication); - if (object.mfeDomains) { - if (!Array.isArray(object.mfeDomains)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.mfeDomains: array expected"); - message.mfeDomains = []; - for (var i = 0; i < object.mfeDomains.length; ++i) { - if (typeof object.mfeDomains[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.mfeDomains: object expected"); - message.mfeDomains[i] = $root.keyhole.dbroot.MfeDomainFeaturesProto.fromObject(object.mfeDomains[i]); - } - } - if (object.mfeLangParam != null) - message.mfeLangParam = String(object.mfeLangParam); - if (object.adsUrlPatterns != null) - message.adsUrlPatterns = String(object.adsUrlPatterns); - if (object.reverseGeocoderUrl != null) { - if (typeof object.reverseGeocoderUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.reverseGeocoderUrl: object expected"); - message.reverseGeocoderUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.reverseGeocoderUrl); - } - if (object.reverseGeocoderProtocolVersion != null) - message.reverseGeocoderProtocolVersion = object.reverseGeocoderProtocolVersion | 0; - if (object.skyDatabaseIsAvailable != null) - message.skyDatabaseIsAvailable = Boolean(object.skyDatabaseIsAvailable); - if (object.skyDatabaseUrl != null) { - if (typeof object.skyDatabaseUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.skyDatabaseUrl: object expected"); - message.skyDatabaseUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.skyDatabaseUrl); - } - if (object.defaultWebPageIntlUrl != null) { - if (typeof object.defaultWebPageIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.defaultWebPageIntlUrl: object expected"); - message.defaultWebPageIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.defaultWebPageIntlUrl); - } - if (object.numStartUpTips != null) - message.numStartUpTips = object.numStartUpTips | 0; - if (object.startUpTipsUrl != null) { - if (typeof object.startUpTipsUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.startUpTipsUrl: object expected"); - message.startUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.startUpTipsUrl); - } - if (object.numProStartUpTips != null) - message.numProStartUpTips = object.numProStartUpTips | 0; - if (object.proStartUpTipsUrl != null) { - if (typeof object.proStartUpTipsUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.proStartUpTipsUrl: object expected"); - message.proStartUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proStartUpTipsUrl); - } - if (object.startupTipsIntlUrl != null) { - if (typeof object.startupTipsIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.startupTipsIntlUrl: object expected"); - message.startupTipsIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.startupTipsIntlUrl); - } - if (object.userGuideIntlUrl != null) { - if (typeof object.userGuideIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.userGuideIntlUrl: object expected"); - message.userGuideIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.userGuideIntlUrl); - } - if (object.supportCenterIntlUrl != null) { - if (typeof object.supportCenterIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.supportCenterIntlUrl: object expected"); - message.supportCenterIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.supportCenterIntlUrl); - } - if (object.businessListingIntlUrl != null) { - if (typeof object.businessListingIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.businessListingIntlUrl: object expected"); - message.businessListingIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.businessListingIntlUrl); - } - if (object.supportAnswerIntlUrl != null) { - if (typeof object.supportAnswerIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.supportAnswerIntlUrl: object expected"); - message.supportAnswerIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.supportAnswerIntlUrl); - } - if (object.supportTopicIntlUrl != null) { - if (typeof object.supportTopicIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.supportTopicIntlUrl: object expected"); - message.supportTopicIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.supportTopicIntlUrl); - } - if (object.supportRequestIntlUrl != null) { - if (typeof object.supportRequestIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.supportRequestIntlUrl: object expected"); - message.supportRequestIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.supportRequestIntlUrl); - } - if (object.earthIntlUrl != null) { - if (typeof object.earthIntlUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.earthIntlUrl: object expected"); - message.earthIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.earthIntlUrl); - } - if (object.addContentUrl != null) { - if (typeof object.addContentUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.addContentUrl: object expected"); - message.addContentUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.addContentUrl); - } - if (object.sketchupNotInstalledUrl != null) { - if (typeof object.sketchupNotInstalledUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.sketchupNotInstalledUrl: object expected"); - message.sketchupNotInstalledUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.sketchupNotInstalledUrl); - } - if (object.sketchupErrorUrl != null) { - if (typeof object.sketchupErrorUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.sketchupErrorUrl: object expected"); - message.sketchupErrorUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.sketchupErrorUrl); - } - if (object.freeLicenseUrl != null) { - if (typeof object.freeLicenseUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.freeLicenseUrl: object expected"); - message.freeLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.freeLicenseUrl); - } - if (object.proLicenseUrl != null) { - if (typeof object.proLicenseUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.proLicenseUrl: object expected"); - message.proLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proLicenseUrl); - } - if (object.tutorialUrl != null) { - if (typeof object.tutorialUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.tutorialUrl: object expected"); - message.tutorialUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.tutorialUrl); - } - if (object.keyboardShortcutsUrl != null) { - if (typeof object.keyboardShortcutsUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.keyboardShortcutsUrl: object expected"); - message.keyboardShortcutsUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.keyboardShortcutsUrl); - } - if (object.releaseNotesUrl != null) { - if (typeof object.releaseNotesUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.releaseNotesUrl: object expected"); - message.releaseNotesUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.releaseNotesUrl); - } - if (object.hideUserData != null) - message.hideUserData = Boolean(object.hideUserData); - if (object.useGeLogo != null) - message.useGeLogo = Boolean(object.useGeLogo); - if (object.dioramaDescriptionUrlBase != null) { - if (typeof object.dioramaDescriptionUrlBase !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.dioramaDescriptionUrlBase: object expected"); - message.dioramaDescriptionUrlBase = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.dioramaDescriptionUrlBase); - } - if (object.dioramaDefaultColor != null) - message.dioramaDefaultColor = object.dioramaDefaultColor >>> 0; - if (object.dioramaBlacklistUrl != null) { - if (typeof object.dioramaBlacklistUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.dioramaBlacklistUrl: object expected"); - message.dioramaBlacklistUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.dioramaBlacklistUrl); - } - if (object.clientOptions != null) { - if (typeof object.clientOptions !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.clientOptions: object expected"); - message.clientOptions = $root.keyhole.dbroot.ClientOptionsProto.fromObject(object.clientOptions); - } - if (object.fetchingOptions != null) { - if (typeof object.fetchingOptions !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.fetchingOptions: object expected"); - message.fetchingOptions = $root.keyhole.dbroot.FetchingOptionsProto.fromObject(object.fetchingOptions); - } - if (object.timeMachineOptions != null) { - if (typeof object.timeMachineOptions !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.timeMachineOptions: object expected"); - message.timeMachineOptions = $root.keyhole.dbroot.TimeMachineOptionsProto.fromObject(object.timeMachineOptions); - } - if (object.csiOptions != null) { - if (typeof object.csiOptions !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.csiOptions: object expected"); - message.csiOptions = $root.keyhole.dbroot.CSIOptionsProto.fromObject(object.csiOptions); - } - if (object.searchTab) { - if (!Array.isArray(object.searchTab)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.searchTab: array expected"); - message.searchTab = []; - for (var i = 0; i < object.searchTab.length; ++i) { - if (typeof object.searchTab[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.searchTab: object expected"); - message.searchTab[i] = $root.keyhole.dbroot.SearchTabProto.fromObject(object.searchTab[i]); - } - } - if (object.cobrandInfo) { - if (!Array.isArray(object.cobrandInfo)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.cobrandInfo: array expected"); - message.cobrandInfo = []; - for (var i = 0; i < object.cobrandInfo.length; ++i) { - if (typeof object.cobrandInfo[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.cobrandInfo: object expected"); - message.cobrandInfo[i] = $root.keyhole.dbroot.CobrandProto.fromObject(object.cobrandInfo[i]); - } - } - if (object.validDatabase) { - if (!Array.isArray(object.validDatabase)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.validDatabase: array expected"); - message.validDatabase = []; - for (var i = 0; i < object.validDatabase.length; ++i) { - if (typeof object.validDatabase[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.validDatabase: object expected"); - message.validDatabase[i] = $root.keyhole.dbroot.DatabaseDescriptionProto.fromObject(object.validDatabase[i]); - } - } - if (object.configScript) { - if (!Array.isArray(object.configScript)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.configScript: array expected"); - message.configScript = []; - for (var i = 0; i < object.configScript.length; ++i) { - if (typeof object.configScript[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.configScript: object expected"); - message.configScript[i] = $root.keyhole.dbroot.ConfigScriptProto.fromObject(object.configScript[i]); - } - } - if (object.deauthServerUrl != null) { - if (typeof object.deauthServerUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.deauthServerUrl: object expected"); - message.deauthServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.deauthServerUrl); - } - if (object.swoopParameters != null) { - if (typeof object.swoopParameters !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.swoopParameters: object expected"); - message.swoopParameters = $root.keyhole.dbroot.SwoopParamsProto.fromObject(object.swoopParameters); - } - if (object.bbsServerInfo != null) { - if (typeof object.bbsServerInfo !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.bbsServerInfo: object expected"); - message.bbsServerInfo = $root.keyhole.dbroot.PostingServerProto.fromObject(object.bbsServerInfo); - } - if (object.dataErrorServerInfo != null) { - if (typeof object.dataErrorServerInfo !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.dataErrorServerInfo: object expected"); - message.dataErrorServerInfo = $root.keyhole.dbroot.PostingServerProto.fromObject(object.dataErrorServerInfo); - } - if (object.planetaryDatabase) { - if (!Array.isArray(object.planetaryDatabase)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.planetaryDatabase: array expected"); - message.planetaryDatabase = []; - for (var i = 0; i < object.planetaryDatabase.length; ++i) { - if (typeof object.planetaryDatabase[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.planetaryDatabase: object expected"); - message.planetaryDatabase[i] = $root.keyhole.dbroot.PlanetaryDatabaseProto.fromObject(object.planetaryDatabase[i]); - } - } - if (object.logServer != null) { - if (typeof object.logServer !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.logServer: object expected"); - message.logServer = $root.keyhole.dbroot.LogServerProto.fromObject(object.logServer); - } - if (object.autopiaOptions != null) { - if (typeof object.autopiaOptions !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.autopiaOptions: object expected"); - message.autopiaOptions = $root.keyhole.dbroot.AutopiaOptionsProto.fromObject(object.autopiaOptions); - } - if (object.searchConfig != null) { - if (typeof object.searchConfig !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.searchConfig: object expected"); - message.searchConfig = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.fromObject(object.searchConfig); - } - if (object.searchInfo != null) { - if (typeof object.searchInfo !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.searchInfo: object expected"); - message.searchInfo = $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto.fromObject(object.searchInfo); - } - if (object.elevationServiceBaseUrl != null) - message.elevationServiceBaseUrl = String(object.elevationServiceBaseUrl); - if (object.elevationProfileQueryDelay != null) - message.elevationProfileQueryDelay = object.elevationProfileQueryDelay | 0; - if (object.proUpgradeUrl != null) { - if (typeof object.proUpgradeUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.proUpgradeUrl: object expected"); - message.proUpgradeUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proUpgradeUrl); - } - if (object.earthCommunityUrl != null) { - if (typeof object.earthCommunityUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.earthCommunityUrl: object expected"); - message.earthCommunityUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.earthCommunityUrl); - } - if (object.googleMapsUrl != null) { - if (typeof object.googleMapsUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.googleMapsUrl: object expected"); - message.googleMapsUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.googleMapsUrl); - } - if (object.sharingUrl != null) { - if (typeof object.sharingUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.sharingUrl: object expected"); - message.sharingUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.sharingUrl); - } - if (object.privacyPolicyUrl != null) { - if (typeof object.privacyPolicyUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.privacyPolicyUrl: object expected"); - message.privacyPolicyUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.privacyPolicyUrl); - } - if (object.doGplusUserCheck != null) - message.doGplusUserCheck = Boolean(object.doGplusUserCheck); - if (object.rocktreeDataProto != null) { - if (typeof object.rocktreeDataProto !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.rocktreeDataProto: object expected"); - message.rocktreeDataProto = $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto.fromObject(object.rocktreeDataProto); - } - if (object.filmstripConfig) { - if (!Array.isArray(object.filmstripConfig)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.filmstripConfig: array expected"); - message.filmstripConfig = []; - for (var i = 0; i < object.filmstripConfig.length; ++i) { - if (typeof object.filmstripConfig[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.filmstripConfig: object expected"); - message.filmstripConfig[i] = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.fromObject(object.filmstripConfig[i]); - } - } - if (object.showSigninButton != null) - message.showSigninButton = Boolean(object.showSigninButton); - if (object.proMeasureUpsellUrl != null) { - if (typeof object.proMeasureUpsellUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.proMeasureUpsellUrl: object expected"); - message.proMeasureUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proMeasureUpsellUrl); - } - if (object.proPrintUpsellUrl != null) { - if (typeof object.proPrintUpsellUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.proPrintUpsellUrl: object expected"); - message.proPrintUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proPrintUpsellUrl); - } - if (object.starDataProto != null) { - if (typeof object.starDataProto !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.starDataProto: object expected"); - message.starDataProto = $root.keyhole.dbroot.EndSnippetProto.StarDataProto.fromObject(object.starDataProto); - } - if (object.feedbackUrl != null) { - if (typeof object.feedbackUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.feedbackUrl: object expected"); - message.feedbackUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.feedbackUrl); - } - if (object.oauth2LoginUrl != null) { - if (typeof object.oauth2LoginUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.oauth2LoginUrl: object expected"); - message.oauth2LoginUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.oauth2LoginUrl); - } - return message; - }; - EndSnippetProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.mfeDomains = []; - object.searchTab = []; - object.cobrandInfo = []; - object.validDatabase = []; - object.configScript = []; - object.planetaryDatabase = []; - object.filmstripConfig = []; - } - if (options.defaults) { - object.model = null; - object.authServerUrl = null; - object.disableAuthentication = false; - object.mfeLangParam = "hl=$5Bhl5D"; - object.adsUrlPatterns = ""; - object.reverseGeocoderUrl = null; - object.reverseGeocoderProtocolVersion = 3; - object.skyDatabaseIsAvailable = true; - object.skyDatabaseUrl = null; - object.defaultWebPageIntlUrl = null; - object.numStartUpTips = 17; - object.startUpTipsUrl = null; - object.userGuideIntlUrl = null; - object.supportCenterIntlUrl = null; - object.businessListingIntlUrl = null; - object.supportAnswerIntlUrl = null; - object.supportTopicIntlUrl = null; - object.supportRequestIntlUrl = null; - object.earthIntlUrl = null; - object.addContentUrl = null; - object.sketchupNotInstalledUrl = null; - object.sketchupErrorUrl = null; - object.freeLicenseUrl = null; - object.proLicenseUrl = null; - object.hideUserData = false; - object.useGeLogo = true; - object.dioramaDescriptionUrlBase = null; - object.dioramaDefaultColor = 4291281607; - object.clientOptions = null; - object.fetchingOptions = null; - object.timeMachineOptions = null; - object.csiOptions = null; - object.deauthServerUrl = null; - object.swoopParameters = null; - object.bbsServerInfo = null; - object.dataErrorServerInfo = null; - object.logServer = null; - object.autopiaOptions = null; - object.searchInfo = null; - object.elevationServiceBaseUrl = "http://maps.google.com/maps/api/elevation/"; - object.elevationProfileQueryDelay = 500; - object.tutorialUrl = null; - object.keyboardShortcutsUrl = null; - object.releaseNotesUrl = null; - object.numProStartUpTips = 0; - object.proStartUpTipsUrl = null; - object.dioramaBlacklistUrl = null; - object.searchConfig = null; - object.proUpgradeUrl = null; - object.earthCommunityUrl = null; - object.googleMapsUrl = null; - object.sharingUrl = null; - object.privacyPolicyUrl = null; - object.doGplusUserCheck = false; - object.rocktreeDataProto = null; - object.showSigninButton = false; - object.startupTipsIntlUrl = null; - object.proMeasureUpsellUrl = null; - object.proPrintUpsellUrl = null; - object.starDataProto = null; - object.feedbackUrl = null; - object.oauth2LoginUrl = null; - } - if (message.model != null && message.hasOwnProperty("model")) - object.model = $root.keyhole.dbroot.PlanetModelProto.toObject(message.model, options); - if (message.authServerUrl != null && message.hasOwnProperty("authServerUrl")) - object.authServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.authServerUrl, options); - if (message.disableAuthentication != null && message.hasOwnProperty("disableAuthentication")) - object.disableAuthentication = message.disableAuthentication; - if (message.mfeDomains && message.mfeDomains.length) { - object.mfeDomains = []; - for (var j = 0; j < message.mfeDomains.length; ++j) - object.mfeDomains[j] = $root.keyhole.dbroot.MfeDomainFeaturesProto.toObject(message.mfeDomains[j], options); - } - if (message.mfeLangParam != null && message.hasOwnProperty("mfeLangParam")) - object.mfeLangParam = message.mfeLangParam; - if (message.adsUrlPatterns != null && message.hasOwnProperty("adsUrlPatterns")) - object.adsUrlPatterns = message.adsUrlPatterns; - if (message.reverseGeocoderUrl != null && message.hasOwnProperty("reverseGeocoderUrl")) - object.reverseGeocoderUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.reverseGeocoderUrl, options); - if (message.reverseGeocoderProtocolVersion != null && message.hasOwnProperty("reverseGeocoderProtocolVersion")) - object.reverseGeocoderProtocolVersion = message.reverseGeocoderProtocolVersion; - if (message.skyDatabaseIsAvailable != null && message.hasOwnProperty("skyDatabaseIsAvailable")) - object.skyDatabaseIsAvailable = message.skyDatabaseIsAvailable; - if (message.skyDatabaseUrl != null && message.hasOwnProperty("skyDatabaseUrl")) - object.skyDatabaseUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.skyDatabaseUrl, options); - if (message.defaultWebPageIntlUrl != null && message.hasOwnProperty("defaultWebPageIntlUrl")) - object.defaultWebPageIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.defaultWebPageIntlUrl, options); - if (message.numStartUpTips != null && message.hasOwnProperty("numStartUpTips")) - object.numStartUpTips = message.numStartUpTips; - if (message.startUpTipsUrl != null && message.hasOwnProperty("startUpTipsUrl")) - object.startUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.startUpTipsUrl, options); - if (message.userGuideIntlUrl != null && message.hasOwnProperty("userGuideIntlUrl")) - object.userGuideIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.userGuideIntlUrl, options); - if (message.supportCenterIntlUrl != null && message.hasOwnProperty("supportCenterIntlUrl")) - object.supportCenterIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.supportCenterIntlUrl, options); - if (message.businessListingIntlUrl != null && message.hasOwnProperty("businessListingIntlUrl")) - object.businessListingIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.businessListingIntlUrl, options); - if (message.supportAnswerIntlUrl != null && message.hasOwnProperty("supportAnswerIntlUrl")) - object.supportAnswerIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.supportAnswerIntlUrl, options); - if (message.supportTopicIntlUrl != null && message.hasOwnProperty("supportTopicIntlUrl")) - object.supportTopicIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.supportTopicIntlUrl, options); - if (message.supportRequestIntlUrl != null && message.hasOwnProperty("supportRequestIntlUrl")) - object.supportRequestIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.supportRequestIntlUrl, options); - if (message.earthIntlUrl != null && message.hasOwnProperty("earthIntlUrl")) - object.earthIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.earthIntlUrl, options); - if (message.addContentUrl != null && message.hasOwnProperty("addContentUrl")) - object.addContentUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.addContentUrl, options); - if (message.sketchupNotInstalledUrl != null && message.hasOwnProperty("sketchupNotInstalledUrl")) - object.sketchupNotInstalledUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.sketchupNotInstalledUrl, options); - if (message.sketchupErrorUrl != null && message.hasOwnProperty("sketchupErrorUrl")) - object.sketchupErrorUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.sketchupErrorUrl, options); - if (message.freeLicenseUrl != null && message.hasOwnProperty("freeLicenseUrl")) - object.freeLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.freeLicenseUrl, options); - if (message.proLicenseUrl != null && message.hasOwnProperty("proLicenseUrl")) - object.proLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proLicenseUrl, options); - if (message.hideUserData != null && message.hasOwnProperty("hideUserData")) - object.hideUserData = message.hideUserData; - if (message.useGeLogo != null && message.hasOwnProperty("useGeLogo")) - object.useGeLogo = message.useGeLogo; - if (message.dioramaDescriptionUrlBase != null && message.hasOwnProperty("dioramaDescriptionUrlBase")) - object.dioramaDescriptionUrlBase = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.dioramaDescriptionUrlBase, options); - if (message.dioramaDefaultColor != null && message.hasOwnProperty("dioramaDefaultColor")) - object.dioramaDefaultColor = message.dioramaDefaultColor; - if (message.clientOptions != null && message.hasOwnProperty("clientOptions")) - object.clientOptions = $root.keyhole.dbroot.ClientOptionsProto.toObject(message.clientOptions, options); - if (message.fetchingOptions != null && message.hasOwnProperty("fetchingOptions")) - object.fetchingOptions = $root.keyhole.dbroot.FetchingOptionsProto.toObject(message.fetchingOptions, options); - if (message.timeMachineOptions != null && message.hasOwnProperty("timeMachineOptions")) - object.timeMachineOptions = $root.keyhole.dbroot.TimeMachineOptionsProto.toObject(message.timeMachineOptions, options); - if (message.csiOptions != null && message.hasOwnProperty("csiOptions")) - object.csiOptions = $root.keyhole.dbroot.CSIOptionsProto.toObject(message.csiOptions, options); - if (message.searchTab && message.searchTab.length) { - object.searchTab = []; - for (var j = 0; j < message.searchTab.length; ++j) - object.searchTab[j] = $root.keyhole.dbroot.SearchTabProto.toObject(message.searchTab[j], options); - } - if (message.cobrandInfo && message.cobrandInfo.length) { - object.cobrandInfo = []; - for (var j = 0; j < message.cobrandInfo.length; ++j) - object.cobrandInfo[j] = $root.keyhole.dbroot.CobrandProto.toObject(message.cobrandInfo[j], options); - } - if (message.validDatabase && message.validDatabase.length) { - object.validDatabase = []; - for (var j = 0; j < message.validDatabase.length; ++j) - object.validDatabase[j] = $root.keyhole.dbroot.DatabaseDescriptionProto.toObject(message.validDatabase[j], options); - } - if (message.configScript && message.configScript.length) { - object.configScript = []; - for (var j = 0; j < message.configScript.length; ++j) - object.configScript[j] = $root.keyhole.dbroot.ConfigScriptProto.toObject(message.configScript[j], options); - } - if (message.deauthServerUrl != null && message.hasOwnProperty("deauthServerUrl")) - object.deauthServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.deauthServerUrl, options); - if (message.swoopParameters != null && message.hasOwnProperty("swoopParameters")) - object.swoopParameters = $root.keyhole.dbroot.SwoopParamsProto.toObject(message.swoopParameters, options); - if (message.bbsServerInfo != null && message.hasOwnProperty("bbsServerInfo")) - object.bbsServerInfo = $root.keyhole.dbroot.PostingServerProto.toObject(message.bbsServerInfo, options); - if (message.dataErrorServerInfo != null && message.hasOwnProperty("dataErrorServerInfo")) - object.dataErrorServerInfo = $root.keyhole.dbroot.PostingServerProto.toObject(message.dataErrorServerInfo, options); - if (message.planetaryDatabase && message.planetaryDatabase.length) { - object.planetaryDatabase = []; - for (var j = 0; j < message.planetaryDatabase.length; ++j) - object.planetaryDatabase[j] = $root.keyhole.dbroot.PlanetaryDatabaseProto.toObject(message.planetaryDatabase[j], options); - } - if (message.logServer != null && message.hasOwnProperty("logServer")) - object.logServer = $root.keyhole.dbroot.LogServerProto.toObject(message.logServer, options); - if (message.autopiaOptions != null && message.hasOwnProperty("autopiaOptions")) - object.autopiaOptions = $root.keyhole.dbroot.AutopiaOptionsProto.toObject(message.autopiaOptions, options); - if (message.searchInfo != null && message.hasOwnProperty("searchInfo")) - object.searchInfo = $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto.toObject(message.searchInfo, options); - if (message.elevationServiceBaseUrl != null && message.hasOwnProperty("elevationServiceBaseUrl")) - object.elevationServiceBaseUrl = message.elevationServiceBaseUrl; - if (message.elevationProfileQueryDelay != null && message.hasOwnProperty("elevationProfileQueryDelay")) - object.elevationProfileQueryDelay = message.elevationProfileQueryDelay; - if (message.tutorialUrl != null && message.hasOwnProperty("tutorialUrl")) - object.tutorialUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.tutorialUrl, options); - if (message.keyboardShortcutsUrl != null && message.hasOwnProperty("keyboardShortcutsUrl")) - object.keyboardShortcutsUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.keyboardShortcutsUrl, options); - if (message.releaseNotesUrl != null && message.hasOwnProperty("releaseNotesUrl")) - object.releaseNotesUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.releaseNotesUrl, options); - if (message.numProStartUpTips != null && message.hasOwnProperty("numProStartUpTips")) - object.numProStartUpTips = message.numProStartUpTips; - if (message.proStartUpTipsUrl != null && message.hasOwnProperty("proStartUpTipsUrl")) - object.proStartUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proStartUpTipsUrl, options); - if (message.dioramaBlacklistUrl != null && message.hasOwnProperty("dioramaBlacklistUrl")) - object.dioramaBlacklistUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.dioramaBlacklistUrl, options); - if (message.searchConfig != null && message.hasOwnProperty("searchConfig")) - object.searchConfig = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.toObject(message.searchConfig, options); - if (message.proUpgradeUrl != null && message.hasOwnProperty("proUpgradeUrl")) - object.proUpgradeUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proUpgradeUrl, options); - if (message.earthCommunityUrl != null && message.hasOwnProperty("earthCommunityUrl")) - object.earthCommunityUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.earthCommunityUrl, options); - if (message.googleMapsUrl != null && message.hasOwnProperty("googleMapsUrl")) - object.googleMapsUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.googleMapsUrl, options); - if (message.sharingUrl != null && message.hasOwnProperty("sharingUrl")) - object.sharingUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.sharingUrl, options); - if (message.privacyPolicyUrl != null && message.hasOwnProperty("privacyPolicyUrl")) - object.privacyPolicyUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.privacyPolicyUrl, options); - if (message.doGplusUserCheck != null && message.hasOwnProperty("doGplusUserCheck")) - object.doGplusUserCheck = message.doGplusUserCheck; - if (message.rocktreeDataProto != null && message.hasOwnProperty("rocktreeDataProto")) - object.rocktreeDataProto = $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto.toObject(message.rocktreeDataProto, options); - if (message.filmstripConfig && message.filmstripConfig.length) { - object.filmstripConfig = []; - for (var j = 0; j < message.filmstripConfig.length; ++j) - object.filmstripConfig[j] = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.toObject(message.filmstripConfig[j], options); - } - if (message.showSigninButton != null && message.hasOwnProperty("showSigninButton")) - object.showSigninButton = message.showSigninButton; - if (message.startupTipsIntlUrl != null && message.hasOwnProperty("startupTipsIntlUrl")) - object.startupTipsIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.startupTipsIntlUrl, options); - if (message.proMeasureUpsellUrl != null && message.hasOwnProperty("proMeasureUpsellUrl")) - object.proMeasureUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proMeasureUpsellUrl, options); - if (message.proPrintUpsellUrl != null && message.hasOwnProperty("proPrintUpsellUrl")) - object.proPrintUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proPrintUpsellUrl, options); - if (message.starDataProto != null && message.hasOwnProperty("starDataProto")) - object.starDataProto = $root.keyhole.dbroot.EndSnippetProto.StarDataProto.toObject(message.starDataProto, options); - if (message.feedbackUrl != null && message.hasOwnProperty("feedbackUrl")) - object.feedbackUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.feedbackUrl, options); - if (message.oauth2LoginUrl != null && message.hasOwnProperty("oauth2LoginUrl")) - object.oauth2LoginUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.oauth2LoginUrl, options); - return object; - }; - EndSnippetProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - EndSnippetProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto"; - }; - EndSnippetProto.SearchConfigProto = function() { - function SearchConfigProto(properties) { - this.searchServer = []; - this.oneboxService = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SearchConfigProto.prototype.searchServer = $util.emptyArray; - SearchConfigProto.prototype.oneboxService = $util.emptyArray; - SearchConfigProto.prototype.kmlSearchUrl = null; - SearchConfigProto.prototype.kmlRenderUrl = null; - SearchConfigProto.prototype.searchHistoryUrl = null; - SearchConfigProto.prototype.errorPageUrl = null; - SearchConfigProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - if (!(message.searchServer && message.searchServer.length)) - message.searchServer = []; - message.searchServer.push($root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.decode(reader, reader.uint32())); - break; - } - case 2: { - if (!(message.oneboxService && message.oneboxService.length)) - message.oneboxService = []; - message.oneboxService.push($root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.decode(reader, reader.uint32())); - break; - } - case 3: { - message.kmlSearchUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 4: { - message.kmlRenderUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 6: { - message.searchHistoryUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 5: { - message.errorPageUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - SearchConfigProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.searchServer != null && message.hasOwnProperty("searchServer")) { - if (!Array.isArray(message.searchServer)) - return "searchServer: array expected"; - for (var i = 0; i < message.searchServer.length; ++i) { - var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.verify(message.searchServer[i]); - if (error) - return "searchServer." + error; - } - } - if (message.oneboxService != null && message.hasOwnProperty("oneboxService")) { - if (!Array.isArray(message.oneboxService)) - return "oneboxService: array expected"; - for (var i = 0; i < message.oneboxService.length; ++i) { - var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.verify(message.oneboxService[i]); - if (error) - return "oneboxService." + error; - } - } - if (message.kmlSearchUrl != null && message.hasOwnProperty("kmlSearchUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlSearchUrl); - if (error) - return "kmlSearchUrl." + error; - } - if (message.kmlRenderUrl != null && message.hasOwnProperty("kmlRenderUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlRenderUrl); - if (error) - return "kmlRenderUrl." + error; - } - if (message.searchHistoryUrl != null && message.hasOwnProperty("searchHistoryUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.searchHistoryUrl); - if (error) - return "searchHistoryUrl." + error; - } - if (message.errorPageUrl != null && message.hasOwnProperty("errorPageUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.errorPageUrl); - if (error) - return "errorPageUrl." + error; - } - return null; - }; - SearchConfigProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto(); - if (object.searchServer) { - if (!Array.isArray(object.searchServer)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchServer: array expected"); - message.searchServer = []; - for (var i = 0; i < object.searchServer.length; ++i) { - if (typeof object.searchServer[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchServer: object expected"); - message.searchServer[i] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.fromObject(object.searchServer[i]); - } - } - if (object.oneboxService) { - if (!Array.isArray(object.oneboxService)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.oneboxService: array expected"); - message.oneboxService = []; - for (var i = 0; i < object.oneboxService.length; ++i) { - if (typeof object.oneboxService[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.oneboxService: object expected"); - message.oneboxService[i] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.fromObject(object.oneboxService[i]); - } - } - if (object.kmlSearchUrl != null) { - if (typeof object.kmlSearchUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.kmlSearchUrl: object expected"); - message.kmlSearchUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlSearchUrl); - } - if (object.kmlRenderUrl != null) { - if (typeof object.kmlRenderUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.kmlRenderUrl: object expected"); - message.kmlRenderUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlRenderUrl); - } - if (object.searchHistoryUrl != null) { - if (typeof object.searchHistoryUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchHistoryUrl: object expected"); - message.searchHistoryUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.searchHistoryUrl); - } - if (object.errorPageUrl != null) { - if (typeof object.errorPageUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.errorPageUrl: object expected"); - message.errorPageUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.errorPageUrl); - } - return message; - }; - SearchConfigProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.searchServer = []; - object.oneboxService = []; - } - if (options.defaults) { - object.kmlSearchUrl = null; - object.kmlRenderUrl = null; - object.errorPageUrl = null; - object.searchHistoryUrl = null; - } - if (message.searchServer && message.searchServer.length) { - object.searchServer = []; - for (var j = 0; j < message.searchServer.length; ++j) - object.searchServer[j] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.toObject(message.searchServer[j], options); - } - if (message.oneboxService && message.oneboxService.length) { - object.oneboxService = []; - for (var j = 0; j < message.oneboxService.length; ++j) - object.oneboxService[j] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.toObject(message.oneboxService[j], options); - } - if (message.kmlSearchUrl != null && message.hasOwnProperty("kmlSearchUrl")) - object.kmlSearchUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlSearchUrl, options); - if (message.kmlRenderUrl != null && message.hasOwnProperty("kmlRenderUrl")) - object.kmlRenderUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlRenderUrl, options); - if (message.errorPageUrl != null && message.hasOwnProperty("errorPageUrl")) - object.errorPageUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.errorPageUrl, options); - if (message.searchHistoryUrl != null && message.hasOwnProperty("searchHistoryUrl")) - object.searchHistoryUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.searchHistoryUrl, options); - return object; - }; - SearchConfigProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SearchConfigProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.SearchConfigProto"; - }; - SearchConfigProto.SearchServer = function() { - function SearchServer(properties) { - this.suggestion = []; - this.searchlet = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SearchServer.prototype.name = null; - SearchServer.prototype.url = null; - SearchServer.prototype.type = 0; - SearchServer.prototype.htmlTransformUrl = null; - SearchServer.prototype.kmlTransformUrl = null; - SearchServer.prototype.supplementalUi = null; - SearchServer.prototype.suggestion = $util.emptyArray; - SearchServer.prototype.searchlet = $util.emptyArray; - SearchServer.prototype.requirements = null; - SearchServer.prototype.suggestServer = null; - SearchServer.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.name = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.type = reader.int32(); - break; - } - case 4: { - message.htmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 5: { - message.kmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 6: { - message.supplementalUi = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.decode(reader, reader.uint32()); - break; - } - case 9: { - if (!(message.suggestion && message.suggestion.length)) - message.suggestion = []; - message.suggestion.push($root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32())); - break; - } - case 7: { - if (!(message.searchlet && message.searchlet.length)) - message.searchlet = []; - message.searchlet.push($root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.decode(reader, reader.uint32())); - break; - } - case 8: { - message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32()); - break; - } - case 10: { - message.suggestServer = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - SearchServer.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.name != null && message.hasOwnProperty("name")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.name); - if (error) - return "name." + error; - } - if (message.url != null && message.hasOwnProperty("url")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url); - if (error) - return "url." + error; - } - if (message.type != null && message.hasOwnProperty("type")) - switch (message.type) { - default: - return "type: enum value expected"; - case 0: - case 1: - break; - } - if (message.htmlTransformUrl != null && message.hasOwnProperty("htmlTransformUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.htmlTransformUrl); - if (error) - return "htmlTransformUrl." + error; - } - if (message.kmlTransformUrl != null && message.hasOwnProperty("kmlTransformUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlTransformUrl); - if (error) - return "kmlTransformUrl." + error; - } - if (message.supplementalUi != null && message.hasOwnProperty("supplementalUi")) { - var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.verify(message.supplementalUi); - if (error) - return "supplementalUi." + error; - } - if (message.suggestion != null && message.hasOwnProperty("suggestion")) { - if (!Array.isArray(message.suggestion)) - return "suggestion: array expected"; - for (var i = 0; i < message.suggestion.length; ++i) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.suggestion[i]); - if (error) - return "suggestion." + error; - } - } - if (message.searchlet != null && message.hasOwnProperty("searchlet")) { - if (!Array.isArray(message.searchlet)) - return "searchlet: array expected"; - for (var i = 0; i < message.searchlet.length; ++i) { - var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.verify(message.searchlet[i]); - if (error) - return "searchlet." + error; - } - } - if (message.requirements != null && message.hasOwnProperty("requirements")) { - var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements); - if (error) - return "requirements." + error; - } - if (message.suggestServer != null && message.hasOwnProperty("suggestServer")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.suggestServer); - if (error) - return "suggestServer." + error; - } - return null; - }; - SearchServer.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer(); - if (object.name != null) { - if (typeof object.name !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.name: object expected"); - message.name = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.name); - } - if (object.url != null) { - if (typeof object.url !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.url: object expected"); - message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url); - } - switch (object.type) { - case "RESULT_TYPE_KML": - case 0: - message.type = 0; - break; - case "RESULT_TYPE_XML": - case 1: - message.type = 1; - break; - } - if (object.htmlTransformUrl != null) { - if (typeof object.htmlTransformUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.htmlTransformUrl: object expected"); - message.htmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.htmlTransformUrl); - } - if (object.kmlTransformUrl != null) { - if (typeof object.kmlTransformUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.kmlTransformUrl: object expected"); - message.kmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlTransformUrl); - } - if (object.supplementalUi != null) { - if (typeof object.supplementalUi !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.supplementalUi: object expected"); - message.supplementalUi = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.fromObject(object.supplementalUi); - } - if (object.suggestion) { - if (!Array.isArray(object.suggestion)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestion: array expected"); - message.suggestion = []; - for (var i = 0; i < object.suggestion.length; ++i) { - if (typeof object.suggestion[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestion: object expected"); - message.suggestion[i] = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.suggestion[i]); - } - } - if (object.searchlet) { - if (!Array.isArray(object.searchlet)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.searchlet: array expected"); - message.searchlet = []; - for (var i = 0; i < object.searchlet.length; ++i) { - if (typeof object.searchlet[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.searchlet: object expected"); - message.searchlet[i] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.fromObject(object.searchlet[i]); - } - } - if (object.requirements != null) { - if (typeof object.requirements !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.requirements: object expected"); - message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements); - } - if (object.suggestServer != null) { - if (typeof object.suggestServer !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestServer: object expected"); - message.suggestServer = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.suggestServer); - } - return message; - }; - SearchServer.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.searchlet = []; - object.suggestion = []; - } - if (options.defaults) { - object.name = null; - object.url = null; - object.type = options.enums === String ? "RESULT_TYPE_KML" : 0; - object.htmlTransformUrl = null; - object.kmlTransformUrl = null; - object.supplementalUi = null; - object.requirements = null; - object.suggestServer = null; - } - if (message.name != null && message.hasOwnProperty("name")) - object.name = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.name, options); - if (message.url != null && message.hasOwnProperty("url")) - object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options); - if (message.type != null && message.hasOwnProperty("type")) - object.type = options.enums === String ? $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.ResultType[message.type] : message.type; - if (message.htmlTransformUrl != null && message.hasOwnProperty("htmlTransformUrl")) - object.htmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.htmlTransformUrl, options); - if (message.kmlTransformUrl != null && message.hasOwnProperty("kmlTransformUrl")) - object.kmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlTransformUrl, options); - if (message.supplementalUi != null && message.hasOwnProperty("supplementalUi")) - object.supplementalUi = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.toObject(message.supplementalUi, options); - if (message.searchlet && message.searchlet.length) { - object.searchlet = []; - for (var j = 0; j < message.searchlet.length; ++j) - object.searchlet[j] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.toObject(message.searchlet[j], options); - } - if (message.requirements != null && message.hasOwnProperty("requirements")) - object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options); - if (message.suggestion && message.suggestion.length) { - object.suggestion = []; - for (var j = 0; j < message.suggestion.length; ++j) - object.suggestion[j] = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.suggestion[j], options); - } - if (message.suggestServer != null && message.hasOwnProperty("suggestServer")) - object.suggestServer = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.suggestServer, options); - return object; - }; - SearchServer.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SearchServer.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer"; - }; - SearchServer.ResultType = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "RESULT_TYPE_KML"] = 0; - values[valuesById[1] = "RESULT_TYPE_XML"] = 1; - return values; - }(); - SearchServer.SupplementalUi = function() { - function SupplementalUi(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SupplementalUi.prototype.url = null; - SupplementalUi.prototype.label = null; - SupplementalUi.prototype.height = 160; - SupplementalUi.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.label = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.height = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - SupplementalUi.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.url != null && message.hasOwnProperty("url")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url); - if (error) - return "url." + error; - } - if (message.label != null && message.hasOwnProperty("label")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.label); - if (error) - return "label." + error; - } - if (message.height != null && message.hasOwnProperty("height")) { - if (!$util.isInteger(message.height)) - return "height: integer expected"; - } - return null; - }; - SupplementalUi.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi(); - if (object.url != null) { - if (typeof object.url !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.url: object expected"); - message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url); - } - if (object.label != null) { - if (typeof object.label !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.label: object expected"); - message.label = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.label); - } - if (object.height != null) - message.height = object.height | 0; - return message; - }; - SupplementalUi.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.url = null; - object.label = null; - object.height = 160; - } - if (message.url != null && message.hasOwnProperty("url")) - object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options); - if (message.label != null && message.hasOwnProperty("label")) - object.label = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.label, options); - if (message.height != null && message.hasOwnProperty("height")) - object.height = message.height; - return object; - }; - SupplementalUi.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SupplementalUi.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi"; - }; - return SupplementalUi; - }(); - SearchServer.SearchletProto = function() { - function SearchletProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SearchletProto.prototype.url = null; - SearchletProto.prototype.name = null; - SearchletProto.prototype.requirements = null; - SearchletProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.name = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - SearchletProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.url != null && message.hasOwnProperty("url")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url); - if (error) - return "url." + error; - } - if (message.name != null && message.hasOwnProperty("name")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.name); - if (error) - return "name." + error; - } - if (message.requirements != null && message.hasOwnProperty("requirements")) { - var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements); - if (error) - return "requirements." + error; - } - return null; - }; - SearchletProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto(); - if (object.url != null) { - if (typeof object.url !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.url: object expected"); - message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url); - } - if (object.name != null) { - if (typeof object.name !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.name: object expected"); - message.name = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.name); - } - if (object.requirements != null) { - if (typeof object.requirements !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.requirements: object expected"); - message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements); - } - return message; - }; - SearchletProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.url = null; - object.name = null; - object.requirements = null; - } - if (message.url != null && message.hasOwnProperty("url")) - object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options); - if (message.name != null && message.hasOwnProperty("name")) - object.name = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.name, options); - if (message.requirements != null && message.hasOwnProperty("requirements")) - object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options); - return object; - }; - SearchletProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SearchletProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto"; - }; - return SearchletProto; - }(); - return SearchServer; - }(); - SearchConfigProto.OneboxServiceProto = function() { - function OneboxServiceProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - OneboxServiceProto.prototype.serviceUrl = null; - OneboxServiceProto.prototype.requirements = null; - OneboxServiceProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.serviceUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - OneboxServiceProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.serviceUrl != null && message.hasOwnProperty("serviceUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.serviceUrl); - if (error) - return "serviceUrl." + error; - } - if (message.requirements != null && message.hasOwnProperty("requirements")) { - var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements); - if (error) - return "requirements." + error; - } - return null; - }; - OneboxServiceProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto(); - if (object.serviceUrl != null) { - if (typeof object.serviceUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.serviceUrl: object expected"); - message.serviceUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.serviceUrl); - } - if (object.requirements != null) { - if (typeof object.requirements !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.requirements: object expected"); - message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements); - } - return message; - }; - OneboxServiceProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.serviceUrl = null; - object.requirements = null; - } - if (message.serviceUrl != null && message.hasOwnProperty("serviceUrl")) - object.serviceUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.serviceUrl, options); - if (message.requirements != null && message.hasOwnProperty("requirements")) - object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options); - return object; - }; - OneboxServiceProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - OneboxServiceProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto"; - }; - return OneboxServiceProto; - }(); - return SearchConfigProto; - }(); - EndSnippetProto.SearchInfoProto = function() { - function SearchInfoProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - SearchInfoProto.prototype.defaultUrl = "http://maps.google.com/maps"; - SearchInfoProto.prototype.geocodeParam = "q"; - SearchInfoProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.defaultUrl = reader.string(); - break; - } - case 2: { - message.geocodeParam = reader.string(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - SearchInfoProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.defaultUrl != null && message.hasOwnProperty("defaultUrl")) { - if (!$util.isString(message.defaultUrl)) - return "defaultUrl: string expected"; - } - if (message.geocodeParam != null && message.hasOwnProperty("geocodeParam")) { - if (!$util.isString(message.geocodeParam)) - return "geocodeParam: string expected"; - } - return null; - }; - SearchInfoProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto(); - if (object.defaultUrl != null) - message.defaultUrl = String(object.defaultUrl); - if (object.geocodeParam != null) - message.geocodeParam = String(object.geocodeParam); - return message; - }; - SearchInfoProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.defaultUrl = "http://maps.google.com/maps"; - object.geocodeParam = "q"; - } - if (message.defaultUrl != null && message.hasOwnProperty("defaultUrl")) - object.defaultUrl = message.defaultUrl; - if (message.geocodeParam != null && message.hasOwnProperty("geocodeParam")) - object.geocodeParam = message.geocodeParam; - return object; - }; - SearchInfoProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - SearchInfoProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.SearchInfoProto"; - }; - return SearchInfoProto; - }(); - EndSnippetProto.RockTreeDataProto = function() { - function RockTreeDataProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - RockTreeDataProto.prototype.url = null; - RockTreeDataProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - RockTreeDataProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.url != null && message.hasOwnProperty("url")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url); - if (error) - return "url." + error; - } - return null; - }; - RockTreeDataProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto(); - if (object.url != null) { - if (typeof object.url !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.RockTreeDataProto.url: object expected"); - message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url); - } - return message; - }; - RockTreeDataProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.url = null; - if (message.url != null && message.hasOwnProperty("url")) - object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options); - return object; - }; - RockTreeDataProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - RockTreeDataProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.RockTreeDataProto"; - }; - return RockTreeDataProto; - }(); - EndSnippetProto.FilmstripConfigProto = function() { - function FilmstripConfigProto(properties) { - this.imageryType = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - FilmstripConfigProto.prototype.requirements = null; - FilmstripConfigProto.prototype.alleycatUrlTemplate = null; - FilmstripConfigProto.prototype.fallbackAlleycatUrlTemplate = null; - FilmstripConfigProto.prototype.metadataUrlTemplate = null; - FilmstripConfigProto.prototype.thumbnailUrlTemplate = null; - FilmstripConfigProto.prototype.kmlUrlTemplate = null; - FilmstripConfigProto.prototype.featuredToursUrl = null; - FilmstripConfigProto.prototype.enableViewportFallback = false; - FilmstripConfigProto.prototype.viewportFallbackDistance = 0; - FilmstripConfigProto.prototype.imageryType = $util.emptyArray; - FilmstripConfigProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32()); - break; - } - case 2: { - message.alleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 9: { - message.fallbackAlleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 3: { - message.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 4: { - message.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 5: { - message.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 6: { - message.featuredToursUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 7: { - message.enableViewportFallback = reader.bool(); - break; - } - case 8: { - message.viewportFallbackDistance = reader.uint32(); - break; - } - case 10: { - if (!(message.imageryType && message.imageryType.length)) - message.imageryType = []; - message.imageryType.push($root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.decode(reader, reader.uint32())); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - FilmstripConfigProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.requirements != null && message.hasOwnProperty("requirements")) { - var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements); - if (error) - return "requirements." + error; - } - if (message.alleycatUrlTemplate != null && message.hasOwnProperty("alleycatUrlTemplate")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.alleycatUrlTemplate); - if (error) - return "alleycatUrlTemplate." + error; - } - if (message.fallbackAlleycatUrlTemplate != null && message.hasOwnProperty("fallbackAlleycatUrlTemplate")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.fallbackAlleycatUrlTemplate); - if (error) - return "fallbackAlleycatUrlTemplate." + error; - } - if (message.metadataUrlTemplate != null && message.hasOwnProperty("metadataUrlTemplate")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.metadataUrlTemplate); - if (error) - return "metadataUrlTemplate." + error; - } - if (message.thumbnailUrlTemplate != null && message.hasOwnProperty("thumbnailUrlTemplate")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.thumbnailUrlTemplate); - if (error) - return "thumbnailUrlTemplate." + error; - } - if (message.kmlUrlTemplate != null && message.hasOwnProperty("kmlUrlTemplate")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlUrlTemplate); - if (error) - return "kmlUrlTemplate." + error; - } - if (message.featuredToursUrl != null && message.hasOwnProperty("featuredToursUrl")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.featuredToursUrl); - if (error) - return "featuredToursUrl." + error; - } - if (message.enableViewportFallback != null && message.hasOwnProperty("enableViewportFallback")) { - if (typeof message.enableViewportFallback !== "boolean") - return "enableViewportFallback: boolean expected"; - } - if (message.viewportFallbackDistance != null && message.hasOwnProperty("viewportFallbackDistance")) { - if (!$util.isInteger(message.viewportFallbackDistance)) - return "viewportFallbackDistance: integer expected"; - } - if (message.imageryType != null && message.hasOwnProperty("imageryType")) { - if (!Array.isArray(message.imageryType)) - return "imageryType: array expected"; - for (var i = 0; i < message.imageryType.length; ++i) { - var error = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.verify(message.imageryType[i]); - if (error) - return "imageryType." + error; - } - } - return null; - }; - FilmstripConfigProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto(); - if (object.requirements != null) { - if (typeof object.requirements !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.requirements: object expected"); - message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements); - } - if (object.alleycatUrlTemplate != null) { - if (typeof object.alleycatUrlTemplate !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.alleycatUrlTemplate: object expected"); - message.alleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.alleycatUrlTemplate); - } - if (object.fallbackAlleycatUrlTemplate != null) { - if (typeof object.fallbackAlleycatUrlTemplate !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.fallbackAlleycatUrlTemplate: object expected"); - message.fallbackAlleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.fallbackAlleycatUrlTemplate); - } - if (object.metadataUrlTemplate != null) { - if (typeof object.metadataUrlTemplate !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.metadataUrlTemplate: object expected"); - message.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.metadataUrlTemplate); - } - if (object.thumbnailUrlTemplate != null) { - if (typeof object.thumbnailUrlTemplate !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.thumbnailUrlTemplate: object expected"); - message.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.thumbnailUrlTemplate); - } - if (object.kmlUrlTemplate != null) { - if (typeof object.kmlUrlTemplate !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.kmlUrlTemplate: object expected"); - message.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlUrlTemplate); - } - if (object.featuredToursUrl != null) { - if (typeof object.featuredToursUrl !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.featuredToursUrl: object expected"); - message.featuredToursUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.featuredToursUrl); - } - if (object.enableViewportFallback != null) - message.enableViewportFallback = Boolean(object.enableViewportFallback); - if (object.viewportFallbackDistance != null) - message.viewportFallbackDistance = object.viewportFallbackDistance >>> 0; - if (object.imageryType) { - if (!Array.isArray(object.imageryType)) - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.imageryType: array expected"); - message.imageryType = []; - for (var i = 0; i < object.imageryType.length; ++i) { - if (typeof object.imageryType[i] !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.imageryType: object expected"); - message.imageryType[i] = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.fromObject(object.imageryType[i]); - } - } - return message; - }; - FilmstripConfigProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) - object.imageryType = []; - if (options.defaults) { - object.requirements = null; - object.alleycatUrlTemplate = null; - object.metadataUrlTemplate = null; - object.thumbnailUrlTemplate = null; - object.kmlUrlTemplate = null; - object.featuredToursUrl = null; - object.enableViewportFallback = false; - object.viewportFallbackDistance = 0; - object.fallbackAlleycatUrlTemplate = null; - } - if (message.requirements != null && message.hasOwnProperty("requirements")) - object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options); - if (message.alleycatUrlTemplate != null && message.hasOwnProperty("alleycatUrlTemplate")) - object.alleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.alleycatUrlTemplate, options); - if (message.metadataUrlTemplate != null && message.hasOwnProperty("metadataUrlTemplate")) - object.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.metadataUrlTemplate, options); - if (message.thumbnailUrlTemplate != null && message.hasOwnProperty("thumbnailUrlTemplate")) - object.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.thumbnailUrlTemplate, options); - if (message.kmlUrlTemplate != null && message.hasOwnProperty("kmlUrlTemplate")) - object.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlUrlTemplate, options); - if (message.featuredToursUrl != null && message.hasOwnProperty("featuredToursUrl")) - object.featuredToursUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.featuredToursUrl, options); - if (message.enableViewportFallback != null && message.hasOwnProperty("enableViewportFallback")) - object.enableViewportFallback = message.enableViewportFallback; - if (message.viewportFallbackDistance != null && message.hasOwnProperty("viewportFallbackDistance")) - object.viewportFallbackDistance = message.viewportFallbackDistance; - if (message.fallbackAlleycatUrlTemplate != null && message.hasOwnProperty("fallbackAlleycatUrlTemplate")) - object.fallbackAlleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.fallbackAlleycatUrlTemplate, options); - if (message.imageryType && message.imageryType.length) { - object.imageryType = []; - for (var j = 0; j < message.imageryType.length; ++j) - object.imageryType[j] = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.toObject(message.imageryType[j], options); - } - return object; - }; - FilmstripConfigProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - FilmstripConfigProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.FilmstripConfigProto"; - }; - FilmstripConfigProto.AlleycatImageryTypeProto = function() { - function AlleycatImageryTypeProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - AlleycatImageryTypeProto.prototype.imageryTypeId = 0; - AlleycatImageryTypeProto.prototype.imageryTypeLabel = ""; - AlleycatImageryTypeProto.prototype.metadataUrlTemplate = null; - AlleycatImageryTypeProto.prototype.thumbnailUrlTemplate = null; - AlleycatImageryTypeProto.prototype.kmlUrlTemplate = null; - AlleycatImageryTypeProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.imageryTypeId = reader.int32(); - break; - } - case 2: { - message.imageryTypeLabel = reader.string(); - break; - } - case 3: { - message.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 4: { - message.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 5: { - message.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - AlleycatImageryTypeProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.imageryTypeId != null && message.hasOwnProperty("imageryTypeId")) { - if (!$util.isInteger(message.imageryTypeId)) - return "imageryTypeId: integer expected"; - } - if (message.imageryTypeLabel != null && message.hasOwnProperty("imageryTypeLabel")) { - if (!$util.isString(message.imageryTypeLabel)) - return "imageryTypeLabel: string expected"; - } - if (message.metadataUrlTemplate != null && message.hasOwnProperty("metadataUrlTemplate")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.metadataUrlTemplate); - if (error) - return "metadataUrlTemplate." + error; - } - if (message.thumbnailUrlTemplate != null && message.hasOwnProperty("thumbnailUrlTemplate")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.thumbnailUrlTemplate); - if (error) - return "thumbnailUrlTemplate." + error; - } - if (message.kmlUrlTemplate != null && message.hasOwnProperty("kmlUrlTemplate")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlUrlTemplate); - if (error) - return "kmlUrlTemplate." + error; - } - return null; - }; - AlleycatImageryTypeProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto(); - if (object.imageryTypeId != null) - message.imageryTypeId = object.imageryTypeId | 0; - if (object.imageryTypeLabel != null) - message.imageryTypeLabel = String(object.imageryTypeLabel); - if (object.metadataUrlTemplate != null) { - if (typeof object.metadataUrlTemplate !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.metadataUrlTemplate: object expected"); - message.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.metadataUrlTemplate); - } - if (object.thumbnailUrlTemplate != null) { - if (typeof object.thumbnailUrlTemplate !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.thumbnailUrlTemplate: object expected"); - message.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.thumbnailUrlTemplate); - } - if (object.kmlUrlTemplate != null) { - if (typeof object.kmlUrlTemplate !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.kmlUrlTemplate: object expected"); - message.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlUrlTemplate); - } - return message; - }; - AlleycatImageryTypeProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.imageryTypeId = 0; - object.imageryTypeLabel = ""; - object.metadataUrlTemplate = null; - object.thumbnailUrlTemplate = null; - object.kmlUrlTemplate = null; - } - if (message.imageryTypeId != null && message.hasOwnProperty("imageryTypeId")) - object.imageryTypeId = message.imageryTypeId; - if (message.imageryTypeLabel != null && message.hasOwnProperty("imageryTypeLabel")) - object.imageryTypeLabel = message.imageryTypeLabel; - if (message.metadataUrlTemplate != null && message.hasOwnProperty("metadataUrlTemplate")) - object.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.metadataUrlTemplate, options); - if (message.thumbnailUrlTemplate != null && message.hasOwnProperty("thumbnailUrlTemplate")) - object.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.thumbnailUrlTemplate, options); - if (message.kmlUrlTemplate != null && message.hasOwnProperty("kmlUrlTemplate")) - object.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlUrlTemplate, options); - return object; - }; - AlleycatImageryTypeProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - AlleycatImageryTypeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto"; - }; - return AlleycatImageryTypeProto; - }(); - return FilmstripConfigProto; - }(); - EndSnippetProto.StarDataProto = function() { - function StarDataProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - StarDataProto.prototype.url = null; - StarDataProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.StarDataProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - StarDataProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.url != null && message.hasOwnProperty("url")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url); - if (error) - return "url." + error; - } - return null; - }; - StarDataProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EndSnippetProto.StarDataProto) - return object; - var message = new $root.keyhole.dbroot.EndSnippetProto.StarDataProto(); - if (object.url != null) { - if (typeof object.url !== "object") - throw TypeError(".keyhole.dbroot.EndSnippetProto.StarDataProto.url: object expected"); - message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url); - } - return message; - }; - StarDataProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.url = null; - if (message.url != null && message.hasOwnProperty("url")) - object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options); - return object; - }; - StarDataProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - StarDataProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EndSnippetProto.StarDataProto"; - }; - return StarDataProto; - }(); - return EndSnippetProto; - }(); - dbroot.DbRootRefProto = function() { - function DbRootRefProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - DbRootRefProto.prototype.url = ""; - DbRootRefProto.prototype.isCritical = false; - DbRootRefProto.prototype.requirements = null; - DbRootRefProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DbRootRefProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 2: { - message.url = reader.string(); - break; - } - case 1: { - message.isCritical = reader.bool(); - break; - } - case 3: { - message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32()); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("url")) - throw $util.ProtocolError("missing required 'url'", { instance: message }); - return message; - }; - DbRootRefProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isString(message.url)) - return "url: string expected"; - if (message.isCritical != null && message.hasOwnProperty("isCritical")) { - if (typeof message.isCritical !== "boolean") - return "isCritical: boolean expected"; - } - if (message.requirements != null && message.hasOwnProperty("requirements")) { - var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements); - if (error) - return "requirements." + error; - } - return null; - }; - DbRootRefProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.DbRootRefProto) - return object; - var message = new $root.keyhole.dbroot.DbRootRefProto(); - if (object.url != null) - message.url = String(object.url); - if (object.isCritical != null) - message.isCritical = Boolean(object.isCritical); - if (object.requirements != null) { - if (typeof object.requirements !== "object") - throw TypeError(".keyhole.dbroot.DbRootRefProto.requirements: object expected"); - message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements); - } - return message; - }; - DbRootRefProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.isCritical = false; - object.url = ""; - object.requirements = null; - } - if (message.isCritical != null && message.hasOwnProperty("isCritical")) - object.isCritical = message.isCritical; - if (message.url != null && message.hasOwnProperty("url")) - object.url = message.url; - if (message.requirements != null && message.hasOwnProperty("requirements")) - object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options); - return object; - }; - DbRootRefProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - DbRootRefProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.DbRootRefProto"; - }; - return DbRootRefProto; - }(); - dbroot.DatabaseVersionProto = function() { - function DatabaseVersionProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - DatabaseVersionProto.prototype.quadtreeVersion = 0; - DatabaseVersionProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DatabaseVersionProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.quadtreeVersion = reader.uint32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - if (!message.hasOwnProperty("quadtreeVersion")) - throw $util.ProtocolError("missing required 'quadtreeVersion'", { instance: message }); - return message; - }; - DatabaseVersionProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (!$util.isInteger(message.quadtreeVersion)) - return "quadtreeVersion: integer expected"; - return null; - }; - DatabaseVersionProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.DatabaseVersionProto) - return object; - var message = new $root.keyhole.dbroot.DatabaseVersionProto(); - if (object.quadtreeVersion != null) - message.quadtreeVersion = object.quadtreeVersion >>> 0; - return message; - }; - DatabaseVersionProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) - object.quadtreeVersion = 0; - if (message.quadtreeVersion != null && message.hasOwnProperty("quadtreeVersion")) - object.quadtreeVersion = message.quadtreeVersion; - return object; - }; - DatabaseVersionProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - DatabaseVersionProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.DatabaseVersionProto"; - }; - return DatabaseVersionProto; - }(); - dbroot.DbRootProto = function() { - function DbRootProto(properties) { - this.providerInfo = []; - this.nestedFeature = []; - this.styleAttribute = []; - this.styleMap = []; - this.translationEntry = []; - this.dbrootReference = []; - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - DbRootProto.prototype.databaseName = null; - DbRootProto.prototype.imageryPresent = true; - DbRootProto.prototype.protoImagery = false; - DbRootProto.prototype.terrainPresent = false; - DbRootProto.prototype.providerInfo = $util.emptyArray; - DbRootProto.prototype.nestedFeature = $util.emptyArray; - DbRootProto.prototype.styleAttribute = $util.emptyArray; - DbRootProto.prototype.styleMap = $util.emptyArray; - DbRootProto.prototype.endSnippet = null; - DbRootProto.prototype.translationEntry = $util.emptyArray; - DbRootProto.prototype.language = "en"; - DbRootProto.prototype.version = 5; - DbRootProto.prototype.dbrootReference = $util.emptyArray; - DbRootProto.prototype.databaseVersion = null; - DbRootProto.prototype.refreshTimeout = 0; - DbRootProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DbRootProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 15: { - message.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()); - break; - } - case 1: { - message.imageryPresent = reader.bool(); - break; - } - case 14: { - message.protoImagery = reader.bool(); - break; - } - case 2: { - message.terrainPresent = reader.bool(); - break; - } - case 3: { - if (!(message.providerInfo && message.providerInfo.length)) - message.providerInfo = []; - message.providerInfo.push($root.keyhole.dbroot.ProviderInfoProto.decode(reader, reader.uint32())); - break; - } - case 4: { - if (!(message.nestedFeature && message.nestedFeature.length)) - message.nestedFeature = []; - message.nestedFeature.push($root.keyhole.dbroot.NestedFeatureProto.decode(reader, reader.uint32())); - break; - } - case 5: { - if (!(message.styleAttribute && message.styleAttribute.length)) - message.styleAttribute = []; - message.styleAttribute.push($root.keyhole.dbroot.StyleAttributeProto.decode(reader, reader.uint32())); - break; - } - case 6: { - if (!(message.styleMap && message.styleMap.length)) - message.styleMap = []; - message.styleMap.push($root.keyhole.dbroot.StyleMapProto.decode(reader, reader.uint32())); - break; - } - case 7: { - message.endSnippet = $root.keyhole.dbroot.EndSnippetProto.decode(reader, reader.uint32()); - break; - } - case 8: { - if (!(message.translationEntry && message.translationEntry.length)) - message.translationEntry = []; - message.translationEntry.push($root.keyhole.dbroot.StringEntryProto.decode(reader, reader.uint32())); - break; - } - case 9: { - message.language = reader.string(); - break; - } - case 10: { - message.version = reader.int32(); - break; - } - case 11: { - if (!(message.dbrootReference && message.dbrootReference.length)) - message.dbrootReference = []; - message.dbrootReference.push($root.keyhole.dbroot.DbRootRefProto.decode(reader, reader.uint32())); - break; - } - case 13: { - message.databaseVersion = $root.keyhole.dbroot.DatabaseVersionProto.decode(reader, reader.uint32()); - break; - } - case 16: { - message.refreshTimeout = reader.int32(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - DbRootProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.databaseName != null && message.hasOwnProperty("databaseName")) { - var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.databaseName); - if (error) - return "databaseName." + error; - } - if (message.imageryPresent != null && message.hasOwnProperty("imageryPresent")) { - if (typeof message.imageryPresent !== "boolean") - return "imageryPresent: boolean expected"; - } - if (message.protoImagery != null && message.hasOwnProperty("protoImagery")) { - if (typeof message.protoImagery !== "boolean") - return "protoImagery: boolean expected"; - } - if (message.terrainPresent != null && message.hasOwnProperty("terrainPresent")) { - if (typeof message.terrainPresent !== "boolean") - return "terrainPresent: boolean expected"; - } - if (message.providerInfo != null && message.hasOwnProperty("providerInfo")) { - if (!Array.isArray(message.providerInfo)) - return "providerInfo: array expected"; - for (var i = 0; i < message.providerInfo.length; ++i) { - var error = $root.keyhole.dbroot.ProviderInfoProto.verify(message.providerInfo[i]); - if (error) - return "providerInfo." + error; - } - } - if (message.nestedFeature != null && message.hasOwnProperty("nestedFeature")) { - if (!Array.isArray(message.nestedFeature)) - return "nestedFeature: array expected"; - for (var i = 0; i < message.nestedFeature.length; ++i) { - var error = $root.keyhole.dbroot.NestedFeatureProto.verify(message.nestedFeature[i]); - if (error) - return "nestedFeature." + error; - } - } - if (message.styleAttribute != null && message.hasOwnProperty("styleAttribute")) { - if (!Array.isArray(message.styleAttribute)) - return "styleAttribute: array expected"; - for (var i = 0; i < message.styleAttribute.length; ++i) { - var error = $root.keyhole.dbroot.StyleAttributeProto.verify(message.styleAttribute[i]); - if (error) - return "styleAttribute." + error; - } - } - if (message.styleMap != null && message.hasOwnProperty("styleMap")) { - if (!Array.isArray(message.styleMap)) - return "styleMap: array expected"; - for (var i = 0; i < message.styleMap.length; ++i) { - var error = $root.keyhole.dbroot.StyleMapProto.verify(message.styleMap[i]); - if (error) - return "styleMap." + error; - } - } - if (message.endSnippet != null && message.hasOwnProperty("endSnippet")) { - var error = $root.keyhole.dbroot.EndSnippetProto.verify(message.endSnippet); - if (error) - return "endSnippet." + error; - } - if (message.translationEntry != null && message.hasOwnProperty("translationEntry")) { - if (!Array.isArray(message.translationEntry)) - return "translationEntry: array expected"; - for (var i = 0; i < message.translationEntry.length; ++i) { - var error = $root.keyhole.dbroot.StringEntryProto.verify(message.translationEntry[i]); - if (error) - return "translationEntry." + error; - } - } - if (message.language != null && message.hasOwnProperty("language")) { - if (!$util.isString(message.language)) - return "language: string expected"; - } - if (message.version != null && message.hasOwnProperty("version")) { - if (!$util.isInteger(message.version)) - return "version: integer expected"; - } - if (message.dbrootReference != null && message.hasOwnProperty("dbrootReference")) { - if (!Array.isArray(message.dbrootReference)) - return "dbrootReference: array expected"; - for (var i = 0; i < message.dbrootReference.length; ++i) { - var error = $root.keyhole.dbroot.DbRootRefProto.verify(message.dbrootReference[i]); - if (error) - return "dbrootReference." + error; - } - } - if (message.databaseVersion != null && message.hasOwnProperty("databaseVersion")) { - var error = $root.keyhole.dbroot.DatabaseVersionProto.verify(message.databaseVersion); - if (error) - return "databaseVersion." + error; - } - if (message.refreshTimeout != null && message.hasOwnProperty("refreshTimeout")) { - if (!$util.isInteger(message.refreshTimeout)) - return "refreshTimeout: integer expected"; - } - return null; - }; - DbRootProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.DbRootProto) - return object; - var message = new $root.keyhole.dbroot.DbRootProto(); - if (object.databaseName != null) { - if (typeof object.databaseName !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.databaseName: object expected"); - message.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.databaseName); - } - if (object.imageryPresent != null) - message.imageryPresent = Boolean(object.imageryPresent); - if (object.protoImagery != null) - message.protoImagery = Boolean(object.protoImagery); - if (object.terrainPresent != null) - message.terrainPresent = Boolean(object.terrainPresent); - if (object.providerInfo) { - if (!Array.isArray(object.providerInfo)) - throw TypeError(".keyhole.dbroot.DbRootProto.providerInfo: array expected"); - message.providerInfo = []; - for (var i = 0; i < object.providerInfo.length; ++i) { - if (typeof object.providerInfo[i] !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.providerInfo: object expected"); - message.providerInfo[i] = $root.keyhole.dbroot.ProviderInfoProto.fromObject(object.providerInfo[i]); - } - } - if (object.nestedFeature) { - if (!Array.isArray(object.nestedFeature)) - throw TypeError(".keyhole.dbroot.DbRootProto.nestedFeature: array expected"); - message.nestedFeature = []; - for (var i = 0; i < object.nestedFeature.length; ++i) { - if (typeof object.nestedFeature[i] !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.nestedFeature: object expected"); - message.nestedFeature[i] = $root.keyhole.dbroot.NestedFeatureProto.fromObject(object.nestedFeature[i]); - } - } - if (object.styleAttribute) { - if (!Array.isArray(object.styleAttribute)) - throw TypeError(".keyhole.dbroot.DbRootProto.styleAttribute: array expected"); - message.styleAttribute = []; - for (var i = 0; i < object.styleAttribute.length; ++i) { - if (typeof object.styleAttribute[i] !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.styleAttribute: object expected"); - message.styleAttribute[i] = $root.keyhole.dbroot.StyleAttributeProto.fromObject(object.styleAttribute[i]); - } - } - if (object.styleMap) { - if (!Array.isArray(object.styleMap)) - throw TypeError(".keyhole.dbroot.DbRootProto.styleMap: array expected"); - message.styleMap = []; - for (var i = 0; i < object.styleMap.length; ++i) { - if (typeof object.styleMap[i] !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.styleMap: object expected"); - message.styleMap[i] = $root.keyhole.dbroot.StyleMapProto.fromObject(object.styleMap[i]); - } - } - if (object.endSnippet != null) { - if (typeof object.endSnippet !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.endSnippet: object expected"); - message.endSnippet = $root.keyhole.dbroot.EndSnippetProto.fromObject(object.endSnippet); - } - if (object.translationEntry) { - if (!Array.isArray(object.translationEntry)) - throw TypeError(".keyhole.dbroot.DbRootProto.translationEntry: array expected"); - message.translationEntry = []; - for (var i = 0; i < object.translationEntry.length; ++i) { - if (typeof object.translationEntry[i] !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.translationEntry: object expected"); - message.translationEntry[i] = $root.keyhole.dbroot.StringEntryProto.fromObject(object.translationEntry[i]); - } - } - if (object.language != null) - message.language = String(object.language); - if (object.version != null) - message.version = object.version | 0; - if (object.dbrootReference) { - if (!Array.isArray(object.dbrootReference)) - throw TypeError(".keyhole.dbroot.DbRootProto.dbrootReference: array expected"); - message.dbrootReference = []; - for (var i = 0; i < object.dbrootReference.length; ++i) { - if (typeof object.dbrootReference[i] !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.dbrootReference: object expected"); - message.dbrootReference[i] = $root.keyhole.dbroot.DbRootRefProto.fromObject(object.dbrootReference[i]); - } - } - if (object.databaseVersion != null) { - if (typeof object.databaseVersion !== "object") - throw TypeError(".keyhole.dbroot.DbRootProto.databaseVersion: object expected"); - message.databaseVersion = $root.keyhole.dbroot.DatabaseVersionProto.fromObject(object.databaseVersion); - } - if (object.refreshTimeout != null) - message.refreshTimeout = object.refreshTimeout | 0; - return message; - }; - DbRootProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.arrays || options.defaults) { - object.providerInfo = []; - object.nestedFeature = []; - object.styleAttribute = []; - object.styleMap = []; - object.translationEntry = []; - object.dbrootReference = []; - } - if (options.defaults) { - object.imageryPresent = true; - object.terrainPresent = false; - object.endSnippet = null; - object.language = "en"; - object.version = 5; - object.databaseVersion = null; - object.protoImagery = false; - object.databaseName = null; - object.refreshTimeout = 0; - } - if (message.imageryPresent != null && message.hasOwnProperty("imageryPresent")) - object.imageryPresent = message.imageryPresent; - if (message.terrainPresent != null && message.hasOwnProperty("terrainPresent")) - object.terrainPresent = message.terrainPresent; - if (message.providerInfo && message.providerInfo.length) { - object.providerInfo = []; - for (var j = 0; j < message.providerInfo.length; ++j) - object.providerInfo[j] = $root.keyhole.dbroot.ProviderInfoProto.toObject(message.providerInfo[j], options); - } - if (message.nestedFeature && message.nestedFeature.length) { - object.nestedFeature = []; - for (var j = 0; j < message.nestedFeature.length; ++j) - object.nestedFeature[j] = $root.keyhole.dbroot.NestedFeatureProto.toObject(message.nestedFeature[j], options); - } - if (message.styleAttribute && message.styleAttribute.length) { - object.styleAttribute = []; - for (var j = 0; j < message.styleAttribute.length; ++j) - object.styleAttribute[j] = $root.keyhole.dbroot.StyleAttributeProto.toObject(message.styleAttribute[j], options); - } - if (message.styleMap && message.styleMap.length) { - object.styleMap = []; - for (var j = 0; j < message.styleMap.length; ++j) - object.styleMap[j] = $root.keyhole.dbroot.StyleMapProto.toObject(message.styleMap[j], options); - } - if (message.endSnippet != null && message.hasOwnProperty("endSnippet")) - object.endSnippet = $root.keyhole.dbroot.EndSnippetProto.toObject(message.endSnippet, options); - if (message.translationEntry && message.translationEntry.length) { - object.translationEntry = []; - for (var j = 0; j < message.translationEntry.length; ++j) - object.translationEntry[j] = $root.keyhole.dbroot.StringEntryProto.toObject(message.translationEntry[j], options); - } - if (message.language != null && message.hasOwnProperty("language")) - object.language = message.language; - if (message.version != null && message.hasOwnProperty("version")) - object.version = message.version; - if (message.dbrootReference && message.dbrootReference.length) { - object.dbrootReference = []; - for (var j = 0; j < message.dbrootReference.length; ++j) - object.dbrootReference[j] = $root.keyhole.dbroot.DbRootRefProto.toObject(message.dbrootReference[j], options); - } - if (message.databaseVersion != null && message.hasOwnProperty("databaseVersion")) - object.databaseVersion = $root.keyhole.dbroot.DatabaseVersionProto.toObject(message.databaseVersion, options); - if (message.protoImagery != null && message.hasOwnProperty("protoImagery")) - object.protoImagery = message.protoImagery; - if (message.databaseName != null && message.hasOwnProperty("databaseName")) - object.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.databaseName, options); - if (message.refreshTimeout != null && message.hasOwnProperty("refreshTimeout")) - object.refreshTimeout = message.refreshTimeout; - return object; - }; - DbRootProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - DbRootProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.DbRootProto"; - }; - return DbRootProto; - }(); - dbroot.EncryptedDbRootProto = function() { - function EncryptedDbRootProto(properties) { - if (properties) { - for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i) - if (properties[keys[i]] != null) - this[keys[i]] = properties[keys[i]]; - } - } - EncryptedDbRootProto.prototype.encryptionType = 0; - EncryptedDbRootProto.prototype.encryptionData = $util.newBuffer([]); - EncryptedDbRootProto.prototype.dbrootData = $util.newBuffer([]); - EncryptedDbRootProto.decode = function decode(reader, length) { - if (!(reader instanceof $Reader)) - reader = $Reader.create(reader); - var end = length === void 0 ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EncryptedDbRootProto(); - while (reader.pos < end) { - var tag = reader.uint32(); - switch (tag >>> 3) { - case 1: { - message.encryptionType = reader.int32(); - break; - } - case 2: { - message.encryptionData = reader.bytes(); - break; - } - case 3: { - message.dbrootData = reader.bytes(); - break; - } - default: - reader.skipType(tag & 7); - break; - } - } - return message; - }; - EncryptedDbRootProto.verify = function verify(message) { - if (typeof message !== "object" || message === null) - return "object expected"; - if (message.encryptionType != null && message.hasOwnProperty("encryptionType")) - switch (message.encryptionType) { - default: - return "encryptionType: enum value expected"; - case 0: - break; - } - if (message.encryptionData != null && message.hasOwnProperty("encryptionData")) { - if (!(message.encryptionData && typeof message.encryptionData.length === "number" || $util.isString(message.encryptionData))) - return "encryptionData: buffer expected"; - } - if (message.dbrootData != null && message.hasOwnProperty("dbrootData")) { - if (!(message.dbrootData && typeof message.dbrootData.length === "number" || $util.isString(message.dbrootData))) - return "dbrootData: buffer expected"; - } - return null; - }; - EncryptedDbRootProto.fromObject = function fromObject(object) { - if (object instanceof $root.keyhole.dbroot.EncryptedDbRootProto) - return object; - var message = new $root.keyhole.dbroot.EncryptedDbRootProto(); - switch (object.encryptionType) { - case "ENCRYPTION_XOR": - case 0: - message.encryptionType = 0; - break; - } - if (object.encryptionData != null) { - if (typeof object.encryptionData === "string") - $util.base64.decode(object.encryptionData, message.encryptionData = $util.newBuffer($util.base64.length(object.encryptionData)), 0); - else if (object.encryptionData.length >= 0) - message.encryptionData = object.encryptionData; - } - if (object.dbrootData != null) { - if (typeof object.dbrootData === "string") - $util.base64.decode(object.dbrootData, message.dbrootData = $util.newBuffer($util.base64.length(object.dbrootData)), 0); - else if (object.dbrootData.length >= 0) - message.dbrootData = object.dbrootData; - } - return message; - }; - EncryptedDbRootProto.toObject = function toObject(message, options) { - if (!options) - options = {}; - var object = {}; - if (options.defaults) { - object.encryptionType = options.enums === String ? "ENCRYPTION_XOR" : 0; - if (options.bytes === String) - object.encryptionData = ""; - else { - object.encryptionData = []; - if (options.bytes !== Array) - object.encryptionData = $util.newBuffer(object.encryptionData); - } - if (options.bytes === String) - object.dbrootData = ""; - else { - object.dbrootData = []; - if (options.bytes !== Array) - object.dbrootData = $util.newBuffer(object.dbrootData); - } - } - if (message.encryptionType != null && message.hasOwnProperty("encryptionType")) - object.encryptionType = options.enums === String ? $root.keyhole.dbroot.EncryptedDbRootProto.EncryptionType[message.encryptionType] : message.encryptionType; - if (message.encryptionData != null && message.hasOwnProperty("encryptionData")) - object.encryptionData = options.bytes === String ? $util.base64.encode(message.encryptionData, 0, message.encryptionData.length) : options.bytes === Array ? Array.prototype.slice.call(message.encryptionData) : message.encryptionData; - if (message.dbrootData != null && message.hasOwnProperty("dbrootData")) - object.dbrootData = options.bytes === String ? $util.base64.encode(message.dbrootData, 0, message.dbrootData.length) : options.bytes === Array ? Array.prototype.slice.call(message.dbrootData) : message.dbrootData; - return object; - }; - EncryptedDbRootProto.prototype.toJSON = function toJSON() { - return this.constructor.toObject(this, $protobuf.util.toJSONOptions); - }; - EncryptedDbRootProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) { - if (typeUrlPrefix === void 0) { - typeUrlPrefix = "type.googleapis.com"; - } - return typeUrlPrefix + "/keyhole.dbroot.EncryptedDbRootProto"; - }; - EncryptedDbRootProto.EncryptionType = function() { - var valuesById = {}, values = Object.create(valuesById); - values[valuesById[0] = "ENCRYPTION_XOR"] = 0; - return values; - }(); - return EncryptedDbRootProto; - }(); - return dbroot; - }(); - return keyhole; - }(); - return $root.keyhole.dbroot; - }; -})(); -//# sourceMappingURL=google-earth-dbroot-parser.js.map diff --git a/debug/cesium/ThirdParty/google-earth-dbroot-parser.js.map b/debug/cesium/ThirdParty/google-earth-dbroot-parser.js.map deleted file mode 100644 index 1ac5930..0000000 --- a/debug/cesium/ThirdParty/google-earth-dbroot-parser.js.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../Source/ThirdParty/google-earth-dbroot-parser.js"], - "sourcesContent": ["window.cesiumGoogleEarthDbRootParser = function(\r\n $protobuf) {\r\n /* jshint curly: false, sub: true, newcap: false, shadow: true, unused: false*/\r\n 'use strict';\r\n\r\n //\r\n // Creates a parser for a dbroot protocol buffer\r\n // Below code is generated using protobufjs with the following command\r\n //\r\n // ./pbjs --no-encode --no-create --no-comments --no-delimited -w amd -t static dbroot_v2.proto\r\n //\r\n // .proto file can be found here: https://github.com/google/earthenterprise/blob/master/earth_enterprise/src/keyhole/proto/dbroot/dbroot_v2.proto\r\n var $Reader = $protobuf.Reader, $util = $protobuf.util;\r\n\r\n var $root = $protobuf.roots[\"default\"] || ($protobuf.roots[\"default\"] = {});\r\n \r\n $root.keyhole = (function() {\r\n \r\n var keyhole = {};\r\n \r\n keyhole.dbroot = (function() {\r\n \r\n var dbroot = {};\r\n \r\n dbroot.StringEntryProto = (function() {\r\n \r\n function StringEntryProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n StringEntryProto.prototype.stringId = 0;\r\n StringEntryProto.prototype.stringValue = \"\";\r\n \r\n StringEntryProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.StringEntryProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.stringId = reader.fixed32();\r\n break;\r\n }\r\n case 2: {\r\n message.stringValue = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"stringId\"))\r\n throw $util.ProtocolError(\"missing required 'stringId'\", { instance: message });\r\n if (!message.hasOwnProperty(\"stringValue\"))\r\n throw $util.ProtocolError(\"missing required 'stringValue'\", { instance: message });\r\n return message;\r\n };\r\n \r\n StringEntryProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isInteger(message.stringId))\r\n return \"stringId: integer expected\";\r\n if (!$util.isString(message.stringValue))\r\n return \"stringValue: string expected\";\r\n return null;\r\n };\r\n \r\n StringEntryProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.StringEntryProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.StringEntryProto();\r\n if (object.stringId != null)\r\n message.stringId = object.stringId >>> 0;\r\n if (object.stringValue != null)\r\n message.stringValue = String(object.stringValue);\r\n return message;\r\n };\r\n \r\n StringEntryProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.stringId = 0;\r\n object.stringValue = \"\";\r\n }\r\n if (message.stringId != null && message.hasOwnProperty(\"stringId\"))\r\n object.stringId = message.stringId;\r\n if (message.stringValue != null && message.hasOwnProperty(\"stringValue\"))\r\n object.stringValue = message.stringValue;\r\n return object;\r\n };\r\n \r\n StringEntryProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n StringEntryProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.StringEntryProto\";\r\n };\r\n \r\n return StringEntryProto;\r\n })();\r\n \r\n dbroot.StringIdOrValueProto = (function() {\r\n \r\n function StringIdOrValueProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n StringIdOrValueProto.prototype.stringId = 0;\r\n StringIdOrValueProto.prototype.value = \"\";\r\n \r\n StringIdOrValueProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.StringIdOrValueProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.stringId = reader.fixed32();\r\n break;\r\n }\r\n case 2: {\r\n message.value = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n StringIdOrValueProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.stringId != null && message.hasOwnProperty(\"stringId\"))\r\n if (!$util.isInteger(message.stringId))\r\n return \"stringId: integer expected\";\r\n if (message.value != null && message.hasOwnProperty(\"value\"))\r\n if (!$util.isString(message.value))\r\n return \"value: string expected\";\r\n return null;\r\n };\r\n \r\n StringIdOrValueProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.StringIdOrValueProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.StringIdOrValueProto();\r\n if (object.stringId != null)\r\n message.stringId = object.stringId >>> 0;\r\n if (object.value != null)\r\n message.value = String(object.value);\r\n return message;\r\n };\r\n \r\n StringIdOrValueProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.stringId = 0;\r\n object.value = \"\";\r\n }\r\n if (message.stringId != null && message.hasOwnProperty(\"stringId\"))\r\n object.stringId = message.stringId;\r\n if (message.value != null && message.hasOwnProperty(\"value\"))\r\n object.value = message.value;\r\n return object;\r\n };\r\n \r\n StringIdOrValueProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n StringIdOrValueProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.StringIdOrValueProto\";\r\n };\r\n \r\n return StringIdOrValueProto;\r\n })();\r\n \r\n dbroot.PlanetModelProto = (function() {\r\n \r\n function PlanetModelProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n PlanetModelProto.prototype.radius = 6378.137;\r\n PlanetModelProto.prototype.flattening = 0.00335281066474748;\r\n PlanetModelProto.prototype.elevationBias = 0;\r\n PlanetModelProto.prototype.negativeAltitudeExponentBias = 0;\r\n PlanetModelProto.prototype.compressedNegativeAltitudeThreshold = 0;\r\n \r\n PlanetModelProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.PlanetModelProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.radius = reader.double();\r\n break;\r\n }\r\n case 2: {\r\n message.flattening = reader.double();\r\n break;\r\n }\r\n case 4: {\r\n message.elevationBias = reader.double();\r\n break;\r\n }\r\n case 5: {\r\n message.negativeAltitudeExponentBias = reader.int32();\r\n break;\r\n }\r\n case 6: {\r\n message.compressedNegativeAltitudeThreshold = reader.double();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n PlanetModelProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.radius != null && message.hasOwnProperty(\"radius\"))\r\n if (typeof message.radius !== \"number\")\r\n return \"radius: number expected\";\r\n if (message.flattening != null && message.hasOwnProperty(\"flattening\"))\r\n if (typeof message.flattening !== \"number\")\r\n return \"flattening: number expected\";\r\n if (message.elevationBias != null && message.hasOwnProperty(\"elevationBias\"))\r\n if (typeof message.elevationBias !== \"number\")\r\n return \"elevationBias: number expected\";\r\n if (message.negativeAltitudeExponentBias != null && message.hasOwnProperty(\"negativeAltitudeExponentBias\"))\r\n if (!$util.isInteger(message.negativeAltitudeExponentBias))\r\n return \"negativeAltitudeExponentBias: integer expected\";\r\n if (message.compressedNegativeAltitudeThreshold != null && message.hasOwnProperty(\"compressedNegativeAltitudeThreshold\"))\r\n if (typeof message.compressedNegativeAltitudeThreshold !== \"number\")\r\n return \"compressedNegativeAltitudeThreshold: number expected\";\r\n return null;\r\n };\r\n \r\n PlanetModelProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.PlanetModelProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.PlanetModelProto();\r\n if (object.radius != null)\r\n message.radius = Number(object.radius);\r\n if (object.flattening != null)\r\n message.flattening = Number(object.flattening);\r\n if (object.elevationBias != null)\r\n message.elevationBias = Number(object.elevationBias);\r\n if (object.negativeAltitudeExponentBias != null)\r\n message.negativeAltitudeExponentBias = object.negativeAltitudeExponentBias | 0;\r\n if (object.compressedNegativeAltitudeThreshold != null)\r\n message.compressedNegativeAltitudeThreshold = Number(object.compressedNegativeAltitudeThreshold);\r\n return message;\r\n };\r\n \r\n PlanetModelProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.radius = 6378.137;\r\n object.flattening = 0.00335281066474748;\r\n object.elevationBias = 0;\r\n object.negativeAltitudeExponentBias = 0;\r\n object.compressedNegativeAltitudeThreshold = 0;\r\n }\r\n if (message.radius != null && message.hasOwnProperty(\"radius\"))\r\n object.radius = options.json && !isFinite(message.radius) ? String(message.radius) : message.radius;\r\n if (message.flattening != null && message.hasOwnProperty(\"flattening\"))\r\n object.flattening = options.json && !isFinite(message.flattening) ? String(message.flattening) : message.flattening;\r\n if (message.elevationBias != null && message.hasOwnProperty(\"elevationBias\"))\r\n object.elevationBias = options.json && !isFinite(message.elevationBias) ? String(message.elevationBias) : message.elevationBias;\r\n if (message.negativeAltitudeExponentBias != null && message.hasOwnProperty(\"negativeAltitudeExponentBias\"))\r\n object.negativeAltitudeExponentBias = message.negativeAltitudeExponentBias;\r\n if (message.compressedNegativeAltitudeThreshold != null && message.hasOwnProperty(\"compressedNegativeAltitudeThreshold\"))\r\n object.compressedNegativeAltitudeThreshold = options.json && !isFinite(message.compressedNegativeAltitudeThreshold) ? String(message.compressedNegativeAltitudeThreshold) : message.compressedNegativeAltitudeThreshold;\r\n return object;\r\n };\r\n \r\n PlanetModelProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n PlanetModelProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.PlanetModelProto\";\r\n };\r\n \r\n return PlanetModelProto;\r\n })();\r\n \r\n dbroot.ProviderInfoProto = (function() {\r\n \r\n function ProviderInfoProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n ProviderInfoProto.prototype.providerId = 0;\r\n ProviderInfoProto.prototype.copyrightString = null;\r\n ProviderInfoProto.prototype.verticalPixelOffset = -1;\r\n \r\n ProviderInfoProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ProviderInfoProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.providerId = reader.int32();\r\n break;\r\n }\r\n case 2: {\r\n message.copyrightString = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.verticalPixelOffset = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"providerId\"))\r\n throw $util.ProtocolError(\"missing required 'providerId'\", { instance: message });\r\n return message;\r\n };\r\n \r\n ProviderInfoProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isInteger(message.providerId))\r\n return \"providerId: integer expected\";\r\n if (message.copyrightString != null && message.hasOwnProperty(\"copyrightString\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.copyrightString);\r\n if (error)\r\n return \"copyrightString.\" + error;\r\n }\r\n if (message.verticalPixelOffset != null && message.hasOwnProperty(\"verticalPixelOffset\"))\r\n if (!$util.isInteger(message.verticalPixelOffset))\r\n return \"verticalPixelOffset: integer expected\";\r\n return null;\r\n };\r\n \r\n ProviderInfoProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.ProviderInfoProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.ProviderInfoProto();\r\n if (object.providerId != null)\r\n message.providerId = object.providerId | 0;\r\n if (object.copyrightString != null) {\r\n if (typeof object.copyrightString !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.ProviderInfoProto.copyrightString: object expected\");\r\n message.copyrightString = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.copyrightString);\r\n }\r\n if (object.verticalPixelOffset != null)\r\n message.verticalPixelOffset = object.verticalPixelOffset | 0;\r\n return message;\r\n };\r\n \r\n ProviderInfoProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.providerId = 0;\r\n object.copyrightString = null;\r\n object.verticalPixelOffset = -1;\r\n }\r\n if (message.providerId != null && message.hasOwnProperty(\"providerId\"))\r\n object.providerId = message.providerId;\r\n if (message.copyrightString != null && message.hasOwnProperty(\"copyrightString\"))\r\n object.copyrightString = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.copyrightString, options);\r\n if (message.verticalPixelOffset != null && message.hasOwnProperty(\"verticalPixelOffset\"))\r\n object.verticalPixelOffset = message.verticalPixelOffset;\r\n return object;\r\n };\r\n \r\n ProviderInfoProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n ProviderInfoProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.ProviderInfoProto\";\r\n };\r\n \r\n return ProviderInfoProto;\r\n })();\r\n \r\n dbroot.PopUpProto = (function() {\r\n \r\n function PopUpProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n PopUpProto.prototype.isBalloonStyle = false;\r\n PopUpProto.prototype.text = null;\r\n PopUpProto.prototype.backgroundColorAbgr = 4294967295;\r\n PopUpProto.prototype.textColorAbgr = 4278190080;\r\n \r\n PopUpProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.PopUpProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.isBalloonStyle = reader.bool();\r\n break;\r\n }\r\n case 2: {\r\n message.text = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.backgroundColorAbgr = reader.fixed32();\r\n break;\r\n }\r\n case 4: {\r\n message.textColorAbgr = reader.fixed32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n PopUpProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.isBalloonStyle != null && message.hasOwnProperty(\"isBalloonStyle\"))\r\n if (typeof message.isBalloonStyle !== \"boolean\")\r\n return \"isBalloonStyle: boolean expected\";\r\n if (message.text != null && message.hasOwnProperty(\"text\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.text);\r\n if (error)\r\n return \"text.\" + error;\r\n }\r\n if (message.backgroundColorAbgr != null && message.hasOwnProperty(\"backgroundColorAbgr\"))\r\n if (!$util.isInteger(message.backgroundColorAbgr))\r\n return \"backgroundColorAbgr: integer expected\";\r\n if (message.textColorAbgr != null && message.hasOwnProperty(\"textColorAbgr\"))\r\n if (!$util.isInteger(message.textColorAbgr))\r\n return \"textColorAbgr: integer expected\";\r\n return null;\r\n };\r\n \r\n PopUpProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.PopUpProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.PopUpProto();\r\n if (object.isBalloonStyle != null)\r\n message.isBalloonStyle = Boolean(object.isBalloonStyle);\r\n if (object.text != null) {\r\n if (typeof object.text !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.PopUpProto.text: object expected\");\r\n message.text = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.text);\r\n }\r\n if (object.backgroundColorAbgr != null)\r\n message.backgroundColorAbgr = object.backgroundColorAbgr >>> 0;\r\n if (object.textColorAbgr != null)\r\n message.textColorAbgr = object.textColorAbgr >>> 0;\r\n return message;\r\n };\r\n \r\n PopUpProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.isBalloonStyle = false;\r\n object.text = null;\r\n object.backgroundColorAbgr = 4294967295;\r\n object.textColorAbgr = 4278190080;\r\n }\r\n if (message.isBalloonStyle != null && message.hasOwnProperty(\"isBalloonStyle\"))\r\n object.isBalloonStyle = message.isBalloonStyle;\r\n if (message.text != null && message.hasOwnProperty(\"text\"))\r\n object.text = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.text, options);\r\n if (message.backgroundColorAbgr != null && message.hasOwnProperty(\"backgroundColorAbgr\"))\r\n object.backgroundColorAbgr = message.backgroundColorAbgr;\r\n if (message.textColorAbgr != null && message.hasOwnProperty(\"textColorAbgr\"))\r\n object.textColorAbgr = message.textColorAbgr;\r\n return object;\r\n };\r\n \r\n PopUpProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n PopUpProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.PopUpProto\";\r\n };\r\n \r\n return PopUpProto;\r\n })();\r\n \r\n dbroot.StyleAttributeProto = (function() {\r\n \r\n function StyleAttributeProto(properties) {\r\n this.drawFlag = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n StyleAttributeProto.prototype.styleId = \"\";\r\n StyleAttributeProto.prototype.providerId = 0;\r\n StyleAttributeProto.prototype.polyColorAbgr = 4294967295;\r\n StyleAttributeProto.prototype.lineColorAbgr = 4294967295;\r\n StyleAttributeProto.prototype.lineWidth = 1;\r\n StyleAttributeProto.prototype.labelColorAbgr = 4294967295;\r\n StyleAttributeProto.prototype.labelScale = 1;\r\n StyleAttributeProto.prototype.placemarkIconColorAbgr = 4294967295;\r\n StyleAttributeProto.prototype.placemarkIconScale = 1;\r\n StyleAttributeProto.prototype.placemarkIconPath = null;\r\n StyleAttributeProto.prototype.placemarkIconX = 0;\r\n StyleAttributeProto.prototype.placemarkIconY = 0;\r\n StyleAttributeProto.prototype.placemarkIconWidth = 32;\r\n StyleAttributeProto.prototype.placemarkIconHeight = 32;\r\n StyleAttributeProto.prototype.popUp = null;\r\n StyleAttributeProto.prototype.drawFlag = $util.emptyArray;\r\n \r\n StyleAttributeProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.StyleAttributeProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.styleId = reader.string();\r\n break;\r\n }\r\n case 3: {\r\n message.providerId = reader.int32();\r\n break;\r\n }\r\n case 4: {\r\n message.polyColorAbgr = reader.fixed32();\r\n break;\r\n }\r\n case 5: {\r\n message.lineColorAbgr = reader.fixed32();\r\n break;\r\n }\r\n case 6: {\r\n message.lineWidth = reader.float();\r\n break;\r\n }\r\n case 7: {\r\n message.labelColorAbgr = reader.fixed32();\r\n break;\r\n }\r\n case 8: {\r\n message.labelScale = reader.float();\r\n break;\r\n }\r\n case 9: {\r\n message.placemarkIconColorAbgr = reader.fixed32();\r\n break;\r\n }\r\n case 10: {\r\n message.placemarkIconScale = reader.float();\r\n break;\r\n }\r\n case 11: {\r\n message.placemarkIconPath = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 12: {\r\n message.placemarkIconX = reader.int32();\r\n break;\r\n }\r\n case 13: {\r\n message.placemarkIconY = reader.int32();\r\n break;\r\n }\r\n case 14: {\r\n message.placemarkIconWidth = reader.int32();\r\n break;\r\n }\r\n case 15: {\r\n message.placemarkIconHeight = reader.int32();\r\n break;\r\n }\r\n case 16: {\r\n message.popUp = $root.keyhole.dbroot.PopUpProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 17: {\r\n if (!(message.drawFlag && message.drawFlag.length))\r\n message.drawFlag = [];\r\n message.drawFlag.push($root.keyhole.dbroot.DrawFlagProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"styleId\"))\r\n throw $util.ProtocolError(\"missing required 'styleId'\", { instance: message });\r\n return message;\r\n };\r\n \r\n StyleAttributeProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isString(message.styleId))\r\n return \"styleId: string expected\";\r\n if (message.providerId != null && message.hasOwnProperty(\"providerId\"))\r\n if (!$util.isInteger(message.providerId))\r\n return \"providerId: integer expected\";\r\n if (message.polyColorAbgr != null && message.hasOwnProperty(\"polyColorAbgr\"))\r\n if (!$util.isInteger(message.polyColorAbgr))\r\n return \"polyColorAbgr: integer expected\";\r\n if (message.lineColorAbgr != null && message.hasOwnProperty(\"lineColorAbgr\"))\r\n if (!$util.isInteger(message.lineColorAbgr))\r\n return \"lineColorAbgr: integer expected\";\r\n if (message.lineWidth != null && message.hasOwnProperty(\"lineWidth\"))\r\n if (typeof message.lineWidth !== \"number\")\r\n return \"lineWidth: number expected\";\r\n if (message.labelColorAbgr != null && message.hasOwnProperty(\"labelColorAbgr\"))\r\n if (!$util.isInteger(message.labelColorAbgr))\r\n return \"labelColorAbgr: integer expected\";\r\n if (message.labelScale != null && message.hasOwnProperty(\"labelScale\"))\r\n if (typeof message.labelScale !== \"number\")\r\n return \"labelScale: number expected\";\r\n if (message.placemarkIconColorAbgr != null && message.hasOwnProperty(\"placemarkIconColorAbgr\"))\r\n if (!$util.isInteger(message.placemarkIconColorAbgr))\r\n return \"placemarkIconColorAbgr: integer expected\";\r\n if (message.placemarkIconScale != null && message.hasOwnProperty(\"placemarkIconScale\"))\r\n if (typeof message.placemarkIconScale !== \"number\")\r\n return \"placemarkIconScale: number expected\";\r\n if (message.placemarkIconPath != null && message.hasOwnProperty(\"placemarkIconPath\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.placemarkIconPath);\r\n if (error)\r\n return \"placemarkIconPath.\" + error;\r\n }\r\n if (message.placemarkIconX != null && message.hasOwnProperty(\"placemarkIconX\"))\r\n if (!$util.isInteger(message.placemarkIconX))\r\n return \"placemarkIconX: integer expected\";\r\n if (message.placemarkIconY != null && message.hasOwnProperty(\"placemarkIconY\"))\r\n if (!$util.isInteger(message.placemarkIconY))\r\n return \"placemarkIconY: integer expected\";\r\n if (message.placemarkIconWidth != null && message.hasOwnProperty(\"placemarkIconWidth\"))\r\n if (!$util.isInteger(message.placemarkIconWidth))\r\n return \"placemarkIconWidth: integer expected\";\r\n if (message.placemarkIconHeight != null && message.hasOwnProperty(\"placemarkIconHeight\"))\r\n if (!$util.isInteger(message.placemarkIconHeight))\r\n return \"placemarkIconHeight: integer expected\";\r\n if (message.popUp != null && message.hasOwnProperty(\"popUp\")) {\r\n var error = $root.keyhole.dbroot.PopUpProto.verify(message.popUp);\r\n if (error)\r\n return \"popUp.\" + error;\r\n }\r\n if (message.drawFlag != null && message.hasOwnProperty(\"drawFlag\")) {\r\n if (!Array.isArray(message.drawFlag))\r\n return \"drawFlag: array expected\";\r\n for (var i = 0; i < message.drawFlag.length; ++i) {\r\n var error = $root.keyhole.dbroot.DrawFlagProto.verify(message.drawFlag[i]);\r\n if (error)\r\n return \"drawFlag.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n StyleAttributeProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.StyleAttributeProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.StyleAttributeProto();\r\n if (object.styleId != null)\r\n message.styleId = String(object.styleId);\r\n if (object.providerId != null)\r\n message.providerId = object.providerId | 0;\r\n if (object.polyColorAbgr != null)\r\n message.polyColorAbgr = object.polyColorAbgr >>> 0;\r\n if (object.lineColorAbgr != null)\r\n message.lineColorAbgr = object.lineColorAbgr >>> 0;\r\n if (object.lineWidth != null)\r\n message.lineWidth = Number(object.lineWidth);\r\n if (object.labelColorAbgr != null)\r\n message.labelColorAbgr = object.labelColorAbgr >>> 0;\r\n if (object.labelScale != null)\r\n message.labelScale = Number(object.labelScale);\r\n if (object.placemarkIconColorAbgr != null)\r\n message.placemarkIconColorAbgr = object.placemarkIconColorAbgr >>> 0;\r\n if (object.placemarkIconScale != null)\r\n message.placemarkIconScale = Number(object.placemarkIconScale);\r\n if (object.placemarkIconPath != null) {\r\n if (typeof object.placemarkIconPath !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.StyleAttributeProto.placemarkIconPath: object expected\");\r\n message.placemarkIconPath = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.placemarkIconPath);\r\n }\r\n if (object.placemarkIconX != null)\r\n message.placemarkIconX = object.placemarkIconX | 0;\r\n if (object.placemarkIconY != null)\r\n message.placemarkIconY = object.placemarkIconY | 0;\r\n if (object.placemarkIconWidth != null)\r\n message.placemarkIconWidth = object.placemarkIconWidth | 0;\r\n if (object.placemarkIconHeight != null)\r\n message.placemarkIconHeight = object.placemarkIconHeight | 0;\r\n if (object.popUp != null) {\r\n if (typeof object.popUp !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.StyleAttributeProto.popUp: object expected\");\r\n message.popUp = $root.keyhole.dbroot.PopUpProto.fromObject(object.popUp);\r\n }\r\n if (object.drawFlag) {\r\n if (!Array.isArray(object.drawFlag))\r\n throw TypeError(\".keyhole.dbroot.StyleAttributeProto.drawFlag: array expected\");\r\n message.drawFlag = [];\r\n for (var i = 0; i < object.drawFlag.length; ++i) {\r\n if (typeof object.drawFlag[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.StyleAttributeProto.drawFlag: object expected\");\r\n message.drawFlag[i] = $root.keyhole.dbroot.DrawFlagProto.fromObject(object.drawFlag[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n StyleAttributeProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.drawFlag = [];\r\n if (options.defaults) {\r\n object.styleId = \"\";\r\n object.providerId = 0;\r\n object.polyColorAbgr = 4294967295;\r\n object.lineColorAbgr = 4294967295;\r\n object.lineWidth = 1;\r\n object.labelColorAbgr = 4294967295;\r\n object.labelScale = 1;\r\n object.placemarkIconColorAbgr = 4294967295;\r\n object.placemarkIconScale = 1;\r\n object.placemarkIconPath = null;\r\n object.placemarkIconX = 0;\r\n object.placemarkIconY = 0;\r\n object.placemarkIconWidth = 32;\r\n object.placemarkIconHeight = 32;\r\n object.popUp = null;\r\n }\r\n if (message.styleId != null && message.hasOwnProperty(\"styleId\"))\r\n object.styleId = message.styleId;\r\n if (message.providerId != null && message.hasOwnProperty(\"providerId\"))\r\n object.providerId = message.providerId;\r\n if (message.polyColorAbgr != null && message.hasOwnProperty(\"polyColorAbgr\"))\r\n object.polyColorAbgr = message.polyColorAbgr;\r\n if (message.lineColorAbgr != null && message.hasOwnProperty(\"lineColorAbgr\"))\r\n object.lineColorAbgr = message.lineColorAbgr;\r\n if (message.lineWidth != null && message.hasOwnProperty(\"lineWidth\"))\r\n object.lineWidth = options.json && !isFinite(message.lineWidth) ? String(message.lineWidth) : message.lineWidth;\r\n if (message.labelColorAbgr != null && message.hasOwnProperty(\"labelColorAbgr\"))\r\n object.labelColorAbgr = message.labelColorAbgr;\r\n if (message.labelScale != null && message.hasOwnProperty(\"labelScale\"))\r\n object.labelScale = options.json && !isFinite(message.labelScale) ? String(message.labelScale) : message.labelScale;\r\n if (message.placemarkIconColorAbgr != null && message.hasOwnProperty(\"placemarkIconColorAbgr\"))\r\n object.placemarkIconColorAbgr = message.placemarkIconColorAbgr;\r\n if (message.placemarkIconScale != null && message.hasOwnProperty(\"placemarkIconScale\"))\r\n object.placemarkIconScale = options.json && !isFinite(message.placemarkIconScale) ? String(message.placemarkIconScale) : message.placemarkIconScale;\r\n if (message.placemarkIconPath != null && message.hasOwnProperty(\"placemarkIconPath\"))\r\n object.placemarkIconPath = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.placemarkIconPath, options);\r\n if (message.placemarkIconX != null && message.hasOwnProperty(\"placemarkIconX\"))\r\n object.placemarkIconX = message.placemarkIconX;\r\n if (message.placemarkIconY != null && message.hasOwnProperty(\"placemarkIconY\"))\r\n object.placemarkIconY = message.placemarkIconY;\r\n if (message.placemarkIconWidth != null && message.hasOwnProperty(\"placemarkIconWidth\"))\r\n object.placemarkIconWidth = message.placemarkIconWidth;\r\n if (message.placemarkIconHeight != null && message.hasOwnProperty(\"placemarkIconHeight\"))\r\n object.placemarkIconHeight = message.placemarkIconHeight;\r\n if (message.popUp != null && message.hasOwnProperty(\"popUp\"))\r\n object.popUp = $root.keyhole.dbroot.PopUpProto.toObject(message.popUp, options);\r\n if (message.drawFlag && message.drawFlag.length) {\r\n object.drawFlag = [];\r\n for (var j = 0; j < message.drawFlag.length; ++j)\r\n object.drawFlag[j] = $root.keyhole.dbroot.DrawFlagProto.toObject(message.drawFlag[j], options);\r\n }\r\n return object;\r\n };\r\n \r\n StyleAttributeProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n StyleAttributeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.StyleAttributeProto\";\r\n };\r\n \r\n return StyleAttributeProto;\r\n })();\r\n \r\n dbroot.StyleMapProto = (function() {\r\n \r\n function StyleMapProto(properties) {\r\n this.channelId = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n StyleMapProto.prototype.styleMapId = 0;\r\n StyleMapProto.prototype.channelId = $util.emptyArray;\r\n StyleMapProto.prototype.normalStyleAttribute = 0;\r\n StyleMapProto.prototype.highlightStyleAttribute = 0;\r\n \r\n StyleMapProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.StyleMapProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.styleMapId = reader.int32();\r\n break;\r\n }\r\n case 2: {\r\n if (!(message.channelId && message.channelId.length))\r\n message.channelId = [];\r\n if ((tag & 7) === 2) {\r\n var end2 = reader.uint32() + reader.pos;\r\n while (reader.pos < end2)\r\n message.channelId.push(reader.int32());\r\n } else\r\n message.channelId.push(reader.int32());\r\n break;\r\n }\r\n case 3: {\r\n message.normalStyleAttribute = reader.int32();\r\n break;\r\n }\r\n case 4: {\r\n message.highlightStyleAttribute = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"styleMapId\"))\r\n throw $util.ProtocolError(\"missing required 'styleMapId'\", { instance: message });\r\n return message;\r\n };\r\n \r\n StyleMapProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isInteger(message.styleMapId))\r\n return \"styleMapId: integer expected\";\r\n if (message.channelId != null && message.hasOwnProperty(\"channelId\")) {\r\n if (!Array.isArray(message.channelId))\r\n return \"channelId: array expected\";\r\n for (var i = 0; i < message.channelId.length; ++i)\r\n if (!$util.isInteger(message.channelId[i]))\r\n return \"channelId: integer[] expected\";\r\n }\r\n if (message.normalStyleAttribute != null && message.hasOwnProperty(\"normalStyleAttribute\"))\r\n if (!$util.isInteger(message.normalStyleAttribute))\r\n return \"normalStyleAttribute: integer expected\";\r\n if (message.highlightStyleAttribute != null && message.hasOwnProperty(\"highlightStyleAttribute\"))\r\n if (!$util.isInteger(message.highlightStyleAttribute))\r\n return \"highlightStyleAttribute: integer expected\";\r\n return null;\r\n };\r\n \r\n StyleMapProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.StyleMapProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.StyleMapProto();\r\n if (object.styleMapId != null)\r\n message.styleMapId = object.styleMapId | 0;\r\n if (object.channelId) {\r\n if (!Array.isArray(object.channelId))\r\n throw TypeError(\".keyhole.dbroot.StyleMapProto.channelId: array expected\");\r\n message.channelId = [];\r\n for (var i = 0; i < object.channelId.length; ++i)\r\n message.channelId[i] = object.channelId[i] | 0;\r\n }\r\n if (object.normalStyleAttribute != null)\r\n message.normalStyleAttribute = object.normalStyleAttribute | 0;\r\n if (object.highlightStyleAttribute != null)\r\n message.highlightStyleAttribute = object.highlightStyleAttribute | 0;\r\n return message;\r\n };\r\n \r\n StyleMapProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.channelId = [];\r\n if (options.defaults) {\r\n object.styleMapId = 0;\r\n object.normalStyleAttribute = 0;\r\n object.highlightStyleAttribute = 0;\r\n }\r\n if (message.styleMapId != null && message.hasOwnProperty(\"styleMapId\"))\r\n object.styleMapId = message.styleMapId;\r\n if (message.channelId && message.channelId.length) {\r\n object.channelId = [];\r\n for (var j = 0; j < message.channelId.length; ++j)\r\n object.channelId[j] = message.channelId[j];\r\n }\r\n if (message.normalStyleAttribute != null && message.hasOwnProperty(\"normalStyleAttribute\"))\r\n object.normalStyleAttribute = message.normalStyleAttribute;\r\n if (message.highlightStyleAttribute != null && message.hasOwnProperty(\"highlightStyleAttribute\"))\r\n object.highlightStyleAttribute = message.highlightStyleAttribute;\r\n return object;\r\n };\r\n \r\n StyleMapProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n StyleMapProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.StyleMapProto\";\r\n };\r\n \r\n return StyleMapProto;\r\n })();\r\n \r\n dbroot.ZoomRangeProto = (function() {\r\n \r\n function ZoomRangeProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n ZoomRangeProto.prototype.minZoom = 0;\r\n ZoomRangeProto.prototype.maxZoom = 0;\r\n \r\n ZoomRangeProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ZoomRangeProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.minZoom = reader.int32();\r\n break;\r\n }\r\n case 2: {\r\n message.maxZoom = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"minZoom\"))\r\n throw $util.ProtocolError(\"missing required 'minZoom'\", { instance: message });\r\n if (!message.hasOwnProperty(\"maxZoom\"))\r\n throw $util.ProtocolError(\"missing required 'maxZoom'\", { instance: message });\r\n return message;\r\n };\r\n \r\n ZoomRangeProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isInteger(message.minZoom))\r\n return \"minZoom: integer expected\";\r\n if (!$util.isInteger(message.maxZoom))\r\n return \"maxZoom: integer expected\";\r\n return null;\r\n };\r\n \r\n ZoomRangeProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.ZoomRangeProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.ZoomRangeProto();\r\n if (object.minZoom != null)\r\n message.minZoom = object.minZoom | 0;\r\n if (object.maxZoom != null)\r\n message.maxZoom = object.maxZoom | 0;\r\n return message;\r\n };\r\n \r\n ZoomRangeProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.minZoom = 0;\r\n object.maxZoom = 0;\r\n }\r\n if (message.minZoom != null && message.hasOwnProperty(\"minZoom\"))\r\n object.minZoom = message.minZoom;\r\n if (message.maxZoom != null && message.hasOwnProperty(\"maxZoom\"))\r\n object.maxZoom = message.maxZoom;\r\n return object;\r\n };\r\n \r\n ZoomRangeProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n ZoomRangeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.ZoomRangeProto\";\r\n };\r\n \r\n return ZoomRangeProto;\r\n })();\r\n \r\n dbroot.DrawFlagProto = (function() {\r\n \r\n function DrawFlagProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n DrawFlagProto.prototype.drawFlagType = 1;\r\n \r\n DrawFlagProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DrawFlagProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.drawFlagType = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"drawFlagType\"))\r\n throw $util.ProtocolError(\"missing required 'drawFlagType'\", { instance: message });\r\n return message;\r\n };\r\n \r\n DrawFlagProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n switch (message.drawFlagType) {\r\n default:\r\n return \"drawFlagType: enum value expected\";\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n break;\r\n }\r\n return null;\r\n };\r\n \r\n DrawFlagProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.DrawFlagProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.DrawFlagProto();\r\n switch (object.drawFlagType) {\r\n case \"TYPE_FILL_ONLY\":\r\n case 1:\r\n message.drawFlagType = 1;\r\n break;\r\n case \"TYPE_OUTLINE_ONLY\":\r\n case 2:\r\n message.drawFlagType = 2;\r\n break;\r\n case \"TYPE_FILL_AND_OUTLINE\":\r\n case 3:\r\n message.drawFlagType = 3;\r\n break;\r\n case \"TYPE_ANTIALIASING\":\r\n case 4:\r\n message.drawFlagType = 4;\r\n break;\r\n case \"TYPE_CENTER_LABEL\":\r\n case 5:\r\n message.drawFlagType = 5;\r\n break;\r\n }\r\n return message;\r\n };\r\n \r\n DrawFlagProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.drawFlagType = options.enums === String ? \"TYPE_FILL_ONLY\" : 1;\r\n if (message.drawFlagType != null && message.hasOwnProperty(\"drawFlagType\"))\r\n object.drawFlagType = options.enums === String ? $root.keyhole.dbroot.DrawFlagProto.DrawFlagType[message.drawFlagType] : message.drawFlagType;\r\n return object;\r\n };\r\n \r\n DrawFlagProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n DrawFlagProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.DrawFlagProto\";\r\n };\r\n \r\n DrawFlagProto.DrawFlagType = (function() {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[1] = \"TYPE_FILL_ONLY\"] = 1;\r\n values[valuesById[2] = \"TYPE_OUTLINE_ONLY\"] = 2;\r\n values[valuesById[3] = \"TYPE_FILL_AND_OUTLINE\"] = 3;\r\n values[valuesById[4] = \"TYPE_ANTIALIASING\"] = 4;\r\n values[valuesById[5] = \"TYPE_CENTER_LABEL\"] = 5;\r\n return values;\r\n })();\r\n \r\n return DrawFlagProto;\r\n })();\r\n \r\n dbroot.LayerProto = (function() {\r\n \r\n function LayerProto(properties) {\r\n this.zoomRange = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n LayerProto.prototype.zoomRange = $util.emptyArray;\r\n LayerProto.prototype.preserveTextLevel = 30;\r\n LayerProto.prototype.lodBeginTransition = false;\r\n LayerProto.prototype.lodEndTransition = false;\r\n \r\n LayerProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.LayerProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n if (!(message.zoomRange && message.zoomRange.length))\r\n message.zoomRange = [];\r\n message.zoomRange.push($root.keyhole.dbroot.ZoomRangeProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 2: {\r\n message.preserveTextLevel = reader.int32();\r\n break;\r\n }\r\n case 4: {\r\n message.lodBeginTransition = reader.bool();\r\n break;\r\n }\r\n case 5: {\r\n message.lodEndTransition = reader.bool();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n LayerProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.zoomRange != null && message.hasOwnProperty(\"zoomRange\")) {\r\n if (!Array.isArray(message.zoomRange))\r\n return \"zoomRange: array expected\";\r\n for (var i = 0; i < message.zoomRange.length; ++i) {\r\n var error = $root.keyhole.dbroot.ZoomRangeProto.verify(message.zoomRange[i]);\r\n if (error)\r\n return \"zoomRange.\" + error;\r\n }\r\n }\r\n if (message.preserveTextLevel != null && message.hasOwnProperty(\"preserveTextLevel\"))\r\n if (!$util.isInteger(message.preserveTextLevel))\r\n return \"preserveTextLevel: integer expected\";\r\n if (message.lodBeginTransition != null && message.hasOwnProperty(\"lodBeginTransition\"))\r\n if (typeof message.lodBeginTransition !== \"boolean\")\r\n return \"lodBeginTransition: boolean expected\";\r\n if (message.lodEndTransition != null && message.hasOwnProperty(\"lodEndTransition\"))\r\n if (typeof message.lodEndTransition !== \"boolean\")\r\n return \"lodEndTransition: boolean expected\";\r\n return null;\r\n };\r\n \r\n LayerProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.LayerProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.LayerProto();\r\n if (object.zoomRange) {\r\n if (!Array.isArray(object.zoomRange))\r\n throw TypeError(\".keyhole.dbroot.LayerProto.zoomRange: array expected\");\r\n message.zoomRange = [];\r\n for (var i = 0; i < object.zoomRange.length; ++i) {\r\n if (typeof object.zoomRange[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.LayerProto.zoomRange: object expected\");\r\n message.zoomRange[i] = $root.keyhole.dbroot.ZoomRangeProto.fromObject(object.zoomRange[i]);\r\n }\r\n }\r\n if (object.preserveTextLevel != null)\r\n message.preserveTextLevel = object.preserveTextLevel | 0;\r\n if (object.lodBeginTransition != null)\r\n message.lodBeginTransition = Boolean(object.lodBeginTransition);\r\n if (object.lodEndTransition != null)\r\n message.lodEndTransition = Boolean(object.lodEndTransition);\r\n return message;\r\n };\r\n \r\n LayerProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.zoomRange = [];\r\n if (options.defaults) {\r\n object.preserveTextLevel = 30;\r\n object.lodBeginTransition = false;\r\n object.lodEndTransition = false;\r\n }\r\n if (message.zoomRange && message.zoomRange.length) {\r\n object.zoomRange = [];\r\n for (var j = 0; j < message.zoomRange.length; ++j)\r\n object.zoomRange[j] = $root.keyhole.dbroot.ZoomRangeProto.toObject(message.zoomRange[j], options);\r\n }\r\n if (message.preserveTextLevel != null && message.hasOwnProperty(\"preserveTextLevel\"))\r\n object.preserveTextLevel = message.preserveTextLevel;\r\n if (message.lodBeginTransition != null && message.hasOwnProperty(\"lodBeginTransition\"))\r\n object.lodBeginTransition = message.lodBeginTransition;\r\n if (message.lodEndTransition != null && message.hasOwnProperty(\"lodEndTransition\"))\r\n object.lodEndTransition = message.lodEndTransition;\r\n return object;\r\n };\r\n \r\n LayerProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n LayerProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.LayerProto\";\r\n };\r\n \r\n return LayerProto;\r\n })();\r\n \r\n dbroot.FolderProto = (function() {\r\n \r\n function FolderProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n FolderProto.prototype.isExpandable = true;\r\n \r\n FolderProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.FolderProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.isExpandable = reader.bool();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n FolderProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.isExpandable != null && message.hasOwnProperty(\"isExpandable\"))\r\n if (typeof message.isExpandable !== \"boolean\")\r\n return \"isExpandable: boolean expected\";\r\n return null;\r\n };\r\n \r\n FolderProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.FolderProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.FolderProto();\r\n if (object.isExpandable != null)\r\n message.isExpandable = Boolean(object.isExpandable);\r\n return message;\r\n };\r\n \r\n FolderProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.isExpandable = true;\r\n if (message.isExpandable != null && message.hasOwnProperty(\"isExpandable\"))\r\n object.isExpandable = message.isExpandable;\r\n return object;\r\n };\r\n \r\n FolderProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n FolderProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.FolderProto\";\r\n };\r\n \r\n return FolderProto;\r\n })();\r\n \r\n dbroot.RequirementProto = (function() {\r\n \r\n function RequirementProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n RequirementProto.prototype.requiredVram = \"\";\r\n RequirementProto.prototype.requiredClientVer = \"\";\r\n RequirementProto.prototype.probability = \"\";\r\n RequirementProto.prototype.requiredUserAgent = \"\";\r\n RequirementProto.prototype.requiredClientCapabilities = \"\";\r\n \r\n RequirementProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.RequirementProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 3: {\r\n message.requiredVram = reader.string();\r\n break;\r\n }\r\n case 4: {\r\n message.requiredClientVer = reader.string();\r\n break;\r\n }\r\n case 5: {\r\n message.probability = reader.string();\r\n break;\r\n }\r\n case 6: {\r\n message.requiredUserAgent = reader.string();\r\n break;\r\n }\r\n case 7: {\r\n message.requiredClientCapabilities = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n RequirementProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.requiredVram != null && message.hasOwnProperty(\"requiredVram\"))\r\n if (!$util.isString(message.requiredVram))\r\n return \"requiredVram: string expected\";\r\n if (message.requiredClientVer != null && message.hasOwnProperty(\"requiredClientVer\"))\r\n if (!$util.isString(message.requiredClientVer))\r\n return \"requiredClientVer: string expected\";\r\n if (message.probability != null && message.hasOwnProperty(\"probability\"))\r\n if (!$util.isString(message.probability))\r\n return \"probability: string expected\";\r\n if (message.requiredUserAgent != null && message.hasOwnProperty(\"requiredUserAgent\"))\r\n if (!$util.isString(message.requiredUserAgent))\r\n return \"requiredUserAgent: string expected\";\r\n if (message.requiredClientCapabilities != null && message.hasOwnProperty(\"requiredClientCapabilities\"))\r\n if (!$util.isString(message.requiredClientCapabilities))\r\n return \"requiredClientCapabilities: string expected\";\r\n return null;\r\n };\r\n \r\n RequirementProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.RequirementProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.RequirementProto();\r\n if (object.requiredVram != null)\r\n message.requiredVram = String(object.requiredVram);\r\n if (object.requiredClientVer != null)\r\n message.requiredClientVer = String(object.requiredClientVer);\r\n if (object.probability != null)\r\n message.probability = String(object.probability);\r\n if (object.requiredUserAgent != null)\r\n message.requiredUserAgent = String(object.requiredUserAgent);\r\n if (object.requiredClientCapabilities != null)\r\n message.requiredClientCapabilities = String(object.requiredClientCapabilities);\r\n return message;\r\n };\r\n \r\n RequirementProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.requiredVram = \"\";\r\n object.requiredClientVer = \"\";\r\n object.probability = \"\";\r\n object.requiredUserAgent = \"\";\r\n object.requiredClientCapabilities = \"\";\r\n }\r\n if (message.requiredVram != null && message.hasOwnProperty(\"requiredVram\"))\r\n object.requiredVram = message.requiredVram;\r\n if (message.requiredClientVer != null && message.hasOwnProperty(\"requiredClientVer\"))\r\n object.requiredClientVer = message.requiredClientVer;\r\n if (message.probability != null && message.hasOwnProperty(\"probability\"))\r\n object.probability = message.probability;\r\n if (message.requiredUserAgent != null && message.hasOwnProperty(\"requiredUserAgent\"))\r\n object.requiredUserAgent = message.requiredUserAgent;\r\n if (message.requiredClientCapabilities != null && message.hasOwnProperty(\"requiredClientCapabilities\"))\r\n object.requiredClientCapabilities = message.requiredClientCapabilities;\r\n return object;\r\n };\r\n \r\n RequirementProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n RequirementProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.RequirementProto\";\r\n };\r\n \r\n return RequirementProto;\r\n })();\r\n \r\n dbroot.LookAtProto = (function() {\r\n \r\n function LookAtProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n LookAtProto.prototype.longitude = 0;\r\n LookAtProto.prototype.latitude = 0;\r\n LookAtProto.prototype.range = 0;\r\n LookAtProto.prototype.tilt = 0;\r\n LookAtProto.prototype.heading = 0;\r\n \r\n LookAtProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.LookAtProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.longitude = reader.float();\r\n break;\r\n }\r\n case 2: {\r\n message.latitude = reader.float();\r\n break;\r\n }\r\n case 3: {\r\n message.range = reader.float();\r\n break;\r\n }\r\n case 4: {\r\n message.tilt = reader.float();\r\n break;\r\n }\r\n case 5: {\r\n message.heading = reader.float();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"longitude\"))\r\n throw $util.ProtocolError(\"missing required 'longitude'\", { instance: message });\r\n if (!message.hasOwnProperty(\"latitude\"))\r\n throw $util.ProtocolError(\"missing required 'latitude'\", { instance: message });\r\n return message;\r\n };\r\n \r\n LookAtProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (typeof message.longitude !== \"number\")\r\n return \"longitude: number expected\";\r\n if (typeof message.latitude !== \"number\")\r\n return \"latitude: number expected\";\r\n if (message.range != null && message.hasOwnProperty(\"range\"))\r\n if (typeof message.range !== \"number\")\r\n return \"range: number expected\";\r\n if (message.tilt != null && message.hasOwnProperty(\"tilt\"))\r\n if (typeof message.tilt !== \"number\")\r\n return \"tilt: number expected\";\r\n if (message.heading != null && message.hasOwnProperty(\"heading\"))\r\n if (typeof message.heading !== \"number\")\r\n return \"heading: number expected\";\r\n return null;\r\n };\r\n \r\n LookAtProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.LookAtProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.LookAtProto();\r\n if (object.longitude != null)\r\n message.longitude = Number(object.longitude);\r\n if (object.latitude != null)\r\n message.latitude = Number(object.latitude);\r\n if (object.range != null)\r\n message.range = Number(object.range);\r\n if (object.tilt != null)\r\n message.tilt = Number(object.tilt);\r\n if (object.heading != null)\r\n message.heading = Number(object.heading);\r\n return message;\r\n };\r\n \r\n LookAtProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.longitude = 0;\r\n object.latitude = 0;\r\n object.range = 0;\r\n object.tilt = 0;\r\n object.heading = 0;\r\n }\r\n if (message.longitude != null && message.hasOwnProperty(\"longitude\"))\r\n object.longitude = options.json && !isFinite(message.longitude) ? String(message.longitude) : message.longitude;\r\n if (message.latitude != null && message.hasOwnProperty(\"latitude\"))\r\n object.latitude = options.json && !isFinite(message.latitude) ? String(message.latitude) : message.latitude;\r\n if (message.range != null && message.hasOwnProperty(\"range\"))\r\n object.range = options.json && !isFinite(message.range) ? String(message.range) : message.range;\r\n if (message.tilt != null && message.hasOwnProperty(\"tilt\"))\r\n object.tilt = options.json && !isFinite(message.tilt) ? String(message.tilt) : message.tilt;\r\n if (message.heading != null && message.hasOwnProperty(\"heading\"))\r\n object.heading = options.json && !isFinite(message.heading) ? String(message.heading) : message.heading;\r\n return object;\r\n };\r\n \r\n LookAtProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n LookAtProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.LookAtProto\";\r\n };\r\n \r\n return LookAtProto;\r\n })();\r\n \r\n dbroot.NestedFeatureProto = (function() {\r\n \r\n function NestedFeatureProto(properties) {\r\n this.children = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n NestedFeatureProto.prototype.featureType = 1;\r\n NestedFeatureProto.prototype.kmlUrl = null;\r\n NestedFeatureProto.prototype.databaseUrl = \"\";\r\n NestedFeatureProto.prototype.layer = null;\r\n NestedFeatureProto.prototype.folder = null;\r\n NestedFeatureProto.prototype.requirement = null;\r\n NestedFeatureProto.prototype.channelId = 0;\r\n NestedFeatureProto.prototype.displayName = null;\r\n NestedFeatureProto.prototype.isVisible = true;\r\n NestedFeatureProto.prototype.isEnabled = true;\r\n NestedFeatureProto.prototype.isChecked = false;\r\n NestedFeatureProto.prototype.layerMenuIconPath = \"icons/773_l.png\";\r\n NestedFeatureProto.prototype.description = null;\r\n NestedFeatureProto.prototype.lookAt = null;\r\n NestedFeatureProto.prototype.assetUuid = \"\";\r\n NestedFeatureProto.prototype.isSaveLocked = true;\r\n NestedFeatureProto.prototype.children = $util.emptyArray;\r\n NestedFeatureProto.prototype.clientConfigScriptName = \"\";\r\n NestedFeatureProto.prototype.dioramaDataChannelBase = -1;\r\n NestedFeatureProto.prototype.replicaDataChannelBase = -1;\r\n \r\n NestedFeatureProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.NestedFeatureProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.featureType = reader.int32();\r\n break;\r\n }\r\n case 2: {\r\n message.kmlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 21: {\r\n message.databaseUrl = reader.string();\r\n break;\r\n }\r\n case 3: {\r\n message.layer = $root.keyhole.dbroot.LayerProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 4: {\r\n message.folder = $root.keyhole.dbroot.FolderProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 5: {\r\n message.requirement = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 6: {\r\n message.channelId = reader.int32();\r\n break;\r\n }\r\n case 7: {\r\n message.displayName = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 8: {\r\n message.isVisible = reader.bool();\r\n break;\r\n }\r\n case 9: {\r\n message.isEnabled = reader.bool();\r\n break;\r\n }\r\n case 10: {\r\n message.isChecked = reader.bool();\r\n break;\r\n }\r\n case 11: {\r\n message.layerMenuIconPath = reader.string();\r\n break;\r\n }\r\n case 12: {\r\n message.description = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 13: {\r\n message.lookAt = $root.keyhole.dbroot.LookAtProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 15: {\r\n message.assetUuid = reader.string();\r\n break;\r\n }\r\n case 16: {\r\n message.isSaveLocked = reader.bool();\r\n break;\r\n }\r\n case 17: {\r\n if (!(message.children && message.children.length))\r\n message.children = [];\r\n message.children.push($root.keyhole.dbroot.NestedFeatureProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 18: {\r\n message.clientConfigScriptName = reader.string();\r\n break;\r\n }\r\n case 19: {\r\n message.dioramaDataChannelBase = reader.int32();\r\n break;\r\n }\r\n case 20: {\r\n message.replicaDataChannelBase = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"channelId\"))\r\n throw $util.ProtocolError(\"missing required 'channelId'\", { instance: message });\r\n return message;\r\n };\r\n \r\n NestedFeatureProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.featureType != null && message.hasOwnProperty(\"featureType\"))\r\n switch (message.featureType) {\r\n default:\r\n return \"featureType: enum value expected\";\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n break;\r\n }\r\n if (message.kmlUrl != null && message.hasOwnProperty(\"kmlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlUrl);\r\n if (error)\r\n return \"kmlUrl.\" + error;\r\n }\r\n if (message.databaseUrl != null && message.hasOwnProperty(\"databaseUrl\"))\r\n if (!$util.isString(message.databaseUrl))\r\n return \"databaseUrl: string expected\";\r\n if (message.layer != null && message.hasOwnProperty(\"layer\")) {\r\n var error = $root.keyhole.dbroot.LayerProto.verify(message.layer);\r\n if (error)\r\n return \"layer.\" + error;\r\n }\r\n if (message.folder != null && message.hasOwnProperty(\"folder\")) {\r\n var error = $root.keyhole.dbroot.FolderProto.verify(message.folder);\r\n if (error)\r\n return \"folder.\" + error;\r\n }\r\n if (message.requirement != null && message.hasOwnProperty(\"requirement\")) {\r\n var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirement);\r\n if (error)\r\n return \"requirement.\" + error;\r\n }\r\n if (!$util.isInteger(message.channelId))\r\n return \"channelId: integer expected\";\r\n if (message.displayName != null && message.hasOwnProperty(\"displayName\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.displayName);\r\n if (error)\r\n return \"displayName.\" + error;\r\n }\r\n if (message.isVisible != null && message.hasOwnProperty(\"isVisible\"))\r\n if (typeof message.isVisible !== \"boolean\")\r\n return \"isVisible: boolean expected\";\r\n if (message.isEnabled != null && message.hasOwnProperty(\"isEnabled\"))\r\n if (typeof message.isEnabled !== \"boolean\")\r\n return \"isEnabled: boolean expected\";\r\n if (message.isChecked != null && message.hasOwnProperty(\"isChecked\"))\r\n if (typeof message.isChecked !== \"boolean\")\r\n return \"isChecked: boolean expected\";\r\n if (message.layerMenuIconPath != null && message.hasOwnProperty(\"layerMenuIconPath\"))\r\n if (!$util.isString(message.layerMenuIconPath))\r\n return \"layerMenuIconPath: string expected\";\r\n if (message.description != null && message.hasOwnProperty(\"description\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.description);\r\n if (error)\r\n return \"description.\" + error;\r\n }\r\n if (message.lookAt != null && message.hasOwnProperty(\"lookAt\")) {\r\n var error = $root.keyhole.dbroot.LookAtProto.verify(message.lookAt);\r\n if (error)\r\n return \"lookAt.\" + error;\r\n }\r\n if (message.assetUuid != null && message.hasOwnProperty(\"assetUuid\"))\r\n if (!$util.isString(message.assetUuid))\r\n return \"assetUuid: string expected\";\r\n if (message.isSaveLocked != null && message.hasOwnProperty(\"isSaveLocked\"))\r\n if (typeof message.isSaveLocked !== \"boolean\")\r\n return \"isSaveLocked: boolean expected\";\r\n if (message.children != null && message.hasOwnProperty(\"children\")) {\r\n if (!Array.isArray(message.children))\r\n return \"children: array expected\";\r\n for (var i = 0; i < message.children.length; ++i) {\r\n var error = $root.keyhole.dbroot.NestedFeatureProto.verify(message.children[i]);\r\n if (error)\r\n return \"children.\" + error;\r\n }\r\n }\r\n if (message.clientConfigScriptName != null && message.hasOwnProperty(\"clientConfigScriptName\"))\r\n if (!$util.isString(message.clientConfigScriptName))\r\n return \"clientConfigScriptName: string expected\";\r\n if (message.dioramaDataChannelBase != null && message.hasOwnProperty(\"dioramaDataChannelBase\"))\r\n if (!$util.isInteger(message.dioramaDataChannelBase))\r\n return \"dioramaDataChannelBase: integer expected\";\r\n if (message.replicaDataChannelBase != null && message.hasOwnProperty(\"replicaDataChannelBase\"))\r\n if (!$util.isInteger(message.replicaDataChannelBase))\r\n return \"replicaDataChannelBase: integer expected\";\r\n return null;\r\n };\r\n \r\n NestedFeatureProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.NestedFeatureProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.NestedFeatureProto();\r\n switch (object.featureType) {\r\n case \"TYPE_POINT_Z\":\r\n case 1:\r\n message.featureType = 1;\r\n break;\r\n case \"TYPE_POLYGON_Z\":\r\n case 2:\r\n message.featureType = 2;\r\n break;\r\n case \"TYPE_LINE_Z\":\r\n case 3:\r\n message.featureType = 3;\r\n break;\r\n case \"TYPE_TERRAIN\":\r\n case 4:\r\n message.featureType = 4;\r\n break;\r\n }\r\n if (object.kmlUrl != null) {\r\n if (typeof object.kmlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.kmlUrl: object expected\");\r\n message.kmlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlUrl);\r\n }\r\n if (object.databaseUrl != null)\r\n message.databaseUrl = String(object.databaseUrl);\r\n if (object.layer != null) {\r\n if (typeof object.layer !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.layer: object expected\");\r\n message.layer = $root.keyhole.dbroot.LayerProto.fromObject(object.layer);\r\n }\r\n if (object.folder != null) {\r\n if (typeof object.folder !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.folder: object expected\");\r\n message.folder = $root.keyhole.dbroot.FolderProto.fromObject(object.folder);\r\n }\r\n if (object.requirement != null) {\r\n if (typeof object.requirement !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.requirement: object expected\");\r\n message.requirement = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirement);\r\n }\r\n if (object.channelId != null)\r\n message.channelId = object.channelId | 0;\r\n if (object.displayName != null) {\r\n if (typeof object.displayName !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.displayName: object expected\");\r\n message.displayName = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.displayName);\r\n }\r\n if (object.isVisible != null)\r\n message.isVisible = Boolean(object.isVisible);\r\n if (object.isEnabled != null)\r\n message.isEnabled = Boolean(object.isEnabled);\r\n if (object.isChecked != null)\r\n message.isChecked = Boolean(object.isChecked);\r\n if (object.layerMenuIconPath != null)\r\n message.layerMenuIconPath = String(object.layerMenuIconPath);\r\n if (object.description != null) {\r\n if (typeof object.description !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.description: object expected\");\r\n message.description = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.description);\r\n }\r\n if (object.lookAt != null) {\r\n if (typeof object.lookAt !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.lookAt: object expected\");\r\n message.lookAt = $root.keyhole.dbroot.LookAtProto.fromObject(object.lookAt);\r\n }\r\n if (object.assetUuid != null)\r\n message.assetUuid = String(object.assetUuid);\r\n if (object.isSaveLocked != null)\r\n message.isSaveLocked = Boolean(object.isSaveLocked);\r\n if (object.children) {\r\n if (!Array.isArray(object.children))\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.children: array expected\");\r\n message.children = [];\r\n for (var i = 0; i < object.children.length; ++i) {\r\n if (typeof object.children[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.NestedFeatureProto.children: object expected\");\r\n message.children[i] = $root.keyhole.dbroot.NestedFeatureProto.fromObject(object.children[i]);\r\n }\r\n }\r\n if (object.clientConfigScriptName != null)\r\n message.clientConfigScriptName = String(object.clientConfigScriptName);\r\n if (object.dioramaDataChannelBase != null)\r\n message.dioramaDataChannelBase = object.dioramaDataChannelBase | 0;\r\n if (object.replicaDataChannelBase != null)\r\n message.replicaDataChannelBase = object.replicaDataChannelBase | 0;\r\n return message;\r\n };\r\n \r\n NestedFeatureProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.children = [];\r\n if (options.defaults) {\r\n object.featureType = options.enums === String ? \"TYPE_POINT_Z\" : 1;\r\n object.kmlUrl = null;\r\n object.layer = null;\r\n object.folder = null;\r\n object.requirement = null;\r\n object.channelId = 0;\r\n object.displayName = null;\r\n object.isVisible = true;\r\n object.isEnabled = true;\r\n object.isChecked = false;\r\n object.layerMenuIconPath = \"icons/773_l.png\";\r\n object.description = null;\r\n object.lookAt = null;\r\n object.assetUuid = \"\";\r\n object.isSaveLocked = true;\r\n object.clientConfigScriptName = \"\";\r\n object.dioramaDataChannelBase = -1;\r\n object.replicaDataChannelBase = -1;\r\n object.databaseUrl = \"\";\r\n }\r\n if (message.featureType != null && message.hasOwnProperty(\"featureType\"))\r\n object.featureType = options.enums === String ? $root.keyhole.dbroot.NestedFeatureProto.FeatureType[message.featureType] : message.featureType;\r\n if (message.kmlUrl != null && message.hasOwnProperty(\"kmlUrl\"))\r\n object.kmlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlUrl, options);\r\n if (message.layer != null && message.hasOwnProperty(\"layer\"))\r\n object.layer = $root.keyhole.dbroot.LayerProto.toObject(message.layer, options);\r\n if (message.folder != null && message.hasOwnProperty(\"folder\"))\r\n object.folder = $root.keyhole.dbroot.FolderProto.toObject(message.folder, options);\r\n if (message.requirement != null && message.hasOwnProperty(\"requirement\"))\r\n object.requirement = $root.keyhole.dbroot.RequirementProto.toObject(message.requirement, options);\r\n if (message.channelId != null && message.hasOwnProperty(\"channelId\"))\r\n object.channelId = message.channelId;\r\n if (message.displayName != null && message.hasOwnProperty(\"displayName\"))\r\n object.displayName = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.displayName, options);\r\n if (message.isVisible != null && message.hasOwnProperty(\"isVisible\"))\r\n object.isVisible = message.isVisible;\r\n if (message.isEnabled != null && message.hasOwnProperty(\"isEnabled\"))\r\n object.isEnabled = message.isEnabled;\r\n if (message.isChecked != null && message.hasOwnProperty(\"isChecked\"))\r\n object.isChecked = message.isChecked;\r\n if (message.layerMenuIconPath != null && message.hasOwnProperty(\"layerMenuIconPath\"))\r\n object.layerMenuIconPath = message.layerMenuIconPath;\r\n if (message.description != null && message.hasOwnProperty(\"description\"))\r\n object.description = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.description, options);\r\n if (message.lookAt != null && message.hasOwnProperty(\"lookAt\"))\r\n object.lookAt = $root.keyhole.dbroot.LookAtProto.toObject(message.lookAt, options);\r\n if (message.assetUuid != null && message.hasOwnProperty(\"assetUuid\"))\r\n object.assetUuid = message.assetUuid;\r\n if (message.isSaveLocked != null && message.hasOwnProperty(\"isSaveLocked\"))\r\n object.isSaveLocked = message.isSaveLocked;\r\n if (message.children && message.children.length) {\r\n object.children = [];\r\n for (var j = 0; j < message.children.length; ++j)\r\n object.children[j] = $root.keyhole.dbroot.NestedFeatureProto.toObject(message.children[j], options);\r\n }\r\n if (message.clientConfigScriptName != null && message.hasOwnProperty(\"clientConfigScriptName\"))\r\n object.clientConfigScriptName = message.clientConfigScriptName;\r\n if (message.dioramaDataChannelBase != null && message.hasOwnProperty(\"dioramaDataChannelBase\"))\r\n object.dioramaDataChannelBase = message.dioramaDataChannelBase;\r\n if (message.replicaDataChannelBase != null && message.hasOwnProperty(\"replicaDataChannelBase\"))\r\n object.replicaDataChannelBase = message.replicaDataChannelBase;\r\n if (message.databaseUrl != null && message.hasOwnProperty(\"databaseUrl\"))\r\n object.databaseUrl = message.databaseUrl;\r\n return object;\r\n };\r\n \r\n NestedFeatureProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n NestedFeatureProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.NestedFeatureProto\";\r\n };\r\n \r\n NestedFeatureProto.FeatureType = (function() {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[1] = \"TYPE_POINT_Z\"] = 1;\r\n values[valuesById[2] = \"TYPE_POLYGON_Z\"] = 2;\r\n values[valuesById[3] = \"TYPE_LINE_Z\"] = 3;\r\n values[valuesById[4] = \"TYPE_TERRAIN\"] = 4;\r\n return values;\r\n })();\r\n \r\n return NestedFeatureProto;\r\n })();\r\n \r\n dbroot.MfeDomainFeaturesProto = (function() {\r\n \r\n function MfeDomainFeaturesProto(properties) {\r\n this.supportedFeatures = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n MfeDomainFeaturesProto.prototype.countryCode = \"\";\r\n MfeDomainFeaturesProto.prototype.domainName = \"\";\r\n MfeDomainFeaturesProto.prototype.supportedFeatures = $util.emptyArray;\r\n \r\n MfeDomainFeaturesProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.MfeDomainFeaturesProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.countryCode = reader.string();\r\n break;\r\n }\r\n case 2: {\r\n message.domainName = reader.string();\r\n break;\r\n }\r\n case 3: {\r\n if (!(message.supportedFeatures && message.supportedFeatures.length))\r\n message.supportedFeatures = [];\r\n if ((tag & 7) === 2) {\r\n var end2 = reader.uint32() + reader.pos;\r\n while (reader.pos < end2)\r\n message.supportedFeatures.push(reader.int32());\r\n } else\r\n message.supportedFeatures.push(reader.int32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"countryCode\"))\r\n throw $util.ProtocolError(\"missing required 'countryCode'\", { instance: message });\r\n if (!message.hasOwnProperty(\"domainName\"))\r\n throw $util.ProtocolError(\"missing required 'domainName'\", { instance: message });\r\n return message;\r\n };\r\n \r\n MfeDomainFeaturesProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isString(message.countryCode))\r\n return \"countryCode: string expected\";\r\n if (!$util.isString(message.domainName))\r\n return \"domainName: string expected\";\r\n if (message.supportedFeatures != null && message.hasOwnProperty(\"supportedFeatures\")) {\r\n if (!Array.isArray(message.supportedFeatures))\r\n return \"supportedFeatures: array expected\";\r\n for (var i = 0; i < message.supportedFeatures.length; ++i)\r\n switch (message.supportedFeatures[i]) {\r\n default:\r\n return \"supportedFeatures: enum value[] expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n break;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n MfeDomainFeaturesProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.MfeDomainFeaturesProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.MfeDomainFeaturesProto();\r\n if (object.countryCode != null)\r\n message.countryCode = String(object.countryCode);\r\n if (object.domainName != null)\r\n message.domainName = String(object.domainName);\r\n if (object.supportedFeatures) {\r\n if (!Array.isArray(object.supportedFeatures))\r\n throw TypeError(\".keyhole.dbroot.MfeDomainFeaturesProto.supportedFeatures: array expected\");\r\n message.supportedFeatures = [];\r\n for (var i = 0; i < object.supportedFeatures.length; ++i)\r\n switch (object.supportedFeatures[i]) {\r\n default:\r\n case \"GEOCODING\":\r\n case 0:\r\n message.supportedFeatures[i] = 0;\r\n break;\r\n case \"LOCAL_SEARCH\":\r\n case 1:\r\n message.supportedFeatures[i] = 1;\r\n break;\r\n case \"DRIVING_DIRECTIONS\":\r\n case 2:\r\n message.supportedFeatures[i] = 2;\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n MfeDomainFeaturesProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.supportedFeatures = [];\r\n if (options.defaults) {\r\n object.countryCode = \"\";\r\n object.domainName = \"\";\r\n }\r\n if (message.countryCode != null && message.hasOwnProperty(\"countryCode\"))\r\n object.countryCode = message.countryCode;\r\n if (message.domainName != null && message.hasOwnProperty(\"domainName\"))\r\n object.domainName = message.domainName;\r\n if (message.supportedFeatures && message.supportedFeatures.length) {\r\n object.supportedFeatures = [];\r\n for (var j = 0; j < message.supportedFeatures.length; ++j)\r\n object.supportedFeatures[j] = options.enums === String ? $root.keyhole.dbroot.MfeDomainFeaturesProto.SupportedFeature[message.supportedFeatures[j]] : message.supportedFeatures[j];\r\n }\r\n return object;\r\n };\r\n \r\n MfeDomainFeaturesProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n MfeDomainFeaturesProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.MfeDomainFeaturesProto\";\r\n };\r\n \r\n MfeDomainFeaturesProto.SupportedFeature = (function() {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"GEOCODING\"] = 0;\r\n values[valuesById[1] = \"LOCAL_SEARCH\"] = 1;\r\n values[valuesById[2] = \"DRIVING_DIRECTIONS\"] = 2;\r\n return values;\r\n })();\r\n \r\n return MfeDomainFeaturesProto;\r\n })();\r\n \r\n dbroot.ClientOptionsProto = (function() {\r\n \r\n function ClientOptionsProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n ClientOptionsProto.prototype.disableDiskCache = false;\r\n ClientOptionsProto.prototype.disableEmbeddedBrowserVista = false;\r\n ClientOptionsProto.prototype.drawAtmosphere = true;\r\n ClientOptionsProto.prototype.drawStars = true;\r\n ClientOptionsProto.prototype.shaderFilePrefix = \"\";\r\n ClientOptionsProto.prototype.useProtobufQuadtreePackets = false;\r\n ClientOptionsProto.prototype.useExtendedCopyrightIds = true;\r\n ClientOptionsProto.prototype.precipitationsOptions = null;\r\n ClientOptionsProto.prototype.captureOptions = null;\r\n ClientOptionsProto.prototype.show_2dMapsIcon = true;\r\n ClientOptionsProto.prototype.disableInternalBrowser = false;\r\n ClientOptionsProto.prototype.internalBrowserBlacklist = \"\";\r\n ClientOptionsProto.prototype.internalBrowserOriginWhitelist = \"*\";\r\n ClientOptionsProto.prototype.polarTileMergingLevel = 0;\r\n ClientOptionsProto.prototype.jsBridgeRequestWhitelist = \"http://*.google.com/*\";\r\n ClientOptionsProto.prototype.mapsOptions = null;\r\n \r\n ClientOptionsProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.disableDiskCache = reader.bool();\r\n break;\r\n }\r\n case 2: {\r\n message.disableEmbeddedBrowserVista = reader.bool();\r\n break;\r\n }\r\n case 3: {\r\n message.drawAtmosphere = reader.bool();\r\n break;\r\n }\r\n case 4: {\r\n message.drawStars = reader.bool();\r\n break;\r\n }\r\n case 5: {\r\n message.shaderFilePrefix = reader.string();\r\n break;\r\n }\r\n case 6: {\r\n message.useProtobufQuadtreePackets = reader.bool();\r\n break;\r\n }\r\n case 7: {\r\n message.useExtendedCopyrightIds = reader.bool();\r\n break;\r\n }\r\n case 8: {\r\n message.precipitationsOptions = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 9: {\r\n message.captureOptions = $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 10: {\r\n message.show_2dMapsIcon = reader.bool();\r\n break;\r\n }\r\n case 11: {\r\n message.disableInternalBrowser = reader.bool();\r\n break;\r\n }\r\n case 12: {\r\n message.internalBrowserBlacklist = reader.string();\r\n break;\r\n }\r\n case 13: {\r\n message.internalBrowserOriginWhitelist = reader.string();\r\n break;\r\n }\r\n case 14: {\r\n message.polarTileMergingLevel = reader.int32();\r\n break;\r\n }\r\n case 15: {\r\n message.jsBridgeRequestWhitelist = reader.string();\r\n break;\r\n }\r\n case 16: {\r\n message.mapsOptions = $root.keyhole.dbroot.ClientOptionsProto.MapsOptions.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n ClientOptionsProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.disableDiskCache != null && message.hasOwnProperty(\"disableDiskCache\"))\r\n if (typeof message.disableDiskCache !== \"boolean\")\r\n return \"disableDiskCache: boolean expected\";\r\n if (message.disableEmbeddedBrowserVista != null && message.hasOwnProperty(\"disableEmbeddedBrowserVista\"))\r\n if (typeof message.disableEmbeddedBrowserVista !== \"boolean\")\r\n return \"disableEmbeddedBrowserVista: boolean expected\";\r\n if (message.drawAtmosphere != null && message.hasOwnProperty(\"drawAtmosphere\"))\r\n if (typeof message.drawAtmosphere !== \"boolean\")\r\n return \"drawAtmosphere: boolean expected\";\r\n if (message.drawStars != null && message.hasOwnProperty(\"drawStars\"))\r\n if (typeof message.drawStars !== \"boolean\")\r\n return \"drawStars: boolean expected\";\r\n if (message.shaderFilePrefix != null && message.hasOwnProperty(\"shaderFilePrefix\"))\r\n if (!$util.isString(message.shaderFilePrefix))\r\n return \"shaderFilePrefix: string expected\";\r\n if (message.useProtobufQuadtreePackets != null && message.hasOwnProperty(\"useProtobufQuadtreePackets\"))\r\n if (typeof message.useProtobufQuadtreePackets !== \"boolean\")\r\n return \"useProtobufQuadtreePackets: boolean expected\";\r\n if (message.useExtendedCopyrightIds != null && message.hasOwnProperty(\"useExtendedCopyrightIds\"))\r\n if (typeof message.useExtendedCopyrightIds !== \"boolean\")\r\n return \"useExtendedCopyrightIds: boolean expected\";\r\n if (message.precipitationsOptions != null && message.hasOwnProperty(\"precipitationsOptions\")) {\r\n var error = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.verify(message.precipitationsOptions);\r\n if (error)\r\n return \"precipitationsOptions.\" + error;\r\n }\r\n if (message.captureOptions != null && message.hasOwnProperty(\"captureOptions\")) {\r\n var error = $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions.verify(message.captureOptions);\r\n if (error)\r\n return \"captureOptions.\" + error;\r\n }\r\n if (message.show_2dMapsIcon != null && message.hasOwnProperty(\"show_2dMapsIcon\"))\r\n if (typeof message.show_2dMapsIcon !== \"boolean\")\r\n return \"show_2dMapsIcon: boolean expected\";\r\n if (message.disableInternalBrowser != null && message.hasOwnProperty(\"disableInternalBrowser\"))\r\n if (typeof message.disableInternalBrowser !== \"boolean\")\r\n return \"disableInternalBrowser: boolean expected\";\r\n if (message.internalBrowserBlacklist != null && message.hasOwnProperty(\"internalBrowserBlacklist\"))\r\n if (!$util.isString(message.internalBrowserBlacklist))\r\n return \"internalBrowserBlacklist: string expected\";\r\n if (message.internalBrowserOriginWhitelist != null && message.hasOwnProperty(\"internalBrowserOriginWhitelist\"))\r\n if (!$util.isString(message.internalBrowserOriginWhitelist))\r\n return \"internalBrowserOriginWhitelist: string expected\";\r\n if (message.polarTileMergingLevel != null && message.hasOwnProperty(\"polarTileMergingLevel\"))\r\n if (!$util.isInteger(message.polarTileMergingLevel))\r\n return \"polarTileMergingLevel: integer expected\";\r\n if (message.jsBridgeRequestWhitelist != null && message.hasOwnProperty(\"jsBridgeRequestWhitelist\"))\r\n if (!$util.isString(message.jsBridgeRequestWhitelist))\r\n return \"jsBridgeRequestWhitelist: string expected\";\r\n if (message.mapsOptions != null && message.hasOwnProperty(\"mapsOptions\")) {\r\n var error = $root.keyhole.dbroot.ClientOptionsProto.MapsOptions.verify(message.mapsOptions);\r\n if (error)\r\n return \"mapsOptions.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n ClientOptionsProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.ClientOptionsProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.ClientOptionsProto();\r\n if (object.disableDiskCache != null)\r\n message.disableDiskCache = Boolean(object.disableDiskCache);\r\n if (object.disableEmbeddedBrowserVista != null)\r\n message.disableEmbeddedBrowserVista = Boolean(object.disableEmbeddedBrowserVista);\r\n if (object.drawAtmosphere != null)\r\n message.drawAtmosphere = Boolean(object.drawAtmosphere);\r\n if (object.drawStars != null)\r\n message.drawStars = Boolean(object.drawStars);\r\n if (object.shaderFilePrefix != null)\r\n message.shaderFilePrefix = String(object.shaderFilePrefix);\r\n if (object.useProtobufQuadtreePackets != null)\r\n message.useProtobufQuadtreePackets = Boolean(object.useProtobufQuadtreePackets);\r\n if (object.useExtendedCopyrightIds != null)\r\n message.useExtendedCopyrightIds = Boolean(object.useExtendedCopyrightIds);\r\n if (object.precipitationsOptions != null) {\r\n if (typeof object.precipitationsOptions !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.ClientOptionsProto.precipitationsOptions: object expected\");\r\n message.precipitationsOptions = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.fromObject(object.precipitationsOptions);\r\n }\r\n if (object.captureOptions != null) {\r\n if (typeof object.captureOptions !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.ClientOptionsProto.captureOptions: object expected\");\r\n message.captureOptions = $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions.fromObject(object.captureOptions);\r\n }\r\n if (object.show_2dMapsIcon != null)\r\n message.show_2dMapsIcon = Boolean(object.show_2dMapsIcon);\r\n if (object.disableInternalBrowser != null)\r\n message.disableInternalBrowser = Boolean(object.disableInternalBrowser);\r\n if (object.internalBrowserBlacklist != null)\r\n message.internalBrowserBlacklist = String(object.internalBrowserBlacklist);\r\n if (object.internalBrowserOriginWhitelist != null)\r\n message.internalBrowserOriginWhitelist = String(object.internalBrowserOriginWhitelist);\r\n if (object.polarTileMergingLevel != null)\r\n message.polarTileMergingLevel = object.polarTileMergingLevel | 0;\r\n if (object.jsBridgeRequestWhitelist != null)\r\n message.jsBridgeRequestWhitelist = String(object.jsBridgeRequestWhitelist);\r\n if (object.mapsOptions != null) {\r\n if (typeof object.mapsOptions !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.ClientOptionsProto.mapsOptions: object expected\");\r\n message.mapsOptions = $root.keyhole.dbroot.ClientOptionsProto.MapsOptions.fromObject(object.mapsOptions);\r\n }\r\n return message;\r\n };\r\n \r\n ClientOptionsProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.disableDiskCache = false;\r\n object.disableEmbeddedBrowserVista = false;\r\n object.drawAtmosphere = true;\r\n object.drawStars = true;\r\n object.shaderFilePrefix = \"\";\r\n object.useProtobufQuadtreePackets = false;\r\n object.useExtendedCopyrightIds = true;\r\n object.precipitationsOptions = null;\r\n object.captureOptions = null;\r\n object.show_2dMapsIcon = true;\r\n object.disableInternalBrowser = false;\r\n object.internalBrowserBlacklist = \"\";\r\n object.internalBrowserOriginWhitelist = \"*\";\r\n object.polarTileMergingLevel = 0;\r\n object.jsBridgeRequestWhitelist = \"http://*.google.com/*\";\r\n object.mapsOptions = null;\r\n }\r\n if (message.disableDiskCache != null && message.hasOwnProperty(\"disableDiskCache\"))\r\n object.disableDiskCache = message.disableDiskCache;\r\n if (message.disableEmbeddedBrowserVista != null && message.hasOwnProperty(\"disableEmbeddedBrowserVista\"))\r\n object.disableEmbeddedBrowserVista = message.disableEmbeddedBrowserVista;\r\n if (message.drawAtmosphere != null && message.hasOwnProperty(\"drawAtmosphere\"))\r\n object.drawAtmosphere = message.drawAtmosphere;\r\n if (message.drawStars != null && message.hasOwnProperty(\"drawStars\"))\r\n object.drawStars = message.drawStars;\r\n if (message.shaderFilePrefix != null && message.hasOwnProperty(\"shaderFilePrefix\"))\r\n object.shaderFilePrefix = message.shaderFilePrefix;\r\n if (message.useProtobufQuadtreePackets != null && message.hasOwnProperty(\"useProtobufQuadtreePackets\"))\r\n object.useProtobufQuadtreePackets = message.useProtobufQuadtreePackets;\r\n if (message.useExtendedCopyrightIds != null && message.hasOwnProperty(\"useExtendedCopyrightIds\"))\r\n object.useExtendedCopyrightIds = message.useExtendedCopyrightIds;\r\n if (message.precipitationsOptions != null && message.hasOwnProperty(\"precipitationsOptions\"))\r\n object.precipitationsOptions = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.toObject(message.precipitationsOptions, options);\r\n if (message.captureOptions != null && message.hasOwnProperty(\"captureOptions\"))\r\n object.captureOptions = $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions.toObject(message.captureOptions, options);\r\n if (message.show_2dMapsIcon != null && message.hasOwnProperty(\"show_2dMapsIcon\"))\r\n object.show_2dMapsIcon = message.show_2dMapsIcon;\r\n if (message.disableInternalBrowser != null && message.hasOwnProperty(\"disableInternalBrowser\"))\r\n object.disableInternalBrowser = message.disableInternalBrowser;\r\n if (message.internalBrowserBlacklist != null && message.hasOwnProperty(\"internalBrowserBlacklist\"))\r\n object.internalBrowserBlacklist = message.internalBrowserBlacklist;\r\n if (message.internalBrowserOriginWhitelist != null && message.hasOwnProperty(\"internalBrowserOriginWhitelist\"))\r\n object.internalBrowserOriginWhitelist = message.internalBrowserOriginWhitelist;\r\n if (message.polarTileMergingLevel != null && message.hasOwnProperty(\"polarTileMergingLevel\"))\r\n object.polarTileMergingLevel = message.polarTileMergingLevel;\r\n if (message.jsBridgeRequestWhitelist != null && message.hasOwnProperty(\"jsBridgeRequestWhitelist\"))\r\n object.jsBridgeRequestWhitelist = message.jsBridgeRequestWhitelist;\r\n if (message.mapsOptions != null && message.hasOwnProperty(\"mapsOptions\"))\r\n object.mapsOptions = $root.keyhole.dbroot.ClientOptionsProto.MapsOptions.toObject(message.mapsOptions, options);\r\n return object;\r\n };\r\n \r\n ClientOptionsProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n ClientOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.ClientOptionsProto\";\r\n };\r\n \r\n ClientOptionsProto.PrecipitationsOptions = (function() {\r\n \r\n function PrecipitationsOptions(properties) {\r\n this.weatherMapping = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n PrecipitationsOptions.prototype.imageUrl = \"\";\r\n PrecipitationsOptions.prototype.imageExpireTime = 900;\r\n PrecipitationsOptions.prototype.maxColorDistance = 20;\r\n PrecipitationsOptions.prototype.imageLevel = 5;\r\n PrecipitationsOptions.prototype.weatherMapping = $util.emptyArray;\r\n PrecipitationsOptions.prototype.cloudsLayerUrl = \"\";\r\n PrecipitationsOptions.prototype.animationDecelerationDelay = 20;\r\n \r\n PrecipitationsOptions.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.imageUrl = reader.string();\r\n break;\r\n }\r\n case 2: {\r\n message.imageExpireTime = reader.int32();\r\n break;\r\n }\r\n case 3: {\r\n message.maxColorDistance = reader.int32();\r\n break;\r\n }\r\n case 4: {\r\n message.imageLevel = reader.int32();\r\n break;\r\n }\r\n case 5: {\r\n if (!(message.weatherMapping && message.weatherMapping.length))\r\n message.weatherMapping = [];\r\n message.weatherMapping.push($root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 6: {\r\n message.cloudsLayerUrl = reader.string();\r\n break;\r\n }\r\n case 7: {\r\n message.animationDecelerationDelay = reader.float();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n PrecipitationsOptions.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.imageUrl != null && message.hasOwnProperty(\"imageUrl\"))\r\n if (!$util.isString(message.imageUrl))\r\n return \"imageUrl: string expected\";\r\n if (message.imageExpireTime != null && message.hasOwnProperty(\"imageExpireTime\"))\r\n if (!$util.isInteger(message.imageExpireTime))\r\n return \"imageExpireTime: integer expected\";\r\n if (message.maxColorDistance != null && message.hasOwnProperty(\"maxColorDistance\"))\r\n if (!$util.isInteger(message.maxColorDistance))\r\n return \"maxColorDistance: integer expected\";\r\n if (message.imageLevel != null && message.hasOwnProperty(\"imageLevel\"))\r\n if (!$util.isInteger(message.imageLevel))\r\n return \"imageLevel: integer expected\";\r\n if (message.weatherMapping != null && message.hasOwnProperty(\"weatherMapping\")) {\r\n if (!Array.isArray(message.weatherMapping))\r\n return \"weatherMapping: array expected\";\r\n for (var i = 0; i < message.weatherMapping.length; ++i) {\r\n var error = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.verify(message.weatherMapping[i]);\r\n if (error)\r\n return \"weatherMapping.\" + error;\r\n }\r\n }\r\n if (message.cloudsLayerUrl != null && message.hasOwnProperty(\"cloudsLayerUrl\"))\r\n if (!$util.isString(message.cloudsLayerUrl))\r\n return \"cloudsLayerUrl: string expected\";\r\n if (message.animationDecelerationDelay != null && message.hasOwnProperty(\"animationDecelerationDelay\"))\r\n if (typeof message.animationDecelerationDelay !== \"number\")\r\n return \"animationDecelerationDelay: number expected\";\r\n return null;\r\n };\r\n \r\n PrecipitationsOptions.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions)\r\n return object;\r\n var message = new $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions();\r\n if (object.imageUrl != null)\r\n message.imageUrl = String(object.imageUrl);\r\n if (object.imageExpireTime != null)\r\n message.imageExpireTime = object.imageExpireTime | 0;\r\n if (object.maxColorDistance != null)\r\n message.maxColorDistance = object.maxColorDistance | 0;\r\n if (object.imageLevel != null)\r\n message.imageLevel = object.imageLevel | 0;\r\n if (object.weatherMapping) {\r\n if (!Array.isArray(object.weatherMapping))\r\n throw TypeError(\".keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.weatherMapping: array expected\");\r\n message.weatherMapping = [];\r\n for (var i = 0; i < object.weatherMapping.length; ++i) {\r\n if (typeof object.weatherMapping[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.weatherMapping: object expected\");\r\n message.weatherMapping[i] = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.fromObject(object.weatherMapping[i]);\r\n }\r\n }\r\n if (object.cloudsLayerUrl != null)\r\n message.cloudsLayerUrl = String(object.cloudsLayerUrl);\r\n if (object.animationDecelerationDelay != null)\r\n message.animationDecelerationDelay = Number(object.animationDecelerationDelay);\r\n return message;\r\n };\r\n \r\n PrecipitationsOptions.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.weatherMapping = [];\r\n if (options.defaults) {\r\n object.imageUrl = \"\";\r\n object.imageExpireTime = 900;\r\n object.maxColorDistance = 20;\r\n object.imageLevel = 5;\r\n object.cloudsLayerUrl = \"\";\r\n object.animationDecelerationDelay = 20;\r\n }\r\n if (message.imageUrl != null && message.hasOwnProperty(\"imageUrl\"))\r\n object.imageUrl = message.imageUrl;\r\n if (message.imageExpireTime != null && message.hasOwnProperty(\"imageExpireTime\"))\r\n object.imageExpireTime = message.imageExpireTime;\r\n if (message.maxColorDistance != null && message.hasOwnProperty(\"maxColorDistance\"))\r\n object.maxColorDistance = message.maxColorDistance;\r\n if (message.imageLevel != null && message.hasOwnProperty(\"imageLevel\"))\r\n object.imageLevel = message.imageLevel;\r\n if (message.weatherMapping && message.weatherMapping.length) {\r\n object.weatherMapping = [];\r\n for (var j = 0; j < message.weatherMapping.length; ++j)\r\n object.weatherMapping[j] = $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.toObject(message.weatherMapping[j], options);\r\n }\r\n if (message.cloudsLayerUrl != null && message.hasOwnProperty(\"cloudsLayerUrl\"))\r\n object.cloudsLayerUrl = message.cloudsLayerUrl;\r\n if (message.animationDecelerationDelay != null && message.hasOwnProperty(\"animationDecelerationDelay\"))\r\n object.animationDecelerationDelay = options.json && !isFinite(message.animationDecelerationDelay) ? String(message.animationDecelerationDelay) : message.animationDecelerationDelay;\r\n return object;\r\n };\r\n \r\n PrecipitationsOptions.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n PrecipitationsOptions.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions\";\r\n };\r\n \r\n PrecipitationsOptions.WeatherMapping = (function() {\r\n \r\n function WeatherMapping(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n WeatherMapping.prototype.colorAbgr = 0;\r\n WeatherMapping.prototype.weatherType = 0;\r\n WeatherMapping.prototype.elongation = 1;\r\n WeatherMapping.prototype.opacity = 0;\r\n WeatherMapping.prototype.fogDensity = 0;\r\n WeatherMapping.prototype.speed0 = 0;\r\n WeatherMapping.prototype.speed1 = 0;\r\n WeatherMapping.prototype.speed2 = 0;\r\n WeatherMapping.prototype.speed3 = 0;\r\n \r\n WeatherMapping.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.colorAbgr = reader.uint32();\r\n break;\r\n }\r\n case 2: {\r\n message.weatherType = reader.int32();\r\n break;\r\n }\r\n case 3: {\r\n message.elongation = reader.float();\r\n break;\r\n }\r\n case 4: {\r\n message.opacity = reader.float();\r\n break;\r\n }\r\n case 5: {\r\n message.fogDensity = reader.float();\r\n break;\r\n }\r\n case 6: {\r\n message.speed0 = reader.float();\r\n break;\r\n }\r\n case 7: {\r\n message.speed1 = reader.float();\r\n break;\r\n }\r\n case 8: {\r\n message.speed2 = reader.float();\r\n break;\r\n }\r\n case 9: {\r\n message.speed3 = reader.float();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"colorAbgr\"))\r\n throw $util.ProtocolError(\"missing required 'colorAbgr'\", { instance: message });\r\n if (!message.hasOwnProperty(\"weatherType\"))\r\n throw $util.ProtocolError(\"missing required 'weatherType'\", { instance: message });\r\n return message;\r\n };\r\n \r\n WeatherMapping.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isInteger(message.colorAbgr))\r\n return \"colorAbgr: integer expected\";\r\n switch (message.weatherType) {\r\n default:\r\n return \"weatherType: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n break;\r\n }\r\n if (message.elongation != null && message.hasOwnProperty(\"elongation\"))\r\n if (typeof message.elongation !== \"number\")\r\n return \"elongation: number expected\";\r\n if (message.opacity != null && message.hasOwnProperty(\"opacity\"))\r\n if (typeof message.opacity !== \"number\")\r\n return \"opacity: number expected\";\r\n if (message.fogDensity != null && message.hasOwnProperty(\"fogDensity\"))\r\n if (typeof message.fogDensity !== \"number\")\r\n return \"fogDensity: number expected\";\r\n if (message.speed0 != null && message.hasOwnProperty(\"speed0\"))\r\n if (typeof message.speed0 !== \"number\")\r\n return \"speed0: number expected\";\r\n if (message.speed1 != null && message.hasOwnProperty(\"speed1\"))\r\n if (typeof message.speed1 !== \"number\")\r\n return \"speed1: number expected\";\r\n if (message.speed2 != null && message.hasOwnProperty(\"speed2\"))\r\n if (typeof message.speed2 !== \"number\")\r\n return \"speed2: number expected\";\r\n if (message.speed3 != null && message.hasOwnProperty(\"speed3\"))\r\n if (typeof message.speed3 !== \"number\")\r\n return \"speed3: number expected\";\r\n return null;\r\n };\r\n \r\n WeatherMapping.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping)\r\n return object;\r\n var message = new $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping();\r\n if (object.colorAbgr != null)\r\n message.colorAbgr = object.colorAbgr >>> 0;\r\n switch (object.weatherType) {\r\n case \"NO_PRECIPITATION\":\r\n case 0:\r\n message.weatherType = 0;\r\n break;\r\n case \"RAIN\":\r\n case 1:\r\n message.weatherType = 1;\r\n break;\r\n case \"SNOW\":\r\n case 2:\r\n message.weatherType = 2;\r\n break;\r\n }\r\n if (object.elongation != null)\r\n message.elongation = Number(object.elongation);\r\n if (object.opacity != null)\r\n message.opacity = Number(object.opacity);\r\n if (object.fogDensity != null)\r\n message.fogDensity = Number(object.fogDensity);\r\n if (object.speed0 != null)\r\n message.speed0 = Number(object.speed0);\r\n if (object.speed1 != null)\r\n message.speed1 = Number(object.speed1);\r\n if (object.speed2 != null)\r\n message.speed2 = Number(object.speed2);\r\n if (object.speed3 != null)\r\n message.speed3 = Number(object.speed3);\r\n return message;\r\n };\r\n \r\n WeatherMapping.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.colorAbgr = 0;\r\n object.weatherType = options.enums === String ? \"NO_PRECIPITATION\" : 0;\r\n object.elongation = 1;\r\n object.opacity = 0;\r\n object.fogDensity = 0;\r\n object.speed0 = 0;\r\n object.speed1 = 0;\r\n object.speed2 = 0;\r\n object.speed3 = 0;\r\n }\r\n if (message.colorAbgr != null && message.hasOwnProperty(\"colorAbgr\"))\r\n object.colorAbgr = message.colorAbgr;\r\n if (message.weatherType != null && message.hasOwnProperty(\"weatherType\"))\r\n object.weatherType = options.enums === String ? $root.keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping.WeatherType[message.weatherType] : message.weatherType;\r\n if (message.elongation != null && message.hasOwnProperty(\"elongation\"))\r\n object.elongation = options.json && !isFinite(message.elongation) ? String(message.elongation) : message.elongation;\r\n if (message.opacity != null && message.hasOwnProperty(\"opacity\"))\r\n object.opacity = options.json && !isFinite(message.opacity) ? String(message.opacity) : message.opacity;\r\n if (message.fogDensity != null && message.hasOwnProperty(\"fogDensity\"))\r\n object.fogDensity = options.json && !isFinite(message.fogDensity) ? String(message.fogDensity) : message.fogDensity;\r\n if (message.speed0 != null && message.hasOwnProperty(\"speed0\"))\r\n object.speed0 = options.json && !isFinite(message.speed0) ? String(message.speed0) : message.speed0;\r\n if (message.speed1 != null && message.hasOwnProperty(\"speed1\"))\r\n object.speed1 = options.json && !isFinite(message.speed1) ? String(message.speed1) : message.speed1;\r\n if (message.speed2 != null && message.hasOwnProperty(\"speed2\"))\r\n object.speed2 = options.json && !isFinite(message.speed2) ? String(message.speed2) : message.speed2;\r\n if (message.speed3 != null && message.hasOwnProperty(\"speed3\"))\r\n object.speed3 = options.json && !isFinite(message.speed3) ? String(message.speed3) : message.speed3;\r\n return object;\r\n };\r\n \r\n WeatherMapping.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n WeatherMapping.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.ClientOptionsProto.PrecipitationsOptions.WeatherMapping\";\r\n };\r\n \r\n WeatherMapping.WeatherType = (function() {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"NO_PRECIPITATION\"] = 0;\r\n values[valuesById[1] = \"RAIN\"] = 1;\r\n values[valuesById[2] = \"SNOW\"] = 2;\r\n return values;\r\n })();\r\n \r\n return WeatherMapping;\r\n })();\r\n \r\n return PrecipitationsOptions;\r\n })();\r\n \r\n ClientOptionsProto.CaptureOptions = (function() {\r\n \r\n function CaptureOptions(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n CaptureOptions.prototype.allowSaveAsImage = true;\r\n CaptureOptions.prototype.maxFreeCaptureRes = 2400;\r\n CaptureOptions.prototype.maxPremiumCaptureRes = 4800;\r\n \r\n CaptureOptions.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.allowSaveAsImage = reader.bool();\r\n break;\r\n }\r\n case 2: {\r\n message.maxFreeCaptureRes = reader.int32();\r\n break;\r\n }\r\n case 3: {\r\n message.maxPremiumCaptureRes = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n CaptureOptions.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.allowSaveAsImage != null && message.hasOwnProperty(\"allowSaveAsImage\"))\r\n if (typeof message.allowSaveAsImage !== \"boolean\")\r\n return \"allowSaveAsImage: boolean expected\";\r\n if (message.maxFreeCaptureRes != null && message.hasOwnProperty(\"maxFreeCaptureRes\"))\r\n if (!$util.isInteger(message.maxFreeCaptureRes))\r\n return \"maxFreeCaptureRes: integer expected\";\r\n if (message.maxPremiumCaptureRes != null && message.hasOwnProperty(\"maxPremiumCaptureRes\"))\r\n if (!$util.isInteger(message.maxPremiumCaptureRes))\r\n return \"maxPremiumCaptureRes: integer expected\";\r\n return null;\r\n };\r\n \r\n CaptureOptions.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions)\r\n return object;\r\n var message = new $root.keyhole.dbroot.ClientOptionsProto.CaptureOptions();\r\n if (object.allowSaveAsImage != null)\r\n message.allowSaveAsImage = Boolean(object.allowSaveAsImage);\r\n if (object.maxFreeCaptureRes != null)\r\n message.maxFreeCaptureRes = object.maxFreeCaptureRes | 0;\r\n if (object.maxPremiumCaptureRes != null)\r\n message.maxPremiumCaptureRes = object.maxPremiumCaptureRes | 0;\r\n return message;\r\n };\r\n \r\n CaptureOptions.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.allowSaveAsImage = true;\r\n object.maxFreeCaptureRes = 2400;\r\n object.maxPremiumCaptureRes = 4800;\r\n }\r\n if (message.allowSaveAsImage != null && message.hasOwnProperty(\"allowSaveAsImage\"))\r\n object.allowSaveAsImage = message.allowSaveAsImage;\r\n if (message.maxFreeCaptureRes != null && message.hasOwnProperty(\"maxFreeCaptureRes\"))\r\n object.maxFreeCaptureRes = message.maxFreeCaptureRes;\r\n if (message.maxPremiumCaptureRes != null && message.hasOwnProperty(\"maxPremiumCaptureRes\"))\r\n object.maxPremiumCaptureRes = message.maxPremiumCaptureRes;\r\n return object;\r\n };\r\n \r\n CaptureOptions.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n CaptureOptions.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.ClientOptionsProto.CaptureOptions\";\r\n };\r\n \r\n return CaptureOptions;\r\n })();\r\n \r\n ClientOptionsProto.MapsOptions = (function() {\r\n \r\n function MapsOptions(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n MapsOptions.prototype.enableMaps = false;\r\n MapsOptions.prototype.docsAutoDownloadEnabled = false;\r\n MapsOptions.prototype.docsAutoDownloadInterval = 0;\r\n MapsOptions.prototype.docsAutoUploadEnabled = false;\r\n MapsOptions.prototype.docsAutoUploadDelay = 0;\r\n \r\n MapsOptions.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ClientOptionsProto.MapsOptions();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.enableMaps = reader.bool();\r\n break;\r\n }\r\n case 2: {\r\n message.docsAutoDownloadEnabled = reader.bool();\r\n break;\r\n }\r\n case 3: {\r\n message.docsAutoDownloadInterval = reader.int32();\r\n break;\r\n }\r\n case 4: {\r\n message.docsAutoUploadEnabled = reader.bool();\r\n break;\r\n }\r\n case 5: {\r\n message.docsAutoUploadDelay = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n MapsOptions.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.enableMaps != null && message.hasOwnProperty(\"enableMaps\"))\r\n if (typeof message.enableMaps !== \"boolean\")\r\n return \"enableMaps: boolean expected\";\r\n if (message.docsAutoDownloadEnabled != null && message.hasOwnProperty(\"docsAutoDownloadEnabled\"))\r\n if (typeof message.docsAutoDownloadEnabled !== \"boolean\")\r\n return \"docsAutoDownloadEnabled: boolean expected\";\r\n if (message.docsAutoDownloadInterval != null && message.hasOwnProperty(\"docsAutoDownloadInterval\"))\r\n if (!$util.isInteger(message.docsAutoDownloadInterval))\r\n return \"docsAutoDownloadInterval: integer expected\";\r\n if (message.docsAutoUploadEnabled != null && message.hasOwnProperty(\"docsAutoUploadEnabled\"))\r\n if (typeof message.docsAutoUploadEnabled !== \"boolean\")\r\n return \"docsAutoUploadEnabled: boolean expected\";\r\n if (message.docsAutoUploadDelay != null && message.hasOwnProperty(\"docsAutoUploadDelay\"))\r\n if (!$util.isInteger(message.docsAutoUploadDelay))\r\n return \"docsAutoUploadDelay: integer expected\";\r\n return null;\r\n };\r\n \r\n MapsOptions.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.ClientOptionsProto.MapsOptions)\r\n return object;\r\n var message = new $root.keyhole.dbroot.ClientOptionsProto.MapsOptions();\r\n if (object.enableMaps != null)\r\n message.enableMaps = Boolean(object.enableMaps);\r\n if (object.docsAutoDownloadEnabled != null)\r\n message.docsAutoDownloadEnabled = Boolean(object.docsAutoDownloadEnabled);\r\n if (object.docsAutoDownloadInterval != null)\r\n message.docsAutoDownloadInterval = object.docsAutoDownloadInterval | 0;\r\n if (object.docsAutoUploadEnabled != null)\r\n message.docsAutoUploadEnabled = Boolean(object.docsAutoUploadEnabled);\r\n if (object.docsAutoUploadDelay != null)\r\n message.docsAutoUploadDelay = object.docsAutoUploadDelay | 0;\r\n return message;\r\n };\r\n \r\n MapsOptions.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.enableMaps = false;\r\n object.docsAutoDownloadEnabled = false;\r\n object.docsAutoDownloadInterval = 0;\r\n object.docsAutoUploadEnabled = false;\r\n object.docsAutoUploadDelay = 0;\r\n }\r\n if (message.enableMaps != null && message.hasOwnProperty(\"enableMaps\"))\r\n object.enableMaps = message.enableMaps;\r\n if (message.docsAutoDownloadEnabled != null && message.hasOwnProperty(\"docsAutoDownloadEnabled\"))\r\n object.docsAutoDownloadEnabled = message.docsAutoDownloadEnabled;\r\n if (message.docsAutoDownloadInterval != null && message.hasOwnProperty(\"docsAutoDownloadInterval\"))\r\n object.docsAutoDownloadInterval = message.docsAutoDownloadInterval;\r\n if (message.docsAutoUploadEnabled != null && message.hasOwnProperty(\"docsAutoUploadEnabled\"))\r\n object.docsAutoUploadEnabled = message.docsAutoUploadEnabled;\r\n if (message.docsAutoUploadDelay != null && message.hasOwnProperty(\"docsAutoUploadDelay\"))\r\n object.docsAutoUploadDelay = message.docsAutoUploadDelay;\r\n return object;\r\n };\r\n \r\n MapsOptions.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n MapsOptions.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.ClientOptionsProto.MapsOptions\";\r\n };\r\n \r\n return MapsOptions;\r\n })();\r\n \r\n return ClientOptionsProto;\r\n })();\r\n \r\n dbroot.FetchingOptionsProto = (function() {\r\n \r\n function FetchingOptionsProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n FetchingOptionsProto.prototype.maxRequestsPerQuery = 1;\r\n FetchingOptionsProto.prototype.forceMaxRequestsPerQuery = false;\r\n FetchingOptionsProto.prototype.sortBatches = false;\r\n FetchingOptionsProto.prototype.maxDrawable = 2;\r\n FetchingOptionsProto.prototype.maxImagery = 2;\r\n FetchingOptionsProto.prototype.maxTerrain = 5;\r\n FetchingOptionsProto.prototype.maxQuadtree = 5;\r\n FetchingOptionsProto.prototype.maxDioramaMetadata = 1;\r\n FetchingOptionsProto.prototype.maxDioramaData = 0;\r\n FetchingOptionsProto.prototype.maxConsumerFetchRatio = 1;\r\n FetchingOptionsProto.prototype.maxProEcFetchRatio = 0;\r\n FetchingOptionsProto.prototype.safeOverallQps = 0;\r\n FetchingOptionsProto.prototype.safeImageryQps = 0;\r\n FetchingOptionsProto.prototype.domainsForHttps = \"google.com gstatic.com\";\r\n FetchingOptionsProto.prototype.hostsForHttp = \"\";\r\n \r\n FetchingOptionsProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.FetchingOptionsProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.maxRequestsPerQuery = reader.int32();\r\n break;\r\n }\r\n case 12: {\r\n message.forceMaxRequestsPerQuery = reader.bool();\r\n break;\r\n }\r\n case 13: {\r\n message.sortBatches = reader.bool();\r\n break;\r\n }\r\n case 2: {\r\n message.maxDrawable = reader.int32();\r\n break;\r\n }\r\n case 3: {\r\n message.maxImagery = reader.int32();\r\n break;\r\n }\r\n case 4: {\r\n message.maxTerrain = reader.int32();\r\n break;\r\n }\r\n case 5: {\r\n message.maxQuadtree = reader.int32();\r\n break;\r\n }\r\n case 6: {\r\n message.maxDioramaMetadata = reader.int32();\r\n break;\r\n }\r\n case 7: {\r\n message.maxDioramaData = reader.int32();\r\n break;\r\n }\r\n case 8: {\r\n message.maxConsumerFetchRatio = reader.float();\r\n break;\r\n }\r\n case 9: {\r\n message.maxProEcFetchRatio = reader.float();\r\n break;\r\n }\r\n case 10: {\r\n message.safeOverallQps = reader.float();\r\n break;\r\n }\r\n case 11: {\r\n message.safeImageryQps = reader.float();\r\n break;\r\n }\r\n case 14: {\r\n message.domainsForHttps = reader.string();\r\n break;\r\n }\r\n case 15: {\r\n message.hostsForHttp = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n FetchingOptionsProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.maxRequestsPerQuery != null && message.hasOwnProperty(\"maxRequestsPerQuery\"))\r\n if (!$util.isInteger(message.maxRequestsPerQuery))\r\n return \"maxRequestsPerQuery: integer expected\";\r\n if (message.forceMaxRequestsPerQuery != null && message.hasOwnProperty(\"forceMaxRequestsPerQuery\"))\r\n if (typeof message.forceMaxRequestsPerQuery !== \"boolean\")\r\n return \"forceMaxRequestsPerQuery: boolean expected\";\r\n if (message.sortBatches != null && message.hasOwnProperty(\"sortBatches\"))\r\n if (typeof message.sortBatches !== \"boolean\")\r\n return \"sortBatches: boolean expected\";\r\n if (message.maxDrawable != null && message.hasOwnProperty(\"maxDrawable\"))\r\n if (!$util.isInteger(message.maxDrawable))\r\n return \"maxDrawable: integer expected\";\r\n if (message.maxImagery != null && message.hasOwnProperty(\"maxImagery\"))\r\n if (!$util.isInteger(message.maxImagery))\r\n return \"maxImagery: integer expected\";\r\n if (message.maxTerrain != null && message.hasOwnProperty(\"maxTerrain\"))\r\n if (!$util.isInteger(message.maxTerrain))\r\n return \"maxTerrain: integer expected\";\r\n if (message.maxQuadtree != null && message.hasOwnProperty(\"maxQuadtree\"))\r\n if (!$util.isInteger(message.maxQuadtree))\r\n return \"maxQuadtree: integer expected\";\r\n if (message.maxDioramaMetadata != null && message.hasOwnProperty(\"maxDioramaMetadata\"))\r\n if (!$util.isInteger(message.maxDioramaMetadata))\r\n return \"maxDioramaMetadata: integer expected\";\r\n if (message.maxDioramaData != null && message.hasOwnProperty(\"maxDioramaData\"))\r\n if (!$util.isInteger(message.maxDioramaData))\r\n return \"maxDioramaData: integer expected\";\r\n if (message.maxConsumerFetchRatio != null && message.hasOwnProperty(\"maxConsumerFetchRatio\"))\r\n if (typeof message.maxConsumerFetchRatio !== \"number\")\r\n return \"maxConsumerFetchRatio: number expected\";\r\n if (message.maxProEcFetchRatio != null && message.hasOwnProperty(\"maxProEcFetchRatio\"))\r\n if (typeof message.maxProEcFetchRatio !== \"number\")\r\n return \"maxProEcFetchRatio: number expected\";\r\n if (message.safeOverallQps != null && message.hasOwnProperty(\"safeOverallQps\"))\r\n if (typeof message.safeOverallQps !== \"number\")\r\n return \"safeOverallQps: number expected\";\r\n if (message.safeImageryQps != null && message.hasOwnProperty(\"safeImageryQps\"))\r\n if (typeof message.safeImageryQps !== \"number\")\r\n return \"safeImageryQps: number expected\";\r\n if (message.domainsForHttps != null && message.hasOwnProperty(\"domainsForHttps\"))\r\n if (!$util.isString(message.domainsForHttps))\r\n return \"domainsForHttps: string expected\";\r\n if (message.hostsForHttp != null && message.hasOwnProperty(\"hostsForHttp\"))\r\n if (!$util.isString(message.hostsForHttp))\r\n return \"hostsForHttp: string expected\";\r\n return null;\r\n };\r\n \r\n FetchingOptionsProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.FetchingOptionsProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.FetchingOptionsProto();\r\n if (object.maxRequestsPerQuery != null)\r\n message.maxRequestsPerQuery = object.maxRequestsPerQuery | 0;\r\n if (object.forceMaxRequestsPerQuery != null)\r\n message.forceMaxRequestsPerQuery = Boolean(object.forceMaxRequestsPerQuery);\r\n if (object.sortBatches != null)\r\n message.sortBatches = Boolean(object.sortBatches);\r\n if (object.maxDrawable != null)\r\n message.maxDrawable = object.maxDrawable | 0;\r\n if (object.maxImagery != null)\r\n message.maxImagery = object.maxImagery | 0;\r\n if (object.maxTerrain != null)\r\n message.maxTerrain = object.maxTerrain | 0;\r\n if (object.maxQuadtree != null)\r\n message.maxQuadtree = object.maxQuadtree | 0;\r\n if (object.maxDioramaMetadata != null)\r\n message.maxDioramaMetadata = object.maxDioramaMetadata | 0;\r\n if (object.maxDioramaData != null)\r\n message.maxDioramaData = object.maxDioramaData | 0;\r\n if (object.maxConsumerFetchRatio != null)\r\n message.maxConsumerFetchRatio = Number(object.maxConsumerFetchRatio);\r\n if (object.maxProEcFetchRatio != null)\r\n message.maxProEcFetchRatio = Number(object.maxProEcFetchRatio);\r\n if (object.safeOverallQps != null)\r\n message.safeOverallQps = Number(object.safeOverallQps);\r\n if (object.safeImageryQps != null)\r\n message.safeImageryQps = Number(object.safeImageryQps);\r\n if (object.domainsForHttps != null)\r\n message.domainsForHttps = String(object.domainsForHttps);\r\n if (object.hostsForHttp != null)\r\n message.hostsForHttp = String(object.hostsForHttp);\r\n return message;\r\n };\r\n \r\n FetchingOptionsProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.maxRequestsPerQuery = 1;\r\n object.maxDrawable = 2;\r\n object.maxImagery = 2;\r\n object.maxTerrain = 5;\r\n object.maxQuadtree = 5;\r\n object.maxDioramaMetadata = 1;\r\n object.maxDioramaData = 0;\r\n object.maxConsumerFetchRatio = 1;\r\n object.maxProEcFetchRatio = 0;\r\n object.safeOverallQps = 0;\r\n object.safeImageryQps = 0;\r\n object.forceMaxRequestsPerQuery = false;\r\n object.sortBatches = false;\r\n object.domainsForHttps = \"google.com gstatic.com\";\r\n object.hostsForHttp = \"\";\r\n }\r\n if (message.maxRequestsPerQuery != null && message.hasOwnProperty(\"maxRequestsPerQuery\"))\r\n object.maxRequestsPerQuery = message.maxRequestsPerQuery;\r\n if (message.maxDrawable != null && message.hasOwnProperty(\"maxDrawable\"))\r\n object.maxDrawable = message.maxDrawable;\r\n if (message.maxImagery != null && message.hasOwnProperty(\"maxImagery\"))\r\n object.maxImagery = message.maxImagery;\r\n if (message.maxTerrain != null && message.hasOwnProperty(\"maxTerrain\"))\r\n object.maxTerrain = message.maxTerrain;\r\n if (message.maxQuadtree != null && message.hasOwnProperty(\"maxQuadtree\"))\r\n object.maxQuadtree = message.maxQuadtree;\r\n if (message.maxDioramaMetadata != null && message.hasOwnProperty(\"maxDioramaMetadata\"))\r\n object.maxDioramaMetadata = message.maxDioramaMetadata;\r\n if (message.maxDioramaData != null && message.hasOwnProperty(\"maxDioramaData\"))\r\n object.maxDioramaData = message.maxDioramaData;\r\n if (message.maxConsumerFetchRatio != null && message.hasOwnProperty(\"maxConsumerFetchRatio\"))\r\n object.maxConsumerFetchRatio = options.json && !isFinite(message.maxConsumerFetchRatio) ? String(message.maxConsumerFetchRatio) : message.maxConsumerFetchRatio;\r\n if (message.maxProEcFetchRatio != null && message.hasOwnProperty(\"maxProEcFetchRatio\"))\r\n object.maxProEcFetchRatio = options.json && !isFinite(message.maxProEcFetchRatio) ? String(message.maxProEcFetchRatio) : message.maxProEcFetchRatio;\r\n if (message.safeOverallQps != null && message.hasOwnProperty(\"safeOverallQps\"))\r\n object.safeOverallQps = options.json && !isFinite(message.safeOverallQps) ? String(message.safeOverallQps) : message.safeOverallQps;\r\n if (message.safeImageryQps != null && message.hasOwnProperty(\"safeImageryQps\"))\r\n object.safeImageryQps = options.json && !isFinite(message.safeImageryQps) ? String(message.safeImageryQps) : message.safeImageryQps;\r\n if (message.forceMaxRequestsPerQuery != null && message.hasOwnProperty(\"forceMaxRequestsPerQuery\"))\r\n object.forceMaxRequestsPerQuery = message.forceMaxRequestsPerQuery;\r\n if (message.sortBatches != null && message.hasOwnProperty(\"sortBatches\"))\r\n object.sortBatches = message.sortBatches;\r\n if (message.domainsForHttps != null && message.hasOwnProperty(\"domainsForHttps\"))\r\n object.domainsForHttps = message.domainsForHttps;\r\n if (message.hostsForHttp != null && message.hasOwnProperty(\"hostsForHttp\"))\r\n object.hostsForHttp = message.hostsForHttp;\r\n return object;\r\n };\r\n \r\n FetchingOptionsProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n FetchingOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.FetchingOptionsProto\";\r\n };\r\n \r\n return FetchingOptionsProto;\r\n })();\r\n \r\n dbroot.TimeMachineOptionsProto = (function() {\r\n \r\n function TimeMachineOptionsProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n TimeMachineOptionsProto.prototype.serverUrl = \"\";\r\n TimeMachineOptionsProto.prototype.isTimemachine = false;\r\n TimeMachineOptionsProto.prototype.dwellTimeMs = 500;\r\n TimeMachineOptionsProto.prototype.discoverabilityAltitudeMeters = 15000;\r\n \r\n TimeMachineOptionsProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.TimeMachineOptionsProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.serverUrl = reader.string();\r\n break;\r\n }\r\n case 2: {\r\n message.isTimemachine = reader.bool();\r\n break;\r\n }\r\n case 3: {\r\n message.dwellTimeMs = reader.int32();\r\n break;\r\n }\r\n case 4: {\r\n message.discoverabilityAltitudeMeters = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n TimeMachineOptionsProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.serverUrl != null && message.hasOwnProperty(\"serverUrl\"))\r\n if (!$util.isString(message.serverUrl))\r\n return \"serverUrl: string expected\";\r\n if (message.isTimemachine != null && message.hasOwnProperty(\"isTimemachine\"))\r\n if (typeof message.isTimemachine !== \"boolean\")\r\n return \"isTimemachine: boolean expected\";\r\n if (message.dwellTimeMs != null && message.hasOwnProperty(\"dwellTimeMs\"))\r\n if (!$util.isInteger(message.dwellTimeMs))\r\n return \"dwellTimeMs: integer expected\";\r\n if (message.discoverabilityAltitudeMeters != null && message.hasOwnProperty(\"discoverabilityAltitudeMeters\"))\r\n if (!$util.isInteger(message.discoverabilityAltitudeMeters))\r\n return \"discoverabilityAltitudeMeters: integer expected\";\r\n return null;\r\n };\r\n \r\n TimeMachineOptionsProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.TimeMachineOptionsProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.TimeMachineOptionsProto();\r\n if (object.serverUrl != null)\r\n message.serverUrl = String(object.serverUrl);\r\n if (object.isTimemachine != null)\r\n message.isTimemachine = Boolean(object.isTimemachine);\r\n if (object.dwellTimeMs != null)\r\n message.dwellTimeMs = object.dwellTimeMs | 0;\r\n if (object.discoverabilityAltitudeMeters != null)\r\n message.discoverabilityAltitudeMeters = object.discoverabilityAltitudeMeters | 0;\r\n return message;\r\n };\r\n \r\n TimeMachineOptionsProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.serverUrl = \"\";\r\n object.isTimemachine = false;\r\n object.dwellTimeMs = 500;\r\n object.discoverabilityAltitudeMeters = 15000;\r\n }\r\n if (message.serverUrl != null && message.hasOwnProperty(\"serverUrl\"))\r\n object.serverUrl = message.serverUrl;\r\n if (message.isTimemachine != null && message.hasOwnProperty(\"isTimemachine\"))\r\n object.isTimemachine = message.isTimemachine;\r\n if (message.dwellTimeMs != null && message.hasOwnProperty(\"dwellTimeMs\"))\r\n object.dwellTimeMs = message.dwellTimeMs;\r\n if (message.discoverabilityAltitudeMeters != null && message.hasOwnProperty(\"discoverabilityAltitudeMeters\"))\r\n object.discoverabilityAltitudeMeters = message.discoverabilityAltitudeMeters;\r\n return object;\r\n };\r\n \r\n TimeMachineOptionsProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n TimeMachineOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.TimeMachineOptionsProto\";\r\n };\r\n \r\n return TimeMachineOptionsProto;\r\n })();\r\n \r\n dbroot.AutopiaOptionsProto = (function() {\r\n \r\n function AutopiaOptionsProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n AutopiaOptionsProto.prototype.metadataServerUrl = \"http://cbk0.google.com/cbk\";\r\n AutopiaOptionsProto.prototype.depthmapServerUrl = \"http://cbk0.google.com/cbk\";\r\n AutopiaOptionsProto.prototype.coverageOverlayUrl = \"\";\r\n AutopiaOptionsProto.prototype.maxImageryQps = 0;\r\n AutopiaOptionsProto.prototype.maxMetadataDepthmapQps = 0;\r\n \r\n AutopiaOptionsProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.AutopiaOptionsProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.metadataServerUrl = reader.string();\r\n break;\r\n }\r\n case 2: {\r\n message.depthmapServerUrl = reader.string();\r\n break;\r\n }\r\n case 3: {\r\n message.coverageOverlayUrl = reader.string();\r\n break;\r\n }\r\n case 4: {\r\n message.maxImageryQps = reader.float();\r\n break;\r\n }\r\n case 5: {\r\n message.maxMetadataDepthmapQps = reader.float();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n AutopiaOptionsProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.metadataServerUrl != null && message.hasOwnProperty(\"metadataServerUrl\"))\r\n if (!$util.isString(message.metadataServerUrl))\r\n return \"metadataServerUrl: string expected\";\r\n if (message.depthmapServerUrl != null && message.hasOwnProperty(\"depthmapServerUrl\"))\r\n if (!$util.isString(message.depthmapServerUrl))\r\n return \"depthmapServerUrl: string expected\";\r\n if (message.coverageOverlayUrl != null && message.hasOwnProperty(\"coverageOverlayUrl\"))\r\n if (!$util.isString(message.coverageOverlayUrl))\r\n return \"coverageOverlayUrl: string expected\";\r\n if (message.maxImageryQps != null && message.hasOwnProperty(\"maxImageryQps\"))\r\n if (typeof message.maxImageryQps !== \"number\")\r\n return \"maxImageryQps: number expected\";\r\n if (message.maxMetadataDepthmapQps != null && message.hasOwnProperty(\"maxMetadataDepthmapQps\"))\r\n if (typeof message.maxMetadataDepthmapQps !== \"number\")\r\n return \"maxMetadataDepthmapQps: number expected\";\r\n return null;\r\n };\r\n \r\n AutopiaOptionsProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.AutopiaOptionsProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.AutopiaOptionsProto();\r\n if (object.metadataServerUrl != null)\r\n message.metadataServerUrl = String(object.metadataServerUrl);\r\n if (object.depthmapServerUrl != null)\r\n message.depthmapServerUrl = String(object.depthmapServerUrl);\r\n if (object.coverageOverlayUrl != null)\r\n message.coverageOverlayUrl = String(object.coverageOverlayUrl);\r\n if (object.maxImageryQps != null)\r\n message.maxImageryQps = Number(object.maxImageryQps);\r\n if (object.maxMetadataDepthmapQps != null)\r\n message.maxMetadataDepthmapQps = Number(object.maxMetadataDepthmapQps);\r\n return message;\r\n };\r\n \r\n AutopiaOptionsProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.metadataServerUrl = \"http://cbk0.google.com/cbk\";\r\n object.depthmapServerUrl = \"http://cbk0.google.com/cbk\";\r\n object.coverageOverlayUrl = \"\";\r\n object.maxImageryQps = 0;\r\n object.maxMetadataDepthmapQps = 0;\r\n }\r\n if (message.metadataServerUrl != null && message.hasOwnProperty(\"metadataServerUrl\"))\r\n object.metadataServerUrl = message.metadataServerUrl;\r\n if (message.depthmapServerUrl != null && message.hasOwnProperty(\"depthmapServerUrl\"))\r\n object.depthmapServerUrl = message.depthmapServerUrl;\r\n if (message.coverageOverlayUrl != null && message.hasOwnProperty(\"coverageOverlayUrl\"))\r\n object.coverageOverlayUrl = message.coverageOverlayUrl;\r\n if (message.maxImageryQps != null && message.hasOwnProperty(\"maxImageryQps\"))\r\n object.maxImageryQps = options.json && !isFinite(message.maxImageryQps) ? String(message.maxImageryQps) : message.maxImageryQps;\r\n if (message.maxMetadataDepthmapQps != null && message.hasOwnProperty(\"maxMetadataDepthmapQps\"))\r\n object.maxMetadataDepthmapQps = options.json && !isFinite(message.maxMetadataDepthmapQps) ? String(message.maxMetadataDepthmapQps) : message.maxMetadataDepthmapQps;\r\n return object;\r\n };\r\n \r\n AutopiaOptionsProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n AutopiaOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.AutopiaOptionsProto\";\r\n };\r\n \r\n return AutopiaOptionsProto;\r\n })();\r\n \r\n dbroot.CSIOptionsProto = (function() {\r\n \r\n function CSIOptionsProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n CSIOptionsProto.prototype.samplingPercentage = 0;\r\n CSIOptionsProto.prototype.experimentId = \"\";\r\n \r\n CSIOptionsProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.CSIOptionsProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.samplingPercentage = reader.int32();\r\n break;\r\n }\r\n case 2: {\r\n message.experimentId = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n CSIOptionsProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.samplingPercentage != null && message.hasOwnProperty(\"samplingPercentage\"))\r\n if (!$util.isInteger(message.samplingPercentage))\r\n return \"samplingPercentage: integer expected\";\r\n if (message.experimentId != null && message.hasOwnProperty(\"experimentId\"))\r\n if (!$util.isString(message.experimentId))\r\n return \"experimentId: string expected\";\r\n return null;\r\n };\r\n \r\n CSIOptionsProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.CSIOptionsProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.CSIOptionsProto();\r\n if (object.samplingPercentage != null)\r\n message.samplingPercentage = object.samplingPercentage | 0;\r\n if (object.experimentId != null)\r\n message.experimentId = String(object.experimentId);\r\n return message;\r\n };\r\n \r\n CSIOptionsProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.samplingPercentage = 0;\r\n object.experimentId = \"\";\r\n }\r\n if (message.samplingPercentage != null && message.hasOwnProperty(\"samplingPercentage\"))\r\n object.samplingPercentage = message.samplingPercentage;\r\n if (message.experimentId != null && message.hasOwnProperty(\"experimentId\"))\r\n object.experimentId = message.experimentId;\r\n return object;\r\n };\r\n \r\n CSIOptionsProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n CSIOptionsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.CSIOptionsProto\";\r\n };\r\n \r\n return CSIOptionsProto;\r\n })();\r\n \r\n dbroot.SearchTabProto = (function() {\r\n \r\n function SearchTabProto(properties) {\r\n this.inputBox = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n SearchTabProto.prototype.isVisible = false;\r\n SearchTabProto.prototype.tabLabel = null;\r\n SearchTabProto.prototype.baseUrl = \"\";\r\n SearchTabProto.prototype.viewportPrefix = \"\";\r\n SearchTabProto.prototype.inputBox = $util.emptyArray;\r\n SearchTabProto.prototype.requirement = null;\r\n \r\n SearchTabProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.SearchTabProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.isVisible = reader.bool();\r\n break;\r\n }\r\n case 2: {\r\n message.tabLabel = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.baseUrl = reader.string();\r\n break;\r\n }\r\n case 4: {\r\n message.viewportPrefix = reader.string();\r\n break;\r\n }\r\n case 5: {\r\n if (!(message.inputBox && message.inputBox.length))\r\n message.inputBox = [];\r\n message.inputBox.push($root.keyhole.dbroot.SearchTabProto.InputBoxInfo.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 6: {\r\n message.requirement = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"isVisible\"))\r\n throw $util.ProtocolError(\"missing required 'isVisible'\", { instance: message });\r\n return message;\r\n };\r\n \r\n SearchTabProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (typeof message.isVisible !== \"boolean\")\r\n return \"isVisible: boolean expected\";\r\n if (message.tabLabel != null && message.hasOwnProperty(\"tabLabel\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.tabLabel);\r\n if (error)\r\n return \"tabLabel.\" + error;\r\n }\r\n if (message.baseUrl != null && message.hasOwnProperty(\"baseUrl\"))\r\n if (!$util.isString(message.baseUrl))\r\n return \"baseUrl: string expected\";\r\n if (message.viewportPrefix != null && message.hasOwnProperty(\"viewportPrefix\"))\r\n if (!$util.isString(message.viewportPrefix))\r\n return \"viewportPrefix: string expected\";\r\n if (message.inputBox != null && message.hasOwnProperty(\"inputBox\")) {\r\n if (!Array.isArray(message.inputBox))\r\n return \"inputBox: array expected\";\r\n for (var i = 0; i < message.inputBox.length; ++i) {\r\n var error = $root.keyhole.dbroot.SearchTabProto.InputBoxInfo.verify(message.inputBox[i]);\r\n if (error)\r\n return \"inputBox.\" + error;\r\n }\r\n }\r\n if (message.requirement != null && message.hasOwnProperty(\"requirement\")) {\r\n var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirement);\r\n if (error)\r\n return \"requirement.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n SearchTabProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.SearchTabProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.SearchTabProto();\r\n if (object.isVisible != null)\r\n message.isVisible = Boolean(object.isVisible);\r\n if (object.tabLabel != null) {\r\n if (typeof object.tabLabel !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.SearchTabProto.tabLabel: object expected\");\r\n message.tabLabel = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.tabLabel);\r\n }\r\n if (object.baseUrl != null)\r\n message.baseUrl = String(object.baseUrl);\r\n if (object.viewportPrefix != null)\r\n message.viewportPrefix = String(object.viewportPrefix);\r\n if (object.inputBox) {\r\n if (!Array.isArray(object.inputBox))\r\n throw TypeError(\".keyhole.dbroot.SearchTabProto.inputBox: array expected\");\r\n message.inputBox = [];\r\n for (var i = 0; i < object.inputBox.length; ++i) {\r\n if (typeof object.inputBox[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.SearchTabProto.inputBox: object expected\");\r\n message.inputBox[i] = $root.keyhole.dbroot.SearchTabProto.InputBoxInfo.fromObject(object.inputBox[i]);\r\n }\r\n }\r\n if (object.requirement != null) {\r\n if (typeof object.requirement !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.SearchTabProto.requirement: object expected\");\r\n message.requirement = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirement);\r\n }\r\n return message;\r\n };\r\n \r\n SearchTabProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.inputBox = [];\r\n if (options.defaults) {\r\n object.isVisible = false;\r\n object.tabLabel = null;\r\n object.baseUrl = \"\";\r\n object.viewportPrefix = \"\";\r\n object.requirement = null;\r\n }\r\n if (message.isVisible != null && message.hasOwnProperty(\"isVisible\"))\r\n object.isVisible = message.isVisible;\r\n if (message.tabLabel != null && message.hasOwnProperty(\"tabLabel\"))\r\n object.tabLabel = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.tabLabel, options);\r\n if (message.baseUrl != null && message.hasOwnProperty(\"baseUrl\"))\r\n object.baseUrl = message.baseUrl;\r\n if (message.viewportPrefix != null && message.hasOwnProperty(\"viewportPrefix\"))\r\n object.viewportPrefix = message.viewportPrefix;\r\n if (message.inputBox && message.inputBox.length) {\r\n object.inputBox = [];\r\n for (var j = 0; j < message.inputBox.length; ++j)\r\n object.inputBox[j] = $root.keyhole.dbroot.SearchTabProto.InputBoxInfo.toObject(message.inputBox[j], options);\r\n }\r\n if (message.requirement != null && message.hasOwnProperty(\"requirement\"))\r\n object.requirement = $root.keyhole.dbroot.RequirementProto.toObject(message.requirement, options);\r\n return object;\r\n };\r\n \r\n SearchTabProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n SearchTabProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.SearchTabProto\";\r\n };\r\n \r\n SearchTabProto.InputBoxInfo = (function() {\r\n \r\n function InputBoxInfo(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n InputBoxInfo.prototype.label = null;\r\n InputBoxInfo.prototype.queryVerb = \"\";\r\n InputBoxInfo.prototype.queryPrepend = \"\";\r\n \r\n InputBoxInfo.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.SearchTabProto.InputBoxInfo();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.label = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.queryVerb = reader.string();\r\n break;\r\n }\r\n case 3: {\r\n message.queryPrepend = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"label\"))\r\n throw $util.ProtocolError(\"missing required 'label'\", { instance: message });\r\n if (!message.hasOwnProperty(\"queryVerb\"))\r\n throw $util.ProtocolError(\"missing required 'queryVerb'\", { instance: message });\r\n return message;\r\n };\r\n \r\n InputBoxInfo.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.label);\r\n if (error)\r\n return \"label.\" + error;\r\n }\r\n if (!$util.isString(message.queryVerb))\r\n return \"queryVerb: string expected\";\r\n if (message.queryPrepend != null && message.hasOwnProperty(\"queryPrepend\"))\r\n if (!$util.isString(message.queryPrepend))\r\n return \"queryPrepend: string expected\";\r\n return null;\r\n };\r\n \r\n InputBoxInfo.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.SearchTabProto.InputBoxInfo)\r\n return object;\r\n var message = new $root.keyhole.dbroot.SearchTabProto.InputBoxInfo();\r\n if (object.label != null) {\r\n if (typeof object.label !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.SearchTabProto.InputBoxInfo.label: object expected\");\r\n message.label = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.label);\r\n }\r\n if (object.queryVerb != null)\r\n message.queryVerb = String(object.queryVerb);\r\n if (object.queryPrepend != null)\r\n message.queryPrepend = String(object.queryPrepend);\r\n return message;\r\n };\r\n \r\n InputBoxInfo.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.label = null;\r\n object.queryVerb = \"\";\r\n object.queryPrepend = \"\";\r\n }\r\n if (message.label != null && message.hasOwnProperty(\"label\"))\r\n object.label = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.label, options);\r\n if (message.queryVerb != null && message.hasOwnProperty(\"queryVerb\"))\r\n object.queryVerb = message.queryVerb;\r\n if (message.queryPrepend != null && message.hasOwnProperty(\"queryPrepend\"))\r\n object.queryPrepend = message.queryPrepend;\r\n return object;\r\n };\r\n \r\n InputBoxInfo.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n InputBoxInfo.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.SearchTabProto.InputBoxInfo\";\r\n };\r\n \r\n return InputBoxInfo;\r\n })();\r\n \r\n return SearchTabProto;\r\n })();\r\n \r\n dbroot.CobrandProto = (function() {\r\n \r\n function CobrandProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n CobrandProto.prototype.logoUrl = \"\";\r\n CobrandProto.prototype.xCoord = null;\r\n CobrandProto.prototype.yCoord = null;\r\n CobrandProto.prototype.tiePoint = 6;\r\n CobrandProto.prototype.screenSize = 0;\r\n \r\n CobrandProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.CobrandProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.logoUrl = reader.string();\r\n break;\r\n }\r\n case 2: {\r\n message.xCoord = $root.keyhole.dbroot.CobrandProto.Coord.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.yCoord = $root.keyhole.dbroot.CobrandProto.Coord.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 4: {\r\n message.tiePoint = reader.int32();\r\n break;\r\n }\r\n case 5: {\r\n message.screenSize = reader.double();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"logoUrl\"))\r\n throw $util.ProtocolError(\"missing required 'logoUrl'\", { instance: message });\r\n return message;\r\n };\r\n \r\n CobrandProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isString(message.logoUrl))\r\n return \"logoUrl: string expected\";\r\n if (message.xCoord != null && message.hasOwnProperty(\"xCoord\")) {\r\n var error = $root.keyhole.dbroot.CobrandProto.Coord.verify(message.xCoord);\r\n if (error)\r\n return \"xCoord.\" + error;\r\n }\r\n if (message.yCoord != null && message.hasOwnProperty(\"yCoord\")) {\r\n var error = $root.keyhole.dbroot.CobrandProto.Coord.verify(message.yCoord);\r\n if (error)\r\n return \"yCoord.\" + error;\r\n }\r\n if (message.tiePoint != null && message.hasOwnProperty(\"tiePoint\"))\r\n switch (message.tiePoint) {\r\n default:\r\n return \"tiePoint: enum value expected\";\r\n case 0:\r\n case 1:\r\n case 2:\r\n case 3:\r\n case 4:\r\n case 5:\r\n case 6:\r\n case 7:\r\n case 8:\r\n break;\r\n }\r\n if (message.screenSize != null && message.hasOwnProperty(\"screenSize\"))\r\n if (typeof message.screenSize !== \"number\")\r\n return \"screenSize: number expected\";\r\n return null;\r\n };\r\n \r\n CobrandProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.CobrandProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.CobrandProto();\r\n if (object.logoUrl != null)\r\n message.logoUrl = String(object.logoUrl);\r\n if (object.xCoord != null) {\r\n if (typeof object.xCoord !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.CobrandProto.xCoord: object expected\");\r\n message.xCoord = $root.keyhole.dbroot.CobrandProto.Coord.fromObject(object.xCoord);\r\n }\r\n if (object.yCoord != null) {\r\n if (typeof object.yCoord !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.CobrandProto.yCoord: object expected\");\r\n message.yCoord = $root.keyhole.dbroot.CobrandProto.Coord.fromObject(object.yCoord);\r\n }\r\n switch (object.tiePoint) {\r\n case \"TOP_LEFT\":\r\n case 0:\r\n message.tiePoint = 0;\r\n break;\r\n case \"TOP_CENTER\":\r\n case 1:\r\n message.tiePoint = 1;\r\n break;\r\n case \"TOP_RIGHT\":\r\n case 2:\r\n message.tiePoint = 2;\r\n break;\r\n case \"MID_LEFT\":\r\n case 3:\r\n message.tiePoint = 3;\r\n break;\r\n case \"MID_CENTER\":\r\n case 4:\r\n message.tiePoint = 4;\r\n break;\r\n case \"MID_RIGHT\":\r\n case 5:\r\n message.tiePoint = 5;\r\n break;\r\n case \"BOTTOM_LEFT\":\r\n case 6:\r\n message.tiePoint = 6;\r\n break;\r\n case \"BOTTOM_CENTER\":\r\n case 7:\r\n message.tiePoint = 7;\r\n break;\r\n case \"BOTTOM_RIGHT\":\r\n case 8:\r\n message.tiePoint = 8;\r\n break;\r\n }\r\n if (object.screenSize != null)\r\n message.screenSize = Number(object.screenSize);\r\n return message;\r\n };\r\n \r\n CobrandProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.logoUrl = \"\";\r\n object.xCoord = null;\r\n object.yCoord = null;\r\n object.tiePoint = options.enums === String ? \"BOTTOM_LEFT\" : 6;\r\n object.screenSize = 0;\r\n }\r\n if (message.logoUrl != null && message.hasOwnProperty(\"logoUrl\"))\r\n object.logoUrl = message.logoUrl;\r\n if (message.xCoord != null && message.hasOwnProperty(\"xCoord\"))\r\n object.xCoord = $root.keyhole.dbroot.CobrandProto.Coord.toObject(message.xCoord, options);\r\n if (message.yCoord != null && message.hasOwnProperty(\"yCoord\"))\r\n object.yCoord = $root.keyhole.dbroot.CobrandProto.Coord.toObject(message.yCoord, options);\r\n if (message.tiePoint != null && message.hasOwnProperty(\"tiePoint\"))\r\n object.tiePoint = options.enums === String ? $root.keyhole.dbroot.CobrandProto.TiePoint[message.tiePoint] : message.tiePoint;\r\n if (message.screenSize != null && message.hasOwnProperty(\"screenSize\"))\r\n object.screenSize = options.json && !isFinite(message.screenSize) ? String(message.screenSize) : message.screenSize;\r\n return object;\r\n };\r\n \r\n CobrandProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n CobrandProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.CobrandProto\";\r\n };\r\n \r\n CobrandProto.Coord = (function() {\r\n \r\n function Coord(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n Coord.prototype.value = 0;\r\n Coord.prototype.isRelative = false;\r\n \r\n Coord.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.CobrandProto.Coord();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.value = reader.double();\r\n break;\r\n }\r\n case 2: {\r\n message.isRelative = reader.bool();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"value\"))\r\n throw $util.ProtocolError(\"missing required 'value'\", { instance: message });\r\n return message;\r\n };\r\n \r\n Coord.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (typeof message.value !== \"number\")\r\n return \"value: number expected\";\r\n if (message.isRelative != null && message.hasOwnProperty(\"isRelative\"))\r\n if (typeof message.isRelative !== \"boolean\")\r\n return \"isRelative: boolean expected\";\r\n return null;\r\n };\r\n \r\n Coord.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.CobrandProto.Coord)\r\n return object;\r\n var message = new $root.keyhole.dbroot.CobrandProto.Coord();\r\n if (object.value != null)\r\n message.value = Number(object.value);\r\n if (object.isRelative != null)\r\n message.isRelative = Boolean(object.isRelative);\r\n return message;\r\n };\r\n \r\n Coord.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.value = 0;\r\n object.isRelative = false;\r\n }\r\n if (message.value != null && message.hasOwnProperty(\"value\"))\r\n object.value = options.json && !isFinite(message.value) ? String(message.value) : message.value;\r\n if (message.isRelative != null && message.hasOwnProperty(\"isRelative\"))\r\n object.isRelative = message.isRelative;\r\n return object;\r\n };\r\n \r\n Coord.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n Coord.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.CobrandProto.Coord\";\r\n };\r\n \r\n return Coord;\r\n })();\r\n \r\n CobrandProto.TiePoint = (function() {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"TOP_LEFT\"] = 0;\r\n values[valuesById[1] = \"TOP_CENTER\"] = 1;\r\n values[valuesById[2] = \"TOP_RIGHT\"] = 2;\r\n values[valuesById[3] = \"MID_LEFT\"] = 3;\r\n values[valuesById[4] = \"MID_CENTER\"] = 4;\r\n values[valuesById[5] = \"MID_RIGHT\"] = 5;\r\n values[valuesById[6] = \"BOTTOM_LEFT\"] = 6;\r\n values[valuesById[7] = \"BOTTOM_CENTER\"] = 7;\r\n values[valuesById[8] = \"BOTTOM_RIGHT\"] = 8;\r\n return values;\r\n })();\r\n \r\n return CobrandProto;\r\n })();\r\n \r\n dbroot.DatabaseDescriptionProto = (function() {\r\n \r\n function DatabaseDescriptionProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n DatabaseDescriptionProto.prototype.databaseName = null;\r\n DatabaseDescriptionProto.prototype.databaseUrl = \"\";\r\n \r\n DatabaseDescriptionProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DatabaseDescriptionProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.databaseUrl = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"databaseUrl\"))\r\n throw $util.ProtocolError(\"missing required 'databaseUrl'\", { instance: message });\r\n return message;\r\n };\r\n \r\n DatabaseDescriptionProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.databaseName != null && message.hasOwnProperty(\"databaseName\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.databaseName);\r\n if (error)\r\n return \"databaseName.\" + error;\r\n }\r\n if (!$util.isString(message.databaseUrl))\r\n return \"databaseUrl: string expected\";\r\n return null;\r\n };\r\n \r\n DatabaseDescriptionProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.DatabaseDescriptionProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.DatabaseDescriptionProto();\r\n if (object.databaseName != null) {\r\n if (typeof object.databaseName !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DatabaseDescriptionProto.databaseName: object expected\");\r\n message.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.databaseName);\r\n }\r\n if (object.databaseUrl != null)\r\n message.databaseUrl = String(object.databaseUrl);\r\n return message;\r\n };\r\n \r\n DatabaseDescriptionProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.databaseName = null;\r\n object.databaseUrl = \"\";\r\n }\r\n if (message.databaseName != null && message.hasOwnProperty(\"databaseName\"))\r\n object.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.databaseName, options);\r\n if (message.databaseUrl != null && message.hasOwnProperty(\"databaseUrl\"))\r\n object.databaseUrl = message.databaseUrl;\r\n return object;\r\n };\r\n \r\n DatabaseDescriptionProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n DatabaseDescriptionProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.DatabaseDescriptionProto\";\r\n };\r\n \r\n return DatabaseDescriptionProto;\r\n })();\r\n \r\n dbroot.ConfigScriptProto = (function() {\r\n \r\n function ConfigScriptProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n ConfigScriptProto.prototype.scriptName = \"\";\r\n ConfigScriptProto.prototype.scriptData = \"\";\r\n \r\n ConfigScriptProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.ConfigScriptProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.scriptName = reader.string();\r\n break;\r\n }\r\n case 2: {\r\n message.scriptData = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"scriptName\"))\r\n throw $util.ProtocolError(\"missing required 'scriptName'\", { instance: message });\r\n if (!message.hasOwnProperty(\"scriptData\"))\r\n throw $util.ProtocolError(\"missing required 'scriptData'\", { instance: message });\r\n return message;\r\n };\r\n \r\n ConfigScriptProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isString(message.scriptName))\r\n return \"scriptName: string expected\";\r\n if (!$util.isString(message.scriptData))\r\n return \"scriptData: string expected\";\r\n return null;\r\n };\r\n \r\n ConfigScriptProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.ConfigScriptProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.ConfigScriptProto();\r\n if (object.scriptName != null)\r\n message.scriptName = String(object.scriptName);\r\n if (object.scriptData != null)\r\n message.scriptData = String(object.scriptData);\r\n return message;\r\n };\r\n \r\n ConfigScriptProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.scriptName = \"\";\r\n object.scriptData = \"\";\r\n }\r\n if (message.scriptName != null && message.hasOwnProperty(\"scriptName\"))\r\n object.scriptName = message.scriptName;\r\n if (message.scriptData != null && message.hasOwnProperty(\"scriptData\"))\r\n object.scriptData = message.scriptData;\r\n return object;\r\n };\r\n \r\n ConfigScriptProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n ConfigScriptProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.ConfigScriptProto\";\r\n };\r\n \r\n return ConfigScriptProto;\r\n })();\r\n \r\n dbroot.SwoopParamsProto = (function() {\r\n \r\n function SwoopParamsProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n SwoopParamsProto.prototype.startDistInMeters = 0;\r\n \r\n SwoopParamsProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.SwoopParamsProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.startDistInMeters = reader.double();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n SwoopParamsProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.startDistInMeters != null && message.hasOwnProperty(\"startDistInMeters\"))\r\n if (typeof message.startDistInMeters !== \"number\")\r\n return \"startDistInMeters: number expected\";\r\n return null;\r\n };\r\n \r\n SwoopParamsProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.SwoopParamsProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.SwoopParamsProto();\r\n if (object.startDistInMeters != null)\r\n message.startDistInMeters = Number(object.startDistInMeters);\r\n return message;\r\n };\r\n \r\n SwoopParamsProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.startDistInMeters = 0;\r\n if (message.startDistInMeters != null && message.hasOwnProperty(\"startDistInMeters\"))\r\n object.startDistInMeters = options.json && !isFinite(message.startDistInMeters) ? String(message.startDistInMeters) : message.startDistInMeters;\r\n return object;\r\n };\r\n \r\n SwoopParamsProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n SwoopParamsProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.SwoopParamsProto\";\r\n };\r\n \r\n return SwoopParamsProto;\r\n })();\r\n \r\n dbroot.PostingServerProto = (function() {\r\n \r\n function PostingServerProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n PostingServerProto.prototype.name = null;\r\n PostingServerProto.prototype.baseUrl = null;\r\n PostingServerProto.prototype.postWizardPath = null;\r\n PostingServerProto.prototype.fileSubmitPath = null;\r\n \r\n PostingServerProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.PostingServerProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.name = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.baseUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.postWizardPath = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 4: {\r\n message.fileSubmitPath = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n PostingServerProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.name != null && message.hasOwnProperty(\"name\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.name);\r\n if (error)\r\n return \"name.\" + error;\r\n }\r\n if (message.baseUrl != null && message.hasOwnProperty(\"baseUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.baseUrl);\r\n if (error)\r\n return \"baseUrl.\" + error;\r\n }\r\n if (message.postWizardPath != null && message.hasOwnProperty(\"postWizardPath\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.postWizardPath);\r\n if (error)\r\n return \"postWizardPath.\" + error;\r\n }\r\n if (message.fileSubmitPath != null && message.hasOwnProperty(\"fileSubmitPath\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.fileSubmitPath);\r\n if (error)\r\n return \"fileSubmitPath.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n PostingServerProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.PostingServerProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.PostingServerProto();\r\n if (object.name != null) {\r\n if (typeof object.name !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.PostingServerProto.name: object expected\");\r\n message.name = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.name);\r\n }\r\n if (object.baseUrl != null) {\r\n if (typeof object.baseUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.PostingServerProto.baseUrl: object expected\");\r\n message.baseUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.baseUrl);\r\n }\r\n if (object.postWizardPath != null) {\r\n if (typeof object.postWizardPath !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.PostingServerProto.postWizardPath: object expected\");\r\n message.postWizardPath = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.postWizardPath);\r\n }\r\n if (object.fileSubmitPath != null) {\r\n if (typeof object.fileSubmitPath !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.PostingServerProto.fileSubmitPath: object expected\");\r\n message.fileSubmitPath = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.fileSubmitPath);\r\n }\r\n return message;\r\n };\r\n \r\n PostingServerProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.name = null;\r\n object.baseUrl = null;\r\n object.postWizardPath = null;\r\n object.fileSubmitPath = null;\r\n }\r\n if (message.name != null && message.hasOwnProperty(\"name\"))\r\n object.name = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.name, options);\r\n if (message.baseUrl != null && message.hasOwnProperty(\"baseUrl\"))\r\n object.baseUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.baseUrl, options);\r\n if (message.postWizardPath != null && message.hasOwnProperty(\"postWizardPath\"))\r\n object.postWizardPath = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.postWizardPath, options);\r\n if (message.fileSubmitPath != null && message.hasOwnProperty(\"fileSubmitPath\"))\r\n object.fileSubmitPath = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.fileSubmitPath, options);\r\n return object;\r\n };\r\n \r\n PostingServerProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n PostingServerProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.PostingServerProto\";\r\n };\r\n \r\n return PostingServerProto;\r\n })();\r\n \r\n dbroot.PlanetaryDatabaseProto = (function() {\r\n \r\n function PlanetaryDatabaseProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n PlanetaryDatabaseProto.prototype.url = null;\r\n PlanetaryDatabaseProto.prototype.name = null;\r\n \r\n PlanetaryDatabaseProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.PlanetaryDatabaseProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.name = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"url\"))\r\n throw $util.ProtocolError(\"missing required 'url'\", { instance: message });\r\n if (!message.hasOwnProperty(\"name\"))\r\n throw $util.ProtocolError(\"missing required 'name'\", { instance: message });\r\n return message;\r\n };\r\n \r\n PlanetaryDatabaseProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url);\r\n if (error)\r\n return \"url.\" + error;\r\n }\r\n {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.name);\r\n if (error)\r\n return \"name.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n PlanetaryDatabaseProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.PlanetaryDatabaseProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.PlanetaryDatabaseProto();\r\n if (object.url != null) {\r\n if (typeof object.url !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.PlanetaryDatabaseProto.url: object expected\");\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url);\r\n }\r\n if (object.name != null) {\r\n if (typeof object.name !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.PlanetaryDatabaseProto.name: object expected\");\r\n message.name = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.name);\r\n }\r\n return message;\r\n };\r\n \r\n PlanetaryDatabaseProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.url = null;\r\n object.name = null;\r\n }\r\n if (message.url != null && message.hasOwnProperty(\"url\"))\r\n object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options);\r\n if (message.name != null && message.hasOwnProperty(\"name\"))\r\n object.name = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.name, options);\r\n return object;\r\n };\r\n \r\n PlanetaryDatabaseProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n PlanetaryDatabaseProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.PlanetaryDatabaseProto\";\r\n };\r\n \r\n return PlanetaryDatabaseProto;\r\n })();\r\n \r\n dbroot.LogServerProto = (function() {\r\n \r\n function LogServerProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n LogServerProto.prototype.url = null;\r\n LogServerProto.prototype.enable = false;\r\n LogServerProto.prototype.throttlingFactor = 1;\r\n \r\n LogServerProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.LogServerProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.enable = reader.bool();\r\n break;\r\n }\r\n case 3: {\r\n message.throttlingFactor = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n LogServerProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.url != null && message.hasOwnProperty(\"url\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url);\r\n if (error)\r\n return \"url.\" + error;\r\n }\r\n if (message.enable != null && message.hasOwnProperty(\"enable\"))\r\n if (typeof message.enable !== \"boolean\")\r\n return \"enable: boolean expected\";\r\n if (message.throttlingFactor != null && message.hasOwnProperty(\"throttlingFactor\"))\r\n if (!$util.isInteger(message.throttlingFactor))\r\n return \"throttlingFactor: integer expected\";\r\n return null;\r\n };\r\n \r\n LogServerProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.LogServerProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.LogServerProto();\r\n if (object.url != null) {\r\n if (typeof object.url !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.LogServerProto.url: object expected\");\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url);\r\n }\r\n if (object.enable != null)\r\n message.enable = Boolean(object.enable);\r\n if (object.throttlingFactor != null)\r\n message.throttlingFactor = object.throttlingFactor | 0;\r\n return message;\r\n };\r\n \r\n LogServerProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.url = null;\r\n object.enable = false;\r\n object.throttlingFactor = 1;\r\n }\r\n if (message.url != null && message.hasOwnProperty(\"url\"))\r\n object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options);\r\n if (message.enable != null && message.hasOwnProperty(\"enable\"))\r\n object.enable = message.enable;\r\n if (message.throttlingFactor != null && message.hasOwnProperty(\"throttlingFactor\"))\r\n object.throttlingFactor = message.throttlingFactor;\r\n return object;\r\n };\r\n \r\n LogServerProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n LogServerProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.LogServerProto\";\r\n };\r\n \r\n return LogServerProto;\r\n })();\r\n \r\n dbroot.EndSnippetProto = (function() {\r\n \r\n function EndSnippetProto(properties) {\r\n this.mfeDomains = [];\r\n this.searchTab = [];\r\n this.cobrandInfo = [];\r\n this.validDatabase = [];\r\n this.configScript = [];\r\n this.planetaryDatabase = [];\r\n this.filmstripConfig = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n EndSnippetProto.prototype.model = null;\r\n EndSnippetProto.prototype.authServerUrl = null;\r\n EndSnippetProto.prototype.disableAuthentication = false;\r\n EndSnippetProto.prototype.mfeDomains = $util.emptyArray;\r\n EndSnippetProto.prototype.mfeLangParam = \"hl=$5Bhl5D\";\r\n EndSnippetProto.prototype.adsUrlPatterns = \"\";\r\n EndSnippetProto.prototype.reverseGeocoderUrl = null;\r\n EndSnippetProto.prototype.reverseGeocoderProtocolVersion = 3;\r\n EndSnippetProto.prototype.skyDatabaseIsAvailable = true;\r\n EndSnippetProto.prototype.skyDatabaseUrl = null;\r\n EndSnippetProto.prototype.defaultWebPageIntlUrl = null;\r\n EndSnippetProto.prototype.numStartUpTips = 17;\r\n EndSnippetProto.prototype.startUpTipsUrl = null;\r\n EndSnippetProto.prototype.numProStartUpTips = 0;\r\n EndSnippetProto.prototype.proStartUpTipsUrl = null;\r\n EndSnippetProto.prototype.startupTipsIntlUrl = null;\r\n EndSnippetProto.prototype.userGuideIntlUrl = null;\r\n EndSnippetProto.prototype.supportCenterIntlUrl = null;\r\n EndSnippetProto.prototype.businessListingIntlUrl = null;\r\n EndSnippetProto.prototype.supportAnswerIntlUrl = null;\r\n EndSnippetProto.prototype.supportTopicIntlUrl = null;\r\n EndSnippetProto.prototype.supportRequestIntlUrl = null;\r\n EndSnippetProto.prototype.earthIntlUrl = null;\r\n EndSnippetProto.prototype.addContentUrl = null;\r\n EndSnippetProto.prototype.sketchupNotInstalledUrl = null;\r\n EndSnippetProto.prototype.sketchupErrorUrl = null;\r\n EndSnippetProto.prototype.freeLicenseUrl = null;\r\n EndSnippetProto.prototype.proLicenseUrl = null;\r\n EndSnippetProto.prototype.tutorialUrl = null;\r\n EndSnippetProto.prototype.keyboardShortcutsUrl = null;\r\n EndSnippetProto.prototype.releaseNotesUrl = null;\r\n EndSnippetProto.prototype.hideUserData = false;\r\n EndSnippetProto.prototype.useGeLogo = true;\r\n EndSnippetProto.prototype.dioramaDescriptionUrlBase = null;\r\n EndSnippetProto.prototype.dioramaDefaultColor = 4291281607;\r\n EndSnippetProto.prototype.dioramaBlacklistUrl = null;\r\n EndSnippetProto.prototype.clientOptions = null;\r\n EndSnippetProto.prototype.fetchingOptions = null;\r\n EndSnippetProto.prototype.timeMachineOptions = null;\r\n EndSnippetProto.prototype.csiOptions = null;\r\n EndSnippetProto.prototype.searchTab = $util.emptyArray;\r\n EndSnippetProto.prototype.cobrandInfo = $util.emptyArray;\r\n EndSnippetProto.prototype.validDatabase = $util.emptyArray;\r\n EndSnippetProto.prototype.configScript = $util.emptyArray;\r\n EndSnippetProto.prototype.deauthServerUrl = null;\r\n EndSnippetProto.prototype.swoopParameters = null;\r\n EndSnippetProto.prototype.bbsServerInfo = null;\r\n EndSnippetProto.prototype.dataErrorServerInfo = null;\r\n EndSnippetProto.prototype.planetaryDatabase = $util.emptyArray;\r\n EndSnippetProto.prototype.logServer = null;\r\n EndSnippetProto.prototype.autopiaOptions = null;\r\n EndSnippetProto.prototype.searchConfig = null;\r\n EndSnippetProto.prototype.searchInfo = null;\r\n EndSnippetProto.prototype.elevationServiceBaseUrl = \"http://maps.google.com/maps/api/elevation/\";\r\n EndSnippetProto.prototype.elevationProfileQueryDelay = 500;\r\n EndSnippetProto.prototype.proUpgradeUrl = null;\r\n EndSnippetProto.prototype.earthCommunityUrl = null;\r\n EndSnippetProto.prototype.googleMapsUrl = null;\r\n EndSnippetProto.prototype.sharingUrl = null;\r\n EndSnippetProto.prototype.privacyPolicyUrl = null;\r\n EndSnippetProto.prototype.doGplusUserCheck = false;\r\n EndSnippetProto.prototype.rocktreeDataProto = null;\r\n EndSnippetProto.prototype.filmstripConfig = $util.emptyArray;\r\n EndSnippetProto.prototype.showSigninButton = false;\r\n EndSnippetProto.prototype.proMeasureUpsellUrl = null;\r\n EndSnippetProto.prototype.proPrintUpsellUrl = null;\r\n EndSnippetProto.prototype.starDataProto = null;\r\n EndSnippetProto.prototype.feedbackUrl = null;\r\n EndSnippetProto.prototype.oauth2LoginUrl = null;\r\n \r\n EndSnippetProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.model = $root.keyhole.dbroot.PlanetModelProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.authServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.disableAuthentication = reader.bool();\r\n break;\r\n }\r\n case 4: {\r\n if (!(message.mfeDomains && message.mfeDomains.length))\r\n message.mfeDomains = [];\r\n message.mfeDomains.push($root.keyhole.dbroot.MfeDomainFeaturesProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 5: {\r\n message.mfeLangParam = reader.string();\r\n break;\r\n }\r\n case 6: {\r\n message.adsUrlPatterns = reader.string();\r\n break;\r\n }\r\n case 7: {\r\n message.reverseGeocoderUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 8: {\r\n message.reverseGeocoderProtocolVersion = reader.int32();\r\n break;\r\n }\r\n case 9: {\r\n message.skyDatabaseIsAvailable = reader.bool();\r\n break;\r\n }\r\n case 10: {\r\n message.skyDatabaseUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 11: {\r\n message.defaultWebPageIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 12: {\r\n message.numStartUpTips = reader.int32();\r\n break;\r\n }\r\n case 13: {\r\n message.startUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 51: {\r\n message.numProStartUpTips = reader.int32();\r\n break;\r\n }\r\n case 52: {\r\n message.proStartUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 64: {\r\n message.startupTipsIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 14: {\r\n message.userGuideIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 15: {\r\n message.supportCenterIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 16: {\r\n message.businessListingIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 17: {\r\n message.supportAnswerIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 18: {\r\n message.supportTopicIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 19: {\r\n message.supportRequestIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 20: {\r\n message.earthIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 21: {\r\n message.addContentUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 22: {\r\n message.sketchupNotInstalledUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 23: {\r\n message.sketchupErrorUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 24: {\r\n message.freeLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 25: {\r\n message.proLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 48: {\r\n message.tutorialUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 49: {\r\n message.keyboardShortcutsUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 50: {\r\n message.releaseNotesUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 26: {\r\n message.hideUserData = reader.bool();\r\n break;\r\n }\r\n case 27: {\r\n message.useGeLogo = reader.bool();\r\n break;\r\n }\r\n case 28: {\r\n message.dioramaDescriptionUrlBase = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 29: {\r\n message.dioramaDefaultColor = reader.uint32();\r\n break;\r\n }\r\n case 53: {\r\n message.dioramaBlacklistUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 30: {\r\n message.clientOptions = $root.keyhole.dbroot.ClientOptionsProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 31: {\r\n message.fetchingOptions = $root.keyhole.dbroot.FetchingOptionsProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 32: {\r\n message.timeMachineOptions = $root.keyhole.dbroot.TimeMachineOptionsProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 33: {\r\n message.csiOptions = $root.keyhole.dbroot.CSIOptionsProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 34: {\r\n if (!(message.searchTab && message.searchTab.length))\r\n message.searchTab = [];\r\n message.searchTab.push($root.keyhole.dbroot.SearchTabProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 35: {\r\n if (!(message.cobrandInfo && message.cobrandInfo.length))\r\n message.cobrandInfo = [];\r\n message.cobrandInfo.push($root.keyhole.dbroot.CobrandProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 36: {\r\n if (!(message.validDatabase && message.validDatabase.length))\r\n message.validDatabase = [];\r\n message.validDatabase.push($root.keyhole.dbroot.DatabaseDescriptionProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 37: {\r\n if (!(message.configScript && message.configScript.length))\r\n message.configScript = [];\r\n message.configScript.push($root.keyhole.dbroot.ConfigScriptProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 38: {\r\n message.deauthServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 39: {\r\n message.swoopParameters = $root.keyhole.dbroot.SwoopParamsProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 40: {\r\n message.bbsServerInfo = $root.keyhole.dbroot.PostingServerProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 41: {\r\n message.dataErrorServerInfo = $root.keyhole.dbroot.PostingServerProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 42: {\r\n if (!(message.planetaryDatabase && message.planetaryDatabase.length))\r\n message.planetaryDatabase = [];\r\n message.planetaryDatabase.push($root.keyhole.dbroot.PlanetaryDatabaseProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 43: {\r\n message.logServer = $root.keyhole.dbroot.LogServerProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 44: {\r\n message.autopiaOptions = $root.keyhole.dbroot.AutopiaOptionsProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 54: {\r\n message.searchConfig = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 45: {\r\n message.searchInfo = $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 46: {\r\n message.elevationServiceBaseUrl = reader.string();\r\n break;\r\n }\r\n case 47: {\r\n message.elevationProfileQueryDelay = reader.int32();\r\n break;\r\n }\r\n case 55: {\r\n message.proUpgradeUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 56: {\r\n message.earthCommunityUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 57: {\r\n message.googleMapsUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 58: {\r\n message.sharingUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 59: {\r\n message.privacyPolicyUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 60: {\r\n message.doGplusUserCheck = reader.bool();\r\n break;\r\n }\r\n case 61: {\r\n message.rocktreeDataProto = $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 62: {\r\n if (!(message.filmstripConfig && message.filmstripConfig.length))\r\n message.filmstripConfig = [];\r\n message.filmstripConfig.push($root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 63: {\r\n message.showSigninButton = reader.bool();\r\n break;\r\n }\r\n case 65: {\r\n message.proMeasureUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 66: {\r\n message.proPrintUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 67: {\r\n message.starDataProto = $root.keyhole.dbroot.EndSnippetProto.StarDataProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 68: {\r\n message.feedbackUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 69: {\r\n message.oauth2LoginUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n EndSnippetProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.model != null && message.hasOwnProperty(\"model\")) {\r\n var error = $root.keyhole.dbroot.PlanetModelProto.verify(message.model);\r\n if (error)\r\n return \"model.\" + error;\r\n }\r\n if (message.authServerUrl != null && message.hasOwnProperty(\"authServerUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.authServerUrl);\r\n if (error)\r\n return \"authServerUrl.\" + error;\r\n }\r\n if (message.disableAuthentication != null && message.hasOwnProperty(\"disableAuthentication\"))\r\n if (typeof message.disableAuthentication !== \"boolean\")\r\n return \"disableAuthentication: boolean expected\";\r\n if (message.mfeDomains != null && message.hasOwnProperty(\"mfeDomains\")) {\r\n if (!Array.isArray(message.mfeDomains))\r\n return \"mfeDomains: array expected\";\r\n for (var i = 0; i < message.mfeDomains.length; ++i) {\r\n var error = $root.keyhole.dbroot.MfeDomainFeaturesProto.verify(message.mfeDomains[i]);\r\n if (error)\r\n return \"mfeDomains.\" + error;\r\n }\r\n }\r\n if (message.mfeLangParam != null && message.hasOwnProperty(\"mfeLangParam\"))\r\n if (!$util.isString(message.mfeLangParam))\r\n return \"mfeLangParam: string expected\";\r\n if (message.adsUrlPatterns != null && message.hasOwnProperty(\"adsUrlPatterns\"))\r\n if (!$util.isString(message.adsUrlPatterns))\r\n return \"adsUrlPatterns: string expected\";\r\n if (message.reverseGeocoderUrl != null && message.hasOwnProperty(\"reverseGeocoderUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.reverseGeocoderUrl);\r\n if (error)\r\n return \"reverseGeocoderUrl.\" + error;\r\n }\r\n if (message.reverseGeocoderProtocolVersion != null && message.hasOwnProperty(\"reverseGeocoderProtocolVersion\"))\r\n if (!$util.isInteger(message.reverseGeocoderProtocolVersion))\r\n return \"reverseGeocoderProtocolVersion: integer expected\";\r\n if (message.skyDatabaseIsAvailable != null && message.hasOwnProperty(\"skyDatabaseIsAvailable\"))\r\n if (typeof message.skyDatabaseIsAvailable !== \"boolean\")\r\n return \"skyDatabaseIsAvailable: boolean expected\";\r\n if (message.skyDatabaseUrl != null && message.hasOwnProperty(\"skyDatabaseUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.skyDatabaseUrl);\r\n if (error)\r\n return \"skyDatabaseUrl.\" + error;\r\n }\r\n if (message.defaultWebPageIntlUrl != null && message.hasOwnProperty(\"defaultWebPageIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.defaultWebPageIntlUrl);\r\n if (error)\r\n return \"defaultWebPageIntlUrl.\" + error;\r\n }\r\n if (message.numStartUpTips != null && message.hasOwnProperty(\"numStartUpTips\"))\r\n if (!$util.isInteger(message.numStartUpTips))\r\n return \"numStartUpTips: integer expected\";\r\n if (message.startUpTipsUrl != null && message.hasOwnProperty(\"startUpTipsUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.startUpTipsUrl);\r\n if (error)\r\n return \"startUpTipsUrl.\" + error;\r\n }\r\n if (message.numProStartUpTips != null && message.hasOwnProperty(\"numProStartUpTips\"))\r\n if (!$util.isInteger(message.numProStartUpTips))\r\n return \"numProStartUpTips: integer expected\";\r\n if (message.proStartUpTipsUrl != null && message.hasOwnProperty(\"proStartUpTipsUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proStartUpTipsUrl);\r\n if (error)\r\n return \"proStartUpTipsUrl.\" + error;\r\n }\r\n if (message.startupTipsIntlUrl != null && message.hasOwnProperty(\"startupTipsIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.startupTipsIntlUrl);\r\n if (error)\r\n return \"startupTipsIntlUrl.\" + error;\r\n }\r\n if (message.userGuideIntlUrl != null && message.hasOwnProperty(\"userGuideIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.userGuideIntlUrl);\r\n if (error)\r\n return \"userGuideIntlUrl.\" + error;\r\n }\r\n if (message.supportCenterIntlUrl != null && message.hasOwnProperty(\"supportCenterIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.supportCenterIntlUrl);\r\n if (error)\r\n return \"supportCenterIntlUrl.\" + error;\r\n }\r\n if (message.businessListingIntlUrl != null && message.hasOwnProperty(\"businessListingIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.businessListingIntlUrl);\r\n if (error)\r\n return \"businessListingIntlUrl.\" + error;\r\n }\r\n if (message.supportAnswerIntlUrl != null && message.hasOwnProperty(\"supportAnswerIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.supportAnswerIntlUrl);\r\n if (error)\r\n return \"supportAnswerIntlUrl.\" + error;\r\n }\r\n if (message.supportTopicIntlUrl != null && message.hasOwnProperty(\"supportTopicIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.supportTopicIntlUrl);\r\n if (error)\r\n return \"supportTopicIntlUrl.\" + error;\r\n }\r\n if (message.supportRequestIntlUrl != null && message.hasOwnProperty(\"supportRequestIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.supportRequestIntlUrl);\r\n if (error)\r\n return \"supportRequestIntlUrl.\" + error;\r\n }\r\n if (message.earthIntlUrl != null && message.hasOwnProperty(\"earthIntlUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.earthIntlUrl);\r\n if (error)\r\n return \"earthIntlUrl.\" + error;\r\n }\r\n if (message.addContentUrl != null && message.hasOwnProperty(\"addContentUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.addContentUrl);\r\n if (error)\r\n return \"addContentUrl.\" + error;\r\n }\r\n if (message.sketchupNotInstalledUrl != null && message.hasOwnProperty(\"sketchupNotInstalledUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.sketchupNotInstalledUrl);\r\n if (error)\r\n return \"sketchupNotInstalledUrl.\" + error;\r\n }\r\n if (message.sketchupErrorUrl != null && message.hasOwnProperty(\"sketchupErrorUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.sketchupErrorUrl);\r\n if (error)\r\n return \"sketchupErrorUrl.\" + error;\r\n }\r\n if (message.freeLicenseUrl != null && message.hasOwnProperty(\"freeLicenseUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.freeLicenseUrl);\r\n if (error)\r\n return \"freeLicenseUrl.\" + error;\r\n }\r\n if (message.proLicenseUrl != null && message.hasOwnProperty(\"proLicenseUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proLicenseUrl);\r\n if (error)\r\n return \"proLicenseUrl.\" + error;\r\n }\r\n if (message.tutorialUrl != null && message.hasOwnProperty(\"tutorialUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.tutorialUrl);\r\n if (error)\r\n return \"tutorialUrl.\" + error;\r\n }\r\n if (message.keyboardShortcutsUrl != null && message.hasOwnProperty(\"keyboardShortcutsUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.keyboardShortcutsUrl);\r\n if (error)\r\n return \"keyboardShortcutsUrl.\" + error;\r\n }\r\n if (message.releaseNotesUrl != null && message.hasOwnProperty(\"releaseNotesUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.releaseNotesUrl);\r\n if (error)\r\n return \"releaseNotesUrl.\" + error;\r\n }\r\n if (message.hideUserData != null && message.hasOwnProperty(\"hideUserData\"))\r\n if (typeof message.hideUserData !== \"boolean\")\r\n return \"hideUserData: boolean expected\";\r\n if (message.useGeLogo != null && message.hasOwnProperty(\"useGeLogo\"))\r\n if (typeof message.useGeLogo !== \"boolean\")\r\n return \"useGeLogo: boolean expected\";\r\n if (message.dioramaDescriptionUrlBase != null && message.hasOwnProperty(\"dioramaDescriptionUrlBase\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.dioramaDescriptionUrlBase);\r\n if (error)\r\n return \"dioramaDescriptionUrlBase.\" + error;\r\n }\r\n if (message.dioramaDefaultColor != null && message.hasOwnProperty(\"dioramaDefaultColor\"))\r\n if (!$util.isInteger(message.dioramaDefaultColor))\r\n return \"dioramaDefaultColor: integer expected\";\r\n if (message.dioramaBlacklistUrl != null && message.hasOwnProperty(\"dioramaBlacklistUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.dioramaBlacklistUrl);\r\n if (error)\r\n return \"dioramaBlacklistUrl.\" + error;\r\n }\r\n if (message.clientOptions != null && message.hasOwnProperty(\"clientOptions\")) {\r\n var error = $root.keyhole.dbroot.ClientOptionsProto.verify(message.clientOptions);\r\n if (error)\r\n return \"clientOptions.\" + error;\r\n }\r\n if (message.fetchingOptions != null && message.hasOwnProperty(\"fetchingOptions\")) {\r\n var error = $root.keyhole.dbroot.FetchingOptionsProto.verify(message.fetchingOptions);\r\n if (error)\r\n return \"fetchingOptions.\" + error;\r\n }\r\n if (message.timeMachineOptions != null && message.hasOwnProperty(\"timeMachineOptions\")) {\r\n var error = $root.keyhole.dbroot.TimeMachineOptionsProto.verify(message.timeMachineOptions);\r\n if (error)\r\n return \"timeMachineOptions.\" + error;\r\n }\r\n if (message.csiOptions != null && message.hasOwnProperty(\"csiOptions\")) {\r\n var error = $root.keyhole.dbroot.CSIOptionsProto.verify(message.csiOptions);\r\n if (error)\r\n return \"csiOptions.\" + error;\r\n }\r\n if (message.searchTab != null && message.hasOwnProperty(\"searchTab\")) {\r\n if (!Array.isArray(message.searchTab))\r\n return \"searchTab: array expected\";\r\n for (var i = 0; i < message.searchTab.length; ++i) {\r\n var error = $root.keyhole.dbroot.SearchTabProto.verify(message.searchTab[i]);\r\n if (error)\r\n return \"searchTab.\" + error;\r\n }\r\n }\r\n if (message.cobrandInfo != null && message.hasOwnProperty(\"cobrandInfo\")) {\r\n if (!Array.isArray(message.cobrandInfo))\r\n return \"cobrandInfo: array expected\";\r\n for (var i = 0; i < message.cobrandInfo.length; ++i) {\r\n var error = $root.keyhole.dbroot.CobrandProto.verify(message.cobrandInfo[i]);\r\n if (error)\r\n return \"cobrandInfo.\" + error;\r\n }\r\n }\r\n if (message.validDatabase != null && message.hasOwnProperty(\"validDatabase\")) {\r\n if (!Array.isArray(message.validDatabase))\r\n return \"validDatabase: array expected\";\r\n for (var i = 0; i < message.validDatabase.length; ++i) {\r\n var error = $root.keyhole.dbroot.DatabaseDescriptionProto.verify(message.validDatabase[i]);\r\n if (error)\r\n return \"validDatabase.\" + error;\r\n }\r\n }\r\n if (message.configScript != null && message.hasOwnProperty(\"configScript\")) {\r\n if (!Array.isArray(message.configScript))\r\n return \"configScript: array expected\";\r\n for (var i = 0; i < message.configScript.length; ++i) {\r\n var error = $root.keyhole.dbroot.ConfigScriptProto.verify(message.configScript[i]);\r\n if (error)\r\n return \"configScript.\" + error;\r\n }\r\n }\r\n if (message.deauthServerUrl != null && message.hasOwnProperty(\"deauthServerUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.deauthServerUrl);\r\n if (error)\r\n return \"deauthServerUrl.\" + error;\r\n }\r\n if (message.swoopParameters != null && message.hasOwnProperty(\"swoopParameters\")) {\r\n var error = $root.keyhole.dbroot.SwoopParamsProto.verify(message.swoopParameters);\r\n if (error)\r\n return \"swoopParameters.\" + error;\r\n }\r\n if (message.bbsServerInfo != null && message.hasOwnProperty(\"bbsServerInfo\")) {\r\n var error = $root.keyhole.dbroot.PostingServerProto.verify(message.bbsServerInfo);\r\n if (error)\r\n return \"bbsServerInfo.\" + error;\r\n }\r\n if (message.dataErrorServerInfo != null && message.hasOwnProperty(\"dataErrorServerInfo\")) {\r\n var error = $root.keyhole.dbroot.PostingServerProto.verify(message.dataErrorServerInfo);\r\n if (error)\r\n return \"dataErrorServerInfo.\" + error;\r\n }\r\n if (message.planetaryDatabase != null && message.hasOwnProperty(\"planetaryDatabase\")) {\r\n if (!Array.isArray(message.planetaryDatabase))\r\n return \"planetaryDatabase: array expected\";\r\n for (var i = 0; i < message.planetaryDatabase.length; ++i) {\r\n var error = $root.keyhole.dbroot.PlanetaryDatabaseProto.verify(message.planetaryDatabase[i]);\r\n if (error)\r\n return \"planetaryDatabase.\" + error;\r\n }\r\n }\r\n if (message.logServer != null && message.hasOwnProperty(\"logServer\")) {\r\n var error = $root.keyhole.dbroot.LogServerProto.verify(message.logServer);\r\n if (error)\r\n return \"logServer.\" + error;\r\n }\r\n if (message.autopiaOptions != null && message.hasOwnProperty(\"autopiaOptions\")) {\r\n var error = $root.keyhole.dbroot.AutopiaOptionsProto.verify(message.autopiaOptions);\r\n if (error)\r\n return \"autopiaOptions.\" + error;\r\n }\r\n if (message.searchConfig != null && message.hasOwnProperty(\"searchConfig\")) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.verify(message.searchConfig);\r\n if (error)\r\n return \"searchConfig.\" + error;\r\n }\r\n if (message.searchInfo != null && message.hasOwnProperty(\"searchInfo\")) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto.verify(message.searchInfo);\r\n if (error)\r\n return \"searchInfo.\" + error;\r\n }\r\n if (message.elevationServiceBaseUrl != null && message.hasOwnProperty(\"elevationServiceBaseUrl\"))\r\n if (!$util.isString(message.elevationServiceBaseUrl))\r\n return \"elevationServiceBaseUrl: string expected\";\r\n if (message.elevationProfileQueryDelay != null && message.hasOwnProperty(\"elevationProfileQueryDelay\"))\r\n if (!$util.isInteger(message.elevationProfileQueryDelay))\r\n return \"elevationProfileQueryDelay: integer expected\";\r\n if (message.proUpgradeUrl != null && message.hasOwnProperty(\"proUpgradeUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proUpgradeUrl);\r\n if (error)\r\n return \"proUpgradeUrl.\" + error;\r\n }\r\n if (message.earthCommunityUrl != null && message.hasOwnProperty(\"earthCommunityUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.earthCommunityUrl);\r\n if (error)\r\n return \"earthCommunityUrl.\" + error;\r\n }\r\n if (message.googleMapsUrl != null && message.hasOwnProperty(\"googleMapsUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.googleMapsUrl);\r\n if (error)\r\n return \"googleMapsUrl.\" + error;\r\n }\r\n if (message.sharingUrl != null && message.hasOwnProperty(\"sharingUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.sharingUrl);\r\n if (error)\r\n return \"sharingUrl.\" + error;\r\n }\r\n if (message.privacyPolicyUrl != null && message.hasOwnProperty(\"privacyPolicyUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.privacyPolicyUrl);\r\n if (error)\r\n return \"privacyPolicyUrl.\" + error;\r\n }\r\n if (message.doGplusUserCheck != null && message.hasOwnProperty(\"doGplusUserCheck\"))\r\n if (typeof message.doGplusUserCheck !== \"boolean\")\r\n return \"doGplusUserCheck: boolean expected\";\r\n if (message.rocktreeDataProto != null && message.hasOwnProperty(\"rocktreeDataProto\")) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto.verify(message.rocktreeDataProto);\r\n if (error)\r\n return \"rocktreeDataProto.\" + error;\r\n }\r\n if (message.filmstripConfig != null && message.hasOwnProperty(\"filmstripConfig\")) {\r\n if (!Array.isArray(message.filmstripConfig))\r\n return \"filmstripConfig: array expected\";\r\n for (var i = 0; i < message.filmstripConfig.length; ++i) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.verify(message.filmstripConfig[i]);\r\n if (error)\r\n return \"filmstripConfig.\" + error;\r\n }\r\n }\r\n if (message.showSigninButton != null && message.hasOwnProperty(\"showSigninButton\"))\r\n if (typeof message.showSigninButton !== \"boolean\")\r\n return \"showSigninButton: boolean expected\";\r\n if (message.proMeasureUpsellUrl != null && message.hasOwnProperty(\"proMeasureUpsellUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proMeasureUpsellUrl);\r\n if (error)\r\n return \"proMeasureUpsellUrl.\" + error;\r\n }\r\n if (message.proPrintUpsellUrl != null && message.hasOwnProperty(\"proPrintUpsellUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.proPrintUpsellUrl);\r\n if (error)\r\n return \"proPrintUpsellUrl.\" + error;\r\n }\r\n if (message.starDataProto != null && message.hasOwnProperty(\"starDataProto\")) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.StarDataProto.verify(message.starDataProto);\r\n if (error)\r\n return \"starDataProto.\" + error;\r\n }\r\n if (message.feedbackUrl != null && message.hasOwnProperty(\"feedbackUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.feedbackUrl);\r\n if (error)\r\n return \"feedbackUrl.\" + error;\r\n }\r\n if (message.oauth2LoginUrl != null && message.hasOwnProperty(\"oauth2LoginUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.oauth2LoginUrl);\r\n if (error)\r\n return \"oauth2LoginUrl.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n EndSnippetProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto();\r\n if (object.model != null) {\r\n if (typeof object.model !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.model: object expected\");\r\n message.model = $root.keyhole.dbroot.PlanetModelProto.fromObject(object.model);\r\n }\r\n if (object.authServerUrl != null) {\r\n if (typeof object.authServerUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.authServerUrl: object expected\");\r\n message.authServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.authServerUrl);\r\n }\r\n if (object.disableAuthentication != null)\r\n message.disableAuthentication = Boolean(object.disableAuthentication);\r\n if (object.mfeDomains) {\r\n if (!Array.isArray(object.mfeDomains))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.mfeDomains: array expected\");\r\n message.mfeDomains = [];\r\n for (var i = 0; i < object.mfeDomains.length; ++i) {\r\n if (typeof object.mfeDomains[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.mfeDomains: object expected\");\r\n message.mfeDomains[i] = $root.keyhole.dbroot.MfeDomainFeaturesProto.fromObject(object.mfeDomains[i]);\r\n }\r\n }\r\n if (object.mfeLangParam != null)\r\n message.mfeLangParam = String(object.mfeLangParam);\r\n if (object.adsUrlPatterns != null)\r\n message.adsUrlPatterns = String(object.adsUrlPatterns);\r\n if (object.reverseGeocoderUrl != null) {\r\n if (typeof object.reverseGeocoderUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.reverseGeocoderUrl: object expected\");\r\n message.reverseGeocoderUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.reverseGeocoderUrl);\r\n }\r\n if (object.reverseGeocoderProtocolVersion != null)\r\n message.reverseGeocoderProtocolVersion = object.reverseGeocoderProtocolVersion | 0;\r\n if (object.skyDatabaseIsAvailable != null)\r\n message.skyDatabaseIsAvailable = Boolean(object.skyDatabaseIsAvailable);\r\n if (object.skyDatabaseUrl != null) {\r\n if (typeof object.skyDatabaseUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.skyDatabaseUrl: object expected\");\r\n message.skyDatabaseUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.skyDatabaseUrl);\r\n }\r\n if (object.defaultWebPageIntlUrl != null) {\r\n if (typeof object.defaultWebPageIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.defaultWebPageIntlUrl: object expected\");\r\n message.defaultWebPageIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.defaultWebPageIntlUrl);\r\n }\r\n if (object.numStartUpTips != null)\r\n message.numStartUpTips = object.numStartUpTips | 0;\r\n if (object.startUpTipsUrl != null) {\r\n if (typeof object.startUpTipsUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.startUpTipsUrl: object expected\");\r\n message.startUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.startUpTipsUrl);\r\n }\r\n if (object.numProStartUpTips != null)\r\n message.numProStartUpTips = object.numProStartUpTips | 0;\r\n if (object.proStartUpTipsUrl != null) {\r\n if (typeof object.proStartUpTipsUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.proStartUpTipsUrl: object expected\");\r\n message.proStartUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proStartUpTipsUrl);\r\n }\r\n if (object.startupTipsIntlUrl != null) {\r\n if (typeof object.startupTipsIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.startupTipsIntlUrl: object expected\");\r\n message.startupTipsIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.startupTipsIntlUrl);\r\n }\r\n if (object.userGuideIntlUrl != null) {\r\n if (typeof object.userGuideIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.userGuideIntlUrl: object expected\");\r\n message.userGuideIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.userGuideIntlUrl);\r\n }\r\n if (object.supportCenterIntlUrl != null) {\r\n if (typeof object.supportCenterIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.supportCenterIntlUrl: object expected\");\r\n message.supportCenterIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.supportCenterIntlUrl);\r\n }\r\n if (object.businessListingIntlUrl != null) {\r\n if (typeof object.businessListingIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.businessListingIntlUrl: object expected\");\r\n message.businessListingIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.businessListingIntlUrl);\r\n }\r\n if (object.supportAnswerIntlUrl != null) {\r\n if (typeof object.supportAnswerIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.supportAnswerIntlUrl: object expected\");\r\n message.supportAnswerIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.supportAnswerIntlUrl);\r\n }\r\n if (object.supportTopicIntlUrl != null) {\r\n if (typeof object.supportTopicIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.supportTopicIntlUrl: object expected\");\r\n message.supportTopicIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.supportTopicIntlUrl);\r\n }\r\n if (object.supportRequestIntlUrl != null) {\r\n if (typeof object.supportRequestIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.supportRequestIntlUrl: object expected\");\r\n message.supportRequestIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.supportRequestIntlUrl);\r\n }\r\n if (object.earthIntlUrl != null) {\r\n if (typeof object.earthIntlUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.earthIntlUrl: object expected\");\r\n message.earthIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.earthIntlUrl);\r\n }\r\n if (object.addContentUrl != null) {\r\n if (typeof object.addContentUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.addContentUrl: object expected\");\r\n message.addContentUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.addContentUrl);\r\n }\r\n if (object.sketchupNotInstalledUrl != null) {\r\n if (typeof object.sketchupNotInstalledUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.sketchupNotInstalledUrl: object expected\");\r\n message.sketchupNotInstalledUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.sketchupNotInstalledUrl);\r\n }\r\n if (object.sketchupErrorUrl != null) {\r\n if (typeof object.sketchupErrorUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.sketchupErrorUrl: object expected\");\r\n message.sketchupErrorUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.sketchupErrorUrl);\r\n }\r\n if (object.freeLicenseUrl != null) {\r\n if (typeof object.freeLicenseUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.freeLicenseUrl: object expected\");\r\n message.freeLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.freeLicenseUrl);\r\n }\r\n if (object.proLicenseUrl != null) {\r\n if (typeof object.proLicenseUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.proLicenseUrl: object expected\");\r\n message.proLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proLicenseUrl);\r\n }\r\n if (object.tutorialUrl != null) {\r\n if (typeof object.tutorialUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.tutorialUrl: object expected\");\r\n message.tutorialUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.tutorialUrl);\r\n }\r\n if (object.keyboardShortcutsUrl != null) {\r\n if (typeof object.keyboardShortcutsUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.keyboardShortcutsUrl: object expected\");\r\n message.keyboardShortcutsUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.keyboardShortcutsUrl);\r\n }\r\n if (object.releaseNotesUrl != null) {\r\n if (typeof object.releaseNotesUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.releaseNotesUrl: object expected\");\r\n message.releaseNotesUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.releaseNotesUrl);\r\n }\r\n if (object.hideUserData != null)\r\n message.hideUserData = Boolean(object.hideUserData);\r\n if (object.useGeLogo != null)\r\n message.useGeLogo = Boolean(object.useGeLogo);\r\n if (object.dioramaDescriptionUrlBase != null) {\r\n if (typeof object.dioramaDescriptionUrlBase !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.dioramaDescriptionUrlBase: object expected\");\r\n message.dioramaDescriptionUrlBase = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.dioramaDescriptionUrlBase);\r\n }\r\n if (object.dioramaDefaultColor != null)\r\n message.dioramaDefaultColor = object.dioramaDefaultColor >>> 0;\r\n if (object.dioramaBlacklistUrl != null) {\r\n if (typeof object.dioramaBlacklistUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.dioramaBlacklistUrl: object expected\");\r\n message.dioramaBlacklistUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.dioramaBlacklistUrl);\r\n }\r\n if (object.clientOptions != null) {\r\n if (typeof object.clientOptions !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.clientOptions: object expected\");\r\n message.clientOptions = $root.keyhole.dbroot.ClientOptionsProto.fromObject(object.clientOptions);\r\n }\r\n if (object.fetchingOptions != null) {\r\n if (typeof object.fetchingOptions !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.fetchingOptions: object expected\");\r\n message.fetchingOptions = $root.keyhole.dbroot.FetchingOptionsProto.fromObject(object.fetchingOptions);\r\n }\r\n if (object.timeMachineOptions != null) {\r\n if (typeof object.timeMachineOptions !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.timeMachineOptions: object expected\");\r\n message.timeMachineOptions = $root.keyhole.dbroot.TimeMachineOptionsProto.fromObject(object.timeMachineOptions);\r\n }\r\n if (object.csiOptions != null) {\r\n if (typeof object.csiOptions !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.csiOptions: object expected\");\r\n message.csiOptions = $root.keyhole.dbroot.CSIOptionsProto.fromObject(object.csiOptions);\r\n }\r\n if (object.searchTab) {\r\n if (!Array.isArray(object.searchTab))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.searchTab: array expected\");\r\n message.searchTab = [];\r\n for (var i = 0; i < object.searchTab.length; ++i) {\r\n if (typeof object.searchTab[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.searchTab: object expected\");\r\n message.searchTab[i] = $root.keyhole.dbroot.SearchTabProto.fromObject(object.searchTab[i]);\r\n }\r\n }\r\n if (object.cobrandInfo) {\r\n if (!Array.isArray(object.cobrandInfo))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.cobrandInfo: array expected\");\r\n message.cobrandInfo = [];\r\n for (var i = 0; i < object.cobrandInfo.length; ++i) {\r\n if (typeof object.cobrandInfo[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.cobrandInfo: object expected\");\r\n message.cobrandInfo[i] = $root.keyhole.dbroot.CobrandProto.fromObject(object.cobrandInfo[i]);\r\n }\r\n }\r\n if (object.validDatabase) {\r\n if (!Array.isArray(object.validDatabase))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.validDatabase: array expected\");\r\n message.validDatabase = [];\r\n for (var i = 0; i < object.validDatabase.length; ++i) {\r\n if (typeof object.validDatabase[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.validDatabase: object expected\");\r\n message.validDatabase[i] = $root.keyhole.dbroot.DatabaseDescriptionProto.fromObject(object.validDatabase[i]);\r\n }\r\n }\r\n if (object.configScript) {\r\n if (!Array.isArray(object.configScript))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.configScript: array expected\");\r\n message.configScript = [];\r\n for (var i = 0; i < object.configScript.length; ++i) {\r\n if (typeof object.configScript[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.configScript: object expected\");\r\n message.configScript[i] = $root.keyhole.dbroot.ConfigScriptProto.fromObject(object.configScript[i]);\r\n }\r\n }\r\n if (object.deauthServerUrl != null) {\r\n if (typeof object.deauthServerUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.deauthServerUrl: object expected\");\r\n message.deauthServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.deauthServerUrl);\r\n }\r\n if (object.swoopParameters != null) {\r\n if (typeof object.swoopParameters !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.swoopParameters: object expected\");\r\n message.swoopParameters = $root.keyhole.dbroot.SwoopParamsProto.fromObject(object.swoopParameters);\r\n }\r\n if (object.bbsServerInfo != null) {\r\n if (typeof object.bbsServerInfo !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.bbsServerInfo: object expected\");\r\n message.bbsServerInfo = $root.keyhole.dbroot.PostingServerProto.fromObject(object.bbsServerInfo);\r\n }\r\n if (object.dataErrorServerInfo != null) {\r\n if (typeof object.dataErrorServerInfo !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.dataErrorServerInfo: object expected\");\r\n message.dataErrorServerInfo = $root.keyhole.dbroot.PostingServerProto.fromObject(object.dataErrorServerInfo);\r\n }\r\n if (object.planetaryDatabase) {\r\n if (!Array.isArray(object.planetaryDatabase))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.planetaryDatabase: array expected\");\r\n message.planetaryDatabase = [];\r\n for (var i = 0; i < object.planetaryDatabase.length; ++i) {\r\n if (typeof object.planetaryDatabase[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.planetaryDatabase: object expected\");\r\n message.planetaryDatabase[i] = $root.keyhole.dbroot.PlanetaryDatabaseProto.fromObject(object.planetaryDatabase[i]);\r\n }\r\n }\r\n if (object.logServer != null) {\r\n if (typeof object.logServer !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.logServer: object expected\");\r\n message.logServer = $root.keyhole.dbroot.LogServerProto.fromObject(object.logServer);\r\n }\r\n if (object.autopiaOptions != null) {\r\n if (typeof object.autopiaOptions !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.autopiaOptions: object expected\");\r\n message.autopiaOptions = $root.keyhole.dbroot.AutopiaOptionsProto.fromObject(object.autopiaOptions);\r\n }\r\n if (object.searchConfig != null) {\r\n if (typeof object.searchConfig !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.searchConfig: object expected\");\r\n message.searchConfig = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.fromObject(object.searchConfig);\r\n }\r\n if (object.searchInfo != null) {\r\n if (typeof object.searchInfo !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.searchInfo: object expected\");\r\n message.searchInfo = $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto.fromObject(object.searchInfo);\r\n }\r\n if (object.elevationServiceBaseUrl != null)\r\n message.elevationServiceBaseUrl = String(object.elevationServiceBaseUrl);\r\n if (object.elevationProfileQueryDelay != null)\r\n message.elevationProfileQueryDelay = object.elevationProfileQueryDelay | 0;\r\n if (object.proUpgradeUrl != null) {\r\n if (typeof object.proUpgradeUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.proUpgradeUrl: object expected\");\r\n message.proUpgradeUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proUpgradeUrl);\r\n }\r\n if (object.earthCommunityUrl != null) {\r\n if (typeof object.earthCommunityUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.earthCommunityUrl: object expected\");\r\n message.earthCommunityUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.earthCommunityUrl);\r\n }\r\n if (object.googleMapsUrl != null) {\r\n if (typeof object.googleMapsUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.googleMapsUrl: object expected\");\r\n message.googleMapsUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.googleMapsUrl);\r\n }\r\n if (object.sharingUrl != null) {\r\n if (typeof object.sharingUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.sharingUrl: object expected\");\r\n message.sharingUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.sharingUrl);\r\n }\r\n if (object.privacyPolicyUrl != null) {\r\n if (typeof object.privacyPolicyUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.privacyPolicyUrl: object expected\");\r\n message.privacyPolicyUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.privacyPolicyUrl);\r\n }\r\n if (object.doGplusUserCheck != null)\r\n message.doGplusUserCheck = Boolean(object.doGplusUserCheck);\r\n if (object.rocktreeDataProto != null) {\r\n if (typeof object.rocktreeDataProto !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.rocktreeDataProto: object expected\");\r\n message.rocktreeDataProto = $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto.fromObject(object.rocktreeDataProto);\r\n }\r\n if (object.filmstripConfig) {\r\n if (!Array.isArray(object.filmstripConfig))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.filmstripConfig: array expected\");\r\n message.filmstripConfig = [];\r\n for (var i = 0; i < object.filmstripConfig.length; ++i) {\r\n if (typeof object.filmstripConfig[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.filmstripConfig: object expected\");\r\n message.filmstripConfig[i] = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.fromObject(object.filmstripConfig[i]);\r\n }\r\n }\r\n if (object.showSigninButton != null)\r\n message.showSigninButton = Boolean(object.showSigninButton);\r\n if (object.proMeasureUpsellUrl != null) {\r\n if (typeof object.proMeasureUpsellUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.proMeasureUpsellUrl: object expected\");\r\n message.proMeasureUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proMeasureUpsellUrl);\r\n }\r\n if (object.proPrintUpsellUrl != null) {\r\n if (typeof object.proPrintUpsellUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.proPrintUpsellUrl: object expected\");\r\n message.proPrintUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.proPrintUpsellUrl);\r\n }\r\n if (object.starDataProto != null) {\r\n if (typeof object.starDataProto !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.starDataProto: object expected\");\r\n message.starDataProto = $root.keyhole.dbroot.EndSnippetProto.StarDataProto.fromObject(object.starDataProto);\r\n }\r\n if (object.feedbackUrl != null) {\r\n if (typeof object.feedbackUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.feedbackUrl: object expected\");\r\n message.feedbackUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.feedbackUrl);\r\n }\r\n if (object.oauth2LoginUrl != null) {\r\n if (typeof object.oauth2LoginUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.oauth2LoginUrl: object expected\");\r\n message.oauth2LoginUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.oauth2LoginUrl);\r\n }\r\n return message;\r\n };\r\n \r\n EndSnippetProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults) {\r\n object.mfeDomains = [];\r\n object.searchTab = [];\r\n object.cobrandInfo = [];\r\n object.validDatabase = [];\r\n object.configScript = [];\r\n object.planetaryDatabase = [];\r\n object.filmstripConfig = [];\r\n }\r\n if (options.defaults) {\r\n object.model = null;\r\n object.authServerUrl = null;\r\n object.disableAuthentication = false;\r\n object.mfeLangParam = \"hl=$5Bhl5D\";\r\n object.adsUrlPatterns = \"\";\r\n object.reverseGeocoderUrl = null;\r\n object.reverseGeocoderProtocolVersion = 3;\r\n object.skyDatabaseIsAvailable = true;\r\n object.skyDatabaseUrl = null;\r\n object.defaultWebPageIntlUrl = null;\r\n object.numStartUpTips = 17;\r\n object.startUpTipsUrl = null;\r\n object.userGuideIntlUrl = null;\r\n object.supportCenterIntlUrl = null;\r\n object.businessListingIntlUrl = null;\r\n object.supportAnswerIntlUrl = null;\r\n object.supportTopicIntlUrl = null;\r\n object.supportRequestIntlUrl = null;\r\n object.earthIntlUrl = null;\r\n object.addContentUrl = null;\r\n object.sketchupNotInstalledUrl = null;\r\n object.sketchupErrorUrl = null;\r\n object.freeLicenseUrl = null;\r\n object.proLicenseUrl = null;\r\n object.hideUserData = false;\r\n object.useGeLogo = true;\r\n object.dioramaDescriptionUrlBase = null;\r\n object.dioramaDefaultColor = 4291281607;\r\n object.clientOptions = null;\r\n object.fetchingOptions = null;\r\n object.timeMachineOptions = null;\r\n object.csiOptions = null;\r\n object.deauthServerUrl = null;\r\n object.swoopParameters = null;\r\n object.bbsServerInfo = null;\r\n object.dataErrorServerInfo = null;\r\n object.logServer = null;\r\n object.autopiaOptions = null;\r\n object.searchInfo = null;\r\n object.elevationServiceBaseUrl = \"http://maps.google.com/maps/api/elevation/\";\r\n object.elevationProfileQueryDelay = 500;\r\n object.tutorialUrl = null;\r\n object.keyboardShortcutsUrl = null;\r\n object.releaseNotesUrl = null;\r\n object.numProStartUpTips = 0;\r\n object.proStartUpTipsUrl = null;\r\n object.dioramaBlacklistUrl = null;\r\n object.searchConfig = null;\r\n object.proUpgradeUrl = null;\r\n object.earthCommunityUrl = null;\r\n object.googleMapsUrl = null;\r\n object.sharingUrl = null;\r\n object.privacyPolicyUrl = null;\r\n object.doGplusUserCheck = false;\r\n object.rocktreeDataProto = null;\r\n object.showSigninButton = false;\r\n object.startupTipsIntlUrl = null;\r\n object.proMeasureUpsellUrl = null;\r\n object.proPrintUpsellUrl = null;\r\n object.starDataProto = null;\r\n object.feedbackUrl = null;\r\n object.oauth2LoginUrl = null;\r\n }\r\n if (message.model != null && message.hasOwnProperty(\"model\"))\r\n object.model = $root.keyhole.dbroot.PlanetModelProto.toObject(message.model, options);\r\n if (message.authServerUrl != null && message.hasOwnProperty(\"authServerUrl\"))\r\n object.authServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.authServerUrl, options);\r\n if (message.disableAuthentication != null && message.hasOwnProperty(\"disableAuthentication\"))\r\n object.disableAuthentication = message.disableAuthentication;\r\n if (message.mfeDomains && message.mfeDomains.length) {\r\n object.mfeDomains = [];\r\n for (var j = 0; j < message.mfeDomains.length; ++j)\r\n object.mfeDomains[j] = $root.keyhole.dbroot.MfeDomainFeaturesProto.toObject(message.mfeDomains[j], options);\r\n }\r\n if (message.mfeLangParam != null && message.hasOwnProperty(\"mfeLangParam\"))\r\n object.mfeLangParam = message.mfeLangParam;\r\n if (message.adsUrlPatterns != null && message.hasOwnProperty(\"adsUrlPatterns\"))\r\n object.adsUrlPatterns = message.adsUrlPatterns;\r\n if (message.reverseGeocoderUrl != null && message.hasOwnProperty(\"reverseGeocoderUrl\"))\r\n object.reverseGeocoderUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.reverseGeocoderUrl, options);\r\n if (message.reverseGeocoderProtocolVersion != null && message.hasOwnProperty(\"reverseGeocoderProtocolVersion\"))\r\n object.reverseGeocoderProtocolVersion = message.reverseGeocoderProtocolVersion;\r\n if (message.skyDatabaseIsAvailable != null && message.hasOwnProperty(\"skyDatabaseIsAvailable\"))\r\n object.skyDatabaseIsAvailable = message.skyDatabaseIsAvailable;\r\n if (message.skyDatabaseUrl != null && message.hasOwnProperty(\"skyDatabaseUrl\"))\r\n object.skyDatabaseUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.skyDatabaseUrl, options);\r\n if (message.defaultWebPageIntlUrl != null && message.hasOwnProperty(\"defaultWebPageIntlUrl\"))\r\n object.defaultWebPageIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.defaultWebPageIntlUrl, options);\r\n if (message.numStartUpTips != null && message.hasOwnProperty(\"numStartUpTips\"))\r\n object.numStartUpTips = message.numStartUpTips;\r\n if (message.startUpTipsUrl != null && message.hasOwnProperty(\"startUpTipsUrl\"))\r\n object.startUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.startUpTipsUrl, options);\r\n if (message.userGuideIntlUrl != null && message.hasOwnProperty(\"userGuideIntlUrl\"))\r\n object.userGuideIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.userGuideIntlUrl, options);\r\n if (message.supportCenterIntlUrl != null && message.hasOwnProperty(\"supportCenterIntlUrl\"))\r\n object.supportCenterIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.supportCenterIntlUrl, options);\r\n if (message.businessListingIntlUrl != null && message.hasOwnProperty(\"businessListingIntlUrl\"))\r\n object.businessListingIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.businessListingIntlUrl, options);\r\n if (message.supportAnswerIntlUrl != null && message.hasOwnProperty(\"supportAnswerIntlUrl\"))\r\n object.supportAnswerIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.supportAnswerIntlUrl, options);\r\n if (message.supportTopicIntlUrl != null && message.hasOwnProperty(\"supportTopicIntlUrl\"))\r\n object.supportTopicIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.supportTopicIntlUrl, options);\r\n if (message.supportRequestIntlUrl != null && message.hasOwnProperty(\"supportRequestIntlUrl\"))\r\n object.supportRequestIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.supportRequestIntlUrl, options);\r\n if (message.earthIntlUrl != null && message.hasOwnProperty(\"earthIntlUrl\"))\r\n object.earthIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.earthIntlUrl, options);\r\n if (message.addContentUrl != null && message.hasOwnProperty(\"addContentUrl\"))\r\n object.addContentUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.addContentUrl, options);\r\n if (message.sketchupNotInstalledUrl != null && message.hasOwnProperty(\"sketchupNotInstalledUrl\"))\r\n object.sketchupNotInstalledUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.sketchupNotInstalledUrl, options);\r\n if (message.sketchupErrorUrl != null && message.hasOwnProperty(\"sketchupErrorUrl\"))\r\n object.sketchupErrorUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.sketchupErrorUrl, options);\r\n if (message.freeLicenseUrl != null && message.hasOwnProperty(\"freeLicenseUrl\"))\r\n object.freeLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.freeLicenseUrl, options);\r\n if (message.proLicenseUrl != null && message.hasOwnProperty(\"proLicenseUrl\"))\r\n object.proLicenseUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proLicenseUrl, options);\r\n if (message.hideUserData != null && message.hasOwnProperty(\"hideUserData\"))\r\n object.hideUserData = message.hideUserData;\r\n if (message.useGeLogo != null && message.hasOwnProperty(\"useGeLogo\"))\r\n object.useGeLogo = message.useGeLogo;\r\n if (message.dioramaDescriptionUrlBase != null && message.hasOwnProperty(\"dioramaDescriptionUrlBase\"))\r\n object.dioramaDescriptionUrlBase = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.dioramaDescriptionUrlBase, options);\r\n if (message.dioramaDefaultColor != null && message.hasOwnProperty(\"dioramaDefaultColor\"))\r\n object.dioramaDefaultColor = message.dioramaDefaultColor;\r\n if (message.clientOptions != null && message.hasOwnProperty(\"clientOptions\"))\r\n object.clientOptions = $root.keyhole.dbroot.ClientOptionsProto.toObject(message.clientOptions, options);\r\n if (message.fetchingOptions != null && message.hasOwnProperty(\"fetchingOptions\"))\r\n object.fetchingOptions = $root.keyhole.dbroot.FetchingOptionsProto.toObject(message.fetchingOptions, options);\r\n if (message.timeMachineOptions != null && message.hasOwnProperty(\"timeMachineOptions\"))\r\n object.timeMachineOptions = $root.keyhole.dbroot.TimeMachineOptionsProto.toObject(message.timeMachineOptions, options);\r\n if (message.csiOptions != null && message.hasOwnProperty(\"csiOptions\"))\r\n object.csiOptions = $root.keyhole.dbroot.CSIOptionsProto.toObject(message.csiOptions, options);\r\n if (message.searchTab && message.searchTab.length) {\r\n object.searchTab = [];\r\n for (var j = 0; j < message.searchTab.length; ++j)\r\n object.searchTab[j] = $root.keyhole.dbroot.SearchTabProto.toObject(message.searchTab[j], options);\r\n }\r\n if (message.cobrandInfo && message.cobrandInfo.length) {\r\n object.cobrandInfo = [];\r\n for (var j = 0; j < message.cobrandInfo.length; ++j)\r\n object.cobrandInfo[j] = $root.keyhole.dbroot.CobrandProto.toObject(message.cobrandInfo[j], options);\r\n }\r\n if (message.validDatabase && message.validDatabase.length) {\r\n object.validDatabase = [];\r\n for (var j = 0; j < message.validDatabase.length; ++j)\r\n object.validDatabase[j] = $root.keyhole.dbroot.DatabaseDescriptionProto.toObject(message.validDatabase[j], options);\r\n }\r\n if (message.configScript && message.configScript.length) {\r\n object.configScript = [];\r\n for (var j = 0; j < message.configScript.length; ++j)\r\n object.configScript[j] = $root.keyhole.dbroot.ConfigScriptProto.toObject(message.configScript[j], options);\r\n }\r\n if (message.deauthServerUrl != null && message.hasOwnProperty(\"deauthServerUrl\"))\r\n object.deauthServerUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.deauthServerUrl, options);\r\n if (message.swoopParameters != null && message.hasOwnProperty(\"swoopParameters\"))\r\n object.swoopParameters = $root.keyhole.dbroot.SwoopParamsProto.toObject(message.swoopParameters, options);\r\n if (message.bbsServerInfo != null && message.hasOwnProperty(\"bbsServerInfo\"))\r\n object.bbsServerInfo = $root.keyhole.dbroot.PostingServerProto.toObject(message.bbsServerInfo, options);\r\n if (message.dataErrorServerInfo != null && message.hasOwnProperty(\"dataErrorServerInfo\"))\r\n object.dataErrorServerInfo = $root.keyhole.dbroot.PostingServerProto.toObject(message.dataErrorServerInfo, options);\r\n if (message.planetaryDatabase && message.planetaryDatabase.length) {\r\n object.planetaryDatabase = [];\r\n for (var j = 0; j < message.planetaryDatabase.length; ++j)\r\n object.planetaryDatabase[j] = $root.keyhole.dbroot.PlanetaryDatabaseProto.toObject(message.planetaryDatabase[j], options);\r\n }\r\n if (message.logServer != null && message.hasOwnProperty(\"logServer\"))\r\n object.logServer = $root.keyhole.dbroot.LogServerProto.toObject(message.logServer, options);\r\n if (message.autopiaOptions != null && message.hasOwnProperty(\"autopiaOptions\"))\r\n object.autopiaOptions = $root.keyhole.dbroot.AutopiaOptionsProto.toObject(message.autopiaOptions, options);\r\n if (message.searchInfo != null && message.hasOwnProperty(\"searchInfo\"))\r\n object.searchInfo = $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto.toObject(message.searchInfo, options);\r\n if (message.elevationServiceBaseUrl != null && message.hasOwnProperty(\"elevationServiceBaseUrl\"))\r\n object.elevationServiceBaseUrl = message.elevationServiceBaseUrl;\r\n if (message.elevationProfileQueryDelay != null && message.hasOwnProperty(\"elevationProfileQueryDelay\"))\r\n object.elevationProfileQueryDelay = message.elevationProfileQueryDelay;\r\n if (message.tutorialUrl != null && message.hasOwnProperty(\"tutorialUrl\"))\r\n object.tutorialUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.tutorialUrl, options);\r\n if (message.keyboardShortcutsUrl != null && message.hasOwnProperty(\"keyboardShortcutsUrl\"))\r\n object.keyboardShortcutsUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.keyboardShortcutsUrl, options);\r\n if (message.releaseNotesUrl != null && message.hasOwnProperty(\"releaseNotesUrl\"))\r\n object.releaseNotesUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.releaseNotesUrl, options);\r\n if (message.numProStartUpTips != null && message.hasOwnProperty(\"numProStartUpTips\"))\r\n object.numProStartUpTips = message.numProStartUpTips;\r\n if (message.proStartUpTipsUrl != null && message.hasOwnProperty(\"proStartUpTipsUrl\"))\r\n object.proStartUpTipsUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proStartUpTipsUrl, options);\r\n if (message.dioramaBlacklistUrl != null && message.hasOwnProperty(\"dioramaBlacklistUrl\"))\r\n object.dioramaBlacklistUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.dioramaBlacklistUrl, options);\r\n if (message.searchConfig != null && message.hasOwnProperty(\"searchConfig\"))\r\n object.searchConfig = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.toObject(message.searchConfig, options);\r\n if (message.proUpgradeUrl != null && message.hasOwnProperty(\"proUpgradeUrl\"))\r\n object.proUpgradeUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proUpgradeUrl, options);\r\n if (message.earthCommunityUrl != null && message.hasOwnProperty(\"earthCommunityUrl\"))\r\n object.earthCommunityUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.earthCommunityUrl, options);\r\n if (message.googleMapsUrl != null && message.hasOwnProperty(\"googleMapsUrl\"))\r\n object.googleMapsUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.googleMapsUrl, options);\r\n if (message.sharingUrl != null && message.hasOwnProperty(\"sharingUrl\"))\r\n object.sharingUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.sharingUrl, options);\r\n if (message.privacyPolicyUrl != null && message.hasOwnProperty(\"privacyPolicyUrl\"))\r\n object.privacyPolicyUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.privacyPolicyUrl, options);\r\n if (message.doGplusUserCheck != null && message.hasOwnProperty(\"doGplusUserCheck\"))\r\n object.doGplusUserCheck = message.doGplusUserCheck;\r\n if (message.rocktreeDataProto != null && message.hasOwnProperty(\"rocktreeDataProto\"))\r\n object.rocktreeDataProto = $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto.toObject(message.rocktreeDataProto, options);\r\n if (message.filmstripConfig && message.filmstripConfig.length) {\r\n object.filmstripConfig = [];\r\n for (var j = 0; j < message.filmstripConfig.length; ++j)\r\n object.filmstripConfig[j] = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.toObject(message.filmstripConfig[j], options);\r\n }\r\n if (message.showSigninButton != null && message.hasOwnProperty(\"showSigninButton\"))\r\n object.showSigninButton = message.showSigninButton;\r\n if (message.startupTipsIntlUrl != null && message.hasOwnProperty(\"startupTipsIntlUrl\"))\r\n object.startupTipsIntlUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.startupTipsIntlUrl, options);\r\n if (message.proMeasureUpsellUrl != null && message.hasOwnProperty(\"proMeasureUpsellUrl\"))\r\n object.proMeasureUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proMeasureUpsellUrl, options);\r\n if (message.proPrintUpsellUrl != null && message.hasOwnProperty(\"proPrintUpsellUrl\"))\r\n object.proPrintUpsellUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.proPrintUpsellUrl, options);\r\n if (message.starDataProto != null && message.hasOwnProperty(\"starDataProto\"))\r\n object.starDataProto = $root.keyhole.dbroot.EndSnippetProto.StarDataProto.toObject(message.starDataProto, options);\r\n if (message.feedbackUrl != null && message.hasOwnProperty(\"feedbackUrl\"))\r\n object.feedbackUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.feedbackUrl, options);\r\n if (message.oauth2LoginUrl != null && message.hasOwnProperty(\"oauth2LoginUrl\"))\r\n object.oauth2LoginUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.oauth2LoginUrl, options);\r\n return object;\r\n };\r\n \r\n EndSnippetProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n EndSnippetProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto\";\r\n };\r\n \r\n EndSnippetProto.SearchConfigProto = (function() {\r\n \r\n function SearchConfigProto(properties) {\r\n this.searchServer = [];\r\n this.oneboxService = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n SearchConfigProto.prototype.searchServer = $util.emptyArray;\r\n SearchConfigProto.prototype.oneboxService = $util.emptyArray;\r\n SearchConfigProto.prototype.kmlSearchUrl = null;\r\n SearchConfigProto.prototype.kmlRenderUrl = null;\r\n SearchConfigProto.prototype.searchHistoryUrl = null;\r\n SearchConfigProto.prototype.errorPageUrl = null;\r\n \r\n SearchConfigProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n if (!(message.searchServer && message.searchServer.length))\r\n message.searchServer = [];\r\n message.searchServer.push($root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 2: {\r\n if (!(message.oneboxService && message.oneboxService.length))\r\n message.oneboxService = [];\r\n message.oneboxService.push($root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 3: {\r\n message.kmlSearchUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 4: {\r\n message.kmlRenderUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 6: {\r\n message.searchHistoryUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 5: {\r\n message.errorPageUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n SearchConfigProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.searchServer != null && message.hasOwnProperty(\"searchServer\")) {\r\n if (!Array.isArray(message.searchServer))\r\n return \"searchServer: array expected\";\r\n for (var i = 0; i < message.searchServer.length; ++i) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.verify(message.searchServer[i]);\r\n if (error)\r\n return \"searchServer.\" + error;\r\n }\r\n }\r\n if (message.oneboxService != null && message.hasOwnProperty(\"oneboxService\")) {\r\n if (!Array.isArray(message.oneboxService))\r\n return \"oneboxService: array expected\";\r\n for (var i = 0; i < message.oneboxService.length; ++i) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.verify(message.oneboxService[i]);\r\n if (error)\r\n return \"oneboxService.\" + error;\r\n }\r\n }\r\n if (message.kmlSearchUrl != null && message.hasOwnProperty(\"kmlSearchUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlSearchUrl);\r\n if (error)\r\n return \"kmlSearchUrl.\" + error;\r\n }\r\n if (message.kmlRenderUrl != null && message.hasOwnProperty(\"kmlRenderUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlRenderUrl);\r\n if (error)\r\n return \"kmlRenderUrl.\" + error;\r\n }\r\n if (message.searchHistoryUrl != null && message.hasOwnProperty(\"searchHistoryUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.searchHistoryUrl);\r\n if (error)\r\n return \"searchHistoryUrl.\" + error;\r\n }\r\n if (message.errorPageUrl != null && message.hasOwnProperty(\"errorPageUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.errorPageUrl);\r\n if (error)\r\n return \"errorPageUrl.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n SearchConfigProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto();\r\n if (object.searchServer) {\r\n if (!Array.isArray(object.searchServer))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchServer: array expected\");\r\n message.searchServer = [];\r\n for (var i = 0; i < object.searchServer.length; ++i) {\r\n if (typeof object.searchServer[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchServer: object expected\");\r\n message.searchServer[i] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.fromObject(object.searchServer[i]);\r\n }\r\n }\r\n if (object.oneboxService) {\r\n if (!Array.isArray(object.oneboxService))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.oneboxService: array expected\");\r\n message.oneboxService = [];\r\n for (var i = 0; i < object.oneboxService.length; ++i) {\r\n if (typeof object.oneboxService[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.oneboxService: object expected\");\r\n message.oneboxService[i] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.fromObject(object.oneboxService[i]);\r\n }\r\n }\r\n if (object.kmlSearchUrl != null) {\r\n if (typeof object.kmlSearchUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.kmlSearchUrl: object expected\");\r\n message.kmlSearchUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlSearchUrl);\r\n }\r\n if (object.kmlRenderUrl != null) {\r\n if (typeof object.kmlRenderUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.kmlRenderUrl: object expected\");\r\n message.kmlRenderUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlRenderUrl);\r\n }\r\n if (object.searchHistoryUrl != null) {\r\n if (typeof object.searchHistoryUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.searchHistoryUrl: object expected\");\r\n message.searchHistoryUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.searchHistoryUrl);\r\n }\r\n if (object.errorPageUrl != null) {\r\n if (typeof object.errorPageUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.errorPageUrl: object expected\");\r\n message.errorPageUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.errorPageUrl);\r\n }\r\n return message;\r\n };\r\n \r\n SearchConfigProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults) {\r\n object.searchServer = [];\r\n object.oneboxService = [];\r\n }\r\n if (options.defaults) {\r\n object.kmlSearchUrl = null;\r\n object.kmlRenderUrl = null;\r\n object.errorPageUrl = null;\r\n object.searchHistoryUrl = null;\r\n }\r\n if (message.searchServer && message.searchServer.length) {\r\n object.searchServer = [];\r\n for (var j = 0; j < message.searchServer.length; ++j)\r\n object.searchServer[j] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.toObject(message.searchServer[j], options);\r\n }\r\n if (message.oneboxService && message.oneboxService.length) {\r\n object.oneboxService = [];\r\n for (var j = 0; j < message.oneboxService.length; ++j)\r\n object.oneboxService[j] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.toObject(message.oneboxService[j], options);\r\n }\r\n if (message.kmlSearchUrl != null && message.hasOwnProperty(\"kmlSearchUrl\"))\r\n object.kmlSearchUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlSearchUrl, options);\r\n if (message.kmlRenderUrl != null && message.hasOwnProperty(\"kmlRenderUrl\"))\r\n object.kmlRenderUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlRenderUrl, options);\r\n if (message.errorPageUrl != null && message.hasOwnProperty(\"errorPageUrl\"))\r\n object.errorPageUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.errorPageUrl, options);\r\n if (message.searchHistoryUrl != null && message.hasOwnProperty(\"searchHistoryUrl\"))\r\n object.searchHistoryUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.searchHistoryUrl, options);\r\n return object;\r\n };\r\n \r\n SearchConfigProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n SearchConfigProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.SearchConfigProto\";\r\n };\r\n \r\n SearchConfigProto.SearchServer = (function() {\r\n \r\n function SearchServer(properties) {\r\n this.suggestion = [];\r\n this.searchlet = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n SearchServer.prototype.name = null;\r\n SearchServer.prototype.url = null;\r\n SearchServer.prototype.type = 0;\r\n SearchServer.prototype.htmlTransformUrl = null;\r\n SearchServer.prototype.kmlTransformUrl = null;\r\n SearchServer.prototype.supplementalUi = null;\r\n SearchServer.prototype.suggestion = $util.emptyArray;\r\n SearchServer.prototype.searchlet = $util.emptyArray;\r\n SearchServer.prototype.requirements = null;\r\n SearchServer.prototype.suggestServer = null;\r\n \r\n SearchServer.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.name = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.type = reader.int32();\r\n break;\r\n }\r\n case 4: {\r\n message.htmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 5: {\r\n message.kmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 6: {\r\n message.supplementalUi = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 9: {\r\n if (!(message.suggestion && message.suggestion.length))\r\n message.suggestion = [];\r\n message.suggestion.push($root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 7: {\r\n if (!(message.searchlet && message.searchlet.length))\r\n message.searchlet = [];\r\n message.searchlet.push($root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 8: {\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 10: {\r\n message.suggestServer = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n SearchServer.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.name != null && message.hasOwnProperty(\"name\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.name);\r\n if (error)\r\n return \"name.\" + error;\r\n }\r\n if (message.url != null && message.hasOwnProperty(\"url\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url);\r\n if (error)\r\n return \"url.\" + error;\r\n }\r\n if (message.type != null && message.hasOwnProperty(\"type\"))\r\n switch (message.type) {\r\n default:\r\n return \"type: enum value expected\";\r\n case 0:\r\n case 1:\r\n break;\r\n }\r\n if (message.htmlTransformUrl != null && message.hasOwnProperty(\"htmlTransformUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.htmlTransformUrl);\r\n if (error)\r\n return \"htmlTransformUrl.\" + error;\r\n }\r\n if (message.kmlTransformUrl != null && message.hasOwnProperty(\"kmlTransformUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlTransformUrl);\r\n if (error)\r\n return \"kmlTransformUrl.\" + error;\r\n }\r\n if (message.supplementalUi != null && message.hasOwnProperty(\"supplementalUi\")) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.verify(message.supplementalUi);\r\n if (error)\r\n return \"supplementalUi.\" + error;\r\n }\r\n if (message.suggestion != null && message.hasOwnProperty(\"suggestion\")) {\r\n if (!Array.isArray(message.suggestion))\r\n return \"suggestion: array expected\";\r\n for (var i = 0; i < message.suggestion.length; ++i) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.suggestion[i]);\r\n if (error)\r\n return \"suggestion.\" + error;\r\n }\r\n }\r\n if (message.searchlet != null && message.hasOwnProperty(\"searchlet\")) {\r\n if (!Array.isArray(message.searchlet))\r\n return \"searchlet: array expected\";\r\n for (var i = 0; i < message.searchlet.length; ++i) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.verify(message.searchlet[i]);\r\n if (error)\r\n return \"searchlet.\" + error;\r\n }\r\n }\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\")) {\r\n var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements);\r\n if (error)\r\n return \"requirements.\" + error;\r\n }\r\n if (message.suggestServer != null && message.hasOwnProperty(\"suggestServer\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.suggestServer);\r\n if (error)\r\n return \"suggestServer.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n SearchServer.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer();\r\n if (object.name != null) {\r\n if (typeof object.name !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.name: object expected\");\r\n message.name = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.name);\r\n }\r\n if (object.url != null) {\r\n if (typeof object.url !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.url: object expected\");\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url);\r\n }\r\n switch (object.type) {\r\n case \"RESULT_TYPE_KML\":\r\n case 0:\r\n message.type = 0;\r\n break;\r\n case \"RESULT_TYPE_XML\":\r\n case 1:\r\n message.type = 1;\r\n break;\r\n }\r\n if (object.htmlTransformUrl != null) {\r\n if (typeof object.htmlTransformUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.htmlTransformUrl: object expected\");\r\n message.htmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.htmlTransformUrl);\r\n }\r\n if (object.kmlTransformUrl != null) {\r\n if (typeof object.kmlTransformUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.kmlTransformUrl: object expected\");\r\n message.kmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlTransformUrl);\r\n }\r\n if (object.supplementalUi != null) {\r\n if (typeof object.supplementalUi !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.supplementalUi: object expected\");\r\n message.supplementalUi = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.fromObject(object.supplementalUi);\r\n }\r\n if (object.suggestion) {\r\n if (!Array.isArray(object.suggestion))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestion: array expected\");\r\n message.suggestion = [];\r\n for (var i = 0; i < object.suggestion.length; ++i) {\r\n if (typeof object.suggestion[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestion: object expected\");\r\n message.suggestion[i] = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.suggestion[i]);\r\n }\r\n }\r\n if (object.searchlet) {\r\n if (!Array.isArray(object.searchlet))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.searchlet: array expected\");\r\n message.searchlet = [];\r\n for (var i = 0; i < object.searchlet.length; ++i) {\r\n if (typeof object.searchlet[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.searchlet: object expected\");\r\n message.searchlet[i] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.fromObject(object.searchlet[i]);\r\n }\r\n }\r\n if (object.requirements != null) {\r\n if (typeof object.requirements !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.requirements: object expected\");\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements);\r\n }\r\n if (object.suggestServer != null) {\r\n if (typeof object.suggestServer !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.suggestServer: object expected\");\r\n message.suggestServer = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.suggestServer);\r\n }\r\n return message;\r\n };\r\n \r\n SearchServer.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults) {\r\n object.searchlet = [];\r\n object.suggestion = [];\r\n }\r\n if (options.defaults) {\r\n object.name = null;\r\n object.url = null;\r\n object.type = options.enums === String ? \"RESULT_TYPE_KML\" : 0;\r\n object.htmlTransformUrl = null;\r\n object.kmlTransformUrl = null;\r\n object.supplementalUi = null;\r\n object.requirements = null;\r\n object.suggestServer = null;\r\n }\r\n if (message.name != null && message.hasOwnProperty(\"name\"))\r\n object.name = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.name, options);\r\n if (message.url != null && message.hasOwnProperty(\"url\"))\r\n object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options);\r\n if (message.type != null && message.hasOwnProperty(\"type\"))\r\n object.type = options.enums === String ? $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.ResultType[message.type] : message.type;\r\n if (message.htmlTransformUrl != null && message.hasOwnProperty(\"htmlTransformUrl\"))\r\n object.htmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.htmlTransformUrl, options);\r\n if (message.kmlTransformUrl != null && message.hasOwnProperty(\"kmlTransformUrl\"))\r\n object.kmlTransformUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlTransformUrl, options);\r\n if (message.supplementalUi != null && message.hasOwnProperty(\"supplementalUi\"))\r\n object.supplementalUi = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.toObject(message.supplementalUi, options);\r\n if (message.searchlet && message.searchlet.length) {\r\n object.searchlet = [];\r\n for (var j = 0; j < message.searchlet.length; ++j)\r\n object.searchlet[j] = $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.toObject(message.searchlet[j], options);\r\n }\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\"))\r\n object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options);\r\n if (message.suggestion && message.suggestion.length) {\r\n object.suggestion = [];\r\n for (var j = 0; j < message.suggestion.length; ++j)\r\n object.suggestion[j] = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.suggestion[j], options);\r\n }\r\n if (message.suggestServer != null && message.hasOwnProperty(\"suggestServer\"))\r\n object.suggestServer = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.suggestServer, options);\r\n return object;\r\n };\r\n \r\n SearchServer.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n SearchServer.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer\";\r\n };\r\n \r\n SearchServer.ResultType = (function() {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"RESULT_TYPE_KML\"] = 0;\r\n values[valuesById[1] = \"RESULT_TYPE_XML\"] = 1;\r\n return values;\r\n })();\r\n \r\n SearchServer.SupplementalUi = (function() {\r\n \r\n function SupplementalUi(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n SupplementalUi.prototype.url = null;\r\n SupplementalUi.prototype.label = null;\r\n SupplementalUi.prototype.height = 160;\r\n \r\n SupplementalUi.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.label = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.height = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n SupplementalUi.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.url != null && message.hasOwnProperty(\"url\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url);\r\n if (error)\r\n return \"url.\" + error;\r\n }\r\n if (message.label != null && message.hasOwnProperty(\"label\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.label);\r\n if (error)\r\n return \"label.\" + error;\r\n }\r\n if (message.height != null && message.hasOwnProperty(\"height\"))\r\n if (!$util.isInteger(message.height))\r\n return \"height: integer expected\";\r\n return null;\r\n };\r\n \r\n SupplementalUi.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi();\r\n if (object.url != null) {\r\n if (typeof object.url !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.url: object expected\");\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url);\r\n }\r\n if (object.label != null) {\r\n if (typeof object.label !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi.label: object expected\");\r\n message.label = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.label);\r\n }\r\n if (object.height != null)\r\n message.height = object.height | 0;\r\n return message;\r\n };\r\n \r\n SupplementalUi.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.url = null;\r\n object.label = null;\r\n object.height = 160;\r\n }\r\n if (message.url != null && message.hasOwnProperty(\"url\"))\r\n object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options);\r\n if (message.label != null && message.hasOwnProperty(\"label\"))\r\n object.label = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.label, options);\r\n if (message.height != null && message.hasOwnProperty(\"height\"))\r\n object.height = message.height;\r\n return object;\r\n };\r\n \r\n SupplementalUi.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n SupplementalUi.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SupplementalUi\";\r\n };\r\n \r\n return SupplementalUi;\r\n })();\r\n \r\n SearchServer.SearchletProto = (function() {\r\n \r\n function SearchletProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n SearchletProto.prototype.url = null;\r\n SearchletProto.prototype.name = null;\r\n SearchletProto.prototype.requirements = null;\r\n \r\n SearchletProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.name = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n SearchletProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.url != null && message.hasOwnProperty(\"url\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url);\r\n if (error)\r\n return \"url.\" + error;\r\n }\r\n if (message.name != null && message.hasOwnProperty(\"name\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.name);\r\n if (error)\r\n return \"name.\" + error;\r\n }\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\")) {\r\n var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements);\r\n if (error)\r\n return \"requirements.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n SearchletProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto();\r\n if (object.url != null) {\r\n if (typeof object.url !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.url: object expected\");\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url);\r\n }\r\n if (object.name != null) {\r\n if (typeof object.name !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.name: object expected\");\r\n message.name = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.name);\r\n }\r\n if (object.requirements != null) {\r\n if (typeof object.requirements !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto.requirements: object expected\");\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements);\r\n }\r\n return message;\r\n };\r\n \r\n SearchletProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.url = null;\r\n object.name = null;\r\n object.requirements = null;\r\n }\r\n if (message.url != null && message.hasOwnProperty(\"url\"))\r\n object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options);\r\n if (message.name != null && message.hasOwnProperty(\"name\"))\r\n object.name = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.name, options);\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\"))\r\n object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options);\r\n return object;\r\n };\r\n \r\n SearchletProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n SearchletProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.SearchConfigProto.SearchServer.SearchletProto\";\r\n };\r\n \r\n return SearchletProto;\r\n })();\r\n \r\n return SearchServer;\r\n })();\r\n \r\n SearchConfigProto.OneboxServiceProto = (function() {\r\n \r\n function OneboxServiceProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n OneboxServiceProto.prototype.serviceUrl = null;\r\n OneboxServiceProto.prototype.requirements = null;\r\n \r\n OneboxServiceProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.serviceUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n OneboxServiceProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.serviceUrl != null && message.hasOwnProperty(\"serviceUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.serviceUrl);\r\n if (error)\r\n return \"serviceUrl.\" + error;\r\n }\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\")) {\r\n var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements);\r\n if (error)\r\n return \"requirements.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n OneboxServiceProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto();\r\n if (object.serviceUrl != null) {\r\n if (typeof object.serviceUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.serviceUrl: object expected\");\r\n message.serviceUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.serviceUrl);\r\n }\r\n if (object.requirements != null) {\r\n if (typeof object.requirements !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto.requirements: object expected\");\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements);\r\n }\r\n return message;\r\n };\r\n \r\n OneboxServiceProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.serviceUrl = null;\r\n object.requirements = null;\r\n }\r\n if (message.serviceUrl != null && message.hasOwnProperty(\"serviceUrl\"))\r\n object.serviceUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.serviceUrl, options);\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\"))\r\n object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options);\r\n return object;\r\n };\r\n \r\n OneboxServiceProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n OneboxServiceProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.SearchConfigProto.OneboxServiceProto\";\r\n };\r\n \r\n return OneboxServiceProto;\r\n })();\r\n \r\n return SearchConfigProto;\r\n })();\r\n \r\n EndSnippetProto.SearchInfoProto = (function() {\r\n \r\n function SearchInfoProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n SearchInfoProto.prototype.defaultUrl = \"http://maps.google.com/maps\";\r\n SearchInfoProto.prototype.geocodeParam = \"q\";\r\n \r\n SearchInfoProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.defaultUrl = reader.string();\r\n break;\r\n }\r\n case 2: {\r\n message.geocodeParam = reader.string();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n SearchInfoProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.defaultUrl != null && message.hasOwnProperty(\"defaultUrl\"))\r\n if (!$util.isString(message.defaultUrl))\r\n return \"defaultUrl: string expected\";\r\n if (message.geocodeParam != null && message.hasOwnProperty(\"geocodeParam\"))\r\n if (!$util.isString(message.geocodeParam))\r\n return \"geocodeParam: string expected\";\r\n return null;\r\n };\r\n \r\n SearchInfoProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.SearchInfoProto();\r\n if (object.defaultUrl != null)\r\n message.defaultUrl = String(object.defaultUrl);\r\n if (object.geocodeParam != null)\r\n message.geocodeParam = String(object.geocodeParam);\r\n return message;\r\n };\r\n \r\n SearchInfoProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.defaultUrl = \"http://maps.google.com/maps\";\r\n object.geocodeParam = \"q\";\r\n }\r\n if (message.defaultUrl != null && message.hasOwnProperty(\"defaultUrl\"))\r\n object.defaultUrl = message.defaultUrl;\r\n if (message.geocodeParam != null && message.hasOwnProperty(\"geocodeParam\"))\r\n object.geocodeParam = message.geocodeParam;\r\n return object;\r\n };\r\n \r\n SearchInfoProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n SearchInfoProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.SearchInfoProto\";\r\n };\r\n \r\n return SearchInfoProto;\r\n })();\r\n \r\n EndSnippetProto.RockTreeDataProto = (function() {\r\n \r\n function RockTreeDataProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n RockTreeDataProto.prototype.url = null;\r\n \r\n RockTreeDataProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n RockTreeDataProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.url != null && message.hasOwnProperty(\"url\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url);\r\n if (error)\r\n return \"url.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n RockTreeDataProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.RockTreeDataProto();\r\n if (object.url != null) {\r\n if (typeof object.url !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.RockTreeDataProto.url: object expected\");\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url);\r\n }\r\n return message;\r\n };\r\n \r\n RockTreeDataProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.url = null;\r\n if (message.url != null && message.hasOwnProperty(\"url\"))\r\n object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options);\r\n return object;\r\n };\r\n \r\n RockTreeDataProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n RockTreeDataProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.RockTreeDataProto\";\r\n };\r\n \r\n return RockTreeDataProto;\r\n })();\r\n \r\n EndSnippetProto.FilmstripConfigProto = (function() {\r\n \r\n function FilmstripConfigProto(properties) {\r\n this.imageryType = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n FilmstripConfigProto.prototype.requirements = null;\r\n FilmstripConfigProto.prototype.alleycatUrlTemplate = null;\r\n FilmstripConfigProto.prototype.fallbackAlleycatUrlTemplate = null;\r\n FilmstripConfigProto.prototype.metadataUrlTemplate = null;\r\n FilmstripConfigProto.prototype.thumbnailUrlTemplate = null;\r\n FilmstripConfigProto.prototype.kmlUrlTemplate = null;\r\n FilmstripConfigProto.prototype.featuredToursUrl = null;\r\n FilmstripConfigProto.prototype.enableViewportFallback = false;\r\n FilmstripConfigProto.prototype.viewportFallbackDistance = 0;\r\n FilmstripConfigProto.prototype.imageryType = $util.emptyArray;\r\n \r\n FilmstripConfigProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 2: {\r\n message.alleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 9: {\r\n message.fallbackAlleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 3: {\r\n message.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 4: {\r\n message.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 5: {\r\n message.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 6: {\r\n message.featuredToursUrl = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 7: {\r\n message.enableViewportFallback = reader.bool();\r\n break;\r\n }\r\n case 8: {\r\n message.viewportFallbackDistance = reader.uint32();\r\n break;\r\n }\r\n case 10: {\r\n if (!(message.imageryType && message.imageryType.length))\r\n message.imageryType = [];\r\n message.imageryType.push($root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n FilmstripConfigProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\")) {\r\n var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements);\r\n if (error)\r\n return \"requirements.\" + error;\r\n }\r\n if (message.alleycatUrlTemplate != null && message.hasOwnProperty(\"alleycatUrlTemplate\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.alleycatUrlTemplate);\r\n if (error)\r\n return \"alleycatUrlTemplate.\" + error;\r\n }\r\n if (message.fallbackAlleycatUrlTemplate != null && message.hasOwnProperty(\"fallbackAlleycatUrlTemplate\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.fallbackAlleycatUrlTemplate);\r\n if (error)\r\n return \"fallbackAlleycatUrlTemplate.\" + error;\r\n }\r\n if (message.metadataUrlTemplate != null && message.hasOwnProperty(\"metadataUrlTemplate\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.metadataUrlTemplate);\r\n if (error)\r\n return \"metadataUrlTemplate.\" + error;\r\n }\r\n if (message.thumbnailUrlTemplate != null && message.hasOwnProperty(\"thumbnailUrlTemplate\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.thumbnailUrlTemplate);\r\n if (error)\r\n return \"thumbnailUrlTemplate.\" + error;\r\n }\r\n if (message.kmlUrlTemplate != null && message.hasOwnProperty(\"kmlUrlTemplate\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlUrlTemplate);\r\n if (error)\r\n return \"kmlUrlTemplate.\" + error;\r\n }\r\n if (message.featuredToursUrl != null && message.hasOwnProperty(\"featuredToursUrl\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.featuredToursUrl);\r\n if (error)\r\n return \"featuredToursUrl.\" + error;\r\n }\r\n if (message.enableViewportFallback != null && message.hasOwnProperty(\"enableViewportFallback\"))\r\n if (typeof message.enableViewportFallback !== \"boolean\")\r\n return \"enableViewportFallback: boolean expected\";\r\n if (message.viewportFallbackDistance != null && message.hasOwnProperty(\"viewportFallbackDistance\"))\r\n if (!$util.isInteger(message.viewportFallbackDistance))\r\n return \"viewportFallbackDistance: integer expected\";\r\n if (message.imageryType != null && message.hasOwnProperty(\"imageryType\")) {\r\n if (!Array.isArray(message.imageryType))\r\n return \"imageryType: array expected\";\r\n for (var i = 0; i < message.imageryType.length; ++i) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.verify(message.imageryType[i]);\r\n if (error)\r\n return \"imageryType.\" + error;\r\n }\r\n }\r\n return null;\r\n };\r\n \r\n FilmstripConfigProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto();\r\n if (object.requirements != null) {\r\n if (typeof object.requirements !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.requirements: object expected\");\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements);\r\n }\r\n if (object.alleycatUrlTemplate != null) {\r\n if (typeof object.alleycatUrlTemplate !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.alleycatUrlTemplate: object expected\");\r\n message.alleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.alleycatUrlTemplate);\r\n }\r\n if (object.fallbackAlleycatUrlTemplate != null) {\r\n if (typeof object.fallbackAlleycatUrlTemplate !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.fallbackAlleycatUrlTemplate: object expected\");\r\n message.fallbackAlleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.fallbackAlleycatUrlTemplate);\r\n }\r\n if (object.metadataUrlTemplate != null) {\r\n if (typeof object.metadataUrlTemplate !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.metadataUrlTemplate: object expected\");\r\n message.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.metadataUrlTemplate);\r\n }\r\n if (object.thumbnailUrlTemplate != null) {\r\n if (typeof object.thumbnailUrlTemplate !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.thumbnailUrlTemplate: object expected\");\r\n message.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.thumbnailUrlTemplate);\r\n }\r\n if (object.kmlUrlTemplate != null) {\r\n if (typeof object.kmlUrlTemplate !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.kmlUrlTemplate: object expected\");\r\n message.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlUrlTemplate);\r\n }\r\n if (object.featuredToursUrl != null) {\r\n if (typeof object.featuredToursUrl !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.featuredToursUrl: object expected\");\r\n message.featuredToursUrl = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.featuredToursUrl);\r\n }\r\n if (object.enableViewportFallback != null)\r\n message.enableViewportFallback = Boolean(object.enableViewportFallback);\r\n if (object.viewportFallbackDistance != null)\r\n message.viewportFallbackDistance = object.viewportFallbackDistance >>> 0;\r\n if (object.imageryType) {\r\n if (!Array.isArray(object.imageryType))\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.imageryType: array expected\");\r\n message.imageryType = [];\r\n for (var i = 0; i < object.imageryType.length; ++i) {\r\n if (typeof object.imageryType[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.imageryType: object expected\");\r\n message.imageryType[i] = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.fromObject(object.imageryType[i]);\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n FilmstripConfigProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults)\r\n object.imageryType = [];\r\n if (options.defaults) {\r\n object.requirements = null;\r\n object.alleycatUrlTemplate = null;\r\n object.metadataUrlTemplate = null;\r\n object.thumbnailUrlTemplate = null;\r\n object.kmlUrlTemplate = null;\r\n object.featuredToursUrl = null;\r\n object.enableViewportFallback = false;\r\n object.viewportFallbackDistance = 0;\r\n object.fallbackAlleycatUrlTemplate = null;\r\n }\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\"))\r\n object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options);\r\n if (message.alleycatUrlTemplate != null && message.hasOwnProperty(\"alleycatUrlTemplate\"))\r\n object.alleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.alleycatUrlTemplate, options);\r\n if (message.metadataUrlTemplate != null && message.hasOwnProperty(\"metadataUrlTemplate\"))\r\n object.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.metadataUrlTemplate, options);\r\n if (message.thumbnailUrlTemplate != null && message.hasOwnProperty(\"thumbnailUrlTemplate\"))\r\n object.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.thumbnailUrlTemplate, options);\r\n if (message.kmlUrlTemplate != null && message.hasOwnProperty(\"kmlUrlTemplate\"))\r\n object.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlUrlTemplate, options);\r\n if (message.featuredToursUrl != null && message.hasOwnProperty(\"featuredToursUrl\"))\r\n object.featuredToursUrl = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.featuredToursUrl, options);\r\n if (message.enableViewportFallback != null && message.hasOwnProperty(\"enableViewportFallback\"))\r\n object.enableViewportFallback = message.enableViewportFallback;\r\n if (message.viewportFallbackDistance != null && message.hasOwnProperty(\"viewportFallbackDistance\"))\r\n object.viewportFallbackDistance = message.viewportFallbackDistance;\r\n if (message.fallbackAlleycatUrlTemplate != null && message.hasOwnProperty(\"fallbackAlleycatUrlTemplate\"))\r\n object.fallbackAlleycatUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.fallbackAlleycatUrlTemplate, options);\r\n if (message.imageryType && message.imageryType.length) {\r\n object.imageryType = [];\r\n for (var j = 0; j < message.imageryType.length; ++j)\r\n object.imageryType[j] = $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.toObject(message.imageryType[j], options);\r\n }\r\n return object;\r\n };\r\n \r\n FilmstripConfigProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n FilmstripConfigProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.FilmstripConfigProto\";\r\n };\r\n \r\n FilmstripConfigProto.AlleycatImageryTypeProto = (function() {\r\n \r\n function AlleycatImageryTypeProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n AlleycatImageryTypeProto.prototype.imageryTypeId = 0;\r\n AlleycatImageryTypeProto.prototype.imageryTypeLabel = \"\";\r\n AlleycatImageryTypeProto.prototype.metadataUrlTemplate = null;\r\n AlleycatImageryTypeProto.prototype.thumbnailUrlTemplate = null;\r\n AlleycatImageryTypeProto.prototype.kmlUrlTemplate = null;\r\n \r\n AlleycatImageryTypeProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.imageryTypeId = reader.int32();\r\n break;\r\n }\r\n case 2: {\r\n message.imageryTypeLabel = reader.string();\r\n break;\r\n }\r\n case 3: {\r\n message.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 4: {\r\n message.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 5: {\r\n message.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n AlleycatImageryTypeProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.imageryTypeId != null && message.hasOwnProperty(\"imageryTypeId\"))\r\n if (!$util.isInteger(message.imageryTypeId))\r\n return \"imageryTypeId: integer expected\";\r\n if (message.imageryTypeLabel != null && message.hasOwnProperty(\"imageryTypeLabel\"))\r\n if (!$util.isString(message.imageryTypeLabel))\r\n return \"imageryTypeLabel: string expected\";\r\n if (message.metadataUrlTemplate != null && message.hasOwnProperty(\"metadataUrlTemplate\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.metadataUrlTemplate);\r\n if (error)\r\n return \"metadataUrlTemplate.\" + error;\r\n }\r\n if (message.thumbnailUrlTemplate != null && message.hasOwnProperty(\"thumbnailUrlTemplate\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.thumbnailUrlTemplate);\r\n if (error)\r\n return \"thumbnailUrlTemplate.\" + error;\r\n }\r\n if (message.kmlUrlTemplate != null && message.hasOwnProperty(\"kmlUrlTemplate\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.kmlUrlTemplate);\r\n if (error)\r\n return \"kmlUrlTemplate.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n AlleycatImageryTypeProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto();\r\n if (object.imageryTypeId != null)\r\n message.imageryTypeId = object.imageryTypeId | 0;\r\n if (object.imageryTypeLabel != null)\r\n message.imageryTypeLabel = String(object.imageryTypeLabel);\r\n if (object.metadataUrlTemplate != null) {\r\n if (typeof object.metadataUrlTemplate !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.metadataUrlTemplate: object expected\");\r\n message.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.metadataUrlTemplate);\r\n }\r\n if (object.thumbnailUrlTemplate != null) {\r\n if (typeof object.thumbnailUrlTemplate !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.thumbnailUrlTemplate: object expected\");\r\n message.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.thumbnailUrlTemplate);\r\n }\r\n if (object.kmlUrlTemplate != null) {\r\n if (typeof object.kmlUrlTemplate !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto.kmlUrlTemplate: object expected\");\r\n message.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.kmlUrlTemplate);\r\n }\r\n return message;\r\n };\r\n \r\n AlleycatImageryTypeProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.imageryTypeId = 0;\r\n object.imageryTypeLabel = \"\";\r\n object.metadataUrlTemplate = null;\r\n object.thumbnailUrlTemplate = null;\r\n object.kmlUrlTemplate = null;\r\n }\r\n if (message.imageryTypeId != null && message.hasOwnProperty(\"imageryTypeId\"))\r\n object.imageryTypeId = message.imageryTypeId;\r\n if (message.imageryTypeLabel != null && message.hasOwnProperty(\"imageryTypeLabel\"))\r\n object.imageryTypeLabel = message.imageryTypeLabel;\r\n if (message.metadataUrlTemplate != null && message.hasOwnProperty(\"metadataUrlTemplate\"))\r\n object.metadataUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.metadataUrlTemplate, options);\r\n if (message.thumbnailUrlTemplate != null && message.hasOwnProperty(\"thumbnailUrlTemplate\"))\r\n object.thumbnailUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.thumbnailUrlTemplate, options);\r\n if (message.kmlUrlTemplate != null && message.hasOwnProperty(\"kmlUrlTemplate\"))\r\n object.kmlUrlTemplate = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.kmlUrlTemplate, options);\r\n return object;\r\n };\r\n \r\n AlleycatImageryTypeProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n AlleycatImageryTypeProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.FilmstripConfigProto.AlleycatImageryTypeProto\";\r\n };\r\n \r\n return AlleycatImageryTypeProto;\r\n })();\r\n \r\n return FilmstripConfigProto;\r\n })();\r\n \r\n EndSnippetProto.StarDataProto = (function() {\r\n \r\n function StarDataProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n StarDataProto.prototype.url = null;\r\n \r\n StarDataProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EndSnippetProto.StarDataProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n StarDataProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.url != null && message.hasOwnProperty(\"url\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.url);\r\n if (error)\r\n return \"url.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n StarDataProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EndSnippetProto.StarDataProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EndSnippetProto.StarDataProto();\r\n if (object.url != null) {\r\n if (typeof object.url !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.EndSnippetProto.StarDataProto.url: object expected\");\r\n message.url = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.url);\r\n }\r\n return message;\r\n };\r\n \r\n StarDataProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.url = null;\r\n if (message.url != null && message.hasOwnProperty(\"url\"))\r\n object.url = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.url, options);\r\n return object;\r\n };\r\n \r\n StarDataProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n StarDataProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EndSnippetProto.StarDataProto\";\r\n };\r\n \r\n return StarDataProto;\r\n })();\r\n \r\n return EndSnippetProto;\r\n })();\r\n \r\n dbroot.DbRootRefProto = (function() {\r\n \r\n function DbRootRefProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n DbRootRefProto.prototype.url = \"\";\r\n DbRootRefProto.prototype.isCritical = false;\r\n DbRootRefProto.prototype.requirements = null;\r\n \r\n DbRootRefProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DbRootRefProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 2: {\r\n message.url = reader.string();\r\n break;\r\n }\r\n case 1: {\r\n message.isCritical = reader.bool();\r\n break;\r\n }\r\n case 3: {\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"url\"))\r\n throw $util.ProtocolError(\"missing required 'url'\", { instance: message });\r\n return message;\r\n };\r\n \r\n DbRootRefProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isString(message.url))\r\n return \"url: string expected\";\r\n if (message.isCritical != null && message.hasOwnProperty(\"isCritical\"))\r\n if (typeof message.isCritical !== \"boolean\")\r\n return \"isCritical: boolean expected\";\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\")) {\r\n var error = $root.keyhole.dbroot.RequirementProto.verify(message.requirements);\r\n if (error)\r\n return \"requirements.\" + error;\r\n }\r\n return null;\r\n };\r\n \r\n DbRootRefProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.DbRootRefProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.DbRootRefProto();\r\n if (object.url != null)\r\n message.url = String(object.url);\r\n if (object.isCritical != null)\r\n message.isCritical = Boolean(object.isCritical);\r\n if (object.requirements != null) {\r\n if (typeof object.requirements !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootRefProto.requirements: object expected\");\r\n message.requirements = $root.keyhole.dbroot.RequirementProto.fromObject(object.requirements);\r\n }\r\n return message;\r\n };\r\n \r\n DbRootRefProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.isCritical = false;\r\n object.url = \"\";\r\n object.requirements = null;\r\n }\r\n if (message.isCritical != null && message.hasOwnProperty(\"isCritical\"))\r\n object.isCritical = message.isCritical;\r\n if (message.url != null && message.hasOwnProperty(\"url\"))\r\n object.url = message.url;\r\n if (message.requirements != null && message.hasOwnProperty(\"requirements\"))\r\n object.requirements = $root.keyhole.dbroot.RequirementProto.toObject(message.requirements, options);\r\n return object;\r\n };\r\n \r\n DbRootRefProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n DbRootRefProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.DbRootRefProto\";\r\n };\r\n \r\n return DbRootRefProto;\r\n })();\r\n \r\n dbroot.DatabaseVersionProto = (function() {\r\n \r\n function DatabaseVersionProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n DatabaseVersionProto.prototype.quadtreeVersion = 0;\r\n \r\n DatabaseVersionProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DatabaseVersionProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.quadtreeVersion = reader.uint32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n if (!message.hasOwnProperty(\"quadtreeVersion\"))\r\n throw $util.ProtocolError(\"missing required 'quadtreeVersion'\", { instance: message });\r\n return message;\r\n };\r\n \r\n DatabaseVersionProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (!$util.isInteger(message.quadtreeVersion))\r\n return \"quadtreeVersion: integer expected\";\r\n return null;\r\n };\r\n \r\n DatabaseVersionProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.DatabaseVersionProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.DatabaseVersionProto();\r\n if (object.quadtreeVersion != null)\r\n message.quadtreeVersion = object.quadtreeVersion >>> 0;\r\n return message;\r\n };\r\n \r\n DatabaseVersionProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults)\r\n object.quadtreeVersion = 0;\r\n if (message.quadtreeVersion != null && message.hasOwnProperty(\"quadtreeVersion\"))\r\n object.quadtreeVersion = message.quadtreeVersion;\r\n return object;\r\n };\r\n \r\n DatabaseVersionProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n DatabaseVersionProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.DatabaseVersionProto\";\r\n };\r\n \r\n return DatabaseVersionProto;\r\n })();\r\n \r\n dbroot.DbRootProto = (function() {\r\n \r\n function DbRootProto(properties) {\r\n this.providerInfo = [];\r\n this.nestedFeature = [];\r\n this.styleAttribute = [];\r\n this.styleMap = [];\r\n this.translationEntry = [];\r\n this.dbrootReference = [];\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n DbRootProto.prototype.databaseName = null;\r\n DbRootProto.prototype.imageryPresent = true;\r\n DbRootProto.prototype.protoImagery = false;\r\n DbRootProto.prototype.terrainPresent = false;\r\n DbRootProto.prototype.providerInfo = $util.emptyArray;\r\n DbRootProto.prototype.nestedFeature = $util.emptyArray;\r\n DbRootProto.prototype.styleAttribute = $util.emptyArray;\r\n DbRootProto.prototype.styleMap = $util.emptyArray;\r\n DbRootProto.prototype.endSnippet = null;\r\n DbRootProto.prototype.translationEntry = $util.emptyArray;\r\n DbRootProto.prototype.language = \"en\";\r\n DbRootProto.prototype.version = 5;\r\n DbRootProto.prototype.dbrootReference = $util.emptyArray;\r\n DbRootProto.prototype.databaseVersion = null;\r\n DbRootProto.prototype.refreshTimeout = 0;\r\n \r\n DbRootProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.DbRootProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 15: {\r\n message.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 1: {\r\n message.imageryPresent = reader.bool();\r\n break;\r\n }\r\n case 14: {\r\n message.protoImagery = reader.bool();\r\n break;\r\n }\r\n case 2: {\r\n message.terrainPresent = reader.bool();\r\n break;\r\n }\r\n case 3: {\r\n if (!(message.providerInfo && message.providerInfo.length))\r\n message.providerInfo = [];\r\n message.providerInfo.push($root.keyhole.dbroot.ProviderInfoProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 4: {\r\n if (!(message.nestedFeature && message.nestedFeature.length))\r\n message.nestedFeature = [];\r\n message.nestedFeature.push($root.keyhole.dbroot.NestedFeatureProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 5: {\r\n if (!(message.styleAttribute && message.styleAttribute.length))\r\n message.styleAttribute = [];\r\n message.styleAttribute.push($root.keyhole.dbroot.StyleAttributeProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 6: {\r\n if (!(message.styleMap && message.styleMap.length))\r\n message.styleMap = [];\r\n message.styleMap.push($root.keyhole.dbroot.StyleMapProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 7: {\r\n message.endSnippet = $root.keyhole.dbroot.EndSnippetProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 8: {\r\n if (!(message.translationEntry && message.translationEntry.length))\r\n message.translationEntry = [];\r\n message.translationEntry.push($root.keyhole.dbroot.StringEntryProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 9: {\r\n message.language = reader.string();\r\n break;\r\n }\r\n case 10: {\r\n message.version = reader.int32();\r\n break;\r\n }\r\n case 11: {\r\n if (!(message.dbrootReference && message.dbrootReference.length))\r\n message.dbrootReference = [];\r\n message.dbrootReference.push($root.keyhole.dbroot.DbRootRefProto.decode(reader, reader.uint32()));\r\n break;\r\n }\r\n case 13: {\r\n message.databaseVersion = $root.keyhole.dbroot.DatabaseVersionProto.decode(reader, reader.uint32());\r\n break;\r\n }\r\n case 16: {\r\n message.refreshTimeout = reader.int32();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n DbRootProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.databaseName != null && message.hasOwnProperty(\"databaseName\")) {\r\n var error = $root.keyhole.dbroot.StringIdOrValueProto.verify(message.databaseName);\r\n if (error)\r\n return \"databaseName.\" + error;\r\n }\r\n if (message.imageryPresent != null && message.hasOwnProperty(\"imageryPresent\"))\r\n if (typeof message.imageryPresent !== \"boolean\")\r\n return \"imageryPresent: boolean expected\";\r\n if (message.protoImagery != null && message.hasOwnProperty(\"protoImagery\"))\r\n if (typeof message.protoImagery !== \"boolean\")\r\n return \"protoImagery: boolean expected\";\r\n if (message.terrainPresent != null && message.hasOwnProperty(\"terrainPresent\"))\r\n if (typeof message.terrainPresent !== \"boolean\")\r\n return \"terrainPresent: boolean expected\";\r\n if (message.providerInfo != null && message.hasOwnProperty(\"providerInfo\")) {\r\n if (!Array.isArray(message.providerInfo))\r\n return \"providerInfo: array expected\";\r\n for (var i = 0; i < message.providerInfo.length; ++i) {\r\n var error = $root.keyhole.dbroot.ProviderInfoProto.verify(message.providerInfo[i]);\r\n if (error)\r\n return \"providerInfo.\" + error;\r\n }\r\n }\r\n if (message.nestedFeature != null && message.hasOwnProperty(\"nestedFeature\")) {\r\n if (!Array.isArray(message.nestedFeature))\r\n return \"nestedFeature: array expected\";\r\n for (var i = 0; i < message.nestedFeature.length; ++i) {\r\n var error = $root.keyhole.dbroot.NestedFeatureProto.verify(message.nestedFeature[i]);\r\n if (error)\r\n return \"nestedFeature.\" + error;\r\n }\r\n }\r\n if (message.styleAttribute != null && message.hasOwnProperty(\"styleAttribute\")) {\r\n if (!Array.isArray(message.styleAttribute))\r\n return \"styleAttribute: array expected\";\r\n for (var i = 0; i < message.styleAttribute.length; ++i) {\r\n var error = $root.keyhole.dbroot.StyleAttributeProto.verify(message.styleAttribute[i]);\r\n if (error)\r\n return \"styleAttribute.\" + error;\r\n }\r\n }\r\n if (message.styleMap != null && message.hasOwnProperty(\"styleMap\")) {\r\n if (!Array.isArray(message.styleMap))\r\n return \"styleMap: array expected\";\r\n for (var i = 0; i < message.styleMap.length; ++i) {\r\n var error = $root.keyhole.dbroot.StyleMapProto.verify(message.styleMap[i]);\r\n if (error)\r\n return \"styleMap.\" + error;\r\n }\r\n }\r\n if (message.endSnippet != null && message.hasOwnProperty(\"endSnippet\")) {\r\n var error = $root.keyhole.dbroot.EndSnippetProto.verify(message.endSnippet);\r\n if (error)\r\n return \"endSnippet.\" + error;\r\n }\r\n if (message.translationEntry != null && message.hasOwnProperty(\"translationEntry\")) {\r\n if (!Array.isArray(message.translationEntry))\r\n return \"translationEntry: array expected\";\r\n for (var i = 0; i < message.translationEntry.length; ++i) {\r\n var error = $root.keyhole.dbroot.StringEntryProto.verify(message.translationEntry[i]);\r\n if (error)\r\n return \"translationEntry.\" + error;\r\n }\r\n }\r\n if (message.language != null && message.hasOwnProperty(\"language\"))\r\n if (!$util.isString(message.language))\r\n return \"language: string expected\";\r\n if (message.version != null && message.hasOwnProperty(\"version\"))\r\n if (!$util.isInteger(message.version))\r\n return \"version: integer expected\";\r\n if (message.dbrootReference != null && message.hasOwnProperty(\"dbrootReference\")) {\r\n if (!Array.isArray(message.dbrootReference))\r\n return \"dbrootReference: array expected\";\r\n for (var i = 0; i < message.dbrootReference.length; ++i) {\r\n var error = $root.keyhole.dbroot.DbRootRefProto.verify(message.dbrootReference[i]);\r\n if (error)\r\n return \"dbrootReference.\" + error;\r\n }\r\n }\r\n if (message.databaseVersion != null && message.hasOwnProperty(\"databaseVersion\")) {\r\n var error = $root.keyhole.dbroot.DatabaseVersionProto.verify(message.databaseVersion);\r\n if (error)\r\n return \"databaseVersion.\" + error;\r\n }\r\n if (message.refreshTimeout != null && message.hasOwnProperty(\"refreshTimeout\"))\r\n if (!$util.isInteger(message.refreshTimeout))\r\n return \"refreshTimeout: integer expected\";\r\n return null;\r\n };\r\n \r\n DbRootProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.DbRootProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.DbRootProto();\r\n if (object.databaseName != null) {\r\n if (typeof object.databaseName !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.databaseName: object expected\");\r\n message.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.fromObject(object.databaseName);\r\n }\r\n if (object.imageryPresent != null)\r\n message.imageryPresent = Boolean(object.imageryPresent);\r\n if (object.protoImagery != null)\r\n message.protoImagery = Boolean(object.protoImagery);\r\n if (object.terrainPresent != null)\r\n message.terrainPresent = Boolean(object.terrainPresent);\r\n if (object.providerInfo) {\r\n if (!Array.isArray(object.providerInfo))\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.providerInfo: array expected\");\r\n message.providerInfo = [];\r\n for (var i = 0; i < object.providerInfo.length; ++i) {\r\n if (typeof object.providerInfo[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.providerInfo: object expected\");\r\n message.providerInfo[i] = $root.keyhole.dbroot.ProviderInfoProto.fromObject(object.providerInfo[i]);\r\n }\r\n }\r\n if (object.nestedFeature) {\r\n if (!Array.isArray(object.nestedFeature))\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.nestedFeature: array expected\");\r\n message.nestedFeature = [];\r\n for (var i = 0; i < object.nestedFeature.length; ++i) {\r\n if (typeof object.nestedFeature[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.nestedFeature: object expected\");\r\n message.nestedFeature[i] = $root.keyhole.dbroot.NestedFeatureProto.fromObject(object.nestedFeature[i]);\r\n }\r\n }\r\n if (object.styleAttribute) {\r\n if (!Array.isArray(object.styleAttribute))\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.styleAttribute: array expected\");\r\n message.styleAttribute = [];\r\n for (var i = 0; i < object.styleAttribute.length; ++i) {\r\n if (typeof object.styleAttribute[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.styleAttribute: object expected\");\r\n message.styleAttribute[i] = $root.keyhole.dbroot.StyleAttributeProto.fromObject(object.styleAttribute[i]);\r\n }\r\n }\r\n if (object.styleMap) {\r\n if (!Array.isArray(object.styleMap))\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.styleMap: array expected\");\r\n message.styleMap = [];\r\n for (var i = 0; i < object.styleMap.length; ++i) {\r\n if (typeof object.styleMap[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.styleMap: object expected\");\r\n message.styleMap[i] = $root.keyhole.dbroot.StyleMapProto.fromObject(object.styleMap[i]);\r\n }\r\n }\r\n if (object.endSnippet != null) {\r\n if (typeof object.endSnippet !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.endSnippet: object expected\");\r\n message.endSnippet = $root.keyhole.dbroot.EndSnippetProto.fromObject(object.endSnippet);\r\n }\r\n if (object.translationEntry) {\r\n if (!Array.isArray(object.translationEntry))\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.translationEntry: array expected\");\r\n message.translationEntry = [];\r\n for (var i = 0; i < object.translationEntry.length; ++i) {\r\n if (typeof object.translationEntry[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.translationEntry: object expected\");\r\n message.translationEntry[i] = $root.keyhole.dbroot.StringEntryProto.fromObject(object.translationEntry[i]);\r\n }\r\n }\r\n if (object.language != null)\r\n message.language = String(object.language);\r\n if (object.version != null)\r\n message.version = object.version | 0;\r\n if (object.dbrootReference) {\r\n if (!Array.isArray(object.dbrootReference))\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.dbrootReference: array expected\");\r\n message.dbrootReference = [];\r\n for (var i = 0; i < object.dbrootReference.length; ++i) {\r\n if (typeof object.dbrootReference[i] !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.dbrootReference: object expected\");\r\n message.dbrootReference[i] = $root.keyhole.dbroot.DbRootRefProto.fromObject(object.dbrootReference[i]);\r\n }\r\n }\r\n if (object.databaseVersion != null) {\r\n if (typeof object.databaseVersion !== \"object\")\r\n throw TypeError(\".keyhole.dbroot.DbRootProto.databaseVersion: object expected\");\r\n message.databaseVersion = $root.keyhole.dbroot.DatabaseVersionProto.fromObject(object.databaseVersion);\r\n }\r\n if (object.refreshTimeout != null)\r\n message.refreshTimeout = object.refreshTimeout | 0;\r\n return message;\r\n };\r\n \r\n DbRootProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.arrays || options.defaults) {\r\n object.providerInfo = [];\r\n object.nestedFeature = [];\r\n object.styleAttribute = [];\r\n object.styleMap = [];\r\n object.translationEntry = [];\r\n object.dbrootReference = [];\r\n }\r\n if (options.defaults) {\r\n object.imageryPresent = true;\r\n object.terrainPresent = false;\r\n object.endSnippet = null;\r\n object.language = \"en\";\r\n object.version = 5;\r\n object.databaseVersion = null;\r\n object.protoImagery = false;\r\n object.databaseName = null;\r\n object.refreshTimeout = 0;\r\n }\r\n if (message.imageryPresent != null && message.hasOwnProperty(\"imageryPresent\"))\r\n object.imageryPresent = message.imageryPresent;\r\n if (message.terrainPresent != null && message.hasOwnProperty(\"terrainPresent\"))\r\n object.terrainPresent = message.terrainPresent;\r\n if (message.providerInfo && message.providerInfo.length) {\r\n object.providerInfo = [];\r\n for (var j = 0; j < message.providerInfo.length; ++j)\r\n object.providerInfo[j] = $root.keyhole.dbroot.ProviderInfoProto.toObject(message.providerInfo[j], options);\r\n }\r\n if (message.nestedFeature && message.nestedFeature.length) {\r\n object.nestedFeature = [];\r\n for (var j = 0; j < message.nestedFeature.length; ++j)\r\n object.nestedFeature[j] = $root.keyhole.dbroot.NestedFeatureProto.toObject(message.nestedFeature[j], options);\r\n }\r\n if (message.styleAttribute && message.styleAttribute.length) {\r\n object.styleAttribute = [];\r\n for (var j = 0; j < message.styleAttribute.length; ++j)\r\n object.styleAttribute[j] = $root.keyhole.dbroot.StyleAttributeProto.toObject(message.styleAttribute[j], options);\r\n }\r\n if (message.styleMap && message.styleMap.length) {\r\n object.styleMap = [];\r\n for (var j = 0; j < message.styleMap.length; ++j)\r\n object.styleMap[j] = $root.keyhole.dbroot.StyleMapProto.toObject(message.styleMap[j], options);\r\n }\r\n if (message.endSnippet != null && message.hasOwnProperty(\"endSnippet\"))\r\n object.endSnippet = $root.keyhole.dbroot.EndSnippetProto.toObject(message.endSnippet, options);\r\n if (message.translationEntry && message.translationEntry.length) {\r\n object.translationEntry = [];\r\n for (var j = 0; j < message.translationEntry.length; ++j)\r\n object.translationEntry[j] = $root.keyhole.dbroot.StringEntryProto.toObject(message.translationEntry[j], options);\r\n }\r\n if (message.language != null && message.hasOwnProperty(\"language\"))\r\n object.language = message.language;\r\n if (message.version != null && message.hasOwnProperty(\"version\"))\r\n object.version = message.version;\r\n if (message.dbrootReference && message.dbrootReference.length) {\r\n object.dbrootReference = [];\r\n for (var j = 0; j < message.dbrootReference.length; ++j)\r\n object.dbrootReference[j] = $root.keyhole.dbroot.DbRootRefProto.toObject(message.dbrootReference[j], options);\r\n }\r\n if (message.databaseVersion != null && message.hasOwnProperty(\"databaseVersion\"))\r\n object.databaseVersion = $root.keyhole.dbroot.DatabaseVersionProto.toObject(message.databaseVersion, options);\r\n if (message.protoImagery != null && message.hasOwnProperty(\"protoImagery\"))\r\n object.protoImagery = message.protoImagery;\r\n if (message.databaseName != null && message.hasOwnProperty(\"databaseName\"))\r\n object.databaseName = $root.keyhole.dbroot.StringIdOrValueProto.toObject(message.databaseName, options);\r\n if (message.refreshTimeout != null && message.hasOwnProperty(\"refreshTimeout\"))\r\n object.refreshTimeout = message.refreshTimeout;\r\n return object;\r\n };\r\n \r\n DbRootProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n DbRootProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.DbRootProto\";\r\n };\r\n \r\n return DbRootProto;\r\n })();\r\n \r\n dbroot.EncryptedDbRootProto = (function() {\r\n \r\n function EncryptedDbRootProto(properties) {\r\n if (properties)\r\n for (var keys = Object.keys(properties), i = 0; i < keys.length; ++i)\r\n if (properties[keys[i]] != null)\r\n this[keys[i]] = properties[keys[i]];\r\n }\r\n \r\n EncryptedDbRootProto.prototype.encryptionType = 0;\r\n EncryptedDbRootProto.prototype.encryptionData = $util.newBuffer([]);\r\n EncryptedDbRootProto.prototype.dbrootData = $util.newBuffer([]);\r\n \r\n EncryptedDbRootProto.decode = function decode(reader, length) {\r\n if (!(reader instanceof $Reader))\r\n reader = $Reader.create(reader);\r\n var end = length === undefined ? reader.len : reader.pos + length, message = new $root.keyhole.dbroot.EncryptedDbRootProto();\r\n while (reader.pos < end) {\r\n var tag = reader.uint32();\r\n switch (tag >>> 3) {\r\n case 1: {\r\n message.encryptionType = reader.int32();\r\n break;\r\n }\r\n case 2: {\r\n message.encryptionData = reader.bytes();\r\n break;\r\n }\r\n case 3: {\r\n message.dbrootData = reader.bytes();\r\n break;\r\n }\r\n default:\r\n reader.skipType(tag & 7);\r\n break;\r\n }\r\n }\r\n return message;\r\n };\r\n \r\n EncryptedDbRootProto.verify = function verify(message) {\r\n if (typeof message !== \"object\" || message === null)\r\n return \"object expected\";\r\n if (message.encryptionType != null && message.hasOwnProperty(\"encryptionType\"))\r\n switch (message.encryptionType) {\r\n default:\r\n return \"encryptionType: enum value expected\";\r\n case 0:\r\n break;\r\n }\r\n if (message.encryptionData != null && message.hasOwnProperty(\"encryptionData\"))\r\n if (!(message.encryptionData && typeof message.encryptionData.length === \"number\" || $util.isString(message.encryptionData)))\r\n return \"encryptionData: buffer expected\";\r\n if (message.dbrootData != null && message.hasOwnProperty(\"dbrootData\"))\r\n if (!(message.dbrootData && typeof message.dbrootData.length === \"number\" || $util.isString(message.dbrootData)))\r\n return \"dbrootData: buffer expected\";\r\n return null;\r\n };\r\n \r\n EncryptedDbRootProto.fromObject = function fromObject(object) {\r\n if (object instanceof $root.keyhole.dbroot.EncryptedDbRootProto)\r\n return object;\r\n var message = new $root.keyhole.dbroot.EncryptedDbRootProto();\r\n switch (object.encryptionType) {\r\n case \"ENCRYPTION_XOR\":\r\n case 0:\r\n message.encryptionType = 0;\r\n break;\r\n }\r\n if (object.encryptionData != null)\r\n if (typeof object.encryptionData === \"string\")\r\n $util.base64.decode(object.encryptionData, message.encryptionData = $util.newBuffer($util.base64.length(object.encryptionData)), 0);\r\n else if (object.encryptionData.length >= 0)\r\n message.encryptionData = object.encryptionData;\r\n if (object.dbrootData != null)\r\n if (typeof object.dbrootData === \"string\")\r\n $util.base64.decode(object.dbrootData, message.dbrootData = $util.newBuffer($util.base64.length(object.dbrootData)), 0);\r\n else if (object.dbrootData.length >= 0)\r\n message.dbrootData = object.dbrootData;\r\n return message;\r\n };\r\n \r\n EncryptedDbRootProto.toObject = function toObject(message, options) {\r\n if (!options)\r\n options = {};\r\n var object = {};\r\n if (options.defaults) {\r\n object.encryptionType = options.enums === String ? \"ENCRYPTION_XOR\" : 0;\r\n if (options.bytes === String)\r\n object.encryptionData = \"\";\r\n else {\r\n object.encryptionData = [];\r\n if (options.bytes !== Array)\r\n object.encryptionData = $util.newBuffer(object.encryptionData);\r\n }\r\n if (options.bytes === String)\r\n object.dbrootData = \"\";\r\n else {\r\n object.dbrootData = [];\r\n if (options.bytes !== Array)\r\n object.dbrootData = $util.newBuffer(object.dbrootData);\r\n }\r\n }\r\n if (message.encryptionType != null && message.hasOwnProperty(\"encryptionType\"))\r\n object.encryptionType = options.enums === String ? $root.keyhole.dbroot.EncryptedDbRootProto.EncryptionType[message.encryptionType] : message.encryptionType;\r\n if (message.encryptionData != null && message.hasOwnProperty(\"encryptionData\"))\r\n object.encryptionData = options.bytes === String ? $util.base64.encode(message.encryptionData, 0, message.encryptionData.length) : options.bytes === Array ? Array.prototype.slice.call(message.encryptionData) : message.encryptionData;\r\n if (message.dbrootData != null && message.hasOwnProperty(\"dbrootData\"))\r\n object.dbrootData = options.bytes === String ? $util.base64.encode(message.dbrootData, 0, message.dbrootData.length) : options.bytes === Array ? Array.prototype.slice.call(message.dbrootData) : message.dbrootData;\r\n return object;\r\n };\r\n \r\n EncryptedDbRootProto.prototype.toJSON = function toJSON() {\r\n return this.constructor.toObject(this, $protobuf.util.toJSONOptions);\r\n };\r\n \r\n EncryptedDbRootProto.getTypeUrl = function getTypeUrl(typeUrlPrefix) {\r\n if (typeUrlPrefix === undefined) {\r\n typeUrlPrefix = \"type.googleapis.com\";\r\n }\r\n return typeUrlPrefix + \"/keyhole.dbroot.EncryptedDbRootProto\";\r\n };\r\n \r\n EncryptedDbRootProto.EncryptionType = (function() {\r\n var valuesById = {}, values = Object.create(valuesById);\r\n values[valuesById[0] = \"ENCRYPTION_XOR\"] = 0;\r\n return values;\r\n })();\r\n \r\n return EncryptedDbRootProto;\r\n })();\r\n \r\n return dbroot;\r\n })();\r\n \r\n return keyhole;\r\n })();\r\n\r\n // End generated code\r\n\r\n return $root.keyhole.dbroot;\r\n};\r\n"], - "mappings": "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", - "names": [] -} diff --git a/debug/cesium/Widgets/Animation/Animation.css b/debug/cesium/Widgets/Animation/Animation.css deleted file mode 100644 index 71fa8d7..0000000 --- a/debug/cesium/Widgets/Animation/Animation.css +++ /dev/null @@ -1,128 +0,0 @@ -/* Source/Widgets/Animation/Animation.css */ -.cesium-animation-theme { - visibility: hidden; - display: block; - position: absolute; - z-index: -100; -} -.cesium-animation-themeNormal { - color: #222; -} -.cesium-animation-themeHover { - color: #4488b0; -} -.cesium-animation-themeSelect { - color: #242; -} -.cesium-animation-themeDisabled { - color: #333; -} -.cesium-animation-themeKnob { - color: #222; -} -.cesium-animation-themePointer { - color: #2e2; -} -.cesium-animation-themeSwoosh { - color: #8ac; -} -.cesium-animation-themeSwooshHover { - color: #aef; -} -.cesium-animation-svgText { - fill: #edffff; - font-family: Sans-Serif; - font-size: 15px; - text-anchor: middle; -} -.cesium-animation-blank { - fill: #000; - fill-opacity: 0.01; - stroke: none; -} -.cesium-animation-rectButton { - cursor: pointer; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; -} -.cesium-animation-rectButton .cesium-animation-buttonGlow { - fill: #fff; - stroke: none; - display: none; -} -.cesium-animation-rectButton:hover .cesium-animation-buttonGlow { - display: block; -} -.cesium-animation-rectButton .cesium-animation-buttonPath { - fill: #edffff; -} -.cesium-animation-rectButton .cesium-animation-buttonMain { - stroke: #444; - stroke-width: 1.2; -} -.cesium-animation-rectButton:hover .cesium-animation-buttonMain { - stroke: #aef; -} -.cesium-animation-rectButton:active .cesium-animation-buttonMain { - fill: #abd6ff; -} -.cesium-animation-buttonDisabled { - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; -} -.cesium-animation-buttonDisabled .cesium-animation-buttonMain { - stroke: #555; -} -.cesium-animation-buttonDisabled .cesium-animation-buttonPath { - fill: #818181; -} -.cesium-animation-buttonDisabled .cesium-animation-buttonGlow { - display: none; -} -.cesium-animation-buttonToggled .cesium-animation-buttonGlow { - display: block; - fill: #2e2; -} -.cesium-animation-buttonToggled .cesium-animation-buttonMain { - stroke: #2e2; -} -.cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow { - fill: #fff; -} -.cesium-animation-buttonToggled:hover .cesium-animation-buttonMain { - stroke: #2e2; -} -.cesium-animation-shuttleRingG { - cursor: pointer; -} -.cesium-animation-shuttleRingPointer { - cursor: pointer; -} -.cesium-animation-shuttleRingPausePointer { - cursor: pointer; -} -.cesium-animation-shuttleRingBack { - fill: #181818; - fill-opacity: 0.8; - stroke: #333; - stroke-width: 1.2; -} -.cesium-animation-shuttleRingSwoosh line { - stroke: #8ac; - stroke-width: 3; - stroke-opacity: 0.2; - stroke-linecap: round; -} -.cesium-animation-knobOuter { - cursor: pointer; - stroke: #444; - stroke-width: 1.2; -} -.cesium-animation-knobInner { - cursor: pointer; -} -/*# sourceMappingURL=Animation.css.map */ diff --git a/debug/cesium/Widgets/Animation/Animation.css.map b/debug/cesium/Widgets/Animation/Animation.css.map deleted file mode 100644 index 73604aa..0000000 --- a/debug/cesium/Widgets/Animation/Animation.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/Animation/Animation.css"], - "sourcesContent": [".cesium-animation-theme {\r\n visibility: hidden;\r\n display: block;\r\n position: absolute;\r\n z-index: -100;\r\n}\r\n\r\n.cesium-animation-themeNormal {\r\n color: #222;\r\n}\r\n\r\n.cesium-animation-themeHover {\r\n color: #4488b0;\r\n}\r\n\r\n.cesium-animation-themeSelect {\r\n color: #242;\r\n}\r\n\r\n.cesium-animation-themeDisabled {\r\n color: #333;\r\n}\r\n\r\n.cesium-animation-themeKnob {\r\n color: #222;\r\n}\r\n\r\n.cesium-animation-themePointer {\r\n color: #2e2;\r\n}\r\n\r\n.cesium-animation-themeSwoosh {\r\n color: #8ac;\r\n}\r\n\r\n.cesium-animation-themeSwooshHover {\r\n color: #aef;\r\n}\r\n\r\n.cesium-animation-svgText {\r\n fill: #edffff;\r\n font-family: Sans-Serif;\r\n font-size: 15px;\r\n text-anchor: middle;\r\n}\r\n\r\n.cesium-animation-blank {\r\n fill: #000;\r\n fill-opacity: 0.01; /* This must be clickable, so it can't be 'fill: none'. */\r\n stroke: none;\r\n}\r\n\r\n.cesium-animation-rectButton {\r\n cursor: pointer;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\n.cesium-animation-rectButton .cesium-animation-buttonGlow {\r\n fill: #fff;\r\n stroke: none;\r\n /* Widget will add: filter: url(#animation_blurred); */\r\n display: none;\r\n}\r\n\r\n.cesium-animation-rectButton:hover .cesium-animation-buttonGlow {\r\n display: block;\r\n}\r\n\r\n.cesium-animation-rectButton .cesium-animation-buttonPath {\r\n fill: #edffff;\r\n}\r\n\r\n.cesium-animation-rectButton .cesium-animation-buttonMain {\r\n /* Widget will add: fill: url(#animation_buttonNormal); */\r\n stroke: #444;\r\n stroke-width: 1.2;\r\n}\r\n\r\n.cesium-animation-rectButton:hover .cesium-animation-buttonMain {\r\n /* Widget will add: fill: url(#animation_buttonHovered); */\r\n stroke: #aef;\r\n}\r\n\r\n.cesium-animation-rectButton:active .cesium-animation-buttonMain {\r\n fill: #abd6ff;\r\n}\r\n\r\n.cesium-animation-buttonDisabled {\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\n.cesium-animation-buttonDisabled .cesium-animation-buttonMain {\r\n /* Widget will add: fill: url(#animation_buttonDisabled); */\r\n stroke: #555;\r\n}\r\n\r\n.cesium-animation-buttonDisabled .cesium-animation-buttonPath {\r\n fill: #818181;\r\n}\r\n\r\n.cesium-animation-buttonDisabled .cesium-animation-buttonGlow {\r\n display: none;\r\n}\r\n\r\n.cesium-animation-buttonToggled .cesium-animation-buttonGlow {\r\n display: block;\r\n fill: #2e2;\r\n}\r\n\r\n.cesium-animation-buttonToggled .cesium-animation-buttonMain {\r\n stroke: #2e2;\r\n}\r\n\r\n.cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow {\r\n fill: #fff;\r\n}\r\n\r\n.cesium-animation-buttonToggled:hover .cesium-animation-buttonMain {\r\n stroke: #2e2;\r\n}\r\n\r\n.cesium-animation-shuttleRingG {\r\n cursor: pointer;\r\n}\r\n\r\n/* Widget will add:\r\n.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh {\r\n fill: url(#animation_shuttleRingSwooshGradient);\r\n}\r\n\r\n.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh {\r\n fill: url(#animation_shuttleRingSwooshHovered);\r\n}\r\n*/\r\n\r\n.cesium-animation-shuttleRingPointer {\r\n /* Widget will add: fill: url(#animation_shuttleRingPointerGradient); */\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-animation-shuttleRingPausePointer {\r\n /* Widget will add: fill: url(#animation_shuttleRingPointerPaused); */\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-animation-shuttleRingBack {\r\n fill: #181818;\r\n fill-opacity: 0.8;\r\n stroke: #333;\r\n stroke-width: 1.2;\r\n}\r\n\r\n.cesium-animation-shuttleRingSwoosh line {\r\n stroke: #8ac;\r\n stroke-width: 3;\r\n stroke-opacity: 0.2;\r\n stroke-linecap: round;\r\n}\r\n\r\n.cesium-animation-knobOuter {\r\n /* Widget will add: fill: url(#animation_knobOuter); */\r\n cursor: pointer;\r\n stroke: #444;\r\n stroke-width: 1.2;\r\n}\r\n\r\n.cesium-animation-knobInner {\r\n /* Widget will add: fill: url(#animation_knobInner); */\r\n cursor: pointer;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAEA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AAEE;AACA;AAAA;AAGF;AAEE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAEE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAaF;AAEE;AAAA;AAGF;AAEE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAEE;AACA;AACA;AAAA;AAGF;AAEE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/Animation/lighter.css b/debug/cesium/Widgets/Animation/lighter.css deleted file mode 100644 index c530dd4..0000000 --- a/debug/cesium/Widgets/Animation/lighter.css +++ /dev/null @@ -1,71 +0,0 @@ -/* Source/Widgets/Animation/lighter.css */ -.cesium-lighter .cesium-animation-themeNormal { - color: #e5f2fe; -} -.cesium-lighter .cesium-animation-themeHover { - color: #abd6ff; -} -.cesium-lighter .cesium-animation-themeSelect { - color: #e5f2fe; -} -.cesium-lighter .cesium-animation-themeDisabled { - color: #efefef; -} -.cesium-lighter .cesium-animation-themeKnob { - color: #e1e2e3; -} -.cesium-lighter .cesium-animation-themePointer { - color: #fa5; -} -.cesium-lighter .cesium-animation-themeSwoosh { - color: #ace; -} -.cesium-lighter .cesium-animation-themeSwooshHover { - color: #bdf; -} -.cesium-lighter .cesium-animation-svgText { - fill: #111; -} -.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonPath { - fill: #111; -} -.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonMain { - stroke: #759dc0; -} -.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonGlow { - fill: #ffaa2a; -} -.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonMain { - stroke: #ea0; -} -.cesium-lighter .cesium-animation-rectButton:hover .cesium-animation-buttonMain { - stroke: #759dc0; -} -.cesium-lighter .cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow { - fill: #fff; -} -.cesium-lighter .cesium-animation-buttonToggled:hover .cesium-animation-buttonMain { - stroke: #ea0; -} -.cesium-lighter .cesium-animation-rectButton:active .cesium-animation-buttonMain { - fill: #abd6ff; -} -.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonMain { - stroke: #d3d3d3; -} -.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonPath { - fill: #818181; -} -.cesium-lighter .cesium-animation-shuttleRingBack { - fill: #fafafa; - fill-opacity: 1; - stroke: #aeaeae; - stroke-width: 1.2; -} -.cesium-lighter .cesium-animation-shuttleRingSwoosh line { - stroke: #8ac; -} -.cesium-lighter .cesium-animation-knobOuter { - stroke: #a5a5a5; -} -/*# sourceMappingURL=lighter.css.map */ diff --git a/debug/cesium/Widgets/Animation/lighter.css.map b/debug/cesium/Widgets/Animation/lighter.css.map deleted file mode 100644 index 8bad547..0000000 --- a/debug/cesium/Widgets/Animation/lighter.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/Animation/lighter.css"], - "sourcesContent": [".cesium-lighter .cesium-animation-themeNormal {\r\n color: #e5f2fe;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-themeHover {\r\n color: #abd6ff;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-themeSelect {\r\n color: #e5f2fe;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-themeDisabled {\r\n color: #efefef;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-themeKnob {\r\n color: #e1e2e3;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-themePointer {\r\n color: #fa5;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-themeSwoosh {\r\n color: #ace;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-themeSwooshHover {\r\n color: #bdf;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-svgText {\r\n fill: #111;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonPath {\r\n fill: #111;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-rectButton .cesium-animation-buttonMain {\r\n stroke: #759dc0;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonGlow {\r\n fill: #ffaa2a;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-buttonToggled .cesium-animation-buttonMain {\r\n /* Widget will add: fill: url(#animation_buttonToggled); */\r\n stroke: #ea0;\r\n}\r\n\r\n.cesium-lighter\r\n .cesium-animation-rectButton:hover\r\n .cesium-animation-buttonMain {\r\n stroke: #759dc0;\r\n}\r\n\r\n.cesium-lighter\r\n .cesium-animation-buttonToggled:hover\r\n .cesium-animation-buttonGlow {\r\n fill: #fff;\r\n}\r\n\r\n.cesium-lighter\r\n .cesium-animation-buttonToggled:hover\r\n .cesium-animation-buttonMain {\r\n stroke: #ea0;\r\n}\r\n\r\n.cesium-lighter\r\n .cesium-animation-rectButton:active\r\n .cesium-animation-buttonMain {\r\n fill: #abd6ff;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonMain {\r\n stroke: #d3d3d3;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-buttonDisabled .cesium-animation-buttonPath {\r\n fill: #818181;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-shuttleRingBack {\r\n fill: #fafafa;\r\n fill-opacity: 1;\r\n stroke: #aeaeae;\r\n stroke-width: 1.2;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-shuttleRingSwoosh line {\r\n stroke: #8ac;\r\n}\r\n\r\n.cesium-lighter .cesium-animation-knobOuter {\r\n stroke: #a5a5a5;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AAEE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css b/debug/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css deleted file mode 100644 index a0caf30..0000000 --- a/debug/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css +++ /dev/null @@ -1,109 +0,0 @@ -/* Source/Widgets/BaseLayerPicker/BaseLayerPicker.css */ -.cesium-baseLayerPicker-selected { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - border: none; -} -.cesium-baseLayerPicker-dropDown { - display: block; - position: absolute; - box-sizing: content-box; - top: auto; - right: 0; - width: 320px; - max-height: 500px; - margin-top: 5px; - background-color: rgba(38, 38, 38, 0.75); - border: 1px solid #444; - padding: 6px; - overflow: auto; - border-radius: 10px; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; - transform: translate(0, -20%); - visibility: hidden; - opacity: 0; - transition: - visibility 0s 0.2s, - opacity 0.2s ease-in, - transform 0.2s ease-in; -} -.cesium-baseLayerPicker-dropDown-visible { - transform: translate(0, 0); - visibility: visible; - opacity: 1; - transition: opacity 0.2s ease-out, transform 0.2s ease-out; -} -.cesium-baseLayerPicker-sectionTitle { - display: block; - font-family: sans-serif; - font-size: 16pt; - text-align: left; - color: #edffff; - margin-bottom: 4px; -} -.cesium-baseLayerPicker-choices { - margin-bottom: 5px; -} -.cesium-baseLayerPicker-categoryTitle { - color: #edffff; - font-size: 11pt; -} -.cesium-baseLayerPicker-choices { - display: block; - border: 1px solid #888; - border-radius: 5px; - padding: 5px 0; -} -.cesium-baseLayerPicker-item { - display: inline-block; - vertical-align: top; - margin: 2px 5px; - width: 64px; - text-align: center; - cursor: pointer; -} -.cesium-baseLayerPicker-itemLabel { - display: block; - font-family: sans-serif; - font-size: 8pt; - text-align: center; - vertical-align: middle; - color: #edffff; - cursor: pointer; - word-wrap: break-word; -} -.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemLabel, -.cesium-baseLayerPicker-item:focus .cesium-baseLayerPicker-itemLabel { - text-decoration: underline; -} -.cesium-baseLayerPicker-itemIcon { - display: inline-block; - position: relative; - width: inherit; - height: auto; - background-size: 100% 100%; - border: solid 1px #444; - border-radius: 9px; - color: #edffff; - margin: 0; - padding: 0; - cursor: pointer; - box-sizing: border-box; -} -.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon { - border-color: #fff; - box-shadow: 0 0 8px #fff, 0 0 8px #fff; -} -.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel { - color: rgb(189, 236, 248); -} -.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon { - border: double 4px rgb(189, 236, 248); -} -/*# sourceMappingURL=BaseLayerPicker.css.map */ diff --git a/debug/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css.map b/debug/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css.map deleted file mode 100644 index f6dd438..0000000 --- a/debug/cesium/Widgets/BaseLayerPicker/BaseLayerPicker.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/BaseLayerPicker/BaseLayerPicker.css"], - "sourcesContent": [".cesium-baseLayerPicker-selected {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n}\r\n\r\n.cesium-baseLayerPicker-dropDown {\r\n display: block;\r\n position: absolute;\r\n box-sizing: content-box;\r\n top: auto;\r\n right: 0;\r\n width: 320px; /* Includes space needed for scrollbar */\r\n max-height: 500px;\r\n margin-top: 5px;\r\n background-color: rgba(38, 38, 38, 0.75);\r\n border: 1px solid #444;\r\n padding: 6px;\r\n overflow: auto;\r\n border-radius: 10px;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n transform: translate(0, -20%);\r\n visibility: hidden;\r\n opacity: 0;\r\n transition: visibility 0s 0.2s, opacity 0.2s ease-in, transform 0.2s ease-in;\r\n}\r\n\r\n.cesium-baseLayerPicker-dropDown-visible {\r\n transform: translate(0, 0);\r\n visibility: visible;\r\n opacity: 1;\r\n transition: opacity 0.2s ease-out, transform 0.2s ease-out;\r\n}\r\n\r\n.cesium-baseLayerPicker-sectionTitle {\r\n display: block;\r\n font-family: sans-serif;\r\n font-size: 16pt;\r\n text-align: left;\r\n color: #edffff;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.cesium-baseLayerPicker-choices {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.cesium-baseLayerPicker-categoryTitle {\r\n color: #edffff;\r\n font-size: 11pt;\r\n}\r\n\r\n.cesium-baseLayerPicker-choices {\r\n display: block;\r\n border: 1px solid #888;\r\n border-radius: 5px;\r\n padding: 5px 0;\r\n}\r\n\r\n.cesium-baseLayerPicker-item {\r\n display: inline-block;\r\n vertical-align: top;\r\n margin: 2px 5px;\r\n width: 64px;\r\n text-align: center;\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-baseLayerPicker-itemLabel {\r\n display: block;\r\n font-family: sans-serif;\r\n font-size: 8pt;\r\n text-align: center;\r\n vertical-align: middle;\r\n color: #edffff;\r\n cursor: pointer;\r\n word-wrap: break-word;\r\n}\r\n\r\n.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemLabel,\r\n.cesium-baseLayerPicker-item:focus .cesium-baseLayerPicker-itemLabel {\r\n text-decoration: underline;\r\n}\r\n\r\n.cesium-baseLayerPicker-itemIcon {\r\n display: inline-block;\r\n position: relative;\r\n width: inherit;\r\n height: auto;\r\n background-size: 100% 100%;\r\n border: solid 1px #444;\r\n border-radius: 9px;\r\n color: #edffff;\r\n margin: 0;\r\n padding: 0;\r\n cursor: pointer;\r\n box-sizing: border-box;\r\n}\r\n\r\n.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon {\r\n border-color: #fff;\r\n box-shadow: 0 0 8px #fff, 0 0 8px #fff;\r\n}\r\n\r\n.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel {\r\n color: rgb(189, 236, 248);\r\n}\r\n\r\n.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon {\r\n border: double 4px rgb(189, 236, 248);\r\n}\r\n"], - "mappings": ";AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/BaseLayerPicker/lighter.css b/debug/cesium/Widgets/BaseLayerPicker/lighter.css deleted file mode 100644 index e9afbab..0000000 --- a/debug/cesium/Widgets/BaseLayerPicker/lighter.css +++ /dev/null @@ -1,23 +0,0 @@ -/* Source/Widgets/BaseLayerPicker/lighter.css */ -.cesium-lighter .cesium-baseLayerPicker-itemIcon { - border-color: #759dc0; -} -.cesium-lighter .cesium-baseLayerPicker-dropDown { - background-color: rgba(240, 240, 240, 0.75); -} -.cesium-lighter .cesium-baseLayerPicker-sectionTitle { - color: black; -} -.cesium-lighter .cesium-baseLayerPicker-itemLabel { - color: black; -} -.cesium-lighter .cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon { - border-color: #000; -} -.cesium-lighter .cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel { - color: rgb(0, 61, 168); -} -.cesium-lighter .cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon { - border: double 4px rgb(0, 61, 168); -} -/*# sourceMappingURL=lighter.css.map */ diff --git a/debug/cesium/Widgets/BaseLayerPicker/lighter.css.map b/debug/cesium/Widgets/BaseLayerPicker/lighter.css.map deleted file mode 100644 index e06ecfc..0000000 --- a/debug/cesium/Widgets/BaseLayerPicker/lighter.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/BaseLayerPicker/lighter.css"], - "sourcesContent": [".cesium-lighter .cesium-baseLayerPicker-itemIcon {\r\n border-color: #759dc0;\r\n}\r\n\r\n.cesium-lighter .cesium-baseLayerPicker-dropDown {\r\n background-color: rgba(240, 240, 240, 0.75);\r\n}\r\n\r\n.cesium-lighter .cesium-baseLayerPicker-sectionTitle {\r\n color: black;\r\n}\r\n\r\n.cesium-lighter .cesium-baseLayerPicker-itemLabel {\r\n color: black;\r\n}\r\n\r\n.cesium-lighter\r\n .cesium-baseLayerPicker-item:hover\r\n .cesium-baseLayerPicker-itemIcon {\r\n border-color: #000;\r\n}\r\n\r\n.cesium-lighter\r\n .cesium-baseLayerPicker-selectedItem\r\n .cesium-baseLayerPicker-itemLabel {\r\n color: rgb(0, 61, 168);\r\n}\r\n\r\n.cesium-lighter\r\n .cesium-baseLayerPicker-selectedItem\r\n .cesium-baseLayerPicker-itemIcon {\r\n border: double 4px rgb(0, 61, 168);\r\n}\r\n"], - "mappings": ";AAAA;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css b/debug/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css deleted file mode 100644 index 099b4b6..0000000 --- a/debug/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css +++ /dev/null @@ -1,103 +0,0 @@ -/* Source/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css */ -ul.cesium-cesiumInspector-statistics { - margin: 0; - padding-top: 3px; - padding-bottom: 3px; -} -ul.cesium-cesiumInspector-statistics + ul.cesium-cesiumInspector-statistics { - border-top: 1px solid #aaa; -} -.cesium-cesiumInspector-slider { - margin-top: 5px; -} -.cesium-cesiumInspector-slider input[type=number] { - text-align: left; - background-color: #222; - outline: none; - border: 1px solid #444; - color: #edffff; - width: 100px; - border-radius: 3px; - padding: 1px; - margin-left: 10px; - cursor: auto; -} -.cesium-cesiumInspector-slider input[type=number]::-webkit-outer-spin-button, -.cesium-cesiumInspector-slider input[type=number]::-webkit-inner-spin-button { - -webkit-appearance: none; - margin: 0; -} -.cesium-cesiumInspector-slider input[type=range] { - margin-left: 5px; - vertical-align: middle; -} -.cesium-cesiumInspector-hide .cesium-cesiumInspector-styleEditor { - display: none; -} -.cesium-cesiumInspector-styleEditor { - padding: 10px; - border-radius: 5px; - background: rgba(48, 51, 54, 0.8); - border: 1px solid #444; -} -.cesium-cesiumInspector-styleEditor textarea { - width: 100%; - height: 300px; - background: transparent; - color: #edffff; - border: none; - padding: 0; - white-space: pre; - overflow-wrap: normal; - overflow-x: auto; -} -.cesium-3DTilesInspector { - width: 300px; - pointer-events: all; -} -.cesium-3DTilesInspector-statistics { - font-size: 11px; -} -.cesium-3DTilesInspector-disabledElementsInfo { - margin: 5px 0 0 0; - padding: 0 0 0 20px; - color: #eed202; -} -.cesium-3DTilesInspector div, -.cesium-3DTilesInspector input[type=range] { - width: 100%; - box-sizing: border-box; -} -.cesium-cesiumInspector-error { - color: #ff9e9e; - overflow: auto; -} -.cesium-3DTilesInspector .cesium-cesiumInspector-section { - margin-top: 3px; -} -.cesium-3DTilesInspector .cesium-cesiumInspector-sectionHeader + .cesium-cesiumInspector-show { - border-top: 1px solid white; -} -input.cesium-cesiumInspector-url { - overflow: hidden; - white-space: nowrap; - overflow-x: scroll; - background-color: transparent; - color: white; - outline: none; - border: none; - height: 1em; - width: 100%; -} -.cesium-cesiumInspector .field-group { - display: table; -} -.cesium-cesiumInspector .field-group > label { - display: table-cell; - font-weight: bold; -} -.cesium-cesiumInspector .field-group > .field { - display: table-cell; - width: 100%; -} -/*# sourceMappingURL=Cesium3DTilesInspector.css.map */ diff --git a/debug/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css.map b/debug/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css.map deleted file mode 100644 index 634b9d1..0000000 --- a/debug/cesium/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css"], - "sourcesContent": ["ul.cesium-cesiumInspector-statistics {\r\n margin: 0;\r\n padding-top: 3px;\r\n padding-bottom: 3px;\r\n}\r\n\r\nul.cesium-cesiumInspector-statistics + ul.cesium-cesiumInspector-statistics {\r\n border-top: 1px solid #aaa;\r\n}\r\n\r\n.cesium-cesiumInspector-slider {\r\n margin-top: 5px;\r\n}\r\n\r\n.cesium-cesiumInspector-slider input[type=\"number\"] {\r\n text-align: left;\r\n background-color: #222;\r\n outline: none;\r\n border: 1px solid #444;\r\n color: #edffff;\r\n width: 100px;\r\n border-radius: 3px;\r\n padding: 1px;\r\n margin-left: 10px;\r\n cursor: auto;\r\n}\r\n\r\n.cesium-cesiumInspector-slider input[type=\"number\"]::-webkit-outer-spin-button,\r\n.cesium-cesiumInspector-slider input[type=\"number\"]::-webkit-inner-spin-button {\r\n -webkit-appearance: none;\r\n margin: 0;\r\n}\r\n\r\n.cesium-cesiumInspector-slider input[type=\"range\"] {\r\n margin-left: 5px;\r\n vertical-align: middle;\r\n}\r\n\r\n.cesium-cesiumInspector-hide .cesium-cesiumInspector-styleEditor {\r\n display: none;\r\n}\r\n\r\n.cesium-cesiumInspector-styleEditor {\r\n padding: 10px;\r\n border-radius: 5px;\r\n background: rgba(48, 51, 54, 0.8);\r\n border: 1px solid #444;\r\n}\r\n\r\n.cesium-cesiumInspector-styleEditor textarea {\r\n width: 100%;\r\n height: 300px;\r\n background: transparent;\r\n color: #edffff;\r\n border: none;\r\n padding: 0;\r\n white-space: pre;\r\n overflow-wrap: normal;\r\n overflow-x: auto;\r\n}\r\n\r\n.cesium-3DTilesInspector {\r\n width: 300px;\r\n pointer-events: all;\r\n}\r\n\r\n.cesium-3DTilesInspector-statistics {\r\n font-size: 11px;\r\n}\r\n\r\n.cesium-3DTilesInspector-disabledElementsInfo {\r\n margin: 5px 0 0 0;\r\n padding: 0 0 0 20px;\r\n color: #eed202;\r\n}\r\n\r\n.cesium-3DTilesInspector div,\r\n.cesium-3DTilesInspector input[type=\"range\"] {\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.cesium-cesiumInspector-error {\r\n color: #ff9e9e;\r\n overflow: auto;\r\n}\r\n\r\n.cesium-3DTilesInspector .cesium-cesiumInspector-section {\r\n margin-top: 3px;\r\n}\r\n\r\n.cesium-3DTilesInspector\r\n .cesium-cesiumInspector-sectionHeader\r\n + .cesium-cesiumInspector-show {\r\n border-top: 1px solid white;\r\n}\r\n\r\ninput.cesium-cesiumInspector-url {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n overflow-x: scroll;\r\n background-color: transparent;\r\n color: white;\r\n outline: none;\r\n border: none;\r\n height: 1em;\r\n width: 100%;\r\n}\r\n\r\n.cesium-cesiumInspector .field-group {\r\n display: table;\r\n}\r\n\r\n.cesium-cesiumInspector .field-group > label {\r\n display: table-cell;\r\n font-weight: bold;\r\n}\r\n\r\n.cesium-cesiumInspector .field-group > .field {\r\n display: table-cell;\r\n width: 100%;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAGE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/CesiumInspector/CesiumInspector.css b/debug/cesium/Widgets/CesiumInspector/CesiumInspector.css deleted file mode 100644 index f8eb0fc..0000000 --- a/debug/cesium/Widgets/CesiumInspector/CesiumInspector.css +++ /dev/null @@ -1,114 +0,0 @@ -/* Source/Widgets/CesiumInspector/CesiumInspector.css */ -.cesium-cesiumInspector { - border-radius: 5px; - transition: width ease-in-out 0.25s; - background: rgba(48, 51, 54, 0.8); - border: 1px solid #444; - color: #edffff; - display: inline-block; - position: relative; - padding: 4px 12px; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; - overflow: hidden; -} -.cesium-cesiumInspector-button { - text-align: center; - font-size: 11pt; -} -.cesium-cesiumInspector-visible .cesium-cesiumInspector-button { - border-bottom: 1px solid #aaa; - padding-bottom: 3px; -} -.cesium-cesiumInspector input:enabled, -.cesium-cesiumInspector-button { - cursor: pointer; -} -.cesium-cesiumInspector-visible { - width: 185px; - height: auto; -} -.cesium-cesiumInspector-hidden { - width: 122px; - height: 17px; -} -.cesium-cesiumInspector-sectionContent { - max-height: 600px; -} -.cesium-cesiumInspector-section-collapsed .cesium-cesiumInspector-sectionContent { - max-height: 0; - padding: 0 !important; - overflow: hidden; -} -.cesium-cesiumInspector-dropDown { - margin: 5px 0; - font-family: sans-serif; - font-size: 10pt; - width: 185px; -} -.cesium-cesiumInspector-frustumStatistics { - padding-left: 10px; - padding: 5px; - background-color: rgba(80, 80, 80, 0.75); -} -.cesium-cesiumInspector-pickButton { - background-color: rgba(0, 0, 0, 0.3); - border: 1px solid #444; - color: #edffff; - border-radius: 5px; - padding: 3px 7px; - cursor: pointer; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; - margin: 0 auto; -} -.cesium-cesiumInspector-pickButton:focus { - outline: none; -} -.cesium-cesiumInspector-pickButton:active, -.cesium-cesiumInspector-pickButtonHighlight { - color: #000; - background: #adf; - border-color: #fff; - box-shadow: 0 0 8px #fff; -} -.cesium-cesiumInspector-center { - text-align: center; -} -.cesium-cesiumInspector-sectionHeader { - font-weight: bold; - font-size: 10pt; - margin: 0; - cursor: pointer; -} -.cesium-cesiumInspector-pickSection { - border: 1px solid #aaa; - border-radius: 5px; - padding: 3px; - margin-bottom: 5px; -} -.cesium-cesiumInspector-sectionContent { - margin-bottom: 10px; - transition: max-height 0.25s; -} -.cesium-cesiumInspector-tileText { - padding-bottom: 10px; - border-bottom: 1px solid #aaa; -} -.cesium-cesiumInspector-relativeText { - padding-top: 10px; -} -.cesium-cesiumInspector-sectionHeader::before { - margin-right: 5px; - content: "-"; - width: 1ch; - display: inline-block; -} -.cesium-cesiumInspector-section-collapsed .cesium-cesiumInspector-sectionHeader::before { - content: "+"; -} -/*# sourceMappingURL=CesiumInspector.css.map */ diff --git a/debug/cesium/Widgets/CesiumInspector/CesiumInspector.css.map b/debug/cesium/Widgets/CesiumInspector/CesiumInspector.css.map deleted file mode 100644 index bb5f020..0000000 --- a/debug/cesium/Widgets/CesiumInspector/CesiumInspector.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/CesiumInspector/CesiumInspector.css"], - "sourcesContent": [".cesium-cesiumInspector {\r\n border-radius: 5px;\r\n transition: width ease-in-out 0.25s;\r\n background: rgba(48, 51, 54, 0.8);\r\n border: 1px solid #444;\r\n color: #edffff;\r\n display: inline-block;\r\n position: relative;\r\n padding: 4px 12px;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n overflow: hidden;\r\n}\r\n\r\n.cesium-cesiumInspector-button {\r\n text-align: center;\r\n font-size: 11pt;\r\n}\r\n\r\n.cesium-cesiumInspector-visible .cesium-cesiumInspector-button {\r\n border-bottom: 1px solid #aaa;\r\n padding-bottom: 3px;\r\n}\r\n\r\n.cesium-cesiumInspector input:enabled,\r\n.cesium-cesiumInspector-button {\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-cesiumInspector-visible {\r\n width: 185px;\r\n height: auto;\r\n}\r\n\r\n.cesium-cesiumInspector-hidden {\r\n width: 122px;\r\n height: 17px;\r\n}\r\n\r\n.cesium-cesiumInspector-sectionContent {\r\n max-height: 600px;\r\n}\r\n\r\n.cesium-cesiumInspector-section-collapsed\r\n .cesium-cesiumInspector-sectionContent {\r\n max-height: 0;\r\n padding: 0 !important;\r\n overflow: hidden;\r\n}\r\n\r\n.cesium-cesiumInspector-dropDown {\r\n margin: 5px 0;\r\n font-family: sans-serif;\r\n font-size: 10pt;\r\n width: 185px;\r\n}\r\n\r\n.cesium-cesiumInspector-frustumStatistics {\r\n padding-left: 10px;\r\n padding: 5px;\r\n background-color: rgba(80, 80, 80, 0.75);\r\n}\r\n\r\n.cesium-cesiumInspector-pickButton {\r\n background-color: rgba(0, 0, 0, 0.3);\r\n border: 1px solid #444;\r\n color: #edffff;\r\n border-radius: 5px;\r\n padding: 3px 7px;\r\n cursor: pointer;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n margin: 0 auto;\r\n}\r\n\r\n.cesium-cesiumInspector-pickButton:focus {\r\n outline: none;\r\n}\r\n\r\n.cesium-cesiumInspector-pickButton:active,\r\n.cesium-cesiumInspector-pickButtonHighlight {\r\n color: #000; /* For text buttons */\r\n background: #adf;\r\n border-color: #fff;\r\n box-shadow: 0 0 8px #fff;\r\n}\r\n\r\n.cesium-cesiumInspector-center {\r\n text-align: center;\r\n}\r\n\r\n.cesium-cesiumInspector-sectionHeader {\r\n font-weight: bold;\r\n font-size: 10pt;\r\n margin: 0;\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-cesiumInspector-pickSection {\r\n border: 1px solid #aaa;\r\n border-radius: 5px;\r\n padding: 3px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.cesium-cesiumInspector-sectionContent {\r\n margin-bottom: 10px;\r\n transition: max-height 0.25s;\r\n}\r\n\r\n.cesium-cesiumInspector-tileText {\r\n padding-bottom: 10px;\r\n border-bottom: 1px solid #aaa;\r\n}\r\n\r\n.cesium-cesiumInspector-relativeText {\r\n padding-top: 10px;\r\n}\r\n\r\n.cesium-cesiumInspector-sectionHeader::before {\r\n margin-right: 5px;\r\n content: \"-\";\r\n width: 1ch;\r\n display: inline-block;\r\n}\r\n\r\n.cesium-cesiumInspector-section-collapsed\r\n .cesium-cesiumInspector-sectionHeader::before {\r\n content: \"+\";\r\n}\r\n"], - "mappings": ";AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAEE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAAA;AAEE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAEE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/CesiumWidget/CesiumWidget.css b/debug/cesium/Widgets/CesiumWidget/CesiumWidget.css deleted file mode 100644 index 4981fb4..0000000 --- a/debug/cesium/Widgets/CesiumWidget/CesiumWidget.css +++ /dev/null @@ -1,113 +0,0 @@ -/* Source/Widgets/CesiumWidget/CesiumWidget.css */ -.cesium-widget { - position: relative; -} -.cesium-widget, -.cesium-widget canvas { - width: 100%; - height: 100%; - touch-action: none; -} -.cesium-widget-credits { - display: block; - position: absolute; - bottom: 0; - left: 0; - color: #fff; - font-size: 10px; - text-shadow: 0px 0px 2px #000000; - padding-right: 5px; -} -.cesium-widget-credits a, -.cesium-widget-credits a:visited { - color: #fff; -} -.cesium-widget-errorPanel { - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - text-align: center; - background: rgba(0, 0, 0, 0.7); - z-index: 99999; -} -.cesium-widget-errorPanel:before { - display: inline-block; - vertical-align: middle; - height: 100%; - content: ""; -} -.cesium-widget-errorPanel-content { - width: 75%; - max-width: 500px; - display: inline-block; - text-align: left; - vertical-align: middle; - border: 1px solid #510c00; - border-radius: 7px; - background-color: #f0d9d5; - font-size: 14px; - color: #510c00; -} -.cesium-widget-errorPanel-content.expanded { - max-width: 75%; -} -.cesium-widget-errorPanel-header { - font-size: 18px; - font-family: - "Open Sans", - Verdana, - Geneva, - sans-serif; - background: #d69d93; - border-bottom: 2px solid #510c00; - padding-bottom: 10px; - border-radius: 3px 3px 0 0; - padding: 15px; -} -.cesium-widget-errorPanel-scroll { - overflow: auto; - font-family: - "Open Sans", - Verdana, - Geneva, - sans-serif; - white-space: pre-wrap; - padding: 0 15px; - margin: 10px 0 20px 0; -} -.cesium-widget-errorPanel-buttonPanel { - padding: 0 15px; - margin: 10px 0 20px 0; - text-align: right; -} -.cesium-widget-errorPanel-buttonPanel button { - border-color: #510c00; - background: #d69d93; - color: #202020; - margin: 0; -} -.cesium-widget-errorPanel-buttonPanel button:focus { - border-color: #510c00; - background: #f0d9d5; - color: #510c00; -} -.cesium-widget-errorPanel-buttonPanel button:hover { - border-color: #510c00; - background: #f0d9d5; - color: #510c00; -} -.cesium-widget-errorPanel-buttonPanel button:active { - border-color: #510c00; - background: #b17b72; - color: #510c00; -} -.cesium-widget-errorPanel-more-details { - text-decoration: underline; - cursor: pointer; -} -.cesium-widget-errorPanel-more-details:hover { - color: #2b0700; -} -/*# sourceMappingURL=CesiumWidget.css.map */ diff --git a/debug/cesium/Widgets/CesiumWidget/CesiumWidget.css.map b/debug/cesium/Widgets/CesiumWidget/CesiumWidget.css.map deleted file mode 100644 index aa2d512..0000000 --- a/debug/cesium/Widgets/CesiumWidget/CesiumWidget.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/CesiumWidget/CesiumWidget.css"], - "sourcesContent": [".cesium-widget {\r\n position: relative;\r\n}\r\n\r\n.cesium-widget,\r\n.cesium-widget canvas {\r\n width: 100%;\r\n height: 100%;\r\n touch-action: none;\r\n}\r\n\r\n.cesium-widget-credits {\r\n display: block;\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n color: #fff;\r\n font-size: 10px;\r\n text-shadow: 0px 0px 2px #000000;\r\n padding-right: 5px;\r\n}\r\n\r\n.cesium-widget-credits a,\r\n.cesium-widget-credits a:visited {\r\n color: #fff;\r\n}\r\n\r\n.cesium-widget-errorPanel {\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n text-align: center;\r\n background: rgba(0, 0, 0, 0.7);\r\n z-index: 99999;\r\n}\r\n\r\n.cesium-widget-errorPanel:before {\r\n display: inline-block;\r\n vertical-align: middle;\r\n height: 100%;\r\n content: \"\";\r\n}\r\n\r\n.cesium-widget-errorPanel-content {\r\n width: 75%;\r\n max-width: 500px;\r\n display: inline-block;\r\n text-align: left;\r\n vertical-align: middle;\r\n border: 1px solid #510c00;\r\n border-radius: 7px;\r\n background-color: #f0d9d5;\r\n font-size: 14px;\r\n color: #510c00;\r\n}\r\n\r\n.cesium-widget-errorPanel-content.expanded {\r\n max-width: 75%;\r\n}\r\n\r\n.cesium-widget-errorPanel-header {\r\n font-size: 18px;\r\n font-family: \"Open Sans\", Verdana, Geneva, sans-serif;\r\n background: #d69d93;\r\n border-bottom: 2px solid #510c00;\r\n padding-bottom: 10px;\r\n border-radius: 3px 3px 0 0;\r\n padding: 15px;\r\n}\r\n\r\n.cesium-widget-errorPanel-scroll {\r\n overflow: auto;\r\n font-family: \"Open Sans\", Verdana, Geneva, sans-serif;\r\n white-space: pre-wrap;\r\n padding: 0 15px;\r\n margin: 10px 0 20px 0;\r\n}\r\n\r\n.cesium-widget-errorPanel-buttonPanel {\r\n padding: 0 15px;\r\n margin: 10px 0 20px 0;\r\n text-align: right;\r\n}\r\n\r\n.cesium-widget-errorPanel-buttonPanel button {\r\n border-color: #510c00;\r\n background: #d69d93;\r\n color: #202020;\r\n margin: 0;\r\n}\r\n.cesium-widget-errorPanel-buttonPanel button:focus {\r\n border-color: #510c00;\r\n background: #f0d9d5;\r\n color: #510c00;\r\n}\r\n.cesium-widget-errorPanel-buttonPanel button:hover {\r\n border-color: #510c00;\r\n background: #f0d9d5;\r\n color: #510c00;\r\n}\r\n.cesium-widget-errorPanel-buttonPanel button:active {\r\n border-color: #510c00;\r\n background: #b17b72;\r\n color: #510c00;\r\n}\r\n\r\n.cesium-widget-errorPanel-more-details {\r\n text-decoration: underline;\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-widget-errorPanel-more-details:hover {\r\n color: #2b0700;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AAAA;AAGF;AAAA;AAEE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/CesiumWidget/lighter.css b/debug/cesium/Widgets/CesiumWidget/lighter.css deleted file mode 100644 index 9d02877..0000000 --- a/debug/cesium/Widgets/CesiumWidget/lighter.css +++ /dev/null @@ -1,14 +0,0 @@ -/* Source/Widgets/CesiumWidget/lighter.css */ -.cesium-lighter .cesium-widget-errorPanel { - background: rgba(255, 255, 255, 0.7); -} -.cesium-lighter .cesium-widget-errorPanel-content { - border: 1px solid #526f82; - border-radius: 7px; - background-color: white; - color: black; -} -.cesium-lighter .cesium-widget-errorPanel-header { - color: #b87d00; -} -/*# sourceMappingURL=lighter.css.map */ diff --git a/debug/cesium/Widgets/CesiumWidget/lighter.css.map b/debug/cesium/Widgets/CesiumWidget/lighter.css.map deleted file mode 100644 index 0752da2..0000000 --- a/debug/cesium/Widgets/CesiumWidget/lighter.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/CesiumWidget/lighter.css"], - "sourcesContent": [".cesium-lighter .cesium-widget-errorPanel {\r\n background: rgba(255, 255, 255, 0.7);\r\n}\r\n\r\n.cesium-lighter .cesium-widget-errorPanel-content {\r\n border: 1px solid #526f82;\r\n border-radius: 7px;\r\n background-color: white;\r\n color: black;\r\n}\r\n\r\n.cesium-lighter .cesium-widget-errorPanel-header {\r\n color: #b87d00;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/FullscreenButton/FullscreenButton.css b/debug/cesium/Widgets/FullscreenButton/FullscreenButton.css deleted file mode 100644 index aac6afb..0000000 --- a/debug/cesium/Widgets/FullscreenButton/FullscreenButton.css +++ /dev/null @@ -1,9 +0,0 @@ -/* Source/Widgets/FullscreenButton/FullscreenButton.css */ -.cesium-button.cesium-fullscreenButton { - display: block; - width: 100%; - height: 100%; - margin: 0; - border-radius: 0; -} -/*# sourceMappingURL=FullscreenButton.css.map */ diff --git a/debug/cesium/Widgets/FullscreenButton/FullscreenButton.css.map b/debug/cesium/Widgets/FullscreenButton/FullscreenButton.css.map deleted file mode 100644 index d09654c..0000000 --- a/debug/cesium/Widgets/FullscreenButton/FullscreenButton.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/FullscreenButton/FullscreenButton.css"], - "sourcesContent": [".cesium-button.cesium-fullscreenButton {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n border-radius: 0;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AACA;AACA;AACA;AACA;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/Geocoder/Geocoder.css b/debug/cesium/Widgets/Geocoder/Geocoder.css deleted file mode 100644 index 876ee0d..0000000 --- a/debug/cesium/Widgets/Geocoder/Geocoder.css +++ /dev/null @@ -1,71 +0,0 @@ -/* Source/Widgets/Geocoder/Geocoder.css */ -.cesium-viewer-geocoderContainer .cesium-geocoder-input { - border: solid 1px #444; - background-color: rgba(40, 40, 40, 0.7); - color: white; - display: inline-block; - vertical-align: middle; - width: 0; - height: 32px; - margin: 0; - padding: 0 32px 0 0; - border-radius: 0; - box-sizing: border-box; - transition: width ease-in-out 0.25s, background-color 0.2s ease-in-out; - -webkit-appearance: none; -} -.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input { - border-color: #aef; - box-shadow: 0 0 8px #fff; -} -.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus { - border-color: #ea4; - background-color: rgba(15, 15, 15, 0.9); - box-shadow: none; - outline: none; -} -.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input, -.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus, -.cesium-viewer-geocoderContainer .cesium-geocoder-input-wide { - padding-left: 4px; - width: 250px; -} -.cesium-viewer-geocoderContainer .search-results { - position: absolute; - background-color: #000; - color: #eee; - overflow-y: auto; - opacity: 0.8; - width: 100%; -} -.cesium-viewer-geocoderContainer .search-results ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.cesium-viewer-geocoderContainer .search-results ul li { - font-size: 14px; - padding: 3px 10px; -} -.cesium-viewer-geocoderContainer .search-results ul li:hover { - cursor: pointer; -} -.cesium-viewer-geocoderContainer .search-results ul li.active { - background: #48b; -} -.cesium-geocoder-searchButton { - background-color: #303336; - display: inline-block; - position: absolute; - cursor: pointer; - width: 32px; - top: 1px; - right: 1px; - height: 30px; - vertical-align: middle; - fill: #edffff; -} -.cesium-geocoder-searchButton:hover { - background-color: #48b; -} -/*# sourceMappingURL=Geocoder.css.map */ diff --git a/debug/cesium/Widgets/Geocoder/Geocoder.css.map b/debug/cesium/Widgets/Geocoder/Geocoder.css.map deleted file mode 100644 index f9707c7..0000000 --- a/debug/cesium/Widgets/Geocoder/Geocoder.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/Geocoder/Geocoder.css"], - "sourcesContent": [".cesium-viewer-geocoderContainer .cesium-geocoder-input {\r\n border: solid 1px #444;\r\n background-color: rgba(40, 40, 40, 0.7);\r\n color: white;\r\n display: inline-block;\r\n vertical-align: middle;\r\n width: 0;\r\n height: 32px;\r\n margin: 0;\r\n padding: 0 32px 0 0;\r\n border-radius: 0;\r\n box-sizing: border-box;\r\n transition: width ease-in-out 0.25s, background-color 0.2s ease-in-out;\r\n -webkit-appearance: none;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input {\r\n border-color: #aef;\r\n box-shadow: 0 0 8px #fff;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus {\r\n border-color: #ea4;\r\n background-color: rgba(15, 15, 15, 0.9);\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input,\r\n.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus,\r\n.cesium-viewer-geocoderContainer .cesium-geocoder-input-wide {\r\n padding-left: 4px;\r\n width: 250px;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .search-results {\r\n position: absolute;\r\n background-color: #000;\r\n color: #eee;\r\n overflow-y: auto;\r\n opacity: 0.8;\r\n width: 100%;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .search-results ul {\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .search-results ul li {\r\n font-size: 14px;\r\n padding: 3px 10px;\r\n}\r\n.cesium-viewer-geocoderContainer .search-results ul li:hover {\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .search-results ul li.active {\r\n background: #48b;\r\n}\r\n\r\n.cesium-geocoder-searchButton {\r\n background-color: #303336;\r\n display: inline-block;\r\n position: absolute;\r\n cursor: pointer;\r\n width: 32px;\r\n top: 1px;\r\n right: 1px;\r\n height: 30px;\r\n vertical-align: middle;\r\n fill: #edffff;\r\n}\r\n\r\n.cesium-geocoder-searchButton:hover {\r\n background-color: #48b;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAAA;AAGE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/Geocoder/lighter.css b/debug/cesium/Widgets/Geocoder/lighter.css deleted file mode 100644 index 625a494..0000000 --- a/debug/cesium/Widgets/Geocoder/lighter.css +++ /dev/null @@ -1,18 +0,0 @@ -/* Source/Widgets/Geocoder/lighter.css */ -.cesium-lighter .cesium-geocoder-input { - border: solid 1px #759dc0; - background-color: rgba(240, 240, 240, 0.9); - color: black; -} -.cesium-lighter .cesium-viewer-geocoderContainer:hover .cesium-geocoder-input { - border-color: #aef; - box-shadow: 0 0 8px #fff; -} -.cesium-lighter .cesium-geocoder-searchButton { - background-color: #e2f0ff; - fill: #111; -} -.cesium-lighter .cesium-geocoder-searchButton:hover { - background-color: #a6d2ff; -} -/*# sourceMappingURL=lighter.css.map */ diff --git a/debug/cesium/Widgets/Geocoder/lighter.css.map b/debug/cesium/Widgets/Geocoder/lighter.css.map deleted file mode 100644 index dfa892a..0000000 --- a/debug/cesium/Widgets/Geocoder/lighter.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../../Source/Widgets/Geocoder/lighter.css"], - "sourcesContent": [".cesium-lighter .cesium-geocoder-input {\r\n border: solid 1px #759dc0;\r\n background-color: rgba(240, 240, 240, 0.9);\r\n color: black;\r\n}\r\n\r\n.cesium-lighter .cesium-viewer-geocoderContainer:hover .cesium-geocoder-input {\r\n border-color: #aef;\r\n box-shadow: 0 0 8px #fff;\r\n}\r\n\r\n.cesium-lighter .cesium-geocoder-searchButton {\r\n background-color: #e2f0ff;\r\n fill: #111;\r\n}\r\n\r\n.cesium-lighter .cesium-geocoder-searchButton:hover {\r\n background-color: #a6d2ff;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;", - "names": [] -} diff --git a/debug/cesium/Widgets/Images/ImageryProviders/bingAerial.png b/debug/cesium/Widgets/Images/ImageryProviders/bingAerial.png deleted file mode 100644 index a78a154b11be8f5fba30dc547d5d3d5a6f14cfa0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9943 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 t0k--R*rwS!{)Fk9B8x8qUaoX!)KOVwj0Cv$cs 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 VS2|d4-sS)R002ovPDHLkV1k<_RD=Kk diff --git a/debug/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png b/debug/cesium/Widgets/Images/ImageryProviders/bingAerialLabels.png deleted file mode 100644 index 4cafd40f94f048f4a55f98ccf29a6c1e0dea261a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10374 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 diff --git a/debug/cesium/Widgets/Images/ImageryProviders/blueMarble.png b/debug/cesium/Widgets/Images/ImageryProviders/blueMarble.png deleted file mode 100644 index b8b5b7b1a19f3ceb9120d8e2f4012a80ec7a3cc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7403 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 WE1@9ze`f*!000000001b5ch_0Itp) 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 Vu;WKwORfL_002ovPDHLkV1hsqiJAZa diff --git a/debug/cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png b/debug/cesium/Widgets/Images/ImageryProviders/esriWorldImagery.png deleted file mode 100644 index a9429daf31d7ddbef690cca8388521bd04294713..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11575 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≥%k22x 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 diff --git a/debug/cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png b/debug/cesium/Widgets/Images/ImageryProviders/esriWorldStreetMap.png deleted file mode 100644 index dfbc1f42d3add0290b2a1a85ff54aa58e305af31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8501 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 diff --git a/debug/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png b/debug/cesium/Widgets/Images/ImageryProviders/mapQuestOpenStreetMap.png deleted file mode 100644 index f2eba41069b5387b697843e0fc2338915644b573..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11342 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 diff --git a/debug/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png b/debug/cesium/Widgets/Images/ImageryProviders/mapboxSatellite.png deleted file mode 100644 index 30ee6dbd555eb7f1c0d57b82002b1504b9783f22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9242 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 diff --git a/debug/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png b/debug/cesium/Widgets/Images/ImageryProviders/mapboxStreets.png deleted file mode 100644 index 6eef1fc3adff2d3ceb4aa625ffe60eb924cb2aa4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7270 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 diff --git a/debug/cesium/Widgets/Images/ImageryProviders/sentinel-2.png b/debug/cesium/Widgets/Images/ImageryProviders/sentinel-2.png deleted file mode 100644 index 775fb38ce12a0ea7e90c762a5d70cb45fc4e1759..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10086 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 IM6N<$f=G;?=l}o! diff --git a/debug/cesium/Widgets/Images/ImageryProviders/stamenToner.png b/debug/cesium/Widgets/Images/ImageryProviders/stamenToner.png deleted file mode 100644 index af894096c891f908ea13939d7b41574a5d9228a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4119 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 A{Qv*} diff --git a/debug/cesium/Widgets/Images/NavigationHelp/Mouse.svg b/debug/cesium/Widgets/Images/NavigationHelp/Mouse.svg deleted file mode 100644 index 7fae028..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/Mouse.svg +++ /dev/null @@ -1,84 +0,0 @@ - - - -image/svg+xml - - - - - - - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg b/debug/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg deleted file mode 100644 index 0c49c15..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/MouseLeft.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - -image/svg+xml - - - - - - - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg b/debug/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg deleted file mode 100644 index 9dd533d..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/MouseMiddle.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - -image/svg+xml - - - - - - - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/NavigationHelp/MouseRight.svg b/debug/cesium/Widgets/Images/NavigationHelp/MouseRight.svg deleted file mode 100644 index 2662ad1..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/MouseRight.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - -image/svg+xml - - - - - - - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/NavigationHelp/Touch.svg b/debug/cesium/Widgets/Images/NavigationHelp/Touch.svg deleted file mode 100644 index e682b30..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/Touch.svg +++ /dev/null @@ -1,120 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg b/debug/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg deleted file mode 100644 index f0509e8..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/TouchDrag.svg +++ /dev/null @@ -1,129 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg b/debug/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg deleted file mode 100644 index fe968ff..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/TouchRotate.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - -image/svg+xml - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg b/debug/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg deleted file mode 100644 index e1206c5..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/TouchTilt.svg +++ /dev/null @@ -1,135 +0,0 @@ - - - -image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg b/debug/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg deleted file mode 100644 index 74e55d7..0000000 --- a/debug/cesium/Widgets/Images/NavigationHelp/TouchZoom.svg +++ /dev/null @@ -1,74 +0,0 @@ - - - -image/svg+xml - - \ No newline at end of file diff --git a/debug/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png b/debug/cesium/Widgets/Images/TerrainProviders/CesiumWorldTerrain.png deleted file mode 100644 index 16343ec24135b6250935b07399c51a4eeb214620..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10080 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 z label { - display: table-cell; - font-weight: bold; -} -.cesium-cesiumInspector .field-group > .field { - display: table-cell; - width: 100%; -} - -/* Source/Widgets/FullscreenButton/FullscreenButton.css */ -.cesium-button.cesium-fullscreenButton { - display: block; - width: 100%; - height: 100%; - margin: 0; - border-radius: 0; -} - -/* Source/Widgets/VRButton/VRButton.css */ -.cesium-button.cesium-vrButton { - display: block; - width: 100%; - height: 100%; - margin: 0; - border-radius: 0; -} - -/* Source/Widgets/Geocoder/Geocoder.css */ -.cesium-viewer-geocoderContainer .cesium-geocoder-input { - border: solid 1px #444; - background-color: rgba(40, 40, 40, 0.7); - color: white; - display: inline-block; - vertical-align: middle; - width: 0; - height: 32px; - margin: 0; - padding: 0 32px 0 0; - border-radius: 0; - box-sizing: border-box; - transition: width ease-in-out 0.25s, background-color 0.2s ease-in-out; - -webkit-appearance: none; -} -.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input { - border-color: #aef; - box-shadow: 0 0 8px #fff; -} -.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus { - border-color: #ea4; - background-color: rgba(15, 15, 15, 0.9); - box-shadow: none; - outline: none; -} -.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input, -.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus, -.cesium-viewer-geocoderContainer .cesium-geocoder-input-wide { - padding-left: 4px; - width: 250px; -} -.cesium-viewer-geocoderContainer .search-results { - position: absolute; - background-color: #000; - color: #eee; - overflow-y: auto; - opacity: 0.8; - width: 100%; -} -.cesium-viewer-geocoderContainer .search-results ul { - list-style-type: none; - margin: 0; - padding: 0; -} -.cesium-viewer-geocoderContainer .search-results ul li { - font-size: 14px; - padding: 3px 10px; -} -.cesium-viewer-geocoderContainer .search-results ul li:hover { - cursor: pointer; -} -.cesium-viewer-geocoderContainer .search-results ul li.active { - background: #48b; -} -.cesium-geocoder-searchButton { - background-color: #303336; - display: inline-block; - position: absolute; - cursor: pointer; - width: 32px; - top: 1px; - right: 1px; - height: 30px; - vertical-align: middle; - fill: #edffff; -} -.cesium-geocoder-searchButton:hover { - background-color: #48b; -} - -/* Source/Widgets/InfoBox/InfoBox.css */ -.cesium-infoBox { - display: block; - position: absolute; - top: 50px; - right: 0; - width: 40%; - max-width: 480px; - background: rgba(38, 38, 38, 0.95); - color: #edffff; - border: 1px solid #444; - border-right: none; - border-top-left-radius: 7px; - border-bottom-left-radius: 7px; - box-shadow: 0 0 10px 1px #000; - transform: translate(100%, 0); - visibility: hidden; - opacity: 0; - transition: - visibility 0s 0.2s, - opacity 0.2s ease-in, - transform 0.2s ease-in; -} -.cesium-infoBox-visible { - transform: translate(0, 0); - visibility: visible; - opacity: 1; - transition: opacity 0.2s ease-out, transform 0.2s ease-out; -} -.cesium-infoBox-title { - display: block; - height: 20px; - padding: 5px 30px 5px 25px; - background: rgba(84, 84, 84, 1); - border-top-left-radius: 7px; - text-align: center; - text-overflow: ellipsis; - white-space: nowrap; - overflow: hidden; - box-sizing: content-box; -} -.cesium-infoBox-bodyless .cesium-infoBox-title { - border-bottom-left-radius: 7px; -} -button.cesium-infoBox-camera { - display: block; - position: absolute; - top: 4px; - left: 4px; - width: 22px; - height: 22px; - background: transparent; - border-color: transparent; - border-radius: 3px; - padding: 0 5px; - margin: 0; -} -button.cesium-infoBox-close { - display: block; - position: absolute; - top: 5px; - right: 5px; - height: 20px; - background: transparent; - border: none; - border-radius: 2px; - font-weight: bold; - font-size: 16px; - padding: 0 5px; - margin: 0; - color: #edffff; -} -button.cesium-infoBox-close:focus { - background: rgba(238, 136, 0, 0.44); - outline: none; -} -button.cesium-infoBox-close:hover { - background: #888; - color: #000; -} -button.cesium-infoBox-close:active { - background: #a00; - color: #000; -} -.cesium-infoBox-bodyless .cesium-infoBox-iframe { - display: none; -} -.cesium-infoBox-iframe { - border: none; - width: 100%; - width: calc(100% - 2px); -} - -/* Source/Widgets/SceneModePicker/SceneModePicker.css */ -span.cesium-sceneModePicker-wrapper { - display: inline-block; - position: relative; - margin: 0 3px; -} -.cesium-sceneModePicker-visible { - visibility: visible; - opacity: 1; - transition: opacity 0.25s linear; -} -.cesium-sceneModePicker-hidden { - visibility: hidden; - opacity: 0; - transition: visibility 0s 0.25s, opacity 0.25s linear; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-none { - display: none; -} -.cesium-sceneModePicker-slide-svg { - transition: left 2s; - top: 0; - left: 0; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-dropDown-icon { - box-sizing: border-box; - padding: 0; - margin: 3px 0; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D, -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView, -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D { - margin: 0 0 3px 0; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D .cesium-sceneModePicker-icon2D { - left: 100%; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D .cesium-sceneModePicker-iconColumbusView { - left: 200%; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView .cesium-sceneModePicker-icon3D { - left: -200%; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView .cesium-sceneModePicker-icon2D { - left: -100%; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D .cesium-sceneModePicker-icon3D { - left: -100%; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D .cesium-sceneModePicker-iconColumbusView { - left: 100%; -} -.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-selected { - border-color: #2e2; - box-shadow: 0 0 8px #fff, 0 0 8px #fff; -} - -/* Source/Widgets/ProjectionPicker/ProjectionPicker.css */ -span.cesium-projectionPicker-wrapper { - display: inline-block; - position: relative; - margin: 0 3px; -} -.cesium-projectionPicker-visible { - visibility: visible; - opacity: 1; - transition: opacity 0.25s linear; -} -.cesium-projectionPicker-hidden { - visibility: hidden; - opacity: 0; - transition: visibility 0s 0.25s, opacity 0.25s linear; -} -.cesium-projectionPicker-wrapper .cesium-projectionPicker-none { - display: none; -} -.cesium-projectionPicker-wrapper .cesium-projectionPicker-dropDown-icon { - box-sizing: border-box; - padding: 0; - margin: 3px 0; -} -.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective, -.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic { - margin: 0 0 3px 0; -} -.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective .cesium-projectionPicker-iconOrthographic { - left: 100%; -} -.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic .cesium-projectionPicker-iconPerspective { - left: -100%; -} -.cesium-projectionPicker-wrapper .cesium-projectionPicker-selected { - border-color: #2e2; - box-shadow: 0 0 8px #fff, 0 0 8px #fff; -} - -/* Source/Widgets/PerformanceWatchdog/PerformanceWatchdog.css */ -.cesium-performance-watchdog-message-area { - position: relative; - background-color: yellow; - color: black; - padding: 10px; -} -.cesium-performance-watchdog-message { - margin-right: 30px; -} -.cesium-performance-watchdog-message-dismiss { - position: absolute; - right: 0; - margin: 0 10px 0 0; -} - -/* Source/Widgets/NavigationHelpButton/NavigationHelpButton.css */ -.cesium-navigationHelpButton-wrapper { - position: relative; - display: inline-block; -} -.cesium-navigation-help { - visibility: hidden; - position: absolute; - top: 38px; - right: 2px; - width: 250px; - border-radius: 10px; - transform: scale(0.01); - transform-origin: 234px -10px; - transition: visibility 0s 0.25s, transform 0.25s ease-in; -} -.cesium-navigation-help-visible { - visibility: visible; - transform: scale(1); - transition: transform 0.25s ease-out; -} -.cesium-navigation-help-instructions { - border: 1px solid #444; - background-color: rgba(38, 38, 38, 0.75); - padding-bottom: 5px; - border-radius: 0 0 10px 10px; -} -.cesium-click-navigation-help { - display: none; -} -.cesium-touch-navigation-help { - display: none; - padding-top: 5px; -} -.cesium-click-navigation-help-visible { - display: block; -} -.cesium-touch-navigation-help-visible { - display: block; -} -.cesium-navigation-help-pan { - color: #66ccff; - font-weight: bold; -} -.cesium-navigation-help-zoom { - color: #65fd00; - font-weight: bold; -} -.cesium-navigation-help-rotate { - color: #ffd800; - font-weight: bold; -} -.cesium-navigation-help-tilt { - color: #d800d8; - font-weight: bold; -} -.cesium-navigation-help-details { - color: #ffffff; -} -.cesium-navigation-button { - color: #fff; - background-color: transparent; - border-bottom: none; - border-top: 1px solid #444; - border-right: 1px solid #444; - margin: 0; - width: 50%; - cursor: pointer; -} -.cesium-navigation-button-icon { - vertical-align: middle; - padding: 5px 1px; -} -.cesium-navigation-button:focus { - outline: none; -} -.cesium-navigation-button-left { - border-radius: 10px 0 0 0; - border-left: 1px solid #444; -} -.cesium-navigation-button-right { - border-radius: 0 10px 0 0; - border-left: none; -} -.cesium-navigation-button-selected { - background-color: rgba(38, 38, 38, 0.75); -} -.cesium-navigation-button-unselected { - background-color: rgba(0, 0, 0, 0.75); -} -.cesium-navigation-button-unselected:hover { - background-color: rgba(76, 76, 76, 0.75); -} - -/* Source/Widgets/SelectionIndicator/SelectionIndicator.css */ -.cesium-selection-wrapper { - position: absolute; - width: 160px; - height: 160px; - pointer-events: none; - visibility: hidden; - opacity: 0; - transition: visibility 0s 0.2s, opacity 0.2s ease-in; -} -.cesium-selection-wrapper-visible { - visibility: visible; - opacity: 1; - transition: opacity 0.2s ease-out; -} -.cesium-selection-wrapper svg { - fill: #2e2; - stroke: #000; - stroke-width: 1.1px; -} - -/* Source/Widgets/Timeline/Timeline.css */ -.cesium-timeline-main { - position: relative; - left: 0; - bottom: 0; - overflow: hidden; - border: solid 1px #888; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - user-select: none; -} -.cesium-timeline-trackContainer { - width: 100%; - overflow: auto; - border-top: solid 1px #888; - position: relative; - top: 0; - left: 0; -} -.cesium-timeline-tracks { - position: absolute; - top: 0; - left: 0; - width: 100%; -} -.cesium-timeline-needle { - position: absolute; - left: 0; - top: 1.7em; - bottom: 0; - width: 1px; - background: #f00; -} -.cesium-timeline-bar { - position: relative; - left: 0; - top: 0; - overflow: hidden; - cursor: pointer; - width: 100%; - height: 1.7em; - background: linear-gradient(to bottom, rgba(116, 117, 119, 0.8) 0%, rgba(58, 68, 82, 0.8) 11%, rgba(46, 50, 56, 0.8) 46%, rgba(53, 53, 53, 0.8) 81%, rgba(53, 53, 53, 0.8) 100%); -} -.cesium-timeline-ruler { - visibility: hidden; - white-space: nowrap; - font-size: 80%; - z-index: -200; -} -.cesium-timeline-highlight { - position: absolute; - bottom: 0; - left: 0; - background: #08f; -} -.cesium-timeline-ticLabel { - position: absolute; - top: 0; - left: 0; - white-space: nowrap; - font-size: 80%; - color: #eee; -} -.cesium-timeline-ticMain { - position: absolute; - bottom: 0; - left: 0; - width: 1px; - height: 50%; - background: #eee; -} -.cesium-timeline-ticSub { - position: absolute; - bottom: 0; - left: 0; - width: 1px; - height: 33%; - background: #aaa; -} -.cesium-timeline-ticTiny { - position: absolute; - bottom: 0; - left: 0; - width: 1px; - height: 25%; - background: #888; -} -.cesium-timeline-icon16 { - display: block; - position: absolute; - width: 16px; - height: 16px; - background-image: url(data:text/plain;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sIDBITKIVzLEMAAAKNSURBVEjHxdXNSxRhHAfw7zzrqhuoWJnSkrippUVSEKsHI9BTUYdAJA/RoYMREV26rAdn6tAfUARi16hQqkOBQRgUEYFWEC3OwczMjdZd92VmdWfmeelgTjO7q7gb0VzmmZnn85vvPPPMM8B/3qTcE2PPpuTZKB1eWuUQACgXYACYwVFbCTTVeZXB/i55o4LFelcAZfStYD4vpAoPGAGo4GBcQEgSOAUMQyAezwK6iQfDPXnhS/FkHZ+/8VLMWxxqWkfH3gbMRNOYi2roavbja0zHQmoFPYf8ED4Ko4aivm9MOG/u9I8mwrafeK7a/tVrNc/bARYN5noadeq7q0342vXw9CIMU6BmW8rVP9cPBPe52uu+v3O/y9sB4gkTWs6Qsk0mj5ExXMelejvA8WafYmkmGPHanTijdtvif8rx5RiCjdWKs2Cp3jWRDl96KhrbqlBeJqBOLyLQXg0IgbkZDS0dO8EZxZfPSTA9jvDDK3mT0OmP1FXh3XwEEAKdTX5MRWLgjCK4pwH3xt/YnjgLHAv4lHTCAKMMu/wV+KZGob6PoKyMQ0+sgBpZVJZn0NterxQaVqef/DRn+/EXYds/mZx2eVeAW9d65dhCEsaKCb7K8HH0gqTevyh9GDkn0VULRiaLzJKGBu9swfdaiie5RVo9ESURN8E8BE0n7ggACJy8KzghSCzp6DmwWxkaCm24EBXr8wI8Hrkq06QBiRC0t24HALS11IBTCyJl4vb1AXmzpbVYTwoVOXN0h7L8Mwtm8bXPybIQ/5FCX3dA2cr6XowvGCA02CvztAnz9+JiZk1AMxG6fEreSoBiPNmoyNnuWiWVzAIAtISO08E6pZi/3N96AIDn4E3h3P8L/wshP+txtEs4JAAAAABJRU5ErkJggg==); - background-repeat: no-repeat; -} - -/* Source/Widgets/Viewer/Viewer.css */ -.cesium-viewer { - font-family: sans-serif; - font-size: 16px; - overflow: hidden; - display: block; - position: relative; - top: 0; - left: 0; - width: 100%; - height: 100%; -} -.cesium-viewer-cesiumWidgetContainer { - width: 100%; - height: 100%; -} -.cesium-viewer-bottom { - display: block; - position: absolute; - bottom: 0; - left: 0; - padding-right: 5px; -} -.cesium-viewer .cesium-widget-credits { - display: inline; - position: static; - bottom: auto; - left: auto; - padding-right: 0; - color: #ffffff; - font-size: 10px; - text-shadow: 0 0 2px #000000; -} -.cesium-viewer-timelineContainer { - position: absolute; - bottom: 0; - left: 169px; - right: 29px; - height: 27px; - padding: 0; - margin: 0; - overflow: hidden; - font-size: 14px; -} -.cesium-viewer-animationContainer { - position: absolute; - bottom: 0; - left: 0; - padding: 0; - width: 169px; - height: 112px; -} -.cesium-viewer-fullscreenContainer { - position: absolute; - bottom: 0; - right: 0; - padding: 0; - width: 29px; - height: 29px; - overflow: hidden; -} -.cesium-viewer-vrContainer { - position: absolute; - bottom: 0; - right: 0; - padding: 0; - width: 29px; - height: 29px; - overflow: hidden; -} -.cesium-viewer-toolbar { - display: block; - position: absolute; - top: 5px; - right: 5px; -} -.cesium-viewer-cesiumInspectorContainer { - display: block; - position: absolute; - top: 50px; - right: 10px; -} -.cesium-viewer-geocoderContainer { - position: relative; - display: inline-block; - margin: 0 3px; -} -.cesium-viewer-cesium3DTilesInspectorContainer { - display: block; - position: absolute; - top: 50px; - right: 10px; - max-height: calc(100% - 120px); - box-sizing: border-box; - overflow-y: auto; - overflow-x: hidden; -} - -/* Source/Widgets/widgets.css */ -/*# sourceMappingURL=widgets.css.map */ diff --git a/debug/cesium/Widgets/widgets.css.map b/debug/cesium/Widgets/widgets.css.map deleted file mode 100644 index 601031a..0000000 --- a/debug/cesium/Widgets/widgets.css.map +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 3, - "sources": ["../../../Source/Widgets/shared.css", "../../../Source/Widgets/Animation/Animation.css", "../../../Source/Widgets/BaseLayerPicker/BaseLayerPicker.css", "../../../Source/Widgets/CesiumWidget/CesiumWidget.css", "../../../Source/Widgets/CesiumInspector/CesiumInspector.css", "../../../Source/Widgets/Cesium3DTilesInspector/Cesium3DTilesInspector.css", "../../../Source/Widgets/FullscreenButton/FullscreenButton.css", "../../../Source/Widgets/VRButton/VRButton.css", "../../../Source/Widgets/Geocoder/Geocoder.css", "../../../Source/Widgets/InfoBox/InfoBox.css", "../../../Source/Widgets/SceneModePicker/SceneModePicker.css", "../../../Source/Widgets/ProjectionPicker/ProjectionPicker.css", "../../../Source/Widgets/PerformanceWatchdog/PerformanceWatchdog.css", "../../../Source/Widgets/NavigationHelpButton/NavigationHelpButton.css", "../../../Source/Widgets/SelectionIndicator/SelectionIndicator.css", "../../../Source/Widgets/Timeline/Timeline.css", "../../../Source/Widgets/Viewer/Viewer.css"], - "sourcesContent": [".cesium-svgPath-svg {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n overflow: hidden;\r\n}\r\n\r\n.cesium-button {\r\n display: inline-block;\r\n position: relative;\r\n background: #303336;\r\n border: 1px solid #444;\r\n color: #edffff; /* For text buttons */\r\n fill: #edffff; /* For SVG buttons */\r\n border-radius: 4px;\r\n padding: 5px 12px;\r\n margin: 2px 3px;\r\n cursor: pointer;\r\n overflow: hidden;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\n.cesium-button:focus {\r\n color: #fff; /* For text buttons */\r\n fill: #fff; /* For SVG buttons */\r\n border-color: #ea4;\r\n outline: none;\r\n}\r\n\r\n.cesium-button:hover {\r\n color: #fff; /* For text buttons */\r\n fill: #fff; /* For SVG buttons */\r\n background: #48b;\r\n border-color: #aef;\r\n box-shadow: 0 0 8px #fff;\r\n}\r\n\r\n.cesium-button:active {\r\n color: #000; /* For text buttons */\r\n fill: #000; /* For SVG buttons */\r\n background: #adf;\r\n border-color: #fff;\r\n box-shadow: 0 0 8px #fff;\r\n}\r\n\r\n.cesium-button:disabled,\r\n.cesium-button-disabled,\r\n.cesium-button-disabled:focus,\r\n.cesium-button-disabled:hover,\r\n.cesium-button-disabled:active {\r\n background: #303336;\r\n border-color: #444;\r\n color: #646464; /* For text buttons */\r\n fill: #646464; /* For SVG buttons */\r\n box-shadow: none;\r\n cursor: default;\r\n}\r\n\r\n.cesium-button option {\r\n background-color: #000;\r\n color: #eee;\r\n}\r\n\r\n.cesium-button option:disabled {\r\n color: #777;\r\n}\r\n\r\n.cesium-button input,\r\n.cesium-button label {\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-button input {\r\n vertical-align: sub;\r\n}\r\n\r\n.cesium-toolbar-button {\r\n box-sizing: border-box;\r\n width: 32px;\r\n height: 32px;\r\n border-radius: 14%;\r\n padding: 0;\r\n vertical-align: middle;\r\n z-index: 0; /* Workaround for rounded raster image corners in Chrome */\r\n}\r\n\r\n.cesium-performanceDisplay-defaultContainer {\r\n position: absolute;\r\n top: 50px;\r\n right: 10px;\r\n text-align: right;\r\n}\r\n\r\n.cesium-performanceDisplay {\r\n background-color: rgba(40, 40, 40, 0.7);\r\n padding: 7px;\r\n border-radius: 5px;\r\n border: 1px solid #444;\r\n font: bold 12px sans-serif;\r\n}\r\n\r\n.cesium-performanceDisplay-fps {\r\n color: #e52;\r\n}\r\n\r\n.cesium-performanceDisplay-throttled {\r\n color: #a42;\r\n}\r\n\r\n.cesium-performanceDisplay-ms {\r\n color: #de3;\r\n}\r\n", ".cesium-animation-theme {\r\n visibility: hidden;\r\n display: block;\r\n position: absolute;\r\n z-index: -100;\r\n}\r\n\r\n.cesium-animation-themeNormal {\r\n color: #222;\r\n}\r\n\r\n.cesium-animation-themeHover {\r\n color: #4488b0;\r\n}\r\n\r\n.cesium-animation-themeSelect {\r\n color: #242;\r\n}\r\n\r\n.cesium-animation-themeDisabled {\r\n color: #333;\r\n}\r\n\r\n.cesium-animation-themeKnob {\r\n color: #222;\r\n}\r\n\r\n.cesium-animation-themePointer {\r\n color: #2e2;\r\n}\r\n\r\n.cesium-animation-themeSwoosh {\r\n color: #8ac;\r\n}\r\n\r\n.cesium-animation-themeSwooshHover {\r\n color: #aef;\r\n}\r\n\r\n.cesium-animation-svgText {\r\n fill: #edffff;\r\n font-family: Sans-Serif;\r\n font-size: 15px;\r\n text-anchor: middle;\r\n}\r\n\r\n.cesium-animation-blank {\r\n fill: #000;\r\n fill-opacity: 0.01; /* This must be clickable, so it can't be 'fill: none'. */\r\n stroke: none;\r\n}\r\n\r\n.cesium-animation-rectButton {\r\n cursor: pointer;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\n.cesium-animation-rectButton .cesium-animation-buttonGlow {\r\n fill: #fff;\r\n stroke: none;\r\n /* Widget will add: filter: url(#animation_blurred); */\r\n display: none;\r\n}\r\n\r\n.cesium-animation-rectButton:hover .cesium-animation-buttonGlow {\r\n display: block;\r\n}\r\n\r\n.cesium-animation-rectButton .cesium-animation-buttonPath {\r\n fill: #edffff;\r\n}\r\n\r\n.cesium-animation-rectButton .cesium-animation-buttonMain {\r\n /* Widget will add: fill: url(#animation_buttonNormal); */\r\n stroke: #444;\r\n stroke-width: 1.2;\r\n}\r\n\r\n.cesium-animation-rectButton:hover .cesium-animation-buttonMain {\r\n /* Widget will add: fill: url(#animation_buttonHovered); */\r\n stroke: #aef;\r\n}\r\n\r\n.cesium-animation-rectButton:active .cesium-animation-buttonMain {\r\n fill: #abd6ff;\r\n}\r\n\r\n.cesium-animation-buttonDisabled {\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\n.cesium-animation-buttonDisabled .cesium-animation-buttonMain {\r\n /* Widget will add: fill: url(#animation_buttonDisabled); */\r\n stroke: #555;\r\n}\r\n\r\n.cesium-animation-buttonDisabled .cesium-animation-buttonPath {\r\n fill: #818181;\r\n}\r\n\r\n.cesium-animation-buttonDisabled .cesium-animation-buttonGlow {\r\n display: none;\r\n}\r\n\r\n.cesium-animation-buttonToggled .cesium-animation-buttonGlow {\r\n display: block;\r\n fill: #2e2;\r\n}\r\n\r\n.cesium-animation-buttonToggled .cesium-animation-buttonMain {\r\n stroke: #2e2;\r\n}\r\n\r\n.cesium-animation-buttonToggled:hover .cesium-animation-buttonGlow {\r\n fill: #fff;\r\n}\r\n\r\n.cesium-animation-buttonToggled:hover .cesium-animation-buttonMain {\r\n stroke: #2e2;\r\n}\r\n\r\n.cesium-animation-shuttleRingG {\r\n cursor: pointer;\r\n}\r\n\r\n/* Widget will add:\r\n.cesium-animation-shuttleRingG .cesium-animation-shuttleRingSwoosh {\r\n fill: url(#animation_shuttleRingSwooshGradient);\r\n}\r\n\r\n.cesium-animation-shuttleRingG:hover .cesium-animation-shuttleRingSwoosh {\r\n fill: url(#animation_shuttleRingSwooshHovered);\r\n}\r\n*/\r\n\r\n.cesium-animation-shuttleRingPointer {\r\n /* Widget will add: fill: url(#animation_shuttleRingPointerGradient); */\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-animation-shuttleRingPausePointer {\r\n /* Widget will add: fill: url(#animation_shuttleRingPointerPaused); */\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-animation-shuttleRingBack {\r\n fill: #181818;\r\n fill-opacity: 0.8;\r\n stroke: #333;\r\n stroke-width: 1.2;\r\n}\r\n\r\n.cesium-animation-shuttleRingSwoosh line {\r\n stroke: #8ac;\r\n stroke-width: 3;\r\n stroke-opacity: 0.2;\r\n stroke-linecap: round;\r\n}\r\n\r\n.cesium-animation-knobOuter {\r\n /* Widget will add: fill: url(#animation_knobOuter); */\r\n cursor: pointer;\r\n stroke: #444;\r\n stroke-width: 1.2;\r\n}\r\n\r\n.cesium-animation-knobInner {\r\n /* Widget will add: fill: url(#animation_knobInner); */\r\n cursor: pointer;\r\n}\r\n", ".cesium-baseLayerPicker-selected {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n border: none;\r\n}\r\n\r\n.cesium-baseLayerPicker-dropDown {\r\n display: block;\r\n position: absolute;\r\n box-sizing: content-box;\r\n top: auto;\r\n right: 0;\r\n width: 320px; /* Includes space needed for scrollbar */\r\n max-height: 500px;\r\n margin-top: 5px;\r\n background-color: rgba(38, 38, 38, 0.75);\r\n border: 1px solid #444;\r\n padding: 6px;\r\n overflow: auto;\r\n border-radius: 10px;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n transform: translate(0, -20%);\r\n visibility: hidden;\r\n opacity: 0;\r\n transition: visibility 0s 0.2s, opacity 0.2s ease-in, transform 0.2s ease-in;\r\n}\r\n\r\n.cesium-baseLayerPicker-dropDown-visible {\r\n transform: translate(0, 0);\r\n visibility: visible;\r\n opacity: 1;\r\n transition: opacity 0.2s ease-out, transform 0.2s ease-out;\r\n}\r\n\r\n.cesium-baseLayerPicker-sectionTitle {\r\n display: block;\r\n font-family: sans-serif;\r\n font-size: 16pt;\r\n text-align: left;\r\n color: #edffff;\r\n margin-bottom: 4px;\r\n}\r\n\r\n.cesium-baseLayerPicker-choices {\r\n margin-bottom: 5px;\r\n}\r\n\r\n.cesium-baseLayerPicker-categoryTitle {\r\n color: #edffff;\r\n font-size: 11pt;\r\n}\r\n\r\n.cesium-baseLayerPicker-choices {\r\n display: block;\r\n border: 1px solid #888;\r\n border-radius: 5px;\r\n padding: 5px 0;\r\n}\r\n\r\n.cesium-baseLayerPicker-item {\r\n display: inline-block;\r\n vertical-align: top;\r\n margin: 2px 5px;\r\n width: 64px;\r\n text-align: center;\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-baseLayerPicker-itemLabel {\r\n display: block;\r\n font-family: sans-serif;\r\n font-size: 8pt;\r\n text-align: center;\r\n vertical-align: middle;\r\n color: #edffff;\r\n cursor: pointer;\r\n word-wrap: break-word;\r\n}\r\n\r\n.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemLabel,\r\n.cesium-baseLayerPicker-item:focus .cesium-baseLayerPicker-itemLabel {\r\n text-decoration: underline;\r\n}\r\n\r\n.cesium-baseLayerPicker-itemIcon {\r\n display: inline-block;\r\n position: relative;\r\n width: inherit;\r\n height: auto;\r\n background-size: 100% 100%;\r\n border: solid 1px #444;\r\n border-radius: 9px;\r\n color: #edffff;\r\n margin: 0;\r\n padding: 0;\r\n cursor: pointer;\r\n box-sizing: border-box;\r\n}\r\n\r\n.cesium-baseLayerPicker-item:hover .cesium-baseLayerPicker-itemIcon {\r\n border-color: #fff;\r\n box-shadow: 0 0 8px #fff, 0 0 8px #fff;\r\n}\r\n\r\n.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemLabel {\r\n color: rgb(189, 236, 248);\r\n}\r\n\r\n.cesium-baseLayerPicker-selectedItem .cesium-baseLayerPicker-itemIcon {\r\n border: double 4px rgb(189, 236, 248);\r\n}\r\n", ".cesium-widget {\r\n position: relative;\r\n}\r\n\r\n.cesium-widget,\r\n.cesium-widget canvas {\r\n width: 100%;\r\n height: 100%;\r\n touch-action: none;\r\n}\r\n\r\n.cesium-widget-credits {\r\n display: block;\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n color: #fff;\r\n font-size: 10px;\r\n text-shadow: 0px 0px 2px #000000;\r\n padding-right: 5px;\r\n}\r\n\r\n.cesium-widget-credits a,\r\n.cesium-widget-credits a:visited {\r\n color: #fff;\r\n}\r\n\r\n.cesium-widget-errorPanel {\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n text-align: center;\r\n background: rgba(0, 0, 0, 0.7);\r\n z-index: 99999;\r\n}\r\n\r\n.cesium-widget-errorPanel:before {\r\n display: inline-block;\r\n vertical-align: middle;\r\n height: 100%;\r\n content: \"\";\r\n}\r\n\r\n.cesium-widget-errorPanel-content {\r\n width: 75%;\r\n max-width: 500px;\r\n display: inline-block;\r\n text-align: left;\r\n vertical-align: middle;\r\n border: 1px solid #510c00;\r\n border-radius: 7px;\r\n background-color: #f0d9d5;\r\n font-size: 14px;\r\n color: #510c00;\r\n}\r\n\r\n.cesium-widget-errorPanel-content.expanded {\r\n max-width: 75%;\r\n}\r\n\r\n.cesium-widget-errorPanel-header {\r\n font-size: 18px;\r\n font-family: \"Open Sans\", Verdana, Geneva, sans-serif;\r\n background: #d69d93;\r\n border-bottom: 2px solid #510c00;\r\n padding-bottom: 10px;\r\n border-radius: 3px 3px 0 0;\r\n padding: 15px;\r\n}\r\n\r\n.cesium-widget-errorPanel-scroll {\r\n overflow: auto;\r\n font-family: \"Open Sans\", Verdana, Geneva, sans-serif;\r\n white-space: pre-wrap;\r\n padding: 0 15px;\r\n margin: 10px 0 20px 0;\r\n}\r\n\r\n.cesium-widget-errorPanel-buttonPanel {\r\n padding: 0 15px;\r\n margin: 10px 0 20px 0;\r\n text-align: right;\r\n}\r\n\r\n.cesium-widget-errorPanel-buttonPanel button {\r\n border-color: #510c00;\r\n background: #d69d93;\r\n color: #202020;\r\n margin: 0;\r\n}\r\n.cesium-widget-errorPanel-buttonPanel button:focus {\r\n border-color: #510c00;\r\n background: #f0d9d5;\r\n color: #510c00;\r\n}\r\n.cesium-widget-errorPanel-buttonPanel button:hover {\r\n border-color: #510c00;\r\n background: #f0d9d5;\r\n color: #510c00;\r\n}\r\n.cesium-widget-errorPanel-buttonPanel button:active {\r\n border-color: #510c00;\r\n background: #b17b72;\r\n color: #510c00;\r\n}\r\n\r\n.cesium-widget-errorPanel-more-details {\r\n text-decoration: underline;\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-widget-errorPanel-more-details:hover {\r\n color: #2b0700;\r\n}\r\n", ".cesium-cesiumInspector {\r\n border-radius: 5px;\r\n transition: width ease-in-out 0.25s;\r\n background: rgba(48, 51, 54, 0.8);\r\n border: 1px solid #444;\r\n color: #edffff;\r\n display: inline-block;\r\n position: relative;\r\n padding: 4px 12px;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n overflow: hidden;\r\n}\r\n\r\n.cesium-cesiumInspector-button {\r\n text-align: center;\r\n font-size: 11pt;\r\n}\r\n\r\n.cesium-cesiumInspector-visible .cesium-cesiumInspector-button {\r\n border-bottom: 1px solid #aaa;\r\n padding-bottom: 3px;\r\n}\r\n\r\n.cesium-cesiumInspector input:enabled,\r\n.cesium-cesiumInspector-button {\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-cesiumInspector-visible {\r\n width: 185px;\r\n height: auto;\r\n}\r\n\r\n.cesium-cesiumInspector-hidden {\r\n width: 122px;\r\n height: 17px;\r\n}\r\n\r\n.cesium-cesiumInspector-sectionContent {\r\n max-height: 600px;\r\n}\r\n\r\n.cesium-cesiumInspector-section-collapsed\r\n .cesium-cesiumInspector-sectionContent {\r\n max-height: 0;\r\n padding: 0 !important;\r\n overflow: hidden;\r\n}\r\n\r\n.cesium-cesiumInspector-dropDown {\r\n margin: 5px 0;\r\n font-family: sans-serif;\r\n font-size: 10pt;\r\n width: 185px;\r\n}\r\n\r\n.cesium-cesiumInspector-frustumStatistics {\r\n padding-left: 10px;\r\n padding: 5px;\r\n background-color: rgba(80, 80, 80, 0.75);\r\n}\r\n\r\n.cesium-cesiumInspector-pickButton {\r\n background-color: rgba(0, 0, 0, 0.3);\r\n border: 1px solid #444;\r\n color: #edffff;\r\n border-radius: 5px;\r\n padding: 3px 7px;\r\n cursor: pointer;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n margin: 0 auto;\r\n}\r\n\r\n.cesium-cesiumInspector-pickButton:focus {\r\n outline: none;\r\n}\r\n\r\n.cesium-cesiumInspector-pickButton:active,\r\n.cesium-cesiumInspector-pickButtonHighlight {\r\n color: #000; /* For text buttons */\r\n background: #adf;\r\n border-color: #fff;\r\n box-shadow: 0 0 8px #fff;\r\n}\r\n\r\n.cesium-cesiumInspector-center {\r\n text-align: center;\r\n}\r\n\r\n.cesium-cesiumInspector-sectionHeader {\r\n font-weight: bold;\r\n font-size: 10pt;\r\n margin: 0;\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-cesiumInspector-pickSection {\r\n border: 1px solid #aaa;\r\n border-radius: 5px;\r\n padding: 3px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.cesium-cesiumInspector-sectionContent {\r\n margin-bottom: 10px;\r\n transition: max-height 0.25s;\r\n}\r\n\r\n.cesium-cesiumInspector-tileText {\r\n padding-bottom: 10px;\r\n border-bottom: 1px solid #aaa;\r\n}\r\n\r\n.cesium-cesiumInspector-relativeText {\r\n padding-top: 10px;\r\n}\r\n\r\n.cesium-cesiumInspector-sectionHeader::before {\r\n margin-right: 5px;\r\n content: \"-\";\r\n width: 1ch;\r\n display: inline-block;\r\n}\r\n\r\n.cesium-cesiumInspector-section-collapsed\r\n .cesium-cesiumInspector-sectionHeader::before {\r\n content: \"+\";\r\n}\r\n", "ul.cesium-cesiumInspector-statistics {\r\n margin: 0;\r\n padding-top: 3px;\r\n padding-bottom: 3px;\r\n}\r\n\r\nul.cesium-cesiumInspector-statistics + ul.cesium-cesiumInspector-statistics {\r\n border-top: 1px solid #aaa;\r\n}\r\n\r\n.cesium-cesiumInspector-slider {\r\n margin-top: 5px;\r\n}\r\n\r\n.cesium-cesiumInspector-slider input[type=\"number\"] {\r\n text-align: left;\r\n background-color: #222;\r\n outline: none;\r\n border: 1px solid #444;\r\n color: #edffff;\r\n width: 100px;\r\n border-radius: 3px;\r\n padding: 1px;\r\n margin-left: 10px;\r\n cursor: auto;\r\n}\r\n\r\n.cesium-cesiumInspector-slider input[type=\"number\"]::-webkit-outer-spin-button,\r\n.cesium-cesiumInspector-slider input[type=\"number\"]::-webkit-inner-spin-button {\r\n -webkit-appearance: none;\r\n margin: 0;\r\n}\r\n\r\n.cesium-cesiumInspector-slider input[type=\"range\"] {\r\n margin-left: 5px;\r\n vertical-align: middle;\r\n}\r\n\r\n.cesium-cesiumInspector-hide .cesium-cesiumInspector-styleEditor {\r\n display: none;\r\n}\r\n\r\n.cesium-cesiumInspector-styleEditor {\r\n padding: 10px;\r\n border-radius: 5px;\r\n background: rgba(48, 51, 54, 0.8);\r\n border: 1px solid #444;\r\n}\r\n\r\n.cesium-cesiumInspector-styleEditor textarea {\r\n width: 100%;\r\n height: 300px;\r\n background: transparent;\r\n color: #edffff;\r\n border: none;\r\n padding: 0;\r\n white-space: pre;\r\n overflow-wrap: normal;\r\n overflow-x: auto;\r\n}\r\n\r\n.cesium-3DTilesInspector {\r\n width: 300px;\r\n pointer-events: all;\r\n}\r\n\r\n.cesium-3DTilesInspector-statistics {\r\n font-size: 11px;\r\n}\r\n\r\n.cesium-3DTilesInspector-disabledElementsInfo {\r\n margin: 5px 0 0 0;\r\n padding: 0 0 0 20px;\r\n color: #eed202;\r\n}\r\n\r\n.cesium-3DTilesInspector div,\r\n.cesium-3DTilesInspector input[type=\"range\"] {\r\n width: 100%;\r\n box-sizing: border-box;\r\n}\r\n\r\n.cesium-cesiumInspector-error {\r\n color: #ff9e9e;\r\n overflow: auto;\r\n}\r\n\r\n.cesium-3DTilesInspector .cesium-cesiumInspector-section {\r\n margin-top: 3px;\r\n}\r\n\r\n.cesium-3DTilesInspector\r\n .cesium-cesiumInspector-sectionHeader\r\n + .cesium-cesiumInspector-show {\r\n border-top: 1px solid white;\r\n}\r\n\r\ninput.cesium-cesiumInspector-url {\r\n overflow: hidden;\r\n white-space: nowrap;\r\n overflow-x: scroll;\r\n background-color: transparent;\r\n color: white;\r\n outline: none;\r\n border: none;\r\n height: 1em;\r\n width: 100%;\r\n}\r\n\r\n.cesium-cesiumInspector .field-group {\r\n display: table;\r\n}\r\n\r\n.cesium-cesiumInspector .field-group > label {\r\n display: table-cell;\r\n font-weight: bold;\r\n}\r\n\r\n.cesium-cesiumInspector .field-group > .field {\r\n display: table-cell;\r\n width: 100%;\r\n}\r\n", ".cesium-button.cesium-fullscreenButton {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n border-radius: 0;\r\n}\r\n", ".cesium-button.cesium-vrButton {\r\n display: block;\r\n width: 100%;\r\n height: 100%;\r\n margin: 0;\r\n border-radius: 0;\r\n}\r\n", ".cesium-viewer-geocoderContainer .cesium-geocoder-input {\r\n border: solid 1px #444;\r\n background-color: rgba(40, 40, 40, 0.7);\r\n color: white;\r\n display: inline-block;\r\n vertical-align: middle;\r\n width: 0;\r\n height: 32px;\r\n margin: 0;\r\n padding: 0 32px 0 0;\r\n border-radius: 0;\r\n box-sizing: border-box;\r\n transition: width ease-in-out 0.25s, background-color 0.2s ease-in-out;\r\n -webkit-appearance: none;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input {\r\n border-color: #aef;\r\n box-shadow: 0 0 8px #fff;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus {\r\n border-color: #ea4;\r\n background-color: rgba(15, 15, 15, 0.9);\r\n box-shadow: none;\r\n outline: none;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer:hover .cesium-geocoder-input,\r\n.cesium-viewer-geocoderContainer .cesium-geocoder-input:focus,\r\n.cesium-viewer-geocoderContainer .cesium-geocoder-input-wide {\r\n padding-left: 4px;\r\n width: 250px;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .search-results {\r\n position: absolute;\r\n background-color: #000;\r\n color: #eee;\r\n overflow-y: auto;\r\n opacity: 0.8;\r\n width: 100%;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .search-results ul {\r\n list-style-type: none;\r\n margin: 0;\r\n padding: 0;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .search-results ul li {\r\n font-size: 14px;\r\n padding: 3px 10px;\r\n}\r\n.cesium-viewer-geocoderContainer .search-results ul li:hover {\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer .search-results ul li.active {\r\n background: #48b;\r\n}\r\n\r\n.cesium-geocoder-searchButton {\r\n background-color: #303336;\r\n display: inline-block;\r\n position: absolute;\r\n cursor: pointer;\r\n width: 32px;\r\n top: 1px;\r\n right: 1px;\r\n height: 30px;\r\n vertical-align: middle;\r\n fill: #edffff;\r\n}\r\n\r\n.cesium-geocoder-searchButton:hover {\r\n background-color: #48b;\r\n}\r\n", ".cesium-infoBox {\r\n display: block;\r\n position: absolute;\r\n top: 50px;\r\n right: 0;\r\n width: 40%;\r\n max-width: 480px;\r\n background: rgba(38, 38, 38, 0.95);\r\n color: #edffff;\r\n border: 1px solid #444;\r\n border-right: none;\r\n border-top-left-radius: 7px;\r\n border-bottom-left-radius: 7px;\r\n box-shadow: 0 0 10px 1px #000;\r\n transform: translate(100%, 0);\r\n visibility: hidden;\r\n opacity: 0;\r\n transition: visibility 0s 0.2s, opacity 0.2s ease-in, transform 0.2s ease-in;\r\n}\r\n\r\n.cesium-infoBox-visible {\r\n transform: translate(0, 0);\r\n visibility: visible;\r\n opacity: 1;\r\n transition: opacity 0.2s ease-out, transform 0.2s ease-out;\r\n}\r\n\r\n.cesium-infoBox-title {\r\n display: block;\r\n height: 20px;\r\n padding: 5px 30px 5px 25px;\r\n background: rgba(84, 84, 84, 1);\r\n border-top-left-radius: 7px;\r\n text-align: center;\r\n text-overflow: ellipsis;\r\n white-space: nowrap;\r\n overflow: hidden;\r\n box-sizing: content-box;\r\n}\r\n\r\n.cesium-infoBox-bodyless .cesium-infoBox-title {\r\n border-bottom-left-radius: 7px;\r\n}\r\n\r\nbutton.cesium-infoBox-camera {\r\n display: block;\r\n position: absolute;\r\n top: 4px;\r\n left: 4px;\r\n width: 22px;\r\n height: 22px;\r\n background: transparent;\r\n border-color: transparent;\r\n border-radius: 3px;\r\n padding: 0 5px;\r\n margin: 0;\r\n}\r\n\r\nbutton.cesium-infoBox-close {\r\n display: block;\r\n position: absolute;\r\n top: 5px;\r\n right: 5px;\r\n height: 20px;\r\n background: transparent;\r\n border: none;\r\n border-radius: 2px;\r\n font-weight: bold;\r\n font-size: 16px;\r\n padding: 0 5px;\r\n margin: 0;\r\n color: #edffff;\r\n}\r\n\r\nbutton.cesium-infoBox-close:focus {\r\n background: rgba(238, 136, 0, 0.44);\r\n outline: none;\r\n}\r\n\r\nbutton.cesium-infoBox-close:hover {\r\n background: #888;\r\n color: #000;\r\n}\r\n\r\nbutton.cesium-infoBox-close:active {\r\n background: #a00;\r\n color: #000;\r\n}\r\n\r\n.cesium-infoBox-bodyless .cesium-infoBox-iframe {\r\n display: none;\r\n}\r\n\r\n.cesium-infoBox-iframe {\r\n border: none;\r\n width: 100%; /* Fallback */\r\n width: calc(100% - 2px);\r\n}\r\n", "span.cesium-sceneModePicker-wrapper {\r\n display: inline-block;\r\n position: relative;\r\n margin: 0 3px;\r\n}\r\n\r\n.cesium-sceneModePicker-visible {\r\n visibility: visible;\r\n opacity: 1;\r\n transition: opacity 0.25s linear;\r\n}\r\n\r\n.cesium-sceneModePicker-hidden {\r\n visibility: hidden;\r\n opacity: 0;\r\n transition: visibility 0s 0.25s, opacity 0.25s linear;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-none {\r\n display: none;\r\n}\r\n\r\n.cesium-sceneModePicker-slide-svg {\r\n transition: left 2s;\r\n top: 0;\r\n left: 0;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-dropDown-icon {\r\n box-sizing: border-box;\r\n padding: 0;\r\n margin: 3px 0;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button3D,\r\n.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-buttonColumbusView,\r\n.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-button2D {\r\n margin: 0 0 3px 0;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper\r\n .cesium-sceneModePicker-button3D\r\n .cesium-sceneModePicker-icon2D {\r\n left: 100%;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper\r\n .cesium-sceneModePicker-button3D\r\n .cesium-sceneModePicker-iconColumbusView {\r\n left: 200%;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper\r\n .cesium-sceneModePicker-buttonColumbusView\r\n .cesium-sceneModePicker-icon3D {\r\n left: -200%;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper\r\n .cesium-sceneModePicker-buttonColumbusView\r\n .cesium-sceneModePicker-icon2D {\r\n left: -100%;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper\r\n .cesium-sceneModePicker-button2D\r\n .cesium-sceneModePicker-icon3D {\r\n left: -100%;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper\r\n .cesium-sceneModePicker-button2D\r\n .cesium-sceneModePicker-iconColumbusView {\r\n left: 100%;\r\n}\r\n\r\n.cesium-sceneModePicker-wrapper .cesium-sceneModePicker-selected {\r\n border-color: #2e2;\r\n box-shadow: 0 0 8px #fff, 0 0 8px #fff;\r\n}\r\n", "span.cesium-projectionPicker-wrapper {\r\n display: inline-block;\r\n position: relative;\r\n margin: 0 3px;\r\n}\r\n\r\n.cesium-projectionPicker-visible {\r\n visibility: visible;\r\n opacity: 1;\r\n transition: opacity 0.25s linear;\r\n}\r\n\r\n.cesium-projectionPicker-hidden {\r\n visibility: hidden;\r\n opacity: 0;\r\n transition: visibility 0s 0.25s, opacity 0.25s linear;\r\n}\r\n\r\n.cesium-projectionPicker-wrapper .cesium-projectionPicker-none {\r\n display: none;\r\n}\r\n\r\n.cesium-projectionPicker-wrapper .cesium-projectionPicker-dropDown-icon {\r\n box-sizing: border-box;\r\n padding: 0;\r\n margin: 3px 0;\r\n}\r\n\r\n.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonPerspective,\r\n.cesium-projectionPicker-wrapper .cesium-projectionPicker-buttonOrthographic {\r\n margin: 0 0 3px 0;\r\n}\r\n\r\n.cesium-projectionPicker-wrapper\r\n .cesium-projectionPicker-buttonPerspective\r\n .cesium-projectionPicker-iconOrthographic {\r\n left: 100%;\r\n}\r\n\r\n.cesium-projectionPicker-wrapper\r\n .cesium-projectionPicker-buttonOrthographic\r\n .cesium-projectionPicker-iconPerspective {\r\n left: -100%;\r\n}\r\n\r\n.cesium-projectionPicker-wrapper .cesium-projectionPicker-selected {\r\n border-color: #2e2;\r\n box-shadow: 0 0 8px #fff, 0 0 8px #fff;\r\n}\r\n", ".cesium-performance-watchdog-message-area {\r\n position: relative;\r\n background-color: yellow;\r\n color: black;\r\n padding: 10px;\r\n}\r\n\r\n.cesium-performance-watchdog-message {\r\n margin-right: 30px;\r\n}\r\n\r\n.cesium-performance-watchdog-message-dismiss {\r\n position: absolute;\r\n right: 0;\r\n margin: 0 10px 0 0;\r\n}\r\n", ".cesium-navigationHelpButton-wrapper {\r\n position: relative;\r\n display: inline-block;\r\n}\r\n\r\n.cesium-navigation-help {\r\n visibility: hidden;\r\n position: absolute;\r\n top: 38px;\r\n right: 2px;\r\n width: 250px;\r\n border-radius: 10px;\r\n transform: scale(0.01);\r\n transform-origin: 234px -10px;\r\n transition: visibility 0s 0.25s, transform 0.25s ease-in;\r\n}\r\n\r\n.cesium-navigation-help-visible {\r\n visibility: visible;\r\n transform: scale(1);\r\n transition: transform 0.25s ease-out;\r\n}\r\n\r\n.cesium-navigation-help-instructions {\r\n border: 1px solid #444;\r\n background-color: rgba(38, 38, 38, 0.75);\r\n padding-bottom: 5px;\r\n border-radius: 0 0 10px 10px;\r\n}\r\n\r\n.cesium-click-navigation-help {\r\n display: none;\r\n}\r\n\r\n.cesium-touch-navigation-help {\r\n display: none;\r\n padding-top: 5px;\r\n}\r\n\r\n.cesium-click-navigation-help-visible {\r\n display: block;\r\n}\r\n\r\n.cesium-touch-navigation-help-visible {\r\n display: block;\r\n}\r\n\r\n.cesium-navigation-help-pan {\r\n color: #66ccff;\r\n font-weight: bold;\r\n}\r\n\r\n.cesium-navigation-help-zoom {\r\n color: #65fd00;\r\n font-weight: bold;\r\n}\r\n\r\n.cesium-navigation-help-rotate {\r\n color: #ffd800;\r\n font-weight: bold;\r\n}\r\n\r\n.cesium-navigation-help-tilt {\r\n color: #d800d8;\r\n font-weight: bold;\r\n}\r\n\r\n.cesium-navigation-help-details {\r\n color: #ffffff;\r\n}\r\n\r\n.cesium-navigation-button {\r\n color: #fff;\r\n background-color: transparent;\r\n border-bottom: none;\r\n border-top: 1px solid #444;\r\n border-right: 1px solid #444;\r\n margin: 0;\r\n width: 50%;\r\n cursor: pointer;\r\n}\r\n\r\n.cesium-navigation-button-icon {\r\n vertical-align: middle;\r\n padding: 5px 1px;\r\n}\r\n\r\n.cesium-navigation-button:focus {\r\n outline: none;\r\n}\r\n\r\n.cesium-navigation-button-left {\r\n border-radius: 10px 0 0 0;\r\n border-left: 1px solid #444;\r\n}\r\n\r\n.cesium-navigation-button-right {\r\n border-radius: 0 10px 0 0;\r\n border-left: none;\r\n}\r\n\r\n.cesium-navigation-button-selected {\r\n background-color: rgba(38, 38, 38, 0.75);\r\n}\r\n\r\n.cesium-navigation-button-unselected {\r\n background-color: rgba(0, 0, 0, 0.75);\r\n}\r\n\r\n.cesium-navigation-button-unselected:hover {\r\n background-color: rgba(76, 76, 76, 0.75);\r\n}\r\n", ".cesium-selection-wrapper {\r\n position: absolute;\r\n width: 160px;\r\n height: 160px;\r\n pointer-events: none;\r\n visibility: hidden;\r\n opacity: 0;\r\n transition: visibility 0s 0.2s, opacity 0.2s ease-in;\r\n}\r\n\r\n.cesium-selection-wrapper-visible {\r\n visibility: visible;\r\n opacity: 1;\r\n transition: opacity 0.2s ease-out;\r\n}\r\n\r\n.cesium-selection-wrapper svg {\r\n fill: #2e2;\r\n stroke: #000;\r\n stroke-width: 1.1px;\r\n}\r\n", ".cesium-timeline-main {\r\n position: relative;\r\n left: 0;\r\n bottom: 0;\r\n overflow: hidden;\r\n border: solid 1px #888;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n user-select: none;\r\n}\r\n\r\n.cesium-timeline-trackContainer {\r\n width: 100%;\r\n overflow: auto;\r\n border-top: solid 1px #888;\r\n position: relative;\r\n top: 0;\r\n left: 0;\r\n}\r\n\r\n.cesium-timeline-tracks {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n}\r\n\r\n.cesium-timeline-needle {\r\n position: absolute;\r\n left: 0;\r\n top: 1.7em;\r\n bottom: 0;\r\n width: 1px;\r\n background: #f00;\r\n}\r\n\r\n.cesium-timeline-bar {\r\n position: relative;\r\n left: 0;\r\n top: 0;\r\n overflow: hidden;\r\n cursor: pointer;\r\n width: 100%;\r\n height: 1.7em;\r\n background: linear-gradient(\r\n to bottom,\r\n rgba(116, 117, 119, 0.8) 0%,\r\n rgba(58, 68, 82, 0.8) 11%,\r\n rgba(46, 50, 56, 0.8) 46%,\r\n rgba(53, 53, 53, 0.8) 81%,\r\n rgba(53, 53, 53, 0.8) 100%\r\n );\r\n}\r\n\r\n.cesium-timeline-ruler {\r\n /* NOTE: The label and the ruler must use the same font/size */\r\n visibility: hidden;\r\n white-space: nowrap;\r\n font-size: 80%;\r\n z-index: -200;\r\n}\r\n\r\n.cesium-timeline-highlight {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n background: #08f;\r\n}\r\n\r\n.cesium-timeline-ticLabel {\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n white-space: nowrap;\r\n font-size: 80%;\r\n color: #eee;\r\n}\r\n\r\n.cesium-timeline-ticMain {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 1px;\r\n height: 50%;\r\n background: #eee;\r\n}\r\n\r\n.cesium-timeline-ticSub {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 1px;\r\n height: 33%;\r\n background: #aaa;\r\n}\r\n\r\n.cesium-timeline-ticTiny {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n width: 1px;\r\n height: 25%;\r\n background: #888;\r\n}\r\n\r\n.cesium-timeline-icon16 {\r\n display: block;\r\n position: absolute;\r\n width: 16px;\r\n height: 16px;\r\n background-image: url(\"../Images/TimelineIcons.png\");\r\n background-repeat: no-repeat;\r\n}\r\n", ".cesium-viewer {\r\n font-family: sans-serif;\r\n font-size: 16px;\r\n overflow: hidden;\r\n display: block;\r\n position: relative;\r\n top: 0;\r\n left: 0;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.cesium-viewer-cesiumWidgetContainer {\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.cesium-viewer-bottom {\r\n display: block;\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n padding-right: 5px;\r\n}\r\n\r\n.cesium-viewer .cesium-widget-credits {\r\n display: inline;\r\n position: static;\r\n bottom: auto;\r\n left: auto;\r\n padding-right: 0;\r\n color: #ffffff;\r\n font-size: 10px;\r\n text-shadow: 0 0 2px #000000;\r\n}\r\n\r\n.cesium-viewer-timelineContainer {\r\n position: absolute;\r\n bottom: 0;\r\n left: 169px;\r\n right: 29px;\r\n height: 27px;\r\n padding: 0;\r\n margin: 0;\r\n overflow: hidden;\r\n font-size: 14px;\r\n}\r\n\r\n.cesium-viewer-animationContainer {\r\n position: absolute;\r\n bottom: 0;\r\n left: 0;\r\n padding: 0;\r\n width: 169px;\r\n height: 112px;\r\n}\r\n\r\n.cesium-viewer-fullscreenContainer {\r\n position: absolute;\r\n bottom: 0;\r\n right: 0;\r\n padding: 0;\r\n width: 29px;\r\n height: 29px;\r\n overflow: hidden;\r\n}\r\n\r\n.cesium-viewer-vrContainer {\r\n position: absolute;\r\n bottom: 0;\r\n right: 0;\r\n padding: 0;\r\n width: 29px;\r\n height: 29px;\r\n overflow: hidden;\r\n}\r\n\r\n.cesium-viewer-toolbar {\r\n display: block;\r\n position: absolute;\r\n top: 5px;\r\n right: 5px;\r\n}\r\n\r\n.cesium-viewer-cesiumInspectorContainer {\r\n display: block;\r\n position: absolute;\r\n top: 50px;\r\n right: 10px;\r\n}\r\n\r\n.cesium-viewer-geocoderContainer {\r\n position: relative;\r\n display: inline-block;\r\n margin: 0 3px;\r\n}\r\n\r\n.cesium-viewer-cesium3DTilesInspectorContainer {\r\n display: block;\r\n position: absolute;\r\n top: 50px;\r\n right: 10px;\r\n max-height: calc(100% - 120px);\r\n box-sizing: border-box;\r\n overflow-y: auto;\r\n overflow-x: hidden;\r\n}\r\n"], - "mappings": ";AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAAA;AAAA;AAAA;AAKE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;;;ACnHF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAEA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AAEE;AACA;AAAA;AAGF;AAEE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAEE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAaF;AAEE;AAAA;AAGF;AAEE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAEE;AACA;AACA;AAAA;AAGF;AAEE;AAAA;;;AC9KF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;;;ACnHF;AACE;AAAA;AAGF;AAAA;AAEE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAEF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;;;AClHF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAEE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAAA;AAEE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAEE;AAAA;;;ACpIF;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AAGE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;;;ACxHF;AACE;AACA;AACA;AACA;AACA;AAAA;;;ACLF;AACE;AACA;AACA;AACA;AACA;AAAA;;;ACLF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AAAA;AAAA;AAGE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAEF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;;;AC5EF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;;;AChGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AAAA;AAAA;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AACE;AACA;AAAA;;;AC9EF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AAAA;AAEE;AAAA;AAGF;AAGE;AAAA;AAGF;AAGE;AAAA;AAGF;AACE;AACA;AAAA;;;AC/CF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AAAA;;;ACdF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;AAGF;AACE;AAAA;;;AC9GF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;;;ACnBF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAUF;AAEE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;;;AChHF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AAAA;AAGF;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;", - "names": [] -} diff --git a/debug/cesium/Workers/ArcType-d608b872.js b/debug/cesium/Workers/ArcType-d608b872.js deleted file mode 100644 index 45742f7..0000000 --- a/debug/cesium/Workers/ArcType-d608b872.js +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports'], (function (exports) { 'use strict'; - - /** - * ArcType defines the path that should be taken connecting vertices. - * - * @enum {Number} - */ - const ArcType = { - /** - * Straight line that does not conform to the surface of the ellipsoid. - * - * @type {Number} - * @constant - */ - NONE: 0, - - /** - * Follow geodesic path. - * - * @type {Number} - * @constant - */ - GEODESIC: 1, - - /** - * Follow rhumb or loxodrome path. - * - * @type {Number} - * @constant - */ - RHUMB: 2, - }; - var ArcType$1 = Object.freeze(ArcType); - - exports.ArcType = ArcType$1; - -})); -//# sourceMappingURL=ArcType-d608b872.js.map diff --git a/debug/cesium/Workers/ArcType-d608b872.js.map b/debug/cesium/Workers/ArcType-d608b872.js.map deleted file mode 100644 index 43f7b55..0000000 --- a/debug/cesium/Workers/ArcType-d608b872.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ArcType-d608b872.js","sources":["../../../Source/Core/ArcType.js"],"sourcesContent":["/**\r\n * ArcType defines the path that should be taken connecting vertices.\r\n *\r\n * @enum {Number}\r\n */\r\nconst ArcType = {\r\n /**\r\n * Straight line that does not conform to the surface of the ellipsoid.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n NONE: 0,\r\n\r\n /**\r\n * Follow geodesic path.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n GEODESIC: 1,\r\n\r\n /**\r\n * Follow rhumb or loxodrome path.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RHUMB: 2,\r\n};\r\nexport default Object.freeze(ArcType);\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA,MAAM,OAAO,GAAG;EAChB;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,EAAE,CAAC;AACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,QAAQ,EAAE,CAAC;AACb;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,KAAK,EAAE,CAAC;EACV,CAAC,CAAC;AACF,kBAAe,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/AttributeCompression-e9888cb8.js b/debug/cesium/Workers/AttributeCompression-e9888cb8.js deleted file mode 100644 index 7086519..0000000 --- a/debug/cesium/Workers/AttributeCompression-e9888cb8.js +++ /dev/null @@ -1,742 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix2-036c77dd', './Matrix3-f22b0303', './ComponentDatatype-13a5630b', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918'], (function (exports, Matrix2, Matrix3, ComponentDatatype, Check, defaultValue, Math$1) { 'use strict'; - - /** - * An enum describing the attribute type for glTF and 3D Tiles. - * - * @enum {String} - * - * @private - */ - const AttributeType = { - /** - * The attribute is a single component. - * - * @type {String} - * @constant - */ - SCALAR: "SCALAR", - - /** - * The attribute is a two-component vector. - * - * @type {String} - * @constant - */ - VEC2: "VEC2", - - /** - * The attribute is a three-component vector. - * - * @type {String} - * @constant - */ - VEC3: "VEC3", - - /** - * The attribute is a four-component vector. - * - * @type {String} - * @constant - */ - VEC4: "VEC4", - - /** - * The attribute is a 2x2 matrix. - * - * @type {String} - * @constant - */ - MAT2: "MAT2", - - /** - * The attribute is a 3x3 matrix. - * - * @type {String} - * @constant - */ - MAT3: "MAT3", - - /** - * The attribute is a 4x4 matrix. - * - * @type {String} - * @constant - */ - MAT4: "MAT4", - }; - - /** - * Gets the scalar, vector, or matrix type for the attribute type. - * - * @param {AttributeType} attributeType The attribute type. - * @returns {*} The math type. - * - * @private - */ - AttributeType.getMathType = function (attributeType) { - switch (attributeType) { - case AttributeType.SCALAR: - return Number; - case AttributeType.VEC2: - return Matrix2.Cartesian2; - case AttributeType.VEC3: - return Matrix3.Cartesian3; - case AttributeType.VEC4: - return Matrix2.Cartesian4; - case AttributeType.MAT2: - return Matrix2.Matrix2; - case AttributeType.MAT3: - return Matrix3.Matrix3; - case AttributeType.MAT4: - return Matrix2.Matrix4; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError("attributeType is not a valid value."); - //>>includeEnd('debug'); - } - }; - - /** - * Gets the number of components per attribute. - * - * @param {AttributeType} attributeType The attribute type. - * @returns {Number} The number of components. - * - * @private - */ - AttributeType.getNumberOfComponents = function (attributeType) { - switch (attributeType) { - case AttributeType.SCALAR: - return 1; - case AttributeType.VEC2: - return 2; - case AttributeType.VEC3: - return 3; - case AttributeType.VEC4: - case AttributeType.MAT2: - return 4; - case AttributeType.MAT3: - return 9; - case AttributeType.MAT4: - return 16; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError("attributeType is not a valid value."); - //>>includeEnd('debug'); - } - }; - - /** - * Get the number of attribute locations needed to fit this attribute. Most - * types require one, but matrices require multiple attribute locations. - * - * @param {AttributeType} attributeType The attribute type. - * @returns {Number} The number of attribute locations needed in the shader - * - * @private - */ - AttributeType.getAttributeLocationCount = function (attributeType) { - switch (attributeType) { - case AttributeType.SCALAR: - case AttributeType.VEC2: - case AttributeType.VEC3: - case AttributeType.VEC4: - return 1; - case AttributeType.MAT2: - return 2; - case AttributeType.MAT3: - return 3; - case AttributeType.MAT4: - return 4; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError("attributeType is not a valid value."); - //>>includeEnd('debug'); - } - }; - - /** - * Gets the GLSL type for the attribute type. - * - * @param {AttributeType} attributeType The attribute type. - * @returns {String} The GLSL type for the attribute type. - * - * @private - */ - AttributeType.getGlslType = function (attributeType) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.string("attributeType", attributeType); - //>>includeEnd('debug'); - - switch (attributeType) { - case AttributeType.SCALAR: - return "float"; - case AttributeType.VEC2: - return "vec2"; - case AttributeType.VEC3: - return "vec3"; - case AttributeType.VEC4: - return "vec4"; - case AttributeType.MAT2: - return "mat2"; - case AttributeType.MAT3: - return "mat3"; - case AttributeType.MAT4: - return "mat4"; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError("attributeType is not a valid value."); - //>>includeEnd('debug'); - } - }; - - var AttributeType$1 = Object.freeze(AttributeType); - - const RIGHT_SHIFT = 1.0 / 256.0; - const LEFT_SHIFT = 256.0; - - /** - * Attribute compression and decompression functions. - * - * @namespace AttributeCompression - * - * @private - */ - const AttributeCompression = {}; - - /** - * Encodes a normalized vector into 2 SNORM values in the range of [0-rangeMax] following the 'oct' encoding. - * - * Oct encoding is a compact representation of unit length vectors. - * The 'oct' encoding is described in "A Survey of Efficient Representations of Independent Unit Vectors", - * Cigolle et al 2014: {@link http://jcgt.org/published/0003/02/01/} - * - * @param {Cartesian3} vector The normalized vector to be compressed into 2 component 'oct' encoding. - * @param {Cartesian2} result The 2 component oct-encoded unit length vector. - * @param {Number} rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits. - * @returns {Cartesian2} The 2 component oct-encoded unit length vector. - * - * @exception {DeveloperError} vector must be normalized. - * - * @see AttributeCompression.octDecodeInRange - */ - AttributeCompression.octEncodeInRange = function (vector, rangeMax, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("vector", vector); - Check.Check.defined("result", result); - const magSquared = Matrix3.Cartesian3.magnitudeSquared(vector); - if (Math.abs(magSquared - 1.0) > Math$1.CesiumMath.EPSILON6) { - throw new Check.DeveloperError("vector must be normalized."); - } - //>>includeEnd('debug'); - - result.x = - vector.x / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z)); - result.y = - vector.y / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z)); - if (vector.z < 0) { - const x = result.x; - const y = result.y; - result.x = (1.0 - Math.abs(y)) * Math$1.CesiumMath.signNotZero(x); - result.y = (1.0 - Math.abs(x)) * Math$1.CesiumMath.signNotZero(y); - } - - result.x = Math$1.CesiumMath.toSNorm(result.x, rangeMax); - result.y = Math$1.CesiumMath.toSNorm(result.y, rangeMax); - - return result; - }; - - /** - * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding. - * - * @param {Cartesian3} vector The normalized vector to be compressed into 2 byte 'oct' encoding. - * @param {Cartesian2} result The 2 byte oct-encoded unit length vector. - * @returns {Cartesian2} The 2 byte oct-encoded unit length vector. - * - * @exception {DeveloperError} vector must be normalized. - * - * @see AttributeCompression.octEncodeInRange - * @see AttributeCompression.octDecode - */ - AttributeCompression.octEncode = function (vector, result) { - return AttributeCompression.octEncodeInRange(vector, 255, result); - }; - - const octEncodeScratch = new Matrix2.Cartesian2(); - const uint8ForceArray = new Uint8Array(1); - function forceUint8(value) { - uint8ForceArray[0] = value; - return uint8ForceArray[0]; - } - /** - * @param {Cartesian3} vector The normalized vector to be compressed into 4 byte 'oct' encoding. - * @param {Cartesian4} result The 4 byte oct-encoded unit length vector. - * @returns {Cartesian4} The 4 byte oct-encoded unit length vector. - * - * @exception {DeveloperError} vector must be normalized. - * - * @see AttributeCompression.octEncodeInRange - * @see AttributeCompression.octDecodeFromCartesian4 - */ - AttributeCompression.octEncodeToCartesian4 = function (vector, result) { - AttributeCompression.octEncodeInRange(vector, 65535, octEncodeScratch); - result.x = forceUint8(octEncodeScratch.x * RIGHT_SHIFT); - result.y = forceUint8(octEncodeScratch.x); - result.z = forceUint8(octEncodeScratch.y * RIGHT_SHIFT); - result.w = forceUint8(octEncodeScratch.y); - return result; - }; - - /** - * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component vector. - * - * @param {Number} x The x component of the oct-encoded unit length vector. - * @param {Number} y The y component of the oct-encoded unit length vector. - * @param {Number} rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits. - * @param {Cartesian3} result The decoded and normalized vector - * @returns {Cartesian3} The decoded and normalized vector. - * - * @exception {DeveloperError} x and y must be unsigned normalized integers between 0 and rangeMax. - * - * @see AttributeCompression.octEncodeInRange - */ - AttributeCompression.octDecodeInRange = function (x, y, rangeMax, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("result", result); - if (x < 0 || x > rangeMax || y < 0 || y > rangeMax) { - throw new Check.DeveloperError( - `x and y must be unsigned normalized integers between 0 and ${rangeMax}` - ); - } - //>>includeEnd('debug'); - - result.x = Math$1.CesiumMath.fromSNorm(x, rangeMax); - result.y = Math$1.CesiumMath.fromSNorm(y, rangeMax); - result.z = 1.0 - (Math.abs(result.x) + Math.abs(result.y)); - - if (result.z < 0.0) { - const oldVX = result.x; - result.x = (1.0 - Math.abs(result.y)) * Math$1.CesiumMath.signNotZero(oldVX); - result.y = (1.0 - Math.abs(oldVX)) * Math$1.CesiumMath.signNotZero(result.y); - } - - return Matrix3.Cartesian3.normalize(result, result); - }; - - /** - * Decodes a unit-length vector in 2 byte 'oct' encoding to a normalized 3-component vector. - * - * @param {Number} x The x component of the oct-encoded unit length vector. - * @param {Number} y The y component of the oct-encoded unit length vector. - * @param {Cartesian3} result The decoded and normalized vector. - * @returns {Cartesian3} The decoded and normalized vector. - * - * @exception {DeveloperError} x and y must be an unsigned normalized integer between 0 and 255. - * - * @see AttributeCompression.octDecodeInRange - */ - AttributeCompression.octDecode = function (x, y, result) { - return AttributeCompression.octDecodeInRange(x, y, 255, result); - }; - - /** - * Decodes a unit-length vector in 4 byte 'oct' encoding to a normalized 3-component vector. - * - * @param {Cartesian4} encoded The oct-encoded unit length vector. - * @param {Cartesian3} result The decoded and normalized vector. - * @returns {Cartesian3} The decoded and normalized vector. - * - * @exception {DeveloperError} x, y, z, and w must be unsigned normalized integers between 0 and 255. - * - * @see AttributeCompression.octDecodeInRange - * @see AttributeCompression.octEncodeToCartesian4 - */ - AttributeCompression.octDecodeFromCartesian4 = function (encoded, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("encoded", encoded); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - const x = encoded.x; - const y = encoded.y; - const z = encoded.z; - const w = encoded.w; - //>>includeStart('debug', pragmas.debug); - if ( - x < 0 || - x > 255 || - y < 0 || - y > 255 || - z < 0 || - z > 255 || - w < 0 || - w > 255 - ) { - throw new Check.DeveloperError( - "x, y, z, and w must be unsigned normalized integers between 0 and 255" - ); - } - //>>includeEnd('debug'); - - const xOct16 = x * LEFT_SHIFT + y; - const yOct16 = z * LEFT_SHIFT + w; - return AttributeCompression.octDecodeInRange(xOct16, yOct16, 65535, result); - }; - - /** - * Packs an oct encoded vector into a single floating-point number. - * - * @param {Cartesian2} encoded The oct encoded vector. - * @returns {Number} The oct encoded vector packed into a single float. - * - */ - AttributeCompression.octPackFloat = function (encoded) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("encoded", encoded); - //>>includeEnd('debug'); - return 256.0 * encoded.x + encoded.y; - }; - - const scratchEncodeCart2 = new Matrix2.Cartesian2(); - - /** - * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding and - * stores those values in a single float-point number. - * - * @param {Cartesian3} vector The normalized vector to be compressed into 2 byte 'oct' encoding. - * @returns {Number} The 2 byte oct-encoded unit length vector. - * - * @exception {DeveloperError} vector must be normalized. - */ - AttributeCompression.octEncodeFloat = function (vector) { - AttributeCompression.octEncode(vector, scratchEncodeCart2); - return AttributeCompression.octPackFloat(scratchEncodeCart2); - }; - - /** - * Decodes a unit-length vector in 'oct' encoding packed in a floating-point number to a normalized 3-component vector. - * - * @param {Number} value The oct-encoded unit length vector stored as a single floating-point number. - * @param {Cartesian3} result The decoded and normalized vector - * @returns {Cartesian3} The decoded and normalized vector. - * - */ - AttributeCompression.octDecodeFloat = function (value, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("value", value); - //>>includeEnd('debug'); - - const temp = value / 256.0; - const x = Math.floor(temp); - const y = (temp - x) * 256.0; - - return AttributeCompression.octDecode(x, y, result); - }; - - /** - * Encodes three normalized vectors into 6 SNORM values in the range of [0-255] following the 'oct' encoding and - * packs those into two floating-point numbers. - * - * @param {Cartesian3} v1 A normalized vector to be compressed. - * @param {Cartesian3} v2 A normalized vector to be compressed. - * @param {Cartesian3} v3 A normalized vector to be compressed. - * @param {Cartesian2} result The 'oct' encoded vectors packed into two floating-point numbers. - * @returns {Cartesian2} The 'oct' encoded vectors packed into two floating-point numbers. - * - */ - AttributeCompression.octPack = function (v1, v2, v3, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("v1", v1); - Check.Check.defined("v2", v2); - Check.Check.defined("v3", v3); - Check.Check.defined("result", result); - //>>includeEnd('debug'); - - const encoded1 = AttributeCompression.octEncodeFloat(v1); - const encoded2 = AttributeCompression.octEncodeFloat(v2); - - const encoded3 = AttributeCompression.octEncode(v3, scratchEncodeCart2); - result.x = 65536.0 * encoded3.x + encoded1; - result.y = 65536.0 * encoded3.y + encoded2; - return result; - }; - - /** - * Decodes three unit-length vectors in 'oct' encoding packed into a floating-point number to a normalized 3-component vector. - * - * @param {Cartesian2} packed The three oct-encoded unit length vectors stored as two floating-point number. - * @param {Cartesian3} v1 One decoded and normalized vector. - * @param {Cartesian3} v2 One decoded and normalized vector. - * @param {Cartesian3} v3 One decoded and normalized vector. - */ - AttributeCompression.octUnpack = function (packed, v1, v2, v3) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("packed", packed); - Check.Check.defined("v1", v1); - Check.Check.defined("v2", v2); - Check.Check.defined("v3", v3); - //>>includeEnd('debug'); - - let temp = packed.x / 65536.0; - const x = Math.floor(temp); - const encodedFloat1 = (temp - x) * 65536.0; - - temp = packed.y / 65536.0; - const y = Math.floor(temp); - const encodedFloat2 = (temp - y) * 65536.0; - - AttributeCompression.octDecodeFloat(encodedFloat1, v1); - AttributeCompression.octDecodeFloat(encodedFloat2, v2); - AttributeCompression.octDecode(x, y, v3); - }; - - /** - * Pack texture coordinates into a single float. The texture coordinates will only preserve 12 bits of precision. - * - * @param {Cartesian2} textureCoordinates The texture coordinates to compress. Both coordinates must be in the range 0.0-1.0. - * @returns {Number} The packed texture coordinates. - * - */ - AttributeCompression.compressTextureCoordinates = function ( - textureCoordinates - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("textureCoordinates", textureCoordinates); - //>>includeEnd('debug'); - - // Move x and y to the range 0-4095; - const x = (textureCoordinates.x * 4095.0) | 0; - const y = (textureCoordinates.y * 4095.0) | 0; - return 4096.0 * x + y; - }; - - /** - * Decompresses texture coordinates that were packed into a single float. - * - * @param {Number} compressed The compressed texture coordinates. - * @param {Cartesian2} result The decompressed texture coordinates. - * @returns {Cartesian2} The modified result parameter. - * - */ - AttributeCompression.decompressTextureCoordinates = function ( - compressed, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("compressed", compressed); - Check.Check.defined("result", result); - //>>includeEnd('debug'); - - const temp = compressed / 4096.0; - const xZeroTo4095 = Math.floor(temp); - result.x = xZeroTo4095 / 4095.0; - result.y = (compressed - xZeroTo4095 * 4096) / 4095; - return result; - }; - - function zigZagDecode(value) { - return (value >> 1) ^ -(value & 1); - } - - /** - * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place. - * - * @param {Uint16Array} uBuffer The buffer view of u values. - * @param {Uint16Array} vBuffer The buffer view of v values. - * @param {Uint16Array} [heightBuffer] The buffer view of height values. - * - * @see {@link https://github.com/CesiumGS/quantized-mesh|quantized-mesh-1.0 terrain format} - */ - AttributeCompression.zigZagDeltaDecode = function ( - uBuffer, - vBuffer, - heightBuffer - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("uBuffer", uBuffer); - Check.Check.defined("vBuffer", vBuffer); - Check.Check.typeOf.number.equals( - "uBuffer.length", - "vBuffer.length", - uBuffer.length, - vBuffer.length - ); - if (defaultValue.defined(heightBuffer)) { - Check.Check.typeOf.number.equals( - "uBuffer.length", - "heightBuffer.length", - uBuffer.length, - heightBuffer.length - ); - } - //>>includeEnd('debug'); - - const count = uBuffer.length; - - let u = 0; - let v = 0; - let height = 0; - - for (let i = 0; i < count; ++i) { - u += zigZagDecode(uBuffer[i]); - v += zigZagDecode(vBuffer[i]); - - uBuffer[i] = u; - vBuffer[i] = v; - - if (defaultValue.defined(heightBuffer)) { - height += zigZagDecode(heightBuffer[i]); - heightBuffer[i] = height; - } - } - }; - - /** - * Dequantizes a quantized typed array into a floating point typed array. - * - * @see {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data} - * - * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array} typedArray The typed array for the quantized data. - * @param {ComponentDatatype} componentDatatype The component datatype of the quantized data. - * @param {AttributeType} type The attribute type of the quantized data. - * @param {Number} count The number of attributes referenced in the dequantized array. - * - * @returns {Float32Array} The dequantized array. - */ - AttributeCompression.dequantize = function ( - typedArray, - componentDatatype, - type, - count - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("typedArray", typedArray); - Check.Check.defined("componentDatatype", componentDatatype); - Check.Check.defined("type", type); - Check.Check.defined("count", count); - //>>includeEnd('debug'); - - const componentsPerAttribute = AttributeType$1.getNumberOfComponents(type); - - let divisor; - switch (componentDatatype) { - case ComponentDatatype.ComponentDatatype.BYTE: - divisor = 127.0; - break; - case ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE: - divisor = 255.0; - break; - case ComponentDatatype.ComponentDatatype.SHORT: - divisor = 32767.0; - break; - case ComponentDatatype.ComponentDatatype.UNSIGNED_SHORT: - divisor = 65535.0; - break; - case ComponentDatatype.ComponentDatatype.INT: - divisor = 2147483647.0; - break; - case ComponentDatatype.ComponentDatatype.UNSIGNED_INT: - divisor = 4294967295.0; - break; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError( - `Cannot dequantize component datatype: ${componentDatatype}` - ); - //>>includeEnd('debug'); - } - - const dequantizedTypedArray = new Float32Array( - count * componentsPerAttribute - ); - - for (let i = 0; i < count; i++) { - for (let j = 0; j < componentsPerAttribute; j++) { - const index = i * componentsPerAttribute + j; - dequantizedTypedArray[index] = Math.max( - typedArray[index] / divisor, - -1.0 - ); - } - } - - return dequantizedTypedArray; - }; - - /** - * Decode RGB565-encoded colors into a floating point typed array containing - * normalized RGB values. - * - * @param {Uint16Array} typedArray Array of RGB565 values - * @param {Float32Array} [result] Array to store the normalized VEC3 result - */ - AttributeCompression.decodeRGB565 = function (typedArray, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("typedArray", typedArray); - - const expectedLength = typedArray.length * 3; - if (defaultValue.defined(result)) { - Check.Check.typeOf.number.equals( - "result.length", - "typedArray.length * 3", - result.length, - expectedLength - ); - } - //>>includeEnd('debug'); - - const count = typedArray.length; - if (!defaultValue.defined(result)) { - result = new Float32Array(count * 3); - } - - const mask5 = (1 << 5) - 1; - const mask6 = (1 << 6) - 1; - const normalize5 = 1.0 / 31.0; - const normalize6 = 1.0 / 63.0; - for (let i = 0; i < count; i++) { - const value = typedArray[i]; - const red = value >> 11; - const green = (value >> 5) & mask6; - const blue = value & mask5; - - const offset = 3 * i; - result[offset] = red * normalize5; - result[offset + 1] = green * normalize6; - result[offset + 2] = blue * normalize5; - } - - return result; - }; - - var AttributeCompression$1 = AttributeCompression; - - exports.AttributeCompression = AttributeCompression$1; - -})); -//# sourceMappingURL=AttributeCompression-e9888cb8.js.map diff --git a/debug/cesium/Workers/AttributeCompression-e9888cb8.js.map b/debug/cesium/Workers/AttributeCompression-e9888cb8.js.map deleted file mode 100644 index bcd64a3..0000000 --- a/debug/cesium/Workers/AttributeCompression-e9888cb8.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AttributeCompression-e9888cb8.js","sources":["../../../Source/Scene/AttributeType.js","../../../Source/Core/AttributeCompression.js"],"sourcesContent":["import Cartesian2 from \"../Core/Cartesian2.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Cartesian4 from \"../Core/Cartesian4.js\";\r\nimport Check from \"../Core/Check.js\";\r\nimport DeveloperError from \"../Core/DeveloperError.js\";\r\nimport Matrix2 from \"../Core/Matrix2.js\";\r\nimport Matrix3 from \"../Core/Matrix3.js\";\r\nimport Matrix4 from \"../Core/Matrix4.js\";\r\n\r\n/**\r\n * An enum describing the attribute type for glTF and 3D Tiles.\r\n *\r\n * @enum {String}\r\n *\r\n * @private\r\n */\r\nconst AttributeType = {\r\n /**\r\n * The attribute is a single component.\r\n *\r\n * @type {String}\r\n * @constant\r\n */\r\n SCALAR: \"SCALAR\",\r\n\r\n /**\r\n * The attribute is a two-component vector.\r\n *\r\n * @type {String}\r\n * @constant\r\n */\r\n VEC2: \"VEC2\",\r\n\r\n /**\r\n * The attribute is a three-component vector.\r\n *\r\n * @type {String}\r\n * @constant\r\n */\r\n VEC3: \"VEC3\",\r\n\r\n /**\r\n * The attribute is a four-component vector.\r\n *\r\n * @type {String}\r\n * @constant\r\n */\r\n VEC4: \"VEC4\",\r\n\r\n /**\r\n * The attribute is a 2x2 matrix.\r\n *\r\n * @type {String}\r\n * @constant\r\n */\r\n MAT2: \"MAT2\",\r\n\r\n /**\r\n * The attribute is a 3x3 matrix.\r\n *\r\n * @type {String}\r\n * @constant\r\n */\r\n MAT3: \"MAT3\",\r\n\r\n /**\r\n * The attribute is a 4x4 matrix.\r\n *\r\n * @type {String}\r\n * @constant\r\n */\r\n MAT4: \"MAT4\",\r\n};\r\n\r\n/**\r\n * Gets the scalar, vector, or matrix type for the attribute type.\r\n *\r\n * @param {AttributeType} attributeType The attribute type.\r\n * @returns {*} The math type.\r\n *\r\n * @private\r\n */\r\nAttributeType.getMathType = function (attributeType) {\r\n switch (attributeType) {\r\n case AttributeType.SCALAR:\r\n return Number;\r\n case AttributeType.VEC2:\r\n return Cartesian2;\r\n case AttributeType.VEC3:\r\n return Cartesian3;\r\n case AttributeType.VEC4:\r\n return Cartesian4;\r\n case AttributeType.MAT2:\r\n return Matrix2;\r\n case AttributeType.MAT3:\r\n return Matrix3;\r\n case AttributeType.MAT4:\r\n return Matrix4;\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\"attributeType is not a valid value.\");\r\n //>>includeEnd('debug');\r\n }\r\n};\r\n\r\n/**\r\n * Gets the number of components per attribute.\r\n *\r\n * @param {AttributeType} attributeType The attribute type.\r\n * @returns {Number} The number of components.\r\n *\r\n * @private\r\n */\r\nAttributeType.getNumberOfComponents = function (attributeType) {\r\n switch (attributeType) {\r\n case AttributeType.SCALAR:\r\n return 1;\r\n case AttributeType.VEC2:\r\n return 2;\r\n case AttributeType.VEC3:\r\n return 3;\r\n case AttributeType.VEC4:\r\n case AttributeType.MAT2:\r\n return 4;\r\n case AttributeType.MAT3:\r\n return 9;\r\n case AttributeType.MAT4:\r\n return 16;\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\"attributeType is not a valid value.\");\r\n //>>includeEnd('debug');\r\n }\r\n};\r\n\r\n/**\r\n * Get the number of attribute locations needed to fit this attribute. Most\r\n * types require one, but matrices require multiple attribute locations.\r\n *\r\n * @param {AttributeType} attributeType The attribute type.\r\n * @returns {Number} The number of attribute locations needed in the shader\r\n *\r\n * @private\r\n */\r\nAttributeType.getAttributeLocationCount = function (attributeType) {\r\n switch (attributeType) {\r\n case AttributeType.SCALAR:\r\n case AttributeType.VEC2:\r\n case AttributeType.VEC3:\r\n case AttributeType.VEC4:\r\n return 1;\r\n case AttributeType.MAT2:\r\n return 2;\r\n case AttributeType.MAT3:\r\n return 3;\r\n case AttributeType.MAT4:\r\n return 4;\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\"attributeType is not a valid value.\");\r\n //>>includeEnd('debug');\r\n }\r\n};\r\n\r\n/**\r\n * Gets the GLSL type for the attribute type.\r\n *\r\n * @param {AttributeType} attributeType The attribute type.\r\n * @returns {String} The GLSL type for the attribute type.\r\n *\r\n * @private\r\n */\r\nAttributeType.getGlslType = function (attributeType) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.string(\"attributeType\", attributeType);\r\n //>>includeEnd('debug');\r\n\r\n switch (attributeType) {\r\n case AttributeType.SCALAR:\r\n return \"float\";\r\n case AttributeType.VEC2:\r\n return \"vec2\";\r\n case AttributeType.VEC3:\r\n return \"vec3\";\r\n case AttributeType.VEC4:\r\n return \"vec4\";\r\n case AttributeType.MAT2:\r\n return \"mat2\";\r\n case AttributeType.MAT3:\r\n return \"mat3\";\r\n case AttributeType.MAT4:\r\n return \"mat4\";\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\"attributeType is not a valid value.\");\r\n //>>includeEnd('debug');\r\n }\r\n};\r\n\r\nexport default Object.freeze(AttributeType);\r\n","import Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport Check from \"./Check.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport AttributeType from \"../Scene/AttributeType.js\";\r\n\r\nconst RIGHT_SHIFT = 1.0 / 256.0;\r\nconst LEFT_SHIFT = 256.0;\r\n\r\n/**\r\n * Attribute compression and decompression functions.\r\n *\r\n * @namespace AttributeCompression\r\n *\r\n * @private\r\n */\r\nconst AttributeCompression = {};\r\n\r\n/**\r\n * Encodes a normalized vector into 2 SNORM values in the range of [0-rangeMax] following the 'oct' encoding.\r\n *\r\n * Oct encoding is a compact representation of unit length vectors.\r\n * The 'oct' encoding is described in \"A Survey of Efficient Representations of Independent Unit Vectors\",\r\n * Cigolle et al 2014: {@link http://jcgt.org/published/0003/02/01/}\r\n *\r\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 component 'oct' encoding.\r\n * @param {Cartesian2} result The 2 component oct-encoded unit length vector.\r\n * @param {Number} rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\r\n * @returns {Cartesian2} The 2 component oct-encoded unit length vector.\r\n *\r\n * @exception {DeveloperError} vector must be normalized.\r\n *\r\n * @see AttributeCompression.octDecodeInRange\r\n */\r\nAttributeCompression.octEncodeInRange = function (vector, rangeMax, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"vector\", vector);\r\n Check.defined(\"result\", result);\r\n const magSquared = Cartesian3.magnitudeSquared(vector);\r\n if (Math.abs(magSquared - 1.0) > CesiumMath.EPSILON6) {\r\n throw new DeveloperError(\"vector must be normalized.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n result.x =\r\n vector.x / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\r\n result.y =\r\n vector.y / (Math.abs(vector.x) + Math.abs(vector.y) + Math.abs(vector.z));\r\n if (vector.z < 0) {\r\n const x = result.x;\r\n const y = result.y;\r\n result.x = (1.0 - Math.abs(y)) * CesiumMath.signNotZero(x);\r\n result.y = (1.0 - Math.abs(x)) * CesiumMath.signNotZero(y);\r\n }\r\n\r\n result.x = CesiumMath.toSNorm(result.x, rangeMax);\r\n result.y = CesiumMath.toSNorm(result.y, rangeMax);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding.\r\n *\r\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 byte 'oct' encoding.\r\n * @param {Cartesian2} result The 2 byte oct-encoded unit length vector.\r\n * @returns {Cartesian2} The 2 byte oct-encoded unit length vector.\r\n *\r\n * @exception {DeveloperError} vector must be normalized.\r\n *\r\n * @see AttributeCompression.octEncodeInRange\r\n * @see AttributeCompression.octDecode\r\n */\r\nAttributeCompression.octEncode = function (vector, result) {\r\n return AttributeCompression.octEncodeInRange(vector, 255, result);\r\n};\r\n\r\nconst octEncodeScratch = new Cartesian2();\r\nconst uint8ForceArray = new Uint8Array(1);\r\nfunction forceUint8(value) {\r\n uint8ForceArray[0] = value;\r\n return uint8ForceArray[0];\r\n}\r\n/**\r\n * @param {Cartesian3} vector The normalized vector to be compressed into 4 byte 'oct' encoding.\r\n * @param {Cartesian4} result The 4 byte oct-encoded unit length vector.\r\n * @returns {Cartesian4} The 4 byte oct-encoded unit length vector.\r\n *\r\n * @exception {DeveloperError} vector must be normalized.\r\n *\r\n * @see AttributeCompression.octEncodeInRange\r\n * @see AttributeCompression.octDecodeFromCartesian4\r\n */\r\nAttributeCompression.octEncodeToCartesian4 = function (vector, result) {\r\n AttributeCompression.octEncodeInRange(vector, 65535, octEncodeScratch);\r\n result.x = forceUint8(octEncodeScratch.x * RIGHT_SHIFT);\r\n result.y = forceUint8(octEncodeScratch.x);\r\n result.z = forceUint8(octEncodeScratch.y * RIGHT_SHIFT);\r\n result.w = forceUint8(octEncodeScratch.y);\r\n return result;\r\n};\r\n\r\n/**\r\n * Decodes a unit-length vector in 'oct' encoding to a normalized 3-component vector.\r\n *\r\n * @param {Number} x The x component of the oct-encoded unit length vector.\r\n * @param {Number} y The y component of the oct-encoded unit length vector.\r\n * @param {Number} rangeMax The maximum value of the SNORM range. The encoded vector is stored in log2(rangeMax+1) bits.\r\n * @param {Cartesian3} result The decoded and normalized vector\r\n * @returns {Cartesian3} The decoded and normalized vector.\r\n *\r\n * @exception {DeveloperError} x and y must be unsigned normalized integers between 0 and rangeMax.\r\n *\r\n * @see AttributeCompression.octEncodeInRange\r\n */\r\nAttributeCompression.octDecodeInRange = function (x, y, rangeMax, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"result\", result);\r\n if (x < 0 || x > rangeMax || y < 0 || y > rangeMax) {\r\n throw new DeveloperError(\r\n `x and y must be unsigned normalized integers between 0 and ${rangeMax}`\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n result.x = CesiumMath.fromSNorm(x, rangeMax);\r\n result.y = CesiumMath.fromSNorm(y, rangeMax);\r\n result.z = 1.0 - (Math.abs(result.x) + Math.abs(result.y));\r\n\r\n if (result.z < 0.0) {\r\n const oldVX = result.x;\r\n result.x = (1.0 - Math.abs(result.y)) * CesiumMath.signNotZero(oldVX);\r\n result.y = (1.0 - Math.abs(oldVX)) * CesiumMath.signNotZero(result.y);\r\n }\r\n\r\n return Cartesian3.normalize(result, result);\r\n};\r\n\r\n/**\r\n * Decodes a unit-length vector in 2 byte 'oct' encoding to a normalized 3-component vector.\r\n *\r\n * @param {Number} x The x component of the oct-encoded unit length vector.\r\n * @param {Number} y The y component of the oct-encoded unit length vector.\r\n * @param {Cartesian3} result The decoded and normalized vector.\r\n * @returns {Cartesian3} The decoded and normalized vector.\r\n *\r\n * @exception {DeveloperError} x and y must be an unsigned normalized integer between 0 and 255.\r\n *\r\n * @see AttributeCompression.octDecodeInRange\r\n */\r\nAttributeCompression.octDecode = function (x, y, result) {\r\n return AttributeCompression.octDecodeInRange(x, y, 255, result);\r\n};\r\n\r\n/**\r\n * Decodes a unit-length vector in 4 byte 'oct' encoding to a normalized 3-component vector.\r\n *\r\n * @param {Cartesian4} encoded The oct-encoded unit length vector.\r\n * @param {Cartesian3} result The decoded and normalized vector.\r\n * @returns {Cartesian3} The decoded and normalized vector.\r\n *\r\n * @exception {DeveloperError} x, y, z, and w must be unsigned normalized integers between 0 and 255.\r\n *\r\n * @see AttributeCompression.octDecodeInRange\r\n * @see AttributeCompression.octEncodeToCartesian4\r\n */\r\nAttributeCompression.octDecodeFromCartesian4 = function (encoded, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"encoded\", encoded);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n const x = encoded.x;\r\n const y = encoded.y;\r\n const z = encoded.z;\r\n const w = encoded.w;\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n x < 0 ||\r\n x > 255 ||\r\n y < 0 ||\r\n y > 255 ||\r\n z < 0 ||\r\n z > 255 ||\r\n w < 0 ||\r\n w > 255\r\n ) {\r\n throw new DeveloperError(\r\n \"x, y, z, and w must be unsigned normalized integers between 0 and 255\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const xOct16 = x * LEFT_SHIFT + y;\r\n const yOct16 = z * LEFT_SHIFT + w;\r\n return AttributeCompression.octDecodeInRange(xOct16, yOct16, 65535, result);\r\n};\r\n\r\n/**\r\n * Packs an oct encoded vector into a single floating-point number.\r\n *\r\n * @param {Cartesian2} encoded The oct encoded vector.\r\n * @returns {Number} The oct encoded vector packed into a single float.\r\n *\r\n */\r\nAttributeCompression.octPackFloat = function (encoded) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"encoded\", encoded);\r\n //>>includeEnd('debug');\r\n return 256.0 * encoded.x + encoded.y;\r\n};\r\n\r\nconst scratchEncodeCart2 = new Cartesian2();\r\n\r\n/**\r\n * Encodes a normalized vector into 2 SNORM values in the range of [0-255] following the 'oct' encoding and\r\n * stores those values in a single float-point number.\r\n *\r\n * @param {Cartesian3} vector The normalized vector to be compressed into 2 byte 'oct' encoding.\r\n * @returns {Number} The 2 byte oct-encoded unit length vector.\r\n *\r\n * @exception {DeveloperError} vector must be normalized.\r\n */\r\nAttributeCompression.octEncodeFloat = function (vector) {\r\n AttributeCompression.octEncode(vector, scratchEncodeCart2);\r\n return AttributeCompression.octPackFloat(scratchEncodeCart2);\r\n};\r\n\r\n/**\r\n * Decodes a unit-length vector in 'oct' encoding packed in a floating-point number to a normalized 3-component vector.\r\n *\r\n * @param {Number} value The oct-encoded unit length vector stored as a single floating-point number.\r\n * @param {Cartesian3} result The decoded and normalized vector\r\n * @returns {Cartesian3} The decoded and normalized vector.\r\n *\r\n */\r\nAttributeCompression.octDecodeFloat = function (value, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"value\", value);\r\n //>>includeEnd('debug');\r\n\r\n const temp = value / 256.0;\r\n const x = Math.floor(temp);\r\n const y = (temp - x) * 256.0;\r\n\r\n return AttributeCompression.octDecode(x, y, result);\r\n};\r\n\r\n/**\r\n * Encodes three normalized vectors into 6 SNORM values in the range of [0-255] following the 'oct' encoding and\r\n * packs those into two floating-point numbers.\r\n *\r\n * @param {Cartesian3} v1 A normalized vector to be compressed.\r\n * @param {Cartesian3} v2 A normalized vector to be compressed.\r\n * @param {Cartesian3} v3 A normalized vector to be compressed.\r\n * @param {Cartesian2} result The 'oct' encoded vectors packed into two floating-point numbers.\r\n * @returns {Cartesian2} The 'oct' encoded vectors packed into two floating-point numbers.\r\n *\r\n */\r\nAttributeCompression.octPack = function (v1, v2, v3, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"v1\", v1);\r\n Check.defined(\"v2\", v2);\r\n Check.defined(\"v3\", v3);\r\n Check.defined(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const encoded1 = AttributeCompression.octEncodeFloat(v1);\r\n const encoded2 = AttributeCompression.octEncodeFloat(v2);\r\n\r\n const encoded3 = AttributeCompression.octEncode(v3, scratchEncodeCart2);\r\n result.x = 65536.0 * encoded3.x + encoded1;\r\n result.y = 65536.0 * encoded3.y + encoded2;\r\n return result;\r\n};\r\n\r\n/**\r\n * Decodes three unit-length vectors in 'oct' encoding packed into a floating-point number to a normalized 3-component vector.\r\n *\r\n * @param {Cartesian2} packed The three oct-encoded unit length vectors stored as two floating-point number.\r\n * @param {Cartesian3} v1 One decoded and normalized vector.\r\n * @param {Cartesian3} v2 One decoded and normalized vector.\r\n * @param {Cartesian3} v3 One decoded and normalized vector.\r\n */\r\nAttributeCompression.octUnpack = function (packed, v1, v2, v3) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"packed\", packed);\r\n Check.defined(\"v1\", v1);\r\n Check.defined(\"v2\", v2);\r\n Check.defined(\"v3\", v3);\r\n //>>includeEnd('debug');\r\n\r\n let temp = packed.x / 65536.0;\r\n const x = Math.floor(temp);\r\n const encodedFloat1 = (temp - x) * 65536.0;\r\n\r\n temp = packed.y / 65536.0;\r\n const y = Math.floor(temp);\r\n const encodedFloat2 = (temp - y) * 65536.0;\r\n\r\n AttributeCompression.octDecodeFloat(encodedFloat1, v1);\r\n AttributeCompression.octDecodeFloat(encodedFloat2, v2);\r\n AttributeCompression.octDecode(x, y, v3);\r\n};\r\n\r\n/**\r\n * Pack texture coordinates into a single float. The texture coordinates will only preserve 12 bits of precision.\r\n *\r\n * @param {Cartesian2} textureCoordinates The texture coordinates to compress. Both coordinates must be in the range 0.0-1.0.\r\n * @returns {Number} The packed texture coordinates.\r\n *\r\n */\r\nAttributeCompression.compressTextureCoordinates = function (\r\n textureCoordinates\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"textureCoordinates\", textureCoordinates);\r\n //>>includeEnd('debug');\r\n\r\n // Move x and y to the range 0-4095;\r\n const x = (textureCoordinates.x * 4095.0) | 0;\r\n const y = (textureCoordinates.y * 4095.0) | 0;\r\n return 4096.0 * x + y;\r\n};\r\n\r\n/**\r\n * Decompresses texture coordinates that were packed into a single float.\r\n *\r\n * @param {Number} compressed The compressed texture coordinates.\r\n * @param {Cartesian2} result The decompressed texture coordinates.\r\n * @returns {Cartesian2} The modified result parameter.\r\n *\r\n */\r\nAttributeCompression.decompressTextureCoordinates = function (\r\n compressed,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"compressed\", compressed);\r\n Check.defined(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const temp = compressed / 4096.0;\r\n const xZeroTo4095 = Math.floor(temp);\r\n result.x = xZeroTo4095 / 4095.0;\r\n result.y = (compressed - xZeroTo4095 * 4096) / 4095;\r\n return result;\r\n};\r\n\r\nfunction zigZagDecode(value) {\r\n return (value >> 1) ^ -(value & 1);\r\n}\r\n\r\n/**\r\n * Decodes delta and ZigZag encoded vertices. This modifies the buffers in place.\r\n *\r\n * @param {Uint16Array} uBuffer The buffer view of u values.\r\n * @param {Uint16Array} vBuffer The buffer view of v values.\r\n * @param {Uint16Array} [heightBuffer] The buffer view of height values.\r\n *\r\n * @see {@link https://github.com/CesiumGS/quantized-mesh|quantized-mesh-1.0 terrain format}\r\n */\r\nAttributeCompression.zigZagDeltaDecode = function (\r\n uBuffer,\r\n vBuffer,\r\n heightBuffer\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"uBuffer\", uBuffer);\r\n Check.defined(\"vBuffer\", vBuffer);\r\n Check.typeOf.number.equals(\r\n \"uBuffer.length\",\r\n \"vBuffer.length\",\r\n uBuffer.length,\r\n vBuffer.length\r\n );\r\n if (defined(heightBuffer)) {\r\n Check.typeOf.number.equals(\r\n \"uBuffer.length\",\r\n \"heightBuffer.length\",\r\n uBuffer.length,\r\n heightBuffer.length\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const count = uBuffer.length;\r\n\r\n let u = 0;\r\n let v = 0;\r\n let height = 0;\r\n\r\n for (let i = 0; i < count; ++i) {\r\n u += zigZagDecode(uBuffer[i]);\r\n v += zigZagDecode(vBuffer[i]);\r\n\r\n uBuffer[i] = u;\r\n vBuffer[i] = v;\r\n\r\n if (defined(heightBuffer)) {\r\n height += zigZagDecode(heightBuffer[i]);\r\n heightBuffer[i] = height;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Dequantizes a quantized typed array into a floating point typed array.\r\n *\r\n * @see {@link https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization#encoding-quantized-data}\r\n *\r\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array} typedArray The typed array for the quantized data.\r\n * @param {ComponentDatatype} componentDatatype The component datatype of the quantized data.\r\n * @param {AttributeType} type The attribute type of the quantized data.\r\n * @param {Number} count The number of attributes referenced in the dequantized array.\r\n *\r\n * @returns {Float32Array} The dequantized array.\r\n */\r\nAttributeCompression.dequantize = function (\r\n typedArray,\r\n componentDatatype,\r\n type,\r\n count\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"typedArray\", typedArray);\r\n Check.defined(\"componentDatatype\", componentDatatype);\r\n Check.defined(\"type\", type);\r\n Check.defined(\"count\", count);\r\n //>>includeEnd('debug');\r\n\r\n const componentsPerAttribute = AttributeType.getNumberOfComponents(type);\r\n\r\n let divisor;\r\n switch (componentDatatype) {\r\n case ComponentDatatype.BYTE:\r\n divisor = 127.0;\r\n break;\r\n case ComponentDatatype.UNSIGNED_BYTE:\r\n divisor = 255.0;\r\n break;\r\n case ComponentDatatype.SHORT:\r\n divisor = 32767.0;\r\n break;\r\n case ComponentDatatype.UNSIGNED_SHORT:\r\n divisor = 65535.0;\r\n break;\r\n case ComponentDatatype.INT:\r\n divisor = 2147483647.0;\r\n break;\r\n case ComponentDatatype.UNSIGNED_INT:\r\n divisor = 4294967295.0;\r\n break;\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\r\n `Cannot dequantize component datatype: ${componentDatatype}`\r\n );\r\n //>>includeEnd('debug');\r\n }\r\n\r\n const dequantizedTypedArray = new Float32Array(\r\n count * componentsPerAttribute\r\n );\r\n\r\n for (let i = 0; i < count; i++) {\r\n for (let j = 0; j < componentsPerAttribute; j++) {\r\n const index = i * componentsPerAttribute + j;\r\n dequantizedTypedArray[index] = Math.max(\r\n typedArray[index] / divisor,\r\n -1.0\r\n );\r\n }\r\n }\r\n\r\n return dequantizedTypedArray;\r\n};\r\n\r\n/**\r\n * Decode RGB565-encoded colors into a floating point typed array containing\r\n * normalized RGB values.\r\n *\r\n * @param {Uint16Array} typedArray Array of RGB565 values\r\n * @param {Float32Array} [result] Array to store the normalized VEC3 result\r\n */\r\nAttributeCompression.decodeRGB565 = function (typedArray, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"typedArray\", typedArray);\r\n\r\n const expectedLength = typedArray.length * 3;\r\n if (defined(result)) {\r\n Check.typeOf.number.equals(\r\n \"result.length\",\r\n \"typedArray.length * 3\",\r\n result.length,\r\n expectedLength\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const count = typedArray.length;\r\n if (!defined(result)) {\r\n result = new Float32Array(count * 3);\r\n }\r\n\r\n const mask5 = (1 << 5) - 1;\r\n const mask6 = (1 << 6) - 1;\r\n const normalize5 = 1.0 / 31.0;\r\n const normalize6 = 1.0 / 63.0;\r\n for (let i = 0; i < count; i++) {\r\n const value = typedArray[i];\r\n const red = value >> 11;\r\n const green = (value >> 5) & mask6;\r\n const blue = value & mask5;\r\n\r\n const offset = 3 * i;\r\n result[offset] = red * normalize5;\r\n result[offset + 1] = green * normalize6;\r\n result[offset + 2] = blue * normalize5;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nexport default AttributeCompression;\r\n"],"names":["Cartesian2","Cartesian3","Cartesian4","Matrix2","Matrix3","Matrix4","DeveloperError","Check","CesiumMath","defined","AttributeType","ComponentDatatype"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/AxisAlignedBoundingBox-50342d27.js b/debug/cesium/Workers/AxisAlignedBoundingBox-50342d27.js deleted file mode 100644 index bce746b..0000000 --- a/debug/cesium/Workers/AxisAlignedBoundingBox-50342d27.js +++ /dev/null @@ -1,284 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Transforms-11fb6b0a'], (function (exports, Matrix3, Check, defaultValue, Transforms) { 'use strict'; - - /** - * Creates an instance of an AxisAlignedBoundingBox from the minimum and maximum points along the x, y, and z axes. - * @alias AxisAlignedBoundingBox - * @constructor - * - * @param {Cartesian3} [minimum=Cartesian3.ZERO] The minimum point along the x, y, and z axes. - * @param {Cartesian3} [maximum=Cartesian3.ZERO] The maximum point along the x, y, and z axes. - * @param {Cartesian3} [center] The center of the box; automatically computed if not supplied. - * - * @see BoundingSphere - * @see BoundingRectangle - */ - function AxisAlignedBoundingBox(minimum, maximum, center) { - /** - * The minimum point defining the bounding box. - * @type {Cartesian3} - * @default {@link Cartesian3.ZERO} - */ - this.minimum = Matrix3.Cartesian3.clone(defaultValue.defaultValue(minimum, Matrix3.Cartesian3.ZERO)); - - /** - * The maximum point defining the bounding box. - * @type {Cartesian3} - * @default {@link Cartesian3.ZERO} - */ - this.maximum = Matrix3.Cartesian3.clone(defaultValue.defaultValue(maximum, Matrix3.Cartesian3.ZERO)); - - // If center was not defined, compute it. - if (!defaultValue.defined(center)) { - center = Matrix3.Cartesian3.midpoint(this.minimum, this.maximum, new Matrix3.Cartesian3()); - } else { - center = Matrix3.Cartesian3.clone(center); - } - - /** - * The center point of the bounding box. - * @type {Cartesian3} - */ - this.center = center; - } - - /** - * Creates an instance of an AxisAlignedBoundingBox from its corners. - * - * @param {Cartesian3} minimum The minimum point along the x, y, and z axes. - * @param {Cartesian3} maximum The maximum point along the x, y, and z axes. - * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result. - * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided. - * - * @example - * // Compute an axis aligned bounding box from the two corners. - * const box = Cesium.AxisAlignedBoundingBox.fromCorners(new Cesium.Cartesian3(-1, -1, -1), new Cesium.Cartesian3(1, 1, 1)); - */ - AxisAlignedBoundingBox.fromCorners = function (minimum, maximum, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("minimum", minimum); - Check.Check.defined("maximum", maximum); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new AxisAlignedBoundingBox(); - } - - result.minimum = Matrix3.Cartesian3.clone(minimum, result.minimum); - result.maximum = Matrix3.Cartesian3.clone(maximum, result.maximum); - result.center = Matrix3.Cartesian3.midpoint(minimum, maximum, result.center); - - return result; - }; - - /** - * Computes an instance of an AxisAlignedBoundingBox. The box is determined by - * finding the points spaced the farthest apart on the x, y, and z axes. - * - * @param {Cartesian3[]} positions List of points that the bounding box will enclose. Each point must have a x, y, and z properties. - * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result. - * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided. - * - * @example - * // Compute an axis aligned bounding box enclosing two points. - * const box = Cesium.AxisAlignedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]); - */ - AxisAlignedBoundingBox.fromPoints = function (positions, result) { - if (!defaultValue.defined(result)) { - result = new AxisAlignedBoundingBox(); - } - - if (!defaultValue.defined(positions) || positions.length === 0) { - result.minimum = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.minimum); - result.maximum = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.maximum); - result.center = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.center); - return result; - } - - let minimumX = positions[0].x; - let minimumY = positions[0].y; - let minimumZ = positions[0].z; - - let maximumX = positions[0].x; - let maximumY = positions[0].y; - let maximumZ = positions[0].z; - - const length = positions.length; - for (let i = 1; i < length; i++) { - const p = positions[i]; - const x = p.x; - const y = p.y; - const z = p.z; - - minimumX = Math.min(x, minimumX); - maximumX = Math.max(x, maximumX); - minimumY = Math.min(y, minimumY); - maximumY = Math.max(y, maximumY); - minimumZ = Math.min(z, minimumZ); - maximumZ = Math.max(z, maximumZ); - } - - const minimum = result.minimum; - minimum.x = minimumX; - minimum.y = minimumY; - minimum.z = minimumZ; - - const maximum = result.maximum; - maximum.x = maximumX; - maximum.y = maximumY; - maximum.z = maximumZ; - - result.center = Matrix3.Cartesian3.midpoint(minimum, maximum, result.center); - - return result; - }; - - /** - * Duplicates a AxisAlignedBoundingBox instance. - * - * @param {AxisAlignedBoundingBox} box The bounding box to duplicate. - * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result. - * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if none was provided. (Returns undefined if box is undefined) - */ - AxisAlignedBoundingBox.clone = function (box, result) { - if (!defaultValue.defined(box)) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new AxisAlignedBoundingBox(box.minimum, box.maximum, box.center); - } - - result.minimum = Matrix3.Cartesian3.clone(box.minimum, result.minimum); - result.maximum = Matrix3.Cartesian3.clone(box.maximum, result.maximum); - result.center = Matrix3.Cartesian3.clone(box.center, result.center); - return result; - }; - - /** - * Compares the provided AxisAlignedBoundingBox componentwise and returns - * true if they are equal, false otherwise. - * - * @param {AxisAlignedBoundingBox} [left] The first AxisAlignedBoundingBox. - * @param {AxisAlignedBoundingBox} [right] The second AxisAlignedBoundingBox. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - AxisAlignedBoundingBox.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Matrix3.Cartesian3.equals(left.center, right.center) && - Matrix3.Cartesian3.equals(left.minimum, right.minimum) && - Matrix3.Cartesian3.equals(left.maximum, right.maximum)) - ); - }; - - let intersectScratch = new Matrix3.Cartesian3(); - /** - * Determines which side of a plane a box is located. - * - * @param {AxisAlignedBoundingBox} box The bounding box to test. - * @param {Plane} plane The plane to test against. - * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane - * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is - * on the opposite side, and {@link Intersect.INTERSECTING} if the box - * intersects the plane. - */ - AxisAlignedBoundingBox.intersectPlane = function (box, plane) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("box", box); - Check.Check.defined("plane", plane); - //>>includeEnd('debug'); - - intersectScratch = Matrix3.Cartesian3.subtract( - box.maximum, - box.minimum, - intersectScratch - ); - const h = Matrix3.Cartesian3.multiplyByScalar( - intersectScratch, - 0.5, - intersectScratch - ); //The positive half diagonal - const normal = plane.normal; - const e = - h.x * Math.abs(normal.x) + - h.y * Math.abs(normal.y) + - h.z * Math.abs(normal.z); - const s = Matrix3.Cartesian3.dot(box.center, normal) + plane.distance; //signed distance from center - - if (s - e > 0) { - return Transforms.Intersect.INSIDE; - } - - if (s + e < 0) { - //Not in front because normals point inward - return Transforms.Intersect.OUTSIDE; - } - - return Transforms.Intersect.INTERSECTING; - }; - - /** - * Duplicates this AxisAlignedBoundingBox instance. - * - * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result. - * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided. - */ - AxisAlignedBoundingBox.prototype.clone = function (result) { - return AxisAlignedBoundingBox.clone(this, result); - }; - - /** - * Determines which side of a plane this box is located. - * - * @param {Plane} plane The plane to test against. - * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane - * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is - * on the opposite side, and {@link Intersect.INTERSECTING} if the box - * intersects the plane. - */ - AxisAlignedBoundingBox.prototype.intersectPlane = function (plane) { - return AxisAlignedBoundingBox.intersectPlane(this, plane); - }; - - /** - * Compares this AxisAlignedBoundingBox against the provided AxisAlignedBoundingBox componentwise and returns - * true if they are equal, false otherwise. - * - * @param {AxisAlignedBoundingBox} [right] The right hand side AxisAlignedBoundingBox. - * @returns {Boolean} true if they are equal, false otherwise. - */ - AxisAlignedBoundingBox.prototype.equals = function (right) { - return AxisAlignedBoundingBox.equals(this, right); - }; - - exports.AxisAlignedBoundingBox = AxisAlignedBoundingBox; - -})); -//# sourceMappingURL=AxisAlignedBoundingBox-50342d27.js.map diff --git a/debug/cesium/Workers/AxisAlignedBoundingBox-50342d27.js.map b/debug/cesium/Workers/AxisAlignedBoundingBox-50342d27.js.map deleted file mode 100644 index 3ebbdbf..0000000 --- a/debug/cesium/Workers/AxisAlignedBoundingBox-50342d27.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"AxisAlignedBoundingBox-50342d27.js","sources":["../../../Source/Core/AxisAlignedBoundingBox.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Intersect from \"./Intersect.js\";\r\n\r\n/**\r\n * Creates an instance of an AxisAlignedBoundingBox from the minimum and maximum points along the x, y, and z axes.\r\n * @alias AxisAlignedBoundingBox\r\n * @constructor\r\n *\r\n * @param {Cartesian3} [minimum=Cartesian3.ZERO] The minimum point along the x, y, and z axes.\r\n * @param {Cartesian3} [maximum=Cartesian3.ZERO] The maximum point along the x, y, and z axes.\r\n * @param {Cartesian3} [center] The center of the box; automatically computed if not supplied.\r\n *\r\n * @see BoundingSphere\r\n * @see BoundingRectangle\r\n */\r\nfunction AxisAlignedBoundingBox(minimum, maximum, center) {\r\n /**\r\n * The minimum point defining the bounding box.\r\n * @type {Cartesian3}\r\n * @default {@link Cartesian3.ZERO}\r\n */\r\n this.minimum = Cartesian3.clone(defaultValue(minimum, Cartesian3.ZERO));\r\n\r\n /**\r\n * The maximum point defining the bounding box.\r\n * @type {Cartesian3}\r\n * @default {@link Cartesian3.ZERO}\r\n */\r\n this.maximum = Cartesian3.clone(defaultValue(maximum, Cartesian3.ZERO));\r\n\r\n // If center was not defined, compute it.\r\n if (!defined(center)) {\r\n center = Cartesian3.midpoint(this.minimum, this.maximum, new Cartesian3());\r\n } else {\r\n center = Cartesian3.clone(center);\r\n }\r\n\r\n /**\r\n * The center point of the bounding box.\r\n * @type {Cartesian3}\r\n */\r\n this.center = center;\r\n}\r\n\r\n/**\r\n * Creates an instance of an AxisAlignedBoundingBox from its corners.\r\n *\r\n * @param {Cartesian3} minimum The minimum point along the x, y, and z axes.\r\n * @param {Cartesian3} maximum The maximum point along the x, y, and z axes.\r\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided.\r\n *\r\n * @example\r\n * // Compute an axis aligned bounding box from the two corners.\r\n * const box = Cesium.AxisAlignedBoundingBox.fromCorners(new Cesium.Cartesian3(-1, -1, -1), new Cesium.Cartesian3(1, 1, 1));\r\n */\r\nAxisAlignedBoundingBox.fromCorners = function (minimum, maximum, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"minimum\", minimum);\r\n Check.defined(\"maximum\", maximum);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new AxisAlignedBoundingBox();\r\n }\r\n\r\n result.minimum = Cartesian3.clone(minimum, result.minimum);\r\n result.maximum = Cartesian3.clone(maximum, result.maximum);\r\n result.center = Cartesian3.midpoint(minimum, maximum, result.center);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes an instance of an AxisAlignedBoundingBox. The box is determined by\r\n * finding the points spaced the farthest apart on the x, y, and z axes.\r\n *\r\n * @param {Cartesian3[]} positions List of points that the bounding box will enclose. Each point must have a x, y, and z properties.\r\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided.\r\n *\r\n * @example\r\n * // Compute an axis aligned bounding box enclosing two points.\r\n * const box = Cesium.AxisAlignedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]);\r\n */\r\nAxisAlignedBoundingBox.fromPoints = function (positions, result) {\r\n if (!defined(result)) {\r\n result = new AxisAlignedBoundingBox();\r\n }\r\n\r\n if (!defined(positions) || positions.length === 0) {\r\n result.minimum = Cartesian3.clone(Cartesian3.ZERO, result.minimum);\r\n result.maximum = Cartesian3.clone(Cartesian3.ZERO, result.maximum);\r\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\r\n return result;\r\n }\r\n\r\n let minimumX = positions[0].x;\r\n let minimumY = positions[0].y;\r\n let minimumZ = positions[0].z;\r\n\r\n let maximumX = positions[0].x;\r\n let maximumY = positions[0].y;\r\n let maximumZ = positions[0].z;\r\n\r\n const length = positions.length;\r\n for (let i = 1; i < length; i++) {\r\n const p = positions[i];\r\n const x = p.x;\r\n const y = p.y;\r\n const z = p.z;\r\n\r\n minimumX = Math.min(x, minimumX);\r\n maximumX = Math.max(x, maximumX);\r\n minimumY = Math.min(y, minimumY);\r\n maximumY = Math.max(y, maximumY);\r\n minimumZ = Math.min(z, minimumZ);\r\n maximumZ = Math.max(z, maximumZ);\r\n }\r\n\r\n const minimum = result.minimum;\r\n minimum.x = minimumX;\r\n minimum.y = minimumY;\r\n minimum.z = minimumZ;\r\n\r\n const maximum = result.maximum;\r\n maximum.x = maximumX;\r\n maximum.y = maximumY;\r\n maximum.z = maximumZ;\r\n\r\n result.center = Cartesian3.midpoint(minimum, maximum, result.center);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a AxisAlignedBoundingBox instance.\r\n *\r\n * @param {AxisAlignedBoundingBox} box The bounding box to duplicate.\r\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if none was provided. (Returns undefined if box is undefined)\r\n */\r\nAxisAlignedBoundingBox.clone = function (box, result) {\r\n if (!defined(box)) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new AxisAlignedBoundingBox(box.minimum, box.maximum, box.center);\r\n }\r\n\r\n result.minimum = Cartesian3.clone(box.minimum, result.minimum);\r\n result.maximum = Cartesian3.clone(box.maximum, result.maximum);\r\n result.center = Cartesian3.clone(box.center, result.center);\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided AxisAlignedBoundingBox componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {AxisAlignedBoundingBox} [left] The first AxisAlignedBoundingBox.\r\n * @param {AxisAlignedBoundingBox} [right] The second AxisAlignedBoundingBox.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nAxisAlignedBoundingBox.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Cartesian3.equals(left.center, right.center) &&\r\n Cartesian3.equals(left.minimum, right.minimum) &&\r\n Cartesian3.equals(left.maximum, right.maximum))\r\n );\r\n};\r\n\r\nlet intersectScratch = new Cartesian3();\r\n/**\r\n * Determines which side of a plane a box is located.\r\n *\r\n * @param {AxisAlignedBoundingBox} box The bounding box to test.\r\n * @param {Plane} plane The plane to test against.\r\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\r\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\r\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\r\n * intersects the plane.\r\n */\r\nAxisAlignedBoundingBox.intersectPlane = function (box, plane) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"box\", box);\r\n Check.defined(\"plane\", plane);\r\n //>>includeEnd('debug');\r\n\r\n intersectScratch = Cartesian3.subtract(\r\n box.maximum,\r\n box.minimum,\r\n intersectScratch\r\n );\r\n const h = Cartesian3.multiplyByScalar(\r\n intersectScratch,\r\n 0.5,\r\n intersectScratch\r\n ); //The positive half diagonal\r\n const normal = plane.normal;\r\n const e =\r\n h.x * Math.abs(normal.x) +\r\n h.y * Math.abs(normal.y) +\r\n h.z * Math.abs(normal.z);\r\n const s = Cartesian3.dot(box.center, normal) + plane.distance; //signed distance from center\r\n\r\n if (s - e > 0) {\r\n return Intersect.INSIDE;\r\n }\r\n\r\n if (s + e < 0) {\r\n //Not in front because normals point inward\r\n return Intersect.OUTSIDE;\r\n }\r\n\r\n return Intersect.INTERSECTING;\r\n};\r\n\r\n/**\r\n * Duplicates this AxisAlignedBoundingBox instance.\r\n *\r\n * @param {AxisAlignedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {AxisAlignedBoundingBox} The modified result parameter or a new AxisAlignedBoundingBox instance if one was not provided.\r\n */\r\nAxisAlignedBoundingBox.prototype.clone = function (result) {\r\n return AxisAlignedBoundingBox.clone(this, result);\r\n};\r\n\r\n/**\r\n * Determines which side of a plane this box is located.\r\n *\r\n * @param {Plane} plane The plane to test against.\r\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\r\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\r\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\r\n * intersects the plane.\r\n */\r\nAxisAlignedBoundingBox.prototype.intersectPlane = function (plane) {\r\n return AxisAlignedBoundingBox.intersectPlane(this, plane);\r\n};\r\n\r\n/**\r\n * Compares this AxisAlignedBoundingBox against the provided AxisAlignedBoundingBox componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {AxisAlignedBoundingBox} [right] The right hand side AxisAlignedBoundingBox.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nAxisAlignedBoundingBox.prototype.equals = function (right) {\r\n return AxisAlignedBoundingBox.equals(this, right);\r\n};\r\nexport default AxisAlignedBoundingBox;\r\n"],"names":["Cartesian3","defaultValue","defined","Check","Intersect"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/BoundingRectangle-6617ed83.js b/debug/cesium/Workers/BoundingRectangle-6617ed83.js deleted file mode 100644 index 1dfdcc7..0000000 --- a/debug/cesium/Workers/BoundingRectangle-6617ed83.js +++ /dev/null @@ -1,395 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Transforms-11fb6b0a'], (function (exports, Matrix2, Matrix3, Check, defaultValue, Transforms) { 'use strict'; - - /** - * A bounding rectangle given by a corner, width and height. - * @alias BoundingRectangle - * @constructor - * - * @param {Number} [x=0.0] The x coordinate of the rectangle. - * @param {Number} [y=0.0] The y coordinate of the rectangle. - * @param {Number} [width=0.0] The width of the rectangle. - * @param {Number} [height=0.0] The height of the rectangle. - * - * @see BoundingSphere - * @see Packable - */ - function BoundingRectangle(x, y, width, height) { - /** - * The x coordinate of the rectangle. - * @type {Number} - * @default 0.0 - */ - this.x = defaultValue.defaultValue(x, 0.0); - - /** - * The y coordinate of the rectangle. - * @type {Number} - * @default 0.0 - */ - this.y = defaultValue.defaultValue(y, 0.0); - - /** - * The width of the rectangle. - * @type {Number} - * @default 0.0 - */ - this.width = defaultValue.defaultValue(width, 0.0); - - /** - * The height of the rectangle. - * @type {Number} - * @default 0.0 - */ - this.height = defaultValue.defaultValue(height, 0.0); - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - BoundingRectangle.packedLength = 4; - - /** - * Stores the provided instance into the provided array. - * - * @param {BoundingRectangle} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - BoundingRectangle.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.x; - array[startingIndex++] = value.y; - array[startingIndex++] = value.width; - array[startingIndex] = value.height; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {BoundingRectangle} [result] The object into which to store the result. - * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. - */ - BoundingRectangle.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new BoundingRectangle(); - } - result.x = array[startingIndex++]; - result.y = array[startingIndex++]; - result.width = array[startingIndex++]; - result.height = array[startingIndex]; - return result; - }; - - /** - * Computes a bounding rectangle enclosing the list of 2D points. - * The rectangle is oriented with the corner at the bottom left. - * - * @param {Cartesian2[]} positions List of points that the bounding rectangle will enclose. Each point must have x and y properties. - * @param {BoundingRectangle} [result] The object onto which to store the result. - * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. - */ - BoundingRectangle.fromPoints = function (positions, result) { - if (!defaultValue.defined(result)) { - result = new BoundingRectangle(); - } - - if (!defaultValue.defined(positions) || positions.length === 0) { - result.x = 0; - result.y = 0; - result.width = 0; - result.height = 0; - return result; - } - - const length = positions.length; - - let minimumX = positions[0].x; - let minimumY = positions[0].y; - - let maximumX = positions[0].x; - let maximumY = positions[0].y; - - for (let i = 1; i < length; i++) { - const p = positions[i]; - const x = p.x; - const y = p.y; - - minimumX = Math.min(x, minimumX); - maximumX = Math.max(x, maximumX); - minimumY = Math.min(y, minimumY); - maximumY = Math.max(y, maximumY); - } - - result.x = minimumX; - result.y = minimumY; - result.width = maximumX - minimumX; - result.height = maximumY - minimumY; - return result; - }; - - const defaultProjection = new Transforms.GeographicProjection(); - const fromRectangleLowerLeft = new Matrix3.Cartographic(); - const fromRectangleUpperRight = new Matrix3.Cartographic(); - /** - * Computes a bounding rectangle from a rectangle. - * - * @param {Rectangle} rectangle The valid rectangle used to create a bounding rectangle. - * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D. - * @param {BoundingRectangle} [result] The object onto which to store the result. - * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. - */ - BoundingRectangle.fromRectangle = function (rectangle, projection, result) { - if (!defaultValue.defined(result)) { - result = new BoundingRectangle(); - } - - if (!defaultValue.defined(rectangle)) { - result.x = 0; - result.y = 0; - result.width = 0; - result.height = 0; - return result; - } - - projection = defaultValue.defaultValue(projection, defaultProjection); - - const lowerLeft = projection.project( - Matrix2.Rectangle.southwest(rectangle, fromRectangleLowerLeft) - ); - const upperRight = projection.project( - Matrix2.Rectangle.northeast(rectangle, fromRectangleUpperRight) - ); - - Matrix2.Cartesian2.subtract(upperRight, lowerLeft, upperRight); - - result.x = lowerLeft.x; - result.y = lowerLeft.y; - result.width = upperRight.x; - result.height = upperRight.y; - return result; - }; - - /** - * Duplicates a BoundingRectangle instance. - * - * @param {BoundingRectangle} rectangle The bounding rectangle to duplicate. - * @param {BoundingRectangle} [result] The object onto which to store the result. - * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. (Returns undefined if rectangle is undefined) - */ - BoundingRectangle.clone = function (rectangle, result) { - if (!defaultValue.defined(rectangle)) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new BoundingRectangle( - rectangle.x, - rectangle.y, - rectangle.width, - rectangle.height - ); - } - - result.x = rectangle.x; - result.y = rectangle.y; - result.width = rectangle.width; - result.height = rectangle.height; - return result; - }; - - /** - * Computes a bounding rectangle that is the union of the left and right bounding rectangles. - * - * @param {BoundingRectangle} left A rectangle to enclose in bounding rectangle. - * @param {BoundingRectangle} right A rectangle to enclose in a bounding rectangle. - * @param {BoundingRectangle} [result] The object onto which to store the result. - * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. - */ - BoundingRectangle.union = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new BoundingRectangle(); - } - - const lowerLeftX = Math.min(left.x, right.x); - const lowerLeftY = Math.min(left.y, right.y); - const upperRightX = Math.max(left.x + left.width, right.x + right.width); - const upperRightY = Math.max(left.y + left.height, right.y + right.height); - - result.x = lowerLeftX; - result.y = lowerLeftY; - result.width = upperRightX - lowerLeftX; - result.height = upperRightY - lowerLeftY; - return result; - }; - - /** - * Computes a bounding rectangle by enlarging the provided rectangle until it contains the provided point. - * - * @param {BoundingRectangle} rectangle A rectangle to expand. - * @param {Cartesian2} point A point to enclose in a bounding rectangle. - * @param {BoundingRectangle} [result] The object onto which to store the result. - * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. - */ - BoundingRectangle.expand = function (rectangle, point, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Check.Check.typeOf.object("point", point); - //>>includeEnd('debug'); - - result = BoundingRectangle.clone(rectangle, result); - - const width = point.x - result.x; - const height = point.y - result.y; - - if (width > result.width) { - result.width = width; - } else if (width < 0) { - result.width -= width; - result.x = point.x; - } - - if (height > result.height) { - result.height = height; - } else if (height < 0) { - result.height -= height; - result.y = point.y; - } - - return result; - }; - - /** - * Determines if two rectangles intersect. - * - * @param {BoundingRectangle} left A rectangle to check for intersection. - * @param {BoundingRectangle} right The other rectangle to check for intersection. - * @returns {Intersect} Intersect.INTERSECTING if the rectangles intersect, Intersect.OUTSIDE otherwise. - */ - BoundingRectangle.intersect = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - const leftX = left.x; - const leftY = left.y; - const rightX = right.x; - const rightY = right.y; - if ( - !( - leftX > rightX + right.width || - leftX + left.width < rightX || - leftY + left.height < rightY || - leftY > rightY + right.height - ) - ) { - return Transforms.Intersect.INTERSECTING; - } - - return Transforms.Intersect.OUTSIDE; - }; - - /** - * Compares the provided BoundingRectangles componentwise and returns - * true if they are equal, false otherwise. - * - * @param {BoundingRectangle} [left] The first BoundingRectangle. - * @param {BoundingRectangle} [right] The second BoundingRectangle. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - BoundingRectangle.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.x === right.x && - left.y === right.y && - left.width === right.width && - left.height === right.height) - ); - }; - - /** - * Duplicates this BoundingRectangle instance. - * - * @param {BoundingRectangle} [result] The object onto which to store the result. - * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. - */ - BoundingRectangle.prototype.clone = function (result) { - return BoundingRectangle.clone(this, result); - }; - - /** - * Determines if this rectangle intersects with another. - * - * @param {BoundingRectangle} right A rectangle to check for intersection. - * @returns {Intersect} Intersect.INTERSECTING if the rectangles intersect, Intersect.OUTSIDE otherwise. - */ - BoundingRectangle.prototype.intersect = function (right) { - return BoundingRectangle.intersect(this, right); - }; - - /** - * Compares this BoundingRectangle against the provided BoundingRectangle componentwise and returns - * true if they are equal, false otherwise. - * - * @param {BoundingRectangle} [right] The right hand side BoundingRectangle. - * @returns {Boolean} true if they are equal, false otherwise. - */ - BoundingRectangle.prototype.equals = function (right) { - return BoundingRectangle.equals(this, right); - }; - - exports.BoundingRectangle = BoundingRectangle; - -})); -//# sourceMappingURL=BoundingRectangle-6617ed83.js.map diff --git a/debug/cesium/Workers/BoundingRectangle-6617ed83.js.map b/debug/cesium/Workers/BoundingRectangle-6617ed83.js.map deleted file mode 100644 index 14b5f51..0000000 --- a/debug/cesium/Workers/BoundingRectangle-6617ed83.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"BoundingRectangle-6617ed83.js","sources":["../../../Source/Core/BoundingRectangle.js"],"sourcesContent":["import Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport GeographicProjection from \"./GeographicProjection.js\";\r\nimport Intersect from \"./Intersect.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\n\r\n/**\r\n * A bounding rectangle given by a corner, width and height.\r\n * @alias BoundingRectangle\r\n * @constructor\r\n *\r\n * @param {Number} [x=0.0] The x coordinate of the rectangle.\r\n * @param {Number} [y=0.0] The y coordinate of the rectangle.\r\n * @param {Number} [width=0.0] The width of the rectangle.\r\n * @param {Number} [height=0.0] The height of the rectangle.\r\n *\r\n * @see BoundingSphere\r\n * @see Packable\r\n */\r\nfunction BoundingRectangle(x, y, width, height) {\r\n /**\r\n * The x coordinate of the rectangle.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.x = defaultValue(x, 0.0);\r\n\r\n /**\r\n * The y coordinate of the rectangle.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.y = defaultValue(y, 0.0);\r\n\r\n /**\r\n * The width of the rectangle.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.width = defaultValue(width, 0.0);\r\n\r\n /**\r\n * The height of the rectangle.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.height = defaultValue(height, 0.0);\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nBoundingRectangle.packedLength = 4;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {BoundingRectangle} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nBoundingRectangle.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.x;\r\n array[startingIndex++] = value.y;\r\n array[startingIndex++] = value.width;\r\n array[startingIndex] = value.height;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {BoundingRectangle} [result] The object into which to store the result.\r\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\r\n */\r\nBoundingRectangle.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new BoundingRectangle();\r\n }\r\n result.x = array[startingIndex++];\r\n result.y = array[startingIndex++];\r\n result.width = array[startingIndex++];\r\n result.height = array[startingIndex];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a bounding rectangle enclosing the list of 2D points.\r\n * The rectangle is oriented with the corner at the bottom left.\r\n *\r\n * @param {Cartesian2[]} positions List of points that the bounding rectangle will enclose. Each point must have x and y properties.\r\n * @param {BoundingRectangle} [result] The object onto which to store the result.\r\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\r\n */\r\nBoundingRectangle.fromPoints = function (positions, result) {\r\n if (!defined(result)) {\r\n result = new BoundingRectangle();\r\n }\r\n\r\n if (!defined(positions) || positions.length === 0) {\r\n result.x = 0;\r\n result.y = 0;\r\n result.width = 0;\r\n result.height = 0;\r\n return result;\r\n }\r\n\r\n const length = positions.length;\r\n\r\n let minimumX = positions[0].x;\r\n let minimumY = positions[0].y;\r\n\r\n let maximumX = positions[0].x;\r\n let maximumY = positions[0].y;\r\n\r\n for (let i = 1; i < length; i++) {\r\n const p = positions[i];\r\n const x = p.x;\r\n const y = p.y;\r\n\r\n minimumX = Math.min(x, minimumX);\r\n maximumX = Math.max(x, maximumX);\r\n minimumY = Math.min(y, minimumY);\r\n maximumY = Math.max(y, maximumY);\r\n }\r\n\r\n result.x = minimumX;\r\n result.y = minimumY;\r\n result.width = maximumX - minimumX;\r\n result.height = maximumY - minimumY;\r\n return result;\r\n};\r\n\r\nconst defaultProjection = new GeographicProjection();\r\nconst fromRectangleLowerLeft = new Cartographic();\r\nconst fromRectangleUpperRight = new Cartographic();\r\n/**\r\n * Computes a bounding rectangle from a rectangle.\r\n *\r\n * @param {Rectangle} rectangle The valid rectangle used to create a bounding rectangle.\r\n * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\r\n * @param {BoundingRectangle} [result] The object onto which to store the result.\r\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\r\n */\r\nBoundingRectangle.fromRectangle = function (rectangle, projection, result) {\r\n if (!defined(result)) {\r\n result = new BoundingRectangle();\r\n }\r\n\r\n if (!defined(rectangle)) {\r\n result.x = 0;\r\n result.y = 0;\r\n result.width = 0;\r\n result.height = 0;\r\n return result;\r\n }\r\n\r\n projection = defaultValue(projection, defaultProjection);\r\n\r\n const lowerLeft = projection.project(\r\n Rectangle.southwest(rectangle, fromRectangleLowerLeft)\r\n );\r\n const upperRight = projection.project(\r\n Rectangle.northeast(rectangle, fromRectangleUpperRight)\r\n );\r\n\r\n Cartesian2.subtract(upperRight, lowerLeft, upperRight);\r\n\r\n result.x = lowerLeft.x;\r\n result.y = lowerLeft.y;\r\n result.width = upperRight.x;\r\n result.height = upperRight.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a BoundingRectangle instance.\r\n *\r\n * @param {BoundingRectangle} rectangle The bounding rectangle to duplicate.\r\n * @param {BoundingRectangle} [result] The object onto which to store the result.\r\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided. (Returns undefined if rectangle is undefined)\r\n */\r\nBoundingRectangle.clone = function (rectangle, result) {\r\n if (!defined(rectangle)) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new BoundingRectangle(\r\n rectangle.x,\r\n rectangle.y,\r\n rectangle.width,\r\n rectangle.height\r\n );\r\n }\r\n\r\n result.x = rectangle.x;\r\n result.y = rectangle.y;\r\n result.width = rectangle.width;\r\n result.height = rectangle.height;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a bounding rectangle that is the union of the left and right bounding rectangles.\r\n *\r\n * @param {BoundingRectangle} left A rectangle to enclose in bounding rectangle.\r\n * @param {BoundingRectangle} right A rectangle to enclose in a bounding rectangle.\r\n * @param {BoundingRectangle} [result] The object onto which to store the result.\r\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\r\n */\r\nBoundingRectangle.union = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new BoundingRectangle();\r\n }\r\n\r\n const lowerLeftX = Math.min(left.x, right.x);\r\n const lowerLeftY = Math.min(left.y, right.y);\r\n const upperRightX = Math.max(left.x + left.width, right.x + right.width);\r\n const upperRightY = Math.max(left.y + left.height, right.y + right.height);\r\n\r\n result.x = lowerLeftX;\r\n result.y = lowerLeftY;\r\n result.width = upperRightX - lowerLeftX;\r\n result.height = upperRightY - lowerLeftY;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a bounding rectangle by enlarging the provided rectangle until it contains the provided point.\r\n *\r\n * @param {BoundingRectangle} rectangle A rectangle to expand.\r\n * @param {Cartesian2} point A point to enclose in a bounding rectangle.\r\n * @param {BoundingRectangle} [result] The object onto which to store the result.\r\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\r\n */\r\nBoundingRectangle.expand = function (rectangle, point, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Check.typeOf.object(\"point\", point);\r\n //>>includeEnd('debug');\r\n\r\n result = BoundingRectangle.clone(rectangle, result);\r\n\r\n const width = point.x - result.x;\r\n const height = point.y - result.y;\r\n\r\n if (width > result.width) {\r\n result.width = width;\r\n } else if (width < 0) {\r\n result.width -= width;\r\n result.x = point.x;\r\n }\r\n\r\n if (height > result.height) {\r\n result.height = height;\r\n } else if (height < 0) {\r\n result.height -= height;\r\n result.y = point.y;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Determines if two rectangles intersect.\r\n *\r\n * @param {BoundingRectangle} left A rectangle to check for intersection.\r\n * @param {BoundingRectangle} right The other rectangle to check for intersection.\r\n * @returns {Intersect} Intersect.INTERSECTING if the rectangles intersect, Intersect.OUTSIDE otherwise.\r\n */\r\nBoundingRectangle.intersect = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n const leftX = left.x;\r\n const leftY = left.y;\r\n const rightX = right.x;\r\n const rightY = right.y;\r\n if (\r\n !(\r\n leftX > rightX + right.width ||\r\n leftX + left.width < rightX ||\r\n leftY + left.height < rightY ||\r\n leftY > rightY + right.height\r\n )\r\n ) {\r\n return Intersect.INTERSECTING;\r\n }\r\n\r\n return Intersect.OUTSIDE;\r\n};\r\n\r\n/**\r\n * Compares the provided BoundingRectangles componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {BoundingRectangle} [left] The first BoundingRectangle.\r\n * @param {BoundingRectangle} [right] The second BoundingRectangle.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nBoundingRectangle.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.x === right.x &&\r\n left.y === right.y &&\r\n left.width === right.width &&\r\n left.height === right.height)\r\n );\r\n};\r\n\r\n/**\r\n * Duplicates this BoundingRectangle instance.\r\n *\r\n * @param {BoundingRectangle} [result] The object onto which to store the result.\r\n * @returns {BoundingRectangle} The modified result parameter or a new BoundingRectangle instance if one was not provided.\r\n */\r\nBoundingRectangle.prototype.clone = function (result) {\r\n return BoundingRectangle.clone(this, result);\r\n};\r\n\r\n/**\r\n * Determines if this rectangle intersects with another.\r\n *\r\n * @param {BoundingRectangle} right A rectangle to check for intersection.\r\n * @returns {Intersect} Intersect.INTERSECTING if the rectangles intersect, Intersect.OUTSIDE otherwise.\r\n */\r\nBoundingRectangle.prototype.intersect = function (right) {\r\n return BoundingRectangle.intersect(this, right);\r\n};\r\n\r\n/**\r\n * Compares this BoundingRectangle against the provided BoundingRectangle componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {BoundingRectangle} [right] The right hand side BoundingRectangle.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nBoundingRectangle.prototype.equals = function (right) {\r\n return BoundingRectangle.equals(this, right);\r\n};\r\nexport default BoundingRectangle;\r\n"],"names":["defaultValue","Check","defined","GeographicProjection","Cartographic","Rectangle","Cartesian2","Intersect"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/BoxGeometry-2c7f2d2d.js b/debug/cesium/Workers/BoxGeometry-2c7f2d2d.js deleted file mode 100644 index ae13e28..0000000 --- a/debug/cesium/Workers/BoxGeometry-2c7f2d2d.js +++ /dev/null @@ -1,910 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './VertexFormat-f2d74c96'], (function (exports, Transforms, Matrix3, Check, ComponentDatatype, defaultValue, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, VertexFormat) { 'use strict'; - - const diffScratch = new Matrix3.Cartesian3(); - - /** - * Describes a cube centered at the origin. - * - * @alias BoxGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.minimum The minimum x, y, and z coordinates of the box. - * @param {Cartesian3} options.maximum The maximum x, y, and z coordinates of the box. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * - * @see BoxGeometry.fromDimensions - * @see BoxGeometry.createGeometry - * @see Packable - * - * @demo {@link https://sandcastle.cesium.com/index.html?src=Box.html|Cesium Sandcastle Box Demo} - * - * @example - * const box = new Cesium.BoxGeometry({ - * vertexFormat : Cesium.VertexFormat.POSITION_ONLY, - * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0), - * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0) - * }); - * const geometry = Cesium.BoxGeometry.createGeometry(box); - */ - function BoxGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const min = options.minimum; - const max = options.maximum; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("min", min); - Check.Check.typeOf.object("max", max); - if ( - defaultValue.defined(options.offsetAttribute) && - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP - ) { - throw new Check.DeveloperError( - "GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry." - ); - } - //>>includeEnd('debug'); - - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - - this._minimum = Matrix3.Cartesian3.clone(min); - this._maximum = Matrix3.Cartesian3.clone(max); - this._vertexFormat = vertexFormat; - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createBoxGeometry"; - } - - /** - * Creates a cube centered at the origin given its dimensions. - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.dimensions The width, depth, and height of the box stored in the x, y, and z coordinates of the Cartesian3, respectively. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @returns {BoxGeometry} - * - * @exception {DeveloperError} All dimensions components must be greater than or equal to zero. - * - * - * @example - * const box = Cesium.BoxGeometry.fromDimensions({ - * vertexFormat : Cesium.VertexFormat.POSITION_ONLY, - * dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0) - * }); - * const geometry = Cesium.BoxGeometry.createGeometry(box); - * - * @see BoxGeometry.createGeometry - */ - BoxGeometry.fromDimensions = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const dimensions = options.dimensions; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("dimensions", dimensions); - Check.Check.typeOf.number.greaterThanOrEquals("dimensions.x", dimensions.x, 0); - Check.Check.typeOf.number.greaterThanOrEquals("dimensions.y", dimensions.y, 0); - Check.Check.typeOf.number.greaterThanOrEquals("dimensions.z", dimensions.z, 0); - //>>includeEnd('debug'); - - const corner = Matrix3.Cartesian3.multiplyByScalar(dimensions, 0.5, new Matrix3.Cartesian3()); - - return new BoxGeometry({ - minimum: Matrix3.Cartesian3.negate(corner, new Matrix3.Cartesian3()), - maximum: corner, - vertexFormat: options.vertexFormat, - offsetAttribute: options.offsetAttribute, - }); - }; - - /** - * Creates a cube from the dimensions of an AxisAlignedBoundingBox. - * - * @param {AxisAlignedBoundingBox} boundingBox A description of the AxisAlignedBoundingBox. - * @returns {BoxGeometry} - * - * - * - * @example - * const aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ])); - * const box = Cesium.BoxGeometry.fromAxisAlignedBoundingBox(aabb); - * - * @see BoxGeometry.createGeometry - */ - BoxGeometry.fromAxisAlignedBoundingBox = function (boundingBox) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("boundingBox", boundingBox); - //>>includeEnd('debug'); - - return new BoxGeometry({ - minimum: boundingBox.minimum, - maximum: boundingBox.maximum, - }); - }; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - BoxGeometry.packedLength = - 2 * Matrix3.Cartesian3.packedLength + VertexFormat.VertexFormat.packedLength + 1; - - /** - * Stores the provided instance into the provided array. - * - * @param {BoxGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - BoxGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix3.Cartesian3.pack(value._minimum, array, startingIndex); - Matrix3.Cartesian3.pack( - value._maximum, - array, - startingIndex + Matrix3.Cartesian3.packedLength - ); - VertexFormat.VertexFormat.pack( - value._vertexFormat, - array, - startingIndex + 2 * Matrix3.Cartesian3.packedLength - ); - array[ - startingIndex + 2 * Matrix3.Cartesian3.packedLength + VertexFormat.VertexFormat.packedLength - ] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchMin = new Matrix3.Cartesian3(); - const scratchMax = new Matrix3.Cartesian3(); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - minimum: scratchMin, - maximum: scratchMax, - vertexFormat: scratchVertexFormat, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {BoxGeometry} [result] The object into which to store the result. - * @returns {BoxGeometry} The modified result parameter or a new BoxGeometry instance if one was not provided. - */ - BoxGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const min = Matrix3.Cartesian3.unpack(array, startingIndex, scratchMin); - const max = Matrix3.Cartesian3.unpack( - array, - startingIndex + Matrix3.Cartesian3.packedLength, - scratchMax - ); - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex + 2 * Matrix3.Cartesian3.packedLength, - scratchVertexFormat - ); - const offsetAttribute = - array[ - startingIndex + 2 * Matrix3.Cartesian3.packedLength + VertexFormat.VertexFormat.packedLength - ]; - - if (!defaultValue.defined(result)) { - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - return new BoxGeometry(scratchOptions); - } - - result._minimum = Matrix3.Cartesian3.clone(min, result._minimum); - result._maximum = Matrix3.Cartesian3.clone(max, result._maximum); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the geometric representation of a box, including its vertices, indices, and a bounding sphere. - * - * @param {BoxGeometry} boxGeometry A description of the box. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - BoxGeometry.createGeometry = function (boxGeometry) { - const min = boxGeometry._minimum; - const max = boxGeometry._maximum; - const vertexFormat = boxGeometry._vertexFormat; - - if (Matrix3.Cartesian3.equals(min, max)) { - return; - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - let indices; - let positions; - - if ( - vertexFormat.position && - (vertexFormat.st || - vertexFormat.normal || - vertexFormat.tangent || - vertexFormat.bitangent) - ) { - if (vertexFormat.position) { - // 8 corner points. Duplicated 3 times each for each incident edge/face. - positions = new Float64Array(6 * 4 * 3); - - // +z face - positions[0] = min.x; - positions[1] = min.y; - positions[2] = max.z; - positions[3] = max.x; - positions[4] = min.y; - positions[5] = max.z; - positions[6] = max.x; - positions[7] = max.y; - positions[8] = max.z; - positions[9] = min.x; - positions[10] = max.y; - positions[11] = max.z; - - // -z face - positions[12] = min.x; - positions[13] = min.y; - positions[14] = min.z; - positions[15] = max.x; - positions[16] = min.y; - positions[17] = min.z; - positions[18] = max.x; - positions[19] = max.y; - positions[20] = min.z; - positions[21] = min.x; - positions[22] = max.y; - positions[23] = min.z; - - // +x face - positions[24] = max.x; - positions[25] = min.y; - positions[26] = min.z; - positions[27] = max.x; - positions[28] = max.y; - positions[29] = min.z; - positions[30] = max.x; - positions[31] = max.y; - positions[32] = max.z; - positions[33] = max.x; - positions[34] = min.y; - positions[35] = max.z; - - // -x face - positions[36] = min.x; - positions[37] = min.y; - positions[38] = min.z; - positions[39] = min.x; - positions[40] = max.y; - positions[41] = min.z; - positions[42] = min.x; - positions[43] = max.y; - positions[44] = max.z; - positions[45] = min.x; - positions[46] = min.y; - positions[47] = max.z; - - // +y face - positions[48] = min.x; - positions[49] = max.y; - positions[50] = min.z; - positions[51] = max.x; - positions[52] = max.y; - positions[53] = min.z; - positions[54] = max.x; - positions[55] = max.y; - positions[56] = max.z; - positions[57] = min.x; - positions[58] = max.y; - positions[59] = max.z; - - // -y face - positions[60] = min.x; - positions[61] = min.y; - positions[62] = min.z; - positions[63] = max.x; - positions[64] = min.y; - positions[65] = min.z; - positions[66] = max.x; - positions[67] = min.y; - positions[68] = max.z; - positions[69] = min.x; - positions[70] = min.y; - positions[71] = max.z; - - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - } - - if (vertexFormat.normal) { - const normals = new Float32Array(6 * 4 * 3); - - // +z face - normals[0] = 0.0; - normals[1] = 0.0; - normals[2] = 1.0; - normals[3] = 0.0; - normals[4] = 0.0; - normals[5] = 1.0; - normals[6] = 0.0; - normals[7] = 0.0; - normals[8] = 1.0; - normals[9] = 0.0; - normals[10] = 0.0; - normals[11] = 1.0; - - // -z face - normals[12] = 0.0; - normals[13] = 0.0; - normals[14] = -1.0; - normals[15] = 0.0; - normals[16] = 0.0; - normals[17] = -1.0; - normals[18] = 0.0; - normals[19] = 0.0; - normals[20] = -1.0; - normals[21] = 0.0; - normals[22] = 0.0; - normals[23] = -1.0; - - // +x face - normals[24] = 1.0; - normals[25] = 0.0; - normals[26] = 0.0; - normals[27] = 1.0; - normals[28] = 0.0; - normals[29] = 0.0; - normals[30] = 1.0; - normals[31] = 0.0; - normals[32] = 0.0; - normals[33] = 1.0; - normals[34] = 0.0; - normals[35] = 0.0; - - // -x face - normals[36] = -1.0; - normals[37] = 0.0; - normals[38] = 0.0; - normals[39] = -1.0; - normals[40] = 0.0; - normals[41] = 0.0; - normals[42] = -1.0; - normals[43] = 0.0; - normals[44] = 0.0; - normals[45] = -1.0; - normals[46] = 0.0; - normals[47] = 0.0; - - // +y face - normals[48] = 0.0; - normals[49] = 1.0; - normals[50] = 0.0; - normals[51] = 0.0; - normals[52] = 1.0; - normals[53] = 0.0; - normals[54] = 0.0; - normals[55] = 1.0; - normals[56] = 0.0; - normals[57] = 0.0; - normals[58] = 1.0; - normals[59] = 0.0; - - // -y face - normals[60] = 0.0; - normals[61] = -1.0; - normals[62] = 0.0; - normals[63] = 0.0; - normals[64] = -1.0; - normals[65] = 0.0; - normals[66] = 0.0; - normals[67] = -1.0; - normals[68] = 0.0; - normals[69] = 0.0; - normals[70] = -1.0; - normals[71] = 0.0; - - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.st) { - const texCoords = new Float32Array(6 * 4 * 2); - - // +z face - texCoords[0] = 0.0; - texCoords[1] = 0.0; - texCoords[2] = 1.0; - texCoords[3] = 0.0; - texCoords[4] = 1.0; - texCoords[5] = 1.0; - texCoords[6] = 0.0; - texCoords[7] = 1.0; - - // -z face - texCoords[8] = 1.0; - texCoords[9] = 0.0; - texCoords[10] = 0.0; - texCoords[11] = 0.0; - texCoords[12] = 0.0; - texCoords[13] = 1.0; - texCoords[14] = 1.0; - texCoords[15] = 1.0; - - //+x face - texCoords[16] = 0.0; - texCoords[17] = 0.0; - texCoords[18] = 1.0; - texCoords[19] = 0.0; - texCoords[20] = 1.0; - texCoords[21] = 1.0; - texCoords[22] = 0.0; - texCoords[23] = 1.0; - - // -x face - texCoords[24] = 1.0; - texCoords[25] = 0.0; - texCoords[26] = 0.0; - texCoords[27] = 0.0; - texCoords[28] = 0.0; - texCoords[29] = 1.0; - texCoords[30] = 1.0; - texCoords[31] = 1.0; - - // +y face - texCoords[32] = 1.0; - texCoords[33] = 0.0; - texCoords[34] = 0.0; - texCoords[35] = 0.0; - texCoords[36] = 0.0; - texCoords[37] = 1.0; - texCoords[38] = 1.0; - texCoords[39] = 1.0; - - // -y face - texCoords[40] = 0.0; - texCoords[41] = 0.0; - texCoords[42] = 1.0; - texCoords[43] = 0.0; - texCoords[44] = 1.0; - texCoords[45] = 1.0; - texCoords[46] = 0.0; - texCoords[47] = 1.0; - - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: texCoords, - }); - } - - if (vertexFormat.tangent) { - const tangents = new Float32Array(6 * 4 * 3); - - // +z face - tangents[0] = 1.0; - tangents[1] = 0.0; - tangents[2] = 0.0; - tangents[3] = 1.0; - tangents[4] = 0.0; - tangents[5] = 0.0; - tangents[6] = 1.0; - tangents[7] = 0.0; - tangents[8] = 0.0; - tangents[9] = 1.0; - tangents[10] = 0.0; - tangents[11] = 0.0; - - // -z face - tangents[12] = -1.0; - tangents[13] = 0.0; - tangents[14] = 0.0; - tangents[15] = -1.0; - tangents[16] = 0.0; - tangents[17] = 0.0; - tangents[18] = -1.0; - tangents[19] = 0.0; - tangents[20] = 0.0; - tangents[21] = -1.0; - tangents[22] = 0.0; - tangents[23] = 0.0; - - // +x face - tangents[24] = 0.0; - tangents[25] = 1.0; - tangents[26] = 0.0; - tangents[27] = 0.0; - tangents[28] = 1.0; - tangents[29] = 0.0; - tangents[30] = 0.0; - tangents[31] = 1.0; - tangents[32] = 0.0; - tangents[33] = 0.0; - tangents[34] = 1.0; - tangents[35] = 0.0; - - // -x face - tangents[36] = 0.0; - tangents[37] = -1.0; - tangents[38] = 0.0; - tangents[39] = 0.0; - tangents[40] = -1.0; - tangents[41] = 0.0; - tangents[42] = 0.0; - tangents[43] = -1.0; - tangents[44] = 0.0; - tangents[45] = 0.0; - tangents[46] = -1.0; - tangents[47] = 0.0; - - // +y face - tangents[48] = -1.0; - tangents[49] = 0.0; - tangents[50] = 0.0; - tangents[51] = -1.0; - tangents[52] = 0.0; - tangents[53] = 0.0; - tangents[54] = -1.0; - tangents[55] = 0.0; - tangents[56] = 0.0; - tangents[57] = -1.0; - tangents[58] = 0.0; - tangents[59] = 0.0; - - // -y face - tangents[60] = 1.0; - tangents[61] = 0.0; - tangents[62] = 0.0; - tangents[63] = 1.0; - tangents[64] = 0.0; - tangents[65] = 0.0; - tangents[66] = 1.0; - tangents[67] = 0.0; - tangents[68] = 0.0; - tangents[69] = 1.0; - tangents[70] = 0.0; - tangents[71] = 0.0; - - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - const bitangents = new Float32Array(6 * 4 * 3); - - // +z face - bitangents[0] = 0.0; - bitangents[1] = 1.0; - bitangents[2] = 0.0; - bitangents[3] = 0.0; - bitangents[4] = 1.0; - bitangents[5] = 0.0; - bitangents[6] = 0.0; - bitangents[7] = 1.0; - bitangents[8] = 0.0; - bitangents[9] = 0.0; - bitangents[10] = 1.0; - bitangents[11] = 0.0; - - // -z face - bitangents[12] = 0.0; - bitangents[13] = 1.0; - bitangents[14] = 0.0; - bitangents[15] = 0.0; - bitangents[16] = 1.0; - bitangents[17] = 0.0; - bitangents[18] = 0.0; - bitangents[19] = 1.0; - bitangents[20] = 0.0; - bitangents[21] = 0.0; - bitangents[22] = 1.0; - bitangents[23] = 0.0; - - // +x face - bitangents[24] = 0.0; - bitangents[25] = 0.0; - bitangents[26] = 1.0; - bitangents[27] = 0.0; - bitangents[28] = 0.0; - bitangents[29] = 1.0; - bitangents[30] = 0.0; - bitangents[31] = 0.0; - bitangents[32] = 1.0; - bitangents[33] = 0.0; - bitangents[34] = 0.0; - bitangents[35] = 1.0; - - // -x face - bitangents[36] = 0.0; - bitangents[37] = 0.0; - bitangents[38] = 1.0; - bitangents[39] = 0.0; - bitangents[40] = 0.0; - bitangents[41] = 1.0; - bitangents[42] = 0.0; - bitangents[43] = 0.0; - bitangents[44] = 1.0; - bitangents[45] = 0.0; - bitangents[46] = 0.0; - bitangents[47] = 1.0; - - // +y face - bitangents[48] = 0.0; - bitangents[49] = 0.0; - bitangents[50] = 1.0; - bitangents[51] = 0.0; - bitangents[52] = 0.0; - bitangents[53] = 1.0; - bitangents[54] = 0.0; - bitangents[55] = 0.0; - bitangents[56] = 1.0; - bitangents[57] = 0.0; - bitangents[58] = 0.0; - bitangents[59] = 1.0; - - // -y face - bitangents[60] = 0.0; - bitangents[61] = 0.0; - bitangents[62] = 1.0; - bitangents[63] = 0.0; - bitangents[64] = 0.0; - bitangents[65] = 1.0; - bitangents[66] = 0.0; - bitangents[67] = 0.0; - bitangents[68] = 1.0; - bitangents[69] = 0.0; - bitangents[70] = 0.0; - bitangents[71] = 1.0; - - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - - // 12 triangles: 6 faces, 2 triangles each. - indices = new Uint16Array(6 * 2 * 3); - - // +z face - indices[0] = 0; - indices[1] = 1; - indices[2] = 2; - indices[3] = 0; - indices[4] = 2; - indices[5] = 3; - - // -z face - indices[6] = 4 + 2; - indices[7] = 4 + 1; - indices[8] = 4 + 0; - indices[9] = 4 + 3; - indices[10] = 4 + 2; - indices[11] = 4 + 0; - - // +x face - indices[12] = 8 + 0; - indices[13] = 8 + 1; - indices[14] = 8 + 2; - indices[15] = 8 + 0; - indices[16] = 8 + 2; - indices[17] = 8 + 3; - - // -x face - indices[18] = 12 + 2; - indices[19] = 12 + 1; - indices[20] = 12 + 0; - indices[21] = 12 + 3; - indices[22] = 12 + 2; - indices[23] = 12 + 0; - - // +y face - indices[24] = 16 + 2; - indices[25] = 16 + 1; - indices[26] = 16 + 0; - indices[27] = 16 + 3; - indices[28] = 16 + 2; - indices[29] = 16 + 0; - - // -y face - indices[30] = 20 + 0; - indices[31] = 20 + 1; - indices[32] = 20 + 2; - indices[33] = 20 + 0; - indices[34] = 20 + 2; - indices[35] = 20 + 3; - } else { - // Positions only - no need to duplicate corner points - positions = new Float64Array(8 * 3); - - positions[0] = min.x; - positions[1] = min.y; - positions[2] = min.z; - positions[3] = max.x; - positions[4] = min.y; - positions[5] = min.z; - positions[6] = max.x; - positions[7] = max.y; - positions[8] = min.z; - positions[9] = min.x; - positions[10] = max.y; - positions[11] = min.z; - positions[12] = min.x; - positions[13] = min.y; - positions[14] = max.z; - positions[15] = max.x; - positions[16] = min.y; - positions[17] = max.z; - positions[18] = max.x; - positions[19] = max.y; - positions[20] = max.z; - positions[21] = min.x; - positions[22] = max.y; - positions[23] = max.z; - - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - - // 12 triangles: 6 faces, 2 triangles each. - indices = new Uint16Array(6 * 2 * 3); - - // plane z = corner.Z - indices[0] = 4; - indices[1] = 5; - indices[2] = 6; - indices[3] = 4; - indices[4] = 6; - indices[5] = 7; - - // plane z = -corner.Z - indices[6] = 1; - indices[7] = 0; - indices[8] = 3; - indices[9] = 1; - indices[10] = 3; - indices[11] = 2; - - // plane x = corner.X - indices[12] = 1; - indices[13] = 6; - indices[14] = 5; - indices[15] = 1; - indices[16] = 2; - indices[17] = 6; - - // plane y = corner.Y - indices[18] = 2; - indices[19] = 3; - indices[20] = 7; - indices[21] = 2; - indices[22] = 7; - indices[23] = 6; - - // plane x = -corner.X - indices[24] = 3; - indices[25] = 0; - indices[26] = 4; - indices[27] = 3; - indices[28] = 4; - indices[29] = 7; - - // plane y = -corner.Y - indices[30] = 0; - indices[31] = 1; - indices[32] = 5; - indices[33] = 0; - indices[34] = 5; - indices[35] = 4; - } - - const diff = Matrix3.Cartesian3.subtract(max, min, diffScratch); - const radius = Matrix3.Cartesian3.magnitude(diff) * 0.5; - - if (defaultValue.defined(boxGeometry._offsetAttribute)) { - const length = positions.length; - const offsetValue = - boxGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: new Transforms.BoundingSphere(Matrix3.Cartesian3.ZERO, radius), - offsetAttribute: boxGeometry._offsetAttribute, - }); - }; - - let unitBoxGeometry; - - /** - * Returns the geometric representation of a unit box, including its vertices, indices, and a bounding sphere. - * @returns {Geometry} The computed vertices and indices. - * - * @private - */ - BoxGeometry.getUnitBox = function () { - if (!defaultValue.defined(unitBoxGeometry)) { - unitBoxGeometry = BoxGeometry.createGeometry( - BoxGeometry.fromDimensions({ - dimensions: new Matrix3.Cartesian3(1.0, 1.0, 1.0), - vertexFormat: VertexFormat.VertexFormat.POSITION_ONLY, - }) - ); - } - return unitBoxGeometry; - }; - - exports.BoxGeometry = BoxGeometry; - -})); -//# sourceMappingURL=BoxGeometry-2c7f2d2d.js.map diff --git a/debug/cesium/Workers/BoxGeometry-2c7f2d2d.js.map b/debug/cesium/Workers/BoxGeometry-2c7f2d2d.js.map deleted file mode 100644 index 5f6a569..0000000 --- a/debug/cesium/Workers/BoxGeometry-2c7f2d2d.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"BoxGeometry-2c7f2d2d.js","sources":["../../../Source/Core/BoxGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst diffScratch = new Cartesian3();\r\n\r\n/**\r\n * Describes a cube centered at the origin.\r\n *\r\n * @alias BoxGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.minimum The minimum x, y, and z coordinates of the box.\r\n * @param {Cartesian3} options.maximum The maximum x, y, and z coordinates of the box.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n *\r\n * @see BoxGeometry.fromDimensions\r\n * @see BoxGeometry.createGeometry\r\n * @see Packable\r\n *\r\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Box.html|Cesium Sandcastle Box Demo}\r\n *\r\n * @example\r\n * const box = new Cesium.BoxGeometry({\r\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\r\n * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0),\r\n * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0)\r\n * });\r\n * const geometry = Cesium.BoxGeometry.createGeometry(box);\r\n */\r\nfunction BoxGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const min = options.minimum;\r\n const max = options.maximum;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"min\", min);\r\n Check.typeOf.object(\"max\", max);\r\n if (\r\n defined(options.offsetAttribute) &&\r\n options.offsetAttribute === GeometryOffsetAttribute.TOP\r\n ) {\r\n throw new DeveloperError(\r\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n\r\n this._minimum = Cartesian3.clone(min);\r\n this._maximum = Cartesian3.clone(max);\r\n this._vertexFormat = vertexFormat;\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createBoxGeometry\";\r\n}\r\n\r\n/**\r\n * Creates a cube centered at the origin given its dimensions.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.dimensions The width, depth, and height of the box stored in the x, y, and z coordinates of the Cartesian3, respectively.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @returns {BoxGeometry}\r\n *\r\n * @exception {DeveloperError} All dimensions components must be greater than or equal to zero.\r\n *\r\n *\r\n * @example\r\n * const box = Cesium.BoxGeometry.fromDimensions({\r\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\r\n * dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0)\r\n * });\r\n * const geometry = Cesium.BoxGeometry.createGeometry(box);\r\n *\r\n * @see BoxGeometry.createGeometry\r\n */\r\nBoxGeometry.fromDimensions = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const dimensions = options.dimensions;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"dimensions\", dimensions);\r\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.x\", dimensions.x, 0);\r\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.y\", dimensions.y, 0);\r\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.z\", dimensions.z, 0);\r\n //>>includeEnd('debug');\r\n\r\n const corner = Cartesian3.multiplyByScalar(dimensions, 0.5, new Cartesian3());\r\n\r\n return new BoxGeometry({\r\n minimum: Cartesian3.negate(corner, new Cartesian3()),\r\n maximum: corner,\r\n vertexFormat: options.vertexFormat,\r\n offsetAttribute: options.offsetAttribute,\r\n });\r\n};\r\n\r\n/**\r\n * Creates a cube from the dimensions of an AxisAlignedBoundingBox.\r\n *\r\n * @param {AxisAlignedBoundingBox} boundingBox A description of the AxisAlignedBoundingBox.\r\n * @returns {BoxGeometry}\r\n *\r\n *\r\n *\r\n * @example\r\n * const aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ]));\r\n * const box = Cesium.BoxGeometry.fromAxisAlignedBoundingBox(aabb);\r\n *\r\n * @see BoxGeometry.createGeometry\r\n */\r\nBoxGeometry.fromAxisAlignedBoundingBox = function (boundingBox) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"boundingBox\", boundingBox);\r\n //>>includeEnd('debug');\r\n\r\n return new BoxGeometry({\r\n minimum: boundingBox.minimum,\r\n maximum: boundingBox.maximum,\r\n });\r\n};\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nBoxGeometry.packedLength =\r\n 2 * Cartesian3.packedLength + VertexFormat.packedLength + 1;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {BoxGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nBoxGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Cartesian3.pack(value._minimum, array, startingIndex);\r\n Cartesian3.pack(\r\n value._maximum,\r\n array,\r\n startingIndex + Cartesian3.packedLength\r\n );\r\n VertexFormat.pack(\r\n value._vertexFormat,\r\n array,\r\n startingIndex + 2 * Cartesian3.packedLength\r\n );\r\n array[\r\n startingIndex + 2 * Cartesian3.packedLength + VertexFormat.packedLength\r\n ] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchMin = new Cartesian3();\r\nconst scratchMax = new Cartesian3();\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n minimum: scratchMin,\r\n maximum: scratchMax,\r\n vertexFormat: scratchVertexFormat,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {BoxGeometry} [result] The object into which to store the result.\r\n * @returns {BoxGeometry} The modified result parameter or a new BoxGeometry instance if one was not provided.\r\n */\r\nBoxGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const min = Cartesian3.unpack(array, startingIndex, scratchMin);\r\n const max = Cartesian3.unpack(\r\n array,\r\n startingIndex + Cartesian3.packedLength,\r\n scratchMax\r\n );\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex + 2 * Cartesian3.packedLength,\r\n scratchVertexFormat\r\n );\r\n const offsetAttribute =\r\n array[\r\n startingIndex + 2 * Cartesian3.packedLength + VertexFormat.packedLength\r\n ];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n return new BoxGeometry(scratchOptions);\r\n }\r\n\r\n result._minimum = Cartesian3.clone(min, result._minimum);\r\n result._maximum = Cartesian3.clone(max, result._maximum);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a box, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {BoxGeometry} boxGeometry A description of the box.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nBoxGeometry.createGeometry = function (boxGeometry) {\r\n const min = boxGeometry._minimum;\r\n const max = boxGeometry._maximum;\r\n const vertexFormat = boxGeometry._vertexFormat;\r\n\r\n if (Cartesian3.equals(min, max)) {\r\n return;\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n let indices;\r\n let positions;\r\n\r\n if (\r\n vertexFormat.position &&\r\n (vertexFormat.st ||\r\n vertexFormat.normal ||\r\n vertexFormat.tangent ||\r\n vertexFormat.bitangent)\r\n ) {\r\n if (vertexFormat.position) {\r\n // 8 corner points. Duplicated 3 times each for each incident edge/face.\r\n positions = new Float64Array(6 * 4 * 3);\r\n\r\n // +z face\r\n positions[0] = min.x;\r\n positions[1] = min.y;\r\n positions[2] = max.z;\r\n positions[3] = max.x;\r\n positions[4] = min.y;\r\n positions[5] = max.z;\r\n positions[6] = max.x;\r\n positions[7] = max.y;\r\n positions[8] = max.z;\r\n positions[9] = min.x;\r\n positions[10] = max.y;\r\n positions[11] = max.z;\r\n\r\n // -z face\r\n positions[12] = min.x;\r\n positions[13] = min.y;\r\n positions[14] = min.z;\r\n positions[15] = max.x;\r\n positions[16] = min.y;\r\n positions[17] = min.z;\r\n positions[18] = max.x;\r\n positions[19] = max.y;\r\n positions[20] = min.z;\r\n positions[21] = min.x;\r\n positions[22] = max.y;\r\n positions[23] = min.z;\r\n\r\n // +x face\r\n positions[24] = max.x;\r\n positions[25] = min.y;\r\n positions[26] = min.z;\r\n positions[27] = max.x;\r\n positions[28] = max.y;\r\n positions[29] = min.z;\r\n positions[30] = max.x;\r\n positions[31] = max.y;\r\n positions[32] = max.z;\r\n positions[33] = max.x;\r\n positions[34] = min.y;\r\n positions[35] = max.z;\r\n\r\n // -x face\r\n positions[36] = min.x;\r\n positions[37] = min.y;\r\n positions[38] = min.z;\r\n positions[39] = min.x;\r\n positions[40] = max.y;\r\n positions[41] = min.z;\r\n positions[42] = min.x;\r\n positions[43] = max.y;\r\n positions[44] = max.z;\r\n positions[45] = min.x;\r\n positions[46] = min.y;\r\n positions[47] = max.z;\r\n\r\n // +y face\r\n positions[48] = min.x;\r\n positions[49] = max.y;\r\n positions[50] = min.z;\r\n positions[51] = max.x;\r\n positions[52] = max.y;\r\n positions[53] = min.z;\r\n positions[54] = max.x;\r\n positions[55] = max.y;\r\n positions[56] = max.z;\r\n positions[57] = min.x;\r\n positions[58] = max.y;\r\n positions[59] = max.z;\r\n\r\n // -y face\r\n positions[60] = min.x;\r\n positions[61] = min.y;\r\n positions[62] = min.z;\r\n positions[63] = max.x;\r\n positions[64] = min.y;\r\n positions[65] = min.z;\r\n positions[66] = max.x;\r\n positions[67] = min.y;\r\n positions[68] = max.z;\r\n positions[69] = min.x;\r\n positions[70] = min.y;\r\n positions[71] = max.z;\r\n\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n const normals = new Float32Array(6 * 4 * 3);\r\n\r\n // +z face\r\n normals[0] = 0.0;\r\n normals[1] = 0.0;\r\n normals[2] = 1.0;\r\n normals[3] = 0.0;\r\n normals[4] = 0.0;\r\n normals[5] = 1.0;\r\n normals[6] = 0.0;\r\n normals[7] = 0.0;\r\n normals[8] = 1.0;\r\n normals[9] = 0.0;\r\n normals[10] = 0.0;\r\n normals[11] = 1.0;\r\n\r\n // -z face\r\n normals[12] = 0.0;\r\n normals[13] = 0.0;\r\n normals[14] = -1.0;\r\n normals[15] = 0.0;\r\n normals[16] = 0.0;\r\n normals[17] = -1.0;\r\n normals[18] = 0.0;\r\n normals[19] = 0.0;\r\n normals[20] = -1.0;\r\n normals[21] = 0.0;\r\n normals[22] = 0.0;\r\n normals[23] = -1.0;\r\n\r\n // +x face\r\n normals[24] = 1.0;\r\n normals[25] = 0.0;\r\n normals[26] = 0.0;\r\n normals[27] = 1.0;\r\n normals[28] = 0.0;\r\n normals[29] = 0.0;\r\n normals[30] = 1.0;\r\n normals[31] = 0.0;\r\n normals[32] = 0.0;\r\n normals[33] = 1.0;\r\n normals[34] = 0.0;\r\n normals[35] = 0.0;\r\n\r\n // -x face\r\n normals[36] = -1.0;\r\n normals[37] = 0.0;\r\n normals[38] = 0.0;\r\n normals[39] = -1.0;\r\n normals[40] = 0.0;\r\n normals[41] = 0.0;\r\n normals[42] = -1.0;\r\n normals[43] = 0.0;\r\n normals[44] = 0.0;\r\n normals[45] = -1.0;\r\n normals[46] = 0.0;\r\n normals[47] = 0.0;\r\n\r\n // +y face\r\n normals[48] = 0.0;\r\n normals[49] = 1.0;\r\n normals[50] = 0.0;\r\n normals[51] = 0.0;\r\n normals[52] = 1.0;\r\n normals[53] = 0.0;\r\n normals[54] = 0.0;\r\n normals[55] = 1.0;\r\n normals[56] = 0.0;\r\n normals[57] = 0.0;\r\n normals[58] = 1.0;\r\n normals[59] = 0.0;\r\n\r\n // -y face\r\n normals[60] = 0.0;\r\n normals[61] = -1.0;\r\n normals[62] = 0.0;\r\n normals[63] = 0.0;\r\n normals[64] = -1.0;\r\n normals[65] = 0.0;\r\n normals[66] = 0.0;\r\n normals[67] = -1.0;\r\n normals[68] = 0.0;\r\n normals[69] = 0.0;\r\n normals[70] = -1.0;\r\n normals[71] = 0.0;\r\n\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.st) {\r\n const texCoords = new Float32Array(6 * 4 * 2);\r\n\r\n // +z face\r\n texCoords[0] = 0.0;\r\n texCoords[1] = 0.0;\r\n texCoords[2] = 1.0;\r\n texCoords[3] = 0.0;\r\n texCoords[4] = 1.0;\r\n texCoords[5] = 1.0;\r\n texCoords[6] = 0.0;\r\n texCoords[7] = 1.0;\r\n\r\n // -z face\r\n texCoords[8] = 1.0;\r\n texCoords[9] = 0.0;\r\n texCoords[10] = 0.0;\r\n texCoords[11] = 0.0;\r\n texCoords[12] = 0.0;\r\n texCoords[13] = 1.0;\r\n texCoords[14] = 1.0;\r\n texCoords[15] = 1.0;\r\n\r\n //+x face\r\n texCoords[16] = 0.0;\r\n texCoords[17] = 0.0;\r\n texCoords[18] = 1.0;\r\n texCoords[19] = 0.0;\r\n texCoords[20] = 1.0;\r\n texCoords[21] = 1.0;\r\n texCoords[22] = 0.0;\r\n texCoords[23] = 1.0;\r\n\r\n // -x face\r\n texCoords[24] = 1.0;\r\n texCoords[25] = 0.0;\r\n texCoords[26] = 0.0;\r\n texCoords[27] = 0.0;\r\n texCoords[28] = 0.0;\r\n texCoords[29] = 1.0;\r\n texCoords[30] = 1.0;\r\n texCoords[31] = 1.0;\r\n\r\n // +y face\r\n texCoords[32] = 1.0;\r\n texCoords[33] = 0.0;\r\n texCoords[34] = 0.0;\r\n texCoords[35] = 0.0;\r\n texCoords[36] = 0.0;\r\n texCoords[37] = 1.0;\r\n texCoords[38] = 1.0;\r\n texCoords[39] = 1.0;\r\n\r\n // -y face\r\n texCoords[40] = 0.0;\r\n texCoords[41] = 0.0;\r\n texCoords[42] = 1.0;\r\n texCoords[43] = 0.0;\r\n texCoords[44] = 1.0;\r\n texCoords[45] = 1.0;\r\n texCoords[46] = 0.0;\r\n texCoords[47] = 1.0;\r\n\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: texCoords,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n const tangents = new Float32Array(6 * 4 * 3);\r\n\r\n // +z face\r\n tangents[0] = 1.0;\r\n tangents[1] = 0.0;\r\n tangents[2] = 0.0;\r\n tangents[3] = 1.0;\r\n tangents[4] = 0.0;\r\n tangents[5] = 0.0;\r\n tangents[6] = 1.0;\r\n tangents[7] = 0.0;\r\n tangents[8] = 0.0;\r\n tangents[9] = 1.0;\r\n tangents[10] = 0.0;\r\n tangents[11] = 0.0;\r\n\r\n // -z face\r\n tangents[12] = -1.0;\r\n tangents[13] = 0.0;\r\n tangents[14] = 0.0;\r\n tangents[15] = -1.0;\r\n tangents[16] = 0.0;\r\n tangents[17] = 0.0;\r\n tangents[18] = -1.0;\r\n tangents[19] = 0.0;\r\n tangents[20] = 0.0;\r\n tangents[21] = -1.0;\r\n tangents[22] = 0.0;\r\n tangents[23] = 0.0;\r\n\r\n // +x face\r\n tangents[24] = 0.0;\r\n tangents[25] = 1.0;\r\n tangents[26] = 0.0;\r\n tangents[27] = 0.0;\r\n tangents[28] = 1.0;\r\n tangents[29] = 0.0;\r\n tangents[30] = 0.0;\r\n tangents[31] = 1.0;\r\n tangents[32] = 0.0;\r\n tangents[33] = 0.0;\r\n tangents[34] = 1.0;\r\n tangents[35] = 0.0;\r\n\r\n // -x face\r\n tangents[36] = 0.0;\r\n tangents[37] = -1.0;\r\n tangents[38] = 0.0;\r\n tangents[39] = 0.0;\r\n tangents[40] = -1.0;\r\n tangents[41] = 0.0;\r\n tangents[42] = 0.0;\r\n tangents[43] = -1.0;\r\n tangents[44] = 0.0;\r\n tangents[45] = 0.0;\r\n tangents[46] = -1.0;\r\n tangents[47] = 0.0;\r\n\r\n // +y face\r\n tangents[48] = -1.0;\r\n tangents[49] = 0.0;\r\n tangents[50] = 0.0;\r\n tangents[51] = -1.0;\r\n tangents[52] = 0.0;\r\n tangents[53] = 0.0;\r\n tangents[54] = -1.0;\r\n tangents[55] = 0.0;\r\n tangents[56] = 0.0;\r\n tangents[57] = -1.0;\r\n tangents[58] = 0.0;\r\n tangents[59] = 0.0;\r\n\r\n // -y face\r\n tangents[60] = 1.0;\r\n tangents[61] = 0.0;\r\n tangents[62] = 0.0;\r\n tangents[63] = 1.0;\r\n tangents[64] = 0.0;\r\n tangents[65] = 0.0;\r\n tangents[66] = 1.0;\r\n tangents[67] = 0.0;\r\n tangents[68] = 0.0;\r\n tangents[69] = 1.0;\r\n tangents[70] = 0.0;\r\n tangents[71] = 0.0;\r\n\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n const bitangents = new Float32Array(6 * 4 * 3);\r\n\r\n // +z face\r\n bitangents[0] = 0.0;\r\n bitangents[1] = 1.0;\r\n bitangents[2] = 0.0;\r\n bitangents[3] = 0.0;\r\n bitangents[4] = 1.0;\r\n bitangents[5] = 0.0;\r\n bitangents[6] = 0.0;\r\n bitangents[7] = 1.0;\r\n bitangents[8] = 0.0;\r\n bitangents[9] = 0.0;\r\n bitangents[10] = 1.0;\r\n bitangents[11] = 0.0;\r\n\r\n // -z face\r\n bitangents[12] = 0.0;\r\n bitangents[13] = 1.0;\r\n bitangents[14] = 0.0;\r\n bitangents[15] = 0.0;\r\n bitangents[16] = 1.0;\r\n bitangents[17] = 0.0;\r\n bitangents[18] = 0.0;\r\n bitangents[19] = 1.0;\r\n bitangents[20] = 0.0;\r\n bitangents[21] = 0.0;\r\n bitangents[22] = 1.0;\r\n bitangents[23] = 0.0;\r\n\r\n // +x face\r\n bitangents[24] = 0.0;\r\n bitangents[25] = 0.0;\r\n bitangents[26] = 1.0;\r\n bitangents[27] = 0.0;\r\n bitangents[28] = 0.0;\r\n bitangents[29] = 1.0;\r\n bitangents[30] = 0.0;\r\n bitangents[31] = 0.0;\r\n bitangents[32] = 1.0;\r\n bitangents[33] = 0.0;\r\n bitangents[34] = 0.0;\r\n bitangents[35] = 1.0;\r\n\r\n // -x face\r\n bitangents[36] = 0.0;\r\n bitangents[37] = 0.0;\r\n bitangents[38] = 1.0;\r\n bitangents[39] = 0.0;\r\n bitangents[40] = 0.0;\r\n bitangents[41] = 1.0;\r\n bitangents[42] = 0.0;\r\n bitangents[43] = 0.0;\r\n bitangents[44] = 1.0;\r\n bitangents[45] = 0.0;\r\n bitangents[46] = 0.0;\r\n bitangents[47] = 1.0;\r\n\r\n // +y face\r\n bitangents[48] = 0.0;\r\n bitangents[49] = 0.0;\r\n bitangents[50] = 1.0;\r\n bitangents[51] = 0.0;\r\n bitangents[52] = 0.0;\r\n bitangents[53] = 1.0;\r\n bitangents[54] = 0.0;\r\n bitangents[55] = 0.0;\r\n bitangents[56] = 1.0;\r\n bitangents[57] = 0.0;\r\n bitangents[58] = 0.0;\r\n bitangents[59] = 1.0;\r\n\r\n // -y face\r\n bitangents[60] = 0.0;\r\n bitangents[61] = 0.0;\r\n bitangents[62] = 1.0;\r\n bitangents[63] = 0.0;\r\n bitangents[64] = 0.0;\r\n bitangents[65] = 1.0;\r\n bitangents[66] = 0.0;\r\n bitangents[67] = 0.0;\r\n bitangents[68] = 1.0;\r\n bitangents[69] = 0.0;\r\n bitangents[70] = 0.0;\r\n bitangents[71] = 1.0;\r\n\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n\r\n // 12 triangles: 6 faces, 2 triangles each.\r\n indices = new Uint16Array(6 * 2 * 3);\r\n\r\n // +z face\r\n indices[0] = 0;\r\n indices[1] = 1;\r\n indices[2] = 2;\r\n indices[3] = 0;\r\n indices[4] = 2;\r\n indices[5] = 3;\r\n\r\n // -z face\r\n indices[6] = 4 + 2;\r\n indices[7] = 4 + 1;\r\n indices[8] = 4 + 0;\r\n indices[9] = 4 + 3;\r\n indices[10] = 4 + 2;\r\n indices[11] = 4 + 0;\r\n\r\n // +x face\r\n indices[12] = 8 + 0;\r\n indices[13] = 8 + 1;\r\n indices[14] = 8 + 2;\r\n indices[15] = 8 + 0;\r\n indices[16] = 8 + 2;\r\n indices[17] = 8 + 3;\r\n\r\n // -x face\r\n indices[18] = 12 + 2;\r\n indices[19] = 12 + 1;\r\n indices[20] = 12 + 0;\r\n indices[21] = 12 + 3;\r\n indices[22] = 12 + 2;\r\n indices[23] = 12 + 0;\r\n\r\n // +y face\r\n indices[24] = 16 + 2;\r\n indices[25] = 16 + 1;\r\n indices[26] = 16 + 0;\r\n indices[27] = 16 + 3;\r\n indices[28] = 16 + 2;\r\n indices[29] = 16 + 0;\r\n\r\n // -y face\r\n indices[30] = 20 + 0;\r\n indices[31] = 20 + 1;\r\n indices[32] = 20 + 2;\r\n indices[33] = 20 + 0;\r\n indices[34] = 20 + 2;\r\n indices[35] = 20 + 3;\r\n } else {\r\n // Positions only - no need to duplicate corner points\r\n positions = new Float64Array(8 * 3);\r\n\r\n positions[0] = min.x;\r\n positions[1] = min.y;\r\n positions[2] = min.z;\r\n positions[3] = max.x;\r\n positions[4] = min.y;\r\n positions[5] = min.z;\r\n positions[6] = max.x;\r\n positions[7] = max.y;\r\n positions[8] = min.z;\r\n positions[9] = min.x;\r\n positions[10] = max.y;\r\n positions[11] = min.z;\r\n positions[12] = min.x;\r\n positions[13] = min.y;\r\n positions[14] = max.z;\r\n positions[15] = max.x;\r\n positions[16] = min.y;\r\n positions[17] = max.z;\r\n positions[18] = max.x;\r\n positions[19] = max.y;\r\n positions[20] = max.z;\r\n positions[21] = min.x;\r\n positions[22] = max.y;\r\n positions[23] = max.z;\r\n\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n\r\n // 12 triangles: 6 faces, 2 triangles each.\r\n indices = new Uint16Array(6 * 2 * 3);\r\n\r\n // plane z = corner.Z\r\n indices[0] = 4;\r\n indices[1] = 5;\r\n indices[2] = 6;\r\n indices[3] = 4;\r\n indices[4] = 6;\r\n indices[5] = 7;\r\n\r\n // plane z = -corner.Z\r\n indices[6] = 1;\r\n indices[7] = 0;\r\n indices[8] = 3;\r\n indices[9] = 1;\r\n indices[10] = 3;\r\n indices[11] = 2;\r\n\r\n // plane x = corner.X\r\n indices[12] = 1;\r\n indices[13] = 6;\r\n indices[14] = 5;\r\n indices[15] = 1;\r\n indices[16] = 2;\r\n indices[17] = 6;\r\n\r\n // plane y = corner.Y\r\n indices[18] = 2;\r\n indices[19] = 3;\r\n indices[20] = 7;\r\n indices[21] = 2;\r\n indices[22] = 7;\r\n indices[23] = 6;\r\n\r\n // plane x = -corner.X\r\n indices[24] = 3;\r\n indices[25] = 0;\r\n indices[26] = 4;\r\n indices[27] = 3;\r\n indices[28] = 4;\r\n indices[29] = 7;\r\n\r\n // plane y = -corner.Y\r\n indices[30] = 0;\r\n indices[31] = 1;\r\n indices[32] = 5;\r\n indices[33] = 0;\r\n indices[34] = 5;\r\n indices[35] = 4;\r\n }\r\n\r\n const diff = Cartesian3.subtract(max, min, diffScratch);\r\n const radius = Cartesian3.magnitude(diff) * 0.5;\r\n\r\n if (defined(boxGeometry._offsetAttribute)) {\r\n const length = positions.length;\r\n const offsetValue =\r\n boxGeometry._offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: new BoundingSphere(Cartesian3.ZERO, radius),\r\n offsetAttribute: boxGeometry._offsetAttribute,\r\n });\r\n};\r\n\r\nlet unitBoxGeometry;\r\n\r\n/**\r\n * Returns the geometric representation of a unit box, including its vertices, indices, and a bounding sphere.\r\n * @returns {Geometry} The computed vertices and indices.\r\n *\r\n * @private\r\n */\r\nBoxGeometry.getUnitBox = function () {\r\n if (!defined(unitBoxGeometry)) {\r\n unitBoxGeometry = BoxGeometry.createGeometry(\r\n BoxGeometry.fromDimensions({\r\n dimensions: new Cartesian3(1.0, 1.0, 1.0),\r\n vertexFormat: VertexFormat.POSITION_ONLY,\r\n })\r\n );\r\n }\r\n return unitBoxGeometry;\r\n};\r\nexport default BoxGeometry;\r\n"],"names":["Cartesian3","defaultValue","Check","defined","GeometryOffsetAttribute","DeveloperError","VertexFormat","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC3B,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC3B,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC3B,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC3B,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC3B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5B;EACA;EACA,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5B;EACA;EACA,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5B;EACA;EACA,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5B;EACA;EACA,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AAC5B;EACA;EACA,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC5B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,C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AAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EACzB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EACzB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACxB;EACA;EACA,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACxB;EACA;EACA,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EACzB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EACzB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EACzB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EACzB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACxB;EACA,MAAM,UAAU,CAAC,MAAM,GAAG,IAAID,mCAAiB,CAAC;EAChD,QAAQ,iBAAiB,EAAEC,mCAAiB,CAAC,KAAK;EAClD,QAAQ,sBAAsB,EAAE,CAAC;EACjC,QAAQ,MAAM,EAAE,OAAO;EACvB,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,EAAE,EAAE;EACzB,MAAM,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD;EACA;EACA,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACzB;EACA;EACA,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC1B;EACA;EACA,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC1B;EACA;EACA,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC1B;EACA;EACA,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,C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CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACzB;EACA;EACA,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1B,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1B,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1B,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1B,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACzB;EACA;EACA,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1B,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1B,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1B,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EAC1B,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACzB;EACA;EACA,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACzB;EACA,MAAM,UAAU,CAAC,OAAO,GAAG,IAAID,mCAAiB,CAAC;EACjD,QAAQ,iBAAiB,EAAEC,mCAAiB,CAAC,KAAK;EAClD,QAAQ,sBAAsB,EAAE,CAAC;EACjC,QAAQ,MAAM,EAAE,QAAQ;EACxB,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,SAAS,EAAE;EAChC,MAAM,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD;EACA;EACA,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3B;EACA;EACA,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3B;EACA;EACA,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3B;EACA;EACA,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3B;EACA;EACA,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC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"} \ No newline at end of file diff --git a/debug/cesium/Workers/Check-d10e5f2e.js b/debug/cesium/Workers/Check-d10e5f2e.js deleted file mode 100644 index 36df0e1..0000000 --- a/debug/cesium/Workers/Check-d10e5f2e.js +++ /dev/null @@ -1,316 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './defaultValue-0ab18f7d'], (function (exports, defaultValue) { 'use strict'; - - /** - * Constructs an exception object that is thrown due to a developer error, e.g., invalid argument, - * argument out of range, etc. This exception should only be thrown during development; - * it usually indicates a bug in the calling code. This exception should never be - * caught; instead the calling code should strive not to generate it. - *

    - * On the other hand, a {@link RuntimeError} indicates an exception that may - * be thrown at runtime, e.g., out of memory, that the calling code should be prepared - * to catch. - * - * @alias DeveloperError - * @constructor - * @extends Error - * - * @param {String} [message] The error message for this exception. - * - * @see RuntimeError - */ - function DeveloperError(message) { - /** - * 'DeveloperError' indicating that this exception was thrown due to a developer error. - * @type {String} - * @readonly - */ - this.name = "DeveloperError"; - - /** - * The explanation for why this exception was thrown. - * @type {String} - * @readonly - */ - this.message = message; - - //Browsers such as IE don't have a stack property until you actually throw the error. - let stack; - try { - throw new Error(); - } catch (e) { - stack = e.stack; - } - - /** - * The stack trace of this exception, if available. - * @type {String} - * @readonly - */ - this.stack = stack; - } - - if (defaultValue.defined(Object.create)) { - DeveloperError.prototype = Object.create(Error.prototype); - DeveloperError.prototype.constructor = DeveloperError; - } - - DeveloperError.prototype.toString = function () { - let str = `${this.name}: ${this.message}`; - - if (defaultValue.defined(this.stack)) { - str += `\n${this.stack.toString()}`; - } - - return str; - }; - - /** - * @private - */ - DeveloperError.throwInstantiationError = function () { - throw new DeveloperError( - "This function defines an interface and should not be called directly." - ); - }; - - /** - * Contains functions for checking that supplied arguments are of a specified type - * or meet specified conditions - * @private - */ - const Check = {}; - - /** - * Contains type checking functions, all using the typeof operator - */ - Check.typeOf = {}; - - function getUndefinedErrorMessage(name) { - return `${name} is required, actual value was undefined`; - } - - function getFailedTypeErrorMessage(actual, expected, name) { - return `Expected ${name} to be typeof ${expected}, actual typeof was ${actual}`; - } - - /** - * Throws if test is not defined - * - * @param {String} name The name of the variable being tested - * @param {*} test The value that is to be checked - * @exception {DeveloperError} test must be defined - */ - Check.defined = function (name, test) { - if (!defaultValue.defined(test)) { - throw new DeveloperError(getUndefinedErrorMessage(name)); - } - }; - - /** - * Throws if test is not typeof 'function' - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @exception {DeveloperError} test must be typeof 'function' - */ - Check.typeOf.func = function (name, test) { - if (typeof test !== "function") { - throw new DeveloperError( - getFailedTypeErrorMessage(typeof test, "function", name) - ); - } - }; - - /** - * Throws if test is not typeof 'string' - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @exception {DeveloperError} test must be typeof 'string' - */ - Check.typeOf.string = function (name, test) { - if (typeof test !== "string") { - throw new DeveloperError( - getFailedTypeErrorMessage(typeof test, "string", name) - ); - } - }; - - /** - * Throws if test is not typeof 'number' - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @exception {DeveloperError} test must be typeof 'number' - */ - Check.typeOf.number = function (name, test) { - if (typeof test !== "number") { - throw new DeveloperError( - getFailedTypeErrorMessage(typeof test, "number", name) - ); - } - }; - - /** - * Throws if test is not typeof 'number' and less than limit - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @param {Number} limit The limit value to compare against - * @exception {DeveloperError} test must be typeof 'number' and less than limit - */ - Check.typeOf.number.lessThan = function (name, test, limit) { - Check.typeOf.number(name, test); - if (test >= limit) { - throw new DeveloperError( - `Expected ${name} to be less than ${limit}, actual value was ${test}` - ); - } - }; - - /** - * Throws if test is not typeof 'number' and less than or equal to limit - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @param {Number} limit The limit value to compare against - * @exception {DeveloperError} test must be typeof 'number' and less than or equal to limit - */ - Check.typeOf.number.lessThanOrEquals = function (name, test, limit) { - Check.typeOf.number(name, test); - if (test > limit) { - throw new DeveloperError( - `Expected ${name} to be less than or equal to ${limit}, actual value was ${test}` - ); - } - }; - - /** - * Throws if test is not typeof 'number' and greater than limit - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @param {Number} limit The limit value to compare against - * @exception {DeveloperError} test must be typeof 'number' and greater than limit - */ - Check.typeOf.number.greaterThan = function (name, test, limit) { - Check.typeOf.number(name, test); - if (test <= limit) { - throw new DeveloperError( - `Expected ${name} to be greater than ${limit}, actual value was ${test}` - ); - } - }; - - /** - * Throws if test is not typeof 'number' and greater than or equal to limit - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @param {Number} limit The limit value to compare against - * @exception {DeveloperError} test must be typeof 'number' and greater than or equal to limit - */ - Check.typeOf.number.greaterThanOrEquals = function (name, test, limit) { - Check.typeOf.number(name, test); - if (test < limit) { - throw new DeveloperError( - `Expected ${name} to be greater than or equal to ${limit}, actual value was ${test}` - ); - } - }; - - /** - * Throws if test is not typeof 'object' - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @exception {DeveloperError} test must be typeof 'object' - */ - Check.typeOf.object = function (name, test) { - if (typeof test !== "object") { - throw new DeveloperError( - getFailedTypeErrorMessage(typeof test, "object", name) - ); - } - }; - - /** - * Throws if test is not typeof 'boolean' - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @exception {DeveloperError} test must be typeof 'boolean' - */ - Check.typeOf.bool = function (name, test) { - if (typeof test !== "boolean") { - throw new DeveloperError( - getFailedTypeErrorMessage(typeof test, "boolean", name) - ); - } - }; - - /** - * Throws if test is not typeof 'bigint' - * - * @param {String} name The name of the variable being tested - * @param {*} test The value to test - * @exception {DeveloperError} test must be typeof 'bigint' - */ - Check.typeOf.bigint = function (name, test) { - if (typeof test !== "bigint") { - throw new DeveloperError( - getFailedTypeErrorMessage(typeof test, "bigint", name) - ); - } - }; - - /** - * Throws if test1 and test2 is not typeof 'number' and not equal in value - * - * @param {String} name1 The name of the first variable being tested - * @param {String} name2 The name of the second variable being tested against - * @param {*} test1 The value to test - * @param {*} test2 The value to test against - * @exception {DeveloperError} test1 and test2 should be type of 'number' and be equal in value - */ - Check.typeOf.number.equals = function (name1, name2, test1, test2) { - Check.typeOf.number(name1, test1); - Check.typeOf.number(name2, test2); - if (test1 !== test2) { - throw new DeveloperError( - `${name1} must be equal to ${name2}, the actual values are ${test1} and ${test2}` - ); - } - }; - var Check$1 = Check; - - exports.Check = Check$1; - exports.DeveloperError = DeveloperError; - -})); -//# sourceMappingURL=Check-d10e5f2e.js.map diff --git a/debug/cesium/Workers/Check-d10e5f2e.js.map b/debug/cesium/Workers/Check-d10e5f2e.js.map deleted file mode 100644 index 882d04a..0000000 --- a/debug/cesium/Workers/Check-d10e5f2e.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Check-d10e5f2e.js","sources":["../../../Source/Core/DeveloperError.js","../../../Source/Core/Check.js"],"sourcesContent":["import defined from \"./defined.js\";\r\n\r\n/**\r\n * Constructs an exception object that is thrown due to a developer error, e.g., invalid argument,\r\n * argument out of range, etc. This exception should only be thrown during development;\r\n * it usually indicates a bug in the calling code. This exception should never be\r\n * caught; instead the calling code should strive not to generate it.\r\n *

    \r\n * On the other hand, a {@link RuntimeError} indicates an exception that may\r\n * be thrown at runtime, e.g., out of memory, that the calling code should be prepared\r\n * to catch.\r\n *\r\n * @alias DeveloperError\r\n * @constructor\r\n * @extends Error\r\n *\r\n * @param {String} [message] The error message for this exception.\r\n *\r\n * @see RuntimeError\r\n */\r\nfunction DeveloperError(message) {\r\n /**\r\n * 'DeveloperError' indicating that this exception was thrown due to a developer error.\r\n * @type {String}\r\n * @readonly\r\n */\r\n this.name = \"DeveloperError\";\r\n\r\n /**\r\n * The explanation for why this exception was thrown.\r\n * @type {String}\r\n * @readonly\r\n */\r\n this.message = message;\r\n\r\n //Browsers such as IE don't have a stack property until you actually throw the error.\r\n let stack;\r\n try {\r\n throw new Error();\r\n } catch (e) {\r\n stack = e.stack;\r\n }\r\n\r\n /**\r\n * The stack trace of this exception, if available.\r\n * @type {String}\r\n * @readonly\r\n */\r\n this.stack = stack;\r\n}\r\n\r\nif (defined(Object.create)) {\r\n DeveloperError.prototype = Object.create(Error.prototype);\r\n DeveloperError.prototype.constructor = DeveloperError;\r\n}\r\n\r\nDeveloperError.prototype.toString = function () {\r\n let str = `${this.name}: ${this.message}`;\r\n\r\n if (defined(this.stack)) {\r\n str += `\\n${this.stack.toString()}`;\r\n }\r\n\r\n return str;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nDeveloperError.throwInstantiationError = function () {\r\n throw new DeveloperError(\r\n \"This function defines an interface and should not be called directly.\"\r\n );\r\n};\r\nexport default DeveloperError;\r\n","import defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Contains functions for checking that supplied arguments are of a specified type\r\n * or meet specified conditions\r\n * @private\r\n */\r\nconst Check = {};\r\n\r\n/**\r\n * Contains type checking functions, all using the typeof operator\r\n */\r\nCheck.typeOf = {};\r\n\r\nfunction getUndefinedErrorMessage(name) {\r\n return `${name} is required, actual value was undefined`;\r\n}\r\n\r\nfunction getFailedTypeErrorMessage(actual, expected, name) {\r\n return `Expected ${name} to be typeof ${expected}, actual typeof was ${actual}`;\r\n}\r\n\r\n/**\r\n * Throws if test is not defined\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value that is to be checked\r\n * @exception {DeveloperError} test must be defined\r\n */\r\nCheck.defined = function (name, test) {\r\n if (!defined(test)) {\r\n throw new DeveloperError(getUndefinedErrorMessage(name));\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'function'\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @exception {DeveloperError} test must be typeof 'function'\r\n */\r\nCheck.typeOf.func = function (name, test) {\r\n if (typeof test !== \"function\") {\r\n throw new DeveloperError(\r\n getFailedTypeErrorMessage(typeof test, \"function\", name)\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'string'\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @exception {DeveloperError} test must be typeof 'string'\r\n */\r\nCheck.typeOf.string = function (name, test) {\r\n if (typeof test !== \"string\") {\r\n throw new DeveloperError(\r\n getFailedTypeErrorMessage(typeof test, \"string\", name)\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'number'\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @exception {DeveloperError} test must be typeof 'number'\r\n */\r\nCheck.typeOf.number = function (name, test) {\r\n if (typeof test !== \"number\") {\r\n throw new DeveloperError(\r\n getFailedTypeErrorMessage(typeof test, \"number\", name)\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'number' and less than limit\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @param {Number} limit The limit value to compare against\r\n * @exception {DeveloperError} test must be typeof 'number' and less than limit\r\n */\r\nCheck.typeOf.number.lessThan = function (name, test, limit) {\r\n Check.typeOf.number(name, test);\r\n if (test >= limit) {\r\n throw new DeveloperError(\r\n `Expected ${name} to be less than ${limit}, actual value was ${test}`\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'number' and less than or equal to limit\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @param {Number} limit The limit value to compare against\r\n * @exception {DeveloperError} test must be typeof 'number' and less than or equal to limit\r\n */\r\nCheck.typeOf.number.lessThanOrEquals = function (name, test, limit) {\r\n Check.typeOf.number(name, test);\r\n if (test > limit) {\r\n throw new DeveloperError(\r\n `Expected ${name} to be less than or equal to ${limit}, actual value was ${test}`\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'number' and greater than limit\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @param {Number} limit The limit value to compare against\r\n * @exception {DeveloperError} test must be typeof 'number' and greater than limit\r\n */\r\nCheck.typeOf.number.greaterThan = function (name, test, limit) {\r\n Check.typeOf.number(name, test);\r\n if (test <= limit) {\r\n throw new DeveloperError(\r\n `Expected ${name} to be greater than ${limit}, actual value was ${test}`\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'number' and greater than or equal to limit\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @param {Number} limit The limit value to compare against\r\n * @exception {DeveloperError} test must be typeof 'number' and greater than or equal to limit\r\n */\r\nCheck.typeOf.number.greaterThanOrEquals = function (name, test, limit) {\r\n Check.typeOf.number(name, test);\r\n if (test < limit) {\r\n throw new DeveloperError(\r\n `Expected ${name} to be greater than or equal to ${limit}, actual value was ${test}`\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'object'\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @exception {DeveloperError} test must be typeof 'object'\r\n */\r\nCheck.typeOf.object = function (name, test) {\r\n if (typeof test !== \"object\") {\r\n throw new DeveloperError(\r\n getFailedTypeErrorMessage(typeof test, \"object\", name)\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'boolean'\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @exception {DeveloperError} test must be typeof 'boolean'\r\n */\r\nCheck.typeOf.bool = function (name, test) {\r\n if (typeof test !== \"boolean\") {\r\n throw new DeveloperError(\r\n getFailedTypeErrorMessage(typeof test, \"boolean\", name)\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test is not typeof 'bigint'\r\n *\r\n * @param {String} name The name of the variable being tested\r\n * @param {*} test The value to test\r\n * @exception {DeveloperError} test must be typeof 'bigint'\r\n */\r\nCheck.typeOf.bigint = function (name, test) {\r\n if (typeof test !== \"bigint\") {\r\n throw new DeveloperError(\r\n getFailedTypeErrorMessage(typeof test, \"bigint\", name)\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Throws if test1 and test2 is not typeof 'number' and not equal in value\r\n *\r\n * @param {String} name1 The name of the first variable being tested\r\n * @param {String} name2 The name of the second variable being tested against\r\n * @param {*} test1 The value to test\r\n * @param {*} test2 The value to test against\r\n * @exception {DeveloperError} test1 and test2 should be type of 'number' and be equal in value\r\n */\r\nCheck.typeOf.number.equals = function (name1, name2, test1, test2) {\r\n Check.typeOf.number(name1, test1);\r\n Check.typeOf.number(name2, test2);\r\n if (test1 !== test2) {\r\n throw new DeveloperError(\r\n `${name1} must be equal to ${name2}, the actual values are ${test1} and ${test2}`\r\n );\r\n }\r\n};\r\nexport default Check;\r\n"],"names":["defined"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/Color-c019c34b.js b/debug/cesium/Workers/Color-c019c34b.js deleted file mode 100644 index 2b3aaa7..0000000 --- a/debug/cesium/Workers/Color-c019c34b.js +++ /dev/null @@ -1,2288 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Transforms-11fb6b0a', './Math-9be8b918'], (function (exports, Check, defaultValue, Transforms, Math$1) { 'use strict'; - - function hue2rgb(m1, m2, h) { - if (h < 0) { - h += 1; - } - if (h > 1) { - h -= 1; - } - if (h * 6 < 1) { - return m1 + (m2 - m1) * 6 * h; - } - if (h * 2 < 1) { - return m2; - } - if (h * 3 < 2) { - return m1 + (m2 - m1) * (2 / 3 - h) * 6; - } - return m1; - } - - /** - * A color, specified using red, green, blue, and alpha values, - * which range from 0 (no intensity) to 1.0 (full intensity). - * @param {Number} [red=1.0] The red component. - * @param {Number} [green=1.0] The green component. - * @param {Number} [blue=1.0] The blue component. - * @param {Number} [alpha=1.0] The alpha component. - * - * @constructor - * @alias Color - * - * @see Packable - */ - function Color(red, green, blue, alpha) { - /** - * The red component. - * @type {Number} - * @default 1.0 - */ - this.red = defaultValue.defaultValue(red, 1.0); - /** - * The green component. - * @type {Number} - * @default 1.0 - */ - this.green = defaultValue.defaultValue(green, 1.0); - /** - * The blue component. - * @type {Number} - * @default 1.0 - */ - this.blue = defaultValue.defaultValue(blue, 1.0); - /** - * The alpha component. - * @type {Number} - * @default 1.0 - */ - this.alpha = defaultValue.defaultValue(alpha, 1.0); - } - - /** - * Creates a Color instance from a {@link Cartesian4}. x, y, z, - * and w map to red, green, blue, and alpha, respectively. - * - * @param {Cartesian4} cartesian The source cartesian. - * @param {Color} [result] The object onto which to store the result. - * @returns {Color} The modified result parameter or a new Color instance if one was not provided. - */ - Color.fromCartesian4 = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Color(cartesian.x, cartesian.y, cartesian.z, cartesian.w); - } - - result.red = cartesian.x; - result.green = cartesian.y; - result.blue = cartesian.z; - result.alpha = cartesian.w; - return result; - }; - - /** - * Creates a new Color specified using red, green, blue, and alpha values - * that are in the range of 0 to 255, converting them internally to a range of 0.0 to 1.0. - * - * @param {Number} [red=255] The red component. - * @param {Number} [green=255] The green component. - * @param {Number} [blue=255] The blue component. - * @param {Number} [alpha=255] The alpha component. - * @param {Color} [result] The object onto which to store the result. - * @returns {Color} The modified result parameter or a new Color instance if one was not provided. - */ - Color.fromBytes = function (red, green, blue, alpha, result) { - red = Color.byteToFloat(defaultValue.defaultValue(red, 255.0)); - green = Color.byteToFloat(defaultValue.defaultValue(green, 255.0)); - blue = Color.byteToFloat(defaultValue.defaultValue(blue, 255.0)); - alpha = Color.byteToFloat(defaultValue.defaultValue(alpha, 255.0)); - - if (!defaultValue.defined(result)) { - return new Color(red, green, blue, alpha); - } - - result.red = red; - result.green = green; - result.blue = blue; - result.alpha = alpha; - return result; - }; - - /** - * Creates a new Color that has the same red, green, and blue components - * of the specified color, but with the specified alpha value. - * - * @param {Color} color The base color - * @param {Number} alpha The new alpha component. - * @param {Color} [result] The object onto which to store the result. - * @returns {Color} The modified result parameter or a new Color instance if one was not provided. - * - * @example const translucentRed = Cesium.Color.fromAlpha(Cesium.Color.RED, 0.9); - */ - Color.fromAlpha = function (color, alpha, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("color", color); - Check.Check.typeOf.number("alpha", alpha); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Color(color.red, color.green, color.blue, alpha); - } - - result.red = color.red; - result.green = color.green; - result.blue = color.blue; - result.alpha = alpha; - return result; - }; - - let scratchArrayBuffer; - let scratchUint32Array; - let scratchUint8Array; - if (Transforms.FeatureDetection.supportsTypedArrays()) { - scratchArrayBuffer = new ArrayBuffer(4); - scratchUint32Array = new Uint32Array(scratchArrayBuffer); - scratchUint8Array = new Uint8Array(scratchArrayBuffer); - } - - /** - * Creates a new Color from a single numeric unsigned 32-bit RGBA value, using the endianness - * of the system. - * - * @param {Number} rgba A single numeric unsigned 32-bit RGBA value. - * @param {Color} [result] The object to store the result in, if undefined a new instance will be created. - * @returns {Color} The color object. - * - * @example - * const color = Cesium.Color.fromRgba(0x67ADDFFF); - * - * @see Color#toRgba - */ - Color.fromRgba = function (rgba, result) { - // scratchUint32Array and scratchUint8Array share an underlying array buffer - scratchUint32Array[0] = rgba; - return Color.fromBytes( - scratchUint8Array[0], - scratchUint8Array[1], - scratchUint8Array[2], - scratchUint8Array[3], - result - ); - }; - - /** - * Creates a Color instance from hue, saturation, and lightness. - * - * @param {Number} [hue=0] The hue angle 0...1 - * @param {Number} [saturation=0] The saturation value 0...1 - * @param {Number} [lightness=0] The lightness value 0...1 - * @param {Number} [alpha=1.0] The alpha component 0...1 - * @param {Color} [result] The object to store the result in, if undefined a new instance will be created. - * @returns {Color} The color object. - * - * @see {@link http://www.w3.org/TR/css3-color/#hsl-color|CSS color values} - */ - Color.fromHsl = function (hue, saturation, lightness, alpha, result) { - hue = defaultValue.defaultValue(hue, 0.0) % 1.0; - saturation = defaultValue.defaultValue(saturation, 0.0); - lightness = defaultValue.defaultValue(lightness, 0.0); - alpha = defaultValue.defaultValue(alpha, 1.0); - - let red = lightness; - let green = lightness; - let blue = lightness; - - if (saturation !== 0) { - let m2; - if (lightness < 0.5) { - m2 = lightness * (1 + saturation); - } else { - m2 = lightness + saturation - lightness * saturation; - } - - const m1 = 2.0 * lightness - m2; - red = hue2rgb(m1, m2, hue + 1 / 3); - green = hue2rgb(m1, m2, hue); - blue = hue2rgb(m1, m2, hue - 1 / 3); - } - - if (!defaultValue.defined(result)) { - return new Color(red, green, blue, alpha); - } - - result.red = red; - result.green = green; - result.blue = blue; - result.alpha = alpha; - return result; - }; - - /** - * Creates a random color using the provided options. For reproducible random colors, you should - * call {@link CesiumMath#setRandomNumberSeed} once at the beginning of your application. - * - * @param {Object} [options] Object with the following properties: - * @param {Number} [options.red] If specified, the red component to use instead of a randomized value. - * @param {Number} [options.minimumRed=0.0] The maximum red value to generate if none was specified. - * @param {Number} [options.maximumRed=1.0] The minimum red value to generate if none was specified. - * @param {Number} [options.green] If specified, the green component to use instead of a randomized value. - * @param {Number} [options.minimumGreen=0.0] The maximum green value to generate if none was specified. - * @param {Number} [options.maximumGreen=1.0] The minimum green value to generate if none was specified. - * @param {Number} [options.blue] If specified, the blue component to use instead of a randomized value. - * @param {Number} [options.minimumBlue=0.0] The maximum blue value to generate if none was specified. - * @param {Number} [options.maximumBlue=1.0] The minimum blue value to generate if none was specified. - * @param {Number} [options.alpha] If specified, the alpha component to use instead of a randomized value. - * @param {Number} [options.minimumAlpha=0.0] The maximum alpha value to generate if none was specified. - * @param {Number} [options.maximumAlpha=1.0] The minimum alpha value to generate if none was specified. - * @param {Color} [result] The object to store the result in, if undefined a new instance will be created. - * @returns {Color} The modified result parameter or a new instance if result was undefined. - * - * @exception {DeveloperError} minimumRed must be less than or equal to maximumRed. - * @exception {DeveloperError} minimumGreen must be less than or equal to maximumGreen. - * @exception {DeveloperError} minimumBlue must be less than or equal to maximumBlue. - * @exception {DeveloperError} minimumAlpha must be less than or equal to maximumAlpha. - * - * @example - * //Create a completely random color - * const color = Cesium.Color.fromRandom(); - * - * //Create a random shade of yellow. - * const color1 = Cesium.Color.fromRandom({ - * red : 1.0, - * green : 1.0, - * alpha : 1.0 - * }); - * - * //Create a random bright color. - * const color2 = Cesium.Color.fromRandom({ - * minimumRed : 0.75, - * minimumGreen : 0.75, - * minimumBlue : 0.75, - * alpha : 1.0 - * }); - */ - Color.fromRandom = function (options, result) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - let red = options.red; - if (!defaultValue.defined(red)) { - const minimumRed = defaultValue.defaultValue(options.minimumRed, 0); - const maximumRed = defaultValue.defaultValue(options.maximumRed, 1.0); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.lessThanOrEquals("minimumRed", minimumRed, maximumRed); - //>>includeEnd('debug'); - - red = - minimumRed + Math$1.CesiumMath.nextRandomNumber() * (maximumRed - minimumRed); - } - - let green = options.green; - if (!defaultValue.defined(green)) { - const minimumGreen = defaultValue.defaultValue(options.minimumGreen, 0); - const maximumGreen = defaultValue.defaultValue(options.maximumGreen, 1.0); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.lessThanOrEquals( - "minimumGreen", - minimumGreen, - maximumGreen - ); - //>>includeEnd('debug'); - green = - minimumGreen + - Math$1.CesiumMath.nextRandomNumber() * (maximumGreen - minimumGreen); - } - - let blue = options.blue; - if (!defaultValue.defined(blue)) { - const minimumBlue = defaultValue.defaultValue(options.minimumBlue, 0); - const maximumBlue = defaultValue.defaultValue(options.maximumBlue, 1.0); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.lessThanOrEquals( - "minimumBlue", - minimumBlue, - maximumBlue - ); - //>>includeEnd('debug'); - - blue = - minimumBlue + Math$1.CesiumMath.nextRandomNumber() * (maximumBlue - minimumBlue); - } - - let alpha = options.alpha; - if (!defaultValue.defined(alpha)) { - const minimumAlpha = defaultValue.defaultValue(options.minimumAlpha, 0); - const maximumAlpha = defaultValue.defaultValue(options.maximumAlpha, 1.0); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.lessThanOrEquals( - "minumumAlpha", - minimumAlpha, - maximumAlpha - ); - //>>includeEnd('debug'); - - alpha = - minimumAlpha + - Math$1.CesiumMath.nextRandomNumber() * (maximumAlpha - minimumAlpha); - } - - if (!defaultValue.defined(result)) { - return new Color(red, green, blue, alpha); - } - - result.red = red; - result.green = green; - result.blue = blue; - result.alpha = alpha; - return result; - }; - - //#rgba - const rgbaMatcher = /^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i; - //#rrggbbaa - const rrggbbaaMatcher = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i; - //rgb(), rgba(), or rgb%() - const rgbParenthesesMatcher = /^rgba?\(\s*([0-9.]+%?)\s*,\s*([0-9.]+%?)\s*,\s*([0-9.]+%?)(?:\s*,\s*([0-9.]+))?\s*\)$/i; - //hsl() or hsla() - const hslParenthesesMatcher = /^hsla?\(\s*([0-9.]+)\s*,\s*([0-9.]+%)\s*,\s*([0-9.]+%)(?:\s*,\s*([0-9.]+))?\s*\)$/i; - - /** - * Creates a Color instance from a CSS color value. - * - * @param {String} color The CSS color value in #rgb, #rgba, #rrggbb, #rrggbbaa, rgb(), rgba(), hsl(), or hsla() format. - * @param {Color} [result] The object to store the result in, if undefined a new instance will be created. - * @returns {Color} The color object, or undefined if the string was not a valid CSS color. - * - * - * @example - * const cesiumBlue = Cesium.Color.fromCssColorString('#67ADDF'); - * const green = Cesium.Color.fromCssColorString('green'); - * - * @see {@link http://www.w3.org/TR/css3-color|CSS color values} - */ - Color.fromCssColorString = function (color, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.string("color", color); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Color(); - } - - // Remove all whitespaces from the color string - color = color.replace(/\s/g, ""); - - const namedColor = Color[color.toUpperCase()]; - if (defaultValue.defined(namedColor)) { - Color.clone(namedColor, result); - return result; - } - - let matches = rgbaMatcher.exec(color); - if (matches !== null) { - result.red = parseInt(matches[1], 16) / 15; - result.green = parseInt(matches[2], 16) / 15.0; - result.blue = parseInt(matches[3], 16) / 15.0; - result.alpha = parseInt(defaultValue.defaultValue(matches[4], "f"), 16) / 15.0; - return result; - } - - matches = rrggbbaaMatcher.exec(color); - if (matches !== null) { - result.red = parseInt(matches[1], 16) / 255.0; - result.green = parseInt(matches[2], 16) / 255.0; - result.blue = parseInt(matches[3], 16) / 255.0; - result.alpha = parseInt(defaultValue.defaultValue(matches[4], "ff"), 16) / 255.0; - return result; - } - - matches = rgbParenthesesMatcher.exec(color); - if (matches !== null) { - result.red = - parseFloat(matches[1]) / ("%" === matches[1].substr(-1) ? 100.0 : 255.0); - result.green = - parseFloat(matches[2]) / ("%" === matches[2].substr(-1) ? 100.0 : 255.0); - result.blue = - parseFloat(matches[3]) / ("%" === matches[3].substr(-1) ? 100.0 : 255.0); - result.alpha = parseFloat(defaultValue.defaultValue(matches[4], "1.0")); - return result; - } - - matches = hslParenthesesMatcher.exec(color); - if (matches !== null) { - return Color.fromHsl( - parseFloat(matches[1]) / 360.0, - parseFloat(matches[2]) / 100.0, - parseFloat(matches[3]) / 100.0, - parseFloat(defaultValue.defaultValue(matches[4], "1.0")), - result - ); - } - - result = undefined; - return result; - }; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Color.packedLength = 4; - - /** - * Stores the provided instance into the provided array. - * - * @param {Color} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Color.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - array[startingIndex++] = value.red; - array[startingIndex++] = value.green; - array[startingIndex++] = value.blue; - array[startingIndex] = value.alpha; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Color} [result] The object into which to store the result. - * @returns {Color} The modified result parameter or a new Color instance if one was not provided. - */ - Color.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - if (!defaultValue.defined(result)) { - result = new Color(); - } - result.red = array[startingIndex++]; - result.green = array[startingIndex++]; - result.blue = array[startingIndex++]; - result.alpha = array[startingIndex]; - return result; - }; - - /** - * Converts a 'byte' color component in the range of 0 to 255 into - * a 'float' color component in the range of 0 to 1.0. - * - * @param {Number} number The number to be converted. - * @returns {Number} The converted number. - */ - Color.byteToFloat = function (number) { - return number / 255.0; - }; - - /** - * Converts a 'float' color component in the range of 0 to 1.0 into - * a 'byte' color component in the range of 0 to 255. - * - * @param {Number} number The number to be converted. - * @returns {Number} The converted number. - */ - Color.floatToByte = function (number) { - return number === 1.0 ? 255.0 : (number * 256.0) | 0; - }; - - /** - * Duplicates a Color. - * - * @param {Color} color The Color to duplicate. - * @param {Color} [result] The object to store the result in, if undefined a new instance will be created. - * @returns {Color} The modified result parameter or a new instance if result was undefined. (Returns undefined if color is undefined) - */ - Color.clone = function (color, result) { - if (!defaultValue.defined(color)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new Color(color.red, color.green, color.blue, color.alpha); - } - result.red = color.red; - result.green = color.green; - result.blue = color.blue; - result.alpha = color.alpha; - return result; - }; - - /** - * Returns true if the first Color equals the second color. - * - * @param {Color} left The first Color to compare for equality. - * @param {Color} right The second Color to compare for equality. - * @returns {Boolean} true if the Colors are equal; otherwise, false. - */ - Color.equals = function (left, right) { - return ( - left === right || // - (defaultValue.defined(left) && // - defaultValue.defined(right) && // - left.red === right.red && // - left.green === right.green && // - left.blue === right.blue && // - left.alpha === right.alpha) - ); - }; - - /** - * @private - */ - Color.equalsArray = function (color, array, offset) { - return ( - color.red === array[offset] && - color.green === array[offset + 1] && - color.blue === array[offset + 2] && - color.alpha === array[offset + 3] - ); - }; - - /** - * Returns a duplicate of a Color instance. - * - * @param {Color} [result] The object to store the result in, if undefined a new instance will be created. - * @returns {Color} The modified result parameter or a new instance if result was undefined. - */ - Color.prototype.clone = function (result) { - return Color.clone(this, result); - }; - - /** - * Returns true if this Color equals other. - * - * @param {Color} other The Color to compare for equality. - * @returns {Boolean} true if the Colors are equal; otherwise, false. - */ - Color.prototype.equals = function (other) { - return Color.equals(this, other); - }; - - /** - * Returns true if this Color equals other componentwise within the specified epsilon. - * - * @param {Color} other The Color to compare for equality. - * @param {Number} [epsilon=0.0] The epsilon to use for equality testing. - * @returns {Boolean} true if the Colors are equal within the specified epsilon; otherwise, false. - */ - Color.prototype.equalsEpsilon = function (other, epsilon) { - return ( - this === other || // - (defaultValue.defined(other) && // - Math.abs(this.red - other.red) <= epsilon && // - Math.abs(this.green - other.green) <= epsilon && // - Math.abs(this.blue - other.blue) <= epsilon && // - Math.abs(this.alpha - other.alpha) <= epsilon) - ); - }; - - /** - * Creates a string representing this Color in the format '(red, green, blue, alpha)'. - * - * @returns {String} A string representing this Color in the format '(red, green, blue, alpha)'. - */ - Color.prototype.toString = function () { - return `(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`; - }; - - /** - * Creates a string containing the CSS color value for this color. - * - * @returns {String} The CSS equivalent of this color. - * - * @see {@link http://www.w3.org/TR/css3-color/#rgba-color|CSS RGB or RGBA color values} - */ - Color.prototype.toCssColorString = function () { - const red = Color.floatToByte(this.red); - const green = Color.floatToByte(this.green); - const blue = Color.floatToByte(this.blue); - if (this.alpha === 1) { - return `rgb(${red},${green},${blue})`; - } - return `rgba(${red},${green},${blue},${this.alpha})`; - }; - - /** - * Creates a string containing CSS hex string color value for this color. - * - * @returns {String} The CSS hex string equivalent of this color. - */ - Color.prototype.toCssHexString = function () { - let r = Color.floatToByte(this.red).toString(16); - if (r.length < 2) { - r = `0${r}`; - } - let g = Color.floatToByte(this.green).toString(16); - if (g.length < 2) { - g = `0${g}`; - } - let b = Color.floatToByte(this.blue).toString(16); - if (b.length < 2) { - b = `0${b}`; - } - if (this.alpha < 1) { - let hexAlpha = Color.floatToByte(this.alpha).toString(16); - if (hexAlpha.length < 2) { - hexAlpha = `0${hexAlpha}`; - } - return `#${r}${g}${b}${hexAlpha}`; - } - return `#${r}${g}${b}`; - }; - - /** - * Converts this color to an array of red, green, blue, and alpha values - * that are in the range of 0 to 255. - * - * @param {Number[]} [result] The array to store the result in, if undefined a new instance will be created. - * @returns {Number[]} The modified result parameter or a new instance if result was undefined. - */ - Color.prototype.toBytes = function (result) { - const red = Color.floatToByte(this.red); - const green = Color.floatToByte(this.green); - const blue = Color.floatToByte(this.blue); - const alpha = Color.floatToByte(this.alpha); - - if (!defaultValue.defined(result)) { - return [red, green, blue, alpha]; - } - result[0] = red; - result[1] = green; - result[2] = blue; - result[3] = alpha; - return result; - }; - - /** - * Converts this color to a single numeric unsigned 32-bit RGBA value, using the endianness - * of the system. - * - * @returns {Number} A single numeric unsigned 32-bit RGBA value. - * - * - * @example - * const rgba = Cesium.Color.BLUE.toRgba(); - * - * @see Color.fromRgba - */ - Color.prototype.toRgba = function () { - // scratchUint32Array and scratchUint8Array share an underlying array buffer - scratchUint8Array[0] = Color.floatToByte(this.red); - scratchUint8Array[1] = Color.floatToByte(this.green); - scratchUint8Array[2] = Color.floatToByte(this.blue); - scratchUint8Array[3] = Color.floatToByte(this.alpha); - return scratchUint32Array[0]; - }; - - /** - * Brightens this color by the provided magnitude. - * - * @param {Number} magnitude A positive number indicating the amount to brighten. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - * - * @example - * const brightBlue = Cesium.Color.BLUE.brighten(0.5, new Cesium.Color()); - */ - Color.prototype.brighten = function (magnitude, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("magnitude", magnitude); - Check.Check.typeOf.number.greaterThanOrEquals("magnitude", magnitude, 0.0); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - magnitude = 1.0 - magnitude; - result.red = 1.0 - (1.0 - this.red) * magnitude; - result.green = 1.0 - (1.0 - this.green) * magnitude; - result.blue = 1.0 - (1.0 - this.blue) * magnitude; - result.alpha = this.alpha; - return result; - }; - - /** - * Darkens this color by the provided magnitude. - * - * @param {Number} magnitude A positive number indicating the amount to darken. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - * - * @example - * const darkBlue = Cesium.Color.BLUE.darken(0.5, new Cesium.Color()); - */ - Color.prototype.darken = function (magnitude, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("magnitude", magnitude); - Check.Check.typeOf.number.greaterThanOrEquals("magnitude", magnitude, 0.0); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - magnitude = 1.0 - magnitude; - result.red = this.red * magnitude; - result.green = this.green * magnitude; - result.blue = this.blue * magnitude; - result.alpha = this.alpha; - return result; - }; - - /** - * Creates a new Color that has the same red, green, and blue components - * as this Color, but with the specified alpha value. - * - * @param {Number} alpha The new alpha component. - * @param {Color} [result] The object onto which to store the result. - * @returns {Color} The modified result parameter or a new Color instance if one was not provided. - * - * @example const translucentRed = Cesium.Color.RED.withAlpha(0.9); - */ - Color.prototype.withAlpha = function (alpha, result) { - return Color.fromAlpha(this, alpha, result); - }; - - /** - * Computes the componentwise sum of two Colors. - * - * @param {Color} left The first Color. - * @param {Color} right The second Color. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - */ - Color.add = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.red = left.red + right.red; - result.green = left.green + right.green; - result.blue = left.blue + right.blue; - result.alpha = left.alpha + right.alpha; - return result; - }; - - /** - * Computes the componentwise difference of two Colors. - * - * @param {Color} left The first Color. - * @param {Color} right The second Color. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - */ - Color.subtract = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.red = left.red - right.red; - result.green = left.green - right.green; - result.blue = left.blue - right.blue; - result.alpha = left.alpha - right.alpha; - return result; - }; - - /** - * Computes the componentwise product of two Colors. - * - * @param {Color} left The first Color. - * @param {Color} right The second Color. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - */ - Color.multiply = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.red = left.red * right.red; - result.green = left.green * right.green; - result.blue = left.blue * right.blue; - result.alpha = left.alpha * right.alpha; - return result; - }; - - /** - * Computes the componentwise quotient of two Colors. - * - * @param {Color} left The first Color. - * @param {Color} right The second Color. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - */ - Color.divide = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.red = left.red / right.red; - result.green = left.green / right.green; - result.blue = left.blue / right.blue; - result.alpha = left.alpha / right.alpha; - return result; - }; - - /** - * Computes the componentwise modulus of two Colors. - * - * @param {Color} left The first Color. - * @param {Color} right The second Color. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - */ - Color.mod = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.red = left.red % right.red; - result.green = left.green % right.green; - result.blue = left.blue % right.blue; - result.alpha = left.alpha % right.alpha; - return result; - }; - - /** - * Computes the linear interpolation or extrapolation at t between the provided colors. - * - * @param {Color} start The color corresponding to t at 0.0. - * @param {Color} end The color corresponding to t at 1.0. - * @param {Number} t The point along t at which to interpolate. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - */ - Color.lerp = function (start, end, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("start", start); - Check.Check.typeOf.object("end", end); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.red = Math$1.CesiumMath.lerp(start.red, end.red, t); - result.green = Math$1.CesiumMath.lerp(start.green, end.green, t); - result.blue = Math$1.CesiumMath.lerp(start.blue, end.blue, t); - result.alpha = Math$1.CesiumMath.lerp(start.alpha, end.alpha, t); - return result; - }; - - /** - * Multiplies the provided Color componentwise by the provided scalar. - * - * @param {Color} color The Color to be scaled. - * @param {Number} scalar The scalar to multiply with. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - */ - Color.multiplyByScalar = function (color, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("color", color); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.red = color.red * scalar; - result.green = color.green * scalar; - result.blue = color.blue * scalar; - result.alpha = color.alpha * scalar; - return result; - }; - - /** - * Divides the provided Color componentwise by the provided scalar. - * - * @param {Color} color The Color to be divided. - * @param {Number} scalar The scalar to divide with. - * @param {Color} result The object onto which to store the result. - * @returns {Color} The modified result parameter. - */ - Color.divideByScalar = function (color, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("color", color); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.red = color.red / scalar; - result.green = color.green / scalar; - result.blue = color.blue / scalar; - result.alpha = color.alpha / scalar; - return result; - }; - - /** - * An immutable Color instance initialized to CSS color #F0F8FF - * - * - * @constant - * @type {Color} - */ - Color.ALICEBLUE = Object.freeze(Color.fromCssColorString("#F0F8FF")); - - /** - * An immutable Color instance initialized to CSS color #FAEBD7 - * - * - * @constant - * @type {Color} - */ - Color.ANTIQUEWHITE = Object.freeze(Color.fromCssColorString("#FAEBD7")); - - /** - * An immutable Color instance initialized to CSS color #00FFFF - * - * - * @constant - * @type {Color} - */ - Color.AQUA = Object.freeze(Color.fromCssColorString("#00FFFF")); - - /** - * An immutable Color instance initialized to CSS color #7FFFD4 - * - * - * @constant - * @type {Color} - */ - Color.AQUAMARINE = Object.freeze(Color.fromCssColorString("#7FFFD4")); - - /** - * An immutable Color instance initialized to CSS color #F0FFFF - * - * - * @constant - * @type {Color} - */ - Color.AZURE = Object.freeze(Color.fromCssColorString("#F0FFFF")); - - /** - * An immutable Color instance initialized to CSS color #F5F5DC - * - * - * @constant - * @type {Color} - */ - Color.BEIGE = Object.freeze(Color.fromCssColorString("#F5F5DC")); - - /** - * An immutable Color instance initialized to CSS color #FFE4C4 - * - * - * @constant - * @type {Color} - */ - Color.BISQUE = Object.freeze(Color.fromCssColorString("#FFE4C4")); - - /** - * An immutable Color instance initialized to CSS color #000000 - * - * - * @constant - * @type {Color} - */ - Color.BLACK = Object.freeze(Color.fromCssColorString("#000000")); - - /** - * An immutable Color instance initialized to CSS color #FFEBCD - * - * - * @constant - * @type {Color} - */ - Color.BLANCHEDALMOND = Object.freeze(Color.fromCssColorString("#FFEBCD")); - - /** - * An immutable Color instance initialized to CSS color #0000FF - * - * - * @constant - * @type {Color} - */ - Color.BLUE = Object.freeze(Color.fromCssColorString("#0000FF")); - - /** - * An immutable Color instance initialized to CSS color #8A2BE2 - * - * - * @constant - * @type {Color} - */ - Color.BLUEVIOLET = Object.freeze(Color.fromCssColorString("#8A2BE2")); - - /** - * An immutable Color instance initialized to CSS color #A52A2A - * - * - * @constant - * @type {Color} - */ - Color.BROWN = Object.freeze(Color.fromCssColorString("#A52A2A")); - - /** - * An immutable Color instance initialized to CSS color #DEB887 - * - * - * @constant - * @type {Color} - */ - Color.BURLYWOOD = Object.freeze(Color.fromCssColorString("#DEB887")); - - /** - * An immutable Color instance initialized to CSS color #5F9EA0 - * - * - * @constant - * @type {Color} - */ - Color.CADETBLUE = Object.freeze(Color.fromCssColorString("#5F9EA0")); - /** - * An immutable Color instance initialized to CSS color #7FFF00 - * - * - * @constant - * @type {Color} - */ - Color.CHARTREUSE = Object.freeze(Color.fromCssColorString("#7FFF00")); - - /** - * An immutable Color instance initialized to CSS color #D2691E - * - * - * @constant - * @type {Color} - */ - Color.CHOCOLATE = Object.freeze(Color.fromCssColorString("#D2691E")); - - /** - * An immutable Color instance initialized to CSS color #FF7F50 - * - * - * @constant - * @type {Color} - */ - Color.CORAL = Object.freeze(Color.fromCssColorString("#FF7F50")); - - /** - * An immutable Color instance initialized to CSS color #6495ED - * - * - * @constant - * @type {Color} - */ - Color.CORNFLOWERBLUE = Object.freeze(Color.fromCssColorString("#6495ED")); - - /** - * An immutable Color instance initialized to CSS color #FFF8DC - * - * - * @constant - * @type {Color} - */ - Color.CORNSILK = Object.freeze(Color.fromCssColorString("#FFF8DC")); - - /** - * An immutable Color instance initialized to CSS color #DC143C - * - * - * @constant - * @type {Color} - */ - Color.CRIMSON = Object.freeze(Color.fromCssColorString("#DC143C")); - - /** - * An immutable Color instance initialized to CSS color #00FFFF - * - * - * @constant - * @type {Color} - */ - Color.CYAN = Object.freeze(Color.fromCssColorString("#00FFFF")); - - /** - * An immutable Color instance initialized to CSS color #00008B - * - * - * @constant - * @type {Color} - */ - Color.DARKBLUE = Object.freeze(Color.fromCssColorString("#00008B")); - - /** - * An immutable Color instance initialized to CSS color #008B8B - * - * - * @constant - * @type {Color} - */ - Color.DARKCYAN = Object.freeze(Color.fromCssColorString("#008B8B")); - - /** - * An immutable Color instance initialized to CSS color #B8860B - * - * - * @constant - * @type {Color} - */ - Color.DARKGOLDENROD = Object.freeze(Color.fromCssColorString("#B8860B")); - - /** - * An immutable Color instance initialized to CSS color #A9A9A9 - * - * - * @constant - * @type {Color} - */ - Color.DARKGRAY = Object.freeze(Color.fromCssColorString("#A9A9A9")); - - /** - * An immutable Color instance initialized to CSS color #006400 - * - * - * @constant - * @type {Color} - */ - Color.DARKGREEN = Object.freeze(Color.fromCssColorString("#006400")); - - /** - * An immutable Color instance initialized to CSS color #A9A9A9 - * - * - * @constant - * @type {Color} - */ - Color.DARKGREY = Color.DARKGRAY; - - /** - * An immutable Color instance initialized to CSS color #BDB76B - * - * - * @constant - * @type {Color} - */ - Color.DARKKHAKI = Object.freeze(Color.fromCssColorString("#BDB76B")); - - /** - * An immutable Color instance initialized to CSS color #8B008B - * - * - * @constant - * @type {Color} - */ - Color.DARKMAGENTA = Object.freeze(Color.fromCssColorString("#8B008B")); - - /** - * An immutable Color instance initialized to CSS color #556B2F - * - * - * @constant - * @type {Color} - */ - Color.DARKOLIVEGREEN = Object.freeze(Color.fromCssColorString("#556B2F")); - - /** - * An immutable Color instance initialized to CSS color #FF8C00 - * - * - * @constant - * @type {Color} - */ - Color.DARKORANGE = Object.freeze(Color.fromCssColorString("#FF8C00")); - - /** - * An immutable Color instance initialized to CSS color #9932CC - * - * - * @constant - * @type {Color} - */ - Color.DARKORCHID = Object.freeze(Color.fromCssColorString("#9932CC")); - - /** - * An immutable Color instance initialized to CSS color #8B0000 - * - * - * @constant - * @type {Color} - */ - Color.DARKRED = Object.freeze(Color.fromCssColorString("#8B0000")); - - /** - * An immutable Color instance initialized to CSS color #E9967A - * - * - * @constant - * @type {Color} - */ - Color.DARKSALMON = Object.freeze(Color.fromCssColorString("#E9967A")); - - /** - * An immutable Color instance initialized to CSS color #8FBC8F - * - * - * @constant - * @type {Color} - */ - Color.DARKSEAGREEN = Object.freeze(Color.fromCssColorString("#8FBC8F")); - - /** - * An immutable Color instance initialized to CSS color #483D8B - * - * - * @constant - * @type {Color} - */ - Color.DARKSLATEBLUE = Object.freeze(Color.fromCssColorString("#483D8B")); - - /** - * An immutable Color instance initialized to CSS color #2F4F4F - * - * - * @constant - * @type {Color} - */ - Color.DARKSLATEGRAY = Object.freeze(Color.fromCssColorString("#2F4F4F")); - - /** - * An immutable Color instance initialized to CSS color #2F4F4F - * - * - * @constant - * @type {Color} - */ - Color.DARKSLATEGREY = Color.DARKSLATEGRAY; - - /** - * An immutable Color instance initialized to CSS color #00CED1 - * - * - * @constant - * @type {Color} - */ - Color.DARKTURQUOISE = Object.freeze(Color.fromCssColorString("#00CED1")); - - /** - * An immutable Color instance initialized to CSS color #9400D3 - * - * - * @constant - * @type {Color} - */ - Color.DARKVIOLET = Object.freeze(Color.fromCssColorString("#9400D3")); - - /** - * An immutable Color instance initialized to CSS color #FF1493 - * - * - * @constant - * @type {Color} - */ - Color.DEEPPINK = Object.freeze(Color.fromCssColorString("#FF1493")); - - /** - * An immutable Color instance initialized to CSS color #00BFFF - * - * - * @constant - * @type {Color} - */ - Color.DEEPSKYBLUE = Object.freeze(Color.fromCssColorString("#00BFFF")); - - /** - * An immutable Color instance initialized to CSS color #696969 - * - * - * @constant - * @type {Color} - */ - Color.DIMGRAY = Object.freeze(Color.fromCssColorString("#696969")); - - /** - * An immutable Color instance initialized to CSS color #696969 - * - * - * @constant - * @type {Color} - */ - Color.DIMGREY = Color.DIMGRAY; - - /** - * An immutable Color instance initialized to CSS color #1E90FF - * - * - * @constant - * @type {Color} - */ - Color.DODGERBLUE = Object.freeze(Color.fromCssColorString("#1E90FF")); - - /** - * An immutable Color instance initialized to CSS color #B22222 - * - * - * @constant - * @type {Color} - */ - Color.FIREBRICK = Object.freeze(Color.fromCssColorString("#B22222")); - - /** - * An immutable Color instance initialized to CSS color #FFFAF0 - * - * - * @constant - * @type {Color} - */ - Color.FLORALWHITE = Object.freeze(Color.fromCssColorString("#FFFAF0")); - - /** - * An immutable Color instance initialized to CSS color #228B22 - * - * - * @constant - * @type {Color} - */ - Color.FORESTGREEN = Object.freeze(Color.fromCssColorString("#228B22")); - - /** - * An immutable Color instance initialized to CSS color #FF00FF - * - * - * @constant - * @type {Color} - */ - Color.FUCHSIA = Object.freeze(Color.fromCssColorString("#FF00FF")); - - /** - * An immutable Color instance initialized to CSS color #DCDCDC - * - * - * @constant - * @type {Color} - */ - Color.GAINSBORO = Object.freeze(Color.fromCssColorString("#DCDCDC")); - - /** - * An immutable Color instance initialized to CSS color #F8F8FF - * - * - * @constant - * @type {Color} - */ - Color.GHOSTWHITE = Object.freeze(Color.fromCssColorString("#F8F8FF")); - - /** - * An immutable Color instance initialized to CSS color #FFD700 - * - * - * @constant - * @type {Color} - */ - Color.GOLD = Object.freeze(Color.fromCssColorString("#FFD700")); - - /** - * An immutable Color instance initialized to CSS color #DAA520 - * - * - * @constant - * @type {Color} - */ - Color.GOLDENROD = Object.freeze(Color.fromCssColorString("#DAA520")); - - /** - * An immutable Color instance initialized to CSS color #808080 - * - * - * @constant - * @type {Color} - */ - Color.GRAY = Object.freeze(Color.fromCssColorString("#808080")); - - /** - * An immutable Color instance initialized to CSS color #008000 - * - * - * @constant - * @type {Color} - */ - Color.GREEN = Object.freeze(Color.fromCssColorString("#008000")); - - /** - * An immutable Color instance initialized to CSS color #ADFF2F - * - * - * @constant - * @type {Color} - */ - Color.GREENYELLOW = Object.freeze(Color.fromCssColorString("#ADFF2F")); - - /** - * An immutable Color instance initialized to CSS color #808080 - * - * - * @constant - * @type {Color} - */ - Color.GREY = Color.GRAY; - - /** - * An immutable Color instance initialized to CSS color #F0FFF0 - * - * - * @constant - * @type {Color} - */ - Color.HONEYDEW = Object.freeze(Color.fromCssColorString("#F0FFF0")); - - /** - * An immutable Color instance initialized to CSS color #FF69B4 - * - * - * @constant - * @type {Color} - */ - Color.HOTPINK = Object.freeze(Color.fromCssColorString("#FF69B4")); - - /** - * An immutable Color instance initialized to CSS color #CD5C5C - * - * - * @constant - * @type {Color} - */ - Color.INDIANRED = Object.freeze(Color.fromCssColorString("#CD5C5C")); - - /** - * An immutable Color instance initialized to CSS color #4B0082 - * - * - * @constant - * @type {Color} - */ - Color.INDIGO = Object.freeze(Color.fromCssColorString("#4B0082")); - - /** - * An immutable Color instance initialized to CSS color #FFFFF0 - * - * - * @constant - * @type {Color} - */ - Color.IVORY = Object.freeze(Color.fromCssColorString("#FFFFF0")); - - /** - * An immutable Color instance initialized to CSS color #F0E68C - * - * - * @constant - * @type {Color} - */ - Color.KHAKI = Object.freeze(Color.fromCssColorString("#F0E68C")); - - /** - * An immutable Color instance initialized to CSS color #E6E6FA - * - * - * @constant - * @type {Color} - */ - Color.LAVENDER = Object.freeze(Color.fromCssColorString("#E6E6FA")); - - /** - * An immutable Color instance initialized to CSS color #FFF0F5 - * - * - * @constant - * @type {Color} - */ - Color.LAVENDAR_BLUSH = Object.freeze(Color.fromCssColorString("#FFF0F5")); - - /** - * An immutable Color instance initialized to CSS color #7CFC00 - * - * - * @constant - * @type {Color} - */ - Color.LAWNGREEN = Object.freeze(Color.fromCssColorString("#7CFC00")); - - /** - * An immutable Color instance initialized to CSS color #FFFACD - * - * - * @constant - * @type {Color} - */ - Color.LEMONCHIFFON = Object.freeze(Color.fromCssColorString("#FFFACD")); - - /** - * An immutable Color instance initialized to CSS color #ADD8E6 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTBLUE = Object.freeze(Color.fromCssColorString("#ADD8E6")); - - /** - * An immutable Color instance initialized to CSS color #F08080 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTCORAL = Object.freeze(Color.fromCssColorString("#F08080")); - - /** - * An immutable Color instance initialized to CSS color #E0FFFF - * - * - * @constant - * @type {Color} - */ - Color.LIGHTCYAN = Object.freeze(Color.fromCssColorString("#E0FFFF")); - - /** - * An immutable Color instance initialized to CSS color #FAFAD2 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTGOLDENRODYELLOW = Object.freeze(Color.fromCssColorString("#FAFAD2")); - - /** - * An immutable Color instance initialized to CSS color #D3D3D3 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTGRAY = Object.freeze(Color.fromCssColorString("#D3D3D3")); - - /** - * An immutable Color instance initialized to CSS color #90EE90 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTGREEN = Object.freeze(Color.fromCssColorString("#90EE90")); - - /** - * An immutable Color instance initialized to CSS color #D3D3D3 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTGREY = Color.LIGHTGRAY; - - /** - * An immutable Color instance initialized to CSS color #FFB6C1 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTPINK = Object.freeze(Color.fromCssColorString("#FFB6C1")); - - /** - * An immutable Color instance initialized to CSS color #20B2AA - * - * - * @constant - * @type {Color} - */ - Color.LIGHTSEAGREEN = Object.freeze(Color.fromCssColorString("#20B2AA")); - - /** - * An immutable Color instance initialized to CSS color #87CEFA - * - * - * @constant - * @type {Color} - */ - Color.LIGHTSKYBLUE = Object.freeze(Color.fromCssColorString("#87CEFA")); - - /** - * An immutable Color instance initialized to CSS color #778899 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTSLATEGRAY = Object.freeze(Color.fromCssColorString("#778899")); - - /** - * An immutable Color instance initialized to CSS color #778899 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTSLATEGREY = Color.LIGHTSLATEGRAY; - - /** - * An immutable Color instance initialized to CSS color #B0C4DE - * - * - * @constant - * @type {Color} - */ - Color.LIGHTSTEELBLUE = Object.freeze(Color.fromCssColorString("#B0C4DE")); - - /** - * An immutable Color instance initialized to CSS color #FFFFE0 - * - * - * @constant - * @type {Color} - */ - Color.LIGHTYELLOW = Object.freeze(Color.fromCssColorString("#FFFFE0")); - - /** - * An immutable Color instance initialized to CSS color #00FF00 - * - * - * @constant - * @type {Color} - */ - Color.LIME = Object.freeze(Color.fromCssColorString("#00FF00")); - - /** - * An immutable Color instance initialized to CSS color #32CD32 - * - * - * @constant - * @type {Color} - */ - Color.LIMEGREEN = Object.freeze(Color.fromCssColorString("#32CD32")); - - /** - * An immutable Color instance initialized to CSS color #FAF0E6 - * - * - * @constant - * @type {Color} - */ - Color.LINEN = Object.freeze(Color.fromCssColorString("#FAF0E6")); - - /** - * An immutable Color instance initialized to CSS color #FF00FF - * - * - * @constant - * @type {Color} - */ - Color.MAGENTA = Object.freeze(Color.fromCssColorString("#FF00FF")); - - /** - * An immutable Color instance initialized to CSS color #800000 - * - * - * @constant - * @type {Color} - */ - Color.MAROON = Object.freeze(Color.fromCssColorString("#800000")); - - /** - * An immutable Color instance initialized to CSS color #66CDAA - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMAQUAMARINE = Object.freeze(Color.fromCssColorString("#66CDAA")); - - /** - * An immutable Color instance initialized to CSS color #0000CD - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMBLUE = Object.freeze(Color.fromCssColorString("#0000CD")); - - /** - * An immutable Color instance initialized to CSS color #BA55D3 - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMORCHID = Object.freeze(Color.fromCssColorString("#BA55D3")); - - /** - * An immutable Color instance initialized to CSS color #9370DB - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMPURPLE = Object.freeze(Color.fromCssColorString("#9370DB")); - - /** - * An immutable Color instance initialized to CSS color #3CB371 - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMSEAGREEN = Object.freeze(Color.fromCssColorString("#3CB371")); - - /** - * An immutable Color instance initialized to CSS color #7B68EE - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMSLATEBLUE = Object.freeze(Color.fromCssColorString("#7B68EE")); - - /** - * An immutable Color instance initialized to CSS color #00FA9A - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMSPRINGGREEN = Object.freeze(Color.fromCssColorString("#00FA9A")); - - /** - * An immutable Color instance initialized to CSS color #48D1CC - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMTURQUOISE = Object.freeze(Color.fromCssColorString("#48D1CC")); - - /** - * An immutable Color instance initialized to CSS color #C71585 - * - * - * @constant - * @type {Color} - */ - Color.MEDIUMVIOLETRED = Object.freeze(Color.fromCssColorString("#C71585")); - - /** - * An immutable Color instance initialized to CSS color #191970 - * - * - * @constant - * @type {Color} - */ - Color.MIDNIGHTBLUE = Object.freeze(Color.fromCssColorString("#191970")); - - /** - * An immutable Color instance initialized to CSS color #F5FFFA - * - * - * @constant - * @type {Color} - */ - Color.MINTCREAM = Object.freeze(Color.fromCssColorString("#F5FFFA")); - - /** - * An immutable Color instance initialized to CSS color #FFE4E1 - * - * - * @constant - * @type {Color} - */ - Color.MISTYROSE = Object.freeze(Color.fromCssColorString("#FFE4E1")); - - /** - * An immutable Color instance initialized to CSS color #FFE4B5 - * - * - * @constant - * @type {Color} - */ - Color.MOCCASIN = Object.freeze(Color.fromCssColorString("#FFE4B5")); - - /** - * An immutable Color instance initialized to CSS color #FFDEAD - * - * - * @constant - * @type {Color} - */ - Color.NAVAJOWHITE = Object.freeze(Color.fromCssColorString("#FFDEAD")); - - /** - * An immutable Color instance initialized to CSS color #000080 - * - * - * @constant - * @type {Color} - */ - Color.NAVY = Object.freeze(Color.fromCssColorString("#000080")); - - /** - * An immutable Color instance initialized to CSS color #FDF5E6 - * - * - * @constant - * @type {Color} - */ - Color.OLDLACE = Object.freeze(Color.fromCssColorString("#FDF5E6")); - - /** - * An immutable Color instance initialized to CSS color #808000 - * - * - * @constant - * @type {Color} - */ - Color.OLIVE = Object.freeze(Color.fromCssColorString("#808000")); - - /** - * An immutable Color instance initialized to CSS color #6B8E23 - * - * - * @constant - * @type {Color} - */ - Color.OLIVEDRAB = Object.freeze(Color.fromCssColorString("#6B8E23")); - - /** - * An immutable Color instance initialized to CSS color #FFA500 - * - * - * @constant - * @type {Color} - */ - Color.ORANGE = Object.freeze(Color.fromCssColorString("#FFA500")); - - /** - * An immutable Color instance initialized to CSS color #FF4500 - * - * - * @constant - * @type {Color} - */ - Color.ORANGERED = Object.freeze(Color.fromCssColorString("#FF4500")); - - /** - * An immutable Color instance initialized to CSS color #DA70D6 - * - * - * @constant - * @type {Color} - */ - Color.ORCHID = Object.freeze(Color.fromCssColorString("#DA70D6")); - - /** - * An immutable Color instance initialized to CSS color #EEE8AA - * - * - * @constant - * @type {Color} - */ - Color.PALEGOLDENROD = Object.freeze(Color.fromCssColorString("#EEE8AA")); - - /** - * An immutable Color instance initialized to CSS color #98FB98 - * - * - * @constant - * @type {Color} - */ - Color.PALEGREEN = Object.freeze(Color.fromCssColorString("#98FB98")); - - /** - * An immutable Color instance initialized to CSS color #AFEEEE - * - * - * @constant - * @type {Color} - */ - Color.PALETURQUOISE = Object.freeze(Color.fromCssColorString("#AFEEEE")); - - /** - * An immutable Color instance initialized to CSS color #DB7093 - * - * - * @constant - * @type {Color} - */ - Color.PALEVIOLETRED = Object.freeze(Color.fromCssColorString("#DB7093")); - - /** - * An immutable Color instance initialized to CSS color #FFEFD5 - * - * - * @constant - * @type {Color} - */ - Color.PAPAYAWHIP = Object.freeze(Color.fromCssColorString("#FFEFD5")); - - /** - * An immutable Color instance initialized to CSS color #FFDAB9 - * - * - * @constant - * @type {Color} - */ - Color.PEACHPUFF = Object.freeze(Color.fromCssColorString("#FFDAB9")); - - /** - * An immutable Color instance initialized to CSS color #CD853F - * - * - * @constant - * @type {Color} - */ - Color.PERU = Object.freeze(Color.fromCssColorString("#CD853F")); - - /** - * An immutable Color instance initialized to CSS color #FFC0CB - * - * - * @constant - * @type {Color} - */ - Color.PINK = Object.freeze(Color.fromCssColorString("#FFC0CB")); - - /** - * An immutable Color instance initialized to CSS color #DDA0DD - * - * - * @constant - * @type {Color} - */ - Color.PLUM = Object.freeze(Color.fromCssColorString("#DDA0DD")); - - /** - * An immutable Color instance initialized to CSS color #B0E0E6 - * - * - * @constant - * @type {Color} - */ - Color.POWDERBLUE = Object.freeze(Color.fromCssColorString("#B0E0E6")); - - /** - * An immutable Color instance initialized to CSS color #800080 - * - * - * @constant - * @type {Color} - */ - Color.PURPLE = Object.freeze(Color.fromCssColorString("#800080")); - - /** - * An immutable Color instance initialized to CSS color #FF0000 - * - * - * @constant - * @type {Color} - */ - Color.RED = Object.freeze(Color.fromCssColorString("#FF0000")); - - /** - * An immutable Color instance initialized to CSS color #BC8F8F - * - * - * @constant - * @type {Color} - */ - Color.ROSYBROWN = Object.freeze(Color.fromCssColorString("#BC8F8F")); - - /** - * An immutable Color instance initialized to CSS color #4169E1 - * - * - * @constant - * @type {Color} - */ - Color.ROYALBLUE = Object.freeze(Color.fromCssColorString("#4169E1")); - - /** - * An immutable Color instance initialized to CSS color #8B4513 - * - * - * @constant - * @type {Color} - */ - Color.SADDLEBROWN = Object.freeze(Color.fromCssColorString("#8B4513")); - - /** - * An immutable Color instance initialized to CSS color #FA8072 - * - * - * @constant - * @type {Color} - */ - Color.SALMON = Object.freeze(Color.fromCssColorString("#FA8072")); - - /** - * An immutable Color instance initialized to CSS color #F4A460 - * - * - * @constant - * @type {Color} - */ - Color.SANDYBROWN = Object.freeze(Color.fromCssColorString("#F4A460")); - - /** - * An immutable Color instance initialized to CSS color #2E8B57 - * - * - * @constant - * @type {Color} - */ - Color.SEAGREEN = Object.freeze(Color.fromCssColorString("#2E8B57")); - - /** - * An immutable Color instance initialized to CSS color #FFF5EE - * - * - * @constant - * @type {Color} - */ - Color.SEASHELL = Object.freeze(Color.fromCssColorString("#FFF5EE")); - - /** - * An immutable Color instance initialized to CSS color #A0522D - * - * - * @constant - * @type {Color} - */ - Color.SIENNA = Object.freeze(Color.fromCssColorString("#A0522D")); - - /** - * An immutable Color instance initialized to CSS color #C0C0C0 - * - * - * @constant - * @type {Color} - */ - Color.SILVER = Object.freeze(Color.fromCssColorString("#C0C0C0")); - - /** - * An immutable Color instance initialized to CSS color #87CEEB - * - * - * @constant - * @type {Color} - */ - Color.SKYBLUE = Object.freeze(Color.fromCssColorString("#87CEEB")); - - /** - * An immutable Color instance initialized to CSS color #6A5ACD - * - * - * @constant - * @type {Color} - */ - Color.SLATEBLUE = Object.freeze(Color.fromCssColorString("#6A5ACD")); - - /** - * An immutable Color instance initialized to CSS color #708090 - * - * - * @constant - * @type {Color} - */ - Color.SLATEGRAY = Object.freeze(Color.fromCssColorString("#708090")); - - /** - * An immutable Color instance initialized to CSS color #708090 - * - * - * @constant - * @type {Color} - */ - Color.SLATEGREY = Color.SLATEGRAY; - - /** - * An immutable Color instance initialized to CSS color #FFFAFA - * - * - * @constant - * @type {Color} - */ - Color.SNOW = Object.freeze(Color.fromCssColorString("#FFFAFA")); - - /** - * An immutable Color instance initialized to CSS color #00FF7F - * - * - * @constant - * @type {Color} - */ - Color.SPRINGGREEN = Object.freeze(Color.fromCssColorString("#00FF7F")); - - /** - * An immutable Color instance initialized to CSS color #4682B4 - * - * - * @constant - * @type {Color} - */ - Color.STEELBLUE = Object.freeze(Color.fromCssColorString("#4682B4")); - - /** - * An immutable Color instance initialized to CSS color #D2B48C - * - * - * @constant - * @type {Color} - */ - Color.TAN = Object.freeze(Color.fromCssColorString("#D2B48C")); - - /** - * An immutable Color instance initialized to CSS color #008080 - * - * - * @constant - * @type {Color} - */ - Color.TEAL = Object.freeze(Color.fromCssColorString("#008080")); - - /** - * An immutable Color instance initialized to CSS color #D8BFD8 - * - * - * @constant - * @type {Color} - */ - Color.THISTLE = Object.freeze(Color.fromCssColorString("#D8BFD8")); - - /** - * An immutable Color instance initialized to CSS color #FF6347 - * - * - * @constant - * @type {Color} - */ - Color.TOMATO = Object.freeze(Color.fromCssColorString("#FF6347")); - - /** - * An immutable Color instance initialized to CSS color #40E0D0 - * - * - * @constant - * @type {Color} - */ - Color.TURQUOISE = Object.freeze(Color.fromCssColorString("#40E0D0")); - - /** - * An immutable Color instance initialized to CSS color #EE82EE - * - * - * @constant - * @type {Color} - */ - Color.VIOLET = Object.freeze(Color.fromCssColorString("#EE82EE")); - - /** - * An immutable Color instance initialized to CSS color #F5DEB3 - * - * - * @constant - * @type {Color} - */ - Color.WHEAT = Object.freeze(Color.fromCssColorString("#F5DEB3")); - - /** - * An immutable Color instance initialized to CSS color #FFFFFF - * - * - * @constant - * @type {Color} - */ - Color.WHITE = Object.freeze(Color.fromCssColorString("#FFFFFF")); - - /** - * An immutable Color instance initialized to CSS color #F5F5F5 - * - * - * @constant - * @type {Color} - */ - Color.WHITESMOKE = Object.freeze(Color.fromCssColorString("#F5F5F5")); - - /** - * An immutable Color instance initialized to CSS color #FFFF00 - * - * - * @constant - * @type {Color} - */ - Color.YELLOW = Object.freeze(Color.fromCssColorString("#FFFF00")); - - /** - * An immutable Color instance initialized to CSS color #9ACD32 - * - * - * @constant - * @type {Color} - */ - Color.YELLOWGREEN = Object.freeze(Color.fromCssColorString("#9ACD32")); - - /** - * An immutable Color instance initialized to CSS transparent. - * - * - * @constant - * @type {Color} - */ - Color.TRANSPARENT = Object.freeze(new Color(0, 0, 0, 0)); - - exports.Color = Color; - -})); -//# sourceMappingURL=Color-c019c34b.js.map diff --git a/debug/cesium/Workers/Color-c019c34b.js.map b/debug/cesium/Workers/Color-c019c34b.js.map deleted file mode 100644 index 8902156..0000000 --- a/debug/cesium/Workers/Color-c019c34b.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Color-c019c34b.js","sources":["../../../Source/Core/Color.js"],"sourcesContent":["import Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport FeatureDetection from \"./FeatureDetection.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\nfunction hue2rgb(m1, m2, h) {\r\n if (h < 0) {\r\n h += 1;\r\n }\r\n if (h > 1) {\r\n h -= 1;\r\n }\r\n if (h * 6 < 1) {\r\n return m1 + (m2 - m1) * 6 * h;\r\n }\r\n if (h * 2 < 1) {\r\n return m2;\r\n }\r\n if (h * 3 < 2) {\r\n return m1 + (m2 - m1) * (2 / 3 - h) * 6;\r\n }\r\n return m1;\r\n}\r\n\r\n/**\r\n * A color, specified using red, green, blue, and alpha values,\r\n * which range from 0 (no intensity) to 1.0 (full intensity).\r\n * @param {Number} [red=1.0] The red component.\r\n * @param {Number} [green=1.0] The green component.\r\n * @param {Number} [blue=1.0] The blue component.\r\n * @param {Number} [alpha=1.0] The alpha component.\r\n *\r\n * @constructor\r\n * @alias Color\r\n *\r\n * @see Packable\r\n */\r\nfunction Color(red, green, blue, alpha) {\r\n /**\r\n * The red component.\r\n * @type {Number}\r\n * @default 1.0\r\n */\r\n this.red = defaultValue(red, 1.0);\r\n /**\r\n * The green component.\r\n * @type {Number}\r\n * @default 1.0\r\n */\r\n this.green = defaultValue(green, 1.0);\r\n /**\r\n * The blue component.\r\n * @type {Number}\r\n * @default 1.0\r\n */\r\n this.blue = defaultValue(blue, 1.0);\r\n /**\r\n * The alpha component.\r\n * @type {Number}\r\n * @default 1.0\r\n */\r\n this.alpha = defaultValue(alpha, 1.0);\r\n}\r\n\r\n/**\r\n * Creates a Color instance from a {@link Cartesian4}. x, y, z,\r\n * and w map to red, green, blue, and alpha, respectively.\r\n *\r\n * @param {Cartesian4} cartesian The source cartesian.\r\n * @param {Color} [result] The object onto which to store the result.\r\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\r\n */\r\nColor.fromCartesian4 = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Color(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\r\n }\r\n\r\n result.red = cartesian.x;\r\n result.green = cartesian.y;\r\n result.blue = cartesian.z;\r\n result.alpha = cartesian.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a new Color specified using red, green, blue, and alpha values\r\n * that are in the range of 0 to 255, converting them internally to a range of 0.0 to 1.0.\r\n *\r\n * @param {Number} [red=255] The red component.\r\n * @param {Number} [green=255] The green component.\r\n * @param {Number} [blue=255] The blue component.\r\n * @param {Number} [alpha=255] The alpha component.\r\n * @param {Color} [result] The object onto which to store the result.\r\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\r\n */\r\nColor.fromBytes = function (red, green, blue, alpha, result) {\r\n red = Color.byteToFloat(defaultValue(red, 255.0));\r\n green = Color.byteToFloat(defaultValue(green, 255.0));\r\n blue = Color.byteToFloat(defaultValue(blue, 255.0));\r\n alpha = Color.byteToFloat(defaultValue(alpha, 255.0));\r\n\r\n if (!defined(result)) {\r\n return new Color(red, green, blue, alpha);\r\n }\r\n\r\n result.red = red;\r\n result.green = green;\r\n result.blue = blue;\r\n result.alpha = alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a new Color that has the same red, green, and blue components\r\n * of the specified color, but with the specified alpha value.\r\n *\r\n * @param {Color} color The base color\r\n * @param {Number} alpha The new alpha component.\r\n * @param {Color} [result] The object onto which to store the result.\r\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\r\n *\r\n * @example const translucentRed = Cesium.Color.fromAlpha(Cesium.Color.RED, 0.9);\r\n */\r\nColor.fromAlpha = function (color, alpha, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"color\", color);\r\n Check.typeOf.number(\"alpha\", alpha);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Color(color.red, color.green, color.blue, alpha);\r\n }\r\n\r\n result.red = color.red;\r\n result.green = color.green;\r\n result.blue = color.blue;\r\n result.alpha = alpha;\r\n return result;\r\n};\r\n\r\nlet scratchArrayBuffer;\r\nlet scratchUint32Array;\r\nlet scratchUint8Array;\r\nif (FeatureDetection.supportsTypedArrays()) {\r\n scratchArrayBuffer = new ArrayBuffer(4);\r\n scratchUint32Array = new Uint32Array(scratchArrayBuffer);\r\n scratchUint8Array = new Uint8Array(scratchArrayBuffer);\r\n}\r\n\r\n/**\r\n * Creates a new Color from a single numeric unsigned 32-bit RGBA value, using the endianness\r\n * of the system.\r\n *\r\n * @param {Number} rgba A single numeric unsigned 32-bit RGBA value.\r\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\r\n * @returns {Color} The color object.\r\n *\r\n * @example\r\n * const color = Cesium.Color.fromRgba(0x67ADDFFF);\r\n *\r\n * @see Color#toRgba\r\n */\r\nColor.fromRgba = function (rgba, result) {\r\n // scratchUint32Array and scratchUint8Array share an underlying array buffer\r\n scratchUint32Array[0] = rgba;\r\n return Color.fromBytes(\r\n scratchUint8Array[0],\r\n scratchUint8Array[1],\r\n scratchUint8Array[2],\r\n scratchUint8Array[3],\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Color instance from hue, saturation, and lightness.\r\n *\r\n * @param {Number} [hue=0] The hue angle 0...1\r\n * @param {Number} [saturation=0] The saturation value 0...1\r\n * @param {Number} [lightness=0] The lightness value 0...1\r\n * @param {Number} [alpha=1.0] The alpha component 0...1\r\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\r\n * @returns {Color} The color object.\r\n *\r\n * @see {@link http://www.w3.org/TR/css3-color/#hsl-color|CSS color values}\r\n */\r\nColor.fromHsl = function (hue, saturation, lightness, alpha, result) {\r\n hue = defaultValue(hue, 0.0) % 1.0;\r\n saturation = defaultValue(saturation, 0.0);\r\n lightness = defaultValue(lightness, 0.0);\r\n alpha = defaultValue(alpha, 1.0);\r\n\r\n let red = lightness;\r\n let green = lightness;\r\n let blue = lightness;\r\n\r\n if (saturation !== 0) {\r\n let m2;\r\n if (lightness < 0.5) {\r\n m2 = lightness * (1 + saturation);\r\n } else {\r\n m2 = lightness + saturation - lightness * saturation;\r\n }\r\n\r\n const m1 = 2.0 * lightness - m2;\r\n red = hue2rgb(m1, m2, hue + 1 / 3);\r\n green = hue2rgb(m1, m2, hue);\r\n blue = hue2rgb(m1, m2, hue - 1 / 3);\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Color(red, green, blue, alpha);\r\n }\r\n\r\n result.red = red;\r\n result.green = green;\r\n result.blue = blue;\r\n result.alpha = alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a random color using the provided options. For reproducible random colors, you should\r\n * call {@link CesiumMath#setRandomNumberSeed} once at the beginning of your application.\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Number} [options.red] If specified, the red component to use instead of a randomized value.\r\n * @param {Number} [options.minimumRed=0.0] The maximum red value to generate if none was specified.\r\n * @param {Number} [options.maximumRed=1.0] The minimum red value to generate if none was specified.\r\n * @param {Number} [options.green] If specified, the green component to use instead of a randomized value.\r\n * @param {Number} [options.minimumGreen=0.0] The maximum green value to generate if none was specified.\r\n * @param {Number} [options.maximumGreen=1.0] The minimum green value to generate if none was specified.\r\n * @param {Number} [options.blue] If specified, the blue component to use instead of a randomized value.\r\n * @param {Number} [options.minimumBlue=0.0] The maximum blue value to generate if none was specified.\r\n * @param {Number} [options.maximumBlue=1.0] The minimum blue value to generate if none was specified.\r\n * @param {Number} [options.alpha] If specified, the alpha component to use instead of a randomized value.\r\n * @param {Number} [options.minimumAlpha=0.0] The maximum alpha value to generate if none was specified.\r\n * @param {Number} [options.maximumAlpha=1.0] The minimum alpha value to generate if none was specified.\r\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\r\n * @returns {Color} The modified result parameter or a new instance if result was undefined.\r\n *\r\n * @exception {DeveloperError} minimumRed must be less than or equal to maximumRed.\r\n * @exception {DeveloperError} minimumGreen must be less than or equal to maximumGreen.\r\n * @exception {DeveloperError} minimumBlue must be less than or equal to maximumBlue.\r\n * @exception {DeveloperError} minimumAlpha must be less than or equal to maximumAlpha.\r\n *\r\n * @example\r\n * //Create a completely random color\r\n * const color = Cesium.Color.fromRandom();\r\n *\r\n * //Create a random shade of yellow.\r\n * const color1 = Cesium.Color.fromRandom({\r\n * red : 1.0,\r\n * green : 1.0,\r\n * alpha : 1.0\r\n * });\r\n *\r\n * //Create a random bright color.\r\n * const color2 = Cesium.Color.fromRandom({\r\n * minimumRed : 0.75,\r\n * minimumGreen : 0.75,\r\n * minimumBlue : 0.75,\r\n * alpha : 1.0\r\n * });\r\n */\r\nColor.fromRandom = function (options, result) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n let red = options.red;\r\n if (!defined(red)) {\r\n const minimumRed = defaultValue(options.minimumRed, 0);\r\n const maximumRed = defaultValue(options.maximumRed, 1.0);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.lessThanOrEquals(\"minimumRed\", minimumRed, maximumRed);\r\n //>>includeEnd('debug');\r\n\r\n red =\r\n minimumRed + CesiumMath.nextRandomNumber() * (maximumRed - minimumRed);\r\n }\r\n\r\n let green = options.green;\r\n if (!defined(green)) {\r\n const minimumGreen = defaultValue(options.minimumGreen, 0);\r\n const maximumGreen = defaultValue(options.maximumGreen, 1.0);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.lessThanOrEquals(\r\n \"minimumGreen\",\r\n minimumGreen,\r\n maximumGreen\r\n );\r\n //>>includeEnd('debug');\r\n green =\r\n minimumGreen +\r\n CesiumMath.nextRandomNumber() * (maximumGreen - minimumGreen);\r\n }\r\n\r\n let blue = options.blue;\r\n if (!defined(blue)) {\r\n const minimumBlue = defaultValue(options.minimumBlue, 0);\r\n const maximumBlue = defaultValue(options.maximumBlue, 1.0);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.lessThanOrEquals(\r\n \"minimumBlue\",\r\n minimumBlue,\r\n maximumBlue\r\n );\r\n //>>includeEnd('debug');\r\n\r\n blue =\r\n minimumBlue + CesiumMath.nextRandomNumber() * (maximumBlue - minimumBlue);\r\n }\r\n\r\n let alpha = options.alpha;\r\n if (!defined(alpha)) {\r\n const minimumAlpha = defaultValue(options.minimumAlpha, 0);\r\n const maximumAlpha = defaultValue(options.maximumAlpha, 1.0);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.lessThanOrEquals(\r\n \"minumumAlpha\",\r\n minimumAlpha,\r\n maximumAlpha\r\n );\r\n //>>includeEnd('debug');\r\n\r\n alpha =\r\n minimumAlpha +\r\n CesiumMath.nextRandomNumber() * (maximumAlpha - minimumAlpha);\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Color(red, green, blue, alpha);\r\n }\r\n\r\n result.red = red;\r\n result.green = green;\r\n result.blue = blue;\r\n result.alpha = alpha;\r\n return result;\r\n};\r\n\r\n//#rgba\r\nconst rgbaMatcher = /^#([0-9a-f])([0-9a-f])([0-9a-f])([0-9a-f])?$/i;\r\n//#rrggbbaa\r\nconst rrggbbaaMatcher = /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})?$/i;\r\n//rgb(), rgba(), or rgb%()\r\nconst rgbParenthesesMatcher = /^rgba?\\(\\s*([0-9.]+%?)\\s*,\\s*([0-9.]+%?)\\s*,\\s*([0-9.]+%?)(?:\\s*,\\s*([0-9.]+))?\\s*\\)$/i;\r\n//hsl() or hsla()\r\nconst hslParenthesesMatcher = /^hsla?\\(\\s*([0-9.]+)\\s*,\\s*([0-9.]+%)\\s*,\\s*([0-9.]+%)(?:\\s*,\\s*([0-9.]+))?\\s*\\)$/i;\r\n\r\n/**\r\n * Creates a Color instance from a CSS color value.\r\n *\r\n * @param {String} color The CSS color value in #rgb, #rgba, #rrggbb, #rrggbbaa, rgb(), rgba(), hsl(), or hsla() format.\r\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\r\n * @returns {Color} The color object, or undefined if the string was not a valid CSS color.\r\n *\r\n *\r\n * @example\r\n * const cesiumBlue = Cesium.Color.fromCssColorString('#67ADDF');\r\n * const green = Cesium.Color.fromCssColorString('green');\r\n *\r\n * @see {@link http://www.w3.org/TR/css3-color|CSS color values}\r\n */\r\nColor.fromCssColorString = function (color, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.string(\"color\", color);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Color();\r\n }\r\n\r\n // Remove all whitespaces from the color string\r\n color = color.replace(/\\s/g, \"\");\r\n\r\n const namedColor = Color[color.toUpperCase()];\r\n if (defined(namedColor)) {\r\n Color.clone(namedColor, result);\r\n return result;\r\n }\r\n\r\n let matches = rgbaMatcher.exec(color);\r\n if (matches !== null) {\r\n result.red = parseInt(matches[1], 16) / 15;\r\n result.green = parseInt(matches[2], 16) / 15.0;\r\n result.blue = parseInt(matches[3], 16) / 15.0;\r\n result.alpha = parseInt(defaultValue(matches[4], \"f\"), 16) / 15.0;\r\n return result;\r\n }\r\n\r\n matches = rrggbbaaMatcher.exec(color);\r\n if (matches !== null) {\r\n result.red = parseInt(matches[1], 16) / 255.0;\r\n result.green = parseInt(matches[2], 16) / 255.0;\r\n result.blue = parseInt(matches[3], 16) / 255.0;\r\n result.alpha = parseInt(defaultValue(matches[4], \"ff\"), 16) / 255.0;\r\n return result;\r\n }\r\n\r\n matches = rgbParenthesesMatcher.exec(color);\r\n if (matches !== null) {\r\n result.red =\r\n parseFloat(matches[1]) / (\"%\" === matches[1].substr(-1) ? 100.0 : 255.0);\r\n result.green =\r\n parseFloat(matches[2]) / (\"%\" === matches[2].substr(-1) ? 100.0 : 255.0);\r\n result.blue =\r\n parseFloat(matches[3]) / (\"%\" === matches[3].substr(-1) ? 100.0 : 255.0);\r\n result.alpha = parseFloat(defaultValue(matches[4], \"1.0\"));\r\n return result;\r\n }\r\n\r\n matches = hslParenthesesMatcher.exec(color);\r\n if (matches !== null) {\r\n return Color.fromHsl(\r\n parseFloat(matches[1]) / 360.0,\r\n parseFloat(matches[2]) / 100.0,\r\n parseFloat(matches[3]) / 100.0,\r\n parseFloat(defaultValue(matches[4], \"1.0\")),\r\n result\r\n );\r\n }\r\n\r\n result = undefined;\r\n return result;\r\n};\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nColor.packedLength = 4;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Color} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nColor.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n array[startingIndex++] = value.red;\r\n array[startingIndex++] = value.green;\r\n array[startingIndex++] = value.blue;\r\n array[startingIndex] = value.alpha;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Color} [result] The object into which to store the result.\r\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\r\n */\r\nColor.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n if (!defined(result)) {\r\n result = new Color();\r\n }\r\n result.red = array[startingIndex++];\r\n result.green = array[startingIndex++];\r\n result.blue = array[startingIndex++];\r\n result.alpha = array[startingIndex];\r\n return result;\r\n};\r\n\r\n/**\r\n * Converts a 'byte' color component in the range of 0 to 255 into\r\n * a 'float' color component in the range of 0 to 1.0.\r\n *\r\n * @param {Number} number The number to be converted.\r\n * @returns {Number} The converted number.\r\n */\r\nColor.byteToFloat = function (number) {\r\n return number / 255.0;\r\n};\r\n\r\n/**\r\n * Converts a 'float' color component in the range of 0 to 1.0 into\r\n * a 'byte' color component in the range of 0 to 255.\r\n *\r\n * @param {Number} number The number to be converted.\r\n * @returns {Number} The converted number.\r\n */\r\nColor.floatToByte = function (number) {\r\n return number === 1.0 ? 255.0 : (number * 256.0) | 0;\r\n};\r\n\r\n/**\r\n * Duplicates a Color.\r\n *\r\n * @param {Color} color The Color to duplicate.\r\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\r\n * @returns {Color} The modified result parameter or a new instance if result was undefined. (Returns undefined if color is undefined)\r\n */\r\nColor.clone = function (color, result) {\r\n if (!defined(color)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new Color(color.red, color.green, color.blue, color.alpha);\r\n }\r\n result.red = color.red;\r\n result.green = color.green;\r\n result.blue = color.blue;\r\n result.alpha = color.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns true if the first Color equals the second color.\r\n *\r\n * @param {Color} left The first Color to compare for equality.\r\n * @param {Color} right The second Color to compare for equality.\r\n * @returns {Boolean} true if the Colors are equal; otherwise, false.\r\n */\r\nColor.equals = function (left, right) {\r\n return (\r\n left === right || //\r\n (defined(left) && //\r\n defined(right) && //\r\n left.red === right.red && //\r\n left.green === right.green && //\r\n left.blue === right.blue && //\r\n left.alpha === right.alpha)\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nColor.equalsArray = function (color, array, offset) {\r\n return (\r\n color.red === array[offset] &&\r\n color.green === array[offset + 1] &&\r\n color.blue === array[offset + 2] &&\r\n color.alpha === array[offset + 3]\r\n );\r\n};\r\n\r\n/**\r\n * Returns a duplicate of a Color instance.\r\n *\r\n * @param {Color} [result] The object to store the result in, if undefined a new instance will be created.\r\n * @returns {Color} The modified result parameter or a new instance if result was undefined.\r\n */\r\nColor.prototype.clone = function (result) {\r\n return Color.clone(this, result);\r\n};\r\n\r\n/**\r\n * Returns true if this Color equals other.\r\n *\r\n * @param {Color} other The Color to compare for equality.\r\n * @returns {Boolean} true if the Colors are equal; otherwise, false.\r\n */\r\nColor.prototype.equals = function (other) {\r\n return Color.equals(this, other);\r\n};\r\n\r\n/**\r\n * Returns true if this Color equals other componentwise within the specified epsilon.\r\n *\r\n * @param {Color} other The Color to compare for equality.\r\n * @param {Number} [epsilon=0.0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if the Colors are equal within the specified epsilon; otherwise, false.\r\n */\r\nColor.prototype.equalsEpsilon = function (other, epsilon) {\r\n return (\r\n this === other || //\r\n (defined(other) && //\r\n Math.abs(this.red - other.red) <= epsilon && //\r\n Math.abs(this.green - other.green) <= epsilon && //\r\n Math.abs(this.blue - other.blue) <= epsilon && //\r\n Math.abs(this.alpha - other.alpha) <= epsilon)\r\n );\r\n};\r\n\r\n/**\r\n * Creates a string representing this Color in the format '(red, green, blue, alpha)'.\r\n *\r\n * @returns {String} A string representing this Color in the format '(red, green, blue, alpha)'.\r\n */\r\nColor.prototype.toString = function () {\r\n return `(${this.red}, ${this.green}, ${this.blue}, ${this.alpha})`;\r\n};\r\n\r\n/**\r\n * Creates a string containing the CSS color value for this color.\r\n *\r\n * @returns {String} The CSS equivalent of this color.\r\n *\r\n * @see {@link http://www.w3.org/TR/css3-color/#rgba-color|CSS RGB or RGBA color values}\r\n */\r\nColor.prototype.toCssColorString = function () {\r\n const red = Color.floatToByte(this.red);\r\n const green = Color.floatToByte(this.green);\r\n const blue = Color.floatToByte(this.blue);\r\n if (this.alpha === 1) {\r\n return `rgb(${red},${green},${blue})`;\r\n }\r\n return `rgba(${red},${green},${blue},${this.alpha})`;\r\n};\r\n\r\n/**\r\n * Creates a string containing CSS hex string color value for this color.\r\n *\r\n * @returns {String} The CSS hex string equivalent of this color.\r\n */\r\nColor.prototype.toCssHexString = function () {\r\n let r = Color.floatToByte(this.red).toString(16);\r\n if (r.length < 2) {\r\n r = `0${r}`;\r\n }\r\n let g = Color.floatToByte(this.green).toString(16);\r\n if (g.length < 2) {\r\n g = `0${g}`;\r\n }\r\n let b = Color.floatToByte(this.blue).toString(16);\r\n if (b.length < 2) {\r\n b = `0${b}`;\r\n }\r\n if (this.alpha < 1) {\r\n let hexAlpha = Color.floatToByte(this.alpha).toString(16);\r\n if (hexAlpha.length < 2) {\r\n hexAlpha = `0${hexAlpha}`;\r\n }\r\n return `#${r}${g}${b}${hexAlpha}`;\r\n }\r\n return `#${r}${g}${b}`;\r\n};\r\n\r\n/**\r\n * Converts this color to an array of red, green, blue, and alpha values\r\n * that are in the range of 0 to 255.\r\n *\r\n * @param {Number[]} [result] The array to store the result in, if undefined a new instance will be created.\r\n * @returns {Number[]} The modified result parameter or a new instance if result was undefined.\r\n */\r\nColor.prototype.toBytes = function (result) {\r\n const red = Color.floatToByte(this.red);\r\n const green = Color.floatToByte(this.green);\r\n const blue = Color.floatToByte(this.blue);\r\n const alpha = Color.floatToByte(this.alpha);\r\n\r\n if (!defined(result)) {\r\n return [red, green, blue, alpha];\r\n }\r\n result[0] = red;\r\n result[1] = green;\r\n result[2] = blue;\r\n result[3] = alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Converts this color to a single numeric unsigned 32-bit RGBA value, using the endianness\r\n * of the system.\r\n *\r\n * @returns {Number} A single numeric unsigned 32-bit RGBA value.\r\n *\r\n *\r\n * @example\r\n * const rgba = Cesium.Color.BLUE.toRgba();\r\n *\r\n * @see Color.fromRgba\r\n */\r\nColor.prototype.toRgba = function () {\r\n // scratchUint32Array and scratchUint8Array share an underlying array buffer\r\n scratchUint8Array[0] = Color.floatToByte(this.red);\r\n scratchUint8Array[1] = Color.floatToByte(this.green);\r\n scratchUint8Array[2] = Color.floatToByte(this.blue);\r\n scratchUint8Array[3] = Color.floatToByte(this.alpha);\r\n return scratchUint32Array[0];\r\n};\r\n\r\n/**\r\n * Brightens this color by the provided magnitude.\r\n *\r\n * @param {Number} magnitude A positive number indicating the amount to brighten.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n *\r\n * @example\r\n * const brightBlue = Cesium.Color.BLUE.brighten(0.5, new Cesium.Color());\r\n */\r\nColor.prototype.brighten = function (magnitude, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"magnitude\", magnitude);\r\n Check.typeOf.number.greaterThanOrEquals(\"magnitude\", magnitude, 0.0);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n magnitude = 1.0 - magnitude;\r\n result.red = 1.0 - (1.0 - this.red) * magnitude;\r\n result.green = 1.0 - (1.0 - this.green) * magnitude;\r\n result.blue = 1.0 - (1.0 - this.blue) * magnitude;\r\n result.alpha = this.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Darkens this color by the provided magnitude.\r\n *\r\n * @param {Number} magnitude A positive number indicating the amount to darken.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n *\r\n * @example\r\n * const darkBlue = Cesium.Color.BLUE.darken(0.5, new Cesium.Color());\r\n */\r\nColor.prototype.darken = function (magnitude, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"magnitude\", magnitude);\r\n Check.typeOf.number.greaterThanOrEquals(\"magnitude\", magnitude, 0.0);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n magnitude = 1.0 - magnitude;\r\n result.red = this.red * magnitude;\r\n result.green = this.green * magnitude;\r\n result.blue = this.blue * magnitude;\r\n result.alpha = this.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a new Color that has the same red, green, and blue components\r\n * as this Color, but with the specified alpha value.\r\n *\r\n * @param {Number} alpha The new alpha component.\r\n * @param {Color} [result] The object onto which to store the result.\r\n * @returns {Color} The modified result parameter or a new Color instance if one was not provided.\r\n *\r\n * @example const translucentRed = Cesium.Color.RED.withAlpha(0.9);\r\n */\r\nColor.prototype.withAlpha = function (alpha, result) {\r\n return Color.fromAlpha(this, alpha, result);\r\n};\r\n\r\n/**\r\n * Computes the componentwise sum of two Colors.\r\n *\r\n * @param {Color} left The first Color.\r\n * @param {Color} right The second Color.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n */\r\nColor.add = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.red = left.red + right.red;\r\n result.green = left.green + right.green;\r\n result.blue = left.blue + right.blue;\r\n result.alpha = left.alpha + right.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise difference of two Colors.\r\n *\r\n * @param {Color} left The first Color.\r\n * @param {Color} right The second Color.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n */\r\nColor.subtract = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.red = left.red - right.red;\r\n result.green = left.green - right.green;\r\n result.blue = left.blue - right.blue;\r\n result.alpha = left.alpha - right.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise product of two Colors.\r\n *\r\n * @param {Color} left The first Color.\r\n * @param {Color} right The second Color.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n */\r\nColor.multiply = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.red = left.red * right.red;\r\n result.green = left.green * right.green;\r\n result.blue = left.blue * right.blue;\r\n result.alpha = left.alpha * right.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise quotient of two Colors.\r\n *\r\n * @param {Color} left The first Color.\r\n * @param {Color} right The second Color.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n */\r\nColor.divide = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.red = left.red / right.red;\r\n result.green = left.green / right.green;\r\n result.blue = left.blue / right.blue;\r\n result.alpha = left.alpha / right.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise modulus of two Colors.\r\n *\r\n * @param {Color} left The first Color.\r\n * @param {Color} right The second Color.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n */\r\nColor.mod = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.red = left.red % right.red;\r\n result.green = left.green % right.green;\r\n result.blue = left.blue % right.blue;\r\n result.alpha = left.alpha % right.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the linear interpolation or extrapolation at t between the provided colors.\r\n *\r\n * @param {Color} start The color corresponding to t at 0.0.\r\n * @param {Color} end The color corresponding to t at 1.0.\r\n * @param {Number} t The point along t at which to interpolate.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n */\r\nColor.lerp = function (start, end, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"start\", start);\r\n Check.typeOf.object(\"end\", end);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.red = CesiumMath.lerp(start.red, end.red, t);\r\n result.green = CesiumMath.lerp(start.green, end.green, t);\r\n result.blue = CesiumMath.lerp(start.blue, end.blue, t);\r\n result.alpha = CesiumMath.lerp(start.alpha, end.alpha, t);\r\n return result;\r\n};\r\n\r\n/**\r\n * Multiplies the provided Color componentwise by the provided scalar.\r\n *\r\n * @param {Color} color The Color to be scaled.\r\n * @param {Number} scalar The scalar to multiply with.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n */\r\nColor.multiplyByScalar = function (color, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"color\", color);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.red = color.red * scalar;\r\n result.green = color.green * scalar;\r\n result.blue = color.blue * scalar;\r\n result.alpha = color.alpha * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Divides the provided Color componentwise by the provided scalar.\r\n *\r\n * @param {Color} color The Color to be divided.\r\n * @param {Number} scalar The scalar to divide with.\r\n * @param {Color} result The object onto which to store the result.\r\n * @returns {Color} The modified result parameter.\r\n */\r\nColor.divideByScalar = function (color, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"color\", color);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.red = color.red / scalar;\r\n result.green = color.green / scalar;\r\n result.blue = color.blue / scalar;\r\n result.alpha = color.alpha / scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F0F8FF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.ALICEBLUE = Object.freeze(Color.fromCssColorString(\"#F0F8FF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FAEBD7\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.ANTIQUEWHITE = Object.freeze(Color.fromCssColorString(\"#FAEBD7\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #00FFFF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.AQUA = Object.freeze(Color.fromCssColorString(\"#00FFFF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #7FFFD4\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.AQUAMARINE = Object.freeze(Color.fromCssColorString(\"#7FFFD4\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F0FFFF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.AZURE = Object.freeze(Color.fromCssColorString(\"#F0FFFF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F5F5DC\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.BEIGE = Object.freeze(Color.fromCssColorString(\"#F5F5DC\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFE4C4\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.BISQUE = Object.freeze(Color.fromCssColorString(\"#FFE4C4\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #000000\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.BLACK = Object.freeze(Color.fromCssColorString(\"#000000\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFEBCD\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.BLANCHEDALMOND = Object.freeze(Color.fromCssColorString(\"#FFEBCD\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #0000FF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.BLUE = Object.freeze(Color.fromCssColorString(\"#0000FF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #8A2BE2\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.BLUEVIOLET = Object.freeze(Color.fromCssColorString(\"#8A2BE2\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #A52A2A\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.BROWN = Object.freeze(Color.fromCssColorString(\"#A52A2A\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #DEB887\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.BURLYWOOD = Object.freeze(Color.fromCssColorString(\"#DEB887\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #5F9EA0\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.CADETBLUE = Object.freeze(Color.fromCssColorString(\"#5F9EA0\"));\r\n/**\r\n * An immutable Color instance initialized to CSS color #7FFF00\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.CHARTREUSE = Object.freeze(Color.fromCssColorString(\"#7FFF00\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #D2691E\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.CHOCOLATE = Object.freeze(Color.fromCssColorString(\"#D2691E\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF7F50\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.CORAL = Object.freeze(Color.fromCssColorString(\"#FF7F50\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #6495ED\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.CORNFLOWERBLUE = Object.freeze(Color.fromCssColorString(\"#6495ED\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFF8DC\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.CORNSILK = Object.freeze(Color.fromCssColorString(\"#FFF8DC\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #DC143C\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.CRIMSON = Object.freeze(Color.fromCssColorString(\"#DC143C\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #00FFFF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.CYAN = Object.freeze(Color.fromCssColorString(\"#00FFFF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #00008B\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKBLUE = Object.freeze(Color.fromCssColorString(\"#00008B\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #008B8B\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKCYAN = Object.freeze(Color.fromCssColorString(\"#008B8B\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #B8860B\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKGOLDENROD = Object.freeze(Color.fromCssColorString(\"#B8860B\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #A9A9A9\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKGRAY = Object.freeze(Color.fromCssColorString(\"#A9A9A9\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #006400\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKGREEN = Object.freeze(Color.fromCssColorString(\"#006400\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #A9A9A9\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKGREY = Color.DARKGRAY;\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #BDB76B\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKKHAKI = Object.freeze(Color.fromCssColorString(\"#BDB76B\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #8B008B\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKMAGENTA = Object.freeze(Color.fromCssColorString(\"#8B008B\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #556B2F\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKOLIVEGREEN = Object.freeze(Color.fromCssColorString(\"#556B2F\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF8C00\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKORANGE = Object.freeze(Color.fromCssColorString(\"#FF8C00\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #9932CC\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKORCHID = Object.freeze(Color.fromCssColorString(\"#9932CC\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #8B0000\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKRED = Object.freeze(Color.fromCssColorString(\"#8B0000\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #E9967A\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKSALMON = Object.freeze(Color.fromCssColorString(\"#E9967A\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #8FBC8F\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKSEAGREEN = Object.freeze(Color.fromCssColorString(\"#8FBC8F\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #483D8B\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKSLATEBLUE = Object.freeze(Color.fromCssColorString(\"#483D8B\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #2F4F4F\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKSLATEGRAY = Object.freeze(Color.fromCssColorString(\"#2F4F4F\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #2F4F4F\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKSLATEGREY = Color.DARKSLATEGRAY;\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #00CED1\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKTURQUOISE = Object.freeze(Color.fromCssColorString(\"#00CED1\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #9400D3\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DARKVIOLET = Object.freeze(Color.fromCssColorString(\"#9400D3\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF1493\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DEEPPINK = Object.freeze(Color.fromCssColorString(\"#FF1493\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #00BFFF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DEEPSKYBLUE = Object.freeze(Color.fromCssColorString(\"#00BFFF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #696969\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DIMGRAY = Object.freeze(Color.fromCssColorString(\"#696969\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #696969\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DIMGREY = Color.DIMGRAY;\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #1E90FF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.DODGERBLUE = Object.freeze(Color.fromCssColorString(\"#1E90FF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #B22222\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.FIREBRICK = Object.freeze(Color.fromCssColorString(\"#B22222\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFFAF0\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.FLORALWHITE = Object.freeze(Color.fromCssColorString(\"#FFFAF0\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #228B22\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.FORESTGREEN = Object.freeze(Color.fromCssColorString(\"#228B22\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF00FF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.FUCHSIA = Object.freeze(Color.fromCssColorString(\"#FF00FF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #DCDCDC\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.GAINSBORO = Object.freeze(Color.fromCssColorString(\"#DCDCDC\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F8F8FF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.GHOSTWHITE = Object.freeze(Color.fromCssColorString(\"#F8F8FF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFD700\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.GOLD = Object.freeze(Color.fromCssColorString(\"#FFD700\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #DAA520\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.GOLDENROD = Object.freeze(Color.fromCssColorString(\"#DAA520\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #808080\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.GRAY = Object.freeze(Color.fromCssColorString(\"#808080\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #008000\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.GREEN = Object.freeze(Color.fromCssColorString(\"#008000\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #ADFF2F\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.GREENYELLOW = Object.freeze(Color.fromCssColorString(\"#ADFF2F\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #808080\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.GREY = Color.GRAY;\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F0FFF0\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.HONEYDEW = Object.freeze(Color.fromCssColorString(\"#F0FFF0\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF69B4\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.HOTPINK = Object.freeze(Color.fromCssColorString(\"#FF69B4\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #CD5C5C\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.INDIANRED = Object.freeze(Color.fromCssColorString(\"#CD5C5C\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #4B0082\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.INDIGO = Object.freeze(Color.fromCssColorString(\"#4B0082\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFFFF0\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.IVORY = Object.freeze(Color.fromCssColorString(\"#FFFFF0\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F0E68C\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.KHAKI = Object.freeze(Color.fromCssColorString(\"#F0E68C\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #E6E6FA\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LAVENDER = Object.freeze(Color.fromCssColorString(\"#E6E6FA\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFF0F5\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LAVENDAR_BLUSH = Object.freeze(Color.fromCssColorString(\"#FFF0F5\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #7CFC00\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LAWNGREEN = Object.freeze(Color.fromCssColorString(\"#7CFC00\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFFACD\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LEMONCHIFFON = Object.freeze(Color.fromCssColorString(\"#FFFACD\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #ADD8E6\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTBLUE = Object.freeze(Color.fromCssColorString(\"#ADD8E6\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F08080\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTCORAL = Object.freeze(Color.fromCssColorString(\"#F08080\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #E0FFFF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTCYAN = Object.freeze(Color.fromCssColorString(\"#E0FFFF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FAFAD2\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTGOLDENRODYELLOW = Object.freeze(Color.fromCssColorString(\"#FAFAD2\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #D3D3D3\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTGRAY = Object.freeze(Color.fromCssColorString(\"#D3D3D3\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #90EE90\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTGREEN = Object.freeze(Color.fromCssColorString(\"#90EE90\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #D3D3D3\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTGREY = Color.LIGHTGRAY;\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFB6C1\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTPINK = Object.freeze(Color.fromCssColorString(\"#FFB6C1\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #20B2AA\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTSEAGREEN = Object.freeze(Color.fromCssColorString(\"#20B2AA\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #87CEFA\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTSKYBLUE = Object.freeze(Color.fromCssColorString(\"#87CEFA\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #778899\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTSLATEGRAY = Object.freeze(Color.fromCssColorString(\"#778899\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #778899\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTSLATEGREY = Color.LIGHTSLATEGRAY;\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #B0C4DE\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTSTEELBLUE = Object.freeze(Color.fromCssColorString(\"#B0C4DE\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFFFE0\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIGHTYELLOW = Object.freeze(Color.fromCssColorString(\"#FFFFE0\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #00FF00\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIME = Object.freeze(Color.fromCssColorString(\"#00FF00\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #32CD32\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LIMEGREEN = Object.freeze(Color.fromCssColorString(\"#32CD32\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FAF0E6\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.LINEN = Object.freeze(Color.fromCssColorString(\"#FAF0E6\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF00FF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MAGENTA = Object.freeze(Color.fromCssColorString(\"#FF00FF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #800000\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MAROON = Object.freeze(Color.fromCssColorString(\"#800000\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #66CDAA\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMAQUAMARINE = Object.freeze(Color.fromCssColorString(\"#66CDAA\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #0000CD\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMBLUE = Object.freeze(Color.fromCssColorString(\"#0000CD\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #BA55D3\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMORCHID = Object.freeze(Color.fromCssColorString(\"#BA55D3\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #9370DB\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMPURPLE = Object.freeze(Color.fromCssColorString(\"#9370DB\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #3CB371\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMSEAGREEN = Object.freeze(Color.fromCssColorString(\"#3CB371\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #7B68EE\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMSLATEBLUE = Object.freeze(Color.fromCssColorString(\"#7B68EE\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #00FA9A\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMSPRINGGREEN = Object.freeze(Color.fromCssColorString(\"#00FA9A\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #48D1CC\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMTURQUOISE = Object.freeze(Color.fromCssColorString(\"#48D1CC\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #C71585\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MEDIUMVIOLETRED = Object.freeze(Color.fromCssColorString(\"#C71585\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #191970\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MIDNIGHTBLUE = Object.freeze(Color.fromCssColorString(\"#191970\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F5FFFA\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MINTCREAM = Object.freeze(Color.fromCssColorString(\"#F5FFFA\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFE4E1\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MISTYROSE = Object.freeze(Color.fromCssColorString(\"#FFE4E1\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFE4B5\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.MOCCASIN = Object.freeze(Color.fromCssColorString(\"#FFE4B5\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFDEAD\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.NAVAJOWHITE = Object.freeze(Color.fromCssColorString(\"#FFDEAD\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #000080\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.NAVY = Object.freeze(Color.fromCssColorString(\"#000080\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FDF5E6\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.OLDLACE = Object.freeze(Color.fromCssColorString(\"#FDF5E6\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #808000\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.OLIVE = Object.freeze(Color.fromCssColorString(\"#808000\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #6B8E23\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.OLIVEDRAB = Object.freeze(Color.fromCssColorString(\"#6B8E23\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFA500\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.ORANGE = Object.freeze(Color.fromCssColorString(\"#FFA500\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF4500\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.ORANGERED = Object.freeze(Color.fromCssColorString(\"#FF4500\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #DA70D6\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.ORCHID = Object.freeze(Color.fromCssColorString(\"#DA70D6\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #EEE8AA\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PALEGOLDENROD = Object.freeze(Color.fromCssColorString(\"#EEE8AA\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #98FB98\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PALEGREEN = Object.freeze(Color.fromCssColorString(\"#98FB98\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #AFEEEE\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PALETURQUOISE = Object.freeze(Color.fromCssColorString(\"#AFEEEE\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #DB7093\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PALEVIOLETRED = Object.freeze(Color.fromCssColorString(\"#DB7093\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFEFD5\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PAPAYAWHIP = Object.freeze(Color.fromCssColorString(\"#FFEFD5\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFDAB9\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PEACHPUFF = Object.freeze(Color.fromCssColorString(\"#FFDAB9\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #CD853F\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PERU = Object.freeze(Color.fromCssColorString(\"#CD853F\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFC0CB\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PINK = Object.freeze(Color.fromCssColorString(\"#FFC0CB\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #DDA0DD\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PLUM = Object.freeze(Color.fromCssColorString(\"#DDA0DD\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #B0E0E6\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.POWDERBLUE = Object.freeze(Color.fromCssColorString(\"#B0E0E6\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #800080\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.PURPLE = Object.freeze(Color.fromCssColorString(\"#800080\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF0000\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.RED = Object.freeze(Color.fromCssColorString(\"#FF0000\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #BC8F8F\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.ROSYBROWN = Object.freeze(Color.fromCssColorString(\"#BC8F8F\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #4169E1\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.ROYALBLUE = Object.freeze(Color.fromCssColorString(\"#4169E1\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #8B4513\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SADDLEBROWN = Object.freeze(Color.fromCssColorString(\"#8B4513\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FA8072\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SALMON = Object.freeze(Color.fromCssColorString(\"#FA8072\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F4A460\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SANDYBROWN = Object.freeze(Color.fromCssColorString(\"#F4A460\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #2E8B57\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SEAGREEN = Object.freeze(Color.fromCssColorString(\"#2E8B57\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFF5EE\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SEASHELL = Object.freeze(Color.fromCssColorString(\"#FFF5EE\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #A0522D\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SIENNA = Object.freeze(Color.fromCssColorString(\"#A0522D\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #C0C0C0\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SILVER = Object.freeze(Color.fromCssColorString(\"#C0C0C0\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #87CEEB\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SKYBLUE = Object.freeze(Color.fromCssColorString(\"#87CEEB\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #6A5ACD\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SLATEBLUE = Object.freeze(Color.fromCssColorString(\"#6A5ACD\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #708090\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SLATEGRAY = Object.freeze(Color.fromCssColorString(\"#708090\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #708090\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SLATEGREY = Color.SLATEGRAY;\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFFAFA\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SNOW = Object.freeze(Color.fromCssColorString(\"#FFFAFA\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #00FF7F\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.SPRINGGREEN = Object.freeze(Color.fromCssColorString(\"#00FF7F\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #4682B4\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.STEELBLUE = Object.freeze(Color.fromCssColorString(\"#4682B4\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #D2B48C\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.TAN = Object.freeze(Color.fromCssColorString(\"#D2B48C\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #008080\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.TEAL = Object.freeze(Color.fromCssColorString(\"#008080\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #D8BFD8\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.THISTLE = Object.freeze(Color.fromCssColorString(\"#D8BFD8\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FF6347\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.TOMATO = Object.freeze(Color.fromCssColorString(\"#FF6347\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #40E0D0\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.TURQUOISE = Object.freeze(Color.fromCssColorString(\"#40E0D0\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #EE82EE\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.VIOLET = Object.freeze(Color.fromCssColorString(\"#EE82EE\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F5DEB3\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.WHEAT = Object.freeze(Color.fromCssColorString(\"#F5DEB3\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFFFFF\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.WHITE = Object.freeze(Color.fromCssColorString(\"#FFFFFF\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #F5F5F5\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.WHITESMOKE = Object.freeze(Color.fromCssColorString(\"#F5F5F5\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #FFFF00\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.YELLOW = Object.freeze(Color.fromCssColorString(\"#FFFF00\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS color #9ACD32\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.YELLOWGREEN = Object.freeze(Color.fromCssColorString(\"#9ACD32\"));\r\n\r\n/**\r\n * An immutable Color instance initialized to CSS transparent.\r\n * \r\n *\r\n * @constant\r\n * @type {Color}\r\n */\r\nColor.TRANSPARENT = Object.freeze(new Color(0, 0, 0, 0));\r\nexport default Color;\r\n"],"names":["defaultValue","Check","defined","FeatureDetection","CesiumMath"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/ComponentDatatype-13a5630b.js b/debug/cesium/Workers/ComponentDatatype-13a5630b.js deleted file mode 100644 index d5271b9..0000000 --- a/debug/cesium/Workers/ComponentDatatype-13a5630b.js +++ /dev/null @@ -1,367 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './defaultValue-0ab18f7d', './Check-d10e5f2e', './WebGLConstants-f27a5e29'], (function (exports, defaultValue, Check, WebGLConstants) { 'use strict'; - - /** - * WebGL component datatypes. Components are intrinsics, - * which form attributes, which form vertices. - * - * @enum {Number} - */ - const ComponentDatatype = { - /** - * 8-bit signed byte corresponding to gl.BYTE and the type - * of an element in Int8Array. - * - * @type {Number} - * @constant - */ - BYTE: WebGLConstants.WebGLConstants.BYTE, - - /** - * 8-bit unsigned byte corresponding to UNSIGNED_BYTE and the type - * of an element in Uint8Array. - * - * @type {Number} - * @constant - */ - UNSIGNED_BYTE: WebGLConstants.WebGLConstants.UNSIGNED_BYTE, - - /** - * 16-bit signed short corresponding to SHORT and the type - * of an element in Int16Array. - * - * @type {Number} - * @constant - */ - SHORT: WebGLConstants.WebGLConstants.SHORT, - - /** - * 16-bit unsigned short corresponding to UNSIGNED_SHORT and the type - * of an element in Uint16Array. - * - * @type {Number} - * @constant - */ - UNSIGNED_SHORT: WebGLConstants.WebGLConstants.UNSIGNED_SHORT, - - /** - * 32-bit signed int corresponding to INT and the type - * of an element in Int32Array. - * - * @memberOf ComponentDatatype - * - * @type {Number} - * @constant - */ - INT: WebGLConstants.WebGLConstants.INT, - - /** - * 32-bit unsigned int corresponding to UNSIGNED_INT and the type - * of an element in Uint32Array. - * - * @memberOf ComponentDatatype - * - * @type {Number} - * @constant - */ - UNSIGNED_INT: WebGLConstants.WebGLConstants.UNSIGNED_INT, - - /** - * 32-bit floating-point corresponding to FLOAT and the type - * of an element in Float32Array. - * - * @type {Number} - * @constant - */ - FLOAT: WebGLConstants.WebGLConstants.FLOAT, - - /** - * 64-bit floating-point corresponding to gl.DOUBLE (in Desktop OpenGL; - * this is not supported in WebGL, and is emulated in Cesium via {@link GeometryPipeline.encodeAttribute}) - * and the type of an element in Float64Array. - * - * @memberOf ComponentDatatype - * - * @type {Number} - * @constant - * @default 0x140A - */ - DOUBLE: WebGLConstants.WebGLConstants.DOUBLE, - }; - - /** - * Returns the size, in bytes, of the corresponding datatype. - * - * @param {ComponentDatatype} componentDatatype The component datatype to get the size of. - * @returns {Number} The size in bytes. - * - * @exception {DeveloperError} componentDatatype is not a valid value. - * - * @example - * // Returns Int8Array.BYTES_PER_ELEMENT - * const size = Cesium.ComponentDatatype.getSizeInBytes(Cesium.ComponentDatatype.BYTE); - */ - ComponentDatatype.getSizeInBytes = function (componentDatatype) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(componentDatatype)) { - throw new Check.DeveloperError("value is required."); - } - //>>includeEnd('debug'); - - switch (componentDatatype) { - case ComponentDatatype.BYTE: - return Int8Array.BYTES_PER_ELEMENT; - case ComponentDatatype.UNSIGNED_BYTE: - return Uint8Array.BYTES_PER_ELEMENT; - case ComponentDatatype.SHORT: - return Int16Array.BYTES_PER_ELEMENT; - case ComponentDatatype.UNSIGNED_SHORT: - return Uint16Array.BYTES_PER_ELEMENT; - case ComponentDatatype.INT: - return Int32Array.BYTES_PER_ELEMENT; - case ComponentDatatype.UNSIGNED_INT: - return Uint32Array.BYTES_PER_ELEMENT; - case ComponentDatatype.FLOAT: - return Float32Array.BYTES_PER_ELEMENT; - case ComponentDatatype.DOUBLE: - return Float64Array.BYTES_PER_ELEMENT; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError("componentDatatype is not a valid value."); - //>>includeEnd('debug'); - } - }; - - /** - * Gets the {@link ComponentDatatype} for the provided TypedArray instance. - * - * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} array The typed array. - * @returns {ComponentDatatype} The ComponentDatatype for the provided array, or undefined if the array is not a TypedArray. - */ - ComponentDatatype.fromTypedArray = function (array) { - if (array instanceof Int8Array) { - return ComponentDatatype.BYTE; - } - if (array instanceof Uint8Array) { - return ComponentDatatype.UNSIGNED_BYTE; - } - if (array instanceof Int16Array) { - return ComponentDatatype.SHORT; - } - if (array instanceof Uint16Array) { - return ComponentDatatype.UNSIGNED_SHORT; - } - if (array instanceof Int32Array) { - return ComponentDatatype.INT; - } - if (array instanceof Uint32Array) { - return ComponentDatatype.UNSIGNED_INT; - } - if (array instanceof Float32Array) { - return ComponentDatatype.FLOAT; - } - if (array instanceof Float64Array) { - return ComponentDatatype.DOUBLE; - } - - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "array must be an Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, or Float64Array." - ); - //>>includeEnd('debug'); - }; - - /** - * Validates that the provided component datatype is a valid {@link ComponentDatatype} - * - * @param {ComponentDatatype} componentDatatype The component datatype to validate. - * @returns {Boolean} true if the provided component datatype is a valid value; otherwise, false. - * - * @example - * if (!Cesium.ComponentDatatype.validate(componentDatatype)) { - * throw new Cesium.DeveloperError('componentDatatype must be a valid value.'); - * } - */ - ComponentDatatype.validate = function (componentDatatype) { - return ( - defaultValue.defined(componentDatatype) && - (componentDatatype === ComponentDatatype.BYTE || - componentDatatype === ComponentDatatype.UNSIGNED_BYTE || - componentDatatype === ComponentDatatype.SHORT || - componentDatatype === ComponentDatatype.UNSIGNED_SHORT || - componentDatatype === ComponentDatatype.INT || - componentDatatype === ComponentDatatype.UNSIGNED_INT || - componentDatatype === ComponentDatatype.FLOAT || - componentDatatype === ComponentDatatype.DOUBLE) - ); - }; - - /** - * Creates a typed array corresponding to component data type. - * - * @param {ComponentDatatype} componentDatatype The component data type. - * @param {Number|Array} valuesOrLength The length of the array to create or an array. - * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} A typed array. - * - * @exception {DeveloperError} componentDatatype is not a valid value. - * - * @example - * // creates a Float32Array with length of 100 - * const typedArray = Cesium.ComponentDatatype.createTypedArray(Cesium.ComponentDatatype.FLOAT, 100); - */ - ComponentDatatype.createTypedArray = function ( - componentDatatype, - valuesOrLength - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(componentDatatype)) { - throw new Check.DeveloperError("componentDatatype is required."); - } - if (!defaultValue.defined(valuesOrLength)) { - throw new Check.DeveloperError("valuesOrLength is required."); - } - //>>includeEnd('debug'); - - switch (componentDatatype) { - case ComponentDatatype.BYTE: - return new Int8Array(valuesOrLength); - case ComponentDatatype.UNSIGNED_BYTE: - return new Uint8Array(valuesOrLength); - case ComponentDatatype.SHORT: - return new Int16Array(valuesOrLength); - case ComponentDatatype.UNSIGNED_SHORT: - return new Uint16Array(valuesOrLength); - case ComponentDatatype.INT: - return new Int32Array(valuesOrLength); - case ComponentDatatype.UNSIGNED_INT: - return new Uint32Array(valuesOrLength); - case ComponentDatatype.FLOAT: - return new Float32Array(valuesOrLength); - case ComponentDatatype.DOUBLE: - return new Float64Array(valuesOrLength); - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError("componentDatatype is not a valid value."); - //>>includeEnd('debug'); - } - }; - - /** - * Creates a typed view of an array of bytes. - * - * @param {ComponentDatatype} componentDatatype The type of the view to create. - * @param {ArrayBuffer} buffer The buffer storage to use for the view. - * @param {Number} [byteOffset] The offset, in bytes, to the first element in the view. - * @param {Number} [length] The number of elements in the view. - * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} A typed array view of the buffer. - * - * @exception {DeveloperError} componentDatatype is not a valid value. - */ - ComponentDatatype.createArrayBufferView = function ( - componentDatatype, - buffer, - byteOffset, - length - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(componentDatatype)) { - throw new Check.DeveloperError("componentDatatype is required."); - } - if (!defaultValue.defined(buffer)) { - throw new Check.DeveloperError("buffer is required."); - } - //>>includeEnd('debug'); - - byteOffset = defaultValue.defaultValue(byteOffset, 0); - length = defaultValue.defaultValue( - length, - (buffer.byteLength - byteOffset) / - ComponentDatatype.getSizeInBytes(componentDatatype) - ); - - switch (componentDatatype) { - case ComponentDatatype.BYTE: - return new Int8Array(buffer, byteOffset, length); - case ComponentDatatype.UNSIGNED_BYTE: - return new Uint8Array(buffer, byteOffset, length); - case ComponentDatatype.SHORT: - return new Int16Array(buffer, byteOffset, length); - case ComponentDatatype.UNSIGNED_SHORT: - return new Uint16Array(buffer, byteOffset, length); - case ComponentDatatype.INT: - return new Int32Array(buffer, byteOffset, length); - case ComponentDatatype.UNSIGNED_INT: - return new Uint32Array(buffer, byteOffset, length); - case ComponentDatatype.FLOAT: - return new Float32Array(buffer, byteOffset, length); - case ComponentDatatype.DOUBLE: - return new Float64Array(buffer, byteOffset, length); - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError("componentDatatype is not a valid value."); - //>>includeEnd('debug'); - } - }; - - /** - * Get the ComponentDatatype from its name. - * - * @param {String} name The name of the ComponentDatatype. - * @returns {ComponentDatatype} The ComponentDatatype. - * - * @exception {DeveloperError} name is not a valid value. - */ - ComponentDatatype.fromName = function (name) { - switch (name) { - case "BYTE": - return ComponentDatatype.BYTE; - case "UNSIGNED_BYTE": - return ComponentDatatype.UNSIGNED_BYTE; - case "SHORT": - return ComponentDatatype.SHORT; - case "UNSIGNED_SHORT": - return ComponentDatatype.UNSIGNED_SHORT; - case "INT": - return ComponentDatatype.INT; - case "UNSIGNED_INT": - return ComponentDatatype.UNSIGNED_INT; - case "FLOAT": - return ComponentDatatype.FLOAT; - case "DOUBLE": - return ComponentDatatype.DOUBLE; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError("name is not a valid value."); - //>>includeEnd('debug'); - } - }; - var ComponentDatatype$1 = Object.freeze(ComponentDatatype); - - exports.ComponentDatatype = ComponentDatatype$1; - -})); -//# sourceMappingURL=ComponentDatatype-13a5630b.js.map diff --git a/debug/cesium/Workers/ComponentDatatype-13a5630b.js.map b/debug/cesium/Workers/ComponentDatatype-13a5630b.js.map deleted file mode 100644 index a30ddfc..0000000 --- a/debug/cesium/Workers/ComponentDatatype-13a5630b.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ComponentDatatype-13a5630b.js","sources":["../../../Source/Core/ComponentDatatype.js"],"sourcesContent":["import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport WebGLConstants from \"./WebGLConstants.js\";\r\n\r\n/**\r\n * WebGL component datatypes. Components are intrinsics,\r\n * which form attributes, which form vertices.\r\n *\r\n * @enum {Number}\r\n */\r\nconst ComponentDatatype = {\r\n /**\r\n * 8-bit signed byte corresponding to gl.BYTE and the type\r\n * of an element in Int8Array.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n BYTE: WebGLConstants.BYTE,\r\n\r\n /**\r\n * 8-bit unsigned byte corresponding to UNSIGNED_BYTE and the type\r\n * of an element in Uint8Array.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\r\n\r\n /**\r\n * 16-bit signed short corresponding to SHORT and the type\r\n * of an element in Int16Array.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n SHORT: WebGLConstants.SHORT,\r\n\r\n /**\r\n * 16-bit unsigned short corresponding to UNSIGNED_SHORT and the type\r\n * of an element in Uint16Array.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\r\n\r\n /**\r\n * 32-bit signed int corresponding to INT and the type\r\n * of an element in Int32Array.\r\n *\r\n * @memberOf ComponentDatatype\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n INT: WebGLConstants.INT,\r\n\r\n /**\r\n * 32-bit unsigned int corresponding to UNSIGNED_INT and the type\r\n * of an element in Uint32Array.\r\n *\r\n * @memberOf ComponentDatatype\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\r\n\r\n /**\r\n * 32-bit floating-point corresponding to FLOAT and the type\r\n * of an element in Float32Array.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n FLOAT: WebGLConstants.FLOAT,\r\n\r\n /**\r\n * 64-bit floating-point corresponding to gl.DOUBLE (in Desktop OpenGL;\r\n * this is not supported in WebGL, and is emulated in Cesium via {@link GeometryPipeline.encodeAttribute})\r\n * and the type of an element in Float64Array.\r\n *\r\n * @memberOf ComponentDatatype\r\n *\r\n * @type {Number}\r\n * @constant\r\n * @default 0x140A\r\n */\r\n DOUBLE: WebGLConstants.DOUBLE,\r\n};\r\n\r\n/**\r\n * Returns the size, in bytes, of the corresponding datatype.\r\n *\r\n * @param {ComponentDatatype} componentDatatype The component datatype to get the size of.\r\n * @returns {Number} The size in bytes.\r\n *\r\n * @exception {DeveloperError} componentDatatype is not a valid value.\r\n *\r\n * @example\r\n * // Returns Int8Array.BYTES_PER_ELEMENT\r\n * const size = Cesium.ComponentDatatype.getSizeInBytes(Cesium.ComponentDatatype.BYTE);\r\n */\r\nComponentDatatype.getSizeInBytes = function (componentDatatype) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(componentDatatype)) {\r\n throw new DeveloperError(\"value is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n switch (componentDatatype) {\r\n case ComponentDatatype.BYTE:\r\n return Int8Array.BYTES_PER_ELEMENT;\r\n case ComponentDatatype.UNSIGNED_BYTE:\r\n return Uint8Array.BYTES_PER_ELEMENT;\r\n case ComponentDatatype.SHORT:\r\n return Int16Array.BYTES_PER_ELEMENT;\r\n case ComponentDatatype.UNSIGNED_SHORT:\r\n return Uint16Array.BYTES_PER_ELEMENT;\r\n case ComponentDatatype.INT:\r\n return Int32Array.BYTES_PER_ELEMENT;\r\n case ComponentDatatype.UNSIGNED_INT:\r\n return Uint32Array.BYTES_PER_ELEMENT;\r\n case ComponentDatatype.FLOAT:\r\n return Float32Array.BYTES_PER_ELEMENT;\r\n case ComponentDatatype.DOUBLE:\r\n return Float64Array.BYTES_PER_ELEMENT;\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\"componentDatatype is not a valid value.\");\r\n //>>includeEnd('debug');\r\n }\r\n};\r\n\r\n/**\r\n * Gets the {@link ComponentDatatype} for the provided TypedArray instance.\r\n *\r\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} array The typed array.\r\n * @returns {ComponentDatatype} The ComponentDatatype for the provided array, or undefined if the array is not a TypedArray.\r\n */\r\nComponentDatatype.fromTypedArray = function (array) {\r\n if (array instanceof Int8Array) {\r\n return ComponentDatatype.BYTE;\r\n }\r\n if (array instanceof Uint8Array) {\r\n return ComponentDatatype.UNSIGNED_BYTE;\r\n }\r\n if (array instanceof Int16Array) {\r\n return ComponentDatatype.SHORT;\r\n }\r\n if (array instanceof Uint16Array) {\r\n return ComponentDatatype.UNSIGNED_SHORT;\r\n }\r\n if (array instanceof Int32Array) {\r\n return ComponentDatatype.INT;\r\n }\r\n if (array instanceof Uint32Array) {\r\n return ComponentDatatype.UNSIGNED_INT;\r\n }\r\n if (array instanceof Float32Array) {\r\n return ComponentDatatype.FLOAT;\r\n }\r\n if (array instanceof Float64Array) {\r\n return ComponentDatatype.DOUBLE;\r\n }\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"array must be an Int8Array, Uint8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Float32Array, or Float64Array.\"\r\n );\r\n //>>includeEnd('debug');\r\n};\r\n\r\n/**\r\n * Validates that the provided component datatype is a valid {@link ComponentDatatype}\r\n *\r\n * @param {ComponentDatatype} componentDatatype The component datatype to validate.\r\n * @returns {Boolean} true if the provided component datatype is a valid value; otherwise, false.\r\n *\r\n * @example\r\n * if (!Cesium.ComponentDatatype.validate(componentDatatype)) {\r\n * throw new Cesium.DeveloperError('componentDatatype must be a valid value.');\r\n * }\r\n */\r\nComponentDatatype.validate = function (componentDatatype) {\r\n return (\r\n defined(componentDatatype) &&\r\n (componentDatatype === ComponentDatatype.BYTE ||\r\n componentDatatype === ComponentDatatype.UNSIGNED_BYTE ||\r\n componentDatatype === ComponentDatatype.SHORT ||\r\n componentDatatype === ComponentDatatype.UNSIGNED_SHORT ||\r\n componentDatatype === ComponentDatatype.INT ||\r\n componentDatatype === ComponentDatatype.UNSIGNED_INT ||\r\n componentDatatype === ComponentDatatype.FLOAT ||\r\n componentDatatype === ComponentDatatype.DOUBLE)\r\n );\r\n};\r\n\r\n/**\r\n * Creates a typed array corresponding to component data type.\r\n *\r\n * @param {ComponentDatatype} componentDatatype The component data type.\r\n * @param {Number|Array} valuesOrLength The length of the array to create or an array.\r\n * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} A typed array.\r\n *\r\n * @exception {DeveloperError} componentDatatype is not a valid value.\r\n *\r\n * @example\r\n * // creates a Float32Array with length of 100\r\n * const typedArray = Cesium.ComponentDatatype.createTypedArray(Cesium.ComponentDatatype.FLOAT, 100);\r\n */\r\nComponentDatatype.createTypedArray = function (\r\n componentDatatype,\r\n valuesOrLength\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(componentDatatype)) {\r\n throw new DeveloperError(\"componentDatatype is required.\");\r\n }\r\n if (!defined(valuesOrLength)) {\r\n throw new DeveloperError(\"valuesOrLength is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n switch (componentDatatype) {\r\n case ComponentDatatype.BYTE:\r\n return new Int8Array(valuesOrLength);\r\n case ComponentDatatype.UNSIGNED_BYTE:\r\n return new Uint8Array(valuesOrLength);\r\n case ComponentDatatype.SHORT:\r\n return new Int16Array(valuesOrLength);\r\n case ComponentDatatype.UNSIGNED_SHORT:\r\n return new Uint16Array(valuesOrLength);\r\n case ComponentDatatype.INT:\r\n return new Int32Array(valuesOrLength);\r\n case ComponentDatatype.UNSIGNED_INT:\r\n return new Uint32Array(valuesOrLength);\r\n case ComponentDatatype.FLOAT:\r\n return new Float32Array(valuesOrLength);\r\n case ComponentDatatype.DOUBLE:\r\n return new Float64Array(valuesOrLength);\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\"componentDatatype is not a valid value.\");\r\n //>>includeEnd('debug');\r\n }\r\n};\r\n\r\n/**\r\n * Creates a typed view of an array of bytes.\r\n *\r\n * @param {ComponentDatatype} componentDatatype The type of the view to create.\r\n * @param {ArrayBuffer} buffer The buffer storage to use for the view.\r\n * @param {Number} [byteOffset] The offset, in bytes, to the first element in the view.\r\n * @param {Number} [length] The number of elements in the view.\r\n * @returns {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} A typed array view of the buffer.\r\n *\r\n * @exception {DeveloperError} componentDatatype is not a valid value.\r\n */\r\nComponentDatatype.createArrayBufferView = function (\r\n componentDatatype,\r\n buffer,\r\n byteOffset,\r\n length\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(componentDatatype)) {\r\n throw new DeveloperError(\"componentDatatype is required.\");\r\n }\r\n if (!defined(buffer)) {\r\n throw new DeveloperError(\"buffer is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n byteOffset = defaultValue(byteOffset, 0);\r\n length = defaultValue(\r\n length,\r\n (buffer.byteLength - byteOffset) /\r\n ComponentDatatype.getSizeInBytes(componentDatatype)\r\n );\r\n\r\n switch (componentDatatype) {\r\n case ComponentDatatype.BYTE:\r\n return new Int8Array(buffer, byteOffset, length);\r\n case ComponentDatatype.UNSIGNED_BYTE:\r\n return new Uint8Array(buffer, byteOffset, length);\r\n case ComponentDatatype.SHORT:\r\n return new Int16Array(buffer, byteOffset, length);\r\n case ComponentDatatype.UNSIGNED_SHORT:\r\n return new Uint16Array(buffer, byteOffset, length);\r\n case ComponentDatatype.INT:\r\n return new Int32Array(buffer, byteOffset, length);\r\n case ComponentDatatype.UNSIGNED_INT:\r\n return new Uint32Array(buffer, byteOffset, length);\r\n case ComponentDatatype.FLOAT:\r\n return new Float32Array(buffer, byteOffset, length);\r\n case ComponentDatatype.DOUBLE:\r\n return new Float64Array(buffer, byteOffset, length);\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\"componentDatatype is not a valid value.\");\r\n //>>includeEnd('debug');\r\n }\r\n};\r\n\r\n/**\r\n * Get the ComponentDatatype from its name.\r\n *\r\n * @param {String} name The name of the ComponentDatatype.\r\n * @returns {ComponentDatatype} The ComponentDatatype.\r\n *\r\n * @exception {DeveloperError} name is not a valid value.\r\n */\r\nComponentDatatype.fromName = function (name) {\r\n switch (name) {\r\n case \"BYTE\":\r\n return ComponentDatatype.BYTE;\r\n case \"UNSIGNED_BYTE\":\r\n return ComponentDatatype.UNSIGNED_BYTE;\r\n case \"SHORT\":\r\n return ComponentDatatype.SHORT;\r\n case \"UNSIGNED_SHORT\":\r\n return ComponentDatatype.UNSIGNED_SHORT;\r\n case \"INT\":\r\n return ComponentDatatype.INT;\r\n case \"UNSIGNED_INT\":\r\n return ComponentDatatype.UNSIGNED_INT;\r\n case \"FLOAT\":\r\n return ComponentDatatype.FLOAT;\r\n case \"DOUBLE\":\r\n return ComponentDatatype.DOUBLE;\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\"name is not a valid value.\");\r\n //>>includeEnd('debug');\r\n }\r\n};\r\nexport default Object.freeze(ComponentDatatype);\r\n"],"names":["WebGLConstants","defined","DeveloperError","defaultValue"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/CoplanarPolygonGeometryLibrary-dfba6465.js b/debug/cesium/Workers/CoplanarPolygonGeometryLibrary-dfba6465.js deleted file mode 100644 index f6895e3..0000000 --- a/debug/cesium/Workers/CoplanarPolygonGeometryLibrary-dfba6465.js +++ /dev/null @@ -1,158 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './OrientedBoundingBox-7e2eebab'], (function (exports, Matrix2, Matrix3, Check, OrientedBoundingBox) { 'use strict'; - - /** - * @private - */ - const CoplanarPolygonGeometryLibrary = {}; - - const scratchIntersectionPoint = new Matrix3.Cartesian3(); - const scratchXAxis = new Matrix3.Cartesian3(); - const scratchYAxis = new Matrix3.Cartesian3(); - const scratchZAxis = new Matrix3.Cartesian3(); - const obbScratch = new OrientedBoundingBox.OrientedBoundingBox(); - - CoplanarPolygonGeometryLibrary.validOutline = function (positions) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("positions", positions); - //>>includeEnd('debug'); - - const orientedBoundingBox = OrientedBoundingBox.OrientedBoundingBox.fromPoints( - positions, - obbScratch - ); - const halfAxes = orientedBoundingBox.halfAxes; - const xAxis = Matrix3.Matrix3.getColumn(halfAxes, 0, scratchXAxis); - const yAxis = Matrix3.Matrix3.getColumn(halfAxes, 1, scratchYAxis); - const zAxis = Matrix3.Matrix3.getColumn(halfAxes, 2, scratchZAxis); - - const xMag = Matrix3.Cartesian3.magnitude(xAxis); - const yMag = Matrix3.Cartesian3.magnitude(yAxis); - const zMag = Matrix3.Cartesian3.magnitude(zAxis); - - // If all the points are on a line return undefined because we can't draw a polygon - return !( - (xMag === 0 && (yMag === 0 || zMag === 0)) || - (yMag === 0 && zMag === 0) - ); - }; - - // call after removeDuplicates - CoplanarPolygonGeometryLibrary.computeProjectTo2DArguments = function ( - positions, - centerResult, - planeAxis1Result, - planeAxis2Result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("positions", positions); - Check.Check.defined("centerResult", centerResult); - Check.Check.defined("planeAxis1Result", planeAxis1Result); - Check.Check.defined("planeAxis2Result", planeAxis2Result); - //>>includeEnd('debug'); - - const orientedBoundingBox = OrientedBoundingBox.OrientedBoundingBox.fromPoints( - positions, - obbScratch - ); - const halfAxes = orientedBoundingBox.halfAxes; - const xAxis = Matrix3.Matrix3.getColumn(halfAxes, 0, scratchXAxis); - const yAxis = Matrix3.Matrix3.getColumn(halfAxes, 1, scratchYAxis); - const zAxis = Matrix3.Matrix3.getColumn(halfAxes, 2, scratchZAxis); - - const xMag = Matrix3.Cartesian3.magnitude(xAxis); - const yMag = Matrix3.Cartesian3.magnitude(yAxis); - const zMag = Matrix3.Cartesian3.magnitude(zAxis); - const min = Math.min(xMag, yMag, zMag); - - // If all the points are on a line return undefined because we can't draw a polygon - if ( - (xMag === 0 && (yMag === 0 || zMag === 0)) || - (yMag === 0 && zMag === 0) - ) { - return false; - } - - let planeAxis1; - let planeAxis2; - - if (min === yMag || min === zMag) { - planeAxis1 = xAxis; - } - if (min === xMag) { - planeAxis1 = yAxis; - } else if (min === zMag) { - planeAxis2 = yAxis; - } - if (min === xMag || min === yMag) { - planeAxis2 = zAxis; - } - - Matrix3.Cartesian3.normalize(planeAxis1, planeAxis1Result); - Matrix3.Cartesian3.normalize(planeAxis2, planeAxis2Result); - Matrix3.Cartesian3.clone(orientedBoundingBox.center, centerResult); - return true; - }; - - function projectTo2D(position, center, axis1, axis2, result) { - const v = Matrix3.Cartesian3.subtract(position, center, scratchIntersectionPoint); - const x = Matrix3.Cartesian3.dot(axis1, v); - const y = Matrix3.Cartesian3.dot(axis2, v); - - return Matrix2.Cartesian2.fromElements(x, y, result); - } - - CoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction = function ( - center, - axis1, - axis2 - ) { - return function (positions) { - const positionResults = new Array(positions.length); - for (let i = 0; i < positions.length; i++) { - positionResults[i] = projectTo2D(positions[i], center, axis1, axis2); - } - - return positionResults; - }; - }; - - CoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction = function ( - center, - axis1, - axis2 - ) { - return function (position, result) { - return projectTo2D(position, center, axis1, axis2, result); - }; - }; - var CoplanarPolygonGeometryLibrary$1 = CoplanarPolygonGeometryLibrary; - - exports.CoplanarPolygonGeometryLibrary = CoplanarPolygonGeometryLibrary$1; - -})); -//# sourceMappingURL=CoplanarPolygonGeometryLibrary-dfba6465.js.map diff --git a/debug/cesium/Workers/CoplanarPolygonGeometryLibrary-dfba6465.js.map b/debug/cesium/Workers/CoplanarPolygonGeometryLibrary-dfba6465.js.map deleted file mode 100644 index 5dd4c09..0000000 --- a/debug/cesium/Workers/CoplanarPolygonGeometryLibrary-dfba6465.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"CoplanarPolygonGeometryLibrary-dfba6465.js","sources":["../../../Source/Core/CoplanarPolygonGeometryLibrary.js"],"sourcesContent":["import Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst CoplanarPolygonGeometryLibrary = {};\r\n\r\nconst scratchIntersectionPoint = new Cartesian3();\r\nconst scratchXAxis = new Cartesian3();\r\nconst scratchYAxis = new Cartesian3();\r\nconst scratchZAxis = new Cartesian3();\r\nconst obbScratch = new OrientedBoundingBox();\r\n\r\nCoplanarPolygonGeometryLibrary.validOutline = function (positions) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"positions\", positions);\r\n //>>includeEnd('debug');\r\n\r\n const orientedBoundingBox = OrientedBoundingBox.fromPoints(\r\n positions,\r\n obbScratch\r\n );\r\n const halfAxes = orientedBoundingBox.halfAxes;\r\n const xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\r\n const yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\r\n const zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\r\n\r\n const xMag = Cartesian3.magnitude(xAxis);\r\n const yMag = Cartesian3.magnitude(yAxis);\r\n const zMag = Cartesian3.magnitude(zAxis);\r\n\r\n // If all the points are on a line return undefined because we can't draw a polygon\r\n return !(\r\n (xMag === 0 && (yMag === 0 || zMag === 0)) ||\r\n (yMag === 0 && zMag === 0)\r\n );\r\n};\r\n\r\n// call after removeDuplicates\r\nCoplanarPolygonGeometryLibrary.computeProjectTo2DArguments = function (\r\n positions,\r\n centerResult,\r\n planeAxis1Result,\r\n planeAxis2Result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"positions\", positions);\r\n Check.defined(\"centerResult\", centerResult);\r\n Check.defined(\"planeAxis1Result\", planeAxis1Result);\r\n Check.defined(\"planeAxis2Result\", planeAxis2Result);\r\n //>>includeEnd('debug');\r\n\r\n const orientedBoundingBox = OrientedBoundingBox.fromPoints(\r\n positions,\r\n obbScratch\r\n );\r\n const halfAxes = orientedBoundingBox.halfAxes;\r\n const xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\r\n const yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\r\n const zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\r\n\r\n const xMag = Cartesian3.magnitude(xAxis);\r\n const yMag = Cartesian3.magnitude(yAxis);\r\n const zMag = Cartesian3.magnitude(zAxis);\r\n const min = Math.min(xMag, yMag, zMag);\r\n\r\n // If all the points are on a line return undefined because we can't draw a polygon\r\n if (\r\n (xMag === 0 && (yMag === 0 || zMag === 0)) ||\r\n (yMag === 0 && zMag === 0)\r\n ) {\r\n return false;\r\n }\r\n\r\n let planeAxis1;\r\n let planeAxis2;\r\n\r\n if (min === yMag || min === zMag) {\r\n planeAxis1 = xAxis;\r\n }\r\n if (min === xMag) {\r\n planeAxis1 = yAxis;\r\n } else if (min === zMag) {\r\n planeAxis2 = yAxis;\r\n }\r\n if (min === xMag || min === yMag) {\r\n planeAxis2 = zAxis;\r\n }\r\n\r\n Cartesian3.normalize(planeAxis1, planeAxis1Result);\r\n Cartesian3.normalize(planeAxis2, planeAxis2Result);\r\n Cartesian3.clone(orientedBoundingBox.center, centerResult);\r\n return true;\r\n};\r\n\r\nfunction projectTo2D(position, center, axis1, axis2, result) {\r\n const v = Cartesian3.subtract(position, center, scratchIntersectionPoint);\r\n const x = Cartesian3.dot(axis1, v);\r\n const y = Cartesian3.dot(axis2, v);\r\n\r\n return Cartesian2.fromElements(x, y, result);\r\n}\r\n\r\nCoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction = function (\r\n center,\r\n axis1,\r\n axis2\r\n) {\r\n return function (positions) {\r\n const positionResults = new Array(positions.length);\r\n for (let i = 0; i < positions.length; i++) {\r\n positionResults[i] = projectTo2D(positions[i], center, axis1, axis2);\r\n }\r\n\r\n return positionResults;\r\n };\r\n};\r\n\r\nCoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction = function (\r\n center,\r\n axis1,\r\n axis2\r\n) {\r\n return function (position, result) {\r\n return projectTo2D(position, center, axis1, axis2, result);\r\n };\r\n};\r\nexport default CoplanarPolygonGeometryLibrary;\r\n"],"names":["Cartesian3","OrientedBoundingBox","Check","Matrix3","Cartesian2"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/CorridorGeometryLibrary-152d0356.js b/debug/cesium/Workers/CorridorGeometryLibrary-152d0356.js deleted file mode 100644 index 67ca0e8..0000000 --- a/debug/cesium/Workers/CorridorGeometryLibrary-152d0356.js +++ /dev/null @@ -1,524 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './PolylineVolumeGeometryLibrary-eed2bdf7', './defaultValue-0ab18f7d', './Math-9be8b918', './PolylinePipeline-3c021236', './Transforms-11fb6b0a'], (function (exports, Matrix3, PolylineVolumeGeometryLibrary, defaultValue, Math$1, PolylinePipeline, Transforms) { 'use strict'; - - /** - * @private - */ - const CorridorGeometryLibrary = {}; - - const scratch1 = new Matrix3.Cartesian3(); - const scratch2 = new Matrix3.Cartesian3(); - const scratch3 = new Matrix3.Cartesian3(); - const scratch4 = new Matrix3.Cartesian3(); - - const scaleArray2 = [new Matrix3.Cartesian3(), new Matrix3.Cartesian3()]; - - const cartesian1 = new Matrix3.Cartesian3(); - const cartesian2 = new Matrix3.Cartesian3(); - const cartesian3 = new Matrix3.Cartesian3(); - const cartesian4 = new Matrix3.Cartesian3(); - const cartesian5 = new Matrix3.Cartesian3(); - const cartesian6 = new Matrix3.Cartesian3(); - const cartesian7 = new Matrix3.Cartesian3(); - const cartesian8 = new Matrix3.Cartesian3(); - const cartesian9 = new Matrix3.Cartesian3(); - const cartesian10 = new Matrix3.Cartesian3(); - - const quaterion = new Transforms.Quaternion(); - const rotMatrix = new Matrix3.Matrix3(); - function computeRoundCorner( - cornerPoint, - startPoint, - endPoint, - cornerType, - leftIsOutside - ) { - const angle = Matrix3.Cartesian3.angleBetween( - Matrix3.Cartesian3.subtract(startPoint, cornerPoint, scratch1), - Matrix3.Cartesian3.subtract(endPoint, cornerPoint, scratch2) - ); - const granularity = - cornerType === PolylineVolumeGeometryLibrary.CornerType.BEVELED - ? 1 - : Math.ceil(angle / Math$1.CesiumMath.toRadians(5)) + 1; - - const size = granularity * 3; - const array = new Array(size); - - array[size - 3] = endPoint.x; - array[size - 2] = endPoint.y; - array[size - 1] = endPoint.z; - - let m; - if (leftIsOutside) { - m = Matrix3.Matrix3.fromQuaternion( - Transforms.Quaternion.fromAxisAngle( - Matrix3.Cartesian3.negate(cornerPoint, scratch1), - angle / granularity, - quaterion - ), - rotMatrix - ); - } else { - m = Matrix3.Matrix3.fromQuaternion( - Transforms.Quaternion.fromAxisAngle(cornerPoint, angle / granularity, quaterion), - rotMatrix - ); - } - - let index = 0; - startPoint = Matrix3.Cartesian3.clone(startPoint, scratch1); - for (let i = 0; i < granularity; i++) { - startPoint = Matrix3.Matrix3.multiplyByVector(m, startPoint, startPoint); - array[index++] = startPoint.x; - array[index++] = startPoint.y; - array[index++] = startPoint.z; - } - - return array; - } - - function addEndCaps(calculatedPositions) { - let cornerPoint = cartesian1; - let startPoint = cartesian2; - let endPoint = cartesian3; - - let leftEdge = calculatedPositions[1]; - startPoint = Matrix3.Cartesian3.fromArray( - calculatedPositions[1], - leftEdge.length - 3, - startPoint - ); - endPoint = Matrix3.Cartesian3.fromArray(calculatedPositions[0], 0, endPoint); - cornerPoint = Matrix3.Cartesian3.midpoint(startPoint, endPoint, cornerPoint); - const firstEndCap = computeRoundCorner( - cornerPoint, - startPoint, - endPoint, - PolylineVolumeGeometryLibrary.CornerType.ROUNDED, - false - ); - - const length = calculatedPositions.length - 1; - const rightEdge = calculatedPositions[length - 1]; - leftEdge = calculatedPositions[length]; - startPoint = Matrix3.Cartesian3.fromArray( - rightEdge, - rightEdge.length - 3, - startPoint - ); - endPoint = Matrix3.Cartesian3.fromArray(leftEdge, 0, endPoint); - cornerPoint = Matrix3.Cartesian3.midpoint(startPoint, endPoint, cornerPoint); - const lastEndCap = computeRoundCorner( - cornerPoint, - startPoint, - endPoint, - PolylineVolumeGeometryLibrary.CornerType.ROUNDED, - false - ); - - return [firstEndCap, lastEndCap]; - } - - function computeMiteredCorner( - position, - leftCornerDirection, - lastPoint, - leftIsOutside - ) { - let cornerPoint = scratch1; - if (leftIsOutside) { - cornerPoint = Matrix3.Cartesian3.add(position, leftCornerDirection, cornerPoint); - } else { - leftCornerDirection = Matrix3.Cartesian3.negate( - leftCornerDirection, - leftCornerDirection - ); - cornerPoint = Matrix3.Cartesian3.add(position, leftCornerDirection, cornerPoint); - } - return [ - cornerPoint.x, - cornerPoint.y, - cornerPoint.z, - lastPoint.x, - lastPoint.y, - lastPoint.z, - ]; - } - - function addShiftedPositions(positions, left, scalar, calculatedPositions) { - const rightPositions = new Array(positions.length); - const leftPositions = new Array(positions.length); - const scaledLeft = Matrix3.Cartesian3.multiplyByScalar(left, scalar, scratch1); - const scaledRight = Matrix3.Cartesian3.negate(scaledLeft, scratch2); - let rightIndex = 0; - let leftIndex = positions.length - 1; - - for (let i = 0; i < positions.length; i += 3) { - const pos = Matrix3.Cartesian3.fromArray(positions, i, scratch3); - const rightPos = Matrix3.Cartesian3.add(pos, scaledRight, scratch4); - rightPositions[rightIndex++] = rightPos.x; - rightPositions[rightIndex++] = rightPos.y; - rightPositions[rightIndex++] = rightPos.z; - - const leftPos = Matrix3.Cartesian3.add(pos, scaledLeft, scratch4); - leftPositions[leftIndex--] = leftPos.z; - leftPositions[leftIndex--] = leftPos.y; - leftPositions[leftIndex--] = leftPos.x; - } - calculatedPositions.push(rightPositions, leftPositions); - - return calculatedPositions; - } - - /** - * @private - */ - CorridorGeometryLibrary.addAttribute = function ( - attribute, - value, - front, - back - ) { - const x = value.x; - const y = value.y; - const z = value.z; - if (defaultValue.defined(front)) { - attribute[front] = x; - attribute[front + 1] = y; - attribute[front + 2] = z; - } - if (defaultValue.defined(back)) { - attribute[back] = z; - attribute[back - 1] = y; - attribute[back - 2] = x; - } - }; - - const scratchForwardProjection = new Matrix3.Cartesian3(); - const scratchBackwardProjection = new Matrix3.Cartesian3(); - - /** - * @private - */ - CorridorGeometryLibrary.computePositions = function (params) { - const granularity = params.granularity; - const positions = params.positions; - const ellipsoid = params.ellipsoid; - const width = params.width / 2; - const cornerType = params.cornerType; - const saveAttributes = params.saveAttributes; - let normal = cartesian1; - let forward = cartesian2; - let backward = cartesian3; - let left = cartesian4; - let cornerDirection = cartesian5; - let startPoint = cartesian6; - let previousPos = cartesian7; - let rightPos = cartesian8; - let leftPos = cartesian9; - let center = cartesian10; - let calculatedPositions = []; - const calculatedLefts = saveAttributes ? [] : undefined; - const calculatedNormals = saveAttributes ? [] : undefined; - let position = positions[0]; //add first point - let nextPosition = positions[1]; - - forward = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.subtract(nextPosition, position, forward), - forward - ); - normal = ellipsoid.geodeticSurfaceNormal(position, normal); - left = Matrix3.Cartesian3.normalize(Matrix3.Cartesian3.cross(normal, forward, left), left); - if (saveAttributes) { - calculatedLefts.push(left.x, left.y, left.z); - calculatedNormals.push(normal.x, normal.y, normal.z); - } - previousPos = Matrix3.Cartesian3.clone(position, previousPos); - position = nextPosition; - backward = Matrix3.Cartesian3.negate(forward, backward); - - let subdividedPositions; - const corners = []; - let i; - const length = positions.length; - for (i = 1; i < length - 1; i++) { - // add middle points and corners - normal = ellipsoid.geodeticSurfaceNormal(position, normal); - nextPosition = positions[i + 1]; - forward = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.subtract(nextPosition, position, forward), - forward - ); - cornerDirection = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.add(forward, backward, cornerDirection), - cornerDirection - ); - - const forwardProjection = Matrix3.Cartesian3.multiplyByScalar( - normal, - Matrix3.Cartesian3.dot(forward, normal), - scratchForwardProjection - ); - Matrix3.Cartesian3.subtract(forward, forwardProjection, forwardProjection); - Matrix3.Cartesian3.normalize(forwardProjection, forwardProjection); - - const backwardProjection = Matrix3.Cartesian3.multiplyByScalar( - normal, - Matrix3.Cartesian3.dot(backward, normal), - scratchBackwardProjection - ); - Matrix3.Cartesian3.subtract(backward, backwardProjection, backwardProjection); - Matrix3.Cartesian3.normalize(backwardProjection, backwardProjection); - - const doCorner = !Math$1.CesiumMath.equalsEpsilon( - Math.abs(Matrix3.Cartesian3.dot(forwardProjection, backwardProjection)), - 1.0, - Math$1.CesiumMath.EPSILON7 - ); - - if (doCorner) { - cornerDirection = Matrix3.Cartesian3.cross( - cornerDirection, - normal, - cornerDirection - ); - cornerDirection = Matrix3.Cartesian3.cross( - normal, - cornerDirection, - cornerDirection - ); - cornerDirection = Matrix3.Cartesian3.normalize(cornerDirection, cornerDirection); - const scalar = - width / - Math.max( - 0.25, - Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.cross(cornerDirection, backward, scratch1) - ) - ); - const leftIsOutside = PolylineVolumeGeometryLibrary.PolylineVolumeGeometryLibrary.angleIsGreaterThanPi( - forward, - backward, - position, - ellipsoid - ); - cornerDirection = Matrix3.Cartesian3.multiplyByScalar( - cornerDirection, - scalar, - cornerDirection - ); - if (leftIsOutside) { - rightPos = Matrix3.Cartesian3.add(position, cornerDirection, rightPos); - center = Matrix3.Cartesian3.add( - rightPos, - Matrix3.Cartesian3.multiplyByScalar(left, width, center), - center - ); - leftPos = Matrix3.Cartesian3.add( - rightPos, - Matrix3.Cartesian3.multiplyByScalar(left, width * 2, leftPos), - leftPos - ); - scaleArray2[0] = Matrix3.Cartesian3.clone(previousPos, scaleArray2[0]); - scaleArray2[1] = Matrix3.Cartesian3.clone(center, scaleArray2[1]); - subdividedPositions = PolylinePipeline.PolylinePipeline.generateArc({ - positions: scaleArray2, - granularity: granularity, - ellipsoid: ellipsoid, - }); - calculatedPositions = addShiftedPositions( - subdividedPositions, - left, - width, - calculatedPositions - ); - if (saveAttributes) { - calculatedLefts.push(left.x, left.y, left.z); - calculatedNormals.push(normal.x, normal.y, normal.z); - } - startPoint = Matrix3.Cartesian3.clone(leftPos, startPoint); - left = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(normal, forward, left), - left - ); - leftPos = Matrix3.Cartesian3.add( - rightPos, - Matrix3.Cartesian3.multiplyByScalar(left, width * 2, leftPos), - leftPos - ); - previousPos = Matrix3.Cartesian3.add( - rightPos, - Matrix3.Cartesian3.multiplyByScalar(left, width, previousPos), - previousPos - ); - if ( - cornerType === PolylineVolumeGeometryLibrary.CornerType.ROUNDED || - cornerType === PolylineVolumeGeometryLibrary.CornerType.BEVELED - ) { - corners.push({ - leftPositions: computeRoundCorner( - rightPos, - startPoint, - leftPos, - cornerType, - leftIsOutside - ), - }); - } else { - corners.push({ - leftPositions: computeMiteredCorner( - position, - Matrix3.Cartesian3.negate(cornerDirection, cornerDirection), - leftPos, - leftIsOutside - ), - }); - } - } else { - leftPos = Matrix3.Cartesian3.add(position, cornerDirection, leftPos); - center = Matrix3.Cartesian3.add( - leftPos, - Matrix3.Cartesian3.negate( - Matrix3.Cartesian3.multiplyByScalar(left, width, center), - center - ), - center - ); - rightPos = Matrix3.Cartesian3.add( - leftPos, - Matrix3.Cartesian3.negate( - Matrix3.Cartesian3.multiplyByScalar(left, width * 2, rightPos), - rightPos - ), - rightPos - ); - scaleArray2[0] = Matrix3.Cartesian3.clone(previousPos, scaleArray2[0]); - scaleArray2[1] = Matrix3.Cartesian3.clone(center, scaleArray2[1]); - subdividedPositions = PolylinePipeline.PolylinePipeline.generateArc({ - positions: scaleArray2, - granularity: granularity, - ellipsoid: ellipsoid, - }); - calculatedPositions = addShiftedPositions( - subdividedPositions, - left, - width, - calculatedPositions - ); - if (saveAttributes) { - calculatedLefts.push(left.x, left.y, left.z); - calculatedNormals.push(normal.x, normal.y, normal.z); - } - startPoint = Matrix3.Cartesian3.clone(rightPos, startPoint); - left = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(normal, forward, left), - left - ); - rightPos = Matrix3.Cartesian3.add( - leftPos, - Matrix3.Cartesian3.negate( - Matrix3.Cartesian3.multiplyByScalar(left, width * 2, rightPos), - rightPos - ), - rightPos - ); - previousPos = Matrix3.Cartesian3.add( - leftPos, - Matrix3.Cartesian3.negate( - Matrix3.Cartesian3.multiplyByScalar(left, width, previousPos), - previousPos - ), - previousPos - ); - if ( - cornerType === PolylineVolumeGeometryLibrary.CornerType.ROUNDED || - cornerType === PolylineVolumeGeometryLibrary.CornerType.BEVELED - ) { - corners.push({ - rightPositions: computeRoundCorner( - leftPos, - startPoint, - rightPos, - cornerType, - leftIsOutside - ), - }); - } else { - corners.push({ - rightPositions: computeMiteredCorner( - position, - cornerDirection, - rightPos, - leftIsOutside - ), - }); - } - } - backward = Matrix3.Cartesian3.negate(forward, backward); - } - position = nextPosition; - } - - normal = ellipsoid.geodeticSurfaceNormal(position, normal); - scaleArray2[0] = Matrix3.Cartesian3.clone(previousPos, scaleArray2[0]); - scaleArray2[1] = Matrix3.Cartesian3.clone(position, scaleArray2[1]); - subdividedPositions = PolylinePipeline.PolylinePipeline.generateArc({ - positions: scaleArray2, - granularity: granularity, - ellipsoid: ellipsoid, - }); - calculatedPositions = addShiftedPositions( - subdividedPositions, - left, - width, - calculatedPositions - ); - if (saveAttributes) { - calculatedLefts.push(left.x, left.y, left.z); - calculatedNormals.push(normal.x, normal.y, normal.z); - } - - let endPositions; - if (cornerType === PolylineVolumeGeometryLibrary.CornerType.ROUNDED) { - endPositions = addEndCaps(calculatedPositions); - } - - return { - positions: calculatedPositions, - corners: corners, - lefts: calculatedLefts, - normals: calculatedNormals, - endPositions: endPositions, - }; - }; - var CorridorGeometryLibrary$1 = CorridorGeometryLibrary; - - exports.CorridorGeometryLibrary = CorridorGeometryLibrary$1; - -})); -//# sourceMappingURL=CorridorGeometryLibrary-152d0356.js.map diff --git a/debug/cesium/Workers/CorridorGeometryLibrary-152d0356.js.map b/debug/cesium/Workers/CorridorGeometryLibrary-152d0356.js.map deleted file mode 100644 index 3612d67..0000000 --- a/debug/cesium/Workers/CorridorGeometryLibrary-152d0356.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"CorridorGeometryLibrary-152d0356.js","sources":["../../../Source/Core/CorridorGeometryLibrary.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport CornerType from \"./CornerType.js\";\r\nimport defined from \"./defined.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport PolylinePipeline from \"./PolylinePipeline.js\";\r\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst CorridorGeometryLibrary = {};\r\n\r\nconst scratch1 = new Cartesian3();\r\nconst scratch2 = new Cartesian3();\r\nconst scratch3 = new Cartesian3();\r\nconst scratch4 = new Cartesian3();\r\n\r\nconst scaleArray2 = [new Cartesian3(), new Cartesian3()];\r\n\r\nconst cartesian1 = new Cartesian3();\r\nconst cartesian2 = new Cartesian3();\r\nconst cartesian3 = new Cartesian3();\r\nconst cartesian4 = new Cartesian3();\r\nconst cartesian5 = new Cartesian3();\r\nconst cartesian6 = new Cartesian3();\r\nconst cartesian7 = new Cartesian3();\r\nconst cartesian8 = new Cartesian3();\r\nconst cartesian9 = new Cartesian3();\r\nconst cartesian10 = new Cartesian3();\r\n\r\nconst quaterion = new Quaternion();\r\nconst rotMatrix = new Matrix3();\r\nfunction computeRoundCorner(\r\n cornerPoint,\r\n startPoint,\r\n endPoint,\r\n cornerType,\r\n leftIsOutside\r\n) {\r\n const angle = Cartesian3.angleBetween(\r\n Cartesian3.subtract(startPoint, cornerPoint, scratch1),\r\n Cartesian3.subtract(endPoint, cornerPoint, scratch2)\r\n );\r\n const granularity =\r\n cornerType === CornerType.BEVELED\r\n ? 1\r\n : Math.ceil(angle / CesiumMath.toRadians(5)) + 1;\r\n\r\n const size = granularity * 3;\r\n const array = new Array(size);\r\n\r\n array[size - 3] = endPoint.x;\r\n array[size - 2] = endPoint.y;\r\n array[size - 1] = endPoint.z;\r\n\r\n let m;\r\n if (leftIsOutside) {\r\n m = Matrix3.fromQuaternion(\r\n Quaternion.fromAxisAngle(\r\n Cartesian3.negate(cornerPoint, scratch1),\r\n angle / granularity,\r\n quaterion\r\n ),\r\n rotMatrix\r\n );\r\n } else {\r\n m = Matrix3.fromQuaternion(\r\n Quaternion.fromAxisAngle(cornerPoint, angle / granularity, quaterion),\r\n rotMatrix\r\n );\r\n }\r\n\r\n let index = 0;\r\n startPoint = Cartesian3.clone(startPoint, scratch1);\r\n for (let i = 0; i < granularity; i++) {\r\n startPoint = Matrix3.multiplyByVector(m, startPoint, startPoint);\r\n array[index++] = startPoint.x;\r\n array[index++] = startPoint.y;\r\n array[index++] = startPoint.z;\r\n }\r\n\r\n return array;\r\n}\r\n\r\nfunction addEndCaps(calculatedPositions) {\r\n let cornerPoint = cartesian1;\r\n let startPoint = cartesian2;\r\n let endPoint = cartesian3;\r\n\r\n let leftEdge = calculatedPositions[1];\r\n startPoint = Cartesian3.fromArray(\r\n calculatedPositions[1],\r\n leftEdge.length - 3,\r\n startPoint\r\n );\r\n endPoint = Cartesian3.fromArray(calculatedPositions[0], 0, endPoint);\r\n cornerPoint = Cartesian3.midpoint(startPoint, endPoint, cornerPoint);\r\n const firstEndCap = computeRoundCorner(\r\n cornerPoint,\r\n startPoint,\r\n endPoint,\r\n CornerType.ROUNDED,\r\n false\r\n );\r\n\r\n const length = calculatedPositions.length - 1;\r\n const rightEdge = calculatedPositions[length - 1];\r\n leftEdge = calculatedPositions[length];\r\n startPoint = Cartesian3.fromArray(\r\n rightEdge,\r\n rightEdge.length - 3,\r\n startPoint\r\n );\r\n endPoint = Cartesian3.fromArray(leftEdge, 0, endPoint);\r\n cornerPoint = Cartesian3.midpoint(startPoint, endPoint, cornerPoint);\r\n const lastEndCap = computeRoundCorner(\r\n cornerPoint,\r\n startPoint,\r\n endPoint,\r\n CornerType.ROUNDED,\r\n false\r\n );\r\n\r\n return [firstEndCap, lastEndCap];\r\n}\r\n\r\nfunction computeMiteredCorner(\r\n position,\r\n leftCornerDirection,\r\n lastPoint,\r\n leftIsOutside\r\n) {\r\n let cornerPoint = scratch1;\r\n if (leftIsOutside) {\r\n cornerPoint = Cartesian3.add(position, leftCornerDirection, cornerPoint);\r\n } else {\r\n leftCornerDirection = Cartesian3.negate(\r\n leftCornerDirection,\r\n leftCornerDirection\r\n );\r\n cornerPoint = Cartesian3.add(position, leftCornerDirection, cornerPoint);\r\n }\r\n return [\r\n cornerPoint.x,\r\n cornerPoint.y,\r\n cornerPoint.z,\r\n lastPoint.x,\r\n lastPoint.y,\r\n lastPoint.z,\r\n ];\r\n}\r\n\r\nfunction addShiftedPositions(positions, left, scalar, calculatedPositions) {\r\n const rightPositions = new Array(positions.length);\r\n const leftPositions = new Array(positions.length);\r\n const scaledLeft = Cartesian3.multiplyByScalar(left, scalar, scratch1);\r\n const scaledRight = Cartesian3.negate(scaledLeft, scratch2);\r\n let rightIndex = 0;\r\n let leftIndex = positions.length - 1;\r\n\r\n for (let i = 0; i < positions.length; i += 3) {\r\n const pos = Cartesian3.fromArray(positions, i, scratch3);\r\n const rightPos = Cartesian3.add(pos, scaledRight, scratch4);\r\n rightPositions[rightIndex++] = rightPos.x;\r\n rightPositions[rightIndex++] = rightPos.y;\r\n rightPositions[rightIndex++] = rightPos.z;\r\n\r\n const leftPos = Cartesian3.add(pos, scaledLeft, scratch4);\r\n leftPositions[leftIndex--] = leftPos.z;\r\n leftPositions[leftIndex--] = leftPos.y;\r\n leftPositions[leftIndex--] = leftPos.x;\r\n }\r\n calculatedPositions.push(rightPositions, leftPositions);\r\n\r\n return calculatedPositions;\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nCorridorGeometryLibrary.addAttribute = function (\r\n attribute,\r\n value,\r\n front,\r\n back\r\n) {\r\n const x = value.x;\r\n const y = value.y;\r\n const z = value.z;\r\n if (defined(front)) {\r\n attribute[front] = x;\r\n attribute[front + 1] = y;\r\n attribute[front + 2] = z;\r\n }\r\n if (defined(back)) {\r\n attribute[back] = z;\r\n attribute[back - 1] = y;\r\n attribute[back - 2] = x;\r\n }\r\n};\r\n\r\nconst scratchForwardProjection = new Cartesian3();\r\nconst scratchBackwardProjection = new Cartesian3();\r\n\r\n/**\r\n * @private\r\n */\r\nCorridorGeometryLibrary.computePositions = function (params) {\r\n const granularity = params.granularity;\r\n const positions = params.positions;\r\n const ellipsoid = params.ellipsoid;\r\n const width = params.width / 2;\r\n const cornerType = params.cornerType;\r\n const saveAttributes = params.saveAttributes;\r\n let normal = cartesian1;\r\n let forward = cartesian2;\r\n let backward = cartesian3;\r\n let left = cartesian4;\r\n let cornerDirection = cartesian5;\r\n let startPoint = cartesian6;\r\n let previousPos = cartesian7;\r\n let rightPos = cartesian8;\r\n let leftPos = cartesian9;\r\n let center = cartesian10;\r\n let calculatedPositions = [];\r\n const calculatedLefts = saveAttributes ? [] : undefined;\r\n const calculatedNormals = saveAttributes ? [] : undefined;\r\n let position = positions[0]; //add first point\r\n let nextPosition = positions[1];\r\n\r\n forward = Cartesian3.normalize(\r\n Cartesian3.subtract(nextPosition, position, forward),\r\n forward\r\n );\r\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\r\n left = Cartesian3.normalize(Cartesian3.cross(normal, forward, left), left);\r\n if (saveAttributes) {\r\n calculatedLefts.push(left.x, left.y, left.z);\r\n calculatedNormals.push(normal.x, normal.y, normal.z);\r\n }\r\n previousPos = Cartesian3.clone(position, previousPos);\r\n position = nextPosition;\r\n backward = Cartesian3.negate(forward, backward);\r\n\r\n let subdividedPositions;\r\n const corners = [];\r\n let i;\r\n const length = positions.length;\r\n for (i = 1; i < length - 1; i++) {\r\n // add middle points and corners\r\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\r\n nextPosition = positions[i + 1];\r\n forward = Cartesian3.normalize(\r\n Cartesian3.subtract(nextPosition, position, forward),\r\n forward\r\n );\r\n cornerDirection = Cartesian3.normalize(\r\n Cartesian3.add(forward, backward, cornerDirection),\r\n cornerDirection\r\n );\r\n\r\n const forwardProjection = Cartesian3.multiplyByScalar(\r\n normal,\r\n Cartesian3.dot(forward, normal),\r\n scratchForwardProjection\r\n );\r\n Cartesian3.subtract(forward, forwardProjection, forwardProjection);\r\n Cartesian3.normalize(forwardProjection, forwardProjection);\r\n\r\n const backwardProjection = Cartesian3.multiplyByScalar(\r\n normal,\r\n Cartesian3.dot(backward, normal),\r\n scratchBackwardProjection\r\n );\r\n Cartesian3.subtract(backward, backwardProjection, backwardProjection);\r\n Cartesian3.normalize(backwardProjection, backwardProjection);\r\n\r\n const doCorner = !CesiumMath.equalsEpsilon(\r\n Math.abs(Cartesian3.dot(forwardProjection, backwardProjection)),\r\n 1.0,\r\n CesiumMath.EPSILON7\r\n );\r\n\r\n if (doCorner) {\r\n cornerDirection = Cartesian3.cross(\r\n cornerDirection,\r\n normal,\r\n cornerDirection\r\n );\r\n cornerDirection = Cartesian3.cross(\r\n normal,\r\n cornerDirection,\r\n cornerDirection\r\n );\r\n cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\r\n const scalar =\r\n width /\r\n Math.max(\r\n 0.25,\r\n Cartesian3.magnitude(\r\n Cartesian3.cross(cornerDirection, backward, scratch1)\r\n )\r\n );\r\n const leftIsOutside = PolylineVolumeGeometryLibrary.angleIsGreaterThanPi(\r\n forward,\r\n backward,\r\n position,\r\n ellipsoid\r\n );\r\n cornerDirection = Cartesian3.multiplyByScalar(\r\n cornerDirection,\r\n scalar,\r\n cornerDirection\r\n );\r\n if (leftIsOutside) {\r\n rightPos = Cartesian3.add(position, cornerDirection, rightPos);\r\n center = Cartesian3.add(\r\n rightPos,\r\n Cartesian3.multiplyByScalar(left, width, center),\r\n center\r\n );\r\n leftPos = Cartesian3.add(\r\n rightPos,\r\n Cartesian3.multiplyByScalar(left, width * 2, leftPos),\r\n leftPos\r\n );\r\n scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\r\n scaleArray2[1] = Cartesian3.clone(center, scaleArray2[1]);\r\n subdividedPositions = PolylinePipeline.generateArc({\r\n positions: scaleArray2,\r\n granularity: granularity,\r\n ellipsoid: ellipsoid,\r\n });\r\n calculatedPositions = addShiftedPositions(\r\n subdividedPositions,\r\n left,\r\n width,\r\n calculatedPositions\r\n );\r\n if (saveAttributes) {\r\n calculatedLefts.push(left.x, left.y, left.z);\r\n calculatedNormals.push(normal.x, normal.y, normal.z);\r\n }\r\n startPoint = Cartesian3.clone(leftPos, startPoint);\r\n left = Cartesian3.normalize(\r\n Cartesian3.cross(normal, forward, left),\r\n left\r\n );\r\n leftPos = Cartesian3.add(\r\n rightPos,\r\n Cartesian3.multiplyByScalar(left, width * 2, leftPos),\r\n leftPos\r\n );\r\n previousPos = Cartesian3.add(\r\n rightPos,\r\n Cartesian3.multiplyByScalar(left, width, previousPos),\r\n previousPos\r\n );\r\n if (\r\n cornerType === CornerType.ROUNDED ||\r\n cornerType === CornerType.BEVELED\r\n ) {\r\n corners.push({\r\n leftPositions: computeRoundCorner(\r\n rightPos,\r\n startPoint,\r\n leftPos,\r\n cornerType,\r\n leftIsOutside\r\n ),\r\n });\r\n } else {\r\n corners.push({\r\n leftPositions: computeMiteredCorner(\r\n position,\r\n Cartesian3.negate(cornerDirection, cornerDirection),\r\n leftPos,\r\n leftIsOutside\r\n ),\r\n });\r\n }\r\n } else {\r\n leftPos = Cartesian3.add(position, cornerDirection, leftPos);\r\n center = Cartesian3.add(\r\n leftPos,\r\n Cartesian3.negate(\r\n Cartesian3.multiplyByScalar(left, width, center),\r\n center\r\n ),\r\n center\r\n );\r\n rightPos = Cartesian3.add(\r\n leftPos,\r\n Cartesian3.negate(\r\n Cartesian3.multiplyByScalar(left, width * 2, rightPos),\r\n rightPos\r\n ),\r\n rightPos\r\n );\r\n scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\r\n scaleArray2[1] = Cartesian3.clone(center, scaleArray2[1]);\r\n subdividedPositions = PolylinePipeline.generateArc({\r\n positions: scaleArray2,\r\n granularity: granularity,\r\n ellipsoid: ellipsoid,\r\n });\r\n calculatedPositions = addShiftedPositions(\r\n subdividedPositions,\r\n left,\r\n width,\r\n calculatedPositions\r\n );\r\n if (saveAttributes) {\r\n calculatedLefts.push(left.x, left.y, left.z);\r\n calculatedNormals.push(normal.x, normal.y, normal.z);\r\n }\r\n startPoint = Cartesian3.clone(rightPos, startPoint);\r\n left = Cartesian3.normalize(\r\n Cartesian3.cross(normal, forward, left),\r\n left\r\n );\r\n rightPos = Cartesian3.add(\r\n leftPos,\r\n Cartesian3.negate(\r\n Cartesian3.multiplyByScalar(left, width * 2, rightPos),\r\n rightPos\r\n ),\r\n rightPos\r\n );\r\n previousPos = Cartesian3.add(\r\n leftPos,\r\n Cartesian3.negate(\r\n Cartesian3.multiplyByScalar(left, width, previousPos),\r\n previousPos\r\n ),\r\n previousPos\r\n );\r\n if (\r\n cornerType === CornerType.ROUNDED ||\r\n cornerType === CornerType.BEVELED\r\n ) {\r\n corners.push({\r\n rightPositions: computeRoundCorner(\r\n leftPos,\r\n startPoint,\r\n rightPos,\r\n cornerType,\r\n leftIsOutside\r\n ),\r\n });\r\n } else {\r\n corners.push({\r\n rightPositions: computeMiteredCorner(\r\n position,\r\n cornerDirection,\r\n rightPos,\r\n leftIsOutside\r\n ),\r\n });\r\n }\r\n }\r\n backward = Cartesian3.negate(forward, backward);\r\n }\r\n position = nextPosition;\r\n }\r\n\r\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\r\n scaleArray2[0] = Cartesian3.clone(previousPos, scaleArray2[0]);\r\n scaleArray2[1] = Cartesian3.clone(position, scaleArray2[1]);\r\n subdividedPositions = PolylinePipeline.generateArc({\r\n positions: scaleArray2,\r\n granularity: granularity,\r\n ellipsoid: ellipsoid,\r\n });\r\n calculatedPositions = addShiftedPositions(\r\n subdividedPositions,\r\n left,\r\n width,\r\n calculatedPositions\r\n );\r\n if (saveAttributes) {\r\n calculatedLefts.push(left.x, left.y, left.z);\r\n calculatedNormals.push(normal.x, normal.y, normal.z);\r\n }\r\n\r\n let endPositions;\r\n if (cornerType === CornerType.ROUNDED) {\r\n endPositions = addEndCaps(calculatedPositions);\r\n }\r\n\r\n return {\r\n positions: calculatedPositions,\r\n corners: corners,\r\n lefts: calculatedLefts,\r\n normals: calculatedNormals,\r\n endPositions: endPositions,\r\n };\r\n};\r\nexport default CorridorGeometryLibrary;\r\n"],"names":["Cartesian3","Quaternion","Matrix3","CornerType","CesiumMath","defined","PolylineVolumeGeometryLibrary","PolylinePipeline"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/CylinderGeometry-2b94e575.js b/debug/cesium/Workers/CylinderGeometry-2b94e575.js deleted file mode 100644 index f3a64fe..0000000 --- a/debug/cesium/Workers/CylinderGeometry-2b94e575.js +++ /dev/null @@ -1,493 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './ComponentDatatype-13a5630b', './CylinderGeometryLibrary-d951e1d0', './defaultValue-0ab18f7d', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './Math-9be8b918', './VertexFormat-f2d74c96'], (function (exports, Transforms, Matrix2, Matrix3, ComponentDatatype, CylinderGeometryLibrary, defaultValue, Check, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, Math$1, VertexFormat) { 'use strict'; - - const radiusScratch = new Matrix2.Cartesian2(); - const normalScratch = new Matrix3.Cartesian3(); - const bitangentScratch = new Matrix3.Cartesian3(); - const tangentScratch = new Matrix3.Cartesian3(); - const positionScratch = new Matrix3.Cartesian3(); - - /** - * A description of a cylinder. - * - * @alias CylinderGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Number} options.length The length of the cylinder. - * @param {Number} options.topRadius The radius of the top of the cylinder. - * @param {Number} options.bottomRadius The radius of the bottom of the cylinder. - * @param {Number} [options.slices=128] The number of edges around the perimeter of the cylinder. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * - * @exception {DeveloperError} options.slices must be greater than or equal to 3. - * - * @see CylinderGeometry.createGeometry - * - * @example - * // create cylinder geometry - * const cylinder = new Cesium.CylinderGeometry({ - * length: 200000, - * topRadius: 80000, - * bottomRadius: 200000, - * }); - * const geometry = Cesium.CylinderGeometry.createGeometry(cylinder); - */ - function CylinderGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const length = options.length; - const topRadius = options.topRadius; - const bottomRadius = options.bottomRadius; - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - const slices = defaultValue.defaultValue(options.slices, 128); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(length)) { - throw new Check.DeveloperError("options.length must be defined."); - } - if (!defaultValue.defined(topRadius)) { - throw new Check.DeveloperError("options.topRadius must be defined."); - } - if (!defaultValue.defined(bottomRadius)) { - throw new Check.DeveloperError("options.bottomRadius must be defined."); - } - if (slices < 3) { - throw new Check.DeveloperError( - "options.slices must be greater than or equal to 3." - ); - } - if ( - defaultValue.defined(options.offsetAttribute) && - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP - ) { - throw new Check.DeveloperError( - "GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry." - ); - } - //>>includeEnd('debug'); - - this._length = length; - this._topRadius = topRadius; - this._bottomRadius = bottomRadius; - this._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat); - this._slices = slices; - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createCylinderGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - CylinderGeometry.packedLength = VertexFormat.VertexFormat.packedLength + 5; - - /** - * Stores the provided instance into the provided array. - * - * @param {CylinderGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - CylinderGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._length; - array[startingIndex++] = value._topRadius; - array[startingIndex++] = value._bottomRadius; - array[startingIndex++] = value._slices; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - vertexFormat: scratchVertexFormat, - length: undefined, - topRadius: undefined, - bottomRadius: undefined, - slices: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {CylinderGeometry} [result] The object into which to store the result. - * @returns {CylinderGeometry} The modified result parameter or a new CylinderGeometry instance if one was not provided. - */ - CylinderGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const length = array[startingIndex++]; - const topRadius = array[startingIndex++]; - const bottomRadius = array[startingIndex++]; - const slices = array[startingIndex++]; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.length = length; - scratchOptions.topRadius = topRadius; - scratchOptions.bottomRadius = bottomRadius; - scratchOptions.slices = slices; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - return new CylinderGeometry(scratchOptions); - } - - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._length = length; - result._topRadius = topRadius; - result._bottomRadius = bottomRadius; - result._slices = slices; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the geometric representation of a cylinder, including its vertices, indices, and a bounding sphere. - * - * @param {CylinderGeometry} cylinderGeometry A description of the cylinder. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - CylinderGeometry.createGeometry = function (cylinderGeometry) { - let length = cylinderGeometry._length; - const topRadius = cylinderGeometry._topRadius; - const bottomRadius = cylinderGeometry._bottomRadius; - const vertexFormat = cylinderGeometry._vertexFormat; - const slices = cylinderGeometry._slices; - - if ( - length <= 0 || - topRadius < 0 || - bottomRadius < 0 || - (topRadius === 0 && bottomRadius === 0) - ) { - return; - } - - const twoSlices = slices + slices; - const threeSlices = slices + twoSlices; - const numVertices = twoSlices + twoSlices; - - const positions = CylinderGeometryLibrary.CylinderGeometryLibrary.computePositions( - length, - topRadius, - bottomRadius, - slices, - true - ); - - const st = vertexFormat.st ? new Float32Array(numVertices * 2) : undefined; - const normals = vertexFormat.normal - ? new Float32Array(numVertices * 3) - : undefined; - const tangents = vertexFormat.tangent - ? new Float32Array(numVertices * 3) - : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(numVertices * 3) - : undefined; - - let i; - const computeNormal = - vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent; - - if (computeNormal) { - const computeTangent = vertexFormat.tangent || vertexFormat.bitangent; - - let normalIndex = 0; - let tangentIndex = 0; - let bitangentIndex = 0; - - const theta = Math.atan2(bottomRadius - topRadius, length); - const normal = normalScratch; - normal.z = Math.sin(theta); - const normalScale = Math.cos(theta); - let tangent = tangentScratch; - let bitangent = bitangentScratch; - - for (i = 0; i < slices; i++) { - const angle = (i / slices) * Math$1.CesiumMath.TWO_PI; - const x = normalScale * Math.cos(angle); - const y = normalScale * Math.sin(angle); - if (computeNormal) { - normal.x = x; - normal.y = y; - - if (computeTangent) { - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(Matrix3.Cartesian3.UNIT_Z, normal, tangent), - tangent - ); - } - - if (vertexFormat.normal) { - normals[normalIndex++] = normal.x; - normals[normalIndex++] = normal.y; - normals[normalIndex++] = normal.z; - normals[normalIndex++] = normal.x; - normals[normalIndex++] = normal.y; - normals[normalIndex++] = normal.z; - } - - if (vertexFormat.tangent) { - tangents[tangentIndex++] = tangent.x; - tangents[tangentIndex++] = tangent.y; - tangents[tangentIndex++] = tangent.z; - tangents[tangentIndex++] = tangent.x; - tangents[tangentIndex++] = tangent.y; - tangents[tangentIndex++] = tangent.z; - } - - if (vertexFormat.bitangent) { - bitangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(normal, tangent, bitangent), - bitangent - ); - bitangents[bitangentIndex++] = bitangent.x; - bitangents[bitangentIndex++] = bitangent.y; - bitangents[bitangentIndex++] = bitangent.z; - bitangents[bitangentIndex++] = bitangent.x; - bitangents[bitangentIndex++] = bitangent.y; - bitangents[bitangentIndex++] = bitangent.z; - } - } - } - - for (i = 0; i < slices; i++) { - if (vertexFormat.normal) { - normals[normalIndex++] = 0; - normals[normalIndex++] = 0; - normals[normalIndex++] = -1; - } - if (vertexFormat.tangent) { - tangents[tangentIndex++] = 1; - tangents[tangentIndex++] = 0; - tangents[tangentIndex++] = 0; - } - if (vertexFormat.bitangent) { - bitangents[bitangentIndex++] = 0; - bitangents[bitangentIndex++] = -1; - bitangents[bitangentIndex++] = 0; - } - } - - for (i = 0; i < slices; i++) { - if (vertexFormat.normal) { - normals[normalIndex++] = 0; - normals[normalIndex++] = 0; - normals[normalIndex++] = 1; - } - if (vertexFormat.tangent) { - tangents[tangentIndex++] = 1; - tangents[tangentIndex++] = 0; - tangents[tangentIndex++] = 0; - } - if (vertexFormat.bitangent) { - bitangents[bitangentIndex++] = 0; - bitangents[bitangentIndex++] = 1; - bitangents[bitangentIndex++] = 0; - } - } - } - - const numIndices = 12 * slices - 12; - const indices = IndexDatatype.IndexDatatype.createTypedArray(numVertices, numIndices); - let index = 0; - let j = 0; - for (i = 0; i < slices - 1; i++) { - indices[index++] = j; - indices[index++] = j + 2; - indices[index++] = j + 3; - - indices[index++] = j; - indices[index++] = j + 3; - indices[index++] = j + 1; - - j += 2; - } - - indices[index++] = twoSlices - 2; - indices[index++] = 0; - indices[index++] = 1; - indices[index++] = twoSlices - 2; - indices[index++] = 1; - indices[index++] = twoSlices - 1; - - for (i = 1; i < slices - 1; i++) { - indices[index++] = twoSlices + i + 1; - indices[index++] = twoSlices + i; - indices[index++] = twoSlices; - } - - for (i = 1; i < slices - 1; i++) { - indices[index++] = threeSlices; - indices[index++] = threeSlices + i; - indices[index++] = threeSlices + i + 1; - } - - let textureCoordIndex = 0; - if (vertexFormat.st) { - const rad = Math.max(topRadius, bottomRadius); - for (i = 0; i < numVertices; i++) { - const position = Matrix3.Cartesian3.fromArray(positions, i * 3, positionScratch); - st[textureCoordIndex++] = (position.x + rad) / (2.0 * rad); - st[textureCoordIndex++] = (position.y + rad) / (2.0 * rad); - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - if (vertexFormat.position) { - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - } - - if (vertexFormat.normal) { - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.tangent) { - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - - if (vertexFormat.st) { - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: st, - }); - } - - radiusScratch.x = length * 0.5; - radiusScratch.y = Math.max(bottomRadius, topRadius); - - const boundingSphere = new Transforms.BoundingSphere( - Matrix3.Cartesian3.ZERO, - Matrix2.Cartesian2.magnitude(radiusScratch) - ); - - if (defaultValue.defined(cylinderGeometry._offsetAttribute)) { - length = positions.length; - const offsetValue = - cylinderGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: boundingSphere, - offsetAttribute: cylinderGeometry._offsetAttribute, - }); - }; - - let unitCylinderGeometry; - - /** - * Returns the geometric representation of a unit cylinder, including its vertices, indices, and a bounding sphere. - * @returns {Geometry} The computed vertices and indices. - * - * @private - */ - CylinderGeometry.getUnitCylinder = function () { - if (!defaultValue.defined(unitCylinderGeometry)) { - unitCylinderGeometry = CylinderGeometry.createGeometry( - new CylinderGeometry({ - topRadius: 1.0, - bottomRadius: 1.0, - length: 1.0, - vertexFormat: VertexFormat.VertexFormat.POSITION_ONLY, - }) - ); - } - return unitCylinderGeometry; - }; - - exports.CylinderGeometry = CylinderGeometry; - -})); -//# sourceMappingURL=CylinderGeometry-2b94e575.js.map diff --git a/debug/cesium/Workers/CylinderGeometry-2b94e575.js.map b/debug/cesium/Workers/CylinderGeometry-2b94e575.js.map deleted file mode 100644 index ba8994c..0000000 --- a/debug/cesium/Workers/CylinderGeometry-2b94e575.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"CylinderGeometry-2b94e575.js","sources":["../../../Source/Core/CylinderGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport CylinderGeometryLibrary from \"./CylinderGeometryLibrary.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst radiusScratch = new Cartesian2();\r\nconst normalScratch = new Cartesian3();\r\nconst bitangentScratch = new Cartesian3();\r\nconst tangentScratch = new Cartesian3();\r\nconst positionScratch = new Cartesian3();\r\n\r\n/**\r\n * A description of a cylinder.\r\n *\r\n * @alias CylinderGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Number} options.length The length of the cylinder.\r\n * @param {Number} options.topRadius The radius of the top of the cylinder.\r\n * @param {Number} options.bottomRadius The radius of the bottom of the cylinder.\r\n * @param {Number} [options.slices=128] The number of edges around the perimeter of the cylinder.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n *\r\n * @exception {DeveloperError} options.slices must be greater than or equal to 3.\r\n *\r\n * @see CylinderGeometry.createGeometry\r\n *\r\n * @example\r\n * // create cylinder geometry\r\n * const cylinder = new Cesium.CylinderGeometry({\r\n * length: 200000,\r\n * topRadius: 80000,\r\n * bottomRadius: 200000,\r\n * });\r\n * const geometry = Cesium.CylinderGeometry.createGeometry(cylinder);\r\n */\r\nfunction CylinderGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const length = options.length;\r\n const topRadius = options.topRadius;\r\n const bottomRadius = options.bottomRadius;\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n const slices = defaultValue(options.slices, 128);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(length)) {\r\n throw new DeveloperError(\"options.length must be defined.\");\r\n }\r\n if (!defined(topRadius)) {\r\n throw new DeveloperError(\"options.topRadius must be defined.\");\r\n }\r\n if (!defined(bottomRadius)) {\r\n throw new DeveloperError(\"options.bottomRadius must be defined.\");\r\n }\r\n if (slices < 3) {\r\n throw new DeveloperError(\r\n \"options.slices must be greater than or equal to 3.\"\r\n );\r\n }\r\n if (\r\n defined(options.offsetAttribute) &&\r\n options.offsetAttribute === GeometryOffsetAttribute.TOP\r\n ) {\r\n throw new DeveloperError(\r\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._length = length;\r\n this._topRadius = topRadius;\r\n this._bottomRadius = bottomRadius;\r\n this._vertexFormat = VertexFormat.clone(vertexFormat);\r\n this._slices = slices;\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createCylinderGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nCylinderGeometry.packedLength = VertexFormat.packedLength + 5;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {CylinderGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCylinderGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._length;\r\n array[startingIndex++] = value._topRadius;\r\n array[startingIndex++] = value._bottomRadius;\r\n array[startingIndex++] = value._slices;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n vertexFormat: scratchVertexFormat,\r\n length: undefined,\r\n topRadius: undefined,\r\n bottomRadius: undefined,\r\n slices: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {CylinderGeometry} [result] The object into which to store the result.\r\n * @returns {CylinderGeometry} The modified result parameter or a new CylinderGeometry instance if one was not provided.\r\n */\r\nCylinderGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const length = array[startingIndex++];\r\n const topRadius = array[startingIndex++];\r\n const bottomRadius = array[startingIndex++];\r\n const slices = array[startingIndex++];\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.length = length;\r\n scratchOptions.topRadius = topRadius;\r\n scratchOptions.bottomRadius = bottomRadius;\r\n scratchOptions.slices = slices;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n return new CylinderGeometry(scratchOptions);\r\n }\r\n\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._length = length;\r\n result._topRadius = topRadius;\r\n result._bottomRadius = bottomRadius;\r\n result._slices = slices;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a cylinder, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {CylinderGeometry} cylinderGeometry A description of the cylinder.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nCylinderGeometry.createGeometry = function (cylinderGeometry) {\r\n let length = cylinderGeometry._length;\r\n const topRadius = cylinderGeometry._topRadius;\r\n const bottomRadius = cylinderGeometry._bottomRadius;\r\n const vertexFormat = cylinderGeometry._vertexFormat;\r\n const slices = cylinderGeometry._slices;\r\n\r\n if (\r\n length <= 0 ||\r\n topRadius < 0 ||\r\n bottomRadius < 0 ||\r\n (topRadius === 0 && bottomRadius === 0)\r\n ) {\r\n return;\r\n }\r\n\r\n const twoSlices = slices + slices;\r\n const threeSlices = slices + twoSlices;\r\n const numVertices = twoSlices + twoSlices;\r\n\r\n const positions = CylinderGeometryLibrary.computePositions(\r\n length,\r\n topRadius,\r\n bottomRadius,\r\n slices,\r\n true\r\n );\r\n\r\n const st = vertexFormat.st ? new Float32Array(numVertices * 2) : undefined;\r\n const normals = vertexFormat.normal\r\n ? new Float32Array(numVertices * 3)\r\n : undefined;\r\n const tangents = vertexFormat.tangent\r\n ? new Float32Array(numVertices * 3)\r\n : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(numVertices * 3)\r\n : undefined;\r\n\r\n let i;\r\n const computeNormal =\r\n vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent;\r\n\r\n if (computeNormal) {\r\n const computeTangent = vertexFormat.tangent || vertexFormat.bitangent;\r\n\r\n let normalIndex = 0;\r\n let tangentIndex = 0;\r\n let bitangentIndex = 0;\r\n\r\n const theta = Math.atan2(bottomRadius - topRadius, length);\r\n const normal = normalScratch;\r\n normal.z = Math.sin(theta);\r\n const normalScale = Math.cos(theta);\r\n let tangent = tangentScratch;\r\n let bitangent = bitangentScratch;\r\n\r\n for (i = 0; i < slices; i++) {\r\n const angle = (i / slices) * CesiumMath.TWO_PI;\r\n const x = normalScale * Math.cos(angle);\r\n const y = normalScale * Math.sin(angle);\r\n if (computeNormal) {\r\n normal.x = x;\r\n normal.y = y;\r\n\r\n if (computeTangent) {\r\n tangent = Cartesian3.normalize(\r\n Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent),\r\n tangent\r\n );\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n normals[normalIndex++] = normal.x;\r\n normals[normalIndex++] = normal.y;\r\n normals[normalIndex++] = normal.z;\r\n normals[normalIndex++] = normal.x;\r\n normals[normalIndex++] = normal.y;\r\n normals[normalIndex++] = normal.z;\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n tangents[tangentIndex++] = tangent.x;\r\n tangents[tangentIndex++] = tangent.y;\r\n tangents[tangentIndex++] = tangent.z;\r\n tangents[tangentIndex++] = tangent.x;\r\n tangents[tangentIndex++] = tangent.y;\r\n tangents[tangentIndex++] = tangent.z;\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n bitangent = Cartesian3.normalize(\r\n Cartesian3.cross(normal, tangent, bitangent),\r\n bitangent\r\n );\r\n bitangents[bitangentIndex++] = bitangent.x;\r\n bitangents[bitangentIndex++] = bitangent.y;\r\n bitangents[bitangentIndex++] = bitangent.z;\r\n bitangents[bitangentIndex++] = bitangent.x;\r\n bitangents[bitangentIndex++] = bitangent.y;\r\n bitangents[bitangentIndex++] = bitangent.z;\r\n }\r\n }\r\n }\r\n\r\n for (i = 0; i < slices; i++) {\r\n if (vertexFormat.normal) {\r\n normals[normalIndex++] = 0;\r\n normals[normalIndex++] = 0;\r\n normals[normalIndex++] = -1;\r\n }\r\n if (vertexFormat.tangent) {\r\n tangents[tangentIndex++] = 1;\r\n tangents[tangentIndex++] = 0;\r\n tangents[tangentIndex++] = 0;\r\n }\r\n if (vertexFormat.bitangent) {\r\n bitangents[bitangentIndex++] = 0;\r\n bitangents[bitangentIndex++] = -1;\r\n bitangents[bitangentIndex++] = 0;\r\n }\r\n }\r\n\r\n for (i = 0; i < slices; i++) {\r\n if (vertexFormat.normal) {\r\n normals[normalIndex++] = 0;\r\n normals[normalIndex++] = 0;\r\n normals[normalIndex++] = 1;\r\n }\r\n if (vertexFormat.tangent) {\r\n tangents[tangentIndex++] = 1;\r\n tangents[tangentIndex++] = 0;\r\n tangents[tangentIndex++] = 0;\r\n }\r\n if (vertexFormat.bitangent) {\r\n bitangents[bitangentIndex++] = 0;\r\n bitangents[bitangentIndex++] = 1;\r\n bitangents[bitangentIndex++] = 0;\r\n }\r\n }\r\n }\r\n\r\n const numIndices = 12 * slices - 12;\r\n const indices = IndexDatatype.createTypedArray(numVertices, numIndices);\r\n let index = 0;\r\n let j = 0;\r\n for (i = 0; i < slices - 1; i++) {\r\n indices[index++] = j;\r\n indices[index++] = j + 2;\r\n indices[index++] = j + 3;\r\n\r\n indices[index++] = j;\r\n indices[index++] = j + 3;\r\n indices[index++] = j + 1;\r\n\r\n j += 2;\r\n }\r\n\r\n indices[index++] = twoSlices - 2;\r\n indices[index++] = 0;\r\n indices[index++] = 1;\r\n indices[index++] = twoSlices - 2;\r\n indices[index++] = 1;\r\n indices[index++] = twoSlices - 1;\r\n\r\n for (i = 1; i < slices - 1; i++) {\r\n indices[index++] = twoSlices + i + 1;\r\n indices[index++] = twoSlices + i;\r\n indices[index++] = twoSlices;\r\n }\r\n\r\n for (i = 1; i < slices - 1; i++) {\r\n indices[index++] = threeSlices;\r\n indices[index++] = threeSlices + i;\r\n indices[index++] = threeSlices + i + 1;\r\n }\r\n\r\n let textureCoordIndex = 0;\r\n if (vertexFormat.st) {\r\n const rad = Math.max(topRadius, bottomRadius);\r\n for (i = 0; i < numVertices; i++) {\r\n const position = Cartesian3.fromArray(positions, i * 3, positionScratch);\r\n st[textureCoordIndex++] = (position.x + rad) / (2.0 * rad);\r\n st[textureCoordIndex++] = (position.y + rad) / (2.0 * rad);\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n if (vertexFormat.position) {\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.st) {\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: st,\r\n });\r\n }\r\n\r\n radiusScratch.x = length * 0.5;\r\n radiusScratch.y = Math.max(bottomRadius, topRadius);\r\n\r\n const boundingSphere = new BoundingSphere(\r\n Cartesian3.ZERO,\r\n Cartesian2.magnitude(radiusScratch)\r\n );\r\n\r\n if (defined(cylinderGeometry._offsetAttribute)) {\r\n length = positions.length;\r\n const offsetValue =\r\n cylinderGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: boundingSphere,\r\n offsetAttribute: cylinderGeometry._offsetAttribute,\r\n });\r\n};\r\n\r\nlet unitCylinderGeometry;\r\n\r\n/**\r\n * Returns the geometric representation of a unit cylinder, including its vertices, indices, and a bounding sphere.\r\n * @returns {Geometry} The computed vertices and indices.\r\n *\r\n * @private\r\n */\r\nCylinderGeometry.getUnitCylinder = function () {\r\n if (!defined(unitCylinderGeometry)) {\r\n unitCylinderGeometry = CylinderGeometry.createGeometry(\r\n new CylinderGeometry({\r\n topRadius: 1.0,\r\n bottomRadius: 1.0,\r\n length: 1.0,\r\n vertexFormat: VertexFormat.POSITION_ONLY,\r\n })\r\n );\r\n }\r\n return unitCylinderGeometry;\r\n};\r\nexport default CylinderGeometry;\r\n"],"names":["Cartesian2","Cartesian3","defaultValue","VertexFormat","defined","DeveloperError","GeometryOffsetAttribute","CylinderGeometryLibrary","CesiumMath","IndexDatatype","GeometryAttributes","GeometryAttribute","ComponentDatatype","BoundingSphere","Geometry","PrimitiveType"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/CylinderGeometryLibrary-d951e1d0.js b/debug/cesium/Workers/CylinderGeometryLibrary-d951e1d0.js deleted file mode 100644 index b388009..0000000 --- a/debug/cesium/Workers/CylinderGeometryLibrary-d951e1d0.js +++ /dev/null @@ -1,89 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Math-9be8b918'], (function (exports, Math$1) { 'use strict'; - - /** - * @private - */ - const CylinderGeometryLibrary = {}; - - /** - * @private - */ - CylinderGeometryLibrary.computePositions = function ( - length, - topRadius, - bottomRadius, - slices, - fill - ) { - const topZ = length * 0.5; - const bottomZ = -topZ; - - const twoSlice = slices + slices; - const size = fill ? 2 * twoSlice : twoSlice; - const positions = new Float64Array(size * 3); - let i; - let index = 0; - let tbIndex = 0; - const bottomOffset = fill ? twoSlice * 3 : 0; - const topOffset = fill ? (twoSlice + slices) * 3 : slices * 3; - - for (i = 0; i < slices; i++) { - const angle = (i / slices) * Math$1.CesiumMath.TWO_PI; - const x = Math.cos(angle); - const y = Math.sin(angle); - const bottomX = x * bottomRadius; - const bottomY = y * bottomRadius; - const topX = x * topRadius; - const topY = y * topRadius; - - positions[tbIndex + bottomOffset] = bottomX; - positions[tbIndex + bottomOffset + 1] = bottomY; - positions[tbIndex + bottomOffset + 2] = bottomZ; - - positions[tbIndex + topOffset] = topX; - positions[tbIndex + topOffset + 1] = topY; - positions[tbIndex + topOffset + 2] = topZ; - tbIndex += 3; - if (fill) { - positions[index++] = bottomX; - positions[index++] = bottomY; - positions[index++] = bottomZ; - positions[index++] = topX; - positions[index++] = topY; - positions[index++] = topZ; - } - } - - return positions; - }; - var CylinderGeometryLibrary$1 = CylinderGeometryLibrary; - - exports.CylinderGeometryLibrary = CylinderGeometryLibrary$1; - -})); -//# sourceMappingURL=CylinderGeometryLibrary-d951e1d0.js.map diff --git a/debug/cesium/Workers/CylinderGeometryLibrary-d951e1d0.js.map b/debug/cesium/Workers/CylinderGeometryLibrary-d951e1d0.js.map deleted file mode 100644 index 9e671ed..0000000 --- a/debug/cesium/Workers/CylinderGeometryLibrary-d951e1d0.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"CylinderGeometryLibrary-d951e1d0.js","sources":["../../../Source/Core/CylinderGeometryLibrary.js"],"sourcesContent":["import CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst CylinderGeometryLibrary = {};\r\n\r\n/**\r\n * @private\r\n */\r\nCylinderGeometryLibrary.computePositions = function (\r\n length,\r\n topRadius,\r\n bottomRadius,\r\n slices,\r\n fill\r\n) {\r\n const topZ = length * 0.5;\r\n const bottomZ = -topZ;\r\n\r\n const twoSlice = slices + slices;\r\n const size = fill ? 2 * twoSlice : twoSlice;\r\n const positions = new Float64Array(size * 3);\r\n let i;\r\n let index = 0;\r\n let tbIndex = 0;\r\n const bottomOffset = fill ? twoSlice * 3 : 0;\r\n const topOffset = fill ? (twoSlice + slices) * 3 : slices * 3;\r\n\r\n for (i = 0; i < slices; i++) {\r\n const angle = (i / slices) * CesiumMath.TWO_PI;\r\n const x = Math.cos(angle);\r\n const y = Math.sin(angle);\r\n const bottomX = x * bottomRadius;\r\n const bottomY = y * bottomRadius;\r\n const topX = x * topRadius;\r\n const topY = y * topRadius;\r\n\r\n positions[tbIndex + bottomOffset] = bottomX;\r\n positions[tbIndex + bottomOffset + 1] = bottomY;\r\n positions[tbIndex + bottomOffset + 2] = bottomZ;\r\n\r\n positions[tbIndex + topOffset] = topX;\r\n positions[tbIndex + topOffset + 1] = topY;\r\n positions[tbIndex + topOffset + 2] = topZ;\r\n tbIndex += 3;\r\n if (fill) {\r\n positions[index++] = bottomX;\r\n positions[index++] = bottomY;\r\n positions[index++] = bottomZ;\r\n positions[index++] = topX;\r\n positions[index++] = topY;\r\n positions[index++] = topZ;\r\n }\r\n }\r\n\r\n return positions;\r\n};\r\nexport default CylinderGeometryLibrary;\r\n"],"names":["CesiumMath"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/EllipseGeometry-6f0c1448.js b/debug/cesium/Workers/EllipseGeometry-6f0c1448.js deleted file mode 100644 index 51e41b6..0000000 --- a/debug/cesium/Workers/EllipseGeometry-6f0c1448.js +++ /dev/null @@ -1,1330 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './EllipseGeometryLibrary-d3f88cc2', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryInstance-b2be3e5a', './GeometryOffsetAttribute-cc320d7d', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './Math-9be8b918', './VertexFormat-f2d74c96'], (function (exports, Transforms, Matrix2, Matrix3, Check, ComponentDatatype, defaultValue, EllipseGeometryLibrary, GeometryAttribute, GeometryAttributes, GeometryInstance, GeometryOffsetAttribute, GeometryPipeline, IndexDatatype, Math$1, VertexFormat) { 'use strict'; - - const scratchCartesian1 = new Matrix3.Cartesian3(); - const scratchCartesian2 = new Matrix3.Cartesian3(); - const scratchCartesian3 = new Matrix3.Cartesian3(); - const scratchCartesian4 = new Matrix3.Cartesian3(); - const texCoordScratch = new Matrix2.Cartesian2(); - const textureMatrixScratch = new Matrix3.Matrix3(); - const tangentMatrixScratch = new Matrix3.Matrix3(); - const quaternionScratch = new Transforms.Quaternion(); - - const scratchNormal = new Matrix3.Cartesian3(); - const scratchTangent = new Matrix3.Cartesian3(); - const scratchBitangent = new Matrix3.Cartesian3(); - - const scratchCartographic = new Matrix3.Cartographic(); - const projectedCenterScratch = new Matrix3.Cartesian3(); - - const scratchMinTexCoord = new Matrix2.Cartesian2(); - const scratchMaxTexCoord = new Matrix2.Cartesian2(); - - function computeTopBottomAttributes(positions, options, extrude) { - const vertexFormat = options.vertexFormat; - const center = options.center; - const semiMajorAxis = options.semiMajorAxis; - const semiMinorAxis = options.semiMinorAxis; - const ellipsoid = options.ellipsoid; - const stRotation = options.stRotation; - const size = extrude ? (positions.length / 3) * 2 : positions.length / 3; - const shadowVolume = options.shadowVolume; - - const textureCoordinates = vertexFormat.st - ? new Float32Array(size * 2) - : undefined; - const normals = vertexFormat.normal ? new Float32Array(size * 3) : undefined; - const tangents = vertexFormat.tangent - ? new Float32Array(size * 3) - : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(size * 3) - : undefined; - - const extrudeNormals = shadowVolume ? new Float32Array(size * 3) : undefined; - - let textureCoordIndex = 0; - - // Raise positions to a height above the ellipsoid and compute the - // texture coordinates, normals, tangents, and bitangents. - let normal = scratchNormal; - let tangent = scratchTangent; - let bitangent = scratchBitangent; - - const projection = new Transforms.GeographicProjection(ellipsoid); - const projectedCenter = projection.project( - ellipsoid.cartesianToCartographic(center, scratchCartographic), - projectedCenterScratch - ); - - const geodeticNormal = ellipsoid.scaleToGeodeticSurface( - center, - scratchCartesian1 - ); - ellipsoid.geodeticSurfaceNormal(geodeticNormal, geodeticNormal); - - let textureMatrix = textureMatrixScratch; - let tangentMatrix = tangentMatrixScratch; - if (stRotation !== 0) { - let rotation = Transforms.Quaternion.fromAxisAngle( - geodeticNormal, - stRotation, - quaternionScratch - ); - textureMatrix = Matrix3.Matrix3.fromQuaternion(rotation, textureMatrix); - - rotation = Transforms.Quaternion.fromAxisAngle( - geodeticNormal, - -stRotation, - quaternionScratch - ); - tangentMatrix = Matrix3.Matrix3.fromQuaternion(rotation, tangentMatrix); - } else { - textureMatrix = Matrix3.Matrix3.clone(Matrix3.Matrix3.IDENTITY, textureMatrix); - tangentMatrix = Matrix3.Matrix3.clone(Matrix3.Matrix3.IDENTITY, tangentMatrix); - } - - const minTexCoord = Matrix2.Cartesian2.fromElements( - Number.POSITIVE_INFINITY, - Number.POSITIVE_INFINITY, - scratchMinTexCoord - ); - const maxTexCoord = Matrix2.Cartesian2.fromElements( - Number.NEGATIVE_INFINITY, - Number.NEGATIVE_INFINITY, - scratchMaxTexCoord - ); - - let length = positions.length; - const bottomOffset = extrude ? length : 0; - const stOffset = (bottomOffset / 3) * 2; - for (let i = 0; i < length; i += 3) { - const i1 = i + 1; - const i2 = i + 2; - const position = Matrix3.Cartesian3.fromArray(positions, i, scratchCartesian1); - - if (vertexFormat.st) { - const rotatedPoint = Matrix3.Matrix3.multiplyByVector( - textureMatrix, - position, - scratchCartesian2 - ); - const projectedPoint = projection.project( - ellipsoid.cartesianToCartographic(rotatedPoint, scratchCartographic), - scratchCartesian3 - ); - Matrix3.Cartesian3.subtract(projectedPoint, projectedCenter, projectedPoint); - - texCoordScratch.x = - (projectedPoint.x + semiMajorAxis) / (2.0 * semiMajorAxis); - texCoordScratch.y = - (projectedPoint.y + semiMinorAxis) / (2.0 * semiMinorAxis); - - minTexCoord.x = Math.min(texCoordScratch.x, minTexCoord.x); - minTexCoord.y = Math.min(texCoordScratch.y, minTexCoord.y); - maxTexCoord.x = Math.max(texCoordScratch.x, maxTexCoord.x); - maxTexCoord.y = Math.max(texCoordScratch.y, maxTexCoord.y); - - if (extrude) { - textureCoordinates[textureCoordIndex + stOffset] = texCoordScratch.x; - textureCoordinates[textureCoordIndex + 1 + stOffset] = - texCoordScratch.y; - } - - textureCoordinates[textureCoordIndex++] = texCoordScratch.x; - textureCoordinates[textureCoordIndex++] = texCoordScratch.y; - } - - if ( - vertexFormat.normal || - vertexFormat.tangent || - vertexFormat.bitangent || - shadowVolume - ) { - normal = ellipsoid.geodeticSurfaceNormal(position, normal); - - if (shadowVolume) { - extrudeNormals[i + bottomOffset] = -normal.x; - extrudeNormals[i1 + bottomOffset] = -normal.y; - extrudeNormals[i2 + bottomOffset] = -normal.z; - } - - if ( - vertexFormat.normal || - vertexFormat.tangent || - vertexFormat.bitangent - ) { - if (vertexFormat.tangent || vertexFormat.bitangent) { - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(Matrix3.Cartesian3.UNIT_Z, normal, tangent), - tangent - ); - Matrix3.Matrix3.multiplyByVector(tangentMatrix, tangent, tangent); - } - if (vertexFormat.normal) { - normals[i] = normal.x; - normals[i1] = normal.y; - normals[i2] = normal.z; - if (extrude) { - normals[i + bottomOffset] = -normal.x; - normals[i1 + bottomOffset] = -normal.y; - normals[i2 + bottomOffset] = -normal.z; - } - } - - if (vertexFormat.tangent) { - tangents[i] = tangent.x; - tangents[i1] = tangent.y; - tangents[i2] = tangent.z; - if (extrude) { - tangents[i + bottomOffset] = -tangent.x; - tangents[i1 + bottomOffset] = -tangent.y; - tangents[i2 + bottomOffset] = -tangent.z; - } - } - - if (vertexFormat.bitangent) { - bitangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(normal, tangent, bitangent), - bitangent - ); - bitangents[i] = bitangent.x; - bitangents[i1] = bitangent.y; - bitangents[i2] = bitangent.z; - if (extrude) { - bitangents[i + bottomOffset] = bitangent.x; - bitangents[i1 + bottomOffset] = bitangent.y; - bitangents[i2 + bottomOffset] = bitangent.z; - } - } - } - } - } - - if (vertexFormat.st) { - length = textureCoordinates.length; - for (let k = 0; k < length; k += 2) { - textureCoordinates[k] = - (textureCoordinates[k] - minTexCoord.x) / - (maxTexCoord.x - minTexCoord.x); - textureCoordinates[k + 1] = - (textureCoordinates[k + 1] - minTexCoord.y) / - (maxTexCoord.y - minTexCoord.y); - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - - if (vertexFormat.position) { - const finalPositions = EllipseGeometryLibrary.EllipseGeometryLibrary.raisePositionsToHeight( - positions, - options, - extrude - ); - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: finalPositions, - }); - } - - if (vertexFormat.st) { - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: textureCoordinates, - }); - } - - if (vertexFormat.normal) { - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.tangent) { - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - - if (shadowVolume) { - attributes.extrudeDirection = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: extrudeNormals, - }); - } - - if (extrude && defaultValue.defined(options.offsetAttribute)) { - let offsetAttribute = new Uint8Array(size); - if (options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - offsetAttribute = offsetAttribute.fill(1, 0, size / 2); - } else { - const offsetValue = - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - offsetAttribute = offsetAttribute.fill(offsetValue); - } - - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: offsetAttribute, - }); - } - - return attributes; - } - - function topIndices(numPts) { - // numTriangles in half = 3 + 8 + 12 + ... = -1 + 4 + (4 + 4) + (4 + 4 + 4) + ... = -1 + 4 * (1 + 2 + 3 + ...) - // = -1 + 4 * ((n * ( n + 1)) / 2) - // total triangles = 2 * numTrangles in half - // indices = total triangles * 3; - // Substitute numPts for n above - - const indices = new Array(12 * (numPts * (numPts + 1)) - 6); - let indicesIndex = 0; - let prevIndex; - let numInterior; - let positionIndex; - let i; - let j; - // Indices triangles to the 'right' of the north vector - - prevIndex = 0; - positionIndex = 1; - for (i = 0; i < 3; i++) { - indices[indicesIndex++] = positionIndex++; - indices[indicesIndex++] = prevIndex; - indices[indicesIndex++] = positionIndex; - } - - for (i = 2; i < numPts + 1; ++i) { - positionIndex = i * (i + 1) - 1; - prevIndex = (i - 1) * i - 1; - - indices[indicesIndex++] = positionIndex++; - indices[indicesIndex++] = prevIndex; - indices[indicesIndex++] = positionIndex; - - numInterior = 2 * i; - for (j = 0; j < numInterior - 1; ++j) { - indices[indicesIndex++] = positionIndex; - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = prevIndex; - - indices[indicesIndex++] = positionIndex++; - indices[indicesIndex++] = prevIndex; - indices[indicesIndex++] = positionIndex; - } - - indices[indicesIndex++] = positionIndex++; - indices[indicesIndex++] = prevIndex; - indices[indicesIndex++] = positionIndex; - } - - // Indices for center column of triangles - numInterior = numPts * 2; - ++positionIndex; - ++prevIndex; - for (i = 0; i < numInterior - 1; ++i) { - indices[indicesIndex++] = positionIndex; - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = prevIndex; - - indices[indicesIndex++] = positionIndex++; - indices[indicesIndex++] = prevIndex; - indices[indicesIndex++] = positionIndex; - } - - indices[indicesIndex++] = positionIndex; - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = prevIndex; - - indices[indicesIndex++] = positionIndex++; - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = prevIndex; - - // Reverse the process creating indices to the 'left' of the north vector - ++prevIndex; - for (i = numPts - 1; i > 1; --i) { - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = prevIndex; - indices[indicesIndex++] = positionIndex; - - numInterior = 2 * i; - for (j = 0; j < numInterior - 1; ++j) { - indices[indicesIndex++] = positionIndex; - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = prevIndex; - - indices[indicesIndex++] = positionIndex++; - indices[indicesIndex++] = prevIndex; - indices[indicesIndex++] = positionIndex; - } - - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = positionIndex++; - } - - for (i = 0; i < 3; i++) { - indices[indicesIndex++] = prevIndex++; - indices[indicesIndex++] = prevIndex; - indices[indicesIndex++] = positionIndex; - } - return indices; - } - - let boundingSphereCenter = new Matrix3.Cartesian3(); - - function computeEllipse(options) { - const center = options.center; - boundingSphereCenter = Matrix3.Cartesian3.multiplyByScalar( - options.ellipsoid.geodeticSurfaceNormal(center, boundingSphereCenter), - options.height, - boundingSphereCenter - ); - boundingSphereCenter = Matrix3.Cartesian3.add( - center, - boundingSphereCenter, - boundingSphereCenter - ); - const boundingSphere = new Transforms.BoundingSphere( - boundingSphereCenter, - options.semiMajorAxis - ); - const cep = EllipseGeometryLibrary.EllipseGeometryLibrary.computeEllipsePositions( - options, - true, - false - ); - const positions = cep.positions; - const numPts = cep.numPts; - const attributes = computeTopBottomAttributes(positions, options, false); - let indices = topIndices(numPts); - indices = IndexDatatype.IndexDatatype.createTypedArray(positions.length / 3, indices); - return { - boundingSphere: boundingSphere, - attributes: attributes, - indices: indices, - }; - } - - function computeWallAttributes(positions, options) { - const vertexFormat = options.vertexFormat; - const center = options.center; - const semiMajorAxis = options.semiMajorAxis; - const semiMinorAxis = options.semiMinorAxis; - const ellipsoid = options.ellipsoid; - const height = options.height; - const extrudedHeight = options.extrudedHeight; - const stRotation = options.stRotation; - const size = (positions.length / 3) * 2; - - const finalPositions = new Float64Array(size * 3); - const textureCoordinates = vertexFormat.st - ? new Float32Array(size * 2) - : undefined; - const normals = vertexFormat.normal ? new Float32Array(size * 3) : undefined; - const tangents = vertexFormat.tangent - ? new Float32Array(size * 3) - : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(size * 3) - : undefined; - - const shadowVolume = options.shadowVolume; - const extrudeNormals = shadowVolume ? new Float32Array(size * 3) : undefined; - - let textureCoordIndex = 0; - - // Raise positions to a height above the ellipsoid and compute the - // texture coordinates, normals, tangents, and bitangents. - let normal = scratchNormal; - let tangent = scratchTangent; - let bitangent = scratchBitangent; - - const projection = new Transforms.GeographicProjection(ellipsoid); - const projectedCenter = projection.project( - ellipsoid.cartesianToCartographic(center, scratchCartographic), - projectedCenterScratch - ); - - const geodeticNormal = ellipsoid.scaleToGeodeticSurface( - center, - scratchCartesian1 - ); - ellipsoid.geodeticSurfaceNormal(geodeticNormal, geodeticNormal); - const rotation = Transforms.Quaternion.fromAxisAngle( - geodeticNormal, - stRotation, - quaternionScratch - ); - const textureMatrix = Matrix3.Matrix3.fromQuaternion(rotation, textureMatrixScratch); - - const minTexCoord = Matrix2.Cartesian2.fromElements( - Number.POSITIVE_INFINITY, - Number.POSITIVE_INFINITY, - scratchMinTexCoord - ); - const maxTexCoord = Matrix2.Cartesian2.fromElements( - Number.NEGATIVE_INFINITY, - Number.NEGATIVE_INFINITY, - scratchMaxTexCoord - ); - - let length = positions.length; - const stOffset = (length / 3) * 2; - for (let i = 0; i < length; i += 3) { - const i1 = i + 1; - const i2 = i + 2; - let position = Matrix3.Cartesian3.fromArray(positions, i, scratchCartesian1); - let extrudedPosition; - - if (vertexFormat.st) { - const rotatedPoint = Matrix3.Matrix3.multiplyByVector( - textureMatrix, - position, - scratchCartesian2 - ); - const projectedPoint = projection.project( - ellipsoid.cartesianToCartographic(rotatedPoint, scratchCartographic), - scratchCartesian3 - ); - Matrix3.Cartesian3.subtract(projectedPoint, projectedCenter, projectedPoint); - - texCoordScratch.x = - (projectedPoint.x + semiMajorAxis) / (2.0 * semiMajorAxis); - texCoordScratch.y = - (projectedPoint.y + semiMinorAxis) / (2.0 * semiMinorAxis); - - minTexCoord.x = Math.min(texCoordScratch.x, minTexCoord.x); - minTexCoord.y = Math.min(texCoordScratch.y, minTexCoord.y); - maxTexCoord.x = Math.max(texCoordScratch.x, maxTexCoord.x); - maxTexCoord.y = Math.max(texCoordScratch.y, maxTexCoord.y); - - textureCoordinates[textureCoordIndex + stOffset] = texCoordScratch.x; - textureCoordinates[textureCoordIndex + 1 + stOffset] = texCoordScratch.y; - - textureCoordinates[textureCoordIndex++] = texCoordScratch.x; - textureCoordinates[textureCoordIndex++] = texCoordScratch.y; - } - - position = ellipsoid.scaleToGeodeticSurface(position, position); - extrudedPosition = Matrix3.Cartesian3.clone(position, scratchCartesian2); - normal = ellipsoid.geodeticSurfaceNormal(position, normal); - - if (shadowVolume) { - extrudeNormals[i + length] = -normal.x; - extrudeNormals[i1 + length] = -normal.y; - extrudeNormals[i2 + length] = -normal.z; - } - - let scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - normal, - height, - scratchCartesian4 - ); - position = Matrix3.Cartesian3.add(position, scaledNormal, position); - scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - normal, - extrudedHeight, - scaledNormal - ); - extrudedPosition = Matrix3.Cartesian3.add( - extrudedPosition, - scaledNormal, - extrudedPosition - ); - - if (vertexFormat.position) { - finalPositions[i + length] = extrudedPosition.x; - finalPositions[i1 + length] = extrudedPosition.y; - finalPositions[i2 + length] = extrudedPosition.z; - - finalPositions[i] = position.x; - finalPositions[i1] = position.y; - finalPositions[i2] = position.z; - } - - if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) { - bitangent = Matrix3.Cartesian3.clone(normal, bitangent); - const next = Matrix3.Cartesian3.fromArray( - positions, - (i + 3) % length, - scratchCartesian4 - ); - Matrix3.Cartesian3.subtract(next, position, next); - const bottom = Matrix3.Cartesian3.subtract( - extrudedPosition, - position, - scratchCartesian3 - ); - - normal = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(bottom, next, normal), - normal - ); - - if (vertexFormat.normal) { - normals[i] = normal.x; - normals[i1] = normal.y; - normals[i2] = normal.z; - - normals[i + length] = normal.x; - normals[i1 + length] = normal.y; - normals[i2 + length] = normal.z; - } - - if (vertexFormat.tangent) { - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(bitangent, normal, tangent), - tangent - ); - tangents[i] = tangent.x; - tangents[i1] = tangent.y; - tangents[i2] = tangent.z; - - tangents[i + length] = tangent.x; - tangents[i + 1 + length] = tangent.y; - tangents[i + 2 + length] = tangent.z; - } - - if (vertexFormat.bitangent) { - bitangents[i] = bitangent.x; - bitangents[i1] = bitangent.y; - bitangents[i2] = bitangent.z; - - bitangents[i + length] = bitangent.x; - bitangents[i1 + length] = bitangent.y; - bitangents[i2 + length] = bitangent.z; - } - } - } - - if (vertexFormat.st) { - length = textureCoordinates.length; - for (let k = 0; k < length; k += 2) { - textureCoordinates[k] = - (textureCoordinates[k] - minTexCoord.x) / - (maxTexCoord.x - minTexCoord.x); - textureCoordinates[k + 1] = - (textureCoordinates[k + 1] - minTexCoord.y) / - (maxTexCoord.y - minTexCoord.y); - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - - if (vertexFormat.position) { - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: finalPositions, - }); - } - - if (vertexFormat.st) { - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: textureCoordinates, - }); - } - - if (vertexFormat.normal) { - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.tangent) { - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - - if (shadowVolume) { - attributes.extrudeDirection = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: extrudeNormals, - }); - } - - if (defaultValue.defined(options.offsetAttribute)) { - let offsetAttribute = new Uint8Array(size); - if (options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - offsetAttribute = offsetAttribute.fill(1, 0, size / 2); - } else { - const offsetValue = - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - offsetAttribute = offsetAttribute.fill(offsetValue); - } - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: offsetAttribute, - }); - } - - return attributes; - } - - function computeWallIndices(positions) { - const length = positions.length / 3; - const indices = IndexDatatype.IndexDatatype.createTypedArray(length, length * 6); - let index = 0; - for (let i = 0; i < length; i++) { - const UL = i; - const LL = i + length; - const UR = (UL + 1) % length; - const LR = UR + length; - indices[index++] = UL; - indices[index++] = LL; - indices[index++] = UR; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - } - - return indices; - } - - const topBoundingSphere = new Transforms.BoundingSphere(); - const bottomBoundingSphere = new Transforms.BoundingSphere(); - - function computeExtrudedEllipse(options) { - const center = options.center; - const ellipsoid = options.ellipsoid; - const semiMajorAxis = options.semiMajorAxis; - let scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - ellipsoid.geodeticSurfaceNormal(center, scratchCartesian1), - options.height, - scratchCartesian1 - ); - topBoundingSphere.center = Matrix3.Cartesian3.add( - center, - scaledNormal, - topBoundingSphere.center - ); - topBoundingSphere.radius = semiMajorAxis; - - scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - ellipsoid.geodeticSurfaceNormal(center, scaledNormal), - options.extrudedHeight, - scaledNormal - ); - bottomBoundingSphere.center = Matrix3.Cartesian3.add( - center, - scaledNormal, - bottomBoundingSphere.center - ); - bottomBoundingSphere.radius = semiMajorAxis; - - const cep = EllipseGeometryLibrary.EllipseGeometryLibrary.computeEllipsePositions( - options, - true, - true - ); - const positions = cep.positions; - const numPts = cep.numPts; - const outerPositions = cep.outerPositions; - const boundingSphere = Transforms.BoundingSphere.union( - topBoundingSphere, - bottomBoundingSphere - ); - const topBottomAttributes = computeTopBottomAttributes( - positions, - options, - true - ); - let indices = topIndices(numPts); - const length = indices.length; - indices.length = length * 2; - const posLength = positions.length / 3; - for (let i = 0; i < length; i += 3) { - indices[i + length] = indices[i + 2] + posLength; - indices[i + 1 + length] = indices[i + 1] + posLength; - indices[i + 2 + length] = indices[i] + posLength; - } - - const topBottomIndices = IndexDatatype.IndexDatatype.createTypedArray( - (posLength * 2) / 3, - indices - ); - - const topBottomGeo = new GeometryAttribute.Geometry({ - attributes: topBottomAttributes, - indices: topBottomIndices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }); - - const wallAttributes = computeWallAttributes(outerPositions, options); - indices = computeWallIndices(outerPositions); - const wallIndices = IndexDatatype.IndexDatatype.createTypedArray( - (outerPositions.length * 2) / 3, - indices - ); - - const wallGeo = new GeometryAttribute.Geometry({ - attributes: wallAttributes, - indices: wallIndices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }); - - const geo = GeometryPipeline.GeometryPipeline.combineInstances([ - new GeometryInstance.GeometryInstance({ - geometry: topBottomGeo, - }), - new GeometryInstance.GeometryInstance({ - geometry: wallGeo, - }), - ]); - - return { - boundingSphere: boundingSphere, - attributes: geo[0].attributes, - indices: geo[0].indices, - }; - } - - function computeRectangle( - center, - semiMajorAxis, - semiMinorAxis, - rotation, - granularity, - ellipsoid, - result - ) { - const cep = EllipseGeometryLibrary.EllipseGeometryLibrary.computeEllipsePositions( - { - center: center, - semiMajorAxis: semiMajorAxis, - semiMinorAxis: semiMinorAxis, - rotation: rotation, - granularity: granularity, - }, - false, - true - ); - const positionsFlat = cep.outerPositions; - const positionsCount = positionsFlat.length / 3; - const positions = new Array(positionsCount); - for (let i = 0; i < positionsCount; ++i) { - positions[i] = Matrix3.Cartesian3.fromArray(positionsFlat, i * 3); - } - const rectangle = Matrix2.Rectangle.fromCartesianArray(positions, ellipsoid, result); - // Rectangle width goes beyond 180 degrees when the ellipse crosses a pole. - // When this happens, make the rectangle into a "circle" around the pole - if (rectangle.width > Math$1.CesiumMath.PI) { - rectangle.north = - rectangle.north > 0.0 - ? Math$1.CesiumMath.PI_OVER_TWO - Math$1.CesiumMath.EPSILON7 - : rectangle.north; - rectangle.south = - rectangle.south < 0.0 - ? Math$1.CesiumMath.EPSILON7 - Math$1.CesiumMath.PI_OVER_TWO - : rectangle.south; - rectangle.east = Math$1.CesiumMath.PI; - rectangle.west = -Math$1.CesiumMath.PI; - } - return rectangle; - } - - /** - * A description of an ellipse on an ellipsoid. Ellipse geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. - * - * @alias EllipseGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.center The ellipse's center point in the fixed frame. - * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters. - * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on. - * @param {Number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface. - * @param {Number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface. - * @param {Number} [options.rotation=0.0] The angle of rotation counter-clockwise from north. - * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates counter-clockwise from north. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The angular distance between points on the ellipse in radians. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * - * @exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero. - * @exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis. - * @exception {DeveloperError} granularity must be greater than zero. - * - * - * @example - * // Create an ellipse. - * const ellipse = new Cesium.EllipseGeometry({ - * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), - * semiMajorAxis : 500000.0, - * semiMinorAxis : 300000.0, - * rotation : Cesium.Math.toRadians(60.0) - * }); - * const geometry = Cesium.EllipseGeometry.createGeometry(ellipse); - * - * @see EllipseGeometry.createGeometry - */ - function EllipseGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const center = options.center; - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - const semiMajorAxis = options.semiMajorAxis; - const semiMinorAxis = options.semiMinorAxis; - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.center", center); - Check.Check.typeOf.number("options.semiMajorAxis", semiMajorAxis); - Check.Check.typeOf.number("options.semiMinorAxis", semiMinorAxis); - if (semiMajorAxis < semiMinorAxis) { - throw new Check.DeveloperError( - "semiMajorAxis must be greater than or equal to the semiMinorAxis." - ); - } - if (granularity <= 0.0) { - throw new Check.DeveloperError("granularity must be greater than zero."); - } - //>>includeEnd('debug'); - - const height = defaultValue.defaultValue(options.height, 0.0); - const extrudedHeight = defaultValue.defaultValue(options.extrudedHeight, height); - - this._center = Matrix3.Cartesian3.clone(center); - this._semiMajorAxis = semiMajorAxis; - this._semiMinorAxis = semiMinorAxis; - this._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid); - this._rotation = defaultValue.defaultValue(options.rotation, 0.0); - this._stRotation = defaultValue.defaultValue(options.stRotation, 0.0); - this._height = Math.max(extrudedHeight, height); - this._granularity = granularity; - this._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat); - this._extrudedHeight = Math.min(extrudedHeight, height); - this._shadowVolume = defaultValue.defaultValue(options.shadowVolume, false); - this._workerName = "createEllipseGeometry"; - this._offsetAttribute = options.offsetAttribute; - - this._rectangle = undefined; - this._textureCoordinateRotationPoints = undefined; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - EllipseGeometry.packedLength = - Matrix3.Cartesian3.packedLength + - Matrix3.Ellipsoid.packedLength + - VertexFormat.VertexFormat.packedLength + - 9; - - /** - * Stores the provided instance into the provided array. - * - * @param {EllipseGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - EllipseGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix3.Cartesian3.pack(value._center, array, startingIndex); - startingIndex += Matrix3.Cartesian3.packedLength; - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._semiMajorAxis; - array[startingIndex++] = value._semiMinorAxis; - array[startingIndex++] = value._rotation; - array[startingIndex++] = value._stRotation; - array[startingIndex++] = value._height; - array[startingIndex++] = value._granularity; - array[startingIndex++] = value._extrudedHeight; - array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchCenter = new Matrix3.Cartesian3(); - const scratchEllipsoid = new Matrix3.Ellipsoid(); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - center: scratchCenter, - ellipsoid: scratchEllipsoid, - vertexFormat: scratchVertexFormat, - semiMajorAxis: undefined, - semiMinorAxis: undefined, - rotation: undefined, - stRotation: undefined, - height: undefined, - granularity: undefined, - extrudedHeight: undefined, - shadowVolume: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {EllipseGeometry} [result] The object into which to store the result. - * @returns {EllipseGeometry} The modified result parameter or a new EllipseGeometry instance if one was not provided. - */ - EllipseGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const center = Matrix3.Cartesian3.unpack(array, startingIndex, scratchCenter); - startingIndex += Matrix3.Cartesian3.packedLength; - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const semiMajorAxis = array[startingIndex++]; - const semiMinorAxis = array[startingIndex++]; - const rotation = array[startingIndex++]; - const stRotation = array[startingIndex++]; - const height = array[startingIndex++]; - const granularity = array[startingIndex++]; - const extrudedHeight = array[startingIndex++]; - const shadowVolume = array[startingIndex++] === 1.0; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.height = height; - scratchOptions.extrudedHeight = extrudedHeight; - scratchOptions.granularity = granularity; - scratchOptions.stRotation = stRotation; - scratchOptions.rotation = rotation; - scratchOptions.semiMajorAxis = semiMajorAxis; - scratchOptions.semiMinorAxis = semiMinorAxis; - scratchOptions.shadowVolume = shadowVolume; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return new EllipseGeometry(scratchOptions); - } - - result._center = Matrix3.Cartesian3.clone(center, result._center); - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._semiMajorAxis = semiMajorAxis; - result._semiMinorAxis = semiMinorAxis; - result._rotation = rotation; - result._stRotation = stRotation; - result._height = height; - result._granularity = granularity; - result._extrudedHeight = extrudedHeight; - result._shadowVolume = shadowVolume; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the bounding rectangle based on the provided options - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.center The ellipse's center point in the fixed frame. - * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters. - * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on. - * @param {Number} [options.rotation=0.0] The angle of rotation counter-clockwise from north. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The angular distance between points on the ellipse in radians. - * @param {Rectangle} [result] An object in which to store the result - * - * @returns {Rectangle} The result rectangle - */ - EllipseGeometry.computeRectangle = function (options, result) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const center = options.center; - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - const semiMajorAxis = options.semiMajorAxis; - const semiMinorAxis = options.semiMinorAxis; - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - const rotation = defaultValue.defaultValue(options.rotation, 0.0); - - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.center", center); - Check.Check.typeOf.number("options.semiMajorAxis", semiMajorAxis); - Check.Check.typeOf.number("options.semiMinorAxis", semiMinorAxis); - if (semiMajorAxis < semiMinorAxis) { - throw new Check.DeveloperError( - "semiMajorAxis must be greater than or equal to the semiMinorAxis." - ); - } - if (granularity <= 0.0) { - throw new Check.DeveloperError("granularity must be greater than zero."); - } - //>>includeEnd('debug'); - - return computeRectangle( - center, - semiMajorAxis, - semiMinorAxis, - rotation, - granularity, - ellipsoid, - result - ); - }; - - /** - * Computes the geometric representation of a ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere. - * - * @param {EllipseGeometry} ellipseGeometry A description of the ellipse. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - EllipseGeometry.createGeometry = function (ellipseGeometry) { - if ( - ellipseGeometry._semiMajorAxis <= 0.0 || - ellipseGeometry._semiMinorAxis <= 0.0 - ) { - return; - } - - const height = ellipseGeometry._height; - const extrudedHeight = ellipseGeometry._extrudedHeight; - const extrude = !Math$1.CesiumMath.equalsEpsilon( - height, - extrudedHeight, - 0, - Math$1.CesiumMath.EPSILON2 - ); - - ellipseGeometry._center = ellipseGeometry._ellipsoid.scaleToGeodeticSurface( - ellipseGeometry._center, - ellipseGeometry._center - ); - const options = { - center: ellipseGeometry._center, - semiMajorAxis: ellipseGeometry._semiMajorAxis, - semiMinorAxis: ellipseGeometry._semiMinorAxis, - ellipsoid: ellipseGeometry._ellipsoid, - rotation: ellipseGeometry._rotation, - height: height, - granularity: ellipseGeometry._granularity, - vertexFormat: ellipseGeometry._vertexFormat, - stRotation: ellipseGeometry._stRotation, - }; - let geometry; - if (extrude) { - options.extrudedHeight = extrudedHeight; - options.shadowVolume = ellipseGeometry._shadowVolume; - options.offsetAttribute = ellipseGeometry._offsetAttribute; - geometry = computeExtrudedEllipse(options); - } else { - geometry = computeEllipse(options); - - if (defaultValue.defined(ellipseGeometry._offsetAttribute)) { - const length = geometry.attributes.position.values.length; - const offsetValue = - ellipseGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - } - - return new GeometryAttribute.Geometry({ - attributes: geometry.attributes, - indices: geometry.indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: geometry.boundingSphere, - offsetAttribute: ellipseGeometry._offsetAttribute, - }); - }; - - /** - * @private - */ - EllipseGeometry.createShadowVolume = function ( - ellipseGeometry, - minHeightFunc, - maxHeightFunc - ) { - const granularity = ellipseGeometry._granularity; - const ellipsoid = ellipseGeometry._ellipsoid; - - const minHeight = minHeightFunc(granularity, ellipsoid); - const maxHeight = maxHeightFunc(granularity, ellipsoid); - - return new EllipseGeometry({ - center: ellipseGeometry._center, - semiMajorAxis: ellipseGeometry._semiMajorAxis, - semiMinorAxis: ellipseGeometry._semiMinorAxis, - ellipsoid: ellipsoid, - rotation: ellipseGeometry._rotation, - stRotation: ellipseGeometry._stRotation, - granularity: granularity, - extrudedHeight: minHeight, - height: maxHeight, - vertexFormat: VertexFormat.VertexFormat.POSITION_ONLY, - shadowVolume: true, - }); - }; - - function textureCoordinateRotationPoints(ellipseGeometry) { - const stRotation = -ellipseGeometry._stRotation; - if (stRotation === 0.0) { - return [0, 0, 0, 1, 1, 0]; - } - - const cep = EllipseGeometryLibrary.EllipseGeometryLibrary.computeEllipsePositions( - { - center: ellipseGeometry._center, - semiMajorAxis: ellipseGeometry._semiMajorAxis, - semiMinorAxis: ellipseGeometry._semiMinorAxis, - rotation: ellipseGeometry._rotation, - granularity: ellipseGeometry._granularity, - }, - false, - true - ); - const positionsFlat = cep.outerPositions; - const positionsCount = positionsFlat.length / 3; - const positions = new Array(positionsCount); - for (let i = 0; i < positionsCount; ++i) { - positions[i] = Matrix3.Cartesian3.fromArray(positionsFlat, i * 3); - } - - const ellipsoid = ellipseGeometry._ellipsoid; - const boundingRectangle = ellipseGeometry.rectangle; - return GeometryAttribute.Geometry._textureCoordinateRotationPoints( - positions, - stRotation, - ellipsoid, - boundingRectangle - ); - } - - Object.defineProperties(EllipseGeometry.prototype, { - /** - * @private - */ - rectangle: { - get: function () { - if (!defaultValue.defined(this._rectangle)) { - this._rectangle = computeRectangle( - this._center, - this._semiMajorAxis, - this._semiMinorAxis, - this._rotation, - this._granularity, - this._ellipsoid - ); - } - return this._rectangle; - }, - }, - /** - * For remapping texture coordinates when rendering EllipseGeometries as GroundPrimitives. - * @private - */ - textureCoordinateRotationPoints: { - get: function () { - if (!defaultValue.defined(this._textureCoordinateRotationPoints)) { - this._textureCoordinateRotationPoints = textureCoordinateRotationPoints( - this - ); - } - return this._textureCoordinateRotationPoints; - }, - }, - }); - - exports.EllipseGeometry = EllipseGeometry; - -})); -//# sourceMappingURL=EllipseGeometry-6f0c1448.js.map diff --git a/debug/cesium/Workers/EllipseGeometry-6f0c1448.js.map b/debug/cesium/Workers/EllipseGeometry-6f0c1448.js.map deleted file mode 100644 index 4a0ba06..0000000 --- a/debug/cesium/Workers/EllipseGeometry-6f0c1448.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EllipseGeometry-6f0c1448.js","sources":["../../../Source/Core/EllipseGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport EllipseGeometryLibrary from \"./EllipseGeometryLibrary.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport GeographicProjection from \"./GeographicProjection.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryInstance from \"./GeometryInstance.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport GeometryPipeline from \"./GeometryPipeline.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst scratchCartesian1 = new Cartesian3();\r\nconst scratchCartesian2 = new Cartesian3();\r\nconst scratchCartesian3 = new Cartesian3();\r\nconst scratchCartesian4 = new Cartesian3();\r\nconst texCoordScratch = new Cartesian2();\r\nconst textureMatrixScratch = new Matrix3();\r\nconst tangentMatrixScratch = new Matrix3();\r\nconst quaternionScratch = new Quaternion();\r\n\r\nconst scratchNormal = new Cartesian3();\r\nconst scratchTangent = new Cartesian3();\r\nconst scratchBitangent = new Cartesian3();\r\n\r\nconst scratchCartographic = new Cartographic();\r\nconst projectedCenterScratch = new Cartesian3();\r\n\r\nconst scratchMinTexCoord = new Cartesian2();\r\nconst scratchMaxTexCoord = new Cartesian2();\r\n\r\nfunction computeTopBottomAttributes(positions, options, extrude) {\r\n const vertexFormat = options.vertexFormat;\r\n const center = options.center;\r\n const semiMajorAxis = options.semiMajorAxis;\r\n const semiMinorAxis = options.semiMinorAxis;\r\n const ellipsoid = options.ellipsoid;\r\n const stRotation = options.stRotation;\r\n const size = extrude ? (positions.length / 3) * 2 : positions.length / 3;\r\n const shadowVolume = options.shadowVolume;\r\n\r\n const textureCoordinates = vertexFormat.st\r\n ? new Float32Array(size * 2)\r\n : undefined;\r\n const normals = vertexFormat.normal ? new Float32Array(size * 3) : undefined;\r\n const tangents = vertexFormat.tangent\r\n ? new Float32Array(size * 3)\r\n : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(size * 3)\r\n : undefined;\r\n\r\n const extrudeNormals = shadowVolume ? new Float32Array(size * 3) : undefined;\r\n\r\n let textureCoordIndex = 0;\r\n\r\n // Raise positions to a height above the ellipsoid and compute the\r\n // texture coordinates, normals, tangents, and bitangents.\r\n let normal = scratchNormal;\r\n let tangent = scratchTangent;\r\n let bitangent = scratchBitangent;\r\n\r\n const projection = new GeographicProjection(ellipsoid);\r\n const projectedCenter = projection.project(\r\n ellipsoid.cartesianToCartographic(center, scratchCartographic),\r\n projectedCenterScratch\r\n );\r\n\r\n const geodeticNormal = ellipsoid.scaleToGeodeticSurface(\r\n center,\r\n scratchCartesian1\r\n );\r\n ellipsoid.geodeticSurfaceNormal(geodeticNormal, geodeticNormal);\r\n\r\n let textureMatrix = textureMatrixScratch;\r\n let tangentMatrix = tangentMatrixScratch;\r\n if (stRotation !== 0) {\r\n let rotation = Quaternion.fromAxisAngle(\r\n geodeticNormal,\r\n stRotation,\r\n quaternionScratch\r\n );\r\n textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\r\n\r\n rotation = Quaternion.fromAxisAngle(\r\n geodeticNormal,\r\n -stRotation,\r\n quaternionScratch\r\n );\r\n tangentMatrix = Matrix3.fromQuaternion(rotation, tangentMatrix);\r\n } else {\r\n textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\r\n tangentMatrix = Matrix3.clone(Matrix3.IDENTITY, tangentMatrix);\r\n }\r\n\r\n const minTexCoord = Cartesian2.fromElements(\r\n Number.POSITIVE_INFINITY,\r\n Number.POSITIVE_INFINITY,\r\n scratchMinTexCoord\r\n );\r\n const maxTexCoord = Cartesian2.fromElements(\r\n Number.NEGATIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY,\r\n scratchMaxTexCoord\r\n );\r\n\r\n let length = positions.length;\r\n const bottomOffset = extrude ? length : 0;\r\n const stOffset = (bottomOffset / 3) * 2;\r\n for (let i = 0; i < length; i += 3) {\r\n const i1 = i + 1;\r\n const i2 = i + 2;\r\n const position = Cartesian3.fromArray(positions, i, scratchCartesian1);\r\n\r\n if (vertexFormat.st) {\r\n const rotatedPoint = Matrix3.multiplyByVector(\r\n textureMatrix,\r\n position,\r\n scratchCartesian2\r\n );\r\n const projectedPoint = projection.project(\r\n ellipsoid.cartesianToCartographic(rotatedPoint, scratchCartographic),\r\n scratchCartesian3\r\n );\r\n Cartesian3.subtract(projectedPoint, projectedCenter, projectedPoint);\r\n\r\n texCoordScratch.x =\r\n (projectedPoint.x + semiMajorAxis) / (2.0 * semiMajorAxis);\r\n texCoordScratch.y =\r\n (projectedPoint.y + semiMinorAxis) / (2.0 * semiMinorAxis);\r\n\r\n minTexCoord.x = Math.min(texCoordScratch.x, minTexCoord.x);\r\n minTexCoord.y = Math.min(texCoordScratch.y, minTexCoord.y);\r\n maxTexCoord.x = Math.max(texCoordScratch.x, maxTexCoord.x);\r\n maxTexCoord.y = Math.max(texCoordScratch.y, maxTexCoord.y);\r\n\r\n if (extrude) {\r\n textureCoordinates[textureCoordIndex + stOffset] = texCoordScratch.x;\r\n textureCoordinates[textureCoordIndex + 1 + stOffset] =\r\n texCoordScratch.y;\r\n }\r\n\r\n textureCoordinates[textureCoordIndex++] = texCoordScratch.x;\r\n textureCoordinates[textureCoordIndex++] = texCoordScratch.y;\r\n }\r\n\r\n if (\r\n vertexFormat.normal ||\r\n vertexFormat.tangent ||\r\n vertexFormat.bitangent ||\r\n shadowVolume\r\n ) {\r\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\r\n\r\n if (shadowVolume) {\r\n extrudeNormals[i + bottomOffset] = -normal.x;\r\n extrudeNormals[i1 + bottomOffset] = -normal.y;\r\n extrudeNormals[i2 + bottomOffset] = -normal.z;\r\n }\r\n\r\n if (\r\n vertexFormat.normal ||\r\n vertexFormat.tangent ||\r\n vertexFormat.bitangent\r\n ) {\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n tangent = Cartesian3.normalize(\r\n Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent),\r\n tangent\r\n );\r\n Matrix3.multiplyByVector(tangentMatrix, tangent, tangent);\r\n }\r\n if (vertexFormat.normal) {\r\n normals[i] = normal.x;\r\n normals[i1] = normal.y;\r\n normals[i2] = normal.z;\r\n if (extrude) {\r\n normals[i + bottomOffset] = -normal.x;\r\n normals[i1 + bottomOffset] = -normal.y;\r\n normals[i2 + bottomOffset] = -normal.z;\r\n }\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n tangents[i] = tangent.x;\r\n tangents[i1] = tangent.y;\r\n tangents[i2] = tangent.z;\r\n if (extrude) {\r\n tangents[i + bottomOffset] = -tangent.x;\r\n tangents[i1 + bottomOffset] = -tangent.y;\r\n tangents[i2 + bottomOffset] = -tangent.z;\r\n }\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n bitangent = Cartesian3.normalize(\r\n Cartesian3.cross(normal, tangent, bitangent),\r\n bitangent\r\n );\r\n bitangents[i] = bitangent.x;\r\n bitangents[i1] = bitangent.y;\r\n bitangents[i2] = bitangent.z;\r\n if (extrude) {\r\n bitangents[i + bottomOffset] = bitangent.x;\r\n bitangents[i1 + bottomOffset] = bitangent.y;\r\n bitangents[i2 + bottomOffset] = bitangent.z;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (vertexFormat.st) {\r\n length = textureCoordinates.length;\r\n for (let k = 0; k < length; k += 2) {\r\n textureCoordinates[k] =\r\n (textureCoordinates[k] - minTexCoord.x) /\r\n (maxTexCoord.x - minTexCoord.x);\r\n textureCoordinates[k + 1] =\r\n (textureCoordinates[k + 1] - minTexCoord.y) /\r\n (maxTexCoord.y - minTexCoord.y);\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n\r\n if (vertexFormat.position) {\r\n const finalPositions = EllipseGeometryLibrary.raisePositionsToHeight(\r\n positions,\r\n options,\r\n extrude\r\n );\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: finalPositions,\r\n });\r\n }\r\n\r\n if (vertexFormat.st) {\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: textureCoordinates,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n\r\n if (shadowVolume) {\r\n attributes.extrudeDirection = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: extrudeNormals,\r\n });\r\n }\r\n\r\n if (extrude && defined(options.offsetAttribute)) {\r\n let offsetAttribute = new Uint8Array(size);\r\n if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\r\n offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\r\n } else {\r\n const offsetValue =\r\n options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n offsetAttribute = offsetAttribute.fill(offsetValue);\r\n }\r\n\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: offsetAttribute,\r\n });\r\n }\r\n\r\n return attributes;\r\n}\r\n\r\nfunction topIndices(numPts) {\r\n // numTriangles in half = 3 + 8 + 12 + ... = -1 + 4 + (4 + 4) + (4 + 4 + 4) + ... = -1 + 4 * (1 + 2 + 3 + ...)\r\n // = -1 + 4 * ((n * ( n + 1)) / 2)\r\n // total triangles = 2 * numTrangles in half\r\n // indices = total triangles * 3;\r\n // Substitute numPts for n above\r\n\r\n const indices = new Array(12 * (numPts * (numPts + 1)) - 6);\r\n let indicesIndex = 0;\r\n let prevIndex;\r\n let numInterior;\r\n let positionIndex;\r\n let i;\r\n let j;\r\n // Indices triangles to the 'right' of the north vector\r\n\r\n prevIndex = 0;\r\n positionIndex = 1;\r\n for (i = 0; i < 3; i++) {\r\n indices[indicesIndex++] = positionIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n indices[indicesIndex++] = positionIndex;\r\n }\r\n\r\n for (i = 2; i < numPts + 1; ++i) {\r\n positionIndex = i * (i + 1) - 1;\r\n prevIndex = (i - 1) * i - 1;\r\n\r\n indices[indicesIndex++] = positionIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n indices[indicesIndex++] = positionIndex;\r\n\r\n numInterior = 2 * i;\r\n for (j = 0; j < numInterior - 1; ++j) {\r\n indices[indicesIndex++] = positionIndex;\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n\r\n indices[indicesIndex++] = positionIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n indices[indicesIndex++] = positionIndex;\r\n }\r\n\r\n indices[indicesIndex++] = positionIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n indices[indicesIndex++] = positionIndex;\r\n }\r\n\r\n // Indices for center column of triangles\r\n numInterior = numPts * 2;\r\n ++positionIndex;\r\n ++prevIndex;\r\n for (i = 0; i < numInterior - 1; ++i) {\r\n indices[indicesIndex++] = positionIndex;\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n\r\n indices[indicesIndex++] = positionIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n indices[indicesIndex++] = positionIndex;\r\n }\r\n\r\n indices[indicesIndex++] = positionIndex;\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n\r\n indices[indicesIndex++] = positionIndex++;\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n\r\n // Reverse the process creating indices to the 'left' of the north vector\r\n ++prevIndex;\r\n for (i = numPts - 1; i > 1; --i) {\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n indices[indicesIndex++] = positionIndex;\r\n\r\n numInterior = 2 * i;\r\n for (j = 0; j < numInterior - 1; ++j) {\r\n indices[indicesIndex++] = positionIndex;\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n\r\n indices[indicesIndex++] = positionIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n indices[indicesIndex++] = positionIndex;\r\n }\r\n\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = positionIndex++;\r\n }\r\n\r\n for (i = 0; i < 3; i++) {\r\n indices[indicesIndex++] = prevIndex++;\r\n indices[indicesIndex++] = prevIndex;\r\n indices[indicesIndex++] = positionIndex;\r\n }\r\n return indices;\r\n}\r\n\r\nlet boundingSphereCenter = new Cartesian3();\r\n\r\nfunction computeEllipse(options) {\r\n const center = options.center;\r\n boundingSphereCenter = Cartesian3.multiplyByScalar(\r\n options.ellipsoid.geodeticSurfaceNormal(center, boundingSphereCenter),\r\n options.height,\r\n boundingSphereCenter\r\n );\r\n boundingSphereCenter = Cartesian3.add(\r\n center,\r\n boundingSphereCenter,\r\n boundingSphereCenter\r\n );\r\n const boundingSphere = new BoundingSphere(\r\n boundingSphereCenter,\r\n options.semiMajorAxis\r\n );\r\n const cep = EllipseGeometryLibrary.computeEllipsePositions(\r\n options,\r\n true,\r\n false\r\n );\r\n const positions = cep.positions;\r\n const numPts = cep.numPts;\r\n const attributes = computeTopBottomAttributes(positions, options, false);\r\n let indices = topIndices(numPts);\r\n indices = IndexDatatype.createTypedArray(positions.length / 3, indices);\r\n return {\r\n boundingSphere: boundingSphere,\r\n attributes: attributes,\r\n indices: indices,\r\n };\r\n}\r\n\r\nfunction computeWallAttributes(positions, options) {\r\n const vertexFormat = options.vertexFormat;\r\n const center = options.center;\r\n const semiMajorAxis = options.semiMajorAxis;\r\n const semiMinorAxis = options.semiMinorAxis;\r\n const ellipsoid = options.ellipsoid;\r\n const height = options.height;\r\n const extrudedHeight = options.extrudedHeight;\r\n const stRotation = options.stRotation;\r\n const size = (positions.length / 3) * 2;\r\n\r\n const finalPositions = new Float64Array(size * 3);\r\n const textureCoordinates = vertexFormat.st\r\n ? new Float32Array(size * 2)\r\n : undefined;\r\n const normals = vertexFormat.normal ? new Float32Array(size * 3) : undefined;\r\n const tangents = vertexFormat.tangent\r\n ? new Float32Array(size * 3)\r\n : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(size * 3)\r\n : undefined;\r\n\r\n const shadowVolume = options.shadowVolume;\r\n const extrudeNormals = shadowVolume ? new Float32Array(size * 3) : undefined;\r\n\r\n let textureCoordIndex = 0;\r\n\r\n // Raise positions to a height above the ellipsoid and compute the\r\n // texture coordinates, normals, tangents, and bitangents.\r\n let normal = scratchNormal;\r\n let tangent = scratchTangent;\r\n let bitangent = scratchBitangent;\r\n\r\n const projection = new GeographicProjection(ellipsoid);\r\n const projectedCenter = projection.project(\r\n ellipsoid.cartesianToCartographic(center, scratchCartographic),\r\n projectedCenterScratch\r\n );\r\n\r\n const geodeticNormal = ellipsoid.scaleToGeodeticSurface(\r\n center,\r\n scratchCartesian1\r\n );\r\n ellipsoid.geodeticSurfaceNormal(geodeticNormal, geodeticNormal);\r\n const rotation = Quaternion.fromAxisAngle(\r\n geodeticNormal,\r\n stRotation,\r\n quaternionScratch\r\n );\r\n const textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrixScratch);\r\n\r\n const minTexCoord = Cartesian2.fromElements(\r\n Number.POSITIVE_INFINITY,\r\n Number.POSITIVE_INFINITY,\r\n scratchMinTexCoord\r\n );\r\n const maxTexCoord = Cartesian2.fromElements(\r\n Number.NEGATIVE_INFINITY,\r\n Number.NEGATIVE_INFINITY,\r\n scratchMaxTexCoord\r\n );\r\n\r\n let length = positions.length;\r\n const stOffset = (length / 3) * 2;\r\n for (let i = 0; i < length; i += 3) {\r\n const i1 = i + 1;\r\n const i2 = i + 2;\r\n let position = Cartesian3.fromArray(positions, i, scratchCartesian1);\r\n let extrudedPosition;\r\n\r\n if (vertexFormat.st) {\r\n const rotatedPoint = Matrix3.multiplyByVector(\r\n textureMatrix,\r\n position,\r\n scratchCartesian2\r\n );\r\n const projectedPoint = projection.project(\r\n ellipsoid.cartesianToCartographic(rotatedPoint, scratchCartographic),\r\n scratchCartesian3\r\n );\r\n Cartesian3.subtract(projectedPoint, projectedCenter, projectedPoint);\r\n\r\n texCoordScratch.x =\r\n (projectedPoint.x + semiMajorAxis) / (2.0 * semiMajorAxis);\r\n texCoordScratch.y =\r\n (projectedPoint.y + semiMinorAxis) / (2.0 * semiMinorAxis);\r\n\r\n minTexCoord.x = Math.min(texCoordScratch.x, minTexCoord.x);\r\n minTexCoord.y = Math.min(texCoordScratch.y, minTexCoord.y);\r\n maxTexCoord.x = Math.max(texCoordScratch.x, maxTexCoord.x);\r\n maxTexCoord.y = Math.max(texCoordScratch.y, maxTexCoord.y);\r\n\r\n textureCoordinates[textureCoordIndex + stOffset] = texCoordScratch.x;\r\n textureCoordinates[textureCoordIndex + 1 + stOffset] = texCoordScratch.y;\r\n\r\n textureCoordinates[textureCoordIndex++] = texCoordScratch.x;\r\n textureCoordinates[textureCoordIndex++] = texCoordScratch.y;\r\n }\r\n\r\n position = ellipsoid.scaleToGeodeticSurface(position, position);\r\n extrudedPosition = Cartesian3.clone(position, scratchCartesian2);\r\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\r\n\r\n if (shadowVolume) {\r\n extrudeNormals[i + length] = -normal.x;\r\n extrudeNormals[i1 + length] = -normal.y;\r\n extrudeNormals[i2 + length] = -normal.z;\r\n }\r\n\r\n let scaledNormal = Cartesian3.multiplyByScalar(\r\n normal,\r\n height,\r\n scratchCartesian4\r\n );\r\n position = Cartesian3.add(position, scaledNormal, position);\r\n scaledNormal = Cartesian3.multiplyByScalar(\r\n normal,\r\n extrudedHeight,\r\n scaledNormal\r\n );\r\n extrudedPosition = Cartesian3.add(\r\n extrudedPosition,\r\n scaledNormal,\r\n extrudedPosition\r\n );\r\n\r\n if (vertexFormat.position) {\r\n finalPositions[i + length] = extrudedPosition.x;\r\n finalPositions[i1 + length] = extrudedPosition.y;\r\n finalPositions[i2 + length] = extrudedPosition.z;\r\n\r\n finalPositions[i] = position.x;\r\n finalPositions[i1] = position.y;\r\n finalPositions[i2] = position.z;\r\n }\r\n\r\n if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\r\n bitangent = Cartesian3.clone(normal, bitangent);\r\n const next = Cartesian3.fromArray(\r\n positions,\r\n (i + 3) % length,\r\n scratchCartesian4\r\n );\r\n Cartesian3.subtract(next, position, next);\r\n const bottom = Cartesian3.subtract(\r\n extrudedPosition,\r\n position,\r\n scratchCartesian3\r\n );\r\n\r\n normal = Cartesian3.normalize(\r\n Cartesian3.cross(bottom, next, normal),\r\n normal\r\n );\r\n\r\n if (vertexFormat.normal) {\r\n normals[i] = normal.x;\r\n normals[i1] = normal.y;\r\n normals[i2] = normal.z;\r\n\r\n normals[i + length] = normal.x;\r\n normals[i1 + length] = normal.y;\r\n normals[i2 + length] = normal.z;\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n tangent = Cartesian3.normalize(\r\n Cartesian3.cross(bitangent, normal, tangent),\r\n tangent\r\n );\r\n tangents[i] = tangent.x;\r\n tangents[i1] = tangent.y;\r\n tangents[i2] = tangent.z;\r\n\r\n tangents[i + length] = tangent.x;\r\n tangents[i + 1 + length] = tangent.y;\r\n tangents[i + 2 + length] = tangent.z;\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n bitangents[i] = bitangent.x;\r\n bitangents[i1] = bitangent.y;\r\n bitangents[i2] = bitangent.z;\r\n\r\n bitangents[i + length] = bitangent.x;\r\n bitangents[i1 + length] = bitangent.y;\r\n bitangents[i2 + length] = bitangent.z;\r\n }\r\n }\r\n }\r\n\r\n if (vertexFormat.st) {\r\n length = textureCoordinates.length;\r\n for (let k = 0; k < length; k += 2) {\r\n textureCoordinates[k] =\r\n (textureCoordinates[k] - minTexCoord.x) /\r\n (maxTexCoord.x - minTexCoord.x);\r\n textureCoordinates[k + 1] =\r\n (textureCoordinates[k + 1] - minTexCoord.y) /\r\n (maxTexCoord.y - minTexCoord.y);\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n\r\n if (vertexFormat.position) {\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: finalPositions,\r\n });\r\n }\r\n\r\n if (vertexFormat.st) {\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: textureCoordinates,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n\r\n if (shadowVolume) {\r\n attributes.extrudeDirection = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: extrudeNormals,\r\n });\r\n }\r\n\r\n if (defined(options.offsetAttribute)) {\r\n let offsetAttribute = new Uint8Array(size);\r\n if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\r\n offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\r\n } else {\r\n const offsetValue =\r\n options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n offsetAttribute = offsetAttribute.fill(offsetValue);\r\n }\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: offsetAttribute,\r\n });\r\n }\r\n\r\n return attributes;\r\n}\r\n\r\nfunction computeWallIndices(positions) {\r\n const length = positions.length / 3;\r\n const indices = IndexDatatype.createTypedArray(length, length * 6);\r\n let index = 0;\r\n for (let i = 0; i < length; i++) {\r\n const UL = i;\r\n const LL = i + length;\r\n const UR = (UL + 1) % length;\r\n const LR = UR + length;\r\n indices[index++] = UL;\r\n indices[index++] = LL;\r\n indices[index++] = UR;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n }\r\n\r\n return indices;\r\n}\r\n\r\nconst topBoundingSphere = new BoundingSphere();\r\nconst bottomBoundingSphere = new BoundingSphere();\r\n\r\nfunction computeExtrudedEllipse(options) {\r\n const center = options.center;\r\n const ellipsoid = options.ellipsoid;\r\n const semiMajorAxis = options.semiMajorAxis;\r\n let scaledNormal = Cartesian3.multiplyByScalar(\r\n ellipsoid.geodeticSurfaceNormal(center, scratchCartesian1),\r\n options.height,\r\n scratchCartesian1\r\n );\r\n topBoundingSphere.center = Cartesian3.add(\r\n center,\r\n scaledNormal,\r\n topBoundingSphere.center\r\n );\r\n topBoundingSphere.radius = semiMajorAxis;\r\n\r\n scaledNormal = Cartesian3.multiplyByScalar(\r\n ellipsoid.geodeticSurfaceNormal(center, scaledNormal),\r\n options.extrudedHeight,\r\n scaledNormal\r\n );\r\n bottomBoundingSphere.center = Cartesian3.add(\r\n center,\r\n scaledNormal,\r\n bottomBoundingSphere.center\r\n );\r\n bottomBoundingSphere.radius = semiMajorAxis;\r\n\r\n const cep = EllipseGeometryLibrary.computeEllipsePositions(\r\n options,\r\n true,\r\n true\r\n );\r\n const positions = cep.positions;\r\n const numPts = cep.numPts;\r\n const outerPositions = cep.outerPositions;\r\n const boundingSphere = BoundingSphere.union(\r\n topBoundingSphere,\r\n bottomBoundingSphere\r\n );\r\n const topBottomAttributes = computeTopBottomAttributes(\r\n positions,\r\n options,\r\n true\r\n );\r\n let indices = topIndices(numPts);\r\n const length = indices.length;\r\n indices.length = length * 2;\r\n const posLength = positions.length / 3;\r\n for (let i = 0; i < length; i += 3) {\r\n indices[i + length] = indices[i + 2] + posLength;\r\n indices[i + 1 + length] = indices[i + 1] + posLength;\r\n indices[i + 2 + length] = indices[i] + posLength;\r\n }\r\n\r\n const topBottomIndices = IndexDatatype.createTypedArray(\r\n (posLength * 2) / 3,\r\n indices\r\n );\r\n\r\n const topBottomGeo = new Geometry({\r\n attributes: topBottomAttributes,\r\n indices: topBottomIndices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n });\r\n\r\n const wallAttributes = computeWallAttributes(outerPositions, options);\r\n indices = computeWallIndices(outerPositions);\r\n const wallIndices = IndexDatatype.createTypedArray(\r\n (outerPositions.length * 2) / 3,\r\n indices\r\n );\r\n\r\n const wallGeo = new Geometry({\r\n attributes: wallAttributes,\r\n indices: wallIndices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n });\r\n\r\n const geo = GeometryPipeline.combineInstances([\r\n new GeometryInstance({\r\n geometry: topBottomGeo,\r\n }),\r\n new GeometryInstance({\r\n geometry: wallGeo,\r\n }),\r\n ]);\r\n\r\n return {\r\n boundingSphere: boundingSphere,\r\n attributes: geo[0].attributes,\r\n indices: geo[0].indices,\r\n };\r\n}\r\n\r\nfunction computeRectangle(\r\n center,\r\n semiMajorAxis,\r\n semiMinorAxis,\r\n rotation,\r\n granularity,\r\n ellipsoid,\r\n result\r\n) {\r\n const cep = EllipseGeometryLibrary.computeEllipsePositions(\r\n {\r\n center: center,\r\n semiMajorAxis: semiMajorAxis,\r\n semiMinorAxis: semiMinorAxis,\r\n rotation: rotation,\r\n granularity: granularity,\r\n },\r\n false,\r\n true\r\n );\r\n const positionsFlat = cep.outerPositions;\r\n const positionsCount = positionsFlat.length / 3;\r\n const positions = new Array(positionsCount);\r\n for (let i = 0; i < positionsCount; ++i) {\r\n positions[i] = Cartesian3.fromArray(positionsFlat, i * 3);\r\n }\r\n const rectangle = Rectangle.fromCartesianArray(positions, ellipsoid, result);\r\n // Rectangle width goes beyond 180 degrees when the ellipse crosses a pole.\r\n // When this happens, make the rectangle into a \"circle\" around the pole\r\n if (rectangle.width > CesiumMath.PI) {\r\n rectangle.north =\r\n rectangle.north > 0.0\r\n ? CesiumMath.PI_OVER_TWO - CesiumMath.EPSILON7\r\n : rectangle.north;\r\n rectangle.south =\r\n rectangle.south < 0.0\r\n ? CesiumMath.EPSILON7 - CesiumMath.PI_OVER_TWO\r\n : rectangle.south;\r\n rectangle.east = CesiumMath.PI;\r\n rectangle.west = -CesiumMath.PI;\r\n }\r\n return rectangle;\r\n}\r\n\r\n/**\r\n * A description of an ellipse on an ellipsoid. Ellipse geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\r\n *\r\n * @alias EllipseGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\r\n * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\r\n * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on.\r\n * @param {Number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface.\r\n * @param {Number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface.\r\n * @param {Number} [options.rotation=0.0] The angle of rotation counter-clockwise from north.\r\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates counter-clockwise from north.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The angular distance between points on the ellipse in radians.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n *\r\n * @exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero.\r\n * @exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis.\r\n * @exception {DeveloperError} granularity must be greater than zero.\r\n *\r\n *\r\n * @example\r\n * // Create an ellipse.\r\n * const ellipse = new Cesium.EllipseGeometry({\r\n * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\r\n * semiMajorAxis : 500000.0,\r\n * semiMinorAxis : 300000.0,\r\n * rotation : Cesium.Math.toRadians(60.0)\r\n * });\r\n * const geometry = Cesium.EllipseGeometry.createGeometry(ellipse);\r\n *\r\n * @see EllipseGeometry.createGeometry\r\n */\r\nfunction EllipseGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const center = options.center;\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n const semiMajorAxis = options.semiMajorAxis;\r\n const semiMinorAxis = options.semiMinorAxis;\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.center\", center);\r\n Check.typeOf.number(\"options.semiMajorAxis\", semiMajorAxis);\r\n Check.typeOf.number(\"options.semiMinorAxis\", semiMinorAxis);\r\n if (semiMajorAxis < semiMinorAxis) {\r\n throw new DeveloperError(\r\n \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\"\r\n );\r\n }\r\n if (granularity <= 0.0) {\r\n throw new DeveloperError(\"granularity must be greater than zero.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const height = defaultValue(options.height, 0.0);\r\n const extrudedHeight = defaultValue(options.extrudedHeight, height);\r\n\r\n this._center = Cartesian3.clone(center);\r\n this._semiMajorAxis = semiMajorAxis;\r\n this._semiMinorAxis = semiMinorAxis;\r\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\r\n this._rotation = defaultValue(options.rotation, 0.0);\r\n this._stRotation = defaultValue(options.stRotation, 0.0);\r\n this._height = Math.max(extrudedHeight, height);\r\n this._granularity = granularity;\r\n this._vertexFormat = VertexFormat.clone(vertexFormat);\r\n this._extrudedHeight = Math.min(extrudedHeight, height);\r\n this._shadowVolume = defaultValue(options.shadowVolume, false);\r\n this._workerName = \"createEllipseGeometry\";\r\n this._offsetAttribute = options.offsetAttribute;\r\n\r\n this._rectangle = undefined;\r\n this._textureCoordinateRotationPoints = undefined;\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nEllipseGeometry.packedLength =\r\n Cartesian3.packedLength +\r\n Ellipsoid.packedLength +\r\n VertexFormat.packedLength +\r\n 9;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {EllipseGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nEllipseGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Cartesian3.pack(value._center, array, startingIndex);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._semiMajorAxis;\r\n array[startingIndex++] = value._semiMinorAxis;\r\n array[startingIndex++] = value._rotation;\r\n array[startingIndex++] = value._stRotation;\r\n array[startingIndex++] = value._height;\r\n array[startingIndex++] = value._granularity;\r\n array[startingIndex++] = value._extrudedHeight;\r\n array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchCenter = new Cartesian3();\r\nconst scratchEllipsoid = new Ellipsoid();\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n center: scratchCenter,\r\n ellipsoid: scratchEllipsoid,\r\n vertexFormat: scratchVertexFormat,\r\n semiMajorAxis: undefined,\r\n semiMinorAxis: undefined,\r\n rotation: undefined,\r\n stRotation: undefined,\r\n height: undefined,\r\n granularity: undefined,\r\n extrudedHeight: undefined,\r\n shadowVolume: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {EllipseGeometry} [result] The object into which to store the result.\r\n * @returns {EllipseGeometry} The modified result parameter or a new EllipseGeometry instance if one was not provided.\r\n */\r\nEllipseGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const center = Cartesian3.unpack(array, startingIndex, scratchCenter);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const semiMajorAxis = array[startingIndex++];\r\n const semiMinorAxis = array[startingIndex++];\r\n const rotation = array[startingIndex++];\r\n const stRotation = array[startingIndex++];\r\n const height = array[startingIndex++];\r\n const granularity = array[startingIndex++];\r\n const extrudedHeight = array[startingIndex++];\r\n const shadowVolume = array[startingIndex++] === 1.0;\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.height = height;\r\n scratchOptions.extrudedHeight = extrudedHeight;\r\n scratchOptions.granularity = granularity;\r\n scratchOptions.stRotation = stRotation;\r\n scratchOptions.rotation = rotation;\r\n scratchOptions.semiMajorAxis = semiMajorAxis;\r\n scratchOptions.semiMinorAxis = semiMinorAxis;\r\n scratchOptions.shadowVolume = shadowVolume;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return new EllipseGeometry(scratchOptions);\r\n }\r\n\r\n result._center = Cartesian3.clone(center, result._center);\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._semiMajorAxis = semiMajorAxis;\r\n result._semiMinorAxis = semiMinorAxis;\r\n result._rotation = rotation;\r\n result._stRotation = stRotation;\r\n result._height = height;\r\n result._granularity = granularity;\r\n result._extrudedHeight = extrudedHeight;\r\n result._shadowVolume = shadowVolume;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the bounding rectangle based on the provided options\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\r\n * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\r\n * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on.\r\n * @param {Number} [options.rotation=0.0] The angle of rotation counter-clockwise from north.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The angular distance between points on the ellipse in radians.\r\n * @param {Rectangle} [result] An object in which to store the result\r\n *\r\n * @returns {Rectangle} The result rectangle\r\n */\r\nEllipseGeometry.computeRectangle = function (options, result) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const center = options.center;\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n const semiMajorAxis = options.semiMajorAxis;\r\n const semiMinorAxis = options.semiMinorAxis;\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const rotation = defaultValue(options.rotation, 0.0);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.center\", center);\r\n Check.typeOf.number(\"options.semiMajorAxis\", semiMajorAxis);\r\n Check.typeOf.number(\"options.semiMinorAxis\", semiMinorAxis);\r\n if (semiMajorAxis < semiMinorAxis) {\r\n throw new DeveloperError(\r\n \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\"\r\n );\r\n }\r\n if (granularity <= 0.0) {\r\n throw new DeveloperError(\"granularity must be greater than zero.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return computeRectangle(\r\n center,\r\n semiMajorAxis,\r\n semiMinorAxis,\r\n rotation,\r\n granularity,\r\n ellipsoid,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {EllipseGeometry} ellipseGeometry A description of the ellipse.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nEllipseGeometry.createGeometry = function (ellipseGeometry) {\r\n if (\r\n ellipseGeometry._semiMajorAxis <= 0.0 ||\r\n ellipseGeometry._semiMinorAxis <= 0.0\r\n ) {\r\n return;\r\n }\r\n\r\n const height = ellipseGeometry._height;\r\n const extrudedHeight = ellipseGeometry._extrudedHeight;\r\n const extrude = !CesiumMath.equalsEpsilon(\r\n height,\r\n extrudedHeight,\r\n 0,\r\n CesiumMath.EPSILON2\r\n );\r\n\r\n ellipseGeometry._center = ellipseGeometry._ellipsoid.scaleToGeodeticSurface(\r\n ellipseGeometry._center,\r\n ellipseGeometry._center\r\n );\r\n const options = {\r\n center: ellipseGeometry._center,\r\n semiMajorAxis: ellipseGeometry._semiMajorAxis,\r\n semiMinorAxis: ellipseGeometry._semiMinorAxis,\r\n ellipsoid: ellipseGeometry._ellipsoid,\r\n rotation: ellipseGeometry._rotation,\r\n height: height,\r\n granularity: ellipseGeometry._granularity,\r\n vertexFormat: ellipseGeometry._vertexFormat,\r\n stRotation: ellipseGeometry._stRotation,\r\n };\r\n let geometry;\r\n if (extrude) {\r\n options.extrudedHeight = extrudedHeight;\r\n options.shadowVolume = ellipseGeometry._shadowVolume;\r\n options.offsetAttribute = ellipseGeometry._offsetAttribute;\r\n geometry = computeExtrudedEllipse(options);\r\n } else {\r\n geometry = computeEllipse(options);\r\n\r\n if (defined(ellipseGeometry._offsetAttribute)) {\r\n const length = geometry.attributes.position.values.length;\r\n const offsetValue =\r\n ellipseGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n geometry.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n }\r\n\r\n return new Geometry({\r\n attributes: geometry.attributes,\r\n indices: geometry.indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: geometry.boundingSphere,\r\n offsetAttribute: ellipseGeometry._offsetAttribute,\r\n });\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nEllipseGeometry.createShadowVolume = function (\r\n ellipseGeometry,\r\n minHeightFunc,\r\n maxHeightFunc\r\n) {\r\n const granularity = ellipseGeometry._granularity;\r\n const ellipsoid = ellipseGeometry._ellipsoid;\r\n\r\n const minHeight = minHeightFunc(granularity, ellipsoid);\r\n const maxHeight = maxHeightFunc(granularity, ellipsoid);\r\n\r\n return new EllipseGeometry({\r\n center: ellipseGeometry._center,\r\n semiMajorAxis: ellipseGeometry._semiMajorAxis,\r\n semiMinorAxis: ellipseGeometry._semiMinorAxis,\r\n ellipsoid: ellipsoid,\r\n rotation: ellipseGeometry._rotation,\r\n stRotation: ellipseGeometry._stRotation,\r\n granularity: granularity,\r\n extrudedHeight: minHeight,\r\n height: maxHeight,\r\n vertexFormat: VertexFormat.POSITION_ONLY,\r\n shadowVolume: true,\r\n });\r\n};\r\n\r\nfunction textureCoordinateRotationPoints(ellipseGeometry) {\r\n const stRotation = -ellipseGeometry._stRotation;\r\n if (stRotation === 0.0) {\r\n return [0, 0, 0, 1, 1, 0];\r\n }\r\n\r\n const cep = EllipseGeometryLibrary.computeEllipsePositions(\r\n {\r\n center: ellipseGeometry._center,\r\n semiMajorAxis: ellipseGeometry._semiMajorAxis,\r\n semiMinorAxis: ellipseGeometry._semiMinorAxis,\r\n rotation: ellipseGeometry._rotation,\r\n granularity: ellipseGeometry._granularity,\r\n },\r\n false,\r\n true\r\n );\r\n const positionsFlat = cep.outerPositions;\r\n const positionsCount = positionsFlat.length / 3;\r\n const positions = new Array(positionsCount);\r\n for (let i = 0; i < positionsCount; ++i) {\r\n positions[i] = Cartesian3.fromArray(positionsFlat, i * 3);\r\n }\r\n\r\n const ellipsoid = ellipseGeometry._ellipsoid;\r\n const boundingRectangle = ellipseGeometry.rectangle;\r\n return Geometry._textureCoordinateRotationPoints(\r\n positions,\r\n stRotation,\r\n ellipsoid,\r\n boundingRectangle\r\n );\r\n}\r\n\r\nObject.defineProperties(EllipseGeometry.prototype, {\r\n /**\r\n * @private\r\n */\r\n rectangle: {\r\n get: function () {\r\n if (!defined(this._rectangle)) {\r\n this._rectangle = computeRectangle(\r\n this._center,\r\n this._semiMajorAxis,\r\n this._semiMinorAxis,\r\n this._rotation,\r\n this._granularity,\r\n this._ellipsoid\r\n );\r\n }\r\n return this._rectangle;\r\n },\r\n },\r\n /**\r\n * For remapping texture coordinates when rendering EllipseGeometries as GroundPrimitives.\r\n * @private\r\n */\r\n textureCoordinateRotationPoints: {\r\n get: function () {\r\n if (!defined(this._textureCoordinateRotationPoints)) {\r\n this._textureCoordinateRotationPoints = textureCoordinateRotationPoints(\r\n this\r\n );\r\n }\r\n return this._textureCoordinateRotationPoints;\r\n },\r\n },\r\n});\r\nexport default EllipseGeometry;\r\n"],"names":["Cartesian3","Cartesian2","Matrix3","Quaternion","Cartographic","GeographicProjection","GeometryAttributes","EllipseGeometryLibrary","GeometryAttribute","ComponentDatatype","defined","GeometryOffsetAttribute","BoundingSphere","IndexDatatype","Geometry","PrimitiveType","GeometryPipeline","GeometryInstance","Rectangle","CesiumMath","defaultValue","Ellipsoid","VertexFormat","Check","DeveloperError"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/EllipseGeometryLibrary-d3f88cc2.js b/debug/cesium/Workers/EllipseGeometryLibrary-d3f88cc2.js deleted file mode 100644 index dde7c42..0000000 --- a/debug/cesium/Workers/EllipseGeometryLibrary-d3f88cc2.js +++ /dev/null @@ -1,392 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './Math-9be8b918', './Transforms-11fb6b0a'], (function (exports, Matrix3, Math$1, Transforms) { 'use strict'; - - const EllipseGeometryLibrary = {}; - - const rotAxis = new Matrix3.Cartesian3(); - const tempVec = new Matrix3.Cartesian3(); - const unitQuat = new Transforms.Quaternion(); - const rotMtx = new Matrix3.Matrix3(); - - function pointOnEllipsoid( - theta, - rotation, - northVec, - eastVec, - aSqr, - ab, - bSqr, - mag, - unitPos, - result - ) { - const azimuth = theta + rotation; - - Matrix3.Cartesian3.multiplyByScalar(eastVec, Math.cos(azimuth), rotAxis); - Matrix3.Cartesian3.multiplyByScalar(northVec, Math.sin(azimuth), tempVec); - Matrix3.Cartesian3.add(rotAxis, tempVec, rotAxis); - - let cosThetaSquared = Math.cos(theta); - cosThetaSquared = cosThetaSquared * cosThetaSquared; - - let sinThetaSquared = Math.sin(theta); - sinThetaSquared = sinThetaSquared * sinThetaSquared; - - const radius = - ab / Math.sqrt(bSqr * cosThetaSquared + aSqr * sinThetaSquared); - const angle = radius / mag; - - // Create the quaternion to rotate the position vector to the boundary of the ellipse. - Transforms.Quaternion.fromAxisAngle(rotAxis, angle, unitQuat); - Matrix3.Matrix3.fromQuaternion(unitQuat, rotMtx); - - Matrix3.Matrix3.multiplyByVector(rotMtx, unitPos, result); - Matrix3.Cartesian3.normalize(result, result); - Matrix3.Cartesian3.multiplyByScalar(result, mag, result); - return result; - } - - const scratchCartesian1 = new Matrix3.Cartesian3(); - const scratchCartesian2 = new Matrix3.Cartesian3(); - const scratchCartesian3 = new Matrix3.Cartesian3(); - const scratchNormal = new Matrix3.Cartesian3(); - /** - * Returns the positions raised to the given heights - * @private - */ - EllipseGeometryLibrary.raisePositionsToHeight = function ( - positions, - options, - extrude - ) { - const ellipsoid = options.ellipsoid; - const height = options.height; - const extrudedHeight = options.extrudedHeight; - const size = extrude ? (positions.length / 3) * 2 : positions.length / 3; - - const finalPositions = new Float64Array(size * 3); - - const length = positions.length; - const bottomOffset = extrude ? length : 0; - for (let i = 0; i < length; i += 3) { - const i1 = i + 1; - const i2 = i + 2; - - const position = Matrix3.Cartesian3.fromArray(positions, i, scratchCartesian1); - ellipsoid.scaleToGeodeticSurface(position, position); - - const extrudedPosition = Matrix3.Cartesian3.clone(position, scratchCartesian2); - const normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal); - const scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - normal, - height, - scratchCartesian3 - ); - Matrix3.Cartesian3.add(position, scaledNormal, position); - - if (extrude) { - Matrix3.Cartesian3.multiplyByScalar(normal, extrudedHeight, scaledNormal); - Matrix3.Cartesian3.add(extrudedPosition, scaledNormal, extrudedPosition); - - finalPositions[i + bottomOffset] = extrudedPosition.x; - finalPositions[i1 + bottomOffset] = extrudedPosition.y; - finalPositions[i2 + bottomOffset] = extrudedPosition.z; - } - - finalPositions[i] = position.x; - finalPositions[i1] = position.y; - finalPositions[i2] = position.z; - } - - return finalPositions; - }; - - const unitPosScratch = new Matrix3.Cartesian3(); - const eastVecScratch = new Matrix3.Cartesian3(); - const northVecScratch = new Matrix3.Cartesian3(); - /** - * Returns an array of positions that make up the ellipse. - * @private - */ - EllipseGeometryLibrary.computeEllipsePositions = function ( - options, - addFillPositions, - addEdgePositions - ) { - const semiMinorAxis = options.semiMinorAxis; - const semiMajorAxis = options.semiMajorAxis; - const rotation = options.rotation; - const center = options.center; - - // Computing the arc-length of the ellipse is too expensive to be practical. Estimating it using the - // arc length of the sphere is too inaccurate and creates sharp edges when either the semi-major or - // semi-minor axis is much bigger than the other. Instead, scale the angle delta to make - // the distance along the ellipse boundary more closely match the granularity. - const granularity = options.granularity * 8.0; - - const aSqr = semiMinorAxis * semiMinorAxis; - const bSqr = semiMajorAxis * semiMajorAxis; - const ab = semiMajorAxis * semiMinorAxis; - - const mag = Matrix3.Cartesian3.magnitude(center); - - const unitPos = Matrix3.Cartesian3.normalize(center, unitPosScratch); - let eastVec = Matrix3.Cartesian3.cross(Matrix3.Cartesian3.UNIT_Z, center, eastVecScratch); - eastVec = Matrix3.Cartesian3.normalize(eastVec, eastVec); - const northVec = Matrix3.Cartesian3.cross(unitPos, eastVec, northVecScratch); - - // The number of points in the first quadrant - let numPts = 1 + Math.ceil(Math$1.CesiumMath.PI_OVER_TWO / granularity); - - const deltaTheta = Math$1.CesiumMath.PI_OVER_TWO / (numPts - 1); - let theta = Math$1.CesiumMath.PI_OVER_TWO - numPts * deltaTheta; - if (theta < 0.0) { - numPts -= Math.ceil(Math.abs(theta) / deltaTheta); - } - - // If the number of points were three, the ellipse - // would be tessellated like below: - // - // *---* - // / | \ | \ - // *---*---*---* - // / | \ | \ | \ | \ - // / .*---*---*---*. \ - // * ` | \ | \ | \ | `* - // \`.*---*---*---*.`/ - // \ | \ | \ | \ | / - // *---*---*---* - // \ | \ | / - // *---* - // The first and last column have one position and fan to connect to the adjacent column. - // Each other vertical column contains an even number of positions. - const size = 2 * (numPts * (numPts + 2)); - const positions = addFillPositions ? new Array(size * 3) : undefined; - let positionIndex = 0; - let position = scratchCartesian1; - let reflectedPosition = scratchCartesian2; - - const outerPositionsLength = numPts * 4 * 3; - let outerRightIndex = outerPositionsLength - 1; - let outerLeftIndex = 0; - const outerPositions = addEdgePositions - ? new Array(outerPositionsLength) - : undefined; - - let i; - let j; - let numInterior; - let t; - let interiorPosition; - - // Compute points in the 'eastern' half of the ellipse - theta = Math$1.CesiumMath.PI_OVER_TWO; - position = pointOnEllipsoid( - theta, - rotation, - northVec, - eastVec, - aSqr, - ab, - bSqr, - mag, - unitPos, - position - ); - if (addFillPositions) { - positions[positionIndex++] = position.x; - positions[positionIndex++] = position.y; - positions[positionIndex++] = position.z; - } - if (addEdgePositions) { - outerPositions[outerRightIndex--] = position.z; - outerPositions[outerRightIndex--] = position.y; - outerPositions[outerRightIndex--] = position.x; - } - theta = Math$1.CesiumMath.PI_OVER_TWO - deltaTheta; - for (i = 1; i < numPts + 1; ++i) { - position = pointOnEllipsoid( - theta, - rotation, - northVec, - eastVec, - aSqr, - ab, - bSqr, - mag, - unitPos, - position - ); - reflectedPosition = pointOnEllipsoid( - Math.PI - theta, - rotation, - northVec, - eastVec, - aSqr, - ab, - bSqr, - mag, - unitPos, - reflectedPosition - ); - - if (addFillPositions) { - positions[positionIndex++] = position.x; - positions[positionIndex++] = position.y; - positions[positionIndex++] = position.z; - - numInterior = 2 * i + 2; - for (j = 1; j < numInterior - 1; ++j) { - t = j / (numInterior - 1); - interiorPosition = Matrix3.Cartesian3.lerp( - position, - reflectedPosition, - t, - scratchCartesian3 - ); - positions[positionIndex++] = interiorPosition.x; - positions[positionIndex++] = interiorPosition.y; - positions[positionIndex++] = interiorPosition.z; - } - - positions[positionIndex++] = reflectedPosition.x; - positions[positionIndex++] = reflectedPosition.y; - positions[positionIndex++] = reflectedPosition.z; - } - - if (addEdgePositions) { - outerPositions[outerRightIndex--] = position.z; - outerPositions[outerRightIndex--] = position.y; - outerPositions[outerRightIndex--] = position.x; - outerPositions[outerLeftIndex++] = reflectedPosition.x; - outerPositions[outerLeftIndex++] = reflectedPosition.y; - outerPositions[outerLeftIndex++] = reflectedPosition.z; - } - - theta = Math$1.CesiumMath.PI_OVER_TWO - (i + 1) * deltaTheta; - } - - // Compute points in the 'western' half of the ellipse - for (i = numPts; i > 1; --i) { - theta = Math$1.CesiumMath.PI_OVER_TWO - (i - 1) * deltaTheta; - - position = pointOnEllipsoid( - -theta, - rotation, - northVec, - eastVec, - aSqr, - ab, - bSqr, - mag, - unitPos, - position - ); - reflectedPosition = pointOnEllipsoid( - theta + Math.PI, - rotation, - northVec, - eastVec, - aSqr, - ab, - bSqr, - mag, - unitPos, - reflectedPosition - ); - - if (addFillPositions) { - positions[positionIndex++] = position.x; - positions[positionIndex++] = position.y; - positions[positionIndex++] = position.z; - - numInterior = 2 * (i - 1) + 2; - for (j = 1; j < numInterior - 1; ++j) { - t = j / (numInterior - 1); - interiorPosition = Matrix3.Cartesian3.lerp( - position, - reflectedPosition, - t, - scratchCartesian3 - ); - positions[positionIndex++] = interiorPosition.x; - positions[positionIndex++] = interiorPosition.y; - positions[positionIndex++] = interiorPosition.z; - } - - positions[positionIndex++] = reflectedPosition.x; - positions[positionIndex++] = reflectedPosition.y; - positions[positionIndex++] = reflectedPosition.z; - } - - if (addEdgePositions) { - outerPositions[outerRightIndex--] = position.z; - outerPositions[outerRightIndex--] = position.y; - outerPositions[outerRightIndex--] = position.x; - outerPositions[outerLeftIndex++] = reflectedPosition.x; - outerPositions[outerLeftIndex++] = reflectedPosition.y; - outerPositions[outerLeftIndex++] = reflectedPosition.z; - } - } - - theta = Math$1.CesiumMath.PI_OVER_TWO; - position = pointOnEllipsoid( - -theta, - rotation, - northVec, - eastVec, - aSqr, - ab, - bSqr, - mag, - unitPos, - position - ); - - const r = {}; - if (addFillPositions) { - positions[positionIndex++] = position.x; - positions[positionIndex++] = position.y; - positions[positionIndex++] = position.z; - r.positions = positions; - r.numPts = numPts; - } - if (addEdgePositions) { - outerPositions[outerRightIndex--] = position.z; - outerPositions[outerRightIndex--] = position.y; - outerPositions[outerRightIndex--] = position.x; - r.outerPositions = outerPositions; - } - - return r; - }; - var EllipseGeometryLibrary$1 = EllipseGeometryLibrary; - - exports.EllipseGeometryLibrary = EllipseGeometryLibrary$1; - -})); -//# sourceMappingURL=EllipseGeometryLibrary-d3f88cc2.js.map diff --git a/debug/cesium/Workers/EllipseGeometryLibrary-d3f88cc2.js.map b/debug/cesium/Workers/EllipseGeometryLibrary-d3f88cc2.js.map deleted file mode 100644 index 096a2bc..0000000 --- a/debug/cesium/Workers/EllipseGeometryLibrary-d3f88cc2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EllipseGeometryLibrary-d3f88cc2.js","sources":["../../../Source/Core/EllipseGeometryLibrary.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\n\r\nconst EllipseGeometryLibrary = {};\r\n\r\nconst rotAxis = new Cartesian3();\r\nconst tempVec = new Cartesian3();\r\nconst unitQuat = new Quaternion();\r\nconst rotMtx = new Matrix3();\r\n\r\nfunction pointOnEllipsoid(\r\n theta,\r\n rotation,\r\n northVec,\r\n eastVec,\r\n aSqr,\r\n ab,\r\n bSqr,\r\n mag,\r\n unitPos,\r\n result\r\n) {\r\n const azimuth = theta + rotation;\r\n\r\n Cartesian3.multiplyByScalar(eastVec, Math.cos(azimuth), rotAxis);\r\n Cartesian3.multiplyByScalar(northVec, Math.sin(azimuth), tempVec);\r\n Cartesian3.add(rotAxis, tempVec, rotAxis);\r\n\r\n let cosThetaSquared = Math.cos(theta);\r\n cosThetaSquared = cosThetaSquared * cosThetaSquared;\r\n\r\n let sinThetaSquared = Math.sin(theta);\r\n sinThetaSquared = sinThetaSquared * sinThetaSquared;\r\n\r\n const radius =\r\n ab / Math.sqrt(bSqr * cosThetaSquared + aSqr * sinThetaSquared);\r\n const angle = radius / mag;\r\n\r\n // Create the quaternion to rotate the position vector to the boundary of the ellipse.\r\n Quaternion.fromAxisAngle(rotAxis, angle, unitQuat);\r\n Matrix3.fromQuaternion(unitQuat, rotMtx);\r\n\r\n Matrix3.multiplyByVector(rotMtx, unitPos, result);\r\n Cartesian3.normalize(result, result);\r\n Cartesian3.multiplyByScalar(result, mag, result);\r\n return result;\r\n}\r\n\r\nconst scratchCartesian1 = new Cartesian3();\r\nconst scratchCartesian2 = new Cartesian3();\r\nconst scratchCartesian3 = new Cartesian3();\r\nconst scratchNormal = new Cartesian3();\r\n/**\r\n * Returns the positions raised to the given heights\r\n * @private\r\n */\r\nEllipseGeometryLibrary.raisePositionsToHeight = function (\r\n positions,\r\n options,\r\n extrude\r\n) {\r\n const ellipsoid = options.ellipsoid;\r\n const height = options.height;\r\n const extrudedHeight = options.extrudedHeight;\r\n const size = extrude ? (positions.length / 3) * 2 : positions.length / 3;\r\n\r\n const finalPositions = new Float64Array(size * 3);\r\n\r\n const length = positions.length;\r\n const bottomOffset = extrude ? length : 0;\r\n for (let i = 0; i < length; i += 3) {\r\n const i1 = i + 1;\r\n const i2 = i + 2;\r\n\r\n const position = Cartesian3.fromArray(positions, i, scratchCartesian1);\r\n ellipsoid.scaleToGeodeticSurface(position, position);\r\n\r\n const extrudedPosition = Cartesian3.clone(position, scratchCartesian2);\r\n const normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal);\r\n const scaledNormal = Cartesian3.multiplyByScalar(\r\n normal,\r\n height,\r\n scratchCartesian3\r\n );\r\n Cartesian3.add(position, scaledNormal, position);\r\n\r\n if (extrude) {\r\n Cartesian3.multiplyByScalar(normal, extrudedHeight, scaledNormal);\r\n Cartesian3.add(extrudedPosition, scaledNormal, extrudedPosition);\r\n\r\n finalPositions[i + bottomOffset] = extrudedPosition.x;\r\n finalPositions[i1 + bottomOffset] = extrudedPosition.y;\r\n finalPositions[i2 + bottomOffset] = extrudedPosition.z;\r\n }\r\n\r\n finalPositions[i] = position.x;\r\n finalPositions[i1] = position.y;\r\n finalPositions[i2] = position.z;\r\n }\r\n\r\n return finalPositions;\r\n};\r\n\r\nconst unitPosScratch = new Cartesian3();\r\nconst eastVecScratch = new Cartesian3();\r\nconst northVecScratch = new Cartesian3();\r\n/**\r\n * Returns an array of positions that make up the ellipse.\r\n * @private\r\n */\r\nEllipseGeometryLibrary.computeEllipsePositions = function (\r\n options,\r\n addFillPositions,\r\n addEdgePositions\r\n) {\r\n const semiMinorAxis = options.semiMinorAxis;\r\n const semiMajorAxis = options.semiMajorAxis;\r\n const rotation = options.rotation;\r\n const center = options.center;\r\n\r\n // Computing the arc-length of the ellipse is too expensive to be practical. Estimating it using the\r\n // arc length of the sphere is too inaccurate and creates sharp edges when either the semi-major or\r\n // semi-minor axis is much bigger than the other. Instead, scale the angle delta to make\r\n // the distance along the ellipse boundary more closely match the granularity.\r\n const granularity = options.granularity * 8.0;\r\n\r\n const aSqr = semiMinorAxis * semiMinorAxis;\r\n const bSqr = semiMajorAxis * semiMajorAxis;\r\n const ab = semiMajorAxis * semiMinorAxis;\r\n\r\n const mag = Cartesian3.magnitude(center);\r\n\r\n const unitPos = Cartesian3.normalize(center, unitPosScratch);\r\n let eastVec = Cartesian3.cross(Cartesian3.UNIT_Z, center, eastVecScratch);\r\n eastVec = Cartesian3.normalize(eastVec, eastVec);\r\n const northVec = Cartesian3.cross(unitPos, eastVec, northVecScratch);\r\n\r\n // The number of points in the first quadrant\r\n let numPts = 1 + Math.ceil(CesiumMath.PI_OVER_TWO / granularity);\r\n\r\n const deltaTheta = CesiumMath.PI_OVER_TWO / (numPts - 1);\r\n let theta = CesiumMath.PI_OVER_TWO - numPts * deltaTheta;\r\n if (theta < 0.0) {\r\n numPts -= Math.ceil(Math.abs(theta) / deltaTheta);\r\n }\r\n\r\n // If the number of points were three, the ellipse\r\n // would be tessellated like below:\r\n //\r\n // *---*\r\n // / | \\ | \\\r\n // *---*---*---*\r\n // / | \\ | \\ | \\ | \\\r\n // / .*---*---*---*. \\\r\n // * ` | \\ | \\ | \\ | `*\r\n // \\`.*---*---*---*.`/\r\n // \\ | \\ | \\ | \\ | /\r\n // *---*---*---*\r\n // \\ | \\ | /\r\n // *---*\r\n // The first and last column have one position and fan to connect to the adjacent column.\r\n // Each other vertical column contains an even number of positions.\r\n const size = 2 * (numPts * (numPts + 2));\r\n const positions = addFillPositions ? new Array(size * 3) : undefined;\r\n let positionIndex = 0;\r\n let position = scratchCartesian1;\r\n let reflectedPosition = scratchCartesian2;\r\n\r\n const outerPositionsLength = numPts * 4 * 3;\r\n let outerRightIndex = outerPositionsLength - 1;\r\n let outerLeftIndex = 0;\r\n const outerPositions = addEdgePositions\r\n ? new Array(outerPositionsLength)\r\n : undefined;\r\n\r\n let i;\r\n let j;\r\n let numInterior;\r\n let t;\r\n let interiorPosition;\r\n\r\n // Compute points in the 'eastern' half of the ellipse\r\n theta = CesiumMath.PI_OVER_TWO;\r\n position = pointOnEllipsoid(\r\n theta,\r\n rotation,\r\n northVec,\r\n eastVec,\r\n aSqr,\r\n ab,\r\n bSqr,\r\n mag,\r\n unitPos,\r\n position\r\n );\r\n if (addFillPositions) {\r\n positions[positionIndex++] = position.x;\r\n positions[positionIndex++] = position.y;\r\n positions[positionIndex++] = position.z;\r\n }\r\n if (addEdgePositions) {\r\n outerPositions[outerRightIndex--] = position.z;\r\n outerPositions[outerRightIndex--] = position.y;\r\n outerPositions[outerRightIndex--] = position.x;\r\n }\r\n theta = CesiumMath.PI_OVER_TWO - deltaTheta;\r\n for (i = 1; i < numPts + 1; ++i) {\r\n position = pointOnEllipsoid(\r\n theta,\r\n rotation,\r\n northVec,\r\n eastVec,\r\n aSqr,\r\n ab,\r\n bSqr,\r\n mag,\r\n unitPos,\r\n position\r\n );\r\n reflectedPosition = pointOnEllipsoid(\r\n Math.PI - theta,\r\n rotation,\r\n northVec,\r\n eastVec,\r\n aSqr,\r\n ab,\r\n bSqr,\r\n mag,\r\n unitPos,\r\n reflectedPosition\r\n );\r\n\r\n if (addFillPositions) {\r\n positions[positionIndex++] = position.x;\r\n positions[positionIndex++] = position.y;\r\n positions[positionIndex++] = position.z;\r\n\r\n numInterior = 2 * i + 2;\r\n for (j = 1; j < numInterior - 1; ++j) {\r\n t = j / (numInterior - 1);\r\n interiorPosition = Cartesian3.lerp(\r\n position,\r\n reflectedPosition,\r\n t,\r\n scratchCartesian3\r\n );\r\n positions[positionIndex++] = interiorPosition.x;\r\n positions[positionIndex++] = interiorPosition.y;\r\n positions[positionIndex++] = interiorPosition.z;\r\n }\r\n\r\n positions[positionIndex++] = reflectedPosition.x;\r\n positions[positionIndex++] = reflectedPosition.y;\r\n positions[positionIndex++] = reflectedPosition.z;\r\n }\r\n\r\n if (addEdgePositions) {\r\n outerPositions[outerRightIndex--] = position.z;\r\n outerPositions[outerRightIndex--] = position.y;\r\n outerPositions[outerRightIndex--] = position.x;\r\n outerPositions[outerLeftIndex++] = reflectedPosition.x;\r\n outerPositions[outerLeftIndex++] = reflectedPosition.y;\r\n outerPositions[outerLeftIndex++] = reflectedPosition.z;\r\n }\r\n\r\n theta = CesiumMath.PI_OVER_TWO - (i + 1) * deltaTheta;\r\n }\r\n\r\n // Compute points in the 'western' half of the ellipse\r\n for (i = numPts; i > 1; --i) {\r\n theta = CesiumMath.PI_OVER_TWO - (i - 1) * deltaTheta;\r\n\r\n position = pointOnEllipsoid(\r\n -theta,\r\n rotation,\r\n northVec,\r\n eastVec,\r\n aSqr,\r\n ab,\r\n bSqr,\r\n mag,\r\n unitPos,\r\n position\r\n );\r\n reflectedPosition = pointOnEllipsoid(\r\n theta + Math.PI,\r\n rotation,\r\n northVec,\r\n eastVec,\r\n aSqr,\r\n ab,\r\n bSqr,\r\n mag,\r\n unitPos,\r\n reflectedPosition\r\n );\r\n\r\n if (addFillPositions) {\r\n positions[positionIndex++] = position.x;\r\n positions[positionIndex++] = position.y;\r\n positions[positionIndex++] = position.z;\r\n\r\n numInterior = 2 * (i - 1) + 2;\r\n for (j = 1; j < numInterior - 1; ++j) {\r\n t = j / (numInterior - 1);\r\n interiorPosition = Cartesian3.lerp(\r\n position,\r\n reflectedPosition,\r\n t,\r\n scratchCartesian3\r\n );\r\n positions[positionIndex++] = interiorPosition.x;\r\n positions[positionIndex++] = interiorPosition.y;\r\n positions[positionIndex++] = interiorPosition.z;\r\n }\r\n\r\n positions[positionIndex++] = reflectedPosition.x;\r\n positions[positionIndex++] = reflectedPosition.y;\r\n positions[positionIndex++] = reflectedPosition.z;\r\n }\r\n\r\n if (addEdgePositions) {\r\n outerPositions[outerRightIndex--] = position.z;\r\n outerPositions[outerRightIndex--] = position.y;\r\n outerPositions[outerRightIndex--] = position.x;\r\n outerPositions[outerLeftIndex++] = reflectedPosition.x;\r\n outerPositions[outerLeftIndex++] = reflectedPosition.y;\r\n outerPositions[outerLeftIndex++] = reflectedPosition.z;\r\n }\r\n }\r\n\r\n theta = CesiumMath.PI_OVER_TWO;\r\n position = pointOnEllipsoid(\r\n -theta,\r\n rotation,\r\n northVec,\r\n eastVec,\r\n aSqr,\r\n ab,\r\n bSqr,\r\n mag,\r\n unitPos,\r\n position\r\n );\r\n\r\n const r = {};\r\n if (addFillPositions) {\r\n positions[positionIndex++] = position.x;\r\n positions[positionIndex++] = position.y;\r\n positions[positionIndex++] = position.z;\r\n r.positions = positions;\r\n r.numPts = numPts;\r\n }\r\n if (addEdgePositions) {\r\n outerPositions[outerRightIndex--] = position.z;\r\n outerPositions[outerRightIndex--] = position.y;\r\n outerPositions[outerRightIndex--] = position.x;\r\n r.outerPositions = outerPositions;\r\n }\r\n\r\n return r;\r\n};\r\nexport default EllipseGeometryLibrary;\r\n"],"names":["Cartesian3","Quaternion","Matrix3","CesiumMath"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/EllipseOutlineGeometry-ea3faee0.js b/debug/cesium/Workers/EllipseOutlineGeometry-ea3faee0.js deleted file mode 100644 index 0d1aa55..0000000 --- a/debug/cesium/Workers/EllipseOutlineGeometry-ea3faee0.js +++ /dev/null @@ -1,469 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix3-f22b0303', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './Check-d10e5f2e', './EllipseGeometryLibrary-d3f88cc2', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './Math-9be8b918'], (function (exports, Transforms, Matrix3, ComponentDatatype, defaultValue, Check, EllipseGeometryLibrary, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, Math$1) { 'use strict'; - - const scratchCartesian1 = new Matrix3.Cartesian3(); - let boundingSphereCenter = new Matrix3.Cartesian3(); - - function computeEllipse(options) { - const center = options.center; - boundingSphereCenter = Matrix3.Cartesian3.multiplyByScalar( - options.ellipsoid.geodeticSurfaceNormal(center, boundingSphereCenter), - options.height, - boundingSphereCenter - ); - boundingSphereCenter = Matrix3.Cartesian3.add( - center, - boundingSphereCenter, - boundingSphereCenter - ); - const boundingSphere = new Transforms.BoundingSphere( - boundingSphereCenter, - options.semiMajorAxis - ); - const positions = EllipseGeometryLibrary.EllipseGeometryLibrary.computeEllipsePositions( - options, - false, - true - ).outerPositions; - - const attributes = new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: EllipseGeometryLibrary.EllipseGeometryLibrary.raisePositionsToHeight( - positions, - options, - false - ), - }), - }); - - const length = positions.length / 3; - const indices = IndexDatatype.IndexDatatype.createTypedArray(length, length * 2); - let index = 0; - for (let i = 0; i < length; ++i) { - indices[index++] = i; - indices[index++] = (i + 1) % length; - } - - return { - boundingSphere: boundingSphere, - attributes: attributes, - indices: indices, - }; - } - - const topBoundingSphere = new Transforms.BoundingSphere(); - const bottomBoundingSphere = new Transforms.BoundingSphere(); - function computeExtrudedEllipse(options) { - const center = options.center; - const ellipsoid = options.ellipsoid; - const semiMajorAxis = options.semiMajorAxis; - let scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - ellipsoid.geodeticSurfaceNormal(center, scratchCartesian1), - options.height, - scratchCartesian1 - ); - topBoundingSphere.center = Matrix3.Cartesian3.add( - center, - scaledNormal, - topBoundingSphere.center - ); - topBoundingSphere.radius = semiMajorAxis; - - scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - ellipsoid.geodeticSurfaceNormal(center, scaledNormal), - options.extrudedHeight, - scaledNormal - ); - bottomBoundingSphere.center = Matrix3.Cartesian3.add( - center, - scaledNormal, - bottomBoundingSphere.center - ); - bottomBoundingSphere.radius = semiMajorAxis; - - let positions = EllipseGeometryLibrary.EllipseGeometryLibrary.computeEllipsePositions( - options, - false, - true - ).outerPositions; - const attributes = new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: EllipseGeometryLibrary.EllipseGeometryLibrary.raisePositionsToHeight( - positions, - options, - true - ), - }), - }); - - positions = attributes.position.values; - const boundingSphere = Transforms.BoundingSphere.union( - topBoundingSphere, - bottomBoundingSphere - ); - let length = positions.length / 3; - - if (defaultValue.defined(options.offsetAttribute)) { - let applyOffset = new Uint8Array(length); - if (options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - applyOffset = applyOffset.fill(1, 0, length / 2); - } else { - const offsetValue = - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - applyOffset = applyOffset.fill(offsetValue); - } - - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - let numberOfVerticalLines = defaultValue.defaultValue(options.numberOfVerticalLines, 16); - numberOfVerticalLines = Math$1.CesiumMath.clamp( - numberOfVerticalLines, - 0, - length / 2 - ); - - const indices = IndexDatatype.IndexDatatype.createTypedArray( - length, - length * 2 + numberOfVerticalLines * 2 - ); - - length /= 2; - let index = 0; - let i; - for (i = 0; i < length; ++i) { - indices[index++] = i; - indices[index++] = (i + 1) % length; - indices[index++] = i + length; - indices[index++] = ((i + 1) % length) + length; - } - - let numSide; - if (numberOfVerticalLines > 0) { - const numSideLines = Math.min(numberOfVerticalLines, length); - numSide = Math.round(length / numSideLines); - - const maxI = Math.min(numSide * numberOfVerticalLines, length); - for (i = 0; i < maxI; i += numSide) { - indices[index++] = i; - indices[index++] = i + length; - } - } - - return { - boundingSphere: boundingSphere, - attributes: attributes, - indices: indices, - }; - } - - /** - * A description of the outline of an ellipse on an ellipsoid. - * - * @alias EllipseOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.center The ellipse's center point in the fixed frame. - * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters. - * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on. - * @param {Number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface. - * @param {Number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface. - * @param {Number} [options.rotation=0.0] The angle from north (counter-clockwise) in radians. - * @param {Number} [options.granularity=0.02] The angular distance between points on the ellipse in radians. - * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surface of an extruded ellipse. - * - * @exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero. - * @exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis. - * @exception {DeveloperError} granularity must be greater than zero. - * - * @see EllipseOutlineGeometry.createGeometry - * - * @example - * const ellipse = new Cesium.EllipseOutlineGeometry({ - * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), - * semiMajorAxis : 500000.0, - * semiMinorAxis : 300000.0, - * rotation : Cesium.Math.toRadians(60.0) - * }); - * const geometry = Cesium.EllipseOutlineGeometry.createGeometry(ellipse); - */ - function EllipseOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const center = options.center; - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - const semiMajorAxis = options.semiMajorAxis; - const semiMinorAxis = options.semiMinorAxis; - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(center)) { - throw new Check.DeveloperError("center is required."); - } - if (!defaultValue.defined(semiMajorAxis)) { - throw new Check.DeveloperError("semiMajorAxis is required."); - } - if (!defaultValue.defined(semiMinorAxis)) { - throw new Check.DeveloperError("semiMinorAxis is required."); - } - if (semiMajorAxis < semiMinorAxis) { - throw new Check.DeveloperError( - "semiMajorAxis must be greater than or equal to the semiMinorAxis." - ); - } - if (granularity <= 0.0) { - throw new Check.DeveloperError("granularity must be greater than zero."); - } - //>>includeEnd('debug'); - - const height = defaultValue.defaultValue(options.height, 0.0); - const extrudedHeight = defaultValue.defaultValue(options.extrudedHeight, height); - - this._center = Matrix3.Cartesian3.clone(center); - this._semiMajorAxis = semiMajorAxis; - this._semiMinorAxis = semiMinorAxis; - this._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid); - this._rotation = defaultValue.defaultValue(options.rotation, 0.0); - this._height = Math.max(extrudedHeight, height); - this._granularity = granularity; - this._extrudedHeight = Math.min(extrudedHeight, height); - this._numberOfVerticalLines = Math.max( - defaultValue.defaultValue(options.numberOfVerticalLines, 16), - 0 - ); - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createEllipseOutlineGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - EllipseOutlineGeometry.packedLength = - Matrix3.Cartesian3.packedLength + Matrix3.Ellipsoid.packedLength + 8; - - /** - * Stores the provided instance into the provided array. - * - * @param {EllipseOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - EllipseOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix3.Cartesian3.pack(value._center, array, startingIndex); - startingIndex += Matrix3.Cartesian3.packedLength; - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - array[startingIndex++] = value._semiMajorAxis; - array[startingIndex++] = value._semiMinorAxis; - array[startingIndex++] = value._rotation; - array[startingIndex++] = value._height; - array[startingIndex++] = value._granularity; - array[startingIndex++] = value._extrudedHeight; - array[startingIndex++] = value._numberOfVerticalLines; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchCenter = new Matrix3.Cartesian3(); - const scratchEllipsoid = new Matrix3.Ellipsoid(); - const scratchOptions = { - center: scratchCenter, - ellipsoid: scratchEllipsoid, - semiMajorAxis: undefined, - semiMinorAxis: undefined, - rotation: undefined, - height: undefined, - granularity: undefined, - extrudedHeight: undefined, - numberOfVerticalLines: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {EllipseOutlineGeometry} [result] The object into which to store the result. - * @returns {EllipseOutlineGeometry} The modified result parameter or a new EllipseOutlineGeometry instance if one was not provided. - */ - EllipseOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const center = Matrix3.Cartesian3.unpack(array, startingIndex, scratchCenter); - startingIndex += Matrix3.Cartesian3.packedLength; - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const semiMajorAxis = array[startingIndex++]; - const semiMinorAxis = array[startingIndex++]; - const rotation = array[startingIndex++]; - const height = array[startingIndex++]; - const granularity = array[startingIndex++]; - const extrudedHeight = array[startingIndex++]; - const numberOfVerticalLines = array[startingIndex++]; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.height = height; - scratchOptions.extrudedHeight = extrudedHeight; - scratchOptions.granularity = granularity; - scratchOptions.rotation = rotation; - scratchOptions.semiMajorAxis = semiMajorAxis; - scratchOptions.semiMinorAxis = semiMinorAxis; - scratchOptions.numberOfVerticalLines = numberOfVerticalLines; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return new EllipseOutlineGeometry(scratchOptions); - } - - result._center = Matrix3.Cartesian3.clone(center, result._center); - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._semiMajorAxis = semiMajorAxis; - result._semiMinorAxis = semiMinorAxis; - result._rotation = rotation; - result._height = height; - result._granularity = granularity; - result._extrudedHeight = extrudedHeight; - result._numberOfVerticalLines = numberOfVerticalLines; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the geometric representation of an outline of an ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere. - * - * @param {EllipseOutlineGeometry} ellipseGeometry A description of the ellipse. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - EllipseOutlineGeometry.createGeometry = function (ellipseGeometry) { - if ( - ellipseGeometry._semiMajorAxis <= 0.0 || - ellipseGeometry._semiMinorAxis <= 0.0 - ) { - return; - } - - const height = ellipseGeometry._height; - const extrudedHeight = ellipseGeometry._extrudedHeight; - const extrude = !Math$1.CesiumMath.equalsEpsilon( - height, - extrudedHeight, - 0, - Math$1.CesiumMath.EPSILON2 - ); - - ellipseGeometry._center = ellipseGeometry._ellipsoid.scaleToGeodeticSurface( - ellipseGeometry._center, - ellipseGeometry._center - ); - const options = { - center: ellipseGeometry._center, - semiMajorAxis: ellipseGeometry._semiMajorAxis, - semiMinorAxis: ellipseGeometry._semiMinorAxis, - ellipsoid: ellipseGeometry._ellipsoid, - rotation: ellipseGeometry._rotation, - height: height, - granularity: ellipseGeometry._granularity, - numberOfVerticalLines: ellipseGeometry._numberOfVerticalLines, - }; - let geometry; - if (extrude) { - options.extrudedHeight = extrudedHeight; - options.offsetAttribute = ellipseGeometry._offsetAttribute; - geometry = computeExtrudedEllipse(options); - } else { - geometry = computeEllipse(options); - - if (defaultValue.defined(ellipseGeometry._offsetAttribute)) { - const length = geometry.attributes.position.values.length; - const offsetValue = - ellipseGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - } - - return new GeometryAttribute.Geometry({ - attributes: geometry.attributes, - indices: geometry.indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: geometry.boundingSphere, - offsetAttribute: ellipseGeometry._offsetAttribute, - }); - }; - - exports.EllipseOutlineGeometry = EllipseOutlineGeometry; - -})); -//# sourceMappingURL=EllipseOutlineGeometry-ea3faee0.js.map diff --git a/debug/cesium/Workers/EllipseOutlineGeometry-ea3faee0.js.map b/debug/cesium/Workers/EllipseOutlineGeometry-ea3faee0.js.map deleted file mode 100644 index a2d369e..0000000 --- a/debug/cesium/Workers/EllipseOutlineGeometry-ea3faee0.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EllipseOutlineGeometry-ea3faee0.js","sources":["../../../Source/Core/EllipseOutlineGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport EllipseGeometryLibrary from \"./EllipseGeometryLibrary.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\n\r\nconst scratchCartesian1 = new Cartesian3();\r\nlet boundingSphereCenter = new Cartesian3();\r\n\r\nfunction computeEllipse(options) {\r\n const center = options.center;\r\n boundingSphereCenter = Cartesian3.multiplyByScalar(\r\n options.ellipsoid.geodeticSurfaceNormal(center, boundingSphereCenter),\r\n options.height,\r\n boundingSphereCenter\r\n );\r\n boundingSphereCenter = Cartesian3.add(\r\n center,\r\n boundingSphereCenter,\r\n boundingSphereCenter\r\n );\r\n const boundingSphere = new BoundingSphere(\r\n boundingSphereCenter,\r\n options.semiMajorAxis\r\n );\r\n const positions = EllipseGeometryLibrary.computeEllipsePositions(\r\n options,\r\n false,\r\n true\r\n ).outerPositions;\r\n\r\n const attributes = new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: EllipseGeometryLibrary.raisePositionsToHeight(\r\n positions,\r\n options,\r\n false\r\n ),\r\n }),\r\n });\r\n\r\n const length = positions.length / 3;\r\n const indices = IndexDatatype.createTypedArray(length, length * 2);\r\n let index = 0;\r\n for (let i = 0; i < length; ++i) {\r\n indices[index++] = i;\r\n indices[index++] = (i + 1) % length;\r\n }\r\n\r\n return {\r\n boundingSphere: boundingSphere,\r\n attributes: attributes,\r\n indices: indices,\r\n };\r\n}\r\n\r\nconst topBoundingSphere = new BoundingSphere();\r\nconst bottomBoundingSphere = new BoundingSphere();\r\nfunction computeExtrudedEllipse(options) {\r\n const center = options.center;\r\n const ellipsoid = options.ellipsoid;\r\n const semiMajorAxis = options.semiMajorAxis;\r\n let scaledNormal = Cartesian3.multiplyByScalar(\r\n ellipsoid.geodeticSurfaceNormal(center, scratchCartesian1),\r\n options.height,\r\n scratchCartesian1\r\n );\r\n topBoundingSphere.center = Cartesian3.add(\r\n center,\r\n scaledNormal,\r\n topBoundingSphere.center\r\n );\r\n topBoundingSphere.radius = semiMajorAxis;\r\n\r\n scaledNormal = Cartesian3.multiplyByScalar(\r\n ellipsoid.geodeticSurfaceNormal(center, scaledNormal),\r\n options.extrudedHeight,\r\n scaledNormal\r\n );\r\n bottomBoundingSphere.center = Cartesian3.add(\r\n center,\r\n scaledNormal,\r\n bottomBoundingSphere.center\r\n );\r\n bottomBoundingSphere.radius = semiMajorAxis;\r\n\r\n let positions = EllipseGeometryLibrary.computeEllipsePositions(\r\n options,\r\n false,\r\n true\r\n ).outerPositions;\r\n const attributes = new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: EllipseGeometryLibrary.raisePositionsToHeight(\r\n positions,\r\n options,\r\n true\r\n ),\r\n }),\r\n });\r\n\r\n positions = attributes.position.values;\r\n const boundingSphere = BoundingSphere.union(\r\n topBoundingSphere,\r\n bottomBoundingSphere\r\n );\r\n let length = positions.length / 3;\r\n\r\n if (defined(options.offsetAttribute)) {\r\n let applyOffset = new Uint8Array(length);\r\n if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\r\n applyOffset = applyOffset.fill(1, 0, length / 2);\r\n } else {\r\n const offsetValue =\r\n options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n applyOffset = applyOffset.fill(offsetValue);\r\n }\r\n\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n let numberOfVerticalLines = defaultValue(options.numberOfVerticalLines, 16);\r\n numberOfVerticalLines = CesiumMath.clamp(\r\n numberOfVerticalLines,\r\n 0,\r\n length / 2\r\n );\r\n\r\n const indices = IndexDatatype.createTypedArray(\r\n length,\r\n length * 2 + numberOfVerticalLines * 2\r\n );\r\n\r\n length /= 2;\r\n let index = 0;\r\n let i;\r\n for (i = 0; i < length; ++i) {\r\n indices[index++] = i;\r\n indices[index++] = (i + 1) % length;\r\n indices[index++] = i + length;\r\n indices[index++] = ((i + 1) % length) + length;\r\n }\r\n\r\n let numSide;\r\n if (numberOfVerticalLines > 0) {\r\n const numSideLines = Math.min(numberOfVerticalLines, length);\r\n numSide = Math.round(length / numSideLines);\r\n\r\n const maxI = Math.min(numSide * numberOfVerticalLines, length);\r\n for (i = 0; i < maxI; i += numSide) {\r\n indices[index++] = i;\r\n indices[index++] = i + length;\r\n }\r\n }\r\n\r\n return {\r\n boundingSphere: boundingSphere,\r\n attributes: attributes,\r\n indices: indices,\r\n };\r\n}\r\n\r\n/**\r\n * A description of the outline of an ellipse on an ellipsoid.\r\n *\r\n * @alias EllipseOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.center The ellipse's center point in the fixed frame.\r\n * @param {Number} options.semiMajorAxis The length of the ellipse's semi-major axis in meters.\r\n * @param {Number} options.semiMinorAxis The length of the ellipse's semi-minor axis in meters.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the ellipse will be on.\r\n * @param {Number} [options.height=0.0] The distance in meters between the ellipse and the ellipsoid surface.\r\n * @param {Number} [options.extrudedHeight] The distance in meters between the ellipse's extruded face and the ellipsoid surface.\r\n * @param {Number} [options.rotation=0.0] The angle from north (counter-clockwise) in radians.\r\n * @param {Number} [options.granularity=0.02] The angular distance between points on the ellipse in radians.\r\n * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surface of an extruded ellipse.\r\n *\r\n * @exception {DeveloperError} semiMajorAxis and semiMinorAxis must be greater than zero.\r\n * @exception {DeveloperError} semiMajorAxis must be greater than or equal to the semiMinorAxis.\r\n * @exception {DeveloperError} granularity must be greater than zero.\r\n *\r\n * @see EllipseOutlineGeometry.createGeometry\r\n *\r\n * @example\r\n * const ellipse = new Cesium.EllipseOutlineGeometry({\r\n * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\r\n * semiMajorAxis : 500000.0,\r\n * semiMinorAxis : 300000.0,\r\n * rotation : Cesium.Math.toRadians(60.0)\r\n * });\r\n * const geometry = Cesium.EllipseOutlineGeometry.createGeometry(ellipse);\r\n */\r\nfunction EllipseOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const center = options.center;\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n const semiMajorAxis = options.semiMajorAxis;\r\n const semiMinorAxis = options.semiMinorAxis;\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(center)) {\r\n throw new DeveloperError(\"center is required.\");\r\n }\r\n if (!defined(semiMajorAxis)) {\r\n throw new DeveloperError(\"semiMajorAxis is required.\");\r\n }\r\n if (!defined(semiMinorAxis)) {\r\n throw new DeveloperError(\"semiMinorAxis is required.\");\r\n }\r\n if (semiMajorAxis < semiMinorAxis) {\r\n throw new DeveloperError(\r\n \"semiMajorAxis must be greater than or equal to the semiMinorAxis.\"\r\n );\r\n }\r\n if (granularity <= 0.0) {\r\n throw new DeveloperError(\"granularity must be greater than zero.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const height = defaultValue(options.height, 0.0);\r\n const extrudedHeight = defaultValue(options.extrudedHeight, height);\r\n\r\n this._center = Cartesian3.clone(center);\r\n this._semiMajorAxis = semiMajorAxis;\r\n this._semiMinorAxis = semiMinorAxis;\r\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\r\n this._rotation = defaultValue(options.rotation, 0.0);\r\n this._height = Math.max(extrudedHeight, height);\r\n this._granularity = granularity;\r\n this._extrudedHeight = Math.min(extrudedHeight, height);\r\n this._numberOfVerticalLines = Math.max(\r\n defaultValue(options.numberOfVerticalLines, 16),\r\n 0\r\n );\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createEllipseOutlineGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nEllipseOutlineGeometry.packedLength =\r\n Cartesian3.packedLength + Ellipsoid.packedLength + 8;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {EllipseOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nEllipseOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Cartesian3.pack(value._center, array, startingIndex);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n array[startingIndex++] = value._semiMajorAxis;\r\n array[startingIndex++] = value._semiMinorAxis;\r\n array[startingIndex++] = value._rotation;\r\n array[startingIndex++] = value._height;\r\n array[startingIndex++] = value._granularity;\r\n array[startingIndex++] = value._extrudedHeight;\r\n array[startingIndex++] = value._numberOfVerticalLines;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchCenter = new Cartesian3();\r\nconst scratchEllipsoid = new Ellipsoid();\r\nconst scratchOptions = {\r\n center: scratchCenter,\r\n ellipsoid: scratchEllipsoid,\r\n semiMajorAxis: undefined,\r\n semiMinorAxis: undefined,\r\n rotation: undefined,\r\n height: undefined,\r\n granularity: undefined,\r\n extrudedHeight: undefined,\r\n numberOfVerticalLines: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {EllipseOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {EllipseOutlineGeometry} The modified result parameter or a new EllipseOutlineGeometry instance if one was not provided.\r\n */\r\nEllipseOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const center = Cartesian3.unpack(array, startingIndex, scratchCenter);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const semiMajorAxis = array[startingIndex++];\r\n const semiMinorAxis = array[startingIndex++];\r\n const rotation = array[startingIndex++];\r\n const height = array[startingIndex++];\r\n const granularity = array[startingIndex++];\r\n const extrudedHeight = array[startingIndex++];\r\n const numberOfVerticalLines = array[startingIndex++];\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.height = height;\r\n scratchOptions.extrudedHeight = extrudedHeight;\r\n scratchOptions.granularity = granularity;\r\n scratchOptions.rotation = rotation;\r\n scratchOptions.semiMajorAxis = semiMajorAxis;\r\n scratchOptions.semiMinorAxis = semiMinorAxis;\r\n scratchOptions.numberOfVerticalLines = numberOfVerticalLines;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return new EllipseOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._center = Cartesian3.clone(center, result._center);\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._semiMajorAxis = semiMajorAxis;\r\n result._semiMinorAxis = semiMinorAxis;\r\n result._rotation = rotation;\r\n result._height = height;\r\n result._granularity = granularity;\r\n result._extrudedHeight = extrudedHeight;\r\n result._numberOfVerticalLines = numberOfVerticalLines;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an outline of an ellipse on an ellipsoid, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {EllipseOutlineGeometry} ellipseGeometry A description of the ellipse.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nEllipseOutlineGeometry.createGeometry = function (ellipseGeometry) {\r\n if (\r\n ellipseGeometry._semiMajorAxis <= 0.0 ||\r\n ellipseGeometry._semiMinorAxis <= 0.0\r\n ) {\r\n return;\r\n }\r\n\r\n const height = ellipseGeometry._height;\r\n const extrudedHeight = ellipseGeometry._extrudedHeight;\r\n const extrude = !CesiumMath.equalsEpsilon(\r\n height,\r\n extrudedHeight,\r\n 0,\r\n CesiumMath.EPSILON2\r\n );\r\n\r\n ellipseGeometry._center = ellipseGeometry._ellipsoid.scaleToGeodeticSurface(\r\n ellipseGeometry._center,\r\n ellipseGeometry._center\r\n );\r\n const options = {\r\n center: ellipseGeometry._center,\r\n semiMajorAxis: ellipseGeometry._semiMajorAxis,\r\n semiMinorAxis: ellipseGeometry._semiMinorAxis,\r\n ellipsoid: ellipseGeometry._ellipsoid,\r\n rotation: ellipseGeometry._rotation,\r\n height: height,\r\n granularity: ellipseGeometry._granularity,\r\n numberOfVerticalLines: ellipseGeometry._numberOfVerticalLines,\r\n };\r\n let geometry;\r\n if (extrude) {\r\n options.extrudedHeight = extrudedHeight;\r\n options.offsetAttribute = ellipseGeometry._offsetAttribute;\r\n geometry = computeExtrudedEllipse(options);\r\n } else {\r\n geometry = computeEllipse(options);\r\n\r\n if (defined(ellipseGeometry._offsetAttribute)) {\r\n const length = geometry.attributes.position.values.length;\r\n const offsetValue =\r\n ellipseGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n geometry.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n }\r\n\r\n return new Geometry({\r\n attributes: geometry.attributes,\r\n indices: geometry.indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: geometry.boundingSphere,\r\n offsetAttribute: ellipseGeometry._offsetAttribute,\r\n });\r\n};\r\nexport default EllipseOutlineGeometry;\r\n"],"names":["Cartesian3","BoundingSphere","EllipseGeometryLibrary","GeometryAttributes","GeometryAttribute","ComponentDatatype","IndexDatatype","defined","GeometryOffsetAttribute","defaultValue","CesiumMath","Ellipsoid","DeveloperError","Geometry","PrimitiveType"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,MAAM,iBAAiB,GAAG,IAAIA,kBAAU,EAAE,CAAC;EAC3C,IAAI,oBAAoB,GAAG,IAAIA,kBAAU,EAAE,CAAC;AAC5C;EACA,SAAS,cAAc,CAAC,OAAO,EAAE;EACjC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;EAChC,EAAE,oBAAoB,GAAGA,kBAAU,CAAC,gBAAgB;EACpD,IAAI,OAAO,CAAC,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,oBAAoB,CAAC;EACzE,IAAI,OAAO,CAAC,MAAM;EAClB,IAAI,oBAAoB;EACxB,GAAG,CAAC;EACJ,EAAE,oBAAoB,GAAGA,kBAAU,CAAC,GAAG;EACvC,IAAI,MAAM;EACV,IAAI,oBAAoB;EACxB,IAAI,oBAAoB;EACxB,GAAG,CAAC;EACJ,EAAE,MAAM,cAAc,GAAG,IAAIC,yBAAc;EAC3C,IAAI,oBAAoB;EACxB,IAAI,OAAO,CAAC,aAAa;EACzB,GAAG,CAAC;EACJ,EAAE,MAAM,SAAS,GAAGC,6CAAsB,CAAC,uBAAuB;EAClE,IAAI,OAAO;EACX,IAAI,KAAK;EACT,IAAI,IAAI;EACR,GAAG,CAAC,cAAc,CAAC;AACnB;EACA,EAAE,MAAM,UAAU,GAAG,IAAIC,qCAAkB,CAAC;EAC5C,IAAI,QAAQ,EAAE,IAAIC,mCAAiB,CAAC;EACpC,MAAM,iBAAiB,EAAEC,mCAAiB,CAAC,MAAM;EACjD,MAAM,sBAAsB,EAAE,CAAC;EAC/B,MAAM,MAAM,EAAEH,6CAAsB,CAAC,sBAAsB;EAC3D,QAAQ,SAAS;EACjB,QAAQ,OAAO;EACf,QAAQ,KAAK;EACb,OAAO;EACP,KAAK,CAAC;EACN,GAAG,CAAC,CAAC;AACL;EACA,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;EACtC,EAAE,MAAM,OAAO,GAAGI,2BAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;EACrE,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EACnC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;EACzB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;EACxC,GAAG;AACH;EACA,EAAE,OAAO;EACT,IAAI,cAAc,EAAE,cAAc;EAClC,IAAI,UAAU,EAAE,UAAU;EAC1B,IAAI,OAAO,EAAE,OAAO;EACpB,GAAG,CAAC;EACJ,CAAC;AACD;EACA,MAAM,iBAAiB,GAAG,IAAIL,yBAAc,EAAE,CAAC;EAC/C,MAAM,oBAAoB,GAAG,IAAIA,yBAAc,EAAE,CAAC;EAClD,SAAS,sBAAsB,CAAC,OAAO,EAAE;EACzC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;EAChC,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;EACtC,EAAE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;EAC9C,EAAE,IAAI,YAAY,GAAGD,kBAAU,CAAC,gBAAgB;EAChD,IAAI,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,CAAC;EAC9D,IAAI,OAAO,CAAC,MAAM;EAClB,IAAI,iBAAiB;EACrB,GAAG,CAAC;EACJ,EAAE,iBAAiB,CAAC,MAAM,GAAGA,kBAAU,CAAC,GAAG;EAC3C,IAAI,MAAM;EACV,IAAI,YAAY;EAChB,IAAI,iBAAiB,CAAC,MAAM;EAC5B,GAAG,CAAC;EACJ,EAAE,iBAAiB,CAAC,MAAM,GAAG,aAAa,CAAC;AAC3C;EACA,EAAE,YAAY,GAAGA,kBAAU,CAAC,gBAAgB;EAC5C,IAAI,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,YAAY,CAAC;EACzD,IAAI,OAAO,CAAC,cAAc;EAC1B,IAAI,YAAY;EAChB,GAAG,CAAC;EACJ,EAAE,oBAAoB,CAAC,MAAM,GAAGA,kBAAU,CAAC,GAAG;EAC9C,IAAI,MAAM;EACV,IAAI,YAAY;EAChB,IAAI,oBAAoB,CAAC,MAAM;EAC/B,GAAG,CAAC;EACJ,EAAE,oBAAoB,CAAC,MAAM,GAAG,aAAa,CAAC;AAC9C;EACA,EAAE,IAAI,SAAS,GAAGE,6CAAsB,CAAC,uBAAuB;EAChE,IAAI,OAAO;EACX,IAAI,KAAK;EACT,IAAI,IAAI;EACR,GAAG,CAAC,cAAc,CAAC;EACnB,EAAE,MAAM,UAAU,GAAG,IAAIC,qCAAkB,CAAC;EAC5C,IAAI,QAAQ,EAAE,IAAIC,mCAAiB,CAAC;EACpC,MAAM,iBAAiB,EAAEC,mCAAiB,CAAC,MAAM;EACjD,MAAM,sBAAsB,EAAE,CAAC;EAC/B,MAAM,MAAM,EAAEH,6CAAsB,CAAC,sBAAsB;EAC3D,QAAQ,SAAS;EACjB,QAAQ,OAAO;EACf,QAAQ,IAAI;EACZ,OAAO;EACP,KAAK,CAAC;EACN,GAAG,CAAC,CAAC;AACL;EACA,EAAE,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;EACzC,EAAE,MAAM,cAAc,GAAGD,yBAAc,CAAC,KAAK;EAC7C,IAAI,iBAAiB;EACrB,IAAI,oBAAoB;EACxB,GAAG,CAAC;EACJ,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC;EACA,EAAE,IAAIM,oBAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;EACxC,IAAI,IAAI,WAAW,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;EAC7C,IAAI,IAAI,OAAO,CAAC,eAAe,KAAKC,+CAAuB,CAAC,GAAG,EAAE;EACjE,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;EACvD,KAAK,MAAM;EACX,MAAM,MAAM,WAAW;EACvB,QAAQ,OAAO,CAAC,eAAe,KAAKA,+CAAuB,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;EACzE,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;EAClD,KAAK;AACL;EACA,IAAI,UAAU,CAAC,WAAW,GAAG,IAAIJ,mCAAiB,CAAC;EACnD,MAAM,iBAAiB,EAAEC,mCAAiB,CAAC,aAAa;EACxD,MAAM,sBAAsB,EAAE,CAAC;EAC/B,MAAM,MAAM,EAAE,WAAW;EACzB,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,IAAI,qBAAqB,GAAGI,yBAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;EAC9E,EAAE,qBAAqB,GAAGC,iBAAU,CAAC,KAAK;EAC1C,IAAI,qBAAqB;EACzB,IAAI,CAAC;EACL,IAAI,MAAM,GAAG,CAAC;EACd,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,OAAO,GAAGJ,2BAAa,CAAC,gBAAgB;EAChD,IAAI,MAAM;EACV,IAAI,MAAM,GAAG,CAAC,GAAG,qBAAqB,GAAG,CAAC;EAC1C,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,IAAI,CAAC,CAAC;EACd,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,IAAI,CAAC,CAAC;EACR,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EAC/B,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;EACzB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC;EACxC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;EAClC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,MAAM,CAAC;EACnD,GAAG;AACH;EACA,EAAE,IAAI,OAAO,CAAC;EACd,EAAE,IAAI,qBAAqB,GAAG,CAAC,EAAE;EACjC,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;EACjE,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC;AAChD;EACA,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,qBAAqB,EAAE,MAAM,CAAC,CAAC;EACnE,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,OAAO,EAAE;EACxC,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;EAC3B,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;EACpC,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO;EACT,IAAI,cAAc,EAAE,cAAc;EAClC,IAAI,UAAU,EAAE,UAAU;EAC1B,IAAI,OAAO,EAAE,OAAO;EACpB,GAAG,CAAC;EACJ,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,sBAAsB,CAAC,OAAO,EAAE;EACzC,EAAE,OAAO,GAAGG,yBAAY,CAAC,OAAO,EAAEA,yBAAY,CAAC,YAAY,CAAC,CAAC;AAC7D;EACA,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;EAChC,EAAE,MAAM,SAAS,GAAGA,yBAAY,CAAC,OAAO,CAAC,SAAS,EAAEE,iBAAS,CAAC,KAAK,CAAC,CAAC;EACrE,EAAE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;EAC9C,EAAE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;EAC9C,EAAE,MAAM,WAAW,GAAGF,yBAAY;EAClC,IAAI,OAAO,CAAC,WAAW;EACvB,IAAIC,iBAAU,CAAC,kBAAkB;EACjC,GAAG,CAAC;AACJ;EACA;EACA,EAAE,IAAI,CAACH,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,IAAIK,oBAAc,CAAC,qBAAqB,CAAC,CAAC;EACpD,GAAG;EACH,EAAE,IAAI,CAACL,oBAAO,CAAC,aAAa,CAAC,EAAE;EAC/B,IAAI,MAAM,IAAIK,oBAAc,CAAC,4BAA4B,CAAC,CAAC;EAC3D,GAAG;EACH,EAAE,IAAI,CAACL,oBAAO,CAAC,aAAa,CAAC,EAAE;EAC/B,IAAI,MAAM,IAAIK,oBAAc,CAAC,4BAA4B,CAAC,CAAC;EAC3D,GAAG;EACH,EAAE,IAAI,aAAa,GAAG,aAAa,EAAE;EACrC,IAAI,MAAM,IAAIA,oBAAc;EAC5B,MAAM,mEAAmE;EACzE,KAAK,CAAC;EACN,GAAG;EACH,EAAE,IAAI,WAAW,IAAI,GAAG,EAAE;EAC1B,IAAI,MAAM,IAAIA,oBAAc,CAAC,wCAAwC,CAAC,CAAC;EACvE,GAAG;EACH;AACA;EACA,EAAE,MAAM,MAAM,GAAGH,yBAAY,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EACnD,EAAE,MAAM,cAAc,GAAGA,yBAAY,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;AACtE;EACA,EAAE,IAAI,CAAC,OAAO,GAAGT,kBAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;EAC1C,EAAE,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;EACtC,EAAE,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;EACtC,EAAE,IAAI,CAAC,UAAU,GAAGW,iBAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC/C,EAAE,IAAI,CAAC,SAAS,GAAGF,yBAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;EACvD,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;EAClD,EAAE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;EAClC,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;EAC1D,EAAE,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG;EACxC,IAAIA,yBAAY,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;EACnD,IAAI,CAAC;EACL,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC;EAClD,EAAE,IAAI,CAAC,WAAW,GAAG,8BAA8B,CAAC;EACpD,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,sBAAsB,CAAC,YAAY;EACnC,EAAET,kBAAU,CAAC,YAAY,GAAGW,iBAAS,CAAC,YAAY,GAAG,CAAC,CAAC;AACvD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,sBAAsB,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;EACrE;EACA,EAAE,IAAI,CAACJ,oBAAO,CAAC,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAIK,oBAAc,CAAC,mBAAmB,CAAC,CAAC;EAClD,GAAG;EACH,EAAE,IAAI,CAACL,oBAAO,CAAC,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAIK,oBAAc,CAAC,mBAAmB,CAAC,CAAC;EAClD,GAAG;EACH;AACA;EACA,EAAE,aAAa,GAAGH,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAET,kBAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;EACvD,EAAE,aAAa,IAAIA,kBAAU,CAAC,YAAY,CAAC;AAC3C;EACA,EAAEW,iBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;EACzD,EAAE,aAAa,IAAIA,iBAAS,CAAC,YAAY,CAAC;AAC1C;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;EAChD,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC;EAChD,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;EAC3C,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;EACzC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;EAC9C,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;EACjD,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,sBAAsB,CAAC;EACxD,EAAE,KAAK,CAAC,aAAa,CAAC,GAAGF,yBAAY,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC,CAAC;AACF;EACA,MAAM,aAAa,GAAG,IAAIT,kBAAU,EAAE,CAAC;EACvC,MAAM,gBAAgB,GAAG,IAAIW,iBAAS,EAAE,CAAC;EACzC,MAAM,cAAc,GAAG;EACvB,EAAE,MAAM,EAAE,aAAa;EACvB,EAAE,SAAS,EAAE,gBAAgB;EAC7B,EAAE,aAAa,EAAE,SAAS;EAC1B,EAAE,aAAa,EAAE,SAAS;EAC1B,EAAE,QAAQ,EAAE,SAAS;EACrB,EAAE,MAAM,EAAE,SAAS;EACnB,EAAE,WAAW,EAAE,SAAS;EACxB,EAAE,cAAc,EAAE,SAAS;EAC3B,EAAE,qBAAqB,EAAE,SAAS;EAClC,EAAE,eAAe,EAAE,SAAS;EAC5B,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,sBAAsB,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;EACxE;EACA,EAAE,IAAI,CAACJ,oBAAO,CAAC,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAIK,oBAAc,CAAC,mBAAmB,CAAC,CAAC;EAClD,GAAG;EACH;AACA;EACA,EAAE,aAAa,GAAGH,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAE,MAAM,MAAM,GAAGT,kBAAU,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC;EACxE,EAAE,aAAa,IAAIA,kBAAU,CAAC,YAAY,CAAC;AAC3C;EACA,EAAE,MAAM,SAAS,GAAGW,iBAAS,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;EAC7E,EAAE,aAAa,IAAIA,iBAAS,CAAC,YAAY,CAAC;AAC1C;EACA,EAAE,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EAC/C,EAAE,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EAC/C,EAAE,MAAM,QAAQ,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EAC1C,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACxC,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EAC7C,EAAE,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EAChD,EAAE,MAAM,qBAAqB,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACvD,EAAE,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAC/C;EACA,EAAE,IAAI,CAACJ,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,cAAc,CAAC,MAAM,GAAG,MAAM,CAAC;EACnC,IAAI,cAAc,CAAC,cAAc,GAAG,cAAc,CAAC;EACnD,IAAI,cAAc,CAAC,WAAW,GAAG,WAAW,CAAC;EAC7C,IAAI,cAAc,CAAC,QAAQ,GAAG,QAAQ,CAAC;EACvC,IAAI,cAAc,CAAC,aAAa,GAAG,aAAa,CAAC;EACjD,IAAI,cAAc,CAAC,aAAa,GAAG,aAAa,CAAC;EACjD,IAAI,cAAc,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;EACjE,IAAI,cAAc,CAAC,eAAe;EAClC,MAAM,eAAe,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,eAAe,CAAC;AAC3D;EACA,IAAI,OAAO,IAAI,sBAAsB,CAAC,cAAc,CAAC,CAAC;EACtD,GAAG;AACH;EACA,EAAE,MAAM,CAAC,OAAO,GAAGP,kBAAU,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;EAC5D,EAAE,MAAM,CAAC,UAAU,GAAGW,iBAAS,CAAC,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;EACpE,EAAE,MAAM,CAAC,cAAc,GAAG,aAAa,CAAC;EACxC,EAAE,MAAM,CAAC,cAAc,GAAG,aAAa,CAAC;EACxC,EAAE,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;EAC9B,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;EAC1B,EAAE,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC;EACpC,EAAE,MAAM,CAAC,eAAe,GAAG,cAAc,CAAC;EAC1C,EAAE,MAAM,CAAC,sBAAsB,GAAG,qBAAqB,CAAC;EACxD,EAAE,MAAM,CAAC,gBAAgB;EACzB,IAAI,eAAe,KAAK,CAAC,CAAC,GAAG,SAAS,GAAG,eAAe,CAAC;AACzD;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,sBAAsB,CAAC,cAAc,GAAG,UAAU,eAAe,EAAE;EACnE,EAAE;EACF,IAAI,eAAe,CAAC,cAAc,IAAI,GAAG;EACzC,IAAI,eAAe,CAAC,cAAc,IAAI,GAAG;EACzC,IAAI;EACJ,IAAI,OAAO;EACX,GAAG;AACH;EACA,EAAE,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC;EACzC,EAAE,MAAM,cAAc,GAAG,eAAe,CAAC,eAAe,CAAC;EACzD,EAAE,MAAM,OAAO,GAAG,CAACD,iBAAU,CAAC,aAAa;EAC3C,IAAI,MAAM;EACV,IAAI,cAAc;EAClB,IAAI,CAAC;EACL,IAAIA,iBAAU,CAAC,QAAQ;EACvB,GAAG,CAAC;AACJ;EACA,EAAE,eAAe,CAAC,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,sBAAsB;EAC7E,IAAI,eAAe,CAAC,OAAO;EAC3B,IAAI,eAAe,CAAC,OAAO;EAC3B,GAAG,CAAC;EACJ,EAAE,MAAM,OAAO,GAAG;EAClB,IAAI,MAAM,EAAE,eAAe,CAAC,OAAO;EACnC,IAAI,aAAa,EAAE,eAAe,CAAC,cAAc;EACjD,IAAI,aAAa,EAAE,eAAe,CAAC,cAAc;EACjD,IAAI,SAAS,EAAE,eAAe,CAAC,UAAU;EACzC,IAAI,QAAQ,EAAE,eAAe,CAAC,SAAS;EACvC,IAAI,MAAM,EAAE,MAAM;EAClB,IAAI,WAAW,EAAE,eAAe,CAAC,YAAY;EAC7C,IAAI,qBAAqB,EAAE,eAAe,CAAC,sBAAsB;EACjE,GAAG,CAAC;EACJ,EAAE,IAAI,QAAQ,CAAC;EACf,EAAE,IAAI,OAAO,EAAE;EACf,IAAI,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;EAC5C,IAAI,OAAO,CAAC,eAAe,GAAG,eAAe,CAAC,gBAAgB,CAAC;EAC/D,IAAI,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;EAC/C,GAAG,MAAM;EACT,IAAI,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;AACvC;EACA,IAAI,IAAIH,oBAAO,CAAC,eAAe,CAAC,gBAAgB,CAAC,EAAE;EACnD,MAAM,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;EAChE,MAAM,MAAM,WAAW;EACvB,QAAQ,eAAe,CAAC,gBAAgB,KAAKC,+CAAuB,CAAC,IAAI;EACzE,YAAY,CAAC;EACb,YAAY,CAAC,CAAC;EACd,MAAM,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;EACvE,MAAM,QAAQ,CAAC,UAAU,CAAC,WAAW,GAAG,IAAIJ,mCAAiB,CAAC;EAC9D,QAAQ,iBAAiB,EAAEC,mCAAiB,CAAC,aAAa;EAC1D,QAAQ,sBAAsB,EAAE,CAAC;EACjC,QAAQ,MAAM,EAAE,WAAW;EAC3B,OAAO,CAAC,CAAC;EACT,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,IAAIQ,0BAAQ,CAAC;EACtB,IAAI,UAAU,EAAE,QAAQ,CAAC,UAAU;EACnC,IAAI,OAAO,EAAE,QAAQ,CAAC,OAAO;EAC7B,IAAI,aAAa,EAAEC,+BAAa,CAAC,KAAK;EACtC,IAAI,cAAc,EAAE,QAAQ,CAAC,cAAc;EAC3C,IAAI,eAAe,EAAE,eAAe,CAAC,gBAAgB;EACrD,GAAG,CAAC,CAAC;EACL,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/EllipsoidGeodesic-38d0ed4a.js b/debug/cesium/Workers/EllipsoidGeodesic-38d0ed4a.js deleted file mode 100644 index f29ace6..0000000 --- a/debug/cesium/Workers/EllipsoidGeodesic-38d0ed4a.js +++ /dev/null @@ -1,546 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918'], (function (exports, Matrix3, Check, defaultValue, Math$1) { 'use strict'; - - function setConstants(ellipsoidGeodesic) { - const uSquared = ellipsoidGeodesic._uSquared; - const a = ellipsoidGeodesic._ellipsoid.maximumRadius; - const b = ellipsoidGeodesic._ellipsoid.minimumRadius; - const f = (a - b) / a; - - const cosineHeading = Math.cos(ellipsoidGeodesic._startHeading); - const sineHeading = Math.sin(ellipsoidGeodesic._startHeading); - - const tanU = (1 - f) * Math.tan(ellipsoidGeodesic._start.latitude); - - const cosineU = 1.0 / Math.sqrt(1.0 + tanU * tanU); - const sineU = cosineU * tanU; - - const sigma = Math.atan2(tanU, cosineHeading); - - const sineAlpha = cosineU * sineHeading; - const sineSquaredAlpha = sineAlpha * sineAlpha; - - const cosineSquaredAlpha = 1.0 - sineSquaredAlpha; - const cosineAlpha = Math.sqrt(cosineSquaredAlpha); - - const u2Over4 = uSquared / 4.0; - const u4Over16 = u2Over4 * u2Over4; - const u6Over64 = u4Over16 * u2Over4; - const u8Over256 = u4Over16 * u4Over16; - - const a0 = - 1.0 + - u2Over4 - - (3.0 * u4Over16) / 4.0 + - (5.0 * u6Over64) / 4.0 - - (175.0 * u8Over256) / 64.0; - const a1 = 1.0 - u2Over4 + (15.0 * u4Over16) / 8.0 - (35.0 * u6Over64) / 8.0; - const a2 = 1.0 - 3.0 * u2Over4 + (35.0 * u4Over16) / 4.0; - const a3 = 1.0 - 5.0 * u2Over4; - - const distanceRatio = - a0 * sigma - - (a1 * Math.sin(2.0 * sigma) * u2Over4) / 2.0 - - (a2 * Math.sin(4.0 * sigma) * u4Over16) / 16.0 - - (a3 * Math.sin(6.0 * sigma) * u6Over64) / 48.0 - - (Math.sin(8.0 * sigma) * 5.0 * u8Over256) / 512; - - const constants = ellipsoidGeodesic._constants; - - constants.a = a; - constants.b = b; - constants.f = f; - constants.cosineHeading = cosineHeading; - constants.sineHeading = sineHeading; - constants.tanU = tanU; - constants.cosineU = cosineU; - constants.sineU = sineU; - constants.sigma = sigma; - constants.sineAlpha = sineAlpha; - constants.sineSquaredAlpha = sineSquaredAlpha; - constants.cosineSquaredAlpha = cosineSquaredAlpha; - constants.cosineAlpha = cosineAlpha; - constants.u2Over4 = u2Over4; - constants.u4Over16 = u4Over16; - constants.u6Over64 = u6Over64; - constants.u8Over256 = u8Over256; - constants.a0 = a0; - constants.a1 = a1; - constants.a2 = a2; - constants.a3 = a3; - constants.distanceRatio = distanceRatio; - } - - function computeC(f, cosineSquaredAlpha) { - return ( - (f * cosineSquaredAlpha * (4.0 + f * (4.0 - 3.0 * cosineSquaredAlpha))) / - 16.0 - ); - } - - function computeDeltaLambda( - f, - sineAlpha, - cosineSquaredAlpha, - sigma, - sineSigma, - cosineSigma, - cosineTwiceSigmaMidpoint - ) { - const C = computeC(f, cosineSquaredAlpha); - - return ( - (1.0 - C) * - f * - sineAlpha * - (sigma + - C * - sineSigma * - (cosineTwiceSigmaMidpoint + - C * - cosineSigma * - (2.0 * cosineTwiceSigmaMidpoint * cosineTwiceSigmaMidpoint - 1.0))) - ); - } - - function vincentyInverseFormula( - ellipsoidGeodesic, - major, - minor, - firstLongitude, - firstLatitude, - secondLongitude, - secondLatitude - ) { - const eff = (major - minor) / major; - const l = secondLongitude - firstLongitude; - - const u1 = Math.atan((1 - eff) * Math.tan(firstLatitude)); - const u2 = Math.atan((1 - eff) * Math.tan(secondLatitude)); - - const cosineU1 = Math.cos(u1); - const sineU1 = Math.sin(u1); - const cosineU2 = Math.cos(u2); - const sineU2 = Math.sin(u2); - - const cc = cosineU1 * cosineU2; - const cs = cosineU1 * sineU2; - const ss = sineU1 * sineU2; - const sc = sineU1 * cosineU2; - - let lambda = l; - let lambdaDot = Math$1.CesiumMath.TWO_PI; - - let cosineLambda = Math.cos(lambda); - let sineLambda = Math.sin(lambda); - - let sigma; - let cosineSigma; - let sineSigma; - let cosineSquaredAlpha; - let cosineTwiceSigmaMidpoint; - - do { - cosineLambda = Math.cos(lambda); - sineLambda = Math.sin(lambda); - - const temp = cs - sc * cosineLambda; - sineSigma = Math.sqrt( - cosineU2 * cosineU2 * sineLambda * sineLambda + temp * temp - ); - cosineSigma = ss + cc * cosineLambda; - - sigma = Math.atan2(sineSigma, cosineSigma); - - let sineAlpha; - - if (sineSigma === 0.0) { - sineAlpha = 0.0; - cosineSquaredAlpha = 1.0; - } else { - sineAlpha = (cc * sineLambda) / sineSigma; - cosineSquaredAlpha = 1.0 - sineAlpha * sineAlpha; - } - - lambdaDot = lambda; - - cosineTwiceSigmaMidpoint = cosineSigma - (2.0 * ss) / cosineSquaredAlpha; - - if (!isFinite(cosineTwiceSigmaMidpoint)) { - cosineTwiceSigmaMidpoint = 0.0; - } - - lambda = - l + - computeDeltaLambda( - eff, - sineAlpha, - cosineSquaredAlpha, - sigma, - sineSigma, - cosineSigma, - cosineTwiceSigmaMidpoint - ); - } while (Math.abs(lambda - lambdaDot) > Math$1.CesiumMath.EPSILON12); - - const uSquared = - (cosineSquaredAlpha * (major * major - minor * minor)) / (minor * minor); - const A = - 1.0 + - (uSquared * - (4096.0 + uSquared * (uSquared * (320.0 - 175.0 * uSquared) - 768.0))) / - 16384.0; - const B = - (uSquared * - (256.0 + uSquared * (uSquared * (74.0 - 47.0 * uSquared) - 128.0))) / - 1024.0; - - const cosineSquaredTwiceSigmaMidpoint = - cosineTwiceSigmaMidpoint * cosineTwiceSigmaMidpoint; - const deltaSigma = - B * - sineSigma * - (cosineTwiceSigmaMidpoint + - (B * - (cosineSigma * (2.0 * cosineSquaredTwiceSigmaMidpoint - 1.0) - - (B * - cosineTwiceSigmaMidpoint * - (4.0 * sineSigma * sineSigma - 3.0) * - (4.0 * cosineSquaredTwiceSigmaMidpoint - 3.0)) / - 6.0)) / - 4.0); - - const distance = minor * A * (sigma - deltaSigma); - - const startHeading = Math.atan2( - cosineU2 * sineLambda, - cs - sc * cosineLambda - ); - const endHeading = Math.atan2(cosineU1 * sineLambda, cs * cosineLambda - sc); - - ellipsoidGeodesic._distance = distance; - ellipsoidGeodesic._startHeading = startHeading; - ellipsoidGeodesic._endHeading = endHeading; - ellipsoidGeodesic._uSquared = uSquared; - } - - const scratchCart1 = new Matrix3.Cartesian3(); - const scratchCart2 = new Matrix3.Cartesian3(); - function computeProperties(ellipsoidGeodesic, start, end, ellipsoid) { - const firstCartesian = Matrix3.Cartesian3.normalize( - ellipsoid.cartographicToCartesian(start, scratchCart2), - scratchCart1 - ); - const lastCartesian = Matrix3.Cartesian3.normalize( - ellipsoid.cartographicToCartesian(end, scratchCart2), - scratchCart2 - ); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThanOrEquals( - "value", - Math.abs( - Math.abs(Matrix3.Cartesian3.angleBetween(firstCartesian, lastCartesian)) - Math.PI - ), - 0.0125 - ); - //>>includeEnd('debug'); - - vincentyInverseFormula( - ellipsoidGeodesic, - ellipsoid.maximumRadius, - ellipsoid.minimumRadius, - start.longitude, - start.latitude, - end.longitude, - end.latitude - ); - - ellipsoidGeodesic._start = Matrix3.Cartographic.clone( - start, - ellipsoidGeodesic._start - ); - ellipsoidGeodesic._end = Matrix3.Cartographic.clone(end, ellipsoidGeodesic._end); - ellipsoidGeodesic._start.height = 0; - ellipsoidGeodesic._end.height = 0; - - setConstants(ellipsoidGeodesic); - } - - /** - * Initializes a geodesic on the ellipsoid connecting the two provided planetodetic points. - * - * @alias EllipsoidGeodesic - * @constructor - * - * @param {Cartographic} [start] The initial planetodetic point on the path. - * @param {Cartographic} [end] The final planetodetic point on the path. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the geodesic lies. - */ - function EllipsoidGeodesic(start, end, ellipsoid) { - const e = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - this._ellipsoid = e; - this._start = new Matrix3.Cartographic(); - this._end = new Matrix3.Cartographic(); - - this._constants = {}; - this._startHeading = undefined; - this._endHeading = undefined; - this._distance = undefined; - this._uSquared = undefined; - - if (defaultValue.defined(start) && defaultValue.defined(end)) { - computeProperties(this, start, end, e); - } - } - - Object.defineProperties(EllipsoidGeodesic.prototype, { - /** - * Gets the ellipsoid. - * @memberof EllipsoidGeodesic.prototype - * @type {Ellipsoid} - * @readonly - */ - ellipsoid: { - get: function () { - return this._ellipsoid; - }, - }, - - /** - * Gets the surface distance between the start and end point - * @memberof EllipsoidGeodesic.prototype - * @type {Number} - * @readonly - */ - surfaceDistance: { - get: function () { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("distance", this._distance); - //>>includeEnd('debug'); - - return this._distance; - }, - }, - - /** - * Gets the initial planetodetic point on the path. - * @memberof EllipsoidGeodesic.prototype - * @type {Cartographic} - * @readonly - */ - start: { - get: function () { - return this._start; - }, - }, - - /** - * Gets the final planetodetic point on the path. - * @memberof EllipsoidGeodesic.prototype - * @type {Cartographic} - * @readonly - */ - end: { - get: function () { - return this._end; - }, - }, - - /** - * Gets the heading at the initial point. - * @memberof EllipsoidGeodesic.prototype - * @type {Number} - * @readonly - */ - startHeading: { - get: function () { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("distance", this._distance); - //>>includeEnd('debug'); - - return this._startHeading; - }, - }, - - /** - * Gets the heading at the final point. - * @memberof EllipsoidGeodesic.prototype - * @type {Number} - * @readonly - */ - endHeading: { - get: function () { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("distance", this._distance); - //>>includeEnd('debug'); - - return this._endHeading; - }, - }, - }); - - /** - * Sets the start and end points of the geodesic - * - * @param {Cartographic} start The initial planetodetic point on the path. - * @param {Cartographic} end The final planetodetic point on the path. - */ - EllipsoidGeodesic.prototype.setEndPoints = function (start, end) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("start", start); - Check.Check.defined("end", end); - //>>includeEnd('debug'); - - computeProperties(this, start, end, this._ellipsoid); - }; - - /** - * Provides the location of a point at the indicated portion along the geodesic. - * - * @param {Number} fraction The portion of the distance between the initial and final points. - * @param {Cartographic} [result] The object in which to store the result. - * @returns {Cartographic} The location of the point along the geodesic. - */ - EllipsoidGeodesic.prototype.interpolateUsingFraction = function ( - fraction, - result - ) { - return this.interpolateUsingSurfaceDistance( - this._distance * fraction, - result - ); - }; - - /** - * Provides the location of a point at the indicated distance along the geodesic. - * - * @param {Number} distance The distance from the inital point to the point of interest along the geodesic - * @param {Cartographic} [result] The object in which to store the result. - * @returns {Cartographic} The location of the point along the geodesic. - * - * @exception {DeveloperError} start and end must be set before calling function interpolateUsingSurfaceDistance - */ - EllipsoidGeodesic.prototype.interpolateUsingSurfaceDistance = function ( - distance, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("distance", this._distance); - //>>includeEnd('debug'); - - const constants = this._constants; - - const s = constants.distanceRatio + distance / constants.b; - - const cosine2S = Math.cos(2.0 * s); - const cosine4S = Math.cos(4.0 * s); - const cosine6S = Math.cos(6.0 * s); - const sine2S = Math.sin(2.0 * s); - const sine4S = Math.sin(4.0 * s); - const sine6S = Math.sin(6.0 * s); - const sine8S = Math.sin(8.0 * s); - - const s2 = s * s; - const s3 = s * s2; - - const u8Over256 = constants.u8Over256; - const u2Over4 = constants.u2Over4; - const u6Over64 = constants.u6Over64; - const u4Over16 = constants.u4Over16; - let sigma = - (2.0 * s3 * u8Over256 * cosine2S) / 3.0 + - s * - (1.0 - - u2Over4 + - (7.0 * u4Over16) / 4.0 - - (15.0 * u6Over64) / 4.0 + - (579.0 * u8Over256) / 64.0 - - (u4Over16 - (15.0 * u6Over64) / 4.0 + (187.0 * u8Over256) / 16.0) * - cosine2S - - ((5.0 * u6Over64) / 4.0 - (115.0 * u8Over256) / 16.0) * cosine4S - - (29.0 * u8Over256 * cosine6S) / 16.0) + - (u2Over4 / 2.0 - - u4Over16 + - (71.0 * u6Over64) / 32.0 - - (85.0 * u8Over256) / 16.0) * - sine2S + - ((5.0 * u4Over16) / 16.0 - - (5.0 * u6Over64) / 4.0 + - (383.0 * u8Over256) / 96.0) * - sine4S - - s2 * - ((u6Over64 - (11.0 * u8Over256) / 2.0) * sine2S + - (5.0 * u8Over256 * sine4S) / 2.0) + - ((29.0 * u6Over64) / 96.0 - (29.0 * u8Over256) / 16.0) * sine6S + - (539.0 * u8Over256 * sine8S) / 1536.0; - - const theta = Math.asin(Math.sin(sigma) * constants.cosineAlpha); - const latitude = Math.atan((constants.a / constants.b) * Math.tan(theta)); - - // Redefine in terms of relative argument of latitude. - sigma = sigma - constants.sigma; - - const cosineTwiceSigmaMidpoint = Math.cos(2.0 * constants.sigma + sigma); - - const sineSigma = Math.sin(sigma); - const cosineSigma = Math.cos(sigma); - - const cc = constants.cosineU * cosineSigma; - const ss = constants.sineU * sineSigma; - - const lambda = Math.atan2( - sineSigma * constants.sineHeading, - cc - ss * constants.cosineHeading - ); - - const l = - lambda - - computeDeltaLambda( - constants.f, - constants.sineAlpha, - constants.cosineSquaredAlpha, - sigma, - sineSigma, - cosineSigma, - cosineTwiceSigmaMidpoint - ); - - if (defaultValue.defined(result)) { - result.longitude = this._start.longitude + l; - result.latitude = latitude; - result.height = 0.0; - return result; - } - - return new Matrix3.Cartographic(this._start.longitude + l, latitude, 0.0); - }; - - exports.EllipsoidGeodesic = EllipsoidGeodesic; - -})); -//# sourceMappingURL=EllipsoidGeodesic-38d0ed4a.js.map diff --git a/debug/cesium/Workers/EllipsoidGeodesic-38d0ed4a.js.map b/debug/cesium/Workers/EllipsoidGeodesic-38d0ed4a.js.map deleted file mode 100644 index 747d8fd..0000000 --- a/debug/cesium/Workers/EllipsoidGeodesic-38d0ed4a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EllipsoidGeodesic-38d0ed4a.js","sources":["../../../Source/Core/EllipsoidGeodesic.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\nfunction setConstants(ellipsoidGeodesic) {\r\n const uSquared = ellipsoidGeodesic._uSquared;\r\n const a = ellipsoidGeodesic._ellipsoid.maximumRadius;\r\n const b = ellipsoidGeodesic._ellipsoid.minimumRadius;\r\n const f = (a - b) / a;\r\n\r\n const cosineHeading = Math.cos(ellipsoidGeodesic._startHeading);\r\n const sineHeading = Math.sin(ellipsoidGeodesic._startHeading);\r\n\r\n const tanU = (1 - f) * Math.tan(ellipsoidGeodesic._start.latitude);\r\n\r\n const cosineU = 1.0 / Math.sqrt(1.0 + tanU * tanU);\r\n const sineU = cosineU * tanU;\r\n\r\n const sigma = Math.atan2(tanU, cosineHeading);\r\n\r\n const sineAlpha = cosineU * sineHeading;\r\n const sineSquaredAlpha = sineAlpha * sineAlpha;\r\n\r\n const cosineSquaredAlpha = 1.0 - sineSquaredAlpha;\r\n const cosineAlpha = Math.sqrt(cosineSquaredAlpha);\r\n\r\n const u2Over4 = uSquared / 4.0;\r\n const u4Over16 = u2Over4 * u2Over4;\r\n const u6Over64 = u4Over16 * u2Over4;\r\n const u8Over256 = u4Over16 * u4Over16;\r\n\r\n const a0 =\r\n 1.0 +\r\n u2Over4 -\r\n (3.0 * u4Over16) / 4.0 +\r\n (5.0 * u6Over64) / 4.0 -\r\n (175.0 * u8Over256) / 64.0;\r\n const a1 = 1.0 - u2Over4 + (15.0 * u4Over16) / 8.0 - (35.0 * u6Over64) / 8.0;\r\n const a2 = 1.0 - 3.0 * u2Over4 + (35.0 * u4Over16) / 4.0;\r\n const a3 = 1.0 - 5.0 * u2Over4;\r\n\r\n const distanceRatio =\r\n a0 * sigma -\r\n (a1 * Math.sin(2.0 * sigma) * u2Over4) / 2.0 -\r\n (a2 * Math.sin(4.0 * sigma) * u4Over16) / 16.0 -\r\n (a3 * Math.sin(6.0 * sigma) * u6Over64) / 48.0 -\r\n (Math.sin(8.0 * sigma) * 5.0 * u8Over256) / 512;\r\n\r\n const constants = ellipsoidGeodesic._constants;\r\n\r\n constants.a = a;\r\n constants.b = b;\r\n constants.f = f;\r\n constants.cosineHeading = cosineHeading;\r\n constants.sineHeading = sineHeading;\r\n constants.tanU = tanU;\r\n constants.cosineU = cosineU;\r\n constants.sineU = sineU;\r\n constants.sigma = sigma;\r\n constants.sineAlpha = sineAlpha;\r\n constants.sineSquaredAlpha = sineSquaredAlpha;\r\n constants.cosineSquaredAlpha = cosineSquaredAlpha;\r\n constants.cosineAlpha = cosineAlpha;\r\n constants.u2Over4 = u2Over4;\r\n constants.u4Over16 = u4Over16;\r\n constants.u6Over64 = u6Over64;\r\n constants.u8Over256 = u8Over256;\r\n constants.a0 = a0;\r\n constants.a1 = a1;\r\n constants.a2 = a2;\r\n constants.a3 = a3;\r\n constants.distanceRatio = distanceRatio;\r\n}\r\n\r\nfunction computeC(f, cosineSquaredAlpha) {\r\n return (\r\n (f * cosineSquaredAlpha * (4.0 + f * (4.0 - 3.0 * cosineSquaredAlpha))) /\r\n 16.0\r\n );\r\n}\r\n\r\nfunction computeDeltaLambda(\r\n f,\r\n sineAlpha,\r\n cosineSquaredAlpha,\r\n sigma,\r\n sineSigma,\r\n cosineSigma,\r\n cosineTwiceSigmaMidpoint\r\n) {\r\n const C = computeC(f, cosineSquaredAlpha);\r\n\r\n return (\r\n (1.0 - C) *\r\n f *\r\n sineAlpha *\r\n (sigma +\r\n C *\r\n sineSigma *\r\n (cosineTwiceSigmaMidpoint +\r\n C *\r\n cosineSigma *\r\n (2.0 * cosineTwiceSigmaMidpoint * cosineTwiceSigmaMidpoint - 1.0)))\r\n );\r\n}\r\n\r\nfunction vincentyInverseFormula(\r\n ellipsoidGeodesic,\r\n major,\r\n minor,\r\n firstLongitude,\r\n firstLatitude,\r\n secondLongitude,\r\n secondLatitude\r\n) {\r\n const eff = (major - minor) / major;\r\n const l = secondLongitude - firstLongitude;\r\n\r\n const u1 = Math.atan((1 - eff) * Math.tan(firstLatitude));\r\n const u2 = Math.atan((1 - eff) * Math.tan(secondLatitude));\r\n\r\n const cosineU1 = Math.cos(u1);\r\n const sineU1 = Math.sin(u1);\r\n const cosineU2 = Math.cos(u2);\r\n const sineU2 = Math.sin(u2);\r\n\r\n const cc = cosineU1 * cosineU2;\r\n const cs = cosineU1 * sineU2;\r\n const ss = sineU1 * sineU2;\r\n const sc = sineU1 * cosineU2;\r\n\r\n let lambda = l;\r\n let lambdaDot = CesiumMath.TWO_PI;\r\n\r\n let cosineLambda = Math.cos(lambda);\r\n let sineLambda = Math.sin(lambda);\r\n\r\n let sigma;\r\n let cosineSigma;\r\n let sineSigma;\r\n let cosineSquaredAlpha;\r\n let cosineTwiceSigmaMidpoint;\r\n\r\n do {\r\n cosineLambda = Math.cos(lambda);\r\n sineLambda = Math.sin(lambda);\r\n\r\n const temp = cs - sc * cosineLambda;\r\n sineSigma = Math.sqrt(\r\n cosineU2 * cosineU2 * sineLambda * sineLambda + temp * temp\r\n );\r\n cosineSigma = ss + cc * cosineLambda;\r\n\r\n sigma = Math.atan2(sineSigma, cosineSigma);\r\n\r\n let sineAlpha;\r\n\r\n if (sineSigma === 0.0) {\r\n sineAlpha = 0.0;\r\n cosineSquaredAlpha = 1.0;\r\n } else {\r\n sineAlpha = (cc * sineLambda) / sineSigma;\r\n cosineSquaredAlpha = 1.0 - sineAlpha * sineAlpha;\r\n }\r\n\r\n lambdaDot = lambda;\r\n\r\n cosineTwiceSigmaMidpoint = cosineSigma - (2.0 * ss) / cosineSquaredAlpha;\r\n\r\n if (!isFinite(cosineTwiceSigmaMidpoint)) {\r\n cosineTwiceSigmaMidpoint = 0.0;\r\n }\r\n\r\n lambda =\r\n l +\r\n computeDeltaLambda(\r\n eff,\r\n sineAlpha,\r\n cosineSquaredAlpha,\r\n sigma,\r\n sineSigma,\r\n cosineSigma,\r\n cosineTwiceSigmaMidpoint\r\n );\r\n } while (Math.abs(lambda - lambdaDot) > CesiumMath.EPSILON12);\r\n\r\n const uSquared =\r\n (cosineSquaredAlpha * (major * major - minor * minor)) / (minor * minor);\r\n const A =\r\n 1.0 +\r\n (uSquared *\r\n (4096.0 + uSquared * (uSquared * (320.0 - 175.0 * uSquared) - 768.0))) /\r\n 16384.0;\r\n const B =\r\n (uSquared *\r\n (256.0 + uSquared * (uSquared * (74.0 - 47.0 * uSquared) - 128.0))) /\r\n 1024.0;\r\n\r\n const cosineSquaredTwiceSigmaMidpoint =\r\n cosineTwiceSigmaMidpoint * cosineTwiceSigmaMidpoint;\r\n const deltaSigma =\r\n B *\r\n sineSigma *\r\n (cosineTwiceSigmaMidpoint +\r\n (B *\r\n (cosineSigma * (2.0 * cosineSquaredTwiceSigmaMidpoint - 1.0) -\r\n (B *\r\n cosineTwiceSigmaMidpoint *\r\n (4.0 * sineSigma * sineSigma - 3.0) *\r\n (4.0 * cosineSquaredTwiceSigmaMidpoint - 3.0)) /\r\n 6.0)) /\r\n 4.0);\r\n\r\n const distance = minor * A * (sigma - deltaSigma);\r\n\r\n const startHeading = Math.atan2(\r\n cosineU2 * sineLambda,\r\n cs - sc * cosineLambda\r\n );\r\n const endHeading = Math.atan2(cosineU1 * sineLambda, cs * cosineLambda - sc);\r\n\r\n ellipsoidGeodesic._distance = distance;\r\n ellipsoidGeodesic._startHeading = startHeading;\r\n ellipsoidGeodesic._endHeading = endHeading;\r\n ellipsoidGeodesic._uSquared = uSquared;\r\n}\r\n\r\nconst scratchCart1 = new Cartesian3();\r\nconst scratchCart2 = new Cartesian3();\r\nfunction computeProperties(ellipsoidGeodesic, start, end, ellipsoid) {\r\n const firstCartesian = Cartesian3.normalize(\r\n ellipsoid.cartographicToCartesian(start, scratchCart2),\r\n scratchCart1\r\n );\r\n const lastCartesian = Cartesian3.normalize(\r\n ellipsoid.cartographicToCartesian(end, scratchCart2),\r\n scratchCart2\r\n );\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThanOrEquals(\r\n \"value\",\r\n Math.abs(\r\n Math.abs(Cartesian3.angleBetween(firstCartesian, lastCartesian)) - Math.PI\r\n ),\r\n 0.0125\r\n );\r\n //>>includeEnd('debug');\r\n\r\n vincentyInverseFormula(\r\n ellipsoidGeodesic,\r\n ellipsoid.maximumRadius,\r\n ellipsoid.minimumRadius,\r\n start.longitude,\r\n start.latitude,\r\n end.longitude,\r\n end.latitude\r\n );\r\n\r\n ellipsoidGeodesic._start = Cartographic.clone(\r\n start,\r\n ellipsoidGeodesic._start\r\n );\r\n ellipsoidGeodesic._end = Cartographic.clone(end, ellipsoidGeodesic._end);\r\n ellipsoidGeodesic._start.height = 0;\r\n ellipsoidGeodesic._end.height = 0;\r\n\r\n setConstants(ellipsoidGeodesic);\r\n}\r\n\r\n/**\r\n * Initializes a geodesic on the ellipsoid connecting the two provided planetodetic points.\r\n *\r\n * @alias EllipsoidGeodesic\r\n * @constructor\r\n *\r\n * @param {Cartographic} [start] The initial planetodetic point on the path.\r\n * @param {Cartographic} [end] The final planetodetic point on the path.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the geodesic lies.\r\n */\r\nfunction EllipsoidGeodesic(start, end, ellipsoid) {\r\n const e = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n this._ellipsoid = e;\r\n this._start = new Cartographic();\r\n this._end = new Cartographic();\r\n\r\n this._constants = {};\r\n this._startHeading = undefined;\r\n this._endHeading = undefined;\r\n this._distance = undefined;\r\n this._uSquared = undefined;\r\n\r\n if (defined(start) && defined(end)) {\r\n computeProperties(this, start, end, e);\r\n }\r\n}\r\n\r\nObject.defineProperties(EllipsoidGeodesic.prototype, {\r\n /**\r\n * Gets the ellipsoid.\r\n * @memberof EllipsoidGeodesic.prototype\r\n * @type {Ellipsoid}\r\n * @readonly\r\n */\r\n ellipsoid: {\r\n get: function () {\r\n return this._ellipsoid;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the surface distance between the start and end point\r\n * @memberof EllipsoidGeodesic.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n surfaceDistance: {\r\n get: function () {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"distance\", this._distance);\r\n //>>includeEnd('debug');\r\n\r\n return this._distance;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the initial planetodetic point on the path.\r\n * @memberof EllipsoidGeodesic.prototype\r\n * @type {Cartographic}\r\n * @readonly\r\n */\r\n start: {\r\n get: function () {\r\n return this._start;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the final planetodetic point on the path.\r\n * @memberof EllipsoidGeodesic.prototype\r\n * @type {Cartographic}\r\n * @readonly\r\n */\r\n end: {\r\n get: function () {\r\n return this._end;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the heading at the initial point.\r\n * @memberof EllipsoidGeodesic.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n startHeading: {\r\n get: function () {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"distance\", this._distance);\r\n //>>includeEnd('debug');\r\n\r\n return this._startHeading;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the heading at the final point.\r\n * @memberof EllipsoidGeodesic.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n endHeading: {\r\n get: function () {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"distance\", this._distance);\r\n //>>includeEnd('debug');\r\n\r\n return this._endHeading;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Sets the start and end points of the geodesic\r\n *\r\n * @param {Cartographic} start The initial planetodetic point on the path.\r\n * @param {Cartographic} end The final planetodetic point on the path.\r\n */\r\nEllipsoidGeodesic.prototype.setEndPoints = function (start, end) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"start\", start);\r\n Check.defined(\"end\", end);\r\n //>>includeEnd('debug');\r\n\r\n computeProperties(this, start, end, this._ellipsoid);\r\n};\r\n\r\n/**\r\n * Provides the location of a point at the indicated portion along the geodesic.\r\n *\r\n * @param {Number} fraction The portion of the distance between the initial and final points.\r\n * @param {Cartographic} [result] The object in which to store the result.\r\n * @returns {Cartographic} The location of the point along the geodesic.\r\n */\r\nEllipsoidGeodesic.prototype.interpolateUsingFraction = function (\r\n fraction,\r\n result\r\n) {\r\n return this.interpolateUsingSurfaceDistance(\r\n this._distance * fraction,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Provides the location of a point at the indicated distance along the geodesic.\r\n *\r\n * @param {Number} distance The distance from the inital point to the point of interest along the geodesic\r\n * @param {Cartographic} [result] The object in which to store the result.\r\n * @returns {Cartographic} The location of the point along the geodesic.\r\n *\r\n * @exception {DeveloperError} start and end must be set before calling function interpolateUsingSurfaceDistance\r\n */\r\nEllipsoidGeodesic.prototype.interpolateUsingSurfaceDistance = function (\r\n distance,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"distance\", this._distance);\r\n //>>includeEnd('debug');\r\n\r\n const constants = this._constants;\r\n\r\n const s = constants.distanceRatio + distance / constants.b;\r\n\r\n const cosine2S = Math.cos(2.0 * s);\r\n const cosine4S = Math.cos(4.0 * s);\r\n const cosine6S = Math.cos(6.0 * s);\r\n const sine2S = Math.sin(2.0 * s);\r\n const sine4S = Math.sin(4.0 * s);\r\n const sine6S = Math.sin(6.0 * s);\r\n const sine8S = Math.sin(8.0 * s);\r\n\r\n const s2 = s * s;\r\n const s3 = s * s2;\r\n\r\n const u8Over256 = constants.u8Over256;\r\n const u2Over4 = constants.u2Over4;\r\n const u6Over64 = constants.u6Over64;\r\n const u4Over16 = constants.u4Over16;\r\n let sigma =\r\n (2.0 * s3 * u8Over256 * cosine2S) / 3.0 +\r\n s *\r\n (1.0 -\r\n u2Over4 +\r\n (7.0 * u4Over16) / 4.0 -\r\n (15.0 * u6Over64) / 4.0 +\r\n (579.0 * u8Over256) / 64.0 -\r\n (u4Over16 - (15.0 * u6Over64) / 4.0 + (187.0 * u8Over256) / 16.0) *\r\n cosine2S -\r\n ((5.0 * u6Over64) / 4.0 - (115.0 * u8Over256) / 16.0) * cosine4S -\r\n (29.0 * u8Over256 * cosine6S) / 16.0) +\r\n (u2Over4 / 2.0 -\r\n u4Over16 +\r\n (71.0 * u6Over64) / 32.0 -\r\n (85.0 * u8Over256) / 16.0) *\r\n sine2S +\r\n ((5.0 * u4Over16) / 16.0 -\r\n (5.0 * u6Over64) / 4.0 +\r\n (383.0 * u8Over256) / 96.0) *\r\n sine4S -\r\n s2 *\r\n ((u6Over64 - (11.0 * u8Over256) / 2.0) * sine2S +\r\n (5.0 * u8Over256 * sine4S) / 2.0) +\r\n ((29.0 * u6Over64) / 96.0 - (29.0 * u8Over256) / 16.0) * sine6S +\r\n (539.0 * u8Over256 * sine8S) / 1536.0;\r\n\r\n const theta = Math.asin(Math.sin(sigma) * constants.cosineAlpha);\r\n const latitude = Math.atan((constants.a / constants.b) * Math.tan(theta));\r\n\r\n // Redefine in terms of relative argument of latitude.\r\n sigma = sigma - constants.sigma;\r\n\r\n const cosineTwiceSigmaMidpoint = Math.cos(2.0 * constants.sigma + sigma);\r\n\r\n const sineSigma = Math.sin(sigma);\r\n const cosineSigma = Math.cos(sigma);\r\n\r\n const cc = constants.cosineU * cosineSigma;\r\n const ss = constants.sineU * sineSigma;\r\n\r\n const lambda = Math.atan2(\r\n sineSigma * constants.sineHeading,\r\n cc - ss * constants.cosineHeading\r\n );\r\n\r\n const l =\r\n lambda -\r\n computeDeltaLambda(\r\n constants.f,\r\n constants.sineAlpha,\r\n constants.cosineSquaredAlpha,\r\n sigma,\r\n sineSigma,\r\n cosineSigma,\r\n cosineTwiceSigmaMidpoint\r\n );\r\n\r\n if (defined(result)) {\r\n result.longitude = this._start.longitude + l;\r\n result.latitude = latitude;\r\n result.height = 0.0;\r\n return result;\r\n }\r\n\r\n return new Cartographic(this._start.longitude + l, latitude, 0.0);\r\n};\r\nexport default EllipsoidGeodesic;\r\n"],"names":["CesiumMath","Cartesian3","Check","Cartographic","defaultValue","Ellipsoid","defined"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/EllipsoidGeometry-66510462.js b/debug/cesium/Workers/EllipsoidGeometry-66510462.js deleted file mode 100644 index f62b0e0..0000000 --- a/debug/cesium/Workers/EllipsoidGeometry-66510462.js +++ /dev/null @@ -1,663 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './Math-9be8b918', './VertexFormat-f2d74c96'], (function (exports, Transforms, Matrix2, Matrix3, ComponentDatatype, defaultValue, Check, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, Math$1, VertexFormat) { 'use strict'; - - const scratchPosition = new Matrix3.Cartesian3(); - const scratchNormal = new Matrix3.Cartesian3(); - const scratchTangent = new Matrix3.Cartesian3(); - const scratchBitangent = new Matrix3.Cartesian3(); - const scratchNormalST = new Matrix3.Cartesian3(); - const defaultRadii = new Matrix3.Cartesian3(1.0, 1.0, 1.0); - - const cos = Math.cos; - const sin = Math.sin; - - /** - * A description of an ellipsoid centered at the origin. - * - * @alias EllipsoidGeometry - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions. - * @param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions. - * @param {Number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. - * @param {Number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. - * @param {Number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis. - * @param {Number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis. - * @param {Number} [options.stackPartitions=64] The number of times to partition the ellipsoid into stacks. - * @param {Number} [options.slicePartitions=64] The number of times to partition the ellipsoid into radial slices. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * - * @exception {DeveloperError} options.slicePartitions cannot be less than three. - * @exception {DeveloperError} options.stackPartitions cannot be less than three. - * - * @see EllipsoidGeometry#createGeometry - * - * @example - * const ellipsoid = new Cesium.EllipsoidGeometry({ - * vertexFormat : Cesium.VertexFormat.POSITION_ONLY, - * radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0) - * }); - * const geometry = Cesium.EllipsoidGeometry.createGeometry(ellipsoid); - */ - function EllipsoidGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const radii = defaultValue.defaultValue(options.radii, defaultRadii); - const innerRadii = defaultValue.defaultValue(options.innerRadii, radii); - const minimumClock = defaultValue.defaultValue(options.minimumClock, 0.0); - const maximumClock = defaultValue.defaultValue(options.maximumClock, Math$1.CesiumMath.TWO_PI); - const minimumCone = defaultValue.defaultValue(options.minimumCone, 0.0); - const maximumCone = defaultValue.defaultValue(options.maximumCone, Math$1.CesiumMath.PI); - const stackPartitions = Math.round(defaultValue.defaultValue(options.stackPartitions, 64)); - const slicePartitions = Math.round(defaultValue.defaultValue(options.slicePartitions, 64)); - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - - //>>includeStart('debug', pragmas.debug); - if (slicePartitions < 3) { - throw new Check.DeveloperError( - "options.slicePartitions cannot be less than three." - ); - } - if (stackPartitions < 3) { - throw new Check.DeveloperError( - "options.stackPartitions cannot be less than three." - ); - } - //>>includeEnd('debug'); - - this._radii = Matrix3.Cartesian3.clone(radii); - this._innerRadii = Matrix3.Cartesian3.clone(innerRadii); - this._minimumClock = minimumClock; - this._maximumClock = maximumClock; - this._minimumCone = minimumCone; - this._maximumCone = maximumCone; - this._stackPartitions = stackPartitions; - this._slicePartitions = slicePartitions; - this._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat); - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createEllipsoidGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - EllipsoidGeometry.packedLength = - 2 * Matrix3.Cartesian3.packedLength + VertexFormat.VertexFormat.packedLength + 7; - - /** - * Stores the provided instance into the provided array. - * - * @param {EllipsoidGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - EllipsoidGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix3.Cartesian3.pack(value._radii, array, startingIndex); - startingIndex += Matrix3.Cartesian3.packedLength; - - Matrix3.Cartesian3.pack(value._innerRadii, array, startingIndex); - startingIndex += Matrix3.Cartesian3.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._minimumClock; - array[startingIndex++] = value._maximumClock; - array[startingIndex++] = value._minimumCone; - array[startingIndex++] = value._maximumCone; - array[startingIndex++] = value._stackPartitions; - array[startingIndex++] = value._slicePartitions; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchRadii = new Matrix3.Cartesian3(); - const scratchInnerRadii = new Matrix3.Cartesian3(); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - radii: scratchRadii, - innerRadii: scratchInnerRadii, - vertexFormat: scratchVertexFormat, - minimumClock: undefined, - maximumClock: undefined, - minimumCone: undefined, - maximumCone: undefined, - stackPartitions: undefined, - slicePartitions: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {EllipsoidGeometry} [result] The object into which to store the result. - * @returns {EllipsoidGeometry} The modified result parameter or a new EllipsoidGeometry instance if one was not provided. - */ - EllipsoidGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const radii = Matrix3.Cartesian3.unpack(array, startingIndex, scratchRadii); - startingIndex += Matrix3.Cartesian3.packedLength; - - const innerRadii = Matrix3.Cartesian3.unpack(array, startingIndex, scratchInnerRadii); - startingIndex += Matrix3.Cartesian3.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const minimumClock = array[startingIndex++]; - const maximumClock = array[startingIndex++]; - const minimumCone = array[startingIndex++]; - const maximumCone = array[startingIndex++]; - const stackPartitions = array[startingIndex++]; - const slicePartitions = array[startingIndex++]; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.minimumClock = minimumClock; - scratchOptions.maximumClock = maximumClock; - scratchOptions.minimumCone = minimumCone; - scratchOptions.maximumCone = maximumCone; - scratchOptions.stackPartitions = stackPartitions; - scratchOptions.slicePartitions = slicePartitions; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - return new EllipsoidGeometry(scratchOptions); - } - - result._radii = Matrix3.Cartesian3.clone(radii, result._radii); - result._innerRadii = Matrix3.Cartesian3.clone(innerRadii, result._innerRadii); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._minimumClock = minimumClock; - result._maximumClock = maximumClock; - result._minimumCone = minimumCone; - result._maximumCone = maximumCone; - result._stackPartitions = stackPartitions; - result._slicePartitions = slicePartitions; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the geometric representation of an ellipsoid, including its vertices, indices, and a bounding sphere. - * - * @param {EllipsoidGeometry} ellipsoidGeometry A description of the ellipsoid. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - EllipsoidGeometry.createGeometry = function (ellipsoidGeometry) { - const radii = ellipsoidGeometry._radii; - if (radii.x <= 0 || radii.y <= 0 || radii.z <= 0) { - return; - } - - const innerRadii = ellipsoidGeometry._innerRadii; - if (innerRadii.x <= 0 || innerRadii.y <= 0 || innerRadii.z <= 0) { - return; - } - - const minimumClock = ellipsoidGeometry._minimumClock; - const maximumClock = ellipsoidGeometry._maximumClock; - const minimumCone = ellipsoidGeometry._minimumCone; - const maximumCone = ellipsoidGeometry._maximumCone; - const vertexFormat = ellipsoidGeometry._vertexFormat; - - // Add an extra slice and stack so that the number of partitions is the - // number of surfaces rather than the number of joints - let slicePartitions = ellipsoidGeometry._slicePartitions + 1; - let stackPartitions = ellipsoidGeometry._stackPartitions + 1; - - slicePartitions = Math.round( - (slicePartitions * Math.abs(maximumClock - minimumClock)) / - Math$1.CesiumMath.TWO_PI - ); - stackPartitions = Math.round( - (stackPartitions * Math.abs(maximumCone - minimumCone)) / Math$1.CesiumMath.PI - ); - - if (slicePartitions < 2) { - slicePartitions = 2; - } - if (stackPartitions < 2) { - stackPartitions = 2; - } - - let i; - let j; - let index = 0; - - // Create arrays for theta and phi. Duplicate first and last angle to - // allow different normals at the intersections. - const phis = [minimumCone]; - const thetas = [minimumClock]; - for (i = 0; i < stackPartitions; i++) { - phis.push( - minimumCone + (i * (maximumCone - minimumCone)) / (stackPartitions - 1) - ); - } - phis.push(maximumCone); - for (j = 0; j < slicePartitions; j++) { - thetas.push( - minimumClock + (j * (maximumClock - minimumClock)) / (slicePartitions - 1) - ); - } - thetas.push(maximumClock); - const numPhis = phis.length; - const numThetas = thetas.length; - - // Allow for extra indices if there is an inner surface and if we need - // to close the sides if the clock range is not a full circle - let extraIndices = 0; - let vertexMultiplier = 1.0; - const hasInnerSurface = - innerRadii.x !== radii.x || - innerRadii.y !== radii.y || - innerRadii.z !== radii.z; - let isTopOpen = false; - let isBotOpen = false; - let isClockOpen = false; - if (hasInnerSurface) { - vertexMultiplier = 2.0; - if (minimumCone > 0.0) { - isTopOpen = true; - extraIndices += slicePartitions - 1; - } - if (maximumCone < Math.PI) { - isBotOpen = true; - extraIndices += slicePartitions - 1; - } - if ((maximumClock - minimumClock) % Math$1.CesiumMath.TWO_PI) { - isClockOpen = true; - extraIndices += (stackPartitions - 1) * 2 + 1; - } else { - extraIndices += 1; - } - } - - const vertexCount = numThetas * numPhis * vertexMultiplier; - const positions = new Float64Array(vertexCount * 3); - const isInner = new Array(vertexCount).fill(false); - const negateNormal = new Array(vertexCount).fill(false); - - // Multiply by 6 because there are two triangles per sector - const indexCount = slicePartitions * stackPartitions * vertexMultiplier; - const numIndices = - 6 * - (indexCount + - extraIndices + - 1 - - (slicePartitions + stackPartitions) * vertexMultiplier); - const indices = IndexDatatype.IndexDatatype.createTypedArray(indexCount, numIndices); - - const normals = vertexFormat.normal - ? new Float32Array(vertexCount * 3) - : undefined; - const tangents = vertexFormat.tangent - ? new Float32Array(vertexCount * 3) - : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(vertexCount * 3) - : undefined; - const st = vertexFormat.st ? new Float32Array(vertexCount * 2) : undefined; - - // Calculate sin/cos phi - const sinPhi = new Array(numPhis); - const cosPhi = new Array(numPhis); - for (i = 0; i < numPhis; i++) { - sinPhi[i] = sin(phis[i]); - cosPhi[i] = cos(phis[i]); - } - - // Calculate sin/cos theta - const sinTheta = new Array(numThetas); - const cosTheta = new Array(numThetas); - for (j = 0; j < numThetas; j++) { - cosTheta[j] = cos(thetas[j]); - sinTheta[j] = sin(thetas[j]); - } - - // Create outer surface - for (i = 0; i < numPhis; i++) { - for (j = 0; j < numThetas; j++) { - positions[index++] = radii.x * sinPhi[i] * cosTheta[j]; - positions[index++] = radii.y * sinPhi[i] * sinTheta[j]; - positions[index++] = radii.z * cosPhi[i]; - } - } - - // Create inner surface - let vertexIndex = vertexCount / 2.0; - if (hasInnerSurface) { - for (i = 0; i < numPhis; i++) { - for (j = 0; j < numThetas; j++) { - positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j]; - positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j]; - positions[index++] = innerRadii.z * cosPhi[i]; - - // Keep track of which vertices are the inner and which ones - // need the normal to be negated - isInner[vertexIndex] = true; - if (i > 0 && i !== numPhis - 1 && j !== 0 && j !== numThetas - 1) { - negateNormal[vertexIndex] = true; - } - vertexIndex++; - } - } - } - - // Create indices for outer surface - index = 0; - let topOffset; - let bottomOffset; - for (i = 1; i < numPhis - 2; i++) { - topOffset = i * numThetas; - bottomOffset = (i + 1) * numThetas; - - for (j = 1; j < numThetas - 2; j++) { - indices[index++] = bottomOffset + j; - indices[index++] = bottomOffset + j + 1; - indices[index++] = topOffset + j + 1; - - indices[index++] = bottomOffset + j; - indices[index++] = topOffset + j + 1; - indices[index++] = topOffset + j; - } - } - - // Create indices for inner surface - if (hasInnerSurface) { - const offset = numPhis * numThetas; - for (i = 1; i < numPhis - 2; i++) { - topOffset = offset + i * numThetas; - bottomOffset = offset + (i + 1) * numThetas; - - for (j = 1; j < numThetas - 2; j++) { - indices[index++] = bottomOffset + j; - indices[index++] = topOffset + j; - indices[index++] = topOffset + j + 1; - - indices[index++] = bottomOffset + j; - indices[index++] = topOffset + j + 1; - indices[index++] = bottomOffset + j + 1; - } - } - } - - let outerOffset; - let innerOffset; - if (hasInnerSurface) { - if (isTopOpen) { - // Connect the top of the inner surface to the top of the outer surface - innerOffset = numPhis * numThetas; - for (i = 1; i < numThetas - 2; i++) { - indices[index++] = i; - indices[index++] = i + 1; - indices[index++] = innerOffset + i + 1; - - indices[index++] = i; - indices[index++] = innerOffset + i + 1; - indices[index++] = innerOffset + i; - } - } - - if (isBotOpen) { - // Connect the bottom of the inner surface to the bottom of the outer surface - outerOffset = numPhis * numThetas - numThetas; - innerOffset = numPhis * numThetas * vertexMultiplier - numThetas; - for (i = 1; i < numThetas - 2; i++) { - indices[index++] = outerOffset + i + 1; - indices[index++] = outerOffset + i; - indices[index++] = innerOffset + i; - - indices[index++] = outerOffset + i + 1; - indices[index++] = innerOffset + i; - indices[index++] = innerOffset + i + 1; - } - } - } - - // Connect the edges if clock is not closed - if (isClockOpen) { - for (i = 1; i < numPhis - 2; i++) { - innerOffset = numThetas * numPhis + numThetas * i; - outerOffset = numThetas * i; - indices[index++] = innerOffset; - indices[index++] = outerOffset + numThetas; - indices[index++] = outerOffset; - - indices[index++] = innerOffset; - indices[index++] = innerOffset + numThetas; - indices[index++] = outerOffset + numThetas; - } - - for (i = 1; i < numPhis - 2; i++) { - innerOffset = numThetas * numPhis + numThetas * (i + 1) - 1; - outerOffset = numThetas * (i + 1) - 1; - indices[index++] = outerOffset + numThetas; - indices[index++] = innerOffset; - indices[index++] = outerOffset; - - indices[index++] = outerOffset + numThetas; - indices[index++] = innerOffset + numThetas; - indices[index++] = innerOffset; - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - - if (vertexFormat.position) { - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - } - - let stIndex = 0; - let normalIndex = 0; - let tangentIndex = 0; - let bitangentIndex = 0; - const vertexCountHalf = vertexCount / 2.0; - - let ellipsoid; - const ellipsoidOuter = Matrix3.Ellipsoid.fromCartesian3(radii); - const ellipsoidInner = Matrix3.Ellipsoid.fromCartesian3(innerRadii); - - if ( - vertexFormat.st || - vertexFormat.normal || - vertexFormat.tangent || - vertexFormat.bitangent - ) { - for (i = 0; i < vertexCount; i++) { - ellipsoid = isInner[i] ? ellipsoidInner : ellipsoidOuter; - const position = Matrix3.Cartesian3.fromArray(positions, i * 3, scratchPosition); - const normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal); - if (negateNormal[i]) { - Matrix3.Cartesian3.negate(normal, normal); - } - - if (vertexFormat.st) { - const normalST = Matrix2.Cartesian2.negate(normal, scratchNormalST); - st[stIndex++] = - Math.atan2(normalST.y, normalST.x) / Math$1.CesiumMath.TWO_PI + 0.5; - st[stIndex++] = Math.asin(normal.z) / Math.PI + 0.5; - } - - if (vertexFormat.normal) { - normals[normalIndex++] = normal.x; - normals[normalIndex++] = normal.y; - normals[normalIndex++] = normal.z; - } - - if (vertexFormat.tangent || vertexFormat.bitangent) { - const tangent = scratchTangent; - - // Use UNIT_X for the poles - let tangetOffset = 0; - let unit; - if (isInner[i]) { - tangetOffset = vertexCountHalf; - } - if ( - !isTopOpen && - i >= tangetOffset && - i < tangetOffset + numThetas * 2 - ) { - unit = Matrix3.Cartesian3.UNIT_X; - } else { - unit = Matrix3.Cartesian3.UNIT_Z; - } - Matrix3.Cartesian3.cross(unit, normal, tangent); - Matrix3.Cartesian3.normalize(tangent, tangent); - - if (vertexFormat.tangent) { - tangents[tangentIndex++] = tangent.x; - tangents[tangentIndex++] = tangent.y; - tangents[tangentIndex++] = tangent.z; - } - - if (vertexFormat.bitangent) { - const bitangent = Matrix3.Cartesian3.cross(normal, tangent, scratchBitangent); - Matrix3.Cartesian3.normalize(bitangent, bitangent); - - bitangents[bitangentIndex++] = bitangent.x; - bitangents[bitangentIndex++] = bitangent.y; - bitangents[bitangentIndex++] = bitangent.z; - } - } - } - - if (vertexFormat.st) { - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: st, - }); - } - - if (vertexFormat.normal) { - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.tangent) { - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - } - - if (defaultValue.defined(ellipsoidGeometry._offsetAttribute)) { - const length = positions.length; - const offsetValue = - ellipsoidGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: Transforms.BoundingSphere.fromEllipsoid(ellipsoidOuter), - offsetAttribute: ellipsoidGeometry._offsetAttribute, - }); - }; - - let unitEllipsoidGeometry; - - /** - * Returns the geometric representation of a unit ellipsoid, including its vertices, indices, and a bounding sphere. - * @returns {Geometry} The computed vertices and indices. - * - * @private - */ - EllipsoidGeometry.getUnitEllipsoid = function () { - if (!defaultValue.defined(unitEllipsoidGeometry)) { - unitEllipsoidGeometry = EllipsoidGeometry.createGeometry( - new EllipsoidGeometry({ - radii: new Matrix3.Cartesian3(1.0, 1.0, 1.0), - vertexFormat: VertexFormat.VertexFormat.POSITION_ONLY, - }) - ); - } - return unitEllipsoidGeometry; - }; - - exports.EllipsoidGeometry = EllipsoidGeometry; - -})); -//# sourceMappingURL=EllipsoidGeometry-66510462.js.map diff --git a/debug/cesium/Workers/EllipsoidGeometry-66510462.js.map b/debug/cesium/Workers/EllipsoidGeometry-66510462.js.map deleted file mode 100644 index 9925fd5..0000000 --- a/debug/cesium/Workers/EllipsoidGeometry-66510462.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EllipsoidGeometry-66510462.js","sources":["../../../Source/Core/EllipsoidGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst scratchPosition = new Cartesian3();\r\nconst scratchNormal = new Cartesian3();\r\nconst scratchTangent = new Cartesian3();\r\nconst scratchBitangent = new Cartesian3();\r\nconst scratchNormalST = new Cartesian3();\r\nconst defaultRadii = new Cartesian3(1.0, 1.0, 1.0);\r\n\r\nconst cos = Math.cos;\r\nconst sin = Math.sin;\r\n\r\n/**\r\n * A description of an ellipsoid centered at the origin.\r\n *\r\n * @alias EllipsoidGeometry\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions.\r\n * @param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions.\r\n * @param {Number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\r\n * @param {Number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\r\n * @param {Number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis.\r\n * @param {Number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis.\r\n * @param {Number} [options.stackPartitions=64] The number of times to partition the ellipsoid into stacks.\r\n * @param {Number} [options.slicePartitions=64] The number of times to partition the ellipsoid into radial slices.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n *\r\n * @exception {DeveloperError} options.slicePartitions cannot be less than three.\r\n * @exception {DeveloperError} options.stackPartitions cannot be less than three.\r\n *\r\n * @see EllipsoidGeometry#createGeometry\r\n *\r\n * @example\r\n * const ellipsoid = new Cesium.EllipsoidGeometry({\r\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\r\n * radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0)\r\n * });\r\n * const geometry = Cesium.EllipsoidGeometry.createGeometry(ellipsoid);\r\n */\r\nfunction EllipsoidGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const radii = defaultValue(options.radii, defaultRadii);\r\n const innerRadii = defaultValue(options.innerRadii, radii);\r\n const minimumClock = defaultValue(options.minimumClock, 0.0);\r\n const maximumClock = defaultValue(options.maximumClock, CesiumMath.TWO_PI);\r\n const minimumCone = defaultValue(options.minimumCone, 0.0);\r\n const maximumCone = defaultValue(options.maximumCone, CesiumMath.PI);\r\n const stackPartitions = Math.round(defaultValue(options.stackPartitions, 64));\r\n const slicePartitions = Math.round(defaultValue(options.slicePartitions, 64));\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (slicePartitions < 3) {\r\n throw new DeveloperError(\r\n \"options.slicePartitions cannot be less than three.\"\r\n );\r\n }\r\n if (stackPartitions < 3) {\r\n throw new DeveloperError(\r\n \"options.stackPartitions cannot be less than three.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._radii = Cartesian3.clone(radii);\r\n this._innerRadii = Cartesian3.clone(innerRadii);\r\n this._minimumClock = minimumClock;\r\n this._maximumClock = maximumClock;\r\n this._minimumCone = minimumCone;\r\n this._maximumCone = maximumCone;\r\n this._stackPartitions = stackPartitions;\r\n this._slicePartitions = slicePartitions;\r\n this._vertexFormat = VertexFormat.clone(vertexFormat);\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createEllipsoidGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nEllipsoidGeometry.packedLength =\r\n 2 * Cartesian3.packedLength + VertexFormat.packedLength + 7;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {EllipsoidGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nEllipsoidGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Cartesian3.pack(value._radii, array, startingIndex);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n Cartesian3.pack(value._innerRadii, array, startingIndex);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._minimumClock;\r\n array[startingIndex++] = value._maximumClock;\r\n array[startingIndex++] = value._minimumCone;\r\n array[startingIndex++] = value._maximumCone;\r\n array[startingIndex++] = value._stackPartitions;\r\n array[startingIndex++] = value._slicePartitions;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchRadii = new Cartesian3();\r\nconst scratchInnerRadii = new Cartesian3();\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n radii: scratchRadii,\r\n innerRadii: scratchInnerRadii,\r\n vertexFormat: scratchVertexFormat,\r\n minimumClock: undefined,\r\n maximumClock: undefined,\r\n minimumCone: undefined,\r\n maximumCone: undefined,\r\n stackPartitions: undefined,\r\n slicePartitions: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {EllipsoidGeometry} [result] The object into which to store the result.\r\n * @returns {EllipsoidGeometry} The modified result parameter or a new EllipsoidGeometry instance if one was not provided.\r\n */\r\nEllipsoidGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const radii = Cartesian3.unpack(array, startingIndex, scratchRadii);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n const innerRadii = Cartesian3.unpack(array, startingIndex, scratchInnerRadii);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const minimumClock = array[startingIndex++];\r\n const maximumClock = array[startingIndex++];\r\n const minimumCone = array[startingIndex++];\r\n const maximumCone = array[startingIndex++];\r\n const stackPartitions = array[startingIndex++];\r\n const slicePartitions = array[startingIndex++];\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.minimumClock = minimumClock;\r\n scratchOptions.maximumClock = maximumClock;\r\n scratchOptions.minimumCone = minimumCone;\r\n scratchOptions.maximumCone = maximumCone;\r\n scratchOptions.stackPartitions = stackPartitions;\r\n scratchOptions.slicePartitions = slicePartitions;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n return new EllipsoidGeometry(scratchOptions);\r\n }\r\n\r\n result._radii = Cartesian3.clone(radii, result._radii);\r\n result._innerRadii = Cartesian3.clone(innerRadii, result._innerRadii);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._minimumClock = minimumClock;\r\n result._maximumClock = maximumClock;\r\n result._minimumCone = minimumCone;\r\n result._maximumCone = maximumCone;\r\n result._stackPartitions = stackPartitions;\r\n result._slicePartitions = slicePartitions;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an ellipsoid, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {EllipsoidGeometry} ellipsoidGeometry A description of the ellipsoid.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nEllipsoidGeometry.createGeometry = function (ellipsoidGeometry) {\r\n const radii = ellipsoidGeometry._radii;\r\n if (radii.x <= 0 || radii.y <= 0 || radii.z <= 0) {\r\n return;\r\n }\r\n\r\n const innerRadii = ellipsoidGeometry._innerRadii;\r\n if (innerRadii.x <= 0 || innerRadii.y <= 0 || innerRadii.z <= 0) {\r\n return;\r\n }\r\n\r\n const minimumClock = ellipsoidGeometry._minimumClock;\r\n const maximumClock = ellipsoidGeometry._maximumClock;\r\n const minimumCone = ellipsoidGeometry._minimumCone;\r\n const maximumCone = ellipsoidGeometry._maximumCone;\r\n const vertexFormat = ellipsoidGeometry._vertexFormat;\r\n\r\n // Add an extra slice and stack so that the number of partitions is the\r\n // number of surfaces rather than the number of joints\r\n let slicePartitions = ellipsoidGeometry._slicePartitions + 1;\r\n let stackPartitions = ellipsoidGeometry._stackPartitions + 1;\r\n\r\n slicePartitions = Math.round(\r\n (slicePartitions * Math.abs(maximumClock - minimumClock)) /\r\n CesiumMath.TWO_PI\r\n );\r\n stackPartitions = Math.round(\r\n (stackPartitions * Math.abs(maximumCone - minimumCone)) / CesiumMath.PI\r\n );\r\n\r\n if (slicePartitions < 2) {\r\n slicePartitions = 2;\r\n }\r\n if (stackPartitions < 2) {\r\n stackPartitions = 2;\r\n }\r\n\r\n let i;\r\n let j;\r\n let index = 0;\r\n\r\n // Create arrays for theta and phi. Duplicate first and last angle to\r\n // allow different normals at the intersections.\r\n const phis = [minimumCone];\r\n const thetas = [minimumClock];\r\n for (i = 0; i < stackPartitions; i++) {\r\n phis.push(\r\n minimumCone + (i * (maximumCone - minimumCone)) / (stackPartitions - 1)\r\n );\r\n }\r\n phis.push(maximumCone);\r\n for (j = 0; j < slicePartitions; j++) {\r\n thetas.push(\r\n minimumClock + (j * (maximumClock - minimumClock)) / (slicePartitions - 1)\r\n );\r\n }\r\n thetas.push(maximumClock);\r\n const numPhis = phis.length;\r\n const numThetas = thetas.length;\r\n\r\n // Allow for extra indices if there is an inner surface and if we need\r\n // to close the sides if the clock range is not a full circle\r\n let extraIndices = 0;\r\n let vertexMultiplier = 1.0;\r\n const hasInnerSurface =\r\n innerRadii.x !== radii.x ||\r\n innerRadii.y !== radii.y ||\r\n innerRadii.z !== radii.z;\r\n let isTopOpen = false;\r\n let isBotOpen = false;\r\n let isClockOpen = false;\r\n if (hasInnerSurface) {\r\n vertexMultiplier = 2.0;\r\n if (minimumCone > 0.0) {\r\n isTopOpen = true;\r\n extraIndices += slicePartitions - 1;\r\n }\r\n if (maximumCone < Math.PI) {\r\n isBotOpen = true;\r\n extraIndices += slicePartitions - 1;\r\n }\r\n if ((maximumClock - minimumClock) % CesiumMath.TWO_PI) {\r\n isClockOpen = true;\r\n extraIndices += (stackPartitions - 1) * 2 + 1;\r\n } else {\r\n extraIndices += 1;\r\n }\r\n }\r\n\r\n const vertexCount = numThetas * numPhis * vertexMultiplier;\r\n const positions = new Float64Array(vertexCount * 3);\r\n const isInner = new Array(vertexCount).fill(false);\r\n const negateNormal = new Array(vertexCount).fill(false);\r\n\r\n // Multiply by 6 because there are two triangles per sector\r\n const indexCount = slicePartitions * stackPartitions * vertexMultiplier;\r\n const numIndices =\r\n 6 *\r\n (indexCount +\r\n extraIndices +\r\n 1 -\r\n (slicePartitions + stackPartitions) * vertexMultiplier);\r\n const indices = IndexDatatype.createTypedArray(indexCount, numIndices);\r\n\r\n const normals = vertexFormat.normal\r\n ? new Float32Array(vertexCount * 3)\r\n : undefined;\r\n const tangents = vertexFormat.tangent\r\n ? new Float32Array(vertexCount * 3)\r\n : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(vertexCount * 3)\r\n : undefined;\r\n const st = vertexFormat.st ? new Float32Array(vertexCount * 2) : undefined;\r\n\r\n // Calculate sin/cos phi\r\n const sinPhi = new Array(numPhis);\r\n const cosPhi = new Array(numPhis);\r\n for (i = 0; i < numPhis; i++) {\r\n sinPhi[i] = sin(phis[i]);\r\n cosPhi[i] = cos(phis[i]);\r\n }\r\n\r\n // Calculate sin/cos theta\r\n const sinTheta = new Array(numThetas);\r\n const cosTheta = new Array(numThetas);\r\n for (j = 0; j < numThetas; j++) {\r\n cosTheta[j] = cos(thetas[j]);\r\n sinTheta[j] = sin(thetas[j]);\r\n }\r\n\r\n // Create outer surface\r\n for (i = 0; i < numPhis; i++) {\r\n for (j = 0; j < numThetas; j++) {\r\n positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\r\n positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\r\n positions[index++] = radii.z * cosPhi[i];\r\n }\r\n }\r\n\r\n // Create inner surface\r\n let vertexIndex = vertexCount / 2.0;\r\n if (hasInnerSurface) {\r\n for (i = 0; i < numPhis; i++) {\r\n for (j = 0; j < numThetas; j++) {\r\n positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\r\n positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\r\n positions[index++] = innerRadii.z * cosPhi[i];\r\n\r\n // Keep track of which vertices are the inner and which ones\r\n // need the normal to be negated\r\n isInner[vertexIndex] = true;\r\n if (i > 0 && i !== numPhis - 1 && j !== 0 && j !== numThetas - 1) {\r\n negateNormal[vertexIndex] = true;\r\n }\r\n vertexIndex++;\r\n }\r\n }\r\n }\r\n\r\n // Create indices for outer surface\r\n index = 0;\r\n let topOffset;\r\n let bottomOffset;\r\n for (i = 1; i < numPhis - 2; i++) {\r\n topOffset = i * numThetas;\r\n bottomOffset = (i + 1) * numThetas;\r\n\r\n for (j = 1; j < numThetas - 2; j++) {\r\n indices[index++] = bottomOffset + j;\r\n indices[index++] = bottomOffset + j + 1;\r\n indices[index++] = topOffset + j + 1;\r\n\r\n indices[index++] = bottomOffset + j;\r\n indices[index++] = topOffset + j + 1;\r\n indices[index++] = topOffset + j;\r\n }\r\n }\r\n\r\n // Create indices for inner surface\r\n if (hasInnerSurface) {\r\n const offset = numPhis * numThetas;\r\n for (i = 1; i < numPhis - 2; i++) {\r\n topOffset = offset + i * numThetas;\r\n bottomOffset = offset + (i + 1) * numThetas;\r\n\r\n for (j = 1; j < numThetas - 2; j++) {\r\n indices[index++] = bottomOffset + j;\r\n indices[index++] = topOffset + j;\r\n indices[index++] = topOffset + j + 1;\r\n\r\n indices[index++] = bottomOffset + j;\r\n indices[index++] = topOffset + j + 1;\r\n indices[index++] = bottomOffset + j + 1;\r\n }\r\n }\r\n }\r\n\r\n let outerOffset;\r\n let innerOffset;\r\n if (hasInnerSurface) {\r\n if (isTopOpen) {\r\n // Connect the top of the inner surface to the top of the outer surface\r\n innerOffset = numPhis * numThetas;\r\n for (i = 1; i < numThetas - 2; i++) {\r\n indices[index++] = i;\r\n indices[index++] = i + 1;\r\n indices[index++] = innerOffset + i + 1;\r\n\r\n indices[index++] = i;\r\n indices[index++] = innerOffset + i + 1;\r\n indices[index++] = innerOffset + i;\r\n }\r\n }\r\n\r\n if (isBotOpen) {\r\n // Connect the bottom of the inner surface to the bottom of the outer surface\r\n outerOffset = numPhis * numThetas - numThetas;\r\n innerOffset = numPhis * numThetas * vertexMultiplier - numThetas;\r\n for (i = 1; i < numThetas - 2; i++) {\r\n indices[index++] = outerOffset + i + 1;\r\n indices[index++] = outerOffset + i;\r\n indices[index++] = innerOffset + i;\r\n\r\n indices[index++] = outerOffset + i + 1;\r\n indices[index++] = innerOffset + i;\r\n indices[index++] = innerOffset + i + 1;\r\n }\r\n }\r\n }\r\n\r\n // Connect the edges if clock is not closed\r\n if (isClockOpen) {\r\n for (i = 1; i < numPhis - 2; i++) {\r\n innerOffset = numThetas * numPhis + numThetas * i;\r\n outerOffset = numThetas * i;\r\n indices[index++] = innerOffset;\r\n indices[index++] = outerOffset + numThetas;\r\n indices[index++] = outerOffset;\r\n\r\n indices[index++] = innerOffset;\r\n indices[index++] = innerOffset + numThetas;\r\n indices[index++] = outerOffset + numThetas;\r\n }\r\n\r\n for (i = 1; i < numPhis - 2; i++) {\r\n innerOffset = numThetas * numPhis + numThetas * (i + 1) - 1;\r\n outerOffset = numThetas * (i + 1) - 1;\r\n indices[index++] = outerOffset + numThetas;\r\n indices[index++] = innerOffset;\r\n indices[index++] = outerOffset;\r\n\r\n indices[index++] = outerOffset + numThetas;\r\n indices[index++] = innerOffset + numThetas;\r\n indices[index++] = innerOffset;\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n\r\n if (vertexFormat.position) {\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n }\r\n\r\n let stIndex = 0;\r\n let normalIndex = 0;\r\n let tangentIndex = 0;\r\n let bitangentIndex = 0;\r\n const vertexCountHalf = vertexCount / 2.0;\r\n\r\n let ellipsoid;\r\n const ellipsoidOuter = Ellipsoid.fromCartesian3(radii);\r\n const ellipsoidInner = Ellipsoid.fromCartesian3(innerRadii);\r\n\r\n if (\r\n vertexFormat.st ||\r\n vertexFormat.normal ||\r\n vertexFormat.tangent ||\r\n vertexFormat.bitangent\r\n ) {\r\n for (i = 0; i < vertexCount; i++) {\r\n ellipsoid = isInner[i] ? ellipsoidInner : ellipsoidOuter;\r\n const position = Cartesian3.fromArray(positions, i * 3, scratchPosition);\r\n const normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal);\r\n if (negateNormal[i]) {\r\n Cartesian3.negate(normal, normal);\r\n }\r\n\r\n if (vertexFormat.st) {\r\n const normalST = Cartesian2.negate(normal, scratchNormalST);\r\n st[stIndex++] =\r\n Math.atan2(normalST.y, normalST.x) / CesiumMath.TWO_PI + 0.5;\r\n st[stIndex++] = Math.asin(normal.z) / Math.PI + 0.5;\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n normals[normalIndex++] = normal.x;\r\n normals[normalIndex++] = normal.y;\r\n normals[normalIndex++] = normal.z;\r\n }\r\n\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n const tangent = scratchTangent;\r\n\r\n // Use UNIT_X for the poles\r\n let tangetOffset = 0;\r\n let unit;\r\n if (isInner[i]) {\r\n tangetOffset = vertexCountHalf;\r\n }\r\n if (\r\n !isTopOpen &&\r\n i >= tangetOffset &&\r\n i < tangetOffset + numThetas * 2\r\n ) {\r\n unit = Cartesian3.UNIT_X;\r\n } else {\r\n unit = Cartesian3.UNIT_Z;\r\n }\r\n Cartesian3.cross(unit, normal, tangent);\r\n Cartesian3.normalize(tangent, tangent);\r\n\r\n if (vertexFormat.tangent) {\r\n tangents[tangentIndex++] = tangent.x;\r\n tangents[tangentIndex++] = tangent.y;\r\n tangents[tangentIndex++] = tangent.z;\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n const bitangent = Cartesian3.cross(normal, tangent, scratchBitangent);\r\n Cartesian3.normalize(bitangent, bitangent);\r\n\r\n bitangents[bitangentIndex++] = bitangent.x;\r\n bitangents[bitangentIndex++] = bitangent.y;\r\n bitangents[bitangentIndex++] = bitangent.z;\r\n }\r\n }\r\n }\r\n\r\n if (vertexFormat.st) {\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: st,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n }\r\n\r\n if (defined(ellipsoidGeometry._offsetAttribute)) {\r\n const length = positions.length;\r\n const offsetValue =\r\n ellipsoidGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: BoundingSphere.fromEllipsoid(ellipsoidOuter),\r\n offsetAttribute: ellipsoidGeometry._offsetAttribute,\r\n });\r\n};\r\n\r\nlet unitEllipsoidGeometry;\r\n\r\n/**\r\n * Returns the geometric representation of a unit ellipsoid, including its vertices, indices, and a bounding sphere.\r\n * @returns {Geometry} The computed vertices and indices.\r\n *\r\n * @private\r\n */\r\nEllipsoidGeometry.getUnitEllipsoid = function () {\r\n if (!defined(unitEllipsoidGeometry)) {\r\n unitEllipsoidGeometry = EllipsoidGeometry.createGeometry(\r\n new EllipsoidGeometry({\r\n radii: new Cartesian3(1.0, 1.0, 1.0),\r\n vertexFormat: VertexFormat.POSITION_ONLY,\r\n })\r\n );\r\n }\r\n return unitEllipsoidGeometry;\r\n};\r\nexport default EllipsoidGeometry;\r\n"],"names":["Cartesian3","defaultValue","CesiumMath","VertexFormat","DeveloperError","defined","IndexDatatype","GeometryAttributes","GeometryAttribute","ComponentDatatype","Ellipsoid","Cartesian2","GeometryOffsetAttribute","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/EllipsoidOutlineGeometry-c18e3c42.js b/debug/cesium/Workers/EllipsoidOutlineGeometry-c18e3c42.js deleted file mode 100644 index d960f0a..0000000 --- a/debug/cesium/Workers/EllipsoidOutlineGeometry-c18e3c42.js +++ /dev/null @@ -1,480 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix3-f22b0303', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './Math-9be8b918'], (function (exports, Transforms, Matrix3, ComponentDatatype, defaultValue, Check, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, Math$1) { 'use strict'; - - const defaultRadii = new Matrix3.Cartesian3(1.0, 1.0, 1.0); - const cos = Math.cos; - const sin = Math.sin; - - /** - * A description of the outline of an ellipsoid centered at the origin. - * - * @alias EllipsoidOutlineGeometry - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions. - * @param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions. - * @param {Number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. - * @param {Number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis. - * @param {Number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis. - * @param {Number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis. - * @param {Number} [options.stackPartitions=10] The count of stacks for the ellipsoid (1 greater than the number of parallel lines). - * @param {Number} [options.slicePartitions=8] The count of slices for the ellipsoid (Equal to the number of radial lines). - * @param {Number} [options.subdivisions=128] The number of points per line, determining the granularity of the curvature. - * - * @exception {DeveloperError} options.stackPartitions must be greater than or equal to one. - * @exception {DeveloperError} options.slicePartitions must be greater than or equal to zero. - * @exception {DeveloperError} options.subdivisions must be greater than or equal to zero. - * - * @example - * const ellipsoid = new Cesium.EllipsoidOutlineGeometry({ - * radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0), - * stackPartitions: 6, - * slicePartitions: 5 - * }); - * const geometry = Cesium.EllipsoidOutlineGeometry.createGeometry(ellipsoid); - */ - function EllipsoidOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const radii = defaultValue.defaultValue(options.radii, defaultRadii); - const innerRadii = defaultValue.defaultValue(options.innerRadii, radii); - const minimumClock = defaultValue.defaultValue(options.minimumClock, 0.0); - const maximumClock = defaultValue.defaultValue(options.maximumClock, Math$1.CesiumMath.TWO_PI); - const minimumCone = defaultValue.defaultValue(options.minimumCone, 0.0); - const maximumCone = defaultValue.defaultValue(options.maximumCone, Math$1.CesiumMath.PI); - const stackPartitions = Math.round(defaultValue.defaultValue(options.stackPartitions, 10)); - const slicePartitions = Math.round(defaultValue.defaultValue(options.slicePartitions, 8)); - const subdivisions = Math.round(defaultValue.defaultValue(options.subdivisions, 128)); - - //>>includeStart('debug', pragmas.debug); - if (stackPartitions < 1) { - throw new Check.DeveloperError("options.stackPartitions cannot be less than 1"); - } - if (slicePartitions < 0) { - throw new Check.DeveloperError("options.slicePartitions cannot be less than 0"); - } - if (subdivisions < 0) { - throw new Check.DeveloperError( - "options.subdivisions must be greater than or equal to zero." - ); - } - if ( - defaultValue.defined(options.offsetAttribute) && - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP - ) { - throw new Check.DeveloperError( - "GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry." - ); - } - //>>includeEnd('debug'); - - this._radii = Matrix3.Cartesian3.clone(radii); - this._innerRadii = Matrix3.Cartesian3.clone(innerRadii); - this._minimumClock = minimumClock; - this._maximumClock = maximumClock; - this._minimumCone = minimumCone; - this._maximumCone = maximumCone; - this._stackPartitions = stackPartitions; - this._slicePartitions = slicePartitions; - this._subdivisions = subdivisions; - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createEllipsoidOutlineGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - EllipsoidOutlineGeometry.packedLength = 2 * Matrix3.Cartesian3.packedLength + 8; - - /** - * Stores the provided instance into the provided array. - * - * @param {EllipsoidOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - EllipsoidOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix3.Cartesian3.pack(value._radii, array, startingIndex); - startingIndex += Matrix3.Cartesian3.packedLength; - - Matrix3.Cartesian3.pack(value._innerRadii, array, startingIndex); - startingIndex += Matrix3.Cartesian3.packedLength; - - array[startingIndex++] = value._minimumClock; - array[startingIndex++] = value._maximumClock; - array[startingIndex++] = value._minimumCone; - array[startingIndex++] = value._maximumCone; - array[startingIndex++] = value._stackPartitions; - array[startingIndex++] = value._slicePartitions; - array[startingIndex++] = value._subdivisions; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchRadii = new Matrix3.Cartesian3(); - const scratchInnerRadii = new Matrix3.Cartesian3(); - const scratchOptions = { - radii: scratchRadii, - innerRadii: scratchInnerRadii, - minimumClock: undefined, - maximumClock: undefined, - minimumCone: undefined, - maximumCone: undefined, - stackPartitions: undefined, - slicePartitions: undefined, - subdivisions: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {EllipsoidOutlineGeometry} [result] The object into which to store the result. - * @returns {EllipsoidOutlineGeometry} The modified result parameter or a new EllipsoidOutlineGeometry instance if one was not provided. - */ - EllipsoidOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const radii = Matrix3.Cartesian3.unpack(array, startingIndex, scratchRadii); - startingIndex += Matrix3.Cartesian3.packedLength; - - const innerRadii = Matrix3.Cartesian3.unpack(array, startingIndex, scratchInnerRadii); - startingIndex += Matrix3.Cartesian3.packedLength; - - const minimumClock = array[startingIndex++]; - const maximumClock = array[startingIndex++]; - const minimumCone = array[startingIndex++]; - const maximumCone = array[startingIndex++]; - const stackPartitions = array[startingIndex++]; - const slicePartitions = array[startingIndex++]; - const subdivisions = array[startingIndex++]; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.minimumClock = minimumClock; - scratchOptions.maximumClock = maximumClock; - scratchOptions.minimumCone = minimumCone; - scratchOptions.maximumCone = maximumCone; - scratchOptions.stackPartitions = stackPartitions; - scratchOptions.slicePartitions = slicePartitions; - scratchOptions.subdivisions = subdivisions; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - return new EllipsoidOutlineGeometry(scratchOptions); - } - - result._radii = Matrix3.Cartesian3.clone(radii, result._radii); - result._innerRadii = Matrix3.Cartesian3.clone(innerRadii, result._innerRadii); - result._minimumClock = minimumClock; - result._maximumClock = maximumClock; - result._minimumCone = minimumCone; - result._maximumCone = maximumCone; - result._stackPartitions = stackPartitions; - result._slicePartitions = slicePartitions; - result._subdivisions = subdivisions; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the geometric representation of an outline of an ellipsoid, including its vertices, indices, and a bounding sphere. - * - * @param {EllipsoidOutlineGeometry} ellipsoidGeometry A description of the ellipsoid outline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - EllipsoidOutlineGeometry.createGeometry = function (ellipsoidGeometry) { - const radii = ellipsoidGeometry._radii; - if (radii.x <= 0 || radii.y <= 0 || radii.z <= 0) { - return; - } - - const innerRadii = ellipsoidGeometry._innerRadii; - if (innerRadii.x <= 0 || innerRadii.y <= 0 || innerRadii.z <= 0) { - return; - } - - const minimumClock = ellipsoidGeometry._minimumClock; - const maximumClock = ellipsoidGeometry._maximumClock; - const minimumCone = ellipsoidGeometry._minimumCone; - const maximumCone = ellipsoidGeometry._maximumCone; - const subdivisions = ellipsoidGeometry._subdivisions; - const ellipsoid = Matrix3.Ellipsoid.fromCartesian3(radii); - - // Add an extra slice and stack to remain consistent with EllipsoidGeometry - let slicePartitions = ellipsoidGeometry._slicePartitions + 1; - let stackPartitions = ellipsoidGeometry._stackPartitions + 1; - - slicePartitions = Math.round( - (slicePartitions * Math.abs(maximumClock - minimumClock)) / - Math$1.CesiumMath.TWO_PI - ); - stackPartitions = Math.round( - (stackPartitions * Math.abs(maximumCone - minimumCone)) / Math$1.CesiumMath.PI - ); - - if (slicePartitions < 2) { - slicePartitions = 2; - } - if (stackPartitions < 2) { - stackPartitions = 2; - } - - let extraIndices = 0; - let vertexMultiplier = 1.0; - const hasInnerSurface = - innerRadii.x !== radii.x || - innerRadii.y !== radii.y || - innerRadii.z !== radii.z; - let isTopOpen = false; - let isBotOpen = false; - if (hasInnerSurface) { - vertexMultiplier = 2.0; - // Add 2x slicePartitions to connect the top/bottom of the outer to - // the top/bottom of the inner - if (minimumCone > 0.0) { - isTopOpen = true; - extraIndices += slicePartitions; - } - if (maximumCone < Math.PI) { - isBotOpen = true; - extraIndices += slicePartitions; - } - } - - const vertexCount = - subdivisions * vertexMultiplier * (stackPartitions + slicePartitions); - const positions = new Float64Array(vertexCount * 3); - - // Multiply by two because two points define each line segment - const numIndices = - 2 * - (vertexCount + - extraIndices - - (slicePartitions + stackPartitions) * vertexMultiplier); - const indices = IndexDatatype.IndexDatatype.createTypedArray(vertexCount, numIndices); - - let i; - let j; - let theta; - let phi; - let index = 0; - - // Calculate sin/cos phi - const sinPhi = new Array(stackPartitions); - const cosPhi = new Array(stackPartitions); - for (i = 0; i < stackPartitions; i++) { - phi = - minimumCone + (i * (maximumCone - minimumCone)) / (stackPartitions - 1); - sinPhi[i] = sin(phi); - cosPhi[i] = cos(phi); - } - - // Calculate sin/cos theta - const sinTheta = new Array(subdivisions); - const cosTheta = new Array(subdivisions); - for (i = 0; i < subdivisions; i++) { - theta = - minimumClock + (i * (maximumClock - minimumClock)) / (subdivisions - 1); - sinTheta[i] = sin(theta); - cosTheta[i] = cos(theta); - } - - // Calculate the latitude lines on the outer surface - for (i = 0; i < stackPartitions; i++) { - for (j = 0; j < subdivisions; j++) { - positions[index++] = radii.x * sinPhi[i] * cosTheta[j]; - positions[index++] = radii.y * sinPhi[i] * sinTheta[j]; - positions[index++] = radii.z * cosPhi[i]; - } - } - - // Calculate the latitude lines on the inner surface - if (hasInnerSurface) { - for (i = 0; i < stackPartitions; i++) { - for (j = 0; j < subdivisions; j++) { - positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j]; - positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j]; - positions[index++] = innerRadii.z * cosPhi[i]; - } - } - } - - // Calculate sin/cos phi - sinPhi.length = subdivisions; - cosPhi.length = subdivisions; - for (i = 0; i < subdivisions; i++) { - phi = minimumCone + (i * (maximumCone - minimumCone)) / (subdivisions - 1); - sinPhi[i] = sin(phi); - cosPhi[i] = cos(phi); - } - - // Calculate sin/cos theta for each slice partition - sinTheta.length = slicePartitions; - cosTheta.length = slicePartitions; - for (i = 0; i < slicePartitions; i++) { - theta = - minimumClock + - (i * (maximumClock - minimumClock)) / (slicePartitions - 1); - sinTheta[i] = sin(theta); - cosTheta[i] = cos(theta); - } - - // Calculate the longitude lines on the outer surface - for (i = 0; i < subdivisions; i++) { - for (j = 0; j < slicePartitions; j++) { - positions[index++] = radii.x * sinPhi[i] * cosTheta[j]; - positions[index++] = radii.y * sinPhi[i] * sinTheta[j]; - positions[index++] = radii.z * cosPhi[i]; - } - } - - // Calculate the longitude lines on the inner surface - if (hasInnerSurface) { - for (i = 0; i < subdivisions; i++) { - for (j = 0; j < slicePartitions; j++) { - positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j]; - positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j]; - positions[index++] = innerRadii.z * cosPhi[i]; - } - } - } - - // Create indices for the latitude lines - index = 0; - for (i = 0; i < stackPartitions * vertexMultiplier; i++) { - const topOffset = i * subdivisions; - for (j = 0; j < subdivisions - 1; j++) { - indices[index++] = topOffset + j; - indices[index++] = topOffset + j + 1; - } - } - - // Create indices for the outer longitude lines - let offset = stackPartitions * subdivisions * vertexMultiplier; - for (i = 0; i < slicePartitions; i++) { - for (j = 0; j < subdivisions - 1; j++) { - indices[index++] = offset + i + j * slicePartitions; - indices[index++] = offset + i + (j + 1) * slicePartitions; - } - } - - // Create indices for the inner longitude lines - if (hasInnerSurface) { - offset = - stackPartitions * subdivisions * vertexMultiplier + - slicePartitions * subdivisions; - for (i = 0; i < slicePartitions; i++) { - for (j = 0; j < subdivisions - 1; j++) { - indices[index++] = offset + i + j * slicePartitions; - indices[index++] = offset + i + (j + 1) * slicePartitions; - } - } - } - - if (hasInnerSurface) { - let outerOffset = stackPartitions * subdivisions * vertexMultiplier; - let innerOffset = outerOffset + subdivisions * slicePartitions; - if (isTopOpen) { - // Draw lines from the top of the inner surface to the top of the outer surface - for (i = 0; i < slicePartitions; i++) { - indices[index++] = outerOffset + i; - indices[index++] = innerOffset + i; - } - } - - if (isBotOpen) { - // Draw lines from the top of the inner surface to the top of the outer surface - outerOffset += subdivisions * slicePartitions - slicePartitions; - innerOffset += subdivisions * slicePartitions - slicePartitions; - for (i = 0; i < slicePartitions; i++) { - indices[index++] = outerOffset + i; - indices[index++] = innerOffset + i; - } - } - } - - const attributes = new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }), - }); - - if (defaultValue.defined(ellipsoidGeometry._offsetAttribute)) { - const length = positions.length; - const offsetValue = - ellipsoidGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: Transforms.BoundingSphere.fromEllipsoid(ellipsoid), - offsetAttribute: ellipsoidGeometry._offsetAttribute, - }); - }; - - exports.EllipsoidOutlineGeometry = EllipsoidOutlineGeometry; - -})); -//# sourceMappingURL=EllipsoidOutlineGeometry-c18e3c42.js.map diff --git a/debug/cesium/Workers/EllipsoidOutlineGeometry-c18e3c42.js.map b/debug/cesium/Workers/EllipsoidOutlineGeometry-c18e3c42.js.map deleted file mode 100644 index 770f104..0000000 --- a/debug/cesium/Workers/EllipsoidOutlineGeometry-c18e3c42.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EllipsoidOutlineGeometry-c18e3c42.js","sources":["../../../Source/Core/EllipsoidOutlineGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\n\r\nconst defaultRadii = new Cartesian3(1.0, 1.0, 1.0);\r\nconst cos = Math.cos;\r\nconst sin = Math.sin;\r\n\r\n/**\r\n * A description of the outline of an ellipsoid centered at the origin.\r\n *\r\n * @alias EllipsoidOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions.\r\n * @param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions.\r\n * @param {Number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\r\n * @param {Number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.\r\n * @param {Number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis.\r\n * @param {Number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis.\r\n * @param {Number} [options.stackPartitions=10] The count of stacks for the ellipsoid (1 greater than the number of parallel lines).\r\n * @param {Number} [options.slicePartitions=8] The count of slices for the ellipsoid (Equal to the number of radial lines).\r\n * @param {Number} [options.subdivisions=128] The number of points per line, determining the granularity of the curvature.\r\n *\r\n * @exception {DeveloperError} options.stackPartitions must be greater than or equal to one.\r\n * @exception {DeveloperError} options.slicePartitions must be greater than or equal to zero.\r\n * @exception {DeveloperError} options.subdivisions must be greater than or equal to zero.\r\n *\r\n * @example\r\n * const ellipsoid = new Cesium.EllipsoidOutlineGeometry({\r\n * radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0),\r\n * stackPartitions: 6,\r\n * slicePartitions: 5\r\n * });\r\n * const geometry = Cesium.EllipsoidOutlineGeometry.createGeometry(ellipsoid);\r\n */\r\nfunction EllipsoidOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const radii = defaultValue(options.radii, defaultRadii);\r\n const innerRadii = defaultValue(options.innerRadii, radii);\r\n const minimumClock = defaultValue(options.minimumClock, 0.0);\r\n const maximumClock = defaultValue(options.maximumClock, CesiumMath.TWO_PI);\r\n const minimumCone = defaultValue(options.minimumCone, 0.0);\r\n const maximumCone = defaultValue(options.maximumCone, CesiumMath.PI);\r\n const stackPartitions = Math.round(defaultValue(options.stackPartitions, 10));\r\n const slicePartitions = Math.round(defaultValue(options.slicePartitions, 8));\r\n const subdivisions = Math.round(defaultValue(options.subdivisions, 128));\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (stackPartitions < 1) {\r\n throw new DeveloperError(\"options.stackPartitions cannot be less than 1\");\r\n }\r\n if (slicePartitions < 0) {\r\n throw new DeveloperError(\"options.slicePartitions cannot be less than 0\");\r\n }\r\n if (subdivisions < 0) {\r\n throw new DeveloperError(\r\n \"options.subdivisions must be greater than or equal to zero.\"\r\n );\r\n }\r\n if (\r\n defined(options.offsetAttribute) &&\r\n options.offsetAttribute === GeometryOffsetAttribute.TOP\r\n ) {\r\n throw new DeveloperError(\r\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._radii = Cartesian3.clone(radii);\r\n this._innerRadii = Cartesian3.clone(innerRadii);\r\n this._minimumClock = minimumClock;\r\n this._maximumClock = maximumClock;\r\n this._minimumCone = minimumCone;\r\n this._maximumCone = maximumCone;\r\n this._stackPartitions = stackPartitions;\r\n this._slicePartitions = slicePartitions;\r\n this._subdivisions = subdivisions;\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createEllipsoidOutlineGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nEllipsoidOutlineGeometry.packedLength = 2 * Cartesian3.packedLength + 8;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {EllipsoidOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nEllipsoidOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Cartesian3.pack(value._radii, array, startingIndex);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n Cartesian3.pack(value._innerRadii, array, startingIndex);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n array[startingIndex++] = value._minimumClock;\r\n array[startingIndex++] = value._maximumClock;\r\n array[startingIndex++] = value._minimumCone;\r\n array[startingIndex++] = value._maximumCone;\r\n array[startingIndex++] = value._stackPartitions;\r\n array[startingIndex++] = value._slicePartitions;\r\n array[startingIndex++] = value._subdivisions;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchRadii = new Cartesian3();\r\nconst scratchInnerRadii = new Cartesian3();\r\nconst scratchOptions = {\r\n radii: scratchRadii,\r\n innerRadii: scratchInnerRadii,\r\n minimumClock: undefined,\r\n maximumClock: undefined,\r\n minimumCone: undefined,\r\n maximumCone: undefined,\r\n stackPartitions: undefined,\r\n slicePartitions: undefined,\r\n subdivisions: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {EllipsoidOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {EllipsoidOutlineGeometry} The modified result parameter or a new EllipsoidOutlineGeometry instance if one was not provided.\r\n */\r\nEllipsoidOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const radii = Cartesian3.unpack(array, startingIndex, scratchRadii);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n const innerRadii = Cartesian3.unpack(array, startingIndex, scratchInnerRadii);\r\n startingIndex += Cartesian3.packedLength;\r\n\r\n const minimumClock = array[startingIndex++];\r\n const maximumClock = array[startingIndex++];\r\n const minimumCone = array[startingIndex++];\r\n const maximumCone = array[startingIndex++];\r\n const stackPartitions = array[startingIndex++];\r\n const slicePartitions = array[startingIndex++];\r\n const subdivisions = array[startingIndex++];\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.minimumClock = minimumClock;\r\n scratchOptions.maximumClock = maximumClock;\r\n scratchOptions.minimumCone = minimumCone;\r\n scratchOptions.maximumCone = maximumCone;\r\n scratchOptions.stackPartitions = stackPartitions;\r\n scratchOptions.slicePartitions = slicePartitions;\r\n scratchOptions.subdivisions = subdivisions;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n return new EllipsoidOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._radii = Cartesian3.clone(radii, result._radii);\r\n result._innerRadii = Cartesian3.clone(innerRadii, result._innerRadii);\r\n result._minimumClock = minimumClock;\r\n result._maximumClock = maximumClock;\r\n result._minimumCone = minimumCone;\r\n result._maximumCone = maximumCone;\r\n result._stackPartitions = stackPartitions;\r\n result._slicePartitions = slicePartitions;\r\n result._subdivisions = subdivisions;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an outline of an ellipsoid, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {EllipsoidOutlineGeometry} ellipsoidGeometry A description of the ellipsoid outline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nEllipsoidOutlineGeometry.createGeometry = function (ellipsoidGeometry) {\r\n const radii = ellipsoidGeometry._radii;\r\n if (radii.x <= 0 || radii.y <= 0 || radii.z <= 0) {\r\n return;\r\n }\r\n\r\n const innerRadii = ellipsoidGeometry._innerRadii;\r\n if (innerRadii.x <= 0 || innerRadii.y <= 0 || innerRadii.z <= 0) {\r\n return;\r\n }\r\n\r\n const minimumClock = ellipsoidGeometry._minimumClock;\r\n const maximumClock = ellipsoidGeometry._maximumClock;\r\n const minimumCone = ellipsoidGeometry._minimumCone;\r\n const maximumCone = ellipsoidGeometry._maximumCone;\r\n const subdivisions = ellipsoidGeometry._subdivisions;\r\n const ellipsoid = Ellipsoid.fromCartesian3(radii);\r\n\r\n // Add an extra slice and stack to remain consistent with EllipsoidGeometry\r\n let slicePartitions = ellipsoidGeometry._slicePartitions + 1;\r\n let stackPartitions = ellipsoidGeometry._stackPartitions + 1;\r\n\r\n slicePartitions = Math.round(\r\n (slicePartitions * Math.abs(maximumClock - minimumClock)) /\r\n CesiumMath.TWO_PI\r\n );\r\n stackPartitions = Math.round(\r\n (stackPartitions * Math.abs(maximumCone - minimumCone)) / CesiumMath.PI\r\n );\r\n\r\n if (slicePartitions < 2) {\r\n slicePartitions = 2;\r\n }\r\n if (stackPartitions < 2) {\r\n stackPartitions = 2;\r\n }\r\n\r\n let extraIndices = 0;\r\n let vertexMultiplier = 1.0;\r\n const hasInnerSurface =\r\n innerRadii.x !== radii.x ||\r\n innerRadii.y !== radii.y ||\r\n innerRadii.z !== radii.z;\r\n let isTopOpen = false;\r\n let isBotOpen = false;\r\n if (hasInnerSurface) {\r\n vertexMultiplier = 2.0;\r\n // Add 2x slicePartitions to connect the top/bottom of the outer to\r\n // the top/bottom of the inner\r\n if (minimumCone > 0.0) {\r\n isTopOpen = true;\r\n extraIndices += slicePartitions;\r\n }\r\n if (maximumCone < Math.PI) {\r\n isBotOpen = true;\r\n extraIndices += slicePartitions;\r\n }\r\n }\r\n\r\n const vertexCount =\r\n subdivisions * vertexMultiplier * (stackPartitions + slicePartitions);\r\n const positions = new Float64Array(vertexCount * 3);\r\n\r\n // Multiply by two because two points define each line segment\r\n const numIndices =\r\n 2 *\r\n (vertexCount +\r\n extraIndices -\r\n (slicePartitions + stackPartitions) * vertexMultiplier);\r\n const indices = IndexDatatype.createTypedArray(vertexCount, numIndices);\r\n\r\n let i;\r\n let j;\r\n let theta;\r\n let phi;\r\n let index = 0;\r\n\r\n // Calculate sin/cos phi\r\n const sinPhi = new Array(stackPartitions);\r\n const cosPhi = new Array(stackPartitions);\r\n for (i = 0; i < stackPartitions; i++) {\r\n phi =\r\n minimumCone + (i * (maximumCone - minimumCone)) / (stackPartitions - 1);\r\n sinPhi[i] = sin(phi);\r\n cosPhi[i] = cos(phi);\r\n }\r\n\r\n // Calculate sin/cos theta\r\n const sinTheta = new Array(subdivisions);\r\n const cosTheta = new Array(subdivisions);\r\n for (i = 0; i < subdivisions; i++) {\r\n theta =\r\n minimumClock + (i * (maximumClock - minimumClock)) / (subdivisions - 1);\r\n sinTheta[i] = sin(theta);\r\n cosTheta[i] = cos(theta);\r\n }\r\n\r\n // Calculate the latitude lines on the outer surface\r\n for (i = 0; i < stackPartitions; i++) {\r\n for (j = 0; j < subdivisions; j++) {\r\n positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\r\n positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\r\n positions[index++] = radii.z * cosPhi[i];\r\n }\r\n }\r\n\r\n // Calculate the latitude lines on the inner surface\r\n if (hasInnerSurface) {\r\n for (i = 0; i < stackPartitions; i++) {\r\n for (j = 0; j < subdivisions; j++) {\r\n positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\r\n positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\r\n positions[index++] = innerRadii.z * cosPhi[i];\r\n }\r\n }\r\n }\r\n\r\n // Calculate sin/cos phi\r\n sinPhi.length = subdivisions;\r\n cosPhi.length = subdivisions;\r\n for (i = 0; i < subdivisions; i++) {\r\n phi = minimumCone + (i * (maximumCone - minimumCone)) / (subdivisions - 1);\r\n sinPhi[i] = sin(phi);\r\n cosPhi[i] = cos(phi);\r\n }\r\n\r\n // Calculate sin/cos theta for each slice partition\r\n sinTheta.length = slicePartitions;\r\n cosTheta.length = slicePartitions;\r\n for (i = 0; i < slicePartitions; i++) {\r\n theta =\r\n minimumClock +\r\n (i * (maximumClock - minimumClock)) / (slicePartitions - 1);\r\n sinTheta[i] = sin(theta);\r\n cosTheta[i] = cos(theta);\r\n }\r\n\r\n // Calculate the longitude lines on the outer surface\r\n for (i = 0; i < subdivisions; i++) {\r\n for (j = 0; j < slicePartitions; j++) {\r\n positions[index++] = radii.x * sinPhi[i] * cosTheta[j];\r\n positions[index++] = radii.y * sinPhi[i] * sinTheta[j];\r\n positions[index++] = radii.z * cosPhi[i];\r\n }\r\n }\r\n\r\n // Calculate the longitude lines on the inner surface\r\n if (hasInnerSurface) {\r\n for (i = 0; i < subdivisions; i++) {\r\n for (j = 0; j < slicePartitions; j++) {\r\n positions[index++] = innerRadii.x * sinPhi[i] * cosTheta[j];\r\n positions[index++] = innerRadii.y * sinPhi[i] * sinTheta[j];\r\n positions[index++] = innerRadii.z * cosPhi[i];\r\n }\r\n }\r\n }\r\n\r\n // Create indices for the latitude lines\r\n index = 0;\r\n for (i = 0; i < stackPartitions * vertexMultiplier; i++) {\r\n const topOffset = i * subdivisions;\r\n for (j = 0; j < subdivisions - 1; j++) {\r\n indices[index++] = topOffset + j;\r\n indices[index++] = topOffset + j + 1;\r\n }\r\n }\r\n\r\n // Create indices for the outer longitude lines\r\n let offset = stackPartitions * subdivisions * vertexMultiplier;\r\n for (i = 0; i < slicePartitions; i++) {\r\n for (j = 0; j < subdivisions - 1; j++) {\r\n indices[index++] = offset + i + j * slicePartitions;\r\n indices[index++] = offset + i + (j + 1) * slicePartitions;\r\n }\r\n }\r\n\r\n // Create indices for the inner longitude lines\r\n if (hasInnerSurface) {\r\n offset =\r\n stackPartitions * subdivisions * vertexMultiplier +\r\n slicePartitions * subdivisions;\r\n for (i = 0; i < slicePartitions; i++) {\r\n for (j = 0; j < subdivisions - 1; j++) {\r\n indices[index++] = offset + i + j * slicePartitions;\r\n indices[index++] = offset + i + (j + 1) * slicePartitions;\r\n }\r\n }\r\n }\r\n\r\n if (hasInnerSurface) {\r\n let outerOffset = stackPartitions * subdivisions * vertexMultiplier;\r\n let innerOffset = outerOffset + subdivisions * slicePartitions;\r\n if (isTopOpen) {\r\n // Draw lines from the top of the inner surface to the top of the outer surface\r\n for (i = 0; i < slicePartitions; i++) {\r\n indices[index++] = outerOffset + i;\r\n indices[index++] = innerOffset + i;\r\n }\r\n }\r\n\r\n if (isBotOpen) {\r\n // Draw lines from the top of the inner surface to the top of the outer surface\r\n outerOffset += subdivisions * slicePartitions - slicePartitions;\r\n innerOffset += subdivisions * slicePartitions - slicePartitions;\r\n for (i = 0; i < slicePartitions; i++) {\r\n indices[index++] = outerOffset + i;\r\n indices[index++] = innerOffset + i;\r\n }\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n }),\r\n });\r\n\r\n if (defined(ellipsoidGeometry._offsetAttribute)) {\r\n const length = positions.length;\r\n const offsetValue =\r\n ellipsoidGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: BoundingSphere.fromEllipsoid(ellipsoid),\r\n offsetAttribute: ellipsoidGeometry._offsetAttribute,\r\n });\r\n};\r\nexport default EllipsoidOutlineGeometry;\r\n"],"names":["Cartesian3","defaultValue","CesiumMath","DeveloperError","defined","GeometryOffsetAttribute","Ellipsoid","IndexDatatype","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/EllipsoidRhumbLine-48b4507b.js b/debug/cesium/Workers/EllipsoidRhumbLine-48b4507b.js deleted file mode 100644 index 018ce00..0000000 --- a/debug/cesium/Workers/EllipsoidRhumbLine-48b4507b.js +++ /dev/null @@ -1,767 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918'], (function (exports, Matrix3, Check, defaultValue, Math$1) { 'use strict'; - - function calculateM(ellipticity, major, latitude) { - if (ellipticity === 0.0) { - // sphere - return major * latitude; - } - - const e2 = ellipticity * ellipticity; - const e4 = e2 * e2; - const e6 = e4 * e2; - const e8 = e6 * e2; - const e10 = e8 * e2; - const e12 = e10 * e2; - const phi = latitude; - const sin2Phi = Math.sin(2 * phi); - const sin4Phi = Math.sin(4 * phi); - const sin6Phi = Math.sin(6 * phi); - const sin8Phi = Math.sin(8 * phi); - const sin10Phi = Math.sin(10 * phi); - const sin12Phi = Math.sin(12 * phi); - - return ( - major * - ((1 - - e2 / 4 - - (3 * e4) / 64 - - (5 * e6) / 256 - - (175 * e8) / 16384 - - (441 * e10) / 65536 - - (4851 * e12) / 1048576) * - phi - - ((3 * e2) / 8 + - (3 * e4) / 32 + - (45 * e6) / 1024 + - (105 * e8) / 4096 + - (2205 * e10) / 131072 + - (6237 * e12) / 524288) * - sin2Phi + - ((15 * e4) / 256 + - (45 * e6) / 1024 + - (525 * e8) / 16384 + - (1575 * e10) / 65536 + - (155925 * e12) / 8388608) * - sin4Phi - - ((35 * e6) / 3072 + - (175 * e8) / 12288 + - (3675 * e10) / 262144 + - (13475 * e12) / 1048576) * - sin6Phi + - ((315 * e8) / 131072 + (2205 * e10) / 524288 + (43659 * e12) / 8388608) * - sin8Phi - - ((693 * e10) / 1310720 + (6237 * e12) / 5242880) * sin10Phi + - ((1001 * e12) / 8388608) * sin12Phi) - ); - } - - function calculateInverseM(M, ellipticity, major) { - const d = M / major; - - if (ellipticity === 0.0) { - // sphere - return d; - } - - const d2 = d * d; - const d3 = d2 * d; - const d4 = d3 * d; - const e = ellipticity; - const e2 = e * e; - const e4 = e2 * e2; - const e6 = e4 * e2; - const e8 = e6 * e2; - const e10 = e8 * e2; - const e12 = e10 * e2; - const sin2D = Math.sin(2 * d); - const cos2D = Math.cos(2 * d); - const sin4D = Math.sin(4 * d); - const cos4D = Math.cos(4 * d); - const sin6D = Math.sin(6 * d); - const cos6D = Math.cos(6 * d); - const sin8D = Math.sin(8 * d); - const cos8D = Math.cos(8 * d); - const sin10D = Math.sin(10 * d); - const cos10D = Math.cos(10 * d); - const sin12D = Math.sin(12 * d); - - return ( - d + - (d * e2) / 4 + - (7 * d * e4) / 64 + - (15 * d * e6) / 256 + - (579 * d * e8) / 16384 + - (1515 * d * e10) / 65536 + - (16837 * d * e12) / 1048576 + - ((3 * d * e4) / 16 + - (45 * d * e6) / 256 - - (d * (32 * d2 - 561) * e8) / 4096 - - (d * (232 * d2 - 1677) * e10) / 16384 + - (d * (399985 - 90560 * d2 + 512 * d4) * e12) / 5242880) * - cos2D + - ((21 * d * e6) / 256 + - (483 * d * e8) / 4096 - - (d * (224 * d2 - 1969) * e10) / 16384 - - (d * (33152 * d2 - 112599) * e12) / 1048576) * - cos4D + - ((151 * d * e8) / 4096 + - (4681 * d * e10) / 65536 + - (1479 * d * e12) / 16384 - - (453 * d3 * e12) / 32768) * - cos6D + - ((1097 * d * e10) / 65536 + (42783 * d * e12) / 1048576) * cos8D + - ((8011 * d * e12) / 1048576) * cos10D + - ((3 * e2) / 8 + - (3 * e4) / 16 + - (213 * e6) / 2048 - - (3 * d2 * e6) / 64 + - (255 * e8) / 4096 - - (33 * d2 * e8) / 512 + - (20861 * e10) / 524288 - - (33 * d2 * e10) / 512 + - (d4 * e10) / 1024 + - (28273 * e12) / 1048576 - - (471 * d2 * e12) / 8192 + - (9 * d4 * e12) / 4096) * - sin2D + - ((21 * e4) / 256 + - (21 * e6) / 256 + - (533 * e8) / 8192 - - (21 * d2 * e8) / 512 + - (197 * e10) / 4096 - - (315 * d2 * e10) / 4096 + - (584039 * e12) / 16777216 - - (12517 * d2 * e12) / 131072 + - (7 * d4 * e12) / 2048) * - sin4D + - ((151 * e6) / 6144 + - (151 * e8) / 4096 + - (5019 * e10) / 131072 - - (453 * d2 * e10) / 16384 + - (26965 * e12) / 786432 - - (8607 * d2 * e12) / 131072) * - sin6D + - ((1097 * e8) / 131072 + - (1097 * e10) / 65536 + - (225797 * e12) / 10485760 - - (1097 * d2 * e12) / 65536) * - sin8D + - ((8011 * e10) / 2621440 + (8011 * e12) / 1048576) * sin10D + - ((293393 * e12) / 251658240) * sin12D - ); - } - - function calculateSigma(ellipticity, latitude) { - if (ellipticity === 0.0) { - // sphere - return Math.log(Math.tan(0.5 * (Math$1.CesiumMath.PI_OVER_TWO + latitude))); - } - - const eSinL = ellipticity * Math.sin(latitude); - return ( - Math.log(Math.tan(0.5 * (Math$1.CesiumMath.PI_OVER_TWO + latitude))) - - (ellipticity / 2.0) * Math.log((1 + eSinL) / (1 - eSinL)) - ); - } - - function calculateHeading( - ellipsoidRhumbLine, - firstLongitude, - firstLatitude, - secondLongitude, - secondLatitude - ) { - const sigma1 = calculateSigma(ellipsoidRhumbLine._ellipticity, firstLatitude); - const sigma2 = calculateSigma( - ellipsoidRhumbLine._ellipticity, - secondLatitude - ); - return Math.atan2( - Math$1.CesiumMath.negativePiToPi(secondLongitude - firstLongitude), - sigma2 - sigma1 - ); - } - - function calculateArcLength( - ellipsoidRhumbLine, - major, - minor, - firstLongitude, - firstLatitude, - secondLongitude, - secondLatitude - ) { - const heading = ellipsoidRhumbLine._heading; - const deltaLongitude = secondLongitude - firstLongitude; - - let distance = 0.0; - - //Check to see if the rhumb line has constant latitude - //This equation will diverge if heading gets close to 90 degrees - if ( - Math$1.CesiumMath.equalsEpsilon( - Math.abs(heading), - Math$1.CesiumMath.PI_OVER_TWO, - Math$1.CesiumMath.EPSILON8 - ) - ) { - //If heading is close to 90 degrees - if (major === minor) { - distance = - major * - Math.cos(firstLatitude) * - Math$1.CesiumMath.negativePiToPi(deltaLongitude); - } else { - const sinPhi = Math.sin(firstLatitude); - distance = - (major * - Math.cos(firstLatitude) * - Math$1.CesiumMath.negativePiToPi(deltaLongitude)) / - Math.sqrt(1 - ellipsoidRhumbLine._ellipticitySquared * sinPhi * sinPhi); - } - } else { - const M1 = calculateM( - ellipsoidRhumbLine._ellipticity, - major, - firstLatitude - ); - const M2 = calculateM( - ellipsoidRhumbLine._ellipticity, - major, - secondLatitude - ); - - distance = (M2 - M1) / Math.cos(heading); - } - return Math.abs(distance); - } - - const scratchCart1 = new Matrix3.Cartesian3(); - const scratchCart2 = new Matrix3.Cartesian3(); - - function computeProperties(ellipsoidRhumbLine, start, end, ellipsoid) { - const firstCartesian = Matrix3.Cartesian3.normalize( - ellipsoid.cartographicToCartesian(start, scratchCart2), - scratchCart1 - ); - const lastCartesian = Matrix3.Cartesian3.normalize( - ellipsoid.cartographicToCartesian(end, scratchCart2), - scratchCart2 - ); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThanOrEquals( - "value", - Math.abs( - Math.abs(Matrix3.Cartesian3.angleBetween(firstCartesian, lastCartesian)) - Math.PI - ), - 0.0125 - ); - //>>includeEnd('debug'); - - const major = ellipsoid.maximumRadius; - const minor = ellipsoid.minimumRadius; - const majorSquared = major * major; - const minorSquared = minor * minor; - ellipsoidRhumbLine._ellipticitySquared = - (majorSquared - minorSquared) / majorSquared; - ellipsoidRhumbLine._ellipticity = Math.sqrt( - ellipsoidRhumbLine._ellipticitySquared - ); - - ellipsoidRhumbLine._start = Matrix3.Cartographic.clone( - start, - ellipsoidRhumbLine._start - ); - ellipsoidRhumbLine._start.height = 0; - - ellipsoidRhumbLine._end = Matrix3.Cartographic.clone(end, ellipsoidRhumbLine._end); - ellipsoidRhumbLine._end.height = 0; - - ellipsoidRhumbLine._heading = calculateHeading( - ellipsoidRhumbLine, - start.longitude, - start.latitude, - end.longitude, - end.latitude - ); - ellipsoidRhumbLine._distance = calculateArcLength( - ellipsoidRhumbLine, - ellipsoid.maximumRadius, - ellipsoid.minimumRadius, - start.longitude, - start.latitude, - end.longitude, - end.latitude - ); - } - - function interpolateUsingSurfaceDistance( - start, - heading, - distance, - major, - ellipticity, - result - ) { - if (distance === 0.0) { - return Matrix3.Cartographic.clone(start, result); - } - - const ellipticitySquared = ellipticity * ellipticity; - - let longitude; - let latitude; - let deltaLongitude; - - //Check to see if the rhumb line has constant latitude - //This won't converge if heading is close to 90 degrees - if ( - Math.abs(Math$1.CesiumMath.PI_OVER_TWO - Math.abs(heading)) > Math$1.CesiumMath.EPSILON8 - ) { - //Calculate latitude of the second point - const M1 = calculateM(ellipticity, major, start.latitude); - const deltaM = distance * Math.cos(heading); - const M2 = M1 + deltaM; - latitude = calculateInverseM(M2, ellipticity, major); - - //Now find the longitude of the second point - const sigma1 = calculateSigma(ellipticity, start.latitude); - const sigma2 = calculateSigma(ellipticity, latitude); - deltaLongitude = Math.tan(heading) * (sigma2 - sigma1); - longitude = Math$1.CesiumMath.negativePiToPi(start.longitude + deltaLongitude); - } else { - //If heading is close to 90 degrees - latitude = start.latitude; - let localRad; - - if (ellipticity === 0.0) { - // sphere - localRad = major * Math.cos(start.latitude); - } else { - const sinPhi = Math.sin(start.latitude); - localRad = - (major * Math.cos(start.latitude)) / - Math.sqrt(1 - ellipticitySquared * sinPhi * sinPhi); - } - - deltaLongitude = distance / localRad; - if (heading > 0.0) { - longitude = Math$1.CesiumMath.negativePiToPi(start.longitude + deltaLongitude); - } else { - longitude = Math$1.CesiumMath.negativePiToPi(start.longitude - deltaLongitude); - } - } - - if (defaultValue.defined(result)) { - result.longitude = longitude; - result.latitude = latitude; - result.height = 0; - - return result; - } - - return new Matrix3.Cartographic(longitude, latitude, 0); - } - - /** - * Initializes a rhumb line on the ellipsoid connecting the two provided planetodetic points. - * - * @alias EllipsoidRhumbLine - * @constructor - * - * @param {Cartographic} [start] The initial planetodetic point on the path. - * @param {Cartographic} [end] The final planetodetic point on the path. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rhumb line lies. - * - * @exception {DeveloperError} angle between start and end must be at least 0.0125 radians. - */ - function EllipsoidRhumbLine(start, end, ellipsoid) { - const e = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - this._ellipsoid = e; - this._start = new Matrix3.Cartographic(); - this._end = new Matrix3.Cartographic(); - - this._heading = undefined; - this._distance = undefined; - this._ellipticity = undefined; - this._ellipticitySquared = undefined; - - if (defaultValue.defined(start) && defaultValue.defined(end)) { - computeProperties(this, start, end, e); - } - } - - Object.defineProperties(EllipsoidRhumbLine.prototype, { - /** - * Gets the ellipsoid. - * @memberof EllipsoidRhumbLine.prototype - * @type {Ellipsoid} - * @readonly - */ - ellipsoid: { - get: function () { - return this._ellipsoid; - }, - }, - - /** - * Gets the surface distance between the start and end point - * @memberof EllipsoidRhumbLine.prototype - * @type {Number} - * @readonly - */ - surfaceDistance: { - get: function () { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("distance", this._distance); - //>>includeEnd('debug'); - - return this._distance; - }, - }, - - /** - * Gets the initial planetodetic point on the path. - * @memberof EllipsoidRhumbLine.prototype - * @type {Cartographic} - * @readonly - */ - start: { - get: function () { - return this._start; - }, - }, - - /** - * Gets the final planetodetic point on the path. - * @memberof EllipsoidRhumbLine.prototype - * @type {Cartographic} - * @readonly - */ - end: { - get: function () { - return this._end; - }, - }, - - /** - * Gets the heading from the start point to the end point. - * @memberof EllipsoidRhumbLine.prototype - * @type {Number} - * @readonly - */ - heading: { - get: function () { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("distance", this._distance); - //>>includeEnd('debug'); - - return this._heading; - }, - }, - }); - - /** - * Create a rhumb line using an initial position with a heading and distance. - * - * @param {Cartographic} start The initial planetodetic point on the path. - * @param {Number} heading The heading in radians. - * @param {Number} distance The rhumb line distance between the start and end point. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rhumb line lies. - * @param {EllipsoidRhumbLine} [result] The object in which to store the result. - * @returns {EllipsoidRhumbLine} The EllipsoidRhumbLine object. - */ - EllipsoidRhumbLine.fromStartHeadingDistance = function ( - start, - heading, - distance, - ellipsoid, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("start", start); - Check.Check.defined("heading", heading); - Check.Check.defined("distance", distance); - Check.Check.typeOf.number.greaterThan("distance", distance, 0.0); - //>>includeEnd('debug'); - - const e = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - const major = e.maximumRadius; - const minor = e.minimumRadius; - const majorSquared = major * major; - const minorSquared = minor * minor; - const ellipticity = Math.sqrt((majorSquared - minorSquared) / majorSquared); - - heading = Math$1.CesiumMath.negativePiToPi(heading); - const end = interpolateUsingSurfaceDistance( - start, - heading, - distance, - e.maximumRadius, - ellipticity - ); - - if ( - !defaultValue.defined(result) || - (defaultValue.defined(ellipsoid) && !ellipsoid.equals(result.ellipsoid)) - ) { - return new EllipsoidRhumbLine(start, end, e); - } - - result.setEndPoints(start, end); - return result; - }; - - /** - * Sets the start and end points of the rhumb line. - * - * @param {Cartographic} start The initial planetodetic point on the path. - * @param {Cartographic} end The final planetodetic point on the path. - */ - EllipsoidRhumbLine.prototype.setEndPoints = function (start, end) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("start", start); - Check.Check.defined("end", end); - //>>includeEnd('debug'); - - computeProperties(this, start, end, this._ellipsoid); - }; - - /** - * Provides the location of a point at the indicated portion along the rhumb line. - * - * @param {Number} fraction The portion of the distance between the initial and final points. - * @param {Cartographic} [result] The object in which to store the result. - * @returns {Cartographic} The location of the point along the rhumb line. - */ - EllipsoidRhumbLine.prototype.interpolateUsingFraction = function ( - fraction, - result - ) { - return this.interpolateUsingSurfaceDistance( - fraction * this._distance, - result - ); - }; - - /** - * Provides the location of a point at the indicated distance along the rhumb line. - * - * @param {Number} distance The distance from the inital point to the point of interest along the rhumbLine. - * @param {Cartographic} [result] The object in which to store the result. - * @returns {Cartographic} The location of the point along the rhumb line. - * - * @exception {DeveloperError} start and end must be set before calling function interpolateUsingSurfaceDistance - */ - EllipsoidRhumbLine.prototype.interpolateUsingSurfaceDistance = function ( - distance, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("distance", distance); - if (!defaultValue.defined(this._distance) || this._distance === 0.0) { - throw new Check.DeveloperError( - "EllipsoidRhumbLine must have distinct start and end set." - ); - } - //>>includeEnd('debug'); - - return interpolateUsingSurfaceDistance( - this._start, - this._heading, - distance, - this._ellipsoid.maximumRadius, - this._ellipticity, - result - ); - }; - - /** - * Provides the location of a point at the indicated longitude along the rhumb line. - * If the longitude is outside the range of start and end points, the first intersection with the longitude from the start point in the direction of the heading is returned. This follows the spiral property of a rhumb line. - * - * @param {Number} intersectionLongitude The longitude, in radians, at which to find the intersection point from the starting point using the heading. - * @param {Cartographic} [result] The object in which to store the result. - * @returns {Cartographic} The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections. - * - * @exception {DeveloperError} start and end must be set before calling function findIntersectionWithLongitude. - */ - EllipsoidRhumbLine.prototype.findIntersectionWithLongitude = function ( - intersectionLongitude, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("intersectionLongitude", intersectionLongitude); - if (!defaultValue.defined(this._distance) || this._distance === 0.0) { - throw new Check.DeveloperError( - "EllipsoidRhumbLine must have distinct start and end set." - ); - } - //>>includeEnd('debug'); - - const ellipticity = this._ellipticity; - const heading = this._heading; - const absHeading = Math.abs(heading); - const start = this._start; - - intersectionLongitude = Math$1.CesiumMath.negativePiToPi(intersectionLongitude); - - if ( - Math$1.CesiumMath.equalsEpsilon( - Math.abs(intersectionLongitude), - Math.PI, - Math$1.CesiumMath.EPSILON14 - ) - ) { - intersectionLongitude = Math$1.CesiumMath.sign(start.longitude) * Math.PI; - } - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartographic(); - } - - // If heading is -PI/2 or PI/2, this is an E-W rhumb line - // If heading is 0 or PI, this is an N-S rhumb line - if (Math.abs(Math$1.CesiumMath.PI_OVER_TWO - absHeading) <= Math$1.CesiumMath.EPSILON8) { - result.longitude = intersectionLongitude; - result.latitude = start.latitude; - result.height = 0; - return result; - } else if ( - Math$1.CesiumMath.equalsEpsilon( - Math.abs(Math$1.CesiumMath.PI_OVER_TWO - absHeading), - Math$1.CesiumMath.PI_OVER_TWO, - Math$1.CesiumMath.EPSILON8 - ) - ) { - if ( - Math$1.CesiumMath.equalsEpsilon( - intersectionLongitude, - start.longitude, - Math$1.CesiumMath.EPSILON12 - ) - ) { - return undefined; - } - - result.longitude = intersectionLongitude; - result.latitude = - Math$1.CesiumMath.PI_OVER_TWO * - Math$1.CesiumMath.sign(Math$1.CesiumMath.PI_OVER_TWO - heading); - result.height = 0; - return result; - } - - // Use iterative solver from Equation 9 from http://edwilliams.org/ellipsoid/ellipsoid.pdf - const phi1 = start.latitude; - const eSinPhi1 = ellipticity * Math.sin(phi1); - const leftComponent = - Math.tan(0.5 * (Math$1.CesiumMath.PI_OVER_TWO + phi1)) * - Math.exp((intersectionLongitude - start.longitude) / Math.tan(heading)); - const denominator = (1 + eSinPhi1) / (1 - eSinPhi1); - - let newPhi = start.latitude; - let phi; - do { - phi = newPhi; - const eSinPhi = ellipticity * Math.sin(phi); - const numerator = (1 + eSinPhi) / (1 - eSinPhi); - newPhi = - 2 * - Math.atan( - leftComponent * Math.pow(numerator / denominator, ellipticity / 2) - ) - - Math$1.CesiumMath.PI_OVER_TWO; - } while (!Math$1.CesiumMath.equalsEpsilon(newPhi, phi, Math$1.CesiumMath.EPSILON12)); - - result.longitude = intersectionLongitude; - result.latitude = newPhi; - result.height = 0; - return result; - }; - - /** - * Provides the location of a point at the indicated latitude along the rhumb line. - * If the latitude is outside the range of start and end points, the first intersection with the latitude from that start point in the direction of the heading is returned. This follows the spiral property of a rhumb line. - * - * @param {Number} intersectionLatitude The latitude, in radians, at which to find the intersection point from the starting point using the heading. - * @param {Cartographic} [result] The object in which to store the result. - * @returns {Cartographic} The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections. - * - * @exception {DeveloperError} start and end must be set before calling function findIntersectionWithLongitude. - */ - EllipsoidRhumbLine.prototype.findIntersectionWithLatitude = function ( - intersectionLatitude, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("intersectionLatitude", intersectionLatitude); - if (!defaultValue.defined(this._distance) || this._distance === 0.0) { - throw new Check.DeveloperError( - "EllipsoidRhumbLine must have distinct start and end set." - ); - } - //>>includeEnd('debug'); - - const ellipticity = this._ellipticity; - const heading = this._heading; - const start = this._start; - - // If start and end have same latitude, return undefined since it's either no intersection or infinite intersections - if ( - Math$1.CesiumMath.equalsEpsilon( - Math.abs(heading), - Math$1.CesiumMath.PI_OVER_TWO, - Math$1.CesiumMath.EPSILON8 - ) - ) { - return; - } - - // Can be solved using the same equations from interpolateUsingSurfaceDistance - const sigma1 = calculateSigma(ellipticity, start.latitude); - const sigma2 = calculateSigma(ellipticity, intersectionLatitude); - const deltaLongitude = Math.tan(heading) * (sigma2 - sigma1); - const longitude = Math$1.CesiumMath.negativePiToPi(start.longitude + deltaLongitude); - - if (defaultValue.defined(result)) { - result.longitude = longitude; - result.latitude = intersectionLatitude; - result.height = 0; - - return result; - } - - return new Matrix3.Cartographic(longitude, intersectionLatitude, 0); - }; - - exports.EllipsoidRhumbLine = EllipsoidRhumbLine; - -})); -//# sourceMappingURL=EllipsoidRhumbLine-48b4507b.js.map diff --git a/debug/cesium/Workers/EllipsoidRhumbLine-48b4507b.js.map b/debug/cesium/Workers/EllipsoidRhumbLine-48b4507b.js.map deleted file mode 100644 index eba02ac..0000000 --- a/debug/cesium/Workers/EllipsoidRhumbLine-48b4507b.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EllipsoidRhumbLine-48b4507b.js","sources":["../../../Source/Core/EllipsoidRhumbLine.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\nfunction calculateM(ellipticity, major, latitude) {\r\n if (ellipticity === 0.0) {\r\n // sphere\r\n return major * latitude;\r\n }\r\n\r\n const e2 = ellipticity * ellipticity;\r\n const e4 = e2 * e2;\r\n const e6 = e4 * e2;\r\n const e8 = e6 * e2;\r\n const e10 = e8 * e2;\r\n const e12 = e10 * e2;\r\n const phi = latitude;\r\n const sin2Phi = Math.sin(2 * phi);\r\n const sin4Phi = Math.sin(4 * phi);\r\n const sin6Phi = Math.sin(6 * phi);\r\n const sin8Phi = Math.sin(8 * phi);\r\n const sin10Phi = Math.sin(10 * phi);\r\n const sin12Phi = Math.sin(12 * phi);\r\n\r\n return (\r\n major *\r\n ((1 -\r\n e2 / 4 -\r\n (3 * e4) / 64 -\r\n (5 * e6) / 256 -\r\n (175 * e8) / 16384 -\r\n (441 * e10) / 65536 -\r\n (4851 * e12) / 1048576) *\r\n phi -\r\n ((3 * e2) / 8 +\r\n (3 * e4) / 32 +\r\n (45 * e6) / 1024 +\r\n (105 * e8) / 4096 +\r\n (2205 * e10) / 131072 +\r\n (6237 * e12) / 524288) *\r\n sin2Phi +\r\n ((15 * e4) / 256 +\r\n (45 * e6) / 1024 +\r\n (525 * e8) / 16384 +\r\n (1575 * e10) / 65536 +\r\n (155925 * e12) / 8388608) *\r\n sin4Phi -\r\n ((35 * e6) / 3072 +\r\n (175 * e8) / 12288 +\r\n (3675 * e10) / 262144 +\r\n (13475 * e12) / 1048576) *\r\n sin6Phi +\r\n ((315 * e8) / 131072 + (2205 * e10) / 524288 + (43659 * e12) / 8388608) *\r\n sin8Phi -\r\n ((693 * e10) / 1310720 + (6237 * e12) / 5242880) * sin10Phi +\r\n ((1001 * e12) / 8388608) * sin12Phi)\r\n );\r\n}\r\n\r\nfunction calculateInverseM(M, ellipticity, major) {\r\n const d = M / major;\r\n\r\n if (ellipticity === 0.0) {\r\n // sphere\r\n return d;\r\n }\r\n\r\n const d2 = d * d;\r\n const d3 = d2 * d;\r\n const d4 = d3 * d;\r\n const e = ellipticity;\r\n const e2 = e * e;\r\n const e4 = e2 * e2;\r\n const e6 = e4 * e2;\r\n const e8 = e6 * e2;\r\n const e10 = e8 * e2;\r\n const e12 = e10 * e2;\r\n const sin2D = Math.sin(2 * d);\r\n const cos2D = Math.cos(2 * d);\r\n const sin4D = Math.sin(4 * d);\r\n const cos4D = Math.cos(4 * d);\r\n const sin6D = Math.sin(6 * d);\r\n const cos6D = Math.cos(6 * d);\r\n const sin8D = Math.sin(8 * d);\r\n const cos8D = Math.cos(8 * d);\r\n const sin10D = Math.sin(10 * d);\r\n const cos10D = Math.cos(10 * d);\r\n const sin12D = Math.sin(12 * d);\r\n\r\n return (\r\n d +\r\n (d * e2) / 4 +\r\n (7 * d * e4) / 64 +\r\n (15 * d * e6) / 256 +\r\n (579 * d * e8) / 16384 +\r\n (1515 * d * e10) / 65536 +\r\n (16837 * d * e12) / 1048576 +\r\n ((3 * d * e4) / 16 +\r\n (45 * d * e6) / 256 -\r\n (d * (32 * d2 - 561) * e8) / 4096 -\r\n (d * (232 * d2 - 1677) * e10) / 16384 +\r\n (d * (399985 - 90560 * d2 + 512 * d4) * e12) / 5242880) *\r\n cos2D +\r\n ((21 * d * e6) / 256 +\r\n (483 * d * e8) / 4096 -\r\n (d * (224 * d2 - 1969) * e10) / 16384 -\r\n (d * (33152 * d2 - 112599) * e12) / 1048576) *\r\n cos4D +\r\n ((151 * d * e8) / 4096 +\r\n (4681 * d * e10) / 65536 +\r\n (1479 * d * e12) / 16384 -\r\n (453 * d3 * e12) / 32768) *\r\n cos6D +\r\n ((1097 * d * e10) / 65536 + (42783 * d * e12) / 1048576) * cos8D +\r\n ((8011 * d * e12) / 1048576) * cos10D +\r\n ((3 * e2) / 8 +\r\n (3 * e4) / 16 +\r\n (213 * e6) / 2048 -\r\n (3 * d2 * e6) / 64 +\r\n (255 * e8) / 4096 -\r\n (33 * d2 * e8) / 512 +\r\n (20861 * e10) / 524288 -\r\n (33 * d2 * e10) / 512 +\r\n (d4 * e10) / 1024 +\r\n (28273 * e12) / 1048576 -\r\n (471 * d2 * e12) / 8192 +\r\n (9 * d4 * e12) / 4096) *\r\n sin2D +\r\n ((21 * e4) / 256 +\r\n (21 * e6) / 256 +\r\n (533 * e8) / 8192 -\r\n (21 * d2 * e8) / 512 +\r\n (197 * e10) / 4096 -\r\n (315 * d2 * e10) / 4096 +\r\n (584039 * e12) / 16777216 -\r\n (12517 * d2 * e12) / 131072 +\r\n (7 * d4 * e12) / 2048) *\r\n sin4D +\r\n ((151 * e6) / 6144 +\r\n (151 * e8) / 4096 +\r\n (5019 * e10) / 131072 -\r\n (453 * d2 * e10) / 16384 +\r\n (26965 * e12) / 786432 -\r\n (8607 * d2 * e12) / 131072) *\r\n sin6D +\r\n ((1097 * e8) / 131072 +\r\n (1097 * e10) / 65536 +\r\n (225797 * e12) / 10485760 -\r\n (1097 * d2 * e12) / 65536) *\r\n sin8D +\r\n ((8011 * e10) / 2621440 + (8011 * e12) / 1048576) * sin10D +\r\n ((293393 * e12) / 251658240) * sin12D\r\n );\r\n}\r\n\r\nfunction calculateSigma(ellipticity, latitude) {\r\n if (ellipticity === 0.0) {\r\n // sphere\r\n return Math.log(Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + latitude)));\r\n }\r\n\r\n const eSinL = ellipticity * Math.sin(latitude);\r\n return (\r\n Math.log(Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + latitude))) -\r\n (ellipticity / 2.0) * Math.log((1 + eSinL) / (1 - eSinL))\r\n );\r\n}\r\n\r\nfunction calculateHeading(\r\n ellipsoidRhumbLine,\r\n firstLongitude,\r\n firstLatitude,\r\n secondLongitude,\r\n secondLatitude\r\n) {\r\n const sigma1 = calculateSigma(ellipsoidRhumbLine._ellipticity, firstLatitude);\r\n const sigma2 = calculateSigma(\r\n ellipsoidRhumbLine._ellipticity,\r\n secondLatitude\r\n );\r\n return Math.atan2(\r\n CesiumMath.negativePiToPi(secondLongitude - firstLongitude),\r\n sigma2 - sigma1\r\n );\r\n}\r\n\r\nfunction calculateArcLength(\r\n ellipsoidRhumbLine,\r\n major,\r\n minor,\r\n firstLongitude,\r\n firstLatitude,\r\n secondLongitude,\r\n secondLatitude\r\n) {\r\n const heading = ellipsoidRhumbLine._heading;\r\n const deltaLongitude = secondLongitude - firstLongitude;\r\n\r\n let distance = 0.0;\r\n\r\n //Check to see if the rhumb line has constant latitude\r\n //This equation will diverge if heading gets close to 90 degrees\r\n if (\r\n CesiumMath.equalsEpsilon(\r\n Math.abs(heading),\r\n CesiumMath.PI_OVER_TWO,\r\n CesiumMath.EPSILON8\r\n )\r\n ) {\r\n //If heading is close to 90 degrees\r\n if (major === minor) {\r\n distance =\r\n major *\r\n Math.cos(firstLatitude) *\r\n CesiumMath.negativePiToPi(deltaLongitude);\r\n } else {\r\n const sinPhi = Math.sin(firstLatitude);\r\n distance =\r\n (major *\r\n Math.cos(firstLatitude) *\r\n CesiumMath.negativePiToPi(deltaLongitude)) /\r\n Math.sqrt(1 - ellipsoidRhumbLine._ellipticitySquared * sinPhi * sinPhi);\r\n }\r\n } else {\r\n const M1 = calculateM(\r\n ellipsoidRhumbLine._ellipticity,\r\n major,\r\n firstLatitude\r\n );\r\n const M2 = calculateM(\r\n ellipsoidRhumbLine._ellipticity,\r\n major,\r\n secondLatitude\r\n );\r\n\r\n distance = (M2 - M1) / Math.cos(heading);\r\n }\r\n return Math.abs(distance);\r\n}\r\n\r\nconst scratchCart1 = new Cartesian3();\r\nconst scratchCart2 = new Cartesian3();\r\n\r\nfunction computeProperties(ellipsoidRhumbLine, start, end, ellipsoid) {\r\n const firstCartesian = Cartesian3.normalize(\r\n ellipsoid.cartographicToCartesian(start, scratchCart2),\r\n scratchCart1\r\n );\r\n const lastCartesian = Cartesian3.normalize(\r\n ellipsoid.cartographicToCartesian(end, scratchCart2),\r\n scratchCart2\r\n );\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThanOrEquals(\r\n \"value\",\r\n Math.abs(\r\n Math.abs(Cartesian3.angleBetween(firstCartesian, lastCartesian)) - Math.PI\r\n ),\r\n 0.0125\r\n );\r\n //>>includeEnd('debug');\r\n\r\n const major = ellipsoid.maximumRadius;\r\n const minor = ellipsoid.minimumRadius;\r\n const majorSquared = major * major;\r\n const minorSquared = minor * minor;\r\n ellipsoidRhumbLine._ellipticitySquared =\r\n (majorSquared - minorSquared) / majorSquared;\r\n ellipsoidRhumbLine._ellipticity = Math.sqrt(\r\n ellipsoidRhumbLine._ellipticitySquared\r\n );\r\n\r\n ellipsoidRhumbLine._start = Cartographic.clone(\r\n start,\r\n ellipsoidRhumbLine._start\r\n );\r\n ellipsoidRhumbLine._start.height = 0;\r\n\r\n ellipsoidRhumbLine._end = Cartographic.clone(end, ellipsoidRhumbLine._end);\r\n ellipsoidRhumbLine._end.height = 0;\r\n\r\n ellipsoidRhumbLine._heading = calculateHeading(\r\n ellipsoidRhumbLine,\r\n start.longitude,\r\n start.latitude,\r\n end.longitude,\r\n end.latitude\r\n );\r\n ellipsoidRhumbLine._distance = calculateArcLength(\r\n ellipsoidRhumbLine,\r\n ellipsoid.maximumRadius,\r\n ellipsoid.minimumRadius,\r\n start.longitude,\r\n start.latitude,\r\n end.longitude,\r\n end.latitude\r\n );\r\n}\r\n\r\nfunction interpolateUsingSurfaceDistance(\r\n start,\r\n heading,\r\n distance,\r\n major,\r\n ellipticity,\r\n result\r\n) {\r\n if (distance === 0.0) {\r\n return Cartographic.clone(start, result);\r\n }\r\n\r\n const ellipticitySquared = ellipticity * ellipticity;\r\n\r\n let longitude;\r\n let latitude;\r\n let deltaLongitude;\r\n\r\n //Check to see if the rhumb line has constant latitude\r\n //This won't converge if heading is close to 90 degrees\r\n if (\r\n Math.abs(CesiumMath.PI_OVER_TWO - Math.abs(heading)) > CesiumMath.EPSILON8\r\n ) {\r\n //Calculate latitude of the second point\r\n const M1 = calculateM(ellipticity, major, start.latitude);\r\n const deltaM = distance * Math.cos(heading);\r\n const M2 = M1 + deltaM;\r\n latitude = calculateInverseM(M2, ellipticity, major);\r\n\r\n //Now find the longitude of the second point\r\n const sigma1 = calculateSigma(ellipticity, start.latitude);\r\n const sigma2 = calculateSigma(ellipticity, latitude);\r\n deltaLongitude = Math.tan(heading) * (sigma2 - sigma1);\r\n longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\r\n } else {\r\n //If heading is close to 90 degrees\r\n latitude = start.latitude;\r\n let localRad;\r\n\r\n if (ellipticity === 0.0) {\r\n // sphere\r\n localRad = major * Math.cos(start.latitude);\r\n } else {\r\n const sinPhi = Math.sin(start.latitude);\r\n localRad =\r\n (major * Math.cos(start.latitude)) /\r\n Math.sqrt(1 - ellipticitySquared * sinPhi * sinPhi);\r\n }\r\n\r\n deltaLongitude = distance / localRad;\r\n if (heading > 0.0) {\r\n longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\r\n } else {\r\n longitude = CesiumMath.negativePiToPi(start.longitude - deltaLongitude);\r\n }\r\n }\r\n\r\n if (defined(result)) {\r\n result.longitude = longitude;\r\n result.latitude = latitude;\r\n result.height = 0;\r\n\r\n return result;\r\n }\r\n\r\n return new Cartographic(longitude, latitude, 0);\r\n}\r\n\r\n/**\r\n * Initializes a rhumb line on the ellipsoid connecting the two provided planetodetic points.\r\n *\r\n * @alias EllipsoidRhumbLine\r\n * @constructor\r\n *\r\n * @param {Cartographic} [start] The initial planetodetic point on the path.\r\n * @param {Cartographic} [end] The final planetodetic point on the path.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rhumb line lies.\r\n *\r\n * @exception {DeveloperError} angle between start and end must be at least 0.0125 radians.\r\n */\r\nfunction EllipsoidRhumbLine(start, end, ellipsoid) {\r\n const e = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n this._ellipsoid = e;\r\n this._start = new Cartographic();\r\n this._end = new Cartographic();\r\n\r\n this._heading = undefined;\r\n this._distance = undefined;\r\n this._ellipticity = undefined;\r\n this._ellipticitySquared = undefined;\r\n\r\n if (defined(start) && defined(end)) {\r\n computeProperties(this, start, end, e);\r\n }\r\n}\r\n\r\nObject.defineProperties(EllipsoidRhumbLine.prototype, {\r\n /**\r\n * Gets the ellipsoid.\r\n * @memberof EllipsoidRhumbLine.prototype\r\n * @type {Ellipsoid}\r\n * @readonly\r\n */\r\n ellipsoid: {\r\n get: function () {\r\n return this._ellipsoid;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the surface distance between the start and end point\r\n * @memberof EllipsoidRhumbLine.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n surfaceDistance: {\r\n get: function () {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"distance\", this._distance);\r\n //>>includeEnd('debug');\r\n\r\n return this._distance;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the initial planetodetic point on the path.\r\n * @memberof EllipsoidRhumbLine.prototype\r\n * @type {Cartographic}\r\n * @readonly\r\n */\r\n start: {\r\n get: function () {\r\n return this._start;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the final planetodetic point on the path.\r\n * @memberof EllipsoidRhumbLine.prototype\r\n * @type {Cartographic}\r\n * @readonly\r\n */\r\n end: {\r\n get: function () {\r\n return this._end;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the heading from the start point to the end point.\r\n * @memberof EllipsoidRhumbLine.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n heading: {\r\n get: function () {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"distance\", this._distance);\r\n //>>includeEnd('debug');\r\n\r\n return this._heading;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Create a rhumb line using an initial position with a heading and distance.\r\n *\r\n * @param {Cartographic} start The initial planetodetic point on the path.\r\n * @param {Number} heading The heading in radians.\r\n * @param {Number} distance The rhumb line distance between the start and end point.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rhumb line lies.\r\n * @param {EllipsoidRhumbLine} [result] The object in which to store the result.\r\n * @returns {EllipsoidRhumbLine} The EllipsoidRhumbLine object.\r\n */\r\nEllipsoidRhumbLine.fromStartHeadingDistance = function (\r\n start,\r\n heading,\r\n distance,\r\n ellipsoid,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"start\", start);\r\n Check.defined(\"heading\", heading);\r\n Check.defined(\"distance\", distance);\r\n Check.typeOf.number.greaterThan(\"distance\", distance, 0.0);\r\n //>>includeEnd('debug');\r\n\r\n const e = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n const major = e.maximumRadius;\r\n const minor = e.minimumRadius;\r\n const majorSquared = major * major;\r\n const minorSquared = minor * minor;\r\n const ellipticity = Math.sqrt((majorSquared - minorSquared) / majorSquared);\r\n\r\n heading = CesiumMath.negativePiToPi(heading);\r\n const end = interpolateUsingSurfaceDistance(\r\n start,\r\n heading,\r\n distance,\r\n e.maximumRadius,\r\n ellipticity\r\n );\r\n\r\n if (\r\n !defined(result) ||\r\n (defined(ellipsoid) && !ellipsoid.equals(result.ellipsoid))\r\n ) {\r\n return new EllipsoidRhumbLine(start, end, e);\r\n }\r\n\r\n result.setEndPoints(start, end);\r\n return result;\r\n};\r\n\r\n/**\r\n * Sets the start and end points of the rhumb line.\r\n *\r\n * @param {Cartographic} start The initial planetodetic point on the path.\r\n * @param {Cartographic} end The final planetodetic point on the path.\r\n */\r\nEllipsoidRhumbLine.prototype.setEndPoints = function (start, end) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"start\", start);\r\n Check.defined(\"end\", end);\r\n //>>includeEnd('debug');\r\n\r\n computeProperties(this, start, end, this._ellipsoid);\r\n};\r\n\r\n/**\r\n * Provides the location of a point at the indicated portion along the rhumb line.\r\n *\r\n * @param {Number} fraction The portion of the distance between the initial and final points.\r\n * @param {Cartographic} [result] The object in which to store the result.\r\n * @returns {Cartographic} The location of the point along the rhumb line.\r\n */\r\nEllipsoidRhumbLine.prototype.interpolateUsingFraction = function (\r\n fraction,\r\n result\r\n) {\r\n return this.interpolateUsingSurfaceDistance(\r\n fraction * this._distance,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Provides the location of a point at the indicated distance along the rhumb line.\r\n *\r\n * @param {Number} distance The distance from the inital point to the point of interest along the rhumbLine.\r\n * @param {Cartographic} [result] The object in which to store the result.\r\n * @returns {Cartographic} The location of the point along the rhumb line.\r\n *\r\n * @exception {DeveloperError} start and end must be set before calling function interpolateUsingSurfaceDistance\r\n */\r\nEllipsoidRhumbLine.prototype.interpolateUsingSurfaceDistance = function (\r\n distance,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"distance\", distance);\r\n if (!defined(this._distance) || this._distance === 0.0) {\r\n throw new DeveloperError(\r\n \"EllipsoidRhumbLine must have distinct start and end set.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return interpolateUsingSurfaceDistance(\r\n this._start,\r\n this._heading,\r\n distance,\r\n this._ellipsoid.maximumRadius,\r\n this._ellipticity,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Provides the location of a point at the indicated longitude along the rhumb line.\r\n * If the longitude is outside the range of start and end points, the first intersection with the longitude from the start point in the direction of the heading is returned. This follows the spiral property of a rhumb line.\r\n *\r\n * @param {Number} intersectionLongitude The longitude, in radians, at which to find the intersection point from the starting point using the heading.\r\n * @param {Cartographic} [result] The object in which to store the result.\r\n * @returns {Cartographic} The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections.\r\n *\r\n * @exception {DeveloperError} start and end must be set before calling function findIntersectionWithLongitude.\r\n */\r\nEllipsoidRhumbLine.prototype.findIntersectionWithLongitude = function (\r\n intersectionLongitude,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"intersectionLongitude\", intersectionLongitude);\r\n if (!defined(this._distance) || this._distance === 0.0) {\r\n throw new DeveloperError(\r\n \"EllipsoidRhumbLine must have distinct start and end set.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const ellipticity = this._ellipticity;\r\n const heading = this._heading;\r\n const absHeading = Math.abs(heading);\r\n const start = this._start;\r\n\r\n intersectionLongitude = CesiumMath.negativePiToPi(intersectionLongitude);\r\n\r\n if (\r\n CesiumMath.equalsEpsilon(\r\n Math.abs(intersectionLongitude),\r\n Math.PI,\r\n CesiumMath.EPSILON14\r\n )\r\n ) {\r\n intersectionLongitude = CesiumMath.sign(start.longitude) * Math.PI;\r\n }\r\n\r\n if (!defined(result)) {\r\n result = new Cartographic();\r\n }\r\n\r\n // If heading is -PI/2 or PI/2, this is an E-W rhumb line\r\n // If heading is 0 or PI, this is an N-S rhumb line\r\n if (Math.abs(CesiumMath.PI_OVER_TWO - absHeading) <= CesiumMath.EPSILON8) {\r\n result.longitude = intersectionLongitude;\r\n result.latitude = start.latitude;\r\n result.height = 0;\r\n return result;\r\n } else if (\r\n CesiumMath.equalsEpsilon(\r\n Math.abs(CesiumMath.PI_OVER_TWO - absHeading),\r\n CesiumMath.PI_OVER_TWO,\r\n CesiumMath.EPSILON8\r\n )\r\n ) {\r\n if (\r\n CesiumMath.equalsEpsilon(\r\n intersectionLongitude,\r\n start.longitude,\r\n CesiumMath.EPSILON12\r\n )\r\n ) {\r\n return undefined;\r\n }\r\n\r\n result.longitude = intersectionLongitude;\r\n result.latitude =\r\n CesiumMath.PI_OVER_TWO *\r\n CesiumMath.sign(CesiumMath.PI_OVER_TWO - heading);\r\n result.height = 0;\r\n return result;\r\n }\r\n\r\n // Use iterative solver from Equation 9 from http://edwilliams.org/ellipsoid/ellipsoid.pdf\r\n const phi1 = start.latitude;\r\n const eSinPhi1 = ellipticity * Math.sin(phi1);\r\n const leftComponent =\r\n Math.tan(0.5 * (CesiumMath.PI_OVER_TWO + phi1)) *\r\n Math.exp((intersectionLongitude - start.longitude) / Math.tan(heading));\r\n const denominator = (1 + eSinPhi1) / (1 - eSinPhi1);\r\n\r\n let newPhi = start.latitude;\r\n let phi;\r\n do {\r\n phi = newPhi;\r\n const eSinPhi = ellipticity * Math.sin(phi);\r\n const numerator = (1 + eSinPhi) / (1 - eSinPhi);\r\n newPhi =\r\n 2 *\r\n Math.atan(\r\n leftComponent * Math.pow(numerator / denominator, ellipticity / 2)\r\n ) -\r\n CesiumMath.PI_OVER_TWO;\r\n } while (!CesiumMath.equalsEpsilon(newPhi, phi, CesiumMath.EPSILON12));\r\n\r\n result.longitude = intersectionLongitude;\r\n result.latitude = newPhi;\r\n result.height = 0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Provides the location of a point at the indicated latitude along the rhumb line.\r\n * If the latitude is outside the range of start and end points, the first intersection with the latitude from that start point in the direction of the heading is returned. This follows the spiral property of a rhumb line.\r\n *\r\n * @param {Number} intersectionLatitude The latitude, in radians, at which to find the intersection point from the starting point using the heading.\r\n * @param {Cartographic} [result] The object in which to store the result.\r\n * @returns {Cartographic} The location of the intersection point along the rhumb line, undefined if there is no intersection or infinite intersections.\r\n *\r\n * @exception {DeveloperError} start and end must be set before calling function findIntersectionWithLongitude.\r\n */\r\nEllipsoidRhumbLine.prototype.findIntersectionWithLatitude = function (\r\n intersectionLatitude,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"intersectionLatitude\", intersectionLatitude);\r\n if (!defined(this._distance) || this._distance === 0.0) {\r\n throw new DeveloperError(\r\n \"EllipsoidRhumbLine must have distinct start and end set.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const ellipticity = this._ellipticity;\r\n const heading = this._heading;\r\n const start = this._start;\r\n\r\n // If start and end have same latitude, return undefined since it's either no intersection or infinite intersections\r\n if (\r\n CesiumMath.equalsEpsilon(\r\n Math.abs(heading),\r\n CesiumMath.PI_OVER_TWO,\r\n CesiumMath.EPSILON8\r\n )\r\n ) {\r\n return;\r\n }\r\n\r\n // Can be solved using the same equations from interpolateUsingSurfaceDistance\r\n const sigma1 = calculateSigma(ellipticity, start.latitude);\r\n const sigma2 = calculateSigma(ellipticity, intersectionLatitude);\r\n const deltaLongitude = Math.tan(heading) * (sigma2 - sigma1);\r\n const longitude = CesiumMath.negativePiToPi(start.longitude + deltaLongitude);\r\n\r\n if (defined(result)) {\r\n result.longitude = longitude;\r\n result.latitude = intersectionLatitude;\r\n result.height = 0;\r\n\r\n return result;\r\n }\r\n\r\n return new Cartographic(longitude, intersectionLatitude, 0);\r\n};\r\nexport default EllipsoidRhumbLine;\r\n"],"names":["CesiumMath","Cartesian3","Check","Cartographic","defined","defaultValue","Ellipsoid","DeveloperError"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/EllipsoidTangentPlane-c421b2cb.js b/debug/cesium/Workers/EllipsoidTangentPlane-c421b2cb.js deleted file mode 100644 index 06e0195..0000000 --- a/debug/cesium/Workers/EllipsoidTangentPlane-c421b2cb.js +++ /dev/null @@ -1,399 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './AxisAlignedBoundingBox-50342d27', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './IntersectionTests-2c7928de', './Plane-c9f1487d', './Transforms-11fb6b0a'], (function (exports, AxisAlignedBoundingBox, Matrix2, Matrix3, Check, defaultValue, IntersectionTests, Plane, Transforms) { 'use strict'; - - const scratchCart4 = new Matrix2.Cartesian4(); - /** - * A plane tangent to the provided ellipsoid at the provided origin. - * If origin is not on the surface of the ellipsoid, it's surface projection will be used. - * If origin is at the center of the ellipsoid, an exception will be thrown. - * @alias EllipsoidTangentPlane - * @constructor - * - * @param {Cartesian3} origin The point on the surface of the ellipsoid where the tangent plane touches. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use. - * - * @exception {DeveloperError} origin must not be at the center of the ellipsoid. - */ - function EllipsoidTangentPlane(origin, ellipsoid) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("origin", origin); - //>>includeEnd('debug'); - - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - origin = ellipsoid.scaleToGeodeticSurface(origin); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(origin)) { - throw new Check.DeveloperError( - "origin must not be at the center of the ellipsoid." - ); - } - //>>includeEnd('debug'); - - const eastNorthUp = Transforms.Transforms.eastNorthUpToFixedFrame(origin, ellipsoid); - this._ellipsoid = ellipsoid; - this._origin = origin; - this._xAxis = Matrix3.Cartesian3.fromCartesian4( - Matrix2.Matrix4.getColumn(eastNorthUp, 0, scratchCart4) - ); - this._yAxis = Matrix3.Cartesian3.fromCartesian4( - Matrix2.Matrix4.getColumn(eastNorthUp, 1, scratchCart4) - ); - - const normal = Matrix3.Cartesian3.fromCartesian4( - Matrix2.Matrix4.getColumn(eastNorthUp, 2, scratchCart4) - ); - this._plane = Plane.Plane.fromPointNormal(origin, normal); - } - - Object.defineProperties(EllipsoidTangentPlane.prototype, { - /** - * Gets the ellipsoid. - * @memberof EllipsoidTangentPlane.prototype - * @type {Ellipsoid} - */ - ellipsoid: { - get: function () { - return this._ellipsoid; - }, - }, - - /** - * Gets the origin. - * @memberof EllipsoidTangentPlane.prototype - * @type {Cartesian3} - */ - origin: { - get: function () { - return this._origin; - }, - }, - - /** - * Gets the plane which is tangent to the ellipsoid. - * @memberof EllipsoidTangentPlane.prototype - * @readonly - * @type {Plane} - */ - plane: { - get: function () { - return this._plane; - }, - }, - - /** - * Gets the local X-axis (east) of the tangent plane. - * @memberof EllipsoidTangentPlane.prototype - * @readonly - * @type {Cartesian3} - */ - xAxis: { - get: function () { - return this._xAxis; - }, - }, - - /** - * Gets the local Y-axis (north) of the tangent plane. - * @memberof EllipsoidTangentPlane.prototype - * @readonly - * @type {Cartesian3} - */ - yAxis: { - get: function () { - return this._yAxis; - }, - }, - - /** - * Gets the local Z-axis (up) of the tangent plane. - * @memberof EllipsoidTangentPlane.prototype - * @readonly - * @type {Cartesian3} - */ - zAxis: { - get: function () { - return this._plane.normal; - }, - }, - }); - - const tmp = new AxisAlignedBoundingBox.AxisAlignedBoundingBox(); - /** - * Creates a new instance from the provided ellipsoid and the center - * point of the provided Cartesians. - * - * @param {Cartesian3[]} cartesians The list of positions surrounding the center point. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use. - * @returns {EllipsoidTangentPlane} The new instance of EllipsoidTangentPlane. - */ - EllipsoidTangentPlane.fromPoints = function (cartesians, ellipsoid) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesians", cartesians); - //>>includeEnd('debug'); - - const box = AxisAlignedBoundingBox.AxisAlignedBoundingBox.fromPoints(cartesians, tmp); - return new EllipsoidTangentPlane(box.center, ellipsoid); - }; - - const scratchProjectPointOntoPlaneRay = new IntersectionTests.Ray(); - const scratchProjectPointOntoPlaneCartesian3 = new Matrix3.Cartesian3(); - - /** - * Computes the projection of the provided 3D position onto the 2D plane, radially outward from the {@link EllipsoidTangentPlane.ellipsoid} coordinate system origin. - * - * @param {Cartesian3} cartesian The point to project. - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided. Undefined if there is no intersection point - */ - EllipsoidTangentPlane.prototype.projectPointOntoPlane = function ( - cartesian, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesian", cartesian); - //>>includeEnd('debug'); - - const ray = scratchProjectPointOntoPlaneRay; - ray.origin = cartesian; - Matrix3.Cartesian3.normalize(cartesian, ray.direction); - - let intersectionPoint = IntersectionTests.IntersectionTests.rayPlane( - ray, - this._plane, - scratchProjectPointOntoPlaneCartesian3 - ); - if (!defaultValue.defined(intersectionPoint)) { - Matrix3.Cartesian3.negate(ray.direction, ray.direction); - intersectionPoint = IntersectionTests.IntersectionTests.rayPlane( - ray, - this._plane, - scratchProjectPointOntoPlaneCartesian3 - ); - } - - if (defaultValue.defined(intersectionPoint)) { - const v = Matrix3.Cartesian3.subtract( - intersectionPoint, - this._origin, - intersectionPoint - ); - const x = Matrix3.Cartesian3.dot(this._xAxis, v); - const y = Matrix3.Cartesian3.dot(this._yAxis, v); - - if (!defaultValue.defined(result)) { - return new Matrix2.Cartesian2(x, y); - } - result.x = x; - result.y = y; - return result; - } - return undefined; - }; - - /** - * Computes the projection of the provided 3D positions onto the 2D plane (where possible), radially outward from the global origin. - * The resulting array may be shorter than the input array - if a single projection is impossible it will not be included. - * - * @see EllipsoidTangentPlane.projectPointOntoPlane - * - * @param {Cartesian3[]} cartesians The array of points to project. - * @param {Cartesian2[]} [result] The array of Cartesian2 instances onto which to store results. - * @returns {Cartesian2[]} The modified result parameter or a new array of Cartesian2 instances if none was provided. - */ - EllipsoidTangentPlane.prototype.projectPointsOntoPlane = function ( - cartesians, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesians", cartesians); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = []; - } - - let count = 0; - const length = cartesians.length; - for (let i = 0; i < length; i++) { - const p = this.projectPointOntoPlane(cartesians[i], result[count]); - if (defaultValue.defined(p)) { - result[count] = p; - count++; - } - } - result.length = count; - return result; - }; - - /** - * Computes the projection of the provided 3D position onto the 2D plane, along the plane normal. - * - * @param {Cartesian3} cartesian The point to project. - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided. - */ - EllipsoidTangentPlane.prototype.projectPointToNearestOnPlane = function ( - cartesian, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesian", cartesian); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix2.Cartesian2(); - } - - const ray = scratchProjectPointOntoPlaneRay; - ray.origin = cartesian; - Matrix3.Cartesian3.clone(this._plane.normal, ray.direction); - - let intersectionPoint = IntersectionTests.IntersectionTests.rayPlane( - ray, - this._plane, - scratchProjectPointOntoPlaneCartesian3 - ); - if (!defaultValue.defined(intersectionPoint)) { - Matrix3.Cartesian3.negate(ray.direction, ray.direction); - intersectionPoint = IntersectionTests.IntersectionTests.rayPlane( - ray, - this._plane, - scratchProjectPointOntoPlaneCartesian3 - ); - } - - const v = Matrix3.Cartesian3.subtract( - intersectionPoint, - this._origin, - intersectionPoint - ); - const x = Matrix3.Cartesian3.dot(this._xAxis, v); - const y = Matrix3.Cartesian3.dot(this._yAxis, v); - - result.x = x; - result.y = y; - return result; - }; - - /** - * Computes the projection of the provided 3D positions onto the 2D plane, along the plane normal. - * - * @see EllipsoidTangentPlane.projectPointToNearestOnPlane - * - * @param {Cartesian3[]} cartesians The array of points to project. - * @param {Cartesian2[]} [result] The array of Cartesian2 instances onto which to store results. - * @returns {Cartesian2[]} The modified result parameter or a new array of Cartesian2 instances if none was provided. This will have the same length as cartesians. - */ - EllipsoidTangentPlane.prototype.projectPointsToNearestOnPlane = function ( - cartesians, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesians", cartesians); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = []; - } - - const length = cartesians.length; - result.length = length; - for (let i = 0; i < length; i++) { - result[i] = this.projectPointToNearestOnPlane(cartesians[i], result[i]); - } - return result; - }; - - const projectPointsOntoEllipsoidScratch = new Matrix3.Cartesian3(); - /** - * Computes the projection of the provided 2D position onto the 3D ellipsoid. - * - * @param {Cartesian2} cartesian The points to project. - * @param {Cartesian3} [result] The Cartesian3 instance to store result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided. - */ - EllipsoidTangentPlane.prototype.projectPointOntoEllipsoid = function ( - cartesian, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesian", cartesian); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - const ellipsoid = this._ellipsoid; - const origin = this._origin; - const xAxis = this._xAxis; - const yAxis = this._yAxis; - const tmp = projectPointsOntoEllipsoidScratch; - - Matrix3.Cartesian3.multiplyByScalar(xAxis, cartesian.x, tmp); - result = Matrix3.Cartesian3.add(origin, tmp, result); - Matrix3.Cartesian3.multiplyByScalar(yAxis, cartesian.y, tmp); - Matrix3.Cartesian3.add(result, tmp, result); - ellipsoid.scaleToGeocentricSurface(result, result); - - return result; - }; - - /** - * Computes the projection of the provided 2D positions onto the 3D ellipsoid. - * - * @param {Cartesian2[]} cartesians The array of points to project. - * @param {Cartesian3[]} [result] The array of Cartesian3 instances onto which to store results. - * @returns {Cartesian3[]} The modified result parameter or a new array of Cartesian3 instances if none was provided. - */ - EllipsoidTangentPlane.prototype.projectPointsOntoEllipsoid = function ( - cartesians, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesians", cartesians); - //>>includeEnd('debug'); - - const length = cartesians.length; - if (!defaultValue.defined(result)) { - result = new Array(length); - } else { - result.length = length; - } - - for (let i = 0; i < length; ++i) { - result[i] = this.projectPointOntoEllipsoid(cartesians[i], result[i]); - } - - return result; - }; - - exports.EllipsoidTangentPlane = EllipsoidTangentPlane; - -})); -//# sourceMappingURL=EllipsoidTangentPlane-c421b2cb.js.map diff --git a/debug/cesium/Workers/EllipsoidTangentPlane-c421b2cb.js.map b/debug/cesium/Workers/EllipsoidTangentPlane-c421b2cb.js.map deleted file mode 100644 index 47b5af3..0000000 --- a/debug/cesium/Workers/EllipsoidTangentPlane-c421b2cb.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EllipsoidTangentPlane-c421b2cb.js","sources":["../../../Source/Core/EllipsoidTangentPlane.js"],"sourcesContent":["import AxisAlignedBoundingBox from \"./AxisAlignedBoundingBox.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport IntersectionTests from \"./IntersectionTests.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport Plane from \"./Plane.js\";\r\nimport Ray from \"./Ray.js\";\r\nimport Transforms from \"./Transforms.js\";\r\n\r\nconst scratchCart4 = new Cartesian4();\r\n/**\r\n * A plane tangent to the provided ellipsoid at the provided origin.\r\n * If origin is not on the surface of the ellipsoid, it's surface projection will be used.\r\n * If origin is at the center of the ellipsoid, an exception will be thrown.\r\n * @alias EllipsoidTangentPlane\r\n * @constructor\r\n *\r\n * @param {Cartesian3} origin The point on the surface of the ellipsoid where the tangent plane touches.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use.\r\n *\r\n * @exception {DeveloperError} origin must not be at the center of the ellipsoid.\r\n */\r\nfunction EllipsoidTangentPlane(origin, ellipsoid) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"origin\", origin);\r\n //>>includeEnd('debug');\r\n\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n origin = ellipsoid.scaleToGeodeticSurface(origin);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(origin)) {\r\n throw new DeveloperError(\r\n \"origin must not be at the center of the ellipsoid.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const eastNorthUp = Transforms.eastNorthUpToFixedFrame(origin, ellipsoid);\r\n this._ellipsoid = ellipsoid;\r\n this._origin = origin;\r\n this._xAxis = Cartesian3.fromCartesian4(\r\n Matrix4.getColumn(eastNorthUp, 0, scratchCart4)\r\n );\r\n this._yAxis = Cartesian3.fromCartesian4(\r\n Matrix4.getColumn(eastNorthUp, 1, scratchCart4)\r\n );\r\n\r\n const normal = Cartesian3.fromCartesian4(\r\n Matrix4.getColumn(eastNorthUp, 2, scratchCart4)\r\n );\r\n this._plane = Plane.fromPointNormal(origin, normal);\r\n}\r\n\r\nObject.defineProperties(EllipsoidTangentPlane.prototype, {\r\n /**\r\n * Gets the ellipsoid.\r\n * @memberof EllipsoidTangentPlane.prototype\r\n * @type {Ellipsoid}\r\n */\r\n ellipsoid: {\r\n get: function () {\r\n return this._ellipsoid;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the origin.\r\n * @memberof EllipsoidTangentPlane.prototype\r\n * @type {Cartesian3}\r\n */\r\n origin: {\r\n get: function () {\r\n return this._origin;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the plane which is tangent to the ellipsoid.\r\n * @memberof EllipsoidTangentPlane.prototype\r\n * @readonly\r\n * @type {Plane}\r\n */\r\n plane: {\r\n get: function () {\r\n return this._plane;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the local X-axis (east) of the tangent plane.\r\n * @memberof EllipsoidTangentPlane.prototype\r\n * @readonly\r\n * @type {Cartesian3}\r\n */\r\n xAxis: {\r\n get: function () {\r\n return this._xAxis;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the local Y-axis (north) of the tangent plane.\r\n * @memberof EllipsoidTangentPlane.prototype\r\n * @readonly\r\n * @type {Cartesian3}\r\n */\r\n yAxis: {\r\n get: function () {\r\n return this._yAxis;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the local Z-axis (up) of the tangent plane.\r\n * @memberof EllipsoidTangentPlane.prototype\r\n * @readonly\r\n * @type {Cartesian3}\r\n */\r\n zAxis: {\r\n get: function () {\r\n return this._plane.normal;\r\n },\r\n },\r\n});\r\n\r\nconst tmp = new AxisAlignedBoundingBox();\r\n/**\r\n * Creates a new instance from the provided ellipsoid and the center\r\n * point of the provided Cartesians.\r\n *\r\n * @param {Cartesian3[]} cartesians The list of positions surrounding the center point.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use.\r\n * @returns {EllipsoidTangentPlane} The new instance of EllipsoidTangentPlane.\r\n */\r\nEllipsoidTangentPlane.fromPoints = function (cartesians, ellipsoid) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesians\", cartesians);\r\n //>>includeEnd('debug');\r\n\r\n const box = AxisAlignedBoundingBox.fromPoints(cartesians, tmp);\r\n return new EllipsoidTangentPlane(box.center, ellipsoid);\r\n};\r\n\r\nconst scratchProjectPointOntoPlaneRay = new Ray();\r\nconst scratchProjectPointOntoPlaneCartesian3 = new Cartesian3();\r\n\r\n/**\r\n * Computes the projection of the provided 3D position onto the 2D plane, radially outward from the {@link EllipsoidTangentPlane.ellipsoid} coordinate system origin.\r\n *\r\n * @param {Cartesian3} cartesian The point to project.\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided. Undefined if there is no intersection point\r\n */\r\nEllipsoidTangentPlane.prototype.projectPointOntoPlane = function (\r\n cartesian,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n const ray = scratchProjectPointOntoPlaneRay;\r\n ray.origin = cartesian;\r\n Cartesian3.normalize(cartesian, ray.direction);\r\n\r\n let intersectionPoint = IntersectionTests.rayPlane(\r\n ray,\r\n this._plane,\r\n scratchProjectPointOntoPlaneCartesian3\r\n );\r\n if (!defined(intersectionPoint)) {\r\n Cartesian3.negate(ray.direction, ray.direction);\r\n intersectionPoint = IntersectionTests.rayPlane(\r\n ray,\r\n this._plane,\r\n scratchProjectPointOntoPlaneCartesian3\r\n );\r\n }\r\n\r\n if (defined(intersectionPoint)) {\r\n const v = Cartesian3.subtract(\r\n intersectionPoint,\r\n this._origin,\r\n intersectionPoint\r\n );\r\n const x = Cartesian3.dot(this._xAxis, v);\r\n const y = Cartesian3.dot(this._yAxis, v);\r\n\r\n if (!defined(result)) {\r\n return new Cartesian2(x, y);\r\n }\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n }\r\n return undefined;\r\n};\r\n\r\n/**\r\n * Computes the projection of the provided 3D positions onto the 2D plane (where possible), radially outward from the global origin.\r\n * The resulting array may be shorter than the input array - if a single projection is impossible it will not be included.\r\n *\r\n * @see EllipsoidTangentPlane.projectPointOntoPlane\r\n *\r\n * @param {Cartesian3[]} cartesians The array of points to project.\r\n * @param {Cartesian2[]} [result] The array of Cartesian2 instances onto which to store results.\r\n * @returns {Cartesian2[]} The modified result parameter or a new array of Cartesian2 instances if none was provided.\r\n */\r\nEllipsoidTangentPlane.prototype.projectPointsOntoPlane = function (\r\n cartesians,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesians\", cartesians);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = [];\r\n }\r\n\r\n let count = 0;\r\n const length = cartesians.length;\r\n for (let i = 0; i < length; i++) {\r\n const p = this.projectPointOntoPlane(cartesians[i], result[count]);\r\n if (defined(p)) {\r\n result[count] = p;\r\n count++;\r\n }\r\n }\r\n result.length = count;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the projection of the provided 3D position onto the 2D plane, along the plane normal.\r\n *\r\n * @param {Cartesian3} cartesian The point to project.\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided.\r\n */\r\nEllipsoidTangentPlane.prototype.projectPointToNearestOnPlane = function (\r\n cartesian,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian2();\r\n }\r\n\r\n const ray = scratchProjectPointOntoPlaneRay;\r\n ray.origin = cartesian;\r\n Cartesian3.clone(this._plane.normal, ray.direction);\r\n\r\n let intersectionPoint = IntersectionTests.rayPlane(\r\n ray,\r\n this._plane,\r\n scratchProjectPointOntoPlaneCartesian3\r\n );\r\n if (!defined(intersectionPoint)) {\r\n Cartesian3.negate(ray.direction, ray.direction);\r\n intersectionPoint = IntersectionTests.rayPlane(\r\n ray,\r\n this._plane,\r\n scratchProjectPointOntoPlaneCartesian3\r\n );\r\n }\r\n\r\n const v = Cartesian3.subtract(\r\n intersectionPoint,\r\n this._origin,\r\n intersectionPoint\r\n );\r\n const x = Cartesian3.dot(this._xAxis, v);\r\n const y = Cartesian3.dot(this._yAxis, v);\r\n\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the projection of the provided 3D positions onto the 2D plane, along the plane normal.\r\n *\r\n * @see EllipsoidTangentPlane.projectPointToNearestOnPlane\r\n *\r\n * @param {Cartesian3[]} cartesians The array of points to project.\r\n * @param {Cartesian2[]} [result] The array of Cartesian2 instances onto which to store results.\r\n * @returns {Cartesian2[]} The modified result parameter or a new array of Cartesian2 instances if none was provided. This will have the same length as cartesians.\r\n */\r\nEllipsoidTangentPlane.prototype.projectPointsToNearestOnPlane = function (\r\n cartesians,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesians\", cartesians);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = [];\r\n }\r\n\r\n const length = cartesians.length;\r\n result.length = length;\r\n for (let i = 0; i < length; i++) {\r\n result[i] = this.projectPointToNearestOnPlane(cartesians[i], result[i]);\r\n }\r\n return result;\r\n};\r\n\r\nconst projectPointsOntoEllipsoidScratch = new Cartesian3();\r\n/**\r\n * Computes the projection of the provided 2D position onto the 3D ellipsoid.\r\n *\r\n * @param {Cartesian2} cartesian The points to project.\r\n * @param {Cartesian3} [result] The Cartesian3 instance to store result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\r\n */\r\nEllipsoidTangentPlane.prototype.projectPointOntoEllipsoid = function (\r\n cartesian,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n const ellipsoid = this._ellipsoid;\r\n const origin = this._origin;\r\n const xAxis = this._xAxis;\r\n const yAxis = this._yAxis;\r\n const tmp = projectPointsOntoEllipsoidScratch;\r\n\r\n Cartesian3.multiplyByScalar(xAxis, cartesian.x, tmp);\r\n result = Cartesian3.add(origin, tmp, result);\r\n Cartesian3.multiplyByScalar(yAxis, cartesian.y, tmp);\r\n Cartesian3.add(result, tmp, result);\r\n ellipsoid.scaleToGeocentricSurface(result, result);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the projection of the provided 2D positions onto the 3D ellipsoid.\r\n *\r\n * @param {Cartesian2[]} cartesians The array of points to project.\r\n * @param {Cartesian3[]} [result] The array of Cartesian3 instances onto which to store results.\r\n * @returns {Cartesian3[]} The modified result parameter or a new array of Cartesian3 instances if none was provided.\r\n */\r\nEllipsoidTangentPlane.prototype.projectPointsOntoEllipsoid = function (\r\n cartesians,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesians\", cartesians);\r\n //>>includeEnd('debug');\r\n\r\n const length = cartesians.length;\r\n if (!defined(result)) {\r\n result = new Array(length);\r\n } else {\r\n result.length = length;\r\n }\r\n\r\n for (let i = 0; i < length; ++i) {\r\n result[i] = this.projectPointOntoEllipsoid(cartesians[i], result[i]);\r\n }\r\n\r\n return result;\r\n};\r\nexport default EllipsoidTangentPlane;\r\n"],"names":["Cartesian4","Check","defaultValue","Ellipsoid","defined","DeveloperError","Transforms","Cartesian3","Matrix4","Plane","AxisAlignedBoundingBox","Ray","IntersectionTests","Cartesian2"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/EncodedCartesian3-38e2691f.js b/debug/cesium/Workers/EncodedCartesian3-38e2691f.js deleted file mode 100644 index e936445..0000000 --- a/debug/cesium/Workers/EncodedCartesian3-38e2691f.js +++ /dev/null @@ -1,197 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d'], (function (exports, Matrix3, Check, defaultValue) { 'use strict'; - - /** - * A fixed-point encoding of a {@link Cartesian3} with 64-bit floating-point components, as two {@link Cartesian3} - * values that, when converted to 32-bit floating-point and added, approximate the original input. - *

    - * This is used to encode positions in vertex buffers for rendering without jittering artifacts - * as described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}. - *

    - * - * @alias EncodedCartesian3 - * @constructor - * - * @private - */ - function EncodedCartesian3() { - /** - * The high bits for each component. Bits 0 to 22 store the whole value. Bits 23 to 31 are not used. - * - * @type {Cartesian3} - * @default {@link Cartesian3.ZERO} - */ - this.high = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO); - - /** - * The low bits for each component. Bits 7 to 22 store the whole value, and bits 0 to 6 store the fraction. Bits 23 to 31 are not used. - * - * @type {Cartesian3} - * @default {@link Cartesian3.ZERO} - */ - this.low = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO); - } - - /** - * Encodes a 64-bit floating-point value as two floating-point values that, when converted to - * 32-bit floating-point and added, approximate the original input. The returned object - * has high and low properties for the high and low bits, respectively. - *

    - * The fixed-point encoding follows {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}. - *

    - * - * @param {Number} value The floating-point value to encode. - * @param {Object} [result] The object onto which to store the result. - * @returns {Object} The modified result parameter or a new instance if one was not provided. - * - * @example - * const value = 1234567.1234567; - * const splitValue = Cesium.EncodedCartesian3.encode(value); - */ - EncodedCartesian3.encode = function (value, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("value", value); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = { - high: 0.0, - low: 0.0, - }; - } - - let doubleHigh; - if (value >= 0.0) { - doubleHigh = Math.floor(value / 65536.0) * 65536.0; - result.high = doubleHigh; - result.low = value - doubleHigh; - } else { - doubleHigh = Math.floor(-value / 65536.0) * 65536.0; - result.high = -doubleHigh; - result.low = value + doubleHigh; - } - - return result; - }; - - const scratchEncode = { - high: 0.0, - low: 0.0, - }; - - /** - * Encodes a {@link Cartesian3} with 64-bit floating-point components as two {@link Cartesian3} - * values that, when converted to 32-bit floating-point and added, approximate the original input. - *

    - * The fixed-point encoding follows {@link https://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}. - *

    - * - * @param {Cartesian3} cartesian The cartesian to encode. - * @param {EncodedCartesian3} [result] The object onto which to store the result. - * @returns {EncodedCartesian3} The modified result parameter or a new EncodedCartesian3 instance if one was not provided. - * - * @example - * const cart = new Cesium.Cartesian3(-10000000.0, 0.0, 10000000.0); - * const encoded = Cesium.EncodedCartesian3.fromCartesian(cart); - */ - EncodedCartesian3.fromCartesian = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new EncodedCartesian3(); - } - - const high = result.high; - const low = result.low; - - EncodedCartesian3.encode(cartesian.x, scratchEncode); - high.x = scratchEncode.high; - low.x = scratchEncode.low; - - EncodedCartesian3.encode(cartesian.y, scratchEncode); - high.y = scratchEncode.high; - low.y = scratchEncode.low; - - EncodedCartesian3.encode(cartesian.z, scratchEncode); - high.z = scratchEncode.high; - low.z = scratchEncode.low; - - return result; - }; - - const encodedP = new EncodedCartesian3(); - - /** - * Encodes the provided cartesian, and writes it to an array with high - * components followed by low components, i.e. [high.x, high.y, high.z, low.x, low.y, low.z]. - *

    - * This is used to create interleaved high-precision position vertex attributes. - *

    - * - * @param {Cartesian3} cartesian The cartesian to encode. - * @param {Number[]} cartesianArray The array to write to. - * @param {Number} index The index into the array to start writing. Six elements will be written. - * - * @exception {DeveloperError} index must be a number greater than or equal to 0. - * - * @example - * const positions = [ - * new Cesium.Cartesian3(), - * // ... - * ]; - * const encodedPositions = new Float32Array(2 * 3 * positions.length); - * let j = 0; - * for (let i = 0; i < positions.length; ++i) { - * Cesium.EncodedCartesian3.writeElement(positions[i], encodedPositions, j); - * j += 6; - * } - */ - EncodedCartesian3.writeElements = function (cartesian, cartesianArray, index) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesianArray", cartesianArray); - Check.Check.typeOf.number("index", index); - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - //>>includeEnd('debug'); - - EncodedCartesian3.fromCartesian(cartesian, encodedP); - const high = encodedP.high; - const low = encodedP.low; - - cartesianArray[index] = high.x; - cartesianArray[index + 1] = high.y; - cartesianArray[index + 2] = high.z; - cartesianArray[index + 3] = low.x; - cartesianArray[index + 4] = low.y; - cartesianArray[index + 5] = low.z; - }; - - exports.EncodedCartesian3 = EncodedCartesian3; - -})); -//# sourceMappingURL=EncodedCartesian3-38e2691f.js.map diff --git a/debug/cesium/Workers/EncodedCartesian3-38e2691f.js.map b/debug/cesium/Workers/EncodedCartesian3-38e2691f.js.map deleted file mode 100644 index bbc15d7..0000000 --- a/debug/cesium/Workers/EncodedCartesian3-38e2691f.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"EncodedCartesian3-38e2691f.js","sources":["../../../Source/Core/EncodedCartesian3.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defined from \"./defined.js\";\r\n\r\n/**\r\n * A fixed-point encoding of a {@link Cartesian3} with 64-bit floating-point components, as two {@link Cartesian3}\r\n * values that, when converted to 32-bit floating-point and added, approximate the original input.\r\n *

    \r\n * This is used to encode positions in vertex buffers for rendering without jittering artifacts\r\n * as described in {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\r\n *

    \r\n *\r\n * @alias EncodedCartesian3\r\n * @constructor\r\n *\r\n * @private\r\n */\r\nfunction EncodedCartesian3() {\r\n /**\r\n * The high bits for each component. Bits 0 to 22 store the whole value. Bits 23 to 31 are not used.\r\n *\r\n * @type {Cartesian3}\r\n * @default {@link Cartesian3.ZERO}\r\n */\r\n this.high = Cartesian3.clone(Cartesian3.ZERO);\r\n\r\n /**\r\n * The low bits for each component. Bits 7 to 22 store the whole value, and bits 0 to 6 store the fraction. Bits 23 to 31 are not used.\r\n *\r\n * @type {Cartesian3}\r\n * @default {@link Cartesian3.ZERO}\r\n */\r\n this.low = Cartesian3.clone(Cartesian3.ZERO);\r\n}\r\n\r\n/**\r\n * Encodes a 64-bit floating-point value as two floating-point values that, when converted to\r\n * 32-bit floating-point and added, approximate the original input. The returned object\r\n * has high and low properties for the high and low bits, respectively.\r\n *

    \r\n * The fixed-point encoding follows {@link http://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\r\n *

    \r\n *\r\n * @param {Number} value The floating-point value to encode.\r\n * @param {Object} [result] The object onto which to store the result.\r\n * @returns {Object} The modified result parameter or a new instance if one was not provided.\r\n *\r\n * @example\r\n * const value = 1234567.1234567;\r\n * const splitValue = Cesium.EncodedCartesian3.encode(value);\r\n */\r\nEncodedCartesian3.encode = function (value, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"value\", value);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = {\r\n high: 0.0,\r\n low: 0.0,\r\n };\r\n }\r\n\r\n let doubleHigh;\r\n if (value >= 0.0) {\r\n doubleHigh = Math.floor(value / 65536.0) * 65536.0;\r\n result.high = doubleHigh;\r\n result.low = value - doubleHigh;\r\n } else {\r\n doubleHigh = Math.floor(-value / 65536.0) * 65536.0;\r\n result.high = -doubleHigh;\r\n result.low = value + doubleHigh;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst scratchEncode = {\r\n high: 0.0,\r\n low: 0.0,\r\n};\r\n\r\n/**\r\n * Encodes a {@link Cartesian3} with 64-bit floating-point components as two {@link Cartesian3}\r\n * values that, when converted to 32-bit floating-point and added, approximate the original input.\r\n *

    \r\n * The fixed-point encoding follows {@link https://help.agi.com/AGIComponents/html/BlogPrecisionsPrecisions.htm|Precisions, Precisions}.\r\n *

    \r\n *\r\n * @param {Cartesian3} cartesian The cartesian to encode.\r\n * @param {EncodedCartesian3} [result] The object onto which to store the result.\r\n * @returns {EncodedCartesian3} The modified result parameter or a new EncodedCartesian3 instance if one was not provided.\r\n *\r\n * @example\r\n * const cart = new Cesium.Cartesian3(-10000000.0, 0.0, 10000000.0);\r\n * const encoded = Cesium.EncodedCartesian3.fromCartesian(cart);\r\n */\r\nEncodedCartesian3.fromCartesian = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new EncodedCartesian3();\r\n }\r\n\r\n const high = result.high;\r\n const low = result.low;\r\n\r\n EncodedCartesian3.encode(cartesian.x, scratchEncode);\r\n high.x = scratchEncode.high;\r\n low.x = scratchEncode.low;\r\n\r\n EncodedCartesian3.encode(cartesian.y, scratchEncode);\r\n high.y = scratchEncode.high;\r\n low.y = scratchEncode.low;\r\n\r\n EncodedCartesian3.encode(cartesian.z, scratchEncode);\r\n high.z = scratchEncode.high;\r\n low.z = scratchEncode.low;\r\n\r\n return result;\r\n};\r\n\r\nconst encodedP = new EncodedCartesian3();\r\n\r\n/**\r\n * Encodes the provided cartesian, and writes it to an array with high\r\n * components followed by low components, i.e. [high.x, high.y, high.z, low.x, low.y, low.z].\r\n *

    \r\n * This is used to create interleaved high-precision position vertex attributes.\r\n *

    \r\n *\r\n * @param {Cartesian3} cartesian The cartesian to encode.\r\n * @param {Number[]} cartesianArray The array to write to.\r\n * @param {Number} index The index into the array to start writing. Six elements will be written.\r\n *\r\n * @exception {DeveloperError} index must be a number greater than or equal to 0.\r\n *\r\n * @example\r\n * const positions = [\r\n * new Cesium.Cartesian3(),\r\n * // ...\r\n * ];\r\n * const encodedPositions = new Float32Array(2 * 3 * positions.length);\r\n * let j = 0;\r\n * for (let i = 0; i < positions.length; ++i) {\r\n * Cesium.EncodedCartesian3.writeElement(positions[i], encodedPositions, j);\r\n * j += 6;\r\n * }\r\n */\r\nEncodedCartesian3.writeElements = function (cartesian, cartesianArray, index) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesianArray\", cartesianArray);\r\n Check.typeOf.number(\"index\", index);\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n //>>includeEnd('debug');\r\n\r\n EncodedCartesian3.fromCartesian(cartesian, encodedP);\r\n const high = encodedP.high;\r\n const low = encodedP.low;\r\n\r\n cartesianArray[index] = high.x;\r\n cartesianArray[index + 1] = high.y;\r\n cartesianArray[index + 2] = high.z;\r\n cartesianArray[index + 3] = low.x;\r\n cartesianArray[index + 4] = low.y;\r\n cartesianArray[index + 5] = low.z;\r\n};\r\nexport default EncodedCartesian3;\r\n"],"names":["Cartesian3","Check","defined"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/FrustumGeometry-f3f058a2.js b/debug/cesium/Workers/FrustumGeometry-f3f058a2.js deleted file mode 100644 index cca5de0..0000000 --- a/debug/cesium/Workers/FrustumGeometry-f3f058a2.js +++ /dev/null @@ -1,2538 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Matrix2-036c77dd', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './Math-9be8b918', './Plane-c9f1487d', './VertexFormat-f2d74c96'], (function (exports, Transforms, Matrix3, Matrix2, Check, ComponentDatatype, defaultValue, GeometryAttribute, GeometryAttributes, Math$1, Plane, VertexFormat) { 'use strict'; - - /** - * The culling volume defined by planes. - * - * @alias CullingVolume - * @constructor - * - * @param {Cartesian4[]} [planes] An array of clipping planes. - */ - function CullingVolume(planes) { - /** - * Each plane is represented by a Cartesian4 object, where the x, y, and z components - * define the unit vector normal to the plane, and the w component is the distance of the - * plane from the origin. - * @type {Cartesian4[]} - * @default [] - */ - this.planes = defaultValue.defaultValue(planes, []); - } - - const faces = [new Matrix3.Cartesian3(), new Matrix3.Cartesian3(), new Matrix3.Cartesian3()]; - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_X, faces[0]); - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_Y, faces[1]); - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_Z, faces[2]); - - const scratchPlaneCenter = new Matrix3.Cartesian3(); - const scratchPlaneNormal = new Matrix3.Cartesian3(); - const scratchPlane = new Plane.Plane(new Matrix3.Cartesian3(1.0, 0.0, 0.0), 0.0); - - /** - * Constructs a culling volume from a bounding sphere. Creates six planes that create a box containing the sphere. - * The planes are aligned to the x, y, and z axes in world coordinates. - * - * @param {BoundingSphere} boundingSphere The bounding sphere used to create the culling volume. - * @param {CullingVolume} [result] The object onto which to store the result. - * @returns {CullingVolume} The culling volume created from the bounding sphere. - */ - CullingVolume.fromBoundingSphere = function (boundingSphere, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(boundingSphere)) { - throw new Check.DeveloperError("boundingSphere is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new CullingVolume(); - } - - const length = faces.length; - const planes = result.planes; - planes.length = 2 * length; - - const center = boundingSphere.center; - const radius = boundingSphere.radius; - - let planeIndex = 0; - - for (let i = 0; i < length; ++i) { - const faceNormal = faces[i]; - - let plane0 = planes[planeIndex]; - let plane1 = planes[planeIndex + 1]; - - if (!defaultValue.defined(plane0)) { - plane0 = planes[planeIndex] = new Matrix2.Cartesian4(); - } - if (!defaultValue.defined(plane1)) { - plane1 = planes[planeIndex + 1] = new Matrix2.Cartesian4(); - } - - Matrix3.Cartesian3.multiplyByScalar(faceNormal, -radius, scratchPlaneCenter); - Matrix3.Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter); - - plane0.x = faceNormal.x; - plane0.y = faceNormal.y; - plane0.z = faceNormal.z; - plane0.w = -Matrix3.Cartesian3.dot(faceNormal, scratchPlaneCenter); - - Matrix3.Cartesian3.multiplyByScalar(faceNormal, radius, scratchPlaneCenter); - Matrix3.Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter); - - plane1.x = -faceNormal.x; - plane1.y = -faceNormal.y; - plane1.z = -faceNormal.z; - plane1.w = -Matrix3.Cartesian3.dot( - Matrix3.Cartesian3.negate(faceNormal, scratchPlaneNormal), - scratchPlaneCenter - ); - - planeIndex += 2; - } - - return result; - }; - - /** - * Determines whether a bounding volume intersects the culling volume. - * - * @param {Object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested. - * @returns {Intersect} Intersect.OUTSIDE, Intersect.INTERSECTING, or Intersect.INSIDE. - */ - CullingVolume.prototype.computeVisibility = function (boundingVolume) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(boundingVolume)) { - throw new Check.DeveloperError("boundingVolume is required."); - } - //>>includeEnd('debug'); - - const planes = this.planes; - let intersecting = false; - for (let k = 0, len = planes.length; k < len; ++k) { - const result = boundingVolume.intersectPlane( - Plane.Plane.fromCartesian4(planes[k], scratchPlane) - ); - if (result === Transforms.Intersect.OUTSIDE) { - return Transforms.Intersect.OUTSIDE; - } else if (result === Transforms.Intersect.INTERSECTING) { - intersecting = true; - } - } - - return intersecting ? Transforms.Intersect.INTERSECTING : Transforms.Intersect.INSIDE; - }; - - /** - * Determines whether a bounding volume intersects the culling volume. - * - * @param {Object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested. - * @param {Number} parentPlaneMask A bit mask from the boundingVolume's parent's check against the same culling - * volume, such that if (planeMask & (1 << planeIndex) === 0), for k < 31, then - * the parent (and therefore this) volume is completely inside plane[planeIndex] - * and that plane check can be skipped. - * @returns {Number} A plane mask as described above (which can be applied to this boundingVolume's children). - * - * @private - */ - CullingVolume.prototype.computeVisibilityWithPlaneMask = function ( - boundingVolume, - parentPlaneMask - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(boundingVolume)) { - throw new Check.DeveloperError("boundingVolume is required."); - } - if (!defaultValue.defined(parentPlaneMask)) { - throw new Check.DeveloperError("parentPlaneMask is required."); - } - //>>includeEnd('debug'); - - if ( - parentPlaneMask === CullingVolume.MASK_OUTSIDE || - parentPlaneMask === CullingVolume.MASK_INSIDE - ) { - // parent is completely outside or completely inside, so this child is as well. - return parentPlaneMask; - } - - // Start with MASK_INSIDE (all zeros) so that after the loop, the return value can be compared with MASK_INSIDE. - // (Because if there are fewer than 31 planes, the upper bits wont be changed.) - let mask = CullingVolume.MASK_INSIDE; - - const planes = this.planes; - for (let k = 0, len = planes.length; k < len; ++k) { - // For k greater than 31 (since 31 is the maximum number of INSIDE/INTERSECTING bits we can store), skip the optimization. - const flag = k < 31 ? 1 << k : 0; - if (k < 31 && (parentPlaneMask & flag) === 0) { - // boundingVolume is known to be INSIDE this plane. - continue; - } - - const result = boundingVolume.intersectPlane( - Plane.Plane.fromCartesian4(planes[k], scratchPlane) - ); - if (result === Transforms.Intersect.OUTSIDE) { - return CullingVolume.MASK_OUTSIDE; - } else if (result === Transforms.Intersect.INTERSECTING) { - mask |= flag; - } - } - - return mask; - }; - - /** - * For plane masks (as used in {@link CullingVolume#computeVisibilityWithPlaneMask}), this special value - * represents the case where the object bounding volume is entirely outside the culling volume. - * - * @type {Number} - * @private - */ - CullingVolume.MASK_OUTSIDE = 0xffffffff; - - /** - * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value - * represents the case where the object bounding volume is entirely inside the culling volume. - * - * @type {Number} - * @private - */ - CullingVolume.MASK_INSIDE = 0x00000000; - - /** - * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value - * represents the case where the object bounding volume (may) intersect all planes of the culling volume. - * - * @type {Number} - * @private - */ - CullingVolume.MASK_INDETERMINATE = 0x7fffffff; - - /** - * The viewing frustum is defined by 6 planes. - * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components - * define the unit vector normal to the plane, and the w component is the distance of the - * plane from the origin/camera position. - * - * @alias OrthographicOffCenterFrustum - * @constructor - * - * @param {Object} [options] An object with the following properties: - * @param {Number} [options.left] The left clipping plane distance. - * @param {Number} [options.right] The right clipping plane distance. - * @param {Number} [options.top] The top clipping plane distance. - * @param {Number} [options.bottom] The bottom clipping plane distance. - * @param {Number} [options.near=1.0] The near clipping plane distance. - * @param {Number} [options.far=500000000.0] The far clipping plane distance. - * - * @example - * const maxRadii = ellipsoid.maximumRadius; - * - * const frustum = new Cesium.OrthographicOffCenterFrustum(); - * frustum.right = maxRadii * Cesium.Math.PI; - * frustum.left = -c.frustum.right; - * frustum.top = c.frustum.right * (canvas.clientHeight / canvas.clientWidth); - * frustum.bottom = -c.frustum.top; - * frustum.near = 0.01 * maxRadii; - * frustum.far = 50.0 * maxRadii; - */ - function OrthographicOffCenterFrustum(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - /** - * The left clipping plane. - * @type {Number} - * @default undefined - */ - this.left = options.left; - this._left = undefined; - - /** - * The right clipping plane. - * @type {Number} - * @default undefined - */ - this.right = options.right; - this._right = undefined; - - /** - * The top clipping plane. - * @type {Number} - * @default undefined - */ - this.top = options.top; - this._top = undefined; - - /** - * The bottom clipping plane. - * @type {Number} - * @default undefined - */ - this.bottom = options.bottom; - this._bottom = undefined; - - /** - * The distance of the near plane. - * @type {Number} - * @default 1.0 - */ - this.near = defaultValue.defaultValue(options.near, 1.0); - this._near = this.near; - - /** - * The distance of the far plane. - * @type {Number} - * @default 500000000.0; - */ - this.far = defaultValue.defaultValue(options.far, 500000000.0); - this._far = this.far; - - this._cullingVolume = new CullingVolume(); - this._orthographicMatrix = new Matrix2.Matrix4(); - } - - function update$3(frustum) { - //>>includeStart('debug', pragmas.debug); - if ( - !defaultValue.defined(frustum.right) || - !defaultValue.defined(frustum.left) || - !defaultValue.defined(frustum.top) || - !defaultValue.defined(frustum.bottom) || - !defaultValue.defined(frustum.near) || - !defaultValue.defined(frustum.far) - ) { - throw new Check.DeveloperError( - "right, left, top, bottom, near, or far parameters are not set." - ); - } - //>>includeEnd('debug'); - - if ( - frustum.top !== frustum._top || - frustum.bottom !== frustum._bottom || - frustum.left !== frustum._left || - frustum.right !== frustum._right || - frustum.near !== frustum._near || - frustum.far !== frustum._far - ) { - //>>includeStart('debug', pragmas.debug); - if (frustum.left > frustum.right) { - throw new Check.DeveloperError("right must be greater than left."); - } - if (frustum.bottom > frustum.top) { - throw new Check.DeveloperError("top must be greater than bottom."); - } - if (frustum.near <= 0 || frustum.near > frustum.far) { - throw new Check.DeveloperError( - "near must be greater than zero and less than far." - ); - } - //>>includeEnd('debug'); - - frustum._left = frustum.left; - frustum._right = frustum.right; - frustum._top = frustum.top; - frustum._bottom = frustum.bottom; - frustum._near = frustum.near; - frustum._far = frustum.far; - frustum._orthographicMatrix = Matrix2.Matrix4.computeOrthographicOffCenter( - frustum.left, - frustum.right, - frustum.bottom, - frustum.top, - frustum.near, - frustum.far, - frustum._orthographicMatrix - ); - } - } - - Object.defineProperties(OrthographicOffCenterFrustum.prototype, { - /** - * Gets the orthographic projection matrix computed from the view frustum. - * @memberof OrthographicOffCenterFrustum.prototype - * @type {Matrix4} - * @readonly - */ - projectionMatrix: { - get: function () { - update$3(this); - return this._orthographicMatrix; - }, - }, - }); - - const getPlanesRight$1 = new Matrix3.Cartesian3(); - const getPlanesNearCenter$1 = new Matrix3.Cartesian3(); - const getPlanesPoint = new Matrix3.Cartesian3(); - const negateScratch = new Matrix3.Cartesian3(); - - /** - * Creates a culling volume for this frustum. - * - * @param {Cartesian3} position The eye position. - * @param {Cartesian3} direction The view direction. - * @param {Cartesian3} up The up direction. - * @returns {CullingVolume} A culling volume at the given position and orientation. - * - * @example - * // Check if a bounding volume intersects the frustum. - * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp); - * const intersect = cullingVolume.computeVisibility(boundingVolume); - */ - OrthographicOffCenterFrustum.prototype.computeCullingVolume = function ( - position, - direction, - up - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(position)) { - throw new Check.DeveloperError("position is required."); - } - if (!defaultValue.defined(direction)) { - throw new Check.DeveloperError("direction is required."); - } - if (!defaultValue.defined(up)) { - throw new Check.DeveloperError("up is required."); - } - //>>includeEnd('debug'); - - const planes = this._cullingVolume.planes; - const t = this.top; - const b = this.bottom; - const r = this.right; - const l = this.left; - const n = this.near; - const f = this.far; - - const right = Matrix3.Cartesian3.cross(direction, up, getPlanesRight$1); - Matrix3.Cartesian3.normalize(right, right); - const nearCenter = getPlanesNearCenter$1; - Matrix3.Cartesian3.multiplyByScalar(direction, n, nearCenter); - Matrix3.Cartesian3.add(position, nearCenter, nearCenter); - - const point = getPlanesPoint; - - // Left plane - Matrix3.Cartesian3.multiplyByScalar(right, l, point); - Matrix3.Cartesian3.add(nearCenter, point, point); - - let plane = planes[0]; - if (!defaultValue.defined(plane)) { - plane = planes[0] = new Matrix2.Cartesian4(); - } - plane.x = right.x; - plane.y = right.y; - plane.z = right.z; - plane.w = -Matrix3.Cartesian3.dot(right, point); - - // Right plane - Matrix3.Cartesian3.multiplyByScalar(right, r, point); - Matrix3.Cartesian3.add(nearCenter, point, point); - - plane = planes[1]; - if (!defaultValue.defined(plane)) { - plane = planes[1] = new Matrix2.Cartesian4(); - } - plane.x = -right.x; - plane.y = -right.y; - plane.z = -right.z; - plane.w = -Matrix3.Cartesian3.dot(Matrix3.Cartesian3.negate(right, negateScratch), point); - - // Bottom plane - Matrix3.Cartesian3.multiplyByScalar(up, b, point); - Matrix3.Cartesian3.add(nearCenter, point, point); - - plane = planes[2]; - if (!defaultValue.defined(plane)) { - plane = planes[2] = new Matrix2.Cartesian4(); - } - plane.x = up.x; - plane.y = up.y; - plane.z = up.z; - plane.w = -Matrix3.Cartesian3.dot(up, point); - - // Top plane - Matrix3.Cartesian3.multiplyByScalar(up, t, point); - Matrix3.Cartesian3.add(nearCenter, point, point); - - plane = planes[3]; - if (!defaultValue.defined(plane)) { - plane = planes[3] = new Matrix2.Cartesian4(); - } - plane.x = -up.x; - plane.y = -up.y; - plane.z = -up.z; - plane.w = -Matrix3.Cartesian3.dot(Matrix3.Cartesian3.negate(up, negateScratch), point); - - // Near plane - plane = planes[4]; - if (!defaultValue.defined(plane)) { - plane = planes[4] = new Matrix2.Cartesian4(); - } - plane.x = direction.x; - plane.y = direction.y; - plane.z = direction.z; - plane.w = -Matrix3.Cartesian3.dot(direction, nearCenter); - - // Far plane - Matrix3.Cartesian3.multiplyByScalar(direction, f, point); - Matrix3.Cartesian3.add(position, point, point); - - plane = planes[5]; - if (!defaultValue.defined(plane)) { - plane = planes[5] = new Matrix2.Cartesian4(); - } - plane.x = -direction.x; - plane.y = -direction.y; - plane.z = -direction.z; - plane.w = -Matrix3.Cartesian3.dot(Matrix3.Cartesian3.negate(direction, negateScratch), point); - - return this._cullingVolume; - }; - - /** - * Returns the pixel's width and height in meters. - * - * @param {Number} drawingBufferWidth The width of the drawing buffer. - * @param {Number} drawingBufferHeight The height of the drawing buffer. - * @param {Number} distance The distance to the near plane in meters. - * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively. - * - * @exception {DeveloperError} drawingBufferWidth must be greater than zero. - * @exception {DeveloperError} drawingBufferHeight must be greater than zero. - * @exception {DeveloperError} pixelRatio must be greater than zero. - * - * @example - * // Example 1 - * // Get the width and height of a pixel. - * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2()); - */ - OrthographicOffCenterFrustum.prototype.getPixelDimensions = function ( - drawingBufferWidth, - drawingBufferHeight, - distance, - pixelRatio, - result - ) { - update$3(this); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(drawingBufferWidth) || !defaultValue.defined(drawingBufferHeight)) { - throw new Check.DeveloperError( - "Both drawingBufferWidth and drawingBufferHeight are required." - ); - } - if (drawingBufferWidth <= 0) { - throw new Check.DeveloperError("drawingBufferWidth must be greater than zero."); - } - if (drawingBufferHeight <= 0) { - throw new Check.DeveloperError("drawingBufferHeight must be greater than zero."); - } - if (!defaultValue.defined(distance)) { - throw new Check.DeveloperError("distance is required."); - } - if (!defaultValue.defined(pixelRatio)) { - throw new Check.DeveloperError("pixelRatio is required."); - } - if (pixelRatio <= 0) { - throw new Check.DeveloperError("pixelRatio must be greater than zero."); - } - if (!defaultValue.defined(result)) { - throw new Check.DeveloperError("A result object is required."); - } - //>>includeEnd('debug'); - - const frustumWidth = this.right - this.left; - const frustumHeight = this.top - this.bottom; - const pixelWidth = (pixelRatio * frustumWidth) / drawingBufferWidth; - const pixelHeight = (pixelRatio * frustumHeight) / drawingBufferHeight; - - result.x = pixelWidth; - result.y = pixelHeight; - return result; - }; - - /** - * Returns a duplicate of a OrthographicOffCenterFrustum instance. - * - * @param {OrthographicOffCenterFrustum} [result] The object onto which to store the result. - * @returns {OrthographicOffCenterFrustum} The modified result parameter or a new OrthographicOffCenterFrustum instance if one was not provided. - */ - OrthographicOffCenterFrustum.prototype.clone = function (result) { - if (!defaultValue.defined(result)) { - result = new OrthographicOffCenterFrustum(); - } - - result.left = this.left; - result.right = this.right; - result.top = this.top; - result.bottom = this.bottom; - result.near = this.near; - result.far = this.far; - - // force update of clone to compute matrices - result._left = undefined; - result._right = undefined; - result._top = undefined; - result._bottom = undefined; - result._near = undefined; - result._far = undefined; - - return result; - }; - - /** - * Compares the provided OrthographicOffCenterFrustum componentwise and returns - * true if they are equal, false otherwise. - * - * @param {OrthographicOffCenterFrustum} [other] The right hand side OrthographicOffCenterFrustum. - * @returns {Boolean} true if they are equal, false otherwise. - */ - OrthographicOffCenterFrustum.prototype.equals = function (other) { - return ( - defaultValue.defined(other) && - other instanceof OrthographicOffCenterFrustum && - this.right === other.right && - this.left === other.left && - this.top === other.top && - this.bottom === other.bottom && - this.near === other.near && - this.far === other.far - ); - }; - - /** - * Compares the provided OrthographicOffCenterFrustum componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {OrthographicOffCenterFrustum} other The right hand side OrthographicOffCenterFrustum. - * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if this and other are within the provided epsilon, false otherwise. - */ - OrthographicOffCenterFrustum.prototype.equalsEpsilon = function ( - other, - relativeEpsilon, - absoluteEpsilon - ) { - return ( - other === this || - (defaultValue.defined(other) && - other instanceof OrthographicOffCenterFrustum && - Math$1.CesiumMath.equalsEpsilon( - this.right, - other.right, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.left, - other.left, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.top, - other.top, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.bottom, - other.bottom, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.near, - other.near, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.far, - other.far, - relativeEpsilon, - absoluteEpsilon - )) - ); - }; - - /** - * The viewing frustum is defined by 6 planes. - * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components - * define the unit vector normal to the plane, and the w component is the distance of the - * plane from the origin/camera position. - * - * @alias OrthographicFrustum - * @constructor - * - * @param {Object} [options] An object with the following properties: - * @param {Number} [options.width] The width of the frustum in meters. - * @param {Number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height. - * @param {Number} [options.near=1.0] The distance of the near plane. - * @param {Number} [options.far=500000000.0] The distance of the far plane. - * - * @example - * const maxRadii = ellipsoid.maximumRadius; - * - * const frustum = new Cesium.OrthographicFrustum(); - * frustum.near = 0.01 * maxRadii; - * frustum.far = 50.0 * maxRadii; - */ - function OrthographicFrustum(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - this._offCenterFrustum = new OrthographicOffCenterFrustum(); - - /** - * The horizontal width of the frustum in meters. - * @type {Number} - * @default undefined - */ - this.width = options.width; - this._width = undefined; - - /** - * The aspect ratio of the frustum's width to it's height. - * @type {Number} - * @default undefined - */ - this.aspectRatio = options.aspectRatio; - this._aspectRatio = undefined; - - /** - * The distance of the near plane. - * @type {Number} - * @default 1.0 - */ - this.near = defaultValue.defaultValue(options.near, 1.0); - this._near = this.near; - - /** - * The distance of the far plane. - * @type {Number} - * @default 500000000.0; - */ - this.far = defaultValue.defaultValue(options.far, 500000000.0); - this._far = this.far; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - OrthographicFrustum.packedLength = 4; - - /** - * Stores the provided instance into the provided array. - * - * @param {OrthographicFrustum} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - OrthographicFrustum.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.width; - array[startingIndex++] = value.aspectRatio; - array[startingIndex++] = value.near; - array[startingIndex] = value.far; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {OrthographicFrustum} [result] The object into which to store the result. - * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided. - */ - OrthographicFrustum.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new OrthographicFrustum(); - } - - result.width = array[startingIndex++]; - result.aspectRatio = array[startingIndex++]; - result.near = array[startingIndex++]; - result.far = array[startingIndex]; - - return result; - }; - - function update$2(frustum) { - //>>includeStart('debug', pragmas.debug); - if ( - !defaultValue.defined(frustum.width) || - !defaultValue.defined(frustum.aspectRatio) || - !defaultValue.defined(frustum.near) || - !defaultValue.defined(frustum.far) - ) { - throw new Check.DeveloperError( - "width, aspectRatio, near, or far parameters are not set." - ); - } - //>>includeEnd('debug'); - - const f = frustum._offCenterFrustum; - - if ( - frustum.width !== frustum._width || - frustum.aspectRatio !== frustum._aspectRatio || - frustum.near !== frustum._near || - frustum.far !== frustum._far - ) { - //>>includeStart('debug', pragmas.debug); - if (frustum.aspectRatio < 0) { - throw new Check.DeveloperError("aspectRatio must be positive."); - } - if (frustum.near < 0 || frustum.near > frustum.far) { - throw new Check.DeveloperError( - "near must be greater than zero and less than far." - ); - } - //>>includeEnd('debug'); - - frustum._aspectRatio = frustum.aspectRatio; - frustum._width = frustum.width; - frustum._near = frustum.near; - frustum._far = frustum.far; - - const ratio = 1.0 / frustum.aspectRatio; - f.right = frustum.width * 0.5; - f.left = -f.right; - f.top = ratio * f.right; - f.bottom = -f.top; - f.near = frustum.near; - f.far = frustum.far; - } - } - - Object.defineProperties(OrthographicFrustum.prototype, { - /** - * Gets the orthographic projection matrix computed from the view frustum. - * @memberof OrthographicFrustum.prototype - * @type {Matrix4} - * @readonly - */ - projectionMatrix: { - get: function () { - update$2(this); - return this._offCenterFrustum.projectionMatrix; - }, - }, - }); - - /** - * Creates a culling volume for this frustum. - * - * @param {Cartesian3} position The eye position. - * @param {Cartesian3} direction The view direction. - * @param {Cartesian3} up The up direction. - * @returns {CullingVolume} A culling volume at the given position and orientation. - * - * @example - * // Check if a bounding volume intersects the frustum. - * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp); - * const intersect = cullingVolume.computeVisibility(boundingVolume); - */ - OrthographicFrustum.prototype.computeCullingVolume = function ( - position, - direction, - up - ) { - update$2(this); - return this._offCenterFrustum.computeCullingVolume(position, direction, up); - }; - - /** - * Returns the pixel's width and height in meters. - * - * @param {Number} drawingBufferWidth The width of the drawing buffer. - * @param {Number} drawingBufferHeight The height of the drawing buffer. - * @param {Number} distance The distance to the near plane in meters. - * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively. - * - * @exception {DeveloperError} drawingBufferWidth must be greater than zero. - * @exception {DeveloperError} drawingBufferHeight must be greater than zero. - * @exception {DeveloperError} pixelRatio must be greater than zero. - * - * @example - * // Example 1 - * // Get the width and height of a pixel. - * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2()); - */ - OrthographicFrustum.prototype.getPixelDimensions = function ( - drawingBufferWidth, - drawingBufferHeight, - distance, - pixelRatio, - result - ) { - update$2(this); - return this._offCenterFrustum.getPixelDimensions( - drawingBufferWidth, - drawingBufferHeight, - distance, - pixelRatio, - result - ); - }; - - /** - * Returns a duplicate of a OrthographicFrustum instance. - * - * @param {OrthographicFrustum} [result] The object onto which to store the result. - * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided. - */ - OrthographicFrustum.prototype.clone = function (result) { - if (!defaultValue.defined(result)) { - result = new OrthographicFrustum(); - } - - result.aspectRatio = this.aspectRatio; - result.width = this.width; - result.near = this.near; - result.far = this.far; - - // force update of clone to compute matrices - result._aspectRatio = undefined; - result._width = undefined; - result._near = undefined; - result._far = undefined; - - this._offCenterFrustum.clone(result._offCenterFrustum); - - return result; - }; - - /** - * Compares the provided OrthographicFrustum componentwise and returns - * true if they are equal, false otherwise. - * - * @param {OrthographicFrustum} [other] The right hand side OrthographicFrustum. - * @returns {Boolean} true if they are equal, false otherwise. - */ - OrthographicFrustum.prototype.equals = function (other) { - if (!defaultValue.defined(other) || !(other instanceof OrthographicFrustum)) { - return false; - } - - update$2(this); - update$2(other); - - return ( - this.width === other.width && - this.aspectRatio === other.aspectRatio && - this._offCenterFrustum.equals(other._offCenterFrustum) - ); - }; - - /** - * Compares the provided OrthographicFrustum componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {OrthographicFrustum} other The right hand side OrthographicFrustum. - * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if this and other are within the provided epsilon, false otherwise. - */ - OrthographicFrustum.prototype.equalsEpsilon = function ( - other, - relativeEpsilon, - absoluteEpsilon - ) { - if (!defaultValue.defined(other) || !(other instanceof OrthographicFrustum)) { - return false; - } - - update$2(this); - update$2(other); - - return ( - Math$1.CesiumMath.equalsEpsilon( - this.width, - other.width, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.aspectRatio, - other.aspectRatio, - relativeEpsilon, - absoluteEpsilon - ) && - this._offCenterFrustum.equalsEpsilon( - other._offCenterFrustum, - relativeEpsilon, - absoluteEpsilon - ) - ); - }; - - /** - * The viewing frustum is defined by 6 planes. - * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components - * define the unit vector normal to the plane, and the w component is the distance of the - * plane from the origin/camera position. - * - * @alias PerspectiveOffCenterFrustum - * @constructor - * - * @param {Object} [options] An object with the following properties: - * @param {Number} [options.left] The left clipping plane distance. - * @param {Number} [options.right] The right clipping plane distance. - * @param {Number} [options.top] The top clipping plane distance. - * @param {Number} [options.bottom] The bottom clipping plane distance. - * @param {Number} [options.near=1.0] The near clipping plane distance. - * @param {Number} [options.far=500000000.0] The far clipping plane distance. - * - * @example - * const frustum = new Cesium.PerspectiveOffCenterFrustum({ - * left : -1.0, - * right : 1.0, - * top : 1.0, - * bottom : -1.0, - * near : 1.0, - * far : 100.0 - * }); - * - * @see PerspectiveFrustum - */ - function PerspectiveOffCenterFrustum(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - /** - * Defines the left clipping plane. - * @type {Number} - * @default undefined - */ - this.left = options.left; - this._left = undefined; - - /** - * Defines the right clipping plane. - * @type {Number} - * @default undefined - */ - this.right = options.right; - this._right = undefined; - - /** - * Defines the top clipping plane. - * @type {Number} - * @default undefined - */ - this.top = options.top; - this._top = undefined; - - /** - * Defines the bottom clipping plane. - * @type {Number} - * @default undefined - */ - this.bottom = options.bottom; - this._bottom = undefined; - - /** - * The distance of the near plane. - * @type {Number} - * @default 1.0 - */ - this.near = defaultValue.defaultValue(options.near, 1.0); - this._near = this.near; - - /** - * The distance of the far plane. - * @type {Number} - * @default 500000000.0 - */ - this.far = defaultValue.defaultValue(options.far, 500000000.0); - this._far = this.far; - - this._cullingVolume = new CullingVolume(); - this._perspectiveMatrix = new Matrix2.Matrix4(); - this._infinitePerspective = new Matrix2.Matrix4(); - } - - function update$1(frustum) { - //>>includeStart('debug', pragmas.debug); - if ( - !defaultValue.defined(frustum.right) || - !defaultValue.defined(frustum.left) || - !defaultValue.defined(frustum.top) || - !defaultValue.defined(frustum.bottom) || - !defaultValue.defined(frustum.near) || - !defaultValue.defined(frustum.far) - ) { - throw new Check.DeveloperError( - "right, left, top, bottom, near, or far parameters are not set." - ); - } - //>>includeEnd('debug'); - - const t = frustum.top; - const b = frustum.bottom; - const r = frustum.right; - const l = frustum.left; - const n = frustum.near; - const f = frustum.far; - - if ( - t !== frustum._top || - b !== frustum._bottom || - l !== frustum._left || - r !== frustum._right || - n !== frustum._near || - f !== frustum._far - ) { - //>>includeStart('debug', pragmas.debug); - if (frustum.near <= 0 || frustum.near > frustum.far) { - throw new Check.DeveloperError( - "near must be greater than zero and less than far." - ); - } - //>>includeEnd('debug'); - - frustum._left = l; - frustum._right = r; - frustum._top = t; - frustum._bottom = b; - frustum._near = n; - frustum._far = f; - frustum._perspectiveMatrix = Matrix2.Matrix4.computePerspectiveOffCenter( - l, - r, - b, - t, - n, - f, - frustum._perspectiveMatrix - ); - frustum._infinitePerspective = Matrix2.Matrix4.computeInfinitePerspectiveOffCenter( - l, - r, - b, - t, - n, - frustum._infinitePerspective - ); - } - } - - Object.defineProperties(PerspectiveOffCenterFrustum.prototype, { - /** - * Gets the perspective projection matrix computed from the view frustum. - * @memberof PerspectiveOffCenterFrustum.prototype - * @type {Matrix4} - * @readonly - * - * @see PerspectiveOffCenterFrustum#infiniteProjectionMatrix - */ - projectionMatrix: { - get: function () { - update$1(this); - return this._perspectiveMatrix; - }, - }, - - /** - * Gets the perspective projection matrix computed from the view frustum with an infinite far plane. - * @memberof PerspectiveOffCenterFrustum.prototype - * @type {Matrix4} - * @readonly - * - * @see PerspectiveOffCenterFrustum#projectionMatrix - */ - infiniteProjectionMatrix: { - get: function () { - update$1(this); - return this._infinitePerspective; - }, - }, - }); - - const getPlanesRight = new Matrix3.Cartesian3(); - const getPlanesNearCenter = new Matrix3.Cartesian3(); - const getPlanesFarCenter = new Matrix3.Cartesian3(); - const getPlanesNormal = new Matrix3.Cartesian3(); - /** - * Creates a culling volume for this frustum. - * - * @param {Cartesian3} position The eye position. - * @param {Cartesian3} direction The view direction. - * @param {Cartesian3} up The up direction. - * @returns {CullingVolume} A culling volume at the given position and orientation. - * - * @example - * // Check if a bounding volume intersects the frustum. - * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp); - * const intersect = cullingVolume.computeVisibility(boundingVolume); - */ - PerspectiveOffCenterFrustum.prototype.computeCullingVolume = function ( - position, - direction, - up - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(position)) { - throw new Check.DeveloperError("position is required."); - } - - if (!defaultValue.defined(direction)) { - throw new Check.DeveloperError("direction is required."); - } - - if (!defaultValue.defined(up)) { - throw new Check.DeveloperError("up is required."); - } - //>>includeEnd('debug'); - - const planes = this._cullingVolume.planes; - - const t = this.top; - const b = this.bottom; - const r = this.right; - const l = this.left; - const n = this.near; - const f = this.far; - - const right = Matrix3.Cartesian3.cross(direction, up, getPlanesRight); - - const nearCenter = getPlanesNearCenter; - Matrix3.Cartesian3.multiplyByScalar(direction, n, nearCenter); - Matrix3.Cartesian3.add(position, nearCenter, nearCenter); - - const farCenter = getPlanesFarCenter; - Matrix3.Cartesian3.multiplyByScalar(direction, f, farCenter); - Matrix3.Cartesian3.add(position, farCenter, farCenter); - - const normal = getPlanesNormal; - - //Left plane computation - Matrix3.Cartesian3.multiplyByScalar(right, l, normal); - Matrix3.Cartesian3.add(nearCenter, normal, normal); - Matrix3.Cartesian3.subtract(normal, position, normal); - Matrix3.Cartesian3.normalize(normal, normal); - Matrix3.Cartesian3.cross(normal, up, normal); - Matrix3.Cartesian3.normalize(normal, normal); - - let plane = planes[0]; - if (!defaultValue.defined(plane)) { - plane = planes[0] = new Matrix2.Cartesian4(); - } - plane.x = normal.x; - plane.y = normal.y; - plane.z = normal.z; - plane.w = -Matrix3.Cartesian3.dot(normal, position); - - //Right plane computation - Matrix3.Cartesian3.multiplyByScalar(right, r, normal); - Matrix3.Cartesian3.add(nearCenter, normal, normal); - Matrix3.Cartesian3.subtract(normal, position, normal); - Matrix3.Cartesian3.cross(up, normal, normal); - Matrix3.Cartesian3.normalize(normal, normal); - - plane = planes[1]; - if (!defaultValue.defined(plane)) { - plane = planes[1] = new Matrix2.Cartesian4(); - } - plane.x = normal.x; - plane.y = normal.y; - plane.z = normal.z; - plane.w = -Matrix3.Cartesian3.dot(normal, position); - - //Bottom plane computation - Matrix3.Cartesian3.multiplyByScalar(up, b, normal); - Matrix3.Cartesian3.add(nearCenter, normal, normal); - Matrix3.Cartesian3.subtract(normal, position, normal); - Matrix3.Cartesian3.cross(right, normal, normal); - Matrix3.Cartesian3.normalize(normal, normal); - - plane = planes[2]; - if (!defaultValue.defined(plane)) { - plane = planes[2] = new Matrix2.Cartesian4(); - } - plane.x = normal.x; - plane.y = normal.y; - plane.z = normal.z; - plane.w = -Matrix3.Cartesian3.dot(normal, position); - - //Top plane computation - Matrix3.Cartesian3.multiplyByScalar(up, t, normal); - Matrix3.Cartesian3.add(nearCenter, normal, normal); - Matrix3.Cartesian3.subtract(normal, position, normal); - Matrix3.Cartesian3.cross(normal, right, normal); - Matrix3.Cartesian3.normalize(normal, normal); - - plane = planes[3]; - if (!defaultValue.defined(plane)) { - plane = planes[3] = new Matrix2.Cartesian4(); - } - plane.x = normal.x; - plane.y = normal.y; - plane.z = normal.z; - plane.w = -Matrix3.Cartesian3.dot(normal, position); - - //Near plane computation - plane = planes[4]; - if (!defaultValue.defined(plane)) { - plane = planes[4] = new Matrix2.Cartesian4(); - } - plane.x = direction.x; - plane.y = direction.y; - plane.z = direction.z; - plane.w = -Matrix3.Cartesian3.dot(direction, nearCenter); - - //Far plane computation - Matrix3.Cartesian3.negate(direction, normal); - - plane = planes[5]; - if (!defaultValue.defined(plane)) { - plane = planes[5] = new Matrix2.Cartesian4(); - } - plane.x = normal.x; - plane.y = normal.y; - plane.z = normal.z; - plane.w = -Matrix3.Cartesian3.dot(normal, farCenter); - - return this._cullingVolume; - }; - - /** - * Returns the pixel's width and height in meters. - * - * @param {Number} drawingBufferWidth The width of the drawing buffer. - * @param {Number} drawingBufferHeight The height of the drawing buffer. - * @param {Number} distance The distance to the near plane in meters. - * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively. - * - * @exception {DeveloperError} drawingBufferWidth must be greater than zero. - * @exception {DeveloperError} drawingBufferHeight must be greater than zero. - * @exception {DeveloperError} pixelRatio must be greater than zero. - * - * @example - * // Example 1 - * // Get the width and height of a pixel. - * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2()); - * - * @example - * // Example 2 - * // Get the width and height of a pixel if the near plane was set to 'distance'. - * // For example, get the size of a pixel of an image on a billboard. - * const position = camera.position; - * const direction = camera.direction; - * const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive - * const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector - * const distance = Cesium.Cartesian3.magnitude(toCenterProj); - * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2()); - */ - PerspectiveOffCenterFrustum.prototype.getPixelDimensions = function ( - drawingBufferWidth, - drawingBufferHeight, - distance, - pixelRatio, - result - ) { - update$1(this); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(drawingBufferWidth) || !defaultValue.defined(drawingBufferHeight)) { - throw new Check.DeveloperError( - "Both drawingBufferWidth and drawingBufferHeight are required." - ); - } - if (drawingBufferWidth <= 0) { - throw new Check.DeveloperError("drawingBufferWidth must be greater than zero."); - } - if (drawingBufferHeight <= 0) { - throw new Check.DeveloperError("drawingBufferHeight must be greater than zero."); - } - if (!defaultValue.defined(distance)) { - throw new Check.DeveloperError("distance is required."); - } - if (!defaultValue.defined(pixelRatio)) { - throw new Check.DeveloperError("pixelRatio is required"); - } - if (pixelRatio <= 0) { - throw new Check.DeveloperError("pixelRatio must be greater than zero."); - } - if (!defaultValue.defined(result)) { - throw new Check.DeveloperError("A result object is required."); - } - //>>includeEnd('debug'); - - const inverseNear = 1.0 / this.near; - let tanTheta = this.top * inverseNear; - const pixelHeight = - (2.0 * pixelRatio * distance * tanTheta) / drawingBufferHeight; - tanTheta = this.right * inverseNear; - const pixelWidth = - (2.0 * pixelRatio * distance * tanTheta) / drawingBufferWidth; - - result.x = pixelWidth; - result.y = pixelHeight; - return result; - }; - - /** - * Returns a duplicate of a PerspectiveOffCenterFrustum instance. - * - * @param {PerspectiveOffCenterFrustum} [result] The object onto which to store the result. - * @returns {PerspectiveOffCenterFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided. - */ - PerspectiveOffCenterFrustum.prototype.clone = function (result) { - if (!defaultValue.defined(result)) { - result = new PerspectiveOffCenterFrustum(); - } - - result.right = this.right; - result.left = this.left; - result.top = this.top; - result.bottom = this.bottom; - result.near = this.near; - result.far = this.far; - - // force update of clone to compute matrices - result._left = undefined; - result._right = undefined; - result._top = undefined; - result._bottom = undefined; - result._near = undefined; - result._far = undefined; - - return result; - }; - - /** - * Compares the provided PerspectiveOffCenterFrustum componentwise and returns - * true if they are equal, false otherwise. - * - * @param {PerspectiveOffCenterFrustum} [other] The right hand side PerspectiveOffCenterFrustum. - * @returns {Boolean} true if they are equal, false otherwise. - */ - PerspectiveOffCenterFrustum.prototype.equals = function (other) { - return ( - defaultValue.defined(other) && - other instanceof PerspectiveOffCenterFrustum && - this.right === other.right && - this.left === other.left && - this.top === other.top && - this.bottom === other.bottom && - this.near === other.near && - this.far === other.far - ); - }; - - /** - * Compares the provided PerspectiveOffCenterFrustum componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {PerspectiveOffCenterFrustum} other The right hand side PerspectiveOffCenterFrustum. - * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if this and other are within the provided epsilon, false otherwise. - */ - PerspectiveOffCenterFrustum.prototype.equalsEpsilon = function ( - other, - relativeEpsilon, - absoluteEpsilon - ) { - return ( - other === this || - (defaultValue.defined(other) && - other instanceof PerspectiveOffCenterFrustum && - Math$1.CesiumMath.equalsEpsilon( - this.right, - other.right, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.left, - other.left, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.top, - other.top, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.bottom, - other.bottom, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.near, - other.near, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.far, - other.far, - relativeEpsilon, - absoluteEpsilon - )) - ); - }; - - /** - * The viewing frustum is defined by 6 planes. - * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components - * define the unit vector normal to the plane, and the w component is the distance of the - * plane from the origin/camera position. - * - * @alias PerspectiveFrustum - * @constructor - * - * @param {Object} [options] An object with the following properties: - * @param {Number} [options.fov] The angle of the field of view (FOV), in radians. - * @param {Number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height. - * @param {Number} [options.near=1.0] The distance of the near plane. - * @param {Number} [options.far=500000000.0] The distance of the far plane. - * @param {Number} [options.xOffset=0.0] The offset in the x direction. - * @param {Number} [options.yOffset=0.0] The offset in the y direction. - * - * @example - * const frustum = new Cesium.PerspectiveFrustum({ - * fov : Cesium.Math.PI_OVER_THREE, - * aspectRatio : canvas.clientWidth / canvas.clientHeight - * near : 1.0, - * far : 1000.0 - * }); - * - * @see PerspectiveOffCenterFrustum - */ - function PerspectiveFrustum(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - this._offCenterFrustum = new PerspectiveOffCenterFrustum(); - - /** - * The angle of the field of view (FOV), in radians. This angle will be used - * as the horizontal FOV if the width is greater than the height, otherwise - * it will be the vertical FOV. - * @type {Number} - * @default undefined - */ - this.fov = options.fov; - this._fov = undefined; - this._fovy = undefined; - - this._sseDenominator = undefined; - - /** - * The aspect ratio of the frustum's width to it's height. - * @type {Number} - * @default undefined - */ - this.aspectRatio = options.aspectRatio; - this._aspectRatio = undefined; - - /** - * The distance of the near plane. - * @type {Number} - * @default 1.0 - */ - this.near = defaultValue.defaultValue(options.near, 1.0); - this._near = this.near; - - /** - * The distance of the far plane. - * @type {Number} - * @default 500000000.0 - */ - this.far = defaultValue.defaultValue(options.far, 500000000.0); - this._far = this.far; - - /** - * Offsets the frustum in the x direction. - * @type {Number} - * @default 0.0 - */ - this.xOffset = defaultValue.defaultValue(options.xOffset, 0.0); - this._xOffset = this.xOffset; - - /** - * Offsets the frustum in the y direction. - * @type {Number} - * @default 0.0 - */ - this.yOffset = defaultValue.defaultValue(options.yOffset, 0.0); - this._yOffset = this.yOffset; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - PerspectiveFrustum.packedLength = 6; - - /** - * Stores the provided instance into the provided array. - * - * @param {PerspectiveFrustum} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - PerspectiveFrustum.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.fov; - array[startingIndex++] = value.aspectRatio; - array[startingIndex++] = value.near; - array[startingIndex++] = value.far; - array[startingIndex++] = value.xOffset; - array[startingIndex] = value.yOffset; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PerspectiveFrustum} [result] The object into which to store the result. - * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided. - */ - PerspectiveFrustum.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new PerspectiveFrustum(); - } - - result.fov = array[startingIndex++]; - result.aspectRatio = array[startingIndex++]; - result.near = array[startingIndex++]; - result.far = array[startingIndex++]; - result.xOffset = array[startingIndex++]; - result.yOffset = array[startingIndex]; - - return result; - }; - - function update(frustum) { - //>>includeStart('debug', pragmas.debug); - if ( - !defaultValue.defined(frustum.fov) || - !defaultValue.defined(frustum.aspectRatio) || - !defaultValue.defined(frustum.near) || - !defaultValue.defined(frustum.far) - ) { - throw new Check.DeveloperError( - "fov, aspectRatio, near, or far parameters are not set." - ); - } - //>>includeEnd('debug'); - - const f = frustum._offCenterFrustum; - - if ( - frustum.fov !== frustum._fov || - frustum.aspectRatio !== frustum._aspectRatio || - frustum.near !== frustum._near || - frustum.far !== frustum._far || - frustum.xOffset !== frustum._xOffset || - frustum.yOffset !== frustum._yOffset - ) { - //>>includeStart('debug', pragmas.debug); - if (frustum.fov < 0 || frustum.fov >= Math.PI) { - throw new Check.DeveloperError("fov must be in the range [0, PI)."); - } - - if (frustum.aspectRatio < 0) { - throw new Check.DeveloperError("aspectRatio must be positive."); - } - - if (frustum.near < 0 || frustum.near > frustum.far) { - throw new Check.DeveloperError( - "near must be greater than zero and less than far." - ); - } - //>>includeEnd('debug'); - - frustum._aspectRatio = frustum.aspectRatio; - frustum._fov = frustum.fov; - frustum._fovy = - frustum.aspectRatio <= 1 - ? frustum.fov - : Math.atan(Math.tan(frustum.fov * 0.5) / frustum.aspectRatio) * 2.0; - frustum._near = frustum.near; - frustum._far = frustum.far; - frustum._sseDenominator = 2.0 * Math.tan(0.5 * frustum._fovy); - frustum._xOffset = frustum.xOffset; - frustum._yOffset = frustum.yOffset; - - f.top = frustum.near * Math.tan(0.5 * frustum._fovy); - f.bottom = -f.top; - f.right = frustum.aspectRatio * f.top; - f.left = -f.right; - f.near = frustum.near; - f.far = frustum.far; - - f.right += frustum.xOffset; - f.left += frustum.xOffset; - f.top += frustum.yOffset; - f.bottom += frustum.yOffset; - } - } - - Object.defineProperties(PerspectiveFrustum.prototype, { - /** - * Gets the perspective projection matrix computed from the view frustum. - * @memberof PerspectiveFrustum.prototype - * @type {Matrix4} - * @readonly - * - * @see PerspectiveFrustum#infiniteProjectionMatrix - */ - projectionMatrix: { - get: function () { - update(this); - return this._offCenterFrustum.projectionMatrix; - }, - }, - - /** - * The perspective projection matrix computed from the view frustum with an infinite far plane. - * @memberof PerspectiveFrustum.prototype - * @type {Matrix4} - * @readonly - * - * @see PerspectiveFrustum#projectionMatrix - */ - infiniteProjectionMatrix: { - get: function () { - update(this); - return this._offCenterFrustum.infiniteProjectionMatrix; - }, - }, - - /** - * Gets the angle of the vertical field of view, in radians. - * @memberof PerspectiveFrustum.prototype - * @type {Number} - * @readonly - * @default undefined - */ - fovy: { - get: function () { - update(this); - return this._fovy; - }, - }, - - /** - * @readonly - * @private - */ - sseDenominator: { - get: function () { - update(this); - return this._sseDenominator; - }, - }, - }); - - /** - * Creates a culling volume for this frustum. - * - * @param {Cartesian3} position The eye position. - * @param {Cartesian3} direction The view direction. - * @param {Cartesian3} up The up direction. - * @returns {CullingVolume} A culling volume at the given position and orientation. - * - * @example - * // Check if a bounding volume intersects the frustum. - * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp); - * const intersect = cullingVolume.computeVisibility(boundingVolume); - */ - PerspectiveFrustum.prototype.computeCullingVolume = function ( - position, - direction, - up - ) { - update(this); - return this._offCenterFrustum.computeCullingVolume(position, direction, up); - }; - - /** - * Returns the pixel's width and height in meters. - * - * @param {Number} drawingBufferWidth The width of the drawing buffer. - * @param {Number} drawingBufferHeight The height of the drawing buffer. - * @param {Number} distance The distance to the near plane in meters. - * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively. - * - * @exception {DeveloperError} drawingBufferWidth must be greater than zero. - * @exception {DeveloperError} drawingBufferHeight must be greater than zero. - * @exception {DeveloperError} pixelRatio must be greater than zero. - * - * @example - * // Example 1 - * // Get the width and height of a pixel. - * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2()); - * - * @example - * // Example 2 - * // Get the width and height of a pixel if the near plane was set to 'distance'. - * // For example, get the size of a pixel of an image on a billboard. - * const position = camera.position; - * const direction = camera.direction; - * const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive - * const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector - * const distance = Cesium.Cartesian3.magnitude(toCenterProj); - * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2()); - */ - PerspectiveFrustum.prototype.getPixelDimensions = function ( - drawingBufferWidth, - drawingBufferHeight, - distance, - pixelRatio, - result - ) { - update(this); - return this._offCenterFrustum.getPixelDimensions( - drawingBufferWidth, - drawingBufferHeight, - distance, - pixelRatio, - result - ); - }; - - /** - * Returns a duplicate of a PerspectiveFrustum instance. - * - * @param {PerspectiveFrustum} [result] The object onto which to store the result. - * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided. - */ - PerspectiveFrustum.prototype.clone = function (result) { - if (!defaultValue.defined(result)) { - result = new PerspectiveFrustum(); - } - - result.aspectRatio = this.aspectRatio; - result.fov = this.fov; - result.near = this.near; - result.far = this.far; - - // force update of clone to compute matrices - result._aspectRatio = undefined; - result._fov = undefined; - result._near = undefined; - result._far = undefined; - - this._offCenterFrustum.clone(result._offCenterFrustum); - - return result; - }; - - /** - * Compares the provided PerspectiveFrustum componentwise and returns - * true if they are equal, false otherwise. - * - * @param {PerspectiveFrustum} [other] The right hand side PerspectiveFrustum. - * @returns {Boolean} true if they are equal, false otherwise. - */ - PerspectiveFrustum.prototype.equals = function (other) { - if (!defaultValue.defined(other) || !(other instanceof PerspectiveFrustum)) { - return false; - } - - update(this); - update(other); - - return ( - this.fov === other.fov && - this.aspectRatio === other.aspectRatio && - this._offCenterFrustum.equals(other._offCenterFrustum) - ); - }; - - /** - * Compares the provided PerspectiveFrustum componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {PerspectiveFrustum} other The right hand side PerspectiveFrustum. - * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if this and other are within the provided epsilon, false otherwise. - */ - PerspectiveFrustum.prototype.equalsEpsilon = function ( - other, - relativeEpsilon, - absoluteEpsilon - ) { - if (!defaultValue.defined(other) || !(other instanceof PerspectiveFrustum)) { - return false; - } - - update(this); - update(other); - - return ( - Math$1.CesiumMath.equalsEpsilon( - this.fov, - other.fov, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - this.aspectRatio, - other.aspectRatio, - relativeEpsilon, - absoluteEpsilon - ) && - this._offCenterFrustum.equalsEpsilon( - other._offCenterFrustum, - relativeEpsilon, - absoluteEpsilon - ) - ); - }; - - const PERSPECTIVE = 0; - const ORTHOGRAPHIC = 1; - - /** - * Describes a frustum at the given the origin and orientation. - * - * @alias FrustumGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum. - * @param {Cartesian3} options.origin The origin of the frustum. - * @param {Quaternion} options.orientation The orientation of the frustum. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - */ - function FrustumGeometry(options) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("options", options); - Check.Check.typeOf.object("options.frustum", options.frustum); - Check.Check.typeOf.object("options.origin", options.origin); - Check.Check.typeOf.object("options.orientation", options.orientation); - //>>includeEnd('debug'); - - const frustum = options.frustum; - const orientation = options.orientation; - const origin = options.origin; - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - - // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by - // creating multiple FrustumGeometrys. This way the near plane of one frustum doesn't overlap - // the far plane of another. - const drawNearPlane = defaultValue.defaultValue(options._drawNearPlane, true); - - let frustumType; - let frustumPackedLength; - if (frustum instanceof PerspectiveFrustum) { - frustumType = PERSPECTIVE; - frustumPackedLength = PerspectiveFrustum.packedLength; - } else if (frustum instanceof OrthographicFrustum) { - frustumType = ORTHOGRAPHIC; - frustumPackedLength = OrthographicFrustum.packedLength; - } - - this._frustumType = frustumType; - this._frustum = frustum.clone(); - this._origin = Matrix3.Cartesian3.clone(origin); - this._orientation = Transforms.Quaternion.clone(orientation); - this._drawNearPlane = drawNearPlane; - this._vertexFormat = vertexFormat; - this._workerName = "createFrustumGeometry"; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - 2 + - frustumPackedLength + - Matrix3.Cartesian3.packedLength + - Transforms.Quaternion.packedLength + - VertexFormat.VertexFormat.packedLength; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {FrustumGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - FrustumGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const frustumType = value._frustumType; - const frustum = value._frustum; - - array[startingIndex++] = frustumType; - - if (frustumType === PERSPECTIVE) { - PerspectiveFrustum.pack(frustum, array, startingIndex); - startingIndex += PerspectiveFrustum.packedLength; - } else { - OrthographicFrustum.pack(frustum, array, startingIndex); - startingIndex += OrthographicFrustum.packedLength; - } - - Matrix3.Cartesian3.pack(value._origin, array, startingIndex); - startingIndex += Matrix3.Cartesian3.packedLength; - Transforms.Quaternion.pack(value._orientation, array, startingIndex); - startingIndex += Transforms.Quaternion.packedLength; - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0; - - return array; - }; - - const scratchPackPerspective = new PerspectiveFrustum(); - const scratchPackOrthographic = new OrthographicFrustum(); - const scratchPackQuaternion = new Transforms.Quaternion(); - const scratchPackorigin = new Matrix3.Cartesian3(); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {FrustumGeometry} [result] The object into which to store the result. - */ - FrustumGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const frustumType = array[startingIndex++]; - - let frustum; - if (frustumType === PERSPECTIVE) { - frustum = PerspectiveFrustum.unpack( - array, - startingIndex, - scratchPackPerspective - ); - startingIndex += PerspectiveFrustum.packedLength; - } else { - frustum = OrthographicFrustum.unpack( - array, - startingIndex, - scratchPackOrthographic - ); - startingIndex += OrthographicFrustum.packedLength; - } - - const origin = Matrix3.Cartesian3.unpack(array, startingIndex, scratchPackorigin); - startingIndex += Matrix3.Cartesian3.packedLength; - const orientation = Transforms.Quaternion.unpack( - array, - startingIndex, - scratchPackQuaternion - ); - startingIndex += Transforms.Quaternion.packedLength; - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - const drawNearPlane = array[startingIndex] === 1.0; - - if (!defaultValue.defined(result)) { - return new FrustumGeometry({ - frustum: frustum, - origin: origin, - orientation: orientation, - vertexFormat: vertexFormat, - _drawNearPlane: drawNearPlane, - }); - } - - const frustumResult = - frustumType === result._frustumType ? result._frustum : undefined; - result._frustum = frustum.clone(frustumResult); - - result._frustumType = frustumType; - result._origin = Matrix3.Cartesian3.clone(origin, result._origin); - result._orientation = Transforms.Quaternion.clone(orientation, result._orientation); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._drawNearPlane = drawNearPlane; - - return result; - }; - - function getAttributes( - offset, - normals, - tangents, - bitangents, - st, - normal, - tangent, - bitangent - ) { - const stOffset = (offset / 3) * 2; - - for (let i = 0; i < 4; ++i) { - if (defaultValue.defined(normals)) { - normals[offset] = normal.x; - normals[offset + 1] = normal.y; - normals[offset + 2] = normal.z; - } - if (defaultValue.defined(tangents)) { - tangents[offset] = tangent.x; - tangents[offset + 1] = tangent.y; - tangents[offset + 2] = tangent.z; - } - if (defaultValue.defined(bitangents)) { - bitangents[offset] = bitangent.x; - bitangents[offset + 1] = bitangent.y; - bitangents[offset + 2] = bitangent.z; - } - offset += 3; - } - - st[stOffset] = 0.0; - st[stOffset + 1] = 0.0; - st[stOffset + 2] = 1.0; - st[stOffset + 3] = 0.0; - st[stOffset + 4] = 1.0; - st[stOffset + 5] = 1.0; - st[stOffset + 6] = 0.0; - st[stOffset + 7] = 1.0; - } - - const scratchRotationMatrix = new Matrix3.Matrix3(); - const scratchViewMatrix = new Matrix2.Matrix4(); - const scratchInverseMatrix = new Matrix2.Matrix4(); - - const scratchXDirection = new Matrix3.Cartesian3(); - const scratchYDirection = new Matrix3.Cartesian3(); - const scratchZDirection = new Matrix3.Cartesian3(); - const scratchNegativeX = new Matrix3.Cartesian3(); - const scratchNegativeY = new Matrix3.Cartesian3(); - const scratchNegativeZ = new Matrix3.Cartesian3(); - - const frustumSplits = new Array(3); - - const frustumCornersNDC = new Array(4); - frustumCornersNDC[0] = new Matrix2.Cartesian4(-1.0, -1.0, 1.0, 1.0); - frustumCornersNDC[1] = new Matrix2.Cartesian4(1.0, -1.0, 1.0, 1.0); - frustumCornersNDC[2] = new Matrix2.Cartesian4(1.0, 1.0, 1.0, 1.0); - frustumCornersNDC[3] = new Matrix2.Cartesian4(-1.0, 1.0, 1.0, 1.0); - - const scratchFrustumCorners = new Array(4); - for (let i = 0; i < 4; ++i) { - scratchFrustumCorners[i] = new Matrix2.Cartesian4(); - } - - FrustumGeometry._computeNearFarPlanes = function ( - origin, - orientation, - frustumType, - frustum, - positions, - xDirection, - yDirection, - zDirection - ) { - const rotationMatrix = Matrix3.Matrix3.fromQuaternion( - orientation, - scratchRotationMatrix - ); - let x = defaultValue.defaultValue(xDirection, scratchXDirection); - let y = defaultValue.defaultValue(yDirection, scratchYDirection); - let z = defaultValue.defaultValue(zDirection, scratchZDirection); - - x = Matrix3.Matrix3.getColumn(rotationMatrix, 0, x); - y = Matrix3.Matrix3.getColumn(rotationMatrix, 1, y); - z = Matrix3.Matrix3.getColumn(rotationMatrix, 2, z); - - Matrix3.Cartesian3.normalize(x, x); - Matrix3.Cartesian3.normalize(y, y); - Matrix3.Cartesian3.normalize(z, z); - - Matrix3.Cartesian3.negate(x, x); - - const view = Matrix2.Matrix4.computeView(origin, z, y, x, scratchViewMatrix); - - let inverseView; - let inverseViewProjection; - if (frustumType === PERSPECTIVE) { - const projection = frustum.projectionMatrix; - const viewProjection = Matrix2.Matrix4.multiply( - projection, - view, - scratchInverseMatrix - ); - inverseViewProjection = Matrix2.Matrix4.inverse( - viewProjection, - scratchInverseMatrix - ); - } else { - inverseView = Matrix2.Matrix4.inverseTransformation(view, scratchInverseMatrix); - } - - if (defaultValue.defined(inverseViewProjection)) { - frustumSplits[0] = frustum.near; - frustumSplits[1] = frustum.far; - } else { - frustumSplits[0] = 0.0; - frustumSplits[1] = frustum.near; - frustumSplits[2] = frustum.far; - } - - for (let i = 0; i < 2; ++i) { - for (let j = 0; j < 4; ++j) { - let corner = Matrix2.Cartesian4.clone( - frustumCornersNDC[j], - scratchFrustumCorners[j] - ); - - if (!defaultValue.defined(inverseViewProjection)) { - if (defaultValue.defined(frustum._offCenterFrustum)) { - frustum = frustum._offCenterFrustum; - } - - const near = frustumSplits[i]; - const far = frustumSplits[i + 1]; - - corner.x = - (corner.x * (frustum.right - frustum.left) + - frustum.left + - frustum.right) * - 0.5; - corner.y = - (corner.y * (frustum.top - frustum.bottom) + - frustum.bottom + - frustum.top) * - 0.5; - corner.z = (corner.z * (near - far) - near - far) * 0.5; - corner.w = 1.0; - - Matrix2.Matrix4.multiplyByVector(inverseView, corner, corner); - } else { - corner = Matrix2.Matrix4.multiplyByVector( - inverseViewProjection, - corner, - corner - ); - - // Reverse perspective divide - const w = 1.0 / corner.w; - Matrix3.Cartesian3.multiplyByScalar(corner, w, corner); - - Matrix3.Cartesian3.subtract(corner, origin, corner); - Matrix3.Cartesian3.normalize(corner, corner); - - const fac = Matrix3.Cartesian3.dot(z, corner); - Matrix3.Cartesian3.multiplyByScalar(corner, frustumSplits[i] / fac, corner); - Matrix3.Cartesian3.add(corner, origin, corner); - } - - positions[12 * i + j * 3] = corner.x; - positions[12 * i + j * 3 + 1] = corner.y; - positions[12 * i + j * 3 + 2] = corner.z; - } - } - }; - - /** - * Computes the geometric representation of a frustum, including its vertices, indices, and a bounding sphere. - * - * @param {FrustumGeometry} frustumGeometry A description of the frustum. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - FrustumGeometry.createGeometry = function (frustumGeometry) { - const frustumType = frustumGeometry._frustumType; - const frustum = frustumGeometry._frustum; - const origin = frustumGeometry._origin; - const orientation = frustumGeometry._orientation; - const drawNearPlane = frustumGeometry._drawNearPlane; - const vertexFormat = frustumGeometry._vertexFormat; - - const numberOfPlanes = drawNearPlane ? 6 : 5; - let positions = new Float64Array(3 * 4 * 6); - FrustumGeometry._computeNearFarPlanes( - origin, - orientation, - frustumType, - frustum, - positions - ); - - // -x plane - let offset = 3 * 4 * 2; - positions[offset] = positions[3 * 4]; - positions[offset + 1] = positions[3 * 4 + 1]; - positions[offset + 2] = positions[3 * 4 + 2]; - positions[offset + 3] = positions[0]; - positions[offset + 4] = positions[1]; - positions[offset + 5] = positions[2]; - positions[offset + 6] = positions[3 * 3]; - positions[offset + 7] = positions[3 * 3 + 1]; - positions[offset + 8] = positions[3 * 3 + 2]; - positions[offset + 9] = positions[3 * 7]; - positions[offset + 10] = positions[3 * 7 + 1]; - positions[offset + 11] = positions[3 * 7 + 2]; - - // -y plane - offset += 3 * 4; - positions[offset] = positions[3 * 5]; - positions[offset + 1] = positions[3 * 5 + 1]; - positions[offset + 2] = positions[3 * 5 + 2]; - positions[offset + 3] = positions[3]; - positions[offset + 4] = positions[3 + 1]; - positions[offset + 5] = positions[3 + 2]; - positions[offset + 6] = positions[0]; - positions[offset + 7] = positions[1]; - positions[offset + 8] = positions[2]; - positions[offset + 9] = positions[3 * 4]; - positions[offset + 10] = positions[3 * 4 + 1]; - positions[offset + 11] = positions[3 * 4 + 2]; - - // +x plane - offset += 3 * 4; - positions[offset] = positions[3]; - positions[offset + 1] = positions[3 + 1]; - positions[offset + 2] = positions[3 + 2]; - positions[offset + 3] = positions[3 * 5]; - positions[offset + 4] = positions[3 * 5 + 1]; - positions[offset + 5] = positions[3 * 5 + 2]; - positions[offset + 6] = positions[3 * 6]; - positions[offset + 7] = positions[3 * 6 + 1]; - positions[offset + 8] = positions[3 * 6 + 2]; - positions[offset + 9] = positions[3 * 2]; - positions[offset + 10] = positions[3 * 2 + 1]; - positions[offset + 11] = positions[3 * 2 + 2]; - - // +y plane - offset += 3 * 4; - positions[offset] = positions[3 * 2]; - positions[offset + 1] = positions[3 * 2 + 1]; - positions[offset + 2] = positions[3 * 2 + 2]; - positions[offset + 3] = positions[3 * 6]; - positions[offset + 4] = positions[3 * 6 + 1]; - positions[offset + 5] = positions[3 * 6 + 2]; - positions[offset + 6] = positions[3 * 7]; - positions[offset + 7] = positions[3 * 7 + 1]; - positions[offset + 8] = positions[3 * 7 + 2]; - positions[offset + 9] = positions[3 * 3]; - positions[offset + 10] = positions[3 * 3 + 1]; - positions[offset + 11] = positions[3 * 3 + 2]; - - if (!drawNearPlane) { - positions = positions.subarray(3 * 4); - } - - const attributes = new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }), - }); - - if ( - defaultValue.defined(vertexFormat.normal) || - defaultValue.defined(vertexFormat.tangent) || - defaultValue.defined(vertexFormat.bitangent) || - defaultValue.defined(vertexFormat.st) - ) { - const normals = defaultValue.defined(vertexFormat.normal) - ? new Float32Array(3 * 4 * numberOfPlanes) - : undefined; - const tangents = defaultValue.defined(vertexFormat.tangent) - ? new Float32Array(3 * 4 * numberOfPlanes) - : undefined; - const bitangents = defaultValue.defined(vertexFormat.bitangent) - ? new Float32Array(3 * 4 * numberOfPlanes) - : undefined; - const st = defaultValue.defined(vertexFormat.st) - ? new Float32Array(2 * 4 * numberOfPlanes) - : undefined; - - const x = scratchXDirection; - const y = scratchYDirection; - const z = scratchZDirection; - - const negativeX = Matrix3.Cartesian3.negate(x, scratchNegativeX); - const negativeY = Matrix3.Cartesian3.negate(y, scratchNegativeY); - const negativeZ = Matrix3.Cartesian3.negate(z, scratchNegativeZ); - - offset = 0; - if (drawNearPlane) { - getAttributes(offset, normals, tangents, bitangents, st, negativeZ, x, y); // near - offset += 3 * 4; - } - getAttributes(offset, normals, tangents, bitangents, st, z, negativeX, y); // far - offset += 3 * 4; - getAttributes( - offset, - normals, - tangents, - bitangents, - st, - negativeX, - negativeZ, - y - ); // -x - offset += 3 * 4; - getAttributes( - offset, - normals, - tangents, - bitangents, - st, - negativeY, - negativeZ, - negativeX - ); // -y - offset += 3 * 4; - getAttributes(offset, normals, tangents, bitangents, st, x, z, y); // +x - offset += 3 * 4; - getAttributes(offset, normals, tangents, bitangents, st, y, z, negativeX); // +y - - if (defaultValue.defined(normals)) { - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - if (defaultValue.defined(tangents)) { - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - if (defaultValue.defined(bitangents)) { - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - if (defaultValue.defined(st)) { - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: st, - }); - } - } - - const indices = new Uint16Array(6 * numberOfPlanes); - for (let i = 0; i < numberOfPlanes; ++i) { - const indexOffset = i * 6; - const index = i * 4; - - indices[indexOffset] = index; - indices[indexOffset + 1] = index + 1; - indices[indexOffset + 2] = index + 2; - indices[indexOffset + 3] = index; - indices[indexOffset + 4] = index + 2; - indices[indexOffset + 5] = index + 3; - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: Transforms.BoundingSphere.fromVertices(positions), - }); - }; - - exports.FrustumGeometry = FrustumGeometry; - exports.OrthographicFrustum = OrthographicFrustum; - exports.PerspectiveFrustum = PerspectiveFrustum; - -})); -//# sourceMappingURL=FrustumGeometry-f3f058a2.js.map diff --git a/debug/cesium/Workers/FrustumGeometry-f3f058a2.js.map b/debug/cesium/Workers/FrustumGeometry-f3f058a2.js.map deleted file mode 100644 index 5e791ac..0000000 --- a/debug/cesium/Workers/FrustumGeometry-f3f058a2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"FrustumGeometry-f3f058a2.js","sources":["../../../Source/Core/CullingVolume.js","../../../Source/Core/OrthographicOffCenterFrustum.js","../../../Source/Core/OrthographicFrustum.js","../../../Source/Core/PerspectiveOffCenterFrustum.js","../../../Source/Core/PerspectiveFrustum.js","../../../Source/Core/FrustumGeometry.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Intersect from \"./Intersect.js\";\r\nimport Plane from \"./Plane.js\";\r\n\r\n/**\r\n * The culling volume defined by planes.\r\n *\r\n * @alias CullingVolume\r\n * @constructor\r\n *\r\n * @param {Cartesian4[]} [planes] An array of clipping planes.\r\n */\r\nfunction CullingVolume(planes) {\r\n /**\r\n * Each plane is represented by a Cartesian4 object, where the x, y, and z components\r\n * define the unit vector normal to the plane, and the w component is the distance of the\r\n * plane from the origin.\r\n * @type {Cartesian4[]}\r\n * @default []\r\n */\r\n this.planes = defaultValue(planes, []);\r\n}\r\n\r\nconst faces = [new Cartesian3(), new Cartesian3(), new Cartesian3()];\r\nCartesian3.clone(Cartesian3.UNIT_X, faces[0]);\r\nCartesian3.clone(Cartesian3.UNIT_Y, faces[1]);\r\nCartesian3.clone(Cartesian3.UNIT_Z, faces[2]);\r\n\r\nconst scratchPlaneCenter = new Cartesian3();\r\nconst scratchPlaneNormal = new Cartesian3();\r\nconst scratchPlane = new Plane(new Cartesian3(1.0, 0.0, 0.0), 0.0);\r\n\r\n/**\r\n * Constructs a culling volume from a bounding sphere. Creates six planes that create a box containing the sphere.\r\n * The planes are aligned to the x, y, and z axes in world coordinates.\r\n *\r\n * @param {BoundingSphere} boundingSphere The bounding sphere used to create the culling volume.\r\n * @param {CullingVolume} [result] The object onto which to store the result.\r\n * @returns {CullingVolume} The culling volume created from the bounding sphere.\r\n */\r\nCullingVolume.fromBoundingSphere = function (boundingSphere, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(boundingSphere)) {\r\n throw new DeveloperError(\"boundingSphere is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new CullingVolume();\r\n }\r\n\r\n const length = faces.length;\r\n const planes = result.planes;\r\n planes.length = 2 * length;\r\n\r\n const center = boundingSphere.center;\r\n const radius = boundingSphere.radius;\r\n\r\n let planeIndex = 0;\r\n\r\n for (let i = 0; i < length; ++i) {\r\n const faceNormal = faces[i];\r\n\r\n let plane0 = planes[planeIndex];\r\n let plane1 = planes[planeIndex + 1];\r\n\r\n if (!defined(plane0)) {\r\n plane0 = planes[planeIndex] = new Cartesian4();\r\n }\r\n if (!defined(plane1)) {\r\n plane1 = planes[planeIndex + 1] = new Cartesian4();\r\n }\r\n\r\n Cartesian3.multiplyByScalar(faceNormal, -radius, scratchPlaneCenter);\r\n Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter);\r\n\r\n plane0.x = faceNormal.x;\r\n plane0.y = faceNormal.y;\r\n plane0.z = faceNormal.z;\r\n plane0.w = -Cartesian3.dot(faceNormal, scratchPlaneCenter);\r\n\r\n Cartesian3.multiplyByScalar(faceNormal, radius, scratchPlaneCenter);\r\n Cartesian3.add(center, scratchPlaneCenter, scratchPlaneCenter);\r\n\r\n plane1.x = -faceNormal.x;\r\n plane1.y = -faceNormal.y;\r\n plane1.z = -faceNormal.z;\r\n plane1.w = -Cartesian3.dot(\r\n Cartesian3.negate(faceNormal, scratchPlaneNormal),\r\n scratchPlaneCenter\r\n );\r\n\r\n planeIndex += 2;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Determines whether a bounding volume intersects the culling volume.\r\n *\r\n * @param {Object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested.\r\n * @returns {Intersect} Intersect.OUTSIDE, Intersect.INTERSECTING, or Intersect.INSIDE.\r\n */\r\nCullingVolume.prototype.computeVisibility = function (boundingVolume) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(boundingVolume)) {\r\n throw new DeveloperError(\"boundingVolume is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const planes = this.planes;\r\n let intersecting = false;\r\n for (let k = 0, len = planes.length; k < len; ++k) {\r\n const result = boundingVolume.intersectPlane(\r\n Plane.fromCartesian4(planes[k], scratchPlane)\r\n );\r\n if (result === Intersect.OUTSIDE) {\r\n return Intersect.OUTSIDE;\r\n } else if (result === Intersect.INTERSECTING) {\r\n intersecting = true;\r\n }\r\n }\r\n\r\n return intersecting ? Intersect.INTERSECTING : Intersect.INSIDE;\r\n};\r\n\r\n/**\r\n * Determines whether a bounding volume intersects the culling volume.\r\n *\r\n * @param {Object} boundingVolume The bounding volume whose intersection with the culling volume is to be tested.\r\n * @param {Number} parentPlaneMask A bit mask from the boundingVolume's parent's check against the same culling\r\n * volume, such that if (planeMask & (1 << planeIndex) === 0), for k < 31, then\r\n * the parent (and therefore this) volume is completely inside plane[planeIndex]\r\n * and that plane check can be skipped.\r\n * @returns {Number} A plane mask as described above (which can be applied to this boundingVolume's children).\r\n *\r\n * @private\r\n */\r\nCullingVolume.prototype.computeVisibilityWithPlaneMask = function (\r\n boundingVolume,\r\n parentPlaneMask\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(boundingVolume)) {\r\n throw new DeveloperError(\"boundingVolume is required.\");\r\n }\r\n if (!defined(parentPlaneMask)) {\r\n throw new DeveloperError(\"parentPlaneMask is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (\r\n parentPlaneMask === CullingVolume.MASK_OUTSIDE ||\r\n parentPlaneMask === CullingVolume.MASK_INSIDE\r\n ) {\r\n // parent is completely outside or completely inside, so this child is as well.\r\n return parentPlaneMask;\r\n }\r\n\r\n // Start with MASK_INSIDE (all zeros) so that after the loop, the return value can be compared with MASK_INSIDE.\r\n // (Because if there are fewer than 31 planes, the upper bits wont be changed.)\r\n let mask = CullingVolume.MASK_INSIDE;\r\n\r\n const planes = this.planes;\r\n for (let k = 0, len = planes.length; k < len; ++k) {\r\n // For k greater than 31 (since 31 is the maximum number of INSIDE/INTERSECTING bits we can store), skip the optimization.\r\n const flag = k < 31 ? 1 << k : 0;\r\n if (k < 31 && (parentPlaneMask & flag) === 0) {\r\n // boundingVolume is known to be INSIDE this plane.\r\n continue;\r\n }\r\n\r\n const result = boundingVolume.intersectPlane(\r\n Plane.fromCartesian4(planes[k], scratchPlane)\r\n );\r\n if (result === Intersect.OUTSIDE) {\r\n return CullingVolume.MASK_OUTSIDE;\r\n } else if (result === Intersect.INTERSECTING) {\r\n mask |= flag;\r\n }\r\n }\r\n\r\n return mask;\r\n};\r\n\r\n/**\r\n * For plane masks (as used in {@link CullingVolume#computeVisibilityWithPlaneMask}), this special value\r\n * represents the case where the object bounding volume is entirely outside the culling volume.\r\n *\r\n * @type {Number}\r\n * @private\r\n */\r\nCullingVolume.MASK_OUTSIDE = 0xffffffff;\r\n\r\n/**\r\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\r\n * represents the case where the object bounding volume is entirely inside the culling volume.\r\n *\r\n * @type {Number}\r\n * @private\r\n */\r\nCullingVolume.MASK_INSIDE = 0x00000000;\r\n\r\n/**\r\n * For plane masks (as used in {@link CullingVolume.prototype.computeVisibilityWithPlaneMask}), this value\r\n * represents the case where the object bounding volume (may) intersect all planes of the culling volume.\r\n *\r\n * @type {Number}\r\n * @private\r\n */\r\nCullingVolume.MASK_INDETERMINATE = 0x7fffffff;\r\nexport default CullingVolume;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport CullingVolume from \"./CullingVolume.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\n\r\n/**\r\n * The viewing frustum is defined by 6 planes.\r\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\r\n * define the unit vector normal to the plane, and the w component is the distance of the\r\n * plane from the origin/camera position.\r\n *\r\n * @alias OrthographicOffCenterFrustum\r\n * @constructor\r\n *\r\n * @param {Object} [options] An object with the following properties:\r\n * @param {Number} [options.left] The left clipping plane distance.\r\n * @param {Number} [options.right] The right clipping plane distance.\r\n * @param {Number} [options.top] The top clipping plane distance.\r\n * @param {Number} [options.bottom] The bottom clipping plane distance.\r\n * @param {Number} [options.near=1.0] The near clipping plane distance.\r\n * @param {Number} [options.far=500000000.0] The far clipping plane distance.\r\n *\r\n * @example\r\n * const maxRadii = ellipsoid.maximumRadius;\r\n *\r\n * const frustum = new Cesium.OrthographicOffCenterFrustum();\r\n * frustum.right = maxRadii * Cesium.Math.PI;\r\n * frustum.left = -c.frustum.right;\r\n * frustum.top = c.frustum.right * (canvas.clientHeight / canvas.clientWidth);\r\n * frustum.bottom = -c.frustum.top;\r\n * frustum.near = 0.01 * maxRadii;\r\n * frustum.far = 50.0 * maxRadii;\r\n */\r\nfunction OrthographicOffCenterFrustum(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n /**\r\n * The left clipping plane.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.left = options.left;\r\n this._left = undefined;\r\n\r\n /**\r\n * The right clipping plane.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.right = options.right;\r\n this._right = undefined;\r\n\r\n /**\r\n * The top clipping plane.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.top = options.top;\r\n this._top = undefined;\r\n\r\n /**\r\n * The bottom clipping plane.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.bottom = options.bottom;\r\n this._bottom = undefined;\r\n\r\n /**\r\n * The distance of the near plane.\r\n * @type {Number}\r\n * @default 1.0\r\n */\r\n this.near = defaultValue(options.near, 1.0);\r\n this._near = this.near;\r\n\r\n /**\r\n * The distance of the far plane.\r\n * @type {Number}\r\n * @default 500000000.0;\r\n */\r\n this.far = defaultValue(options.far, 500000000.0);\r\n this._far = this.far;\r\n\r\n this._cullingVolume = new CullingVolume();\r\n this._orthographicMatrix = new Matrix4();\r\n}\r\n\r\nfunction update(frustum) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n !defined(frustum.right) ||\r\n !defined(frustum.left) ||\r\n !defined(frustum.top) ||\r\n !defined(frustum.bottom) ||\r\n !defined(frustum.near) ||\r\n !defined(frustum.far)\r\n ) {\r\n throw new DeveloperError(\r\n \"right, left, top, bottom, near, or far parameters are not set.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (\r\n frustum.top !== frustum._top ||\r\n frustum.bottom !== frustum._bottom ||\r\n frustum.left !== frustum._left ||\r\n frustum.right !== frustum._right ||\r\n frustum.near !== frustum._near ||\r\n frustum.far !== frustum._far\r\n ) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (frustum.left > frustum.right) {\r\n throw new DeveloperError(\"right must be greater than left.\");\r\n }\r\n if (frustum.bottom > frustum.top) {\r\n throw new DeveloperError(\"top must be greater than bottom.\");\r\n }\r\n if (frustum.near <= 0 || frustum.near > frustum.far) {\r\n throw new DeveloperError(\r\n \"near must be greater than zero and less than far.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n frustum._left = frustum.left;\r\n frustum._right = frustum.right;\r\n frustum._top = frustum.top;\r\n frustum._bottom = frustum.bottom;\r\n frustum._near = frustum.near;\r\n frustum._far = frustum.far;\r\n frustum._orthographicMatrix = Matrix4.computeOrthographicOffCenter(\r\n frustum.left,\r\n frustum.right,\r\n frustum.bottom,\r\n frustum.top,\r\n frustum.near,\r\n frustum.far,\r\n frustum._orthographicMatrix\r\n );\r\n }\r\n}\r\n\r\nObject.defineProperties(OrthographicOffCenterFrustum.prototype, {\r\n /**\r\n * Gets the orthographic projection matrix computed from the view frustum.\r\n * @memberof OrthographicOffCenterFrustum.prototype\r\n * @type {Matrix4}\r\n * @readonly\r\n */\r\n projectionMatrix: {\r\n get: function () {\r\n update(this);\r\n return this._orthographicMatrix;\r\n },\r\n },\r\n});\r\n\r\nconst getPlanesRight = new Cartesian3();\r\nconst getPlanesNearCenter = new Cartesian3();\r\nconst getPlanesPoint = new Cartesian3();\r\nconst negateScratch = new Cartesian3();\r\n\r\n/**\r\n * Creates a culling volume for this frustum.\r\n *\r\n * @param {Cartesian3} position The eye position.\r\n * @param {Cartesian3} direction The view direction.\r\n * @param {Cartesian3} up The up direction.\r\n * @returns {CullingVolume} A culling volume at the given position and orientation.\r\n *\r\n * @example\r\n * // Check if a bounding volume intersects the frustum.\r\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\r\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\r\n */\r\nOrthographicOffCenterFrustum.prototype.computeCullingVolume = function (\r\n position,\r\n direction,\r\n up\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(position)) {\r\n throw new DeveloperError(\"position is required.\");\r\n }\r\n if (!defined(direction)) {\r\n throw new DeveloperError(\"direction is required.\");\r\n }\r\n if (!defined(up)) {\r\n throw new DeveloperError(\"up is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const planes = this._cullingVolume.planes;\r\n const t = this.top;\r\n const b = this.bottom;\r\n const r = this.right;\r\n const l = this.left;\r\n const n = this.near;\r\n const f = this.far;\r\n\r\n const right = Cartesian3.cross(direction, up, getPlanesRight);\r\n Cartesian3.normalize(right, right);\r\n const nearCenter = getPlanesNearCenter;\r\n Cartesian3.multiplyByScalar(direction, n, nearCenter);\r\n Cartesian3.add(position, nearCenter, nearCenter);\r\n\r\n const point = getPlanesPoint;\r\n\r\n // Left plane\r\n Cartesian3.multiplyByScalar(right, l, point);\r\n Cartesian3.add(nearCenter, point, point);\r\n\r\n let plane = planes[0];\r\n if (!defined(plane)) {\r\n plane = planes[0] = new Cartesian4();\r\n }\r\n plane.x = right.x;\r\n plane.y = right.y;\r\n plane.z = right.z;\r\n plane.w = -Cartesian3.dot(right, point);\r\n\r\n // Right plane\r\n Cartesian3.multiplyByScalar(right, r, point);\r\n Cartesian3.add(nearCenter, point, point);\r\n\r\n plane = planes[1];\r\n if (!defined(plane)) {\r\n plane = planes[1] = new Cartesian4();\r\n }\r\n plane.x = -right.x;\r\n plane.y = -right.y;\r\n plane.z = -right.z;\r\n plane.w = -Cartesian3.dot(Cartesian3.negate(right, negateScratch), point);\r\n\r\n // Bottom plane\r\n Cartesian3.multiplyByScalar(up, b, point);\r\n Cartesian3.add(nearCenter, point, point);\r\n\r\n plane = planes[2];\r\n if (!defined(plane)) {\r\n plane = planes[2] = new Cartesian4();\r\n }\r\n plane.x = up.x;\r\n plane.y = up.y;\r\n plane.z = up.z;\r\n plane.w = -Cartesian3.dot(up, point);\r\n\r\n // Top plane\r\n Cartesian3.multiplyByScalar(up, t, point);\r\n Cartesian3.add(nearCenter, point, point);\r\n\r\n plane = planes[3];\r\n if (!defined(plane)) {\r\n plane = planes[3] = new Cartesian4();\r\n }\r\n plane.x = -up.x;\r\n plane.y = -up.y;\r\n plane.z = -up.z;\r\n plane.w = -Cartesian3.dot(Cartesian3.negate(up, negateScratch), point);\r\n\r\n // Near plane\r\n plane = planes[4];\r\n if (!defined(plane)) {\r\n plane = planes[4] = new Cartesian4();\r\n }\r\n plane.x = direction.x;\r\n plane.y = direction.y;\r\n plane.z = direction.z;\r\n plane.w = -Cartesian3.dot(direction, nearCenter);\r\n\r\n // Far plane\r\n Cartesian3.multiplyByScalar(direction, f, point);\r\n Cartesian3.add(position, point, point);\r\n\r\n plane = planes[5];\r\n if (!defined(plane)) {\r\n plane = planes[5] = new Cartesian4();\r\n }\r\n plane.x = -direction.x;\r\n plane.y = -direction.y;\r\n plane.z = -direction.z;\r\n plane.w = -Cartesian3.dot(Cartesian3.negate(direction, negateScratch), point);\r\n\r\n return this._cullingVolume;\r\n};\r\n\r\n/**\r\n * Returns the pixel's width and height in meters.\r\n *\r\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\r\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\r\n * @param {Number} distance The distance to the near plane in meters.\r\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\r\n *\r\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\r\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\r\n * @exception {DeveloperError} pixelRatio must be greater than zero.\r\n *\r\n * @example\r\n * // Example 1\r\n * // Get the width and height of a pixel.\r\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2());\r\n */\r\nOrthographicOffCenterFrustum.prototype.getPixelDimensions = function (\r\n drawingBufferWidth,\r\n drawingBufferHeight,\r\n distance,\r\n pixelRatio,\r\n result\r\n) {\r\n update(this);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(drawingBufferWidth) || !defined(drawingBufferHeight)) {\r\n throw new DeveloperError(\r\n \"Both drawingBufferWidth and drawingBufferHeight are required.\"\r\n );\r\n }\r\n if (drawingBufferWidth <= 0) {\r\n throw new DeveloperError(\"drawingBufferWidth must be greater than zero.\");\r\n }\r\n if (drawingBufferHeight <= 0) {\r\n throw new DeveloperError(\"drawingBufferHeight must be greater than zero.\");\r\n }\r\n if (!defined(distance)) {\r\n throw new DeveloperError(\"distance is required.\");\r\n }\r\n if (!defined(pixelRatio)) {\r\n throw new DeveloperError(\"pixelRatio is required.\");\r\n }\r\n if (pixelRatio <= 0) {\r\n throw new DeveloperError(\"pixelRatio must be greater than zero.\");\r\n }\r\n if (!defined(result)) {\r\n throw new DeveloperError(\"A result object is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const frustumWidth = this.right - this.left;\r\n const frustumHeight = this.top - this.bottom;\r\n const pixelWidth = (pixelRatio * frustumWidth) / drawingBufferWidth;\r\n const pixelHeight = (pixelRatio * frustumHeight) / drawingBufferHeight;\r\n\r\n result.x = pixelWidth;\r\n result.y = pixelHeight;\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns a duplicate of a OrthographicOffCenterFrustum instance.\r\n *\r\n * @param {OrthographicOffCenterFrustum} [result] The object onto which to store the result.\r\n * @returns {OrthographicOffCenterFrustum} The modified result parameter or a new OrthographicOffCenterFrustum instance if one was not provided.\r\n */\r\nOrthographicOffCenterFrustum.prototype.clone = function (result) {\r\n if (!defined(result)) {\r\n result = new OrthographicOffCenterFrustum();\r\n }\r\n\r\n result.left = this.left;\r\n result.right = this.right;\r\n result.top = this.top;\r\n result.bottom = this.bottom;\r\n result.near = this.near;\r\n result.far = this.far;\r\n\r\n // force update of clone to compute matrices\r\n result._left = undefined;\r\n result._right = undefined;\r\n result._top = undefined;\r\n result._bottom = undefined;\r\n result._near = undefined;\r\n result._far = undefined;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided OrthographicOffCenterFrustum componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {OrthographicOffCenterFrustum} [other] The right hand side OrthographicOffCenterFrustum.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nOrthographicOffCenterFrustum.prototype.equals = function (other) {\r\n return (\r\n defined(other) &&\r\n other instanceof OrthographicOffCenterFrustum &&\r\n this.right === other.right &&\r\n this.left === other.left &&\r\n this.top === other.top &&\r\n this.bottom === other.bottom &&\r\n this.near === other.near &&\r\n this.far === other.far\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided OrthographicOffCenterFrustum componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {OrthographicOffCenterFrustum} other The right hand side OrthographicOffCenterFrustum.\r\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if this and other are within the provided epsilon, false otherwise.\r\n */\r\nOrthographicOffCenterFrustum.prototype.equalsEpsilon = function (\r\n other,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return (\r\n other === this ||\r\n (defined(other) &&\r\n other instanceof OrthographicOffCenterFrustum &&\r\n CesiumMath.equalsEpsilon(\r\n this.right,\r\n other.right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.left,\r\n other.left,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.top,\r\n other.top,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.bottom,\r\n other.bottom,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.near,\r\n other.near,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.far,\r\n other.far,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ))\r\n );\r\n};\r\nexport default OrthographicOffCenterFrustum;\r\n","import Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport OrthographicOffCenterFrustum from \"./OrthographicOffCenterFrustum.js\";\r\n\r\n/**\r\n * The viewing frustum is defined by 6 planes.\r\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\r\n * define the unit vector normal to the plane, and the w component is the distance of the\r\n * plane from the origin/camera position.\r\n *\r\n * @alias OrthographicFrustum\r\n * @constructor\r\n *\r\n * @param {Object} [options] An object with the following properties:\r\n * @param {Number} [options.width] The width of the frustum in meters.\r\n * @param {Number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height.\r\n * @param {Number} [options.near=1.0] The distance of the near plane.\r\n * @param {Number} [options.far=500000000.0] The distance of the far plane.\r\n *\r\n * @example\r\n * const maxRadii = ellipsoid.maximumRadius;\r\n *\r\n * const frustum = new Cesium.OrthographicFrustum();\r\n * frustum.near = 0.01 * maxRadii;\r\n * frustum.far = 50.0 * maxRadii;\r\n */\r\nfunction OrthographicFrustum(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n this._offCenterFrustum = new OrthographicOffCenterFrustum();\r\n\r\n /**\r\n * The horizontal width of the frustum in meters.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.width = options.width;\r\n this._width = undefined;\r\n\r\n /**\r\n * The aspect ratio of the frustum's width to it's height.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.aspectRatio = options.aspectRatio;\r\n this._aspectRatio = undefined;\r\n\r\n /**\r\n * The distance of the near plane.\r\n * @type {Number}\r\n * @default 1.0\r\n */\r\n this.near = defaultValue(options.near, 1.0);\r\n this._near = this.near;\r\n\r\n /**\r\n * The distance of the far plane.\r\n * @type {Number}\r\n * @default 500000000.0;\r\n */\r\n this.far = defaultValue(options.far, 500000000.0);\r\n this._far = this.far;\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nOrthographicFrustum.packedLength = 4;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {OrthographicFrustum} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nOrthographicFrustum.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.width;\r\n array[startingIndex++] = value.aspectRatio;\r\n array[startingIndex++] = value.near;\r\n array[startingIndex] = value.far;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {OrthographicFrustum} [result] The object into which to store the result.\r\n * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided.\r\n */\r\nOrthographicFrustum.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new OrthographicFrustum();\r\n }\r\n\r\n result.width = array[startingIndex++];\r\n result.aspectRatio = array[startingIndex++];\r\n result.near = array[startingIndex++];\r\n result.far = array[startingIndex];\r\n\r\n return result;\r\n};\r\n\r\nfunction update(frustum) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n !defined(frustum.width) ||\r\n !defined(frustum.aspectRatio) ||\r\n !defined(frustum.near) ||\r\n !defined(frustum.far)\r\n ) {\r\n throw new DeveloperError(\r\n \"width, aspectRatio, near, or far parameters are not set.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const f = frustum._offCenterFrustum;\r\n\r\n if (\r\n frustum.width !== frustum._width ||\r\n frustum.aspectRatio !== frustum._aspectRatio ||\r\n frustum.near !== frustum._near ||\r\n frustum.far !== frustum._far\r\n ) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (frustum.aspectRatio < 0) {\r\n throw new DeveloperError(\"aspectRatio must be positive.\");\r\n }\r\n if (frustum.near < 0 || frustum.near > frustum.far) {\r\n throw new DeveloperError(\r\n \"near must be greater than zero and less than far.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n frustum._aspectRatio = frustum.aspectRatio;\r\n frustum._width = frustum.width;\r\n frustum._near = frustum.near;\r\n frustum._far = frustum.far;\r\n\r\n const ratio = 1.0 / frustum.aspectRatio;\r\n f.right = frustum.width * 0.5;\r\n f.left = -f.right;\r\n f.top = ratio * f.right;\r\n f.bottom = -f.top;\r\n f.near = frustum.near;\r\n f.far = frustum.far;\r\n }\r\n}\r\n\r\nObject.defineProperties(OrthographicFrustum.prototype, {\r\n /**\r\n * Gets the orthographic projection matrix computed from the view frustum.\r\n * @memberof OrthographicFrustum.prototype\r\n * @type {Matrix4}\r\n * @readonly\r\n */\r\n projectionMatrix: {\r\n get: function () {\r\n update(this);\r\n return this._offCenterFrustum.projectionMatrix;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Creates a culling volume for this frustum.\r\n *\r\n * @param {Cartesian3} position The eye position.\r\n * @param {Cartesian3} direction The view direction.\r\n * @param {Cartesian3} up The up direction.\r\n * @returns {CullingVolume} A culling volume at the given position and orientation.\r\n *\r\n * @example\r\n * // Check if a bounding volume intersects the frustum.\r\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\r\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\r\n */\r\nOrthographicFrustum.prototype.computeCullingVolume = function (\r\n position,\r\n direction,\r\n up\r\n) {\r\n update(this);\r\n return this._offCenterFrustum.computeCullingVolume(position, direction, up);\r\n};\r\n\r\n/**\r\n * Returns the pixel's width and height in meters.\r\n *\r\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\r\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\r\n * @param {Number} distance The distance to the near plane in meters.\r\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\r\n *\r\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\r\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\r\n * @exception {DeveloperError} pixelRatio must be greater than zero.\r\n *\r\n * @example\r\n * // Example 1\r\n * // Get the width and height of a pixel.\r\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 0.0, scene.pixelRatio, new Cesium.Cartesian2());\r\n */\r\nOrthographicFrustum.prototype.getPixelDimensions = function (\r\n drawingBufferWidth,\r\n drawingBufferHeight,\r\n distance,\r\n pixelRatio,\r\n result\r\n) {\r\n update(this);\r\n return this._offCenterFrustum.getPixelDimensions(\r\n drawingBufferWidth,\r\n drawingBufferHeight,\r\n distance,\r\n pixelRatio,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Returns a duplicate of a OrthographicFrustum instance.\r\n *\r\n * @param {OrthographicFrustum} [result] The object onto which to store the result.\r\n * @returns {OrthographicFrustum} The modified result parameter or a new OrthographicFrustum instance if one was not provided.\r\n */\r\nOrthographicFrustum.prototype.clone = function (result) {\r\n if (!defined(result)) {\r\n result = new OrthographicFrustum();\r\n }\r\n\r\n result.aspectRatio = this.aspectRatio;\r\n result.width = this.width;\r\n result.near = this.near;\r\n result.far = this.far;\r\n\r\n // force update of clone to compute matrices\r\n result._aspectRatio = undefined;\r\n result._width = undefined;\r\n result._near = undefined;\r\n result._far = undefined;\r\n\r\n this._offCenterFrustum.clone(result._offCenterFrustum);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided OrthographicFrustum componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {OrthographicFrustum} [other] The right hand side OrthographicFrustum.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nOrthographicFrustum.prototype.equals = function (other) {\r\n if (!defined(other) || !(other instanceof OrthographicFrustum)) {\r\n return false;\r\n }\r\n\r\n update(this);\r\n update(other);\r\n\r\n return (\r\n this.width === other.width &&\r\n this.aspectRatio === other.aspectRatio &&\r\n this._offCenterFrustum.equals(other._offCenterFrustum)\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided OrthographicFrustum componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {OrthographicFrustum} other The right hand side OrthographicFrustum.\r\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if this and other are within the provided epsilon, false otherwise.\r\n */\r\nOrthographicFrustum.prototype.equalsEpsilon = function (\r\n other,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n if (!defined(other) || !(other instanceof OrthographicFrustum)) {\r\n return false;\r\n }\r\n\r\n update(this);\r\n update(other);\r\n\r\n return (\r\n CesiumMath.equalsEpsilon(\r\n this.width,\r\n other.width,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.aspectRatio,\r\n other.aspectRatio,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n this._offCenterFrustum.equalsEpsilon(\r\n other._offCenterFrustum,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n )\r\n );\r\n};\r\nexport default OrthographicFrustum;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport CullingVolume from \"./CullingVolume.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\n\r\n/**\r\n * The viewing frustum is defined by 6 planes.\r\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\r\n * define the unit vector normal to the plane, and the w component is the distance of the\r\n * plane from the origin/camera position.\r\n *\r\n * @alias PerspectiveOffCenterFrustum\r\n * @constructor\r\n *\r\n * @param {Object} [options] An object with the following properties:\r\n * @param {Number} [options.left] The left clipping plane distance.\r\n * @param {Number} [options.right] The right clipping plane distance.\r\n * @param {Number} [options.top] The top clipping plane distance.\r\n * @param {Number} [options.bottom] The bottom clipping plane distance.\r\n * @param {Number} [options.near=1.0] The near clipping plane distance.\r\n * @param {Number} [options.far=500000000.0] The far clipping plane distance.\r\n *\r\n * @example\r\n * const frustum = new Cesium.PerspectiveOffCenterFrustum({\r\n * left : -1.0,\r\n * right : 1.0,\r\n * top : 1.0,\r\n * bottom : -1.0,\r\n * near : 1.0,\r\n * far : 100.0\r\n * });\r\n *\r\n * @see PerspectiveFrustum\r\n */\r\nfunction PerspectiveOffCenterFrustum(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n /**\r\n * Defines the left clipping plane.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.left = options.left;\r\n this._left = undefined;\r\n\r\n /**\r\n * Defines the right clipping plane.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.right = options.right;\r\n this._right = undefined;\r\n\r\n /**\r\n * Defines the top clipping plane.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.top = options.top;\r\n this._top = undefined;\r\n\r\n /**\r\n * Defines the bottom clipping plane.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.bottom = options.bottom;\r\n this._bottom = undefined;\r\n\r\n /**\r\n * The distance of the near plane.\r\n * @type {Number}\r\n * @default 1.0\r\n */\r\n this.near = defaultValue(options.near, 1.0);\r\n this._near = this.near;\r\n\r\n /**\r\n * The distance of the far plane.\r\n * @type {Number}\r\n * @default 500000000.0\r\n */\r\n this.far = defaultValue(options.far, 500000000.0);\r\n this._far = this.far;\r\n\r\n this._cullingVolume = new CullingVolume();\r\n this._perspectiveMatrix = new Matrix4();\r\n this._infinitePerspective = new Matrix4();\r\n}\r\n\r\nfunction update(frustum) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n !defined(frustum.right) ||\r\n !defined(frustum.left) ||\r\n !defined(frustum.top) ||\r\n !defined(frustum.bottom) ||\r\n !defined(frustum.near) ||\r\n !defined(frustum.far)\r\n ) {\r\n throw new DeveloperError(\r\n \"right, left, top, bottom, near, or far parameters are not set.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const t = frustum.top;\r\n const b = frustum.bottom;\r\n const r = frustum.right;\r\n const l = frustum.left;\r\n const n = frustum.near;\r\n const f = frustum.far;\r\n\r\n if (\r\n t !== frustum._top ||\r\n b !== frustum._bottom ||\r\n l !== frustum._left ||\r\n r !== frustum._right ||\r\n n !== frustum._near ||\r\n f !== frustum._far\r\n ) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (frustum.near <= 0 || frustum.near > frustum.far) {\r\n throw new DeveloperError(\r\n \"near must be greater than zero and less than far.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n frustum._left = l;\r\n frustum._right = r;\r\n frustum._top = t;\r\n frustum._bottom = b;\r\n frustum._near = n;\r\n frustum._far = f;\r\n frustum._perspectiveMatrix = Matrix4.computePerspectiveOffCenter(\r\n l,\r\n r,\r\n b,\r\n t,\r\n n,\r\n f,\r\n frustum._perspectiveMatrix\r\n );\r\n frustum._infinitePerspective = Matrix4.computeInfinitePerspectiveOffCenter(\r\n l,\r\n r,\r\n b,\r\n t,\r\n n,\r\n frustum._infinitePerspective\r\n );\r\n }\r\n}\r\n\r\nObject.defineProperties(PerspectiveOffCenterFrustum.prototype, {\r\n /**\r\n * Gets the perspective projection matrix computed from the view frustum.\r\n * @memberof PerspectiveOffCenterFrustum.prototype\r\n * @type {Matrix4}\r\n * @readonly\r\n *\r\n * @see PerspectiveOffCenterFrustum#infiniteProjectionMatrix\r\n */\r\n projectionMatrix: {\r\n get: function () {\r\n update(this);\r\n return this._perspectiveMatrix;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the perspective projection matrix computed from the view frustum with an infinite far plane.\r\n * @memberof PerspectiveOffCenterFrustum.prototype\r\n * @type {Matrix4}\r\n * @readonly\r\n *\r\n * @see PerspectiveOffCenterFrustum#projectionMatrix\r\n */\r\n infiniteProjectionMatrix: {\r\n get: function () {\r\n update(this);\r\n return this._infinitePerspective;\r\n },\r\n },\r\n});\r\n\r\nconst getPlanesRight = new Cartesian3();\r\nconst getPlanesNearCenter = new Cartesian3();\r\nconst getPlanesFarCenter = new Cartesian3();\r\nconst getPlanesNormal = new Cartesian3();\r\n/**\r\n * Creates a culling volume for this frustum.\r\n *\r\n * @param {Cartesian3} position The eye position.\r\n * @param {Cartesian3} direction The view direction.\r\n * @param {Cartesian3} up The up direction.\r\n * @returns {CullingVolume} A culling volume at the given position and orientation.\r\n *\r\n * @example\r\n * // Check if a bounding volume intersects the frustum.\r\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\r\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\r\n */\r\nPerspectiveOffCenterFrustum.prototype.computeCullingVolume = function (\r\n position,\r\n direction,\r\n up\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(position)) {\r\n throw new DeveloperError(\"position is required.\");\r\n }\r\n\r\n if (!defined(direction)) {\r\n throw new DeveloperError(\"direction is required.\");\r\n }\r\n\r\n if (!defined(up)) {\r\n throw new DeveloperError(\"up is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const planes = this._cullingVolume.planes;\r\n\r\n const t = this.top;\r\n const b = this.bottom;\r\n const r = this.right;\r\n const l = this.left;\r\n const n = this.near;\r\n const f = this.far;\r\n\r\n const right = Cartesian3.cross(direction, up, getPlanesRight);\r\n\r\n const nearCenter = getPlanesNearCenter;\r\n Cartesian3.multiplyByScalar(direction, n, nearCenter);\r\n Cartesian3.add(position, nearCenter, nearCenter);\r\n\r\n const farCenter = getPlanesFarCenter;\r\n Cartesian3.multiplyByScalar(direction, f, farCenter);\r\n Cartesian3.add(position, farCenter, farCenter);\r\n\r\n const normal = getPlanesNormal;\r\n\r\n //Left plane computation\r\n Cartesian3.multiplyByScalar(right, l, normal);\r\n Cartesian3.add(nearCenter, normal, normal);\r\n Cartesian3.subtract(normal, position, normal);\r\n Cartesian3.normalize(normal, normal);\r\n Cartesian3.cross(normal, up, normal);\r\n Cartesian3.normalize(normal, normal);\r\n\r\n let plane = planes[0];\r\n if (!defined(plane)) {\r\n plane = planes[0] = new Cartesian4();\r\n }\r\n plane.x = normal.x;\r\n plane.y = normal.y;\r\n plane.z = normal.z;\r\n plane.w = -Cartesian3.dot(normal, position);\r\n\r\n //Right plane computation\r\n Cartesian3.multiplyByScalar(right, r, normal);\r\n Cartesian3.add(nearCenter, normal, normal);\r\n Cartesian3.subtract(normal, position, normal);\r\n Cartesian3.cross(up, normal, normal);\r\n Cartesian3.normalize(normal, normal);\r\n\r\n plane = planes[1];\r\n if (!defined(plane)) {\r\n plane = planes[1] = new Cartesian4();\r\n }\r\n plane.x = normal.x;\r\n plane.y = normal.y;\r\n plane.z = normal.z;\r\n plane.w = -Cartesian3.dot(normal, position);\r\n\r\n //Bottom plane computation\r\n Cartesian3.multiplyByScalar(up, b, normal);\r\n Cartesian3.add(nearCenter, normal, normal);\r\n Cartesian3.subtract(normal, position, normal);\r\n Cartesian3.cross(right, normal, normal);\r\n Cartesian3.normalize(normal, normal);\r\n\r\n plane = planes[2];\r\n if (!defined(plane)) {\r\n plane = planes[2] = new Cartesian4();\r\n }\r\n plane.x = normal.x;\r\n plane.y = normal.y;\r\n plane.z = normal.z;\r\n plane.w = -Cartesian3.dot(normal, position);\r\n\r\n //Top plane computation\r\n Cartesian3.multiplyByScalar(up, t, normal);\r\n Cartesian3.add(nearCenter, normal, normal);\r\n Cartesian3.subtract(normal, position, normal);\r\n Cartesian3.cross(normal, right, normal);\r\n Cartesian3.normalize(normal, normal);\r\n\r\n plane = planes[3];\r\n if (!defined(plane)) {\r\n plane = planes[3] = new Cartesian4();\r\n }\r\n plane.x = normal.x;\r\n plane.y = normal.y;\r\n plane.z = normal.z;\r\n plane.w = -Cartesian3.dot(normal, position);\r\n\r\n //Near plane computation\r\n plane = planes[4];\r\n if (!defined(plane)) {\r\n plane = planes[4] = new Cartesian4();\r\n }\r\n plane.x = direction.x;\r\n plane.y = direction.y;\r\n plane.z = direction.z;\r\n plane.w = -Cartesian3.dot(direction, nearCenter);\r\n\r\n //Far plane computation\r\n Cartesian3.negate(direction, normal);\r\n\r\n plane = planes[5];\r\n if (!defined(plane)) {\r\n plane = planes[5] = new Cartesian4();\r\n }\r\n plane.x = normal.x;\r\n plane.y = normal.y;\r\n plane.z = normal.z;\r\n plane.w = -Cartesian3.dot(normal, farCenter);\r\n\r\n return this._cullingVolume;\r\n};\r\n\r\n/**\r\n * Returns the pixel's width and height in meters.\r\n *\r\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\r\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\r\n * @param {Number} distance The distance to the near plane in meters.\r\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\r\n *\r\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\r\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\r\n * @exception {DeveloperError} pixelRatio must be greater than zero.\r\n *\r\n * @example\r\n * // Example 1\r\n * // Get the width and height of a pixel.\r\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());\r\n *\r\n * @example\r\n * // Example 2\r\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\r\n * // For example, get the size of a pixel of an image on a billboard.\r\n * const position = camera.position;\r\n * const direction = camera.direction;\r\n * const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive\r\n * const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector\r\n * const distance = Cesium.Cartesian3.magnitude(toCenterProj);\r\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\r\n */\r\nPerspectiveOffCenterFrustum.prototype.getPixelDimensions = function (\r\n drawingBufferWidth,\r\n drawingBufferHeight,\r\n distance,\r\n pixelRatio,\r\n result\r\n) {\r\n update(this);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(drawingBufferWidth) || !defined(drawingBufferHeight)) {\r\n throw new DeveloperError(\r\n \"Both drawingBufferWidth and drawingBufferHeight are required.\"\r\n );\r\n }\r\n if (drawingBufferWidth <= 0) {\r\n throw new DeveloperError(\"drawingBufferWidth must be greater than zero.\");\r\n }\r\n if (drawingBufferHeight <= 0) {\r\n throw new DeveloperError(\"drawingBufferHeight must be greater than zero.\");\r\n }\r\n if (!defined(distance)) {\r\n throw new DeveloperError(\"distance is required.\");\r\n }\r\n if (!defined(pixelRatio)) {\r\n throw new DeveloperError(\"pixelRatio is required\");\r\n }\r\n if (pixelRatio <= 0) {\r\n throw new DeveloperError(\"pixelRatio must be greater than zero.\");\r\n }\r\n if (!defined(result)) {\r\n throw new DeveloperError(\"A result object is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const inverseNear = 1.0 / this.near;\r\n let tanTheta = this.top * inverseNear;\r\n const pixelHeight =\r\n (2.0 * pixelRatio * distance * tanTheta) / drawingBufferHeight;\r\n tanTheta = this.right * inverseNear;\r\n const pixelWidth =\r\n (2.0 * pixelRatio * distance * tanTheta) / drawingBufferWidth;\r\n\r\n result.x = pixelWidth;\r\n result.y = pixelHeight;\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns a duplicate of a PerspectiveOffCenterFrustum instance.\r\n *\r\n * @param {PerspectiveOffCenterFrustum} [result] The object onto which to store the result.\r\n * @returns {PerspectiveOffCenterFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\r\n */\r\nPerspectiveOffCenterFrustum.prototype.clone = function (result) {\r\n if (!defined(result)) {\r\n result = new PerspectiveOffCenterFrustum();\r\n }\r\n\r\n result.right = this.right;\r\n result.left = this.left;\r\n result.top = this.top;\r\n result.bottom = this.bottom;\r\n result.near = this.near;\r\n result.far = this.far;\r\n\r\n // force update of clone to compute matrices\r\n result._left = undefined;\r\n result._right = undefined;\r\n result._top = undefined;\r\n result._bottom = undefined;\r\n result._near = undefined;\r\n result._far = undefined;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {PerspectiveOffCenterFrustum} [other] The right hand side PerspectiveOffCenterFrustum.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nPerspectiveOffCenterFrustum.prototype.equals = function (other) {\r\n return (\r\n defined(other) &&\r\n other instanceof PerspectiveOffCenterFrustum &&\r\n this.right === other.right &&\r\n this.left === other.left &&\r\n this.top === other.top &&\r\n this.bottom === other.bottom &&\r\n this.near === other.near &&\r\n this.far === other.far\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided PerspectiveOffCenterFrustum componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {PerspectiveOffCenterFrustum} other The right hand side PerspectiveOffCenterFrustum.\r\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if this and other are within the provided epsilon, false otherwise.\r\n */\r\nPerspectiveOffCenterFrustum.prototype.equalsEpsilon = function (\r\n other,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return (\r\n other === this ||\r\n (defined(other) &&\r\n other instanceof PerspectiveOffCenterFrustum &&\r\n CesiumMath.equalsEpsilon(\r\n this.right,\r\n other.right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.left,\r\n other.left,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.top,\r\n other.top,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.bottom,\r\n other.bottom,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.near,\r\n other.near,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.far,\r\n other.far,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ))\r\n );\r\n};\r\nexport default PerspectiveOffCenterFrustum;\r\n","import Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PerspectiveOffCenterFrustum from \"./PerspectiveOffCenterFrustum.js\";\r\n\r\n/**\r\n * The viewing frustum is defined by 6 planes.\r\n * Each plane is represented by a {@link Cartesian4} object, where the x, y, and z components\r\n * define the unit vector normal to the plane, and the w component is the distance of the\r\n * plane from the origin/camera position.\r\n *\r\n * @alias PerspectiveFrustum\r\n * @constructor\r\n *\r\n * @param {Object} [options] An object with the following properties:\r\n * @param {Number} [options.fov] The angle of the field of view (FOV), in radians.\r\n * @param {Number} [options.aspectRatio] The aspect ratio of the frustum's width to it's height.\r\n * @param {Number} [options.near=1.0] The distance of the near plane.\r\n * @param {Number} [options.far=500000000.0] The distance of the far plane.\r\n * @param {Number} [options.xOffset=0.0] The offset in the x direction.\r\n * @param {Number} [options.yOffset=0.0] The offset in the y direction.\r\n *\r\n * @example\r\n * const frustum = new Cesium.PerspectiveFrustum({\r\n * fov : Cesium.Math.PI_OVER_THREE,\r\n * aspectRatio : canvas.clientWidth / canvas.clientHeight\r\n * near : 1.0,\r\n * far : 1000.0\r\n * });\r\n *\r\n * @see PerspectiveOffCenterFrustum\r\n */\r\nfunction PerspectiveFrustum(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n this._offCenterFrustum = new PerspectiveOffCenterFrustum();\r\n\r\n /**\r\n * The angle of the field of view (FOV), in radians. This angle will be used\r\n * as the horizontal FOV if the width is greater than the height, otherwise\r\n * it will be the vertical FOV.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.fov = options.fov;\r\n this._fov = undefined;\r\n this._fovy = undefined;\r\n\r\n this._sseDenominator = undefined;\r\n\r\n /**\r\n * The aspect ratio of the frustum's width to it's height.\r\n * @type {Number}\r\n * @default undefined\r\n */\r\n this.aspectRatio = options.aspectRatio;\r\n this._aspectRatio = undefined;\r\n\r\n /**\r\n * The distance of the near plane.\r\n * @type {Number}\r\n * @default 1.0\r\n */\r\n this.near = defaultValue(options.near, 1.0);\r\n this._near = this.near;\r\n\r\n /**\r\n * The distance of the far plane.\r\n * @type {Number}\r\n * @default 500000000.0\r\n */\r\n this.far = defaultValue(options.far, 500000000.0);\r\n this._far = this.far;\r\n\r\n /**\r\n * Offsets the frustum in the x direction.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.xOffset = defaultValue(options.xOffset, 0.0);\r\n this._xOffset = this.xOffset;\r\n\r\n /**\r\n * Offsets the frustum in the y direction.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.yOffset = defaultValue(options.yOffset, 0.0);\r\n this._yOffset = this.yOffset;\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nPerspectiveFrustum.packedLength = 6;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PerspectiveFrustum} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nPerspectiveFrustum.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.fov;\r\n array[startingIndex++] = value.aspectRatio;\r\n array[startingIndex++] = value.near;\r\n array[startingIndex++] = value.far;\r\n array[startingIndex++] = value.xOffset;\r\n array[startingIndex] = value.yOffset;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PerspectiveFrustum} [result] The object into which to store the result.\r\n * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\r\n */\r\nPerspectiveFrustum.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new PerspectiveFrustum();\r\n }\r\n\r\n result.fov = array[startingIndex++];\r\n result.aspectRatio = array[startingIndex++];\r\n result.near = array[startingIndex++];\r\n result.far = array[startingIndex++];\r\n result.xOffset = array[startingIndex++];\r\n result.yOffset = array[startingIndex];\r\n\r\n return result;\r\n};\r\n\r\nfunction update(frustum) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n !defined(frustum.fov) ||\r\n !defined(frustum.aspectRatio) ||\r\n !defined(frustum.near) ||\r\n !defined(frustum.far)\r\n ) {\r\n throw new DeveloperError(\r\n \"fov, aspectRatio, near, or far parameters are not set.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const f = frustum._offCenterFrustum;\r\n\r\n if (\r\n frustum.fov !== frustum._fov ||\r\n frustum.aspectRatio !== frustum._aspectRatio ||\r\n frustum.near !== frustum._near ||\r\n frustum.far !== frustum._far ||\r\n frustum.xOffset !== frustum._xOffset ||\r\n frustum.yOffset !== frustum._yOffset\r\n ) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (frustum.fov < 0 || frustum.fov >= Math.PI) {\r\n throw new DeveloperError(\"fov must be in the range [0, PI).\");\r\n }\r\n\r\n if (frustum.aspectRatio < 0) {\r\n throw new DeveloperError(\"aspectRatio must be positive.\");\r\n }\r\n\r\n if (frustum.near < 0 || frustum.near > frustum.far) {\r\n throw new DeveloperError(\r\n \"near must be greater than zero and less than far.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n frustum._aspectRatio = frustum.aspectRatio;\r\n frustum._fov = frustum.fov;\r\n frustum._fovy =\r\n frustum.aspectRatio <= 1\r\n ? frustum.fov\r\n : Math.atan(Math.tan(frustum.fov * 0.5) / frustum.aspectRatio) * 2.0;\r\n frustum._near = frustum.near;\r\n frustum._far = frustum.far;\r\n frustum._sseDenominator = 2.0 * Math.tan(0.5 * frustum._fovy);\r\n frustum._xOffset = frustum.xOffset;\r\n frustum._yOffset = frustum.yOffset;\r\n\r\n f.top = frustum.near * Math.tan(0.5 * frustum._fovy);\r\n f.bottom = -f.top;\r\n f.right = frustum.aspectRatio * f.top;\r\n f.left = -f.right;\r\n f.near = frustum.near;\r\n f.far = frustum.far;\r\n\r\n f.right += frustum.xOffset;\r\n f.left += frustum.xOffset;\r\n f.top += frustum.yOffset;\r\n f.bottom += frustum.yOffset;\r\n }\r\n}\r\n\r\nObject.defineProperties(PerspectiveFrustum.prototype, {\r\n /**\r\n * Gets the perspective projection matrix computed from the view frustum.\r\n * @memberof PerspectiveFrustum.prototype\r\n * @type {Matrix4}\r\n * @readonly\r\n *\r\n * @see PerspectiveFrustum#infiniteProjectionMatrix\r\n */\r\n projectionMatrix: {\r\n get: function () {\r\n update(this);\r\n return this._offCenterFrustum.projectionMatrix;\r\n },\r\n },\r\n\r\n /**\r\n * The perspective projection matrix computed from the view frustum with an infinite far plane.\r\n * @memberof PerspectiveFrustum.prototype\r\n * @type {Matrix4}\r\n * @readonly\r\n *\r\n * @see PerspectiveFrustum#projectionMatrix\r\n */\r\n infiniteProjectionMatrix: {\r\n get: function () {\r\n update(this);\r\n return this._offCenterFrustum.infiniteProjectionMatrix;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the angle of the vertical field of view, in radians.\r\n * @memberof PerspectiveFrustum.prototype\r\n * @type {Number}\r\n * @readonly\r\n * @default undefined\r\n */\r\n fovy: {\r\n get: function () {\r\n update(this);\r\n return this._fovy;\r\n },\r\n },\r\n\r\n /**\r\n * @readonly\r\n * @private\r\n */\r\n sseDenominator: {\r\n get: function () {\r\n update(this);\r\n return this._sseDenominator;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Creates a culling volume for this frustum.\r\n *\r\n * @param {Cartesian3} position The eye position.\r\n * @param {Cartesian3} direction The view direction.\r\n * @param {Cartesian3} up The up direction.\r\n * @returns {CullingVolume} A culling volume at the given position and orientation.\r\n *\r\n * @example\r\n * // Check if a bounding volume intersects the frustum.\r\n * const cullingVolume = frustum.computeCullingVolume(cameraPosition, cameraDirection, cameraUp);\r\n * const intersect = cullingVolume.computeVisibility(boundingVolume);\r\n */\r\nPerspectiveFrustum.prototype.computeCullingVolume = function (\r\n position,\r\n direction,\r\n up\r\n) {\r\n update(this);\r\n return this._offCenterFrustum.computeCullingVolume(position, direction, up);\r\n};\r\n\r\n/**\r\n * Returns the pixel's width and height in meters.\r\n *\r\n * @param {Number} drawingBufferWidth The width of the drawing buffer.\r\n * @param {Number} drawingBufferHeight The height of the drawing buffer.\r\n * @param {Number} distance The distance to the near plane in meters.\r\n * @param {Number} pixelRatio The scaling factor from pixel space to coordinate space.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new instance of {@link Cartesian2} with the pixel's width and height in the x and y properties, respectively.\r\n *\r\n * @exception {DeveloperError} drawingBufferWidth must be greater than zero.\r\n * @exception {DeveloperError} drawingBufferHeight must be greater than zero.\r\n * @exception {DeveloperError} pixelRatio must be greater than zero.\r\n *\r\n * @example\r\n * // Example 1\r\n * // Get the width and height of a pixel.\r\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, 1.0, scene.pixelRatio, new Cesium.Cartesian2());\r\n *\r\n * @example\r\n * // Example 2\r\n * // Get the width and height of a pixel if the near plane was set to 'distance'.\r\n * // For example, get the size of a pixel of an image on a billboard.\r\n * const position = camera.position;\r\n * const direction = camera.direction;\r\n * const toCenter = Cesium.Cartesian3.subtract(primitive.boundingVolume.center, position, new Cesium.Cartesian3()); // vector from camera to a primitive\r\n * const toCenterProj = Cesium.Cartesian3.multiplyByScalar(direction, Cesium.Cartesian3.dot(direction, toCenter), new Cesium.Cartesian3()); // project vector onto camera direction vector\r\n * const distance = Cesium.Cartesian3.magnitude(toCenterProj);\r\n * const pixelSize = camera.frustum.getPixelDimensions(scene.drawingBufferWidth, scene.drawingBufferHeight, distance, scene.pixelRatio, new Cesium.Cartesian2());\r\n */\r\nPerspectiveFrustum.prototype.getPixelDimensions = function (\r\n drawingBufferWidth,\r\n drawingBufferHeight,\r\n distance,\r\n pixelRatio,\r\n result\r\n) {\r\n update(this);\r\n return this._offCenterFrustum.getPixelDimensions(\r\n drawingBufferWidth,\r\n drawingBufferHeight,\r\n distance,\r\n pixelRatio,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Returns a duplicate of a PerspectiveFrustum instance.\r\n *\r\n * @param {PerspectiveFrustum} [result] The object onto which to store the result.\r\n * @returns {PerspectiveFrustum} The modified result parameter or a new PerspectiveFrustum instance if one was not provided.\r\n */\r\nPerspectiveFrustum.prototype.clone = function (result) {\r\n if (!defined(result)) {\r\n result = new PerspectiveFrustum();\r\n }\r\n\r\n result.aspectRatio = this.aspectRatio;\r\n result.fov = this.fov;\r\n result.near = this.near;\r\n result.far = this.far;\r\n\r\n // force update of clone to compute matrices\r\n result._aspectRatio = undefined;\r\n result._fov = undefined;\r\n result._near = undefined;\r\n result._far = undefined;\r\n\r\n this._offCenterFrustum.clone(result._offCenterFrustum);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided PerspectiveFrustum componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {PerspectiveFrustum} [other] The right hand side PerspectiveFrustum.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nPerspectiveFrustum.prototype.equals = function (other) {\r\n if (!defined(other) || !(other instanceof PerspectiveFrustum)) {\r\n return false;\r\n }\r\n\r\n update(this);\r\n update(other);\r\n\r\n return (\r\n this.fov === other.fov &&\r\n this.aspectRatio === other.aspectRatio &&\r\n this._offCenterFrustum.equals(other._offCenterFrustum)\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided PerspectiveFrustum componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {PerspectiveFrustum} other The right hand side PerspectiveFrustum.\r\n * @param {Number} relativeEpsilon The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if this and other are within the provided epsilon, false otherwise.\r\n */\r\nPerspectiveFrustum.prototype.equalsEpsilon = function (\r\n other,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n if (!defined(other) || !(other instanceof PerspectiveFrustum)) {\r\n return false;\r\n }\r\n\r\n update(this);\r\n update(other);\r\n\r\n return (\r\n CesiumMath.equalsEpsilon(\r\n this.fov,\r\n other.fov,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n this.aspectRatio,\r\n other.aspectRatio,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n this._offCenterFrustum.equalsEpsilon(\r\n other._offCenterFrustum,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n )\r\n );\r\n};\r\nexport default PerspectiveFrustum;\r\n","import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport OrthographicFrustum from \"./OrthographicFrustum.js\";\r\nimport PerspectiveFrustum from \"./PerspectiveFrustum.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst PERSPECTIVE = 0;\r\nconst ORTHOGRAPHIC = 1;\r\n\r\n/**\r\n * Describes a frustum at the given the origin and orientation.\r\n *\r\n * @alias FrustumGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum.\r\n * @param {Cartesian3} options.origin The origin of the frustum.\r\n * @param {Quaternion} options.orientation The orientation of the frustum.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n */\r\nfunction FrustumGeometry(options) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"options\", options);\r\n Check.typeOf.object(\"options.frustum\", options.frustum);\r\n Check.typeOf.object(\"options.origin\", options.origin);\r\n Check.typeOf.object(\"options.orientation\", options.orientation);\r\n //>>includeEnd('debug');\r\n\r\n const frustum = options.frustum;\r\n const orientation = options.orientation;\r\n const origin = options.origin;\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n\r\n // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by\r\n // creating multiple FrustumGeometrys. This way the near plane of one frustum doesn't overlap\r\n // the far plane of another.\r\n const drawNearPlane = defaultValue(options._drawNearPlane, true);\r\n\r\n let frustumType;\r\n let frustumPackedLength;\r\n if (frustum instanceof PerspectiveFrustum) {\r\n frustumType = PERSPECTIVE;\r\n frustumPackedLength = PerspectiveFrustum.packedLength;\r\n } else if (frustum instanceof OrthographicFrustum) {\r\n frustumType = ORTHOGRAPHIC;\r\n frustumPackedLength = OrthographicFrustum.packedLength;\r\n }\r\n\r\n this._frustumType = frustumType;\r\n this._frustum = frustum.clone();\r\n this._origin = Cartesian3.clone(origin);\r\n this._orientation = Quaternion.clone(orientation);\r\n this._drawNearPlane = drawNearPlane;\r\n this._vertexFormat = vertexFormat;\r\n this._workerName = \"createFrustumGeometry\";\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n 2 +\r\n frustumPackedLength +\r\n Cartesian3.packedLength +\r\n Quaternion.packedLength +\r\n VertexFormat.packedLength;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {FrustumGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nFrustumGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const frustumType = value._frustumType;\r\n const frustum = value._frustum;\r\n\r\n array[startingIndex++] = frustumType;\r\n\r\n if (frustumType === PERSPECTIVE) {\r\n PerspectiveFrustum.pack(frustum, array, startingIndex);\r\n startingIndex += PerspectiveFrustum.packedLength;\r\n } else {\r\n OrthographicFrustum.pack(frustum, array, startingIndex);\r\n startingIndex += OrthographicFrustum.packedLength;\r\n }\r\n\r\n Cartesian3.pack(value._origin, array, startingIndex);\r\n startingIndex += Cartesian3.packedLength;\r\n Quaternion.pack(value._orientation, array, startingIndex);\r\n startingIndex += Quaternion.packedLength;\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchPackPerspective = new PerspectiveFrustum();\r\nconst scratchPackOrthographic = new OrthographicFrustum();\r\nconst scratchPackQuaternion = new Quaternion();\r\nconst scratchPackorigin = new Cartesian3();\r\nconst scratchVertexFormat = new VertexFormat();\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {FrustumGeometry} [result] The object into which to store the result.\r\n */\r\nFrustumGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const frustumType = array[startingIndex++];\r\n\r\n let frustum;\r\n if (frustumType === PERSPECTIVE) {\r\n frustum = PerspectiveFrustum.unpack(\r\n array,\r\n startingIndex,\r\n scratchPackPerspective\r\n );\r\n startingIndex += PerspectiveFrustum.packedLength;\r\n } else {\r\n frustum = OrthographicFrustum.unpack(\r\n array,\r\n startingIndex,\r\n scratchPackOrthographic\r\n );\r\n startingIndex += OrthographicFrustum.packedLength;\r\n }\r\n\r\n const origin = Cartesian3.unpack(array, startingIndex, scratchPackorigin);\r\n startingIndex += Cartesian3.packedLength;\r\n const orientation = Quaternion.unpack(\r\n array,\r\n startingIndex,\r\n scratchPackQuaternion\r\n );\r\n startingIndex += Quaternion.packedLength;\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n const drawNearPlane = array[startingIndex] === 1.0;\r\n\r\n if (!defined(result)) {\r\n return new FrustumGeometry({\r\n frustum: frustum,\r\n origin: origin,\r\n orientation: orientation,\r\n vertexFormat: vertexFormat,\r\n _drawNearPlane: drawNearPlane,\r\n });\r\n }\r\n\r\n const frustumResult =\r\n frustumType === result._frustumType ? result._frustum : undefined;\r\n result._frustum = frustum.clone(frustumResult);\r\n\r\n result._frustumType = frustumType;\r\n result._origin = Cartesian3.clone(origin, result._origin);\r\n result._orientation = Quaternion.clone(orientation, result._orientation);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._drawNearPlane = drawNearPlane;\r\n\r\n return result;\r\n};\r\n\r\nfunction getAttributes(\r\n offset,\r\n normals,\r\n tangents,\r\n bitangents,\r\n st,\r\n normal,\r\n tangent,\r\n bitangent\r\n) {\r\n const stOffset = (offset / 3) * 2;\r\n\r\n for (let i = 0; i < 4; ++i) {\r\n if (defined(normals)) {\r\n normals[offset] = normal.x;\r\n normals[offset + 1] = normal.y;\r\n normals[offset + 2] = normal.z;\r\n }\r\n if (defined(tangents)) {\r\n tangents[offset] = tangent.x;\r\n tangents[offset + 1] = tangent.y;\r\n tangents[offset + 2] = tangent.z;\r\n }\r\n if (defined(bitangents)) {\r\n bitangents[offset] = bitangent.x;\r\n bitangents[offset + 1] = bitangent.y;\r\n bitangents[offset + 2] = bitangent.z;\r\n }\r\n offset += 3;\r\n }\r\n\r\n st[stOffset] = 0.0;\r\n st[stOffset + 1] = 0.0;\r\n st[stOffset + 2] = 1.0;\r\n st[stOffset + 3] = 0.0;\r\n st[stOffset + 4] = 1.0;\r\n st[stOffset + 5] = 1.0;\r\n st[stOffset + 6] = 0.0;\r\n st[stOffset + 7] = 1.0;\r\n}\r\n\r\nconst scratchRotationMatrix = new Matrix3();\r\nconst scratchViewMatrix = new Matrix4();\r\nconst scratchInverseMatrix = new Matrix4();\r\n\r\nconst scratchXDirection = new Cartesian3();\r\nconst scratchYDirection = new Cartesian3();\r\nconst scratchZDirection = new Cartesian3();\r\nconst scratchNegativeX = new Cartesian3();\r\nconst scratchNegativeY = new Cartesian3();\r\nconst scratchNegativeZ = new Cartesian3();\r\n\r\nconst frustumSplits = new Array(3);\r\n\r\nconst frustumCornersNDC = new Array(4);\r\nfrustumCornersNDC[0] = new Cartesian4(-1.0, -1.0, 1.0, 1.0);\r\nfrustumCornersNDC[1] = new Cartesian4(1.0, -1.0, 1.0, 1.0);\r\nfrustumCornersNDC[2] = new Cartesian4(1.0, 1.0, 1.0, 1.0);\r\nfrustumCornersNDC[3] = new Cartesian4(-1.0, 1.0, 1.0, 1.0);\r\n\r\nconst scratchFrustumCorners = new Array(4);\r\nfor (let i = 0; i < 4; ++i) {\r\n scratchFrustumCorners[i] = new Cartesian4();\r\n}\r\n\r\nFrustumGeometry._computeNearFarPlanes = function (\r\n origin,\r\n orientation,\r\n frustumType,\r\n frustum,\r\n positions,\r\n xDirection,\r\n yDirection,\r\n zDirection\r\n) {\r\n const rotationMatrix = Matrix3.fromQuaternion(\r\n orientation,\r\n scratchRotationMatrix\r\n );\r\n let x = defaultValue(xDirection, scratchXDirection);\r\n let y = defaultValue(yDirection, scratchYDirection);\r\n let z = defaultValue(zDirection, scratchZDirection);\r\n\r\n x = Matrix3.getColumn(rotationMatrix, 0, x);\r\n y = Matrix3.getColumn(rotationMatrix, 1, y);\r\n z = Matrix3.getColumn(rotationMatrix, 2, z);\r\n\r\n Cartesian3.normalize(x, x);\r\n Cartesian3.normalize(y, y);\r\n Cartesian3.normalize(z, z);\r\n\r\n Cartesian3.negate(x, x);\r\n\r\n const view = Matrix4.computeView(origin, z, y, x, scratchViewMatrix);\r\n\r\n let inverseView;\r\n let inverseViewProjection;\r\n if (frustumType === PERSPECTIVE) {\r\n const projection = frustum.projectionMatrix;\r\n const viewProjection = Matrix4.multiply(\r\n projection,\r\n view,\r\n scratchInverseMatrix\r\n );\r\n inverseViewProjection = Matrix4.inverse(\r\n viewProjection,\r\n scratchInverseMatrix\r\n );\r\n } else {\r\n inverseView = Matrix4.inverseTransformation(view, scratchInverseMatrix);\r\n }\r\n\r\n if (defined(inverseViewProjection)) {\r\n frustumSplits[0] = frustum.near;\r\n frustumSplits[1] = frustum.far;\r\n } else {\r\n frustumSplits[0] = 0.0;\r\n frustumSplits[1] = frustum.near;\r\n frustumSplits[2] = frustum.far;\r\n }\r\n\r\n for (let i = 0; i < 2; ++i) {\r\n for (let j = 0; j < 4; ++j) {\r\n let corner = Cartesian4.clone(\r\n frustumCornersNDC[j],\r\n scratchFrustumCorners[j]\r\n );\r\n\r\n if (!defined(inverseViewProjection)) {\r\n if (defined(frustum._offCenterFrustum)) {\r\n frustum = frustum._offCenterFrustum;\r\n }\r\n\r\n const near = frustumSplits[i];\r\n const far = frustumSplits[i + 1];\r\n\r\n corner.x =\r\n (corner.x * (frustum.right - frustum.left) +\r\n frustum.left +\r\n frustum.right) *\r\n 0.5;\r\n corner.y =\r\n (corner.y * (frustum.top - frustum.bottom) +\r\n frustum.bottom +\r\n frustum.top) *\r\n 0.5;\r\n corner.z = (corner.z * (near - far) - near - far) * 0.5;\r\n corner.w = 1.0;\r\n\r\n Matrix4.multiplyByVector(inverseView, corner, corner);\r\n } else {\r\n corner = Matrix4.multiplyByVector(\r\n inverseViewProjection,\r\n corner,\r\n corner\r\n );\r\n\r\n // Reverse perspective divide\r\n const w = 1.0 / corner.w;\r\n Cartesian3.multiplyByScalar(corner, w, corner);\r\n\r\n Cartesian3.subtract(corner, origin, corner);\r\n Cartesian3.normalize(corner, corner);\r\n\r\n const fac = Cartesian3.dot(z, corner);\r\n Cartesian3.multiplyByScalar(corner, frustumSplits[i] / fac, corner);\r\n Cartesian3.add(corner, origin, corner);\r\n }\r\n\r\n positions[12 * i + j * 3] = corner.x;\r\n positions[12 * i + j * 3 + 1] = corner.y;\r\n positions[12 * i + j * 3 + 2] = corner.z;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a frustum, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {FrustumGeometry} frustumGeometry A description of the frustum.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nFrustumGeometry.createGeometry = function (frustumGeometry) {\r\n const frustumType = frustumGeometry._frustumType;\r\n const frustum = frustumGeometry._frustum;\r\n const origin = frustumGeometry._origin;\r\n const orientation = frustumGeometry._orientation;\r\n const drawNearPlane = frustumGeometry._drawNearPlane;\r\n const vertexFormat = frustumGeometry._vertexFormat;\r\n\r\n const numberOfPlanes = drawNearPlane ? 6 : 5;\r\n let positions = new Float64Array(3 * 4 * 6);\r\n FrustumGeometry._computeNearFarPlanes(\r\n origin,\r\n orientation,\r\n frustumType,\r\n frustum,\r\n positions\r\n );\r\n\r\n // -x plane\r\n let offset = 3 * 4 * 2;\r\n positions[offset] = positions[3 * 4];\r\n positions[offset + 1] = positions[3 * 4 + 1];\r\n positions[offset + 2] = positions[3 * 4 + 2];\r\n positions[offset + 3] = positions[0];\r\n positions[offset + 4] = positions[1];\r\n positions[offset + 5] = positions[2];\r\n positions[offset + 6] = positions[3 * 3];\r\n positions[offset + 7] = positions[3 * 3 + 1];\r\n positions[offset + 8] = positions[3 * 3 + 2];\r\n positions[offset + 9] = positions[3 * 7];\r\n positions[offset + 10] = positions[3 * 7 + 1];\r\n positions[offset + 11] = positions[3 * 7 + 2];\r\n\r\n // -y plane\r\n offset += 3 * 4;\r\n positions[offset] = positions[3 * 5];\r\n positions[offset + 1] = positions[3 * 5 + 1];\r\n positions[offset + 2] = positions[3 * 5 + 2];\r\n positions[offset + 3] = positions[3];\r\n positions[offset + 4] = positions[3 + 1];\r\n positions[offset + 5] = positions[3 + 2];\r\n positions[offset + 6] = positions[0];\r\n positions[offset + 7] = positions[1];\r\n positions[offset + 8] = positions[2];\r\n positions[offset + 9] = positions[3 * 4];\r\n positions[offset + 10] = positions[3 * 4 + 1];\r\n positions[offset + 11] = positions[3 * 4 + 2];\r\n\r\n // +x plane\r\n offset += 3 * 4;\r\n positions[offset] = positions[3];\r\n positions[offset + 1] = positions[3 + 1];\r\n positions[offset + 2] = positions[3 + 2];\r\n positions[offset + 3] = positions[3 * 5];\r\n positions[offset + 4] = positions[3 * 5 + 1];\r\n positions[offset + 5] = positions[3 * 5 + 2];\r\n positions[offset + 6] = positions[3 * 6];\r\n positions[offset + 7] = positions[3 * 6 + 1];\r\n positions[offset + 8] = positions[3 * 6 + 2];\r\n positions[offset + 9] = positions[3 * 2];\r\n positions[offset + 10] = positions[3 * 2 + 1];\r\n positions[offset + 11] = positions[3 * 2 + 2];\r\n\r\n // +y plane\r\n offset += 3 * 4;\r\n positions[offset] = positions[3 * 2];\r\n positions[offset + 1] = positions[3 * 2 + 1];\r\n positions[offset + 2] = positions[3 * 2 + 2];\r\n positions[offset + 3] = positions[3 * 6];\r\n positions[offset + 4] = positions[3 * 6 + 1];\r\n positions[offset + 5] = positions[3 * 6 + 2];\r\n positions[offset + 6] = positions[3 * 7];\r\n positions[offset + 7] = positions[3 * 7 + 1];\r\n positions[offset + 8] = positions[3 * 7 + 2];\r\n positions[offset + 9] = positions[3 * 3];\r\n positions[offset + 10] = positions[3 * 3 + 1];\r\n positions[offset + 11] = positions[3 * 3 + 2];\r\n\r\n if (!drawNearPlane) {\r\n positions = positions.subarray(3 * 4);\r\n }\r\n\r\n const attributes = new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n }),\r\n });\r\n\r\n if (\r\n defined(vertexFormat.normal) ||\r\n defined(vertexFormat.tangent) ||\r\n defined(vertexFormat.bitangent) ||\r\n defined(vertexFormat.st)\r\n ) {\r\n const normals = defined(vertexFormat.normal)\r\n ? new Float32Array(3 * 4 * numberOfPlanes)\r\n : undefined;\r\n const tangents = defined(vertexFormat.tangent)\r\n ? new Float32Array(3 * 4 * numberOfPlanes)\r\n : undefined;\r\n const bitangents = defined(vertexFormat.bitangent)\r\n ? new Float32Array(3 * 4 * numberOfPlanes)\r\n : undefined;\r\n const st = defined(vertexFormat.st)\r\n ? new Float32Array(2 * 4 * numberOfPlanes)\r\n : undefined;\r\n\r\n const x = scratchXDirection;\r\n const y = scratchYDirection;\r\n const z = scratchZDirection;\r\n\r\n const negativeX = Cartesian3.negate(x, scratchNegativeX);\r\n const negativeY = Cartesian3.negate(y, scratchNegativeY);\r\n const negativeZ = Cartesian3.negate(z, scratchNegativeZ);\r\n\r\n offset = 0;\r\n if (drawNearPlane) {\r\n getAttributes(offset, normals, tangents, bitangents, st, negativeZ, x, y); // near\r\n offset += 3 * 4;\r\n }\r\n getAttributes(offset, normals, tangents, bitangents, st, z, negativeX, y); // far\r\n offset += 3 * 4;\r\n getAttributes(\r\n offset,\r\n normals,\r\n tangents,\r\n bitangents,\r\n st,\r\n negativeX,\r\n negativeZ,\r\n y\r\n ); // -x\r\n offset += 3 * 4;\r\n getAttributes(\r\n offset,\r\n normals,\r\n tangents,\r\n bitangents,\r\n st,\r\n negativeY,\r\n negativeZ,\r\n negativeX\r\n ); // -y\r\n offset += 3 * 4;\r\n getAttributes(offset, normals, tangents, bitangents, st, x, z, y); // +x\r\n offset += 3 * 4;\r\n getAttributes(offset, normals, tangents, bitangents, st, y, z, negativeX); // +y\r\n\r\n if (defined(normals)) {\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n if (defined(tangents)) {\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n if (defined(bitangents)) {\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n if (defined(st)) {\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: st,\r\n });\r\n }\r\n }\r\n\r\n const indices = new Uint16Array(6 * numberOfPlanes);\r\n for (let i = 0; i < numberOfPlanes; ++i) {\r\n const indexOffset = i * 6;\r\n const index = i * 4;\r\n\r\n indices[indexOffset] = index;\r\n indices[indexOffset + 1] = index + 1;\r\n indices[indexOffset + 2] = index + 2;\r\n indices[indexOffset + 3] = index;\r\n indices[indexOffset + 4] = index + 2;\r\n indices[indexOffset + 5] = index + 3;\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: BoundingSphere.fromVertices(positions),\r\n });\r\n};\r\nexport default FrustumGeometry;\r\n"],"names":["defaultValue","Cartesian3","Plane","defined","DeveloperError","Cartesian4","Intersect","Matrix4","update","getPlanesRight","getPlanesNearCenter","CesiumMath","Check","VertexFormat","Quaternion","Matrix3","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/GeometryAttribute-f2746b95.js b/debug/cesium/Workers/GeometryAttribute-f2746b95.js deleted file mode 100644 index d9db492..0000000 --- a/debug/cesium/Workers/GeometryAttribute-f2746b95.js +++ /dev/null @@ -1,645 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './WebGLConstants-f27a5e29', './Transforms-11fb6b0a'], (function (exports, Matrix2, Matrix3, Check, defaultValue, WebGLConstants, Transforms) { 'use strict'; - - /** - * @private - */ - const GeometryType = { - NONE: 0, - TRIANGLES: 1, - LINES: 2, - POLYLINES: 3, - }; - var GeometryType$1 = Object.freeze(GeometryType); - - /** - * The type of a geometric primitive, i.e., points, lines, and triangles. - * - * @enum {Number} - */ - const PrimitiveType = { - /** - * Points primitive where each vertex (or index) is a separate point. - * - * @type {Number} - * @constant - */ - POINTS: WebGLConstants.WebGLConstants.POINTS, - - /** - * Lines primitive where each two vertices (or indices) is a line segment. Line segments are not necessarily connected. - * - * @type {Number} - * @constant - */ - LINES: WebGLConstants.WebGLConstants.LINES, - - /** - * Line loop primitive where each vertex (or index) after the first connects a line to - * the previous vertex, and the last vertex implicitly connects to the first. - * - * @type {Number} - * @constant - */ - LINE_LOOP: WebGLConstants.WebGLConstants.LINE_LOOP, - - /** - * Line strip primitive where each vertex (or index) after the first connects a line to the previous vertex. - * - * @type {Number} - * @constant - */ - LINE_STRIP: WebGLConstants.WebGLConstants.LINE_STRIP, - - /** - * Triangles primitive where each three vertices (or indices) is a triangle. Triangles do not necessarily share edges. - * - * @type {Number} - * @constant - */ - TRIANGLES: WebGLConstants.WebGLConstants.TRIANGLES, - - /** - * Triangle strip primitive where each vertex (or index) after the first two connect to - * the previous two vertices forming a triangle. For example, this can be used to model a wall. - * - * @type {Number} - * @constant - */ - TRIANGLE_STRIP: WebGLConstants.WebGLConstants.TRIANGLE_STRIP, - - /** - * Triangle fan primitive where each vertex (or index) after the first two connect to - * the previous vertex and the first vertex forming a triangle. For example, this can be used - * to model a cone or circle. - * - * @type {Number} - * @constant - */ - TRIANGLE_FAN: WebGLConstants.WebGLConstants.TRIANGLE_FAN, - }; - - /** - * @private - */ - PrimitiveType.isLines = function (primitiveType) { - return ( - primitiveType === PrimitiveType.LINES || - primitiveType === PrimitiveType.LINE_LOOP || - primitiveType === PrimitiveType.LINE_STRIP - ); - }; - - /** - * @private - */ - PrimitiveType.isTriangles = function (primitiveType) { - return ( - primitiveType === PrimitiveType.TRIANGLES || - primitiveType === PrimitiveType.TRIANGLE_STRIP || - primitiveType === PrimitiveType.TRIANGLE_FAN - ); - }; - - /** - * @private - */ - PrimitiveType.validate = function (primitiveType) { - return ( - primitiveType === PrimitiveType.POINTS || - primitiveType === PrimitiveType.LINES || - primitiveType === PrimitiveType.LINE_LOOP || - primitiveType === PrimitiveType.LINE_STRIP || - primitiveType === PrimitiveType.TRIANGLES || - primitiveType === PrimitiveType.TRIANGLE_STRIP || - primitiveType === PrimitiveType.TRIANGLE_FAN - ); - }; - - var PrimitiveType$1 = Object.freeze(PrimitiveType); - - /** - * A geometry representation with attributes forming vertices and optional index data - * defining primitives. Geometries and an {@link Appearance}, which describes the shading, - * can be assigned to a {@link Primitive} for visualization. A Primitive can - * be created from many heterogeneous - in many cases - geometries for performance. - *

    - * Geometries can be transformed and optimized using functions in {@link GeometryPipeline}. - *

    - * - * @alias Geometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {GeometryAttributes} options.attributes Attributes, which make up the geometry's vertices. - * @param {PrimitiveType} [options.primitiveType=PrimitiveType.TRIANGLES] The type of primitives in the geometry. - * @param {Uint16Array|Uint32Array} [options.indices] Optional index data that determines the primitives in the geometry. - * @param {BoundingSphere} [options.boundingSphere] An optional bounding sphere that fully enclosed the geometry. - * - * @see PolygonGeometry - * @see RectangleGeometry - * @see EllipseGeometry - * @see CircleGeometry - * @see WallGeometry - * @see SimplePolylineGeometry - * @see BoxGeometry - * @see EllipsoidGeometry - * - * @demo {@link https://sandcastle.cesium.com/index.html?src=Geometry%20and%20Appearances.html|Geometry and Appearances Demo} - * - * @example - * // Create geometry with a position attribute and indexed lines. - * const positions = new Float64Array([ - * 0.0, 0.0, 0.0, - * 7500000.0, 0.0, 0.0, - * 0.0, 7500000.0, 0.0 - * ]); - * - * const geometry = new Cesium.Geometry({ - * attributes : { - * position : new Cesium.GeometryAttribute({ - * componentDatatype : Cesium.ComponentDatatype.DOUBLE, - * componentsPerAttribute : 3, - * values : positions - * }) - * }, - * indices : new Uint16Array([0, 1, 1, 2, 2, 0]), - * primitiveType : Cesium.PrimitiveType.LINES, - * boundingSphere : Cesium.BoundingSphere.fromVertices(positions) - * }); - */ - function Geometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("options.attributes", options.attributes); - //>>includeEnd('debug'); - - /** - * Attributes, which make up the geometry's vertices. Each property in this object corresponds to a - * {@link GeometryAttribute} containing the attribute's data. - *

    - * Attributes are always stored non-interleaved in a Geometry. - *

    - *

    - * There are reserved attribute names with well-known semantics. The following attributes - * are created by a Geometry (depending on the provided {@link VertexFormat}. - *

      - *
    • position - 3D vertex position. 64-bit floating-point (for precision). 3 components per attribute. See {@link VertexFormat#position}.
    • - *
    • normal - Normal (normalized), commonly used for lighting. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#normal}.
    • - *
    • st - 2D texture coordinate. 32-bit floating-point. 2 components per attribute. See {@link VertexFormat#st}.
    • - *
    • bitangent - Bitangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#bitangent}.
    • - *
    • tangent - Tangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#tangent}.
    • - *
    - *

    - *

    - * The following attribute names are generally not created by a Geometry, but are added - * to a Geometry by a {@link Primitive} or {@link GeometryPipeline} functions to prepare - * the geometry for rendering. - *

      - *
    • position3DHigh - High 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
    • - *
    • position3DLow - Low 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
    • - *
    • position3DHigh - High 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
    • - *
    • position2DLow - Low 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
    • - *
    • color - RGBA color (normalized) usually from {@link GeometryInstance#color}. 32-bit floating-point. 4 components per attribute.
    • - *
    • pickColor - RGBA color used for picking. 32-bit floating-point. 4 components per attribute.
    • - *
    - *

    - * - * @type GeometryAttributes - * - * @default undefined - * - * - * @example - * geometry.attributes.position = new Cesium.GeometryAttribute({ - * componentDatatype : Cesium.ComponentDatatype.FLOAT, - * componentsPerAttribute : 3, - * values : new Float32Array(0) - * }); - * - * @see GeometryAttribute - * @see VertexFormat - */ - this.attributes = options.attributes; - - /** - * Optional index data that - along with {@link Geometry#primitiveType} - - * determines the primitives in the geometry. - * - * @type Array - * - * @default undefined - */ - this.indices = options.indices; - - /** - * The type of primitives in the geometry. This is most often {@link PrimitiveType.TRIANGLES}, - * but can varying based on the specific geometry. - * - * @type PrimitiveType - * - * @default undefined - */ - this.primitiveType = defaultValue.defaultValue( - options.primitiveType, - PrimitiveType$1.TRIANGLES - ); - - /** - * An optional bounding sphere that fully encloses the geometry. This is - * commonly used for culling. - * - * @type BoundingSphere - * - * @default undefined - */ - this.boundingSphere = options.boundingSphere; - - /** - * @private - */ - this.geometryType = defaultValue.defaultValue(options.geometryType, GeometryType$1.NONE); - - /** - * @private - */ - this.boundingSphereCV = options.boundingSphereCV; - - /** - * Used for computing the bounding sphere for geometry using the applyOffset vertex attribute - * @private - */ - this.offsetAttribute = options.offsetAttribute; - } - - /** - * Computes the number of vertices in a geometry. The runtime is linear with - * respect to the number of attributes in a vertex, not the number of vertices. - * - * @param {Geometry} geometry The geometry. - * @returns {Number} The number of vertices in the geometry. - * - * @example - * const numVertices = Cesium.Geometry.computeNumberOfVertices(geometry); - */ - Geometry.computeNumberOfVertices = function (geometry) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("geometry", geometry); - //>>includeEnd('debug'); - - let numberOfVertices = -1; - for (const property in geometry.attributes) { - if ( - geometry.attributes.hasOwnProperty(property) && - defaultValue.defined(geometry.attributes[property]) && - defaultValue.defined(geometry.attributes[property].values) - ) { - const attribute = geometry.attributes[property]; - const num = attribute.values.length / attribute.componentsPerAttribute; - //>>includeStart('debug', pragmas.debug); - if (numberOfVertices !== num && numberOfVertices !== -1) { - throw new Check.DeveloperError( - "All attribute lists must have the same number of attributes." - ); - } - //>>includeEnd('debug'); - numberOfVertices = num; - } - } - - return numberOfVertices; - }; - - const rectangleCenterScratch = new Matrix3.Cartographic(); - const enuCenterScratch = new Matrix3.Cartesian3(); - const fixedFrameToEnuScratch = new Matrix2.Matrix4(); - const boundingRectanglePointsCartographicScratch = [ - new Matrix3.Cartographic(), - new Matrix3.Cartographic(), - new Matrix3.Cartographic(), - ]; - const boundingRectanglePointsEnuScratch = [ - new Matrix2.Cartesian2(), - new Matrix2.Cartesian2(), - new Matrix2.Cartesian2(), - ]; - const points2DScratch = [new Matrix2.Cartesian2(), new Matrix2.Cartesian2(), new Matrix2.Cartesian2()]; - const pointEnuScratch = new Matrix3.Cartesian3(); - const enuRotationScratch = new Transforms.Quaternion(); - const enuRotationMatrixScratch = new Matrix2.Matrix4(); - const rotation2DScratch = new Matrix2.Matrix2(); - - /** - * For remapping texture coordinates when rendering GroundPrimitives with materials. - * GroundPrimitive texture coordinates are computed to align with the cartographic coordinate system on the globe. - * However, EllipseGeometry, RectangleGeometry, and PolygonGeometry all bake rotations to per-vertex texture coordinates - * using different strategies. - * - * This method is used by EllipseGeometry and PolygonGeometry to approximate the same visual effect. - * We encapsulate rotation and scale by computing a "transformed" texture coordinate system and computing - * a set of reference points from which "cartographic" texture coordinates can be remapped to the "transformed" - * system using distances to lines in 2D. - * - * This approximation becomes less accurate as the covered area increases, especially for GroundPrimitives near the poles, - * but is generally reasonable for polygons and ellipses around the size of USA states. - * - * RectangleGeometry has its own version of this method that computes remapping coordinates using cartographic space - * as an intermediary instead of local ENU, which is more accurate for large-area rectangles. - * - * @param {Cartesian3[]} positions Array of positions outlining the geometry - * @param {Number} stRotation Texture coordinate rotation. - * @param {Ellipsoid} ellipsoid Ellipsoid for projecting and generating local vectors. - * @param {Rectangle} boundingRectangle Bounding rectangle around the positions. - * @returns {Number[]} An array of 6 numbers specifying [minimum point, u extent, v extent] as points in the "cartographic" system. - * @private - */ - Geometry._textureCoordinateRotationPoints = function ( - positions, - stRotation, - ellipsoid, - boundingRectangle - ) { - let i; - - // Create a local east-north-up coordinate system centered on the polygon's bounding rectangle. - // Project the southwest, northwest, and southeast corners of the bounding rectangle into the plane of ENU as 2D points. - // These are the equivalents of (0,0), (0,1), and (1,0) in the texture coordiante system computed in ShadowVolumeAppearanceFS, - // aka "ENU texture space." - const rectangleCenter = Matrix2.Rectangle.center( - boundingRectangle, - rectangleCenterScratch - ); - const enuCenter = Matrix3.Cartographic.toCartesian( - rectangleCenter, - ellipsoid, - enuCenterScratch - ); - const enuToFixedFrame = Transforms.Transforms.eastNorthUpToFixedFrame( - enuCenter, - ellipsoid, - fixedFrameToEnuScratch - ); - const fixedFrameToEnu = Matrix2.Matrix4.inverse( - enuToFixedFrame, - fixedFrameToEnuScratch - ); - - const boundingPointsEnu = boundingRectanglePointsEnuScratch; - const boundingPointsCarto = boundingRectanglePointsCartographicScratch; - - boundingPointsCarto[0].longitude = boundingRectangle.west; - boundingPointsCarto[0].latitude = boundingRectangle.south; - - boundingPointsCarto[1].longitude = boundingRectangle.west; - boundingPointsCarto[1].latitude = boundingRectangle.north; - - boundingPointsCarto[2].longitude = boundingRectangle.east; - boundingPointsCarto[2].latitude = boundingRectangle.south; - - let posEnu = pointEnuScratch; - - for (i = 0; i < 3; i++) { - Matrix3.Cartographic.toCartesian(boundingPointsCarto[i], ellipsoid, posEnu); - posEnu = Matrix2.Matrix4.multiplyByPointAsVector(fixedFrameToEnu, posEnu, posEnu); - boundingPointsEnu[i].x = posEnu.x; - boundingPointsEnu[i].y = posEnu.y; - } - - // Rotate each point in the polygon around the up vector in the ENU by -stRotation and project into ENU as 2D. - // Compute the bounding box of these rotated points in the 2D ENU plane. - // Rotate the corners back by stRotation, then compute their equivalents in the ENU texture space using the corners computed earlier. - const rotation = Transforms.Quaternion.fromAxisAngle( - Matrix3.Cartesian3.UNIT_Z, - -stRotation, - enuRotationScratch - ); - const textureMatrix = Matrix3.Matrix3.fromQuaternion( - rotation, - enuRotationMatrixScratch - ); - - const positionsLength = positions.length; - let enuMinX = Number.POSITIVE_INFINITY; - let enuMinY = Number.POSITIVE_INFINITY; - let enuMaxX = Number.NEGATIVE_INFINITY; - let enuMaxY = Number.NEGATIVE_INFINITY; - for (i = 0; i < positionsLength; i++) { - posEnu = Matrix2.Matrix4.multiplyByPointAsVector( - fixedFrameToEnu, - positions[i], - posEnu - ); - posEnu = Matrix3.Matrix3.multiplyByVector(textureMatrix, posEnu, posEnu); - - enuMinX = Math.min(enuMinX, posEnu.x); - enuMinY = Math.min(enuMinY, posEnu.y); - enuMaxX = Math.max(enuMaxX, posEnu.x); - enuMaxY = Math.max(enuMaxY, posEnu.y); - } - - const toDesiredInComputed = Matrix2.Matrix2.fromRotation( - stRotation, - rotation2DScratch - ); - - const points2D = points2DScratch; - points2D[0].x = enuMinX; - points2D[0].y = enuMinY; - - points2D[1].x = enuMinX; - points2D[1].y = enuMaxY; - - points2D[2].x = enuMaxX; - points2D[2].y = enuMinY; - - const boundingEnuMin = boundingPointsEnu[0]; - const boundingPointsWidth = boundingPointsEnu[2].x - boundingEnuMin.x; - const boundingPointsHeight = boundingPointsEnu[1].y - boundingEnuMin.y; - - for (i = 0; i < 3; i++) { - const point2D = points2D[i]; - // rotate back - Matrix2.Matrix2.multiplyByVector(toDesiredInComputed, point2D, point2D); - - // Convert point into east-north texture coordinate space - point2D.x = (point2D.x - boundingEnuMin.x) / boundingPointsWidth; - point2D.y = (point2D.y - boundingEnuMin.y) / boundingPointsHeight; - } - - const minXYCorner = points2D[0]; - const maxYCorner = points2D[1]; - const maxXCorner = points2D[2]; - const result = new Array(6); - Matrix2.Cartesian2.pack(minXYCorner, result); - Matrix2.Cartesian2.pack(maxYCorner, result, 2); - Matrix2.Cartesian2.pack(maxXCorner, result, 4); - - return result; - }; - - /** - * Values and type information for geometry attributes. A {@link Geometry} - * generally contains one or more attributes. All attributes together form - * the geometry's vertices. - * - * @alias GeometryAttribute - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {ComponentDatatype} [options.componentDatatype] The datatype of each component in the attribute, e.g., individual elements in values. - * @param {Number} [options.componentsPerAttribute] A number between 1 and 4 that defines the number of components in an attributes. - * @param {Boolean} [options.normalize=false] When true and componentDatatype is an integer format, indicate that the components should be mapped to the range [0, 1] (unsigned) or [-1, 1] (signed) when they are accessed as floating-point for rendering. - * @param {number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} [options.values] The values for the attributes stored in a typed array. - * - * @exception {DeveloperError} options.componentsPerAttribute must be between 1 and 4. - * - * - * @example - * const geometry = new Cesium.Geometry({ - * attributes : { - * position : new Cesium.GeometryAttribute({ - * componentDatatype : Cesium.ComponentDatatype.FLOAT, - * componentsPerAttribute : 3, - * values : new Float32Array([ - * 0.0, 0.0, 0.0, - * 7500000.0, 0.0, 0.0, - * 0.0, 7500000.0, 0.0 - * ]) - * }) - * }, - * primitiveType : Cesium.PrimitiveType.LINE_LOOP - * }); - * - * @see Geometry - */ - function GeometryAttribute(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(options.componentDatatype)) { - throw new Check.DeveloperError("options.componentDatatype is required."); - } - if (!defaultValue.defined(options.componentsPerAttribute)) { - throw new Check.DeveloperError("options.componentsPerAttribute is required."); - } - if ( - options.componentsPerAttribute < 1 || - options.componentsPerAttribute > 4 - ) { - throw new Check.DeveloperError( - "options.componentsPerAttribute must be between 1 and 4." - ); - } - if (!defaultValue.defined(options.values)) { - throw new Check.DeveloperError("options.values is required."); - } - //>>includeEnd('debug'); - - /** - * The datatype of each component in the attribute, e.g., individual elements in - * {@link GeometryAttribute#values}. - * - * @type ComponentDatatype - * - * @default undefined - */ - this.componentDatatype = options.componentDatatype; - - /** - * A number between 1 and 4 that defines the number of components in an attributes. - * For example, a position attribute with x, y, and z components would have 3 as - * shown in the code example. - * - * @type Number - * - * @default undefined - * - * @example - * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT; - * attribute.componentsPerAttribute = 3; - * attribute.values = new Float32Array([ - * 0.0, 0.0, 0.0, - * 7500000.0, 0.0, 0.0, - * 0.0, 7500000.0, 0.0 - * ]); - */ - this.componentsPerAttribute = options.componentsPerAttribute; - - /** - * When true and componentDatatype is an integer format, - * indicate that the components should be mapped to the range [0, 1] (unsigned) - * or [-1, 1] (signed) when they are accessed as floating-point for rendering. - *

    - * This is commonly used when storing colors using {@link ComponentDatatype.UNSIGNED_BYTE}. - *

    - * - * @type Boolean - * - * @default false - * - * @example - * attribute.componentDatatype = Cesium.ComponentDatatype.UNSIGNED_BYTE; - * attribute.componentsPerAttribute = 4; - * attribute.normalize = true; - * attribute.values = new Uint8Array([ - * Cesium.Color.floatToByte(color.red), - * Cesium.Color.floatToByte(color.green), - * Cesium.Color.floatToByte(color.blue), - * Cesium.Color.floatToByte(color.alpha) - * ]); - */ - this.normalize = defaultValue.defaultValue(options.normalize, false); - - /** - * The values for the attributes stored in a typed array. In the code example, - * every three elements in values defines one attributes since - * componentsPerAttribute is 3. - * - * @type {number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} - * - * @default undefined - * - * @example - * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT; - * attribute.componentsPerAttribute = 3; - * attribute.values = new Float32Array([ - * 0.0, 0.0, 0.0, - * 7500000.0, 0.0, 0.0, - * 0.0, 7500000.0, 0.0 - * ]); - */ - this.values = options.values; - } - - exports.Geometry = Geometry; - exports.GeometryAttribute = GeometryAttribute; - exports.GeometryType = GeometryType$1; - exports.PrimitiveType = PrimitiveType$1; - -})); -//# sourceMappingURL=GeometryAttribute-f2746b95.js.map diff --git a/debug/cesium/Workers/GeometryAttribute-f2746b95.js.map b/debug/cesium/Workers/GeometryAttribute-f2746b95.js.map deleted file mode 100644 index 796c82b..0000000 --- a/debug/cesium/Workers/GeometryAttribute-f2746b95.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"GeometryAttribute-f2746b95.js","sources":["../../../Source/Core/GeometryType.js","../../../Source/Core/PrimitiveType.js","../../../Source/Core/Geometry.js","../../../Source/Core/GeometryAttribute.js"],"sourcesContent":["/**\r\n * @private\r\n */\r\nconst GeometryType = {\r\n NONE: 0,\r\n TRIANGLES: 1,\r\n LINES: 2,\r\n POLYLINES: 3,\r\n};\r\nexport default Object.freeze(GeometryType);\r\n","import WebGLConstants from \"./WebGLConstants.js\";\r\n\r\n/**\r\n * The type of a geometric primitive, i.e., points, lines, and triangles.\r\n *\r\n * @enum {Number}\r\n */\r\nconst PrimitiveType = {\r\n /**\r\n * Points primitive where each vertex (or index) is a separate point.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n POINTS: WebGLConstants.POINTS,\r\n\r\n /**\r\n * Lines primitive where each two vertices (or indices) is a line segment. Line segments are not necessarily connected.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n LINES: WebGLConstants.LINES,\r\n\r\n /**\r\n * Line loop primitive where each vertex (or index) after the first connects a line to\r\n * the previous vertex, and the last vertex implicitly connects to the first.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n LINE_LOOP: WebGLConstants.LINE_LOOP,\r\n\r\n /**\r\n * Line strip primitive where each vertex (or index) after the first connects a line to the previous vertex.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n LINE_STRIP: WebGLConstants.LINE_STRIP,\r\n\r\n /**\r\n * Triangles primitive where each three vertices (or indices) is a triangle. Triangles do not necessarily share edges.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n TRIANGLES: WebGLConstants.TRIANGLES,\r\n\r\n /**\r\n * Triangle strip primitive where each vertex (or index) after the first two connect to\r\n * the previous two vertices forming a triangle. For example, this can be used to model a wall.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n TRIANGLE_STRIP: WebGLConstants.TRIANGLE_STRIP,\r\n\r\n /**\r\n * Triangle fan primitive where each vertex (or index) after the first two connect to\r\n * the previous vertex and the first vertex forming a triangle. For example, this can be used\r\n * to model a cone or circle.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n TRIANGLE_FAN: WebGLConstants.TRIANGLE_FAN,\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitiveType.isLines = function (primitiveType) {\r\n return (\r\n primitiveType === PrimitiveType.LINES ||\r\n primitiveType === PrimitiveType.LINE_LOOP ||\r\n primitiveType === PrimitiveType.LINE_STRIP\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitiveType.isTriangles = function (primitiveType) {\r\n return (\r\n primitiveType === PrimitiveType.TRIANGLES ||\r\n primitiveType === PrimitiveType.TRIANGLE_STRIP ||\r\n primitiveType === PrimitiveType.TRIANGLE_FAN\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitiveType.validate = function (primitiveType) {\r\n return (\r\n primitiveType === PrimitiveType.POINTS ||\r\n primitiveType === PrimitiveType.LINES ||\r\n primitiveType === PrimitiveType.LINE_LOOP ||\r\n primitiveType === PrimitiveType.LINE_STRIP ||\r\n primitiveType === PrimitiveType.TRIANGLES ||\r\n primitiveType === PrimitiveType.TRIANGLE_STRIP ||\r\n primitiveType === PrimitiveType.TRIANGLE_FAN\r\n );\r\n};\r\n\r\nexport default Object.freeze(PrimitiveType);\r\n","import Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport GeometryType from \"./GeometryType.js\";\r\nimport Matrix2 from \"./Matrix2.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport Transforms from \"./Transforms.js\";\r\n\r\n/**\r\n * A geometry representation with attributes forming vertices and optional index data\r\n * defining primitives. Geometries and an {@link Appearance}, which describes the shading,\r\n * can be assigned to a {@link Primitive} for visualization. A Primitive can\r\n * be created from many heterogeneous - in many cases - geometries for performance.\r\n *

    \r\n * Geometries can be transformed and optimized using functions in {@link GeometryPipeline}.\r\n *

    \r\n *\r\n * @alias Geometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {GeometryAttributes} options.attributes Attributes, which make up the geometry's vertices.\r\n * @param {PrimitiveType} [options.primitiveType=PrimitiveType.TRIANGLES] The type of primitives in the geometry.\r\n * @param {Uint16Array|Uint32Array} [options.indices] Optional index data that determines the primitives in the geometry.\r\n * @param {BoundingSphere} [options.boundingSphere] An optional bounding sphere that fully enclosed the geometry.\r\n *\r\n * @see PolygonGeometry\r\n * @see RectangleGeometry\r\n * @see EllipseGeometry\r\n * @see CircleGeometry\r\n * @see WallGeometry\r\n * @see SimplePolylineGeometry\r\n * @see BoxGeometry\r\n * @see EllipsoidGeometry\r\n *\r\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Geometry%20and%20Appearances.html|Geometry and Appearances Demo}\r\n *\r\n * @example\r\n * // Create geometry with a position attribute and indexed lines.\r\n * const positions = new Float64Array([\r\n * 0.0, 0.0, 0.0,\r\n * 7500000.0, 0.0, 0.0,\r\n * 0.0, 7500000.0, 0.0\r\n * ]);\r\n *\r\n * const geometry = new Cesium.Geometry({\r\n * attributes : {\r\n * position : new Cesium.GeometryAttribute({\r\n * componentDatatype : Cesium.ComponentDatatype.DOUBLE,\r\n * componentsPerAttribute : 3,\r\n * values : positions\r\n * })\r\n * },\r\n * indices : new Uint16Array([0, 1, 1, 2, 2, 0]),\r\n * primitiveType : Cesium.PrimitiveType.LINES,\r\n * boundingSphere : Cesium.BoundingSphere.fromVertices(positions)\r\n * });\r\n */\r\nfunction Geometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"options.attributes\", options.attributes);\r\n //>>includeEnd('debug');\r\n\r\n /**\r\n * Attributes, which make up the geometry's vertices. Each property in this object corresponds to a\r\n * {@link GeometryAttribute} containing the attribute's data.\r\n *

    \r\n * Attributes are always stored non-interleaved in a Geometry.\r\n *

    \r\n *

    \r\n * There are reserved attribute names with well-known semantics. The following attributes\r\n * are created by a Geometry (depending on the provided {@link VertexFormat}.\r\n *

      \r\n *
    • position - 3D vertex position. 64-bit floating-point (for precision). 3 components per attribute. See {@link VertexFormat#position}.
    • \r\n *
    • normal - Normal (normalized), commonly used for lighting. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#normal}.
    • \r\n *
    • st - 2D texture coordinate. 32-bit floating-point. 2 components per attribute. See {@link VertexFormat#st}.
    • \r\n *
    • bitangent - Bitangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#bitangent}.
    • \r\n *
    • tangent - Tangent (normalized), used for tangent-space effects like bump mapping. 32-bit floating-point. 3 components per attribute. See {@link VertexFormat#tangent}.
    • \r\n *
    \r\n *

    \r\n *

    \r\n * The following attribute names are generally not created by a Geometry, but are added\r\n * to a Geometry by a {@link Primitive} or {@link GeometryPipeline} functions to prepare\r\n * the geometry for rendering.\r\n *

      \r\n *
    • position3DHigh - High 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
    • \r\n *
    • position3DLow - Low 32 bits for encoded 64-bit position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
    • \r\n *
    • position3DHigh - High 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
    • \r\n *
    • position2DLow - Low 32 bits for encoded 64-bit 2D (Columbus view) position computed with {@link GeometryPipeline.encodeAttribute}. 32-bit floating-point. 4 components per attribute.
    • \r\n *
    • color - RGBA color (normalized) usually from {@link GeometryInstance#color}. 32-bit floating-point. 4 components per attribute.
    • \r\n *
    • pickColor - RGBA color used for picking. 32-bit floating-point. 4 components per attribute.
    • \r\n *
    \r\n *

    \r\n *\r\n * @type GeometryAttributes\r\n *\r\n * @default undefined\r\n *\r\n *\r\n * @example\r\n * geometry.attributes.position = new Cesium.GeometryAttribute({\r\n * componentDatatype : Cesium.ComponentDatatype.FLOAT,\r\n * componentsPerAttribute : 3,\r\n * values : new Float32Array(0)\r\n * });\r\n *\r\n * @see GeometryAttribute\r\n * @see VertexFormat\r\n */\r\n this.attributes = options.attributes;\r\n\r\n /**\r\n * Optional index data that - along with {@link Geometry#primitiveType} -\r\n * determines the primitives in the geometry.\r\n *\r\n * @type Array\r\n *\r\n * @default undefined\r\n */\r\n this.indices = options.indices;\r\n\r\n /**\r\n * The type of primitives in the geometry. This is most often {@link PrimitiveType.TRIANGLES},\r\n * but can varying based on the specific geometry.\r\n *\r\n * @type PrimitiveType\r\n *\r\n * @default undefined\r\n */\r\n this.primitiveType = defaultValue(\r\n options.primitiveType,\r\n PrimitiveType.TRIANGLES\r\n );\r\n\r\n /**\r\n * An optional bounding sphere that fully encloses the geometry. This is\r\n * commonly used for culling.\r\n *\r\n * @type BoundingSphere\r\n *\r\n * @default undefined\r\n */\r\n this.boundingSphere = options.boundingSphere;\r\n\r\n /**\r\n * @private\r\n */\r\n this.geometryType = defaultValue(options.geometryType, GeometryType.NONE);\r\n\r\n /**\r\n * @private\r\n */\r\n this.boundingSphereCV = options.boundingSphereCV;\r\n\r\n /**\r\n * Used for computing the bounding sphere for geometry using the applyOffset vertex attribute\r\n * @private\r\n */\r\n this.offsetAttribute = options.offsetAttribute;\r\n}\r\n\r\n/**\r\n * Computes the number of vertices in a geometry. The runtime is linear with\r\n * respect to the number of attributes in a vertex, not the number of vertices.\r\n *\r\n * @param {Geometry} geometry The geometry.\r\n * @returns {Number} The number of vertices in the geometry.\r\n *\r\n * @example\r\n * const numVertices = Cesium.Geometry.computeNumberOfVertices(geometry);\r\n */\r\nGeometry.computeNumberOfVertices = function (geometry) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"geometry\", geometry);\r\n //>>includeEnd('debug');\r\n\r\n let numberOfVertices = -1;\r\n for (const property in geometry.attributes) {\r\n if (\r\n geometry.attributes.hasOwnProperty(property) &&\r\n defined(geometry.attributes[property]) &&\r\n defined(geometry.attributes[property].values)\r\n ) {\r\n const attribute = geometry.attributes[property];\r\n const num = attribute.values.length / attribute.componentsPerAttribute;\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numberOfVertices !== num && numberOfVertices !== -1) {\r\n throw new DeveloperError(\r\n \"All attribute lists must have the same number of attributes.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n numberOfVertices = num;\r\n }\r\n }\r\n\r\n return numberOfVertices;\r\n};\r\n\r\nconst rectangleCenterScratch = new Cartographic();\r\nconst enuCenterScratch = new Cartesian3();\r\nconst fixedFrameToEnuScratch = new Matrix4();\r\nconst boundingRectanglePointsCartographicScratch = [\r\n new Cartographic(),\r\n new Cartographic(),\r\n new Cartographic(),\r\n];\r\nconst boundingRectanglePointsEnuScratch = [\r\n new Cartesian2(),\r\n new Cartesian2(),\r\n new Cartesian2(),\r\n];\r\nconst points2DScratch = [new Cartesian2(), new Cartesian2(), new Cartesian2()];\r\nconst pointEnuScratch = new Cartesian3();\r\nconst enuRotationScratch = new Quaternion();\r\nconst enuRotationMatrixScratch = new Matrix4();\r\nconst rotation2DScratch = new Matrix2();\r\n\r\n/**\r\n * For remapping texture coordinates when rendering GroundPrimitives with materials.\r\n * GroundPrimitive texture coordinates are computed to align with the cartographic coordinate system on the globe.\r\n * However, EllipseGeometry, RectangleGeometry, and PolygonGeometry all bake rotations to per-vertex texture coordinates\r\n * using different strategies.\r\n *\r\n * This method is used by EllipseGeometry and PolygonGeometry to approximate the same visual effect.\r\n * We encapsulate rotation and scale by computing a \"transformed\" texture coordinate system and computing\r\n * a set of reference points from which \"cartographic\" texture coordinates can be remapped to the \"transformed\"\r\n * system using distances to lines in 2D.\r\n *\r\n * This approximation becomes less accurate as the covered area increases, especially for GroundPrimitives near the poles,\r\n * but is generally reasonable for polygons and ellipses around the size of USA states.\r\n *\r\n * RectangleGeometry has its own version of this method that computes remapping coordinates using cartographic space\r\n * as an intermediary instead of local ENU, which is more accurate for large-area rectangles.\r\n *\r\n * @param {Cartesian3[]} positions Array of positions outlining the geometry\r\n * @param {Number} stRotation Texture coordinate rotation.\r\n * @param {Ellipsoid} ellipsoid Ellipsoid for projecting and generating local vectors.\r\n * @param {Rectangle} boundingRectangle Bounding rectangle around the positions.\r\n * @returns {Number[]} An array of 6 numbers specifying [minimum point, u extent, v extent] as points in the \"cartographic\" system.\r\n * @private\r\n */\r\nGeometry._textureCoordinateRotationPoints = function (\r\n positions,\r\n stRotation,\r\n ellipsoid,\r\n boundingRectangle\r\n) {\r\n let i;\r\n\r\n // Create a local east-north-up coordinate system centered on the polygon's bounding rectangle.\r\n // Project the southwest, northwest, and southeast corners of the bounding rectangle into the plane of ENU as 2D points.\r\n // These are the equivalents of (0,0), (0,1), and (1,0) in the texture coordiante system computed in ShadowVolumeAppearanceFS,\r\n // aka \"ENU texture space.\"\r\n const rectangleCenter = Rectangle.center(\r\n boundingRectangle,\r\n rectangleCenterScratch\r\n );\r\n const enuCenter = Cartographic.toCartesian(\r\n rectangleCenter,\r\n ellipsoid,\r\n enuCenterScratch\r\n );\r\n const enuToFixedFrame = Transforms.eastNorthUpToFixedFrame(\r\n enuCenter,\r\n ellipsoid,\r\n fixedFrameToEnuScratch\r\n );\r\n const fixedFrameToEnu = Matrix4.inverse(\r\n enuToFixedFrame,\r\n fixedFrameToEnuScratch\r\n );\r\n\r\n const boundingPointsEnu = boundingRectanglePointsEnuScratch;\r\n const boundingPointsCarto = boundingRectanglePointsCartographicScratch;\r\n\r\n boundingPointsCarto[0].longitude = boundingRectangle.west;\r\n boundingPointsCarto[0].latitude = boundingRectangle.south;\r\n\r\n boundingPointsCarto[1].longitude = boundingRectangle.west;\r\n boundingPointsCarto[1].latitude = boundingRectangle.north;\r\n\r\n boundingPointsCarto[2].longitude = boundingRectangle.east;\r\n boundingPointsCarto[2].latitude = boundingRectangle.south;\r\n\r\n let posEnu = pointEnuScratch;\r\n\r\n for (i = 0; i < 3; i++) {\r\n Cartographic.toCartesian(boundingPointsCarto[i], ellipsoid, posEnu);\r\n posEnu = Matrix4.multiplyByPointAsVector(fixedFrameToEnu, posEnu, posEnu);\r\n boundingPointsEnu[i].x = posEnu.x;\r\n boundingPointsEnu[i].y = posEnu.y;\r\n }\r\n\r\n // Rotate each point in the polygon around the up vector in the ENU by -stRotation and project into ENU as 2D.\r\n // Compute the bounding box of these rotated points in the 2D ENU plane.\r\n // Rotate the corners back by stRotation, then compute their equivalents in the ENU texture space using the corners computed earlier.\r\n const rotation = Quaternion.fromAxisAngle(\r\n Cartesian3.UNIT_Z,\r\n -stRotation,\r\n enuRotationScratch\r\n );\r\n const textureMatrix = Matrix3.fromQuaternion(\r\n rotation,\r\n enuRotationMatrixScratch\r\n );\r\n\r\n const positionsLength = positions.length;\r\n let enuMinX = Number.POSITIVE_INFINITY;\r\n let enuMinY = Number.POSITIVE_INFINITY;\r\n let enuMaxX = Number.NEGATIVE_INFINITY;\r\n let enuMaxY = Number.NEGATIVE_INFINITY;\r\n for (i = 0; i < positionsLength; i++) {\r\n posEnu = Matrix4.multiplyByPointAsVector(\r\n fixedFrameToEnu,\r\n positions[i],\r\n posEnu\r\n );\r\n posEnu = Matrix3.multiplyByVector(textureMatrix, posEnu, posEnu);\r\n\r\n enuMinX = Math.min(enuMinX, posEnu.x);\r\n enuMinY = Math.min(enuMinY, posEnu.y);\r\n enuMaxX = Math.max(enuMaxX, posEnu.x);\r\n enuMaxY = Math.max(enuMaxY, posEnu.y);\r\n }\r\n\r\n const toDesiredInComputed = Matrix2.fromRotation(\r\n stRotation,\r\n rotation2DScratch\r\n );\r\n\r\n const points2D = points2DScratch;\r\n points2D[0].x = enuMinX;\r\n points2D[0].y = enuMinY;\r\n\r\n points2D[1].x = enuMinX;\r\n points2D[1].y = enuMaxY;\r\n\r\n points2D[2].x = enuMaxX;\r\n points2D[2].y = enuMinY;\r\n\r\n const boundingEnuMin = boundingPointsEnu[0];\r\n const boundingPointsWidth = boundingPointsEnu[2].x - boundingEnuMin.x;\r\n const boundingPointsHeight = boundingPointsEnu[1].y - boundingEnuMin.y;\r\n\r\n for (i = 0; i < 3; i++) {\r\n const point2D = points2D[i];\r\n // rotate back\r\n Matrix2.multiplyByVector(toDesiredInComputed, point2D, point2D);\r\n\r\n // Convert point into east-north texture coordinate space\r\n point2D.x = (point2D.x - boundingEnuMin.x) / boundingPointsWidth;\r\n point2D.y = (point2D.y - boundingEnuMin.y) / boundingPointsHeight;\r\n }\r\n\r\n const minXYCorner = points2D[0];\r\n const maxYCorner = points2D[1];\r\n const maxXCorner = points2D[2];\r\n const result = new Array(6);\r\n Cartesian2.pack(minXYCorner, result);\r\n Cartesian2.pack(maxYCorner, result, 2);\r\n Cartesian2.pack(maxXCorner, result, 4);\r\n\r\n return result;\r\n};\r\nexport default Geometry;\r\n","import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Values and type information for geometry attributes. A {@link Geometry}\r\n * generally contains one or more attributes. All attributes together form\r\n * the geometry's vertices.\r\n *\r\n * @alias GeometryAttribute\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {ComponentDatatype} [options.componentDatatype] The datatype of each component in the attribute, e.g., individual elements in values.\r\n * @param {Number} [options.componentsPerAttribute] A number between 1 and 4 that defines the number of components in an attributes.\r\n * @param {Boolean} [options.normalize=false] When true and componentDatatype is an integer format, indicate that the components should be mapped to the range [0, 1] (unsigned) or [-1, 1] (signed) when they are accessed as floating-point for rendering.\r\n * @param {number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} [options.values] The values for the attributes stored in a typed array.\r\n *\r\n * @exception {DeveloperError} options.componentsPerAttribute must be between 1 and 4.\r\n *\r\n *\r\n * @example\r\n * const geometry = new Cesium.Geometry({\r\n * attributes : {\r\n * position : new Cesium.GeometryAttribute({\r\n * componentDatatype : Cesium.ComponentDatatype.FLOAT,\r\n * componentsPerAttribute : 3,\r\n * values : new Float32Array([\r\n * 0.0, 0.0, 0.0,\r\n * 7500000.0, 0.0, 0.0,\r\n * 0.0, 7500000.0, 0.0\r\n * ])\r\n * })\r\n * },\r\n * primitiveType : Cesium.PrimitiveType.LINE_LOOP\r\n * });\r\n *\r\n * @see Geometry\r\n */\r\nfunction GeometryAttribute(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(options.componentDatatype)) {\r\n throw new DeveloperError(\"options.componentDatatype is required.\");\r\n }\r\n if (!defined(options.componentsPerAttribute)) {\r\n throw new DeveloperError(\"options.componentsPerAttribute is required.\");\r\n }\r\n if (\r\n options.componentsPerAttribute < 1 ||\r\n options.componentsPerAttribute > 4\r\n ) {\r\n throw new DeveloperError(\r\n \"options.componentsPerAttribute must be between 1 and 4.\"\r\n );\r\n }\r\n if (!defined(options.values)) {\r\n throw new DeveloperError(\"options.values is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n /**\r\n * The datatype of each component in the attribute, e.g., individual elements in\r\n * {@link GeometryAttribute#values}.\r\n *\r\n * @type ComponentDatatype\r\n *\r\n * @default undefined\r\n */\r\n this.componentDatatype = options.componentDatatype;\r\n\r\n /**\r\n * A number between 1 and 4 that defines the number of components in an attributes.\r\n * For example, a position attribute with x, y, and z components would have 3 as\r\n * shown in the code example.\r\n *\r\n * @type Number\r\n *\r\n * @default undefined\r\n *\r\n * @example\r\n * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT;\r\n * attribute.componentsPerAttribute = 3;\r\n * attribute.values = new Float32Array([\r\n * 0.0, 0.0, 0.0,\r\n * 7500000.0, 0.0, 0.0,\r\n * 0.0, 7500000.0, 0.0\r\n * ]);\r\n */\r\n this.componentsPerAttribute = options.componentsPerAttribute;\r\n\r\n /**\r\n * When true and componentDatatype is an integer format,\r\n * indicate that the components should be mapped to the range [0, 1] (unsigned)\r\n * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\r\n *

    \r\n * This is commonly used when storing colors using {@link ComponentDatatype.UNSIGNED_BYTE}.\r\n *

    \r\n *\r\n * @type Boolean\r\n *\r\n * @default false\r\n *\r\n * @example\r\n * attribute.componentDatatype = Cesium.ComponentDatatype.UNSIGNED_BYTE;\r\n * attribute.componentsPerAttribute = 4;\r\n * attribute.normalize = true;\r\n * attribute.values = new Uint8Array([\r\n * Cesium.Color.floatToByte(color.red),\r\n * Cesium.Color.floatToByte(color.green),\r\n * Cesium.Color.floatToByte(color.blue),\r\n * Cesium.Color.floatToByte(color.alpha)\r\n * ]);\r\n */\r\n this.normalize = defaultValue(options.normalize, false);\r\n\r\n /**\r\n * The values for the attributes stored in a typed array. In the code example,\r\n * every three elements in values defines one attributes since\r\n * componentsPerAttribute is 3.\r\n *\r\n * @type {number[]|Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array}\r\n *\r\n * @default undefined\r\n *\r\n * @example\r\n * attribute.componentDatatype = Cesium.ComponentDatatype.FLOAT;\r\n * attribute.componentsPerAttribute = 3;\r\n * attribute.values = new Float32Array([\r\n * 0.0, 0.0, 0.0,\r\n * 7500000.0, 0.0, 0.0,\r\n * 0.0, 7500000.0, 0.0\r\n * ]);\r\n */\r\n this.values = options.values;\r\n}\r\nexport default GeometryAttribute;\r\n"],"names":["WebGLConstants","defaultValue","Check","PrimitiveType","GeometryType","defined","DeveloperError","Cartographic","Cartesian3","Matrix4","Cartesian2","Quaternion","Matrix2","Rectangle","Transforms","Matrix3"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA,MAAM,YAAY,GAAG;EACrB,EAAE,IAAI,EAAE,CAAC;EACT,EAAE,SAAS,EAAE,CAAC;EACd,EAAE,KAAK,EAAE,CAAC;EACV,EAAE,SAAS,EAAE,CAAC;EACd,CAAC,CAAC;AACF,uBAAe,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;;ECP1C;EACA;EACA;EACA;EACA;EACA,MAAM,aAAa,GAAG;EACtB;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,MAAM,EAAEA,6BAAc,CAAC,MAAM;AAC/B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,KAAK,EAAEA,6BAAc,CAAC,KAAK;AAC7B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAEA,6BAAc,CAAC,SAAS;AACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,UAAU,EAAEA,6BAAc,CAAC,UAAU;AACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAEA,6BAAc,CAAC,SAAS;AACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,cAAc,EAAEA,6BAAc,CAAC,cAAc;AAC/C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,YAAY,EAAEA,6BAAc,CAAC,YAAY;EAC3C,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,aAAa,CAAC,OAAO,GAAG,UAAU,aAAa,EAAE;EACjD,EAAE;EACF,IAAI,aAAa,KAAK,aAAa,CAAC,KAAK;EACzC,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS;EAC7C,IAAI,aAAa,KAAK,aAAa,CAAC,UAAU;EAC9C,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,aAAa,CAAC,WAAW,GAAG,UAAU,aAAa,EAAE;EACrD,EAAE;EACF,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS;EAC7C,IAAI,aAAa,KAAK,aAAa,CAAC,cAAc;EAClD,IAAI,aAAa,KAAK,aAAa,CAAC,YAAY;EAChD,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,aAAa,CAAC,QAAQ,GAAG,UAAU,aAAa,EAAE;EAClD,EAAE;EACF,IAAI,aAAa,KAAK,aAAa,CAAC,MAAM;EAC1C,IAAI,aAAa,KAAK,aAAa,CAAC,KAAK;EACzC,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS;EAC7C,IAAI,aAAa,KAAK,aAAa,CAAC,UAAU;EAC9C,IAAI,aAAa,KAAK,aAAa,CAAC,SAAS;EAC7C,IAAI,aAAa,KAAK,aAAa,CAAC,cAAc;EAClD,IAAI,aAAa,KAAK,aAAa,CAAC,YAAY;EAChD,IAAI;EACJ,CAAC,CAAC;AACF;AACA,wBAAe,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;;EC1F3C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,QAAQ,CAAC,OAAO,EAAE;EAC3B,EAAE,OAAO,GAAGC,yBAAY,CAAC,OAAO,EAAEA,yBAAY,CAAC,YAAY,CAAC,CAAC;AAC7D;EACA;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;EAChE;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;AACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,I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"} \ No newline at end of file diff --git a/debug/cesium/Workers/GeometryAttributes-eb2609b7.js b/debug/cesium/Workers/GeometryAttributes-eb2609b7.js deleted file mode 100644 index 3756359..0000000 --- a/debug/cesium/Workers/GeometryAttributes-eb2609b7.js +++ /dev/null @@ -1,117 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './defaultValue-0ab18f7d'], (function (exports, defaultValue) { 'use strict'; - - /** - * Attributes, which make up a geometry's vertices. Each property in this object corresponds to a - * {@link GeometryAttribute} containing the attribute's data. - *

    - * Attributes are always stored non-interleaved in a Geometry. - *

    - * - * @alias GeometryAttributes - * @constructor - */ - function GeometryAttributes(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - /** - * The 3D position attribute. - *

    - * 64-bit floating-point (for precision). 3 components per attribute. - *

    - * - * @type GeometryAttribute - * - * @default undefined - */ - this.position = options.position; - - /** - * The normal attribute (normalized), which is commonly used for lighting. - *

    - * 32-bit floating-point. 3 components per attribute. - *

    - * - * @type GeometryAttribute - * - * @default undefined - */ - this.normal = options.normal; - - /** - * The 2D texture coordinate attribute. - *

    - * 32-bit floating-point. 2 components per attribute - *

    - * - * @type GeometryAttribute - * - * @default undefined - */ - this.st = options.st; - - /** - * The bitangent attribute (normalized), which is used for tangent-space effects like bump mapping. - *

    - * 32-bit floating-point. 3 components per attribute. - *

    - * - * @type GeometryAttribute - * - * @default undefined - */ - this.bitangent = options.bitangent; - - /** - * The tangent attribute (normalized), which is used for tangent-space effects like bump mapping. - *

    - * 32-bit floating-point. 3 components per attribute. - *

    - * - * @type GeometryAttribute - * - * @default undefined - */ - this.tangent = options.tangent; - - /** - * The color attribute. - *

    - * 8-bit unsigned integer. 4 components per attribute. - *

    - * - * @type GeometryAttribute - * - * @default undefined - */ - this.color = options.color; - } - - exports.GeometryAttributes = GeometryAttributes; - -})); -//# sourceMappingURL=GeometryAttributes-eb2609b7.js.map diff --git a/debug/cesium/Workers/GeometryAttributes-eb2609b7.js.map b/debug/cesium/Workers/GeometryAttributes-eb2609b7.js.map deleted file mode 100644 index 8cdaf07..0000000 --- a/debug/cesium/Workers/GeometryAttributes-eb2609b7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"GeometryAttributes-eb2609b7.js","sources":["../../../Source/Core/GeometryAttributes.js"],"sourcesContent":["import defaultValue from \"./defaultValue.js\";\r\n\r\n/**\r\n * Attributes, which make up a geometry's vertices. Each property in this object corresponds to a\r\n * {@link GeometryAttribute} containing the attribute's data.\r\n *

    \r\n * Attributes are always stored non-interleaved in a Geometry.\r\n *

    \r\n *\r\n * @alias GeometryAttributes\r\n * @constructor\r\n */\r\nfunction GeometryAttributes(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n /**\r\n * The 3D position attribute.\r\n *

    \r\n * 64-bit floating-point (for precision). 3 components per attribute.\r\n *

    \r\n *\r\n * @type GeometryAttribute\r\n *\r\n * @default undefined\r\n */\r\n this.position = options.position;\r\n\r\n /**\r\n * The normal attribute (normalized), which is commonly used for lighting.\r\n *

    \r\n * 32-bit floating-point. 3 components per attribute.\r\n *

    \r\n *\r\n * @type GeometryAttribute\r\n *\r\n * @default undefined\r\n */\r\n this.normal = options.normal;\r\n\r\n /**\r\n * The 2D texture coordinate attribute.\r\n *

    \r\n * 32-bit floating-point. 2 components per attribute\r\n *

    \r\n *\r\n * @type GeometryAttribute\r\n *\r\n * @default undefined\r\n */\r\n this.st = options.st;\r\n\r\n /**\r\n * The bitangent attribute (normalized), which is used for tangent-space effects like bump mapping.\r\n *

    \r\n * 32-bit floating-point. 3 components per attribute.\r\n *

    \r\n *\r\n * @type GeometryAttribute\r\n *\r\n * @default undefined\r\n */\r\n this.bitangent = options.bitangent;\r\n\r\n /**\r\n * The tangent attribute (normalized), which is used for tangent-space effects like bump mapping.\r\n *

    \r\n * 32-bit floating-point. 3 components per attribute.\r\n *

    \r\n *\r\n * @type GeometryAttribute\r\n *\r\n * @default undefined\r\n */\r\n this.tangent = options.tangent;\r\n\r\n /**\r\n * The color attribute.\r\n *

    \r\n * 8-bit unsigned integer. 4 components per attribute.\r\n *

    \r\n *\r\n * @type GeometryAttribute\r\n *\r\n * @default undefined\r\n */\r\n this.color = options.color;\r\n}\r\nexport default GeometryAttributes;\r\n"],"names":["defaultValue"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,kBAAkB,CAAC,OAAO,EAAE;EACrC,EAAE,OAAO,GAAGA,yBAAY,CAAC,OAAO,EAAEA,yBAAY,CAAC,YAAY,CAAC,CAAC;AAC7D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAC/B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;AACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;AACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;EAC7B;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/GeometryInstance-b2be3e5a.js b/debug/cesium/Workers/GeometryInstance-b2be3e5a.js deleted file mode 100644 index 7f41461..0000000 --- a/debug/cesium/Workers/GeometryInstance-b2be3e5a.js +++ /dev/null @@ -1,147 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './defaultValue-0ab18f7d', './Check-d10e5f2e', './Matrix2-036c77dd'], (function (exports, defaultValue, Check, Matrix2) { 'use strict'; - - /** - * Geometry instancing allows one {@link Geometry} object to be positions in several - * different locations and colored uniquely. For example, one {@link BoxGeometry} can - * be instanced several times, each with a different modelMatrix to change - * its position, rotation, and scale. - * - * @alias GeometryInstance - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Geometry|GeometryFactory} options.geometry The geometry to instance. - * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The model matrix that transforms to transform the geometry from model to world coordinates. - * @param {Object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick} or get/set per-instance attributes with {@link Primitive#getGeometryInstanceAttributes}. - * @param {Object} [options.attributes] Per-instance attributes like a show or color attribute shown in the example below. - * - * - * @example - * // Create geometry for a box, and two instances that refer to it. - * // One instance positions the box on the bottom and colored aqua. - * // The other instance positions the box on the top and color white. - * const geometry = Cesium.BoxGeometry.fromDimensions({ - * vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL, - * dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0) - * }); - * const instanceBottom = new Cesium.GeometryInstance({ - * geometry : geometry, - * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( - * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()), - * attributes : { - * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA) - * }, - * id : 'bottom' - * }); - * const instanceTop = new Cesium.GeometryInstance({ - * geometry : geometry, - * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame( - * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 3000000.0), new Cesium.Matrix4()), - * attributes : { - * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA) - * }, - * id : 'top' - * }); - * - * @see Geometry - */ - function GeometryInstance(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(options.geometry)) { - throw new Check.DeveloperError("options.geometry is required."); - } - //>>includeEnd('debug'); - - /** - * The geometry being instanced. - * - * @type Geometry - * - * @default undefined - */ - this.geometry = options.geometry; - - /** - * The 4x4 transformation matrix that transforms the geometry from model to world coordinates. - * When this is the identity matrix, the geometry is drawn in world coordinates, i.e., Earth's WGS84 coordinates. - * Local reference frames can be used by providing a different transformation matrix, like that returned - * by {@link Transforms.eastNorthUpToFixedFrame}. - * - * @type Matrix4 - * - * @default Matrix4.IDENTITY - */ - this.modelMatrix = Matrix2.Matrix4.clone( - defaultValue.defaultValue(options.modelMatrix, Matrix2.Matrix4.IDENTITY) - ); - - /** - * User-defined object returned when the instance is picked or used to get/set per-instance attributes. - * - * @type Object - * - * @default undefined - * - * @see Scene#pick - * @see Primitive#getGeometryInstanceAttributes - */ - this.id = options.id; - - /** - * Used for picking primitives that wrap geometry instances. - * - * @private - */ - this.pickPrimitive = options.pickPrimitive; - - /** - * Per-instance attributes like {@link ColorGeometryInstanceAttribute} or {@link ShowGeometryInstanceAttribute}. - * {@link Geometry} attributes varying per vertex; these attributes are constant for the entire instance. - * - * @type Object - * - * @default undefined - */ - this.attributes = defaultValue.defaultValue(options.attributes, {}); - - /** - * @private - */ - this.westHemisphereGeometry = undefined; - /** - * @private - */ - this.eastHemisphereGeometry = undefined; - } - - exports.GeometryInstance = GeometryInstance; - -})); -//# sourceMappingURL=GeometryInstance-b2be3e5a.js.map diff --git a/debug/cesium/Workers/GeometryInstance-b2be3e5a.js.map b/debug/cesium/Workers/GeometryInstance-b2be3e5a.js.map deleted file mode 100644 index 368a0ca..0000000 --- a/debug/cesium/Workers/GeometryInstance-b2be3e5a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"GeometryInstance-b2be3e5a.js","sources":["../../../Source/Core/GeometryInstance.js"],"sourcesContent":["import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\n\r\n/**\r\n * Geometry instancing allows one {@link Geometry} object to be positions in several\r\n * different locations and colored uniquely. For example, one {@link BoxGeometry} can\r\n * be instanced several times, each with a different modelMatrix to change\r\n * its position, rotation, and scale.\r\n *\r\n * @alias GeometryInstance\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Geometry|GeometryFactory} options.geometry The geometry to instance.\r\n * @param {Matrix4} [options.modelMatrix=Matrix4.IDENTITY] The model matrix that transforms to transform the geometry from model to world coordinates.\r\n * @param {Object} [options.id] A user-defined object to return when the instance is picked with {@link Scene#pick} or get/set per-instance attributes with {@link Primitive#getGeometryInstanceAttributes}.\r\n * @param {Object} [options.attributes] Per-instance attributes like a show or color attribute shown in the example below.\r\n *\r\n *\r\n * @example\r\n * // Create geometry for a box, and two instances that refer to it.\r\n * // One instance positions the box on the bottom and colored aqua.\r\n * // The other instance positions the box on the top and color white.\r\n * const geometry = Cesium.BoxGeometry.fromDimensions({\r\n * vertexFormat : Cesium.VertexFormat.POSITION_AND_NORMAL,\r\n * dimensions : new Cesium.Cartesian3(1000000.0, 1000000.0, 500000.0)\r\n * });\r\n * const instanceBottom = new Cesium.GeometryInstance({\r\n * geometry : geometry,\r\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\r\n * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 1000000.0), new Cesium.Matrix4()),\r\n * attributes : {\r\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\r\n * },\r\n * id : 'bottom'\r\n * });\r\n * const instanceTop = new Cesium.GeometryInstance({\r\n * geometry : geometry,\r\n * modelMatrix : Cesium.Matrix4.multiplyByTranslation(Cesium.Transforms.eastNorthUpToFixedFrame(\r\n * Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883)), new Cesium.Cartesian3(0.0, 0.0, 3000000.0), new Cesium.Matrix4()),\r\n * attributes : {\r\n * color : Cesium.ColorGeometryInstanceAttribute.fromColor(Cesium.Color.AQUA)\r\n * },\r\n * id : 'top'\r\n * });\r\n *\r\n * @see Geometry\r\n */\r\nfunction GeometryInstance(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(options.geometry)) {\r\n throw new DeveloperError(\"options.geometry is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n /**\r\n * The geometry being instanced.\r\n *\r\n * @type Geometry\r\n *\r\n * @default undefined\r\n */\r\n this.geometry = options.geometry;\r\n\r\n /**\r\n * The 4x4 transformation matrix that transforms the geometry from model to world coordinates.\r\n * When this is the identity matrix, the geometry is drawn in world coordinates, i.e., Earth's WGS84 coordinates.\r\n * Local reference frames can be used by providing a different transformation matrix, like that returned\r\n * by {@link Transforms.eastNorthUpToFixedFrame}.\r\n *\r\n * @type Matrix4\r\n *\r\n * @default Matrix4.IDENTITY\r\n */\r\n this.modelMatrix = Matrix4.clone(\r\n defaultValue(options.modelMatrix, Matrix4.IDENTITY)\r\n );\r\n\r\n /**\r\n * User-defined object returned when the instance is picked or used to get/set per-instance attributes.\r\n *\r\n * @type Object\r\n *\r\n * @default undefined\r\n *\r\n * @see Scene#pick\r\n * @see Primitive#getGeometryInstanceAttributes\r\n */\r\n this.id = options.id;\r\n\r\n /**\r\n * Used for picking primitives that wrap geometry instances.\r\n *\r\n * @private\r\n */\r\n this.pickPrimitive = options.pickPrimitive;\r\n\r\n /**\r\n * Per-instance attributes like {@link ColorGeometryInstanceAttribute} or {@link ShowGeometryInstanceAttribute}.\r\n * {@link Geometry} attributes varying per vertex; these attributes are constant for the entire instance.\r\n *\r\n * @type Object\r\n *\r\n * @default undefined\r\n */\r\n this.attributes = defaultValue(options.attributes, {});\r\n\r\n /**\r\n * @private\r\n */\r\n this.westHemisphereGeometry = undefined;\r\n /**\r\n * @private\r\n */\r\n this.eastHemisphereGeometry = undefined;\r\n}\r\nexport default GeometryInstance;\r\n"],"names":["defaultValue","defined","DeveloperError","Matrix4"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAKA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,gBAAgB,CAAC,OAAO,EAAE;EACnC,EAAE,OAAO,GAAGA,yBAAY,CAAC,OAAO,EAAEA,yBAAY,CAAC,YAAY,CAAC,CAAC;AAC7D;EACA;EACA,EAAE,IAAI,CAACC,oBAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;EAClC,IAAI,MAAM,IAAIC,oBAAc,CAAC,+BAA+B,CAAC,CAAC;EAC9D,GAAG;EACH;AACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;AACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,WAAW,GAAGC,eAAO,CAAC,KAAK;EAClC,IAAIH,yBAAY,CAAC,OAAO,CAAC,WAAW,EAAEG,eAAO,CAAC,QAAQ,CAAC;EACvD,GAAG,CAAC;AACJ;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;AACvB;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;AAC7C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,UAAU,GAAGH,yBAAY,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACzD;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;EAC1C;EACA;EACA;EACA,EAAE,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;EAC1C;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/GeometryOffsetAttribute-cc320d7d.js b/debug/cesium/Workers/GeometryOffsetAttribute-cc320d7d.js deleted file mode 100644 index f88c423..0000000 --- a/debug/cesium/Workers/GeometryOffsetAttribute-cc320d7d.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports'], (function (exports) { 'use strict'; - - /** - * Represents which vertices should have a value of `true` for the `applyOffset` attribute - * @private - */ - const GeometryOffsetAttribute = { - NONE: 0, - TOP: 1, - ALL: 2, - }; - var GeometryOffsetAttribute$1 = Object.freeze(GeometryOffsetAttribute); - - exports.GeometryOffsetAttribute = GeometryOffsetAttribute$1; - -})); -//# sourceMappingURL=GeometryOffsetAttribute-cc320d7d.js.map diff --git a/debug/cesium/Workers/GeometryOffsetAttribute-cc320d7d.js.map b/debug/cesium/Workers/GeometryOffsetAttribute-cc320d7d.js.map deleted file mode 100644 index e7df18f..0000000 --- a/debug/cesium/Workers/GeometryOffsetAttribute-cc320d7d.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"GeometryOffsetAttribute-cc320d7d.js","sources":["../../../Source/Core/GeometryOffsetAttribute.js"],"sourcesContent":["/**\r\n * Represents which vertices should have a value of `true` for the `applyOffset` attribute\r\n * @private\r\n */\r\nconst GeometryOffsetAttribute = {\r\n NONE: 0,\r\n TOP: 1,\r\n ALL: 2,\r\n};\r\nexport default Object.freeze(GeometryOffsetAttribute);\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA,MAAM,uBAAuB,GAAG;EAChC,EAAE,IAAI,EAAE,CAAC;EACT,EAAE,GAAG,EAAE,CAAC;EACR,EAAE,GAAG,EAAE,CAAC;EACR,CAAC,CAAC;AACF,kCAAe,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/GeometryPipeline-f28890f4.js b/debug/cesium/Workers/GeometryPipeline-f28890f4.js deleted file mode 100644 index 503adbc..0000000 --- a/debug/cesium/Workers/GeometryPipeline-f28890f4.js +++ /dev/null @@ -1,3716 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './AttributeCompression-e9888cb8', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918', './Transforms-11fb6b0a', './ComponentDatatype-13a5630b', './EncodedCartesian3-38e2691f', './GeometryAttribute-f2746b95', './IndexDatatype-b4e5cf89', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (exports, AttributeCompression, Matrix2, Matrix3, Check, defaultValue, Math$1, Transforms, ComponentDatatype, EncodedCartesian3, GeometryAttribute, IndexDatatype, IntersectionTests, Plane) { 'use strict'; - - const scratchCartesian1 = new Matrix3.Cartesian3(); - const scratchCartesian2$1 = new Matrix3.Cartesian3(); - const scratchCartesian3$1 = new Matrix3.Cartesian3(); - - /** - * Computes the barycentric coordinates for a point with respect to a triangle. - * - * @function - * - * @param {Cartesian2|Cartesian3} point The point to test. - * @param {Cartesian2|Cartesian3} p0 The first point of the triangle, corresponding to the barycentric x-axis. - * @param {Cartesian2|Cartesian3} p1 The second point of the triangle, corresponding to the barycentric y-axis. - * @param {Cartesian2|Cartesian3} p2 The third point of the triangle, corresponding to the barycentric z-axis. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3|undefined} The modified result parameter or a new Cartesian3 instance if one was not provided. If the triangle is degenerate the function will return undefined. - * - * @example - * // Returns Cartesian3.UNIT_X - * const p = new Cesium.Cartesian3(-1.0, 0.0, 0.0); - * const b = Cesium.barycentricCoordinates(p, - * new Cesium.Cartesian3(-1.0, 0.0, 0.0), - * new Cesium.Cartesian3( 1.0, 0.0, 0.0), - * new Cesium.Cartesian3( 0.0, 1.0, 1.0)); - */ - function barycentricCoordinates(point, p0, p1, p2, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("point", point); - Check.Check.defined("p0", p0); - Check.Check.defined("p1", p1); - Check.Check.defined("p2", p2); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - // Implementation based on http://www.blackpawn.com/texts/pointinpoly/default.html. - let v0; - let v1; - let v2; - let dot00; - let dot01; - let dot02; - let dot11; - let dot12; - - if (!defaultValue.defined(p0.z)) { - if (Matrix2.Cartesian2.equalsEpsilon(point, p0, Math$1.CesiumMath.EPSILON14)) { - return Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_X, result); - } - if (Matrix2.Cartesian2.equalsEpsilon(point, p1, Math$1.CesiumMath.EPSILON14)) { - return Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_Y, result); - } - if (Matrix2.Cartesian2.equalsEpsilon(point, p2, Math$1.CesiumMath.EPSILON14)) { - return Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_Z, result); - } - - v0 = Matrix2.Cartesian2.subtract(p1, p0, scratchCartesian1); - v1 = Matrix2.Cartesian2.subtract(p2, p0, scratchCartesian2$1); - v2 = Matrix2.Cartesian2.subtract(point, p0, scratchCartesian3$1); - - dot00 = Matrix2.Cartesian2.dot(v0, v0); - dot01 = Matrix2.Cartesian2.dot(v0, v1); - dot02 = Matrix2.Cartesian2.dot(v0, v2); - dot11 = Matrix2.Cartesian2.dot(v1, v1); - dot12 = Matrix2.Cartesian2.dot(v1, v2); - } else { - if (Matrix3.Cartesian3.equalsEpsilon(point, p0, Math$1.CesiumMath.EPSILON14)) { - return Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_X, result); - } - if (Matrix3.Cartesian3.equalsEpsilon(point, p1, Math$1.CesiumMath.EPSILON14)) { - return Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_Y, result); - } - if (Matrix3.Cartesian3.equalsEpsilon(point, p2, Math$1.CesiumMath.EPSILON14)) { - return Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_Z, result); - } - - v0 = Matrix3.Cartesian3.subtract(p1, p0, scratchCartesian1); - v1 = Matrix3.Cartesian3.subtract(p2, p0, scratchCartesian2$1); - v2 = Matrix3.Cartesian3.subtract(point, p0, scratchCartesian3$1); - - dot00 = Matrix3.Cartesian3.dot(v0, v0); - dot01 = Matrix3.Cartesian3.dot(v0, v1); - dot02 = Matrix3.Cartesian3.dot(v0, v2); - dot11 = Matrix3.Cartesian3.dot(v1, v1); - dot12 = Matrix3.Cartesian3.dot(v1, v2); - } - - result.y = dot11 * dot02 - dot01 * dot12; - result.z = dot00 * dot12 - dot01 * dot02; - const q = dot00 * dot11 - dot01 * dot01; - - // Triangle is degenerate - if (q === 0) { - return undefined; - } - - result.y /= q; - result.z /= q; - result.x = 1.0 - result.y - result.z; - return result; - } - - /** - * Encapsulates an algorithm to optimize triangles for the post - * vertex-shader cache. This is based on the 2007 SIGGRAPH paper - * 'Fast Triangle Reordering for Vertex Locality and Reduced Overdraw.' - * The runtime is linear but several passes are made. - * - * @namespace Tipsify - * - * @see
    - * Fast Triangle Reordering for Vertex Locality and Reduced Overdraw - * by Sander, Nehab, and Barczak - * - * @private - */ - const Tipsify = {}; - - /** - * Calculates the average cache miss ratio (ACMR) for a given set of indices. - * - * @param {Object} options Object with the following properties: - * @param {Number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices - * in the vertex buffer that define the geometry's triangles. - * @param {Number} [options.maximumIndex] The maximum value of the elements in args.indices. - * If not supplied, this value will be computed. - * @param {Number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time. - * @returns {Number} The average cache miss ratio (ACMR). - * - * @exception {DeveloperError} indices length must be a multiple of three. - * @exception {DeveloperError} cacheSize must be greater than two. - * - * @example - * const indices = [0, 1, 2, 3, 4, 5]; - * const maxIndex = 5; - * const cacheSize = 3; - * const acmr = Cesium.Tipsify.calculateACMR({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize}); - */ - Tipsify.calculateACMR = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const indices = options.indices; - let maximumIndex = options.maximumIndex; - const cacheSize = defaultValue.defaultValue(options.cacheSize, 24); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(indices)) { - throw new Check.DeveloperError("indices is required."); - } - //>>includeEnd('debug'); - - const numIndices = indices.length; - - //>>includeStart('debug', pragmas.debug); - if (numIndices < 3 || numIndices % 3 !== 0) { - throw new Check.DeveloperError("indices length must be a multiple of three."); - } - if (maximumIndex <= 0) { - throw new Check.DeveloperError("maximumIndex must be greater than zero."); - } - if (cacheSize < 3) { - throw new Check.DeveloperError("cacheSize must be greater than two."); - } - //>>includeEnd('debug'); - - // Compute the maximumIndex if not given - if (!defaultValue.defined(maximumIndex)) { - maximumIndex = 0; - let currentIndex = 0; - let intoIndices = indices[currentIndex]; - while (currentIndex < numIndices) { - if (intoIndices > maximumIndex) { - maximumIndex = intoIndices; - } - ++currentIndex; - intoIndices = indices[currentIndex]; - } - } - - // Vertex time stamps - const vertexTimeStamps = []; - for (let i = 0; i < maximumIndex + 1; i++) { - vertexTimeStamps[i] = 0; - } - - // Cache processing - let s = cacheSize + 1; - for (let j = 0; j < numIndices; ++j) { - if (s - vertexTimeStamps[indices[j]] > cacheSize) { - vertexTimeStamps[indices[j]] = s; - ++s; - } - } - - return (s - cacheSize + 1) / (numIndices / 3); - }; - - /** - * Optimizes triangles for the post-vertex shader cache. - * - * @param {Object} options Object with the following properties: - * @param {Number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices - * in the vertex buffer that define the geometry's triangles. - * @param {Number} [options.maximumIndex] The maximum value of the elements in args.indices. - * If not supplied, this value will be computed. - * @param {Number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time. - * @returns {Number[]} A list of the input indices in an optimized order. - * - * @exception {DeveloperError} indices length must be a multiple of three. - * @exception {DeveloperError} cacheSize must be greater than two. - * - * @example - * const indices = [0, 1, 2, 3, 4, 5]; - * const maxIndex = 5; - * const cacheSize = 3; - * const reorderedIndices = Cesium.Tipsify.tipsify({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize}); - */ - Tipsify.tipsify = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const indices = options.indices; - const maximumIndex = options.maximumIndex; - const cacheSize = defaultValue.defaultValue(options.cacheSize, 24); - - let cursor; - - function skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne) { - while (deadEnd.length >= 1) { - // while the stack is not empty - const d = deadEnd[deadEnd.length - 1]; // top of the stack - deadEnd.splice(deadEnd.length - 1, 1); // pop the stack - - if (vertices[d].numLiveTriangles > 0) { - return d; - } - } - - while (cursor < maximumIndexPlusOne) { - if (vertices[cursor].numLiveTriangles > 0) { - ++cursor; - return cursor - 1; - } - ++cursor; - } - return -1; - } - - function getNextVertex( - indices, - cacheSize, - oneRing, - vertices, - s, - deadEnd, - maximumIndexPlusOne - ) { - let n = -1; - let p; - let m = -1; - let itOneRing = 0; - while (itOneRing < oneRing.length) { - const index = oneRing[itOneRing]; - if (vertices[index].numLiveTriangles) { - p = 0; - if ( - s - - vertices[index].timeStamp + - 2 * vertices[index].numLiveTriangles <= - cacheSize - ) { - p = s - vertices[index].timeStamp; - } - if (p > m || m === -1) { - m = p; - n = index; - } - } - ++itOneRing; - } - if (n === -1) { - return skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne); - } - return n; - } - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(indices)) { - throw new Check.DeveloperError("indices is required."); - } - //>>includeEnd('debug'); - - const numIndices = indices.length; - - //>>includeStart('debug', pragmas.debug); - if (numIndices < 3 || numIndices % 3 !== 0) { - throw new Check.DeveloperError("indices length must be a multiple of three."); - } - if (maximumIndex <= 0) { - throw new Check.DeveloperError("maximumIndex must be greater than zero."); - } - if (cacheSize < 3) { - throw new Check.DeveloperError("cacheSize must be greater than two."); - } - //>>includeEnd('debug'); - - // Determine maximum index - let maximumIndexPlusOne = 0; - let currentIndex = 0; - let intoIndices = indices[currentIndex]; - const endIndex = numIndices; - if (defaultValue.defined(maximumIndex)) { - maximumIndexPlusOne = maximumIndex + 1; - } else { - while (currentIndex < endIndex) { - if (intoIndices > maximumIndexPlusOne) { - maximumIndexPlusOne = intoIndices; - } - ++currentIndex; - intoIndices = indices[currentIndex]; - } - if (maximumIndexPlusOne === -1) { - return 0; - } - ++maximumIndexPlusOne; - } - - // Vertices - const vertices = []; - let i; - for (i = 0; i < maximumIndexPlusOne; i++) { - vertices[i] = { - numLiveTriangles: 0, - timeStamp: 0, - vertexTriangles: [], - }; - } - currentIndex = 0; - let triangle = 0; - while (currentIndex < endIndex) { - vertices[indices[currentIndex]].vertexTriangles.push(triangle); - ++vertices[indices[currentIndex]].numLiveTriangles; - vertices[indices[currentIndex + 1]].vertexTriangles.push(triangle); - ++vertices[indices[currentIndex + 1]].numLiveTriangles; - vertices[indices[currentIndex + 2]].vertexTriangles.push(triangle); - ++vertices[indices[currentIndex + 2]].numLiveTriangles; - ++triangle; - currentIndex += 3; - } - - // Starting index - let f = 0; - - // Time Stamp - let s = cacheSize + 1; - cursor = 1; - - // Process - let oneRing = []; - const deadEnd = []; //Stack - let vertex; - let intoVertices; - let currentOutputIndex = 0; - const outputIndices = []; - const numTriangles = numIndices / 3; - const triangleEmitted = []; - for (i = 0; i < numTriangles; i++) { - triangleEmitted[i] = false; - } - let index; - let limit; - while (f !== -1) { - oneRing = []; - intoVertices = vertices[f]; - limit = intoVertices.vertexTriangles.length; - for (let k = 0; k < limit; ++k) { - triangle = intoVertices.vertexTriangles[k]; - if (!triangleEmitted[triangle]) { - triangleEmitted[triangle] = true; - currentIndex = triangle + triangle + triangle; - for (let j = 0; j < 3; ++j) { - // Set this index as a possible next index - index = indices[currentIndex]; - oneRing.push(index); - deadEnd.push(index); - - // Output index - outputIndices[currentOutputIndex] = index; - ++currentOutputIndex; - - // Cache processing - vertex = vertices[index]; - --vertex.numLiveTriangles; - if (s - vertex.timeStamp > cacheSize) { - vertex.timeStamp = s; - ++s; - } - ++currentIndex; - } - } - } - f = getNextVertex( - indices, - cacheSize, - oneRing, - vertices, - s, - deadEnd, - maximumIndexPlusOne - ); - } - - return outputIndices; - }; - var Tipsify$1 = Tipsify; - - /** - * Content pipeline functions for geometries. - * - * @namespace GeometryPipeline - * - * @see Geometry - */ - const GeometryPipeline = {}; - - function addTriangle(lines, index, i0, i1, i2) { - lines[index++] = i0; - lines[index++] = i1; - - lines[index++] = i1; - lines[index++] = i2; - - lines[index++] = i2; - lines[index] = i0; - } - - function trianglesToLines(triangles) { - const count = triangles.length; - const size = (count / 3) * 6; - const lines = IndexDatatype.IndexDatatype.createTypedArray(count, size); - - let index = 0; - for (let i = 0; i < count; i += 3, index += 6) { - addTriangle(lines, index, triangles[i], triangles[i + 1], triangles[i + 2]); - } - - return lines; - } - - function triangleStripToLines(triangles) { - const count = triangles.length; - if (count >= 3) { - const size = (count - 2) * 6; - const lines = IndexDatatype.IndexDatatype.createTypedArray(count, size); - - addTriangle(lines, 0, triangles[0], triangles[1], triangles[2]); - let index = 6; - - for (let i = 3; i < count; ++i, index += 6) { - addTriangle( - lines, - index, - triangles[i - 1], - triangles[i], - triangles[i - 2] - ); - } - - return lines; - } - - return new Uint16Array(); - } - - function triangleFanToLines(triangles) { - if (triangles.length > 0) { - const count = triangles.length - 1; - const size = (count - 1) * 6; - const lines = IndexDatatype.IndexDatatype.createTypedArray(count, size); - - const base = triangles[0]; - let index = 0; - for (let i = 1; i < count; ++i, index += 6) { - addTriangle(lines, index, base, triangles[i], triangles[i + 1]); - } - - return lines; - } - - return new Uint16Array(); - } - - /** - * Converts a geometry's triangle indices to line indices. If the geometry has an indices - * and its primitiveType is TRIANGLES, TRIANGLE_STRIP, - * TRIANGLE_FAN, it is converted to LINES; otherwise, the geometry is not changed. - *

    - * This is commonly used to create a wireframe geometry for visual debugging. - *

    - * - * @param {Geometry} geometry The geometry to modify. - * @returns {Geometry} The modified geometry argument, with its triangle indices converted to lines. - * - * @exception {DeveloperError} geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN. - * - * @example - * geometry = Cesium.GeometryPipeline.toWireframe(geometry); - */ - GeometryPipeline.toWireframe = function (geometry) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - //>>includeEnd('debug'); - - const indices = geometry.indices; - if (defaultValue.defined(indices)) { - switch (geometry.primitiveType) { - case GeometryAttribute.PrimitiveType.TRIANGLES: - geometry.indices = trianglesToLines(indices); - break; - case GeometryAttribute.PrimitiveType.TRIANGLE_STRIP: - geometry.indices = triangleStripToLines(indices); - break; - case GeometryAttribute.PrimitiveType.TRIANGLE_FAN: - geometry.indices = triangleFanToLines(indices); - break; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError( - "geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN." - ); - //>>includeEnd('debug'); - } - - geometry.primitiveType = GeometryAttribute.PrimitiveType.LINES; - } - - return geometry; - }; - - /** - * Creates a new {@link Geometry} with LINES representing the provided - * attribute (attributeName) for the provided geometry. This is used to - * visualize vector attributes like normals, tangents, and bitangents. - * - * @param {Geometry} geometry The Geometry instance with the attribute. - * @param {String} [attributeName='normal'] The name of the attribute. - * @param {Number} [length=10000.0] The length of each line segment in meters. This can be negative to point the vector in the opposite direction. - * @returns {Geometry} A new Geometry instance with line segments for the vector. - * - * @exception {DeveloperError} geometry.attributes must have an attribute with the same name as the attributeName parameter. - * - * @example - * const geometry = Cesium.GeometryPipeline.createLineSegmentsForVectors(instance.geometry, 'bitangent', 100000.0); - */ - GeometryPipeline.createLineSegmentsForVectors = function ( - geometry, - attributeName, - length - ) { - attributeName = defaultValue.defaultValue(attributeName, "normal"); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - if (!defaultValue.defined(geometry.attributes.position)) { - throw new Check.DeveloperError("geometry.attributes.position is required."); - } - if (!defaultValue.defined(geometry.attributes[attributeName])) { - throw new Check.DeveloperError( - `geometry.attributes must have an attribute with the same name as the attributeName parameter, ${attributeName}.` - ); - } - //>>includeEnd('debug'); - - length = defaultValue.defaultValue(length, 10000.0); - - const positions = geometry.attributes.position.values; - const vectors = geometry.attributes[attributeName].values; - const positionsLength = positions.length; - - const newPositions = new Float64Array(2 * positionsLength); - - let j = 0; - for (let i = 0; i < positionsLength; i += 3) { - newPositions[j++] = positions[i]; - newPositions[j++] = positions[i + 1]; - newPositions[j++] = positions[i + 2]; - - newPositions[j++] = positions[i] + vectors[i] * length; - newPositions[j++] = positions[i + 1] + vectors[i + 1] * length; - newPositions[j++] = positions[i + 2] + vectors[i + 2] * length; - } - - let newBoundingSphere; - const bs = geometry.boundingSphere; - if (defaultValue.defined(bs)) { - newBoundingSphere = new Transforms.BoundingSphere(bs.center, bs.radius + length); - } - - return new GeometryAttribute.Geometry({ - attributes: { - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: newPositions, - }), - }, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: newBoundingSphere, - }); - }; - - /** - * Creates an object that maps attribute names to unique locations (indices) - * for matching vertex attributes and shader programs. - * - * @param {Geometry} geometry The geometry, which is not modified, to create the object for. - * @returns {Object} An object with attribute name / index pairs. - * - * @example - * const attributeLocations = Cesium.GeometryPipeline.createAttributeLocations(geometry); - * // Example output - * // { - * // 'position' : 0, - * // 'normal' : 1 - * // } - */ - GeometryPipeline.createAttributeLocations = function (geometry) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - //>>includeEnd('debug') - - // There can be a WebGL performance hit when attribute 0 is disabled, so - // assign attribute locations to well-known attributes. - const semantics = [ - "position", - "positionHigh", - "positionLow", - - // From VertexFormat.position - after 2D projection and high-precision encoding - "position3DHigh", - "position3DLow", - "position2DHigh", - "position2DLow", - - // From Primitive - "pickColor", - - // From VertexFormat - "normal", - "st", - "tangent", - "bitangent", - - // For shadow volumes - "extrudeDirection", - - // From compressing texture coordinates and normals - "compressedAttributes", - ]; - - const attributes = geometry.attributes; - const indices = {}; - let j = 0; - let i; - const len = semantics.length; - - // Attribute locations for well-known attributes - for (i = 0; i < len; ++i) { - const semantic = semantics[i]; - - if (defaultValue.defined(attributes[semantic])) { - indices[semantic] = j++; - } - } - - // Locations for custom attributes - for (const name in attributes) { - if (attributes.hasOwnProperty(name) && !defaultValue.defined(indices[name])) { - indices[name] = j++; - } - } - - return indices; - }; - - /** - * Reorders a geometry's attributes and indices to achieve better performance from the GPU's pre-vertex-shader cache. - * - * @param {Geometry} geometry The geometry to modify. - * @returns {Geometry} The modified geometry argument, with its attributes and indices reordered for the GPU's pre-vertex-shader cache. - * - * @exception {DeveloperError} Each attribute array in geometry.attributes must have the same number of attributes. - * - * - * @example - * geometry = Cesium.GeometryPipeline.reorderForPreVertexCache(geometry); - * - * @see GeometryPipeline.reorderForPostVertexCache - */ - GeometryPipeline.reorderForPreVertexCache = function (geometry) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - //>>includeEnd('debug'); - - const numVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - - const indices = geometry.indices; - if (defaultValue.defined(indices)) { - const indexCrossReferenceOldToNew = new Int32Array(numVertices); - for (let i = 0; i < numVertices; i++) { - indexCrossReferenceOldToNew[i] = -1; - } - - // Construct cross reference and reorder indices - const indicesIn = indices; - const numIndices = indicesIn.length; - const indicesOut = IndexDatatype.IndexDatatype.createTypedArray(numVertices, numIndices); - - let intoIndicesIn = 0; - let intoIndicesOut = 0; - let nextIndex = 0; - let tempIndex; - while (intoIndicesIn < numIndices) { - tempIndex = indexCrossReferenceOldToNew[indicesIn[intoIndicesIn]]; - if (tempIndex !== -1) { - indicesOut[intoIndicesOut] = tempIndex; - } else { - tempIndex = indicesIn[intoIndicesIn]; - indexCrossReferenceOldToNew[tempIndex] = nextIndex; - - indicesOut[intoIndicesOut] = nextIndex; - ++nextIndex; - } - ++intoIndicesIn; - ++intoIndicesOut; - } - geometry.indices = indicesOut; - - // Reorder attributes - const attributes = geometry.attributes; - for (const property in attributes) { - if ( - attributes.hasOwnProperty(property) && - defaultValue.defined(attributes[property]) && - defaultValue.defined(attributes[property].values) - ) { - const attribute = attributes[property]; - const elementsIn = attribute.values; - let intoElementsIn = 0; - const numComponents = attribute.componentsPerAttribute; - const elementsOut = ComponentDatatype.ComponentDatatype.createTypedArray( - attribute.componentDatatype, - nextIndex * numComponents - ); - while (intoElementsIn < numVertices) { - const temp = indexCrossReferenceOldToNew[intoElementsIn]; - if (temp !== -1) { - for (let j = 0; j < numComponents; j++) { - elementsOut[numComponents * temp + j] = - elementsIn[numComponents * intoElementsIn + j]; - } - } - ++intoElementsIn; - } - attribute.values = elementsOut; - } - } - } - - return geometry; - }; - - /** - * Reorders a geometry's indices to achieve better performance from the GPU's - * post vertex-shader cache by using the Tipsify algorithm. If the geometry primitiveType - * is not TRIANGLES or the geometry does not have an indices, this function has no effect. - * - * @param {Geometry} geometry The geometry to modify. - * @param {Number} [cacheCapacity=24] The number of vertices that can be held in the GPU's vertex cache. - * @returns {Geometry} The modified geometry argument, with its indices reordered for the post-vertex-shader cache. - * - * @exception {DeveloperError} cacheCapacity must be greater than two. - * - * - * @example - * geometry = Cesium.GeometryPipeline.reorderForPostVertexCache(geometry); - * - * @see GeometryPipeline.reorderForPreVertexCache - * @see {@link http://gfx.cs.princ0eton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf|Fast Triangle Reordering for Vertex Locality and Reduced Overdraw} - * by Sander, Nehab, and Barczak - */ - GeometryPipeline.reorderForPostVertexCache = function ( - geometry, - cacheCapacity - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - //>>includeEnd('debug'); - - const indices = geometry.indices; - if (geometry.primitiveType === GeometryAttribute.PrimitiveType.TRIANGLES && defaultValue.defined(indices)) { - const numIndices = indices.length; - let maximumIndex = 0; - for (let j = 0; j < numIndices; j++) { - if (indices[j] > maximumIndex) { - maximumIndex = indices[j]; - } - } - geometry.indices = Tipsify$1.tipsify({ - indices: indices, - maximumIndex: maximumIndex, - cacheSize: cacheCapacity, - }); - } - - return geometry; - }; - - function copyAttributesDescriptions(attributes) { - const newAttributes = {}; - - for (const attribute in attributes) { - if ( - attributes.hasOwnProperty(attribute) && - defaultValue.defined(attributes[attribute]) && - defaultValue.defined(attributes[attribute].values) - ) { - const attr = attributes[attribute]; - newAttributes[attribute] = new GeometryAttribute.GeometryAttribute({ - componentDatatype: attr.componentDatatype, - componentsPerAttribute: attr.componentsPerAttribute, - normalize: attr.normalize, - values: [], - }); - } - } - - return newAttributes; - } - - function copyVertex(destinationAttributes, sourceAttributes, index) { - for (const attribute in sourceAttributes) { - if ( - sourceAttributes.hasOwnProperty(attribute) && - defaultValue.defined(sourceAttributes[attribute]) && - defaultValue.defined(sourceAttributes[attribute].values) - ) { - const attr = sourceAttributes[attribute]; - - for (let k = 0; k < attr.componentsPerAttribute; ++k) { - destinationAttributes[attribute].values.push( - attr.values[index * attr.componentsPerAttribute + k] - ); - } - } - } - } - - /** - * Splits a geometry into multiple geometries, if necessary, to ensure that indices in the - * indices fit into unsigned shorts. This is used to meet the WebGL requirements - * when unsigned int indices are not supported. - *

    - * If the geometry does not have any indices, this function has no effect. - *

    - * - * @param {Geometry} geometry The geometry to be split into multiple geometries. - * @returns {Geometry[]} An array of geometries, each with indices that fit into unsigned shorts. - * - * @exception {DeveloperError} geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS - * @exception {DeveloperError} All geometry attribute lists must have the same number of attributes. - * - * @example - * const geometries = Cesium.GeometryPipeline.fitToUnsignedShortIndices(geometry); - */ - GeometryPipeline.fitToUnsignedShortIndices = function (geometry) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - if ( - defaultValue.defined(geometry.indices) && - geometry.primitiveType !== GeometryAttribute.PrimitiveType.TRIANGLES && - geometry.primitiveType !== GeometryAttribute.PrimitiveType.LINES && - geometry.primitiveType !== GeometryAttribute.PrimitiveType.POINTS - ) { - throw new Check.DeveloperError( - "geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS." - ); - } - //>>includeEnd('debug'); - - const geometries = []; - - // If there's an index list and more than 64K attributes, it is possible that - // some indices are outside the range of unsigned short [0, 64K - 1] - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - if ( - defaultValue.defined(geometry.indices) && - numberOfVertices >= Math$1.CesiumMath.SIXTY_FOUR_KILOBYTES - ) { - let oldToNewIndex = []; - let newIndices = []; - let currentIndex = 0; - let newAttributes = copyAttributesDescriptions(geometry.attributes); - - const originalIndices = geometry.indices; - const numberOfIndices = originalIndices.length; - - let indicesPerPrimitive; - - if (geometry.primitiveType === GeometryAttribute.PrimitiveType.TRIANGLES) { - indicesPerPrimitive = 3; - } else if (geometry.primitiveType === GeometryAttribute.PrimitiveType.LINES) { - indicesPerPrimitive = 2; - } else if (geometry.primitiveType === GeometryAttribute.PrimitiveType.POINTS) { - indicesPerPrimitive = 1; - } - - for (let j = 0; j < numberOfIndices; j += indicesPerPrimitive) { - for (let k = 0; k < indicesPerPrimitive; ++k) { - const x = originalIndices[j + k]; - let i = oldToNewIndex[x]; - if (!defaultValue.defined(i)) { - i = currentIndex++; - oldToNewIndex[x] = i; - copyVertex(newAttributes, geometry.attributes, x); - } - newIndices.push(i); - } - - if ( - currentIndex + indicesPerPrimitive >= - Math$1.CesiumMath.SIXTY_FOUR_KILOBYTES - ) { - geometries.push( - new GeometryAttribute.Geometry({ - attributes: newAttributes, - indices: newIndices, - primitiveType: geometry.primitiveType, - boundingSphere: geometry.boundingSphere, - boundingSphereCV: geometry.boundingSphereCV, - }) - ); - - // Reset for next vertex-array - oldToNewIndex = []; - newIndices = []; - currentIndex = 0; - newAttributes = copyAttributesDescriptions(geometry.attributes); - } - } - - if (newIndices.length !== 0) { - geometries.push( - new GeometryAttribute.Geometry({ - attributes: newAttributes, - indices: newIndices, - primitiveType: geometry.primitiveType, - boundingSphere: geometry.boundingSphere, - boundingSphereCV: geometry.boundingSphereCV, - }) - ); - } - } else { - // No need to split into multiple geometries - geometries.push(geometry); - } - - return geometries; - }; - - const scratchProjectTo2DCartesian3 = new Matrix3.Cartesian3(); - const scratchProjectTo2DCartographic = new Matrix3.Cartographic(); - - /** - * Projects a geometry's 3D position attribute to 2D, replacing the position - * attribute with separate position3D and position2D attributes. - *

    - * If the geometry does not have a position, this function has no effect. - *

    - * - * @param {Geometry} geometry The geometry to modify. - * @param {String} attributeName The name of the attribute. - * @param {String} attributeName3D The name of the attribute in 3D. - * @param {String} attributeName2D The name of the attribute in 2D. - * @param {Object} [projection=new GeographicProjection()] The projection to use. - * @returns {Geometry} The modified geometry argument with position3D and position2D attributes. - * - * @exception {DeveloperError} geometry must have attribute matching the attributeName argument. - * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE. - * @exception {DeveloperError} Could not project a point to 2D. - * - * @example - * geometry = Cesium.GeometryPipeline.projectTo2D(geometry, 'position', 'position3D', 'position2D'); - */ - GeometryPipeline.projectTo2D = function ( - geometry, - attributeName, - attributeName3D, - attributeName2D, - projection - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - if (!defaultValue.defined(attributeName)) { - throw new Check.DeveloperError("attributeName is required."); - } - if (!defaultValue.defined(attributeName3D)) { - throw new Check.DeveloperError("attributeName3D is required."); - } - if (!defaultValue.defined(attributeName2D)) { - throw new Check.DeveloperError("attributeName2D is required."); - } - if (!defaultValue.defined(geometry.attributes[attributeName])) { - throw new Check.DeveloperError( - `geometry must have attribute matching the attributeName argument: ${attributeName}.` - ); - } - if ( - geometry.attributes[attributeName].componentDatatype !== - ComponentDatatype.ComponentDatatype.DOUBLE - ) { - throw new Check.DeveloperError( - "The attribute componentDatatype must be ComponentDatatype.DOUBLE." - ); - } - //>>includeEnd('debug'); - - const attribute = geometry.attributes[attributeName]; - projection = defaultValue.defined(projection) ? projection : new Transforms.GeographicProjection(); - const ellipsoid = projection.ellipsoid; - - // Project original values to 2D. - const values3D = attribute.values; - const projectedValues = new Float64Array(values3D.length); - let index = 0; - - for (let i = 0; i < values3D.length; i += 3) { - const value = Matrix3.Cartesian3.fromArray( - values3D, - i, - scratchProjectTo2DCartesian3 - ); - - const lonLat = ellipsoid.cartesianToCartographic( - value, - scratchProjectTo2DCartographic - ); - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(lonLat)) { - throw new Check.DeveloperError( - `Could not project point (${value.x}, ${value.y}, ${value.z}) to 2D.` - ); - } - //>>includeEnd('debug'); - - const projectedLonLat = projection.project( - lonLat, - scratchProjectTo2DCartesian3 - ); - - projectedValues[index++] = projectedLonLat.x; - projectedValues[index++] = projectedLonLat.y; - projectedValues[index++] = projectedLonLat.z; - } - - // Rename original cartesians to WGS84 cartesians. - geometry.attributes[attributeName3D] = attribute; - - // Replace original cartesians with 2D projected cartesians - geometry.attributes[attributeName2D] = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: projectedValues, - }); - delete geometry.attributes[attributeName]; - - return geometry; - }; - - const encodedResult = { - high: 0.0, - low: 0.0, - }; - - /** - * Encodes floating-point geometry attribute values as two separate attributes to improve - * rendering precision. - *

    - * This is commonly used to create high-precision position vertex attributes. - *

    - * - * @param {Geometry} geometry The geometry to modify. - * @param {String} attributeName The name of the attribute. - * @param {String} attributeHighName The name of the attribute for the encoded high bits. - * @param {String} attributeLowName The name of the attribute for the encoded low bits. - * @returns {Geometry} The modified geometry argument, with its encoded attribute. - * - * @exception {DeveloperError} geometry must have attribute matching the attributeName argument. - * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE. - * - * @example - * geometry = Cesium.GeometryPipeline.encodeAttribute(geometry, 'position3D', 'position3DHigh', 'position3DLow'); - */ - GeometryPipeline.encodeAttribute = function ( - geometry, - attributeName, - attributeHighName, - attributeLowName - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - if (!defaultValue.defined(attributeName)) { - throw new Check.DeveloperError("attributeName is required."); - } - if (!defaultValue.defined(attributeHighName)) { - throw new Check.DeveloperError("attributeHighName is required."); - } - if (!defaultValue.defined(attributeLowName)) { - throw new Check.DeveloperError("attributeLowName is required."); - } - if (!defaultValue.defined(geometry.attributes[attributeName])) { - throw new Check.DeveloperError( - `geometry must have attribute matching the attributeName argument: ${attributeName}.` - ); - } - if ( - geometry.attributes[attributeName].componentDatatype !== - ComponentDatatype.ComponentDatatype.DOUBLE - ) { - throw new Check.DeveloperError( - "The attribute componentDatatype must be ComponentDatatype.DOUBLE." - ); - } - //>>includeEnd('debug'); - - const attribute = geometry.attributes[attributeName]; - const values = attribute.values; - const length = values.length; - const highValues = new Float32Array(length); - const lowValues = new Float32Array(length); - - for (let i = 0; i < length; ++i) { - EncodedCartesian3.EncodedCartesian3.encode(values[i], encodedResult); - highValues[i] = encodedResult.high; - lowValues[i] = encodedResult.low; - } - - const componentsPerAttribute = attribute.componentsPerAttribute; - - geometry.attributes[attributeHighName] = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: componentsPerAttribute, - values: highValues, - }); - geometry.attributes[attributeLowName] = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: componentsPerAttribute, - values: lowValues, - }); - delete geometry.attributes[attributeName]; - - return geometry; - }; - - let scratchCartesian3 = new Matrix3.Cartesian3(); - - function transformPoint(matrix, attribute) { - if (defaultValue.defined(attribute)) { - const values = attribute.values; - const length = values.length; - for (let i = 0; i < length; i += 3) { - Matrix3.Cartesian3.unpack(values, i, scratchCartesian3); - Matrix2.Matrix4.multiplyByPoint(matrix, scratchCartesian3, scratchCartesian3); - Matrix3.Cartesian3.pack(scratchCartesian3, values, i); - } - } - } - - function transformVector(matrix, attribute) { - if (defaultValue.defined(attribute)) { - const values = attribute.values; - const length = values.length; - for (let i = 0; i < length; i += 3) { - Matrix3.Cartesian3.unpack(values, i, scratchCartesian3); - Matrix3.Matrix3.multiplyByVector(matrix, scratchCartesian3, scratchCartesian3); - scratchCartesian3 = Matrix3.Cartesian3.normalize( - scratchCartesian3, - scratchCartesian3 - ); - Matrix3.Cartesian3.pack(scratchCartesian3, values, i); - } - } - } - - const inverseTranspose = new Matrix2.Matrix4(); - const normalMatrix = new Matrix3.Matrix3(); - - /** - * Transforms a geometry instance to world coordinates. This changes - * the instance's modelMatrix to {@link Matrix4.IDENTITY} and transforms the - * following attributes if they are present: position, normal, - * tangent, and bitangent. - * - * @param {GeometryInstance} instance The geometry instance to modify. - * @returns {GeometryInstance} The modified instance argument, with its attributes transforms to world coordinates. - * - * @example - * Cesium.GeometryPipeline.transformToWorldCoordinates(instance); - */ - GeometryPipeline.transformToWorldCoordinates = function (instance) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(instance)) { - throw new Check.DeveloperError("instance is required."); - } - //>>includeEnd('debug'); - - const modelMatrix = instance.modelMatrix; - - if (Matrix2.Matrix4.equals(modelMatrix, Matrix2.Matrix4.IDENTITY)) { - // Already in world coordinates - return instance; - } - - const attributes = instance.geometry.attributes; - - // Transform attributes in known vertex formats - transformPoint(modelMatrix, attributes.position); - transformPoint(modelMatrix, attributes.prevPosition); - transformPoint(modelMatrix, attributes.nextPosition); - - if ( - defaultValue.defined(attributes.normal) || - defaultValue.defined(attributes.tangent) || - defaultValue.defined(attributes.bitangent) - ) { - Matrix2.Matrix4.inverse(modelMatrix, inverseTranspose); - Matrix2.Matrix4.transpose(inverseTranspose, inverseTranspose); - Matrix2.Matrix4.getMatrix3(inverseTranspose, normalMatrix); - - transformVector(normalMatrix, attributes.normal); - transformVector(normalMatrix, attributes.tangent); - transformVector(normalMatrix, attributes.bitangent); - } - - const boundingSphere = instance.geometry.boundingSphere; - if (defaultValue.defined(boundingSphere)) { - instance.geometry.boundingSphere = Transforms.BoundingSphere.transform( - boundingSphere, - modelMatrix, - boundingSphere - ); - } - - instance.modelMatrix = Matrix2.Matrix4.clone(Matrix2.Matrix4.IDENTITY); - - return instance; - }; - - function findAttributesInAllGeometries(instances, propertyName) { - const length = instances.length; - - const attributesInAllGeometries = {}; - - const attributes0 = instances[0][propertyName].attributes; - let name; - - for (name in attributes0) { - if ( - attributes0.hasOwnProperty(name) && - defaultValue.defined(attributes0[name]) && - defaultValue.defined(attributes0[name].values) - ) { - const attribute = attributes0[name]; - let numberOfComponents = attribute.values.length; - let inAllGeometries = true; - - // Does this same attribute exist in all geometries? - for (let i = 1; i < length; ++i) { - const otherAttribute = instances[i][propertyName].attributes[name]; - - if ( - !defaultValue.defined(otherAttribute) || - attribute.componentDatatype !== otherAttribute.componentDatatype || - attribute.componentsPerAttribute !== - otherAttribute.componentsPerAttribute || - attribute.normalize !== otherAttribute.normalize - ) { - inAllGeometries = false; - break; - } - - numberOfComponents += otherAttribute.values.length; - } - - if (inAllGeometries) { - attributesInAllGeometries[name] = new GeometryAttribute.GeometryAttribute({ - componentDatatype: attribute.componentDatatype, - componentsPerAttribute: attribute.componentsPerAttribute, - normalize: attribute.normalize, - values: ComponentDatatype.ComponentDatatype.createTypedArray( - attribute.componentDatatype, - numberOfComponents - ), - }); - } - } - } - - return attributesInAllGeometries; - } - - const tempScratch = new Matrix3.Cartesian3(); - - function combineGeometries(instances, propertyName) { - const length = instances.length; - - let name; - let i; - let j; - let k; - - const m = instances[0].modelMatrix; - const haveIndices = defaultValue.defined(instances[0][propertyName].indices); - const primitiveType = instances[0][propertyName].primitiveType; - - //>>includeStart('debug', pragmas.debug); - for (i = 1; i < length; ++i) { - if (!Matrix2.Matrix4.equals(instances[i].modelMatrix, m)) { - throw new Check.DeveloperError("All instances must have the same modelMatrix."); - } - if (defaultValue.defined(instances[i][propertyName].indices) !== haveIndices) { - throw new Check.DeveloperError( - "All instance geometries must have an indices or not have one." - ); - } - if (instances[i][propertyName].primitiveType !== primitiveType) { - throw new Check.DeveloperError( - "All instance geometries must have the same primitiveType." - ); - } - } - //>>includeEnd('debug'); - - // Find subset of attributes in all geometries - const attributes = findAttributesInAllGeometries(instances, propertyName); - let values; - let sourceValues; - let sourceValuesLength; - - // Combine attributes from each geometry into a single typed array - for (name in attributes) { - if (attributes.hasOwnProperty(name)) { - values = attributes[name].values; - - k = 0; - for (i = 0; i < length; ++i) { - sourceValues = instances[i][propertyName].attributes[name].values; - sourceValuesLength = sourceValues.length; - - for (j = 0; j < sourceValuesLength; ++j) { - values[k++] = sourceValues[j]; - } - } - } - } - - // Combine index lists - let indices; - - if (haveIndices) { - let numberOfIndices = 0; - for (i = 0; i < length; ++i) { - numberOfIndices += instances[i][propertyName].indices.length; - } - - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices( - new GeometryAttribute.Geometry({ - attributes: attributes, - primitiveType: GeometryAttribute.PrimitiveType.POINTS, - }) - ); - const destIndices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfVertices, - numberOfIndices - ); - - let destOffset = 0; - let offset = 0; - - for (i = 0; i < length; ++i) { - const sourceIndices = instances[i][propertyName].indices; - const sourceIndicesLen = sourceIndices.length; - - for (k = 0; k < sourceIndicesLen; ++k) { - destIndices[destOffset++] = offset + sourceIndices[k]; - } - - offset += GeometryAttribute.Geometry.computeNumberOfVertices(instances[i][propertyName]); - } - - indices = destIndices; - } - - // Create bounding sphere that includes all instances - let center = new Matrix3.Cartesian3(); - let radius = 0.0; - let bs; - - for (i = 0; i < length; ++i) { - bs = instances[i][propertyName].boundingSphere; - if (!defaultValue.defined(bs)) { - // If any geometries have an undefined bounding sphere, then so does the combined geometry - center = undefined; - break; - } - - Matrix3.Cartesian3.add(bs.center, center, center); - } - - if (defaultValue.defined(center)) { - Matrix3.Cartesian3.divideByScalar(center, length, center); - - for (i = 0; i < length; ++i) { - bs = instances[i][propertyName].boundingSphere; - const tempRadius = - Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.subtract(bs.center, center, tempScratch) - ) + bs.radius; - - if (tempRadius > radius) { - radius = tempRadius; - } - } - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: primitiveType, - boundingSphere: defaultValue.defined(center) - ? new Transforms.BoundingSphere(center, radius) - : undefined, - }); - } - - /** - * Combines geometry from several {@link GeometryInstance} objects into one geometry. - * This concatenates the attributes, concatenates and adjusts the indices, and creates - * a bounding sphere encompassing all instances. - *

    - * If the instances do not have the same attributes, a subset of attributes common - * to all instances is used, and the others are ignored. - *

    - *

    - * This is used by {@link Primitive} to efficiently render a large amount of static data. - *

    - * - * @private - * - * @param {GeometryInstance[]} [instances] The array of {@link GeometryInstance} objects whose geometry will be combined. - * @returns {Geometry} A single geometry created from the provided geometry instances. - * - * @exception {DeveloperError} All instances must have the same modelMatrix. - * @exception {DeveloperError} All instance geometries must have an indices or not have one. - * @exception {DeveloperError} All instance geometries must have the same primitiveType. - * - * - * @example - * for (let i = 0; i < instances.length; ++i) { - * Cesium.GeometryPipeline.transformToWorldCoordinates(instances[i]); - * } - * const geometries = Cesium.GeometryPipeline.combineInstances(instances); - * - * @see GeometryPipeline.transformToWorldCoordinates - */ - GeometryPipeline.combineInstances = function (instances) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(instances) || instances.length < 1) { - throw new Check.DeveloperError( - "instances is required and must have length greater than zero." - ); - } - //>>includeEnd('debug'); - - const instanceGeometry = []; - const instanceSplitGeometry = []; - const length = instances.length; - for (let i = 0; i < length; ++i) { - const instance = instances[i]; - - if (defaultValue.defined(instance.geometry)) { - instanceGeometry.push(instance); - } else if ( - defaultValue.defined(instance.westHemisphereGeometry) && - defaultValue.defined(instance.eastHemisphereGeometry) - ) { - instanceSplitGeometry.push(instance); - } - } - - const geometries = []; - if (instanceGeometry.length > 0) { - geometries.push(combineGeometries(instanceGeometry, "geometry")); - } - - if (instanceSplitGeometry.length > 0) { - geometries.push( - combineGeometries(instanceSplitGeometry, "westHemisphereGeometry") - ); - geometries.push( - combineGeometries(instanceSplitGeometry, "eastHemisphereGeometry") - ); - } - - return geometries; - }; - - const normal = new Matrix3.Cartesian3(); - const v0 = new Matrix3.Cartesian3(); - const v1 = new Matrix3.Cartesian3(); - const v2 = new Matrix3.Cartesian3(); - - /** - * Computes per-vertex normals for a geometry containing TRIANGLES by averaging the normals of - * all triangles incident to the vertex. The result is a new normal attribute added to the geometry. - * This assumes a counter-clockwise winding order. - * - * @param {Geometry} geometry The geometry to modify. - * @returns {Geometry} The modified geometry argument with the computed normal attribute. - * - * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3. - * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}. - * - * @example - * Cesium.GeometryPipeline.computeNormal(geometry); - */ - GeometryPipeline.computeNormal = function (geometry) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - if ( - !defaultValue.defined(geometry.attributes.position) || - !defaultValue.defined(geometry.attributes.position.values) - ) { - throw new Check.DeveloperError( - "geometry.attributes.position.values is required." - ); - } - if (!defaultValue.defined(geometry.indices)) { - throw new Check.DeveloperError("geometry.indices is required."); - } - if (geometry.indices.length < 2 || geometry.indices.length % 3 !== 0) { - throw new Check.DeveloperError( - "geometry.indices length must be greater than 0 and be a multiple of 3." - ); - } - if (geometry.primitiveType !== GeometryAttribute.PrimitiveType.TRIANGLES) { - throw new Check.DeveloperError( - "geometry.primitiveType must be PrimitiveType.TRIANGLES." - ); - } - //>>includeEnd('debug'); - - const indices = geometry.indices; - const attributes = geometry.attributes; - const vertices = attributes.position.values; - const numVertices = attributes.position.values.length / 3; - const numIndices = indices.length; - const normalsPerVertex = new Array(numVertices); - const normalsPerTriangle = new Array(numIndices / 3); - const normalIndices = new Array(numIndices); - let i; - for (i = 0; i < numVertices; i++) { - normalsPerVertex[i] = { - indexOffset: 0, - count: 0, - currentCount: 0, - }; - } - - let j = 0; - for (i = 0; i < numIndices; i += 3) { - const i0 = indices[i]; - const i1 = indices[i + 1]; - const i2 = indices[i + 2]; - const i03 = i0 * 3; - const i13 = i1 * 3; - const i23 = i2 * 3; - - v0.x = vertices[i03]; - v0.y = vertices[i03 + 1]; - v0.z = vertices[i03 + 2]; - v1.x = vertices[i13]; - v1.y = vertices[i13 + 1]; - v1.z = vertices[i13 + 2]; - v2.x = vertices[i23]; - v2.y = vertices[i23 + 1]; - v2.z = vertices[i23 + 2]; - - normalsPerVertex[i0].count++; - normalsPerVertex[i1].count++; - normalsPerVertex[i2].count++; - - Matrix3.Cartesian3.subtract(v1, v0, v1); - Matrix3.Cartesian3.subtract(v2, v0, v2); - normalsPerTriangle[j] = Matrix3.Cartesian3.cross(v1, v2, new Matrix3.Cartesian3()); - j++; - } - - let indexOffset = 0; - for (i = 0; i < numVertices; i++) { - normalsPerVertex[i].indexOffset += indexOffset; - indexOffset += normalsPerVertex[i].count; - } - - j = 0; - let vertexNormalData; - for (i = 0; i < numIndices; i += 3) { - vertexNormalData = normalsPerVertex[indices[i]]; - let index = vertexNormalData.indexOffset + vertexNormalData.currentCount; - normalIndices[index] = j; - vertexNormalData.currentCount++; - - vertexNormalData = normalsPerVertex[indices[i + 1]]; - index = vertexNormalData.indexOffset + vertexNormalData.currentCount; - normalIndices[index] = j; - vertexNormalData.currentCount++; - - vertexNormalData = normalsPerVertex[indices[i + 2]]; - index = vertexNormalData.indexOffset + vertexNormalData.currentCount; - normalIndices[index] = j; - vertexNormalData.currentCount++; - - j++; - } - - const normalValues = new Float32Array(numVertices * 3); - for (i = 0; i < numVertices; i++) { - const i3 = i * 3; - vertexNormalData = normalsPerVertex[i]; - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, normal); - if (vertexNormalData.count > 0) { - for (j = 0; j < vertexNormalData.count; j++) { - Matrix3.Cartesian3.add( - normal, - normalsPerTriangle[normalIndices[vertexNormalData.indexOffset + j]], - normal - ); - } - - // We can run into an issue where a vertex is used with 2 primitives that have opposite winding order. - if ( - Matrix3.Cartesian3.equalsEpsilon(Matrix3.Cartesian3.ZERO, normal, Math$1.CesiumMath.EPSILON10) - ) { - Matrix3.Cartesian3.clone( - normalsPerTriangle[normalIndices[vertexNormalData.indexOffset]], - normal - ); - } - } - - // We end up with a zero vector probably because of a degenerate triangle - if ( - Matrix3.Cartesian3.equalsEpsilon(Matrix3.Cartesian3.ZERO, normal, Math$1.CesiumMath.EPSILON10) - ) { - // Default to (0,0,1) - normal.z = 1.0; - } - - Matrix3.Cartesian3.normalize(normal, normal); - normalValues[i3] = normal.x; - normalValues[i3 + 1] = normal.y; - normalValues[i3 + 2] = normal.z; - } - - geometry.attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normalValues, - }); - - return geometry; - }; - - const normalScratch = new Matrix3.Cartesian3(); - const normalScale = new Matrix3.Cartesian3(); - const tScratch = new Matrix3.Cartesian3(); - - /** - * Computes per-vertex tangents and bitangents for a geometry containing TRIANGLES. - * The result is new tangent and bitangent attributes added to the geometry. - * This assumes a counter-clockwise winding order. - *

    - * Based on Computing Tangent Space Basis Vectors - * for an Arbitrary Mesh by Eric Lengyel. - *

    - * - * @param {Geometry} geometry The geometry to modify. - * @returns {Geometry} The modified geometry argument with the computed tangent and bitangent attributes. - * - * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3. - * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}. - * - * @example - * Cesium.GeometryPipeline.computeTangentAndBiTangent(geometry); - */ - GeometryPipeline.computeTangentAndBitangent = function (geometry) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - //>>includeEnd('debug'); - - const attributes = geometry.attributes; - const indices = geometry.indices; - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(attributes.position) || !defaultValue.defined(attributes.position.values)) { - throw new Check.DeveloperError( - "geometry.attributes.position.values is required." - ); - } - if (!defaultValue.defined(attributes.normal) || !defaultValue.defined(attributes.normal.values)) { - throw new Check.DeveloperError("geometry.attributes.normal.values is required."); - } - if (!defaultValue.defined(attributes.st) || !defaultValue.defined(attributes.st.values)) { - throw new Check.DeveloperError("geometry.attributes.st.values is required."); - } - if (!defaultValue.defined(indices)) { - throw new Check.DeveloperError("geometry.indices is required."); - } - if (indices.length < 2 || indices.length % 3 !== 0) { - throw new Check.DeveloperError( - "geometry.indices length must be greater than 0 and be a multiple of 3." - ); - } - if (geometry.primitiveType !== GeometryAttribute.PrimitiveType.TRIANGLES) { - throw new Check.DeveloperError( - "geometry.primitiveType must be PrimitiveType.TRIANGLES." - ); - } - //>>includeEnd('debug'); - - const vertices = geometry.attributes.position.values; - const normals = geometry.attributes.normal.values; - const st = geometry.attributes.st.values; - - const numVertices = geometry.attributes.position.values.length / 3; - const numIndices = indices.length; - const tan1 = new Array(numVertices * 3); - - let i; - for (i = 0; i < tan1.length; i++) { - tan1[i] = 0; - } - - let i03; - let i13; - let i23; - for (i = 0; i < numIndices; i += 3) { - const i0 = indices[i]; - const i1 = indices[i + 1]; - const i2 = indices[i + 2]; - i03 = i0 * 3; - i13 = i1 * 3; - i23 = i2 * 3; - const i02 = i0 * 2; - const i12 = i1 * 2; - const i22 = i2 * 2; - - const ux = vertices[i03]; - const uy = vertices[i03 + 1]; - const uz = vertices[i03 + 2]; - - const wx = st[i02]; - const wy = st[i02 + 1]; - const t1 = st[i12 + 1] - wy; - const t2 = st[i22 + 1] - wy; - - const r = 1.0 / ((st[i12] - wx) * t2 - (st[i22] - wx) * t1); - const sdirx = (t2 * (vertices[i13] - ux) - t1 * (vertices[i23] - ux)) * r; - const sdiry = - (t2 * (vertices[i13 + 1] - uy) - t1 * (vertices[i23 + 1] - uy)) * r; - const sdirz = - (t2 * (vertices[i13 + 2] - uz) - t1 * (vertices[i23 + 2] - uz)) * r; - - tan1[i03] += sdirx; - tan1[i03 + 1] += sdiry; - tan1[i03 + 2] += sdirz; - - tan1[i13] += sdirx; - tan1[i13 + 1] += sdiry; - tan1[i13 + 2] += sdirz; - - tan1[i23] += sdirx; - tan1[i23 + 1] += sdiry; - tan1[i23 + 2] += sdirz; - } - - const tangentValues = new Float32Array(numVertices * 3); - const bitangentValues = new Float32Array(numVertices * 3); - - for (i = 0; i < numVertices; i++) { - i03 = i * 3; - i13 = i03 + 1; - i23 = i03 + 2; - - const n = Matrix3.Cartesian3.fromArray(normals, i03, normalScratch); - const t = Matrix3.Cartesian3.fromArray(tan1, i03, tScratch); - const scalar = Matrix3.Cartesian3.dot(n, t); - Matrix3.Cartesian3.multiplyByScalar(n, scalar, normalScale); - Matrix3.Cartesian3.normalize(Matrix3.Cartesian3.subtract(t, normalScale, t), t); - - tangentValues[i03] = t.x; - tangentValues[i13] = t.y; - tangentValues[i23] = t.z; - - Matrix3.Cartesian3.normalize(Matrix3.Cartesian3.cross(n, t, t), t); - - bitangentValues[i03] = t.x; - bitangentValues[i13] = t.y; - bitangentValues[i23] = t.z; - } - - geometry.attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangentValues, - }); - - geometry.attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangentValues, - }); - - return geometry; - }; - - const scratchCartesian2 = new Matrix2.Cartesian2(); - const toEncode1 = new Matrix3.Cartesian3(); - const toEncode2 = new Matrix3.Cartesian3(); - const toEncode3 = new Matrix3.Cartesian3(); - let encodeResult2 = new Matrix2.Cartesian2(); - /** - * Compresses and packs geometry normal attribute values to save memory. - * - * @param {Geometry} geometry The geometry to modify. - * @returns {Geometry} The modified geometry argument, with its normals compressed and packed. - * - * @example - * geometry = Cesium.GeometryPipeline.compressVertices(geometry); - */ - GeometryPipeline.compressVertices = function (geometry) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(geometry)) { - throw new Check.DeveloperError("geometry is required."); - } - //>>includeEnd('debug'); - - const extrudeAttribute = geometry.attributes.extrudeDirection; - let i; - let numVertices; - if (defaultValue.defined(extrudeAttribute)) { - //only shadow volumes use extrudeDirection, and shadow volumes use vertexFormat: POSITION_ONLY so we don't need to check other attributes - const extrudeDirections = extrudeAttribute.values; - numVertices = extrudeDirections.length / 3.0; - const compressedDirections = new Float32Array(numVertices * 2); - - let i2 = 0; - for (i = 0; i < numVertices; ++i) { - Matrix3.Cartesian3.fromArray(extrudeDirections, i * 3.0, toEncode1); - if (Matrix3.Cartesian3.equals(toEncode1, Matrix3.Cartesian3.ZERO)) { - i2 += 2; - continue; - } - encodeResult2 = AttributeCompression.AttributeCompression.octEncodeInRange( - toEncode1, - 65535, - encodeResult2 - ); - compressedDirections[i2++] = encodeResult2.x; - compressedDirections[i2++] = encodeResult2.y; - } - - geometry.attributes.compressedAttributes = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: compressedDirections, - }); - delete geometry.attributes.extrudeDirection; - return geometry; - } - - const normalAttribute = geometry.attributes.normal; - const stAttribute = geometry.attributes.st; - - const hasNormal = defaultValue.defined(normalAttribute); - const hasSt = defaultValue.defined(stAttribute); - if (!hasNormal && !hasSt) { - return geometry; - } - - const tangentAttribute = geometry.attributes.tangent; - const bitangentAttribute = geometry.attributes.bitangent; - - const hasTangent = defaultValue.defined(tangentAttribute); - const hasBitangent = defaultValue.defined(bitangentAttribute); - - let normals; - let st; - let tangents; - let bitangents; - - if (hasNormal) { - normals = normalAttribute.values; - } - if (hasSt) { - st = stAttribute.values; - } - if (hasTangent) { - tangents = tangentAttribute.values; - } - if (hasBitangent) { - bitangents = bitangentAttribute.values; - } - - const length = hasNormal ? normals.length : st.length; - const numComponents = hasNormal ? 3.0 : 2.0; - numVertices = length / numComponents; - - let compressedLength = numVertices; - let numCompressedComponents = hasSt && hasNormal ? 2.0 : 1.0; - numCompressedComponents += hasTangent || hasBitangent ? 1.0 : 0.0; - compressedLength *= numCompressedComponents; - - const compressedAttributes = new Float32Array(compressedLength); - - let normalIndex = 0; - for (i = 0; i < numVertices; ++i) { - if (hasSt) { - Matrix2.Cartesian2.fromArray(st, i * 2.0, scratchCartesian2); - compressedAttributes[ - normalIndex++ - ] = AttributeCompression.AttributeCompression.compressTextureCoordinates(scratchCartesian2); - } - - const index = i * 3.0; - if (hasNormal && defaultValue.defined(tangents) && defaultValue.defined(bitangents)) { - Matrix3.Cartesian3.fromArray(normals, index, toEncode1); - Matrix3.Cartesian3.fromArray(tangents, index, toEncode2); - Matrix3.Cartesian3.fromArray(bitangents, index, toEncode3); - - AttributeCompression.AttributeCompression.octPack( - toEncode1, - toEncode2, - toEncode3, - scratchCartesian2 - ); - compressedAttributes[normalIndex++] = scratchCartesian2.x; - compressedAttributes[normalIndex++] = scratchCartesian2.y; - } else { - if (hasNormal) { - Matrix3.Cartesian3.fromArray(normals, index, toEncode1); - compressedAttributes[ - normalIndex++ - ] = AttributeCompression.AttributeCompression.octEncodeFloat(toEncode1); - } - - if (hasTangent) { - Matrix3.Cartesian3.fromArray(tangents, index, toEncode1); - compressedAttributes[ - normalIndex++ - ] = AttributeCompression.AttributeCompression.octEncodeFloat(toEncode1); - } - - if (hasBitangent) { - Matrix3.Cartesian3.fromArray(bitangents, index, toEncode1); - compressedAttributes[ - normalIndex++ - ] = AttributeCompression.AttributeCompression.octEncodeFloat(toEncode1); - } - } - } - - geometry.attributes.compressedAttributes = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: numCompressedComponents, - values: compressedAttributes, - }); - - if (hasNormal) { - delete geometry.attributes.normal; - } - if (hasSt) { - delete geometry.attributes.st; - } - if (hasBitangent) { - delete geometry.attributes.bitangent; - } - if (hasTangent) { - delete geometry.attributes.tangent; - } - - return geometry; - }; - - function indexTriangles(geometry) { - if (defaultValue.defined(geometry.indices)) { - return geometry; - } - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - - //>>includeStart('debug', pragmas.debug); - if (numberOfVertices < 3) { - throw new Check.DeveloperError("The number of vertices must be at least three."); - } - if (numberOfVertices % 3 !== 0) { - throw new Check.DeveloperError( - "The number of vertices must be a multiple of three." - ); - } - //>>includeEnd('debug'); - - const indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfVertices, - numberOfVertices - ); - for (let i = 0; i < numberOfVertices; ++i) { - indices[i] = i; - } - - geometry.indices = indices; - return geometry; - } - - function indexTriangleFan(geometry) { - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - - //>>includeStart('debug', pragmas.debug); - if (numberOfVertices < 3) { - throw new Check.DeveloperError("The number of vertices must be at least three."); - } - //>>includeEnd('debug'); - - const indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfVertices, - (numberOfVertices - 2) * 3 - ); - indices[0] = 1; - indices[1] = 0; - indices[2] = 2; - - let indicesIndex = 3; - for (let i = 3; i < numberOfVertices; ++i) { - indices[indicesIndex++] = i - 1; - indices[indicesIndex++] = 0; - indices[indicesIndex++] = i; - } - - geometry.indices = indices; - geometry.primitiveType = GeometryAttribute.PrimitiveType.TRIANGLES; - return geometry; - } - - function indexTriangleStrip(geometry) { - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - - //>>includeStart('debug', pragmas.debug); - if (numberOfVertices < 3) { - throw new Check.DeveloperError("The number of vertices must be at least 3."); - } - //>>includeEnd('debug'); - - const indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfVertices, - (numberOfVertices - 2) * 3 - ); - indices[0] = 0; - indices[1] = 1; - indices[2] = 2; - - if (numberOfVertices > 3) { - indices[3] = 0; - indices[4] = 2; - indices[5] = 3; - } - - let indicesIndex = 6; - for (let i = 3; i < numberOfVertices - 1; i += 2) { - indices[indicesIndex++] = i; - indices[indicesIndex++] = i - 1; - indices[indicesIndex++] = i + 1; - - if (i + 2 < numberOfVertices) { - indices[indicesIndex++] = i; - indices[indicesIndex++] = i + 1; - indices[indicesIndex++] = i + 2; - } - } - - geometry.indices = indices; - geometry.primitiveType = GeometryAttribute.PrimitiveType.TRIANGLES; - return geometry; - } - - function indexLines(geometry) { - if (defaultValue.defined(geometry.indices)) { - return geometry; - } - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - - //>>includeStart('debug', pragmas.debug); - if (numberOfVertices < 2) { - throw new Check.DeveloperError("The number of vertices must be at least two."); - } - if (numberOfVertices % 2 !== 0) { - throw new Check.DeveloperError("The number of vertices must be a multiple of 2."); - } - //>>includeEnd('debug'); - - const indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfVertices, - numberOfVertices - ); - for (let i = 0; i < numberOfVertices; ++i) { - indices[i] = i; - } - - geometry.indices = indices; - return geometry; - } - - function indexLineStrip(geometry) { - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - - //>>includeStart('debug', pragmas.debug); - if (numberOfVertices < 2) { - throw new Check.DeveloperError("The number of vertices must be at least two."); - } - //>>includeEnd('debug'); - - const indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfVertices, - (numberOfVertices - 1) * 2 - ); - indices[0] = 0; - indices[1] = 1; - let indicesIndex = 2; - for (let i = 2; i < numberOfVertices; ++i) { - indices[indicesIndex++] = i - 1; - indices[indicesIndex++] = i; - } - - geometry.indices = indices; - geometry.primitiveType = GeometryAttribute.PrimitiveType.LINES; - return geometry; - } - - function indexLineLoop(geometry) { - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - - //>>includeStart('debug', pragmas.debug); - if (numberOfVertices < 2) { - throw new Check.DeveloperError("The number of vertices must be at least two."); - } - //>>includeEnd('debug'); - - const indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfVertices, - numberOfVertices * 2 - ); - - indices[0] = 0; - indices[1] = 1; - - let indicesIndex = 2; - for (let i = 2; i < numberOfVertices; ++i) { - indices[indicesIndex++] = i - 1; - indices[indicesIndex++] = i; - } - - indices[indicesIndex++] = numberOfVertices - 1; - indices[indicesIndex] = 0; - - geometry.indices = indices; - geometry.primitiveType = GeometryAttribute.PrimitiveType.LINES; - return geometry; - } - - function indexPrimitive(geometry) { - switch (geometry.primitiveType) { - case GeometryAttribute.PrimitiveType.TRIANGLE_FAN: - return indexTriangleFan(geometry); - case GeometryAttribute.PrimitiveType.TRIANGLE_STRIP: - return indexTriangleStrip(geometry); - case GeometryAttribute.PrimitiveType.TRIANGLES: - return indexTriangles(geometry); - case GeometryAttribute.PrimitiveType.LINE_STRIP: - return indexLineStrip(geometry); - case GeometryAttribute.PrimitiveType.LINE_LOOP: - return indexLineLoop(geometry); - case GeometryAttribute.PrimitiveType.LINES: - return indexLines(geometry); - } - - return geometry; - } - - function offsetPointFromXZPlane(p, isBehind) { - if (Math.abs(p.y) < Math$1.CesiumMath.EPSILON6) { - if (isBehind) { - p.y = -Math$1.CesiumMath.EPSILON6; - } else { - p.y = Math$1.CesiumMath.EPSILON6; - } - } - } - - function offsetTriangleFromXZPlane(p0, p1, p2) { - if (p0.y !== 0.0 && p1.y !== 0.0 && p2.y !== 0.0) { - offsetPointFromXZPlane(p0, p0.y < 0.0); - offsetPointFromXZPlane(p1, p1.y < 0.0); - offsetPointFromXZPlane(p2, p2.y < 0.0); - return; - } - - const p0y = Math.abs(p0.y); - const p1y = Math.abs(p1.y); - const p2y = Math.abs(p2.y); - - let sign; - if (p0y > p1y) { - if (p0y > p2y) { - sign = Math$1.CesiumMath.sign(p0.y); - } else { - sign = Math$1.CesiumMath.sign(p2.y); - } - } else if (p1y > p2y) { - sign = Math$1.CesiumMath.sign(p1.y); - } else { - sign = Math$1.CesiumMath.sign(p2.y); - } - - const isBehind = sign < 0.0; - offsetPointFromXZPlane(p0, isBehind); - offsetPointFromXZPlane(p1, isBehind); - offsetPointFromXZPlane(p2, isBehind); - } - - const c3 = new Matrix3.Cartesian3(); - function getXZIntersectionOffsetPoints(p, p1, u1, v1) { - Matrix3.Cartesian3.add( - p, - Matrix3.Cartesian3.multiplyByScalar( - Matrix3.Cartesian3.subtract(p1, p, c3), - p.y / (p.y - p1.y), - c3 - ), - u1 - ); - Matrix3.Cartesian3.clone(u1, v1); - offsetPointFromXZPlane(u1, true); - offsetPointFromXZPlane(v1, false); - } - - const u1 = new Matrix3.Cartesian3(); - const u2 = new Matrix3.Cartesian3(); - const q1 = new Matrix3.Cartesian3(); - const q2 = new Matrix3.Cartesian3(); - - const splitTriangleResult = { - positions: new Array(7), - indices: new Array(3 * 3), - }; - - function splitTriangle(p0, p1, p2) { - // In WGS84 coordinates, for a triangle approximately on the - // ellipsoid to cross the IDL, first it needs to be on the - // negative side of the plane x = 0. - if (p0.x >= 0.0 || p1.x >= 0.0 || p2.x >= 0.0) { - return undefined; - } - - offsetTriangleFromXZPlane(p0, p1, p2); - - const p0Behind = p0.y < 0.0; - const p1Behind = p1.y < 0.0; - const p2Behind = p2.y < 0.0; - - let numBehind = 0; - numBehind += p0Behind ? 1 : 0; - numBehind += p1Behind ? 1 : 0; - numBehind += p2Behind ? 1 : 0; - - const indices = splitTriangleResult.indices; - - if (numBehind === 1) { - indices[1] = 3; - indices[2] = 4; - indices[5] = 6; - indices[7] = 6; - indices[8] = 5; - - if (p0Behind) { - getXZIntersectionOffsetPoints(p0, p1, u1, q1); - getXZIntersectionOffsetPoints(p0, p2, u2, q2); - - indices[0] = 0; - indices[3] = 1; - indices[4] = 2; - indices[6] = 1; - } else if (p1Behind) { - getXZIntersectionOffsetPoints(p1, p2, u1, q1); - getXZIntersectionOffsetPoints(p1, p0, u2, q2); - - indices[0] = 1; - indices[3] = 2; - indices[4] = 0; - indices[6] = 2; - } else if (p2Behind) { - getXZIntersectionOffsetPoints(p2, p0, u1, q1); - getXZIntersectionOffsetPoints(p2, p1, u2, q2); - - indices[0] = 2; - indices[3] = 0; - indices[4] = 1; - indices[6] = 0; - } - } else if (numBehind === 2) { - indices[2] = 4; - indices[4] = 4; - indices[5] = 3; - indices[7] = 5; - indices[8] = 6; - - if (!p0Behind) { - getXZIntersectionOffsetPoints(p0, p1, u1, q1); - getXZIntersectionOffsetPoints(p0, p2, u2, q2); - - indices[0] = 1; - indices[1] = 2; - indices[3] = 1; - indices[6] = 0; - } else if (!p1Behind) { - getXZIntersectionOffsetPoints(p1, p2, u1, q1); - getXZIntersectionOffsetPoints(p1, p0, u2, q2); - - indices[0] = 2; - indices[1] = 0; - indices[3] = 2; - indices[6] = 1; - } else if (!p2Behind) { - getXZIntersectionOffsetPoints(p2, p0, u1, q1); - getXZIntersectionOffsetPoints(p2, p1, u2, q2); - - indices[0] = 0; - indices[1] = 1; - indices[3] = 0; - indices[6] = 2; - } - } - - const positions = splitTriangleResult.positions; - positions[0] = p0; - positions[1] = p1; - positions[2] = p2; - positions.length = 3; - - if (numBehind === 1 || numBehind === 2) { - positions[3] = u1; - positions[4] = u2; - positions[5] = q1; - positions[6] = q2; - positions.length = 7; - } - - return splitTriangleResult; - } - - function updateGeometryAfterSplit(geometry, computeBoundingSphere) { - const attributes = geometry.attributes; - - if (attributes.position.values.length === 0) { - return undefined; - } - - for (const property in attributes) { - if ( - attributes.hasOwnProperty(property) && - defaultValue.defined(attributes[property]) && - defaultValue.defined(attributes[property].values) - ) { - const attribute = attributes[property]; - attribute.values = ComponentDatatype.ComponentDatatype.createTypedArray( - attribute.componentDatatype, - attribute.values - ); - } - } - - const numberOfVertices = GeometryAttribute.Geometry.computeNumberOfVertices(geometry); - geometry.indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfVertices, - geometry.indices - ); - - if (computeBoundingSphere) { - geometry.boundingSphere = Transforms.BoundingSphere.fromVertices( - attributes.position.values - ); - } - - return geometry; - } - - function copyGeometryForSplit(geometry) { - const attributes = geometry.attributes; - const copiedAttributes = {}; - - for (const property in attributes) { - if ( - attributes.hasOwnProperty(property) && - defaultValue.defined(attributes[property]) && - defaultValue.defined(attributes[property].values) - ) { - const attribute = attributes[property]; - copiedAttributes[property] = new GeometryAttribute.GeometryAttribute({ - componentDatatype: attribute.componentDatatype, - componentsPerAttribute: attribute.componentsPerAttribute, - normalize: attribute.normalize, - values: [], - }); - } - } - - return new GeometryAttribute.Geometry({ - attributes: copiedAttributes, - indices: [], - primitiveType: geometry.primitiveType, - }); - } - - function updateInstanceAfterSplit(instance, westGeometry, eastGeometry) { - const computeBoundingSphere = defaultValue.defined(instance.geometry.boundingSphere); - - westGeometry = updateGeometryAfterSplit(westGeometry, computeBoundingSphere); - eastGeometry = updateGeometryAfterSplit(eastGeometry, computeBoundingSphere); - - if (defaultValue.defined(eastGeometry) && !defaultValue.defined(westGeometry)) { - instance.geometry = eastGeometry; - } else if (!defaultValue.defined(eastGeometry) && defaultValue.defined(westGeometry)) { - instance.geometry = westGeometry; - } else { - instance.westHemisphereGeometry = westGeometry; - instance.eastHemisphereGeometry = eastGeometry; - instance.geometry = undefined; - } - } - - function generateBarycentricInterpolateFunction( - CartesianType, - numberOfComponents - ) { - const v0Scratch = new CartesianType(); - const v1Scratch = new CartesianType(); - const v2Scratch = new CartesianType(); - - return function ( - i0, - i1, - i2, - coords, - sourceValues, - currentValues, - insertedIndex, - normalize - ) { - const v0 = CartesianType.fromArray( - sourceValues, - i0 * numberOfComponents, - v0Scratch - ); - const v1 = CartesianType.fromArray( - sourceValues, - i1 * numberOfComponents, - v1Scratch - ); - const v2 = CartesianType.fromArray( - sourceValues, - i2 * numberOfComponents, - v2Scratch - ); - - CartesianType.multiplyByScalar(v0, coords.x, v0); - CartesianType.multiplyByScalar(v1, coords.y, v1); - CartesianType.multiplyByScalar(v2, coords.z, v2); - - const value = CartesianType.add(v0, v1, v0); - CartesianType.add(value, v2, value); - - if (normalize) { - CartesianType.normalize(value, value); - } - - CartesianType.pack( - value, - currentValues, - insertedIndex * numberOfComponents - ); - }; - } - - const interpolateAndPackCartesian4 = generateBarycentricInterpolateFunction( - Matrix2.Cartesian4, - 4 - ); - const interpolateAndPackCartesian3 = generateBarycentricInterpolateFunction( - Matrix3.Cartesian3, - 3 - ); - const interpolateAndPackCartesian2 = generateBarycentricInterpolateFunction( - Matrix2.Cartesian2, - 2 - ); - const interpolateAndPackBoolean = function ( - i0, - i1, - i2, - coords, - sourceValues, - currentValues, - insertedIndex - ) { - const v1 = sourceValues[i0] * coords.x; - const v2 = sourceValues[i1] * coords.y; - const v3 = sourceValues[i2] * coords.z; - currentValues[insertedIndex] = v1 + v2 + v3 > Math$1.CesiumMath.EPSILON6 ? 1 : 0; - }; - - const p0Scratch = new Matrix3.Cartesian3(); - const p1Scratch = new Matrix3.Cartesian3(); - const p2Scratch = new Matrix3.Cartesian3(); - const barycentricScratch = new Matrix3.Cartesian3(); - - function computeTriangleAttributes( - i0, - i1, - i2, - point, - positions, - normals, - tangents, - bitangents, - texCoords, - extrudeDirections, - applyOffset, - currentAttributes, - customAttributeNames, - customAttributesLength, - allAttributes, - insertedIndex - ) { - if ( - !defaultValue.defined(normals) && - !defaultValue.defined(tangents) && - !defaultValue.defined(bitangents) && - !defaultValue.defined(texCoords) && - !defaultValue.defined(extrudeDirections) && - customAttributesLength === 0 - ) { - return; - } - - const p0 = Matrix3.Cartesian3.fromArray(positions, i0 * 3, p0Scratch); - const p1 = Matrix3.Cartesian3.fromArray(positions, i1 * 3, p1Scratch); - const p2 = Matrix3.Cartesian3.fromArray(positions, i2 * 3, p2Scratch); - const coords = barycentricCoordinates(point, p0, p1, p2, barycentricScratch); - if (!defaultValue.defined(coords)) { - return; - } - - if (defaultValue.defined(normals)) { - interpolateAndPackCartesian3( - i0, - i1, - i2, - coords, - normals, - currentAttributes.normal.values, - insertedIndex, - true - ); - } - - if (defaultValue.defined(extrudeDirections)) { - const d0 = Matrix3.Cartesian3.fromArray(extrudeDirections, i0 * 3, p0Scratch); - const d1 = Matrix3.Cartesian3.fromArray(extrudeDirections, i1 * 3, p1Scratch); - const d2 = Matrix3.Cartesian3.fromArray(extrudeDirections, i2 * 3, p2Scratch); - - Matrix3.Cartesian3.multiplyByScalar(d0, coords.x, d0); - Matrix3.Cartesian3.multiplyByScalar(d1, coords.y, d1); - Matrix3.Cartesian3.multiplyByScalar(d2, coords.z, d2); - - let direction; - if ( - !Matrix3.Cartesian3.equals(d0, Matrix3.Cartesian3.ZERO) || - !Matrix3.Cartesian3.equals(d1, Matrix3.Cartesian3.ZERO) || - !Matrix3.Cartesian3.equals(d2, Matrix3.Cartesian3.ZERO) - ) { - direction = Matrix3.Cartesian3.add(d0, d1, d0); - Matrix3.Cartesian3.add(direction, d2, direction); - Matrix3.Cartesian3.normalize(direction, direction); - } else { - direction = p0Scratch; - direction.x = 0; - direction.y = 0; - direction.z = 0; - } - Matrix3.Cartesian3.pack( - direction, - currentAttributes.extrudeDirection.values, - insertedIndex * 3 - ); - } - - if (defaultValue.defined(applyOffset)) { - interpolateAndPackBoolean( - i0, - i1, - i2, - coords, - applyOffset, - currentAttributes.applyOffset.values, - insertedIndex - ); - } - - if (defaultValue.defined(tangents)) { - interpolateAndPackCartesian3( - i0, - i1, - i2, - coords, - tangents, - currentAttributes.tangent.values, - insertedIndex, - true - ); - } - - if (defaultValue.defined(bitangents)) { - interpolateAndPackCartesian3( - i0, - i1, - i2, - coords, - bitangents, - currentAttributes.bitangent.values, - insertedIndex, - true - ); - } - - if (defaultValue.defined(texCoords)) { - interpolateAndPackCartesian2( - i0, - i1, - i2, - coords, - texCoords, - currentAttributes.st.values, - insertedIndex - ); - } - - if (customAttributesLength > 0) { - for (let i = 0; i < customAttributesLength; i++) { - const attributeName = customAttributeNames[i]; - genericInterpolate( - i0, - i1, - i2, - coords, - insertedIndex, - allAttributes[attributeName], - currentAttributes[attributeName] - ); - } - } - } - - function genericInterpolate( - i0, - i1, - i2, - coords, - insertedIndex, - sourceAttribute, - currentAttribute - ) { - const componentsPerAttribute = sourceAttribute.componentsPerAttribute; - const sourceValues = sourceAttribute.values; - const currentValues = currentAttribute.values; - switch (componentsPerAttribute) { - case 4: - interpolateAndPackCartesian4( - i0, - i1, - i2, - coords, - sourceValues, - currentValues, - insertedIndex, - false - ); - break; - case 3: - interpolateAndPackCartesian3( - i0, - i1, - i2, - coords, - sourceValues, - currentValues, - insertedIndex, - false - ); - break; - case 2: - interpolateAndPackCartesian2( - i0, - i1, - i2, - coords, - sourceValues, - currentValues, - insertedIndex, - false - ); - break; - default: - currentValues[insertedIndex] = - sourceValues[i0] * coords.x + - sourceValues[i1] * coords.y + - sourceValues[i2] * coords.z; - } - } - - function insertSplitPoint( - currentAttributes, - currentIndices, - currentIndexMap, - indices, - currentIndex, - point - ) { - const insertIndex = currentAttributes.position.values.length / 3; - - if (currentIndex !== -1) { - const prevIndex = indices[currentIndex]; - const newIndex = currentIndexMap[prevIndex]; - - if (newIndex === -1) { - currentIndexMap[prevIndex] = insertIndex; - currentAttributes.position.values.push(point.x, point.y, point.z); - currentIndices.push(insertIndex); - return insertIndex; - } - - currentIndices.push(newIndex); - return newIndex; - } - - currentAttributes.position.values.push(point.x, point.y, point.z); - currentIndices.push(insertIndex); - return insertIndex; - } - - const NAMED_ATTRIBUTES = { - position: true, - normal: true, - bitangent: true, - tangent: true, - st: true, - extrudeDirection: true, - applyOffset: true, - }; - function splitLongitudeTriangles(instance) { - const geometry = instance.geometry; - const attributes = geometry.attributes; - const positions = attributes.position.values; - const normals = defaultValue.defined(attributes.normal) - ? attributes.normal.values - : undefined; - const bitangents = defaultValue.defined(attributes.bitangent) - ? attributes.bitangent.values - : undefined; - const tangents = defaultValue.defined(attributes.tangent) - ? attributes.tangent.values - : undefined; - const texCoords = defaultValue.defined(attributes.st) ? attributes.st.values : undefined; - const extrudeDirections = defaultValue.defined(attributes.extrudeDirection) - ? attributes.extrudeDirection.values - : undefined; - const applyOffset = defaultValue.defined(attributes.applyOffset) - ? attributes.applyOffset.values - : undefined; - const indices = geometry.indices; - - const customAttributeNames = []; - for (const attributeName in attributes) { - if ( - attributes.hasOwnProperty(attributeName) && - !NAMED_ATTRIBUTES[attributeName] && - defaultValue.defined(attributes[attributeName]) - ) { - customAttributeNames.push(attributeName); - } - } - const customAttributesLength = customAttributeNames.length; - - const eastGeometry = copyGeometryForSplit(geometry); - const westGeometry = copyGeometryForSplit(geometry); - - let currentAttributes; - let currentIndices; - let currentIndexMap; - let insertedIndex; - let i; - - const westGeometryIndexMap = []; - westGeometryIndexMap.length = positions.length / 3; - - const eastGeometryIndexMap = []; - eastGeometryIndexMap.length = positions.length / 3; - - for (i = 0; i < westGeometryIndexMap.length; ++i) { - westGeometryIndexMap[i] = -1; - eastGeometryIndexMap[i] = -1; - } - - const len = indices.length; - for (i = 0; i < len; i += 3) { - const i0 = indices[i]; - const i1 = indices[i + 1]; - const i2 = indices[i + 2]; - - let p0 = Matrix3.Cartesian3.fromArray(positions, i0 * 3); - let p1 = Matrix3.Cartesian3.fromArray(positions, i1 * 3); - let p2 = Matrix3.Cartesian3.fromArray(positions, i2 * 3); - - const result = splitTriangle(p0, p1, p2); - if (defaultValue.defined(result) && result.positions.length > 3) { - const resultPositions = result.positions; - const resultIndices = result.indices; - const resultLength = resultIndices.length; - - for (let j = 0; j < resultLength; ++j) { - const resultIndex = resultIndices[j]; - const point = resultPositions[resultIndex]; - - if (point.y < 0.0) { - currentAttributes = westGeometry.attributes; - currentIndices = westGeometry.indices; - currentIndexMap = westGeometryIndexMap; - } else { - currentAttributes = eastGeometry.attributes; - currentIndices = eastGeometry.indices; - currentIndexMap = eastGeometryIndexMap; - } - - insertedIndex = insertSplitPoint( - currentAttributes, - currentIndices, - currentIndexMap, - indices, - resultIndex < 3 ? i + resultIndex : -1, - point - ); - computeTriangleAttributes( - i0, - i1, - i2, - point, - positions, - normals, - tangents, - bitangents, - texCoords, - extrudeDirections, - applyOffset, - currentAttributes, - customAttributeNames, - customAttributesLength, - attributes, - insertedIndex - ); - } - } else { - if (defaultValue.defined(result)) { - p0 = result.positions[0]; - p1 = result.positions[1]; - p2 = result.positions[2]; - } - - if (p0.y < 0.0) { - currentAttributes = westGeometry.attributes; - currentIndices = westGeometry.indices; - currentIndexMap = westGeometryIndexMap; - } else { - currentAttributes = eastGeometry.attributes; - currentIndices = eastGeometry.indices; - currentIndexMap = eastGeometryIndexMap; - } - - insertedIndex = insertSplitPoint( - currentAttributes, - currentIndices, - currentIndexMap, - indices, - i, - p0 - ); - computeTriangleAttributes( - i0, - i1, - i2, - p0, - positions, - normals, - tangents, - bitangents, - texCoords, - extrudeDirections, - applyOffset, - currentAttributes, - customAttributeNames, - customAttributesLength, - attributes, - insertedIndex - ); - - insertedIndex = insertSplitPoint( - currentAttributes, - currentIndices, - currentIndexMap, - indices, - i + 1, - p1 - ); - computeTriangleAttributes( - i0, - i1, - i2, - p1, - positions, - normals, - tangents, - bitangents, - texCoords, - extrudeDirections, - applyOffset, - currentAttributes, - customAttributeNames, - customAttributesLength, - attributes, - insertedIndex - ); - - insertedIndex = insertSplitPoint( - currentAttributes, - currentIndices, - currentIndexMap, - indices, - i + 2, - p2 - ); - computeTriangleAttributes( - i0, - i1, - i2, - p2, - positions, - normals, - tangents, - bitangents, - texCoords, - extrudeDirections, - applyOffset, - currentAttributes, - customAttributeNames, - customAttributesLength, - attributes, - insertedIndex - ); - } - } - - updateInstanceAfterSplit(instance, westGeometry, eastGeometry); - } - - const xzPlane = Plane.Plane.fromPointNormal(Matrix3.Cartesian3.ZERO, Matrix3.Cartesian3.UNIT_Y); - - const offsetScratch = new Matrix3.Cartesian3(); - const offsetPointScratch = new Matrix3.Cartesian3(); - - function computeLineAttributes( - i0, - i1, - point, - positions, - insertIndex, - currentAttributes, - applyOffset - ) { - if (!defaultValue.defined(applyOffset)) { - return; - } - - const p0 = Matrix3.Cartesian3.fromArray(positions, i0 * 3, p0Scratch); - if (Matrix3.Cartesian3.equalsEpsilon(p0, point, Math$1.CesiumMath.EPSILON10)) { - currentAttributes.applyOffset.values[insertIndex] = applyOffset[i0]; - } else { - currentAttributes.applyOffset.values[insertIndex] = applyOffset[i1]; - } - } - - function splitLongitudeLines(instance) { - const geometry = instance.geometry; - const attributes = geometry.attributes; - const positions = attributes.position.values; - const applyOffset = defaultValue.defined(attributes.applyOffset) - ? attributes.applyOffset.values - : undefined; - const indices = geometry.indices; - - const eastGeometry = copyGeometryForSplit(geometry); - const westGeometry = copyGeometryForSplit(geometry); - - let i; - const length = indices.length; - - const westGeometryIndexMap = []; - westGeometryIndexMap.length = positions.length / 3; - - const eastGeometryIndexMap = []; - eastGeometryIndexMap.length = positions.length / 3; - - for (i = 0; i < westGeometryIndexMap.length; ++i) { - westGeometryIndexMap[i] = -1; - eastGeometryIndexMap[i] = -1; - } - - for (i = 0; i < length; i += 2) { - const i0 = indices[i]; - const i1 = indices[i + 1]; - - const p0 = Matrix3.Cartesian3.fromArray(positions, i0 * 3, p0Scratch); - const p1 = Matrix3.Cartesian3.fromArray(positions, i1 * 3, p1Scratch); - let insertIndex; - - if (Math.abs(p0.y) < Math$1.CesiumMath.EPSILON6) { - if (p0.y < 0.0) { - p0.y = -Math$1.CesiumMath.EPSILON6; - } else { - p0.y = Math$1.CesiumMath.EPSILON6; - } - } - - if (Math.abs(p1.y) < Math$1.CesiumMath.EPSILON6) { - if (p1.y < 0.0) { - p1.y = -Math$1.CesiumMath.EPSILON6; - } else { - p1.y = Math$1.CesiumMath.EPSILON6; - } - } - - let p0Attributes = eastGeometry.attributes; - let p0Indices = eastGeometry.indices; - let p0IndexMap = eastGeometryIndexMap; - let p1Attributes = westGeometry.attributes; - let p1Indices = westGeometry.indices; - let p1IndexMap = westGeometryIndexMap; - - const intersection = IntersectionTests.IntersectionTests.lineSegmentPlane( - p0, - p1, - xzPlane, - p2Scratch - ); - if (defaultValue.defined(intersection)) { - // move point on the xz-plane slightly away from the plane - const offset = Matrix3.Cartesian3.multiplyByScalar( - Matrix3.Cartesian3.UNIT_Y, - 5.0 * Math$1.CesiumMath.EPSILON9, - offsetScratch - ); - if (p0.y < 0.0) { - Matrix3.Cartesian3.negate(offset, offset); - - p0Attributes = westGeometry.attributes; - p0Indices = westGeometry.indices; - p0IndexMap = westGeometryIndexMap; - p1Attributes = eastGeometry.attributes; - p1Indices = eastGeometry.indices; - p1IndexMap = eastGeometryIndexMap; - } - - const offsetPoint = Matrix3.Cartesian3.add( - intersection, - offset, - offsetPointScratch - ); - - insertIndex = insertSplitPoint( - p0Attributes, - p0Indices, - p0IndexMap, - indices, - i, - p0 - ); - computeLineAttributes( - i0, - i1, - p0, - positions, - insertIndex, - p0Attributes, - applyOffset - ); - - insertIndex = insertSplitPoint( - p0Attributes, - p0Indices, - p0IndexMap, - indices, - -1, - offsetPoint - ); - computeLineAttributes( - i0, - i1, - offsetPoint, - positions, - insertIndex, - p0Attributes, - applyOffset - ); - - Matrix3.Cartesian3.negate(offset, offset); - Matrix3.Cartesian3.add(intersection, offset, offsetPoint); - insertIndex = insertSplitPoint( - p1Attributes, - p1Indices, - p1IndexMap, - indices, - -1, - offsetPoint - ); - computeLineAttributes( - i0, - i1, - offsetPoint, - positions, - insertIndex, - p1Attributes, - applyOffset - ); - - insertIndex = insertSplitPoint( - p1Attributes, - p1Indices, - p1IndexMap, - indices, - i + 1, - p1 - ); - computeLineAttributes( - i0, - i1, - p1, - positions, - insertIndex, - p1Attributes, - applyOffset - ); - } else { - let currentAttributes; - let currentIndices; - let currentIndexMap; - - if (p0.y < 0.0) { - currentAttributes = westGeometry.attributes; - currentIndices = westGeometry.indices; - currentIndexMap = westGeometryIndexMap; - } else { - currentAttributes = eastGeometry.attributes; - currentIndices = eastGeometry.indices; - currentIndexMap = eastGeometryIndexMap; - } - - insertIndex = insertSplitPoint( - currentAttributes, - currentIndices, - currentIndexMap, - indices, - i, - p0 - ); - computeLineAttributes( - i0, - i1, - p0, - positions, - insertIndex, - currentAttributes, - applyOffset - ); - - insertIndex = insertSplitPoint( - currentAttributes, - currentIndices, - currentIndexMap, - indices, - i + 1, - p1 - ); - computeLineAttributes( - i0, - i1, - p1, - positions, - insertIndex, - currentAttributes, - applyOffset - ); - } - } - - updateInstanceAfterSplit(instance, westGeometry, eastGeometry); - } - - const cartesian2Scratch0 = new Matrix2.Cartesian2(); - const cartesian2Scratch1 = new Matrix2.Cartesian2(); - - const cartesian3Scratch0 = new Matrix3.Cartesian3(); - const cartesian3Scratch2 = new Matrix3.Cartesian3(); - const cartesian3Scratch3 = new Matrix3.Cartesian3(); - const cartesian3Scratch4 = new Matrix3.Cartesian3(); - const cartesian3Scratch5 = new Matrix3.Cartesian3(); - const cartesian3Scratch6 = new Matrix3.Cartesian3(); - - const cartesian4Scratch0 = new Matrix2.Cartesian4(); - - function updateAdjacencyAfterSplit(geometry) { - const attributes = geometry.attributes; - const positions = attributes.position.values; - const prevPositions = attributes.prevPosition.values; - const nextPositions = attributes.nextPosition.values; - - const length = positions.length; - for (let j = 0; j < length; j += 3) { - const position = Matrix3.Cartesian3.unpack(positions, j, cartesian3Scratch0); - if (position.x > 0.0) { - continue; - } - - const prevPosition = Matrix3.Cartesian3.unpack( - prevPositions, - j, - cartesian3Scratch2 - ); - if ( - (position.y < 0.0 && prevPosition.y > 0.0) || - (position.y > 0.0 && prevPosition.y < 0.0) - ) { - if (j - 3 > 0) { - prevPositions[j] = positions[j - 3]; - prevPositions[j + 1] = positions[j - 2]; - prevPositions[j + 2] = positions[j - 1]; - } else { - Matrix3.Cartesian3.pack(position, prevPositions, j); - } - } - - const nextPosition = Matrix3.Cartesian3.unpack( - nextPositions, - j, - cartesian3Scratch3 - ); - if ( - (position.y < 0.0 && nextPosition.y > 0.0) || - (position.y > 0.0 && nextPosition.y < 0.0) - ) { - if (j + 3 < length) { - nextPositions[j] = positions[j + 3]; - nextPositions[j + 1] = positions[j + 4]; - nextPositions[j + 2] = positions[j + 5]; - } else { - Matrix3.Cartesian3.pack(position, nextPositions, j); - } - } - } - } - - const offsetScalar = 5.0 * Math$1.CesiumMath.EPSILON9; - const coplanarOffset = Math$1.CesiumMath.EPSILON6; - - function splitLongitudePolyline(instance) { - const geometry = instance.geometry; - const attributes = geometry.attributes; - const positions = attributes.position.values; - const prevPositions = attributes.prevPosition.values; - const nextPositions = attributes.nextPosition.values; - const expandAndWidths = attributes.expandAndWidth.values; - - const texCoords = defaultValue.defined(attributes.st) ? attributes.st.values : undefined; - const colors = defaultValue.defined(attributes.color) - ? attributes.color.values - : undefined; - - const eastGeometry = copyGeometryForSplit(geometry); - const westGeometry = copyGeometryForSplit(geometry); - - let i; - let j; - let index; - - let intersectionFound = false; - - const length = positions.length / 3; - for (i = 0; i < length; i += 4) { - const i0 = i; - const i2 = i + 2; - - const p0 = Matrix3.Cartesian3.fromArray(positions, i0 * 3, cartesian3Scratch0); - const p2 = Matrix3.Cartesian3.fromArray(positions, i2 * 3, cartesian3Scratch2); - - // Offset points that are close to the 180 longitude and change the previous/next point - // to be the same offset point so it can be projected to 2D. There is special handling in the - // shader for when position == prevPosition || position == nextPosition. - if (Math.abs(p0.y) < coplanarOffset) { - p0.y = coplanarOffset * (p2.y < 0.0 ? -1.0 : 1.0); - positions[i * 3 + 1] = p0.y; - positions[(i + 1) * 3 + 1] = p0.y; - - for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) { - prevPositions[j] = positions[i * 3]; - prevPositions[j + 1] = positions[i * 3 + 1]; - prevPositions[j + 2] = positions[i * 3 + 2]; - } - } - - // Do the same but for when the line crosses 180 longitude in the opposite direction. - if (Math.abs(p2.y) < coplanarOffset) { - p2.y = coplanarOffset * (p0.y < 0.0 ? -1.0 : 1.0); - positions[(i + 2) * 3 + 1] = p2.y; - positions[(i + 3) * 3 + 1] = p2.y; - - for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) { - nextPositions[j] = positions[(i + 2) * 3]; - nextPositions[j + 1] = positions[(i + 2) * 3 + 1]; - nextPositions[j + 2] = positions[(i + 2) * 3 + 2]; - } - } - - let p0Attributes = eastGeometry.attributes; - let p0Indices = eastGeometry.indices; - let p2Attributes = westGeometry.attributes; - let p2Indices = westGeometry.indices; - - const intersection = IntersectionTests.IntersectionTests.lineSegmentPlane( - p0, - p2, - xzPlane, - cartesian3Scratch4 - ); - if (defaultValue.defined(intersection)) { - intersectionFound = true; - - // move point on the xz-plane slightly away from the plane - const offset = Matrix3.Cartesian3.multiplyByScalar( - Matrix3.Cartesian3.UNIT_Y, - offsetScalar, - cartesian3Scratch5 - ); - if (p0.y < 0.0) { - Matrix3.Cartesian3.negate(offset, offset); - p0Attributes = westGeometry.attributes; - p0Indices = westGeometry.indices; - p2Attributes = eastGeometry.attributes; - p2Indices = eastGeometry.indices; - } - - const offsetPoint = Matrix3.Cartesian3.add( - intersection, - offset, - cartesian3Scratch6 - ); - p0Attributes.position.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z); - p0Attributes.position.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p0Attributes.position.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - - p0Attributes.prevPosition.values.push( - prevPositions[i0 * 3], - prevPositions[i0 * 3 + 1], - prevPositions[i0 * 3 + 2] - ); - p0Attributes.prevPosition.values.push( - prevPositions[i0 * 3 + 3], - prevPositions[i0 * 3 + 4], - prevPositions[i0 * 3 + 5] - ); - p0Attributes.prevPosition.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z); - - p0Attributes.nextPosition.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p0Attributes.nextPosition.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p0Attributes.nextPosition.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p0Attributes.nextPosition.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - - Matrix3.Cartesian3.negate(offset, offset); - Matrix3.Cartesian3.add(intersection, offset, offsetPoint); - p2Attributes.position.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p2Attributes.position.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p2Attributes.position.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z); - - p2Attributes.prevPosition.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p2Attributes.prevPosition.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p2Attributes.prevPosition.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - p2Attributes.prevPosition.values.push( - offsetPoint.x, - offsetPoint.y, - offsetPoint.z - ); - - p2Attributes.nextPosition.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z); - p2Attributes.nextPosition.values.push( - nextPositions[i2 * 3], - nextPositions[i2 * 3 + 1], - nextPositions[i2 * 3 + 2] - ); - p2Attributes.nextPosition.values.push( - nextPositions[i2 * 3 + 3], - nextPositions[i2 * 3 + 4], - nextPositions[i2 * 3 + 5] - ); - - const ew0 = Matrix2.Cartesian2.fromArray( - expandAndWidths, - i0 * 2, - cartesian2Scratch0 - ); - const width = Math.abs(ew0.y); - - p0Attributes.expandAndWidth.values.push(-1, width, 1, width); - p0Attributes.expandAndWidth.values.push(-1, -width, 1, -width); - p2Attributes.expandAndWidth.values.push(-1, width, 1, width); - p2Attributes.expandAndWidth.values.push(-1, -width, 1, -width); - - let t = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(intersection, p0, cartesian3Scratch3) - ); - t /= Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(p2, p0, cartesian3Scratch3) - ); - - if (defaultValue.defined(colors)) { - const c0 = Matrix2.Cartesian4.fromArray(colors, i0 * 4, cartesian4Scratch0); - const c2 = Matrix2.Cartesian4.fromArray(colors, i2 * 4, cartesian4Scratch0); - - const r = Math$1.CesiumMath.lerp(c0.x, c2.x, t); - const g = Math$1.CesiumMath.lerp(c0.y, c2.y, t); - const b = Math$1.CesiumMath.lerp(c0.z, c2.z, t); - const a = Math$1.CesiumMath.lerp(c0.w, c2.w, t); - - for (j = i0 * 4; j < i0 * 4 + 2 * 4; ++j) { - p0Attributes.color.values.push(colors[j]); - } - p0Attributes.color.values.push(r, g, b, a); - p0Attributes.color.values.push(r, g, b, a); - p2Attributes.color.values.push(r, g, b, a); - p2Attributes.color.values.push(r, g, b, a); - for (j = i2 * 4; j < i2 * 4 + 2 * 4; ++j) { - p2Attributes.color.values.push(colors[j]); - } - } - - if (defaultValue.defined(texCoords)) { - const s0 = Matrix2.Cartesian2.fromArray(texCoords, i0 * 2, cartesian2Scratch0); - const s3 = Matrix2.Cartesian2.fromArray( - texCoords, - (i + 3) * 2, - cartesian2Scratch1 - ); - - const sx = Math$1.CesiumMath.lerp(s0.x, s3.x, t); - - for (j = i0 * 2; j < i0 * 2 + 2 * 2; ++j) { - p0Attributes.st.values.push(texCoords[j]); - } - p0Attributes.st.values.push(sx, s0.y); - p0Attributes.st.values.push(sx, s3.y); - p2Attributes.st.values.push(sx, s0.y); - p2Attributes.st.values.push(sx, s3.y); - for (j = i2 * 2; j < i2 * 2 + 2 * 2; ++j) { - p2Attributes.st.values.push(texCoords[j]); - } - } - - index = p0Attributes.position.values.length / 3 - 4; - p0Indices.push(index, index + 2, index + 1); - p0Indices.push(index + 1, index + 2, index + 3); - - index = p2Attributes.position.values.length / 3 - 4; - p2Indices.push(index, index + 2, index + 1); - p2Indices.push(index + 1, index + 2, index + 3); - } else { - let currentAttributes; - let currentIndices; - - if (p0.y < 0.0) { - currentAttributes = westGeometry.attributes; - currentIndices = westGeometry.indices; - } else { - currentAttributes = eastGeometry.attributes; - currentIndices = eastGeometry.indices; - } - - currentAttributes.position.values.push(p0.x, p0.y, p0.z); - currentAttributes.position.values.push(p0.x, p0.y, p0.z); - currentAttributes.position.values.push(p2.x, p2.y, p2.z); - currentAttributes.position.values.push(p2.x, p2.y, p2.z); - - for (j = i * 3; j < i * 3 + 4 * 3; ++j) { - currentAttributes.prevPosition.values.push(prevPositions[j]); - currentAttributes.nextPosition.values.push(nextPositions[j]); - } - - for (j = i * 2; j < i * 2 + 4 * 2; ++j) { - currentAttributes.expandAndWidth.values.push(expandAndWidths[j]); - if (defaultValue.defined(texCoords)) { - currentAttributes.st.values.push(texCoords[j]); - } - } - - if (defaultValue.defined(colors)) { - for (j = i * 4; j < i * 4 + 4 * 4; ++j) { - currentAttributes.color.values.push(colors[j]); - } - } - - index = currentAttributes.position.values.length / 3 - 4; - currentIndices.push(index, index + 2, index + 1); - currentIndices.push(index + 1, index + 2, index + 3); - } - } - - if (intersectionFound) { - updateAdjacencyAfterSplit(westGeometry); - updateAdjacencyAfterSplit(eastGeometry); - } - - updateInstanceAfterSplit(instance, westGeometry, eastGeometry); - } - - /** - * Splits the instances's geometry, by introducing new vertices and indices,that - * intersect the International Date Line and Prime Meridian so that no primitives cross longitude - * -180/180 degrees. This is not required for 3D drawing, but is required for - * correcting drawing in 2D and Columbus view. - * - * @private - * - * @param {GeometryInstance} instance The instance to modify. - * @returns {GeometryInstance} The modified instance argument, with it's geometry split at the International Date Line. - * - * @example - * instance = Cesium.GeometryPipeline.splitLongitude(instance); - */ - GeometryPipeline.splitLongitude = function (instance) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(instance)) { - throw new Check.DeveloperError("instance is required."); - } - //>>includeEnd('debug'); - - const geometry = instance.geometry; - const boundingSphere = geometry.boundingSphere; - if (defaultValue.defined(boundingSphere)) { - const minX = boundingSphere.center.x - boundingSphere.radius; - if ( - minX > 0 || - Transforms.BoundingSphere.intersectPlane(boundingSphere, Plane.Plane.ORIGIN_ZX_PLANE) !== - Transforms.Intersect.INTERSECTING - ) { - return instance; - } - } - - if (geometry.geometryType !== GeometryAttribute.GeometryType.NONE) { - switch (geometry.geometryType) { - case GeometryAttribute.GeometryType.POLYLINES: - splitLongitudePolyline(instance); - break; - case GeometryAttribute.GeometryType.TRIANGLES: - splitLongitudeTriangles(instance); - break; - case GeometryAttribute.GeometryType.LINES: - splitLongitudeLines(instance); - break; - } - } else { - indexPrimitive(geometry); - if (geometry.primitiveType === GeometryAttribute.PrimitiveType.TRIANGLES) { - splitLongitudeTriangles(instance); - } else if (geometry.primitiveType === GeometryAttribute.PrimitiveType.LINES) { - splitLongitudeLines(instance); - } - } - - return instance; - }; - var GeometryPipeline$1 = GeometryPipeline; - - exports.GeometryPipeline = GeometryPipeline$1; - -})); -//# sourceMappingURL=GeometryPipeline-f28890f4.js.map diff --git a/debug/cesium/Workers/GeometryPipeline-f28890f4.js.map b/debug/cesium/Workers/GeometryPipeline-f28890f4.js.map deleted file mode 100644 index 9cf340b..0000000 --- a/debug/cesium/Workers/GeometryPipeline-f28890f4.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"GeometryPipeline-f28890f4.js","sources":["../../../Source/Core/barycentricCoordinates.js","../../../Source/Core/Tipsify.js","../../../Source/Core/GeometryPipeline.js"],"sourcesContent":["import Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defined from \"./defined.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\nconst scratchCartesian1 = new Cartesian3();\r\nconst scratchCartesian2 = new Cartesian3();\r\nconst scratchCartesian3 = new Cartesian3();\r\n\r\n/**\r\n * Computes the barycentric coordinates for a point with respect to a triangle.\r\n *\r\n * @function\r\n *\r\n * @param {Cartesian2|Cartesian3} point The point to test.\r\n * @param {Cartesian2|Cartesian3} p0 The first point of the triangle, corresponding to the barycentric x-axis.\r\n * @param {Cartesian2|Cartesian3} p1 The second point of the triangle, corresponding to the barycentric y-axis.\r\n * @param {Cartesian2|Cartesian3} p2 The third point of the triangle, corresponding to the barycentric z-axis.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3|undefined} The modified result parameter or a new Cartesian3 instance if one was not provided. If the triangle is degenerate the function will return undefined.\r\n *\r\n * @example\r\n * // Returns Cartesian3.UNIT_X\r\n * const p = new Cesium.Cartesian3(-1.0, 0.0, 0.0);\r\n * const b = Cesium.barycentricCoordinates(p,\r\n * new Cesium.Cartesian3(-1.0, 0.0, 0.0),\r\n * new Cesium.Cartesian3( 1.0, 0.0, 0.0),\r\n * new Cesium.Cartesian3( 0.0, 1.0, 1.0));\r\n */\r\nfunction barycentricCoordinates(point, p0, p1, p2, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"point\", point);\r\n Check.defined(\"p0\", p0);\r\n Check.defined(\"p1\", p1);\r\n Check.defined(\"p2\", p2);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n // Implementation based on http://www.blackpawn.com/texts/pointinpoly/default.html.\r\n let v0;\r\n let v1;\r\n let v2;\r\n let dot00;\r\n let dot01;\r\n let dot02;\r\n let dot11;\r\n let dot12;\r\n\r\n if (!defined(p0.z)) {\r\n if (Cartesian2.equalsEpsilon(point, p0, CesiumMath.EPSILON14)) {\r\n return Cartesian3.clone(Cartesian3.UNIT_X, result);\r\n }\r\n if (Cartesian2.equalsEpsilon(point, p1, CesiumMath.EPSILON14)) {\r\n return Cartesian3.clone(Cartesian3.UNIT_Y, result);\r\n }\r\n if (Cartesian2.equalsEpsilon(point, p2, CesiumMath.EPSILON14)) {\r\n return Cartesian3.clone(Cartesian3.UNIT_Z, result);\r\n }\r\n\r\n v0 = Cartesian2.subtract(p1, p0, scratchCartesian1);\r\n v1 = Cartesian2.subtract(p2, p0, scratchCartesian2);\r\n v2 = Cartesian2.subtract(point, p0, scratchCartesian3);\r\n\r\n dot00 = Cartesian2.dot(v0, v0);\r\n dot01 = Cartesian2.dot(v0, v1);\r\n dot02 = Cartesian2.dot(v0, v2);\r\n dot11 = Cartesian2.dot(v1, v1);\r\n dot12 = Cartesian2.dot(v1, v2);\r\n } else {\r\n if (Cartesian3.equalsEpsilon(point, p0, CesiumMath.EPSILON14)) {\r\n return Cartesian3.clone(Cartesian3.UNIT_X, result);\r\n }\r\n if (Cartesian3.equalsEpsilon(point, p1, CesiumMath.EPSILON14)) {\r\n return Cartesian3.clone(Cartesian3.UNIT_Y, result);\r\n }\r\n if (Cartesian3.equalsEpsilon(point, p2, CesiumMath.EPSILON14)) {\r\n return Cartesian3.clone(Cartesian3.UNIT_Z, result);\r\n }\r\n\r\n v0 = Cartesian3.subtract(p1, p0, scratchCartesian1);\r\n v1 = Cartesian3.subtract(p2, p0, scratchCartesian2);\r\n v2 = Cartesian3.subtract(point, p0, scratchCartesian3);\r\n\r\n dot00 = Cartesian3.dot(v0, v0);\r\n dot01 = Cartesian3.dot(v0, v1);\r\n dot02 = Cartesian3.dot(v0, v2);\r\n dot11 = Cartesian3.dot(v1, v1);\r\n dot12 = Cartesian3.dot(v1, v2);\r\n }\r\n\r\n result.y = dot11 * dot02 - dot01 * dot12;\r\n result.z = dot00 * dot12 - dot01 * dot02;\r\n const q = dot00 * dot11 - dot01 * dot01;\r\n\r\n // Triangle is degenerate\r\n if (q === 0) {\r\n return undefined;\r\n }\r\n\r\n result.y /= q;\r\n result.z /= q;\r\n result.x = 1.0 - result.y - result.z;\r\n return result;\r\n}\r\nexport default barycentricCoordinates;\r\n","import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Encapsulates an algorithm to optimize triangles for the post\r\n * vertex-shader cache. This is based on the 2007 SIGGRAPH paper\r\n * 'Fast Triangle Reordering for Vertex Locality and Reduced Overdraw.'\r\n * The runtime is linear but several passes are made.\r\n *\r\n * @namespace Tipsify\r\n *\r\n * @see \r\n * Fast Triangle Reordering for Vertex Locality and Reduced Overdraw\r\n * by Sander, Nehab, and Barczak\r\n *\r\n * @private\r\n */\r\nconst Tipsify = {};\r\n\r\n/**\r\n * Calculates the average cache miss ratio (ACMR) for a given set of indices.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices\r\n * in the vertex buffer that define the geometry's triangles.\r\n * @param {Number} [options.maximumIndex] The maximum value of the elements in args.indices.\r\n * If not supplied, this value will be computed.\r\n * @param {Number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time.\r\n * @returns {Number} The average cache miss ratio (ACMR).\r\n *\r\n * @exception {DeveloperError} indices length must be a multiple of three.\r\n * @exception {DeveloperError} cacheSize must be greater than two.\r\n *\r\n * @example\r\n * const indices = [0, 1, 2, 3, 4, 5];\r\n * const maxIndex = 5;\r\n * const cacheSize = 3;\r\n * const acmr = Cesium.Tipsify.calculateACMR({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize});\r\n */\r\nTipsify.calculateACMR = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const indices = options.indices;\r\n let maximumIndex = options.maximumIndex;\r\n const cacheSize = defaultValue(options.cacheSize, 24);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(indices)) {\r\n throw new DeveloperError(\"indices is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const numIndices = indices.length;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numIndices < 3 || numIndices % 3 !== 0) {\r\n throw new DeveloperError(\"indices length must be a multiple of three.\");\r\n }\r\n if (maximumIndex <= 0) {\r\n throw new DeveloperError(\"maximumIndex must be greater than zero.\");\r\n }\r\n if (cacheSize < 3) {\r\n throw new DeveloperError(\"cacheSize must be greater than two.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n // Compute the maximumIndex if not given\r\n if (!defined(maximumIndex)) {\r\n maximumIndex = 0;\r\n let currentIndex = 0;\r\n let intoIndices = indices[currentIndex];\r\n while (currentIndex < numIndices) {\r\n if (intoIndices > maximumIndex) {\r\n maximumIndex = intoIndices;\r\n }\r\n ++currentIndex;\r\n intoIndices = indices[currentIndex];\r\n }\r\n }\r\n\r\n // Vertex time stamps\r\n const vertexTimeStamps = [];\r\n for (let i = 0; i < maximumIndex + 1; i++) {\r\n vertexTimeStamps[i] = 0;\r\n }\r\n\r\n // Cache processing\r\n let s = cacheSize + 1;\r\n for (let j = 0; j < numIndices; ++j) {\r\n if (s - vertexTimeStamps[indices[j]] > cacheSize) {\r\n vertexTimeStamps[indices[j]] = s;\r\n ++s;\r\n }\r\n }\r\n\r\n return (s - cacheSize + 1) / (numIndices / 3);\r\n};\r\n\r\n/**\r\n * Optimizes triangles for the post-vertex shader cache.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Number[]} options.indices Lists triads of numbers corresponding to the indices of the vertices\r\n * in the vertex buffer that define the geometry's triangles.\r\n * @param {Number} [options.maximumIndex] The maximum value of the elements in args.indices.\r\n * If not supplied, this value will be computed.\r\n * @param {Number} [options.cacheSize=24] The number of vertices that can be stored in the cache at any one time.\r\n * @returns {Number[]} A list of the input indices in an optimized order.\r\n *\r\n * @exception {DeveloperError} indices length must be a multiple of three.\r\n * @exception {DeveloperError} cacheSize must be greater than two.\r\n *\r\n * @example\r\n * const indices = [0, 1, 2, 3, 4, 5];\r\n * const maxIndex = 5;\r\n * const cacheSize = 3;\r\n * const reorderedIndices = Cesium.Tipsify.tipsify({indices : indices, maxIndex : maxIndex, cacheSize : cacheSize});\r\n */\r\nTipsify.tipsify = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const indices = options.indices;\r\n const maximumIndex = options.maximumIndex;\r\n const cacheSize = defaultValue(options.cacheSize, 24);\r\n\r\n let cursor;\r\n\r\n function skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne) {\r\n while (deadEnd.length >= 1) {\r\n // while the stack is not empty\r\n const d = deadEnd[deadEnd.length - 1]; // top of the stack\r\n deadEnd.splice(deadEnd.length - 1, 1); // pop the stack\r\n\r\n if (vertices[d].numLiveTriangles > 0) {\r\n return d;\r\n }\r\n }\r\n\r\n while (cursor < maximumIndexPlusOne) {\r\n if (vertices[cursor].numLiveTriangles > 0) {\r\n ++cursor;\r\n return cursor - 1;\r\n }\r\n ++cursor;\r\n }\r\n return -1;\r\n }\r\n\r\n function getNextVertex(\r\n indices,\r\n cacheSize,\r\n oneRing,\r\n vertices,\r\n s,\r\n deadEnd,\r\n maximumIndexPlusOne\r\n ) {\r\n let n = -1;\r\n let p;\r\n let m = -1;\r\n let itOneRing = 0;\r\n while (itOneRing < oneRing.length) {\r\n const index = oneRing[itOneRing];\r\n if (vertices[index].numLiveTriangles) {\r\n p = 0;\r\n if (\r\n s -\r\n vertices[index].timeStamp +\r\n 2 * vertices[index].numLiveTriangles <=\r\n cacheSize\r\n ) {\r\n p = s - vertices[index].timeStamp;\r\n }\r\n if (p > m || m === -1) {\r\n m = p;\r\n n = index;\r\n }\r\n }\r\n ++itOneRing;\r\n }\r\n if (n === -1) {\r\n return skipDeadEnd(vertices, deadEnd, indices, maximumIndexPlusOne);\r\n }\r\n return n;\r\n }\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(indices)) {\r\n throw new DeveloperError(\"indices is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const numIndices = indices.length;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numIndices < 3 || numIndices % 3 !== 0) {\r\n throw new DeveloperError(\"indices length must be a multiple of three.\");\r\n }\r\n if (maximumIndex <= 0) {\r\n throw new DeveloperError(\"maximumIndex must be greater than zero.\");\r\n }\r\n if (cacheSize < 3) {\r\n throw new DeveloperError(\"cacheSize must be greater than two.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n // Determine maximum index\r\n let maximumIndexPlusOne = 0;\r\n let currentIndex = 0;\r\n let intoIndices = indices[currentIndex];\r\n const endIndex = numIndices;\r\n if (defined(maximumIndex)) {\r\n maximumIndexPlusOne = maximumIndex + 1;\r\n } else {\r\n while (currentIndex < endIndex) {\r\n if (intoIndices > maximumIndexPlusOne) {\r\n maximumIndexPlusOne = intoIndices;\r\n }\r\n ++currentIndex;\r\n intoIndices = indices[currentIndex];\r\n }\r\n if (maximumIndexPlusOne === -1) {\r\n return 0;\r\n }\r\n ++maximumIndexPlusOne;\r\n }\r\n\r\n // Vertices\r\n const vertices = [];\r\n let i;\r\n for (i = 0; i < maximumIndexPlusOne; i++) {\r\n vertices[i] = {\r\n numLiveTriangles: 0,\r\n timeStamp: 0,\r\n vertexTriangles: [],\r\n };\r\n }\r\n currentIndex = 0;\r\n let triangle = 0;\r\n while (currentIndex < endIndex) {\r\n vertices[indices[currentIndex]].vertexTriangles.push(triangle);\r\n ++vertices[indices[currentIndex]].numLiveTriangles;\r\n vertices[indices[currentIndex + 1]].vertexTriangles.push(triangle);\r\n ++vertices[indices[currentIndex + 1]].numLiveTriangles;\r\n vertices[indices[currentIndex + 2]].vertexTriangles.push(triangle);\r\n ++vertices[indices[currentIndex + 2]].numLiveTriangles;\r\n ++triangle;\r\n currentIndex += 3;\r\n }\r\n\r\n // Starting index\r\n let f = 0;\r\n\r\n // Time Stamp\r\n let s = cacheSize + 1;\r\n cursor = 1;\r\n\r\n // Process\r\n let oneRing = [];\r\n const deadEnd = []; //Stack\r\n let vertex;\r\n let intoVertices;\r\n let currentOutputIndex = 0;\r\n const outputIndices = [];\r\n const numTriangles = numIndices / 3;\r\n const triangleEmitted = [];\r\n for (i = 0; i < numTriangles; i++) {\r\n triangleEmitted[i] = false;\r\n }\r\n let index;\r\n let limit;\r\n while (f !== -1) {\r\n oneRing = [];\r\n intoVertices = vertices[f];\r\n limit = intoVertices.vertexTriangles.length;\r\n for (let k = 0; k < limit; ++k) {\r\n triangle = intoVertices.vertexTriangles[k];\r\n if (!triangleEmitted[triangle]) {\r\n triangleEmitted[triangle] = true;\r\n currentIndex = triangle + triangle + triangle;\r\n for (let j = 0; j < 3; ++j) {\r\n // Set this index as a possible next index\r\n index = indices[currentIndex];\r\n oneRing.push(index);\r\n deadEnd.push(index);\r\n\r\n // Output index\r\n outputIndices[currentOutputIndex] = index;\r\n ++currentOutputIndex;\r\n\r\n // Cache processing\r\n vertex = vertices[index];\r\n --vertex.numLiveTriangles;\r\n if (s - vertex.timeStamp > cacheSize) {\r\n vertex.timeStamp = s;\r\n ++s;\r\n }\r\n ++currentIndex;\r\n }\r\n }\r\n }\r\n f = getNextVertex(\r\n indices,\r\n cacheSize,\r\n oneRing,\r\n vertices,\r\n s,\r\n deadEnd,\r\n maximumIndexPlusOne\r\n );\r\n }\r\n\r\n return outputIndices;\r\n};\r\nexport default Tipsify;\r\n","import AttributeCompression from \"./AttributeCompression.js\";\r\nimport barycentricCoordinates from \"./barycentricCoordinates.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport EncodedCartesian3 from \"./EncodedCartesian3.js\";\r\nimport GeographicProjection from \"./GeographicProjection.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryType from \"./GeometryType.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport Intersect from \"./Intersect.js\";\r\nimport IntersectionTests from \"./IntersectionTests.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport Plane from \"./Plane.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Tipsify from \"./Tipsify.js\";\r\n\r\n/**\r\n * Content pipeline functions for geometries.\r\n *\r\n * @namespace GeometryPipeline\r\n *\r\n * @see Geometry\r\n */\r\nconst GeometryPipeline = {};\r\n\r\nfunction addTriangle(lines, index, i0, i1, i2) {\r\n lines[index++] = i0;\r\n lines[index++] = i1;\r\n\r\n lines[index++] = i1;\r\n lines[index++] = i2;\r\n\r\n lines[index++] = i2;\r\n lines[index] = i0;\r\n}\r\n\r\nfunction trianglesToLines(triangles) {\r\n const count = triangles.length;\r\n const size = (count / 3) * 6;\r\n const lines = IndexDatatype.createTypedArray(count, size);\r\n\r\n let index = 0;\r\n for (let i = 0; i < count; i += 3, index += 6) {\r\n addTriangle(lines, index, triangles[i], triangles[i + 1], triangles[i + 2]);\r\n }\r\n\r\n return lines;\r\n}\r\n\r\nfunction triangleStripToLines(triangles) {\r\n const count = triangles.length;\r\n if (count >= 3) {\r\n const size = (count - 2) * 6;\r\n const lines = IndexDatatype.createTypedArray(count, size);\r\n\r\n addTriangle(lines, 0, triangles[0], triangles[1], triangles[2]);\r\n let index = 6;\r\n\r\n for (let i = 3; i < count; ++i, index += 6) {\r\n addTriangle(\r\n lines,\r\n index,\r\n triangles[i - 1],\r\n triangles[i],\r\n triangles[i - 2]\r\n );\r\n }\r\n\r\n return lines;\r\n }\r\n\r\n return new Uint16Array();\r\n}\r\n\r\nfunction triangleFanToLines(triangles) {\r\n if (triangles.length > 0) {\r\n const count = triangles.length - 1;\r\n const size = (count - 1) * 6;\r\n const lines = IndexDatatype.createTypedArray(count, size);\r\n\r\n const base = triangles[0];\r\n let index = 0;\r\n for (let i = 1; i < count; ++i, index += 6) {\r\n addTriangle(lines, index, base, triangles[i], triangles[i + 1]);\r\n }\r\n\r\n return lines;\r\n }\r\n\r\n return new Uint16Array();\r\n}\r\n\r\n/**\r\n * Converts a geometry's triangle indices to line indices. If the geometry has an indices\r\n * and its primitiveType is TRIANGLES, TRIANGLE_STRIP,\r\n * TRIANGLE_FAN, it is converted to LINES; otherwise, the geometry is not changed.\r\n *

    \r\n * This is commonly used to create a wireframe geometry for visual debugging.\r\n *

    \r\n *\r\n * @param {Geometry} geometry The geometry to modify.\r\n * @returns {Geometry} The modified geometry argument, with its triangle indices converted to lines.\r\n *\r\n * @exception {DeveloperError} geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.\r\n *\r\n * @example\r\n * geometry = Cesium.GeometryPipeline.toWireframe(geometry);\r\n */\r\nGeometryPipeline.toWireframe = function (geometry) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = geometry.indices;\r\n if (defined(indices)) {\r\n switch (geometry.primitiveType) {\r\n case PrimitiveType.TRIANGLES:\r\n geometry.indices = trianglesToLines(indices);\r\n break;\r\n case PrimitiveType.TRIANGLE_STRIP:\r\n geometry.indices = triangleStripToLines(indices);\r\n break;\r\n case PrimitiveType.TRIANGLE_FAN:\r\n geometry.indices = triangleFanToLines(indices);\r\n break;\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\r\n \"geometry.primitiveType must be TRIANGLES, TRIANGLE_STRIP, or TRIANGLE_FAN.\"\r\n );\r\n //>>includeEnd('debug');\r\n }\r\n\r\n geometry.primitiveType = PrimitiveType.LINES;\r\n }\r\n\r\n return geometry;\r\n};\r\n\r\n/**\r\n * Creates a new {@link Geometry} with LINES representing the provided\r\n * attribute (attributeName) for the provided geometry. This is used to\r\n * visualize vector attributes like normals, tangents, and bitangents.\r\n *\r\n * @param {Geometry} geometry The Geometry instance with the attribute.\r\n * @param {String} [attributeName='normal'] The name of the attribute.\r\n * @param {Number} [length=10000.0] The length of each line segment in meters. This can be negative to point the vector in the opposite direction.\r\n * @returns {Geometry} A new Geometry instance with line segments for the vector.\r\n *\r\n * @exception {DeveloperError} geometry.attributes must have an attribute with the same name as the attributeName parameter.\r\n *\r\n * @example\r\n * const geometry = Cesium.GeometryPipeline.createLineSegmentsForVectors(instance.geometry, 'bitangent', 100000.0);\r\n */\r\nGeometryPipeline.createLineSegmentsForVectors = function (\r\n geometry,\r\n attributeName,\r\n length\r\n) {\r\n attributeName = defaultValue(attributeName, \"normal\");\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n if (!defined(geometry.attributes.position)) {\r\n throw new DeveloperError(\"geometry.attributes.position is required.\");\r\n }\r\n if (!defined(geometry.attributes[attributeName])) {\r\n throw new DeveloperError(\r\n `geometry.attributes must have an attribute with the same name as the attributeName parameter, ${attributeName}.`\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n length = defaultValue(length, 10000.0);\r\n\r\n const positions = geometry.attributes.position.values;\r\n const vectors = geometry.attributes[attributeName].values;\r\n const positionsLength = positions.length;\r\n\r\n const newPositions = new Float64Array(2 * positionsLength);\r\n\r\n let j = 0;\r\n for (let i = 0; i < positionsLength; i += 3) {\r\n newPositions[j++] = positions[i];\r\n newPositions[j++] = positions[i + 1];\r\n newPositions[j++] = positions[i + 2];\r\n\r\n newPositions[j++] = positions[i] + vectors[i] * length;\r\n newPositions[j++] = positions[i + 1] + vectors[i + 1] * length;\r\n newPositions[j++] = positions[i + 2] + vectors[i + 2] * length;\r\n }\r\n\r\n let newBoundingSphere;\r\n const bs = geometry.boundingSphere;\r\n if (defined(bs)) {\r\n newBoundingSphere = new BoundingSphere(bs.center, bs.radius + length);\r\n }\r\n\r\n return new Geometry({\r\n attributes: {\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: newPositions,\r\n }),\r\n },\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: newBoundingSphere,\r\n });\r\n};\r\n\r\n/**\r\n * Creates an object that maps attribute names to unique locations (indices)\r\n * for matching vertex attributes and shader programs.\r\n *\r\n * @param {Geometry} geometry The geometry, which is not modified, to create the object for.\r\n * @returns {Object} An object with attribute name / index pairs.\r\n *\r\n * @example\r\n * const attributeLocations = Cesium.GeometryPipeline.createAttributeLocations(geometry);\r\n * // Example output\r\n * // {\r\n * // 'position' : 0,\r\n * // 'normal' : 1\r\n * // }\r\n */\r\nGeometryPipeline.createAttributeLocations = function (geometry) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n //>>includeEnd('debug')\r\n\r\n // There can be a WebGL performance hit when attribute 0 is disabled, so\r\n // assign attribute locations to well-known attributes.\r\n const semantics = [\r\n \"position\",\r\n \"positionHigh\",\r\n \"positionLow\",\r\n\r\n // From VertexFormat.position - after 2D projection and high-precision encoding\r\n \"position3DHigh\",\r\n \"position3DLow\",\r\n \"position2DHigh\",\r\n \"position2DLow\",\r\n\r\n // From Primitive\r\n \"pickColor\",\r\n\r\n // From VertexFormat\r\n \"normal\",\r\n \"st\",\r\n \"tangent\",\r\n \"bitangent\",\r\n\r\n // For shadow volumes\r\n \"extrudeDirection\",\r\n\r\n // From compressing texture coordinates and normals\r\n \"compressedAttributes\",\r\n ];\r\n\r\n const attributes = geometry.attributes;\r\n const indices = {};\r\n let j = 0;\r\n let i;\r\n const len = semantics.length;\r\n\r\n // Attribute locations for well-known attributes\r\n for (i = 0; i < len; ++i) {\r\n const semantic = semantics[i];\r\n\r\n if (defined(attributes[semantic])) {\r\n indices[semantic] = j++;\r\n }\r\n }\r\n\r\n // Locations for custom attributes\r\n for (const name in attributes) {\r\n if (attributes.hasOwnProperty(name) && !defined(indices[name])) {\r\n indices[name] = j++;\r\n }\r\n }\r\n\r\n return indices;\r\n};\r\n\r\n/**\r\n * Reorders a geometry's attributes and indices to achieve better performance from the GPU's pre-vertex-shader cache.\r\n *\r\n * @param {Geometry} geometry The geometry to modify.\r\n * @returns {Geometry} The modified geometry argument, with its attributes and indices reordered for the GPU's pre-vertex-shader cache.\r\n *\r\n * @exception {DeveloperError} Each attribute array in geometry.attributes must have the same number of attributes.\r\n *\r\n *\r\n * @example\r\n * geometry = Cesium.GeometryPipeline.reorderForPreVertexCache(geometry);\r\n *\r\n * @see GeometryPipeline.reorderForPostVertexCache\r\n */\r\nGeometryPipeline.reorderForPreVertexCache = function (geometry) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const numVertices = Geometry.computeNumberOfVertices(geometry);\r\n\r\n const indices = geometry.indices;\r\n if (defined(indices)) {\r\n const indexCrossReferenceOldToNew = new Int32Array(numVertices);\r\n for (let i = 0; i < numVertices; i++) {\r\n indexCrossReferenceOldToNew[i] = -1;\r\n }\r\n\r\n // Construct cross reference and reorder indices\r\n const indicesIn = indices;\r\n const numIndices = indicesIn.length;\r\n const indicesOut = IndexDatatype.createTypedArray(numVertices, numIndices);\r\n\r\n let intoIndicesIn = 0;\r\n let intoIndicesOut = 0;\r\n let nextIndex = 0;\r\n let tempIndex;\r\n while (intoIndicesIn < numIndices) {\r\n tempIndex = indexCrossReferenceOldToNew[indicesIn[intoIndicesIn]];\r\n if (tempIndex !== -1) {\r\n indicesOut[intoIndicesOut] = tempIndex;\r\n } else {\r\n tempIndex = indicesIn[intoIndicesIn];\r\n indexCrossReferenceOldToNew[tempIndex] = nextIndex;\r\n\r\n indicesOut[intoIndicesOut] = nextIndex;\r\n ++nextIndex;\r\n }\r\n ++intoIndicesIn;\r\n ++intoIndicesOut;\r\n }\r\n geometry.indices = indicesOut;\r\n\r\n // Reorder attributes\r\n const attributes = geometry.attributes;\r\n for (const property in attributes) {\r\n if (\r\n attributes.hasOwnProperty(property) &&\r\n defined(attributes[property]) &&\r\n defined(attributes[property].values)\r\n ) {\r\n const attribute = attributes[property];\r\n const elementsIn = attribute.values;\r\n let intoElementsIn = 0;\r\n const numComponents = attribute.componentsPerAttribute;\r\n const elementsOut = ComponentDatatype.createTypedArray(\r\n attribute.componentDatatype,\r\n nextIndex * numComponents\r\n );\r\n while (intoElementsIn < numVertices) {\r\n const temp = indexCrossReferenceOldToNew[intoElementsIn];\r\n if (temp !== -1) {\r\n for (let j = 0; j < numComponents; j++) {\r\n elementsOut[numComponents * temp + j] =\r\n elementsIn[numComponents * intoElementsIn + j];\r\n }\r\n }\r\n ++intoElementsIn;\r\n }\r\n attribute.values = elementsOut;\r\n }\r\n }\r\n }\r\n\r\n return geometry;\r\n};\r\n\r\n/**\r\n * Reorders a geometry's indices to achieve better performance from the GPU's\r\n * post vertex-shader cache by using the Tipsify algorithm. If the geometry primitiveType\r\n * is not TRIANGLES or the geometry does not have an indices, this function has no effect.\r\n *\r\n * @param {Geometry} geometry The geometry to modify.\r\n * @param {Number} [cacheCapacity=24] The number of vertices that can be held in the GPU's vertex cache.\r\n * @returns {Geometry} The modified geometry argument, with its indices reordered for the post-vertex-shader cache.\r\n *\r\n * @exception {DeveloperError} cacheCapacity must be greater than two.\r\n *\r\n *\r\n * @example\r\n * geometry = Cesium.GeometryPipeline.reorderForPostVertexCache(geometry);\r\n *\r\n * @see GeometryPipeline.reorderForPreVertexCache\r\n * @see {@link http://gfx.cs.princ0eton.edu/pubs/Sander_2007_%3ETR/tipsy.pdf|Fast Triangle Reordering for Vertex Locality and Reduced Overdraw}\r\n * by Sander, Nehab, and Barczak\r\n */\r\nGeometryPipeline.reorderForPostVertexCache = function (\r\n geometry,\r\n cacheCapacity\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = geometry.indices;\r\n if (geometry.primitiveType === PrimitiveType.TRIANGLES && defined(indices)) {\r\n const numIndices = indices.length;\r\n let maximumIndex = 0;\r\n for (let j = 0; j < numIndices; j++) {\r\n if (indices[j] > maximumIndex) {\r\n maximumIndex = indices[j];\r\n }\r\n }\r\n geometry.indices = Tipsify.tipsify({\r\n indices: indices,\r\n maximumIndex: maximumIndex,\r\n cacheSize: cacheCapacity,\r\n });\r\n }\r\n\r\n return geometry;\r\n};\r\n\r\nfunction copyAttributesDescriptions(attributes) {\r\n const newAttributes = {};\r\n\r\n for (const attribute in attributes) {\r\n if (\r\n attributes.hasOwnProperty(attribute) &&\r\n defined(attributes[attribute]) &&\r\n defined(attributes[attribute].values)\r\n ) {\r\n const attr = attributes[attribute];\r\n newAttributes[attribute] = new GeometryAttribute({\r\n componentDatatype: attr.componentDatatype,\r\n componentsPerAttribute: attr.componentsPerAttribute,\r\n normalize: attr.normalize,\r\n values: [],\r\n });\r\n }\r\n }\r\n\r\n return newAttributes;\r\n}\r\n\r\nfunction copyVertex(destinationAttributes, sourceAttributes, index) {\r\n for (const attribute in sourceAttributes) {\r\n if (\r\n sourceAttributes.hasOwnProperty(attribute) &&\r\n defined(sourceAttributes[attribute]) &&\r\n defined(sourceAttributes[attribute].values)\r\n ) {\r\n const attr = sourceAttributes[attribute];\r\n\r\n for (let k = 0; k < attr.componentsPerAttribute; ++k) {\r\n destinationAttributes[attribute].values.push(\r\n attr.values[index * attr.componentsPerAttribute + k]\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Splits a geometry into multiple geometries, if necessary, to ensure that indices in the\r\n * indices fit into unsigned shorts. This is used to meet the WebGL requirements\r\n * when unsigned int indices are not supported.\r\n *

    \r\n * If the geometry does not have any indices, this function has no effect.\r\n *

    \r\n *\r\n * @param {Geometry} geometry The geometry to be split into multiple geometries.\r\n * @returns {Geometry[]} An array of geometries, each with indices that fit into unsigned shorts.\r\n *\r\n * @exception {DeveloperError} geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS\r\n * @exception {DeveloperError} All geometry attribute lists must have the same number of attributes.\r\n *\r\n * @example\r\n * const geometries = Cesium.GeometryPipeline.fitToUnsignedShortIndices(geometry);\r\n */\r\nGeometryPipeline.fitToUnsignedShortIndices = function (geometry) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n if (\r\n defined(geometry.indices) &&\r\n geometry.primitiveType !== PrimitiveType.TRIANGLES &&\r\n geometry.primitiveType !== PrimitiveType.LINES &&\r\n geometry.primitiveType !== PrimitiveType.POINTS\r\n ) {\r\n throw new DeveloperError(\r\n \"geometry.primitiveType must equal to PrimitiveType.TRIANGLES, PrimitiveType.LINES, or PrimitiveType.POINTS.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const geometries = [];\r\n\r\n // If there's an index list and more than 64K attributes, it is possible that\r\n // some indices are outside the range of unsigned short [0, 64K - 1]\r\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\r\n if (\r\n defined(geometry.indices) &&\r\n numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES\r\n ) {\r\n let oldToNewIndex = [];\r\n let newIndices = [];\r\n let currentIndex = 0;\r\n let newAttributes = copyAttributesDescriptions(geometry.attributes);\r\n\r\n const originalIndices = geometry.indices;\r\n const numberOfIndices = originalIndices.length;\r\n\r\n let indicesPerPrimitive;\r\n\r\n if (geometry.primitiveType === PrimitiveType.TRIANGLES) {\r\n indicesPerPrimitive = 3;\r\n } else if (geometry.primitiveType === PrimitiveType.LINES) {\r\n indicesPerPrimitive = 2;\r\n } else if (geometry.primitiveType === PrimitiveType.POINTS) {\r\n indicesPerPrimitive = 1;\r\n }\r\n\r\n for (let j = 0; j < numberOfIndices; j += indicesPerPrimitive) {\r\n for (let k = 0; k < indicesPerPrimitive; ++k) {\r\n const x = originalIndices[j + k];\r\n let i = oldToNewIndex[x];\r\n if (!defined(i)) {\r\n i = currentIndex++;\r\n oldToNewIndex[x] = i;\r\n copyVertex(newAttributes, geometry.attributes, x);\r\n }\r\n newIndices.push(i);\r\n }\r\n\r\n if (\r\n currentIndex + indicesPerPrimitive >=\r\n CesiumMath.SIXTY_FOUR_KILOBYTES\r\n ) {\r\n geometries.push(\r\n new Geometry({\r\n attributes: newAttributes,\r\n indices: newIndices,\r\n primitiveType: geometry.primitiveType,\r\n boundingSphere: geometry.boundingSphere,\r\n boundingSphereCV: geometry.boundingSphereCV,\r\n })\r\n );\r\n\r\n // Reset for next vertex-array\r\n oldToNewIndex = [];\r\n newIndices = [];\r\n currentIndex = 0;\r\n newAttributes = copyAttributesDescriptions(geometry.attributes);\r\n }\r\n }\r\n\r\n if (newIndices.length !== 0) {\r\n geometries.push(\r\n new Geometry({\r\n attributes: newAttributes,\r\n indices: newIndices,\r\n primitiveType: geometry.primitiveType,\r\n boundingSphere: geometry.boundingSphere,\r\n boundingSphereCV: geometry.boundingSphereCV,\r\n })\r\n );\r\n }\r\n } else {\r\n // No need to split into multiple geometries\r\n geometries.push(geometry);\r\n }\r\n\r\n return geometries;\r\n};\r\n\r\nconst scratchProjectTo2DCartesian3 = new Cartesian3();\r\nconst scratchProjectTo2DCartographic = new Cartographic();\r\n\r\n/**\r\n * Projects a geometry's 3D position attribute to 2D, replacing the position\r\n * attribute with separate position3D and position2D attributes.\r\n *

    \r\n * If the geometry does not have a position, this function has no effect.\r\n *

    \r\n *\r\n * @param {Geometry} geometry The geometry to modify.\r\n * @param {String} attributeName The name of the attribute.\r\n * @param {String} attributeName3D The name of the attribute in 3D.\r\n * @param {String} attributeName2D The name of the attribute in 2D.\r\n * @param {Object} [projection=new GeographicProjection()] The projection to use.\r\n * @returns {Geometry} The modified geometry argument with position3D and position2D attributes.\r\n *\r\n * @exception {DeveloperError} geometry must have attribute matching the attributeName argument.\r\n * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE.\r\n * @exception {DeveloperError} Could not project a point to 2D.\r\n *\r\n * @example\r\n * geometry = Cesium.GeometryPipeline.projectTo2D(geometry, 'position', 'position3D', 'position2D');\r\n */\r\nGeometryPipeline.projectTo2D = function (\r\n geometry,\r\n attributeName,\r\n attributeName3D,\r\n attributeName2D,\r\n projection\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n if (!defined(attributeName)) {\r\n throw new DeveloperError(\"attributeName is required.\");\r\n }\r\n if (!defined(attributeName3D)) {\r\n throw new DeveloperError(\"attributeName3D is required.\");\r\n }\r\n if (!defined(attributeName2D)) {\r\n throw new DeveloperError(\"attributeName2D is required.\");\r\n }\r\n if (!defined(geometry.attributes[attributeName])) {\r\n throw new DeveloperError(\r\n `geometry must have attribute matching the attributeName argument: ${attributeName}.`\r\n );\r\n }\r\n if (\r\n geometry.attributes[attributeName].componentDatatype !==\r\n ComponentDatatype.DOUBLE\r\n ) {\r\n throw new DeveloperError(\r\n \"The attribute componentDatatype must be ComponentDatatype.DOUBLE.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const attribute = geometry.attributes[attributeName];\r\n projection = defined(projection) ? projection : new GeographicProjection();\r\n const ellipsoid = projection.ellipsoid;\r\n\r\n // Project original values to 2D.\r\n const values3D = attribute.values;\r\n const projectedValues = new Float64Array(values3D.length);\r\n let index = 0;\r\n\r\n for (let i = 0; i < values3D.length; i += 3) {\r\n const value = Cartesian3.fromArray(\r\n values3D,\r\n i,\r\n scratchProjectTo2DCartesian3\r\n );\r\n\r\n const lonLat = ellipsoid.cartesianToCartographic(\r\n value,\r\n scratchProjectTo2DCartographic\r\n );\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(lonLat)) {\r\n throw new DeveloperError(\r\n `Could not project point (${value.x}, ${value.y}, ${value.z}) to 2D.`\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const projectedLonLat = projection.project(\r\n lonLat,\r\n scratchProjectTo2DCartesian3\r\n );\r\n\r\n projectedValues[index++] = projectedLonLat.x;\r\n projectedValues[index++] = projectedLonLat.y;\r\n projectedValues[index++] = projectedLonLat.z;\r\n }\r\n\r\n // Rename original cartesians to WGS84 cartesians.\r\n geometry.attributes[attributeName3D] = attribute;\r\n\r\n // Replace original cartesians with 2D projected cartesians\r\n geometry.attributes[attributeName2D] = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: projectedValues,\r\n });\r\n delete geometry.attributes[attributeName];\r\n\r\n return geometry;\r\n};\r\n\r\nconst encodedResult = {\r\n high: 0.0,\r\n low: 0.0,\r\n};\r\n\r\n/**\r\n * Encodes floating-point geometry attribute values as two separate attributes to improve\r\n * rendering precision.\r\n *

    \r\n * This is commonly used to create high-precision position vertex attributes.\r\n *

    \r\n *\r\n * @param {Geometry} geometry The geometry to modify.\r\n * @param {String} attributeName The name of the attribute.\r\n * @param {String} attributeHighName The name of the attribute for the encoded high bits.\r\n * @param {String} attributeLowName The name of the attribute for the encoded low bits.\r\n * @returns {Geometry} The modified geometry argument, with its encoded attribute.\r\n *\r\n * @exception {DeveloperError} geometry must have attribute matching the attributeName argument.\r\n * @exception {DeveloperError} The attribute componentDatatype must be ComponentDatatype.DOUBLE.\r\n *\r\n * @example\r\n * geometry = Cesium.GeometryPipeline.encodeAttribute(geometry, 'position3D', 'position3DHigh', 'position3DLow');\r\n */\r\nGeometryPipeline.encodeAttribute = function (\r\n geometry,\r\n attributeName,\r\n attributeHighName,\r\n attributeLowName\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n if (!defined(attributeName)) {\r\n throw new DeveloperError(\"attributeName is required.\");\r\n }\r\n if (!defined(attributeHighName)) {\r\n throw new DeveloperError(\"attributeHighName is required.\");\r\n }\r\n if (!defined(attributeLowName)) {\r\n throw new DeveloperError(\"attributeLowName is required.\");\r\n }\r\n if (!defined(geometry.attributes[attributeName])) {\r\n throw new DeveloperError(\r\n `geometry must have attribute matching the attributeName argument: ${attributeName}.`\r\n );\r\n }\r\n if (\r\n geometry.attributes[attributeName].componentDatatype !==\r\n ComponentDatatype.DOUBLE\r\n ) {\r\n throw new DeveloperError(\r\n \"The attribute componentDatatype must be ComponentDatatype.DOUBLE.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const attribute = geometry.attributes[attributeName];\r\n const values = attribute.values;\r\n const length = values.length;\r\n const highValues = new Float32Array(length);\r\n const lowValues = new Float32Array(length);\r\n\r\n for (let i = 0; i < length; ++i) {\r\n EncodedCartesian3.encode(values[i], encodedResult);\r\n highValues[i] = encodedResult.high;\r\n lowValues[i] = encodedResult.low;\r\n }\r\n\r\n const componentsPerAttribute = attribute.componentsPerAttribute;\r\n\r\n geometry.attributes[attributeHighName] = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: componentsPerAttribute,\r\n values: highValues,\r\n });\r\n geometry.attributes[attributeLowName] = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: componentsPerAttribute,\r\n values: lowValues,\r\n });\r\n delete geometry.attributes[attributeName];\r\n\r\n return geometry;\r\n};\r\n\r\nlet scratchCartesian3 = new Cartesian3();\r\n\r\nfunction transformPoint(matrix, attribute) {\r\n if (defined(attribute)) {\r\n const values = attribute.values;\r\n const length = values.length;\r\n for (let i = 0; i < length; i += 3) {\r\n Cartesian3.unpack(values, i, scratchCartesian3);\r\n Matrix4.multiplyByPoint(matrix, scratchCartesian3, scratchCartesian3);\r\n Cartesian3.pack(scratchCartesian3, values, i);\r\n }\r\n }\r\n}\r\n\r\nfunction transformVector(matrix, attribute) {\r\n if (defined(attribute)) {\r\n const values = attribute.values;\r\n const length = values.length;\r\n for (let i = 0; i < length; i += 3) {\r\n Cartesian3.unpack(values, i, scratchCartesian3);\r\n Matrix3.multiplyByVector(matrix, scratchCartesian3, scratchCartesian3);\r\n scratchCartesian3 = Cartesian3.normalize(\r\n scratchCartesian3,\r\n scratchCartesian3\r\n );\r\n Cartesian3.pack(scratchCartesian3, values, i);\r\n }\r\n }\r\n}\r\n\r\nconst inverseTranspose = new Matrix4();\r\nconst normalMatrix = new Matrix3();\r\n\r\n/**\r\n * Transforms a geometry instance to world coordinates. This changes\r\n * the instance's modelMatrix to {@link Matrix4.IDENTITY} and transforms the\r\n * following attributes if they are present: position, normal,\r\n * tangent, and bitangent.\r\n *\r\n * @param {GeometryInstance} instance The geometry instance to modify.\r\n * @returns {GeometryInstance} The modified instance argument, with its attributes transforms to world coordinates.\r\n *\r\n * @example\r\n * Cesium.GeometryPipeline.transformToWorldCoordinates(instance);\r\n */\r\nGeometryPipeline.transformToWorldCoordinates = function (instance) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(instance)) {\r\n throw new DeveloperError(\"instance is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const modelMatrix = instance.modelMatrix;\r\n\r\n if (Matrix4.equals(modelMatrix, Matrix4.IDENTITY)) {\r\n // Already in world coordinates\r\n return instance;\r\n }\r\n\r\n const attributes = instance.geometry.attributes;\r\n\r\n // Transform attributes in known vertex formats\r\n transformPoint(modelMatrix, attributes.position);\r\n transformPoint(modelMatrix, attributes.prevPosition);\r\n transformPoint(modelMatrix, attributes.nextPosition);\r\n\r\n if (\r\n defined(attributes.normal) ||\r\n defined(attributes.tangent) ||\r\n defined(attributes.bitangent)\r\n ) {\r\n Matrix4.inverse(modelMatrix, inverseTranspose);\r\n Matrix4.transpose(inverseTranspose, inverseTranspose);\r\n Matrix4.getMatrix3(inverseTranspose, normalMatrix);\r\n\r\n transformVector(normalMatrix, attributes.normal);\r\n transformVector(normalMatrix, attributes.tangent);\r\n transformVector(normalMatrix, attributes.bitangent);\r\n }\r\n\r\n const boundingSphere = instance.geometry.boundingSphere;\r\n if (defined(boundingSphere)) {\r\n instance.geometry.boundingSphere = BoundingSphere.transform(\r\n boundingSphere,\r\n modelMatrix,\r\n boundingSphere\r\n );\r\n }\r\n\r\n instance.modelMatrix = Matrix4.clone(Matrix4.IDENTITY);\r\n\r\n return instance;\r\n};\r\n\r\nfunction findAttributesInAllGeometries(instances, propertyName) {\r\n const length = instances.length;\r\n\r\n const attributesInAllGeometries = {};\r\n\r\n const attributes0 = instances[0][propertyName].attributes;\r\n let name;\r\n\r\n for (name in attributes0) {\r\n if (\r\n attributes0.hasOwnProperty(name) &&\r\n defined(attributes0[name]) &&\r\n defined(attributes0[name].values)\r\n ) {\r\n const attribute = attributes0[name];\r\n let numberOfComponents = attribute.values.length;\r\n let inAllGeometries = true;\r\n\r\n // Does this same attribute exist in all geometries?\r\n for (let i = 1; i < length; ++i) {\r\n const otherAttribute = instances[i][propertyName].attributes[name];\r\n\r\n if (\r\n !defined(otherAttribute) ||\r\n attribute.componentDatatype !== otherAttribute.componentDatatype ||\r\n attribute.componentsPerAttribute !==\r\n otherAttribute.componentsPerAttribute ||\r\n attribute.normalize !== otherAttribute.normalize\r\n ) {\r\n inAllGeometries = false;\r\n break;\r\n }\r\n\r\n numberOfComponents += otherAttribute.values.length;\r\n }\r\n\r\n if (inAllGeometries) {\r\n attributesInAllGeometries[name] = new GeometryAttribute({\r\n componentDatatype: attribute.componentDatatype,\r\n componentsPerAttribute: attribute.componentsPerAttribute,\r\n normalize: attribute.normalize,\r\n values: ComponentDatatype.createTypedArray(\r\n attribute.componentDatatype,\r\n numberOfComponents\r\n ),\r\n });\r\n }\r\n }\r\n }\r\n\r\n return attributesInAllGeometries;\r\n}\r\n\r\nconst tempScratch = new Cartesian3();\r\n\r\nfunction combineGeometries(instances, propertyName) {\r\n const length = instances.length;\r\n\r\n let name;\r\n let i;\r\n let j;\r\n let k;\r\n\r\n const m = instances[0].modelMatrix;\r\n const haveIndices = defined(instances[0][propertyName].indices);\r\n const primitiveType = instances[0][propertyName].primitiveType;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n for (i = 1; i < length; ++i) {\r\n if (!Matrix4.equals(instances[i].modelMatrix, m)) {\r\n throw new DeveloperError(\"All instances must have the same modelMatrix.\");\r\n }\r\n if (defined(instances[i][propertyName].indices) !== haveIndices) {\r\n throw new DeveloperError(\r\n \"All instance geometries must have an indices or not have one.\"\r\n );\r\n }\r\n if (instances[i][propertyName].primitiveType !== primitiveType) {\r\n throw new DeveloperError(\r\n \"All instance geometries must have the same primitiveType.\"\r\n );\r\n }\r\n }\r\n //>>includeEnd('debug');\r\n\r\n // Find subset of attributes in all geometries\r\n const attributes = findAttributesInAllGeometries(instances, propertyName);\r\n let values;\r\n let sourceValues;\r\n let sourceValuesLength;\r\n\r\n // Combine attributes from each geometry into a single typed array\r\n for (name in attributes) {\r\n if (attributes.hasOwnProperty(name)) {\r\n values = attributes[name].values;\r\n\r\n k = 0;\r\n for (i = 0; i < length; ++i) {\r\n sourceValues = instances[i][propertyName].attributes[name].values;\r\n sourceValuesLength = sourceValues.length;\r\n\r\n for (j = 0; j < sourceValuesLength; ++j) {\r\n values[k++] = sourceValues[j];\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Combine index lists\r\n let indices;\r\n\r\n if (haveIndices) {\r\n let numberOfIndices = 0;\r\n for (i = 0; i < length; ++i) {\r\n numberOfIndices += instances[i][propertyName].indices.length;\r\n }\r\n\r\n const numberOfVertices = Geometry.computeNumberOfVertices(\r\n new Geometry({\r\n attributes: attributes,\r\n primitiveType: PrimitiveType.POINTS,\r\n })\r\n );\r\n const destIndices = IndexDatatype.createTypedArray(\r\n numberOfVertices,\r\n numberOfIndices\r\n );\r\n\r\n let destOffset = 0;\r\n let offset = 0;\r\n\r\n for (i = 0; i < length; ++i) {\r\n const sourceIndices = instances[i][propertyName].indices;\r\n const sourceIndicesLen = sourceIndices.length;\r\n\r\n for (k = 0; k < sourceIndicesLen; ++k) {\r\n destIndices[destOffset++] = offset + sourceIndices[k];\r\n }\r\n\r\n offset += Geometry.computeNumberOfVertices(instances[i][propertyName]);\r\n }\r\n\r\n indices = destIndices;\r\n }\r\n\r\n // Create bounding sphere that includes all instances\r\n let center = new Cartesian3();\r\n let radius = 0.0;\r\n let bs;\r\n\r\n for (i = 0; i < length; ++i) {\r\n bs = instances[i][propertyName].boundingSphere;\r\n if (!defined(bs)) {\r\n // If any geometries have an undefined bounding sphere, then so does the combined geometry\r\n center = undefined;\r\n break;\r\n }\r\n\r\n Cartesian3.add(bs.center, center, center);\r\n }\r\n\r\n if (defined(center)) {\r\n Cartesian3.divideByScalar(center, length, center);\r\n\r\n for (i = 0; i < length; ++i) {\r\n bs = instances[i][propertyName].boundingSphere;\r\n const tempRadius =\r\n Cartesian3.magnitude(\r\n Cartesian3.subtract(bs.center, center, tempScratch)\r\n ) + bs.radius;\r\n\r\n if (tempRadius > radius) {\r\n radius = tempRadius;\r\n }\r\n }\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: primitiveType,\r\n boundingSphere: defined(center)\r\n ? new BoundingSphere(center, radius)\r\n : undefined,\r\n });\r\n}\r\n\r\n/**\r\n * Combines geometry from several {@link GeometryInstance} objects into one geometry.\r\n * This concatenates the attributes, concatenates and adjusts the indices, and creates\r\n * a bounding sphere encompassing all instances.\r\n *

    \r\n * If the instances do not have the same attributes, a subset of attributes common\r\n * to all instances is used, and the others are ignored.\r\n *

    \r\n *

    \r\n * This is used by {@link Primitive} to efficiently render a large amount of static data.\r\n *

    \r\n *\r\n * @private\r\n *\r\n * @param {GeometryInstance[]} [instances] The array of {@link GeometryInstance} objects whose geometry will be combined.\r\n * @returns {Geometry} A single geometry created from the provided geometry instances.\r\n *\r\n * @exception {DeveloperError} All instances must have the same modelMatrix.\r\n * @exception {DeveloperError} All instance geometries must have an indices or not have one.\r\n * @exception {DeveloperError} All instance geometries must have the same primitiveType.\r\n *\r\n *\r\n * @example\r\n * for (let i = 0; i < instances.length; ++i) {\r\n * Cesium.GeometryPipeline.transformToWorldCoordinates(instances[i]);\r\n * }\r\n * const geometries = Cesium.GeometryPipeline.combineInstances(instances);\r\n *\r\n * @see GeometryPipeline.transformToWorldCoordinates\r\n */\r\nGeometryPipeline.combineInstances = function (instances) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(instances) || instances.length < 1) {\r\n throw new DeveloperError(\r\n \"instances is required and must have length greater than zero.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const instanceGeometry = [];\r\n const instanceSplitGeometry = [];\r\n const length = instances.length;\r\n for (let i = 0; i < length; ++i) {\r\n const instance = instances[i];\r\n\r\n if (defined(instance.geometry)) {\r\n instanceGeometry.push(instance);\r\n } else if (\r\n defined(instance.westHemisphereGeometry) &&\r\n defined(instance.eastHemisphereGeometry)\r\n ) {\r\n instanceSplitGeometry.push(instance);\r\n }\r\n }\r\n\r\n const geometries = [];\r\n if (instanceGeometry.length > 0) {\r\n geometries.push(combineGeometries(instanceGeometry, \"geometry\"));\r\n }\r\n\r\n if (instanceSplitGeometry.length > 0) {\r\n geometries.push(\r\n combineGeometries(instanceSplitGeometry, \"westHemisphereGeometry\")\r\n );\r\n geometries.push(\r\n combineGeometries(instanceSplitGeometry, \"eastHemisphereGeometry\")\r\n );\r\n }\r\n\r\n return geometries;\r\n};\r\n\r\nconst normal = new Cartesian3();\r\nconst v0 = new Cartesian3();\r\nconst v1 = new Cartesian3();\r\nconst v2 = new Cartesian3();\r\n\r\n/**\r\n * Computes per-vertex normals for a geometry containing TRIANGLES by averaging the normals of\r\n * all triangles incident to the vertex. The result is a new normal attribute added to the geometry.\r\n * This assumes a counter-clockwise winding order.\r\n *\r\n * @param {Geometry} geometry The geometry to modify.\r\n * @returns {Geometry} The modified geometry argument with the computed normal attribute.\r\n *\r\n * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3.\r\n * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}.\r\n *\r\n * @example\r\n * Cesium.GeometryPipeline.computeNormal(geometry);\r\n */\r\nGeometryPipeline.computeNormal = function (geometry) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n if (\r\n !defined(geometry.attributes.position) ||\r\n !defined(geometry.attributes.position.values)\r\n ) {\r\n throw new DeveloperError(\r\n \"geometry.attributes.position.values is required.\"\r\n );\r\n }\r\n if (!defined(geometry.indices)) {\r\n throw new DeveloperError(\"geometry.indices is required.\");\r\n }\r\n if (geometry.indices.length < 2 || geometry.indices.length % 3 !== 0) {\r\n throw new DeveloperError(\r\n \"geometry.indices length must be greater than 0 and be a multiple of 3.\"\r\n );\r\n }\r\n if (geometry.primitiveType !== PrimitiveType.TRIANGLES) {\r\n throw new DeveloperError(\r\n \"geometry.primitiveType must be PrimitiveType.TRIANGLES.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = geometry.indices;\r\n const attributes = geometry.attributes;\r\n const vertices = attributes.position.values;\r\n const numVertices = attributes.position.values.length / 3;\r\n const numIndices = indices.length;\r\n const normalsPerVertex = new Array(numVertices);\r\n const normalsPerTriangle = new Array(numIndices / 3);\r\n const normalIndices = new Array(numIndices);\r\n let i;\r\n for (i = 0; i < numVertices; i++) {\r\n normalsPerVertex[i] = {\r\n indexOffset: 0,\r\n count: 0,\r\n currentCount: 0,\r\n };\r\n }\r\n\r\n let j = 0;\r\n for (i = 0; i < numIndices; i += 3) {\r\n const i0 = indices[i];\r\n const i1 = indices[i + 1];\r\n const i2 = indices[i + 2];\r\n const i03 = i0 * 3;\r\n const i13 = i1 * 3;\r\n const i23 = i2 * 3;\r\n\r\n v0.x = vertices[i03];\r\n v0.y = vertices[i03 + 1];\r\n v0.z = vertices[i03 + 2];\r\n v1.x = vertices[i13];\r\n v1.y = vertices[i13 + 1];\r\n v1.z = vertices[i13 + 2];\r\n v2.x = vertices[i23];\r\n v2.y = vertices[i23 + 1];\r\n v2.z = vertices[i23 + 2];\r\n\r\n normalsPerVertex[i0].count++;\r\n normalsPerVertex[i1].count++;\r\n normalsPerVertex[i2].count++;\r\n\r\n Cartesian3.subtract(v1, v0, v1);\r\n Cartesian3.subtract(v2, v0, v2);\r\n normalsPerTriangle[j] = Cartesian3.cross(v1, v2, new Cartesian3());\r\n j++;\r\n }\r\n\r\n let indexOffset = 0;\r\n for (i = 0; i < numVertices; i++) {\r\n normalsPerVertex[i].indexOffset += indexOffset;\r\n indexOffset += normalsPerVertex[i].count;\r\n }\r\n\r\n j = 0;\r\n let vertexNormalData;\r\n for (i = 0; i < numIndices; i += 3) {\r\n vertexNormalData = normalsPerVertex[indices[i]];\r\n let index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\r\n normalIndices[index] = j;\r\n vertexNormalData.currentCount++;\r\n\r\n vertexNormalData = normalsPerVertex[indices[i + 1]];\r\n index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\r\n normalIndices[index] = j;\r\n vertexNormalData.currentCount++;\r\n\r\n vertexNormalData = normalsPerVertex[indices[i + 2]];\r\n index = vertexNormalData.indexOffset + vertexNormalData.currentCount;\r\n normalIndices[index] = j;\r\n vertexNormalData.currentCount++;\r\n\r\n j++;\r\n }\r\n\r\n const normalValues = new Float32Array(numVertices * 3);\r\n for (i = 0; i < numVertices; i++) {\r\n const i3 = i * 3;\r\n vertexNormalData = normalsPerVertex[i];\r\n Cartesian3.clone(Cartesian3.ZERO, normal);\r\n if (vertexNormalData.count > 0) {\r\n for (j = 0; j < vertexNormalData.count; j++) {\r\n Cartesian3.add(\r\n normal,\r\n normalsPerTriangle[normalIndices[vertexNormalData.indexOffset + j]],\r\n normal\r\n );\r\n }\r\n\r\n // We can run into an issue where a vertex is used with 2 primitives that have opposite winding order.\r\n if (\r\n Cartesian3.equalsEpsilon(Cartesian3.ZERO, normal, CesiumMath.EPSILON10)\r\n ) {\r\n Cartesian3.clone(\r\n normalsPerTriangle[normalIndices[vertexNormalData.indexOffset]],\r\n normal\r\n );\r\n }\r\n }\r\n\r\n // We end up with a zero vector probably because of a degenerate triangle\r\n if (\r\n Cartesian3.equalsEpsilon(Cartesian3.ZERO, normal, CesiumMath.EPSILON10)\r\n ) {\r\n // Default to (0,0,1)\r\n normal.z = 1.0;\r\n }\r\n\r\n Cartesian3.normalize(normal, normal);\r\n normalValues[i3] = normal.x;\r\n normalValues[i3 + 1] = normal.y;\r\n normalValues[i3 + 2] = normal.z;\r\n }\r\n\r\n geometry.attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normalValues,\r\n });\r\n\r\n return geometry;\r\n};\r\n\r\nconst normalScratch = new Cartesian3();\r\nconst normalScale = new Cartesian3();\r\nconst tScratch = new Cartesian3();\r\n\r\n/**\r\n * Computes per-vertex tangents and bitangents for a geometry containing TRIANGLES.\r\n * The result is new tangent and bitangent attributes added to the geometry.\r\n * This assumes a counter-clockwise winding order.\r\n *

    \r\n * Based on Computing Tangent Space Basis Vectors\r\n * for an Arbitrary Mesh by Eric Lengyel.\r\n *

    \r\n *\r\n * @param {Geometry} geometry The geometry to modify.\r\n * @returns {Geometry} The modified geometry argument with the computed tangent and bitangent attributes.\r\n *\r\n * @exception {DeveloperError} geometry.indices length must be greater than 0 and be a multiple of 3.\r\n * @exception {DeveloperError} geometry.primitiveType must be {@link PrimitiveType.TRIANGLES}.\r\n *\r\n * @example\r\n * Cesium.GeometryPipeline.computeTangentAndBiTangent(geometry);\r\n */\r\nGeometryPipeline.computeTangentAndBitangent = function (geometry) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const attributes = geometry.attributes;\r\n const indices = geometry.indices;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(attributes.position) || !defined(attributes.position.values)) {\r\n throw new DeveloperError(\r\n \"geometry.attributes.position.values is required.\"\r\n );\r\n }\r\n if (!defined(attributes.normal) || !defined(attributes.normal.values)) {\r\n throw new DeveloperError(\"geometry.attributes.normal.values is required.\");\r\n }\r\n if (!defined(attributes.st) || !defined(attributes.st.values)) {\r\n throw new DeveloperError(\"geometry.attributes.st.values is required.\");\r\n }\r\n if (!defined(indices)) {\r\n throw new DeveloperError(\"geometry.indices is required.\");\r\n }\r\n if (indices.length < 2 || indices.length % 3 !== 0) {\r\n throw new DeveloperError(\r\n \"geometry.indices length must be greater than 0 and be a multiple of 3.\"\r\n );\r\n }\r\n if (geometry.primitiveType !== PrimitiveType.TRIANGLES) {\r\n throw new DeveloperError(\r\n \"geometry.primitiveType must be PrimitiveType.TRIANGLES.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const vertices = geometry.attributes.position.values;\r\n const normals = geometry.attributes.normal.values;\r\n const st = geometry.attributes.st.values;\r\n\r\n const numVertices = geometry.attributes.position.values.length / 3;\r\n const numIndices = indices.length;\r\n const tan1 = new Array(numVertices * 3);\r\n\r\n let i;\r\n for (i = 0; i < tan1.length; i++) {\r\n tan1[i] = 0;\r\n }\r\n\r\n let i03;\r\n let i13;\r\n let i23;\r\n for (i = 0; i < numIndices; i += 3) {\r\n const i0 = indices[i];\r\n const i1 = indices[i + 1];\r\n const i2 = indices[i + 2];\r\n i03 = i0 * 3;\r\n i13 = i1 * 3;\r\n i23 = i2 * 3;\r\n const i02 = i0 * 2;\r\n const i12 = i1 * 2;\r\n const i22 = i2 * 2;\r\n\r\n const ux = vertices[i03];\r\n const uy = vertices[i03 + 1];\r\n const uz = vertices[i03 + 2];\r\n\r\n const wx = st[i02];\r\n const wy = st[i02 + 1];\r\n const t1 = st[i12 + 1] - wy;\r\n const t2 = st[i22 + 1] - wy;\r\n\r\n const r = 1.0 / ((st[i12] - wx) * t2 - (st[i22] - wx) * t1);\r\n const sdirx = (t2 * (vertices[i13] - ux) - t1 * (vertices[i23] - ux)) * r;\r\n const sdiry =\r\n (t2 * (vertices[i13 + 1] - uy) - t1 * (vertices[i23 + 1] - uy)) * r;\r\n const sdirz =\r\n (t2 * (vertices[i13 + 2] - uz) - t1 * (vertices[i23 + 2] - uz)) * r;\r\n\r\n tan1[i03] += sdirx;\r\n tan1[i03 + 1] += sdiry;\r\n tan1[i03 + 2] += sdirz;\r\n\r\n tan1[i13] += sdirx;\r\n tan1[i13 + 1] += sdiry;\r\n tan1[i13 + 2] += sdirz;\r\n\r\n tan1[i23] += sdirx;\r\n tan1[i23 + 1] += sdiry;\r\n tan1[i23 + 2] += sdirz;\r\n }\r\n\r\n const tangentValues = new Float32Array(numVertices * 3);\r\n const bitangentValues = new Float32Array(numVertices * 3);\r\n\r\n for (i = 0; i < numVertices; i++) {\r\n i03 = i * 3;\r\n i13 = i03 + 1;\r\n i23 = i03 + 2;\r\n\r\n const n = Cartesian3.fromArray(normals, i03, normalScratch);\r\n const t = Cartesian3.fromArray(tan1, i03, tScratch);\r\n const scalar = Cartesian3.dot(n, t);\r\n Cartesian3.multiplyByScalar(n, scalar, normalScale);\r\n Cartesian3.normalize(Cartesian3.subtract(t, normalScale, t), t);\r\n\r\n tangentValues[i03] = t.x;\r\n tangentValues[i13] = t.y;\r\n tangentValues[i23] = t.z;\r\n\r\n Cartesian3.normalize(Cartesian3.cross(n, t, t), t);\r\n\r\n bitangentValues[i03] = t.x;\r\n bitangentValues[i13] = t.y;\r\n bitangentValues[i23] = t.z;\r\n }\r\n\r\n geometry.attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangentValues,\r\n });\r\n\r\n geometry.attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangentValues,\r\n });\r\n\r\n return geometry;\r\n};\r\n\r\nconst scratchCartesian2 = new Cartesian2();\r\nconst toEncode1 = new Cartesian3();\r\nconst toEncode2 = new Cartesian3();\r\nconst toEncode3 = new Cartesian3();\r\nlet encodeResult2 = new Cartesian2();\r\n/**\r\n * Compresses and packs geometry normal attribute values to save memory.\r\n *\r\n * @param {Geometry} geometry The geometry to modify.\r\n * @returns {Geometry} The modified geometry argument, with its normals compressed and packed.\r\n *\r\n * @example\r\n * geometry = Cesium.GeometryPipeline.compressVertices(geometry);\r\n */\r\nGeometryPipeline.compressVertices = function (geometry) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(geometry)) {\r\n throw new DeveloperError(\"geometry is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const extrudeAttribute = geometry.attributes.extrudeDirection;\r\n let i;\r\n let numVertices;\r\n if (defined(extrudeAttribute)) {\r\n //only shadow volumes use extrudeDirection, and shadow volumes use vertexFormat: POSITION_ONLY so we don't need to check other attributes\r\n const extrudeDirections = extrudeAttribute.values;\r\n numVertices = extrudeDirections.length / 3.0;\r\n const compressedDirections = new Float32Array(numVertices * 2);\r\n\r\n let i2 = 0;\r\n for (i = 0; i < numVertices; ++i) {\r\n Cartesian3.fromArray(extrudeDirections, i * 3.0, toEncode1);\r\n if (Cartesian3.equals(toEncode1, Cartesian3.ZERO)) {\r\n i2 += 2;\r\n continue;\r\n }\r\n encodeResult2 = AttributeCompression.octEncodeInRange(\r\n toEncode1,\r\n 65535,\r\n encodeResult2\r\n );\r\n compressedDirections[i2++] = encodeResult2.x;\r\n compressedDirections[i2++] = encodeResult2.y;\r\n }\r\n\r\n geometry.attributes.compressedAttributes = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: compressedDirections,\r\n });\r\n delete geometry.attributes.extrudeDirection;\r\n return geometry;\r\n }\r\n\r\n const normalAttribute = geometry.attributes.normal;\r\n const stAttribute = geometry.attributes.st;\r\n\r\n const hasNormal = defined(normalAttribute);\r\n const hasSt = defined(stAttribute);\r\n if (!hasNormal && !hasSt) {\r\n return geometry;\r\n }\r\n\r\n const tangentAttribute = geometry.attributes.tangent;\r\n const bitangentAttribute = geometry.attributes.bitangent;\r\n\r\n const hasTangent = defined(tangentAttribute);\r\n const hasBitangent = defined(bitangentAttribute);\r\n\r\n let normals;\r\n let st;\r\n let tangents;\r\n let bitangents;\r\n\r\n if (hasNormal) {\r\n normals = normalAttribute.values;\r\n }\r\n if (hasSt) {\r\n st = stAttribute.values;\r\n }\r\n if (hasTangent) {\r\n tangents = tangentAttribute.values;\r\n }\r\n if (hasBitangent) {\r\n bitangents = bitangentAttribute.values;\r\n }\r\n\r\n const length = hasNormal ? normals.length : st.length;\r\n const numComponents = hasNormal ? 3.0 : 2.0;\r\n numVertices = length / numComponents;\r\n\r\n let compressedLength = numVertices;\r\n let numCompressedComponents = hasSt && hasNormal ? 2.0 : 1.0;\r\n numCompressedComponents += hasTangent || hasBitangent ? 1.0 : 0.0;\r\n compressedLength *= numCompressedComponents;\r\n\r\n const compressedAttributes = new Float32Array(compressedLength);\r\n\r\n let normalIndex = 0;\r\n for (i = 0; i < numVertices; ++i) {\r\n if (hasSt) {\r\n Cartesian2.fromArray(st, i * 2.0, scratchCartesian2);\r\n compressedAttributes[\r\n normalIndex++\r\n ] = AttributeCompression.compressTextureCoordinates(scratchCartesian2);\r\n }\r\n\r\n const index = i * 3.0;\r\n if (hasNormal && defined(tangents) && defined(bitangents)) {\r\n Cartesian3.fromArray(normals, index, toEncode1);\r\n Cartesian3.fromArray(tangents, index, toEncode2);\r\n Cartesian3.fromArray(bitangents, index, toEncode3);\r\n\r\n AttributeCompression.octPack(\r\n toEncode1,\r\n toEncode2,\r\n toEncode3,\r\n scratchCartesian2\r\n );\r\n compressedAttributes[normalIndex++] = scratchCartesian2.x;\r\n compressedAttributes[normalIndex++] = scratchCartesian2.y;\r\n } else {\r\n if (hasNormal) {\r\n Cartesian3.fromArray(normals, index, toEncode1);\r\n compressedAttributes[\r\n normalIndex++\r\n ] = AttributeCompression.octEncodeFloat(toEncode1);\r\n }\r\n\r\n if (hasTangent) {\r\n Cartesian3.fromArray(tangents, index, toEncode1);\r\n compressedAttributes[\r\n normalIndex++\r\n ] = AttributeCompression.octEncodeFloat(toEncode1);\r\n }\r\n\r\n if (hasBitangent) {\r\n Cartesian3.fromArray(bitangents, index, toEncode1);\r\n compressedAttributes[\r\n normalIndex++\r\n ] = AttributeCompression.octEncodeFloat(toEncode1);\r\n }\r\n }\r\n }\r\n\r\n geometry.attributes.compressedAttributes = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: numCompressedComponents,\r\n values: compressedAttributes,\r\n });\r\n\r\n if (hasNormal) {\r\n delete geometry.attributes.normal;\r\n }\r\n if (hasSt) {\r\n delete geometry.attributes.st;\r\n }\r\n if (hasBitangent) {\r\n delete geometry.attributes.bitangent;\r\n }\r\n if (hasTangent) {\r\n delete geometry.attributes.tangent;\r\n }\r\n\r\n return geometry;\r\n};\r\n\r\nfunction indexTriangles(geometry) {\r\n if (defined(geometry.indices)) {\r\n return geometry;\r\n }\r\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numberOfVertices < 3) {\r\n throw new DeveloperError(\"The number of vertices must be at least three.\");\r\n }\r\n if (numberOfVertices % 3 !== 0) {\r\n throw new DeveloperError(\r\n \"The number of vertices must be a multiple of three.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = IndexDatatype.createTypedArray(\r\n numberOfVertices,\r\n numberOfVertices\r\n );\r\n for (let i = 0; i < numberOfVertices; ++i) {\r\n indices[i] = i;\r\n }\r\n\r\n geometry.indices = indices;\r\n return geometry;\r\n}\r\n\r\nfunction indexTriangleFan(geometry) {\r\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numberOfVertices < 3) {\r\n throw new DeveloperError(\"The number of vertices must be at least three.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = IndexDatatype.createTypedArray(\r\n numberOfVertices,\r\n (numberOfVertices - 2) * 3\r\n );\r\n indices[0] = 1;\r\n indices[1] = 0;\r\n indices[2] = 2;\r\n\r\n let indicesIndex = 3;\r\n for (let i = 3; i < numberOfVertices; ++i) {\r\n indices[indicesIndex++] = i - 1;\r\n indices[indicesIndex++] = 0;\r\n indices[indicesIndex++] = i;\r\n }\r\n\r\n geometry.indices = indices;\r\n geometry.primitiveType = PrimitiveType.TRIANGLES;\r\n return geometry;\r\n}\r\n\r\nfunction indexTriangleStrip(geometry) {\r\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numberOfVertices < 3) {\r\n throw new DeveloperError(\"The number of vertices must be at least 3.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = IndexDatatype.createTypedArray(\r\n numberOfVertices,\r\n (numberOfVertices - 2) * 3\r\n );\r\n indices[0] = 0;\r\n indices[1] = 1;\r\n indices[2] = 2;\r\n\r\n if (numberOfVertices > 3) {\r\n indices[3] = 0;\r\n indices[4] = 2;\r\n indices[5] = 3;\r\n }\r\n\r\n let indicesIndex = 6;\r\n for (let i = 3; i < numberOfVertices - 1; i += 2) {\r\n indices[indicesIndex++] = i;\r\n indices[indicesIndex++] = i - 1;\r\n indices[indicesIndex++] = i + 1;\r\n\r\n if (i + 2 < numberOfVertices) {\r\n indices[indicesIndex++] = i;\r\n indices[indicesIndex++] = i + 1;\r\n indices[indicesIndex++] = i + 2;\r\n }\r\n }\r\n\r\n geometry.indices = indices;\r\n geometry.primitiveType = PrimitiveType.TRIANGLES;\r\n return geometry;\r\n}\r\n\r\nfunction indexLines(geometry) {\r\n if (defined(geometry.indices)) {\r\n return geometry;\r\n }\r\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numberOfVertices < 2) {\r\n throw new DeveloperError(\"The number of vertices must be at least two.\");\r\n }\r\n if (numberOfVertices % 2 !== 0) {\r\n throw new DeveloperError(\"The number of vertices must be a multiple of 2.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = IndexDatatype.createTypedArray(\r\n numberOfVertices,\r\n numberOfVertices\r\n );\r\n for (let i = 0; i < numberOfVertices; ++i) {\r\n indices[i] = i;\r\n }\r\n\r\n geometry.indices = indices;\r\n return geometry;\r\n}\r\n\r\nfunction indexLineStrip(geometry) {\r\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numberOfVertices < 2) {\r\n throw new DeveloperError(\"The number of vertices must be at least two.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = IndexDatatype.createTypedArray(\r\n numberOfVertices,\r\n (numberOfVertices - 1) * 2\r\n );\r\n indices[0] = 0;\r\n indices[1] = 1;\r\n let indicesIndex = 2;\r\n for (let i = 2; i < numberOfVertices; ++i) {\r\n indices[indicesIndex++] = i - 1;\r\n indices[indicesIndex++] = i;\r\n }\r\n\r\n geometry.indices = indices;\r\n geometry.primitiveType = PrimitiveType.LINES;\r\n return geometry;\r\n}\r\n\r\nfunction indexLineLoop(geometry) {\r\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (numberOfVertices < 2) {\r\n throw new DeveloperError(\"The number of vertices must be at least two.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const indices = IndexDatatype.createTypedArray(\r\n numberOfVertices,\r\n numberOfVertices * 2\r\n );\r\n\r\n indices[0] = 0;\r\n indices[1] = 1;\r\n\r\n let indicesIndex = 2;\r\n for (let i = 2; i < numberOfVertices; ++i) {\r\n indices[indicesIndex++] = i - 1;\r\n indices[indicesIndex++] = i;\r\n }\r\n\r\n indices[indicesIndex++] = numberOfVertices - 1;\r\n indices[indicesIndex] = 0;\r\n\r\n geometry.indices = indices;\r\n geometry.primitiveType = PrimitiveType.LINES;\r\n return geometry;\r\n}\r\n\r\nfunction indexPrimitive(geometry) {\r\n switch (geometry.primitiveType) {\r\n case PrimitiveType.TRIANGLE_FAN:\r\n return indexTriangleFan(geometry);\r\n case PrimitiveType.TRIANGLE_STRIP:\r\n return indexTriangleStrip(geometry);\r\n case PrimitiveType.TRIANGLES:\r\n return indexTriangles(geometry);\r\n case PrimitiveType.LINE_STRIP:\r\n return indexLineStrip(geometry);\r\n case PrimitiveType.LINE_LOOP:\r\n return indexLineLoop(geometry);\r\n case PrimitiveType.LINES:\r\n return indexLines(geometry);\r\n }\r\n\r\n return geometry;\r\n}\r\n\r\nfunction offsetPointFromXZPlane(p, isBehind) {\r\n if (Math.abs(p.y) < CesiumMath.EPSILON6) {\r\n if (isBehind) {\r\n p.y = -CesiumMath.EPSILON6;\r\n } else {\r\n p.y = CesiumMath.EPSILON6;\r\n }\r\n }\r\n}\r\n\r\nfunction offsetTriangleFromXZPlane(p0, p1, p2) {\r\n if (p0.y !== 0.0 && p1.y !== 0.0 && p2.y !== 0.0) {\r\n offsetPointFromXZPlane(p0, p0.y < 0.0);\r\n offsetPointFromXZPlane(p1, p1.y < 0.0);\r\n offsetPointFromXZPlane(p2, p2.y < 0.0);\r\n return;\r\n }\r\n\r\n const p0y = Math.abs(p0.y);\r\n const p1y = Math.abs(p1.y);\r\n const p2y = Math.abs(p2.y);\r\n\r\n let sign;\r\n if (p0y > p1y) {\r\n if (p0y > p2y) {\r\n sign = CesiumMath.sign(p0.y);\r\n } else {\r\n sign = CesiumMath.sign(p2.y);\r\n }\r\n } else if (p1y > p2y) {\r\n sign = CesiumMath.sign(p1.y);\r\n } else {\r\n sign = CesiumMath.sign(p2.y);\r\n }\r\n\r\n const isBehind = sign < 0.0;\r\n offsetPointFromXZPlane(p0, isBehind);\r\n offsetPointFromXZPlane(p1, isBehind);\r\n offsetPointFromXZPlane(p2, isBehind);\r\n}\r\n\r\nconst c3 = new Cartesian3();\r\nfunction getXZIntersectionOffsetPoints(p, p1, u1, v1) {\r\n Cartesian3.add(\r\n p,\r\n Cartesian3.multiplyByScalar(\r\n Cartesian3.subtract(p1, p, c3),\r\n p.y / (p.y - p1.y),\r\n c3\r\n ),\r\n u1\r\n );\r\n Cartesian3.clone(u1, v1);\r\n offsetPointFromXZPlane(u1, true);\r\n offsetPointFromXZPlane(v1, false);\r\n}\r\n\r\nconst u1 = new Cartesian3();\r\nconst u2 = new Cartesian3();\r\nconst q1 = new Cartesian3();\r\nconst q2 = new Cartesian3();\r\n\r\nconst splitTriangleResult = {\r\n positions: new Array(7),\r\n indices: new Array(3 * 3),\r\n};\r\n\r\nfunction splitTriangle(p0, p1, p2) {\r\n // In WGS84 coordinates, for a triangle approximately on the\r\n // ellipsoid to cross the IDL, first it needs to be on the\r\n // negative side of the plane x = 0.\r\n if (p0.x >= 0.0 || p1.x >= 0.0 || p2.x >= 0.0) {\r\n return undefined;\r\n }\r\n\r\n offsetTriangleFromXZPlane(p0, p1, p2);\r\n\r\n const p0Behind = p0.y < 0.0;\r\n const p1Behind = p1.y < 0.0;\r\n const p2Behind = p2.y < 0.0;\r\n\r\n let numBehind = 0;\r\n numBehind += p0Behind ? 1 : 0;\r\n numBehind += p1Behind ? 1 : 0;\r\n numBehind += p2Behind ? 1 : 0;\r\n\r\n const indices = splitTriangleResult.indices;\r\n\r\n if (numBehind === 1) {\r\n indices[1] = 3;\r\n indices[2] = 4;\r\n indices[5] = 6;\r\n indices[7] = 6;\r\n indices[8] = 5;\r\n\r\n if (p0Behind) {\r\n getXZIntersectionOffsetPoints(p0, p1, u1, q1);\r\n getXZIntersectionOffsetPoints(p0, p2, u2, q2);\r\n\r\n indices[0] = 0;\r\n indices[3] = 1;\r\n indices[4] = 2;\r\n indices[6] = 1;\r\n } else if (p1Behind) {\r\n getXZIntersectionOffsetPoints(p1, p2, u1, q1);\r\n getXZIntersectionOffsetPoints(p1, p0, u2, q2);\r\n\r\n indices[0] = 1;\r\n indices[3] = 2;\r\n indices[4] = 0;\r\n indices[6] = 2;\r\n } else if (p2Behind) {\r\n getXZIntersectionOffsetPoints(p2, p0, u1, q1);\r\n getXZIntersectionOffsetPoints(p2, p1, u2, q2);\r\n\r\n indices[0] = 2;\r\n indices[3] = 0;\r\n indices[4] = 1;\r\n indices[6] = 0;\r\n }\r\n } else if (numBehind === 2) {\r\n indices[2] = 4;\r\n indices[4] = 4;\r\n indices[5] = 3;\r\n indices[7] = 5;\r\n indices[8] = 6;\r\n\r\n if (!p0Behind) {\r\n getXZIntersectionOffsetPoints(p0, p1, u1, q1);\r\n getXZIntersectionOffsetPoints(p0, p2, u2, q2);\r\n\r\n indices[0] = 1;\r\n indices[1] = 2;\r\n indices[3] = 1;\r\n indices[6] = 0;\r\n } else if (!p1Behind) {\r\n getXZIntersectionOffsetPoints(p1, p2, u1, q1);\r\n getXZIntersectionOffsetPoints(p1, p0, u2, q2);\r\n\r\n indices[0] = 2;\r\n indices[1] = 0;\r\n indices[3] = 2;\r\n indices[6] = 1;\r\n } else if (!p2Behind) {\r\n getXZIntersectionOffsetPoints(p2, p0, u1, q1);\r\n getXZIntersectionOffsetPoints(p2, p1, u2, q2);\r\n\r\n indices[0] = 0;\r\n indices[1] = 1;\r\n indices[3] = 0;\r\n indices[6] = 2;\r\n }\r\n }\r\n\r\n const positions = splitTriangleResult.positions;\r\n positions[0] = p0;\r\n positions[1] = p1;\r\n positions[2] = p2;\r\n positions.length = 3;\r\n\r\n if (numBehind === 1 || numBehind === 2) {\r\n positions[3] = u1;\r\n positions[4] = u2;\r\n positions[5] = q1;\r\n positions[6] = q2;\r\n positions.length = 7;\r\n }\r\n\r\n return splitTriangleResult;\r\n}\r\n\r\nfunction updateGeometryAfterSplit(geometry, computeBoundingSphere) {\r\n const attributes = geometry.attributes;\r\n\r\n if (attributes.position.values.length === 0) {\r\n return undefined;\r\n }\r\n\r\n for (const property in attributes) {\r\n if (\r\n attributes.hasOwnProperty(property) &&\r\n defined(attributes[property]) &&\r\n defined(attributes[property].values)\r\n ) {\r\n const attribute = attributes[property];\r\n attribute.values = ComponentDatatype.createTypedArray(\r\n attribute.componentDatatype,\r\n attribute.values\r\n );\r\n }\r\n }\r\n\r\n const numberOfVertices = Geometry.computeNumberOfVertices(geometry);\r\n geometry.indices = IndexDatatype.createTypedArray(\r\n numberOfVertices,\r\n geometry.indices\r\n );\r\n\r\n if (computeBoundingSphere) {\r\n geometry.boundingSphere = BoundingSphere.fromVertices(\r\n attributes.position.values\r\n );\r\n }\r\n\r\n return geometry;\r\n}\r\n\r\nfunction copyGeometryForSplit(geometry) {\r\n const attributes = geometry.attributes;\r\n const copiedAttributes = {};\r\n\r\n for (const property in attributes) {\r\n if (\r\n attributes.hasOwnProperty(property) &&\r\n defined(attributes[property]) &&\r\n defined(attributes[property].values)\r\n ) {\r\n const attribute = attributes[property];\r\n copiedAttributes[property] = new GeometryAttribute({\r\n componentDatatype: attribute.componentDatatype,\r\n componentsPerAttribute: attribute.componentsPerAttribute,\r\n normalize: attribute.normalize,\r\n values: [],\r\n });\r\n }\r\n }\r\n\r\n return new Geometry({\r\n attributes: copiedAttributes,\r\n indices: [],\r\n primitiveType: geometry.primitiveType,\r\n });\r\n}\r\n\r\nfunction updateInstanceAfterSplit(instance, westGeometry, eastGeometry) {\r\n const computeBoundingSphere = defined(instance.geometry.boundingSphere);\r\n\r\n westGeometry = updateGeometryAfterSplit(westGeometry, computeBoundingSphere);\r\n eastGeometry = updateGeometryAfterSplit(eastGeometry, computeBoundingSphere);\r\n\r\n if (defined(eastGeometry) && !defined(westGeometry)) {\r\n instance.geometry = eastGeometry;\r\n } else if (!defined(eastGeometry) && defined(westGeometry)) {\r\n instance.geometry = westGeometry;\r\n } else {\r\n instance.westHemisphereGeometry = westGeometry;\r\n instance.eastHemisphereGeometry = eastGeometry;\r\n instance.geometry = undefined;\r\n }\r\n}\r\n\r\nfunction generateBarycentricInterpolateFunction(\r\n CartesianType,\r\n numberOfComponents\r\n) {\r\n const v0Scratch = new CartesianType();\r\n const v1Scratch = new CartesianType();\r\n const v2Scratch = new CartesianType();\r\n\r\n return function (\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n sourceValues,\r\n currentValues,\r\n insertedIndex,\r\n normalize\r\n ) {\r\n const v0 = CartesianType.fromArray(\r\n sourceValues,\r\n i0 * numberOfComponents,\r\n v0Scratch\r\n );\r\n const v1 = CartesianType.fromArray(\r\n sourceValues,\r\n i1 * numberOfComponents,\r\n v1Scratch\r\n );\r\n const v2 = CartesianType.fromArray(\r\n sourceValues,\r\n i2 * numberOfComponents,\r\n v2Scratch\r\n );\r\n\r\n CartesianType.multiplyByScalar(v0, coords.x, v0);\r\n CartesianType.multiplyByScalar(v1, coords.y, v1);\r\n CartesianType.multiplyByScalar(v2, coords.z, v2);\r\n\r\n const value = CartesianType.add(v0, v1, v0);\r\n CartesianType.add(value, v2, value);\r\n\r\n if (normalize) {\r\n CartesianType.normalize(value, value);\r\n }\r\n\r\n CartesianType.pack(\r\n value,\r\n currentValues,\r\n insertedIndex * numberOfComponents\r\n );\r\n };\r\n}\r\n\r\nconst interpolateAndPackCartesian4 = generateBarycentricInterpolateFunction(\r\n Cartesian4,\r\n 4\r\n);\r\nconst interpolateAndPackCartesian3 = generateBarycentricInterpolateFunction(\r\n Cartesian3,\r\n 3\r\n);\r\nconst interpolateAndPackCartesian2 = generateBarycentricInterpolateFunction(\r\n Cartesian2,\r\n 2\r\n);\r\nconst interpolateAndPackBoolean = function (\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n sourceValues,\r\n currentValues,\r\n insertedIndex\r\n) {\r\n const v1 = sourceValues[i0] * coords.x;\r\n const v2 = sourceValues[i1] * coords.y;\r\n const v3 = sourceValues[i2] * coords.z;\r\n currentValues[insertedIndex] = v1 + v2 + v3 > CesiumMath.EPSILON6 ? 1 : 0;\r\n};\r\n\r\nconst p0Scratch = new Cartesian3();\r\nconst p1Scratch = new Cartesian3();\r\nconst p2Scratch = new Cartesian3();\r\nconst barycentricScratch = new Cartesian3();\r\n\r\nfunction computeTriangleAttributes(\r\n i0,\r\n i1,\r\n i2,\r\n point,\r\n positions,\r\n normals,\r\n tangents,\r\n bitangents,\r\n texCoords,\r\n extrudeDirections,\r\n applyOffset,\r\n currentAttributes,\r\n customAttributeNames,\r\n customAttributesLength,\r\n allAttributes,\r\n insertedIndex\r\n) {\r\n if (\r\n !defined(normals) &&\r\n !defined(tangents) &&\r\n !defined(bitangents) &&\r\n !defined(texCoords) &&\r\n !defined(extrudeDirections) &&\r\n customAttributesLength === 0\r\n ) {\r\n return;\r\n }\r\n\r\n const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\r\n const p1 = Cartesian3.fromArray(positions, i1 * 3, p1Scratch);\r\n const p2 = Cartesian3.fromArray(positions, i2 * 3, p2Scratch);\r\n const coords = barycentricCoordinates(point, p0, p1, p2, barycentricScratch);\r\n if (!defined(coords)) {\r\n return;\r\n }\r\n\r\n if (defined(normals)) {\r\n interpolateAndPackCartesian3(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n normals,\r\n currentAttributes.normal.values,\r\n insertedIndex,\r\n true\r\n );\r\n }\r\n\r\n if (defined(extrudeDirections)) {\r\n const d0 = Cartesian3.fromArray(extrudeDirections, i0 * 3, p0Scratch);\r\n const d1 = Cartesian3.fromArray(extrudeDirections, i1 * 3, p1Scratch);\r\n const d2 = Cartesian3.fromArray(extrudeDirections, i2 * 3, p2Scratch);\r\n\r\n Cartesian3.multiplyByScalar(d0, coords.x, d0);\r\n Cartesian3.multiplyByScalar(d1, coords.y, d1);\r\n Cartesian3.multiplyByScalar(d2, coords.z, d2);\r\n\r\n let direction;\r\n if (\r\n !Cartesian3.equals(d0, Cartesian3.ZERO) ||\r\n !Cartesian3.equals(d1, Cartesian3.ZERO) ||\r\n !Cartesian3.equals(d2, Cartesian3.ZERO)\r\n ) {\r\n direction = Cartesian3.add(d0, d1, d0);\r\n Cartesian3.add(direction, d2, direction);\r\n Cartesian3.normalize(direction, direction);\r\n } else {\r\n direction = p0Scratch;\r\n direction.x = 0;\r\n direction.y = 0;\r\n direction.z = 0;\r\n }\r\n Cartesian3.pack(\r\n direction,\r\n currentAttributes.extrudeDirection.values,\r\n insertedIndex * 3\r\n );\r\n }\r\n\r\n if (defined(applyOffset)) {\r\n interpolateAndPackBoolean(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n applyOffset,\r\n currentAttributes.applyOffset.values,\r\n insertedIndex\r\n );\r\n }\r\n\r\n if (defined(tangents)) {\r\n interpolateAndPackCartesian3(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n tangents,\r\n currentAttributes.tangent.values,\r\n insertedIndex,\r\n true\r\n );\r\n }\r\n\r\n if (defined(bitangents)) {\r\n interpolateAndPackCartesian3(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n bitangents,\r\n currentAttributes.bitangent.values,\r\n insertedIndex,\r\n true\r\n );\r\n }\r\n\r\n if (defined(texCoords)) {\r\n interpolateAndPackCartesian2(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n texCoords,\r\n currentAttributes.st.values,\r\n insertedIndex\r\n );\r\n }\r\n\r\n if (customAttributesLength > 0) {\r\n for (let i = 0; i < customAttributesLength; i++) {\r\n const attributeName = customAttributeNames[i];\r\n genericInterpolate(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n insertedIndex,\r\n allAttributes[attributeName],\r\n currentAttributes[attributeName]\r\n );\r\n }\r\n }\r\n}\r\n\r\nfunction genericInterpolate(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n insertedIndex,\r\n sourceAttribute,\r\n currentAttribute\r\n) {\r\n const componentsPerAttribute = sourceAttribute.componentsPerAttribute;\r\n const sourceValues = sourceAttribute.values;\r\n const currentValues = currentAttribute.values;\r\n switch (componentsPerAttribute) {\r\n case 4:\r\n interpolateAndPackCartesian4(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n sourceValues,\r\n currentValues,\r\n insertedIndex,\r\n false\r\n );\r\n break;\r\n case 3:\r\n interpolateAndPackCartesian3(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n sourceValues,\r\n currentValues,\r\n insertedIndex,\r\n false\r\n );\r\n break;\r\n case 2:\r\n interpolateAndPackCartesian2(\r\n i0,\r\n i1,\r\n i2,\r\n coords,\r\n sourceValues,\r\n currentValues,\r\n insertedIndex,\r\n false\r\n );\r\n break;\r\n default:\r\n currentValues[insertedIndex] =\r\n sourceValues[i0] * coords.x +\r\n sourceValues[i1] * coords.y +\r\n sourceValues[i2] * coords.z;\r\n }\r\n}\r\n\r\nfunction insertSplitPoint(\r\n currentAttributes,\r\n currentIndices,\r\n currentIndexMap,\r\n indices,\r\n currentIndex,\r\n point\r\n) {\r\n const insertIndex = currentAttributes.position.values.length / 3;\r\n\r\n if (currentIndex !== -1) {\r\n const prevIndex = indices[currentIndex];\r\n const newIndex = currentIndexMap[prevIndex];\r\n\r\n if (newIndex === -1) {\r\n currentIndexMap[prevIndex] = insertIndex;\r\n currentAttributes.position.values.push(point.x, point.y, point.z);\r\n currentIndices.push(insertIndex);\r\n return insertIndex;\r\n }\r\n\r\n currentIndices.push(newIndex);\r\n return newIndex;\r\n }\r\n\r\n currentAttributes.position.values.push(point.x, point.y, point.z);\r\n currentIndices.push(insertIndex);\r\n return insertIndex;\r\n}\r\n\r\nconst NAMED_ATTRIBUTES = {\r\n position: true,\r\n normal: true,\r\n bitangent: true,\r\n tangent: true,\r\n st: true,\r\n extrudeDirection: true,\r\n applyOffset: true,\r\n};\r\nfunction splitLongitudeTriangles(instance) {\r\n const geometry = instance.geometry;\r\n const attributes = geometry.attributes;\r\n const positions = attributes.position.values;\r\n const normals = defined(attributes.normal)\r\n ? attributes.normal.values\r\n : undefined;\r\n const bitangents = defined(attributes.bitangent)\r\n ? attributes.bitangent.values\r\n : undefined;\r\n const tangents = defined(attributes.tangent)\r\n ? attributes.tangent.values\r\n : undefined;\r\n const texCoords = defined(attributes.st) ? attributes.st.values : undefined;\r\n const extrudeDirections = defined(attributes.extrudeDirection)\r\n ? attributes.extrudeDirection.values\r\n : undefined;\r\n const applyOffset = defined(attributes.applyOffset)\r\n ? attributes.applyOffset.values\r\n : undefined;\r\n const indices = geometry.indices;\r\n\r\n const customAttributeNames = [];\r\n for (const attributeName in attributes) {\r\n if (\r\n attributes.hasOwnProperty(attributeName) &&\r\n !NAMED_ATTRIBUTES[attributeName] &&\r\n defined(attributes[attributeName])\r\n ) {\r\n customAttributeNames.push(attributeName);\r\n }\r\n }\r\n const customAttributesLength = customAttributeNames.length;\r\n\r\n const eastGeometry = copyGeometryForSplit(geometry);\r\n const westGeometry = copyGeometryForSplit(geometry);\r\n\r\n let currentAttributes;\r\n let currentIndices;\r\n let currentIndexMap;\r\n let insertedIndex;\r\n let i;\r\n\r\n const westGeometryIndexMap = [];\r\n westGeometryIndexMap.length = positions.length / 3;\r\n\r\n const eastGeometryIndexMap = [];\r\n eastGeometryIndexMap.length = positions.length / 3;\r\n\r\n for (i = 0; i < westGeometryIndexMap.length; ++i) {\r\n westGeometryIndexMap[i] = -1;\r\n eastGeometryIndexMap[i] = -1;\r\n }\r\n\r\n const len = indices.length;\r\n for (i = 0; i < len; i += 3) {\r\n const i0 = indices[i];\r\n const i1 = indices[i + 1];\r\n const i2 = indices[i + 2];\r\n\r\n let p0 = Cartesian3.fromArray(positions, i0 * 3);\r\n let p1 = Cartesian3.fromArray(positions, i1 * 3);\r\n let p2 = Cartesian3.fromArray(positions, i2 * 3);\r\n\r\n const result = splitTriangle(p0, p1, p2);\r\n if (defined(result) && result.positions.length > 3) {\r\n const resultPositions = result.positions;\r\n const resultIndices = result.indices;\r\n const resultLength = resultIndices.length;\r\n\r\n for (let j = 0; j < resultLength; ++j) {\r\n const resultIndex = resultIndices[j];\r\n const point = resultPositions[resultIndex];\r\n\r\n if (point.y < 0.0) {\r\n currentAttributes = westGeometry.attributes;\r\n currentIndices = westGeometry.indices;\r\n currentIndexMap = westGeometryIndexMap;\r\n } else {\r\n currentAttributes = eastGeometry.attributes;\r\n currentIndices = eastGeometry.indices;\r\n currentIndexMap = eastGeometryIndexMap;\r\n }\r\n\r\n insertedIndex = insertSplitPoint(\r\n currentAttributes,\r\n currentIndices,\r\n currentIndexMap,\r\n indices,\r\n resultIndex < 3 ? i + resultIndex : -1,\r\n point\r\n );\r\n computeTriangleAttributes(\r\n i0,\r\n i1,\r\n i2,\r\n point,\r\n positions,\r\n normals,\r\n tangents,\r\n bitangents,\r\n texCoords,\r\n extrudeDirections,\r\n applyOffset,\r\n currentAttributes,\r\n customAttributeNames,\r\n customAttributesLength,\r\n attributes,\r\n insertedIndex\r\n );\r\n }\r\n } else {\r\n if (defined(result)) {\r\n p0 = result.positions[0];\r\n p1 = result.positions[1];\r\n p2 = result.positions[2];\r\n }\r\n\r\n if (p0.y < 0.0) {\r\n currentAttributes = westGeometry.attributes;\r\n currentIndices = westGeometry.indices;\r\n currentIndexMap = westGeometryIndexMap;\r\n } else {\r\n currentAttributes = eastGeometry.attributes;\r\n currentIndices = eastGeometry.indices;\r\n currentIndexMap = eastGeometryIndexMap;\r\n }\r\n\r\n insertedIndex = insertSplitPoint(\r\n currentAttributes,\r\n currentIndices,\r\n currentIndexMap,\r\n indices,\r\n i,\r\n p0\r\n );\r\n computeTriangleAttributes(\r\n i0,\r\n i1,\r\n i2,\r\n p0,\r\n positions,\r\n normals,\r\n tangents,\r\n bitangents,\r\n texCoords,\r\n extrudeDirections,\r\n applyOffset,\r\n currentAttributes,\r\n customAttributeNames,\r\n customAttributesLength,\r\n attributes,\r\n insertedIndex\r\n );\r\n\r\n insertedIndex = insertSplitPoint(\r\n currentAttributes,\r\n currentIndices,\r\n currentIndexMap,\r\n indices,\r\n i + 1,\r\n p1\r\n );\r\n computeTriangleAttributes(\r\n i0,\r\n i1,\r\n i2,\r\n p1,\r\n positions,\r\n normals,\r\n tangents,\r\n bitangents,\r\n texCoords,\r\n extrudeDirections,\r\n applyOffset,\r\n currentAttributes,\r\n customAttributeNames,\r\n customAttributesLength,\r\n attributes,\r\n insertedIndex\r\n );\r\n\r\n insertedIndex = insertSplitPoint(\r\n currentAttributes,\r\n currentIndices,\r\n currentIndexMap,\r\n indices,\r\n i + 2,\r\n p2\r\n );\r\n computeTriangleAttributes(\r\n i0,\r\n i1,\r\n i2,\r\n p2,\r\n positions,\r\n normals,\r\n tangents,\r\n bitangents,\r\n texCoords,\r\n extrudeDirections,\r\n applyOffset,\r\n currentAttributes,\r\n customAttributeNames,\r\n customAttributesLength,\r\n attributes,\r\n insertedIndex\r\n );\r\n }\r\n }\r\n\r\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\r\n}\r\n\r\nconst xzPlane = Plane.fromPointNormal(Cartesian3.ZERO, Cartesian3.UNIT_Y);\r\n\r\nconst offsetScratch = new Cartesian3();\r\nconst offsetPointScratch = new Cartesian3();\r\n\r\nfunction computeLineAttributes(\r\n i0,\r\n i1,\r\n point,\r\n positions,\r\n insertIndex,\r\n currentAttributes,\r\n applyOffset\r\n) {\r\n if (!defined(applyOffset)) {\r\n return;\r\n }\r\n\r\n const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\r\n if (Cartesian3.equalsEpsilon(p0, point, CesiumMath.EPSILON10)) {\r\n currentAttributes.applyOffset.values[insertIndex] = applyOffset[i0];\r\n } else {\r\n currentAttributes.applyOffset.values[insertIndex] = applyOffset[i1];\r\n }\r\n}\r\n\r\nfunction splitLongitudeLines(instance) {\r\n const geometry = instance.geometry;\r\n const attributes = geometry.attributes;\r\n const positions = attributes.position.values;\r\n const applyOffset = defined(attributes.applyOffset)\r\n ? attributes.applyOffset.values\r\n : undefined;\r\n const indices = geometry.indices;\r\n\r\n const eastGeometry = copyGeometryForSplit(geometry);\r\n const westGeometry = copyGeometryForSplit(geometry);\r\n\r\n let i;\r\n const length = indices.length;\r\n\r\n const westGeometryIndexMap = [];\r\n westGeometryIndexMap.length = positions.length / 3;\r\n\r\n const eastGeometryIndexMap = [];\r\n eastGeometryIndexMap.length = positions.length / 3;\r\n\r\n for (i = 0; i < westGeometryIndexMap.length; ++i) {\r\n westGeometryIndexMap[i] = -1;\r\n eastGeometryIndexMap[i] = -1;\r\n }\r\n\r\n for (i = 0; i < length; i += 2) {\r\n const i0 = indices[i];\r\n const i1 = indices[i + 1];\r\n\r\n const p0 = Cartesian3.fromArray(positions, i0 * 3, p0Scratch);\r\n const p1 = Cartesian3.fromArray(positions, i1 * 3, p1Scratch);\r\n let insertIndex;\r\n\r\n if (Math.abs(p0.y) < CesiumMath.EPSILON6) {\r\n if (p0.y < 0.0) {\r\n p0.y = -CesiumMath.EPSILON6;\r\n } else {\r\n p0.y = CesiumMath.EPSILON6;\r\n }\r\n }\r\n\r\n if (Math.abs(p1.y) < CesiumMath.EPSILON6) {\r\n if (p1.y < 0.0) {\r\n p1.y = -CesiumMath.EPSILON6;\r\n } else {\r\n p1.y = CesiumMath.EPSILON6;\r\n }\r\n }\r\n\r\n let p0Attributes = eastGeometry.attributes;\r\n let p0Indices = eastGeometry.indices;\r\n let p0IndexMap = eastGeometryIndexMap;\r\n let p1Attributes = westGeometry.attributes;\r\n let p1Indices = westGeometry.indices;\r\n let p1IndexMap = westGeometryIndexMap;\r\n\r\n const intersection = IntersectionTests.lineSegmentPlane(\r\n p0,\r\n p1,\r\n xzPlane,\r\n p2Scratch\r\n );\r\n if (defined(intersection)) {\r\n // move point on the xz-plane slightly away from the plane\r\n const offset = Cartesian3.multiplyByScalar(\r\n Cartesian3.UNIT_Y,\r\n 5.0 * CesiumMath.EPSILON9,\r\n offsetScratch\r\n );\r\n if (p0.y < 0.0) {\r\n Cartesian3.negate(offset, offset);\r\n\r\n p0Attributes = westGeometry.attributes;\r\n p0Indices = westGeometry.indices;\r\n p0IndexMap = westGeometryIndexMap;\r\n p1Attributes = eastGeometry.attributes;\r\n p1Indices = eastGeometry.indices;\r\n p1IndexMap = eastGeometryIndexMap;\r\n }\r\n\r\n const offsetPoint = Cartesian3.add(\r\n intersection,\r\n offset,\r\n offsetPointScratch\r\n );\r\n\r\n insertIndex = insertSplitPoint(\r\n p0Attributes,\r\n p0Indices,\r\n p0IndexMap,\r\n indices,\r\n i,\r\n p0\r\n );\r\n computeLineAttributes(\r\n i0,\r\n i1,\r\n p0,\r\n positions,\r\n insertIndex,\r\n p0Attributes,\r\n applyOffset\r\n );\r\n\r\n insertIndex = insertSplitPoint(\r\n p0Attributes,\r\n p0Indices,\r\n p0IndexMap,\r\n indices,\r\n -1,\r\n offsetPoint\r\n );\r\n computeLineAttributes(\r\n i0,\r\n i1,\r\n offsetPoint,\r\n positions,\r\n insertIndex,\r\n p0Attributes,\r\n applyOffset\r\n );\r\n\r\n Cartesian3.negate(offset, offset);\r\n Cartesian3.add(intersection, offset, offsetPoint);\r\n insertIndex = insertSplitPoint(\r\n p1Attributes,\r\n p1Indices,\r\n p1IndexMap,\r\n indices,\r\n -1,\r\n offsetPoint\r\n );\r\n computeLineAttributes(\r\n i0,\r\n i1,\r\n offsetPoint,\r\n positions,\r\n insertIndex,\r\n p1Attributes,\r\n applyOffset\r\n );\r\n\r\n insertIndex = insertSplitPoint(\r\n p1Attributes,\r\n p1Indices,\r\n p1IndexMap,\r\n indices,\r\n i + 1,\r\n p1\r\n );\r\n computeLineAttributes(\r\n i0,\r\n i1,\r\n p1,\r\n positions,\r\n insertIndex,\r\n p1Attributes,\r\n applyOffset\r\n );\r\n } else {\r\n let currentAttributes;\r\n let currentIndices;\r\n let currentIndexMap;\r\n\r\n if (p0.y < 0.0) {\r\n currentAttributes = westGeometry.attributes;\r\n currentIndices = westGeometry.indices;\r\n currentIndexMap = westGeometryIndexMap;\r\n } else {\r\n currentAttributes = eastGeometry.attributes;\r\n currentIndices = eastGeometry.indices;\r\n currentIndexMap = eastGeometryIndexMap;\r\n }\r\n\r\n insertIndex = insertSplitPoint(\r\n currentAttributes,\r\n currentIndices,\r\n currentIndexMap,\r\n indices,\r\n i,\r\n p0\r\n );\r\n computeLineAttributes(\r\n i0,\r\n i1,\r\n p0,\r\n positions,\r\n insertIndex,\r\n currentAttributes,\r\n applyOffset\r\n );\r\n\r\n insertIndex = insertSplitPoint(\r\n currentAttributes,\r\n currentIndices,\r\n currentIndexMap,\r\n indices,\r\n i + 1,\r\n p1\r\n );\r\n computeLineAttributes(\r\n i0,\r\n i1,\r\n p1,\r\n positions,\r\n insertIndex,\r\n currentAttributes,\r\n applyOffset\r\n );\r\n }\r\n }\r\n\r\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\r\n}\r\n\r\nconst cartesian2Scratch0 = new Cartesian2();\r\nconst cartesian2Scratch1 = new Cartesian2();\r\n\r\nconst cartesian3Scratch0 = new Cartesian3();\r\nconst cartesian3Scratch2 = new Cartesian3();\r\nconst cartesian3Scratch3 = new Cartesian3();\r\nconst cartesian3Scratch4 = new Cartesian3();\r\nconst cartesian3Scratch5 = new Cartesian3();\r\nconst cartesian3Scratch6 = new Cartesian3();\r\n\r\nconst cartesian4Scratch0 = new Cartesian4();\r\n\r\nfunction updateAdjacencyAfterSplit(geometry) {\r\n const attributes = geometry.attributes;\r\n const positions = attributes.position.values;\r\n const prevPositions = attributes.prevPosition.values;\r\n const nextPositions = attributes.nextPosition.values;\r\n\r\n const length = positions.length;\r\n for (let j = 0; j < length; j += 3) {\r\n const position = Cartesian3.unpack(positions, j, cartesian3Scratch0);\r\n if (position.x > 0.0) {\r\n continue;\r\n }\r\n\r\n const prevPosition = Cartesian3.unpack(\r\n prevPositions,\r\n j,\r\n cartesian3Scratch2\r\n );\r\n if (\r\n (position.y < 0.0 && prevPosition.y > 0.0) ||\r\n (position.y > 0.0 && prevPosition.y < 0.0)\r\n ) {\r\n if (j - 3 > 0) {\r\n prevPositions[j] = positions[j - 3];\r\n prevPositions[j + 1] = positions[j - 2];\r\n prevPositions[j + 2] = positions[j - 1];\r\n } else {\r\n Cartesian3.pack(position, prevPositions, j);\r\n }\r\n }\r\n\r\n const nextPosition = Cartesian3.unpack(\r\n nextPositions,\r\n j,\r\n cartesian3Scratch3\r\n );\r\n if (\r\n (position.y < 0.0 && nextPosition.y > 0.0) ||\r\n (position.y > 0.0 && nextPosition.y < 0.0)\r\n ) {\r\n if (j + 3 < length) {\r\n nextPositions[j] = positions[j + 3];\r\n nextPositions[j + 1] = positions[j + 4];\r\n nextPositions[j + 2] = positions[j + 5];\r\n } else {\r\n Cartesian3.pack(position, nextPositions, j);\r\n }\r\n }\r\n }\r\n}\r\n\r\nconst offsetScalar = 5.0 * CesiumMath.EPSILON9;\r\nconst coplanarOffset = CesiumMath.EPSILON6;\r\n\r\nfunction splitLongitudePolyline(instance) {\r\n const geometry = instance.geometry;\r\n const attributes = geometry.attributes;\r\n const positions = attributes.position.values;\r\n const prevPositions = attributes.prevPosition.values;\r\n const nextPositions = attributes.nextPosition.values;\r\n const expandAndWidths = attributes.expandAndWidth.values;\r\n\r\n const texCoords = defined(attributes.st) ? attributes.st.values : undefined;\r\n const colors = defined(attributes.color)\r\n ? attributes.color.values\r\n : undefined;\r\n\r\n const eastGeometry = copyGeometryForSplit(geometry);\r\n const westGeometry = copyGeometryForSplit(geometry);\r\n\r\n let i;\r\n let j;\r\n let index;\r\n\r\n let intersectionFound = false;\r\n\r\n const length = positions.length / 3;\r\n for (i = 0; i < length; i += 4) {\r\n const i0 = i;\r\n const i2 = i + 2;\r\n\r\n const p0 = Cartesian3.fromArray(positions, i0 * 3, cartesian3Scratch0);\r\n const p2 = Cartesian3.fromArray(positions, i2 * 3, cartesian3Scratch2);\r\n\r\n // Offset points that are close to the 180 longitude and change the previous/next point\r\n // to be the same offset point so it can be projected to 2D. There is special handling in the\r\n // shader for when position == prevPosition || position == nextPosition.\r\n if (Math.abs(p0.y) < coplanarOffset) {\r\n p0.y = coplanarOffset * (p2.y < 0.0 ? -1.0 : 1.0);\r\n positions[i * 3 + 1] = p0.y;\r\n positions[(i + 1) * 3 + 1] = p0.y;\r\n\r\n for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) {\r\n prevPositions[j] = positions[i * 3];\r\n prevPositions[j + 1] = positions[i * 3 + 1];\r\n prevPositions[j + 2] = positions[i * 3 + 2];\r\n }\r\n }\r\n\r\n // Do the same but for when the line crosses 180 longitude in the opposite direction.\r\n if (Math.abs(p2.y) < coplanarOffset) {\r\n p2.y = coplanarOffset * (p0.y < 0.0 ? -1.0 : 1.0);\r\n positions[(i + 2) * 3 + 1] = p2.y;\r\n positions[(i + 3) * 3 + 1] = p2.y;\r\n\r\n for (j = i0 * 3; j < i0 * 3 + 4 * 3; j += 3) {\r\n nextPositions[j] = positions[(i + 2) * 3];\r\n nextPositions[j + 1] = positions[(i + 2) * 3 + 1];\r\n nextPositions[j + 2] = positions[(i + 2) * 3 + 2];\r\n }\r\n }\r\n\r\n let p0Attributes = eastGeometry.attributes;\r\n let p0Indices = eastGeometry.indices;\r\n let p2Attributes = westGeometry.attributes;\r\n let p2Indices = westGeometry.indices;\r\n\r\n const intersection = IntersectionTests.lineSegmentPlane(\r\n p0,\r\n p2,\r\n xzPlane,\r\n cartesian3Scratch4\r\n );\r\n if (defined(intersection)) {\r\n intersectionFound = true;\r\n\r\n // move point on the xz-plane slightly away from the plane\r\n const offset = Cartesian3.multiplyByScalar(\r\n Cartesian3.UNIT_Y,\r\n offsetScalar,\r\n cartesian3Scratch5\r\n );\r\n if (p0.y < 0.0) {\r\n Cartesian3.negate(offset, offset);\r\n p0Attributes = westGeometry.attributes;\r\n p0Indices = westGeometry.indices;\r\n p2Attributes = eastGeometry.attributes;\r\n p2Indices = eastGeometry.indices;\r\n }\r\n\r\n const offsetPoint = Cartesian3.add(\r\n intersection,\r\n offset,\r\n cartesian3Scratch6\r\n );\r\n p0Attributes.position.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z);\r\n p0Attributes.position.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p0Attributes.position.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n\r\n p0Attributes.prevPosition.values.push(\r\n prevPositions[i0 * 3],\r\n prevPositions[i0 * 3 + 1],\r\n prevPositions[i0 * 3 + 2]\r\n );\r\n p0Attributes.prevPosition.values.push(\r\n prevPositions[i0 * 3 + 3],\r\n prevPositions[i0 * 3 + 4],\r\n prevPositions[i0 * 3 + 5]\r\n );\r\n p0Attributes.prevPosition.values.push(p0.x, p0.y, p0.z, p0.x, p0.y, p0.z);\r\n\r\n p0Attributes.nextPosition.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p0Attributes.nextPosition.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p0Attributes.nextPosition.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p0Attributes.nextPosition.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n\r\n Cartesian3.negate(offset, offset);\r\n Cartesian3.add(intersection, offset, offsetPoint);\r\n p2Attributes.position.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p2Attributes.position.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p2Attributes.position.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z);\r\n\r\n p2Attributes.prevPosition.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p2Attributes.prevPosition.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p2Attributes.prevPosition.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n p2Attributes.prevPosition.values.push(\r\n offsetPoint.x,\r\n offsetPoint.y,\r\n offsetPoint.z\r\n );\r\n\r\n p2Attributes.nextPosition.values.push(p2.x, p2.y, p2.z, p2.x, p2.y, p2.z);\r\n p2Attributes.nextPosition.values.push(\r\n nextPositions[i2 * 3],\r\n nextPositions[i2 * 3 + 1],\r\n nextPositions[i2 * 3 + 2]\r\n );\r\n p2Attributes.nextPosition.values.push(\r\n nextPositions[i2 * 3 + 3],\r\n nextPositions[i2 * 3 + 4],\r\n nextPositions[i2 * 3 + 5]\r\n );\r\n\r\n const ew0 = Cartesian2.fromArray(\r\n expandAndWidths,\r\n i0 * 2,\r\n cartesian2Scratch0\r\n );\r\n const width = Math.abs(ew0.y);\r\n\r\n p0Attributes.expandAndWidth.values.push(-1, width, 1, width);\r\n p0Attributes.expandAndWidth.values.push(-1, -width, 1, -width);\r\n p2Attributes.expandAndWidth.values.push(-1, width, 1, width);\r\n p2Attributes.expandAndWidth.values.push(-1, -width, 1, -width);\r\n\r\n let t = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(intersection, p0, cartesian3Scratch3)\r\n );\r\n t /= Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(p2, p0, cartesian3Scratch3)\r\n );\r\n\r\n if (defined(colors)) {\r\n const c0 = Cartesian4.fromArray(colors, i0 * 4, cartesian4Scratch0);\r\n const c2 = Cartesian4.fromArray(colors, i2 * 4, cartesian4Scratch0);\r\n\r\n const r = CesiumMath.lerp(c0.x, c2.x, t);\r\n const g = CesiumMath.lerp(c0.y, c2.y, t);\r\n const b = CesiumMath.lerp(c0.z, c2.z, t);\r\n const a = CesiumMath.lerp(c0.w, c2.w, t);\r\n\r\n for (j = i0 * 4; j < i0 * 4 + 2 * 4; ++j) {\r\n p0Attributes.color.values.push(colors[j]);\r\n }\r\n p0Attributes.color.values.push(r, g, b, a);\r\n p0Attributes.color.values.push(r, g, b, a);\r\n p2Attributes.color.values.push(r, g, b, a);\r\n p2Attributes.color.values.push(r, g, b, a);\r\n for (j = i2 * 4; j < i2 * 4 + 2 * 4; ++j) {\r\n p2Attributes.color.values.push(colors[j]);\r\n }\r\n }\r\n\r\n if (defined(texCoords)) {\r\n const s0 = Cartesian2.fromArray(texCoords, i0 * 2, cartesian2Scratch0);\r\n const s3 = Cartesian2.fromArray(\r\n texCoords,\r\n (i + 3) * 2,\r\n cartesian2Scratch1\r\n );\r\n\r\n const sx = CesiumMath.lerp(s0.x, s3.x, t);\r\n\r\n for (j = i0 * 2; j < i0 * 2 + 2 * 2; ++j) {\r\n p0Attributes.st.values.push(texCoords[j]);\r\n }\r\n p0Attributes.st.values.push(sx, s0.y);\r\n p0Attributes.st.values.push(sx, s3.y);\r\n p2Attributes.st.values.push(sx, s0.y);\r\n p2Attributes.st.values.push(sx, s3.y);\r\n for (j = i2 * 2; j < i2 * 2 + 2 * 2; ++j) {\r\n p2Attributes.st.values.push(texCoords[j]);\r\n }\r\n }\r\n\r\n index = p0Attributes.position.values.length / 3 - 4;\r\n p0Indices.push(index, index + 2, index + 1);\r\n p0Indices.push(index + 1, index + 2, index + 3);\r\n\r\n index = p2Attributes.position.values.length / 3 - 4;\r\n p2Indices.push(index, index + 2, index + 1);\r\n p2Indices.push(index + 1, index + 2, index + 3);\r\n } else {\r\n let currentAttributes;\r\n let currentIndices;\r\n\r\n if (p0.y < 0.0) {\r\n currentAttributes = westGeometry.attributes;\r\n currentIndices = westGeometry.indices;\r\n } else {\r\n currentAttributes = eastGeometry.attributes;\r\n currentIndices = eastGeometry.indices;\r\n }\r\n\r\n currentAttributes.position.values.push(p0.x, p0.y, p0.z);\r\n currentAttributes.position.values.push(p0.x, p0.y, p0.z);\r\n currentAttributes.position.values.push(p2.x, p2.y, p2.z);\r\n currentAttributes.position.values.push(p2.x, p2.y, p2.z);\r\n\r\n for (j = i * 3; j < i * 3 + 4 * 3; ++j) {\r\n currentAttributes.prevPosition.values.push(prevPositions[j]);\r\n currentAttributes.nextPosition.values.push(nextPositions[j]);\r\n }\r\n\r\n for (j = i * 2; j < i * 2 + 4 * 2; ++j) {\r\n currentAttributes.expandAndWidth.values.push(expandAndWidths[j]);\r\n if (defined(texCoords)) {\r\n currentAttributes.st.values.push(texCoords[j]);\r\n }\r\n }\r\n\r\n if (defined(colors)) {\r\n for (j = i * 4; j < i * 4 + 4 * 4; ++j) {\r\n currentAttributes.color.values.push(colors[j]);\r\n }\r\n }\r\n\r\n index = currentAttributes.position.values.length / 3 - 4;\r\n currentIndices.push(index, index + 2, index + 1);\r\n currentIndices.push(index + 1, index + 2, index + 3);\r\n }\r\n }\r\n\r\n if (intersectionFound) {\r\n updateAdjacencyAfterSplit(westGeometry);\r\n updateAdjacencyAfterSplit(eastGeometry);\r\n }\r\n\r\n updateInstanceAfterSplit(instance, westGeometry, eastGeometry);\r\n}\r\n\r\n/**\r\n * Splits the instances's geometry, by introducing new vertices and indices,that\r\n * intersect the International Date Line and Prime Meridian so that no primitives cross longitude\r\n * -180/180 degrees. This is not required for 3D drawing, but is required for\r\n * correcting drawing in 2D and Columbus view.\r\n *\r\n * @private\r\n *\r\n * @param {GeometryInstance} instance The instance to modify.\r\n * @returns {GeometryInstance} The modified instance argument, with it's geometry split at the International Date Line.\r\n *\r\n * @example\r\n * instance = Cesium.GeometryPipeline.splitLongitude(instance);\r\n */\r\nGeometryPipeline.splitLongitude = function (instance) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(instance)) {\r\n throw new DeveloperError(\"instance is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const geometry = instance.geometry;\r\n const boundingSphere = geometry.boundingSphere;\r\n if (defined(boundingSphere)) {\r\n const minX = boundingSphere.center.x - boundingSphere.radius;\r\n if (\r\n minX > 0 ||\r\n BoundingSphere.intersectPlane(boundingSphere, Plane.ORIGIN_ZX_PLANE) !==\r\n Intersect.INTERSECTING\r\n ) {\r\n return instance;\r\n }\r\n }\r\n\r\n if (geometry.geometryType !== GeometryType.NONE) {\r\n switch (geometry.geometryType) {\r\n case GeometryType.POLYLINES:\r\n splitLongitudePolyline(instance);\r\n break;\r\n case GeometryType.TRIANGLES:\r\n splitLongitudeTriangles(instance);\r\n break;\r\n case GeometryType.LINES:\r\n splitLongitudeLines(instance);\r\n break;\r\n }\r\n } else {\r\n indexPrimitive(geometry);\r\n if (geometry.primitiveType === PrimitiveType.TRIANGLES) {\r\n splitLongitudeTriangles(instance);\r\n } else if (geometry.primitiveType === PrimitiveType.LINES) {\r\n splitLongitudeLines(instance);\r\n }\r\n }\r\n\r\n return instance;\r\n};\r\nexport default GeometryPipeline;\r\n"],"names":["Cartesian3","scratchCartesian2","scratchCartesian3","Check","defined","Cartesian2","CesiumMath","defaultValue","DeveloperError","IndexDatatype","PrimitiveType","BoundingSphere","Geometry","GeometryAttribute","ComponentDatatype","Tipsify","Cartographic","GeographicProjection","EncodedCartesian3","Matrix4","Matrix3","AttributeCompression","Cartesian4","Plane","IntersectionTests","Intersect","GeometryType"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/IndexDatatype-b4e5cf89.js b/debug/cesium/Workers/IndexDatatype-b4e5cf89.js deleted file mode 100644 index 6a2fdba..0000000 --- a/debug/cesium/Workers/IndexDatatype-b4e5cf89.js +++ /dev/null @@ -1,226 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './defaultValue-0ab18f7d', './Check-d10e5f2e', './Math-9be8b918', './WebGLConstants-f27a5e29'], (function (exports, defaultValue, Check, Math, WebGLConstants) { 'use strict'; - - /** - * Constants for WebGL index datatypes. These corresponds to the - * type parameter of {@link http://www.khronos.org/opengles/sdk/docs/man/xhtml/glDrawElements.xml|drawElements}. - * - * @enum {Number} - */ - const IndexDatatype = { - /** - * 8-bit unsigned byte corresponding to UNSIGNED_BYTE and the type - * of an element in Uint8Array. - * - * @type {Number} - * @constant - */ - UNSIGNED_BYTE: WebGLConstants.WebGLConstants.UNSIGNED_BYTE, - - /** - * 16-bit unsigned short corresponding to UNSIGNED_SHORT and the type - * of an element in Uint16Array. - * - * @type {Number} - * @constant - */ - UNSIGNED_SHORT: WebGLConstants.WebGLConstants.UNSIGNED_SHORT, - - /** - * 32-bit unsigned int corresponding to UNSIGNED_INT and the type - * of an element in Uint32Array. - * - * @type {Number} - * @constant - */ - UNSIGNED_INT: WebGLConstants.WebGLConstants.UNSIGNED_INT, - }; - - /** - * Returns the size, in bytes, of the corresponding datatype. - * - * @param {IndexDatatype} indexDatatype The index datatype to get the size of. - * @returns {Number} The size in bytes. - * - * @example - * // Returns 2 - * const size = Cesium.IndexDatatype.getSizeInBytes(Cesium.IndexDatatype.UNSIGNED_SHORT); - */ - IndexDatatype.getSizeInBytes = function (indexDatatype) { - switch (indexDatatype) { - case IndexDatatype.UNSIGNED_BYTE: - return Uint8Array.BYTES_PER_ELEMENT; - case IndexDatatype.UNSIGNED_SHORT: - return Uint16Array.BYTES_PER_ELEMENT; - case IndexDatatype.UNSIGNED_INT: - return Uint32Array.BYTES_PER_ELEMENT; - } - - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "indexDatatype is required and must be a valid IndexDatatype constant." - ); - //>>includeEnd('debug'); - }; - - /** - * Gets the datatype with a given size in bytes. - * - * @param {Number} sizeInBytes The size of a single index in bytes. - * @returns {IndexDatatype} The index datatype with the given size. - */ - IndexDatatype.fromSizeInBytes = function (sizeInBytes) { - switch (sizeInBytes) { - case 2: - return IndexDatatype.UNSIGNED_SHORT; - case 4: - return IndexDatatype.UNSIGNED_INT; - case 1: - return IndexDatatype.UNSIGNED_BYTE; - //>>includeStart('debug', pragmas.debug); - default: - throw new Check.DeveloperError( - "Size in bytes cannot be mapped to an IndexDatatype" - ); - //>>includeEnd('debug'); - } - }; - - /** - * Validates that the provided index datatype is a valid {@link IndexDatatype}. - * - * @param {IndexDatatype} indexDatatype The index datatype to validate. - * @returns {Boolean} true if the provided index datatype is a valid value; otherwise, false. - * - * @example - * if (!Cesium.IndexDatatype.validate(indexDatatype)) { - * throw new Cesium.DeveloperError('indexDatatype must be a valid value.'); - * } - */ - IndexDatatype.validate = function (indexDatatype) { - return ( - defaultValue.defined(indexDatatype) && - (indexDatatype === IndexDatatype.UNSIGNED_BYTE || - indexDatatype === IndexDatatype.UNSIGNED_SHORT || - indexDatatype === IndexDatatype.UNSIGNED_INT) - ); - }; - - /** - * Creates a typed array that will store indices, using either - * or Uint32Array depending on the number of vertices. - * - * @param {Number} numberOfVertices Number of vertices that the indices will reference. - * @param {Number|Array} indicesLengthOrArray Passed through to the typed array constructor. - * @returns {Uint16Array|Uint32Array} A Uint16Array or Uint32Array constructed with indicesLengthOrArray. - * - * @example - * this.indices = Cesium.IndexDatatype.createTypedArray(positions.length / 3, numberOfIndices); - */ - IndexDatatype.createTypedArray = function ( - numberOfVertices, - indicesLengthOrArray - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(numberOfVertices)) { - throw new Check.DeveloperError("numberOfVertices is required."); - } - //>>includeEnd('debug'); - - if (numberOfVertices >= Math.CesiumMath.SIXTY_FOUR_KILOBYTES) { - return new Uint32Array(indicesLengthOrArray); - } - - return new Uint16Array(indicesLengthOrArray); - }; - - /** - * Creates a typed array from a source array buffer. The resulting typed array will store indices, using either - * or Uint32Array depending on the number of vertices. - * - * @param {Number} numberOfVertices Number of vertices that the indices will reference. - * @param {ArrayBuffer} sourceArray Passed through to the typed array constructor. - * @param {Number} byteOffset Passed through to the typed array constructor. - * @param {Number} length Passed through to the typed array constructor. - * @returns {Uint16Array|Uint32Array} A Uint16Array or Uint32Array constructed with sourceArray, byteOffset, and length. - * - */ - IndexDatatype.createTypedArrayFromArrayBuffer = function ( - numberOfVertices, - sourceArray, - byteOffset, - length - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(numberOfVertices)) { - throw new Check.DeveloperError("numberOfVertices is required."); - } - if (!defaultValue.defined(sourceArray)) { - throw new Check.DeveloperError("sourceArray is required."); - } - if (!defaultValue.defined(byteOffset)) { - throw new Check.DeveloperError("byteOffset is required."); - } - //>>includeEnd('debug'); - - if (numberOfVertices >= Math.CesiumMath.SIXTY_FOUR_KILOBYTES) { - return new Uint32Array(sourceArray, byteOffset, length); - } - - return new Uint16Array(sourceArray, byteOffset, length); - }; - - /** - * Gets the {@link IndexDatatype} for the provided TypedArray instance. - * - * @param {Uint8Array|Uint16Array|Uint32Array} array The typed array. - * @returns {IndexDatatype} The IndexDatatype for the provided array, or undefined if the array is not a Uint8Array, Uint16Array, or Uint32Array. - */ - IndexDatatype.fromTypedArray = function (array) { - if (array instanceof Uint8Array) { - return IndexDatatype.UNSIGNED_BYTE; - } - if (array instanceof Uint16Array) { - return IndexDatatype.UNSIGNED_SHORT; - } - if (array instanceof Uint32Array) { - return IndexDatatype.UNSIGNED_INT; - } - - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "array must be a Uint8Array, Uint16Array, or Uint32Array." - ); - //>>includeEnd('debug'); - }; - - var IndexDatatype$1 = Object.freeze(IndexDatatype); - - exports.IndexDatatype = IndexDatatype$1; - -})); -//# sourceMappingURL=IndexDatatype-b4e5cf89.js.map diff --git a/debug/cesium/Workers/IndexDatatype-b4e5cf89.js.map b/debug/cesium/Workers/IndexDatatype-b4e5cf89.js.map deleted file mode 100644 index dcd0578..0000000 --- a/debug/cesium/Workers/IndexDatatype-b4e5cf89.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"IndexDatatype-b4e5cf89.js","sources":["../../../Source/Core/IndexDatatype.js"],"sourcesContent":["import defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport WebGLConstants from \"./WebGLConstants.js\";\r\n\r\n/**\r\n * Constants for WebGL index datatypes. These corresponds to the\r\n * type parameter of {@link http://www.khronos.org/opengles/sdk/docs/man/xhtml/glDrawElements.xml|drawElements}.\r\n *\r\n * @enum {Number}\r\n */\r\nconst IndexDatatype = {\r\n /**\r\n * 8-bit unsigned byte corresponding to UNSIGNED_BYTE and the type\r\n * of an element in Uint8Array.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\r\n\r\n /**\r\n * 16-bit unsigned short corresponding to UNSIGNED_SHORT and the type\r\n * of an element in Uint16Array.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\r\n\r\n /**\r\n * 32-bit unsigned int corresponding to UNSIGNED_INT and the type\r\n * of an element in Uint32Array.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\r\n};\r\n\r\n/**\r\n * Returns the size, in bytes, of the corresponding datatype.\r\n *\r\n * @param {IndexDatatype} indexDatatype The index datatype to get the size of.\r\n * @returns {Number} The size in bytes.\r\n *\r\n * @example\r\n * // Returns 2\r\n * const size = Cesium.IndexDatatype.getSizeInBytes(Cesium.IndexDatatype.UNSIGNED_SHORT);\r\n */\r\nIndexDatatype.getSizeInBytes = function (indexDatatype) {\r\n switch (indexDatatype) {\r\n case IndexDatatype.UNSIGNED_BYTE:\r\n return Uint8Array.BYTES_PER_ELEMENT;\r\n case IndexDatatype.UNSIGNED_SHORT:\r\n return Uint16Array.BYTES_PER_ELEMENT;\r\n case IndexDatatype.UNSIGNED_INT:\r\n return Uint32Array.BYTES_PER_ELEMENT;\r\n }\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"indexDatatype is required and must be a valid IndexDatatype constant.\"\r\n );\r\n //>>includeEnd('debug');\r\n};\r\n\r\n/**\r\n * Gets the datatype with a given size in bytes.\r\n *\r\n * @param {Number} sizeInBytes The size of a single index in bytes.\r\n * @returns {IndexDatatype} The index datatype with the given size.\r\n */\r\nIndexDatatype.fromSizeInBytes = function (sizeInBytes) {\r\n switch (sizeInBytes) {\r\n case 2:\r\n return IndexDatatype.UNSIGNED_SHORT;\r\n case 4:\r\n return IndexDatatype.UNSIGNED_INT;\r\n case 1:\r\n return IndexDatatype.UNSIGNED_BYTE;\r\n //>>includeStart('debug', pragmas.debug);\r\n default:\r\n throw new DeveloperError(\r\n \"Size in bytes cannot be mapped to an IndexDatatype\"\r\n );\r\n //>>includeEnd('debug');\r\n }\r\n};\r\n\r\n/**\r\n * Validates that the provided index datatype is a valid {@link IndexDatatype}.\r\n *\r\n * @param {IndexDatatype} indexDatatype The index datatype to validate.\r\n * @returns {Boolean} true if the provided index datatype is a valid value; otherwise, false.\r\n *\r\n * @example\r\n * if (!Cesium.IndexDatatype.validate(indexDatatype)) {\r\n * throw new Cesium.DeveloperError('indexDatatype must be a valid value.');\r\n * }\r\n */\r\nIndexDatatype.validate = function (indexDatatype) {\r\n return (\r\n defined(indexDatatype) &&\r\n (indexDatatype === IndexDatatype.UNSIGNED_BYTE ||\r\n indexDatatype === IndexDatatype.UNSIGNED_SHORT ||\r\n indexDatatype === IndexDatatype.UNSIGNED_INT)\r\n );\r\n};\r\n\r\n/**\r\n * Creates a typed array that will store indices, using either \r\n * or Uint32Array depending on the number of vertices.\r\n *\r\n * @param {Number} numberOfVertices Number of vertices that the indices will reference.\r\n * @param {Number|Array} indicesLengthOrArray Passed through to the typed array constructor.\r\n * @returns {Uint16Array|Uint32Array} A Uint16Array or Uint32Array constructed with indicesLengthOrArray.\r\n *\r\n * @example\r\n * this.indices = Cesium.IndexDatatype.createTypedArray(positions.length / 3, numberOfIndices);\r\n */\r\nIndexDatatype.createTypedArray = function (\r\n numberOfVertices,\r\n indicesLengthOrArray\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(numberOfVertices)) {\r\n throw new DeveloperError(\"numberOfVertices is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES) {\r\n return new Uint32Array(indicesLengthOrArray);\r\n }\r\n\r\n return new Uint16Array(indicesLengthOrArray);\r\n};\r\n\r\n/**\r\n * Creates a typed array from a source array buffer. The resulting typed array will store indices, using either \r\n * or Uint32Array depending on the number of vertices.\r\n *\r\n * @param {Number} numberOfVertices Number of vertices that the indices will reference.\r\n * @param {ArrayBuffer} sourceArray Passed through to the typed array constructor.\r\n * @param {Number} byteOffset Passed through to the typed array constructor.\r\n * @param {Number} length Passed through to the typed array constructor.\r\n * @returns {Uint16Array|Uint32Array} A Uint16Array or Uint32Array constructed with sourceArray, byteOffset, and length.\r\n *\r\n */\r\nIndexDatatype.createTypedArrayFromArrayBuffer = function (\r\n numberOfVertices,\r\n sourceArray,\r\n byteOffset,\r\n length\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(numberOfVertices)) {\r\n throw new DeveloperError(\"numberOfVertices is required.\");\r\n }\r\n if (!defined(sourceArray)) {\r\n throw new DeveloperError(\"sourceArray is required.\");\r\n }\r\n if (!defined(byteOffset)) {\r\n throw new DeveloperError(\"byteOffset is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (numberOfVertices >= CesiumMath.SIXTY_FOUR_KILOBYTES) {\r\n return new Uint32Array(sourceArray, byteOffset, length);\r\n }\r\n\r\n return new Uint16Array(sourceArray, byteOffset, length);\r\n};\r\n\r\n/**\r\n * Gets the {@link IndexDatatype} for the provided TypedArray instance.\r\n *\r\n * @param {Uint8Array|Uint16Array|Uint32Array} array The typed array.\r\n * @returns {IndexDatatype} The IndexDatatype for the provided array, or undefined if the array is not a Uint8Array, Uint16Array, or Uint32Array.\r\n */\r\nIndexDatatype.fromTypedArray = function (array) {\r\n if (array instanceof Uint8Array) {\r\n return IndexDatatype.UNSIGNED_BYTE;\r\n }\r\n if (array instanceof Uint16Array) {\r\n return IndexDatatype.UNSIGNED_SHORT;\r\n }\r\n if (array instanceof Uint32Array) {\r\n return IndexDatatype.UNSIGNED_INT;\r\n }\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"array must be a Uint8Array, Uint16Array, or Uint32Array.\"\r\n );\r\n //>>includeEnd('debug');\r\n};\r\n\r\nexport default Object.freeze(IndexDatatype);\r\n"],"names":["WebGLConstants","DeveloperError","defined","CesiumMath"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/IntersectionTests-2c7928de.js b/debug/cesium/Workers/IntersectionTests-2c7928de.js deleted file mode 100644 index ae38750..0000000 --- a/debug/cesium/Workers/IntersectionTests-2c7928de.js +++ /dev/null @@ -1,1862 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './defaultValue-0ab18f7d', './Check-d10e5f2e', './Transforms-11fb6b0a', './Math-9be8b918'], (function (exports, Matrix3, defaultValue, Check, Transforms, Math$1) { 'use strict'; - - /** - * Defines functions for 2nd order polynomial functions of one variable with only real coefficients. - * - * @namespace QuadraticRealPolynomial - */ - const QuadraticRealPolynomial = {}; - - /** - * Provides the discriminant of the quadratic equation from the supplied coefficients. - * - * @param {Number} a The coefficient of the 2nd order monomial. - * @param {Number} b The coefficient of the 1st order monomial. - * @param {Number} c The coefficient of the 0th order monomial. - * @returns {Number} The value of the discriminant. - */ - QuadraticRealPolynomial.computeDiscriminant = function (a, b, c) { - //>>includeStart('debug', pragmas.debug); - if (typeof a !== "number") { - throw new Check.DeveloperError("a is a required number."); - } - if (typeof b !== "number") { - throw new Check.DeveloperError("b is a required number."); - } - if (typeof c !== "number") { - throw new Check.DeveloperError("c is a required number."); - } - //>>includeEnd('debug'); - - const discriminant = b * b - 4.0 * a * c; - return discriminant; - }; - - function addWithCancellationCheck$1(left, right, tolerance) { - const difference = left + right; - if ( - Math$1.CesiumMath.sign(left) !== Math$1.CesiumMath.sign(right) && - Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance - ) { - return 0.0; - } - - return difference; - } - - /** - * Provides the real valued roots of the quadratic polynomial with the provided coefficients. - * - * @param {Number} a The coefficient of the 2nd order monomial. - * @param {Number} b The coefficient of the 1st order monomial. - * @param {Number} c The coefficient of the 0th order monomial. - * @returns {Number[]} The real valued roots. - */ - QuadraticRealPolynomial.computeRealRoots = function (a, b, c) { - //>>includeStart('debug', pragmas.debug); - if (typeof a !== "number") { - throw new Check.DeveloperError("a is a required number."); - } - if (typeof b !== "number") { - throw new Check.DeveloperError("b is a required number."); - } - if (typeof c !== "number") { - throw new Check.DeveloperError("c is a required number."); - } - //>>includeEnd('debug'); - - let ratio; - if (a === 0.0) { - if (b === 0.0) { - // Constant function: c = 0. - return []; - } - - // Linear function: b * x + c = 0. - return [-c / b]; - } else if (b === 0.0) { - if (c === 0.0) { - // 2nd order monomial: a * x^2 = 0. - return [0.0, 0.0]; - } - - const cMagnitude = Math.abs(c); - const aMagnitude = Math.abs(a); - - if ( - cMagnitude < aMagnitude && - cMagnitude / aMagnitude < Math$1.CesiumMath.EPSILON14 - ) { - // c ~= 0.0. - // 2nd order monomial: a * x^2 = 0. - return [0.0, 0.0]; - } else if ( - cMagnitude > aMagnitude && - aMagnitude / cMagnitude < Math$1.CesiumMath.EPSILON14 - ) { - // a ~= 0.0. - // Constant function: c = 0. - return []; - } - - // a * x^2 + c = 0 - ratio = -c / a; - - if (ratio < 0.0) { - // Both roots are complex. - return []; - } - - // Both roots are real. - const root = Math.sqrt(ratio); - return [-root, root]; - } else if (c === 0.0) { - // a * x^2 + b * x = 0 - ratio = -b / a; - if (ratio < 0.0) { - return [ratio, 0.0]; - } - - return [0.0, ratio]; - } - - // a * x^2 + b * x + c = 0 - const b2 = b * b; - const four_ac = 4.0 * a * c; - const radicand = addWithCancellationCheck$1(b2, -four_ac, Math$1.CesiumMath.EPSILON14); - - if (radicand < 0.0) { - // Both roots are complex. - return []; - } - - const q = - -0.5 * - addWithCancellationCheck$1( - b, - Math$1.CesiumMath.sign(b) * Math.sqrt(radicand), - Math$1.CesiumMath.EPSILON14 - ); - if (b > 0.0) { - return [q / a, c / q]; - } - - return [c / q, q / a]; - }; - var QuadraticRealPolynomial$1 = QuadraticRealPolynomial; - - /** - * Defines functions for 3rd order polynomial functions of one variable with only real coefficients. - * - * @namespace CubicRealPolynomial - */ - const CubicRealPolynomial = {}; - - /** - * Provides the discriminant of the cubic equation from the supplied coefficients. - * - * @param {Number} a The coefficient of the 3rd order monomial. - * @param {Number} b The coefficient of the 2nd order monomial. - * @param {Number} c The coefficient of the 1st order monomial. - * @param {Number} d The coefficient of the 0th order monomial. - * @returns {Number} The value of the discriminant. - */ - CubicRealPolynomial.computeDiscriminant = function (a, b, c, d) { - //>>includeStart('debug', pragmas.debug); - if (typeof a !== "number") { - throw new Check.DeveloperError("a is a required number."); - } - if (typeof b !== "number") { - throw new Check.DeveloperError("b is a required number."); - } - if (typeof c !== "number") { - throw new Check.DeveloperError("c is a required number."); - } - if (typeof d !== "number") { - throw new Check.DeveloperError("d is a required number."); - } - //>>includeEnd('debug'); - - const a2 = a * a; - const b2 = b * b; - const c2 = c * c; - const d2 = d * d; - - const discriminant = - 18.0 * a * b * c * d + - b2 * c2 - - 27.0 * a2 * d2 - - 4.0 * (a * c2 * c + b2 * b * d); - return discriminant; - }; - - function computeRealRoots(a, b, c, d) { - const A = a; - const B = b / 3.0; - const C = c / 3.0; - const D = d; - - const AC = A * C; - const BD = B * D; - const B2 = B * B; - const C2 = C * C; - const delta1 = A * C - B2; - const delta2 = A * D - B * C; - const delta3 = B * D - C2; - - const discriminant = 4.0 * delta1 * delta3 - delta2 * delta2; - let temp; - let temp1; - - if (discriminant < 0.0) { - let ABar; - let CBar; - let DBar; - - if (B2 * BD >= AC * C2) { - ABar = A; - CBar = delta1; - DBar = -2.0 * B * delta1 + A * delta2; - } else { - ABar = D; - CBar = delta3; - DBar = -D * delta2 + 2.0 * C * delta3; - } - - const s = DBar < 0.0 ? -1.0 : 1.0; // This is not Math.Sign()! - const temp0 = -s * Math.abs(ABar) * Math.sqrt(-discriminant); - temp1 = -DBar + temp0; - - const x = temp1 / 2.0; - const p = x < 0.0 ? -Math.pow(-x, 1.0 / 3.0) : Math.pow(x, 1.0 / 3.0); - const q = temp1 === temp0 ? -p : -CBar / p; - - temp = CBar <= 0.0 ? p + q : -DBar / (p * p + q * q + CBar); - - if (B2 * BD >= AC * C2) { - return [(temp - B) / A]; - } - - return [-D / (temp + C)]; - } - - const CBarA = delta1; - const DBarA = -2.0 * B * delta1 + A * delta2; - - const CBarD = delta3; - const DBarD = -D * delta2 + 2.0 * C * delta3; - - const squareRootOfDiscriminant = Math.sqrt(discriminant); - const halfSquareRootOf3 = Math.sqrt(3.0) / 2.0; - - let theta = Math.abs(Math.atan2(A * squareRootOfDiscriminant, -DBarA) / 3.0); - temp = 2.0 * Math.sqrt(-CBarA); - let cosine = Math.cos(theta); - temp1 = temp * cosine; - let temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta)); - - const numeratorLarge = temp1 + temp3 > 2.0 * B ? temp1 - B : temp3 - B; - const denominatorLarge = A; - - const root1 = numeratorLarge / denominatorLarge; - - theta = Math.abs(Math.atan2(D * squareRootOfDiscriminant, -DBarD) / 3.0); - temp = 2.0 * Math.sqrt(-CBarD); - cosine = Math.cos(theta); - temp1 = temp * cosine; - temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta)); - - const numeratorSmall = -D; - const denominatorSmall = temp1 + temp3 < 2.0 * C ? temp1 + C : temp3 + C; - - const root3 = numeratorSmall / denominatorSmall; - - const E = denominatorLarge * denominatorSmall; - const F = - -numeratorLarge * denominatorSmall - denominatorLarge * numeratorSmall; - const G = numeratorLarge * numeratorSmall; - - const root2 = (C * F - B * G) / (-B * F + C * E); - - if (root1 <= root2) { - if (root1 <= root3) { - if (root2 <= root3) { - return [root1, root2, root3]; - } - return [root1, root3, root2]; - } - return [root3, root1, root2]; - } - if (root1 <= root3) { - return [root2, root1, root3]; - } - if (root2 <= root3) { - return [root2, root3, root1]; - } - return [root3, root2, root1]; - } - - /** - * Provides the real valued roots of the cubic polynomial with the provided coefficients. - * - * @param {Number} a The coefficient of the 3rd order monomial. - * @param {Number} b The coefficient of the 2nd order monomial. - * @param {Number} c The coefficient of the 1st order monomial. - * @param {Number} d The coefficient of the 0th order monomial. - * @returns {Number[]} The real valued roots. - */ - CubicRealPolynomial.computeRealRoots = function (a, b, c, d) { - //>>includeStart('debug', pragmas.debug); - if (typeof a !== "number") { - throw new Check.DeveloperError("a is a required number."); - } - if (typeof b !== "number") { - throw new Check.DeveloperError("b is a required number."); - } - if (typeof c !== "number") { - throw new Check.DeveloperError("c is a required number."); - } - if (typeof d !== "number") { - throw new Check.DeveloperError("d is a required number."); - } - //>>includeEnd('debug'); - - let roots; - let ratio; - if (a === 0.0) { - // Quadratic function: b * x^2 + c * x + d = 0. - return QuadraticRealPolynomial$1.computeRealRoots(b, c, d); - } else if (b === 0.0) { - if (c === 0.0) { - if (d === 0.0) { - // 3rd order monomial: a * x^3 = 0. - return [0.0, 0.0, 0.0]; - } - - // a * x^3 + d = 0 - ratio = -d / a; - const root = - ratio < 0.0 ? -Math.pow(-ratio, 1.0 / 3.0) : Math.pow(ratio, 1.0 / 3.0); - return [root, root, root]; - } else if (d === 0.0) { - // x * (a * x^2 + c) = 0. - roots = QuadraticRealPolynomial$1.computeRealRoots(a, 0, c); - - // Return the roots in ascending order. - if (roots.Length === 0) { - return [0.0]; - } - return [roots[0], 0.0, roots[1]]; - } - - // Deflated cubic polynomial: a * x^3 + c * x + d= 0. - return computeRealRoots(a, 0, c, d); - } else if (c === 0.0) { - if (d === 0.0) { - // x^2 * (a * x + b) = 0. - ratio = -b / a; - if (ratio < 0.0) { - return [ratio, 0.0, 0.0]; - } - return [0.0, 0.0, ratio]; - } - // a * x^3 + b * x^2 + d = 0. - return computeRealRoots(a, b, 0, d); - } else if (d === 0.0) { - // x * (a * x^2 + b * x + c) = 0 - roots = QuadraticRealPolynomial$1.computeRealRoots(a, b, c); - - // Return the roots in ascending order. - if (roots.length === 0) { - return [0.0]; - } else if (roots[1] <= 0.0) { - return [roots[0], roots[1], 0.0]; - } else if (roots[0] >= 0.0) { - return [0.0, roots[0], roots[1]]; - } - return [roots[0], 0.0, roots[1]]; - } - - return computeRealRoots(a, b, c, d); - }; - var CubicRealPolynomial$1 = CubicRealPolynomial; - - /** - * Defines functions for 4th order polynomial functions of one variable with only real coefficients. - * - * @namespace QuarticRealPolynomial - */ - const QuarticRealPolynomial = {}; - - /** - * Provides the discriminant of the quartic equation from the supplied coefficients. - * - * @param {Number} a The coefficient of the 4th order monomial. - * @param {Number} b The coefficient of the 3rd order monomial. - * @param {Number} c The coefficient of the 2nd order monomial. - * @param {Number} d The coefficient of the 1st order monomial. - * @param {Number} e The coefficient of the 0th order monomial. - * @returns {Number} The value of the discriminant. - */ - QuarticRealPolynomial.computeDiscriminant = function (a, b, c, d, e) { - //>>includeStart('debug', pragmas.debug); - if (typeof a !== "number") { - throw new Check.DeveloperError("a is a required number."); - } - if (typeof b !== "number") { - throw new Check.DeveloperError("b is a required number."); - } - if (typeof c !== "number") { - throw new Check.DeveloperError("c is a required number."); - } - if (typeof d !== "number") { - throw new Check.DeveloperError("d is a required number."); - } - if (typeof e !== "number") { - throw new Check.DeveloperError("e is a required number."); - } - //>>includeEnd('debug'); - - const a2 = a * a; - const a3 = a2 * a; - const b2 = b * b; - const b3 = b2 * b; - const c2 = c * c; - const c3 = c2 * c; - const d2 = d * d; - const d3 = d2 * d; - const e2 = e * e; - const e3 = e2 * e; - - const discriminant = - b2 * c2 * d2 - - 4.0 * b3 * d3 - - 4.0 * a * c3 * d2 + - 18 * a * b * c * d3 - - 27.0 * a2 * d2 * d2 + - 256.0 * a3 * e3 + - e * - (18.0 * b3 * c * d - - 4.0 * b2 * c3 + - 16.0 * a * c2 * c2 - - 80.0 * a * b * c2 * d - - 6.0 * a * b2 * d2 + - 144.0 * a2 * c * d2) + - e2 * - (144.0 * a * b2 * c - - 27.0 * b2 * b2 - - 128.0 * a2 * c2 - - 192.0 * a2 * b * d); - return discriminant; - }; - - function original(a3, a2, a1, a0) { - const a3Squared = a3 * a3; - - const p = a2 - (3.0 * a3Squared) / 8.0; - const q = a1 - (a2 * a3) / 2.0 + (a3Squared * a3) / 8.0; - const r = - a0 - - (a1 * a3) / 4.0 + - (a2 * a3Squared) / 16.0 - - (3.0 * a3Squared * a3Squared) / 256.0; - - // Find the roots of the cubic equations: h^6 + 2 p h^4 + (p^2 - 4 r) h^2 - q^2 = 0. - const cubicRoots = CubicRealPolynomial$1.computeRealRoots( - 1.0, - 2.0 * p, - p * p - 4.0 * r, - -q * q - ); - - if (cubicRoots.length > 0) { - const temp = -a3 / 4.0; - - // Use the largest positive root. - const hSquared = cubicRoots[cubicRoots.length - 1]; - - if (Math.abs(hSquared) < Math$1.CesiumMath.EPSILON14) { - // y^4 + p y^2 + r = 0. - const roots = QuadraticRealPolynomial$1.computeRealRoots(1.0, p, r); - - if (roots.length === 2) { - const root0 = roots[0]; - const root1 = roots[1]; - - let y; - if (root0 >= 0.0 && root1 >= 0.0) { - const y0 = Math.sqrt(root0); - const y1 = Math.sqrt(root1); - - return [temp - y1, temp - y0, temp + y0, temp + y1]; - } else if (root0 >= 0.0 && root1 < 0.0) { - y = Math.sqrt(root0); - return [temp - y, temp + y]; - } else if (root0 < 0.0 && root1 >= 0.0) { - y = Math.sqrt(root1); - return [temp - y, temp + y]; - } - } - return []; - } else if (hSquared > 0.0) { - const h = Math.sqrt(hSquared); - - const m = (p + hSquared - q / h) / 2.0; - const n = (p + hSquared + q / h) / 2.0; - - // Now solve the two quadratic factors: (y^2 + h y + m)(y^2 - h y + n); - const roots1 = QuadraticRealPolynomial$1.computeRealRoots(1.0, h, m); - const roots2 = QuadraticRealPolynomial$1.computeRealRoots(1.0, -h, n); - - if (roots1.length !== 0) { - roots1[0] += temp; - roots1[1] += temp; - - if (roots2.length !== 0) { - roots2[0] += temp; - roots2[1] += temp; - - if (roots1[1] <= roots2[0]) { - return [roots1[0], roots1[1], roots2[0], roots2[1]]; - } else if (roots2[1] <= roots1[0]) { - return [roots2[0], roots2[1], roots1[0], roots1[1]]; - } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) { - return [roots2[0], roots1[0], roots1[1], roots2[1]]; - } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) { - return [roots1[0], roots2[0], roots2[1], roots1[1]]; - } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) { - return [roots2[0], roots1[0], roots2[1], roots1[1]]; - } - return [roots1[0], roots2[0], roots1[1], roots2[1]]; - } - return roots1; - } - - if (roots2.length !== 0) { - roots2[0] += temp; - roots2[1] += temp; - - return roots2; - } - return []; - } - } - return []; - } - - function neumark(a3, a2, a1, a0) { - const a1Squared = a1 * a1; - const a2Squared = a2 * a2; - const a3Squared = a3 * a3; - - const p = -2.0 * a2; - const q = a1 * a3 + a2Squared - 4.0 * a0; - const r = a3Squared * a0 - a1 * a2 * a3 + a1Squared; - - const cubicRoots = CubicRealPolynomial$1.computeRealRoots(1.0, p, q, r); - - if (cubicRoots.length > 0) { - // Use the most positive root - const y = cubicRoots[0]; - - const temp = a2 - y; - const tempSquared = temp * temp; - - const g1 = a3 / 2.0; - const h1 = temp / 2.0; - - const m = tempSquared - 4.0 * a0; - const mError = tempSquared + 4.0 * Math.abs(a0); - - const n = a3Squared - 4.0 * y; - const nError = a3Squared + 4.0 * Math.abs(y); - - let g2; - let h2; - - if (y < 0.0 || m * nError < n * mError) { - const squareRootOfN = Math.sqrt(n); - g2 = squareRootOfN / 2.0; - h2 = squareRootOfN === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfN; - } else { - const squareRootOfM = Math.sqrt(m); - g2 = squareRootOfM === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfM; - h2 = squareRootOfM / 2.0; - } - - let G; - let g; - if (g1 === 0.0 && g2 === 0.0) { - G = 0.0; - g = 0.0; - } else if (Math$1.CesiumMath.sign(g1) === Math$1.CesiumMath.sign(g2)) { - G = g1 + g2; - g = y / G; - } else { - g = g1 - g2; - G = y / g; - } - - let H; - let h; - if (h1 === 0.0 && h2 === 0.0) { - H = 0.0; - h = 0.0; - } else if (Math$1.CesiumMath.sign(h1) === Math$1.CesiumMath.sign(h2)) { - H = h1 + h2; - h = a0 / H; - } else { - h = h1 - h2; - H = a0 / h; - } - - // Now solve the two quadratic factors: (y^2 + G y + H)(y^2 + g y + h); - const roots1 = QuadraticRealPolynomial$1.computeRealRoots(1.0, G, H); - const roots2 = QuadraticRealPolynomial$1.computeRealRoots(1.0, g, h); - - if (roots1.length !== 0) { - if (roots2.length !== 0) { - if (roots1[1] <= roots2[0]) { - return [roots1[0], roots1[1], roots2[0], roots2[1]]; - } else if (roots2[1] <= roots1[0]) { - return [roots2[0], roots2[1], roots1[0], roots1[1]]; - } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) { - return [roots2[0], roots1[0], roots1[1], roots2[1]]; - } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) { - return [roots1[0], roots2[0], roots2[1], roots1[1]]; - } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) { - return [roots2[0], roots1[0], roots2[1], roots1[1]]; - } - return [roots1[0], roots2[0], roots1[1], roots2[1]]; - } - return roots1; - } - if (roots2.length !== 0) { - return roots2; - } - } - return []; - } - - /** - * Provides the real valued roots of the quartic polynomial with the provided coefficients. - * - * @param {Number} a The coefficient of the 4th order monomial. - * @param {Number} b The coefficient of the 3rd order monomial. - * @param {Number} c The coefficient of the 2nd order monomial. - * @param {Number} d The coefficient of the 1st order monomial. - * @param {Number} e The coefficient of the 0th order monomial. - * @returns {Number[]} The real valued roots. - */ - QuarticRealPolynomial.computeRealRoots = function (a, b, c, d, e) { - //>>includeStart('debug', pragmas.debug); - if (typeof a !== "number") { - throw new Check.DeveloperError("a is a required number."); - } - if (typeof b !== "number") { - throw new Check.DeveloperError("b is a required number."); - } - if (typeof c !== "number") { - throw new Check.DeveloperError("c is a required number."); - } - if (typeof d !== "number") { - throw new Check.DeveloperError("d is a required number."); - } - if (typeof e !== "number") { - throw new Check.DeveloperError("e is a required number."); - } - //>>includeEnd('debug'); - - if (Math.abs(a) < Math$1.CesiumMath.EPSILON15) { - return CubicRealPolynomial$1.computeRealRoots(b, c, d, e); - } - const a3 = b / a; - const a2 = c / a; - const a1 = d / a; - const a0 = e / a; - - let k = a3 < 0.0 ? 1 : 0; - k += a2 < 0.0 ? k + 1 : k; - k += a1 < 0.0 ? k + 1 : k; - k += a0 < 0.0 ? k + 1 : k; - - switch (k) { - case 0: - return original(a3, a2, a1, a0); - case 1: - return neumark(a3, a2, a1, a0); - case 2: - return neumark(a3, a2, a1, a0); - case 3: - return original(a3, a2, a1, a0); - case 4: - return original(a3, a2, a1, a0); - case 5: - return neumark(a3, a2, a1, a0); - case 6: - return original(a3, a2, a1, a0); - case 7: - return original(a3, a2, a1, a0); - case 8: - return neumark(a3, a2, a1, a0); - case 9: - return original(a3, a2, a1, a0); - case 10: - return original(a3, a2, a1, a0); - case 11: - return neumark(a3, a2, a1, a0); - case 12: - return original(a3, a2, a1, a0); - case 13: - return original(a3, a2, a1, a0); - case 14: - return original(a3, a2, a1, a0); - case 15: - return original(a3, a2, a1, a0); - default: - return undefined; - } - }; - var QuarticRealPolynomial$1 = QuarticRealPolynomial; - - /** - * Represents a ray that extends infinitely from the provided origin in the provided direction. - * @alias Ray - * @constructor - * - * @param {Cartesian3} [origin=Cartesian3.ZERO] The origin of the ray. - * @param {Cartesian3} [direction=Cartesian3.ZERO] The direction of the ray. - */ - function Ray(origin, direction) { - direction = Matrix3.Cartesian3.clone(defaultValue.defaultValue(direction, Matrix3.Cartesian3.ZERO)); - if (!Matrix3.Cartesian3.equals(direction, Matrix3.Cartesian3.ZERO)) { - Matrix3.Cartesian3.normalize(direction, direction); - } - - /** - * The origin of the ray. - * @type {Cartesian3} - * @default {@link Cartesian3.ZERO} - */ - this.origin = Matrix3.Cartesian3.clone(defaultValue.defaultValue(origin, Matrix3.Cartesian3.ZERO)); - - /** - * The direction of the ray. - * @type {Cartesian3} - */ - this.direction = direction; - } - - /** - * Duplicates a Ray instance. - * - * @param {Ray} ray The ray to duplicate. - * @param {Ray} [result] The object onto which to store the result. - * @returns {Ray} The modified result parameter or a new Ray instance if one was not provided. (Returns undefined if ray is undefined) - */ - Ray.clone = function (ray, result) { - if (!defaultValue.defined(ray)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new Ray(ray.origin, ray.direction); - } - result.origin = Matrix3.Cartesian3.clone(ray.origin); - result.direction = Matrix3.Cartesian3.clone(ray.direction); - return result; - }; - - /** - * Computes the point along the ray given by r(t) = o + t*d, - * where o is the origin of the ray and d is the direction. - * - * @param {Ray} ray The ray. - * @param {Number} t A scalar value. - * @param {Cartesian3} [result] The object in which the result will be stored. - * @returns {Cartesian3} The modified result parameter, or a new instance if none was provided. - * - * @example - * //Get the first intersection point of a ray and an ellipsoid. - * const intersection = Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid); - * const point = Cesium.Ray.getPoint(ray, intersection.start); - */ - Ray.getPoint = function (ray, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("ray", ray); - Check.Check.typeOf.number("t", t); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - result = Matrix3.Cartesian3.multiplyByScalar(ray.direction, t, result); - return Matrix3.Cartesian3.add(ray.origin, result, result); - }; - - /** - * Functions for computing the intersection between geometries such as rays, planes, triangles, and ellipsoids. - * - * @namespace IntersectionTests - */ - const IntersectionTests = {}; - - /** - * Computes the intersection of a ray and a plane. - * - * @param {Ray} ray The ray. - * @param {Plane} plane The plane. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The intersection point or undefined if there is no intersections. - */ - IntersectionTests.rayPlane = function (ray, plane, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(ray)) { - throw new Check.DeveloperError("ray is required."); - } - if (!defaultValue.defined(plane)) { - throw new Check.DeveloperError("plane is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - const origin = ray.origin; - const direction = ray.direction; - const normal = plane.normal; - const denominator = Matrix3.Cartesian3.dot(normal, direction); - - if (Math.abs(denominator) < Math$1.CesiumMath.EPSILON15) { - // Ray is parallel to plane. The ray may be in the polygon's plane. - return undefined; - } - - const t = (-plane.distance - Matrix3.Cartesian3.dot(normal, origin)) / denominator; - - if (t < 0) { - return undefined; - } - - result = Matrix3.Cartesian3.multiplyByScalar(direction, t, result); - return Matrix3.Cartesian3.add(origin, result, result); - }; - - const scratchEdge0 = new Matrix3.Cartesian3(); - const scratchEdge1 = new Matrix3.Cartesian3(); - const scratchPVec = new Matrix3.Cartesian3(); - const scratchTVec = new Matrix3.Cartesian3(); - const scratchQVec = new Matrix3.Cartesian3(); - - /** - * Computes the intersection of a ray and a triangle as a parametric distance along the input ray. The result is negative when the triangle is behind the ray. - * - * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf| - * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore. - * - * @memberof IntersectionTests - * - * @param {Ray} ray The ray. - * @param {Cartesian3} p0 The first vertex of the triangle. - * @param {Cartesian3} p1 The second vertex of the triangle. - * @param {Cartesian3} p2 The third vertex of the triangle. - * @param {Boolean} [cullBackFaces=false] If true, will only compute an intersection with the front face of the triangle - * and return undefined for intersections with the back face. - * @returns {Number} The intersection as a parametric distance along the ray, or undefined if there is no intersection. - */ - IntersectionTests.rayTriangleParametric = function ( - ray, - p0, - p1, - p2, - cullBackFaces - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(ray)) { - throw new Check.DeveloperError("ray is required."); - } - if (!defaultValue.defined(p0)) { - throw new Check.DeveloperError("p0 is required."); - } - if (!defaultValue.defined(p1)) { - throw new Check.DeveloperError("p1 is required."); - } - if (!defaultValue.defined(p2)) { - throw new Check.DeveloperError("p2 is required."); - } - //>>includeEnd('debug'); - - cullBackFaces = defaultValue.defaultValue(cullBackFaces, false); - - const origin = ray.origin; - const direction = ray.direction; - - const edge0 = Matrix3.Cartesian3.subtract(p1, p0, scratchEdge0); - const edge1 = Matrix3.Cartesian3.subtract(p2, p0, scratchEdge1); - - const p = Matrix3.Cartesian3.cross(direction, edge1, scratchPVec); - const det = Matrix3.Cartesian3.dot(edge0, p); - - let tvec; - let q; - - let u; - let v; - let t; - - if (cullBackFaces) { - if (det < Math$1.CesiumMath.EPSILON6) { - return undefined; - } - - tvec = Matrix3.Cartesian3.subtract(origin, p0, scratchTVec); - u = Matrix3.Cartesian3.dot(tvec, p); - if (u < 0.0 || u > det) { - return undefined; - } - - q = Matrix3.Cartesian3.cross(tvec, edge0, scratchQVec); - - v = Matrix3.Cartesian3.dot(direction, q); - if (v < 0.0 || u + v > det) { - return undefined; - } - - t = Matrix3.Cartesian3.dot(edge1, q) / det; - } else { - if (Math.abs(det) < Math$1.CesiumMath.EPSILON6) { - return undefined; - } - const invDet = 1.0 / det; - - tvec = Matrix3.Cartesian3.subtract(origin, p0, scratchTVec); - u = Matrix3.Cartesian3.dot(tvec, p) * invDet; - if (u < 0.0 || u > 1.0) { - return undefined; - } - - q = Matrix3.Cartesian3.cross(tvec, edge0, scratchQVec); - - v = Matrix3.Cartesian3.dot(direction, q) * invDet; - if (v < 0.0 || u + v > 1.0) { - return undefined; - } - - t = Matrix3.Cartesian3.dot(edge1, q) * invDet; - } - - return t; - }; - - /** - * Computes the intersection of a ray and a triangle as a Cartesian3 coordinate. - * - * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf| - * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore. - * - * @memberof IntersectionTests - * - * @param {Ray} ray The ray. - * @param {Cartesian3} p0 The first vertex of the triangle. - * @param {Cartesian3} p1 The second vertex of the triangle. - * @param {Cartesian3} p2 The third vertex of the triangle. - * @param {Boolean} [cullBackFaces=false] If true, will only compute an intersection with the front face of the triangle - * and return undefined for intersections with the back face. - * @param {Cartesian3} [result] The Cartesian3 onto which to store the result. - * @returns {Cartesian3} The intersection point or undefined if there is no intersections. - */ - IntersectionTests.rayTriangle = function ( - ray, - p0, - p1, - p2, - cullBackFaces, - result - ) { - const t = IntersectionTests.rayTriangleParametric( - ray, - p0, - p1, - p2, - cullBackFaces - ); - if (!defaultValue.defined(t) || t < 0.0) { - return undefined; - } - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - Matrix3.Cartesian3.multiplyByScalar(ray.direction, t, result); - return Matrix3.Cartesian3.add(ray.origin, result, result); - }; - - const scratchLineSegmentTriangleRay = new Ray(); - - /** - * Computes the intersection of a line segment and a triangle. - * @memberof IntersectionTests - * - * @param {Cartesian3} v0 The an end point of the line segment. - * @param {Cartesian3} v1 The other end point of the line segment. - * @param {Cartesian3} p0 The first vertex of the triangle. - * @param {Cartesian3} p1 The second vertex of the triangle. - * @param {Cartesian3} p2 The third vertex of the triangle. - * @param {Boolean} [cullBackFaces=false] If true, will only compute an intersection with the front face of the triangle - * and return undefined for intersections with the back face. - * @param {Cartesian3} [result] The Cartesian3 onto which to store the result. - * @returns {Cartesian3} The intersection point or undefined if there is no intersections. - */ - IntersectionTests.lineSegmentTriangle = function ( - v0, - v1, - p0, - p1, - p2, - cullBackFaces, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(v0)) { - throw new Check.DeveloperError("v0 is required."); - } - if (!defaultValue.defined(v1)) { - throw new Check.DeveloperError("v1 is required."); - } - if (!defaultValue.defined(p0)) { - throw new Check.DeveloperError("p0 is required."); - } - if (!defaultValue.defined(p1)) { - throw new Check.DeveloperError("p1 is required."); - } - if (!defaultValue.defined(p2)) { - throw new Check.DeveloperError("p2 is required."); - } - //>>includeEnd('debug'); - - const ray = scratchLineSegmentTriangleRay; - Matrix3.Cartesian3.clone(v0, ray.origin); - Matrix3.Cartesian3.subtract(v1, v0, ray.direction); - Matrix3.Cartesian3.normalize(ray.direction, ray.direction); - - const t = IntersectionTests.rayTriangleParametric( - ray, - p0, - p1, - p2, - cullBackFaces - ); - if (!defaultValue.defined(t) || t < 0.0 || t > Matrix3.Cartesian3.distance(v0, v1)) { - return undefined; - } - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - Matrix3.Cartesian3.multiplyByScalar(ray.direction, t, result); - return Matrix3.Cartesian3.add(ray.origin, result, result); - }; - - function solveQuadratic(a, b, c, result) { - const det = b * b - 4.0 * a * c; - if (det < 0.0) { - return undefined; - } else if (det > 0.0) { - const denom = 1.0 / (2.0 * a); - const disc = Math.sqrt(det); - const root0 = (-b + disc) * denom; - const root1 = (-b - disc) * denom; - - if (root0 < root1) { - result.root0 = root0; - result.root1 = root1; - } else { - result.root0 = root1; - result.root1 = root0; - } - - return result; - } - - const root = -b / (2.0 * a); - if (root === 0.0) { - return undefined; - } - - result.root0 = result.root1 = root; - return result; - } - - const raySphereRoots = { - root0: 0.0, - root1: 0.0, - }; - - function raySphere(ray, sphere, result) { - if (!defaultValue.defined(result)) { - result = new Transforms.Interval(); - } - - const origin = ray.origin; - const direction = ray.direction; - - const center = sphere.center; - const radiusSquared = sphere.radius * sphere.radius; - - const diff = Matrix3.Cartesian3.subtract(origin, center, scratchPVec); - - const a = Matrix3.Cartesian3.dot(direction, direction); - const b = 2.0 * Matrix3.Cartesian3.dot(direction, diff); - const c = Matrix3.Cartesian3.magnitudeSquared(diff) - radiusSquared; - - const roots = solveQuadratic(a, b, c, raySphereRoots); - if (!defaultValue.defined(roots)) { - return undefined; - } - - result.start = roots.root0; - result.stop = roots.root1; - return result; - } - - /** - * Computes the intersection points of a ray with a sphere. - * @memberof IntersectionTests - * - * @param {Ray} ray The ray. - * @param {BoundingSphere} sphere The sphere. - * @param {Interval} [result] The result onto which to store the result. - * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections. - */ - IntersectionTests.raySphere = function (ray, sphere, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(ray)) { - throw new Check.DeveloperError("ray is required."); - } - if (!defaultValue.defined(sphere)) { - throw new Check.DeveloperError("sphere is required."); - } - //>>includeEnd('debug'); - - result = raySphere(ray, sphere, result); - if (!defaultValue.defined(result) || result.stop < 0.0) { - return undefined; - } - - result.start = Math.max(result.start, 0.0); - return result; - }; - - const scratchLineSegmentRay = new Ray(); - - /** - * Computes the intersection points of a line segment with a sphere. - * @memberof IntersectionTests - * - * @param {Cartesian3} p0 An end point of the line segment. - * @param {Cartesian3} p1 The other end point of the line segment. - * @param {BoundingSphere} sphere The sphere. - * @param {Interval} [result] The result onto which to store the result. - * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections. - */ - IntersectionTests.lineSegmentSphere = function (p0, p1, sphere, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(p0)) { - throw new Check.DeveloperError("p0 is required."); - } - if (!defaultValue.defined(p1)) { - throw new Check.DeveloperError("p1 is required."); - } - if (!defaultValue.defined(sphere)) { - throw new Check.DeveloperError("sphere is required."); - } - //>>includeEnd('debug'); - - const ray = scratchLineSegmentRay; - Matrix3.Cartesian3.clone(p0, ray.origin); - const direction = Matrix3.Cartesian3.subtract(p1, p0, ray.direction); - - const maxT = Matrix3.Cartesian3.magnitude(direction); - Matrix3.Cartesian3.normalize(direction, direction); - - result = raySphere(ray, sphere, result); - if (!defaultValue.defined(result) || result.stop < 0.0 || result.start > maxT) { - return undefined; - } - - result.start = Math.max(result.start, 0.0); - result.stop = Math.min(result.stop, maxT); - return result; - }; - - const scratchQ = new Matrix3.Cartesian3(); - const scratchW = new Matrix3.Cartesian3(); - - /** - * Computes the intersection points of a ray with an ellipsoid. - * - * @param {Ray} ray The ray. - * @param {Ellipsoid} ellipsoid The ellipsoid. - * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections. - */ - IntersectionTests.rayEllipsoid = function (ray, ellipsoid) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(ray)) { - throw new Check.DeveloperError("ray is required."); - } - if (!defaultValue.defined(ellipsoid)) { - throw new Check.DeveloperError("ellipsoid is required."); - } - //>>includeEnd('debug'); - - const inverseRadii = ellipsoid.oneOverRadii; - const q = Matrix3.Cartesian3.multiplyComponents(inverseRadii, ray.origin, scratchQ); - const w = Matrix3.Cartesian3.multiplyComponents( - inverseRadii, - ray.direction, - scratchW - ); - - const q2 = Matrix3.Cartesian3.magnitudeSquared(q); - const qw = Matrix3.Cartesian3.dot(q, w); - - let difference, w2, product, discriminant, temp; - - if (q2 > 1.0) { - // Outside ellipsoid. - if (qw >= 0.0) { - // Looking outward or tangent (0 intersections). - return undefined; - } - - // qw < 0.0. - const qw2 = qw * qw; - difference = q2 - 1.0; // Positively valued. - w2 = Matrix3.Cartesian3.magnitudeSquared(w); - product = w2 * difference; - - if (qw2 < product) { - // Imaginary roots (0 intersections). - return undefined; - } else if (qw2 > product) { - // Distinct roots (2 intersections). - discriminant = qw * qw - product; - temp = -qw + Math.sqrt(discriminant); // Avoid cancellation. - const root0 = temp / w2; - const root1 = difference / temp; - if (root0 < root1) { - return new Transforms.Interval(root0, root1); - } - - return { - start: root1, - stop: root0, - }; - } - // qw2 == product. Repeated roots (2 intersections). - const root = Math.sqrt(difference / w2); - return new Transforms.Interval(root, root); - } else if (q2 < 1.0) { - // Inside ellipsoid (2 intersections). - difference = q2 - 1.0; // Negatively valued. - w2 = Matrix3.Cartesian3.magnitudeSquared(w); - product = w2 * difference; // Negatively valued. - - discriminant = qw * qw - product; - temp = -qw + Math.sqrt(discriminant); // Positively valued. - return new Transforms.Interval(0.0, temp / w2); - } - // q2 == 1.0. On ellipsoid. - if (qw < 0.0) { - // Looking inward. - w2 = Matrix3.Cartesian3.magnitudeSquared(w); - return new Transforms.Interval(0.0, -qw / w2); - } - - // qw >= 0.0. Looking outward or tangent. - return undefined; - }; - - function addWithCancellationCheck(left, right, tolerance) { - const difference = left + right; - if ( - Math$1.CesiumMath.sign(left) !== Math$1.CesiumMath.sign(right) && - Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance - ) { - return 0.0; - } - - return difference; - } - - function quadraticVectorExpression(A, b, c, x, w) { - const xSquared = x * x; - const wSquared = w * w; - - const l2 = (A[Matrix3.Matrix3.COLUMN1ROW1] - A[Matrix3.Matrix3.COLUMN2ROW2]) * wSquared; - const l1 = - w * - (x * - addWithCancellationCheck( - A[Matrix3.Matrix3.COLUMN1ROW0], - A[Matrix3.Matrix3.COLUMN0ROW1], - Math$1.CesiumMath.EPSILON15 - ) + - b.y); - const l0 = - A[Matrix3.Matrix3.COLUMN0ROW0] * xSquared + - A[Matrix3.Matrix3.COLUMN2ROW2] * wSquared + - x * b.x + - c; - - const r1 = - wSquared * - addWithCancellationCheck( - A[Matrix3.Matrix3.COLUMN2ROW1], - A[Matrix3.Matrix3.COLUMN1ROW2], - Math$1.CesiumMath.EPSILON15 - ); - const r0 = - w * - (x * - addWithCancellationCheck(A[Matrix3.Matrix3.COLUMN2ROW0], A[Matrix3.Matrix3.COLUMN0ROW2]) + - b.z); - - let cosines; - const solutions = []; - if (r0 === 0.0 && r1 === 0.0) { - cosines = QuadraticRealPolynomial$1.computeRealRoots(l2, l1, l0); - if (cosines.length === 0) { - return solutions; - } - - const cosine0 = cosines[0]; - const sine0 = Math.sqrt(Math.max(1.0 - cosine0 * cosine0, 0.0)); - solutions.push(new Matrix3.Cartesian3(x, w * cosine0, w * -sine0)); - solutions.push(new Matrix3.Cartesian3(x, w * cosine0, w * sine0)); - - if (cosines.length === 2) { - const cosine1 = cosines[1]; - const sine1 = Math.sqrt(Math.max(1.0 - cosine1 * cosine1, 0.0)); - solutions.push(new Matrix3.Cartesian3(x, w * cosine1, w * -sine1)); - solutions.push(new Matrix3.Cartesian3(x, w * cosine1, w * sine1)); - } - - return solutions; - } - - const r0Squared = r0 * r0; - const r1Squared = r1 * r1; - const l2Squared = l2 * l2; - const r0r1 = r0 * r1; - - const c4 = l2Squared + r1Squared; - const c3 = 2.0 * (l1 * l2 + r0r1); - const c2 = 2.0 * l0 * l2 + l1 * l1 - r1Squared + r0Squared; - const c1 = 2.0 * (l0 * l1 - r0r1); - const c0 = l0 * l0 - r0Squared; - - if (c4 === 0.0 && c3 === 0.0 && c2 === 0.0 && c1 === 0.0) { - return solutions; - } - - cosines = QuarticRealPolynomial$1.computeRealRoots(c4, c3, c2, c1, c0); - const length = cosines.length; - if (length === 0) { - return solutions; - } - - for (let i = 0; i < length; ++i) { - const cosine = cosines[i]; - const cosineSquared = cosine * cosine; - const sineSquared = Math.max(1.0 - cosineSquared, 0.0); - const sine = Math.sqrt(sineSquared); - - //const left = l2 * cosineSquared + l1 * cosine + l0; - let left; - if (Math$1.CesiumMath.sign(l2) === Math$1.CesiumMath.sign(l0)) { - left = addWithCancellationCheck( - l2 * cosineSquared + l0, - l1 * cosine, - Math$1.CesiumMath.EPSILON12 - ); - } else if (Math$1.CesiumMath.sign(l0) === Math$1.CesiumMath.sign(l1 * cosine)) { - left = addWithCancellationCheck( - l2 * cosineSquared, - l1 * cosine + l0, - Math$1.CesiumMath.EPSILON12 - ); - } else { - left = addWithCancellationCheck( - l2 * cosineSquared + l1 * cosine, - l0, - Math$1.CesiumMath.EPSILON12 - ); - } - - const right = addWithCancellationCheck( - r1 * cosine, - r0, - Math$1.CesiumMath.EPSILON15 - ); - const product = left * right; - - if (product < 0.0) { - solutions.push(new Matrix3.Cartesian3(x, w * cosine, w * sine)); - } else if (product > 0.0) { - solutions.push(new Matrix3.Cartesian3(x, w * cosine, w * -sine)); - } else if (sine !== 0.0) { - solutions.push(new Matrix3.Cartesian3(x, w * cosine, w * -sine)); - solutions.push(new Matrix3.Cartesian3(x, w * cosine, w * sine)); - ++i; - } else { - solutions.push(new Matrix3.Cartesian3(x, w * cosine, w * sine)); - } - } - - return solutions; - } - - const firstAxisScratch = new Matrix3.Cartesian3(); - const secondAxisScratch = new Matrix3.Cartesian3(); - const thirdAxisScratch = new Matrix3.Cartesian3(); - const referenceScratch = new Matrix3.Cartesian3(); - const bCart = new Matrix3.Cartesian3(); - const bScratch = new Matrix3.Matrix3(); - const btScratch = new Matrix3.Matrix3(); - const diScratch = new Matrix3.Matrix3(); - const dScratch = new Matrix3.Matrix3(); - const cScratch = new Matrix3.Matrix3(); - const tempMatrix = new Matrix3.Matrix3(); - const aScratch = new Matrix3.Matrix3(); - const sScratch = new Matrix3.Cartesian3(); - const closestScratch = new Matrix3.Cartesian3(); - const surfPointScratch = new Matrix3.Cartographic(); - - /** - * Provides the point along the ray which is nearest to the ellipsoid. - * - * @param {Ray} ray The ray. - * @param {Ellipsoid} ellipsoid The ellipsoid. - * @returns {Cartesian3} The nearest planetodetic point on the ray. - */ - IntersectionTests.grazingAltitudeLocation = function (ray, ellipsoid) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(ray)) { - throw new Check.DeveloperError("ray is required."); - } - if (!defaultValue.defined(ellipsoid)) { - throw new Check.DeveloperError("ellipsoid is required."); - } - //>>includeEnd('debug'); - - const position = ray.origin; - const direction = ray.direction; - - if (!Matrix3.Cartesian3.equals(position, Matrix3.Cartesian3.ZERO)) { - const normal = ellipsoid.geodeticSurfaceNormal(position, firstAxisScratch); - if (Matrix3.Cartesian3.dot(direction, normal) >= 0.0) { - // The location provided is the closest point in altitude - return position; - } - } - - const intersects = defaultValue.defined(this.rayEllipsoid(ray, ellipsoid)); - - // Compute the scaled direction vector. - const f = ellipsoid.transformPositionToScaledSpace( - direction, - firstAxisScratch - ); - - // Constructs a basis from the unit scaled direction vector. Construct its rotation and transpose. - const firstAxis = Matrix3.Cartesian3.normalize(f, f); - const reference = Matrix3.Cartesian3.mostOrthogonalAxis(f, referenceScratch); - const secondAxis = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(reference, firstAxis, secondAxisScratch), - secondAxisScratch - ); - const thirdAxis = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(firstAxis, secondAxis, thirdAxisScratch), - thirdAxisScratch - ); - const B = bScratch; - B[0] = firstAxis.x; - B[1] = firstAxis.y; - B[2] = firstAxis.z; - B[3] = secondAxis.x; - B[4] = secondAxis.y; - B[5] = secondAxis.z; - B[6] = thirdAxis.x; - B[7] = thirdAxis.y; - B[8] = thirdAxis.z; - - const B_T = Matrix3.Matrix3.transpose(B, btScratch); - - // Get the scaling matrix and its inverse. - const D_I = Matrix3.Matrix3.fromScale(ellipsoid.radii, diScratch); - const D = Matrix3.Matrix3.fromScale(ellipsoid.oneOverRadii, dScratch); - - const C = cScratch; - C[0] = 0.0; - C[1] = -direction.z; - C[2] = direction.y; - C[3] = direction.z; - C[4] = 0.0; - C[5] = -direction.x; - C[6] = -direction.y; - C[7] = direction.x; - C[8] = 0.0; - - const temp = Matrix3.Matrix3.multiply( - Matrix3.Matrix3.multiply(B_T, D, tempMatrix), - C, - tempMatrix - ); - const A = Matrix3.Matrix3.multiply( - Matrix3.Matrix3.multiply(temp, D_I, aScratch), - B, - aScratch - ); - const b = Matrix3.Matrix3.multiplyByVector(temp, position, bCart); - - // Solve for the solutions to the expression in standard form: - const solutions = quadraticVectorExpression( - A, - Matrix3.Cartesian3.negate(b, firstAxisScratch), - 0.0, - 0.0, - 1.0 - ); - - let s; - let altitude; - const length = solutions.length; - if (length > 0) { - let closest = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, closestScratch); - let maximumValue = Number.NEGATIVE_INFINITY; - - for (let i = 0; i < length; ++i) { - s = Matrix3.Matrix3.multiplyByVector( - D_I, - Matrix3.Matrix3.multiplyByVector(B, solutions[i], sScratch), - sScratch - ); - const v = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.subtract(s, position, referenceScratch), - referenceScratch - ); - const dotProduct = Matrix3.Cartesian3.dot(v, direction); - - if (dotProduct > maximumValue) { - maximumValue = dotProduct; - closest = Matrix3.Cartesian3.clone(s, closest); - } - } - - const surfacePoint = ellipsoid.cartesianToCartographic( - closest, - surfPointScratch - ); - maximumValue = Math$1.CesiumMath.clamp(maximumValue, 0.0, 1.0); - altitude = - Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.subtract(closest, position, referenceScratch) - ) * Math.sqrt(1.0 - maximumValue * maximumValue); - altitude = intersects ? -altitude : altitude; - surfacePoint.height = altitude; - return ellipsoid.cartographicToCartesian(surfacePoint, new Matrix3.Cartesian3()); - } - - return undefined; - }; - - const lineSegmentPlaneDifference = new Matrix3.Cartesian3(); - - /** - * Computes the intersection of a line segment and a plane. - * - * @param {Cartesian3} endPoint0 An end point of the line segment. - * @param {Cartesian3} endPoint1 The other end point of the line segment. - * @param {Plane} plane The plane. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The intersection point or undefined if there is no intersection. - * - * @example - * const origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); - * const normal = ellipsoid.geodeticSurfaceNormal(origin); - * const plane = Cesium.Plane.fromPointNormal(origin, normal); - * - * const p0 = new Cesium.Cartesian3(...); - * const p1 = new Cesium.Cartesian3(...); - * - * // find the intersection of the line segment from p0 to p1 and the tangent plane at origin. - * const intersection = Cesium.IntersectionTests.lineSegmentPlane(p0, p1, plane); - */ - IntersectionTests.lineSegmentPlane = function ( - endPoint0, - endPoint1, - plane, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(endPoint0)) { - throw new Check.DeveloperError("endPoint0 is required."); - } - if (!defaultValue.defined(endPoint1)) { - throw new Check.DeveloperError("endPoint1 is required."); - } - if (!defaultValue.defined(plane)) { - throw new Check.DeveloperError("plane is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - const difference = Matrix3.Cartesian3.subtract( - endPoint1, - endPoint0, - lineSegmentPlaneDifference - ); - const normal = plane.normal; - const nDotDiff = Matrix3.Cartesian3.dot(normal, difference); - - // check if the segment and plane are parallel - if (Math.abs(nDotDiff) < Math$1.CesiumMath.EPSILON6) { - return undefined; - } - - const nDotP0 = Matrix3.Cartesian3.dot(normal, endPoint0); - const t = -(plane.distance + nDotP0) / nDotDiff; - - // intersection only if t is in [0, 1] - if (t < 0.0 || t > 1.0) { - return undefined; - } - - // intersection is endPoint0 + t * (endPoint1 - endPoint0) - Matrix3.Cartesian3.multiplyByScalar(difference, t, result); - Matrix3.Cartesian3.add(endPoint0, result, result); - return result; - }; - - /** - * Computes the intersection of a triangle and a plane - * - * @param {Cartesian3} p0 First point of the triangle - * @param {Cartesian3} p1 Second point of the triangle - * @param {Cartesian3} p2 Third point of the triangle - * @param {Plane} plane Intersection plane - * @returns {Object} An object with properties positions and indices, which are arrays that represent three triangles that do not cross the plane. (Undefined if no intersection exists) - * - * @example - * const origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883); - * const normal = ellipsoid.geodeticSurfaceNormal(origin); - * const plane = Cesium.Plane.fromPointNormal(origin, normal); - * - * const p0 = new Cesium.Cartesian3(...); - * const p1 = new Cesium.Cartesian3(...); - * const p2 = new Cesium.Cartesian3(...); - * - * // convert the triangle composed of points (p0, p1, p2) to three triangles that don't cross the plane - * const triangles = Cesium.IntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane); - */ - IntersectionTests.trianglePlaneIntersection = function (p0, p1, p2, plane) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(p0) || !defaultValue.defined(p1) || !defaultValue.defined(p2) || !defaultValue.defined(plane)) { - throw new Check.DeveloperError("p0, p1, p2, and plane are required."); - } - //>>includeEnd('debug'); - - const planeNormal = plane.normal; - const planeD = plane.distance; - const p0Behind = Matrix3.Cartesian3.dot(planeNormal, p0) + planeD < 0.0; - const p1Behind = Matrix3.Cartesian3.dot(planeNormal, p1) + planeD < 0.0; - const p2Behind = Matrix3.Cartesian3.dot(planeNormal, p2) + planeD < 0.0; - // Given these dots products, the calls to lineSegmentPlaneIntersection - // always have defined results. - - let numBehind = 0; - numBehind += p0Behind ? 1 : 0; - numBehind += p1Behind ? 1 : 0; - numBehind += p2Behind ? 1 : 0; - - let u1, u2; - if (numBehind === 1 || numBehind === 2) { - u1 = new Matrix3.Cartesian3(); - u2 = new Matrix3.Cartesian3(); - } - - if (numBehind === 1) { - if (p0Behind) { - IntersectionTests.lineSegmentPlane(p0, p1, plane, u1); - IntersectionTests.lineSegmentPlane(p0, p2, plane, u2); - - return { - positions: [p0, p1, p2, u1, u2], - indices: [ - // Behind - 0, - 3, - 4, - - // In front - 1, - 2, - 4, - 1, - 4, - 3, - ], - }; - } else if (p1Behind) { - IntersectionTests.lineSegmentPlane(p1, p2, plane, u1); - IntersectionTests.lineSegmentPlane(p1, p0, plane, u2); - - return { - positions: [p0, p1, p2, u1, u2], - indices: [ - // Behind - 1, - 3, - 4, - - // In front - 2, - 0, - 4, - 2, - 4, - 3, - ], - }; - } else if (p2Behind) { - IntersectionTests.lineSegmentPlane(p2, p0, plane, u1); - IntersectionTests.lineSegmentPlane(p2, p1, plane, u2); - - return { - positions: [p0, p1, p2, u1, u2], - indices: [ - // Behind - 2, - 3, - 4, - - // In front - 0, - 1, - 4, - 0, - 4, - 3, - ], - }; - } - } else if (numBehind === 2) { - if (!p0Behind) { - IntersectionTests.lineSegmentPlane(p1, p0, plane, u1); - IntersectionTests.lineSegmentPlane(p2, p0, plane, u2); - - return { - positions: [p0, p1, p2, u1, u2], - indices: [ - // Behind - 1, - 2, - 4, - 1, - 4, - 3, - - // In front - 0, - 3, - 4, - ], - }; - } else if (!p1Behind) { - IntersectionTests.lineSegmentPlane(p2, p1, plane, u1); - IntersectionTests.lineSegmentPlane(p0, p1, plane, u2); - - return { - positions: [p0, p1, p2, u1, u2], - indices: [ - // Behind - 2, - 0, - 4, - 2, - 4, - 3, - - // In front - 1, - 3, - 4, - ], - }; - } else if (!p2Behind) { - IntersectionTests.lineSegmentPlane(p0, p2, plane, u1); - IntersectionTests.lineSegmentPlane(p1, p2, plane, u2); - - return { - positions: [p0, p1, p2, u1, u2], - indices: [ - // Behind - 0, - 1, - 4, - 0, - 4, - 3, - - // In front - 2, - 3, - 4, - ], - }; - } - } - - // if numBehind is 3, the triangle is completely behind the plane; - // otherwise, it is completely in front (numBehind is 0). - return undefined; - }; - var IntersectionTests$1 = IntersectionTests; - - exports.IntersectionTests = IntersectionTests$1; - exports.Ray = Ray; - -})); -//# sourceMappingURL=IntersectionTests-2c7928de.js.map diff --git a/debug/cesium/Workers/IntersectionTests-2c7928de.js.map b/debug/cesium/Workers/IntersectionTests-2c7928de.js.map deleted file mode 100644 index 01357ee..0000000 --- a/debug/cesium/Workers/IntersectionTests-2c7928de.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"IntersectionTests-2c7928de.js","sources":["../../../Source/Core/QuadraticRealPolynomial.js","../../../Source/Core/CubicRealPolynomial.js","../../../Source/Core/QuarticRealPolynomial.js","../../../Source/Core/Ray.js","../../../Source/Core/IntersectionTests.js"],"sourcesContent":["import DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * Defines functions for 2nd order polynomial functions of one variable with only real coefficients.\r\n *\r\n * @namespace QuadraticRealPolynomial\r\n */\r\nconst QuadraticRealPolynomial = {};\r\n\r\n/**\r\n * Provides the discriminant of the quadratic equation from the supplied coefficients.\r\n *\r\n * @param {Number} a The coefficient of the 2nd order monomial.\r\n * @param {Number} b The coefficient of the 1st order monomial.\r\n * @param {Number} c The coefficient of the 0th order monomial.\r\n * @returns {Number} The value of the discriminant.\r\n */\r\nQuadraticRealPolynomial.computeDiscriminant = function (a, b, c) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof a !== \"number\") {\r\n throw new DeveloperError(\"a is a required number.\");\r\n }\r\n if (typeof b !== \"number\") {\r\n throw new DeveloperError(\"b is a required number.\");\r\n }\r\n if (typeof c !== \"number\") {\r\n throw new DeveloperError(\"c is a required number.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const discriminant = b * b - 4.0 * a * c;\r\n return discriminant;\r\n};\r\n\r\nfunction addWithCancellationCheck(left, right, tolerance) {\r\n const difference = left + right;\r\n if (\r\n CesiumMath.sign(left) !== CesiumMath.sign(right) &&\r\n Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance\r\n ) {\r\n return 0.0;\r\n }\r\n\r\n return difference;\r\n}\r\n\r\n/**\r\n * Provides the real valued roots of the quadratic polynomial with the provided coefficients.\r\n *\r\n * @param {Number} a The coefficient of the 2nd order monomial.\r\n * @param {Number} b The coefficient of the 1st order monomial.\r\n * @param {Number} c The coefficient of the 0th order monomial.\r\n * @returns {Number[]} The real valued roots.\r\n */\r\nQuadraticRealPolynomial.computeRealRoots = function (a, b, c) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof a !== \"number\") {\r\n throw new DeveloperError(\"a is a required number.\");\r\n }\r\n if (typeof b !== \"number\") {\r\n throw new DeveloperError(\"b is a required number.\");\r\n }\r\n if (typeof c !== \"number\") {\r\n throw new DeveloperError(\"c is a required number.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let ratio;\r\n if (a === 0.0) {\r\n if (b === 0.0) {\r\n // Constant function: c = 0.\r\n return [];\r\n }\r\n\r\n // Linear function: b * x + c = 0.\r\n return [-c / b];\r\n } else if (b === 0.0) {\r\n if (c === 0.0) {\r\n // 2nd order monomial: a * x^2 = 0.\r\n return [0.0, 0.0];\r\n }\r\n\r\n const cMagnitude = Math.abs(c);\r\n const aMagnitude = Math.abs(a);\r\n\r\n if (\r\n cMagnitude < aMagnitude &&\r\n cMagnitude / aMagnitude < CesiumMath.EPSILON14\r\n ) {\r\n // c ~= 0.0.\r\n // 2nd order monomial: a * x^2 = 0.\r\n return [0.0, 0.0];\r\n } else if (\r\n cMagnitude > aMagnitude &&\r\n aMagnitude / cMagnitude < CesiumMath.EPSILON14\r\n ) {\r\n // a ~= 0.0.\r\n // Constant function: c = 0.\r\n return [];\r\n }\r\n\r\n // a * x^2 + c = 0\r\n ratio = -c / a;\r\n\r\n if (ratio < 0.0) {\r\n // Both roots are complex.\r\n return [];\r\n }\r\n\r\n // Both roots are real.\r\n const root = Math.sqrt(ratio);\r\n return [-root, root];\r\n } else if (c === 0.0) {\r\n // a * x^2 + b * x = 0\r\n ratio = -b / a;\r\n if (ratio < 0.0) {\r\n return [ratio, 0.0];\r\n }\r\n\r\n return [0.0, ratio];\r\n }\r\n\r\n // a * x^2 + b * x + c = 0\r\n const b2 = b * b;\r\n const four_ac = 4.0 * a * c;\r\n const radicand = addWithCancellationCheck(b2, -four_ac, CesiumMath.EPSILON14);\r\n\r\n if (radicand < 0.0) {\r\n // Both roots are complex.\r\n return [];\r\n }\r\n\r\n const q =\r\n -0.5 *\r\n addWithCancellationCheck(\r\n b,\r\n CesiumMath.sign(b) * Math.sqrt(radicand),\r\n CesiumMath.EPSILON14\r\n );\r\n if (b > 0.0) {\r\n return [q / a, c / q];\r\n }\r\n\r\n return [c / q, q / a];\r\n};\r\nexport default QuadraticRealPolynomial;\r\n","import DeveloperError from \"./DeveloperError.js\";\r\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\r\n\r\n/**\r\n * Defines functions for 3rd order polynomial functions of one variable with only real coefficients.\r\n *\r\n * @namespace CubicRealPolynomial\r\n */\r\nconst CubicRealPolynomial = {};\r\n\r\n/**\r\n * Provides the discriminant of the cubic equation from the supplied coefficients.\r\n *\r\n * @param {Number} a The coefficient of the 3rd order monomial.\r\n * @param {Number} b The coefficient of the 2nd order monomial.\r\n * @param {Number} c The coefficient of the 1st order monomial.\r\n * @param {Number} d The coefficient of the 0th order monomial.\r\n * @returns {Number} The value of the discriminant.\r\n */\r\nCubicRealPolynomial.computeDiscriminant = function (a, b, c, d) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof a !== \"number\") {\r\n throw new DeveloperError(\"a is a required number.\");\r\n }\r\n if (typeof b !== \"number\") {\r\n throw new DeveloperError(\"b is a required number.\");\r\n }\r\n if (typeof c !== \"number\") {\r\n throw new DeveloperError(\"c is a required number.\");\r\n }\r\n if (typeof d !== \"number\") {\r\n throw new DeveloperError(\"d is a required number.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const a2 = a * a;\r\n const b2 = b * b;\r\n const c2 = c * c;\r\n const d2 = d * d;\r\n\r\n const discriminant =\r\n 18.0 * a * b * c * d +\r\n b2 * c2 -\r\n 27.0 * a2 * d2 -\r\n 4.0 * (a * c2 * c + b2 * b * d);\r\n return discriminant;\r\n};\r\n\r\nfunction computeRealRoots(a, b, c, d) {\r\n const A = a;\r\n const B = b / 3.0;\r\n const C = c / 3.0;\r\n const D = d;\r\n\r\n const AC = A * C;\r\n const BD = B * D;\r\n const B2 = B * B;\r\n const C2 = C * C;\r\n const delta1 = A * C - B2;\r\n const delta2 = A * D - B * C;\r\n const delta3 = B * D - C2;\r\n\r\n const discriminant = 4.0 * delta1 * delta3 - delta2 * delta2;\r\n let temp;\r\n let temp1;\r\n\r\n if (discriminant < 0.0) {\r\n let ABar;\r\n let CBar;\r\n let DBar;\r\n\r\n if (B2 * BD >= AC * C2) {\r\n ABar = A;\r\n CBar = delta1;\r\n DBar = -2.0 * B * delta1 + A * delta2;\r\n } else {\r\n ABar = D;\r\n CBar = delta3;\r\n DBar = -D * delta2 + 2.0 * C * delta3;\r\n }\r\n\r\n const s = DBar < 0.0 ? -1.0 : 1.0; // This is not Math.Sign()!\r\n const temp0 = -s * Math.abs(ABar) * Math.sqrt(-discriminant);\r\n temp1 = -DBar + temp0;\r\n\r\n const x = temp1 / 2.0;\r\n const p = x < 0.0 ? -Math.pow(-x, 1.0 / 3.0) : Math.pow(x, 1.0 / 3.0);\r\n const q = temp1 === temp0 ? -p : -CBar / p;\r\n\r\n temp = CBar <= 0.0 ? p + q : -DBar / (p * p + q * q + CBar);\r\n\r\n if (B2 * BD >= AC * C2) {\r\n return [(temp - B) / A];\r\n }\r\n\r\n return [-D / (temp + C)];\r\n }\r\n\r\n const CBarA = delta1;\r\n const DBarA = -2.0 * B * delta1 + A * delta2;\r\n\r\n const CBarD = delta3;\r\n const DBarD = -D * delta2 + 2.0 * C * delta3;\r\n\r\n const squareRootOfDiscriminant = Math.sqrt(discriminant);\r\n const halfSquareRootOf3 = Math.sqrt(3.0) / 2.0;\r\n\r\n let theta = Math.abs(Math.atan2(A * squareRootOfDiscriminant, -DBarA) / 3.0);\r\n temp = 2.0 * Math.sqrt(-CBarA);\r\n let cosine = Math.cos(theta);\r\n temp1 = temp * cosine;\r\n let temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta));\r\n\r\n const numeratorLarge = temp1 + temp3 > 2.0 * B ? temp1 - B : temp3 - B;\r\n const denominatorLarge = A;\r\n\r\n const root1 = numeratorLarge / denominatorLarge;\r\n\r\n theta = Math.abs(Math.atan2(D * squareRootOfDiscriminant, -DBarD) / 3.0);\r\n temp = 2.0 * Math.sqrt(-CBarD);\r\n cosine = Math.cos(theta);\r\n temp1 = temp * cosine;\r\n temp3 = temp * (-cosine / 2.0 - halfSquareRootOf3 * Math.sin(theta));\r\n\r\n const numeratorSmall = -D;\r\n const denominatorSmall = temp1 + temp3 < 2.0 * C ? temp1 + C : temp3 + C;\r\n\r\n const root3 = numeratorSmall / denominatorSmall;\r\n\r\n const E = denominatorLarge * denominatorSmall;\r\n const F =\r\n -numeratorLarge * denominatorSmall - denominatorLarge * numeratorSmall;\r\n const G = numeratorLarge * numeratorSmall;\r\n\r\n const root2 = (C * F - B * G) / (-B * F + C * E);\r\n\r\n if (root1 <= root2) {\r\n if (root1 <= root3) {\r\n if (root2 <= root3) {\r\n return [root1, root2, root3];\r\n }\r\n return [root1, root3, root2];\r\n }\r\n return [root3, root1, root2];\r\n }\r\n if (root1 <= root3) {\r\n return [root2, root1, root3];\r\n }\r\n if (root2 <= root3) {\r\n return [root2, root3, root1];\r\n }\r\n return [root3, root2, root1];\r\n}\r\n\r\n/**\r\n * Provides the real valued roots of the cubic polynomial with the provided coefficients.\r\n *\r\n * @param {Number} a The coefficient of the 3rd order monomial.\r\n * @param {Number} b The coefficient of the 2nd order monomial.\r\n * @param {Number} c The coefficient of the 1st order monomial.\r\n * @param {Number} d The coefficient of the 0th order monomial.\r\n * @returns {Number[]} The real valued roots.\r\n */\r\nCubicRealPolynomial.computeRealRoots = function (a, b, c, d) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof a !== \"number\") {\r\n throw new DeveloperError(\"a is a required number.\");\r\n }\r\n if (typeof b !== \"number\") {\r\n throw new DeveloperError(\"b is a required number.\");\r\n }\r\n if (typeof c !== \"number\") {\r\n throw new DeveloperError(\"c is a required number.\");\r\n }\r\n if (typeof d !== \"number\") {\r\n throw new DeveloperError(\"d is a required number.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let roots;\r\n let ratio;\r\n if (a === 0.0) {\r\n // Quadratic function: b * x^2 + c * x + d = 0.\r\n return QuadraticRealPolynomial.computeRealRoots(b, c, d);\r\n } else if (b === 0.0) {\r\n if (c === 0.0) {\r\n if (d === 0.0) {\r\n // 3rd order monomial: a * x^3 = 0.\r\n return [0.0, 0.0, 0.0];\r\n }\r\n\r\n // a * x^3 + d = 0\r\n ratio = -d / a;\r\n const root =\r\n ratio < 0.0 ? -Math.pow(-ratio, 1.0 / 3.0) : Math.pow(ratio, 1.0 / 3.0);\r\n return [root, root, root];\r\n } else if (d === 0.0) {\r\n // x * (a * x^2 + c) = 0.\r\n roots = QuadraticRealPolynomial.computeRealRoots(a, 0, c);\r\n\r\n // Return the roots in ascending order.\r\n if (roots.Length === 0) {\r\n return [0.0];\r\n }\r\n return [roots[0], 0.0, roots[1]];\r\n }\r\n\r\n // Deflated cubic polynomial: a * x^3 + c * x + d= 0.\r\n return computeRealRoots(a, 0, c, d);\r\n } else if (c === 0.0) {\r\n if (d === 0.0) {\r\n // x^2 * (a * x + b) = 0.\r\n ratio = -b / a;\r\n if (ratio < 0.0) {\r\n return [ratio, 0.0, 0.0];\r\n }\r\n return [0.0, 0.0, ratio];\r\n }\r\n // a * x^3 + b * x^2 + d = 0.\r\n return computeRealRoots(a, b, 0, d);\r\n } else if (d === 0.0) {\r\n // x * (a * x^2 + b * x + c) = 0\r\n roots = QuadraticRealPolynomial.computeRealRoots(a, b, c);\r\n\r\n // Return the roots in ascending order.\r\n if (roots.length === 0) {\r\n return [0.0];\r\n } else if (roots[1] <= 0.0) {\r\n return [roots[0], roots[1], 0.0];\r\n } else if (roots[0] >= 0.0) {\r\n return [0.0, roots[0], roots[1]];\r\n }\r\n return [roots[0], 0.0, roots[1]];\r\n }\r\n\r\n return computeRealRoots(a, b, c, d);\r\n};\r\nexport default CubicRealPolynomial;\r\n","import CubicRealPolynomial from \"./CubicRealPolynomial.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\r\n\r\n/**\r\n * Defines functions for 4th order polynomial functions of one variable with only real coefficients.\r\n *\r\n * @namespace QuarticRealPolynomial\r\n */\r\nconst QuarticRealPolynomial = {};\r\n\r\n/**\r\n * Provides the discriminant of the quartic equation from the supplied coefficients.\r\n *\r\n * @param {Number} a The coefficient of the 4th order monomial.\r\n * @param {Number} b The coefficient of the 3rd order monomial.\r\n * @param {Number} c The coefficient of the 2nd order monomial.\r\n * @param {Number} d The coefficient of the 1st order monomial.\r\n * @param {Number} e The coefficient of the 0th order monomial.\r\n * @returns {Number} The value of the discriminant.\r\n */\r\nQuarticRealPolynomial.computeDiscriminant = function (a, b, c, d, e) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof a !== \"number\") {\r\n throw new DeveloperError(\"a is a required number.\");\r\n }\r\n if (typeof b !== \"number\") {\r\n throw new DeveloperError(\"b is a required number.\");\r\n }\r\n if (typeof c !== \"number\") {\r\n throw new DeveloperError(\"c is a required number.\");\r\n }\r\n if (typeof d !== \"number\") {\r\n throw new DeveloperError(\"d is a required number.\");\r\n }\r\n if (typeof e !== \"number\") {\r\n throw new DeveloperError(\"e is a required number.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const a2 = a * a;\r\n const a3 = a2 * a;\r\n const b2 = b * b;\r\n const b3 = b2 * b;\r\n const c2 = c * c;\r\n const c3 = c2 * c;\r\n const d2 = d * d;\r\n const d3 = d2 * d;\r\n const e2 = e * e;\r\n const e3 = e2 * e;\r\n\r\n const discriminant =\r\n b2 * c2 * d2 -\r\n 4.0 * b3 * d3 -\r\n 4.0 * a * c3 * d2 +\r\n 18 * a * b * c * d3 -\r\n 27.0 * a2 * d2 * d2 +\r\n 256.0 * a3 * e3 +\r\n e *\r\n (18.0 * b3 * c * d -\r\n 4.0 * b2 * c3 +\r\n 16.0 * a * c2 * c2 -\r\n 80.0 * a * b * c2 * d -\r\n 6.0 * a * b2 * d2 +\r\n 144.0 * a2 * c * d2) +\r\n e2 *\r\n (144.0 * a * b2 * c -\r\n 27.0 * b2 * b2 -\r\n 128.0 * a2 * c2 -\r\n 192.0 * a2 * b * d);\r\n return discriminant;\r\n};\r\n\r\nfunction original(a3, a2, a1, a0) {\r\n const a3Squared = a3 * a3;\r\n\r\n const p = a2 - (3.0 * a3Squared) / 8.0;\r\n const q = a1 - (a2 * a3) / 2.0 + (a3Squared * a3) / 8.0;\r\n const r =\r\n a0 -\r\n (a1 * a3) / 4.0 +\r\n (a2 * a3Squared) / 16.0 -\r\n (3.0 * a3Squared * a3Squared) / 256.0;\r\n\r\n // Find the roots of the cubic equations: h^6 + 2 p h^4 + (p^2 - 4 r) h^2 - q^2 = 0.\r\n const cubicRoots = CubicRealPolynomial.computeRealRoots(\r\n 1.0,\r\n 2.0 * p,\r\n p * p - 4.0 * r,\r\n -q * q\r\n );\r\n\r\n if (cubicRoots.length > 0) {\r\n const temp = -a3 / 4.0;\r\n\r\n // Use the largest positive root.\r\n const hSquared = cubicRoots[cubicRoots.length - 1];\r\n\r\n if (Math.abs(hSquared) < CesiumMath.EPSILON14) {\r\n // y^4 + p y^2 + r = 0.\r\n const roots = QuadraticRealPolynomial.computeRealRoots(1.0, p, r);\r\n\r\n if (roots.length === 2) {\r\n const root0 = roots[0];\r\n const root1 = roots[1];\r\n\r\n let y;\r\n if (root0 >= 0.0 && root1 >= 0.0) {\r\n const y0 = Math.sqrt(root0);\r\n const y1 = Math.sqrt(root1);\r\n\r\n return [temp - y1, temp - y0, temp + y0, temp + y1];\r\n } else if (root0 >= 0.0 && root1 < 0.0) {\r\n y = Math.sqrt(root0);\r\n return [temp - y, temp + y];\r\n } else if (root0 < 0.0 && root1 >= 0.0) {\r\n y = Math.sqrt(root1);\r\n return [temp - y, temp + y];\r\n }\r\n }\r\n return [];\r\n } else if (hSquared > 0.0) {\r\n const h = Math.sqrt(hSquared);\r\n\r\n const m = (p + hSquared - q / h) / 2.0;\r\n const n = (p + hSquared + q / h) / 2.0;\r\n\r\n // Now solve the two quadratic factors: (y^2 + h y + m)(y^2 - h y + n);\r\n const roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, h, m);\r\n const roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, -h, n);\r\n\r\n if (roots1.length !== 0) {\r\n roots1[0] += temp;\r\n roots1[1] += temp;\r\n\r\n if (roots2.length !== 0) {\r\n roots2[0] += temp;\r\n roots2[1] += temp;\r\n\r\n if (roots1[1] <= roots2[0]) {\r\n return [roots1[0], roots1[1], roots2[0], roots2[1]];\r\n } else if (roots2[1] <= roots1[0]) {\r\n return [roots2[0], roots2[1], roots1[0], roots1[1]];\r\n } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {\r\n return [roots2[0], roots1[0], roots1[1], roots2[1]];\r\n } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {\r\n return [roots1[0], roots2[0], roots2[1], roots1[1]];\r\n } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {\r\n return [roots2[0], roots1[0], roots2[1], roots1[1]];\r\n }\r\n return [roots1[0], roots2[0], roots1[1], roots2[1]];\r\n }\r\n return roots1;\r\n }\r\n\r\n if (roots2.length !== 0) {\r\n roots2[0] += temp;\r\n roots2[1] += temp;\r\n\r\n return roots2;\r\n }\r\n return [];\r\n }\r\n }\r\n return [];\r\n}\r\n\r\nfunction neumark(a3, a2, a1, a0) {\r\n const a1Squared = a1 * a1;\r\n const a2Squared = a2 * a2;\r\n const a3Squared = a3 * a3;\r\n\r\n const p = -2.0 * a2;\r\n const q = a1 * a3 + a2Squared - 4.0 * a0;\r\n const r = a3Squared * a0 - a1 * a2 * a3 + a1Squared;\r\n\r\n const cubicRoots = CubicRealPolynomial.computeRealRoots(1.0, p, q, r);\r\n\r\n if (cubicRoots.length > 0) {\r\n // Use the most positive root\r\n const y = cubicRoots[0];\r\n\r\n const temp = a2 - y;\r\n const tempSquared = temp * temp;\r\n\r\n const g1 = a3 / 2.0;\r\n const h1 = temp / 2.0;\r\n\r\n const m = tempSquared - 4.0 * a0;\r\n const mError = tempSquared + 4.0 * Math.abs(a0);\r\n\r\n const n = a3Squared - 4.0 * y;\r\n const nError = a3Squared + 4.0 * Math.abs(y);\r\n\r\n let g2;\r\n let h2;\r\n\r\n if (y < 0.0 || m * nError < n * mError) {\r\n const squareRootOfN = Math.sqrt(n);\r\n g2 = squareRootOfN / 2.0;\r\n h2 = squareRootOfN === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfN;\r\n } else {\r\n const squareRootOfM = Math.sqrt(m);\r\n g2 = squareRootOfM === 0.0 ? 0.0 : (a3 * h1 - a1) / squareRootOfM;\r\n h2 = squareRootOfM / 2.0;\r\n }\r\n\r\n let G;\r\n let g;\r\n if (g1 === 0.0 && g2 === 0.0) {\r\n G = 0.0;\r\n g = 0.0;\r\n } else if (CesiumMath.sign(g1) === CesiumMath.sign(g2)) {\r\n G = g1 + g2;\r\n g = y / G;\r\n } else {\r\n g = g1 - g2;\r\n G = y / g;\r\n }\r\n\r\n let H;\r\n let h;\r\n if (h1 === 0.0 && h2 === 0.0) {\r\n H = 0.0;\r\n h = 0.0;\r\n } else if (CesiumMath.sign(h1) === CesiumMath.sign(h2)) {\r\n H = h1 + h2;\r\n h = a0 / H;\r\n } else {\r\n h = h1 - h2;\r\n H = a0 / h;\r\n }\r\n\r\n // Now solve the two quadratic factors: (y^2 + G y + H)(y^2 + g y + h);\r\n const roots1 = QuadraticRealPolynomial.computeRealRoots(1.0, G, H);\r\n const roots2 = QuadraticRealPolynomial.computeRealRoots(1.0, g, h);\r\n\r\n if (roots1.length !== 0) {\r\n if (roots2.length !== 0) {\r\n if (roots1[1] <= roots2[0]) {\r\n return [roots1[0], roots1[1], roots2[0], roots2[1]];\r\n } else if (roots2[1] <= roots1[0]) {\r\n return [roots2[0], roots2[1], roots1[0], roots1[1]];\r\n } else if (roots1[0] >= roots2[0] && roots1[1] <= roots2[1]) {\r\n return [roots2[0], roots1[0], roots1[1], roots2[1]];\r\n } else if (roots2[0] >= roots1[0] && roots2[1] <= roots1[1]) {\r\n return [roots1[0], roots2[0], roots2[1], roots1[1]];\r\n } else if (roots1[0] > roots2[0] && roots1[0] < roots2[1]) {\r\n return [roots2[0], roots1[0], roots2[1], roots1[1]];\r\n }\r\n return [roots1[0], roots2[0], roots1[1], roots2[1]];\r\n }\r\n return roots1;\r\n }\r\n if (roots2.length !== 0) {\r\n return roots2;\r\n }\r\n }\r\n return [];\r\n}\r\n\r\n/**\r\n * Provides the real valued roots of the quartic polynomial with the provided coefficients.\r\n *\r\n * @param {Number} a The coefficient of the 4th order monomial.\r\n * @param {Number} b The coefficient of the 3rd order monomial.\r\n * @param {Number} c The coefficient of the 2nd order monomial.\r\n * @param {Number} d The coefficient of the 1st order monomial.\r\n * @param {Number} e The coefficient of the 0th order monomial.\r\n * @returns {Number[]} The real valued roots.\r\n */\r\nQuarticRealPolynomial.computeRealRoots = function (a, b, c, d, e) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof a !== \"number\") {\r\n throw new DeveloperError(\"a is a required number.\");\r\n }\r\n if (typeof b !== \"number\") {\r\n throw new DeveloperError(\"b is a required number.\");\r\n }\r\n if (typeof c !== \"number\") {\r\n throw new DeveloperError(\"c is a required number.\");\r\n }\r\n if (typeof d !== \"number\") {\r\n throw new DeveloperError(\"d is a required number.\");\r\n }\r\n if (typeof e !== \"number\") {\r\n throw new DeveloperError(\"e is a required number.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (Math.abs(a) < CesiumMath.EPSILON15) {\r\n return CubicRealPolynomial.computeRealRoots(b, c, d, e);\r\n }\r\n const a3 = b / a;\r\n const a2 = c / a;\r\n const a1 = d / a;\r\n const a0 = e / a;\r\n\r\n let k = a3 < 0.0 ? 1 : 0;\r\n k += a2 < 0.0 ? k + 1 : k;\r\n k += a1 < 0.0 ? k + 1 : k;\r\n k += a0 < 0.0 ? k + 1 : k;\r\n\r\n switch (k) {\r\n case 0:\r\n return original(a3, a2, a1, a0);\r\n case 1:\r\n return neumark(a3, a2, a1, a0);\r\n case 2:\r\n return neumark(a3, a2, a1, a0);\r\n case 3:\r\n return original(a3, a2, a1, a0);\r\n case 4:\r\n return original(a3, a2, a1, a0);\r\n case 5:\r\n return neumark(a3, a2, a1, a0);\r\n case 6:\r\n return original(a3, a2, a1, a0);\r\n case 7:\r\n return original(a3, a2, a1, a0);\r\n case 8:\r\n return neumark(a3, a2, a1, a0);\r\n case 9:\r\n return original(a3, a2, a1, a0);\r\n case 10:\r\n return original(a3, a2, a1, a0);\r\n case 11:\r\n return neumark(a3, a2, a1, a0);\r\n case 12:\r\n return original(a3, a2, a1, a0);\r\n case 13:\r\n return original(a3, a2, a1, a0);\r\n case 14:\r\n return original(a3, a2, a1, a0);\r\n case 15:\r\n return original(a3, a2, a1, a0);\r\n default:\r\n return undefined;\r\n }\r\n};\r\nexport default QuarticRealPolynomial;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\n\r\n/**\r\n * Represents a ray that extends infinitely from the provided origin in the provided direction.\r\n * @alias Ray\r\n * @constructor\r\n *\r\n * @param {Cartesian3} [origin=Cartesian3.ZERO] The origin of the ray.\r\n * @param {Cartesian3} [direction=Cartesian3.ZERO] The direction of the ray.\r\n */\r\nfunction Ray(origin, direction) {\r\n direction = Cartesian3.clone(defaultValue(direction, Cartesian3.ZERO));\r\n if (!Cartesian3.equals(direction, Cartesian3.ZERO)) {\r\n Cartesian3.normalize(direction, direction);\r\n }\r\n\r\n /**\r\n * The origin of the ray.\r\n * @type {Cartesian3}\r\n * @default {@link Cartesian3.ZERO}\r\n */\r\n this.origin = Cartesian3.clone(defaultValue(origin, Cartesian3.ZERO));\r\n\r\n /**\r\n * The direction of the ray.\r\n * @type {Cartesian3}\r\n */\r\n this.direction = direction;\r\n}\r\n\r\n/**\r\n * Duplicates a Ray instance.\r\n *\r\n * @param {Ray} ray The ray to duplicate.\r\n * @param {Ray} [result] The object onto which to store the result.\r\n * @returns {Ray} The modified result parameter or a new Ray instance if one was not provided. (Returns undefined if ray is undefined)\r\n */\r\nRay.clone = function (ray, result) {\r\n if (!defined(ray)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new Ray(ray.origin, ray.direction);\r\n }\r\n result.origin = Cartesian3.clone(ray.origin);\r\n result.direction = Cartesian3.clone(ray.direction);\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the point along the ray given by r(t) = o + t*d,\r\n * where o is the origin of the ray and d is the direction.\r\n *\r\n * @param {Ray} ray The ray.\r\n * @param {Number} t A scalar value.\r\n * @param {Cartesian3} [result] The object in which the result will be stored.\r\n * @returns {Cartesian3} The modified result parameter, or a new instance if none was provided.\r\n *\r\n * @example\r\n * //Get the first intersection point of a ray and an ellipsoid.\r\n * const intersection = Cesium.IntersectionTests.rayEllipsoid(ray, ellipsoid);\r\n * const point = Cesium.Ray.getPoint(ray, intersection.start);\r\n */\r\nRay.getPoint = function (ray, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"ray\", ray);\r\n Check.typeOf.number(\"t\", t);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n result = Cartesian3.multiplyByScalar(ray.direction, t, result);\r\n return Cartesian3.add(ray.origin, result, result);\r\n};\r\nexport default Ray;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Interval from \"./Interval.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport QuadraticRealPolynomial from \"./QuadraticRealPolynomial.js\";\r\nimport QuarticRealPolynomial from \"./QuarticRealPolynomial.js\";\r\nimport Ray from \"./Ray.js\";\r\n\r\n/**\r\n * Functions for computing the intersection between geometries such as rays, planes, triangles, and ellipsoids.\r\n *\r\n * @namespace IntersectionTests\r\n */\r\nconst IntersectionTests = {};\r\n\r\n/**\r\n * Computes the intersection of a ray and a plane.\r\n *\r\n * @param {Ray} ray The ray.\r\n * @param {Plane} plane The plane.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\r\n */\r\nIntersectionTests.rayPlane = function (ray, plane, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(ray)) {\r\n throw new DeveloperError(\"ray is required.\");\r\n }\r\n if (!defined(plane)) {\r\n throw new DeveloperError(\"plane is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n const origin = ray.origin;\r\n const direction = ray.direction;\r\n const normal = plane.normal;\r\n const denominator = Cartesian3.dot(normal, direction);\r\n\r\n if (Math.abs(denominator) < CesiumMath.EPSILON15) {\r\n // Ray is parallel to plane. The ray may be in the polygon's plane.\r\n return undefined;\r\n }\r\n\r\n const t = (-plane.distance - Cartesian3.dot(normal, origin)) / denominator;\r\n\r\n if (t < 0) {\r\n return undefined;\r\n }\r\n\r\n result = Cartesian3.multiplyByScalar(direction, t, result);\r\n return Cartesian3.add(origin, result, result);\r\n};\r\n\r\nconst scratchEdge0 = new Cartesian3();\r\nconst scratchEdge1 = new Cartesian3();\r\nconst scratchPVec = new Cartesian3();\r\nconst scratchTVec = new Cartesian3();\r\nconst scratchQVec = new Cartesian3();\r\n\r\n/**\r\n * Computes the intersection of a ray and a triangle as a parametric distance along the input ray. The result is negative when the triangle is behind the ray.\r\n *\r\n * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf|\r\n * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.\r\n *\r\n * @memberof IntersectionTests\r\n *\r\n * @param {Ray} ray The ray.\r\n * @param {Cartesian3} p0 The first vertex of the triangle.\r\n * @param {Cartesian3} p1 The second vertex of the triangle.\r\n * @param {Cartesian3} p2 The third vertex of the triangle.\r\n * @param {Boolean} [cullBackFaces=false] If true, will only compute an intersection with the front face of the triangle\r\n * and return undefined for intersections with the back face.\r\n * @returns {Number} The intersection as a parametric distance along the ray, or undefined if there is no intersection.\r\n */\r\nIntersectionTests.rayTriangleParametric = function (\r\n ray,\r\n p0,\r\n p1,\r\n p2,\r\n cullBackFaces\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(ray)) {\r\n throw new DeveloperError(\"ray is required.\");\r\n }\r\n if (!defined(p0)) {\r\n throw new DeveloperError(\"p0 is required.\");\r\n }\r\n if (!defined(p1)) {\r\n throw new DeveloperError(\"p1 is required.\");\r\n }\r\n if (!defined(p2)) {\r\n throw new DeveloperError(\"p2 is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n cullBackFaces = defaultValue(cullBackFaces, false);\r\n\r\n const origin = ray.origin;\r\n const direction = ray.direction;\r\n\r\n const edge0 = Cartesian3.subtract(p1, p0, scratchEdge0);\r\n const edge1 = Cartesian3.subtract(p2, p0, scratchEdge1);\r\n\r\n const p = Cartesian3.cross(direction, edge1, scratchPVec);\r\n const det = Cartesian3.dot(edge0, p);\r\n\r\n let tvec;\r\n let q;\r\n\r\n let u;\r\n let v;\r\n let t;\r\n\r\n if (cullBackFaces) {\r\n if (det < CesiumMath.EPSILON6) {\r\n return undefined;\r\n }\r\n\r\n tvec = Cartesian3.subtract(origin, p0, scratchTVec);\r\n u = Cartesian3.dot(tvec, p);\r\n if (u < 0.0 || u > det) {\r\n return undefined;\r\n }\r\n\r\n q = Cartesian3.cross(tvec, edge0, scratchQVec);\r\n\r\n v = Cartesian3.dot(direction, q);\r\n if (v < 0.0 || u + v > det) {\r\n return undefined;\r\n }\r\n\r\n t = Cartesian3.dot(edge1, q) / det;\r\n } else {\r\n if (Math.abs(det) < CesiumMath.EPSILON6) {\r\n return undefined;\r\n }\r\n const invDet = 1.0 / det;\r\n\r\n tvec = Cartesian3.subtract(origin, p0, scratchTVec);\r\n u = Cartesian3.dot(tvec, p) * invDet;\r\n if (u < 0.0 || u > 1.0) {\r\n return undefined;\r\n }\r\n\r\n q = Cartesian3.cross(tvec, edge0, scratchQVec);\r\n\r\n v = Cartesian3.dot(direction, q) * invDet;\r\n if (v < 0.0 || u + v > 1.0) {\r\n return undefined;\r\n }\r\n\r\n t = Cartesian3.dot(edge1, q) * invDet;\r\n }\r\n\r\n return t;\r\n};\r\n\r\n/**\r\n * Computes the intersection of a ray and a triangle as a Cartesian3 coordinate.\r\n *\r\n * Implements {@link https://cadxfem.org/inf/Fast%20MinimumStorage%20RayTriangle%20Intersection.pdf|\r\n * Fast Minimum Storage Ray/Triangle Intersection} by Tomas Moller and Ben Trumbore.\r\n *\r\n * @memberof IntersectionTests\r\n *\r\n * @param {Ray} ray The ray.\r\n * @param {Cartesian3} p0 The first vertex of the triangle.\r\n * @param {Cartesian3} p1 The second vertex of the triangle.\r\n * @param {Cartesian3} p2 The third vertex of the triangle.\r\n * @param {Boolean} [cullBackFaces=false] If true, will only compute an intersection with the front face of the triangle\r\n * and return undefined for intersections with the back face.\r\n * @param {Cartesian3} [result] The Cartesian3 onto which to store the result.\r\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\r\n */\r\nIntersectionTests.rayTriangle = function (\r\n ray,\r\n p0,\r\n p1,\r\n p2,\r\n cullBackFaces,\r\n result\r\n) {\r\n const t = IntersectionTests.rayTriangleParametric(\r\n ray,\r\n p0,\r\n p1,\r\n p2,\r\n cullBackFaces\r\n );\r\n if (!defined(t) || t < 0.0) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n Cartesian3.multiplyByScalar(ray.direction, t, result);\r\n return Cartesian3.add(ray.origin, result, result);\r\n};\r\n\r\nconst scratchLineSegmentTriangleRay = new Ray();\r\n\r\n/**\r\n * Computes the intersection of a line segment and a triangle.\r\n * @memberof IntersectionTests\r\n *\r\n * @param {Cartesian3} v0 The an end point of the line segment.\r\n * @param {Cartesian3} v1 The other end point of the line segment.\r\n * @param {Cartesian3} p0 The first vertex of the triangle.\r\n * @param {Cartesian3} p1 The second vertex of the triangle.\r\n * @param {Cartesian3} p2 The third vertex of the triangle.\r\n * @param {Boolean} [cullBackFaces=false] If true, will only compute an intersection with the front face of the triangle\r\n * and return undefined for intersections with the back face.\r\n * @param {Cartesian3} [result] The Cartesian3 onto which to store the result.\r\n * @returns {Cartesian3} The intersection point or undefined if there is no intersections.\r\n */\r\nIntersectionTests.lineSegmentTriangle = function (\r\n v0,\r\n v1,\r\n p0,\r\n p1,\r\n p2,\r\n cullBackFaces,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(v0)) {\r\n throw new DeveloperError(\"v0 is required.\");\r\n }\r\n if (!defined(v1)) {\r\n throw new DeveloperError(\"v1 is required.\");\r\n }\r\n if (!defined(p0)) {\r\n throw new DeveloperError(\"p0 is required.\");\r\n }\r\n if (!defined(p1)) {\r\n throw new DeveloperError(\"p1 is required.\");\r\n }\r\n if (!defined(p2)) {\r\n throw new DeveloperError(\"p2 is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const ray = scratchLineSegmentTriangleRay;\r\n Cartesian3.clone(v0, ray.origin);\r\n Cartesian3.subtract(v1, v0, ray.direction);\r\n Cartesian3.normalize(ray.direction, ray.direction);\r\n\r\n const t = IntersectionTests.rayTriangleParametric(\r\n ray,\r\n p0,\r\n p1,\r\n p2,\r\n cullBackFaces\r\n );\r\n if (!defined(t) || t < 0.0 || t > Cartesian3.distance(v0, v1)) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n Cartesian3.multiplyByScalar(ray.direction, t, result);\r\n return Cartesian3.add(ray.origin, result, result);\r\n};\r\n\r\nfunction solveQuadratic(a, b, c, result) {\r\n const det = b * b - 4.0 * a * c;\r\n if (det < 0.0) {\r\n return undefined;\r\n } else if (det > 0.0) {\r\n const denom = 1.0 / (2.0 * a);\r\n const disc = Math.sqrt(det);\r\n const root0 = (-b + disc) * denom;\r\n const root1 = (-b - disc) * denom;\r\n\r\n if (root0 < root1) {\r\n result.root0 = root0;\r\n result.root1 = root1;\r\n } else {\r\n result.root0 = root1;\r\n result.root1 = root0;\r\n }\r\n\r\n return result;\r\n }\r\n\r\n const root = -b / (2.0 * a);\r\n if (root === 0.0) {\r\n return undefined;\r\n }\r\n\r\n result.root0 = result.root1 = root;\r\n return result;\r\n}\r\n\r\nconst raySphereRoots = {\r\n root0: 0.0,\r\n root1: 0.0,\r\n};\r\n\r\nfunction raySphere(ray, sphere, result) {\r\n if (!defined(result)) {\r\n result = new Interval();\r\n }\r\n\r\n const origin = ray.origin;\r\n const direction = ray.direction;\r\n\r\n const center = sphere.center;\r\n const radiusSquared = sphere.radius * sphere.radius;\r\n\r\n const diff = Cartesian3.subtract(origin, center, scratchPVec);\r\n\r\n const a = Cartesian3.dot(direction, direction);\r\n const b = 2.0 * Cartesian3.dot(direction, diff);\r\n const c = Cartesian3.magnitudeSquared(diff) - radiusSquared;\r\n\r\n const roots = solveQuadratic(a, b, c, raySphereRoots);\r\n if (!defined(roots)) {\r\n return undefined;\r\n }\r\n\r\n result.start = roots.root0;\r\n result.stop = roots.root1;\r\n return result;\r\n}\r\n\r\n/**\r\n * Computes the intersection points of a ray with a sphere.\r\n * @memberof IntersectionTests\r\n *\r\n * @param {Ray} ray The ray.\r\n * @param {BoundingSphere} sphere The sphere.\r\n * @param {Interval} [result] The result onto which to store the result.\r\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\r\n */\r\nIntersectionTests.raySphere = function (ray, sphere, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(ray)) {\r\n throw new DeveloperError(\"ray is required.\");\r\n }\r\n if (!defined(sphere)) {\r\n throw new DeveloperError(\"sphere is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n result = raySphere(ray, sphere, result);\r\n if (!defined(result) || result.stop < 0.0) {\r\n return undefined;\r\n }\r\n\r\n result.start = Math.max(result.start, 0.0);\r\n return result;\r\n};\r\n\r\nconst scratchLineSegmentRay = new Ray();\r\n\r\n/**\r\n * Computes the intersection points of a line segment with a sphere.\r\n * @memberof IntersectionTests\r\n *\r\n * @param {Cartesian3} p0 An end point of the line segment.\r\n * @param {Cartesian3} p1 The other end point of the line segment.\r\n * @param {BoundingSphere} sphere The sphere.\r\n * @param {Interval} [result] The result onto which to store the result.\r\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\r\n */\r\nIntersectionTests.lineSegmentSphere = function (p0, p1, sphere, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(p0)) {\r\n throw new DeveloperError(\"p0 is required.\");\r\n }\r\n if (!defined(p1)) {\r\n throw new DeveloperError(\"p1 is required.\");\r\n }\r\n if (!defined(sphere)) {\r\n throw new DeveloperError(\"sphere is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const ray = scratchLineSegmentRay;\r\n Cartesian3.clone(p0, ray.origin);\r\n const direction = Cartesian3.subtract(p1, p0, ray.direction);\r\n\r\n const maxT = Cartesian3.magnitude(direction);\r\n Cartesian3.normalize(direction, direction);\r\n\r\n result = raySphere(ray, sphere, result);\r\n if (!defined(result) || result.stop < 0.0 || result.start > maxT) {\r\n return undefined;\r\n }\r\n\r\n result.start = Math.max(result.start, 0.0);\r\n result.stop = Math.min(result.stop, maxT);\r\n return result;\r\n};\r\n\r\nconst scratchQ = new Cartesian3();\r\nconst scratchW = new Cartesian3();\r\n\r\n/**\r\n * Computes the intersection points of a ray with an ellipsoid.\r\n *\r\n * @param {Ray} ray The ray.\r\n * @param {Ellipsoid} ellipsoid The ellipsoid.\r\n * @returns {Interval} The interval containing scalar points along the ray or undefined if there are no intersections.\r\n */\r\nIntersectionTests.rayEllipsoid = function (ray, ellipsoid) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(ray)) {\r\n throw new DeveloperError(\"ray is required.\");\r\n }\r\n if (!defined(ellipsoid)) {\r\n throw new DeveloperError(\"ellipsoid is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const inverseRadii = ellipsoid.oneOverRadii;\r\n const q = Cartesian3.multiplyComponents(inverseRadii, ray.origin, scratchQ);\r\n const w = Cartesian3.multiplyComponents(\r\n inverseRadii,\r\n ray.direction,\r\n scratchW\r\n );\r\n\r\n const q2 = Cartesian3.magnitudeSquared(q);\r\n const qw = Cartesian3.dot(q, w);\r\n\r\n let difference, w2, product, discriminant, temp;\r\n\r\n if (q2 > 1.0) {\r\n // Outside ellipsoid.\r\n if (qw >= 0.0) {\r\n // Looking outward or tangent (0 intersections).\r\n return undefined;\r\n }\r\n\r\n // qw < 0.0.\r\n const qw2 = qw * qw;\r\n difference = q2 - 1.0; // Positively valued.\r\n w2 = Cartesian3.magnitudeSquared(w);\r\n product = w2 * difference;\r\n\r\n if (qw2 < product) {\r\n // Imaginary roots (0 intersections).\r\n return undefined;\r\n } else if (qw2 > product) {\r\n // Distinct roots (2 intersections).\r\n discriminant = qw * qw - product;\r\n temp = -qw + Math.sqrt(discriminant); // Avoid cancellation.\r\n const root0 = temp / w2;\r\n const root1 = difference / temp;\r\n if (root0 < root1) {\r\n return new Interval(root0, root1);\r\n }\r\n\r\n return {\r\n start: root1,\r\n stop: root0,\r\n };\r\n }\r\n // qw2 == product. Repeated roots (2 intersections).\r\n const root = Math.sqrt(difference / w2);\r\n return new Interval(root, root);\r\n } else if (q2 < 1.0) {\r\n // Inside ellipsoid (2 intersections).\r\n difference = q2 - 1.0; // Negatively valued.\r\n w2 = Cartesian3.magnitudeSquared(w);\r\n product = w2 * difference; // Negatively valued.\r\n\r\n discriminant = qw * qw - product;\r\n temp = -qw + Math.sqrt(discriminant); // Positively valued.\r\n return new Interval(0.0, temp / w2);\r\n }\r\n // q2 == 1.0. On ellipsoid.\r\n if (qw < 0.0) {\r\n // Looking inward.\r\n w2 = Cartesian3.magnitudeSquared(w);\r\n return new Interval(0.0, -qw / w2);\r\n }\r\n\r\n // qw >= 0.0. Looking outward or tangent.\r\n return undefined;\r\n};\r\n\r\nfunction addWithCancellationCheck(left, right, tolerance) {\r\n const difference = left + right;\r\n if (\r\n CesiumMath.sign(left) !== CesiumMath.sign(right) &&\r\n Math.abs(difference / Math.max(Math.abs(left), Math.abs(right))) < tolerance\r\n ) {\r\n return 0.0;\r\n }\r\n\r\n return difference;\r\n}\r\n\r\nfunction quadraticVectorExpression(A, b, c, x, w) {\r\n const xSquared = x * x;\r\n const wSquared = w * w;\r\n\r\n const l2 = (A[Matrix3.COLUMN1ROW1] - A[Matrix3.COLUMN2ROW2]) * wSquared;\r\n const l1 =\r\n w *\r\n (x *\r\n addWithCancellationCheck(\r\n A[Matrix3.COLUMN1ROW0],\r\n A[Matrix3.COLUMN0ROW1],\r\n CesiumMath.EPSILON15\r\n ) +\r\n b.y);\r\n const l0 =\r\n A[Matrix3.COLUMN0ROW0] * xSquared +\r\n A[Matrix3.COLUMN2ROW2] * wSquared +\r\n x * b.x +\r\n c;\r\n\r\n const r1 =\r\n wSquared *\r\n addWithCancellationCheck(\r\n A[Matrix3.COLUMN2ROW1],\r\n A[Matrix3.COLUMN1ROW2],\r\n CesiumMath.EPSILON15\r\n );\r\n const r0 =\r\n w *\r\n (x *\r\n addWithCancellationCheck(A[Matrix3.COLUMN2ROW0], A[Matrix3.COLUMN0ROW2]) +\r\n b.z);\r\n\r\n let cosines;\r\n const solutions = [];\r\n if (r0 === 0.0 && r1 === 0.0) {\r\n cosines = QuadraticRealPolynomial.computeRealRoots(l2, l1, l0);\r\n if (cosines.length === 0) {\r\n return solutions;\r\n }\r\n\r\n const cosine0 = cosines[0];\r\n const sine0 = Math.sqrt(Math.max(1.0 - cosine0 * cosine0, 0.0));\r\n solutions.push(new Cartesian3(x, w * cosine0, w * -sine0));\r\n solutions.push(new Cartesian3(x, w * cosine0, w * sine0));\r\n\r\n if (cosines.length === 2) {\r\n const cosine1 = cosines[1];\r\n const sine1 = Math.sqrt(Math.max(1.0 - cosine1 * cosine1, 0.0));\r\n solutions.push(new Cartesian3(x, w * cosine1, w * -sine1));\r\n solutions.push(new Cartesian3(x, w * cosine1, w * sine1));\r\n }\r\n\r\n return solutions;\r\n }\r\n\r\n const r0Squared = r0 * r0;\r\n const r1Squared = r1 * r1;\r\n const l2Squared = l2 * l2;\r\n const r0r1 = r0 * r1;\r\n\r\n const c4 = l2Squared + r1Squared;\r\n const c3 = 2.0 * (l1 * l2 + r0r1);\r\n const c2 = 2.0 * l0 * l2 + l1 * l1 - r1Squared + r0Squared;\r\n const c1 = 2.0 * (l0 * l1 - r0r1);\r\n const c0 = l0 * l0 - r0Squared;\r\n\r\n if (c4 === 0.0 && c3 === 0.0 && c2 === 0.0 && c1 === 0.0) {\r\n return solutions;\r\n }\r\n\r\n cosines = QuarticRealPolynomial.computeRealRoots(c4, c3, c2, c1, c0);\r\n const length = cosines.length;\r\n if (length === 0) {\r\n return solutions;\r\n }\r\n\r\n for (let i = 0; i < length; ++i) {\r\n const cosine = cosines[i];\r\n const cosineSquared = cosine * cosine;\r\n const sineSquared = Math.max(1.0 - cosineSquared, 0.0);\r\n const sine = Math.sqrt(sineSquared);\r\n\r\n //const left = l2 * cosineSquared + l1 * cosine + l0;\r\n let left;\r\n if (CesiumMath.sign(l2) === CesiumMath.sign(l0)) {\r\n left = addWithCancellationCheck(\r\n l2 * cosineSquared + l0,\r\n l1 * cosine,\r\n CesiumMath.EPSILON12\r\n );\r\n } else if (CesiumMath.sign(l0) === CesiumMath.sign(l1 * cosine)) {\r\n left = addWithCancellationCheck(\r\n l2 * cosineSquared,\r\n l1 * cosine + l0,\r\n CesiumMath.EPSILON12\r\n );\r\n } else {\r\n left = addWithCancellationCheck(\r\n l2 * cosineSquared + l1 * cosine,\r\n l0,\r\n CesiumMath.EPSILON12\r\n );\r\n }\r\n\r\n const right = addWithCancellationCheck(\r\n r1 * cosine,\r\n r0,\r\n CesiumMath.EPSILON15\r\n );\r\n const product = left * right;\r\n\r\n if (product < 0.0) {\r\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\r\n } else if (product > 0.0) {\r\n solutions.push(new Cartesian3(x, w * cosine, w * -sine));\r\n } else if (sine !== 0.0) {\r\n solutions.push(new Cartesian3(x, w * cosine, w * -sine));\r\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\r\n ++i;\r\n } else {\r\n solutions.push(new Cartesian3(x, w * cosine, w * sine));\r\n }\r\n }\r\n\r\n return solutions;\r\n}\r\n\r\nconst firstAxisScratch = new Cartesian3();\r\nconst secondAxisScratch = new Cartesian3();\r\nconst thirdAxisScratch = new Cartesian3();\r\nconst referenceScratch = new Cartesian3();\r\nconst bCart = new Cartesian3();\r\nconst bScratch = new Matrix3();\r\nconst btScratch = new Matrix3();\r\nconst diScratch = new Matrix3();\r\nconst dScratch = new Matrix3();\r\nconst cScratch = new Matrix3();\r\nconst tempMatrix = new Matrix3();\r\nconst aScratch = new Matrix3();\r\nconst sScratch = new Cartesian3();\r\nconst closestScratch = new Cartesian3();\r\nconst surfPointScratch = new Cartographic();\r\n\r\n/**\r\n * Provides the point along the ray which is nearest to the ellipsoid.\r\n *\r\n * @param {Ray} ray The ray.\r\n * @param {Ellipsoid} ellipsoid The ellipsoid.\r\n * @returns {Cartesian3} The nearest planetodetic point on the ray.\r\n */\r\nIntersectionTests.grazingAltitudeLocation = function (ray, ellipsoid) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(ray)) {\r\n throw new DeveloperError(\"ray is required.\");\r\n }\r\n if (!defined(ellipsoid)) {\r\n throw new DeveloperError(\"ellipsoid is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const position = ray.origin;\r\n const direction = ray.direction;\r\n\r\n if (!Cartesian3.equals(position, Cartesian3.ZERO)) {\r\n const normal = ellipsoid.geodeticSurfaceNormal(position, firstAxisScratch);\r\n if (Cartesian3.dot(direction, normal) >= 0.0) {\r\n // The location provided is the closest point in altitude\r\n return position;\r\n }\r\n }\r\n\r\n const intersects = defined(this.rayEllipsoid(ray, ellipsoid));\r\n\r\n // Compute the scaled direction vector.\r\n const f = ellipsoid.transformPositionToScaledSpace(\r\n direction,\r\n firstAxisScratch\r\n );\r\n\r\n // Constructs a basis from the unit scaled direction vector. Construct its rotation and transpose.\r\n const firstAxis = Cartesian3.normalize(f, f);\r\n const reference = Cartesian3.mostOrthogonalAxis(f, referenceScratch);\r\n const secondAxis = Cartesian3.normalize(\r\n Cartesian3.cross(reference, firstAxis, secondAxisScratch),\r\n secondAxisScratch\r\n );\r\n const thirdAxis = Cartesian3.normalize(\r\n Cartesian3.cross(firstAxis, secondAxis, thirdAxisScratch),\r\n thirdAxisScratch\r\n );\r\n const B = bScratch;\r\n B[0] = firstAxis.x;\r\n B[1] = firstAxis.y;\r\n B[2] = firstAxis.z;\r\n B[3] = secondAxis.x;\r\n B[4] = secondAxis.y;\r\n B[5] = secondAxis.z;\r\n B[6] = thirdAxis.x;\r\n B[7] = thirdAxis.y;\r\n B[8] = thirdAxis.z;\r\n\r\n const B_T = Matrix3.transpose(B, btScratch);\r\n\r\n // Get the scaling matrix and its inverse.\r\n const D_I = Matrix3.fromScale(ellipsoid.radii, diScratch);\r\n const D = Matrix3.fromScale(ellipsoid.oneOverRadii, dScratch);\r\n\r\n const C = cScratch;\r\n C[0] = 0.0;\r\n C[1] = -direction.z;\r\n C[2] = direction.y;\r\n C[3] = direction.z;\r\n C[4] = 0.0;\r\n C[5] = -direction.x;\r\n C[6] = -direction.y;\r\n C[7] = direction.x;\r\n C[8] = 0.0;\r\n\r\n const temp = Matrix3.multiply(\r\n Matrix3.multiply(B_T, D, tempMatrix),\r\n C,\r\n tempMatrix\r\n );\r\n const A = Matrix3.multiply(\r\n Matrix3.multiply(temp, D_I, aScratch),\r\n B,\r\n aScratch\r\n );\r\n const b = Matrix3.multiplyByVector(temp, position, bCart);\r\n\r\n // Solve for the solutions to the expression in standard form:\r\n const solutions = quadraticVectorExpression(\r\n A,\r\n Cartesian3.negate(b, firstAxisScratch),\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n );\r\n\r\n let s;\r\n let altitude;\r\n const length = solutions.length;\r\n if (length > 0) {\r\n let closest = Cartesian3.clone(Cartesian3.ZERO, closestScratch);\r\n let maximumValue = Number.NEGATIVE_INFINITY;\r\n\r\n for (let i = 0; i < length; ++i) {\r\n s = Matrix3.multiplyByVector(\r\n D_I,\r\n Matrix3.multiplyByVector(B, solutions[i], sScratch),\r\n sScratch\r\n );\r\n const v = Cartesian3.normalize(\r\n Cartesian3.subtract(s, position, referenceScratch),\r\n referenceScratch\r\n );\r\n const dotProduct = Cartesian3.dot(v, direction);\r\n\r\n if (dotProduct > maximumValue) {\r\n maximumValue = dotProduct;\r\n closest = Cartesian3.clone(s, closest);\r\n }\r\n }\r\n\r\n const surfacePoint = ellipsoid.cartesianToCartographic(\r\n closest,\r\n surfPointScratch\r\n );\r\n maximumValue = CesiumMath.clamp(maximumValue, 0.0, 1.0);\r\n altitude =\r\n Cartesian3.magnitude(\r\n Cartesian3.subtract(closest, position, referenceScratch)\r\n ) * Math.sqrt(1.0 - maximumValue * maximumValue);\r\n altitude = intersects ? -altitude : altitude;\r\n surfacePoint.height = altitude;\r\n return ellipsoid.cartographicToCartesian(surfacePoint, new Cartesian3());\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nconst lineSegmentPlaneDifference = new Cartesian3();\r\n\r\n/**\r\n * Computes the intersection of a line segment and a plane.\r\n *\r\n * @param {Cartesian3} endPoint0 An end point of the line segment.\r\n * @param {Cartesian3} endPoint1 The other end point of the line segment.\r\n * @param {Plane} plane The plane.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The intersection point or undefined if there is no intersection.\r\n *\r\n * @example\r\n * const origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\r\n * const normal = ellipsoid.geodeticSurfaceNormal(origin);\r\n * const plane = Cesium.Plane.fromPointNormal(origin, normal);\r\n *\r\n * const p0 = new Cesium.Cartesian3(...);\r\n * const p1 = new Cesium.Cartesian3(...);\r\n *\r\n * // find the intersection of the line segment from p0 to p1 and the tangent plane at origin.\r\n * const intersection = Cesium.IntersectionTests.lineSegmentPlane(p0, p1, plane);\r\n */\r\nIntersectionTests.lineSegmentPlane = function (\r\n endPoint0,\r\n endPoint1,\r\n plane,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(endPoint0)) {\r\n throw new DeveloperError(\"endPoint0 is required.\");\r\n }\r\n if (!defined(endPoint1)) {\r\n throw new DeveloperError(\"endPoint1 is required.\");\r\n }\r\n if (!defined(plane)) {\r\n throw new DeveloperError(\"plane is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n const difference = Cartesian3.subtract(\r\n endPoint1,\r\n endPoint0,\r\n lineSegmentPlaneDifference\r\n );\r\n const normal = plane.normal;\r\n const nDotDiff = Cartesian3.dot(normal, difference);\r\n\r\n // check if the segment and plane are parallel\r\n if (Math.abs(nDotDiff) < CesiumMath.EPSILON6) {\r\n return undefined;\r\n }\r\n\r\n const nDotP0 = Cartesian3.dot(normal, endPoint0);\r\n const t = -(plane.distance + nDotP0) / nDotDiff;\r\n\r\n // intersection only if t is in [0, 1]\r\n if (t < 0.0 || t > 1.0) {\r\n return undefined;\r\n }\r\n\r\n // intersection is endPoint0 + t * (endPoint1 - endPoint0)\r\n Cartesian3.multiplyByScalar(difference, t, result);\r\n Cartesian3.add(endPoint0, result, result);\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the intersection of a triangle and a plane\r\n *\r\n * @param {Cartesian3} p0 First point of the triangle\r\n * @param {Cartesian3} p1 Second point of the triangle\r\n * @param {Cartesian3} p2 Third point of the triangle\r\n * @param {Plane} plane Intersection plane\r\n * @returns {Object} An object with properties positions and indices, which are arrays that represent three triangles that do not cross the plane. (Undefined if no intersection exists)\r\n *\r\n * @example\r\n * const origin = Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883);\r\n * const normal = ellipsoid.geodeticSurfaceNormal(origin);\r\n * const plane = Cesium.Plane.fromPointNormal(origin, normal);\r\n *\r\n * const p0 = new Cesium.Cartesian3(...);\r\n * const p1 = new Cesium.Cartesian3(...);\r\n * const p2 = new Cesium.Cartesian3(...);\r\n *\r\n * // convert the triangle composed of points (p0, p1, p2) to three triangles that don't cross the plane\r\n * const triangles = Cesium.IntersectionTests.trianglePlaneIntersection(p0, p1, p2, plane);\r\n */\r\nIntersectionTests.trianglePlaneIntersection = function (p0, p1, p2, plane) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(p0) || !defined(p1) || !defined(p2) || !defined(plane)) {\r\n throw new DeveloperError(\"p0, p1, p2, and plane are required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const planeNormal = plane.normal;\r\n const planeD = plane.distance;\r\n const p0Behind = Cartesian3.dot(planeNormal, p0) + planeD < 0.0;\r\n const p1Behind = Cartesian3.dot(planeNormal, p1) + planeD < 0.0;\r\n const p2Behind = Cartesian3.dot(planeNormal, p2) + planeD < 0.0;\r\n // Given these dots products, the calls to lineSegmentPlaneIntersection\r\n // always have defined results.\r\n\r\n let numBehind = 0;\r\n numBehind += p0Behind ? 1 : 0;\r\n numBehind += p1Behind ? 1 : 0;\r\n numBehind += p2Behind ? 1 : 0;\r\n\r\n let u1, u2;\r\n if (numBehind === 1 || numBehind === 2) {\r\n u1 = new Cartesian3();\r\n u2 = new Cartesian3();\r\n }\r\n\r\n if (numBehind === 1) {\r\n if (p0Behind) {\r\n IntersectionTests.lineSegmentPlane(p0, p1, plane, u1);\r\n IntersectionTests.lineSegmentPlane(p0, p2, plane, u2);\r\n\r\n return {\r\n positions: [p0, p1, p2, u1, u2],\r\n indices: [\r\n // Behind\r\n 0,\r\n 3,\r\n 4,\r\n\r\n // In front\r\n 1,\r\n 2,\r\n 4,\r\n 1,\r\n 4,\r\n 3,\r\n ],\r\n };\r\n } else if (p1Behind) {\r\n IntersectionTests.lineSegmentPlane(p1, p2, plane, u1);\r\n IntersectionTests.lineSegmentPlane(p1, p0, plane, u2);\r\n\r\n return {\r\n positions: [p0, p1, p2, u1, u2],\r\n indices: [\r\n // Behind\r\n 1,\r\n 3,\r\n 4,\r\n\r\n // In front\r\n 2,\r\n 0,\r\n 4,\r\n 2,\r\n 4,\r\n 3,\r\n ],\r\n };\r\n } else if (p2Behind) {\r\n IntersectionTests.lineSegmentPlane(p2, p0, plane, u1);\r\n IntersectionTests.lineSegmentPlane(p2, p1, plane, u2);\r\n\r\n return {\r\n positions: [p0, p1, p2, u1, u2],\r\n indices: [\r\n // Behind\r\n 2,\r\n 3,\r\n 4,\r\n\r\n // In front\r\n 0,\r\n 1,\r\n 4,\r\n 0,\r\n 4,\r\n 3,\r\n ],\r\n };\r\n }\r\n } else if (numBehind === 2) {\r\n if (!p0Behind) {\r\n IntersectionTests.lineSegmentPlane(p1, p0, plane, u1);\r\n IntersectionTests.lineSegmentPlane(p2, p0, plane, u2);\r\n\r\n return {\r\n positions: [p0, p1, p2, u1, u2],\r\n indices: [\r\n // Behind\r\n 1,\r\n 2,\r\n 4,\r\n 1,\r\n 4,\r\n 3,\r\n\r\n // In front\r\n 0,\r\n 3,\r\n 4,\r\n ],\r\n };\r\n } else if (!p1Behind) {\r\n IntersectionTests.lineSegmentPlane(p2, p1, plane, u1);\r\n IntersectionTests.lineSegmentPlane(p0, p1, plane, u2);\r\n\r\n return {\r\n positions: [p0, p1, p2, u1, u2],\r\n indices: [\r\n // Behind\r\n 2,\r\n 0,\r\n 4,\r\n 2,\r\n 4,\r\n 3,\r\n\r\n // In front\r\n 1,\r\n 3,\r\n 4,\r\n ],\r\n };\r\n } else if (!p2Behind) {\r\n IntersectionTests.lineSegmentPlane(p0, p2, plane, u1);\r\n IntersectionTests.lineSegmentPlane(p1, p2, plane, u2);\r\n\r\n return {\r\n positions: [p0, p1, p2, u1, u2],\r\n indices: [\r\n // Behind\r\n 0,\r\n 1,\r\n 4,\r\n 0,\r\n 4,\r\n 3,\r\n\r\n // In front\r\n 2,\r\n 3,\r\n 4,\r\n ],\r\n };\r\n }\r\n }\r\n\r\n // if numBehind is 3, the triangle is completely behind the plane;\r\n // otherwise, it is completely in front (numBehind is 0).\r\n return undefined;\r\n};\r\nexport default IntersectionTests;\r\n"],"names":["DeveloperError","addWithCancellationCheck","CesiumMath","QuadraticRealPolynomial","CubicRealPolynomial","Cartesian3","defaultValue","defined","Check","Interval","Matrix3","QuarticRealPolynomial","Cartographic"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/Math-9be8b918.js b/debug/cesium/Workers/Math-9be8b918.js deleted file mode 100644 index f1575e8..0000000 --- a/debug/cesium/Workers/Math-9be8b918.js +++ /dev/null @@ -1,1356 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Check-d10e5f2e', './defaultValue-0ab18f7d'], (function (exports, Check, defaultValue) { 'use strict'; - - /* - https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace - so it's better encapsulated. Now you can have multiple random number generators - and they won't stomp all over eachother's state. - - If you want to use this as a substitute for Math.random(), use the random() - method like so: - - var m = new MersenneTwister(); - var randomNumber = m.random(); - - You can also call the other genrand_{foo}() methods on the instance. - - If you want to use a specific seed in order to get a repeatable random - sequence, pass an integer into the constructor: - - var m = new MersenneTwister(123); - - and that will always produce the same random sequence. - - Sean McCullough (banksean@gmail.com) - */ - - /* - A C-program for MT19937, with initialization improved 2002/1/26. - Coded by Takuji Nishimura and Makoto Matsumoto. - - Before using, initialize the state by using init_seed(seed) - or init_by_array(init_key, key_length). - - Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. The names of its contributors may not be used to endorse or promote - products derived from this software without specific prior written - permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - - Any feedback is very welcome. - http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html - email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space) - */ - - var MersenneTwister = function(seed) { - if (seed == undefined) { - seed = new Date().getTime(); - } - - /* Period parameters */ - this.N = 624; - this.M = 397; - this.MATRIX_A = 0x9908b0df; /* constant vector a */ - this.UPPER_MASK = 0x80000000; /* most significant w-r bits */ - this.LOWER_MASK = 0x7fffffff; /* least significant r bits */ - - this.mt = new Array(this.N); /* the array for the state vector */ - this.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */ - - if (seed.constructor == Array) { - this.init_by_array(seed, seed.length); - } - else { - this.init_seed(seed); - } - }; - - /* initializes mt[N] with a seed */ - /* origin name init_genrand */ - MersenneTwister.prototype.init_seed = function(s) { - this.mt[0] = s >>> 0; - for (this.mti=1; this.mti>> 30); - this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) - + this.mti; - /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */ - /* In the previous versions, MSBs of the seed affect */ - /* only MSBs of the array mt[]. */ - /* 2002/01/09 modified by Makoto Matsumoto */ - this.mt[this.mti] >>>= 0; - /* for >32 bit machines */ - } - }; - - /* initialize by an array with array-length */ - /* init_key is the array for initializing keys */ - /* key_length is its length */ - /* slight change for C++, 2004/2/26 */ - MersenneTwister.prototype.init_by_array = function(init_key, key_length) { - var i, j, k; - this.init_seed(19650218); - i=1; j=0; - k = (this.N>key_length ? this.N : key_length); - for (; k; k--) { - var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30); - this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) - + init_key[j] + j; /* non linear */ - this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */ - i++; j++; - if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; } - if (j>=key_length) j=0; - } - for (k=this.N-1; k; k--) { - var s = this.mt[i-1] ^ (this.mt[i-1] >>> 30); - this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - - i; /* non linear */ - this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */ - i++; - if (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; } - } - - this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */ - }; - - /* generates a random number on [0,0xffffffff]-interval */ - /* origin name genrand_int32 */ - MersenneTwister.prototype.random_int = function() { - var y; - var mag01 = new Array(0x0, this.MATRIX_A); - /* mag01[x] = x * MATRIX_A for x=0,1 */ - - if (this.mti >= this.N) { /* generate N words at one time */ - var kk; - - if (this.mti == this.N+1) /* if init_seed() has not been called, */ - this.init_seed(5489); /* a default initial seed is used */ - - for (kk=0;kk>> 1) ^ mag01[y & 0x1]; - } - for (;kk>> 1) ^ mag01[y & 0x1]; - } - y = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK); - this.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1]; - - this.mti = 0; - } - - y = this.mt[this.mti++]; - - /* Tempering */ - y ^= (y >>> 11); - y ^= (y << 7) & 0x9d2c5680; - y ^= (y << 15) & 0xefc60000; - y ^= (y >>> 18); - - return y >>> 0; - }; - - /* generates a random number on [0,0x7fffffff]-interval */ - /* origin name genrand_int31 */ - MersenneTwister.prototype.random_int31 = function() { - return (this.random_int()>>>1); - }; - - /* generates a random number on [0,1]-real-interval */ - /* origin name genrand_real1 */ - MersenneTwister.prototype.random_incl = function() { - return this.random_int()*(1.0/4294967295.0); - /* divided by 2^32-1 */ - }; - - /* generates a random number on [0,1)-real-interval */ - MersenneTwister.prototype.random = function() { - return this.random_int()*(1.0/4294967296.0); - /* divided by 2^32 */ - }; - - /* generates a random number on (0,1)-real-interval */ - /* origin name genrand_real3 */ - MersenneTwister.prototype.random_excl = function() { - return (this.random_int() + 0.5)*(1.0/4294967296.0); - /* divided by 2^32 */ - }; - - /* generates a random number on [0,1) with 53-bit resolution*/ - /* origin name genrand_res53 */ - MersenneTwister.prototype.random_long = function() { - var a=this.random_int()>>>5, b=this.random_int()>>>6; - return (a*67108864.0+b)*(1.0/9007199254740992.0); - }; - - /* These real versions are due to Isaku Wada, 2002/01/09 added */ - - var mersenneTwister = MersenneTwister; - - /** - * Math functions. - * - * @exports CesiumMath - * @alias Math - */ - const CesiumMath = {}; - - /** - * 0.1 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON1 = 0.1; - - /** - * 0.01 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON2 = 0.01; - - /** - * 0.001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON3 = 0.001; - - /** - * 0.0001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON4 = 0.0001; - - /** - * 0.00001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON5 = 0.00001; - - /** - * 0.000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON6 = 0.000001; - - /** - * 0.0000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON7 = 0.0000001; - - /** - * 0.00000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON8 = 0.00000001; - - /** - * 0.000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON9 = 0.000000001; - - /** - * 0.0000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON10 = 0.0000000001; - - /** - * 0.00000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON11 = 0.00000000001; - - /** - * 0.000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON12 = 0.000000000001; - - /** - * 0.0000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON13 = 0.0000000000001; - - /** - * 0.00000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON14 = 0.00000000000001; - - /** - * 0.000000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON15 = 0.000000000000001; - - /** - * 0.0000000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON16 = 0.0000000000000001; - - /** - * 0.00000000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON17 = 0.00000000000000001; - - /** - * 0.000000000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON18 = 0.000000000000000001; - - /** - * 0.0000000000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON19 = 0.0000000000000000001; - - /** - * 0.00000000000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON20 = 0.00000000000000000001; - - /** - * 0.000000000000000000001 - * @type {Number} - * @constant - */ - CesiumMath.EPSILON21 = 0.000000000000000000001; - - /** - * The gravitational parameter of the Earth in meters cubed - * per second squared as defined by the WGS84 model: 3.986004418e14 - * @type {Number} - * @constant - */ - CesiumMath.GRAVITATIONALPARAMETER = 3.986004418e14; - - /** - * Radius of the sun in meters: 6.955e8 - * @type {Number} - * @constant - */ - CesiumMath.SOLAR_RADIUS = 6.955e8; - - /** - * The mean radius of the moon, according to the "Report of the IAU/IAG Working Group on - * Cartographic Coordinates and Rotational Elements of the Planets and satellites: 2000", - * Celestial Mechanics 82: 83-110, 2002. - * @type {Number} - * @constant - */ - CesiumMath.LUNAR_RADIUS = 1737400.0; - - /** - * 64 * 1024 - * @type {Number} - * @constant - */ - CesiumMath.SIXTY_FOUR_KILOBYTES = 64 * 1024; - - /** - * 4 * 1024 * 1024 * 1024 - * @type {Number} - * @constant - */ - CesiumMath.FOUR_GIGABYTES = 4 * 1024 * 1024 * 1024; - - /** - * Returns the sign of the value; 1 if the value is positive, -1 if the value is - * negative, or 0 if the value is 0. - * - * @function - * @param {Number} value The value to return the sign of. - * @returns {Number} The sign of value. - */ - // eslint-disable-next-line es/no-math-sign - CesiumMath.sign = defaultValue.defaultValue(Math.sign, function sign(value) { - value = +value; // coerce to number - if (value === 0 || value !== value) { - // zero or NaN - return value; - } - return value > 0 ? 1 : -1; - }); - - /** - * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative. - * This is similar to {@link CesiumMath#sign} except that returns 1.0 instead of - * 0.0 when the input value is 0.0. - * @param {Number} value The value to return the sign of. - * @returns {Number} The sign of value. - */ - CesiumMath.signNotZero = function (value) { - return value < 0.0 ? -1.0 : 1.0; - }; - - /** - * Converts a scalar value in the range [-1.0, 1.0] to a SNORM in the range [0, rangeMaximum] - * @param {Number} value The scalar value in the range [-1.0, 1.0] - * @param {Number} [rangeMaximum=255] The maximum value in the mapped range, 255 by default. - * @returns {Number} A SNORM value, where 0 maps to -1.0 and rangeMaximum maps to 1.0. - * - * @see CesiumMath.fromSNorm - */ - CesiumMath.toSNorm = function (value, rangeMaximum) { - rangeMaximum = defaultValue.defaultValue(rangeMaximum, 255); - return Math.round( - (CesiumMath.clamp(value, -1.0, 1.0) * 0.5 + 0.5) * rangeMaximum - ); - }; - - /** - * Converts a SNORM value in the range [0, rangeMaximum] to a scalar in the range [-1.0, 1.0]. - * @param {Number} value SNORM value in the range [0, rangeMaximum] - * @param {Number} [rangeMaximum=255] The maximum value in the SNORM range, 255 by default. - * @returns {Number} Scalar in the range [-1.0, 1.0]. - * - * @see CesiumMath.toSNorm - */ - CesiumMath.fromSNorm = function (value, rangeMaximum) { - rangeMaximum = defaultValue.defaultValue(rangeMaximum, 255); - return ( - (CesiumMath.clamp(value, 0.0, rangeMaximum) / rangeMaximum) * 2.0 - 1.0 - ); - }; - - /** - * Converts a scalar value in the range [rangeMinimum, rangeMaximum] to a scalar in the range [0.0, 1.0] - * @param {Number} value The scalar value in the range [rangeMinimum, rangeMaximum] - * @param {Number} rangeMinimum The minimum value in the mapped range. - * @param {Number} rangeMaximum The maximum value in the mapped range. - * @returns {Number} A scalar value, where rangeMinimum maps to 0.0 and rangeMaximum maps to 1.0. - */ - CesiumMath.normalize = function (value, rangeMinimum, rangeMaximum) { - rangeMaximum = Math.max(rangeMaximum - rangeMinimum, 0.0); - return rangeMaximum === 0.0 - ? 0.0 - : CesiumMath.clamp((value - rangeMinimum) / rangeMaximum, 0.0, 1.0); - }; - - /** - * Returns the hyperbolic sine of a number. - * The hyperbolic sine of value is defined to be - * (ex - e-x)/2.0 - * where e is Euler's number, approximately 2.71828183. - * - *

    Special cases: - *

      - *
    • If the argument is NaN, then the result is NaN.
    • - * - *
    • If the argument is infinite, then the result is an infinity - * with the same sign as the argument.
    • - * - *
    • If the argument is zero, then the result is a zero with the - * same sign as the argument.
    • - *
    - *

    - * - * @function - * @param {Number} value The number whose hyperbolic sine is to be returned. - * @returns {Number} The hyperbolic sine of value. - */ - // eslint-disable-next-line es/no-math-sinh - CesiumMath.sinh = defaultValue.defaultValue(Math.sinh, function sinh(value) { - return (Math.exp(value) - Math.exp(-value)) / 2.0; - }); - - /** - * Returns the hyperbolic cosine of a number. - * The hyperbolic cosine of value is defined to be - * (ex + e-x)/2.0 - * where e is Euler's number, approximately 2.71828183. - * - *

    Special cases: - *

      - *
    • If the argument is NaN, then the result is NaN.
    • - * - *
    • If the argument is infinite, then the result is positive infinity.
    • - * - *
    • If the argument is zero, then the result is 1.0.
    • - *
    - *

    - * - * @function - * @param {Number} value The number whose hyperbolic cosine is to be returned. - * @returns {Number} The hyperbolic cosine of value. - */ - // eslint-disable-next-line es/no-math-cosh - CesiumMath.cosh = defaultValue.defaultValue(Math.cosh, function cosh(value) { - return (Math.exp(value) + Math.exp(-value)) / 2.0; - }); - - /** - * Computes the linear interpolation of two values. - * - * @param {Number} p The start value to interpolate. - * @param {Number} q The end value to interpolate. - * @param {Number} time The time of interpolation generally in the range [0.0, 1.0]. - * @returns {Number} The linearly interpolated value. - * - * @example - * const n = Cesium.Math.lerp(0.0, 2.0, 0.5); // returns 1.0 - */ - CesiumMath.lerp = function (p, q, time) { - return (1.0 - time) * p + time * q; - }; - - /** - * pi - * - * @type {Number} - * @constant - */ - CesiumMath.PI = Math.PI; - - /** - * 1/pi - * - * @type {Number} - * @constant - */ - CesiumMath.ONE_OVER_PI = 1.0 / Math.PI; - - /** - * pi/2 - * - * @type {Number} - * @constant - */ - CesiumMath.PI_OVER_TWO = Math.PI / 2.0; - - /** - * pi/3 - * - * @type {Number} - * @constant - */ - CesiumMath.PI_OVER_THREE = Math.PI / 3.0; - - /** - * pi/4 - * - * @type {Number} - * @constant - */ - CesiumMath.PI_OVER_FOUR = Math.PI / 4.0; - - /** - * pi/6 - * - * @type {Number} - * @constant - */ - CesiumMath.PI_OVER_SIX = Math.PI / 6.0; - - /** - * 3pi/2 - * - * @type {Number} - * @constant - */ - CesiumMath.THREE_PI_OVER_TWO = (3.0 * Math.PI) / 2.0; - - /** - * 2pi - * - * @type {Number} - * @constant - */ - CesiumMath.TWO_PI = 2.0 * Math.PI; - - /** - * 1/2pi - * - * @type {Number} - * @constant - */ - CesiumMath.ONE_OVER_TWO_PI = 1.0 / (2.0 * Math.PI); - - /** - * The number of radians in a degree. - * - * @type {Number} - * @constant - */ - CesiumMath.RADIANS_PER_DEGREE = Math.PI / 180.0; - - /** - * The number of degrees in a radian. - * - * @type {Number} - * @constant - */ - CesiumMath.DEGREES_PER_RADIAN = 180.0 / Math.PI; - - /** - * The number of radians in an arc second. - * - * @type {Number} - * @constant - */ - CesiumMath.RADIANS_PER_ARCSECOND = CesiumMath.RADIANS_PER_DEGREE / 3600.0; - - /** - * Converts degrees to radians. - * @param {Number} degrees The angle to convert in degrees. - * @returns {Number} The corresponding angle in radians. - */ - CesiumMath.toRadians = function (degrees) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(degrees)) { - throw new Check.DeveloperError("degrees is required."); - } - //>>includeEnd('debug'); - return degrees * CesiumMath.RADIANS_PER_DEGREE; - }; - - /** - * Converts radians to degrees. - * @param {Number} radians The angle to convert in radians. - * @returns {Number} The corresponding angle in degrees. - */ - CesiumMath.toDegrees = function (radians) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(radians)) { - throw new Check.DeveloperError("radians is required."); - } - //>>includeEnd('debug'); - return radians * CesiumMath.DEGREES_PER_RADIAN; - }; - - /** - * Converts a longitude value, in radians, to the range [-Math.PI, Math.PI). - * - * @param {Number} angle The longitude value, in radians, to convert to the range [-Math.PI, Math.PI). - * @returns {Number} The equivalent longitude value in the range [-Math.PI, Math.PI). - * - * @example - * // Convert 270 degrees to -90 degrees longitude - * const longitude = Cesium.Math.convertLongitudeRange(Cesium.Math.toRadians(270.0)); - */ - CesiumMath.convertLongitudeRange = function (angle) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(angle)) { - throw new Check.DeveloperError("angle is required."); - } - //>>includeEnd('debug'); - const twoPi = CesiumMath.TWO_PI; - - const simplified = angle - Math.floor(angle / twoPi) * twoPi; - - if (simplified < -Math.PI) { - return simplified + twoPi; - } - if (simplified >= Math.PI) { - return simplified - twoPi; - } - - return simplified; - }; - - /** - * Convenience function that clamps a latitude value, in radians, to the range [-Math.PI/2, Math.PI/2). - * Useful for sanitizing data before use in objects requiring correct range. - * - * @param {Number} angle The latitude value, in radians, to clamp to the range [-Math.PI/2, Math.PI/2). - * @returns {Number} The latitude value clamped to the range [-Math.PI/2, Math.PI/2). - * - * @example - * // Clamp 108 degrees latitude to 90 degrees latitude - * const latitude = Cesium.Math.clampToLatitudeRange(Cesium.Math.toRadians(108.0)); - */ - CesiumMath.clampToLatitudeRange = function (angle) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(angle)) { - throw new Check.DeveloperError("angle is required."); - } - //>>includeEnd('debug'); - - return CesiumMath.clamp( - angle, - -1 * CesiumMath.PI_OVER_TWO, - CesiumMath.PI_OVER_TWO - ); - }; - - /** - * Produces an angle in the range -Pi <= angle <= Pi which is equivalent to the provided angle. - * - * @param {Number} angle in radians - * @returns {Number} The angle in the range [-CesiumMath.PI, CesiumMath.PI]. - */ - CesiumMath.negativePiToPi = function (angle) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(angle)) { - throw new Check.DeveloperError("angle is required."); - } - //>>includeEnd('debug'); - if (angle >= -CesiumMath.PI && angle <= CesiumMath.PI) { - // Early exit if the input is already inside the range. This avoids - // unnecessary math which could introduce floating point error. - return angle; - } - return CesiumMath.zeroToTwoPi(angle + CesiumMath.PI) - CesiumMath.PI; - }; - - /** - * Produces an angle in the range 0 <= angle <= 2Pi which is equivalent to the provided angle. - * - * @param {Number} angle in radians - * @returns {Number} The angle in the range [0, CesiumMath.TWO_PI]. - */ - CesiumMath.zeroToTwoPi = function (angle) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(angle)) { - throw new Check.DeveloperError("angle is required."); - } - //>>includeEnd('debug'); - if (angle >= 0 && angle <= CesiumMath.TWO_PI) { - // Early exit if the input is already inside the range. This avoids - // unnecessary math which could introduce floating point error. - return angle; - } - const mod = CesiumMath.mod(angle, CesiumMath.TWO_PI); - if ( - Math.abs(mod) < CesiumMath.EPSILON14 && - Math.abs(angle) > CesiumMath.EPSILON14 - ) { - return CesiumMath.TWO_PI; - } - return mod; - }; - - /** - * The modulo operation that also works for negative dividends. - * - * @param {Number} m The dividend. - * @param {Number} n The divisor. - * @returns {Number} The remainder. - */ - CesiumMath.mod = function (m, n) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(m)) { - throw new Check.DeveloperError("m is required."); - } - if (!defaultValue.defined(n)) { - throw new Check.DeveloperError("n is required."); - } - if (n === 0.0) { - throw new Check.DeveloperError("divisor cannot be 0."); - } - //>>includeEnd('debug'); - if (CesiumMath.sign(m) === CesiumMath.sign(n) && Math.abs(m) < Math.abs(n)) { - // Early exit if the input does not need to be modded. This avoids - // unnecessary math which could introduce floating point error. - return m; - } - - return ((m % n) + n) % n; - }; - - /** - * Determines if two values are equal using an absolute or relative tolerance test. This is useful - * to avoid problems due to roundoff error when comparing floating-point values directly. The values are - * first compared using an absolute tolerance test. If that fails, a relative tolerance test is performed. - * Use this test if you are unsure of the magnitudes of left and right. - * - * @param {Number} left The first value to compare. - * @param {Number} right The other value to compare. - * @param {Number} [relativeEpsilon=0] The maximum inclusive delta between left and right for the relative tolerance test. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The maximum inclusive delta between left and right for the absolute tolerance test. - * @returns {Boolean} true if the values are equal within the epsilon; otherwise, false. - * - * @example - * const a = Cesium.Math.equalsEpsilon(0.0, 0.01, Cesium.Math.EPSILON2); // true - * const b = Cesium.Math.equalsEpsilon(0.0, 0.1, Cesium.Math.EPSILON2); // false - * const c = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON7); // true - * const d = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON9); // false - */ - CesiumMath.equalsEpsilon = function ( - left, - right, - relativeEpsilon, - absoluteEpsilon - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(left)) { - throw new Check.DeveloperError("left is required."); - } - if (!defaultValue.defined(right)) { - throw new Check.DeveloperError("right is required."); - } - //>>includeEnd('debug'); - - relativeEpsilon = defaultValue.defaultValue(relativeEpsilon, 0.0); - absoluteEpsilon = defaultValue.defaultValue(absoluteEpsilon, relativeEpsilon); - const absDiff = Math.abs(left - right); - return ( - absDiff <= absoluteEpsilon || - absDiff <= relativeEpsilon * Math.max(Math.abs(left), Math.abs(right)) - ); - }; - - /** - * Determines if the left value is less than the right value. If the two values are within - * absoluteEpsilon of each other, they are considered equal and this function returns false. - * - * @param {Number} left The first number to compare. - * @param {Number} right The second number to compare. - * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison. - * @returns {Boolean} true if left is less than right by more than - * absoluteEpsilon. false if left is greater or if the two - * values are nearly equal. - */ - CesiumMath.lessThan = function (left, right, absoluteEpsilon) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(left)) { - throw new Check.DeveloperError("first is required."); - } - if (!defaultValue.defined(right)) { - throw new Check.DeveloperError("second is required."); - } - if (!defaultValue.defined(absoluteEpsilon)) { - throw new Check.DeveloperError("absoluteEpsilon is required."); - } - //>>includeEnd('debug'); - return left - right < -absoluteEpsilon; - }; - - /** - * Determines if the left value is less than or equal to the right value. If the two values are within - * absoluteEpsilon of each other, they are considered equal and this function returns true. - * - * @param {Number} left The first number to compare. - * @param {Number} right The second number to compare. - * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison. - * @returns {Boolean} true if left is less than right or if the - * the values are nearly equal. - */ - CesiumMath.lessThanOrEquals = function (left, right, absoluteEpsilon) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(left)) { - throw new Check.DeveloperError("first is required."); - } - if (!defaultValue.defined(right)) { - throw new Check.DeveloperError("second is required."); - } - if (!defaultValue.defined(absoluteEpsilon)) { - throw new Check.DeveloperError("absoluteEpsilon is required."); - } - //>>includeEnd('debug'); - return left - right < absoluteEpsilon; - }; - - /** - * Determines if the left value is greater the right value. If the two values are within - * absoluteEpsilon of each other, they are considered equal and this function returns false. - * - * @param {Number} left The first number to compare. - * @param {Number} right The second number to compare. - * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison. - * @returns {Boolean} true if left is greater than right by more than - * absoluteEpsilon. false if left is less or if the two - * values are nearly equal. - */ - CesiumMath.greaterThan = function (left, right, absoluteEpsilon) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(left)) { - throw new Check.DeveloperError("first is required."); - } - if (!defaultValue.defined(right)) { - throw new Check.DeveloperError("second is required."); - } - if (!defaultValue.defined(absoluteEpsilon)) { - throw new Check.DeveloperError("absoluteEpsilon is required."); - } - //>>includeEnd('debug'); - return left - right > absoluteEpsilon; - }; - - /** - * Determines if the left value is greater than or equal to the right value. If the two values are within - * absoluteEpsilon of each other, they are considered equal and this function returns true. - * - * @param {Number} left The first number to compare. - * @param {Number} right The second number to compare. - * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison. - * @returns {Boolean} true if left is greater than right or if the - * the values are nearly equal. - */ - CesiumMath.greaterThanOrEquals = function (left, right, absoluteEpsilon) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(left)) { - throw new Check.DeveloperError("first is required."); - } - if (!defaultValue.defined(right)) { - throw new Check.DeveloperError("second is required."); - } - if (!defaultValue.defined(absoluteEpsilon)) { - throw new Check.DeveloperError("absoluteEpsilon is required."); - } - //>>includeEnd('debug'); - return left - right > -absoluteEpsilon; - }; - - const factorials = [1]; - - /** - * Computes the factorial of the provided number. - * - * @param {Number} n The number whose factorial is to be computed. - * @returns {Number} The factorial of the provided number or undefined if the number is less than 0. - * - * @exception {DeveloperError} A number greater than or equal to 0 is required. - * - * - * @example - * //Compute 7!, which is equal to 5040 - * const computedFactorial = Cesium.Math.factorial(7); - * - * @see {@link http://en.wikipedia.org/wiki/Factorial|Factorial on Wikipedia} - */ - CesiumMath.factorial = function (n) { - //>>includeStart('debug', pragmas.debug); - if (typeof n !== "number" || n < 0) { - throw new Check.DeveloperError( - "A number greater than or equal to 0 is required." - ); - } - //>>includeEnd('debug'); - - const length = factorials.length; - if (n >= length) { - let sum = factorials[length - 1]; - for (let i = length; i <= n; i++) { - const next = sum * i; - factorials.push(next); - sum = next; - } - } - return factorials[n]; - }; - - /** - * Increments a number with a wrapping to a minimum value if the number exceeds the maximum value. - * - * @param {Number} [n] The number to be incremented. - * @param {Number} [maximumValue] The maximum incremented value before rolling over to the minimum value. - * @param {Number} [minimumValue=0.0] The number reset to after the maximum value has been exceeded. - * @returns {Number} The incremented number. - * - * @exception {DeveloperError} Maximum value must be greater than minimum value. - * - * @example - * const n = Cesium.Math.incrementWrap(5, 10, 0); // returns 6 - * const m = Cesium.Math.incrementWrap(10, 10, 0); // returns 0 - */ - CesiumMath.incrementWrap = function (n, maximumValue, minimumValue) { - minimumValue = defaultValue.defaultValue(minimumValue, 0.0); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(n)) { - throw new Check.DeveloperError("n is required."); - } - if (maximumValue <= minimumValue) { - throw new Check.DeveloperError("maximumValue must be greater than minimumValue."); - } - //>>includeEnd('debug'); - - ++n; - if (n > maximumValue) { - n = minimumValue; - } - return n; - }; - - /** - * Determines if a non-negative integer is a power of two. - * The maximum allowed input is (2^32)-1 due to 32-bit bitwise operator limitation in Javascript. - * - * @param {Number} n The integer to test in the range [0, (2^32)-1]. - * @returns {Boolean} true if the number if a power of two; otherwise, false. - * - * @exception {DeveloperError} A number between 0 and (2^32)-1 is required. - * - * @example - * const t = Cesium.Math.isPowerOfTwo(16); // true - * const f = Cesium.Math.isPowerOfTwo(20); // false - */ - CesiumMath.isPowerOfTwo = function (n) { - //>>includeStart('debug', pragmas.debug); - if (typeof n !== "number" || n < 0 || n > 4294967295) { - throw new Check.DeveloperError("A number between 0 and (2^32)-1 is required."); - } - //>>includeEnd('debug'); - - return n !== 0 && (n & (n - 1)) === 0; - }; - - /** - * Computes the next power-of-two integer greater than or equal to the provided non-negative integer. - * The maximum allowed input is 2^31 due to 32-bit bitwise operator limitation in Javascript. - * - * @param {Number} n The integer to test in the range [0, 2^31]. - * @returns {Number} The next power-of-two integer. - * - * @exception {DeveloperError} A number between 0 and 2^31 is required. - * - * @example - * const n = Cesium.Math.nextPowerOfTwo(29); // 32 - * const m = Cesium.Math.nextPowerOfTwo(32); // 32 - */ - CesiumMath.nextPowerOfTwo = function (n) { - //>>includeStart('debug', pragmas.debug); - if (typeof n !== "number" || n < 0 || n > 2147483648) { - throw new Check.DeveloperError("A number between 0 and 2^31 is required."); - } - //>>includeEnd('debug'); - - // From http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2 - --n; - n |= n >> 1; - n |= n >> 2; - n |= n >> 4; - n |= n >> 8; - n |= n >> 16; - ++n; - - return n; - }; - - /** - * Computes the previous power-of-two integer less than or equal to the provided non-negative integer. - * The maximum allowed input is (2^32)-1 due to 32-bit bitwise operator limitation in Javascript. - * - * @param {Number} n The integer to test in the range [0, (2^32)-1]. - * @returns {Number} The previous power-of-two integer. - * - * @exception {DeveloperError} A number between 0 and (2^32)-1 is required. - * - * @example - * const n = Cesium.Math.previousPowerOfTwo(29); // 16 - * const m = Cesium.Math.previousPowerOfTwo(32); // 32 - */ - CesiumMath.previousPowerOfTwo = function (n) { - //>>includeStart('debug', pragmas.debug); - if (typeof n !== "number" || n < 0 || n > 4294967295) { - throw new Check.DeveloperError("A number between 0 and (2^32)-1 is required."); - } - //>>includeEnd('debug'); - - n |= n >> 1; - n |= n >> 2; - n |= n >> 4; - n |= n >> 8; - n |= n >> 16; - n |= n >> 32; - - // The previous bitwise operations implicitly convert to signed 32-bit. Use `>>>` to convert to unsigned - n = (n >>> 0) - (n >>> 1); - - return n; - }; - - /** - * Constraint a value to lie between two values. - * - * @param {Number} value The value to clamp. - * @param {Number} min The minimum value. - * @param {Number} max The maximum value. - * @returns {Number} The clamped value such that min <= result <= max. - */ - CesiumMath.clamp = function (value, min, max) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("value", value); - Check.Check.typeOf.number("min", min); - Check.Check.typeOf.number("max", max); - //>>includeEnd('debug'); - - return value < min ? min : value > max ? max : value; - }; - - let randomNumberGenerator = new mersenneTwister(); - - /** - * Sets the seed used by the random number generator - * in {@link CesiumMath#nextRandomNumber}. - * - * @param {Number} seed An integer used as the seed. - */ - CesiumMath.setRandomNumberSeed = function (seed) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(seed)) { - throw new Check.DeveloperError("seed is required."); - } - //>>includeEnd('debug'); - - randomNumberGenerator = new mersenneTwister(seed); - }; - - /** - * Generates a random floating point number in the range of [0.0, 1.0) - * using a Mersenne twister. - * - * @returns {Number} A random number in the range of [0.0, 1.0). - * - * @see CesiumMath.setRandomNumberSeed - * @see {@link http://en.wikipedia.org/wiki/Mersenne_twister|Mersenne twister on Wikipedia} - */ - CesiumMath.nextRandomNumber = function () { - return randomNumberGenerator.random(); - }; - - /** - * Generates a random number between two numbers. - * - * @param {Number} min The minimum value. - * @param {Number} max The maximum value. - * @returns {Number} A random number between the min and max. - */ - CesiumMath.randomBetween = function (min, max) { - return CesiumMath.nextRandomNumber() * (max - min) + min; - }; - - /** - * Computes Math.acos(value), but first clamps value to the range [-1.0, 1.0] - * so that the function will never return NaN. - * - * @param {Number} value The value for which to compute acos. - * @returns {Number} The acos of the value if the value is in the range [-1.0, 1.0], or the acos of -1.0 or 1.0, - * whichever is closer, if the value is outside the range. - */ - CesiumMath.acosClamped = function (value) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required."); - } - //>>includeEnd('debug'); - return Math.acos(CesiumMath.clamp(value, -1.0, 1.0)); - }; - - /** - * Computes Math.asin(value), but first clamps value to the range [-1.0, 1.0] - * so that the function will never return NaN. - * - * @param {Number} value The value for which to compute asin. - * @returns {Number} The asin of the value if the value is in the range [-1.0, 1.0], or the asin of -1.0 or 1.0, - * whichever is closer, if the value is outside the range. - */ - CesiumMath.asinClamped = function (value) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required."); - } - //>>includeEnd('debug'); - return Math.asin(CesiumMath.clamp(value, -1.0, 1.0)); - }; - - /** - * Finds the chord length between two points given the circle's radius and the angle between the points. - * - * @param {Number} angle The angle between the two points. - * @param {Number} radius The radius of the circle. - * @returns {Number} The chord length. - */ - CesiumMath.chordLength = function (angle, radius) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(angle)) { - throw new Check.DeveloperError("angle is required."); - } - if (!defaultValue.defined(radius)) { - throw new Check.DeveloperError("radius is required."); - } - //>>includeEnd('debug'); - return 2.0 * radius * Math.sin(angle * 0.5); - }; - - /** - * Finds the logarithm of a number to a base. - * - * @param {Number} number The number. - * @param {Number} base The base. - * @returns {Number} The result. - */ - CesiumMath.logBase = function (number, base) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(number)) { - throw new Check.DeveloperError("number is required."); - } - if (!defaultValue.defined(base)) { - throw new Check.DeveloperError("base is required."); - } - //>>includeEnd('debug'); - return Math.log(number) / Math.log(base); - }; - - /** - * Finds the cube root of a number. - * Returns NaN if number is not provided. - * - * @function - * @param {Number} [number] The number. - * @returns {Number} The result. - */ - // eslint-disable-next-line es/no-math-cbrt - CesiumMath.cbrt = defaultValue.defaultValue(Math.cbrt, function cbrt(number) { - const result = Math.pow(Math.abs(number), 1.0 / 3.0); - return number < 0.0 ? -result : result; - }); - - /** - * Finds the base 2 logarithm of a number. - * - * @function - * @param {Number} number The number. - * @returns {Number} The result. - */ - // eslint-disable-next-line es/no-math-log2 - CesiumMath.log2 = defaultValue.defaultValue(Math.log2, function log2(number) { - return Math.log(number) * Math.LOG2E; - }); - - /** - * @private - */ - CesiumMath.fog = function (distanceToCamera, density) { - const scalar = distanceToCamera * density; - return 1.0 - Math.exp(-(scalar * scalar)); - }; - - /** - * Computes a fast approximation of Atan for input in the range [-1, 1]. - * - * Based on Michal Drobot's approximation from ShaderFastLibs, - * which in turn is based on "Efficient approximations for the arctangent function," - * Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006. - * Adapted from ShaderFastLibs under MIT License. - * - * @param {Number} x An input number in the range [-1, 1] - * @returns {Number} An approximation of atan(x) - */ - CesiumMath.fastApproximateAtan = function (x) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("x", x); - //>>includeEnd('debug'); - - return x * (-0.1784 * Math.abs(x) - 0.0663 * x * x + 1.0301); - }; - - /** - * Computes a fast approximation of Atan2(x, y) for arbitrary input scalars. - * - * Range reduction math based on nvidia's cg reference implementation: http://developer.download.nvidia.com/cg/atan2.html - * - * @param {Number} x An input number that isn't zero if y is zero. - * @param {Number} y An input number that isn't zero if x is zero. - * @returns {Number} An approximation of atan2(x, y) - */ - CesiumMath.fastApproximateAtan2 = function (x, y) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("x", x); - Check.Check.typeOf.number("y", y); - //>>includeEnd('debug'); - - // atan approximations are usually only reliable over [-1, 1] - // So reduce the range by flipping whether x or y is on top based on which is bigger. - let opposite; - let t = Math.abs(x); // t used as swap and atan result. - opposite = Math.abs(y); - const adjacent = Math.max(t, opposite); - opposite = Math.min(t, opposite); - - const oppositeOverAdjacent = opposite / adjacent; - //>>includeStart('debug', pragmas.debug); - if (isNaN(oppositeOverAdjacent)) { - throw new Check.DeveloperError("either x or y must be nonzero"); - } - //>>includeEnd('debug'); - t = CesiumMath.fastApproximateAtan(oppositeOverAdjacent); - - // Undo range reduction - t = Math.abs(y) > Math.abs(x) ? CesiumMath.PI_OVER_TWO - t : t; - t = x < 0.0 ? CesiumMath.PI - t : t; - t = y < 0.0 ? -t : t; - return t; - }; - var CesiumMath$1 = CesiumMath; - - exports.CesiumMath = CesiumMath$1; - -})); -//# sourceMappingURL=Math-9be8b918.js.map diff --git a/debug/cesium/Workers/Math-9be8b918.js.map b/debug/cesium/Workers/Math-9be8b918.js.map deleted file mode 100644 index 76c29f1..0000000 --- a/debug/cesium/Workers/Math-9be8b918.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Math-9be8b918.js","sources":["../../../node_modules/mersenne-twister/src/mersenne-twister.js","../../../Source/Core/Math.js"],"sourcesContent":["/*\n https://github.com/banksean wrapped Makoto Matsumoto and Takuji Nishimura's code in a namespace\n so it's better encapsulated. Now you can have multiple random number generators\n and they won't stomp all over eachother's state.\n\n If you want to use this as a substitute for Math.random(), use the random()\n method like so:\n\n var m = new MersenneTwister();\n var randomNumber = m.random();\n\n You can also call the other genrand_{foo}() methods on the instance.\n\n If you want to use a specific seed in order to get a repeatable random\n sequence, pass an integer into the constructor:\n\n var m = new MersenneTwister(123);\n\n and that will always produce the same random sequence.\n\n Sean McCullough (banksean@gmail.com)\n*/\n\n/*\n A C-program for MT19937, with initialization improved 2002/1/26.\n Coded by Takuji Nishimura and Makoto Matsumoto.\n\n Before using, initialize the state by using init_seed(seed)\n or init_by_array(init_key, key_length).\n\n Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,\n All rights reserved.\n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions\n are met:\n\n 1. Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n\n 2. Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n 3. The names of its contributors may not be used to endorse or promote\n products derived from this software without specific prior written\n permission.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\n Any feedback is very welcome.\n http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html\n email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)\n*/\n\nvar MersenneTwister = function(seed) {\n\tif (seed == undefined) {\n\t\tseed = new Date().getTime();\n\t}\n\n\t/* Period parameters */\n\tthis.N = 624;\n\tthis.M = 397;\n\tthis.MATRIX_A = 0x9908b0df; /* constant vector a */\n\tthis.UPPER_MASK = 0x80000000; /* most significant w-r bits */\n\tthis.LOWER_MASK = 0x7fffffff; /* least significant r bits */\n\n\tthis.mt = new Array(this.N); /* the array for the state vector */\n\tthis.mti=this.N+1; /* mti==N+1 means mt[N] is not initialized */\n\n\tif (seed.constructor == Array) {\n\t\tthis.init_by_array(seed, seed.length);\n\t}\n\telse {\n\t\tthis.init_seed(seed);\n\t}\n}\n\n/* initializes mt[N] with a seed */\n/* origin name init_genrand */\nMersenneTwister.prototype.init_seed = function(s) {\n\tthis.mt[0] = s >>> 0;\n\tfor (this.mti=1; this.mti>> 30);\n\t\tthis.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253)\n\t\t+ this.mti;\n\t\t/* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */\n\t\t/* In the previous versions, MSBs of the seed affect */\n\t\t/* only MSBs of the array mt[]. */\n\t\t/* 2002/01/09 modified by Makoto Matsumoto */\n\t\tthis.mt[this.mti] >>>= 0;\n\t\t/* for >32 bit machines */\n\t}\n}\n\n/* initialize by an array with array-length */\n/* init_key is the array for initializing keys */\n/* key_length is its length */\n/* slight change for C++, 2004/2/26 */\nMersenneTwister.prototype.init_by_array = function(init_key, key_length) {\n\tvar i, j, k;\n\tthis.init_seed(19650218);\n\ti=1; j=0;\n\tk = (this.N>key_length ? this.N : key_length);\n\tfor (; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30)\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525)))\n\t\t+ init_key[j] + j; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++; j++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t\tif (j>=key_length) j=0;\n\t}\n\tfor (k=this.N-1; k; k--) {\n\t\tvar s = this.mt[i-1] ^ (this.mt[i-1] >>> 30);\n\t\tthis.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941))\n\t\t- i; /* non linear */\n\t\tthis.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */\n\t\ti++;\n\t\tif (i>=this.N) { this.mt[0] = this.mt[this.N-1]; i=1; }\n\t}\n\n\tthis.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */\n}\n\n/* generates a random number on [0,0xffffffff]-interval */\n/* origin name genrand_int32 */\nMersenneTwister.prototype.random_int = function() {\n\tvar y;\n\tvar mag01 = new Array(0x0, this.MATRIX_A);\n\t/* mag01[x] = x * MATRIX_A for x=0,1 */\n\n\tif (this.mti >= this.N) { /* generate N words at one time */\n\t\tvar kk;\n\n\t\tif (this.mti == this.N+1) /* if init_seed() has not been called, */\n\t\t\tthis.init_seed(5489); /* a default initial seed is used */\n\n\t\tfor (kk=0;kk>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\tfor (;kk>> 1) ^ mag01[y & 0x1];\n\t\t}\n\t\ty = (this.mt[this.N-1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);\n\t\tthis.mt[this.N-1] = this.mt[this.M-1] ^ (y >>> 1) ^ mag01[y & 0x1];\n\n\t\tthis.mti = 0;\n\t}\n\n\ty = this.mt[this.mti++];\n\n\t/* Tempering */\n\ty ^= (y >>> 11);\n\ty ^= (y << 7) & 0x9d2c5680;\n\ty ^= (y << 15) & 0xefc60000;\n\ty ^= (y >>> 18);\n\n\treturn y >>> 0;\n}\n\n/* generates a random number on [0,0x7fffffff]-interval */\n/* origin name genrand_int31 */\nMersenneTwister.prototype.random_int31 = function() {\n\treturn (this.random_int()>>>1);\n}\n\n/* generates a random number on [0,1]-real-interval */\n/* origin name genrand_real1 */\nMersenneTwister.prototype.random_incl = function() {\n\treturn this.random_int()*(1.0/4294967295.0);\n\t/* divided by 2^32-1 */\n}\n\n/* generates a random number on [0,1)-real-interval */\nMersenneTwister.prototype.random = function() {\n\treturn this.random_int()*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on (0,1)-real-interval */\n/* origin name genrand_real3 */\nMersenneTwister.prototype.random_excl = function() {\n\treturn (this.random_int() + 0.5)*(1.0/4294967296.0);\n\t/* divided by 2^32 */\n}\n\n/* generates a random number on [0,1) with 53-bit resolution*/\n/* origin name genrand_res53 */\nMersenneTwister.prototype.random_long = function() {\n\tvar a=this.random_int()>>>5, b=this.random_int()>>>6;\n\treturn(a*67108864.0+b)*(1.0/9007199254740992.0);\n}\n\n/* These real versions are due to Isaku Wada, 2002/01/09 added */\n\nmodule.exports = MersenneTwister;\n","import MersenneTwister from \"mersenne-twister\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Math functions.\r\n *\r\n * @exports CesiumMath\r\n * @alias Math\r\n */\r\nconst CesiumMath = {};\r\n\r\n/**\r\n * 0.1\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON1 = 0.1;\r\n\r\n/**\r\n * 0.01\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON2 = 0.01;\r\n\r\n/**\r\n * 0.001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON3 = 0.001;\r\n\r\n/**\r\n * 0.0001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON4 = 0.0001;\r\n\r\n/**\r\n * 0.00001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON5 = 0.00001;\r\n\r\n/**\r\n * 0.000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON6 = 0.000001;\r\n\r\n/**\r\n * 0.0000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON7 = 0.0000001;\r\n\r\n/**\r\n * 0.00000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON8 = 0.00000001;\r\n\r\n/**\r\n * 0.000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON9 = 0.000000001;\r\n\r\n/**\r\n * 0.0000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON10 = 0.0000000001;\r\n\r\n/**\r\n * 0.00000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON11 = 0.00000000001;\r\n\r\n/**\r\n * 0.000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON12 = 0.000000000001;\r\n\r\n/**\r\n * 0.0000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON13 = 0.0000000000001;\r\n\r\n/**\r\n * 0.00000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON14 = 0.00000000000001;\r\n\r\n/**\r\n * 0.000000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON15 = 0.000000000000001;\r\n\r\n/**\r\n * 0.0000000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON16 = 0.0000000000000001;\r\n\r\n/**\r\n * 0.00000000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON17 = 0.00000000000000001;\r\n\r\n/**\r\n * 0.000000000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON18 = 0.000000000000000001;\r\n\r\n/**\r\n * 0.0000000000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON19 = 0.0000000000000000001;\r\n\r\n/**\r\n * 0.00000000000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON20 = 0.00000000000000000001;\r\n\r\n/**\r\n * 0.000000000000000000001\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.EPSILON21 = 0.000000000000000000001;\r\n\r\n/**\r\n * The gravitational parameter of the Earth in meters cubed\r\n * per second squared as defined by the WGS84 model: 3.986004418e14\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.GRAVITATIONALPARAMETER = 3.986004418e14;\r\n\r\n/**\r\n * Radius of the sun in meters: 6.955e8\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.SOLAR_RADIUS = 6.955e8;\r\n\r\n/**\r\n * The mean radius of the moon, according to the \"Report of the IAU/IAG Working Group on\r\n * Cartographic Coordinates and Rotational Elements of the Planets and satellites: 2000\",\r\n * Celestial Mechanics 82: 83-110, 2002.\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.LUNAR_RADIUS = 1737400.0;\r\n\r\n/**\r\n * 64 * 1024\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.SIXTY_FOUR_KILOBYTES = 64 * 1024;\r\n\r\n/**\r\n * 4 * 1024 * 1024 * 1024\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.FOUR_GIGABYTES = 4 * 1024 * 1024 * 1024;\r\n\r\n/**\r\n * Returns the sign of the value; 1 if the value is positive, -1 if the value is\r\n * negative, or 0 if the value is 0.\r\n *\r\n * @function\r\n * @param {Number} value The value to return the sign of.\r\n * @returns {Number} The sign of value.\r\n */\r\n// eslint-disable-next-line es/no-math-sign\r\nCesiumMath.sign = defaultValue(Math.sign, function sign(value) {\r\n value = +value; // coerce to number\r\n if (value === 0 || value !== value) {\r\n // zero or NaN\r\n return value;\r\n }\r\n return value > 0 ? 1 : -1;\r\n});\r\n\r\n/**\r\n * Returns 1.0 if the given value is positive or zero, and -1.0 if it is negative.\r\n * This is similar to {@link CesiumMath#sign} except that returns 1.0 instead of\r\n * 0.0 when the input value is 0.0.\r\n * @param {Number} value The value to return the sign of.\r\n * @returns {Number} The sign of value.\r\n */\r\nCesiumMath.signNotZero = function (value) {\r\n return value < 0.0 ? -1.0 : 1.0;\r\n};\r\n\r\n/**\r\n * Converts a scalar value in the range [-1.0, 1.0] to a SNORM in the range [0, rangeMaximum]\r\n * @param {Number} value The scalar value in the range [-1.0, 1.0]\r\n * @param {Number} [rangeMaximum=255] The maximum value in the mapped range, 255 by default.\r\n * @returns {Number} A SNORM value, where 0 maps to -1.0 and rangeMaximum maps to 1.0.\r\n *\r\n * @see CesiumMath.fromSNorm\r\n */\r\nCesiumMath.toSNorm = function (value, rangeMaximum) {\r\n rangeMaximum = defaultValue(rangeMaximum, 255);\r\n return Math.round(\r\n (CesiumMath.clamp(value, -1.0, 1.0) * 0.5 + 0.5) * rangeMaximum\r\n );\r\n};\r\n\r\n/**\r\n * Converts a SNORM value in the range [0, rangeMaximum] to a scalar in the range [-1.0, 1.0].\r\n * @param {Number} value SNORM value in the range [0, rangeMaximum]\r\n * @param {Number} [rangeMaximum=255] The maximum value in the SNORM range, 255 by default.\r\n * @returns {Number} Scalar in the range [-1.0, 1.0].\r\n *\r\n * @see CesiumMath.toSNorm\r\n */\r\nCesiumMath.fromSNorm = function (value, rangeMaximum) {\r\n rangeMaximum = defaultValue(rangeMaximum, 255);\r\n return (\r\n (CesiumMath.clamp(value, 0.0, rangeMaximum) / rangeMaximum) * 2.0 - 1.0\r\n );\r\n};\r\n\r\n/**\r\n * Converts a scalar value in the range [rangeMinimum, rangeMaximum] to a scalar in the range [0.0, 1.0]\r\n * @param {Number} value The scalar value in the range [rangeMinimum, rangeMaximum]\r\n * @param {Number} rangeMinimum The minimum value in the mapped range.\r\n * @param {Number} rangeMaximum The maximum value in the mapped range.\r\n * @returns {Number} A scalar value, where rangeMinimum maps to 0.0 and rangeMaximum maps to 1.0.\r\n */\r\nCesiumMath.normalize = function (value, rangeMinimum, rangeMaximum) {\r\n rangeMaximum = Math.max(rangeMaximum - rangeMinimum, 0.0);\r\n return rangeMaximum === 0.0\r\n ? 0.0\r\n : CesiumMath.clamp((value - rangeMinimum) / rangeMaximum, 0.0, 1.0);\r\n};\r\n\r\n/**\r\n * Returns the hyperbolic sine of a number.\r\n * The hyperbolic sine of value is defined to be\r\n * (ex - e-x)/2.0\r\n * where e is Euler's number, approximately 2.71828183.\r\n *\r\n *

    Special cases:\r\n *

      \r\n *
    • If the argument is NaN, then the result is NaN.
    • \r\n *\r\n *
    • If the argument is infinite, then the result is an infinity\r\n * with the same sign as the argument.
    • \r\n *\r\n *
    • If the argument is zero, then the result is a zero with the\r\n * same sign as the argument.
    • \r\n *
    \r\n *

    \r\n *\r\n * @function\r\n * @param {Number} value The number whose hyperbolic sine is to be returned.\r\n * @returns {Number} The hyperbolic sine of value.\r\n */\r\n// eslint-disable-next-line es/no-math-sinh\r\nCesiumMath.sinh = defaultValue(Math.sinh, function sinh(value) {\r\n return (Math.exp(value) - Math.exp(-value)) / 2.0;\r\n});\r\n\r\n/**\r\n * Returns the hyperbolic cosine of a number.\r\n * The hyperbolic cosine of value is defined to be\r\n * (ex + e-x)/2.0\r\n * where e is Euler's number, approximately 2.71828183.\r\n *\r\n *

    Special cases:\r\n *

      \r\n *
    • If the argument is NaN, then the result is NaN.
    • \r\n *\r\n *
    • If the argument is infinite, then the result is positive infinity.
    • \r\n *\r\n *
    • If the argument is zero, then the result is 1.0.
    • \r\n *
    \r\n *

    \r\n *\r\n * @function\r\n * @param {Number} value The number whose hyperbolic cosine is to be returned.\r\n * @returns {Number} The hyperbolic cosine of value.\r\n */\r\n// eslint-disable-next-line es/no-math-cosh\r\nCesiumMath.cosh = defaultValue(Math.cosh, function cosh(value) {\r\n return (Math.exp(value) + Math.exp(-value)) / 2.0;\r\n});\r\n\r\n/**\r\n * Computes the linear interpolation of two values.\r\n *\r\n * @param {Number} p The start value to interpolate.\r\n * @param {Number} q The end value to interpolate.\r\n * @param {Number} time The time of interpolation generally in the range [0.0, 1.0].\r\n * @returns {Number} The linearly interpolated value.\r\n *\r\n * @example\r\n * const n = Cesium.Math.lerp(0.0, 2.0, 0.5); // returns 1.0\r\n */\r\nCesiumMath.lerp = function (p, q, time) {\r\n return (1.0 - time) * p + time * q;\r\n};\r\n\r\n/**\r\n * pi\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.PI = Math.PI;\r\n\r\n/**\r\n * 1/pi\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.ONE_OVER_PI = 1.0 / Math.PI;\r\n\r\n/**\r\n * pi/2\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.PI_OVER_TWO = Math.PI / 2.0;\r\n\r\n/**\r\n * pi/3\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.PI_OVER_THREE = Math.PI / 3.0;\r\n\r\n/**\r\n * pi/4\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.PI_OVER_FOUR = Math.PI / 4.0;\r\n\r\n/**\r\n * pi/6\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.PI_OVER_SIX = Math.PI / 6.0;\r\n\r\n/**\r\n * 3pi/2\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.THREE_PI_OVER_TWO = (3.0 * Math.PI) / 2.0;\r\n\r\n/**\r\n * 2pi\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.TWO_PI = 2.0 * Math.PI;\r\n\r\n/**\r\n * 1/2pi\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.ONE_OVER_TWO_PI = 1.0 / (2.0 * Math.PI);\r\n\r\n/**\r\n * The number of radians in a degree.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.RADIANS_PER_DEGREE = Math.PI / 180.0;\r\n\r\n/**\r\n * The number of degrees in a radian.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.DEGREES_PER_RADIAN = 180.0 / Math.PI;\r\n\r\n/**\r\n * The number of radians in an arc second.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nCesiumMath.RADIANS_PER_ARCSECOND = CesiumMath.RADIANS_PER_DEGREE / 3600.0;\r\n\r\n/**\r\n * Converts degrees to radians.\r\n * @param {Number} degrees The angle to convert in degrees.\r\n * @returns {Number} The corresponding angle in radians.\r\n */\r\nCesiumMath.toRadians = function (degrees) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(degrees)) {\r\n throw new DeveloperError(\"degrees is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return degrees * CesiumMath.RADIANS_PER_DEGREE;\r\n};\r\n\r\n/**\r\n * Converts radians to degrees.\r\n * @param {Number} radians The angle to convert in radians.\r\n * @returns {Number} The corresponding angle in degrees.\r\n */\r\nCesiumMath.toDegrees = function (radians) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(radians)) {\r\n throw new DeveloperError(\"radians is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return radians * CesiumMath.DEGREES_PER_RADIAN;\r\n};\r\n\r\n/**\r\n * Converts a longitude value, in radians, to the range [-Math.PI, Math.PI).\r\n *\r\n * @param {Number} angle The longitude value, in radians, to convert to the range [-Math.PI, Math.PI).\r\n * @returns {Number} The equivalent longitude value in the range [-Math.PI, Math.PI).\r\n *\r\n * @example\r\n * // Convert 270 degrees to -90 degrees longitude\r\n * const longitude = Cesium.Math.convertLongitudeRange(Cesium.Math.toRadians(270.0));\r\n */\r\nCesiumMath.convertLongitudeRange = function (angle) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(angle)) {\r\n throw new DeveloperError(\"angle is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n const twoPi = CesiumMath.TWO_PI;\r\n\r\n const simplified = angle - Math.floor(angle / twoPi) * twoPi;\r\n\r\n if (simplified < -Math.PI) {\r\n return simplified + twoPi;\r\n }\r\n if (simplified >= Math.PI) {\r\n return simplified - twoPi;\r\n }\r\n\r\n return simplified;\r\n};\r\n\r\n/**\r\n * Convenience function that clamps a latitude value, in radians, to the range [-Math.PI/2, Math.PI/2).\r\n * Useful for sanitizing data before use in objects requiring correct range.\r\n *\r\n * @param {Number} angle The latitude value, in radians, to clamp to the range [-Math.PI/2, Math.PI/2).\r\n * @returns {Number} The latitude value clamped to the range [-Math.PI/2, Math.PI/2).\r\n *\r\n * @example\r\n * // Clamp 108 degrees latitude to 90 degrees latitude\r\n * const latitude = Cesium.Math.clampToLatitudeRange(Cesium.Math.toRadians(108.0));\r\n */\r\nCesiumMath.clampToLatitudeRange = function (angle) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(angle)) {\r\n throw new DeveloperError(\"angle is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return CesiumMath.clamp(\r\n angle,\r\n -1 * CesiumMath.PI_OVER_TWO,\r\n CesiumMath.PI_OVER_TWO\r\n );\r\n};\r\n\r\n/**\r\n * Produces an angle in the range -Pi <= angle <= Pi which is equivalent to the provided angle.\r\n *\r\n * @param {Number} angle in radians\r\n * @returns {Number} The angle in the range [-CesiumMath.PI, CesiumMath.PI].\r\n */\r\nCesiumMath.negativePiToPi = function (angle) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(angle)) {\r\n throw new DeveloperError(\"angle is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n if (angle >= -CesiumMath.PI && angle <= CesiumMath.PI) {\r\n // Early exit if the input is already inside the range. This avoids\r\n // unnecessary math which could introduce floating point error.\r\n return angle;\r\n }\r\n return CesiumMath.zeroToTwoPi(angle + CesiumMath.PI) - CesiumMath.PI;\r\n};\r\n\r\n/**\r\n * Produces an angle in the range 0 <= angle <= 2Pi which is equivalent to the provided angle.\r\n *\r\n * @param {Number} angle in radians\r\n * @returns {Number} The angle in the range [0, CesiumMath.TWO_PI].\r\n */\r\nCesiumMath.zeroToTwoPi = function (angle) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(angle)) {\r\n throw new DeveloperError(\"angle is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n if (angle >= 0 && angle <= CesiumMath.TWO_PI) {\r\n // Early exit if the input is already inside the range. This avoids\r\n // unnecessary math which could introduce floating point error.\r\n return angle;\r\n }\r\n const mod = CesiumMath.mod(angle, CesiumMath.TWO_PI);\r\n if (\r\n Math.abs(mod) < CesiumMath.EPSILON14 &&\r\n Math.abs(angle) > CesiumMath.EPSILON14\r\n ) {\r\n return CesiumMath.TWO_PI;\r\n }\r\n return mod;\r\n};\r\n\r\n/**\r\n * The modulo operation that also works for negative dividends.\r\n *\r\n * @param {Number} m The dividend.\r\n * @param {Number} n The divisor.\r\n * @returns {Number} The remainder.\r\n */\r\nCesiumMath.mod = function (m, n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(m)) {\r\n throw new DeveloperError(\"m is required.\");\r\n }\r\n if (!defined(n)) {\r\n throw new DeveloperError(\"n is required.\");\r\n }\r\n if (n === 0.0) {\r\n throw new DeveloperError(\"divisor cannot be 0.\");\r\n }\r\n //>>includeEnd('debug');\r\n if (CesiumMath.sign(m) === CesiumMath.sign(n) && Math.abs(m) < Math.abs(n)) {\r\n // Early exit if the input does not need to be modded. This avoids\r\n // unnecessary math which could introduce floating point error.\r\n return m;\r\n }\r\n\r\n return ((m % n) + n) % n;\r\n};\r\n\r\n/**\r\n * Determines if two values are equal using an absolute or relative tolerance test. This is useful\r\n * to avoid problems due to roundoff error when comparing floating-point values directly. The values are\r\n * first compared using an absolute tolerance test. If that fails, a relative tolerance test is performed.\r\n * Use this test if you are unsure of the magnitudes of left and right.\r\n *\r\n * @param {Number} left The first value to compare.\r\n * @param {Number} right The other value to compare.\r\n * @param {Number} [relativeEpsilon=0] The maximum inclusive delta between left and right for the relative tolerance test.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The maximum inclusive delta between left and right for the absolute tolerance test.\r\n * @returns {Boolean} true if the values are equal within the epsilon; otherwise, false.\r\n *\r\n * @example\r\n * const a = Cesium.Math.equalsEpsilon(0.0, 0.01, Cesium.Math.EPSILON2); // true\r\n * const b = Cesium.Math.equalsEpsilon(0.0, 0.1, Cesium.Math.EPSILON2); // false\r\n * const c = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON7); // true\r\n * const d = Cesium.Math.equalsEpsilon(3699175.1634344, 3699175.2, Cesium.Math.EPSILON9); // false\r\n */\r\nCesiumMath.equalsEpsilon = function (\r\n left,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(left)) {\r\n throw new DeveloperError(\"left is required.\");\r\n }\r\n if (!defined(right)) {\r\n throw new DeveloperError(\"right is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n relativeEpsilon = defaultValue(relativeEpsilon, 0.0);\r\n absoluteEpsilon = defaultValue(absoluteEpsilon, relativeEpsilon);\r\n const absDiff = Math.abs(left - right);\r\n return (\r\n absDiff <= absoluteEpsilon ||\r\n absDiff <= relativeEpsilon * Math.max(Math.abs(left), Math.abs(right))\r\n );\r\n};\r\n\r\n/**\r\n * Determines if the left value is less than the right value. If the two values are within\r\n * absoluteEpsilon of each other, they are considered equal and this function returns false.\r\n *\r\n * @param {Number} left The first number to compare.\r\n * @param {Number} right The second number to compare.\r\n * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison.\r\n * @returns {Boolean} true if left is less than right by more than\r\n * absoluteEpsilon. false if left is greater or if the two\r\n * values are nearly equal.\r\n */\r\nCesiumMath.lessThan = function (left, right, absoluteEpsilon) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(left)) {\r\n throw new DeveloperError(\"first is required.\");\r\n }\r\n if (!defined(right)) {\r\n throw new DeveloperError(\"second is required.\");\r\n }\r\n if (!defined(absoluteEpsilon)) {\r\n throw new DeveloperError(\"absoluteEpsilon is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return left - right < -absoluteEpsilon;\r\n};\r\n\r\n/**\r\n * Determines if the left value is less than or equal to the right value. If the two values are within\r\n * absoluteEpsilon of each other, they are considered equal and this function returns true.\r\n *\r\n * @param {Number} left The first number to compare.\r\n * @param {Number} right The second number to compare.\r\n * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison.\r\n * @returns {Boolean} true if left is less than right or if the\r\n * the values are nearly equal.\r\n */\r\nCesiumMath.lessThanOrEquals = function (left, right, absoluteEpsilon) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(left)) {\r\n throw new DeveloperError(\"first is required.\");\r\n }\r\n if (!defined(right)) {\r\n throw new DeveloperError(\"second is required.\");\r\n }\r\n if (!defined(absoluteEpsilon)) {\r\n throw new DeveloperError(\"absoluteEpsilon is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return left - right < absoluteEpsilon;\r\n};\r\n\r\n/**\r\n * Determines if the left value is greater the right value. If the two values are within\r\n * absoluteEpsilon of each other, they are considered equal and this function returns false.\r\n *\r\n * @param {Number} left The first number to compare.\r\n * @param {Number} right The second number to compare.\r\n * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison.\r\n * @returns {Boolean} true if left is greater than right by more than\r\n * absoluteEpsilon. false if left is less or if the two\r\n * values are nearly equal.\r\n */\r\nCesiumMath.greaterThan = function (left, right, absoluteEpsilon) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(left)) {\r\n throw new DeveloperError(\"first is required.\");\r\n }\r\n if (!defined(right)) {\r\n throw new DeveloperError(\"second is required.\");\r\n }\r\n if (!defined(absoluteEpsilon)) {\r\n throw new DeveloperError(\"absoluteEpsilon is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return left - right > absoluteEpsilon;\r\n};\r\n\r\n/**\r\n * Determines if the left value is greater than or equal to the right value. If the two values are within\r\n * absoluteEpsilon of each other, they are considered equal and this function returns true.\r\n *\r\n * @param {Number} left The first number to compare.\r\n * @param {Number} right The second number to compare.\r\n * @param {Number} absoluteEpsilon The absolute epsilon to use in comparison.\r\n * @returns {Boolean} true if left is greater than right or if the\r\n * the values are nearly equal.\r\n */\r\nCesiumMath.greaterThanOrEquals = function (left, right, absoluteEpsilon) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(left)) {\r\n throw new DeveloperError(\"first is required.\");\r\n }\r\n if (!defined(right)) {\r\n throw new DeveloperError(\"second is required.\");\r\n }\r\n if (!defined(absoluteEpsilon)) {\r\n throw new DeveloperError(\"absoluteEpsilon is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return left - right > -absoluteEpsilon;\r\n};\r\n\r\nconst factorials = [1];\r\n\r\n/**\r\n * Computes the factorial of the provided number.\r\n *\r\n * @param {Number} n The number whose factorial is to be computed.\r\n * @returns {Number} The factorial of the provided number or undefined if the number is less than 0.\r\n *\r\n * @exception {DeveloperError} A number greater than or equal to 0 is required.\r\n *\r\n *\r\n * @example\r\n * //Compute 7!, which is equal to 5040\r\n * const computedFactorial = Cesium.Math.factorial(7);\r\n *\r\n * @see {@link http://en.wikipedia.org/wiki/Factorial|Factorial on Wikipedia}\r\n */\r\nCesiumMath.factorial = function (n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof n !== \"number\" || n < 0) {\r\n throw new DeveloperError(\r\n \"A number greater than or equal to 0 is required.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = factorials.length;\r\n if (n >= length) {\r\n let sum = factorials[length - 1];\r\n for (let i = length; i <= n; i++) {\r\n const next = sum * i;\r\n factorials.push(next);\r\n sum = next;\r\n }\r\n }\r\n return factorials[n];\r\n};\r\n\r\n/**\r\n * Increments a number with a wrapping to a minimum value if the number exceeds the maximum value.\r\n *\r\n * @param {Number} [n] The number to be incremented.\r\n * @param {Number} [maximumValue] The maximum incremented value before rolling over to the minimum value.\r\n * @param {Number} [minimumValue=0.0] The number reset to after the maximum value has been exceeded.\r\n * @returns {Number} The incremented number.\r\n *\r\n * @exception {DeveloperError} Maximum value must be greater than minimum value.\r\n *\r\n * @example\r\n * const n = Cesium.Math.incrementWrap(5, 10, 0); // returns 6\r\n * const m = Cesium.Math.incrementWrap(10, 10, 0); // returns 0\r\n */\r\nCesiumMath.incrementWrap = function (n, maximumValue, minimumValue) {\r\n minimumValue = defaultValue(minimumValue, 0.0);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(n)) {\r\n throw new DeveloperError(\"n is required.\");\r\n }\r\n if (maximumValue <= minimumValue) {\r\n throw new DeveloperError(\"maximumValue must be greater than minimumValue.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n ++n;\r\n if (n > maximumValue) {\r\n n = minimumValue;\r\n }\r\n return n;\r\n};\r\n\r\n/**\r\n * Determines if a non-negative integer is a power of two.\r\n * The maximum allowed input is (2^32)-1 due to 32-bit bitwise operator limitation in Javascript.\r\n *\r\n * @param {Number} n The integer to test in the range [0, (2^32)-1].\r\n * @returns {Boolean} true if the number if a power of two; otherwise, false.\r\n *\r\n * @exception {DeveloperError} A number between 0 and (2^32)-1 is required.\r\n *\r\n * @example\r\n * const t = Cesium.Math.isPowerOfTwo(16); // true\r\n * const f = Cesium.Math.isPowerOfTwo(20); // false\r\n */\r\nCesiumMath.isPowerOfTwo = function (n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof n !== \"number\" || n < 0 || n > 4294967295) {\r\n throw new DeveloperError(\"A number between 0 and (2^32)-1 is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return n !== 0 && (n & (n - 1)) === 0;\r\n};\r\n\r\n/**\r\n * Computes the next power-of-two integer greater than or equal to the provided non-negative integer.\r\n * The maximum allowed input is 2^31 due to 32-bit bitwise operator limitation in Javascript.\r\n *\r\n * @param {Number} n The integer to test in the range [0, 2^31].\r\n * @returns {Number} The next power-of-two integer.\r\n *\r\n * @exception {DeveloperError} A number between 0 and 2^31 is required.\r\n *\r\n * @example\r\n * const n = Cesium.Math.nextPowerOfTwo(29); // 32\r\n * const m = Cesium.Math.nextPowerOfTwo(32); // 32\r\n */\r\nCesiumMath.nextPowerOfTwo = function (n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof n !== \"number\" || n < 0 || n > 2147483648) {\r\n throw new DeveloperError(\"A number between 0 and 2^31 is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n // From http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2\r\n --n;\r\n n |= n >> 1;\r\n n |= n >> 2;\r\n n |= n >> 4;\r\n n |= n >> 8;\r\n n |= n >> 16;\r\n ++n;\r\n\r\n return n;\r\n};\r\n\r\n/**\r\n * Computes the previous power-of-two integer less than or equal to the provided non-negative integer.\r\n * The maximum allowed input is (2^32)-1 due to 32-bit bitwise operator limitation in Javascript.\r\n *\r\n * @param {Number} n The integer to test in the range [0, (2^32)-1].\r\n * @returns {Number} The previous power-of-two integer.\r\n *\r\n * @exception {DeveloperError} A number between 0 and (2^32)-1 is required.\r\n *\r\n * @example\r\n * const n = Cesium.Math.previousPowerOfTwo(29); // 16\r\n * const m = Cesium.Math.previousPowerOfTwo(32); // 32\r\n */\r\nCesiumMath.previousPowerOfTwo = function (n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof n !== \"number\" || n < 0 || n > 4294967295) {\r\n throw new DeveloperError(\"A number between 0 and (2^32)-1 is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n n |= n >> 1;\r\n n |= n >> 2;\r\n n |= n >> 4;\r\n n |= n >> 8;\r\n n |= n >> 16;\r\n n |= n >> 32;\r\n\r\n // The previous bitwise operations implicitly convert to signed 32-bit. Use `>>>` to convert to unsigned\r\n n = (n >>> 0) - (n >>> 1);\r\n\r\n return n;\r\n};\r\n\r\n/**\r\n * Constraint a value to lie between two values.\r\n *\r\n * @param {Number} value The value to clamp.\r\n * @param {Number} min The minimum value.\r\n * @param {Number} max The maximum value.\r\n * @returns {Number} The clamped value such that min <= result <= max.\r\n */\r\nCesiumMath.clamp = function (value, min, max) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"value\", value);\r\n Check.typeOf.number(\"min\", min);\r\n Check.typeOf.number(\"max\", max);\r\n //>>includeEnd('debug');\r\n\r\n return value < min ? min : value > max ? max : value;\r\n};\r\n\r\nlet randomNumberGenerator = new MersenneTwister();\r\n\r\n/**\r\n * Sets the seed used by the random number generator\r\n * in {@link CesiumMath#nextRandomNumber}.\r\n *\r\n * @param {Number} seed An integer used as the seed.\r\n */\r\nCesiumMath.setRandomNumberSeed = function (seed) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(seed)) {\r\n throw new DeveloperError(\"seed is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n randomNumberGenerator = new MersenneTwister(seed);\r\n};\r\n\r\n/**\r\n * Generates a random floating point number in the range of [0.0, 1.0)\r\n * using a Mersenne twister.\r\n *\r\n * @returns {Number} A random number in the range of [0.0, 1.0).\r\n *\r\n * @see CesiumMath.setRandomNumberSeed\r\n * @see {@link http://en.wikipedia.org/wiki/Mersenne_twister|Mersenne twister on Wikipedia}\r\n */\r\nCesiumMath.nextRandomNumber = function () {\r\n return randomNumberGenerator.random();\r\n};\r\n\r\n/**\r\n * Generates a random number between two numbers.\r\n *\r\n * @param {Number} min The minimum value.\r\n * @param {Number} max The maximum value.\r\n * @returns {Number} A random number between the min and max.\r\n */\r\nCesiumMath.randomBetween = function (min, max) {\r\n return CesiumMath.nextRandomNumber() * (max - min) + min;\r\n};\r\n\r\n/**\r\n * Computes Math.acos(value), but first clamps value to the range [-1.0, 1.0]\r\n * so that the function will never return NaN.\r\n *\r\n * @param {Number} value The value for which to compute acos.\r\n * @returns {Number} The acos of the value if the value is in the range [-1.0, 1.0], or the acos of -1.0 or 1.0,\r\n * whichever is closer, if the value is outside the range.\r\n */\r\nCesiumMath.acosClamped = function (value) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return Math.acos(CesiumMath.clamp(value, -1.0, 1.0));\r\n};\r\n\r\n/**\r\n * Computes Math.asin(value), but first clamps value to the range [-1.0, 1.0]\r\n * so that the function will never return NaN.\r\n *\r\n * @param {Number} value The value for which to compute asin.\r\n * @returns {Number} The asin of the value if the value is in the range [-1.0, 1.0], or the asin of -1.0 or 1.0,\r\n * whichever is closer, if the value is outside the range.\r\n */\r\nCesiumMath.asinClamped = function (value) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return Math.asin(CesiumMath.clamp(value, -1.0, 1.0));\r\n};\r\n\r\n/**\r\n * Finds the chord length between two points given the circle's radius and the angle between the points.\r\n *\r\n * @param {Number} angle The angle between the two points.\r\n * @param {Number} radius The radius of the circle.\r\n * @returns {Number} The chord length.\r\n */\r\nCesiumMath.chordLength = function (angle, radius) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(angle)) {\r\n throw new DeveloperError(\"angle is required.\");\r\n }\r\n if (!defined(radius)) {\r\n throw new DeveloperError(\"radius is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return 2.0 * radius * Math.sin(angle * 0.5);\r\n};\r\n\r\n/**\r\n * Finds the logarithm of a number to a base.\r\n *\r\n * @param {Number} number The number.\r\n * @param {Number} base The base.\r\n * @returns {Number} The result.\r\n */\r\nCesiumMath.logBase = function (number, base) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(number)) {\r\n throw new DeveloperError(\"number is required.\");\r\n }\r\n if (!defined(base)) {\r\n throw new DeveloperError(\"base is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return Math.log(number) / Math.log(base);\r\n};\r\n\r\n/**\r\n * Finds the cube root of a number.\r\n * Returns NaN if number is not provided.\r\n *\r\n * @function\r\n * @param {Number} [number] The number.\r\n * @returns {Number} The result.\r\n */\r\n// eslint-disable-next-line es/no-math-cbrt\r\nCesiumMath.cbrt = defaultValue(Math.cbrt, function cbrt(number) {\r\n const result = Math.pow(Math.abs(number), 1.0 / 3.0);\r\n return number < 0.0 ? -result : result;\r\n});\r\n\r\n/**\r\n * Finds the base 2 logarithm of a number.\r\n *\r\n * @function\r\n * @param {Number} number The number.\r\n * @returns {Number} The result.\r\n */\r\n// eslint-disable-next-line es/no-math-log2\r\nCesiumMath.log2 = defaultValue(Math.log2, function log2(number) {\r\n return Math.log(number) * Math.LOG2E;\r\n});\r\n\r\n/**\r\n * @private\r\n */\r\nCesiumMath.fog = function (distanceToCamera, density) {\r\n const scalar = distanceToCamera * density;\r\n return 1.0 - Math.exp(-(scalar * scalar));\r\n};\r\n\r\n/**\r\n * Computes a fast approximation of Atan for input in the range [-1, 1].\r\n *\r\n * Based on Michal Drobot's approximation from ShaderFastLibs,\r\n * which in turn is based on \"Efficient approximations for the arctangent function,\"\r\n * Rajan, S. Sichun Wang Inkol, R. Joyal, A., May 2006.\r\n * Adapted from ShaderFastLibs under MIT License.\r\n *\r\n * @param {Number} x An input number in the range [-1, 1]\r\n * @returns {Number} An approximation of atan(x)\r\n */\r\nCesiumMath.fastApproximateAtan = function (x) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"x\", x);\r\n //>>includeEnd('debug');\r\n\r\n return x * (-0.1784 * Math.abs(x) - 0.0663 * x * x + 1.0301);\r\n};\r\n\r\n/**\r\n * Computes a fast approximation of Atan2(x, y) for arbitrary input scalars.\r\n *\r\n * Range reduction math based on nvidia's cg reference implementation: http://developer.download.nvidia.com/cg/atan2.html\r\n *\r\n * @param {Number} x An input number that isn't zero if y is zero.\r\n * @param {Number} y An input number that isn't zero if x is zero.\r\n * @returns {Number} An approximation of atan2(x, y)\r\n */\r\nCesiumMath.fastApproximateAtan2 = function (x, y) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"x\", x);\r\n Check.typeOf.number(\"y\", y);\r\n //>>includeEnd('debug');\r\n\r\n // atan approximations are usually only reliable over [-1, 1]\r\n // So reduce the range by flipping whether x or y is on top based on which is bigger.\r\n let opposite;\r\n let t = Math.abs(x); // t used as swap and atan result.\r\n opposite = Math.abs(y);\r\n const adjacent = Math.max(t, opposite);\r\n opposite = Math.min(t, opposite);\r\n\r\n const oppositeOverAdjacent = opposite / adjacent;\r\n //>>includeStart('debug', pragmas.debug);\r\n if (isNaN(oppositeOverAdjacent)) {\r\n throw new DeveloperError(\"either x or y must be nonzero\");\r\n }\r\n //>>includeEnd('debug');\r\n t = CesiumMath.fastApproximateAtan(oppositeOverAdjacent);\r\n\r\n // Undo range reduction\r\n t = Math.abs(y) > Math.abs(x) ? CesiumMath.PI_OVER_TWO - t : t;\r\n t = x < 0.0 ? CesiumMath.PI - t : t;\r\n t = y < 0.0 ? -t : t;\r\n return t;\r\n};\r\nexport default CesiumMath;\r\n"],"names":["defaultValue","defined","DeveloperError","Check","MersenneTwister"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/Matrix2-036c77dd.js b/debug/cesium/Workers/Matrix2-036c77dd.js deleted file mode 100644 index d5e982a..0000000 --- a/debug/cesium/Workers/Matrix2-036c77dd.js +++ /dev/null @@ -1,7110 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918', './RuntimeError-e5c6a8b9'], (function (exports, Matrix3, Check, defaultValue, Math$1, RuntimeError) { 'use strict'; - - /** - * A 4D Cartesian point. - * @alias Cartesian4 - * @constructor - * - * @param {Number} [x=0.0] The X component. - * @param {Number} [y=0.0] The Y component. - * @param {Number} [z=0.0] The Z component. - * @param {Number} [w=0.0] The W component. - * - * @see Cartesian2 - * @see Cartesian3 - * @see Packable - */ - function Cartesian4(x, y, z, w) { - /** - * The X component. - * @type {Number} - * @default 0.0 - */ - this.x = defaultValue.defaultValue(x, 0.0); - - /** - * The Y component. - * @type {Number} - * @default 0.0 - */ - this.y = defaultValue.defaultValue(y, 0.0); - - /** - * The Z component. - * @type {Number} - * @default 0.0 - */ - this.z = defaultValue.defaultValue(z, 0.0); - - /** - * The W component. - * @type {Number} - * @default 0.0 - */ - this.w = defaultValue.defaultValue(w, 0.0); - } - - /** - * Creates a Cartesian4 instance from x, y, z and w coordinates. - * - * @param {Number} x The x coordinate. - * @param {Number} y The y coordinate. - * @param {Number} z The z coordinate. - * @param {Number} w The w coordinate. - * @param {Cartesian4} [result] The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. - */ - Cartesian4.fromElements = function (x, y, z, w, result) { - if (!defaultValue.defined(result)) { - return new Cartesian4(x, y, z, w); - } - - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - }; - - /** - * Creates a Cartesian4 instance from a {@link Color}. red, green, blue, - * and alpha map to x, y, z, and w, respectively. - * - * @param {Color} color The source color. - * @param {Cartesian4} [result] The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. - */ - Cartesian4.fromColor = function (color, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("color", color); - //>>includeEnd('debug'); - if (!defaultValue.defined(result)) { - return new Cartesian4(color.red, color.green, color.blue, color.alpha); - } - - result.x = color.red; - result.y = color.green; - result.z = color.blue; - result.w = color.alpha; - return result; - }; - - /** - * Duplicates a Cartesian4 instance. - * - * @param {Cartesian4} cartesian The Cartesian to duplicate. - * @param {Cartesian4} [result] The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. (Returns undefined if cartesian is undefined) - */ - Cartesian4.clone = function (cartesian, result) { - if (!defaultValue.defined(cartesian)) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new Cartesian4(cartesian.x, cartesian.y, cartesian.z, cartesian.w); - } - - result.x = cartesian.x; - result.y = cartesian.y; - result.z = cartesian.z; - result.w = cartesian.w; - return result; - }; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Cartesian4.packedLength = 4; - - /** - * Stores the provided instance into the provided array. - * - * @param {Cartesian4} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Cartesian4.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.x; - array[startingIndex++] = value.y; - array[startingIndex++] = value.z; - array[startingIndex] = value.w; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Cartesian4} [result] The object into which to store the result. - * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. - */ - Cartesian4.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new Cartesian4(); - } - result.x = array[startingIndex++]; - result.y = array[startingIndex++]; - result.z = array[startingIndex++]; - result.w = array[startingIndex]; - return result; - }; - - /** - * Flattens an array of Cartesian4s into an array of components. - * - * @param {Cartesian4[]} array The array of cartesians to pack. - * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 4 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 4) elements. - * @returns {Number[]} The packed array. - */ - Cartesian4.packArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - const length = array.length; - const resultLength = length * 4; - if (!defaultValue.defined(result)) { - result = new Array(resultLength); - } else if (!Array.isArray(result) && result.length !== resultLength) { - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "If result is a typed array, it must have exactly array.length * 4 elements" - ); - //>>includeEnd('debug'); - } else if (result.length !== resultLength) { - result.length = resultLength; - } - - for (let i = 0; i < length; ++i) { - Cartesian4.pack(array[i], result, i * 4); - } - return result; - }; - - /** - * Unpacks an array of cartesian components into an array of Cartesian4s. - * - * @param {Number[]} array The array of components to unpack. - * @param {Cartesian4[]} [result] The array onto which to store the result. - * @returns {Cartesian4[]} The unpacked array. - */ - Cartesian4.unpackArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - Check.Check.typeOf.number.greaterThanOrEquals("array.length", array.length, 4); - if (array.length % 4 !== 0) { - throw new Check.DeveloperError("array length must be a multiple of 4."); - } - //>>includeEnd('debug'); - - const length = array.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 4); - } else { - result.length = length / 4; - } - - for (let i = 0; i < length; i += 4) { - const index = i / 4; - result[index] = Cartesian4.unpack(array, i, result[index]); - } - return result; - }; - - /** - * Creates a Cartesian4 from four consecutive elements in an array. - * @function - * - * @param {Number[]} array The array whose four consecutive elements correspond to the x, y, z, and w components, respectively. - * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component. - * @param {Cartesian4} [result] The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. - * - * @example - * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0) - * const v = [1.0, 2.0, 3.0, 4.0]; - * const p = Cesium.Cartesian4.fromArray(v); - * - * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0) using an offset into an array - * const v2 = [0.0, 0.0, 1.0, 2.0, 3.0, 4.0]; - * const p2 = Cesium.Cartesian4.fromArray(v2, 2); - */ - Cartesian4.fromArray = Cartesian4.unpack; - - /** - * Computes the value of the maximum component for the supplied Cartesian. - * - * @param {Cartesian4} cartesian The cartesian to use. - * @returns {Number} The value of the maximum component. - */ - Cartesian4.maximumComponent = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return Math.max(cartesian.x, cartesian.y, cartesian.z, cartesian.w); - }; - - /** - * Computes the value of the minimum component for the supplied Cartesian. - * - * @param {Cartesian4} cartesian The cartesian to use. - * @returns {Number} The value of the minimum component. - */ - Cartesian4.minimumComponent = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return Math.min(cartesian.x, cartesian.y, cartesian.z, cartesian.w); - }; - - /** - * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians. - * - * @param {Cartesian4} first A cartesian to compare. - * @param {Cartesian4} second A cartesian to compare. - * @param {Cartesian4} result The object into which to store the result. - * @returns {Cartesian4} A cartesian with the minimum components. - */ - Cartesian4.minimumByComponent = function (first, second, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("first", first); - Check.Check.typeOf.object("second", second); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.min(first.x, second.x); - result.y = Math.min(first.y, second.y); - result.z = Math.min(first.z, second.z); - result.w = Math.min(first.w, second.w); - - return result; - }; - - /** - * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians. - * - * @param {Cartesian4} first A cartesian to compare. - * @param {Cartesian4} second A cartesian to compare. - * @param {Cartesian4} result The object into which to store the result. - * @returns {Cartesian4} A cartesian with the maximum components. - */ - Cartesian4.maximumByComponent = function (first, second, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("first", first); - Check.Check.typeOf.object("second", second); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.max(first.x, second.x); - result.y = Math.max(first.y, second.y); - result.z = Math.max(first.z, second.z); - result.w = Math.max(first.w, second.w); - - return result; - }; - - /** - * Constrain a value to lie between two values. - * - * @param {Cartesian4} value The value to clamp. - * @param {Cartesian4} min The minimum bound. - * @param {Cartesian4} max The maximum bound. - * @param {Cartesian4} result The object into which to store the result. - * @returns {Cartesian4} The clamped value such that min <= result <= max. - */ - Cartesian4.clamp = function (value, min, max, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.typeOf.object("min", min); - Check.Check.typeOf.object("max", max); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const x = Math$1.CesiumMath.clamp(value.x, min.x, max.x); - const y = Math$1.CesiumMath.clamp(value.y, min.y, max.y); - const z = Math$1.CesiumMath.clamp(value.z, min.z, max.z); - const w = Math$1.CesiumMath.clamp(value.w, min.w, max.w); - - result.x = x; - result.y = y; - result.z = z; - result.w = w; - - return result; - }; - - /** - * Computes the provided Cartesian's squared magnitude. - * - * @param {Cartesian4} cartesian The Cartesian instance whose squared magnitude is to be computed. - * @returns {Number} The squared magnitude. - */ - Cartesian4.magnitudeSquared = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return ( - cartesian.x * cartesian.x + - cartesian.y * cartesian.y + - cartesian.z * cartesian.z + - cartesian.w * cartesian.w - ); - }; - - /** - * Computes the Cartesian's magnitude (length). - * - * @param {Cartesian4} cartesian The Cartesian instance whose magnitude is to be computed. - * @returns {Number} The magnitude. - */ - Cartesian4.magnitude = function (cartesian) { - return Math.sqrt(Cartesian4.magnitudeSquared(cartesian)); - }; - - const distanceScratch$1 = new Cartesian4(); - - /** - * Computes the 4-space distance between two points. - * - * @param {Cartesian4} left The first point to compute the distance from. - * @param {Cartesian4} right The second point to compute the distance to. - * @returns {Number} The distance between two points. - * - * @example - * // Returns 1.0 - * const d = Cesium.Cartesian4.distance( - * new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0), - * new Cesium.Cartesian4(2.0, 0.0, 0.0, 0.0)); - */ - Cartesian4.distance = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - Cartesian4.subtract(left, right, distanceScratch$1); - return Cartesian4.magnitude(distanceScratch$1); - }; - - /** - * Computes the squared distance between two points. Comparing squared distances - * using this function is more efficient than comparing distances using {@link Cartesian4#distance}. - * - * @param {Cartesian4} left The first point to compute the distance from. - * @param {Cartesian4} right The second point to compute the distance to. - * @returns {Number} The distance between two points. - * - * @example - * // Returns 4.0, not 2.0 - * const d = Cesium.Cartesian4.distance( - * new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0), - * new Cesium.Cartesian4(3.0, 0.0, 0.0, 0.0)); - */ - Cartesian4.distanceSquared = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - Cartesian4.subtract(left, right, distanceScratch$1); - return Cartesian4.magnitudeSquared(distanceScratch$1); - }; - - /** - * Computes the normalized form of the supplied Cartesian. - * - * @param {Cartesian4} cartesian The Cartesian to be normalized. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.normalize = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const magnitude = Cartesian4.magnitude(cartesian); - - result.x = cartesian.x / magnitude; - result.y = cartesian.y / magnitude; - result.z = cartesian.z / magnitude; - result.w = cartesian.w / magnitude; - - //>>includeStart('debug', pragmas.debug); - if ( - isNaN(result.x) || - isNaN(result.y) || - isNaN(result.z) || - isNaN(result.w) - ) { - throw new Check.DeveloperError("normalized result is not a number"); - } - //>>includeEnd('debug'); - - return result; - }; - - /** - * Computes the dot (scalar) product of two Cartesians. - * - * @param {Cartesian4} left The first Cartesian. - * @param {Cartesian4} right The second Cartesian. - * @returns {Number} The dot product. - */ - Cartesian4.dot = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - return ( - left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w - ); - }; - - /** - * Computes the componentwise product of two Cartesians. - * - * @param {Cartesian4} left The first Cartesian. - * @param {Cartesian4} right The second Cartesian. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.multiplyComponents = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x * right.x; - result.y = left.y * right.y; - result.z = left.z * right.z; - result.w = left.w * right.w; - return result; - }; - - /** - * Computes the componentwise quotient of two Cartesians. - * - * @param {Cartesian4} left The first Cartesian. - * @param {Cartesian4} right The second Cartesian. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.divideComponents = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x / right.x; - result.y = left.y / right.y; - result.z = left.z / right.z; - result.w = left.w / right.w; - return result; - }; - - /** - * Computes the componentwise sum of two Cartesians. - * - * @param {Cartesian4} left The first Cartesian. - * @param {Cartesian4} right The second Cartesian. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.add = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x + right.x; - result.y = left.y + right.y; - result.z = left.z + right.z; - result.w = left.w + right.w; - return result; - }; - - /** - * Computes the componentwise difference of two Cartesians. - * - * @param {Cartesian4} left The first Cartesian. - * @param {Cartesian4} right The second Cartesian. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.subtract = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x - right.x; - result.y = left.y - right.y; - result.z = left.z - right.z; - result.w = left.w - right.w; - return result; - }; - - /** - * Multiplies the provided Cartesian componentwise by the provided scalar. - * - * @param {Cartesian4} cartesian The Cartesian to be scaled. - * @param {Number} scalar The scalar to multiply with. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.multiplyByScalar = function (cartesian, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = cartesian.x * scalar; - result.y = cartesian.y * scalar; - result.z = cartesian.z * scalar; - result.w = cartesian.w * scalar; - return result; - }; - - /** - * Divides the provided Cartesian componentwise by the provided scalar. - * - * @param {Cartesian4} cartesian The Cartesian to be divided. - * @param {Number} scalar The scalar to divide by. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.divideByScalar = function (cartesian, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = cartesian.x / scalar; - result.y = cartesian.y / scalar; - result.z = cartesian.z / scalar; - result.w = cartesian.w / scalar; - return result; - }; - - /** - * Negates the provided Cartesian. - * - * @param {Cartesian4} cartesian The Cartesian to be negated. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.negate = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = -cartesian.x; - result.y = -cartesian.y; - result.z = -cartesian.z; - result.w = -cartesian.w; - return result; - }; - - /** - * Computes the absolute value of the provided Cartesian. - * - * @param {Cartesian4} cartesian The Cartesian whose absolute value is to be computed. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.abs = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.abs(cartesian.x); - result.y = Math.abs(cartesian.y); - result.z = Math.abs(cartesian.z); - result.w = Math.abs(cartesian.w); - return result; - }; - - const lerpScratch$1 = new Cartesian4(); - /** - * Computes the linear interpolation or extrapolation at t using the provided cartesians. - * - * @param {Cartesian4} start The value corresponding to t at 0.0. - * @param {Cartesian4}end The value corresponding to t at 1.0. - * @param {Number} t The point along t at which to interpolate. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Cartesian4.lerp = function (start, end, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("start", start); - Check.Check.typeOf.object("end", end); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - Cartesian4.multiplyByScalar(end, t, lerpScratch$1); - result = Cartesian4.multiplyByScalar(start, 1.0 - t, result); - return Cartesian4.add(lerpScratch$1, result, result); - }; - - const mostOrthogonalAxisScratch$1 = new Cartesian4(); - /** - * Returns the axis that is most orthogonal to the provided Cartesian. - * - * @param {Cartesian4} cartesian The Cartesian on which to find the most orthogonal axis. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The most orthogonal axis. - */ - Cartesian4.mostOrthogonalAxis = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const f = Cartesian4.normalize(cartesian, mostOrthogonalAxisScratch$1); - Cartesian4.abs(f, f); - - if (f.x <= f.y) { - if (f.x <= f.z) { - if (f.x <= f.w) { - result = Cartesian4.clone(Cartesian4.UNIT_X, result); - } else { - result = Cartesian4.clone(Cartesian4.UNIT_W, result); - } - } else if (f.z <= f.w) { - result = Cartesian4.clone(Cartesian4.UNIT_Z, result); - } else { - result = Cartesian4.clone(Cartesian4.UNIT_W, result); - } - } else if (f.y <= f.z) { - if (f.y <= f.w) { - result = Cartesian4.clone(Cartesian4.UNIT_Y, result); - } else { - result = Cartesian4.clone(Cartesian4.UNIT_W, result); - } - } else if (f.z <= f.w) { - result = Cartesian4.clone(Cartesian4.UNIT_Z, result); - } else { - result = Cartesian4.clone(Cartesian4.UNIT_W, result); - } - - return result; - }; - - /** - * Compares the provided Cartesians componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Cartesian4} [left] The first Cartesian. - * @param {Cartesian4} [right] The second Cartesian. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Cartesian4.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.x === right.x && - left.y === right.y && - left.z === right.z && - left.w === right.w) - ); - }; - - /** - * @private - */ - Cartesian4.equalsArray = function (cartesian, array, offset) { - return ( - cartesian.x === array[offset] && - cartesian.y === array[offset + 1] && - cartesian.z === array[offset + 2] && - cartesian.w === array[offset + 3] - ); - }; - - /** - * Compares the provided Cartesians componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {Cartesian4} [left] The first Cartesian. - * @param {Cartesian4} [right] The second Cartesian. - * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Cartesian4.equalsEpsilon = function ( - left, - right, - relativeEpsilon, - absoluteEpsilon - ) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math$1.CesiumMath.equalsEpsilon( - left.x, - right.x, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - left.y, - right.y, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - left.z, - right.z, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - left.w, - right.w, - relativeEpsilon, - absoluteEpsilon - )) - ); - }; - - /** - * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 0.0). - * - * @type {Cartesian4} - * @constant - */ - Cartesian4.ZERO = Object.freeze(new Cartesian4(0.0, 0.0, 0.0, 0.0)); - - /** - * An immutable Cartesian4 instance initialized to (1.0, 1.0, 1.0, 1.0). - * - * @type {Cartesian4} - * @constant - */ - Cartesian4.ONE = Object.freeze(new Cartesian4(1.0, 1.0, 1.0, 1.0)); - - /** - * An immutable Cartesian4 instance initialized to (1.0, 0.0, 0.0, 0.0). - * - * @type {Cartesian4} - * @constant - */ - Cartesian4.UNIT_X = Object.freeze(new Cartesian4(1.0, 0.0, 0.0, 0.0)); - - /** - * An immutable Cartesian4 instance initialized to (0.0, 1.0, 0.0, 0.0). - * - * @type {Cartesian4} - * @constant - */ - Cartesian4.UNIT_Y = Object.freeze(new Cartesian4(0.0, 1.0, 0.0, 0.0)); - - /** - * An immutable Cartesian4 instance initialized to (0.0, 0.0, 1.0, 0.0). - * - * @type {Cartesian4} - * @constant - */ - Cartesian4.UNIT_Z = Object.freeze(new Cartesian4(0.0, 0.0, 1.0, 0.0)); - - /** - * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 1.0). - * - * @type {Cartesian4} - * @constant - */ - Cartesian4.UNIT_W = Object.freeze(new Cartesian4(0.0, 0.0, 0.0, 1.0)); - - /** - * Duplicates this Cartesian4 instance. - * - * @param {Cartesian4} [result] The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. - */ - Cartesian4.prototype.clone = function (result) { - return Cartesian4.clone(this, result); - }; - - /** - * Compares this Cartesian against the provided Cartesian componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Cartesian4} [right] The right hand side Cartesian. - * @returns {Boolean} true if they are equal, false otherwise. - */ - Cartesian4.prototype.equals = function (right) { - return Cartesian4.equals(this, right); - }; - - /** - * Compares this Cartesian against the provided Cartesian componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {Cartesian4} [right] The right hand side Cartesian. - * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if they are within the provided epsilon, false otherwise. - */ - Cartesian4.prototype.equalsEpsilon = function ( - right, - relativeEpsilon, - absoluteEpsilon - ) { - return Cartesian4.equalsEpsilon( - this, - right, - relativeEpsilon, - absoluteEpsilon - ); - }; - - /** - * Creates a string representing this Cartesian in the format '(x, y, z, w)'. - * - * @returns {String} A string representing the provided Cartesian in the format '(x, y, z, w)'. - */ - Cartesian4.prototype.toString = function () { - return `(${this.x}, ${this.y}, ${this.z}, ${this.w})`; - }; - - // scratchU8Array and scratchF32Array are views into the same buffer - const scratchF32Array = new Float32Array(1); - const scratchU8Array = new Uint8Array(scratchF32Array.buffer); - - const testU32 = new Uint32Array([0x11223344]); - const testU8 = new Uint8Array(testU32.buffer); - const littleEndian = testU8[0] === 0x44; - - /** - * Packs an arbitrary floating point value to 4 values representable using uint8. - * - * @param {Number} value A floating point number. - * @param {Cartesian4} [result] The Cartesian4 that will contain the packed float. - * @returns {Cartesian4} A Cartesian4 representing the float packed to values in x, y, z, and w. - */ - Cartesian4.packFloat = function (value, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("value", value); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Cartesian4(); - } - - // scratchU8Array and scratchF32Array are views into the same buffer - scratchF32Array[0] = value; - - if (littleEndian) { - result.x = scratchU8Array[0]; - result.y = scratchU8Array[1]; - result.z = scratchU8Array[2]; - result.w = scratchU8Array[3]; - } else { - // convert from big-endian to little-endian - result.x = scratchU8Array[3]; - result.y = scratchU8Array[2]; - result.z = scratchU8Array[1]; - result.w = scratchU8Array[0]; - } - return result; - }; - - /** - * Unpacks a float packed using Cartesian4.packFloat. - * - * @param {Cartesian4} packedFloat A Cartesian4 containing a float packed to 4 values representable using uint8. - * @returns {Number} The unpacked float. - * @private - */ - Cartesian4.unpackFloat = function (packedFloat) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("packedFloat", packedFloat); - //>>includeEnd('debug'); - - // scratchU8Array and scratchF32Array are views into the same buffer - if (littleEndian) { - scratchU8Array[0] = packedFloat.x; - scratchU8Array[1] = packedFloat.y; - scratchU8Array[2] = packedFloat.z; - scratchU8Array[3] = packedFloat.w; - } else { - // convert from little-endian to big-endian - scratchU8Array[0] = packedFloat.w; - scratchU8Array[1] = packedFloat.z; - scratchU8Array[2] = packedFloat.y; - scratchU8Array[3] = packedFloat.x; - } - return scratchF32Array[0]; - }; - - /** - * A 4x4 matrix, indexable as a column-major order array. - * Constructor parameters are in row-major order for code readability. - * @alias Matrix4 - * @constructor - * @implements {ArrayLike} - * - * @param {Number} [column0Row0=0.0] The value for column 0, row 0. - * @param {Number} [column1Row0=0.0] The value for column 1, row 0. - * @param {Number} [column2Row0=0.0] The value for column 2, row 0. - * @param {Number} [column3Row0=0.0] The value for column 3, row 0. - * @param {Number} [column0Row1=0.0] The value for column 0, row 1. - * @param {Number} [column1Row1=0.0] The value for column 1, row 1. - * @param {Number} [column2Row1=0.0] The value for column 2, row 1. - * @param {Number} [column3Row1=0.0] The value for column 3, row 1. - * @param {Number} [column0Row2=0.0] The value for column 0, row 2. - * @param {Number} [column1Row2=0.0] The value for column 1, row 2. - * @param {Number} [column2Row2=0.0] The value for column 2, row 2. - * @param {Number} [column3Row2=0.0] The value for column 3, row 2. - * @param {Number} [column0Row3=0.0] The value for column 0, row 3. - * @param {Number} [column1Row3=0.0] The value for column 1, row 3. - * @param {Number} [column2Row3=0.0] The value for column 2, row 3. - * @param {Number} [column3Row3=0.0] The value for column 3, row 3. - * - * @see Matrix4.fromArray - * @see Matrix4.fromColumnMajorArray - * @see Matrix4.fromRowMajorArray - * @see Matrix4.fromRotationTranslation - * @see Matrix4.fromTranslationQuaternionRotationScale - * @see Matrix4.fromTranslationRotationScale - * @see Matrix4.fromTranslation - * @see Matrix4.fromScale - * @see Matrix4.fromUniformScale - * @see Matrix4.fromRotation - * @see Matrix4.fromCamera - * @see Matrix4.computePerspectiveFieldOfView - * @see Matrix4.computeOrthographicOffCenter - * @see Matrix4.computePerspectiveOffCenter - * @see Matrix4.computeInfinitePerspectiveOffCenter - * @see Matrix4.computeViewportTransformation - * @see Matrix4.computeView - * @see Matrix2 - * @see Matrix3 - * @see Packable - */ - function Matrix4( - column0Row0, - column1Row0, - column2Row0, - column3Row0, - column0Row1, - column1Row1, - column2Row1, - column3Row1, - column0Row2, - column1Row2, - column2Row2, - column3Row2, - column0Row3, - column1Row3, - column2Row3, - column3Row3 - ) { - this[0] = defaultValue.defaultValue(column0Row0, 0.0); - this[1] = defaultValue.defaultValue(column0Row1, 0.0); - this[2] = defaultValue.defaultValue(column0Row2, 0.0); - this[3] = defaultValue.defaultValue(column0Row3, 0.0); - this[4] = defaultValue.defaultValue(column1Row0, 0.0); - this[5] = defaultValue.defaultValue(column1Row1, 0.0); - this[6] = defaultValue.defaultValue(column1Row2, 0.0); - this[7] = defaultValue.defaultValue(column1Row3, 0.0); - this[8] = defaultValue.defaultValue(column2Row0, 0.0); - this[9] = defaultValue.defaultValue(column2Row1, 0.0); - this[10] = defaultValue.defaultValue(column2Row2, 0.0); - this[11] = defaultValue.defaultValue(column2Row3, 0.0); - this[12] = defaultValue.defaultValue(column3Row0, 0.0); - this[13] = defaultValue.defaultValue(column3Row1, 0.0); - this[14] = defaultValue.defaultValue(column3Row2, 0.0); - this[15] = defaultValue.defaultValue(column3Row3, 0.0); - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Matrix4.packedLength = 16; - - /** - * Stores the provided instance into the provided array. - * - * @param {Matrix4} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Matrix4.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value[0]; - array[startingIndex++] = value[1]; - array[startingIndex++] = value[2]; - array[startingIndex++] = value[3]; - array[startingIndex++] = value[4]; - array[startingIndex++] = value[5]; - array[startingIndex++] = value[6]; - array[startingIndex++] = value[7]; - array[startingIndex++] = value[8]; - array[startingIndex++] = value[9]; - array[startingIndex++] = value[10]; - array[startingIndex++] = value[11]; - array[startingIndex++] = value[12]; - array[startingIndex++] = value[13]; - array[startingIndex++] = value[14]; - array[startingIndex] = value[15]; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Matrix4} [result] The object into which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. - */ - Matrix4.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new Matrix4(); - } - - result[0] = array[startingIndex++]; - result[1] = array[startingIndex++]; - result[2] = array[startingIndex++]; - result[3] = array[startingIndex++]; - result[4] = array[startingIndex++]; - result[5] = array[startingIndex++]; - result[6] = array[startingIndex++]; - result[7] = array[startingIndex++]; - result[8] = array[startingIndex++]; - result[9] = array[startingIndex++]; - result[10] = array[startingIndex++]; - result[11] = array[startingIndex++]; - result[12] = array[startingIndex++]; - result[13] = array[startingIndex++]; - result[14] = array[startingIndex++]; - result[15] = array[startingIndex]; - return result; - }; - - /** - * Flattens an array of Matrix4s into an array of components. The components - * are stored in column-major order. - * - * @param {Matrix4[]} array The array of matrices to pack. - * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 16 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 16) elements. - * @returns {Number[]} The packed array. - */ - Matrix4.packArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - const length = array.length; - const resultLength = length * 16; - if (!defaultValue.defined(result)) { - result = new Array(resultLength); - } else if (!Array.isArray(result) && result.length !== resultLength) { - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "If result is a typed array, it must have exactly array.length * 16 elements" - ); - //>>includeEnd('debug'); - } else if (result.length !== resultLength) { - result.length = resultLength; - } - - for (let i = 0; i < length; ++i) { - Matrix4.pack(array[i], result, i * 16); - } - return result; - }; - - /** - * Unpacks an array of column-major matrix components into an array of Matrix4s. - * - * @param {Number[]} array The array of components to unpack. - * @param {Matrix4[]} [result] The array onto which to store the result. - * @returns {Matrix4[]} The unpacked array. - */ - Matrix4.unpackArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - Check.Check.typeOf.number.greaterThanOrEquals("array.length", array.length, 16); - if (array.length % 16 !== 0) { - throw new Check.DeveloperError("array length must be a multiple of 16."); - } - //>>includeEnd('debug'); - - const length = array.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 16); - } else { - result.length = length / 16; - } - - for (let i = 0; i < length; i += 16) { - const index = i / 16; - result[index] = Matrix4.unpack(array, i, result[index]); - } - return result; - }; - - /** - * Duplicates a Matrix4 instance. - * - * @param {Matrix4} matrix The matrix to duplicate. - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. (Returns undefined if matrix is undefined) - */ - Matrix4.clone = function (matrix, result) { - if (!defaultValue.defined(matrix)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new Matrix4( - matrix[0], - matrix[4], - matrix[8], - matrix[12], - matrix[1], - matrix[5], - matrix[9], - matrix[13], - matrix[2], - matrix[6], - matrix[10], - matrix[14], - matrix[3], - matrix[7], - matrix[11], - matrix[15] - ); - } - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[3]; - result[4] = matrix[4]; - result[5] = matrix[5]; - result[6] = matrix[6]; - result[7] = matrix[7]; - result[8] = matrix[8]; - result[9] = matrix[9]; - result[10] = matrix[10]; - result[11] = matrix[11]; - result[12] = matrix[12]; - result[13] = matrix[13]; - result[14] = matrix[14]; - result[15] = matrix[15]; - return result; - }; - - /** - * Creates a Matrix4 from 16 consecutive elements in an array. - * @function - * - * @param {Number[]} array The array whose 16 consecutive elements correspond to the positions of the matrix. Assumes column-major order. - * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix. - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. - * - * @example - * // Create the Matrix4: - * // [1.0, 2.0, 3.0, 4.0] - * // [1.0, 2.0, 3.0, 4.0] - * // [1.0, 2.0, 3.0, 4.0] - * // [1.0, 2.0, 3.0, 4.0] - * - * const v = [1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0]; - * const m = Cesium.Matrix4.fromArray(v); - * - * // Create same Matrix4 with using an offset into an array - * const v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0]; - * const m2 = Cesium.Matrix4.fromArray(v2, 2); - */ - Matrix4.fromArray = Matrix4.unpack; - - /** - * Computes a Matrix4 instance from a column-major order array. - * - * @param {Number[]} values The column-major order array. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - */ - Matrix4.fromColumnMajorArray = function (values, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("values", values); - //>>includeEnd('debug'); - - return Matrix4.clone(values, result); - }; - - /** - * Computes a Matrix4 instance from a row-major order array. - * The resulting matrix will be in column-major order. - * - * @param {Number[]} values The row-major order array. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - */ - Matrix4.fromRowMajorArray = function (values, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("values", values); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix4( - values[0], - values[1], - values[2], - values[3], - values[4], - values[5], - values[6], - values[7], - values[8], - values[9], - values[10], - values[11], - values[12], - values[13], - values[14], - values[15] - ); - } - result[0] = values[0]; - result[1] = values[4]; - result[2] = values[8]; - result[3] = values[12]; - result[4] = values[1]; - result[5] = values[5]; - result[6] = values[9]; - result[7] = values[13]; - result[8] = values[2]; - result[9] = values[6]; - result[10] = values[10]; - result[11] = values[14]; - result[12] = values[3]; - result[13] = values[7]; - result[14] = values[11]; - result[15] = values[15]; - return result; - }; - - /** - * Computes a Matrix4 instance from a Matrix3 representing the rotation - * and a Cartesian3 representing the translation. - * - * @param {Matrix3} rotation The upper left portion of the matrix representing the rotation. - * @param {Cartesian3} [translation=Cartesian3.ZERO] The upper right portion of the matrix representing the translation. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - */ - Matrix4.fromRotationTranslation = function (rotation, translation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rotation", rotation); - //>>includeEnd('debug'); - - translation = defaultValue.defaultValue(translation, Matrix3.Cartesian3.ZERO); - - if (!defaultValue.defined(result)) { - return new Matrix4( - rotation[0], - rotation[3], - rotation[6], - translation.x, - rotation[1], - rotation[4], - rotation[7], - translation.y, - rotation[2], - rotation[5], - rotation[8], - translation.z, - 0.0, - 0.0, - 0.0, - 1.0 - ); - } - - result[0] = rotation[0]; - result[1] = rotation[1]; - result[2] = rotation[2]; - result[3] = 0.0; - result[4] = rotation[3]; - result[5] = rotation[4]; - result[6] = rotation[5]; - result[7] = 0.0; - result[8] = rotation[6]; - result[9] = rotation[7]; - result[10] = rotation[8]; - result[11] = 0.0; - result[12] = translation.x; - result[13] = translation.y; - result[14] = translation.z; - result[15] = 1.0; - return result; - }; - - /** - * Computes a Matrix4 instance from a translation, rotation, and scale (TRS) - * representation with the rotation represented as a quaternion. - * - * @param {Cartesian3} translation The translation transformation. - * @param {Quaternion} rotation The rotation transformation. - * @param {Cartesian3} scale The non-uniform scale transformation. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - * - * @example - * const result = Cesium.Matrix4.fromTranslationQuaternionRotationScale( - * new Cesium.Cartesian3(1.0, 2.0, 3.0), // translation - * Cesium.Quaternion.IDENTITY, // rotation - * new Cesium.Cartesian3(7.0, 8.0, 9.0), // scale - * result); - */ - Matrix4.fromTranslationQuaternionRotationScale = function ( - translation, - rotation, - scale, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("translation", translation); - Check.Check.typeOf.object("rotation", rotation); - Check.Check.typeOf.object("scale", scale); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix4(); - } - - const scaleX = scale.x; - const scaleY = scale.y; - const scaleZ = scale.z; - - const x2 = rotation.x * rotation.x; - const xy = rotation.x * rotation.y; - const xz = rotation.x * rotation.z; - const xw = rotation.x * rotation.w; - const y2 = rotation.y * rotation.y; - const yz = rotation.y * rotation.z; - const yw = rotation.y * rotation.w; - const z2 = rotation.z * rotation.z; - const zw = rotation.z * rotation.w; - const w2 = rotation.w * rotation.w; - - const m00 = x2 - y2 - z2 + w2; - const m01 = 2.0 * (xy - zw); - const m02 = 2.0 * (xz + yw); - - const m10 = 2.0 * (xy + zw); - const m11 = -x2 + y2 - z2 + w2; - const m12 = 2.0 * (yz - xw); - - const m20 = 2.0 * (xz - yw); - const m21 = 2.0 * (yz + xw); - const m22 = -x2 - y2 + z2 + w2; - - result[0] = m00 * scaleX; - result[1] = m10 * scaleX; - result[2] = m20 * scaleX; - result[3] = 0.0; - result[4] = m01 * scaleY; - result[5] = m11 * scaleY; - result[6] = m21 * scaleY; - result[7] = 0.0; - result[8] = m02 * scaleZ; - result[9] = m12 * scaleZ; - result[10] = m22 * scaleZ; - result[11] = 0.0; - result[12] = translation.x; - result[13] = translation.y; - result[14] = translation.z; - result[15] = 1.0; - - return result; - }; - - /** - * Creates a Matrix4 instance from a {@link TranslationRotationScale} instance. - * - * @param {TranslationRotationScale} translationRotationScale The instance. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - */ - Matrix4.fromTranslationRotationScale = function ( - translationRotationScale, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("translationRotationScale", translationRotationScale); - //>>includeEnd('debug'); - - return Matrix4.fromTranslationQuaternionRotationScale( - translationRotationScale.translation, - translationRotationScale.rotation, - translationRotationScale.scale, - result - ); - }; - - /** - * Creates a Matrix4 instance from a Cartesian3 representing the translation. - * - * @param {Cartesian3} translation The upper right portion of the matrix representing the translation. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - * - * @see Matrix4.multiplyByTranslation - */ - Matrix4.fromTranslation = function (translation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("translation", translation); - //>>includeEnd('debug'); - - return Matrix4.fromRotationTranslation(Matrix3.Matrix3.IDENTITY, translation, result); - }; - - /** - * Computes a Matrix4 instance representing a non-uniform scale. - * - * @param {Cartesian3} scale The x, y, and z scale factors. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - * - * @example - * // Creates - * // [7.0, 0.0, 0.0, 0.0] - * // [0.0, 8.0, 0.0, 0.0] - * // [0.0, 0.0, 9.0, 0.0] - * // [0.0, 0.0, 0.0, 1.0] - * const m = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0)); - */ - Matrix4.fromScale = function (scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("scale", scale); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix4( - scale.x, - 0.0, - 0.0, - 0.0, - 0.0, - scale.y, - 0.0, - 0.0, - 0.0, - 0.0, - scale.z, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0 - ); - } - - result[0] = scale.x; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = 0.0; - result[5] = scale.y; - result[6] = 0.0; - result[7] = 0.0; - result[8] = 0.0; - result[9] = 0.0; - result[10] = scale.z; - result[11] = 0.0; - result[12] = 0.0; - result[13] = 0.0; - result[14] = 0.0; - result[15] = 1.0; - return result; - }; - - /** - * Computes a Matrix4 instance representing a uniform scale. - * - * @param {Number} scale The uniform scale factor. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - * - * @example - * // Creates - * // [2.0, 0.0, 0.0, 0.0] - * // [0.0, 2.0, 0.0, 0.0] - * // [0.0, 0.0, 2.0, 0.0] - * // [0.0, 0.0, 0.0, 1.0] - * const m = Cesium.Matrix4.fromUniformScale(2.0); - */ - Matrix4.fromUniformScale = function (scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("scale", scale); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix4( - scale, - 0.0, - 0.0, - 0.0, - 0.0, - scale, - 0.0, - 0.0, - 0.0, - 0.0, - scale, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0 - ); - } - - result[0] = scale; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = 0.0; - result[5] = scale; - result[6] = 0.0; - result[7] = 0.0; - result[8] = 0.0; - result[9] = 0.0; - result[10] = scale; - result[11] = 0.0; - result[12] = 0.0; - result[13] = 0.0; - result[14] = 0.0; - result[15] = 1.0; - return result; - }; - - /** - * Creates a rotation matrix. - * - * @param {Matrix3} rotation The rotation matrix. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - */ - Matrix4.fromRotation = function (rotation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rotation", rotation); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix4(); - } - result[0] = rotation[0]; - result[1] = rotation[1]; - result[2] = rotation[2]; - result[3] = 0.0; - - result[4] = rotation[3]; - result[5] = rotation[4]; - result[6] = rotation[5]; - result[7] = 0.0; - - result[8] = rotation[6]; - result[9] = rotation[7]; - result[10] = rotation[8]; - result[11] = 0.0; - - result[12] = 0.0; - result[13] = 0.0; - result[14] = 0.0; - result[15] = 1.0; - - return result; - }; - - const fromCameraF = new Matrix3.Cartesian3(); - const fromCameraR = new Matrix3.Cartesian3(); - const fromCameraU = new Matrix3.Cartesian3(); - - /** - * Computes a Matrix4 instance from a Camera. - * - * @param {Camera} camera The camera to use. - * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided. - */ - Matrix4.fromCamera = function (camera, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("camera", camera); - //>>includeEnd('debug'); - - const position = camera.position; - const direction = camera.direction; - const up = camera.up; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("camera.position", position); - Check.Check.typeOf.object("camera.direction", direction); - Check.Check.typeOf.object("camera.up", up); - //>>includeEnd('debug'); - - Matrix3.Cartesian3.normalize(direction, fromCameraF); - Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(fromCameraF, up, fromCameraR), - fromCameraR - ); - Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(fromCameraR, fromCameraF, fromCameraU), - fromCameraU - ); - - const sX = fromCameraR.x; - const sY = fromCameraR.y; - const sZ = fromCameraR.z; - const fX = fromCameraF.x; - const fY = fromCameraF.y; - const fZ = fromCameraF.z; - const uX = fromCameraU.x; - const uY = fromCameraU.y; - const uZ = fromCameraU.z; - const positionX = position.x; - const positionY = position.y; - const positionZ = position.z; - const t0 = sX * -positionX + sY * -positionY + sZ * -positionZ; - const t1 = uX * -positionX + uY * -positionY + uZ * -positionZ; - const t2 = fX * positionX + fY * positionY + fZ * positionZ; - - // The code below this comment is an optimized - // version of the commented lines. - // Rather that create two matrices and then multiply, - // we just bake in the multiplcation as part of creation. - // const rotation = new Matrix4( - // sX, sY, sZ, 0.0, - // uX, uY, uZ, 0.0, - // -fX, -fY, -fZ, 0.0, - // 0.0, 0.0, 0.0, 1.0); - // const translation = new Matrix4( - // 1.0, 0.0, 0.0, -position.x, - // 0.0, 1.0, 0.0, -position.y, - // 0.0, 0.0, 1.0, -position.z, - // 0.0, 0.0, 0.0, 1.0); - // return rotation.multiply(translation); - if (!defaultValue.defined(result)) { - return new Matrix4( - sX, - sY, - sZ, - t0, - uX, - uY, - uZ, - t1, - -fX, - -fY, - -fZ, - t2, - 0.0, - 0.0, - 0.0, - 1.0 - ); - } - result[0] = sX; - result[1] = uX; - result[2] = -fX; - result[3] = 0.0; - result[4] = sY; - result[5] = uY; - result[6] = -fY; - result[7] = 0.0; - result[8] = sZ; - result[9] = uZ; - result[10] = -fZ; - result[11] = 0.0; - result[12] = t0; - result[13] = t1; - result[14] = t2; - result[15] = 1.0; - return result; - }; - - /** - * Computes a Matrix4 instance representing a perspective transformation matrix. - * - * @param {Number} fovY The field of view along the Y axis in radians. - * @param {Number} aspectRatio The aspect ratio. - * @param {Number} near The distance to the near plane in meters. - * @param {Number} far The distance to the far plane in meters. - * @param {Matrix4} result The object in which the result will be stored. - * @returns {Matrix4} The modified result parameter. - * - * @exception {DeveloperError} fovY must be in (0, PI]. - * @exception {DeveloperError} aspectRatio must be greater than zero. - * @exception {DeveloperError} near must be greater than zero. - * @exception {DeveloperError} far must be greater than zero. - */ - Matrix4.computePerspectiveFieldOfView = function ( - fovY, - aspectRatio, - near, - far, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThan("fovY", fovY, 0.0); - Check.Check.typeOf.number.lessThan("fovY", fovY, Math.PI); - Check.Check.typeOf.number.greaterThan("near", near, 0.0); - Check.Check.typeOf.number.greaterThan("far", far, 0.0); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const bottom = Math.tan(fovY * 0.5); - - const column1Row1 = 1.0 / bottom; - const column0Row0 = column1Row1 / aspectRatio; - const column2Row2 = (far + near) / (near - far); - const column3Row2 = (2.0 * far * near) / (near - far); - - result[0] = column0Row0; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = 0.0; - result[5] = column1Row1; - result[6] = 0.0; - result[7] = 0.0; - result[8] = 0.0; - result[9] = 0.0; - result[10] = column2Row2; - result[11] = -1.0; - result[12] = 0.0; - result[13] = 0.0; - result[14] = column3Row2; - result[15] = 0.0; - return result; - }; - - /** - * Computes a Matrix4 instance representing an orthographic transformation matrix. - * - * @param {Number} left The number of meters to the left of the camera that will be in view. - * @param {Number} right The number of meters to the right of the camera that will be in view. - * @param {Number} bottom The number of meters below of the camera that will be in view. - * @param {Number} top The number of meters above of the camera that will be in view. - * @param {Number} near The distance to the near plane in meters. - * @param {Number} far The distance to the far plane in meters. - * @param {Matrix4} result The object in which the result will be stored. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.computeOrthographicOffCenter = function ( - left, - right, - bottom, - top, - near, - far, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("left", left); - Check.Check.typeOf.number("right", right); - Check.Check.typeOf.number("bottom", bottom); - Check.Check.typeOf.number("top", top); - Check.Check.typeOf.number("near", near); - Check.Check.typeOf.number("far", far); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - let a = 1.0 / (right - left); - let b = 1.0 / (top - bottom); - let c = 1.0 / (far - near); - - const tx = -(right + left) * a; - const ty = -(top + bottom) * b; - const tz = -(far + near) * c; - a *= 2.0; - b *= 2.0; - c *= -2.0; - - result[0] = a; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = 0.0; - result[5] = b; - result[6] = 0.0; - result[7] = 0.0; - result[8] = 0.0; - result[9] = 0.0; - result[10] = c; - result[11] = 0.0; - result[12] = tx; - result[13] = ty; - result[14] = tz; - result[15] = 1.0; - return result; - }; - - /** - * Computes a Matrix4 instance representing an off center perspective transformation. - * - * @param {Number} left The number of meters to the left of the camera that will be in view. - * @param {Number} right The number of meters to the right of the camera that will be in view. - * @param {Number} bottom The number of meters below of the camera that will be in view. - * @param {Number} top The number of meters above of the camera that will be in view. - * @param {Number} near The distance to the near plane in meters. - * @param {Number} far The distance to the far plane in meters. - * @param {Matrix4} result The object in which the result will be stored. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.computePerspectiveOffCenter = function ( - left, - right, - bottom, - top, - near, - far, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("left", left); - Check.Check.typeOf.number("right", right); - Check.Check.typeOf.number("bottom", bottom); - Check.Check.typeOf.number("top", top); - Check.Check.typeOf.number("near", near); - Check.Check.typeOf.number("far", far); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const column0Row0 = (2.0 * near) / (right - left); - const column1Row1 = (2.0 * near) / (top - bottom); - const column2Row0 = (right + left) / (right - left); - const column2Row1 = (top + bottom) / (top - bottom); - const column2Row2 = -(far + near) / (far - near); - const column2Row3 = -1.0; - const column3Row2 = (-2.0 * far * near) / (far - near); - - result[0] = column0Row0; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = 0.0; - result[5] = column1Row1; - result[6] = 0.0; - result[7] = 0.0; - result[8] = column2Row0; - result[9] = column2Row1; - result[10] = column2Row2; - result[11] = column2Row3; - result[12] = 0.0; - result[13] = 0.0; - result[14] = column3Row2; - result[15] = 0.0; - return result; - }; - - /** - * Computes a Matrix4 instance representing an infinite off center perspective transformation. - * - * @param {Number} left The number of meters to the left of the camera that will be in view. - * @param {Number} right The number of meters to the right of the camera that will be in view. - * @param {Number} bottom The number of meters below of the camera that will be in view. - * @param {Number} top The number of meters above of the camera that will be in view. - * @param {Number} near The distance to the near plane in meters. - * @param {Matrix4} result The object in which the result will be stored. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.computeInfinitePerspectiveOffCenter = function ( - left, - right, - bottom, - top, - near, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("left", left); - Check.Check.typeOf.number("right", right); - Check.Check.typeOf.number("bottom", bottom); - Check.Check.typeOf.number("top", top); - Check.Check.typeOf.number("near", near); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const column0Row0 = (2.0 * near) / (right - left); - const column1Row1 = (2.0 * near) / (top - bottom); - const column2Row0 = (right + left) / (right - left); - const column2Row1 = (top + bottom) / (top - bottom); - const column2Row2 = -1.0; - const column2Row3 = -1.0; - const column3Row2 = -2.0 * near; - - result[0] = column0Row0; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = 0.0; - result[5] = column1Row1; - result[6] = 0.0; - result[7] = 0.0; - result[8] = column2Row0; - result[9] = column2Row1; - result[10] = column2Row2; - result[11] = column2Row3; - result[12] = 0.0; - result[13] = 0.0; - result[14] = column3Row2; - result[15] = 0.0; - return result; - }; - - /** - * Computes a Matrix4 instance that transforms from normalized device coordinates to window coordinates. - * - * @param {Object} [viewport = { x : 0.0, y : 0.0, width : 0.0, height : 0.0 }] The viewport's corners as shown in Example 1. - * @param {Number} [nearDepthRange=0.0] The near plane distance in window coordinates. - * @param {Number} [farDepthRange=1.0] The far plane distance in window coordinates. - * @param {Matrix4} [result] The object in which the result will be stored. - * @returns {Matrix4} The modified result parameter. - * - * @example - * // Create viewport transformation using an explicit viewport and depth range. - * const m = Cesium.Matrix4.computeViewportTransformation({ - * x : 0.0, - * y : 0.0, - * width : 1024.0, - * height : 768.0 - * }, 0.0, 1.0, new Cesium.Matrix4()); - */ - Matrix4.computeViewportTransformation = function ( - viewport, - nearDepthRange, - farDepthRange, - result - ) { - if (!defaultValue.defined(result)) { - result = new Matrix4(); - } - - viewport = defaultValue.defaultValue(viewport, defaultValue.defaultValue.EMPTY_OBJECT); - const x = defaultValue.defaultValue(viewport.x, 0.0); - const y = defaultValue.defaultValue(viewport.y, 0.0); - const width = defaultValue.defaultValue(viewport.width, 0.0); - const height = defaultValue.defaultValue(viewport.height, 0.0); - nearDepthRange = defaultValue.defaultValue(nearDepthRange, 0.0); - farDepthRange = defaultValue.defaultValue(farDepthRange, 1.0); - - const halfWidth = width * 0.5; - const halfHeight = height * 0.5; - const halfDepth = (farDepthRange - nearDepthRange) * 0.5; - - const column0Row0 = halfWidth; - const column1Row1 = halfHeight; - const column2Row2 = halfDepth; - const column3Row0 = x + halfWidth; - const column3Row1 = y + halfHeight; - const column3Row2 = nearDepthRange + halfDepth; - const column3Row3 = 1.0; - - result[0] = column0Row0; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = 0.0; - result[5] = column1Row1; - result[6] = 0.0; - result[7] = 0.0; - result[8] = 0.0; - result[9] = 0.0; - result[10] = column2Row2; - result[11] = 0.0; - result[12] = column3Row0; - result[13] = column3Row1; - result[14] = column3Row2; - result[15] = column3Row3; - - return result; - }; - - /** - * Computes a Matrix4 instance that transforms from world space to view space. - * - * @param {Cartesian3} position The position of the camera. - * @param {Cartesian3} direction The forward direction. - * @param {Cartesian3} up The up direction. - * @param {Cartesian3} right The right direction. - * @param {Matrix4} result The object in which the result will be stored. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.computeView = function (position, direction, up, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("position", position); - Check.Check.typeOf.object("direction", direction); - Check.Check.typeOf.object("up", up); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = right.x; - result[1] = up.x; - result[2] = -direction.x; - result[3] = 0.0; - result[4] = right.y; - result[5] = up.y; - result[6] = -direction.y; - result[7] = 0.0; - result[8] = right.z; - result[9] = up.z; - result[10] = -direction.z; - result[11] = 0.0; - result[12] = -Matrix3.Cartesian3.dot(right, position); - result[13] = -Matrix3.Cartesian3.dot(up, position); - result[14] = Matrix3.Cartesian3.dot(direction, position); - result[15] = 1.0; - return result; - }; - - /** - * Computes an Array from the provided Matrix4 instance. - * The array will be in column-major order. - * - * @param {Matrix4} matrix The matrix to use.. - * @param {Number[]} [result] The Array onto which to store the result. - * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided. - * - * @example - * //create an array from an instance of Matrix4 - * // m = [10.0, 14.0, 18.0, 22.0] - * // [11.0, 15.0, 19.0, 23.0] - * // [12.0, 16.0, 20.0, 24.0] - * // [13.0, 17.0, 21.0, 25.0] - * const a = Cesium.Matrix4.toArray(m); - * - * // m remains the same - * //creates a = [10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0] - */ - Matrix4.toArray = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return [ - matrix[0], - matrix[1], - matrix[2], - matrix[3], - matrix[4], - matrix[5], - matrix[6], - matrix[7], - matrix[8], - matrix[9], - matrix[10], - matrix[11], - matrix[12], - matrix[13], - matrix[14], - matrix[15], - ]; - } - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[3]; - result[4] = matrix[4]; - result[5] = matrix[5]; - result[6] = matrix[6]; - result[7] = matrix[7]; - result[8] = matrix[8]; - result[9] = matrix[9]; - result[10] = matrix[10]; - result[11] = matrix[11]; - result[12] = matrix[12]; - result[13] = matrix[13]; - result[14] = matrix[14]; - result[15] = matrix[15]; - return result; - }; - - /** - * Computes the array index of the element at the provided row and column. - * - * @param {Number} row The zero-based index of the row. - * @param {Number} column The zero-based index of the column. - * @returns {Number} The index of the element at the provided row and column. - * - * @exception {DeveloperError} row must be 0, 1, 2, or 3. - * @exception {DeveloperError} column must be 0, 1, 2, or 3. - * - * @example - * const myMatrix = new Cesium.Matrix4(); - * const column1Row0Index = Cesium.Matrix4.getElementIndex(1, 0); - * const column1Row0 = myMatrix[column1Row0Index]; - * myMatrix[column1Row0Index] = 10.0; - */ - Matrix4.getElementIndex = function (column, row) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThanOrEquals("row", row, 0); - Check.Check.typeOf.number.lessThanOrEquals("row", row, 3); - - Check.Check.typeOf.number.greaterThanOrEquals("column", column, 0); - Check.Check.typeOf.number.lessThanOrEquals("column", column, 3); - //>>includeEnd('debug'); - - return column * 4 + row; - }; - - /** - * Retrieves a copy of the matrix column at the provided index as a Cartesian4 instance. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Number} index The zero-based index of the column to retrieve. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - * - * @exception {DeveloperError} index must be 0, 1, 2, or 3. - * - * @example - * //returns a Cartesian4 instance with values from the specified column - * // m = [10.0, 11.0, 12.0, 13.0] - * // [14.0, 15.0, 16.0, 17.0] - * // [18.0, 19.0, 20.0, 21.0] - * // [22.0, 23.0, 24.0, 25.0] - * - * //Example 1: Creates an instance of Cartesian - * const a = Cesium.Matrix4.getColumn(m, 2, new Cesium.Cartesian4()); - * - * @example - * //Example 2: Sets values for Cartesian instance - * const a = new Cesium.Cartesian4(); - * Cesium.Matrix4.getColumn(m, 2, a); - * - * // a.x = 12.0; a.y = 16.0; a.z = 20.0; a.w = 24.0; - */ - Matrix4.getColumn = function (matrix, index, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 3); - - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const startIndex = index * 4; - const x = matrix[startIndex]; - const y = matrix[startIndex + 1]; - const z = matrix[startIndex + 2]; - const w = matrix[startIndex + 3]; - - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - }; - - /** - * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian4 instance. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Number} index The zero-based index of the column to set. - * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified column. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @exception {DeveloperError} index must be 0, 1, 2, or 3. - * - * @example - * //creates a new Matrix4 instance with new column values from the Cartesian4 instance - * // m = [10.0, 11.0, 12.0, 13.0] - * // [14.0, 15.0, 16.0, 17.0] - * // [18.0, 19.0, 20.0, 21.0] - * // [22.0, 23.0, 24.0, 25.0] - * - * const a = Cesium.Matrix4.setColumn(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4()); - * - * // m remains the same - * // a = [10.0, 11.0, 99.0, 13.0] - * // [14.0, 15.0, 98.0, 17.0] - * // [18.0, 19.0, 97.0, 21.0] - * // [22.0, 23.0, 96.0, 25.0] - */ - Matrix4.setColumn = function (matrix, index, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 3); - - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result = Matrix4.clone(matrix, result); - const startIndex = index * 4; - result[startIndex] = cartesian.x; - result[startIndex + 1] = cartesian.y; - result[startIndex + 2] = cartesian.z; - result[startIndex + 3] = cartesian.w; - return result; - }; - - /** - * Retrieves a copy of the matrix row at the provided index as a Cartesian4 instance. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Number} index The zero-based index of the row to retrieve. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - * - * @exception {DeveloperError} index must be 0, 1, 2, or 3. - * - * @example - * //returns a Cartesian4 instance with values from the specified column - * // m = [10.0, 11.0, 12.0, 13.0] - * // [14.0, 15.0, 16.0, 17.0] - * // [18.0, 19.0, 20.0, 21.0] - * // [22.0, 23.0, 24.0, 25.0] - * - * //Example 1: Returns an instance of Cartesian - * const a = Cesium.Matrix4.getRow(m, 2, new Cesium.Cartesian4()); - * - * @example - * //Example 2: Sets values for a Cartesian instance - * const a = new Cesium.Cartesian4(); - * Cesium.Matrix4.getRow(m, 2, a); - * - * // a.x = 18.0; a.y = 19.0; a.z = 20.0; a.w = 21.0; - */ - Matrix4.getRow = function (matrix, index, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 3); - - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const x = matrix[index]; - const y = matrix[index + 4]; - const z = matrix[index + 8]; - const w = matrix[index + 12]; - - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - }; - - /** - * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian4 instance. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Number} index The zero-based index of the row to set. - * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified row. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @exception {DeveloperError} index must be 0, 1, 2, or 3. - * - * @example - * //create a new Matrix4 instance with new row values from the Cartesian4 instance - * // m = [10.0, 11.0, 12.0, 13.0] - * // [14.0, 15.0, 16.0, 17.0] - * // [18.0, 19.0, 20.0, 21.0] - * // [22.0, 23.0, 24.0, 25.0] - * - * const a = Cesium.Matrix4.setRow(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4()); - * - * // m remains the same - * // a = [10.0, 11.0, 12.0, 13.0] - * // [14.0, 15.0, 16.0, 17.0] - * // [99.0, 98.0, 97.0, 96.0] - * // [22.0, 23.0, 24.0, 25.0] - */ - Matrix4.setRow = function (matrix, index, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 3); - - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result = Matrix4.clone(matrix, result); - result[index] = cartesian.x; - result[index + 4] = cartesian.y; - result[index + 8] = cartesian.z; - result[index + 12] = cartesian.w; - return result; - }; - - /** - * Computes a new matrix that replaces the translation in the rightmost column of the provided - * matrix with the provided translation. This assumes the matrix is an affine transformation. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Cartesian3} translation The translation that replaces the translation of the provided matrix. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.setTranslation = function (matrix, translation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("translation", translation); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[3]; - - result[4] = matrix[4]; - result[5] = matrix[5]; - result[6] = matrix[6]; - result[7] = matrix[7]; - - result[8] = matrix[8]; - result[9] = matrix[9]; - result[10] = matrix[10]; - result[11] = matrix[11]; - - result[12] = translation.x; - result[13] = translation.y; - result[14] = translation.z; - result[15] = matrix[15]; - - return result; - }; - - const scaleScratch1$1 = new Matrix3.Cartesian3(); - - /** - * Computes a new matrix that replaces the scale with the provided scale. - * This assumes the matrix is an affine transformation. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Cartesian3} scale The scale that replaces the scale of the provided matrix. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @see Matrix4.setUniformScale - * @see Matrix4.fromScale - * @see Matrix4.fromUniformScale - * @see Matrix4.multiplyByScale - * @see Matrix4.multiplyByUniformScale - * @see Matrix4.getScale - */ - Matrix4.setScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const existingScale = Matrix4.getScale(matrix, scaleScratch1$1); - const scaleRatioX = scale.x / existingScale.x; - const scaleRatioY = scale.y / existingScale.y; - const scaleRatioZ = scale.z / existingScale.z; - - result[0] = matrix[0] * scaleRatioX; - result[1] = matrix[1] * scaleRatioX; - result[2] = matrix[2] * scaleRatioX; - result[3] = matrix[3]; - - result[4] = matrix[4] * scaleRatioY; - result[5] = matrix[5] * scaleRatioY; - result[6] = matrix[6] * scaleRatioY; - result[7] = matrix[7]; - - result[8] = matrix[8] * scaleRatioZ; - result[9] = matrix[9] * scaleRatioZ; - result[10] = matrix[10] * scaleRatioZ; - result[11] = matrix[11]; - - result[12] = matrix[12]; - result[13] = matrix[13]; - result[14] = matrix[14]; - result[15] = matrix[15]; - - return result; - }; - - const scaleScratch2$1 = new Matrix3.Cartesian3(); - - /** - * Computes a new matrix that replaces the scale with the provided uniform scale. - * This assumes the matrix is an affine transformation. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Number} scale The uniform scale that replaces the scale of the provided matrix. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @see Matrix4.setScale - * @see Matrix4.fromScale - * @see Matrix4.fromUniformScale - * @see Matrix4.multiplyByScale - * @see Matrix4.multiplyByUniformScale - * @see Matrix4.getScale - */ - Matrix4.setUniformScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const existingScale = Matrix4.getScale(matrix, scaleScratch2$1); - const scaleRatioX = scale / existingScale.x; - const scaleRatioY = scale / existingScale.y; - const scaleRatioZ = scale / existingScale.z; - - result[0] = matrix[0] * scaleRatioX; - result[1] = matrix[1] * scaleRatioX; - result[2] = matrix[2] * scaleRatioX; - result[3] = matrix[3]; - - result[4] = matrix[4] * scaleRatioY; - result[5] = matrix[5] * scaleRatioY; - result[6] = matrix[6] * scaleRatioY; - result[7] = matrix[7]; - - result[8] = matrix[8] * scaleRatioZ; - result[9] = matrix[9] * scaleRatioZ; - result[10] = matrix[10] * scaleRatioZ; - result[11] = matrix[11]; - - result[12] = matrix[12]; - result[13] = matrix[13]; - result[14] = matrix[14]; - result[15] = matrix[15]; - - return result; - }; - - const scratchColumn$1 = new Matrix3.Cartesian3(); - - /** - * Extracts the non-uniform scale assuming the matrix is an affine transformation. - * - * @param {Matrix4} matrix The matrix. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter - * - * @see Matrix4.multiplyByScale - * @see Matrix4.multiplyByUniformScale - * @see Matrix4.fromScale - * @see Matrix4.fromUniformScale - * @see Matrix4.setScale - * @see Matrix4.setUniformScale - */ - Matrix4.getScale = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.fromElements(matrix[0], matrix[1], matrix[2], scratchColumn$1) - ); - result.y = Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.fromElements(matrix[4], matrix[5], matrix[6], scratchColumn$1) - ); - result.z = Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.fromElements(matrix[8], matrix[9], matrix[10], scratchColumn$1) - ); - return result; - }; - - const scaleScratch3$1 = new Matrix3.Cartesian3(); - - /** - * Computes the maximum scale assuming the matrix is an affine transformation. - * The maximum scale is the maximum length of the column vectors in the upper-left - * 3x3 matrix. - * - * @param {Matrix4} matrix The matrix. - * @returns {Number} The maximum scale. - */ - Matrix4.getMaximumScale = function (matrix) { - Matrix4.getScale(matrix, scaleScratch3$1); - return Matrix3.Cartesian3.maximumComponent(scaleScratch3$1); - }; - - const scaleScratch4$1 = new Matrix3.Cartesian3(); - - /** - * Sets the rotation assuming the matrix is an affine transformation. - * - * @param {Matrix4} matrix The matrix. - * @param {Matrix3} rotation The rotation matrix. - * @returns {Matrix4} The modified result parameter. - * - * @see Matrix4.fromRotation - * @see Matrix4.getRotation - */ - Matrix4.setRotation = function (matrix, rotation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const scale = Matrix4.getScale(matrix, scaleScratch4$1); - - result[0] = rotation[0] * scale.x; - result[1] = rotation[1] * scale.x; - result[2] = rotation[2] * scale.x; - result[3] = matrix[3]; - - result[4] = rotation[3] * scale.y; - result[5] = rotation[4] * scale.y; - result[6] = rotation[5] * scale.y; - result[7] = matrix[7]; - - result[8] = rotation[6] * scale.z; - result[9] = rotation[7] * scale.z; - result[10] = rotation[8] * scale.z; - result[11] = matrix[11]; - - result[12] = matrix[12]; - result[13] = matrix[13]; - result[14] = matrix[14]; - result[15] = matrix[15]; - - return result; - }; - - const scaleScratch5$1 = new Matrix3.Cartesian3(); - - /** - * Extracts the rotation matrix assuming the matrix is an affine transformation. - * - * @param {Matrix4} matrix The matrix. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @see Matrix4.setRotation - * @see Matrix4.fromRotation - */ - Matrix4.getRotation = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const scale = Matrix4.getScale(matrix, scaleScratch5$1); - - result[0] = matrix[0] / scale.x; - result[1] = matrix[1] / scale.x; - result[2] = matrix[2] / scale.x; - - result[3] = matrix[4] / scale.y; - result[4] = matrix[5] / scale.y; - result[5] = matrix[6] / scale.y; - - result[6] = matrix[8] / scale.z; - result[7] = matrix[9] / scale.z; - result[8] = matrix[10] / scale.z; - - return result; - }; - - /** - * Computes the product of two matrices. - * - * @param {Matrix4} left The first matrix. - * @param {Matrix4} right The second matrix. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.multiply = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const left0 = left[0]; - const left1 = left[1]; - const left2 = left[2]; - const left3 = left[3]; - const left4 = left[4]; - const left5 = left[5]; - const left6 = left[6]; - const left7 = left[7]; - const left8 = left[8]; - const left9 = left[9]; - const left10 = left[10]; - const left11 = left[11]; - const left12 = left[12]; - const left13 = left[13]; - const left14 = left[14]; - const left15 = left[15]; - - const right0 = right[0]; - const right1 = right[1]; - const right2 = right[2]; - const right3 = right[3]; - const right4 = right[4]; - const right5 = right[5]; - const right6 = right[6]; - const right7 = right[7]; - const right8 = right[8]; - const right9 = right[9]; - const right10 = right[10]; - const right11 = right[11]; - const right12 = right[12]; - const right13 = right[13]; - const right14 = right[14]; - const right15 = right[15]; - - const column0Row0 = - left0 * right0 + left4 * right1 + left8 * right2 + left12 * right3; - const column0Row1 = - left1 * right0 + left5 * right1 + left9 * right2 + left13 * right3; - const column0Row2 = - left2 * right0 + left6 * right1 + left10 * right2 + left14 * right3; - const column0Row3 = - left3 * right0 + left7 * right1 + left11 * right2 + left15 * right3; - - const column1Row0 = - left0 * right4 + left4 * right5 + left8 * right6 + left12 * right7; - const column1Row1 = - left1 * right4 + left5 * right5 + left9 * right6 + left13 * right7; - const column1Row2 = - left2 * right4 + left6 * right5 + left10 * right6 + left14 * right7; - const column1Row3 = - left3 * right4 + left7 * right5 + left11 * right6 + left15 * right7; - - const column2Row0 = - left0 * right8 + left4 * right9 + left8 * right10 + left12 * right11; - const column2Row1 = - left1 * right8 + left5 * right9 + left9 * right10 + left13 * right11; - const column2Row2 = - left2 * right8 + left6 * right9 + left10 * right10 + left14 * right11; - const column2Row3 = - left3 * right8 + left7 * right9 + left11 * right10 + left15 * right11; - - const column3Row0 = - left0 * right12 + left4 * right13 + left8 * right14 + left12 * right15; - const column3Row1 = - left1 * right12 + left5 * right13 + left9 * right14 + left13 * right15; - const column3Row2 = - left2 * right12 + left6 * right13 + left10 * right14 + left14 * right15; - const column3Row3 = - left3 * right12 + left7 * right13 + left11 * right14 + left15 * right15; - - result[0] = column0Row0; - result[1] = column0Row1; - result[2] = column0Row2; - result[3] = column0Row3; - result[4] = column1Row0; - result[5] = column1Row1; - result[6] = column1Row2; - result[7] = column1Row3; - result[8] = column2Row0; - result[9] = column2Row1; - result[10] = column2Row2; - result[11] = column2Row3; - result[12] = column3Row0; - result[13] = column3Row1; - result[14] = column3Row2; - result[15] = column3Row3; - return result; - }; - - /** - * Computes the sum of two matrices. - * - * @param {Matrix4} left The first matrix. - * @param {Matrix4} right The second matrix. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.add = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = left[0] + right[0]; - result[1] = left[1] + right[1]; - result[2] = left[2] + right[2]; - result[3] = left[3] + right[3]; - result[4] = left[4] + right[4]; - result[5] = left[5] + right[5]; - result[6] = left[6] + right[6]; - result[7] = left[7] + right[7]; - result[8] = left[8] + right[8]; - result[9] = left[9] + right[9]; - result[10] = left[10] + right[10]; - result[11] = left[11] + right[11]; - result[12] = left[12] + right[12]; - result[13] = left[13] + right[13]; - result[14] = left[14] + right[14]; - result[15] = left[15] + right[15]; - return result; - }; - - /** - * Computes the difference of two matrices. - * - * @param {Matrix4} left The first matrix. - * @param {Matrix4} right The second matrix. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.subtract = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = left[0] - right[0]; - result[1] = left[1] - right[1]; - result[2] = left[2] - right[2]; - result[3] = left[3] - right[3]; - result[4] = left[4] - right[4]; - result[5] = left[5] - right[5]; - result[6] = left[6] - right[6]; - result[7] = left[7] - right[7]; - result[8] = left[8] - right[8]; - result[9] = left[9] - right[9]; - result[10] = left[10] - right[10]; - result[11] = left[11] - right[11]; - result[12] = left[12] - right[12]; - result[13] = left[13] - right[13]; - result[14] = left[14] - right[14]; - result[15] = left[15] - right[15]; - return result; - }; - - /** - * Computes the product of two matrices assuming the matrices are affine transformation matrices, - * where the upper left 3x3 elements are any matrix, and - * the upper three elements in the fourth column are the translation. - * The bottom row is assumed to be [0, 0, 0, 1]. - * The matrix is not verified to be in the proper form. - * This method is faster than computing the product for general 4x4 - * matrices using {@link Matrix4.multiply}. - * - * @param {Matrix4} left The first matrix. - * @param {Matrix4} right The second matrix. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @example - * const m1 = new Cesium.Matrix4(1.0, 6.0, 7.0, 0.0, 2.0, 5.0, 8.0, 0.0, 3.0, 4.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0); - * const m2 = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3(1.0, 1.0, 1.0)); - * const m3 = Cesium.Matrix4.multiplyTransformation(m1, m2, new Cesium.Matrix4()); - */ - Matrix4.multiplyTransformation = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const left0 = left[0]; - const left1 = left[1]; - const left2 = left[2]; - const left4 = left[4]; - const left5 = left[5]; - const left6 = left[6]; - const left8 = left[8]; - const left9 = left[9]; - const left10 = left[10]; - const left12 = left[12]; - const left13 = left[13]; - const left14 = left[14]; - - const right0 = right[0]; - const right1 = right[1]; - const right2 = right[2]; - const right4 = right[4]; - const right5 = right[5]; - const right6 = right[6]; - const right8 = right[8]; - const right9 = right[9]; - const right10 = right[10]; - const right12 = right[12]; - const right13 = right[13]; - const right14 = right[14]; - - const column0Row0 = left0 * right0 + left4 * right1 + left8 * right2; - const column0Row1 = left1 * right0 + left5 * right1 + left9 * right2; - const column0Row2 = left2 * right0 + left6 * right1 + left10 * right2; - - const column1Row0 = left0 * right4 + left4 * right5 + left8 * right6; - const column1Row1 = left1 * right4 + left5 * right5 + left9 * right6; - const column1Row2 = left2 * right4 + left6 * right5 + left10 * right6; - - const column2Row0 = left0 * right8 + left4 * right9 + left8 * right10; - const column2Row1 = left1 * right8 + left5 * right9 + left9 * right10; - const column2Row2 = left2 * right8 + left6 * right9 + left10 * right10; - - const column3Row0 = - left0 * right12 + left4 * right13 + left8 * right14 + left12; - const column3Row1 = - left1 * right12 + left5 * right13 + left9 * right14 + left13; - const column3Row2 = - left2 * right12 + left6 * right13 + left10 * right14 + left14; - - result[0] = column0Row0; - result[1] = column0Row1; - result[2] = column0Row2; - result[3] = 0.0; - result[4] = column1Row0; - result[5] = column1Row1; - result[6] = column1Row2; - result[7] = 0.0; - result[8] = column2Row0; - result[9] = column2Row1; - result[10] = column2Row2; - result[11] = 0.0; - result[12] = column3Row0; - result[13] = column3Row1; - result[14] = column3Row2; - result[15] = 1.0; - return result; - }; - - /** - * Multiplies a transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0]) - * by a 3x3 rotation matrix. This is an optimization - * for Matrix4.multiply(m, Matrix4.fromRotationTranslation(rotation), m); with less allocations and arithmetic operations. - * - * @param {Matrix4} matrix The matrix on the left-hand side. - * @param {Matrix3} rotation The 3x3 rotation matrix on the right-hand side. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @example - * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromRotationTranslation(rotation), m); - * Cesium.Matrix4.multiplyByMatrix3(m, rotation, m); - */ - Matrix4.multiplyByMatrix3 = function (matrix, rotation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("rotation", rotation); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const left0 = matrix[0]; - const left1 = matrix[1]; - const left2 = matrix[2]; - const left4 = matrix[4]; - const left5 = matrix[5]; - const left6 = matrix[6]; - const left8 = matrix[8]; - const left9 = matrix[9]; - const left10 = matrix[10]; - - const right0 = rotation[0]; - const right1 = rotation[1]; - const right2 = rotation[2]; - const right4 = rotation[3]; - const right5 = rotation[4]; - const right6 = rotation[5]; - const right8 = rotation[6]; - const right9 = rotation[7]; - const right10 = rotation[8]; - - const column0Row0 = left0 * right0 + left4 * right1 + left8 * right2; - const column0Row1 = left1 * right0 + left5 * right1 + left9 * right2; - const column0Row2 = left2 * right0 + left6 * right1 + left10 * right2; - - const column1Row0 = left0 * right4 + left4 * right5 + left8 * right6; - const column1Row1 = left1 * right4 + left5 * right5 + left9 * right6; - const column1Row2 = left2 * right4 + left6 * right5 + left10 * right6; - - const column2Row0 = left0 * right8 + left4 * right9 + left8 * right10; - const column2Row1 = left1 * right8 + left5 * right9 + left9 * right10; - const column2Row2 = left2 * right8 + left6 * right9 + left10 * right10; - - result[0] = column0Row0; - result[1] = column0Row1; - result[2] = column0Row2; - result[3] = 0.0; - result[4] = column1Row0; - result[5] = column1Row1; - result[6] = column1Row2; - result[7] = 0.0; - result[8] = column2Row0; - result[9] = column2Row1; - result[10] = column2Row2; - result[11] = 0.0; - result[12] = matrix[12]; - result[13] = matrix[13]; - result[14] = matrix[14]; - result[15] = matrix[15]; - return result; - }; - - /** - * Multiplies a transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0]) - * by an implicit translation matrix defined by a {@link Cartesian3}. This is an optimization - * for Matrix4.multiply(m, Matrix4.fromTranslation(position), m); with less allocations and arithmetic operations. - * - * @param {Matrix4} matrix The matrix on the left-hand side. - * @param {Cartesian3} translation The translation on the right-hand side. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @example - * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromTranslation(position), m); - * Cesium.Matrix4.multiplyByTranslation(m, position, m); - */ - Matrix4.multiplyByTranslation = function (matrix, translation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("translation", translation); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const x = translation.x; - const y = translation.y; - const z = translation.z; - - const tx = x * matrix[0] + y * matrix[4] + z * matrix[8] + matrix[12]; - const ty = x * matrix[1] + y * matrix[5] + z * matrix[9] + matrix[13]; - const tz = x * matrix[2] + y * matrix[6] + z * matrix[10] + matrix[14]; - - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[3]; - result[4] = matrix[4]; - result[5] = matrix[5]; - result[6] = matrix[6]; - result[7] = matrix[7]; - result[8] = matrix[8]; - result[9] = matrix[9]; - result[10] = matrix[10]; - result[11] = matrix[11]; - result[12] = tx; - result[13] = ty; - result[14] = tz; - result[15] = matrix[15]; - return result; - }; - - /** - * Multiplies an affine transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0]) - * by an implicit non-uniform scale matrix. This is an optimization - * for Matrix4.multiply(m, Matrix4.fromUniformScale(scale), m);, where - * m must be an affine matrix. - * This function performs fewer allocations and arithmetic operations. - * - * @param {Matrix4} matrix The affine matrix on the left-hand side. - * @param {Cartesian3} scale The non-uniform scale on the right-hand side. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * - * @example - * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromScale(scale), m); - * Cesium.Matrix4.multiplyByScale(m, scale, m); - * - * @see Matrix4.multiplyByUniformScale - * @see Matrix4.fromScale - * @see Matrix4.fromUniformScale - * @see Matrix4.setScale - * @see Matrix4.setUniformScale - * @see Matrix4.getScale - */ - Matrix4.multiplyByScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const scaleX = scale.x; - const scaleY = scale.y; - const scaleZ = scale.z; - - // Faster than Cartesian3.equals - if (scaleX === 1.0 && scaleY === 1.0 && scaleZ === 1.0) { - return Matrix4.clone(matrix, result); - } - - result[0] = scaleX * matrix[0]; - result[1] = scaleX * matrix[1]; - result[2] = scaleX * matrix[2]; - result[3] = matrix[3]; - - result[4] = scaleY * matrix[4]; - result[5] = scaleY * matrix[5]; - result[6] = scaleY * matrix[6]; - result[7] = matrix[7]; - - result[8] = scaleZ * matrix[8]; - result[9] = scaleZ * matrix[9]; - result[10] = scaleZ * matrix[10]; - result[11] = matrix[11]; - - result[12] = matrix[12]; - result[13] = matrix[13]; - result[14] = matrix[14]; - result[15] = matrix[15]; - - return result; - }; - - /** - * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix. - * - * @param {Matrix4} matrix The matrix on the left-hand side. - * @param {Number} scale The uniform scale on the right-hand side. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @example - * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromUniformScale(scale), m); - * Cesium.Matrix4.multiplyByUniformScale(m, scale, m); - * - * @see Matrix4.multiplyByScale - * @see Matrix4.fromScale - * @see Matrix4.fromUniformScale - * @see Matrix4.setScale - * @see Matrix4.setUniformScale - * @see Matrix4.getScale - */ - Matrix4.multiplyByUniformScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0] * scale; - result[1] = matrix[1] * scale; - result[2] = matrix[2] * scale; - result[3] = matrix[3]; - - result[4] = matrix[4] * scale; - result[5] = matrix[5] * scale; - result[6] = matrix[6] * scale; - result[7] = matrix[7]; - - result[8] = matrix[8] * scale; - result[9] = matrix[9] * scale; - result[10] = matrix[10] * scale; - result[11] = matrix[11]; - - result[12] = matrix[12]; - result[13] = matrix[13]; - result[14] = matrix[14]; - result[15] = matrix[15]; - - return result; - }; - - /** - * Computes the product of a matrix and a column vector. - * - * @param {Matrix4} matrix The matrix. - * @param {Cartesian4} cartesian The vector. - * @param {Cartesian4} result The object onto which to store the result. - * @returns {Cartesian4} The modified result parameter. - */ - Matrix4.multiplyByVector = function (matrix, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const vX = cartesian.x; - const vY = cartesian.y; - const vZ = cartesian.z; - const vW = cartesian.w; - - const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12] * vW; - const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13] * vW; - const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14] * vW; - const w = matrix[3] * vX + matrix[7] * vY + matrix[11] * vZ + matrix[15] * vW; - - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - }; - - /** - * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector} - * with a {@link Cartesian4} with a w component of zero. - * - * @param {Matrix4} matrix The matrix. - * @param {Cartesian3} cartesian The point. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - * - * @example - * const p = new Cesium.Cartesian3(1.0, 2.0, 3.0); - * const result = Cesium.Matrix4.multiplyByPointAsVector(matrix, p, new Cesium.Cartesian3()); - * // A shortcut for - * // Cartesian3 p = ... - * // Cesium.Matrix4.multiplyByVector(matrix, new Cesium.Cartesian4(p.x, p.y, p.z, 0.0), result); - */ - Matrix4.multiplyByPointAsVector = function (matrix, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const vX = cartesian.x; - const vY = cartesian.y; - const vZ = cartesian.z; - - const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ; - const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ; - const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ; - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector} - * with a {@link Cartesian4} with a w component of 1, but returns a {@link Cartesian3} instead of a {@link Cartesian4}. - * - * @param {Matrix4} matrix The matrix. - * @param {Cartesian3} cartesian The point. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - * - * @example - * const p = new Cesium.Cartesian3(1.0, 2.0, 3.0); - * const result = Cesium.Matrix4.multiplyByPoint(matrix, p, new Cesium.Cartesian3()); - */ - Matrix4.multiplyByPoint = function (matrix, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const vX = cartesian.x; - const vY = cartesian.y; - const vZ = cartesian.z; - - const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12]; - const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13]; - const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14]; - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Computes the product of a matrix and a scalar. - * - * @param {Matrix4} matrix The matrix. - * @param {Number} scalar The number to multiply by. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @example - * //create a Matrix4 instance which is a scaled version of the supplied Matrix4 - * // m = [10.0, 11.0, 12.0, 13.0] - * // [14.0, 15.0, 16.0, 17.0] - * // [18.0, 19.0, 20.0, 21.0] - * // [22.0, 23.0, 24.0, 25.0] - * - * const a = Cesium.Matrix4.multiplyByScalar(m, -2, new Cesium.Matrix4()); - * - * // m remains the same - * // a = [-20.0, -22.0, -24.0, -26.0] - * // [-28.0, -30.0, -32.0, -34.0] - * // [-36.0, -38.0, -40.0, -42.0] - * // [-44.0, -46.0, -48.0, -50.0] - */ - Matrix4.multiplyByScalar = function (matrix, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0] * scalar; - result[1] = matrix[1] * scalar; - result[2] = matrix[2] * scalar; - result[3] = matrix[3] * scalar; - result[4] = matrix[4] * scalar; - result[5] = matrix[5] * scalar; - result[6] = matrix[6] * scalar; - result[7] = matrix[7] * scalar; - result[8] = matrix[8] * scalar; - result[9] = matrix[9] * scalar; - result[10] = matrix[10] * scalar; - result[11] = matrix[11] * scalar; - result[12] = matrix[12] * scalar; - result[13] = matrix[13] * scalar; - result[14] = matrix[14] * scalar; - result[15] = matrix[15] * scalar; - return result; - }; - - /** - * Computes a negated copy of the provided matrix. - * - * @param {Matrix4} matrix The matrix to negate. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @example - * //create a new Matrix4 instance which is a negation of a Matrix4 - * // m = [10.0, 11.0, 12.0, 13.0] - * // [14.0, 15.0, 16.0, 17.0] - * // [18.0, 19.0, 20.0, 21.0] - * // [22.0, 23.0, 24.0, 25.0] - * - * const a = Cesium.Matrix4.negate(m, new Cesium.Matrix4()); - * - * // m remains the same - * // a = [-10.0, -11.0, -12.0, -13.0] - * // [-14.0, -15.0, -16.0, -17.0] - * // [-18.0, -19.0, -20.0, -21.0] - * // [-22.0, -23.0, -24.0, -25.0] - */ - Matrix4.negate = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = -matrix[0]; - result[1] = -matrix[1]; - result[2] = -matrix[2]; - result[3] = -matrix[3]; - result[4] = -matrix[4]; - result[5] = -matrix[5]; - result[6] = -matrix[6]; - result[7] = -matrix[7]; - result[8] = -matrix[8]; - result[9] = -matrix[9]; - result[10] = -matrix[10]; - result[11] = -matrix[11]; - result[12] = -matrix[12]; - result[13] = -matrix[13]; - result[14] = -matrix[14]; - result[15] = -matrix[15]; - return result; - }; - - /** - * Computes the transpose of the provided matrix. - * - * @param {Matrix4} matrix The matrix to transpose. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @example - * //returns transpose of a Matrix4 - * // m = [10.0, 11.0, 12.0, 13.0] - * // [14.0, 15.0, 16.0, 17.0] - * // [18.0, 19.0, 20.0, 21.0] - * // [22.0, 23.0, 24.0, 25.0] - * - * const a = Cesium.Matrix4.transpose(m, new Cesium.Matrix4()); - * - * // m remains the same - * // a = [10.0, 14.0, 18.0, 22.0] - * // [11.0, 15.0, 19.0, 23.0] - * // [12.0, 16.0, 20.0, 24.0] - * // [13.0, 17.0, 21.0, 25.0] - */ - Matrix4.transpose = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const matrix1 = matrix[1]; - const matrix2 = matrix[2]; - const matrix3 = matrix[3]; - const matrix6 = matrix[6]; - const matrix7 = matrix[7]; - const matrix11 = matrix[11]; - - result[0] = matrix[0]; - result[1] = matrix[4]; - result[2] = matrix[8]; - result[3] = matrix[12]; - result[4] = matrix1; - result[5] = matrix[5]; - result[6] = matrix[9]; - result[7] = matrix[13]; - result[8] = matrix2; - result[9] = matrix6; - result[10] = matrix[10]; - result[11] = matrix[14]; - result[12] = matrix3; - result[13] = matrix7; - result[14] = matrix11; - result[15] = matrix[15]; - return result; - }; - - /** - * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements. - * - * @param {Matrix4} matrix The matrix with signed elements. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.abs = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = Math.abs(matrix[0]); - result[1] = Math.abs(matrix[1]); - result[2] = Math.abs(matrix[2]); - result[3] = Math.abs(matrix[3]); - result[4] = Math.abs(matrix[4]); - result[5] = Math.abs(matrix[5]); - result[6] = Math.abs(matrix[6]); - result[7] = Math.abs(matrix[7]); - result[8] = Math.abs(matrix[8]); - result[9] = Math.abs(matrix[9]); - result[10] = Math.abs(matrix[10]); - result[11] = Math.abs(matrix[11]); - result[12] = Math.abs(matrix[12]); - result[13] = Math.abs(matrix[13]); - result[14] = Math.abs(matrix[14]); - result[15] = Math.abs(matrix[15]); - - return result; - }; - - /** - * Compares the provided matrices componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Matrix4} [left] The first matrix. - * @param {Matrix4} [right] The second matrix. - * @returns {Boolean} true if left and right are equal, false otherwise. - * - * @example - * //compares two Matrix4 instances - * - * // a = [10.0, 14.0, 18.0, 22.0] - * // [11.0, 15.0, 19.0, 23.0] - * // [12.0, 16.0, 20.0, 24.0] - * // [13.0, 17.0, 21.0, 25.0] - * - * // b = [10.0, 14.0, 18.0, 22.0] - * // [11.0, 15.0, 19.0, 23.0] - * // [12.0, 16.0, 20.0, 24.0] - * // [13.0, 17.0, 21.0, 25.0] - * - * if(Cesium.Matrix4.equals(a,b)) { - * console.log("Both matrices are equal"); - * } else { - * console.log("They are not equal"); - * } - * - * //Prints "Both matrices are equal" on the console - */ - Matrix4.equals = function (left, right) { - // Given that most matrices will be transformation matrices, the elements - // are tested in order such that the test is likely to fail as early - // as possible. I _think_ this is just as friendly to the L1 cache - // as testing in index order. It is certainty faster in practice. - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - // Translation - left[12] === right[12] && - left[13] === right[13] && - left[14] === right[14] && - // Rotation/scale - left[0] === right[0] && - left[1] === right[1] && - left[2] === right[2] && - left[4] === right[4] && - left[5] === right[5] && - left[6] === right[6] && - left[8] === right[8] && - left[9] === right[9] && - left[10] === right[10] && - // Bottom row - left[3] === right[3] && - left[7] === right[7] && - left[11] === right[11] && - left[15] === right[15]) - ); - }; - - /** - * Compares the provided matrices componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Matrix4} [left] The first matrix. - * @param {Matrix4} [right] The second matrix. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - * - * @example - * //compares two Matrix4 instances - * - * // a = [10.5, 14.5, 18.5, 22.5] - * // [11.5, 15.5, 19.5, 23.5] - * // [12.5, 16.5, 20.5, 24.5] - * // [13.5, 17.5, 21.5, 25.5] - * - * // b = [10.0, 14.0, 18.0, 22.0] - * // [11.0, 15.0, 19.0, 23.0] - * // [12.0, 16.0, 20.0, 24.0] - * // [13.0, 17.0, 21.0, 25.0] - * - * if(Cesium.Matrix4.equalsEpsilon(a,b,0.1)){ - * console.log("Difference between both the matrices is less than 0.1"); - * } else { - * console.log("Difference between both the matrices is not less than 0.1"); - * } - * - * //Prints "Difference between both the matrices is not less than 0.1" on the console - */ - Matrix4.equalsEpsilon = function (left, right, epsilon) { - epsilon = defaultValue.defaultValue(epsilon, 0); - - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math.abs(left[0] - right[0]) <= epsilon && - Math.abs(left[1] - right[1]) <= epsilon && - Math.abs(left[2] - right[2]) <= epsilon && - Math.abs(left[3] - right[3]) <= epsilon && - Math.abs(left[4] - right[4]) <= epsilon && - Math.abs(left[5] - right[5]) <= epsilon && - Math.abs(left[6] - right[6]) <= epsilon && - Math.abs(left[7] - right[7]) <= epsilon && - Math.abs(left[8] - right[8]) <= epsilon && - Math.abs(left[9] - right[9]) <= epsilon && - Math.abs(left[10] - right[10]) <= epsilon && - Math.abs(left[11] - right[11]) <= epsilon && - Math.abs(left[12] - right[12]) <= epsilon && - Math.abs(left[13] - right[13]) <= epsilon && - Math.abs(left[14] - right[14]) <= epsilon && - Math.abs(left[15] - right[15]) <= epsilon) - ); - }; - - /** - * Gets the translation portion of the provided matrix, assuming the matrix is an affine transformation matrix. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Matrix4.getTranslation = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = matrix[12]; - result.y = matrix[13]; - result.z = matrix[14]; - return result; - }; - - /** - * Gets the upper left 3x3 matrix of the provided matrix. - * - * @param {Matrix4} matrix The matrix to use. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @example - * // returns a Matrix3 instance from a Matrix4 instance - * - * // m = [10.0, 14.0, 18.0, 22.0] - * // [11.0, 15.0, 19.0, 23.0] - * // [12.0, 16.0, 20.0, 24.0] - * // [13.0, 17.0, 21.0, 25.0] - * - * const b = new Cesium.Matrix3(); - * Cesium.Matrix4.getMatrix3(m,b); - * - * // b = [10.0, 14.0, 18.0] - * // [11.0, 15.0, 19.0] - * // [12.0, 16.0, 20.0] - */ - Matrix4.getMatrix3 = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[4]; - result[4] = matrix[5]; - result[5] = matrix[6]; - result[6] = matrix[8]; - result[7] = matrix[9]; - result[8] = matrix[10]; - return result; - }; - - const scratchInverseRotation = new Matrix3.Matrix3(); - const scratchMatrix3Zero = new Matrix3.Matrix3(); - const scratchBottomRow = new Cartesian4(); - const scratchExpectedBottomRow = new Cartesian4(0.0, 0.0, 0.0, 1.0); - - /** - * Computes the inverse of the provided matrix using Cramers Rule. - * If the determinant is zero, the matrix can not be inverted, and an exception is thrown. - * If the matrix is a proper rigid transformation, it is more efficient - * to invert it with {@link Matrix4.inverseTransformation}. - * - * @param {Matrix4} matrix The matrix to invert. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - * - * @exception {RuntimeError} matrix is not invertible because its determinate is zero. - */ - Matrix4.inverse = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - // - // Ported from: - // ftp://download.intel.com/design/PentiumIII/sml/24504301.pdf - // - const src0 = matrix[0]; - const src1 = matrix[4]; - const src2 = matrix[8]; - const src3 = matrix[12]; - const src4 = matrix[1]; - const src5 = matrix[5]; - const src6 = matrix[9]; - const src7 = matrix[13]; - const src8 = matrix[2]; - const src9 = matrix[6]; - const src10 = matrix[10]; - const src11 = matrix[14]; - const src12 = matrix[3]; - const src13 = matrix[7]; - const src14 = matrix[11]; - const src15 = matrix[15]; - - // calculate pairs for first 8 elements (cofactors) - let tmp0 = src10 * src15; - let tmp1 = src11 * src14; - let tmp2 = src9 * src15; - let tmp3 = src11 * src13; - let tmp4 = src9 * src14; - let tmp5 = src10 * src13; - let tmp6 = src8 * src15; - let tmp7 = src11 * src12; - let tmp8 = src8 * src14; - let tmp9 = src10 * src12; - let tmp10 = src8 * src13; - let tmp11 = src9 * src12; - - // calculate first 8 elements (cofactors) - const dst0 = - tmp0 * src5 + - tmp3 * src6 + - tmp4 * src7 - - (tmp1 * src5 + tmp2 * src6 + tmp5 * src7); - const dst1 = - tmp1 * src4 + - tmp6 * src6 + - tmp9 * src7 - - (tmp0 * src4 + tmp7 * src6 + tmp8 * src7); - const dst2 = - tmp2 * src4 + - tmp7 * src5 + - tmp10 * src7 - - (tmp3 * src4 + tmp6 * src5 + tmp11 * src7); - const dst3 = - tmp5 * src4 + - tmp8 * src5 + - tmp11 * src6 - - (tmp4 * src4 + tmp9 * src5 + tmp10 * src6); - const dst4 = - tmp1 * src1 + - tmp2 * src2 + - tmp5 * src3 - - (tmp0 * src1 + tmp3 * src2 + tmp4 * src3); - const dst5 = - tmp0 * src0 + - tmp7 * src2 + - tmp8 * src3 - - (tmp1 * src0 + tmp6 * src2 + tmp9 * src3); - const dst6 = - tmp3 * src0 + - tmp6 * src1 + - tmp11 * src3 - - (tmp2 * src0 + tmp7 * src1 + tmp10 * src3); - const dst7 = - tmp4 * src0 + - tmp9 * src1 + - tmp10 * src2 - - (tmp5 * src0 + tmp8 * src1 + tmp11 * src2); - - // calculate pairs for second 8 elements (cofactors) - tmp0 = src2 * src7; - tmp1 = src3 * src6; - tmp2 = src1 * src7; - tmp3 = src3 * src5; - tmp4 = src1 * src6; - tmp5 = src2 * src5; - tmp6 = src0 * src7; - tmp7 = src3 * src4; - tmp8 = src0 * src6; - tmp9 = src2 * src4; - tmp10 = src0 * src5; - tmp11 = src1 * src4; - - // calculate second 8 elements (cofactors) - const dst8 = - tmp0 * src13 + - tmp3 * src14 + - tmp4 * src15 - - (tmp1 * src13 + tmp2 * src14 + tmp5 * src15); - const dst9 = - tmp1 * src12 + - tmp6 * src14 + - tmp9 * src15 - - (tmp0 * src12 + tmp7 * src14 + tmp8 * src15); - const dst10 = - tmp2 * src12 + - tmp7 * src13 + - tmp10 * src15 - - (tmp3 * src12 + tmp6 * src13 + tmp11 * src15); - const dst11 = - tmp5 * src12 + - tmp8 * src13 + - tmp11 * src14 - - (tmp4 * src12 + tmp9 * src13 + tmp10 * src14); - const dst12 = - tmp2 * src10 + - tmp5 * src11 + - tmp1 * src9 - - (tmp4 * src11 + tmp0 * src9 + tmp3 * src10); - const dst13 = - tmp8 * src11 + - tmp0 * src8 + - tmp7 * src10 - - (tmp6 * src10 + tmp9 * src11 + tmp1 * src8); - const dst14 = - tmp6 * src9 + - tmp11 * src11 + - tmp3 * src8 - - (tmp10 * src11 + tmp2 * src8 + tmp7 * src9); - const dst15 = - tmp10 * src10 + - tmp4 * src8 + - tmp9 * src9 - - (tmp8 * src9 + tmp11 * src10 + tmp5 * src8); - - // calculate determinant - let det = src0 * dst0 + src1 * dst1 + src2 * dst2 + src3 * dst3; - - if (Math.abs(det) < Math$1.CesiumMath.EPSILON21) { - // Special case for a zero scale matrix that can occur, for example, - // when a model's node has a [0, 0, 0] scale. - if ( - Matrix3.Matrix3.equalsEpsilon( - Matrix4.getMatrix3(matrix, scratchInverseRotation), - scratchMatrix3Zero, - Math$1.CesiumMath.EPSILON7 - ) && - Cartesian4.equals( - Matrix4.getRow(matrix, 3, scratchBottomRow), - scratchExpectedBottomRow - ) - ) { - result[0] = 0.0; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = 0.0; - result[5] = 0.0; - result[6] = 0.0; - result[7] = 0.0; - result[8] = 0.0; - result[9] = 0.0; - result[10] = 0.0; - result[11] = 0.0; - result[12] = -matrix[12]; - result[13] = -matrix[13]; - result[14] = -matrix[14]; - result[15] = 1.0; - return result; - } - - throw new RuntimeError.RuntimeError( - "matrix is not invertible because its determinate is zero." - ); - } - - // calculate matrix inverse - det = 1.0 / det; - - result[0] = dst0 * det; - result[1] = dst1 * det; - result[2] = dst2 * det; - result[3] = dst3 * det; - result[4] = dst4 * det; - result[5] = dst5 * det; - result[6] = dst6 * det; - result[7] = dst7 * det; - result[8] = dst8 * det; - result[9] = dst9 * det; - result[10] = dst10 * det; - result[11] = dst11 * det; - result[12] = dst12 * det; - result[13] = dst13 * det; - result[14] = dst14 * det; - result[15] = dst15 * det; - return result; - }; - - /** - * Computes the inverse of the provided matrix assuming it is a proper rigid matrix, - * where the upper left 3x3 elements are a rotation matrix, - * and the upper three elements in the fourth column are the translation. - * The bottom row is assumed to be [0, 0, 0, 1]. - * The matrix is not verified to be in the proper form. - * This method is faster than computing the inverse for a general 4x4 - * matrix using {@link Matrix4.inverse}. - * - * @param {Matrix4} matrix The matrix to invert. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.inverseTransformation = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - //This function is an optimized version of the below 4 lines. - //const rT = Matrix3.transpose(Matrix4.getMatrix3(matrix)); - //const rTN = Matrix3.negate(rT); - //const rTT = Matrix3.multiplyByVector(rTN, Matrix4.getTranslation(matrix)); - //return Matrix4.fromRotationTranslation(rT, rTT, result); - - const matrix0 = matrix[0]; - const matrix1 = matrix[1]; - const matrix2 = matrix[2]; - const matrix4 = matrix[4]; - const matrix5 = matrix[5]; - const matrix6 = matrix[6]; - const matrix8 = matrix[8]; - const matrix9 = matrix[9]; - const matrix10 = matrix[10]; - - const vX = matrix[12]; - const vY = matrix[13]; - const vZ = matrix[14]; - - const x = -matrix0 * vX - matrix1 * vY - matrix2 * vZ; - const y = -matrix4 * vX - matrix5 * vY - matrix6 * vZ; - const z = -matrix8 * vX - matrix9 * vY - matrix10 * vZ; - - result[0] = matrix0; - result[1] = matrix4; - result[2] = matrix8; - result[3] = 0.0; - result[4] = matrix1; - result[5] = matrix5; - result[6] = matrix9; - result[7] = 0.0; - result[8] = matrix2; - result[9] = matrix6; - result[10] = matrix10; - result[11] = 0.0; - result[12] = x; - result[13] = y; - result[14] = z; - result[15] = 1.0; - return result; - }; - - const scratchTransposeMatrix = new Matrix4(); - - /** - * Computes the inverse transpose of a matrix. - * - * @param {Matrix4} matrix The matrix to transpose and invert. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter. - */ - Matrix4.inverseTranspose = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - return Matrix4.inverse( - Matrix4.transpose(matrix, scratchTransposeMatrix), - result - ); - }; - - /** - * An immutable Matrix4 instance initialized to the identity matrix. - * - * @type {Matrix4} - * @constant - */ - Matrix4.IDENTITY = Object.freeze( - new Matrix4( - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0 - ) - ); - - /** - * An immutable Matrix4 instance initialized to the zero matrix. - * - * @type {Matrix4} - * @constant - */ - Matrix4.ZERO = Object.freeze( - new Matrix4( - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0 - ) - ); - - /** - * The index into Matrix4 for column 0, row 0. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN0ROW0 = 0; - - /** - * The index into Matrix4 for column 0, row 1. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN0ROW1 = 1; - - /** - * The index into Matrix4 for column 0, row 2. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN0ROW2 = 2; - - /** - * The index into Matrix4 for column 0, row 3. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN0ROW3 = 3; - - /** - * The index into Matrix4 for column 1, row 0. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN1ROW0 = 4; - - /** - * The index into Matrix4 for column 1, row 1. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN1ROW1 = 5; - - /** - * The index into Matrix4 for column 1, row 2. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN1ROW2 = 6; - - /** - * The index into Matrix4 for column 1, row 3. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN1ROW3 = 7; - - /** - * The index into Matrix4 for column 2, row 0. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN2ROW0 = 8; - - /** - * The index into Matrix4 for column 2, row 1. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN2ROW1 = 9; - - /** - * The index into Matrix4 for column 2, row 2. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN2ROW2 = 10; - - /** - * The index into Matrix4 for column 2, row 3. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN2ROW3 = 11; - - /** - * The index into Matrix4 for column 3, row 0. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN3ROW0 = 12; - - /** - * The index into Matrix4 for column 3, row 1. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN3ROW1 = 13; - - /** - * The index into Matrix4 for column 3, row 2. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN3ROW2 = 14; - - /** - * The index into Matrix4 for column 3, row 3. - * - * @type {Number} - * @constant - */ - Matrix4.COLUMN3ROW3 = 15; - - Object.defineProperties(Matrix4.prototype, { - /** - * Gets the number of items in the collection. - * @memberof Matrix4.prototype - * - * @type {Number} - */ - length: { - get: function () { - return Matrix4.packedLength; - }, - }, - }); - - /** - * Duplicates the provided Matrix4 instance. - * - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. - */ - Matrix4.prototype.clone = function (result) { - return Matrix4.clone(this, result); - }; - - /** - * Compares this matrix to the provided matrix componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Matrix4} [right] The right hand side matrix. - * @returns {Boolean} true if they are equal, false otherwise. - */ - Matrix4.prototype.equals = function (right) { - return Matrix4.equals(this, right); - }; - - /** - * @private - */ - Matrix4.equalsArray = function (matrix, array, offset) { - return ( - matrix[0] === array[offset] && - matrix[1] === array[offset + 1] && - matrix[2] === array[offset + 2] && - matrix[3] === array[offset + 3] && - matrix[4] === array[offset + 4] && - matrix[5] === array[offset + 5] && - matrix[6] === array[offset + 6] && - matrix[7] === array[offset + 7] && - matrix[8] === array[offset + 8] && - matrix[9] === array[offset + 9] && - matrix[10] === array[offset + 10] && - matrix[11] === array[offset + 11] && - matrix[12] === array[offset + 12] && - matrix[13] === array[offset + 13] && - matrix[14] === array[offset + 14] && - matrix[15] === array[offset + 15] - ); - }; - - /** - * Compares this matrix to the provided matrix componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Matrix4} [right] The right hand side matrix. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if they are within the provided epsilon, false otherwise. - */ - Matrix4.prototype.equalsEpsilon = function (right, epsilon) { - return Matrix4.equalsEpsilon(this, right, epsilon); - }; - - /** - * Computes a string representing this Matrix with each row being - * on a separate line and in the format '(column0, column1, column2, column3)'. - * - * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2, column3)'. - */ - Matrix4.prototype.toString = function () { - return ( - `(${this[0]}, ${this[4]}, ${this[8]}, ${this[12]})\n` + - `(${this[1]}, ${this[5]}, ${this[9]}, ${this[13]})\n` + - `(${this[2]}, ${this[6]}, ${this[10]}, ${this[14]})\n` + - `(${this[3]}, ${this[7]}, ${this[11]}, ${this[15]})` - ); - }; - - /** - * A two dimensional region specified as longitude and latitude coordinates. - * - * @alias Rectangle - * @constructor - * - * @param {Number} [west=0.0] The westernmost longitude, in radians, in the range [-Pi, Pi]. - * @param {Number} [south=0.0] The southernmost latitude, in radians, in the range [-Pi/2, Pi/2]. - * @param {Number} [east=0.0] The easternmost longitude, in radians, in the range [-Pi, Pi]. - * @param {Number} [north=0.0] The northernmost latitude, in radians, in the range [-Pi/2, Pi/2]. - * - * @see Packable - */ - function Rectangle(west, south, east, north) { - /** - * The westernmost longitude in radians in the range [-Pi, Pi]. - * - * @type {Number} - * @default 0.0 - */ - this.west = defaultValue.defaultValue(west, 0.0); - - /** - * The southernmost latitude in radians in the range [-Pi/2, Pi/2]. - * - * @type {Number} - * @default 0.0 - */ - this.south = defaultValue.defaultValue(south, 0.0); - - /** - * The easternmost longitude in radians in the range [-Pi, Pi]. - * - * @type {Number} - * @default 0.0 - */ - this.east = defaultValue.defaultValue(east, 0.0); - - /** - * The northernmost latitude in radians in the range [-Pi/2, Pi/2]. - * - * @type {Number} - * @default 0.0 - */ - this.north = defaultValue.defaultValue(north, 0.0); - } - - Object.defineProperties(Rectangle.prototype, { - /** - * Gets the width of the rectangle in radians. - * @memberof Rectangle.prototype - * @type {Number} - * @readonly - */ - width: { - get: function () { - return Rectangle.computeWidth(this); - }, - }, - - /** - * Gets the height of the rectangle in radians. - * @memberof Rectangle.prototype - * @type {Number} - * @readonly - */ - height: { - get: function () { - return Rectangle.computeHeight(this); - }, - }, - }); - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Rectangle.packedLength = 4; - - /** - * Stores the provided instance into the provided array. - * - * @param {Rectangle} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Rectangle.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.west; - array[startingIndex++] = value.south; - array[startingIndex++] = value.east; - array[startingIndex] = value.north; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Rectangle} [result] The object into which to store the result. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if one was not provided. - */ - Rectangle.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new Rectangle(); - } - - result.west = array[startingIndex++]; - result.south = array[startingIndex++]; - result.east = array[startingIndex++]; - result.north = array[startingIndex]; - return result; - }; - - /** - * Computes the width of a rectangle in radians. - * @param {Rectangle} rectangle The rectangle to compute the width of. - * @returns {Number} The width. - */ - Rectangle.computeWidth = function (rectangle) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - let east = rectangle.east; - const west = rectangle.west; - if (east < west) { - east += Math$1.CesiumMath.TWO_PI; - } - return east - west; - }; - - /** - * Computes the height of a rectangle in radians. - * @param {Rectangle} rectangle The rectangle to compute the height of. - * @returns {Number} The height. - */ - Rectangle.computeHeight = function (rectangle) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - return rectangle.north - rectangle.south; - }; - - /** - * Creates a rectangle given the boundary longitude and latitude in degrees. - * - * @param {Number} [west=0.0] The westernmost longitude in degrees in the range [-180.0, 180.0]. - * @param {Number} [south=0.0] The southernmost latitude in degrees in the range [-90.0, 90.0]. - * @param {Number} [east=0.0] The easternmost longitude in degrees in the range [-180.0, 180.0]. - * @param {Number} [north=0.0] The northernmost latitude in degrees in the range [-90.0, 90.0]. - * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. - * - * @example - * const rectangle = Cesium.Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0); - */ - Rectangle.fromDegrees = function (west, south, east, north, result) { - west = Math$1.CesiumMath.toRadians(defaultValue.defaultValue(west, 0.0)); - south = Math$1.CesiumMath.toRadians(defaultValue.defaultValue(south, 0.0)); - east = Math$1.CesiumMath.toRadians(defaultValue.defaultValue(east, 0.0)); - north = Math$1.CesiumMath.toRadians(defaultValue.defaultValue(north, 0.0)); - - if (!defaultValue.defined(result)) { - return new Rectangle(west, south, east, north); - } - - result.west = west; - result.south = south; - result.east = east; - result.north = north; - - return result; - }; - - /** - * Creates a rectangle given the boundary longitude and latitude in radians. - * - * @param {Number} [west=0.0] The westernmost longitude in radians in the range [-Math.PI, Math.PI]. - * @param {Number} [south=0.0] The southernmost latitude in radians in the range [-Math.PI/2, Math.PI/2]. - * @param {Number} [east=0.0] The easternmost longitude in radians in the range [-Math.PI, Math.PI]. - * @param {Number} [north=0.0] The northernmost latitude in radians in the range [-Math.PI/2, Math.PI/2]. - * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. - * - * @example - * const rectangle = Cesium.Rectangle.fromRadians(0.0, Math.PI/4, Math.PI/8, 3*Math.PI/4); - */ - Rectangle.fromRadians = function (west, south, east, north, result) { - if (!defaultValue.defined(result)) { - return new Rectangle(west, south, east, north); - } - - result.west = defaultValue.defaultValue(west, 0.0); - result.south = defaultValue.defaultValue(south, 0.0); - result.east = defaultValue.defaultValue(east, 0.0); - result.north = defaultValue.defaultValue(north, 0.0); - - return result; - }; - - /** - * Creates the smallest possible Rectangle that encloses all positions in the provided array. - * - * @param {Cartographic[]} cartographics The list of Cartographic instances. - * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. - */ - Rectangle.fromCartographicArray = function (cartographics, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartographics", cartographics); - //>>includeEnd('debug'); - - let west = Number.MAX_VALUE; - let east = -Number.MAX_VALUE; - let westOverIDL = Number.MAX_VALUE; - let eastOverIDL = -Number.MAX_VALUE; - let south = Number.MAX_VALUE; - let north = -Number.MAX_VALUE; - - for (let i = 0, len = cartographics.length; i < len; i++) { - const position = cartographics[i]; - west = Math.min(west, position.longitude); - east = Math.max(east, position.longitude); - south = Math.min(south, position.latitude); - north = Math.max(north, position.latitude); - - const lonAdjusted = - position.longitude >= 0 - ? position.longitude - : position.longitude + Math$1.CesiumMath.TWO_PI; - westOverIDL = Math.min(westOverIDL, lonAdjusted); - eastOverIDL = Math.max(eastOverIDL, lonAdjusted); - } - - if (east - west > eastOverIDL - westOverIDL) { - west = westOverIDL; - east = eastOverIDL; - - if (east > Math$1.CesiumMath.PI) { - east = east - Math$1.CesiumMath.TWO_PI; - } - if (west > Math$1.CesiumMath.PI) { - west = west - Math$1.CesiumMath.TWO_PI; - } - } - - if (!defaultValue.defined(result)) { - return new Rectangle(west, south, east, north); - } - - result.west = west; - result.south = south; - result.east = east; - result.north = north; - return result; - }; - - /** - * Creates the smallest possible Rectangle that encloses all positions in the provided array. - * - * @param {Cartesian3[]} cartesians The list of Cartesian instances. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid the cartesians are on. - * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. - */ - Rectangle.fromCartesianArray = function (cartesians, ellipsoid, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesians", cartesians); - //>>includeEnd('debug'); - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - - let west = Number.MAX_VALUE; - let east = -Number.MAX_VALUE; - let westOverIDL = Number.MAX_VALUE; - let eastOverIDL = -Number.MAX_VALUE; - let south = Number.MAX_VALUE; - let north = -Number.MAX_VALUE; - - for (let i = 0, len = cartesians.length; i < len; i++) { - const position = ellipsoid.cartesianToCartographic(cartesians[i]); - west = Math.min(west, position.longitude); - east = Math.max(east, position.longitude); - south = Math.min(south, position.latitude); - north = Math.max(north, position.latitude); - - const lonAdjusted = - position.longitude >= 0 - ? position.longitude - : position.longitude + Math$1.CesiumMath.TWO_PI; - westOverIDL = Math.min(westOverIDL, lonAdjusted); - eastOverIDL = Math.max(eastOverIDL, lonAdjusted); - } - - if (east - west > eastOverIDL - westOverIDL) { - west = westOverIDL; - east = eastOverIDL; - - if (east > Math$1.CesiumMath.PI) { - east = east - Math$1.CesiumMath.TWO_PI; - } - if (west > Math$1.CesiumMath.PI) { - west = west - Math$1.CesiumMath.TWO_PI; - } - } - - if (!defaultValue.defined(result)) { - return new Rectangle(west, south, east, north); - } - - result.west = west; - result.south = south; - result.east = east; - result.north = north; - return result; - }; - - /** - * Duplicates a Rectangle. - * - * @param {Rectangle} rectangle The rectangle to clone. - * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. (Returns undefined if rectangle is undefined) - */ - Rectangle.clone = function (rectangle, result) { - if (!defaultValue.defined(rectangle)) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new Rectangle( - rectangle.west, - rectangle.south, - rectangle.east, - rectangle.north - ); - } - - result.west = rectangle.west; - result.south = rectangle.south; - result.east = rectangle.east; - result.north = rectangle.north; - return result; - }; - - /** - * Compares the provided Rectangles componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {Rectangle} [left] The first Rectangle. - * @param {Rectangle} [right] The second Rectangle. - * @param {Number} [absoluteEpsilon=0] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Rectangle.equalsEpsilon = function (left, right, absoluteEpsilon) { - absoluteEpsilon = defaultValue.defaultValue(absoluteEpsilon, 0); - - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math.abs(left.west - right.west) <= absoluteEpsilon && - Math.abs(left.south - right.south) <= absoluteEpsilon && - Math.abs(left.east - right.east) <= absoluteEpsilon && - Math.abs(left.north - right.north) <= absoluteEpsilon) - ); - }; - - /** - * Duplicates this Rectangle. - * - * @param {Rectangle} [result] The object onto which to store the result. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. - */ - Rectangle.prototype.clone = function (result) { - return Rectangle.clone(this, result); - }; - - /** - * Compares the provided Rectangle with this Rectangle componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Rectangle} [other] The Rectangle to compare. - * @returns {Boolean} true if the Rectangles are equal, false otherwise. - */ - Rectangle.prototype.equals = function (other) { - return Rectangle.equals(this, other); - }; - - /** - * Compares the provided rectangles and returns true if they are equal, - * false otherwise. - * - * @param {Rectangle} [left] The first Rectangle. - * @param {Rectangle} [right] The second Rectangle. - * @returns {Boolean} true if left and right are equal; otherwise false. - */ - Rectangle.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.west === right.west && - left.south === right.south && - left.east === right.east && - left.north === right.north) - ); - }; - - /** - * Compares the provided Rectangle with this Rectangle componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Rectangle} [other] The Rectangle to compare. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if the Rectangles are within the provided epsilon, false otherwise. - */ - Rectangle.prototype.equalsEpsilon = function (other, epsilon) { - return Rectangle.equalsEpsilon(this, other, epsilon); - }; - - /** - * Checks a Rectangle's properties and throws if they are not in valid ranges. - * - * @param {Rectangle} rectangle The rectangle to validate - * - * @exception {DeveloperError} north must be in the interval [-Pi/2, Pi/2]. - * @exception {DeveloperError} south must be in the interval [-Pi/2, Pi/2]. - * @exception {DeveloperError} east must be in the interval [-Pi, Pi]. - * @exception {DeveloperError} west must be in the interval [-Pi, Pi]. - */ - Rectangle.validate = function (rectangle) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - - const north = rectangle.north; - Check.Check.typeOf.number.greaterThanOrEquals( - "north", - north, - -Math$1.CesiumMath.PI_OVER_TWO - ); - Check.Check.typeOf.number.lessThanOrEquals("north", north, Math$1.CesiumMath.PI_OVER_TWO); - - const south = rectangle.south; - Check.Check.typeOf.number.greaterThanOrEquals( - "south", - south, - -Math$1.CesiumMath.PI_OVER_TWO - ); - Check.Check.typeOf.number.lessThanOrEquals("south", south, Math$1.CesiumMath.PI_OVER_TWO); - - const west = rectangle.west; - Check.Check.typeOf.number.greaterThanOrEquals("west", west, -Math.PI); - Check.Check.typeOf.number.lessThanOrEquals("west", west, Math.PI); - - const east = rectangle.east; - Check.Check.typeOf.number.greaterThanOrEquals("east", east, -Math.PI); - Check.Check.typeOf.number.lessThanOrEquals("east", east, Math.PI); - //>>includeEnd('debug'); - }; - - /** - * Computes the southwest corner of a rectangle. - * - * @param {Rectangle} rectangle The rectangle for which to find the corner - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided. - */ - Rectangle.southwest = function (rectangle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartographic(rectangle.west, rectangle.south); - } - result.longitude = rectangle.west; - result.latitude = rectangle.south; - result.height = 0.0; - return result; - }; - - /** - * Computes the northwest corner of a rectangle. - * - * @param {Rectangle} rectangle The rectangle for which to find the corner - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided. - */ - Rectangle.northwest = function (rectangle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartographic(rectangle.west, rectangle.north); - } - result.longitude = rectangle.west; - result.latitude = rectangle.north; - result.height = 0.0; - return result; - }; - - /** - * Computes the northeast corner of a rectangle. - * - * @param {Rectangle} rectangle The rectangle for which to find the corner - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided. - */ - Rectangle.northeast = function (rectangle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartographic(rectangle.east, rectangle.north); - } - result.longitude = rectangle.east; - result.latitude = rectangle.north; - result.height = 0.0; - return result; - }; - - /** - * Computes the southeast corner of a rectangle. - * - * @param {Rectangle} rectangle The rectangle for which to find the corner - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided. - */ - Rectangle.southeast = function (rectangle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartographic(rectangle.east, rectangle.south); - } - result.longitude = rectangle.east; - result.latitude = rectangle.south; - result.height = 0.0; - return result; - }; - - /** - * Computes the center of a rectangle. - * - * @param {Rectangle} rectangle The rectangle for which to find the center - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided. - */ - Rectangle.center = function (rectangle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - - let east = rectangle.east; - const west = rectangle.west; - - if (east < west) { - east += Math$1.CesiumMath.TWO_PI; - } - - const longitude = Math$1.CesiumMath.negativePiToPi((west + east) * 0.5); - const latitude = (rectangle.south + rectangle.north) * 0.5; - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartographic(longitude, latitude); - } - - result.longitude = longitude; - result.latitude = latitude; - result.height = 0.0; - return result; - }; - - /** - * Computes the intersection of two rectangles. This function assumes that the rectangle's coordinates are - * latitude and longitude in radians and produces a correct intersection, taking into account the fact that - * the same angle can be represented with multiple values as well as the wrapping of longitude at the - * anti-meridian. For a simple intersection that ignores these factors and can be used with projected - * coordinates, see {@link Rectangle.simpleIntersection}. - * - * @param {Rectangle} rectangle On rectangle to find an intersection - * @param {Rectangle} otherRectangle Another rectangle to find an intersection - * @param {Rectangle} [result] The object onto which to store the result. - * @returns {Rectangle|undefined} The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection. - */ - Rectangle.intersection = function (rectangle, otherRectangle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Check.Check.typeOf.object("otherRectangle", otherRectangle); - //>>includeEnd('debug'); - - let rectangleEast = rectangle.east; - let rectangleWest = rectangle.west; - - let otherRectangleEast = otherRectangle.east; - let otherRectangleWest = otherRectangle.west; - - if (rectangleEast < rectangleWest && otherRectangleEast > 0.0) { - rectangleEast += Math$1.CesiumMath.TWO_PI; - } else if (otherRectangleEast < otherRectangleWest && rectangleEast > 0.0) { - otherRectangleEast += Math$1.CesiumMath.TWO_PI; - } - - if (rectangleEast < rectangleWest && otherRectangleWest < 0.0) { - otherRectangleWest += Math$1.CesiumMath.TWO_PI; - } else if (otherRectangleEast < otherRectangleWest && rectangleWest < 0.0) { - rectangleWest += Math$1.CesiumMath.TWO_PI; - } - - const west = Math$1.CesiumMath.negativePiToPi( - Math.max(rectangleWest, otherRectangleWest) - ); - const east = Math$1.CesiumMath.negativePiToPi( - Math.min(rectangleEast, otherRectangleEast) - ); - - if ( - (rectangle.west < rectangle.east || - otherRectangle.west < otherRectangle.east) && - east <= west - ) { - return undefined; - } - - const south = Math.max(rectangle.south, otherRectangle.south); - const north = Math.min(rectangle.north, otherRectangle.north); - - if (south >= north) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new Rectangle(west, south, east, north); - } - result.west = west; - result.south = south; - result.east = east; - result.north = north; - return result; - }; - - /** - * Computes a simple intersection of two rectangles. Unlike {@link Rectangle.intersection}, this function - * does not attempt to put the angular coordinates into a consistent range or to account for crossing the - * anti-meridian. As such, it can be used for rectangles where the coordinates are not simply latitude - * and longitude (i.e. projected coordinates). - * - * @param {Rectangle} rectangle On rectangle to find an intersection - * @param {Rectangle} otherRectangle Another rectangle to find an intersection - * @param {Rectangle} [result] The object onto which to store the result. - * @returns {Rectangle|undefined} The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection. - */ - Rectangle.simpleIntersection = function (rectangle, otherRectangle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Check.Check.typeOf.object("otherRectangle", otherRectangle); - //>>includeEnd('debug'); - - const west = Math.max(rectangle.west, otherRectangle.west); - const south = Math.max(rectangle.south, otherRectangle.south); - const east = Math.min(rectangle.east, otherRectangle.east); - const north = Math.min(rectangle.north, otherRectangle.north); - - if (south >= north || west >= east) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new Rectangle(west, south, east, north); - } - - result.west = west; - result.south = south; - result.east = east; - result.north = north; - return result; - }; - - /** - * Computes a rectangle that is the union of two rectangles. - * - * @param {Rectangle} rectangle A rectangle to enclose in rectangle. - * @param {Rectangle} otherRectangle A rectangle to enclose in a rectangle. - * @param {Rectangle} [result] The object onto which to store the result. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. - */ - Rectangle.union = function (rectangle, otherRectangle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Check.Check.typeOf.object("otherRectangle", otherRectangle); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Rectangle(); - } - - let rectangleEast = rectangle.east; - let rectangleWest = rectangle.west; - - let otherRectangleEast = otherRectangle.east; - let otherRectangleWest = otherRectangle.west; - - if (rectangleEast < rectangleWest && otherRectangleEast > 0.0) { - rectangleEast += Math$1.CesiumMath.TWO_PI; - } else if (otherRectangleEast < otherRectangleWest && rectangleEast > 0.0) { - otherRectangleEast += Math$1.CesiumMath.TWO_PI; - } - - if (rectangleEast < rectangleWest && otherRectangleWest < 0.0) { - otherRectangleWest += Math$1.CesiumMath.TWO_PI; - } else if (otherRectangleEast < otherRectangleWest && rectangleWest < 0.0) { - rectangleWest += Math$1.CesiumMath.TWO_PI; - } - - const west = Math$1.CesiumMath.negativePiToPi( - Math.min(rectangleWest, otherRectangleWest) - ); - const east = Math$1.CesiumMath.negativePiToPi( - Math.max(rectangleEast, otherRectangleEast) - ); - - result.west = west; - result.south = Math.min(rectangle.south, otherRectangle.south); - result.east = east; - result.north = Math.max(rectangle.north, otherRectangle.north); - - return result; - }; - - /** - * Computes a rectangle by enlarging the provided rectangle until it contains the provided cartographic. - * - * @param {Rectangle} rectangle A rectangle to expand. - * @param {Cartographic} cartographic A cartographic to enclose in a rectangle. - * @param {Rectangle} [result] The object onto which to store the result. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if one was not provided. - */ - Rectangle.expand = function (rectangle, cartographic, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Check.Check.typeOf.object("cartographic", cartographic); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Rectangle(); - } - - result.west = Math.min(rectangle.west, cartographic.longitude); - result.south = Math.min(rectangle.south, cartographic.latitude); - result.east = Math.max(rectangle.east, cartographic.longitude); - result.north = Math.max(rectangle.north, cartographic.latitude); - - return result; - }; - - /** - * Returns true if the cartographic is on or inside the rectangle, false otherwise. - * - * @param {Rectangle} rectangle The rectangle - * @param {Cartographic} cartographic The cartographic to test. - * @returns {Boolean} true if the provided cartographic is inside the rectangle, false otherwise. - */ - Rectangle.contains = function (rectangle, cartographic) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Check.Check.typeOf.object("cartographic", cartographic); - //>>includeEnd('debug'); - - let longitude = cartographic.longitude; - const latitude = cartographic.latitude; - - const west = rectangle.west; - let east = rectangle.east; - - if (east < west) { - east += Math$1.CesiumMath.TWO_PI; - if (longitude < 0.0) { - longitude += Math$1.CesiumMath.TWO_PI; - } - } - return ( - (longitude > west || - Math$1.CesiumMath.equalsEpsilon(longitude, west, Math$1.CesiumMath.EPSILON14)) && - (longitude < east || - Math$1.CesiumMath.equalsEpsilon(longitude, east, Math$1.CesiumMath.EPSILON14)) && - latitude >= rectangle.south && - latitude <= rectangle.north - ); - }; - - const subsampleLlaScratch = new Matrix3.Cartographic(); - /** - * Samples a rectangle so that it includes a list of Cartesian points suitable for passing to - * {@link BoundingSphere#fromPoints}. Sampling is necessary to account - * for rectangles that cover the poles or cross the equator. - * - * @param {Rectangle} rectangle The rectangle to subsample. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use. - * @param {Number} [surfaceHeight=0.0] The height of the rectangle above the ellipsoid. - * @param {Cartesian3[]} [result] The array of Cartesians onto which to store the result. - * @returns {Cartesian3[]} The modified result parameter or a new Array of Cartesians instances if none was provided. - */ - Rectangle.subsample = function (rectangle, ellipsoid, surfaceHeight, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - surfaceHeight = defaultValue.defaultValue(surfaceHeight, 0.0); - - if (!defaultValue.defined(result)) { - result = []; - } - let length = 0; - - const north = rectangle.north; - const south = rectangle.south; - const east = rectangle.east; - const west = rectangle.west; - - const lla = subsampleLlaScratch; - lla.height = surfaceHeight; - - lla.longitude = west; - lla.latitude = north; - result[length] = ellipsoid.cartographicToCartesian(lla, result[length]); - length++; - - lla.longitude = east; - result[length] = ellipsoid.cartographicToCartesian(lla, result[length]); - length++; - - lla.latitude = south; - result[length] = ellipsoid.cartographicToCartesian(lla, result[length]); - length++; - - lla.longitude = west; - result[length] = ellipsoid.cartographicToCartesian(lla, result[length]); - length++; - - if (north < 0.0) { - lla.latitude = north; - } else if (south > 0.0) { - lla.latitude = south; - } else { - lla.latitude = 0.0; - } - - for (let i = 1; i < 8; ++i) { - lla.longitude = -Math.PI + i * Math$1.CesiumMath.PI_OVER_TWO; - if (Rectangle.contains(rectangle, lla)) { - result[length] = ellipsoid.cartographicToCartesian(lla, result[length]); - length++; - } - } - - if (lla.latitude === 0.0) { - lla.longitude = west; - result[length] = ellipsoid.cartographicToCartesian(lla, result[length]); - length++; - lla.longitude = east; - result[length] = ellipsoid.cartographicToCartesian(lla, result[length]); - length++; - } - result.length = length; - return result; - }; - - /** - * Computes a subsection of a rectangle from normalized coordinates in the range [0.0, 1.0]. - * - * @param {Rectangle} rectangle The rectangle to subsection. - * @param {Number} westLerp The west interpolation factor in the range [0.0, 1.0]. Must be less than or equal to eastLerp. - * @param {Number} southLerp The south interpolation factor in the range [0.0, 1.0]. Must be less than or equal to northLerp. - * @param {Number} eastLerp The east interpolation factor in the range [0.0, 1.0]. Must be greater than or equal to westLerp. - * @param {Number} northLerp The north interpolation factor in the range [0.0, 1.0]. Must be greater than or equal to southLerp. - * @param {Rectangle} [result] The object onto which to store the result. - * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. - */ - Rectangle.subsection = function ( - rectangle, - westLerp, - southLerp, - eastLerp, - northLerp, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Check.Check.typeOf.number.greaterThanOrEquals("westLerp", westLerp, 0.0); - Check.Check.typeOf.number.lessThanOrEquals("westLerp", westLerp, 1.0); - Check.Check.typeOf.number.greaterThanOrEquals("southLerp", southLerp, 0.0); - Check.Check.typeOf.number.lessThanOrEquals("southLerp", southLerp, 1.0); - Check.Check.typeOf.number.greaterThanOrEquals("eastLerp", eastLerp, 0.0); - Check.Check.typeOf.number.lessThanOrEquals("eastLerp", eastLerp, 1.0); - Check.Check.typeOf.number.greaterThanOrEquals("northLerp", northLerp, 0.0); - Check.Check.typeOf.number.lessThanOrEquals("northLerp", northLerp, 1.0); - - Check.Check.typeOf.number.lessThanOrEquals("westLerp", westLerp, eastLerp); - Check.Check.typeOf.number.lessThanOrEquals("southLerp", southLerp, northLerp); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Rectangle(); - } - - // This function doesn't use CesiumMath.lerp because it has floating point precision problems - // when the start and end values are the same but the t changes. - - if (rectangle.west <= rectangle.east) { - const width = rectangle.east - rectangle.west; - result.west = rectangle.west + westLerp * width; - result.east = rectangle.west + eastLerp * width; - } else { - const width = Math$1.CesiumMath.TWO_PI + rectangle.east - rectangle.west; - result.west = Math$1.CesiumMath.negativePiToPi(rectangle.west + westLerp * width); - result.east = Math$1.CesiumMath.negativePiToPi(rectangle.west + eastLerp * width); - } - const height = rectangle.north - rectangle.south; - result.south = rectangle.south + southLerp * height; - result.north = rectangle.south + northLerp * height; - - // Fix floating point precision problems when t = 1 - if (westLerp === 1.0) { - result.west = rectangle.east; - } - if (eastLerp === 1.0) { - result.east = rectangle.east; - } - if (southLerp === 1.0) { - result.south = rectangle.north; - } - if (northLerp === 1.0) { - result.north = rectangle.north; - } - - return result; - }; - - /** - * The largest possible rectangle. - * - * @type {Rectangle} - * @constant - */ - Rectangle.MAX_VALUE = Object.freeze( - new Rectangle( - -Math.PI, - -Math$1.CesiumMath.PI_OVER_TWO, - Math.PI, - Math$1.CesiumMath.PI_OVER_TWO - ) - ); - - /** - * A 2D Cartesian point. - * @alias Cartesian2 - * @constructor - * - * @param {Number} [x=0.0] The X component. - * @param {Number} [y=0.0] The Y component. - * - * @see Cartesian3 - * @see Cartesian4 - * @see Packable - */ - function Cartesian2(x, y) { - /** - * The X component. - * @type {Number} - * @default 0.0 - */ - this.x = defaultValue.defaultValue(x, 0.0); - - /** - * The Y component. - * @type {Number} - * @default 0.0 - */ - this.y = defaultValue.defaultValue(y, 0.0); - } - - /** - * Creates a Cartesian2 instance from x and y coordinates. - * - * @param {Number} x The x coordinate. - * @param {Number} y The y coordinate. - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. - */ - Cartesian2.fromElements = function (x, y, result) { - if (!defaultValue.defined(result)) { - return new Cartesian2(x, y); - } - - result.x = x; - result.y = y; - return result; - }; - - /** - * Duplicates a Cartesian2 instance. - * - * @param {Cartesian2} cartesian The Cartesian to duplicate. - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. (Returns undefined if cartesian is undefined) - */ - Cartesian2.clone = function (cartesian, result) { - if (!defaultValue.defined(cartesian)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new Cartesian2(cartesian.x, cartesian.y); - } - - result.x = cartesian.x; - result.y = cartesian.y; - return result; - }; - - /** - * Creates a Cartesian2 instance from an existing Cartesian3. This simply takes the - * x and y properties of the Cartesian3 and drops z. - * @function - * - * @param {Cartesian3} cartesian The Cartesian3 instance to create a Cartesian2 instance from. - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. - */ - Cartesian2.fromCartesian3 = Cartesian2.clone; - - /** - * Creates a Cartesian2 instance from an existing Cartesian4. This simply takes the - * x and y properties of the Cartesian4 and drops z and w. - * @function - * - * @param {Cartesian4} cartesian The Cartesian4 instance to create a Cartesian2 instance from. - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. - */ - Cartesian2.fromCartesian4 = Cartesian2.clone; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Cartesian2.packedLength = 2; - - /** - * Stores the provided instance into the provided array. - * - * @param {Cartesian2} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Cartesian2.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.x; - array[startingIndex] = value.y; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Cartesian2} [result] The object into which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. - */ - Cartesian2.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new Cartesian2(); - } - result.x = array[startingIndex++]; - result.y = array[startingIndex]; - return result; - }; - - /** - * Flattens an array of Cartesian2s into an array of components. - * - * @param {Cartesian2[]} array The array of cartesians to pack. - * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 2 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 2) elements. - * @returns {Number[]} The packed array. - */ - Cartesian2.packArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - const length = array.length; - const resultLength = length * 2; - if (!defaultValue.defined(result)) { - result = new Array(resultLength); - } else if (!Array.isArray(result) && result.length !== resultLength) { - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "If result is a typed array, it must have exactly array.length * 2 elements" - ); - //>>includeEnd('debug'); - } else if (result.length !== resultLength) { - result.length = resultLength; - } - - for (let i = 0; i < length; ++i) { - Cartesian2.pack(array[i], result, i * 2); - } - return result; - }; - - /** - * Unpacks an array of cartesian components into an array of Cartesian2s. - * - * @param {Number[]} array The array of components to unpack. - * @param {Cartesian2[]} [result] The array onto which to store the result. - * @returns {Cartesian2[]} The unpacked array. - */ - Cartesian2.unpackArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - Check.Check.typeOf.number.greaterThanOrEquals("array.length", array.length, 2); - if (array.length % 2 !== 0) { - throw new Check.DeveloperError("array length must be a multiple of 2."); - } - //>>includeEnd('debug'); - - const length = array.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 2); - } else { - result.length = length / 2; - } - - for (let i = 0; i < length; i += 2) { - const index = i / 2; - result[index] = Cartesian2.unpack(array, i, result[index]); - } - return result; - }; - - /** - * Creates a Cartesian2 from two consecutive elements in an array. - * @function - * - * @param {Number[]} array The array whose two consecutive elements correspond to the x and y components, respectively. - * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component. - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. - * - * @example - * // Create a Cartesian2 with (1.0, 2.0) - * const v = [1.0, 2.0]; - * const p = Cesium.Cartesian2.fromArray(v); - * - * // Create a Cartesian2 with (1.0, 2.0) using an offset into an array - * const v2 = [0.0, 0.0, 1.0, 2.0]; - * const p2 = Cesium.Cartesian2.fromArray(v2, 2); - */ - Cartesian2.fromArray = Cartesian2.unpack; - - /** - * Computes the value of the maximum component for the supplied Cartesian. - * - * @param {Cartesian2} cartesian The cartesian to use. - * @returns {Number} The value of the maximum component. - */ - Cartesian2.maximumComponent = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return Math.max(cartesian.x, cartesian.y); - }; - - /** - * Computes the value of the minimum component for the supplied Cartesian. - * - * @param {Cartesian2} cartesian The cartesian to use. - * @returns {Number} The value of the minimum component. - */ - Cartesian2.minimumComponent = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return Math.min(cartesian.x, cartesian.y); - }; - - /** - * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians. - * - * @param {Cartesian2} first A cartesian to compare. - * @param {Cartesian2} second A cartesian to compare. - * @param {Cartesian2} result The object into which to store the result. - * @returns {Cartesian2} A cartesian with the minimum components. - */ - Cartesian2.minimumByComponent = function (first, second, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("first", first); - Check.Check.typeOf.object("second", second); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.min(first.x, second.x); - result.y = Math.min(first.y, second.y); - - return result; - }; - - /** - * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians. - * - * @param {Cartesian2} first A cartesian to compare. - * @param {Cartesian2} second A cartesian to compare. - * @param {Cartesian2} result The object into which to store the result. - * @returns {Cartesian2} A cartesian with the maximum components. - */ - Cartesian2.maximumByComponent = function (first, second, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("first", first); - Check.Check.typeOf.object("second", second); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.max(first.x, second.x); - result.y = Math.max(first.y, second.y); - return result; - }; - - /** - * Constrain a value to lie between two values. - * - * @param {Cartesian2} value The value to clamp. - * @param {Cartesian2} min The minimum bound. - * @param {Cartesian2} max The maximum bound. - * @param {Cartesian2} result The object into which to store the result. - * @returns {Cartesian2} The clamped value such that min <= result <= max. - */ - Cartesian2.clamp = function (value, min, max, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.typeOf.object("min", min); - Check.Check.typeOf.object("max", max); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const x = Math$1.CesiumMath.clamp(value.x, min.x, max.x); - const y = Math$1.CesiumMath.clamp(value.y, min.y, max.y); - - result.x = x; - result.y = y; - - return result; - }; - - /** - * Computes the provided Cartesian's squared magnitude. - * - * @param {Cartesian2} cartesian The Cartesian instance whose squared magnitude is to be computed. - * @returns {Number} The squared magnitude. - */ - Cartesian2.magnitudeSquared = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return cartesian.x * cartesian.x + cartesian.y * cartesian.y; - }; - - /** - * Computes the Cartesian's magnitude (length). - * - * @param {Cartesian2} cartesian The Cartesian instance whose magnitude is to be computed. - * @returns {Number} The magnitude. - */ - Cartesian2.magnitude = function (cartesian) { - return Math.sqrt(Cartesian2.magnitudeSquared(cartesian)); - }; - - const distanceScratch = new Cartesian2(); - - /** - * Computes the distance between two points. - * - * @param {Cartesian2} left The first point to compute the distance from. - * @param {Cartesian2} right The second point to compute the distance to. - * @returns {Number} The distance between two points. - * - * @example - * // Returns 1.0 - * const d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(2.0, 0.0)); - */ - Cartesian2.distance = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - Cartesian2.subtract(left, right, distanceScratch); - return Cartesian2.magnitude(distanceScratch); - }; - - /** - * Computes the squared distance between two points. Comparing squared distances - * using this function is more efficient than comparing distances using {@link Cartesian2#distance}. - * - * @param {Cartesian2} left The first point to compute the distance from. - * @param {Cartesian2} right The second point to compute the distance to. - * @returns {Number} The distance between two points. - * - * @example - * // Returns 4.0, not 2.0 - * const d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(3.0, 0.0)); - */ - Cartesian2.distanceSquared = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - Cartesian2.subtract(left, right, distanceScratch); - return Cartesian2.magnitudeSquared(distanceScratch); - }; - - /** - * Computes the normalized form of the supplied Cartesian. - * - * @param {Cartesian2} cartesian The Cartesian to be normalized. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.normalize = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const magnitude = Cartesian2.magnitude(cartesian); - - result.x = cartesian.x / magnitude; - result.y = cartesian.y / magnitude; - - //>>includeStart('debug', pragmas.debug); - if (isNaN(result.x) || isNaN(result.y)) { - throw new Check.DeveloperError("normalized result is not a number"); - } - //>>includeEnd('debug'); - - return result; - }; - - /** - * Computes the dot (scalar) product of two Cartesians. - * - * @param {Cartesian2} left The first Cartesian. - * @param {Cartesian2} right The second Cartesian. - * @returns {Number} The dot product. - */ - Cartesian2.dot = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - return left.x * right.x + left.y * right.y; - }; - - /** - * Computes the magnitude of the cross product that would result from implicitly setting the Z coordinate of the input vectors to 0 - * - * @param {Cartesian2} left The first Cartesian. - * @param {Cartesian2} right The second Cartesian. - * @returns {Number} The cross product. - */ - Cartesian2.cross = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - return left.x * right.y - left.y * right.x; - }; - - /** - * Computes the componentwise product of two Cartesians. - * - * @param {Cartesian2} left The first Cartesian. - * @param {Cartesian2} right The second Cartesian. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.multiplyComponents = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x * right.x; - result.y = left.y * right.y; - return result; - }; - - /** - * Computes the componentwise quotient of two Cartesians. - * - * @param {Cartesian2} left The first Cartesian. - * @param {Cartesian2} right The second Cartesian. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.divideComponents = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x / right.x; - result.y = left.y / right.y; - return result; - }; - - /** - * Computes the componentwise sum of two Cartesians. - * - * @param {Cartesian2} left The first Cartesian. - * @param {Cartesian2} right The second Cartesian. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.add = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x + right.x; - result.y = left.y + right.y; - return result; - }; - - /** - * Computes the componentwise difference of two Cartesians. - * - * @param {Cartesian2} left The first Cartesian. - * @param {Cartesian2} right The second Cartesian. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.subtract = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x - right.x; - result.y = left.y - right.y; - return result; - }; - - /** - * Multiplies the provided Cartesian componentwise by the provided scalar. - * - * @param {Cartesian2} cartesian The Cartesian to be scaled. - * @param {Number} scalar The scalar to multiply with. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.multiplyByScalar = function (cartesian, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = cartesian.x * scalar; - result.y = cartesian.y * scalar; - return result; - }; - - /** - * Divides the provided Cartesian componentwise by the provided scalar. - * - * @param {Cartesian2} cartesian The Cartesian to be divided. - * @param {Number} scalar The scalar to divide by. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.divideByScalar = function (cartesian, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = cartesian.x / scalar; - result.y = cartesian.y / scalar; - return result; - }; - - /** - * Negates the provided Cartesian. - * - * @param {Cartesian2} cartesian The Cartesian to be negated. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.negate = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = -cartesian.x; - result.y = -cartesian.y; - return result; - }; - - /** - * Computes the absolute value of the provided Cartesian. - * - * @param {Cartesian2} cartesian The Cartesian whose absolute value is to be computed. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.abs = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.abs(cartesian.x); - result.y = Math.abs(cartesian.y); - return result; - }; - - const lerpScratch = new Cartesian2(); - /** - * Computes the linear interpolation or extrapolation at t using the provided cartesians. - * - * @param {Cartesian2} start The value corresponding to t at 0.0. - * @param {Cartesian2} end The value corresponding to t at 1.0. - * @param {Number} t The point along t at which to interpolate. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Cartesian2.lerp = function (start, end, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("start", start); - Check.Check.typeOf.object("end", end); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - Cartesian2.multiplyByScalar(end, t, lerpScratch); - result = Cartesian2.multiplyByScalar(start, 1.0 - t, result); - return Cartesian2.add(lerpScratch, result, result); - }; - - const angleBetweenScratch = new Cartesian2(); - const angleBetweenScratch2 = new Cartesian2(); - /** - * Returns the angle, in radians, between the provided Cartesians. - * - * @param {Cartesian2} left The first Cartesian. - * @param {Cartesian2} right The second Cartesian. - * @returns {Number} The angle between the Cartesians. - */ - Cartesian2.angleBetween = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - Cartesian2.normalize(left, angleBetweenScratch); - Cartesian2.normalize(right, angleBetweenScratch2); - return Math$1.CesiumMath.acosClamped( - Cartesian2.dot(angleBetweenScratch, angleBetweenScratch2) - ); - }; - - const mostOrthogonalAxisScratch = new Cartesian2(); - /** - * Returns the axis that is most orthogonal to the provided Cartesian. - * - * @param {Cartesian2} cartesian The Cartesian on which to find the most orthogonal axis. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The most orthogonal axis. - */ - Cartesian2.mostOrthogonalAxis = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const f = Cartesian2.normalize(cartesian, mostOrthogonalAxisScratch); - Cartesian2.abs(f, f); - - if (f.x <= f.y) { - result = Cartesian2.clone(Cartesian2.UNIT_X, result); - } else { - result = Cartesian2.clone(Cartesian2.UNIT_Y, result); - } - - return result; - }; - - /** - * Compares the provided Cartesians componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Cartesian2} [left] The first Cartesian. - * @param {Cartesian2} [right] The second Cartesian. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Cartesian2.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.x === right.x && - left.y === right.y) - ); - }; - - /** - * @private - */ - Cartesian2.equalsArray = function (cartesian, array, offset) { - return cartesian.x === array[offset] && cartesian.y === array[offset + 1]; - }; - - /** - * Compares the provided Cartesians componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {Cartesian2} [left] The first Cartesian. - * @param {Cartesian2} [right] The second Cartesian. - * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Cartesian2.equalsEpsilon = function ( - left, - right, - relativeEpsilon, - absoluteEpsilon - ) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math$1.CesiumMath.equalsEpsilon( - left.x, - right.x, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - left.y, - right.y, - relativeEpsilon, - absoluteEpsilon - )) - ); - }; - - /** - * An immutable Cartesian2 instance initialized to (0.0, 0.0). - * - * @type {Cartesian2} - * @constant - */ - Cartesian2.ZERO = Object.freeze(new Cartesian2(0.0, 0.0)); - - /** - * An immutable Cartesian2 instance initialized to (1.0, 1.0). - * - * @type {Cartesian2} - * @constant - */ - Cartesian2.ONE = Object.freeze(new Cartesian2(1.0, 1.0)); - - /** - * An immutable Cartesian2 instance initialized to (1.0, 0.0). - * - * @type {Cartesian2} - * @constant - */ - Cartesian2.UNIT_X = Object.freeze(new Cartesian2(1.0, 0.0)); - - /** - * An immutable Cartesian2 instance initialized to (0.0, 1.0). - * - * @type {Cartesian2} - * @constant - */ - Cartesian2.UNIT_Y = Object.freeze(new Cartesian2(0.0, 1.0)); - - /** - * Duplicates this Cartesian2 instance. - * - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. - */ - Cartesian2.prototype.clone = function (result) { - return Cartesian2.clone(this, result); - }; - - /** - * Compares this Cartesian against the provided Cartesian componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Cartesian2} [right] The right hand side Cartesian. - * @returns {Boolean} true if they are equal, false otherwise. - */ - Cartesian2.prototype.equals = function (right) { - return Cartesian2.equals(this, right); - }; - - /** - * Compares this Cartesian against the provided Cartesian componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {Cartesian2} [right] The right hand side Cartesian. - * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if they are within the provided epsilon, false otherwise. - */ - Cartesian2.prototype.equalsEpsilon = function ( - right, - relativeEpsilon, - absoluteEpsilon - ) { - return Cartesian2.equalsEpsilon( - this, - right, - relativeEpsilon, - absoluteEpsilon - ); - }; - - /** - * Creates a string representing this Cartesian in the format '(x, y)'. - * - * @returns {String} A string representing the provided Cartesian in the format '(x, y)'. - */ - Cartesian2.prototype.toString = function () { - return `(${this.x}, ${this.y})`; - }; - - /** - * A 2x2 matrix, indexable as a column-major order array. - * Constructor parameters are in row-major order for code readability. - * @alias Matrix2 - * @constructor - * @implements {ArrayLike} - * - * @param {Number} [column0Row0=0.0] The value for column 0, row 0. - * @param {Number} [column1Row0=0.0] The value for column 1, row 0. - * @param {Number} [column0Row1=0.0] The value for column 0, row 1. - * @param {Number} [column1Row1=0.0] The value for column 1, row 1. - * - * @see Matrix2.fromArray - * @see Matrix2.fromColumnMajorArray - * @see Matrix2.fromRowMajorArray - * @see Matrix2.fromScale - * @see Matrix2.fromUniformScale - * @see Matrix2.fromRotation - * @see Matrix3 - * @see Matrix4 - */ - function Matrix2(column0Row0, column1Row0, column0Row1, column1Row1) { - this[0] = defaultValue.defaultValue(column0Row0, 0.0); - this[1] = defaultValue.defaultValue(column0Row1, 0.0); - this[2] = defaultValue.defaultValue(column1Row0, 0.0); - this[3] = defaultValue.defaultValue(column1Row1, 0.0); - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Matrix2.packedLength = 4; - - /** - * Stores the provided instance into the provided array. - * - * @param {Matrix2} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Matrix2.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value[0]; - array[startingIndex++] = value[1]; - array[startingIndex++] = value[2]; - array[startingIndex++] = value[3]; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Matrix2} [result] The object into which to store the result. - * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided. - */ - Matrix2.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new Matrix2(); - } - - result[0] = array[startingIndex++]; - result[1] = array[startingIndex++]; - result[2] = array[startingIndex++]; - result[3] = array[startingIndex++]; - return result; - }; - - /** - * Flattens an array of Matrix2s into an array of components. The components - * are stored in column-major order. - * - * @param {Matrix2[]} array The array of matrices to pack. - * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 4 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 4) elements. - * @returns {Number[]} The packed array. - */ - Matrix2.packArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - const length = array.length; - const resultLength = length * 4; - if (!defaultValue.defined(result)) { - result = new Array(resultLength); - } else if (!Array.isArray(result) && result.length !== resultLength) { - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "If result is a typed array, it must have exactly array.length * 4 elements" - ); - //>>includeEnd('debug'); - } else if (result.length !== resultLength) { - result.length = resultLength; - } - - for (let i = 0; i < length; ++i) { - Matrix2.pack(array[i], result, i * 4); - } - return result; - }; - - /** - * Unpacks an array of column-major matrix components into an array of Matrix2s. - * - * @param {Number[]} array The array of components to unpack. - * @param {Matrix2[]} [result] The array onto which to store the result. - * @returns {Matrix2[]} The unpacked array. - */ - Matrix2.unpackArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - Check.Check.typeOf.number.greaterThanOrEquals("array.length", array.length, 4); - if (array.length % 4 !== 0) { - throw new Check.DeveloperError("array length must be a multiple of 4."); - } - //>>includeEnd('debug'); - - const length = array.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 4); - } else { - result.length = length / 4; - } - - for (let i = 0; i < length; i += 4) { - const index = i / 4; - result[index] = Matrix2.unpack(array, i, result[index]); - } - return result; - }; - - /** - * Duplicates a Matrix2 instance. - * - * @param {Matrix2} matrix The matrix to duplicate. - * @param {Matrix2} [result] The object onto which to store the result. - * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided. (Returns undefined if matrix is undefined) - */ - Matrix2.clone = function (matrix, result) { - if (!defaultValue.defined(matrix)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new Matrix2(matrix[0], matrix[2], matrix[1], matrix[3]); - } - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[3]; - return result; - }; - - /** - * Creates a Matrix2 from 4 consecutive elements in an array. - * - * @function - * @param {Number[]} array The array whose 4 consecutive elements correspond to the positions of the matrix. Assumes column-major order. - * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix. - * @param {Matrix2} [result] The object onto which to store the result. - * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided. - * - * @example - * // Create the Matrix2: - * // [1.0, 2.0] - * // [1.0, 2.0] - * - * const v = [1.0, 1.0, 2.0, 2.0]; - * const m = Cesium.Matrix2.fromArray(v); - * - * // Create same Matrix2 with using an offset into an array - * const v2 = [0.0, 0.0, 1.0, 1.0, 2.0, 2.0]; - * const m2 = Cesium.Matrix2.fromArray(v2, 2); - */ - Matrix2.fromArray = Matrix2.unpack; - /** - * Creates a Matrix2 instance from a column-major order array. - * - * @param {Number[]} values The column-major order array. - * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided. - */ - Matrix2.fromColumnMajorArray = function (values, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("values", values); - //>>includeEnd('debug'); - - return Matrix2.clone(values, result); - }; - - /** - * Creates a Matrix2 instance from a row-major order array. - * The resulting matrix will be in column-major order. - * - * @param {Number[]} values The row-major order array. - * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided. - */ - Matrix2.fromRowMajorArray = function (values, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("values", values); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix2(values[0], values[1], values[2], values[3]); - } - result[0] = values[0]; - result[1] = values[2]; - result[2] = values[1]; - result[3] = values[3]; - return result; - }; - - /** - * Computes a Matrix2 instance representing a non-uniform scale. - * - * @param {Cartesian2} scale The x and y scale factors. - * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided. - * - * @example - * // Creates - * // [7.0, 0.0] - * // [0.0, 8.0] - * const m = Cesium.Matrix2.fromScale(new Cesium.Cartesian2(7.0, 8.0)); - */ - Matrix2.fromScale = function (scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("scale", scale); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix2(scale.x, 0.0, 0.0, scale.y); - } - - result[0] = scale.x; - result[1] = 0.0; - result[2] = 0.0; - result[3] = scale.y; - return result; - }; - - /** - * Computes a Matrix2 instance representing a uniform scale. - * - * @param {Number} scale The uniform scale factor. - * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided. - * - * @example - * // Creates - * // [2.0, 0.0] - * // [0.0, 2.0] - * const m = Cesium.Matrix2.fromUniformScale(2.0); - */ - Matrix2.fromUniformScale = function (scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("scale", scale); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix2(scale, 0.0, 0.0, scale); - } - - result[0] = scale; - result[1] = 0.0; - result[2] = 0.0; - result[3] = scale; - return result; - }; - - /** - * Creates a rotation matrix. - * - * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise. - * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided. - * - * @example - * // Rotate a point 45 degrees counterclockwise. - * const p = new Cesium.Cartesian2(5, 6); - * const m = Cesium.Matrix2.fromRotation(Cesium.Math.toRadians(45.0)); - * const rotated = Cesium.Matrix2.multiplyByVector(m, p, new Cesium.Cartesian2()); - */ - Matrix2.fromRotation = function (angle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("angle", angle); - //>>includeEnd('debug'); - - const cosAngle = Math.cos(angle); - const sinAngle = Math.sin(angle); - - if (!defaultValue.defined(result)) { - return new Matrix2(cosAngle, -sinAngle, sinAngle, cosAngle); - } - result[0] = cosAngle; - result[1] = sinAngle; - result[2] = -sinAngle; - result[3] = cosAngle; - return result; - }; - - /** - * Creates an Array from the provided Matrix2 instance. - * The array will be in column-major order. - * - * @param {Matrix2} matrix The matrix to use.. - * @param {Number[]} [result] The Array onto which to store the result. - * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided. - */ - Matrix2.toArray = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return [matrix[0], matrix[1], matrix[2], matrix[3]]; - } - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[3]; - return result; - }; - - /** - * Computes the array index of the element at the provided row and column. - * - * @param {Number} row The zero-based index of the row. - * @param {Number} column The zero-based index of the column. - * @returns {Number} The index of the element at the provided row and column. - * - * @exception {DeveloperError} row must be 0 or 1. - * @exception {DeveloperError} column must be 0 or 1. - * - * @example - * const myMatrix = new Cesium.Matrix2(); - * const column1Row0Index = Cesium.Matrix2.getElementIndex(1, 0); - * const column1Row0 = myMatrix[column1Row0Index] - * myMatrix[column1Row0Index] = 10.0; - */ - Matrix2.getElementIndex = function (column, row) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThanOrEquals("row", row, 0); - Check.Check.typeOf.number.lessThanOrEquals("row", row, 1); - - Check.Check.typeOf.number.greaterThanOrEquals("column", column, 0); - Check.Check.typeOf.number.lessThanOrEquals("column", column, 1); - //>>includeEnd('debug'); - - return column * 2 + row; - }; - - /** - * Retrieves a copy of the matrix column at the provided index as a Cartesian2 instance. - * - * @param {Matrix2} matrix The matrix to use. - * @param {Number} index The zero-based index of the column to retrieve. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - * - * @exception {DeveloperError} index must be 0 or 1. - */ - Matrix2.getColumn = function (matrix, index, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 1); - - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const startIndex = index * 2; - const x = matrix[startIndex]; - const y = matrix[startIndex + 1]; - - result.x = x; - result.y = y; - return result; - }; - - /** - * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian2 instance. - * - * @param {Matrix2} matrix The matrix to use. - * @param {Number} index The zero-based index of the column to set. - * @param {Cartesian2} cartesian The Cartesian whose values will be assigned to the specified column. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - * - * @exception {DeveloperError} index must be 0 or 1. - */ - Matrix2.setColumn = function (matrix, index, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 1); - - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result = Matrix2.clone(matrix, result); - const startIndex = index * 2; - result[startIndex] = cartesian.x; - result[startIndex + 1] = cartesian.y; - return result; - }; - - /** - * Retrieves a copy of the matrix row at the provided index as a Cartesian2 instance. - * - * @param {Matrix2} matrix The matrix to use. - * @param {Number} index The zero-based index of the row to retrieve. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - * - * @exception {DeveloperError} index must be 0 or 1. - */ - Matrix2.getRow = function (matrix, index, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 1); - - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const x = matrix[index]; - const y = matrix[index + 2]; - - result.x = x; - result.y = y; - return result; - }; - - /** - * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian2 instance. - * - * @param {Matrix2} matrix The matrix to use. - * @param {Number} index The zero-based index of the row to set. - * @param {Cartesian2} cartesian The Cartesian whose values will be assigned to the specified row. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - * - * @exception {DeveloperError} index must be 0 or 1. - */ - Matrix2.setRow = function (matrix, index, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 1); - - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result = Matrix2.clone(matrix, result); - result[index] = cartesian.x; - result[index + 2] = cartesian.y; - return result; - }; - - const scaleScratch1 = new Cartesian2(); - - /** - * Computes a new matrix that replaces the scale with the provided scale. - * This assumes the matrix is an affine transformation. - * - * @param {Matrix2} matrix The matrix to use. - * @param {Cartesian2} scale The scale that replaces the scale of the provided matrix. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - * - * @see Matrix2.setUniformScale - * @see Matrix2.fromScale - * @see Matrix2.fromUniformScale - * @see Matrix2.multiplyByScale - * @see Matrix2.multiplyByUniformScale - * @see Matrix2.getScale - */ - Matrix2.setScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const existingScale = Matrix2.getScale(matrix, scaleScratch1); - const scaleRatioX = scale.x / existingScale.x; - const scaleRatioY = scale.y / existingScale.y; - - result[0] = matrix[0] * scaleRatioX; - result[1] = matrix[1] * scaleRatioX; - result[2] = matrix[2] * scaleRatioY; - result[3] = matrix[3] * scaleRatioY; - - return result; - }; - - const scaleScratch2 = new Cartesian2(); - - /** - * Computes a new matrix that replaces the scale with the provided uniform scale. - * This assumes the matrix is an affine transformation. - * - * @param {Matrix2} matrix The matrix to use. - * @param {Number} scale The uniform scale that replaces the scale of the provided matrix. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - * - * @see Matrix2.setScale - * @see Matrix2.fromScale - * @see Matrix2.fromUniformScale - * @see Matrix2.multiplyByScale - * @see Matrix2.multiplyByUniformScale - * @see Matrix2.getScale - */ - Matrix2.setUniformScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const existingScale = Matrix2.getScale(matrix, scaleScratch2); - const scaleRatioX = scale / existingScale.x; - const scaleRatioY = scale / existingScale.y; - - result[0] = matrix[0] * scaleRatioX; - result[1] = matrix[1] * scaleRatioX; - result[2] = matrix[2] * scaleRatioY; - result[3] = matrix[3] * scaleRatioY; - - return result; - }; - - const scratchColumn = new Cartesian2(); - - /** - * Extracts the non-uniform scale assuming the matrix is an affine transformation. - * - * @param {Matrix2} matrix The matrix. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - * - * @see Matrix2.multiplyByScale - * @see Matrix2.multiplyByUniformScale - * @see Matrix2.fromScale - * @see Matrix2.fromUniformScale - * @see Matrix2.setScale - * @see Matrix2.setUniformScale - */ - Matrix2.getScale = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Cartesian2.magnitude( - Cartesian2.fromElements(matrix[0], matrix[1], scratchColumn) - ); - result.y = Cartesian2.magnitude( - Cartesian2.fromElements(matrix[2], matrix[3], scratchColumn) - ); - return result; - }; - - const scaleScratch3 = new Cartesian2(); - - /** - * Computes the maximum scale assuming the matrix is an affine transformation. - * The maximum scale is the maximum length of the column vectors. - * - * @param {Matrix2} matrix The matrix. - * @returns {Number} The maximum scale. - */ - Matrix2.getMaximumScale = function (matrix) { - Matrix2.getScale(matrix, scaleScratch3); - return Cartesian2.maximumComponent(scaleScratch3); - }; - - const scaleScratch4 = new Cartesian2(); - - /** - * Sets the rotation assuming the matrix is an affine transformation. - * - * @param {Matrix2} matrix The matrix. - * @param {Matrix2} rotation The rotation matrix. - * @returns {Matrix2} The modified result parameter. - * - * @see Matrix2.fromRotation - * @see Matrix2.getRotation - */ - Matrix2.setRotation = function (matrix, rotation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const scale = Matrix2.getScale(matrix, scaleScratch4); - - result[0] = rotation[0] * scale.x; - result[1] = rotation[1] * scale.x; - result[2] = rotation[2] * scale.y; - result[3] = rotation[3] * scale.y; - - return result; - }; - - const scaleScratch5 = new Cartesian2(); - - /** - * Extracts the rotation matrix assuming the matrix is an affine transformation. - * - * @param {Matrix2} matrix The matrix. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - * - * @see Matrix2.setRotation - * @see Matrix2.fromRotation - */ - Matrix2.getRotation = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const scale = Matrix2.getScale(matrix, scaleScratch5); - - result[0] = matrix[0] / scale.x; - result[1] = matrix[1] / scale.x; - result[2] = matrix[2] / scale.y; - result[3] = matrix[3] / scale.y; - - return result; - }; - - /** - * Computes the product of two matrices. - * - * @param {Matrix2} left The first matrix. - * @param {Matrix2} right The second matrix. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - */ - Matrix2.multiply = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const column0Row0 = left[0] * right[0] + left[2] * right[1]; - const column1Row0 = left[0] * right[2] + left[2] * right[3]; - const column0Row1 = left[1] * right[0] + left[3] * right[1]; - const column1Row1 = left[1] * right[2] + left[3] * right[3]; - - result[0] = column0Row0; - result[1] = column0Row1; - result[2] = column1Row0; - result[3] = column1Row1; - return result; - }; - - /** - * Computes the sum of two matrices. - * - * @param {Matrix2} left The first matrix. - * @param {Matrix2} right The second matrix. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - */ - Matrix2.add = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = left[0] + right[0]; - result[1] = left[1] + right[1]; - result[2] = left[2] + right[2]; - result[3] = left[3] + right[3]; - return result; - }; - - /** - * Computes the difference of two matrices. - * - * @param {Matrix2} left The first matrix. - * @param {Matrix2} right The second matrix. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - */ - Matrix2.subtract = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = left[0] - right[0]; - result[1] = left[1] - right[1]; - result[2] = left[2] - right[2]; - result[3] = left[3] - right[3]; - return result; - }; - - /** - * Computes the product of a matrix and a column vector. - * - * @param {Matrix2} matrix The matrix. - * @param {Cartesian2} cartesian The column. - * @param {Cartesian2} result The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter. - */ - Matrix2.multiplyByVector = function (matrix, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const x = matrix[0] * cartesian.x + matrix[2] * cartesian.y; - const y = matrix[1] * cartesian.x + matrix[3] * cartesian.y; - - result.x = x; - result.y = y; - return result; - }; - - /** - * Computes the product of a matrix and a scalar. - * - * @param {Matrix2} matrix The matrix. - * @param {Number} scalar The number to multiply by. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - */ - Matrix2.multiplyByScalar = function (matrix, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0] * scalar; - result[1] = matrix[1] * scalar; - result[2] = matrix[2] * scalar; - result[3] = matrix[3] * scalar; - return result; - }; - - /** - * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix. - * - * @param {Matrix2} matrix The matrix on the left-hand side. - * @param {Number} scale The non-uniform scale on the right-hand side. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - * - * - * @example - * // Instead of Cesium.Matrix2.multiply(m, Cesium.Matrix2.fromScale(scale), m); - * Cesium.Matrix2.multiplyByScale(m, scale, m); - * - * @see Matrix2.multiplyByUniformScale - * @see Matrix2.fromScale - * @see Matrix2.fromUniformScale - * @see Matrix2.setScale - * @see Matrix2.setUniformScale - * @see Matrix2.getScale - */ - Matrix2.multiplyByScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0] * scale.x; - result[1] = matrix[1] * scale.x; - result[2] = matrix[2] * scale.y; - result[3] = matrix[3] * scale.y; - - return result; - }; - - /** - * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix. - * - * @param {Matrix2} matrix The matrix on the left-hand side. - * @param {Number} scale The uniform scale on the right-hand side. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - * - * @example - * // Instead of Cesium.Matrix2.multiply(m, Cesium.Matrix2.fromUniformScale(scale), m); - * Cesium.Matrix2.multiplyByUniformScale(m, scale, m); - * - * @see Matrix2.multiplyByScale - * @see Matrix2.fromScale - * @see Matrix2.fromUniformScale - * @see Matrix2.setScale - * @see Matrix2.setUniformScale - * @see Matrix2.getScale - */ - Matrix2.multiplyByUniformScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0] * scale; - result[1] = matrix[1] * scale; - result[2] = matrix[2] * scale; - result[3] = matrix[3] * scale; - - return result; - }; - - /** - * Creates a negated copy of the provided matrix. - * - * @param {Matrix2} matrix The matrix to negate. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - */ - Matrix2.negate = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = -matrix[0]; - result[1] = -matrix[1]; - result[2] = -matrix[2]; - result[3] = -matrix[3]; - return result; - }; - - /** - * Computes the transpose of the provided matrix. - * - * @param {Matrix2} matrix The matrix to transpose. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - */ - Matrix2.transpose = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const column0Row0 = matrix[0]; - const column0Row1 = matrix[2]; - const column1Row0 = matrix[1]; - const column1Row1 = matrix[3]; - - result[0] = column0Row0; - result[1] = column0Row1; - result[2] = column1Row0; - result[3] = column1Row1; - return result; - }; - - /** - * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements. - * - * @param {Matrix2} matrix The matrix with signed elements. - * @param {Matrix2} result The object onto which to store the result. - * @returns {Matrix2} The modified result parameter. - */ - Matrix2.abs = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = Math.abs(matrix[0]); - result[1] = Math.abs(matrix[1]); - result[2] = Math.abs(matrix[2]); - result[3] = Math.abs(matrix[3]); - - return result; - }; - - /** - * Compares the provided matrices componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Matrix2} [left] The first matrix. - * @param {Matrix2} [right] The second matrix. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Matrix2.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left[0] === right[0] && - left[1] === right[1] && - left[2] === right[2] && - left[3] === right[3]) - ); - }; - - /** - * @private - */ - Matrix2.equalsArray = function (matrix, array, offset) { - return ( - matrix[0] === array[offset] && - matrix[1] === array[offset + 1] && - matrix[2] === array[offset + 2] && - matrix[3] === array[offset + 3] - ); - }; - - /** - * Compares the provided matrices componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Matrix2} [left] The first matrix. - * @param {Matrix2} [right] The second matrix. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Matrix2.equalsEpsilon = function (left, right, epsilon) { - epsilon = defaultValue.defaultValue(epsilon, 0); - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math.abs(left[0] - right[0]) <= epsilon && - Math.abs(left[1] - right[1]) <= epsilon && - Math.abs(left[2] - right[2]) <= epsilon && - Math.abs(left[3] - right[3]) <= epsilon) - ); - }; - - /** - * An immutable Matrix2 instance initialized to the identity matrix. - * - * @type {Matrix2} - * @constant - */ - Matrix2.IDENTITY = Object.freeze(new Matrix2(1.0, 0.0, 0.0, 1.0)); - - /** - * An immutable Matrix2 instance initialized to the zero matrix. - * - * @type {Matrix2} - * @constant - */ - Matrix2.ZERO = Object.freeze(new Matrix2(0.0, 0.0, 0.0, 0.0)); - - /** - * The index into Matrix2 for column 0, row 0. - * - * @type {Number} - * @constant - * - * @example - * const matrix = new Cesium.Matrix2(); - * matrix[Cesium.Matrix2.COLUMN0ROW0] = 5.0; // set column 0, row 0 to 5.0 - */ - Matrix2.COLUMN0ROW0 = 0; - - /** - * The index into Matrix2 for column 0, row 1. - * - * @type {Number} - * @constant - * - * @example - * const matrix = new Cesium.Matrix2(); - * matrix[Cesium.Matrix2.COLUMN0ROW1] = 5.0; // set column 0, row 1 to 5.0 - */ - Matrix2.COLUMN0ROW1 = 1; - - /** - * The index into Matrix2 for column 1, row 0. - * - * @type {Number} - * @constant - * - * @example - * const matrix = new Cesium.Matrix2(); - * matrix[Cesium.Matrix2.COLUMN1ROW0] = 5.0; // set column 1, row 0 to 5.0 - */ - Matrix2.COLUMN1ROW0 = 2; - - /** - * The index into Matrix2 for column 1, row 1. - * - * @type {Number} - * @constant - * - * @example - * const matrix = new Cesium.Matrix2(); - * matrix[Cesium.Matrix2.COLUMN1ROW1] = 5.0; // set column 1, row 1 to 5.0 - */ - Matrix2.COLUMN1ROW1 = 3; - - Object.defineProperties(Matrix2.prototype, { - /** - * Gets the number of items in the collection. - * @memberof Matrix2.prototype - * - * @type {Number} - */ - length: { - get: function () { - return Matrix2.packedLength; - }, - }, - }); - - /** - * Duplicates the provided Matrix2 instance. - * - * @param {Matrix2} [result] The object onto which to store the result. - * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided. - */ - Matrix2.prototype.clone = function (result) { - return Matrix2.clone(this, result); - }; - - /** - * Compares this matrix to the provided matrix componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Matrix2} [right] The right hand side matrix. - * @returns {Boolean} true if they are equal, false otherwise. - */ - Matrix2.prototype.equals = function (right) { - return Matrix2.equals(this, right); - }; - - /** - * Compares this matrix to the provided matrix componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Matrix2} [right] The right hand side matrix. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if they are within the provided epsilon, false otherwise. - */ - Matrix2.prototype.equalsEpsilon = function (right, epsilon) { - return Matrix2.equalsEpsilon(this, right, epsilon); - }; - - /** - * Creates a string representing this Matrix with each row being - * on a separate line and in the format '(column0, column1)'. - * - * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1)'. - */ - Matrix2.prototype.toString = function () { - return `(${this[0]}, ${this[2]})\n` + `(${this[1]}, ${this[3]})`; - }; - - exports.Cartesian2 = Cartesian2; - exports.Cartesian4 = Cartesian4; - exports.Matrix2 = Matrix2; - exports.Matrix4 = Matrix4; - exports.Rectangle = Rectangle; - -})); -//# sourceMappingURL=Matrix2-036c77dd.js.map diff --git a/debug/cesium/Workers/Matrix2-036c77dd.js.map b/debug/cesium/Workers/Matrix2-036c77dd.js.map deleted file mode 100644 index 9dc81a9..0000000 --- a/debug/cesium/Workers/Matrix2-036c77dd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Matrix2-036c77dd.js","sources":["../../../Source/Core/Cartesian4.js","../../../Source/Core/Matrix4.js","../../../Source/Core/Rectangle.js","../../../Source/Core/Cartesian2.js","../../../Source/Core/Matrix2.js"],"sourcesContent":["import Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * A 4D Cartesian point.\r\n * @alias Cartesian4\r\n * @constructor\r\n *\r\n * @param {Number} [x=0.0] The X component.\r\n * @param {Number} [y=0.0] The Y component.\r\n * @param {Number} [z=0.0] The Z component.\r\n * @param {Number} [w=0.0] The W component.\r\n *\r\n * @see Cartesian2\r\n * @see Cartesian3\r\n * @see Packable\r\n */\r\nfunction Cartesian4(x, y, z, w) {\r\n /**\r\n * The X component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.x = defaultValue(x, 0.0);\r\n\r\n /**\r\n * The Y component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.y = defaultValue(y, 0.0);\r\n\r\n /**\r\n * The Z component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.z = defaultValue(z, 0.0);\r\n\r\n /**\r\n * The W component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.w = defaultValue(w, 0.0);\r\n}\r\n\r\n/**\r\n * Creates a Cartesian4 instance from x, y, z and w coordinates.\r\n *\r\n * @param {Number} x The x coordinate.\r\n * @param {Number} y The y coordinate.\r\n * @param {Number} z The z coordinate.\r\n * @param {Number} w The w coordinate.\r\n * @param {Cartesian4} [result] The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\r\n */\r\nCartesian4.fromElements = function (x, y, z, w, result) {\r\n if (!defined(result)) {\r\n return new Cartesian4(x, y, z, w);\r\n }\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Cartesian4 instance from a {@link Color}. red, green, blue,\r\n * and alpha map to x, y, z, and w, respectively.\r\n *\r\n * @param {Color} color The source color.\r\n * @param {Cartesian4} [result] The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\r\n */\r\nCartesian4.fromColor = function (color, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"color\", color);\r\n //>>includeEnd('debug');\r\n if (!defined(result)) {\r\n return new Cartesian4(color.red, color.green, color.blue, color.alpha);\r\n }\r\n\r\n result.x = color.red;\r\n result.y = color.green;\r\n result.z = color.blue;\r\n result.w = color.alpha;\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a Cartesian4 instance.\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian to duplicate.\r\n * @param {Cartesian4} [result] The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided. (Returns undefined if cartesian is undefined)\r\n */\r\nCartesian4.clone = function (cartesian, result) {\r\n if (!defined(cartesian)) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Cartesian4(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\r\n }\r\n\r\n result.x = cartesian.x;\r\n result.y = cartesian.y;\r\n result.z = cartesian.z;\r\n result.w = cartesian.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nCartesian4.packedLength = 4;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Cartesian4} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCartesian4.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.x;\r\n array[startingIndex++] = value.y;\r\n array[startingIndex++] = value.z;\r\n array[startingIndex] = value.w;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Cartesian4} [result] The object into which to store the result.\r\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\r\n */\r\nCartesian4.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian4();\r\n }\r\n result.x = array[startingIndex++];\r\n result.y = array[startingIndex++];\r\n result.z = array[startingIndex++];\r\n result.w = array[startingIndex];\r\n return result;\r\n};\r\n\r\n/**\r\n * Flattens an array of Cartesian4s into an array of components.\r\n *\r\n * @param {Cartesian4[]} array The array of cartesians to pack.\r\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 4 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 4) elements.\r\n * @returns {Number[]} The packed array.\r\n */\r\nCartesian4.packArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n const resultLength = length * 4;\r\n if (!defined(result)) {\r\n result = new Array(resultLength);\r\n } else if (!Array.isArray(result) && result.length !== resultLength) {\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"If result is a typed array, it must have exactly array.length * 4 elements\"\r\n );\r\n //>>includeEnd('debug');\r\n } else if (result.length !== resultLength) {\r\n result.length = resultLength;\r\n }\r\n\r\n for (let i = 0; i < length; ++i) {\r\n Cartesian4.pack(array[i], result, i * 4);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Unpacks an array of cartesian components into an array of Cartesian4s.\r\n *\r\n * @param {Number[]} array The array of components to unpack.\r\n * @param {Cartesian4[]} [result] The array onto which to store the result.\r\n * @returns {Cartesian4[]} The unpacked array.\r\n */\r\nCartesian4.unpackArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 4);\r\n if (array.length % 4 !== 0) {\r\n throw new DeveloperError(\"array length must be a multiple of 4.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 4);\r\n } else {\r\n result.length = length / 4;\r\n }\r\n\r\n for (let i = 0; i < length; i += 4) {\r\n const index = i / 4;\r\n result[index] = Cartesian4.unpack(array, i, result[index]);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Cartesian4 from four consecutive elements in an array.\r\n * @function\r\n *\r\n * @param {Number[]} array The array whose four consecutive elements correspond to the x, y, z, and w components, respectively.\r\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\r\n * @param {Cartesian4} [result] The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\r\n *\r\n * @example\r\n * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0)\r\n * const v = [1.0, 2.0, 3.0, 4.0];\r\n * const p = Cesium.Cartesian4.fromArray(v);\r\n *\r\n * // Create a Cartesian4 with (1.0, 2.0, 3.0, 4.0) using an offset into an array\r\n * const v2 = [0.0, 0.0, 1.0, 2.0, 3.0, 4.0];\r\n * const p2 = Cesium.Cartesian4.fromArray(v2, 2);\r\n */\r\nCartesian4.fromArray = Cartesian4.unpack;\r\n\r\n/**\r\n * Computes the value of the maximum component for the supplied Cartesian.\r\n *\r\n * @param {Cartesian4} cartesian The cartesian to use.\r\n * @returns {Number} The value of the maximum component.\r\n */\r\nCartesian4.maximumComponent = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return Math.max(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\r\n};\r\n\r\n/**\r\n * Computes the value of the minimum component for the supplied Cartesian.\r\n *\r\n * @param {Cartesian4} cartesian The cartesian to use.\r\n * @returns {Number} The value of the minimum component.\r\n */\r\nCartesian4.minimumComponent = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return Math.min(cartesian.x, cartesian.y, cartesian.z, cartesian.w);\r\n};\r\n\r\n/**\r\n * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\r\n *\r\n * @param {Cartesian4} first A cartesian to compare.\r\n * @param {Cartesian4} second A cartesian to compare.\r\n * @param {Cartesian4} result The object into which to store the result.\r\n * @returns {Cartesian4} A cartesian with the minimum components.\r\n */\r\nCartesian4.minimumByComponent = function (first, second, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"first\", first);\r\n Check.typeOf.object(\"second\", second);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.min(first.x, second.x);\r\n result.y = Math.min(first.y, second.y);\r\n result.z = Math.min(first.z, second.z);\r\n result.w = Math.min(first.w, second.w);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\r\n *\r\n * @param {Cartesian4} first A cartesian to compare.\r\n * @param {Cartesian4} second A cartesian to compare.\r\n * @param {Cartesian4} result The object into which to store the result.\r\n * @returns {Cartesian4} A cartesian with the maximum components.\r\n */\r\nCartesian4.maximumByComponent = function (first, second, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"first\", first);\r\n Check.typeOf.object(\"second\", second);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.max(first.x, second.x);\r\n result.y = Math.max(first.y, second.y);\r\n result.z = Math.max(first.z, second.z);\r\n result.w = Math.max(first.w, second.w);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Constrain a value to lie between two values.\r\n *\r\n * @param {Cartesian4} value The value to clamp.\r\n * @param {Cartesian4} min The minimum bound.\r\n * @param {Cartesian4} max The maximum bound.\r\n * @param {Cartesian4} result The object into which to store the result.\r\n * @returns {Cartesian4} The clamped value such that min <= result <= max.\r\n */\r\nCartesian4.clamp = function (value, min, max, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.typeOf.object(\"min\", min);\r\n Check.typeOf.object(\"max\", max);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const x = CesiumMath.clamp(value.x, min.x, max.x);\r\n const y = CesiumMath.clamp(value.y, min.y, max.y);\r\n const z = CesiumMath.clamp(value.z, min.z, max.z);\r\n const w = CesiumMath.clamp(value.w, min.w, max.w);\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the provided Cartesian's squared magnitude.\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian instance whose squared magnitude is to be computed.\r\n * @returns {Number} The squared magnitude.\r\n */\r\nCartesian4.magnitudeSquared = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return (\r\n cartesian.x * cartesian.x +\r\n cartesian.y * cartesian.y +\r\n cartesian.z * cartesian.z +\r\n cartesian.w * cartesian.w\r\n );\r\n};\r\n\r\n/**\r\n * Computes the Cartesian's magnitude (length).\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian instance whose magnitude is to be computed.\r\n * @returns {Number} The magnitude.\r\n */\r\nCartesian4.magnitude = function (cartesian) {\r\n return Math.sqrt(Cartesian4.magnitudeSquared(cartesian));\r\n};\r\n\r\nconst distanceScratch = new Cartesian4();\r\n\r\n/**\r\n * Computes the 4-space distance between two points.\r\n *\r\n * @param {Cartesian4} left The first point to compute the distance from.\r\n * @param {Cartesian4} right The second point to compute the distance to.\r\n * @returns {Number} The distance between two points.\r\n *\r\n * @example\r\n * // Returns 1.0\r\n * const d = Cesium.Cartesian4.distance(\r\n * new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0),\r\n * new Cesium.Cartesian4(2.0, 0.0, 0.0, 0.0));\r\n */\r\nCartesian4.distance = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian4.subtract(left, right, distanceScratch);\r\n return Cartesian4.magnitude(distanceScratch);\r\n};\r\n\r\n/**\r\n * Computes the squared distance between two points. Comparing squared distances\r\n * using this function is more efficient than comparing distances using {@link Cartesian4#distance}.\r\n *\r\n * @param {Cartesian4} left The first point to compute the distance from.\r\n * @param {Cartesian4} right The second point to compute the distance to.\r\n * @returns {Number} The distance between two points.\r\n *\r\n * @example\r\n * // Returns 4.0, not 2.0\r\n * const d = Cesium.Cartesian4.distance(\r\n * new Cesium.Cartesian4(1.0, 0.0, 0.0, 0.0),\r\n * new Cesium.Cartesian4(3.0, 0.0, 0.0, 0.0));\r\n */\r\nCartesian4.distanceSquared = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian4.subtract(left, right, distanceScratch);\r\n return Cartesian4.magnitudeSquared(distanceScratch);\r\n};\r\n\r\n/**\r\n * Computes the normalized form of the supplied Cartesian.\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian to be normalized.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.normalize = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const magnitude = Cartesian4.magnitude(cartesian);\r\n\r\n result.x = cartesian.x / magnitude;\r\n result.y = cartesian.y / magnitude;\r\n result.z = cartesian.z / magnitude;\r\n result.w = cartesian.w / magnitude;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n isNaN(result.x) ||\r\n isNaN(result.y) ||\r\n isNaN(result.z) ||\r\n isNaN(result.w)\r\n ) {\r\n throw new DeveloperError(\"normalized result is not a number\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the dot (scalar) product of two Cartesians.\r\n *\r\n * @param {Cartesian4} left The first Cartesian.\r\n * @param {Cartesian4} right The second Cartesian.\r\n * @returns {Number} The dot product.\r\n */\r\nCartesian4.dot = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n return (\r\n left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w\r\n );\r\n};\r\n\r\n/**\r\n * Computes the componentwise product of two Cartesians.\r\n *\r\n * @param {Cartesian4} left The first Cartesian.\r\n * @param {Cartesian4} right The second Cartesian.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.multiplyComponents = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x * right.x;\r\n result.y = left.y * right.y;\r\n result.z = left.z * right.z;\r\n result.w = left.w * right.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise quotient of two Cartesians.\r\n *\r\n * @param {Cartesian4} left The first Cartesian.\r\n * @param {Cartesian4} right The second Cartesian.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.divideComponents = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x / right.x;\r\n result.y = left.y / right.y;\r\n result.z = left.z / right.z;\r\n result.w = left.w / right.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise sum of two Cartesians.\r\n *\r\n * @param {Cartesian4} left The first Cartesian.\r\n * @param {Cartesian4} right The second Cartesian.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.add = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x + right.x;\r\n result.y = left.y + right.y;\r\n result.z = left.z + right.z;\r\n result.w = left.w + right.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise difference of two Cartesians.\r\n *\r\n * @param {Cartesian4} left The first Cartesian.\r\n * @param {Cartesian4} right The second Cartesian.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.subtract = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x - right.x;\r\n result.y = left.y - right.y;\r\n result.z = left.z - right.z;\r\n result.w = left.w - right.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Multiplies the provided Cartesian componentwise by the provided scalar.\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian to be scaled.\r\n * @param {Number} scalar The scalar to multiply with.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.multiplyByScalar = function (cartesian, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = cartesian.x * scalar;\r\n result.y = cartesian.y * scalar;\r\n result.z = cartesian.z * scalar;\r\n result.w = cartesian.w * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Divides the provided Cartesian componentwise by the provided scalar.\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian to be divided.\r\n * @param {Number} scalar The scalar to divide by.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.divideByScalar = function (cartesian, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = cartesian.x / scalar;\r\n result.y = cartesian.y / scalar;\r\n result.z = cartesian.z / scalar;\r\n result.w = cartesian.w / scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Negates the provided Cartesian.\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian to be negated.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.negate = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = -cartesian.x;\r\n result.y = -cartesian.y;\r\n result.z = -cartesian.z;\r\n result.w = -cartesian.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the absolute value of the provided Cartesian.\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian whose absolute value is to be computed.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.abs = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.abs(cartesian.x);\r\n result.y = Math.abs(cartesian.y);\r\n result.z = Math.abs(cartesian.z);\r\n result.w = Math.abs(cartesian.w);\r\n return result;\r\n};\r\n\r\nconst lerpScratch = new Cartesian4();\r\n/**\r\n * Computes the linear interpolation or extrapolation at t using the provided cartesians.\r\n *\r\n * @param {Cartesian4} start The value corresponding to t at 0.0.\r\n * @param {Cartesian4}end The value corresponding to t at 1.0.\r\n * @param {Number} t The point along t at which to interpolate.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nCartesian4.lerp = function (start, end, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"start\", start);\r\n Check.typeOf.object(\"end\", end);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian4.multiplyByScalar(end, t, lerpScratch);\r\n result = Cartesian4.multiplyByScalar(start, 1.0 - t, result);\r\n return Cartesian4.add(lerpScratch, result, result);\r\n};\r\n\r\nconst mostOrthogonalAxisScratch = new Cartesian4();\r\n/**\r\n * Returns the axis that is most orthogonal to the provided Cartesian.\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian on which to find the most orthogonal axis.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The most orthogonal axis.\r\n */\r\nCartesian4.mostOrthogonalAxis = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const f = Cartesian4.normalize(cartesian, mostOrthogonalAxisScratch);\r\n Cartesian4.abs(f, f);\r\n\r\n if (f.x <= f.y) {\r\n if (f.x <= f.z) {\r\n if (f.x <= f.w) {\r\n result = Cartesian4.clone(Cartesian4.UNIT_X, result);\r\n } else {\r\n result = Cartesian4.clone(Cartesian4.UNIT_W, result);\r\n }\r\n } else if (f.z <= f.w) {\r\n result = Cartesian4.clone(Cartesian4.UNIT_Z, result);\r\n } else {\r\n result = Cartesian4.clone(Cartesian4.UNIT_W, result);\r\n }\r\n } else if (f.y <= f.z) {\r\n if (f.y <= f.w) {\r\n result = Cartesian4.clone(Cartesian4.UNIT_Y, result);\r\n } else {\r\n result = Cartesian4.clone(Cartesian4.UNIT_W, result);\r\n }\r\n } else if (f.z <= f.w) {\r\n result = Cartesian4.clone(Cartesian4.UNIT_Z, result);\r\n } else {\r\n result = Cartesian4.clone(Cartesian4.UNIT_W, result);\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided Cartesians componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Cartesian4} [left] The first Cartesian.\r\n * @param {Cartesian4} [right] The second Cartesian.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nCartesian4.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.x === right.x &&\r\n left.y === right.y &&\r\n left.z === right.z &&\r\n left.w === right.w)\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nCartesian4.equalsArray = function (cartesian, array, offset) {\r\n return (\r\n cartesian.x === array[offset] &&\r\n cartesian.y === array[offset + 1] &&\r\n cartesian.z === array[offset + 2] &&\r\n cartesian.w === array[offset + 3]\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided Cartesians componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {Cartesian4} [left] The first Cartesian.\r\n * @param {Cartesian4} [right] The second Cartesian.\r\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nCartesian4.equalsEpsilon = function (\r\n left,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n CesiumMath.equalsEpsilon(\r\n left.x,\r\n right.x,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n left.y,\r\n right.y,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n left.z,\r\n right.z,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n left.w,\r\n right.w,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ))\r\n );\r\n};\r\n\r\n/**\r\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 0.0).\r\n *\r\n * @type {Cartesian4}\r\n * @constant\r\n */\r\nCartesian4.ZERO = Object.freeze(new Cartesian4(0.0, 0.0, 0.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian4 instance initialized to (1.0, 1.0, 1.0, 1.0).\r\n *\r\n * @type {Cartesian4}\r\n * @constant\r\n */\r\nCartesian4.ONE = Object.freeze(new Cartesian4(1.0, 1.0, 1.0, 1.0));\r\n\r\n/**\r\n * An immutable Cartesian4 instance initialized to (1.0, 0.0, 0.0, 0.0).\r\n *\r\n * @type {Cartesian4}\r\n * @constant\r\n */\r\nCartesian4.UNIT_X = Object.freeze(new Cartesian4(1.0, 0.0, 0.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian4 instance initialized to (0.0, 1.0, 0.0, 0.0).\r\n *\r\n * @type {Cartesian4}\r\n * @constant\r\n */\r\nCartesian4.UNIT_Y = Object.freeze(new Cartesian4(0.0, 1.0, 0.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 1.0, 0.0).\r\n *\r\n * @type {Cartesian4}\r\n * @constant\r\n */\r\nCartesian4.UNIT_Z = Object.freeze(new Cartesian4(0.0, 0.0, 1.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian4 instance initialized to (0.0, 0.0, 0.0, 1.0).\r\n *\r\n * @type {Cartesian4}\r\n * @constant\r\n */\r\nCartesian4.UNIT_W = Object.freeze(new Cartesian4(0.0, 0.0, 0.0, 1.0));\r\n\r\n/**\r\n * Duplicates this Cartesian4 instance.\r\n *\r\n * @param {Cartesian4} [result] The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter or a new Cartesian4 instance if one was not provided.\r\n */\r\nCartesian4.prototype.clone = function (result) {\r\n return Cartesian4.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this Cartesian against the provided Cartesian componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Cartesian4} [right] The right hand side Cartesian.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nCartesian4.prototype.equals = function (right) {\r\n return Cartesian4.equals(this, right);\r\n};\r\n\r\n/**\r\n * Compares this Cartesian against the provided Cartesian componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {Cartesian4} [right] The right hand side Cartesian.\r\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if they are within the provided epsilon, false otherwise.\r\n */\r\nCartesian4.prototype.equalsEpsilon = function (\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return Cartesian4.equalsEpsilon(\r\n this,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n );\r\n};\r\n\r\n/**\r\n * Creates a string representing this Cartesian in the format '(x, y, z, w)'.\r\n *\r\n * @returns {String} A string representing the provided Cartesian in the format '(x, y, z, w)'.\r\n */\r\nCartesian4.prototype.toString = function () {\r\n return `(${this.x}, ${this.y}, ${this.z}, ${this.w})`;\r\n};\r\n\r\n// scratchU8Array and scratchF32Array are views into the same buffer\r\nconst scratchF32Array = new Float32Array(1);\r\nconst scratchU8Array = new Uint8Array(scratchF32Array.buffer);\r\n\r\nconst testU32 = new Uint32Array([0x11223344]);\r\nconst testU8 = new Uint8Array(testU32.buffer);\r\nconst littleEndian = testU8[0] === 0x44;\r\n\r\n/**\r\n * Packs an arbitrary floating point value to 4 values representable using uint8.\r\n *\r\n * @param {Number} value A floating point number.\r\n * @param {Cartesian4} [result] The Cartesian4 that will contain the packed float.\r\n * @returns {Cartesian4} A Cartesian4 representing the float packed to values in x, y, z, and w.\r\n */\r\nCartesian4.packFloat = function (value, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"value\", value);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian4();\r\n }\r\n\r\n // scratchU8Array and scratchF32Array are views into the same buffer\r\n scratchF32Array[0] = value;\r\n\r\n if (littleEndian) {\r\n result.x = scratchU8Array[0];\r\n result.y = scratchU8Array[1];\r\n result.z = scratchU8Array[2];\r\n result.w = scratchU8Array[3];\r\n } else {\r\n // convert from big-endian to little-endian\r\n result.x = scratchU8Array[3];\r\n result.y = scratchU8Array[2];\r\n result.z = scratchU8Array[1];\r\n result.w = scratchU8Array[0];\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Unpacks a float packed using Cartesian4.packFloat.\r\n *\r\n * @param {Cartesian4} packedFloat A Cartesian4 containing a float packed to 4 values representable using uint8.\r\n * @returns {Number} The unpacked float.\r\n * @private\r\n */\r\nCartesian4.unpackFloat = function (packedFloat) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"packedFloat\", packedFloat);\r\n //>>includeEnd('debug');\r\n\r\n // scratchU8Array and scratchF32Array are views into the same buffer\r\n if (littleEndian) {\r\n scratchU8Array[0] = packedFloat.x;\r\n scratchU8Array[1] = packedFloat.y;\r\n scratchU8Array[2] = packedFloat.z;\r\n scratchU8Array[3] = packedFloat.w;\r\n } else {\r\n // convert from little-endian to big-endian\r\n scratchU8Array[0] = packedFloat.w;\r\n scratchU8Array[1] = packedFloat.z;\r\n scratchU8Array[2] = packedFloat.y;\r\n scratchU8Array[3] = packedFloat.x;\r\n }\r\n return scratchF32Array[0];\r\n};\r\nexport default Cartesian4;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport RuntimeError from \"./RuntimeError.js\";\r\n\r\n/**\r\n * A 4x4 matrix, indexable as a column-major order array.\r\n * Constructor parameters are in row-major order for code readability.\r\n * @alias Matrix4\r\n * @constructor\r\n * @implements {ArrayLike}\r\n *\r\n * @param {Number} [column0Row0=0.0] The value for column 0, row 0.\r\n * @param {Number} [column1Row0=0.0] The value for column 1, row 0.\r\n * @param {Number} [column2Row0=0.0] The value for column 2, row 0.\r\n * @param {Number} [column3Row0=0.0] The value for column 3, row 0.\r\n * @param {Number} [column0Row1=0.0] The value for column 0, row 1.\r\n * @param {Number} [column1Row1=0.0] The value for column 1, row 1.\r\n * @param {Number} [column2Row1=0.0] The value for column 2, row 1.\r\n * @param {Number} [column3Row1=0.0] The value for column 3, row 1.\r\n * @param {Number} [column0Row2=0.0] The value for column 0, row 2.\r\n * @param {Number} [column1Row2=0.0] The value for column 1, row 2.\r\n * @param {Number} [column2Row2=0.0] The value for column 2, row 2.\r\n * @param {Number} [column3Row2=0.0] The value for column 3, row 2.\r\n * @param {Number} [column0Row3=0.0] The value for column 0, row 3.\r\n * @param {Number} [column1Row3=0.0] The value for column 1, row 3.\r\n * @param {Number} [column2Row3=0.0] The value for column 2, row 3.\r\n * @param {Number} [column3Row3=0.0] The value for column 3, row 3.\r\n *\r\n * @see Matrix4.fromArray\r\n * @see Matrix4.fromColumnMajorArray\r\n * @see Matrix4.fromRowMajorArray\r\n * @see Matrix4.fromRotationTranslation\r\n * @see Matrix4.fromTranslationQuaternionRotationScale\r\n * @see Matrix4.fromTranslationRotationScale\r\n * @see Matrix4.fromTranslation\r\n * @see Matrix4.fromScale\r\n * @see Matrix4.fromUniformScale\r\n * @see Matrix4.fromRotation\r\n * @see Matrix4.fromCamera\r\n * @see Matrix4.computePerspectiveFieldOfView\r\n * @see Matrix4.computeOrthographicOffCenter\r\n * @see Matrix4.computePerspectiveOffCenter\r\n * @see Matrix4.computeInfinitePerspectiveOffCenter\r\n * @see Matrix4.computeViewportTransformation\r\n * @see Matrix4.computeView\r\n * @see Matrix2\r\n * @see Matrix3\r\n * @see Packable\r\n */\r\nfunction Matrix4(\r\n column0Row0,\r\n column1Row0,\r\n column2Row0,\r\n column3Row0,\r\n column0Row1,\r\n column1Row1,\r\n column2Row1,\r\n column3Row1,\r\n column0Row2,\r\n column1Row2,\r\n column2Row2,\r\n column3Row2,\r\n column0Row3,\r\n column1Row3,\r\n column2Row3,\r\n column3Row3\r\n) {\r\n this[0] = defaultValue(column0Row0, 0.0);\r\n this[1] = defaultValue(column0Row1, 0.0);\r\n this[2] = defaultValue(column0Row2, 0.0);\r\n this[3] = defaultValue(column0Row3, 0.0);\r\n this[4] = defaultValue(column1Row0, 0.0);\r\n this[5] = defaultValue(column1Row1, 0.0);\r\n this[6] = defaultValue(column1Row2, 0.0);\r\n this[7] = defaultValue(column1Row3, 0.0);\r\n this[8] = defaultValue(column2Row0, 0.0);\r\n this[9] = defaultValue(column2Row1, 0.0);\r\n this[10] = defaultValue(column2Row2, 0.0);\r\n this[11] = defaultValue(column2Row3, 0.0);\r\n this[12] = defaultValue(column3Row0, 0.0);\r\n this[13] = defaultValue(column3Row1, 0.0);\r\n this[14] = defaultValue(column3Row2, 0.0);\r\n this[15] = defaultValue(column3Row3, 0.0);\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nMatrix4.packedLength = 16;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Matrix4} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nMatrix4.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value[0];\r\n array[startingIndex++] = value[1];\r\n array[startingIndex++] = value[2];\r\n array[startingIndex++] = value[3];\r\n array[startingIndex++] = value[4];\r\n array[startingIndex++] = value[5];\r\n array[startingIndex++] = value[6];\r\n array[startingIndex++] = value[7];\r\n array[startingIndex++] = value[8];\r\n array[startingIndex++] = value[9];\r\n array[startingIndex++] = value[10];\r\n array[startingIndex++] = value[11];\r\n array[startingIndex++] = value[12];\r\n array[startingIndex++] = value[13];\r\n array[startingIndex++] = value[14];\r\n array[startingIndex] = value[15];\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Matrix4} [result] The object into which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\r\n */\r\nMatrix4.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new Matrix4();\r\n }\r\n\r\n result[0] = array[startingIndex++];\r\n result[1] = array[startingIndex++];\r\n result[2] = array[startingIndex++];\r\n result[3] = array[startingIndex++];\r\n result[4] = array[startingIndex++];\r\n result[5] = array[startingIndex++];\r\n result[6] = array[startingIndex++];\r\n result[7] = array[startingIndex++];\r\n result[8] = array[startingIndex++];\r\n result[9] = array[startingIndex++];\r\n result[10] = array[startingIndex++];\r\n result[11] = array[startingIndex++];\r\n result[12] = array[startingIndex++];\r\n result[13] = array[startingIndex++];\r\n result[14] = array[startingIndex++];\r\n result[15] = array[startingIndex];\r\n return result;\r\n};\r\n\r\n/**\r\n * Flattens an array of Matrix4s into an array of components. The components\r\n * are stored in column-major order.\r\n *\r\n * @param {Matrix4[]} array The array of matrices to pack.\r\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 16 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 16) elements.\r\n * @returns {Number[]} The packed array.\r\n */\r\nMatrix4.packArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n const resultLength = length * 16;\r\n if (!defined(result)) {\r\n result = new Array(resultLength);\r\n } else if (!Array.isArray(result) && result.length !== resultLength) {\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"If result is a typed array, it must have exactly array.length * 16 elements\"\r\n );\r\n //>>includeEnd('debug');\r\n } else if (result.length !== resultLength) {\r\n result.length = resultLength;\r\n }\r\n\r\n for (let i = 0; i < length; ++i) {\r\n Matrix4.pack(array[i], result, i * 16);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Unpacks an array of column-major matrix components into an array of Matrix4s.\r\n *\r\n * @param {Number[]} array The array of components to unpack.\r\n * @param {Matrix4[]} [result] The array onto which to store the result.\r\n * @returns {Matrix4[]} The unpacked array.\r\n */\r\nMatrix4.unpackArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 16);\r\n if (array.length % 16 !== 0) {\r\n throw new DeveloperError(\"array length must be a multiple of 16.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 16);\r\n } else {\r\n result.length = length / 16;\r\n }\r\n\r\n for (let i = 0; i < length; i += 16) {\r\n const index = i / 16;\r\n result[index] = Matrix4.unpack(array, i, result[index]);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a Matrix4 instance.\r\n *\r\n * @param {Matrix4} matrix The matrix to duplicate.\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided. (Returns undefined if matrix is undefined)\r\n */\r\nMatrix4.clone = function (matrix, result) {\r\n if (!defined(matrix)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new Matrix4(\r\n matrix[0],\r\n matrix[4],\r\n matrix[8],\r\n matrix[12],\r\n matrix[1],\r\n matrix[5],\r\n matrix[9],\r\n matrix[13],\r\n matrix[2],\r\n matrix[6],\r\n matrix[10],\r\n matrix[14],\r\n matrix[3],\r\n matrix[7],\r\n matrix[11],\r\n matrix[15]\r\n );\r\n }\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[3];\r\n result[4] = matrix[4];\r\n result[5] = matrix[5];\r\n result[6] = matrix[6];\r\n result[7] = matrix[7];\r\n result[8] = matrix[8];\r\n result[9] = matrix[9];\r\n result[10] = matrix[10];\r\n result[11] = matrix[11];\r\n result[12] = matrix[12];\r\n result[13] = matrix[13];\r\n result[14] = matrix[14];\r\n result[15] = matrix[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Matrix4 from 16 consecutive elements in an array.\r\n * @function\r\n *\r\n * @param {Number[]} array The array whose 16 consecutive elements correspond to the positions of the matrix. Assumes column-major order.\r\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\r\n *\r\n * @example\r\n * // Create the Matrix4:\r\n * // [1.0, 2.0, 3.0, 4.0]\r\n * // [1.0, 2.0, 3.0, 4.0]\r\n * // [1.0, 2.0, 3.0, 4.0]\r\n * // [1.0, 2.0, 3.0, 4.0]\r\n *\r\n * const v = [1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0];\r\n * const m = Cesium.Matrix4.fromArray(v);\r\n *\r\n * // Create same Matrix4 with using an offset into an array\r\n * const v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0];\r\n * const m2 = Cesium.Matrix4.fromArray(v2, 2);\r\n */\r\nMatrix4.fromArray = Matrix4.unpack;\r\n\r\n/**\r\n * Computes a Matrix4 instance from a column-major order array.\r\n *\r\n * @param {Number[]} values The column-major order array.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n */\r\nMatrix4.fromColumnMajorArray = function (values, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"values\", values);\r\n //>>includeEnd('debug');\r\n\r\n return Matrix4.clone(values, result);\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance from a row-major order array.\r\n * The resulting matrix will be in column-major order.\r\n *\r\n * @param {Number[]} values The row-major order array.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n */\r\nMatrix4.fromRowMajorArray = function (values, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"values\", values);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix4(\r\n values[0],\r\n values[1],\r\n values[2],\r\n values[3],\r\n values[4],\r\n values[5],\r\n values[6],\r\n values[7],\r\n values[8],\r\n values[9],\r\n values[10],\r\n values[11],\r\n values[12],\r\n values[13],\r\n values[14],\r\n values[15]\r\n );\r\n }\r\n result[0] = values[0];\r\n result[1] = values[4];\r\n result[2] = values[8];\r\n result[3] = values[12];\r\n result[4] = values[1];\r\n result[5] = values[5];\r\n result[6] = values[9];\r\n result[7] = values[13];\r\n result[8] = values[2];\r\n result[9] = values[6];\r\n result[10] = values[10];\r\n result[11] = values[14];\r\n result[12] = values[3];\r\n result[13] = values[7];\r\n result[14] = values[11];\r\n result[15] = values[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance from a Matrix3 representing the rotation\r\n * and a Cartesian3 representing the translation.\r\n *\r\n * @param {Matrix3} rotation The upper left portion of the matrix representing the rotation.\r\n * @param {Cartesian3} [translation=Cartesian3.ZERO] The upper right portion of the matrix representing the translation.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n */\r\nMatrix4.fromRotationTranslation = function (rotation, translation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rotation\", rotation);\r\n //>>includeEnd('debug');\r\n\r\n translation = defaultValue(translation, Cartesian3.ZERO);\r\n\r\n if (!defined(result)) {\r\n return new Matrix4(\r\n rotation[0],\r\n rotation[3],\r\n rotation[6],\r\n translation.x,\r\n rotation[1],\r\n rotation[4],\r\n rotation[7],\r\n translation.y,\r\n rotation[2],\r\n rotation[5],\r\n rotation[8],\r\n translation.z,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n );\r\n }\r\n\r\n result[0] = rotation[0];\r\n result[1] = rotation[1];\r\n result[2] = rotation[2];\r\n result[3] = 0.0;\r\n result[4] = rotation[3];\r\n result[5] = rotation[4];\r\n result[6] = rotation[5];\r\n result[7] = 0.0;\r\n result[8] = rotation[6];\r\n result[9] = rotation[7];\r\n result[10] = rotation[8];\r\n result[11] = 0.0;\r\n result[12] = translation.x;\r\n result[13] = translation.y;\r\n result[14] = translation.z;\r\n result[15] = 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance from a translation, rotation, and scale (TRS)\r\n * representation with the rotation represented as a quaternion.\r\n *\r\n * @param {Cartesian3} translation The translation transformation.\r\n * @param {Quaternion} rotation The rotation transformation.\r\n * @param {Cartesian3} scale The non-uniform scale transformation.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n *\r\n * @example\r\n * const result = Cesium.Matrix4.fromTranslationQuaternionRotationScale(\r\n * new Cesium.Cartesian3(1.0, 2.0, 3.0), // translation\r\n * Cesium.Quaternion.IDENTITY, // rotation\r\n * new Cesium.Cartesian3(7.0, 8.0, 9.0), // scale\r\n * result);\r\n */\r\nMatrix4.fromTranslationQuaternionRotationScale = function (\r\n translation,\r\n rotation,\r\n scale,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"translation\", translation);\r\n Check.typeOf.object(\"rotation\", rotation);\r\n Check.typeOf.object(\"scale\", scale);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Matrix4();\r\n }\r\n\r\n const scaleX = scale.x;\r\n const scaleY = scale.y;\r\n const scaleZ = scale.z;\r\n\r\n const x2 = rotation.x * rotation.x;\r\n const xy = rotation.x * rotation.y;\r\n const xz = rotation.x * rotation.z;\r\n const xw = rotation.x * rotation.w;\r\n const y2 = rotation.y * rotation.y;\r\n const yz = rotation.y * rotation.z;\r\n const yw = rotation.y * rotation.w;\r\n const z2 = rotation.z * rotation.z;\r\n const zw = rotation.z * rotation.w;\r\n const w2 = rotation.w * rotation.w;\r\n\r\n const m00 = x2 - y2 - z2 + w2;\r\n const m01 = 2.0 * (xy - zw);\r\n const m02 = 2.0 * (xz + yw);\r\n\r\n const m10 = 2.0 * (xy + zw);\r\n const m11 = -x2 + y2 - z2 + w2;\r\n const m12 = 2.0 * (yz - xw);\r\n\r\n const m20 = 2.0 * (xz - yw);\r\n const m21 = 2.0 * (yz + xw);\r\n const m22 = -x2 - y2 + z2 + w2;\r\n\r\n result[0] = m00 * scaleX;\r\n result[1] = m10 * scaleX;\r\n result[2] = m20 * scaleX;\r\n result[3] = 0.0;\r\n result[4] = m01 * scaleY;\r\n result[5] = m11 * scaleY;\r\n result[6] = m21 * scaleY;\r\n result[7] = 0.0;\r\n result[8] = m02 * scaleZ;\r\n result[9] = m12 * scaleZ;\r\n result[10] = m22 * scaleZ;\r\n result[11] = 0.0;\r\n result[12] = translation.x;\r\n result[13] = translation.y;\r\n result[14] = translation.z;\r\n result[15] = 1.0;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Matrix4 instance from a {@link TranslationRotationScale} instance.\r\n *\r\n * @param {TranslationRotationScale} translationRotationScale The instance.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n */\r\nMatrix4.fromTranslationRotationScale = function (\r\n translationRotationScale,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"translationRotationScale\", translationRotationScale);\r\n //>>includeEnd('debug');\r\n\r\n return Matrix4.fromTranslationQuaternionRotationScale(\r\n translationRotationScale.translation,\r\n translationRotationScale.rotation,\r\n translationRotationScale.scale,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Matrix4 instance from a Cartesian3 representing the translation.\r\n *\r\n * @param {Cartesian3} translation The upper right portion of the matrix representing the translation.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n *\r\n * @see Matrix4.multiplyByTranslation\r\n */\r\nMatrix4.fromTranslation = function (translation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"translation\", translation);\r\n //>>includeEnd('debug');\r\n\r\n return Matrix4.fromRotationTranslation(Matrix3.IDENTITY, translation, result);\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance representing a non-uniform scale.\r\n *\r\n * @param {Cartesian3} scale The x, y, and z scale factors.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n *\r\n * @example\r\n * // Creates\r\n * // [7.0, 0.0, 0.0, 0.0]\r\n * // [0.0, 8.0, 0.0, 0.0]\r\n * // [0.0, 0.0, 9.0, 0.0]\r\n * // [0.0, 0.0, 0.0, 1.0]\r\n * const m = Cesium.Matrix4.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0));\r\n */\r\nMatrix4.fromScale = function (scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"scale\", scale);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix4(\r\n scale.x,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n scale.y,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n scale.z,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n );\r\n }\r\n\r\n result[0] = scale.x;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = 0.0;\r\n result[5] = scale.y;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = 0.0;\r\n result[9] = 0.0;\r\n result[10] = scale.z;\r\n result[11] = 0.0;\r\n result[12] = 0.0;\r\n result[13] = 0.0;\r\n result[14] = 0.0;\r\n result[15] = 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance representing a uniform scale.\r\n *\r\n * @param {Number} scale The uniform scale factor.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n *\r\n * @example\r\n * // Creates\r\n * // [2.0, 0.0, 0.0, 0.0]\r\n * // [0.0, 2.0, 0.0, 0.0]\r\n * // [0.0, 0.0, 2.0, 0.0]\r\n * // [0.0, 0.0, 0.0, 1.0]\r\n * const m = Cesium.Matrix4.fromUniformScale(2.0);\r\n */\r\nMatrix4.fromUniformScale = function (scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"scale\", scale);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix4(\r\n scale,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n scale,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n scale,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n );\r\n }\r\n\r\n result[0] = scale;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = 0.0;\r\n result[5] = scale;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = 0.0;\r\n result[9] = 0.0;\r\n result[10] = scale;\r\n result[11] = 0.0;\r\n result[12] = 0.0;\r\n result[13] = 0.0;\r\n result[14] = 0.0;\r\n result[15] = 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a rotation matrix.\r\n *\r\n * @param {Matrix3} rotation The rotation matrix.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n */\r\nMatrix4.fromRotation = function (rotation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rotation\", rotation);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Matrix4();\r\n }\r\n result[0] = rotation[0];\r\n result[1] = rotation[1];\r\n result[2] = rotation[2];\r\n result[3] = 0.0;\r\n\r\n result[4] = rotation[3];\r\n result[5] = rotation[4];\r\n result[6] = rotation[5];\r\n result[7] = 0.0;\r\n\r\n result[8] = rotation[6];\r\n result[9] = rotation[7];\r\n result[10] = rotation[8];\r\n result[11] = 0.0;\r\n\r\n result[12] = 0.0;\r\n result[13] = 0.0;\r\n result[14] = 0.0;\r\n result[15] = 1.0;\r\n\r\n return result;\r\n};\r\n\r\nconst fromCameraF = new Cartesian3();\r\nconst fromCameraR = new Cartesian3();\r\nconst fromCameraU = new Cartesian3();\r\n\r\n/**\r\n * Computes a Matrix4 instance from a Camera.\r\n *\r\n * @param {Camera} camera The camera to use.\r\n * @param {Matrix4} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix4} The modified result parameter, or a new Matrix4 instance if one was not provided.\r\n */\r\nMatrix4.fromCamera = function (camera, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"camera\", camera);\r\n //>>includeEnd('debug');\r\n\r\n const position = camera.position;\r\n const direction = camera.direction;\r\n const up = camera.up;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"camera.position\", position);\r\n Check.typeOf.object(\"camera.direction\", direction);\r\n Check.typeOf.object(\"camera.up\", up);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian3.normalize(direction, fromCameraF);\r\n Cartesian3.normalize(\r\n Cartesian3.cross(fromCameraF, up, fromCameraR),\r\n fromCameraR\r\n );\r\n Cartesian3.normalize(\r\n Cartesian3.cross(fromCameraR, fromCameraF, fromCameraU),\r\n fromCameraU\r\n );\r\n\r\n const sX = fromCameraR.x;\r\n const sY = fromCameraR.y;\r\n const sZ = fromCameraR.z;\r\n const fX = fromCameraF.x;\r\n const fY = fromCameraF.y;\r\n const fZ = fromCameraF.z;\r\n const uX = fromCameraU.x;\r\n const uY = fromCameraU.y;\r\n const uZ = fromCameraU.z;\r\n const positionX = position.x;\r\n const positionY = position.y;\r\n const positionZ = position.z;\r\n const t0 = sX * -positionX + sY * -positionY + sZ * -positionZ;\r\n const t1 = uX * -positionX + uY * -positionY + uZ * -positionZ;\r\n const t2 = fX * positionX + fY * positionY + fZ * positionZ;\r\n\r\n // The code below this comment is an optimized\r\n // version of the commented lines.\r\n // Rather that create two matrices and then multiply,\r\n // we just bake in the multiplcation as part of creation.\r\n // const rotation = new Matrix4(\r\n // sX, sY, sZ, 0.0,\r\n // uX, uY, uZ, 0.0,\r\n // -fX, -fY, -fZ, 0.0,\r\n // 0.0, 0.0, 0.0, 1.0);\r\n // const translation = new Matrix4(\r\n // 1.0, 0.0, 0.0, -position.x,\r\n // 0.0, 1.0, 0.0, -position.y,\r\n // 0.0, 0.0, 1.0, -position.z,\r\n // 0.0, 0.0, 0.0, 1.0);\r\n // return rotation.multiply(translation);\r\n if (!defined(result)) {\r\n return new Matrix4(\r\n sX,\r\n sY,\r\n sZ,\r\n t0,\r\n uX,\r\n uY,\r\n uZ,\r\n t1,\r\n -fX,\r\n -fY,\r\n -fZ,\r\n t2,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n );\r\n }\r\n result[0] = sX;\r\n result[1] = uX;\r\n result[2] = -fX;\r\n result[3] = 0.0;\r\n result[4] = sY;\r\n result[5] = uY;\r\n result[6] = -fY;\r\n result[7] = 0.0;\r\n result[8] = sZ;\r\n result[9] = uZ;\r\n result[10] = -fZ;\r\n result[11] = 0.0;\r\n result[12] = t0;\r\n result[13] = t1;\r\n result[14] = t2;\r\n result[15] = 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance representing a perspective transformation matrix.\r\n *\r\n * @param {Number} fovY The field of view along the Y axis in radians.\r\n * @param {Number} aspectRatio The aspect ratio.\r\n * @param {Number} near The distance to the near plane in meters.\r\n * @param {Number} far The distance to the far plane in meters.\r\n * @param {Matrix4} result The object in which the result will be stored.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} fovY must be in (0, PI].\r\n * @exception {DeveloperError} aspectRatio must be greater than zero.\r\n * @exception {DeveloperError} near must be greater than zero.\r\n * @exception {DeveloperError} far must be greater than zero.\r\n */\r\nMatrix4.computePerspectiveFieldOfView = function (\r\n fovY,\r\n aspectRatio,\r\n near,\r\n far,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThan(\"fovY\", fovY, 0.0);\r\n Check.typeOf.number.lessThan(\"fovY\", fovY, Math.PI);\r\n Check.typeOf.number.greaterThan(\"near\", near, 0.0);\r\n Check.typeOf.number.greaterThan(\"far\", far, 0.0);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const bottom = Math.tan(fovY * 0.5);\r\n\r\n const column1Row1 = 1.0 / bottom;\r\n const column0Row0 = column1Row1 / aspectRatio;\r\n const column2Row2 = (far + near) / (near - far);\r\n const column3Row2 = (2.0 * far * near) / (near - far);\r\n\r\n result[0] = column0Row0;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = 0.0;\r\n result[5] = column1Row1;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = 0.0;\r\n result[9] = 0.0;\r\n result[10] = column2Row2;\r\n result[11] = -1.0;\r\n result[12] = 0.0;\r\n result[13] = 0.0;\r\n result[14] = column3Row2;\r\n result[15] = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance representing an orthographic transformation matrix.\r\n *\r\n * @param {Number} left The number of meters to the left of the camera that will be in view.\r\n * @param {Number} right The number of meters to the right of the camera that will be in view.\r\n * @param {Number} bottom The number of meters below of the camera that will be in view.\r\n * @param {Number} top The number of meters above of the camera that will be in view.\r\n * @param {Number} near The distance to the near plane in meters.\r\n * @param {Number} far The distance to the far plane in meters.\r\n * @param {Matrix4} result The object in which the result will be stored.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.computeOrthographicOffCenter = function (\r\n left,\r\n right,\r\n bottom,\r\n top,\r\n near,\r\n far,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"left\", left);\r\n Check.typeOf.number(\"right\", right);\r\n Check.typeOf.number(\"bottom\", bottom);\r\n Check.typeOf.number(\"top\", top);\r\n Check.typeOf.number(\"near\", near);\r\n Check.typeOf.number(\"far\", far);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n let a = 1.0 / (right - left);\r\n let b = 1.0 / (top - bottom);\r\n let c = 1.0 / (far - near);\r\n\r\n const tx = -(right + left) * a;\r\n const ty = -(top + bottom) * b;\r\n const tz = -(far + near) * c;\r\n a *= 2.0;\r\n b *= 2.0;\r\n c *= -2.0;\r\n\r\n result[0] = a;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = 0.0;\r\n result[5] = b;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = 0.0;\r\n result[9] = 0.0;\r\n result[10] = c;\r\n result[11] = 0.0;\r\n result[12] = tx;\r\n result[13] = ty;\r\n result[14] = tz;\r\n result[15] = 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance representing an off center perspective transformation.\r\n *\r\n * @param {Number} left The number of meters to the left of the camera that will be in view.\r\n * @param {Number} right The number of meters to the right of the camera that will be in view.\r\n * @param {Number} bottom The number of meters below of the camera that will be in view.\r\n * @param {Number} top The number of meters above of the camera that will be in view.\r\n * @param {Number} near The distance to the near plane in meters.\r\n * @param {Number} far The distance to the far plane in meters.\r\n * @param {Matrix4} result The object in which the result will be stored.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.computePerspectiveOffCenter = function (\r\n left,\r\n right,\r\n bottom,\r\n top,\r\n near,\r\n far,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"left\", left);\r\n Check.typeOf.number(\"right\", right);\r\n Check.typeOf.number(\"bottom\", bottom);\r\n Check.typeOf.number(\"top\", top);\r\n Check.typeOf.number(\"near\", near);\r\n Check.typeOf.number(\"far\", far);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const column0Row0 = (2.0 * near) / (right - left);\r\n const column1Row1 = (2.0 * near) / (top - bottom);\r\n const column2Row0 = (right + left) / (right - left);\r\n const column2Row1 = (top + bottom) / (top - bottom);\r\n const column2Row2 = -(far + near) / (far - near);\r\n const column2Row3 = -1.0;\r\n const column3Row2 = (-2.0 * far * near) / (far - near);\r\n\r\n result[0] = column0Row0;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = 0.0;\r\n result[5] = column1Row1;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = column2Row0;\r\n result[9] = column2Row1;\r\n result[10] = column2Row2;\r\n result[11] = column2Row3;\r\n result[12] = 0.0;\r\n result[13] = 0.0;\r\n result[14] = column3Row2;\r\n result[15] = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance representing an infinite off center perspective transformation.\r\n *\r\n * @param {Number} left The number of meters to the left of the camera that will be in view.\r\n * @param {Number} right The number of meters to the right of the camera that will be in view.\r\n * @param {Number} bottom The number of meters below of the camera that will be in view.\r\n * @param {Number} top The number of meters above of the camera that will be in view.\r\n * @param {Number} near The distance to the near plane in meters.\r\n * @param {Matrix4} result The object in which the result will be stored.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.computeInfinitePerspectiveOffCenter = function (\r\n left,\r\n right,\r\n bottom,\r\n top,\r\n near,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"left\", left);\r\n Check.typeOf.number(\"right\", right);\r\n Check.typeOf.number(\"bottom\", bottom);\r\n Check.typeOf.number(\"top\", top);\r\n Check.typeOf.number(\"near\", near);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const column0Row0 = (2.0 * near) / (right - left);\r\n const column1Row1 = (2.0 * near) / (top - bottom);\r\n const column2Row0 = (right + left) / (right - left);\r\n const column2Row1 = (top + bottom) / (top - bottom);\r\n const column2Row2 = -1.0;\r\n const column2Row3 = -1.0;\r\n const column3Row2 = -2.0 * near;\r\n\r\n result[0] = column0Row0;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = 0.0;\r\n result[5] = column1Row1;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = column2Row0;\r\n result[9] = column2Row1;\r\n result[10] = column2Row2;\r\n result[11] = column2Row3;\r\n result[12] = 0.0;\r\n result[13] = 0.0;\r\n result[14] = column3Row2;\r\n result[15] = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance that transforms from normalized device coordinates to window coordinates.\r\n *\r\n * @param {Object} [viewport = { x : 0.0, y : 0.0, width : 0.0, height : 0.0 }] The viewport's corners as shown in Example 1.\r\n * @param {Number} [nearDepthRange=0.0] The near plane distance in window coordinates.\r\n * @param {Number} [farDepthRange=1.0] The far plane distance in window coordinates.\r\n * @param {Matrix4} [result] The object in which the result will be stored.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @example\r\n * // Create viewport transformation using an explicit viewport and depth range.\r\n * const m = Cesium.Matrix4.computeViewportTransformation({\r\n * x : 0.0,\r\n * y : 0.0,\r\n * width : 1024.0,\r\n * height : 768.0\r\n * }, 0.0, 1.0, new Cesium.Matrix4());\r\n */\r\nMatrix4.computeViewportTransformation = function (\r\n viewport,\r\n nearDepthRange,\r\n farDepthRange,\r\n result\r\n) {\r\n if (!defined(result)) {\r\n result = new Matrix4();\r\n }\r\n\r\n viewport = defaultValue(viewport, defaultValue.EMPTY_OBJECT);\r\n const x = defaultValue(viewport.x, 0.0);\r\n const y = defaultValue(viewport.y, 0.0);\r\n const width = defaultValue(viewport.width, 0.0);\r\n const height = defaultValue(viewport.height, 0.0);\r\n nearDepthRange = defaultValue(nearDepthRange, 0.0);\r\n farDepthRange = defaultValue(farDepthRange, 1.0);\r\n\r\n const halfWidth = width * 0.5;\r\n const halfHeight = height * 0.5;\r\n const halfDepth = (farDepthRange - nearDepthRange) * 0.5;\r\n\r\n const column0Row0 = halfWidth;\r\n const column1Row1 = halfHeight;\r\n const column2Row2 = halfDepth;\r\n const column3Row0 = x + halfWidth;\r\n const column3Row1 = y + halfHeight;\r\n const column3Row2 = nearDepthRange + halfDepth;\r\n const column3Row3 = 1.0;\r\n\r\n result[0] = column0Row0;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = 0.0;\r\n result[5] = column1Row1;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = 0.0;\r\n result[9] = 0.0;\r\n result[10] = column2Row2;\r\n result[11] = 0.0;\r\n result[12] = column3Row0;\r\n result[13] = column3Row1;\r\n result[14] = column3Row2;\r\n result[15] = column3Row3;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix4 instance that transforms from world space to view space.\r\n *\r\n * @param {Cartesian3} position The position of the camera.\r\n * @param {Cartesian3} direction The forward direction.\r\n * @param {Cartesian3} up The up direction.\r\n * @param {Cartesian3} right The right direction.\r\n * @param {Matrix4} result The object in which the result will be stored.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.computeView = function (position, direction, up, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"position\", position);\r\n Check.typeOf.object(\"direction\", direction);\r\n Check.typeOf.object(\"up\", up);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = right.x;\r\n result[1] = up.x;\r\n result[2] = -direction.x;\r\n result[3] = 0.0;\r\n result[4] = right.y;\r\n result[5] = up.y;\r\n result[6] = -direction.y;\r\n result[7] = 0.0;\r\n result[8] = right.z;\r\n result[9] = up.z;\r\n result[10] = -direction.z;\r\n result[11] = 0.0;\r\n result[12] = -Cartesian3.dot(right, position);\r\n result[13] = -Cartesian3.dot(up, position);\r\n result[14] = Cartesian3.dot(direction, position);\r\n result[15] = 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes an Array from the provided Matrix4 instance.\r\n * The array will be in column-major order.\r\n *\r\n * @param {Matrix4} matrix The matrix to use..\r\n * @param {Number[]} [result] The Array onto which to store the result.\r\n * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided.\r\n *\r\n * @example\r\n * //create an array from an instance of Matrix4\r\n * // m = [10.0, 14.0, 18.0, 22.0]\r\n * // [11.0, 15.0, 19.0, 23.0]\r\n * // [12.0, 16.0, 20.0, 24.0]\r\n * // [13.0, 17.0, 21.0, 25.0]\r\n * const a = Cesium.Matrix4.toArray(m);\r\n *\r\n * // m remains the same\r\n * //creates a = [10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0, 17.0, 18.0, 19.0, 20.0, 21.0, 22.0, 23.0, 24.0, 25.0]\r\n */\r\nMatrix4.toArray = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return [\r\n matrix[0],\r\n matrix[1],\r\n matrix[2],\r\n matrix[3],\r\n matrix[4],\r\n matrix[5],\r\n matrix[6],\r\n matrix[7],\r\n matrix[8],\r\n matrix[9],\r\n matrix[10],\r\n matrix[11],\r\n matrix[12],\r\n matrix[13],\r\n matrix[14],\r\n matrix[15],\r\n ];\r\n }\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[3];\r\n result[4] = matrix[4];\r\n result[5] = matrix[5];\r\n result[6] = matrix[6];\r\n result[7] = matrix[7];\r\n result[8] = matrix[8];\r\n result[9] = matrix[9];\r\n result[10] = matrix[10];\r\n result[11] = matrix[11];\r\n result[12] = matrix[12];\r\n result[13] = matrix[13];\r\n result[14] = matrix[14];\r\n result[15] = matrix[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the array index of the element at the provided row and column.\r\n *\r\n * @param {Number} row The zero-based index of the row.\r\n * @param {Number} column The zero-based index of the column.\r\n * @returns {Number} The index of the element at the provided row and column.\r\n *\r\n * @exception {DeveloperError} row must be 0, 1, 2, or 3.\r\n * @exception {DeveloperError} column must be 0, 1, 2, or 3.\r\n *\r\n * @example\r\n * const myMatrix = new Cesium.Matrix4();\r\n * const column1Row0Index = Cesium.Matrix4.getElementIndex(1, 0);\r\n * const column1Row0 = myMatrix[column1Row0Index];\r\n * myMatrix[column1Row0Index] = 10.0;\r\n */\r\nMatrix4.getElementIndex = function (column, row) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"row\", row, 3);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"column\", column, 3);\r\n //>>includeEnd('debug');\r\n\r\n return column * 4 + row;\r\n};\r\n\r\n/**\r\n * Retrieves a copy of the matrix column at the provided index as a Cartesian4 instance.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the column to retrieve.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\r\n *\r\n * @example\r\n * //returns a Cartesian4 instance with values from the specified column\r\n * // m = [10.0, 11.0, 12.0, 13.0]\r\n * // [14.0, 15.0, 16.0, 17.0]\r\n * // [18.0, 19.0, 20.0, 21.0]\r\n * // [22.0, 23.0, 24.0, 25.0]\r\n *\r\n * //Example 1: Creates an instance of Cartesian\r\n * const a = Cesium.Matrix4.getColumn(m, 2, new Cesium.Cartesian4());\r\n *\r\n * @example\r\n * //Example 2: Sets values for Cartesian instance\r\n * const a = new Cesium.Cartesian4();\r\n * Cesium.Matrix4.getColumn(m, 2, a);\r\n *\r\n * // a.x = 12.0; a.y = 16.0; a.z = 20.0; a.w = 24.0;\r\n */\r\nMatrix4.getColumn = function (matrix, index, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\r\n\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const startIndex = index * 4;\r\n const x = matrix[startIndex];\r\n const y = matrix[startIndex + 1];\r\n const z = matrix[startIndex + 2];\r\n const w = matrix[startIndex + 3];\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian4 instance.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the column to set.\r\n * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified column.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\r\n *\r\n * @example\r\n * //creates a new Matrix4 instance with new column values from the Cartesian4 instance\r\n * // m = [10.0, 11.0, 12.0, 13.0]\r\n * // [14.0, 15.0, 16.0, 17.0]\r\n * // [18.0, 19.0, 20.0, 21.0]\r\n * // [22.0, 23.0, 24.0, 25.0]\r\n *\r\n * const a = Cesium.Matrix4.setColumn(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4());\r\n *\r\n * // m remains the same\r\n * // a = [10.0, 11.0, 99.0, 13.0]\r\n * // [14.0, 15.0, 98.0, 17.0]\r\n * // [18.0, 19.0, 97.0, 21.0]\r\n * // [22.0, 23.0, 96.0, 25.0]\r\n */\r\nMatrix4.setColumn = function (matrix, index, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\r\n\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result = Matrix4.clone(matrix, result);\r\n const startIndex = index * 4;\r\n result[startIndex] = cartesian.x;\r\n result[startIndex + 1] = cartesian.y;\r\n result[startIndex + 2] = cartesian.z;\r\n result[startIndex + 3] = cartesian.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Retrieves a copy of the matrix row at the provided index as a Cartesian4 instance.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the row to retrieve.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\r\n *\r\n * @example\r\n * //returns a Cartesian4 instance with values from the specified column\r\n * // m = [10.0, 11.0, 12.0, 13.0]\r\n * // [14.0, 15.0, 16.0, 17.0]\r\n * // [18.0, 19.0, 20.0, 21.0]\r\n * // [22.0, 23.0, 24.0, 25.0]\r\n *\r\n * //Example 1: Returns an instance of Cartesian\r\n * const a = Cesium.Matrix4.getRow(m, 2, new Cesium.Cartesian4());\r\n *\r\n * @example\r\n * //Example 2: Sets values for a Cartesian instance\r\n * const a = new Cesium.Cartesian4();\r\n * Cesium.Matrix4.getRow(m, 2, a);\r\n *\r\n * // a.x = 18.0; a.y = 19.0; a.z = 20.0; a.w = 21.0;\r\n */\r\nMatrix4.getRow = function (matrix, index, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\r\n\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const x = matrix[index];\r\n const y = matrix[index + 4];\r\n const z = matrix[index + 8];\r\n const w = matrix[index + 12];\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian4 instance.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the row to set.\r\n * @param {Cartesian4} cartesian The Cartesian whose values will be assigned to the specified row.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0, 1, 2, or 3.\r\n *\r\n * @example\r\n * //create a new Matrix4 instance with new row values from the Cartesian4 instance\r\n * // m = [10.0, 11.0, 12.0, 13.0]\r\n * // [14.0, 15.0, 16.0, 17.0]\r\n * // [18.0, 19.0, 20.0, 21.0]\r\n * // [22.0, 23.0, 24.0, 25.0]\r\n *\r\n * const a = Cesium.Matrix4.setRow(m, 2, new Cesium.Cartesian4(99.0, 98.0, 97.0, 96.0), new Cesium.Matrix4());\r\n *\r\n * // m remains the same\r\n * // a = [10.0, 11.0, 12.0, 13.0]\r\n * // [14.0, 15.0, 16.0, 17.0]\r\n * // [99.0, 98.0, 97.0, 96.0]\r\n * // [22.0, 23.0, 24.0, 25.0]\r\n */\r\nMatrix4.setRow = function (matrix, index, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 3);\r\n\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result = Matrix4.clone(matrix, result);\r\n result[index] = cartesian.x;\r\n result[index + 4] = cartesian.y;\r\n result[index + 8] = cartesian.z;\r\n result[index + 12] = cartesian.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a new matrix that replaces the translation in the rightmost column of the provided\r\n * matrix with the provided translation. This assumes the matrix is an affine transformation.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Cartesian3} translation The translation that replaces the translation of the provided matrix.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.setTranslation = function (matrix, translation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"translation\", translation);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[3];\r\n\r\n result[4] = matrix[4];\r\n result[5] = matrix[5];\r\n result[6] = matrix[6];\r\n result[7] = matrix[7];\r\n\r\n result[8] = matrix[8];\r\n result[9] = matrix[9];\r\n result[10] = matrix[10];\r\n result[11] = matrix[11];\r\n\r\n result[12] = translation.x;\r\n result[13] = translation.y;\r\n result[14] = translation.z;\r\n result[15] = matrix[15];\r\n\r\n return result;\r\n};\r\n\r\nconst scaleScratch1 = new Cartesian3();\r\n\r\n/**\r\n * Computes a new matrix that replaces the scale with the provided scale.\r\n * This assumes the matrix is an affine transformation.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Cartesian3} scale The scale that replaces the scale of the provided matrix.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @see Matrix4.setUniformScale\r\n * @see Matrix4.fromScale\r\n * @see Matrix4.fromUniformScale\r\n * @see Matrix4.multiplyByScale\r\n * @see Matrix4.multiplyByUniformScale\r\n * @see Matrix4.getScale\r\n */\r\nMatrix4.setScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const existingScale = Matrix4.getScale(matrix, scaleScratch1);\r\n const scaleRatioX = scale.x / existingScale.x;\r\n const scaleRatioY = scale.y / existingScale.y;\r\n const scaleRatioZ = scale.z / existingScale.z;\r\n\r\n result[0] = matrix[0] * scaleRatioX;\r\n result[1] = matrix[1] * scaleRatioX;\r\n result[2] = matrix[2] * scaleRatioX;\r\n result[3] = matrix[3];\r\n\r\n result[4] = matrix[4] * scaleRatioY;\r\n result[5] = matrix[5] * scaleRatioY;\r\n result[6] = matrix[6] * scaleRatioY;\r\n result[7] = matrix[7];\r\n\r\n result[8] = matrix[8] * scaleRatioZ;\r\n result[9] = matrix[9] * scaleRatioZ;\r\n result[10] = matrix[10] * scaleRatioZ;\r\n result[11] = matrix[11];\r\n\r\n result[12] = matrix[12];\r\n result[13] = matrix[13];\r\n result[14] = matrix[14];\r\n result[15] = matrix[15];\r\n\r\n return result;\r\n};\r\n\r\nconst scaleScratch2 = new Cartesian3();\r\n\r\n/**\r\n * Computes a new matrix that replaces the scale with the provided uniform scale.\r\n * This assumes the matrix is an affine transformation.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Number} scale The uniform scale that replaces the scale of the provided matrix.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @see Matrix4.setScale\r\n * @see Matrix4.fromScale\r\n * @see Matrix4.fromUniformScale\r\n * @see Matrix4.multiplyByScale\r\n * @see Matrix4.multiplyByUniformScale\r\n * @see Matrix4.getScale\r\n */\r\nMatrix4.setUniformScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const existingScale = Matrix4.getScale(matrix, scaleScratch2);\r\n const scaleRatioX = scale / existingScale.x;\r\n const scaleRatioY = scale / existingScale.y;\r\n const scaleRatioZ = scale / existingScale.z;\r\n\r\n result[0] = matrix[0] * scaleRatioX;\r\n result[1] = matrix[1] * scaleRatioX;\r\n result[2] = matrix[2] * scaleRatioX;\r\n result[3] = matrix[3];\r\n\r\n result[4] = matrix[4] * scaleRatioY;\r\n result[5] = matrix[5] * scaleRatioY;\r\n result[6] = matrix[6] * scaleRatioY;\r\n result[7] = matrix[7];\r\n\r\n result[8] = matrix[8] * scaleRatioZ;\r\n result[9] = matrix[9] * scaleRatioZ;\r\n result[10] = matrix[10] * scaleRatioZ;\r\n result[11] = matrix[11];\r\n\r\n result[12] = matrix[12];\r\n result[13] = matrix[13];\r\n result[14] = matrix[14];\r\n result[15] = matrix[15];\r\n\r\n return result;\r\n};\r\n\r\nconst scratchColumn = new Cartesian3();\r\n\r\n/**\r\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix4} matrix The matrix.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter\r\n *\r\n * @see Matrix4.multiplyByScale\r\n * @see Matrix4.multiplyByUniformScale\r\n * @see Matrix4.fromScale\r\n * @see Matrix4.fromUniformScale\r\n * @see Matrix4.setScale\r\n * @see Matrix4.setUniformScale\r\n */\r\nMatrix4.getScale = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Cartesian3.magnitude(\r\n Cartesian3.fromElements(matrix[0], matrix[1], matrix[2], scratchColumn)\r\n );\r\n result.y = Cartesian3.magnitude(\r\n Cartesian3.fromElements(matrix[4], matrix[5], matrix[6], scratchColumn)\r\n );\r\n result.z = Cartesian3.magnitude(\r\n Cartesian3.fromElements(matrix[8], matrix[9], matrix[10], scratchColumn)\r\n );\r\n return result;\r\n};\r\n\r\nconst scaleScratch3 = new Cartesian3();\r\n\r\n/**\r\n * Computes the maximum scale assuming the matrix is an affine transformation.\r\n * The maximum scale is the maximum length of the column vectors in the upper-left\r\n * 3x3 matrix.\r\n *\r\n * @param {Matrix4} matrix The matrix.\r\n * @returns {Number} The maximum scale.\r\n */\r\nMatrix4.getMaximumScale = function (matrix) {\r\n Matrix4.getScale(matrix, scaleScratch3);\r\n return Cartesian3.maximumComponent(scaleScratch3);\r\n};\r\n\r\nconst scaleScratch4 = new Cartesian3();\r\n\r\n/**\r\n * Sets the rotation assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix4} matrix The matrix.\r\n * @param {Matrix3} rotation The rotation matrix.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @see Matrix4.fromRotation\r\n * @see Matrix4.getRotation\r\n */\r\nMatrix4.setRotation = function (matrix, rotation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const scale = Matrix4.getScale(matrix, scaleScratch4);\r\n\r\n result[0] = rotation[0] * scale.x;\r\n result[1] = rotation[1] * scale.x;\r\n result[2] = rotation[2] * scale.x;\r\n result[3] = matrix[3];\r\n\r\n result[4] = rotation[3] * scale.y;\r\n result[5] = rotation[4] * scale.y;\r\n result[6] = rotation[5] * scale.y;\r\n result[7] = matrix[7];\r\n\r\n result[8] = rotation[6] * scale.z;\r\n result[9] = rotation[7] * scale.z;\r\n result[10] = rotation[8] * scale.z;\r\n result[11] = matrix[11];\r\n\r\n result[12] = matrix[12];\r\n result[13] = matrix[13];\r\n result[14] = matrix[14];\r\n result[15] = matrix[15];\r\n\r\n return result;\r\n};\r\n\r\nconst scaleScratch5 = new Cartesian3();\r\n\r\n/**\r\n * Extracts the rotation matrix assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix4} matrix The matrix.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @see Matrix4.setRotation\r\n * @see Matrix4.fromRotation\r\n */\r\nMatrix4.getRotation = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const scale = Matrix4.getScale(matrix, scaleScratch5);\r\n\r\n result[0] = matrix[0] / scale.x;\r\n result[1] = matrix[1] / scale.x;\r\n result[2] = matrix[2] / scale.x;\r\n\r\n result[3] = matrix[4] / scale.y;\r\n result[4] = matrix[5] / scale.y;\r\n result[5] = matrix[6] / scale.y;\r\n\r\n result[6] = matrix[8] / scale.z;\r\n result[7] = matrix[9] / scale.z;\r\n result[8] = matrix[10] / scale.z;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of two matrices.\r\n *\r\n * @param {Matrix4} left The first matrix.\r\n * @param {Matrix4} right The second matrix.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.multiply = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const left0 = left[0];\r\n const left1 = left[1];\r\n const left2 = left[2];\r\n const left3 = left[3];\r\n const left4 = left[4];\r\n const left5 = left[5];\r\n const left6 = left[6];\r\n const left7 = left[7];\r\n const left8 = left[8];\r\n const left9 = left[9];\r\n const left10 = left[10];\r\n const left11 = left[11];\r\n const left12 = left[12];\r\n const left13 = left[13];\r\n const left14 = left[14];\r\n const left15 = left[15];\r\n\r\n const right0 = right[0];\r\n const right1 = right[1];\r\n const right2 = right[2];\r\n const right3 = right[3];\r\n const right4 = right[4];\r\n const right5 = right[5];\r\n const right6 = right[6];\r\n const right7 = right[7];\r\n const right8 = right[8];\r\n const right9 = right[9];\r\n const right10 = right[10];\r\n const right11 = right[11];\r\n const right12 = right[12];\r\n const right13 = right[13];\r\n const right14 = right[14];\r\n const right15 = right[15];\r\n\r\n const column0Row0 =\r\n left0 * right0 + left4 * right1 + left8 * right2 + left12 * right3;\r\n const column0Row1 =\r\n left1 * right0 + left5 * right1 + left9 * right2 + left13 * right3;\r\n const column0Row2 =\r\n left2 * right0 + left6 * right1 + left10 * right2 + left14 * right3;\r\n const column0Row3 =\r\n left3 * right0 + left7 * right1 + left11 * right2 + left15 * right3;\r\n\r\n const column1Row0 =\r\n left0 * right4 + left4 * right5 + left8 * right6 + left12 * right7;\r\n const column1Row1 =\r\n left1 * right4 + left5 * right5 + left9 * right6 + left13 * right7;\r\n const column1Row2 =\r\n left2 * right4 + left6 * right5 + left10 * right6 + left14 * right7;\r\n const column1Row3 =\r\n left3 * right4 + left7 * right5 + left11 * right6 + left15 * right7;\r\n\r\n const column2Row0 =\r\n left0 * right8 + left4 * right9 + left8 * right10 + left12 * right11;\r\n const column2Row1 =\r\n left1 * right8 + left5 * right9 + left9 * right10 + left13 * right11;\r\n const column2Row2 =\r\n left2 * right8 + left6 * right9 + left10 * right10 + left14 * right11;\r\n const column2Row3 =\r\n left3 * right8 + left7 * right9 + left11 * right10 + left15 * right11;\r\n\r\n const column3Row0 =\r\n left0 * right12 + left4 * right13 + left8 * right14 + left12 * right15;\r\n const column3Row1 =\r\n left1 * right12 + left5 * right13 + left9 * right14 + left13 * right15;\r\n const column3Row2 =\r\n left2 * right12 + left6 * right13 + left10 * right14 + left14 * right15;\r\n const column3Row3 =\r\n left3 * right12 + left7 * right13 + left11 * right14 + left15 * right15;\r\n\r\n result[0] = column0Row0;\r\n result[1] = column0Row1;\r\n result[2] = column0Row2;\r\n result[3] = column0Row3;\r\n result[4] = column1Row0;\r\n result[5] = column1Row1;\r\n result[6] = column1Row2;\r\n result[7] = column1Row3;\r\n result[8] = column2Row0;\r\n result[9] = column2Row1;\r\n result[10] = column2Row2;\r\n result[11] = column2Row3;\r\n result[12] = column3Row0;\r\n result[13] = column3Row1;\r\n result[14] = column3Row2;\r\n result[15] = column3Row3;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the sum of two matrices.\r\n *\r\n * @param {Matrix4} left The first matrix.\r\n * @param {Matrix4} right The second matrix.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.add = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = left[0] + right[0];\r\n result[1] = left[1] + right[1];\r\n result[2] = left[2] + right[2];\r\n result[3] = left[3] + right[3];\r\n result[4] = left[4] + right[4];\r\n result[5] = left[5] + right[5];\r\n result[6] = left[6] + right[6];\r\n result[7] = left[7] + right[7];\r\n result[8] = left[8] + right[8];\r\n result[9] = left[9] + right[9];\r\n result[10] = left[10] + right[10];\r\n result[11] = left[11] + right[11];\r\n result[12] = left[12] + right[12];\r\n result[13] = left[13] + right[13];\r\n result[14] = left[14] + right[14];\r\n result[15] = left[15] + right[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the difference of two matrices.\r\n *\r\n * @param {Matrix4} left The first matrix.\r\n * @param {Matrix4} right The second matrix.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.subtract = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = left[0] - right[0];\r\n result[1] = left[1] - right[1];\r\n result[2] = left[2] - right[2];\r\n result[3] = left[3] - right[3];\r\n result[4] = left[4] - right[4];\r\n result[5] = left[5] - right[5];\r\n result[6] = left[6] - right[6];\r\n result[7] = left[7] - right[7];\r\n result[8] = left[8] - right[8];\r\n result[9] = left[9] - right[9];\r\n result[10] = left[10] - right[10];\r\n result[11] = left[11] - right[11];\r\n result[12] = left[12] - right[12];\r\n result[13] = left[13] - right[13];\r\n result[14] = left[14] - right[14];\r\n result[15] = left[15] - right[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of two matrices assuming the matrices are affine transformation matrices,\r\n * where the upper left 3x3 elements are any matrix, and\r\n * the upper three elements in the fourth column are the translation.\r\n * The bottom row is assumed to be [0, 0, 0, 1].\r\n * The matrix is not verified to be in the proper form.\r\n * This method is faster than computing the product for general 4x4\r\n * matrices using {@link Matrix4.multiply}.\r\n *\r\n * @param {Matrix4} left The first matrix.\r\n * @param {Matrix4} right The second matrix.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @example\r\n * const m1 = new Cesium.Matrix4(1.0, 6.0, 7.0, 0.0, 2.0, 5.0, 8.0, 0.0, 3.0, 4.0, 9.0, 0.0, 0.0, 0.0, 0.0, 1.0);\r\n * const m2 = Cesium.Transforms.eastNorthUpToFixedFrame(new Cesium.Cartesian3(1.0, 1.0, 1.0));\r\n * const m3 = Cesium.Matrix4.multiplyTransformation(m1, m2, new Cesium.Matrix4());\r\n */\r\nMatrix4.multiplyTransformation = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const left0 = left[0];\r\n const left1 = left[1];\r\n const left2 = left[2];\r\n const left4 = left[4];\r\n const left5 = left[5];\r\n const left6 = left[6];\r\n const left8 = left[8];\r\n const left9 = left[9];\r\n const left10 = left[10];\r\n const left12 = left[12];\r\n const left13 = left[13];\r\n const left14 = left[14];\r\n\r\n const right0 = right[0];\r\n const right1 = right[1];\r\n const right2 = right[2];\r\n const right4 = right[4];\r\n const right5 = right[5];\r\n const right6 = right[6];\r\n const right8 = right[8];\r\n const right9 = right[9];\r\n const right10 = right[10];\r\n const right12 = right[12];\r\n const right13 = right[13];\r\n const right14 = right[14];\r\n\r\n const column0Row0 = left0 * right0 + left4 * right1 + left8 * right2;\r\n const column0Row1 = left1 * right0 + left5 * right1 + left9 * right2;\r\n const column0Row2 = left2 * right0 + left6 * right1 + left10 * right2;\r\n\r\n const column1Row0 = left0 * right4 + left4 * right5 + left8 * right6;\r\n const column1Row1 = left1 * right4 + left5 * right5 + left9 * right6;\r\n const column1Row2 = left2 * right4 + left6 * right5 + left10 * right6;\r\n\r\n const column2Row0 = left0 * right8 + left4 * right9 + left8 * right10;\r\n const column2Row1 = left1 * right8 + left5 * right9 + left9 * right10;\r\n const column2Row2 = left2 * right8 + left6 * right9 + left10 * right10;\r\n\r\n const column3Row0 =\r\n left0 * right12 + left4 * right13 + left8 * right14 + left12;\r\n const column3Row1 =\r\n left1 * right12 + left5 * right13 + left9 * right14 + left13;\r\n const column3Row2 =\r\n left2 * right12 + left6 * right13 + left10 * right14 + left14;\r\n\r\n result[0] = column0Row0;\r\n result[1] = column0Row1;\r\n result[2] = column0Row2;\r\n result[3] = 0.0;\r\n result[4] = column1Row0;\r\n result[5] = column1Row1;\r\n result[6] = column1Row2;\r\n result[7] = 0.0;\r\n result[8] = column2Row0;\r\n result[9] = column2Row1;\r\n result[10] = column2Row2;\r\n result[11] = 0.0;\r\n result[12] = column3Row0;\r\n result[13] = column3Row1;\r\n result[14] = column3Row2;\r\n result[15] = 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Multiplies a transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0])\r\n * by a 3x3 rotation matrix. This is an optimization\r\n * for Matrix4.multiply(m, Matrix4.fromRotationTranslation(rotation), m); with less allocations and arithmetic operations.\r\n *\r\n * @param {Matrix4} matrix The matrix on the left-hand side.\r\n * @param {Matrix3} rotation The 3x3 rotation matrix on the right-hand side.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @example\r\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromRotationTranslation(rotation), m);\r\n * Cesium.Matrix4.multiplyByMatrix3(m, rotation, m);\r\n */\r\nMatrix4.multiplyByMatrix3 = function (matrix, rotation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"rotation\", rotation);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const left0 = matrix[0];\r\n const left1 = matrix[1];\r\n const left2 = matrix[2];\r\n const left4 = matrix[4];\r\n const left5 = matrix[5];\r\n const left6 = matrix[6];\r\n const left8 = matrix[8];\r\n const left9 = matrix[9];\r\n const left10 = matrix[10];\r\n\r\n const right0 = rotation[0];\r\n const right1 = rotation[1];\r\n const right2 = rotation[2];\r\n const right4 = rotation[3];\r\n const right5 = rotation[4];\r\n const right6 = rotation[5];\r\n const right8 = rotation[6];\r\n const right9 = rotation[7];\r\n const right10 = rotation[8];\r\n\r\n const column0Row0 = left0 * right0 + left4 * right1 + left8 * right2;\r\n const column0Row1 = left1 * right0 + left5 * right1 + left9 * right2;\r\n const column0Row2 = left2 * right0 + left6 * right1 + left10 * right2;\r\n\r\n const column1Row0 = left0 * right4 + left4 * right5 + left8 * right6;\r\n const column1Row1 = left1 * right4 + left5 * right5 + left9 * right6;\r\n const column1Row2 = left2 * right4 + left6 * right5 + left10 * right6;\r\n\r\n const column2Row0 = left0 * right8 + left4 * right9 + left8 * right10;\r\n const column2Row1 = left1 * right8 + left5 * right9 + left9 * right10;\r\n const column2Row2 = left2 * right8 + left6 * right9 + left10 * right10;\r\n\r\n result[0] = column0Row0;\r\n result[1] = column0Row1;\r\n result[2] = column0Row2;\r\n result[3] = 0.0;\r\n result[4] = column1Row0;\r\n result[5] = column1Row1;\r\n result[6] = column1Row2;\r\n result[7] = 0.0;\r\n result[8] = column2Row0;\r\n result[9] = column2Row1;\r\n result[10] = column2Row2;\r\n result[11] = 0.0;\r\n result[12] = matrix[12];\r\n result[13] = matrix[13];\r\n result[14] = matrix[14];\r\n result[15] = matrix[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Multiplies a transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0])\r\n * by an implicit translation matrix defined by a {@link Cartesian3}. This is an optimization\r\n * for Matrix4.multiply(m, Matrix4.fromTranslation(position), m); with less allocations and arithmetic operations.\r\n *\r\n * @param {Matrix4} matrix The matrix on the left-hand side.\r\n * @param {Cartesian3} translation The translation on the right-hand side.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @example\r\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromTranslation(position), m);\r\n * Cesium.Matrix4.multiplyByTranslation(m, position, m);\r\n */\r\nMatrix4.multiplyByTranslation = function (matrix, translation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"translation\", translation);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const x = translation.x;\r\n const y = translation.y;\r\n const z = translation.z;\r\n\r\n const tx = x * matrix[0] + y * matrix[4] + z * matrix[8] + matrix[12];\r\n const ty = x * matrix[1] + y * matrix[5] + z * matrix[9] + matrix[13];\r\n const tz = x * matrix[2] + y * matrix[6] + z * matrix[10] + matrix[14];\r\n\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[3];\r\n result[4] = matrix[4];\r\n result[5] = matrix[5];\r\n result[6] = matrix[6];\r\n result[7] = matrix[7];\r\n result[8] = matrix[8];\r\n result[9] = matrix[9];\r\n result[10] = matrix[10];\r\n result[11] = matrix[11];\r\n result[12] = tx;\r\n result[13] = ty;\r\n result[14] = tz;\r\n result[15] = matrix[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Multiplies an affine transformation matrix (with a bottom row of [0.0, 0.0, 0.0, 1.0])\r\n * by an implicit non-uniform scale matrix. This is an optimization\r\n * for Matrix4.multiply(m, Matrix4.fromUniformScale(scale), m);, where\r\n * m must be an affine matrix.\r\n * This function performs fewer allocations and arithmetic operations.\r\n *\r\n * @param {Matrix4} matrix The affine matrix on the left-hand side.\r\n * @param {Cartesian3} scale The non-uniform scale on the right-hand side.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n *\r\n * @example\r\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromScale(scale), m);\r\n * Cesium.Matrix4.multiplyByScale(m, scale, m);\r\n *\r\n * @see Matrix4.multiplyByUniformScale\r\n * @see Matrix4.fromScale\r\n * @see Matrix4.fromUniformScale\r\n * @see Matrix4.setScale\r\n * @see Matrix4.setUniformScale\r\n * @see Matrix4.getScale\r\n */\r\nMatrix4.multiplyByScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const scaleX = scale.x;\r\n const scaleY = scale.y;\r\n const scaleZ = scale.z;\r\n\r\n // Faster than Cartesian3.equals\r\n if (scaleX === 1.0 && scaleY === 1.0 && scaleZ === 1.0) {\r\n return Matrix4.clone(matrix, result);\r\n }\r\n\r\n result[0] = scaleX * matrix[0];\r\n result[1] = scaleX * matrix[1];\r\n result[2] = scaleX * matrix[2];\r\n result[3] = matrix[3];\r\n\r\n result[4] = scaleY * matrix[4];\r\n result[5] = scaleY * matrix[5];\r\n result[6] = scaleY * matrix[6];\r\n result[7] = matrix[7];\r\n\r\n result[8] = scaleZ * matrix[8];\r\n result[9] = scaleZ * matrix[9];\r\n result[10] = scaleZ * matrix[10];\r\n result[11] = matrix[11];\r\n\r\n result[12] = matrix[12];\r\n result[13] = matrix[13];\r\n result[14] = matrix[14];\r\n result[15] = matrix[15];\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix.\r\n *\r\n * @param {Matrix4} matrix The matrix on the left-hand side.\r\n * @param {Number} scale The uniform scale on the right-hand side.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @example\r\n * // Instead of Cesium.Matrix4.multiply(m, Cesium.Matrix4.fromUniformScale(scale), m);\r\n * Cesium.Matrix4.multiplyByUniformScale(m, scale, m);\r\n *\r\n * @see Matrix4.multiplyByScale\r\n * @see Matrix4.fromScale\r\n * @see Matrix4.fromUniformScale\r\n * @see Matrix4.setScale\r\n * @see Matrix4.setUniformScale\r\n * @see Matrix4.getScale\r\n */\r\nMatrix4.multiplyByUniformScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0] * scale;\r\n result[1] = matrix[1] * scale;\r\n result[2] = matrix[2] * scale;\r\n result[3] = matrix[3];\r\n\r\n result[4] = matrix[4] * scale;\r\n result[5] = matrix[5] * scale;\r\n result[6] = matrix[6] * scale;\r\n result[7] = matrix[7];\r\n\r\n result[8] = matrix[8] * scale;\r\n result[9] = matrix[9] * scale;\r\n result[10] = matrix[10] * scale;\r\n result[11] = matrix[11];\r\n\r\n result[12] = matrix[12];\r\n result[13] = matrix[13];\r\n result[14] = matrix[14];\r\n result[15] = matrix[15];\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix and a column vector.\r\n *\r\n * @param {Matrix4} matrix The matrix.\r\n * @param {Cartesian4} cartesian The vector.\r\n * @param {Cartesian4} result The object onto which to store the result.\r\n * @returns {Cartesian4} The modified result parameter.\r\n */\r\nMatrix4.multiplyByVector = function (matrix, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const vX = cartesian.x;\r\n const vY = cartesian.y;\r\n const vZ = cartesian.z;\r\n const vW = cartesian.w;\r\n\r\n const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12] * vW;\r\n const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13] * vW;\r\n const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14] * vW;\r\n const w = matrix[3] * vX + matrix[7] * vY + matrix[11] * vZ + matrix[15] * vW;\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector}\r\n * with a {@link Cartesian4} with a w component of zero.\r\n *\r\n * @param {Matrix4} matrix The matrix.\r\n * @param {Cartesian3} cartesian The point.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n *\r\n * @example\r\n * const p = new Cesium.Cartesian3(1.0, 2.0, 3.0);\r\n * const result = Cesium.Matrix4.multiplyByPointAsVector(matrix, p, new Cesium.Cartesian3());\r\n * // A shortcut for\r\n * // Cartesian3 p = ...\r\n * // Cesium.Matrix4.multiplyByVector(matrix, new Cesium.Cartesian4(p.x, p.y, p.z, 0.0), result);\r\n */\r\nMatrix4.multiplyByPointAsVector = function (matrix, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const vX = cartesian.x;\r\n const vY = cartesian.y;\r\n const vZ = cartesian.z;\r\n\r\n const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ;\r\n const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ;\r\n const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ;\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix and a {@link Cartesian3}. This is equivalent to calling {@link Matrix4.multiplyByVector}\r\n * with a {@link Cartesian4} with a w component of 1, but returns a {@link Cartesian3} instead of a {@link Cartesian4}.\r\n *\r\n * @param {Matrix4} matrix The matrix.\r\n * @param {Cartesian3} cartesian The point.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n *\r\n * @example\r\n * const p = new Cesium.Cartesian3(1.0, 2.0, 3.0);\r\n * const result = Cesium.Matrix4.multiplyByPoint(matrix, p, new Cesium.Cartesian3());\r\n */\r\nMatrix4.multiplyByPoint = function (matrix, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const vX = cartesian.x;\r\n const vY = cartesian.y;\r\n const vZ = cartesian.z;\r\n\r\n const x = matrix[0] * vX + matrix[4] * vY + matrix[8] * vZ + matrix[12];\r\n const y = matrix[1] * vX + matrix[5] * vY + matrix[9] * vZ + matrix[13];\r\n const z = matrix[2] * vX + matrix[6] * vY + matrix[10] * vZ + matrix[14];\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix and a scalar.\r\n *\r\n * @param {Matrix4} matrix The matrix.\r\n * @param {Number} scalar The number to multiply by.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @example\r\n * //create a Matrix4 instance which is a scaled version of the supplied Matrix4\r\n * // m = [10.0, 11.0, 12.0, 13.0]\r\n * // [14.0, 15.0, 16.0, 17.0]\r\n * // [18.0, 19.0, 20.0, 21.0]\r\n * // [22.0, 23.0, 24.0, 25.0]\r\n *\r\n * const a = Cesium.Matrix4.multiplyByScalar(m, -2, new Cesium.Matrix4());\r\n *\r\n * // m remains the same\r\n * // a = [-20.0, -22.0, -24.0, -26.0]\r\n * // [-28.0, -30.0, -32.0, -34.0]\r\n * // [-36.0, -38.0, -40.0, -42.0]\r\n * // [-44.0, -46.0, -48.0, -50.0]\r\n */\r\nMatrix4.multiplyByScalar = function (matrix, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0] * scalar;\r\n result[1] = matrix[1] * scalar;\r\n result[2] = matrix[2] * scalar;\r\n result[3] = matrix[3] * scalar;\r\n result[4] = matrix[4] * scalar;\r\n result[5] = matrix[5] * scalar;\r\n result[6] = matrix[6] * scalar;\r\n result[7] = matrix[7] * scalar;\r\n result[8] = matrix[8] * scalar;\r\n result[9] = matrix[9] * scalar;\r\n result[10] = matrix[10] * scalar;\r\n result[11] = matrix[11] * scalar;\r\n result[12] = matrix[12] * scalar;\r\n result[13] = matrix[13] * scalar;\r\n result[14] = matrix[14] * scalar;\r\n result[15] = matrix[15] * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a negated copy of the provided matrix.\r\n *\r\n * @param {Matrix4} matrix The matrix to negate.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @example\r\n * //create a new Matrix4 instance which is a negation of a Matrix4\r\n * // m = [10.0, 11.0, 12.0, 13.0]\r\n * // [14.0, 15.0, 16.0, 17.0]\r\n * // [18.0, 19.0, 20.0, 21.0]\r\n * // [22.0, 23.0, 24.0, 25.0]\r\n *\r\n * const a = Cesium.Matrix4.negate(m, new Cesium.Matrix4());\r\n *\r\n * // m remains the same\r\n * // a = [-10.0, -11.0, -12.0, -13.0]\r\n * // [-14.0, -15.0, -16.0, -17.0]\r\n * // [-18.0, -19.0, -20.0, -21.0]\r\n * // [-22.0, -23.0, -24.0, -25.0]\r\n */\r\nMatrix4.negate = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = -matrix[0];\r\n result[1] = -matrix[1];\r\n result[2] = -matrix[2];\r\n result[3] = -matrix[3];\r\n result[4] = -matrix[4];\r\n result[5] = -matrix[5];\r\n result[6] = -matrix[6];\r\n result[7] = -matrix[7];\r\n result[8] = -matrix[8];\r\n result[9] = -matrix[9];\r\n result[10] = -matrix[10];\r\n result[11] = -matrix[11];\r\n result[12] = -matrix[12];\r\n result[13] = -matrix[13];\r\n result[14] = -matrix[14];\r\n result[15] = -matrix[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the transpose of the provided matrix.\r\n *\r\n * @param {Matrix4} matrix The matrix to transpose.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @example\r\n * //returns transpose of a Matrix4\r\n * // m = [10.0, 11.0, 12.0, 13.0]\r\n * // [14.0, 15.0, 16.0, 17.0]\r\n * // [18.0, 19.0, 20.0, 21.0]\r\n * // [22.0, 23.0, 24.0, 25.0]\r\n *\r\n * const a = Cesium.Matrix4.transpose(m, new Cesium.Matrix4());\r\n *\r\n * // m remains the same\r\n * // a = [10.0, 14.0, 18.0, 22.0]\r\n * // [11.0, 15.0, 19.0, 23.0]\r\n * // [12.0, 16.0, 20.0, 24.0]\r\n * // [13.0, 17.0, 21.0, 25.0]\r\n */\r\nMatrix4.transpose = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const matrix1 = matrix[1];\r\n const matrix2 = matrix[2];\r\n const matrix3 = matrix[3];\r\n const matrix6 = matrix[6];\r\n const matrix7 = matrix[7];\r\n const matrix11 = matrix[11];\r\n\r\n result[0] = matrix[0];\r\n result[1] = matrix[4];\r\n result[2] = matrix[8];\r\n result[3] = matrix[12];\r\n result[4] = matrix1;\r\n result[5] = matrix[5];\r\n result[6] = matrix[9];\r\n result[7] = matrix[13];\r\n result[8] = matrix2;\r\n result[9] = matrix6;\r\n result[10] = matrix[10];\r\n result[11] = matrix[14];\r\n result[12] = matrix3;\r\n result[13] = matrix7;\r\n result[14] = matrix11;\r\n result[15] = matrix[15];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\r\n *\r\n * @param {Matrix4} matrix The matrix with signed elements.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.abs = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = Math.abs(matrix[0]);\r\n result[1] = Math.abs(matrix[1]);\r\n result[2] = Math.abs(matrix[2]);\r\n result[3] = Math.abs(matrix[3]);\r\n result[4] = Math.abs(matrix[4]);\r\n result[5] = Math.abs(matrix[5]);\r\n result[6] = Math.abs(matrix[6]);\r\n result[7] = Math.abs(matrix[7]);\r\n result[8] = Math.abs(matrix[8]);\r\n result[9] = Math.abs(matrix[9]);\r\n result[10] = Math.abs(matrix[10]);\r\n result[11] = Math.abs(matrix[11]);\r\n result[12] = Math.abs(matrix[12]);\r\n result[13] = Math.abs(matrix[13]);\r\n result[14] = Math.abs(matrix[14]);\r\n result[15] = Math.abs(matrix[15]);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided matrices componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Matrix4} [left] The first matrix.\r\n * @param {Matrix4} [right] The second matrix.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n *\r\n * @example\r\n * //compares two Matrix4 instances\r\n *\r\n * // a = [10.0, 14.0, 18.0, 22.0]\r\n * // [11.0, 15.0, 19.0, 23.0]\r\n * // [12.0, 16.0, 20.0, 24.0]\r\n * // [13.0, 17.0, 21.0, 25.0]\r\n *\r\n * // b = [10.0, 14.0, 18.0, 22.0]\r\n * // [11.0, 15.0, 19.0, 23.0]\r\n * // [12.0, 16.0, 20.0, 24.0]\r\n * // [13.0, 17.0, 21.0, 25.0]\r\n *\r\n * if(Cesium.Matrix4.equals(a,b)) {\r\n * console.log(\"Both matrices are equal\");\r\n * } else {\r\n * console.log(\"They are not equal\");\r\n * }\r\n *\r\n * //Prints \"Both matrices are equal\" on the console\r\n */\r\nMatrix4.equals = function (left, right) {\r\n // Given that most matrices will be transformation matrices, the elements\r\n // are tested in order such that the test is likely to fail as early\r\n // as possible. I _think_ this is just as friendly to the L1 cache\r\n // as testing in index order. It is certainty faster in practice.\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n // Translation\r\n left[12] === right[12] &&\r\n left[13] === right[13] &&\r\n left[14] === right[14] &&\r\n // Rotation/scale\r\n left[0] === right[0] &&\r\n left[1] === right[1] &&\r\n left[2] === right[2] &&\r\n left[4] === right[4] &&\r\n left[5] === right[5] &&\r\n left[6] === right[6] &&\r\n left[8] === right[8] &&\r\n left[9] === right[9] &&\r\n left[10] === right[10] &&\r\n // Bottom row\r\n left[3] === right[3] &&\r\n left[7] === right[7] &&\r\n left[11] === right[11] &&\r\n left[15] === right[15])\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided matrices componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Matrix4} [left] The first matrix.\r\n * @param {Matrix4} [right] The second matrix.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n *\r\n * @example\r\n * //compares two Matrix4 instances\r\n *\r\n * // a = [10.5, 14.5, 18.5, 22.5]\r\n * // [11.5, 15.5, 19.5, 23.5]\r\n * // [12.5, 16.5, 20.5, 24.5]\r\n * // [13.5, 17.5, 21.5, 25.5]\r\n *\r\n * // b = [10.0, 14.0, 18.0, 22.0]\r\n * // [11.0, 15.0, 19.0, 23.0]\r\n * // [12.0, 16.0, 20.0, 24.0]\r\n * // [13.0, 17.0, 21.0, 25.0]\r\n *\r\n * if(Cesium.Matrix4.equalsEpsilon(a,b,0.1)){\r\n * console.log(\"Difference between both the matrices is less than 0.1\");\r\n * } else {\r\n * console.log(\"Difference between both the matrices is not less than 0.1\");\r\n * }\r\n *\r\n * //Prints \"Difference between both the matrices is not less than 0.1\" on the console\r\n */\r\nMatrix4.equalsEpsilon = function (left, right, epsilon) {\r\n epsilon = defaultValue(epsilon, 0);\r\n\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Math.abs(left[0] - right[0]) <= epsilon &&\r\n Math.abs(left[1] - right[1]) <= epsilon &&\r\n Math.abs(left[2] - right[2]) <= epsilon &&\r\n Math.abs(left[3] - right[3]) <= epsilon &&\r\n Math.abs(left[4] - right[4]) <= epsilon &&\r\n Math.abs(left[5] - right[5]) <= epsilon &&\r\n Math.abs(left[6] - right[6]) <= epsilon &&\r\n Math.abs(left[7] - right[7]) <= epsilon &&\r\n Math.abs(left[8] - right[8]) <= epsilon &&\r\n Math.abs(left[9] - right[9]) <= epsilon &&\r\n Math.abs(left[10] - right[10]) <= epsilon &&\r\n Math.abs(left[11] - right[11]) <= epsilon &&\r\n Math.abs(left[12] - right[12]) <= epsilon &&\r\n Math.abs(left[13] - right[13]) <= epsilon &&\r\n Math.abs(left[14] - right[14]) <= epsilon &&\r\n Math.abs(left[15] - right[15]) <= epsilon)\r\n );\r\n};\r\n\r\n/**\r\n * Gets the translation portion of the provided matrix, assuming the matrix is an affine transformation matrix.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nMatrix4.getTranslation = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = matrix[12];\r\n result.y = matrix[13];\r\n result.z = matrix[14];\r\n return result;\r\n};\r\n\r\n/**\r\n * Gets the upper left 3x3 matrix of the provided matrix.\r\n *\r\n * @param {Matrix4} matrix The matrix to use.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @example\r\n * // returns a Matrix3 instance from a Matrix4 instance\r\n *\r\n * // m = [10.0, 14.0, 18.0, 22.0]\r\n * // [11.0, 15.0, 19.0, 23.0]\r\n * // [12.0, 16.0, 20.0, 24.0]\r\n * // [13.0, 17.0, 21.0, 25.0]\r\n *\r\n * const b = new Cesium.Matrix3();\r\n * Cesium.Matrix4.getMatrix3(m,b);\r\n *\r\n * // b = [10.0, 14.0, 18.0]\r\n * // [11.0, 15.0, 19.0]\r\n * // [12.0, 16.0, 20.0]\r\n */\r\nMatrix4.getMatrix3 = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[4];\r\n result[4] = matrix[5];\r\n result[5] = matrix[6];\r\n result[6] = matrix[8];\r\n result[7] = matrix[9];\r\n result[8] = matrix[10];\r\n return result;\r\n};\r\n\r\nconst scratchInverseRotation = new Matrix3();\r\nconst scratchMatrix3Zero = new Matrix3();\r\nconst scratchBottomRow = new Cartesian4();\r\nconst scratchExpectedBottomRow = new Cartesian4(0.0, 0.0, 0.0, 1.0);\r\n\r\n/**\r\n * Computes the inverse of the provided matrix using Cramers Rule.\r\n * If the determinant is zero, the matrix can not be inverted, and an exception is thrown.\r\n * If the matrix is a proper rigid transformation, it is more efficient\r\n * to invert it with {@link Matrix4.inverseTransformation}.\r\n *\r\n * @param {Matrix4} matrix The matrix to invert.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n *\r\n * @exception {RuntimeError} matrix is not invertible because its determinate is zero.\r\n */\r\nMatrix4.inverse = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n //\r\n // Ported from:\r\n // ftp://download.intel.com/design/PentiumIII/sml/24504301.pdf\r\n //\r\n const src0 = matrix[0];\r\n const src1 = matrix[4];\r\n const src2 = matrix[8];\r\n const src3 = matrix[12];\r\n const src4 = matrix[1];\r\n const src5 = matrix[5];\r\n const src6 = matrix[9];\r\n const src7 = matrix[13];\r\n const src8 = matrix[2];\r\n const src9 = matrix[6];\r\n const src10 = matrix[10];\r\n const src11 = matrix[14];\r\n const src12 = matrix[3];\r\n const src13 = matrix[7];\r\n const src14 = matrix[11];\r\n const src15 = matrix[15];\r\n\r\n // calculate pairs for first 8 elements (cofactors)\r\n let tmp0 = src10 * src15;\r\n let tmp1 = src11 * src14;\r\n let tmp2 = src9 * src15;\r\n let tmp3 = src11 * src13;\r\n let tmp4 = src9 * src14;\r\n let tmp5 = src10 * src13;\r\n let tmp6 = src8 * src15;\r\n let tmp7 = src11 * src12;\r\n let tmp8 = src8 * src14;\r\n let tmp9 = src10 * src12;\r\n let tmp10 = src8 * src13;\r\n let tmp11 = src9 * src12;\r\n\r\n // calculate first 8 elements (cofactors)\r\n const dst0 =\r\n tmp0 * src5 +\r\n tmp3 * src6 +\r\n tmp4 * src7 -\r\n (tmp1 * src5 + tmp2 * src6 + tmp5 * src7);\r\n const dst1 =\r\n tmp1 * src4 +\r\n tmp6 * src6 +\r\n tmp9 * src7 -\r\n (tmp0 * src4 + tmp7 * src6 + tmp8 * src7);\r\n const dst2 =\r\n tmp2 * src4 +\r\n tmp7 * src5 +\r\n tmp10 * src7 -\r\n (tmp3 * src4 + tmp6 * src5 + tmp11 * src7);\r\n const dst3 =\r\n tmp5 * src4 +\r\n tmp8 * src5 +\r\n tmp11 * src6 -\r\n (tmp4 * src4 + tmp9 * src5 + tmp10 * src6);\r\n const dst4 =\r\n tmp1 * src1 +\r\n tmp2 * src2 +\r\n tmp5 * src3 -\r\n (tmp0 * src1 + tmp3 * src2 + tmp4 * src3);\r\n const dst5 =\r\n tmp0 * src0 +\r\n tmp7 * src2 +\r\n tmp8 * src3 -\r\n (tmp1 * src0 + tmp6 * src2 + tmp9 * src3);\r\n const dst6 =\r\n tmp3 * src0 +\r\n tmp6 * src1 +\r\n tmp11 * src3 -\r\n (tmp2 * src0 + tmp7 * src1 + tmp10 * src3);\r\n const dst7 =\r\n tmp4 * src0 +\r\n tmp9 * src1 +\r\n tmp10 * src2 -\r\n (tmp5 * src0 + tmp8 * src1 + tmp11 * src2);\r\n\r\n // calculate pairs for second 8 elements (cofactors)\r\n tmp0 = src2 * src7;\r\n tmp1 = src3 * src6;\r\n tmp2 = src1 * src7;\r\n tmp3 = src3 * src5;\r\n tmp4 = src1 * src6;\r\n tmp5 = src2 * src5;\r\n tmp6 = src0 * src7;\r\n tmp7 = src3 * src4;\r\n tmp8 = src0 * src6;\r\n tmp9 = src2 * src4;\r\n tmp10 = src0 * src5;\r\n tmp11 = src1 * src4;\r\n\r\n // calculate second 8 elements (cofactors)\r\n const dst8 =\r\n tmp0 * src13 +\r\n tmp3 * src14 +\r\n tmp4 * src15 -\r\n (tmp1 * src13 + tmp2 * src14 + tmp5 * src15);\r\n const dst9 =\r\n tmp1 * src12 +\r\n tmp6 * src14 +\r\n tmp9 * src15 -\r\n (tmp0 * src12 + tmp7 * src14 + tmp8 * src15);\r\n const dst10 =\r\n tmp2 * src12 +\r\n tmp7 * src13 +\r\n tmp10 * src15 -\r\n (tmp3 * src12 + tmp6 * src13 + tmp11 * src15);\r\n const dst11 =\r\n tmp5 * src12 +\r\n tmp8 * src13 +\r\n tmp11 * src14 -\r\n (tmp4 * src12 + tmp9 * src13 + tmp10 * src14);\r\n const dst12 =\r\n tmp2 * src10 +\r\n tmp5 * src11 +\r\n tmp1 * src9 -\r\n (tmp4 * src11 + tmp0 * src9 + tmp3 * src10);\r\n const dst13 =\r\n tmp8 * src11 +\r\n tmp0 * src8 +\r\n tmp7 * src10 -\r\n (tmp6 * src10 + tmp9 * src11 + tmp1 * src8);\r\n const dst14 =\r\n tmp6 * src9 +\r\n tmp11 * src11 +\r\n tmp3 * src8 -\r\n (tmp10 * src11 + tmp2 * src8 + tmp7 * src9);\r\n const dst15 =\r\n tmp10 * src10 +\r\n tmp4 * src8 +\r\n tmp9 * src9 -\r\n (tmp8 * src9 + tmp11 * src10 + tmp5 * src8);\r\n\r\n // calculate determinant\r\n let det = src0 * dst0 + src1 * dst1 + src2 * dst2 + src3 * dst3;\r\n\r\n if (Math.abs(det) < CesiumMath.EPSILON21) {\r\n // Special case for a zero scale matrix that can occur, for example,\r\n // when a model's node has a [0, 0, 0] scale.\r\n if (\r\n Matrix3.equalsEpsilon(\r\n Matrix4.getMatrix3(matrix, scratchInverseRotation),\r\n scratchMatrix3Zero,\r\n CesiumMath.EPSILON7\r\n ) &&\r\n Cartesian4.equals(\r\n Matrix4.getRow(matrix, 3, scratchBottomRow),\r\n scratchExpectedBottomRow\r\n )\r\n ) {\r\n result[0] = 0.0;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = 0.0;\r\n result[5] = 0.0;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = 0.0;\r\n result[9] = 0.0;\r\n result[10] = 0.0;\r\n result[11] = 0.0;\r\n result[12] = -matrix[12];\r\n result[13] = -matrix[13];\r\n result[14] = -matrix[14];\r\n result[15] = 1.0;\r\n return result;\r\n }\r\n\r\n throw new RuntimeError(\r\n \"matrix is not invertible because its determinate is zero.\"\r\n );\r\n }\r\n\r\n // calculate matrix inverse\r\n det = 1.0 / det;\r\n\r\n result[0] = dst0 * det;\r\n result[1] = dst1 * det;\r\n result[2] = dst2 * det;\r\n result[3] = dst3 * det;\r\n result[4] = dst4 * det;\r\n result[5] = dst5 * det;\r\n result[6] = dst6 * det;\r\n result[7] = dst7 * det;\r\n result[8] = dst8 * det;\r\n result[9] = dst9 * det;\r\n result[10] = dst10 * det;\r\n result[11] = dst11 * det;\r\n result[12] = dst12 * det;\r\n result[13] = dst13 * det;\r\n result[14] = dst14 * det;\r\n result[15] = dst15 * det;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the inverse of the provided matrix assuming it is a proper rigid matrix,\r\n * where the upper left 3x3 elements are a rotation matrix,\r\n * and the upper three elements in the fourth column are the translation.\r\n * The bottom row is assumed to be [0, 0, 0, 1].\r\n * The matrix is not verified to be in the proper form.\r\n * This method is faster than computing the inverse for a general 4x4\r\n * matrix using {@link Matrix4.inverse}.\r\n *\r\n * @param {Matrix4} matrix The matrix to invert.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.inverseTransformation = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n //This function is an optimized version of the below 4 lines.\r\n //const rT = Matrix3.transpose(Matrix4.getMatrix3(matrix));\r\n //const rTN = Matrix3.negate(rT);\r\n //const rTT = Matrix3.multiplyByVector(rTN, Matrix4.getTranslation(matrix));\r\n //return Matrix4.fromRotationTranslation(rT, rTT, result);\r\n\r\n const matrix0 = matrix[0];\r\n const matrix1 = matrix[1];\r\n const matrix2 = matrix[2];\r\n const matrix4 = matrix[4];\r\n const matrix5 = matrix[5];\r\n const matrix6 = matrix[6];\r\n const matrix8 = matrix[8];\r\n const matrix9 = matrix[9];\r\n const matrix10 = matrix[10];\r\n\r\n const vX = matrix[12];\r\n const vY = matrix[13];\r\n const vZ = matrix[14];\r\n\r\n const x = -matrix0 * vX - matrix1 * vY - matrix2 * vZ;\r\n const y = -matrix4 * vX - matrix5 * vY - matrix6 * vZ;\r\n const z = -matrix8 * vX - matrix9 * vY - matrix10 * vZ;\r\n\r\n result[0] = matrix0;\r\n result[1] = matrix4;\r\n result[2] = matrix8;\r\n result[3] = 0.0;\r\n result[4] = matrix1;\r\n result[5] = matrix5;\r\n result[6] = matrix9;\r\n result[7] = 0.0;\r\n result[8] = matrix2;\r\n result[9] = matrix6;\r\n result[10] = matrix10;\r\n result[11] = 0.0;\r\n result[12] = x;\r\n result[13] = y;\r\n result[14] = z;\r\n result[15] = 1.0;\r\n return result;\r\n};\r\n\r\nconst scratchTransposeMatrix = new Matrix4();\r\n\r\n/**\r\n * Computes the inverse transpose of a matrix.\r\n *\r\n * @param {Matrix4} matrix The matrix to transpose and invert.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter.\r\n */\r\nMatrix4.inverseTranspose = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n return Matrix4.inverse(\r\n Matrix4.transpose(matrix, scratchTransposeMatrix),\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * An immutable Matrix4 instance initialized to the identity matrix.\r\n *\r\n * @type {Matrix4}\r\n * @constant\r\n */\r\nMatrix4.IDENTITY = Object.freeze(\r\n new Matrix4(\r\n 1.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n )\r\n);\r\n\r\n/**\r\n * An immutable Matrix4 instance initialized to the zero matrix.\r\n *\r\n * @type {Matrix4}\r\n * @constant\r\n */\r\nMatrix4.ZERO = Object.freeze(\r\n new Matrix4(\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0\r\n )\r\n);\r\n\r\n/**\r\n * The index into Matrix4 for column 0, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN0ROW0 = 0;\r\n\r\n/**\r\n * The index into Matrix4 for column 0, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN0ROW1 = 1;\r\n\r\n/**\r\n * The index into Matrix4 for column 0, row 2.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN0ROW2 = 2;\r\n\r\n/**\r\n * The index into Matrix4 for column 0, row 3.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN0ROW3 = 3;\r\n\r\n/**\r\n * The index into Matrix4 for column 1, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN1ROW0 = 4;\r\n\r\n/**\r\n * The index into Matrix4 for column 1, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN1ROW1 = 5;\r\n\r\n/**\r\n * The index into Matrix4 for column 1, row 2.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN1ROW2 = 6;\r\n\r\n/**\r\n * The index into Matrix4 for column 1, row 3.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN1ROW3 = 7;\r\n\r\n/**\r\n * The index into Matrix4 for column 2, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN2ROW0 = 8;\r\n\r\n/**\r\n * The index into Matrix4 for column 2, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN2ROW1 = 9;\r\n\r\n/**\r\n * The index into Matrix4 for column 2, row 2.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN2ROW2 = 10;\r\n\r\n/**\r\n * The index into Matrix4 for column 2, row 3.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN2ROW3 = 11;\r\n\r\n/**\r\n * The index into Matrix4 for column 3, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN3ROW0 = 12;\r\n\r\n/**\r\n * The index into Matrix4 for column 3, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN3ROW1 = 13;\r\n\r\n/**\r\n * The index into Matrix4 for column 3, row 2.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN3ROW2 = 14;\r\n\r\n/**\r\n * The index into Matrix4 for column 3, row 3.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix4.COLUMN3ROW3 = 15;\r\n\r\nObject.defineProperties(Matrix4.prototype, {\r\n /**\r\n * Gets the number of items in the collection.\r\n * @memberof Matrix4.prototype\r\n *\r\n * @type {Number}\r\n */\r\n length: {\r\n get: function () {\r\n return Matrix4.packedLength;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Duplicates the provided Matrix4 instance.\r\n *\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if one was not provided.\r\n */\r\nMatrix4.prototype.clone = function (result) {\r\n return Matrix4.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this matrix to the provided matrix componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Matrix4} [right] The right hand side matrix.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nMatrix4.prototype.equals = function (right) {\r\n return Matrix4.equals(this, right);\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nMatrix4.equalsArray = function (matrix, array, offset) {\r\n return (\r\n matrix[0] === array[offset] &&\r\n matrix[1] === array[offset + 1] &&\r\n matrix[2] === array[offset + 2] &&\r\n matrix[3] === array[offset + 3] &&\r\n matrix[4] === array[offset + 4] &&\r\n matrix[5] === array[offset + 5] &&\r\n matrix[6] === array[offset + 6] &&\r\n matrix[7] === array[offset + 7] &&\r\n matrix[8] === array[offset + 8] &&\r\n matrix[9] === array[offset + 9] &&\r\n matrix[10] === array[offset + 10] &&\r\n matrix[11] === array[offset + 11] &&\r\n matrix[12] === array[offset + 12] &&\r\n matrix[13] === array[offset + 13] &&\r\n matrix[14] === array[offset + 14] &&\r\n matrix[15] === array[offset + 15]\r\n );\r\n};\r\n\r\n/**\r\n * Compares this matrix to the provided matrix componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Matrix4} [right] The right hand side matrix.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if they are within the provided epsilon, false otherwise.\r\n */\r\nMatrix4.prototype.equalsEpsilon = function (right, epsilon) {\r\n return Matrix4.equalsEpsilon(this, right, epsilon);\r\n};\r\n\r\n/**\r\n * Computes a string representing this Matrix with each row being\r\n * on a separate line and in the format '(column0, column1, column2, column3)'.\r\n *\r\n * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2, column3)'.\r\n */\r\nMatrix4.prototype.toString = function () {\r\n return (\r\n `(${this[0]}, ${this[4]}, ${this[8]}, ${this[12]})\\n` +\r\n `(${this[1]}, ${this[5]}, ${this[9]}, ${this[13]})\\n` +\r\n `(${this[2]}, ${this[6]}, ${this[10]}, ${this[14]})\\n` +\r\n `(${this[3]}, ${this[7]}, ${this[11]}, ${this[15]})`\r\n );\r\n};\r\nexport default Matrix4;\r\n","import Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * A two dimensional region specified as longitude and latitude coordinates.\r\n *\r\n * @alias Rectangle\r\n * @constructor\r\n *\r\n * @param {Number} [west=0.0] The westernmost longitude, in radians, in the range [-Pi, Pi].\r\n * @param {Number} [south=0.0] The southernmost latitude, in radians, in the range [-Pi/2, Pi/2].\r\n * @param {Number} [east=0.0] The easternmost longitude, in radians, in the range [-Pi, Pi].\r\n * @param {Number} [north=0.0] The northernmost latitude, in radians, in the range [-Pi/2, Pi/2].\r\n *\r\n * @see Packable\r\n */\r\nfunction Rectangle(west, south, east, north) {\r\n /**\r\n * The westernmost longitude in radians in the range [-Pi, Pi].\r\n *\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.west = defaultValue(west, 0.0);\r\n\r\n /**\r\n * The southernmost latitude in radians in the range [-Pi/2, Pi/2].\r\n *\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.south = defaultValue(south, 0.0);\r\n\r\n /**\r\n * The easternmost longitude in radians in the range [-Pi, Pi].\r\n *\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.east = defaultValue(east, 0.0);\r\n\r\n /**\r\n * The northernmost latitude in radians in the range [-Pi/2, Pi/2].\r\n *\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.north = defaultValue(north, 0.0);\r\n}\r\n\r\nObject.defineProperties(Rectangle.prototype, {\r\n /**\r\n * Gets the width of the rectangle in radians.\r\n * @memberof Rectangle.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n width: {\r\n get: function () {\r\n return Rectangle.computeWidth(this);\r\n },\r\n },\r\n\r\n /**\r\n * Gets the height of the rectangle in radians.\r\n * @memberof Rectangle.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n height: {\r\n get: function () {\r\n return Rectangle.computeHeight(this);\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nRectangle.packedLength = 4;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Rectangle} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nRectangle.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.west;\r\n array[startingIndex++] = value.south;\r\n array[startingIndex++] = value.east;\r\n array[startingIndex] = value.north;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Rectangle} [result] The object into which to store the result.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if one was not provided.\r\n */\r\nRectangle.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new Rectangle();\r\n }\r\n\r\n result.west = array[startingIndex++];\r\n result.south = array[startingIndex++];\r\n result.east = array[startingIndex++];\r\n result.north = array[startingIndex];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the width of a rectangle in radians.\r\n * @param {Rectangle} rectangle The rectangle to compute the width of.\r\n * @returns {Number} The width.\r\n */\r\nRectangle.computeWidth = function (rectangle) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n let east = rectangle.east;\r\n const west = rectangle.west;\r\n if (east < west) {\r\n east += CesiumMath.TWO_PI;\r\n }\r\n return east - west;\r\n};\r\n\r\n/**\r\n * Computes the height of a rectangle in radians.\r\n * @param {Rectangle} rectangle The rectangle to compute the height of.\r\n * @returns {Number} The height.\r\n */\r\nRectangle.computeHeight = function (rectangle) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n return rectangle.north - rectangle.south;\r\n};\r\n\r\n/**\r\n * Creates a rectangle given the boundary longitude and latitude in degrees.\r\n *\r\n * @param {Number} [west=0.0] The westernmost longitude in degrees in the range [-180.0, 180.0].\r\n * @param {Number} [south=0.0] The southernmost latitude in degrees in the range [-90.0, 90.0].\r\n * @param {Number} [east=0.0] The easternmost longitude in degrees in the range [-180.0, 180.0].\r\n * @param {Number} [north=0.0] The northernmost latitude in degrees in the range [-90.0, 90.0].\r\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\r\n *\r\n * @example\r\n * const rectangle = Cesium.Rectangle.fromDegrees(0.0, 20.0, 10.0, 30.0);\r\n */\r\nRectangle.fromDegrees = function (west, south, east, north, result) {\r\n west = CesiumMath.toRadians(defaultValue(west, 0.0));\r\n south = CesiumMath.toRadians(defaultValue(south, 0.0));\r\n east = CesiumMath.toRadians(defaultValue(east, 0.0));\r\n north = CesiumMath.toRadians(defaultValue(north, 0.0));\r\n\r\n if (!defined(result)) {\r\n return new Rectangle(west, south, east, north);\r\n }\r\n\r\n result.west = west;\r\n result.south = south;\r\n result.east = east;\r\n result.north = north;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a rectangle given the boundary longitude and latitude in radians.\r\n *\r\n * @param {Number} [west=0.0] The westernmost longitude in radians in the range [-Math.PI, Math.PI].\r\n * @param {Number} [south=0.0] The southernmost latitude in radians in the range [-Math.PI/2, Math.PI/2].\r\n * @param {Number} [east=0.0] The easternmost longitude in radians in the range [-Math.PI, Math.PI].\r\n * @param {Number} [north=0.0] The northernmost latitude in radians in the range [-Math.PI/2, Math.PI/2].\r\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\r\n *\r\n * @example\r\n * const rectangle = Cesium.Rectangle.fromRadians(0.0, Math.PI/4, Math.PI/8, 3*Math.PI/4);\r\n */\r\nRectangle.fromRadians = function (west, south, east, north, result) {\r\n if (!defined(result)) {\r\n return new Rectangle(west, south, east, north);\r\n }\r\n\r\n result.west = defaultValue(west, 0.0);\r\n result.south = defaultValue(south, 0.0);\r\n result.east = defaultValue(east, 0.0);\r\n result.north = defaultValue(north, 0.0);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates the smallest possible Rectangle that encloses all positions in the provided array.\r\n *\r\n * @param {Cartographic[]} cartographics The list of Cartographic instances.\r\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\r\n */\r\nRectangle.fromCartographicArray = function (cartographics, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartographics\", cartographics);\r\n //>>includeEnd('debug');\r\n\r\n let west = Number.MAX_VALUE;\r\n let east = -Number.MAX_VALUE;\r\n let westOverIDL = Number.MAX_VALUE;\r\n let eastOverIDL = -Number.MAX_VALUE;\r\n let south = Number.MAX_VALUE;\r\n let north = -Number.MAX_VALUE;\r\n\r\n for (let i = 0, len = cartographics.length; i < len; i++) {\r\n const position = cartographics[i];\r\n west = Math.min(west, position.longitude);\r\n east = Math.max(east, position.longitude);\r\n south = Math.min(south, position.latitude);\r\n north = Math.max(north, position.latitude);\r\n\r\n const lonAdjusted =\r\n position.longitude >= 0\r\n ? position.longitude\r\n : position.longitude + CesiumMath.TWO_PI;\r\n westOverIDL = Math.min(westOverIDL, lonAdjusted);\r\n eastOverIDL = Math.max(eastOverIDL, lonAdjusted);\r\n }\r\n\r\n if (east - west > eastOverIDL - westOverIDL) {\r\n west = westOverIDL;\r\n east = eastOverIDL;\r\n\r\n if (east > CesiumMath.PI) {\r\n east = east - CesiumMath.TWO_PI;\r\n }\r\n if (west > CesiumMath.PI) {\r\n west = west - CesiumMath.TWO_PI;\r\n }\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Rectangle(west, south, east, north);\r\n }\r\n\r\n result.west = west;\r\n result.south = south;\r\n result.east = east;\r\n result.north = north;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates the smallest possible Rectangle that encloses all positions in the provided array.\r\n *\r\n * @param {Cartesian3[]} cartesians The list of Cartesian instances.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid the cartesians are on.\r\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\r\n */\r\nRectangle.fromCartesianArray = function (cartesians, ellipsoid, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesians\", cartesians);\r\n //>>includeEnd('debug');\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n\r\n let west = Number.MAX_VALUE;\r\n let east = -Number.MAX_VALUE;\r\n let westOverIDL = Number.MAX_VALUE;\r\n let eastOverIDL = -Number.MAX_VALUE;\r\n let south = Number.MAX_VALUE;\r\n let north = -Number.MAX_VALUE;\r\n\r\n for (let i = 0, len = cartesians.length; i < len; i++) {\r\n const position = ellipsoid.cartesianToCartographic(cartesians[i]);\r\n west = Math.min(west, position.longitude);\r\n east = Math.max(east, position.longitude);\r\n south = Math.min(south, position.latitude);\r\n north = Math.max(north, position.latitude);\r\n\r\n const lonAdjusted =\r\n position.longitude >= 0\r\n ? position.longitude\r\n : position.longitude + CesiumMath.TWO_PI;\r\n westOverIDL = Math.min(westOverIDL, lonAdjusted);\r\n eastOverIDL = Math.max(eastOverIDL, lonAdjusted);\r\n }\r\n\r\n if (east - west > eastOverIDL - westOverIDL) {\r\n west = westOverIDL;\r\n east = eastOverIDL;\r\n\r\n if (east > CesiumMath.PI) {\r\n east = east - CesiumMath.TWO_PI;\r\n }\r\n if (west > CesiumMath.PI) {\r\n west = west - CesiumMath.TWO_PI;\r\n }\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Rectangle(west, south, east, north);\r\n }\r\n\r\n result.west = west;\r\n result.south = south;\r\n result.east = east;\r\n result.north = north;\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a Rectangle.\r\n *\r\n * @param {Rectangle} rectangle The rectangle to clone.\r\n * @param {Rectangle} [result] The object onto which to store the result, or undefined if a new instance should be created.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided. (Returns undefined if rectangle is undefined)\r\n */\r\nRectangle.clone = function (rectangle, result) {\r\n if (!defined(rectangle)) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Rectangle(\r\n rectangle.west,\r\n rectangle.south,\r\n rectangle.east,\r\n rectangle.north\r\n );\r\n }\r\n\r\n result.west = rectangle.west;\r\n result.south = rectangle.south;\r\n result.east = rectangle.east;\r\n result.north = rectangle.north;\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided Rectangles componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {Rectangle} [left] The first Rectangle.\r\n * @param {Rectangle} [right] The second Rectangle.\r\n * @param {Number} [absoluteEpsilon=0] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nRectangle.equalsEpsilon = function (left, right, absoluteEpsilon) {\r\n absoluteEpsilon = defaultValue(absoluteEpsilon, 0);\r\n\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Math.abs(left.west - right.west) <= absoluteEpsilon &&\r\n Math.abs(left.south - right.south) <= absoluteEpsilon &&\r\n Math.abs(left.east - right.east) <= absoluteEpsilon &&\r\n Math.abs(left.north - right.north) <= absoluteEpsilon)\r\n );\r\n};\r\n\r\n/**\r\n * Duplicates this Rectangle.\r\n *\r\n * @param {Rectangle} [result] The object onto which to store the result.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\r\n */\r\nRectangle.prototype.clone = function (result) {\r\n return Rectangle.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares the provided Rectangle with this Rectangle componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Rectangle} [other] The Rectangle to compare.\r\n * @returns {Boolean} true if the Rectangles are equal, false otherwise.\r\n */\r\nRectangle.prototype.equals = function (other) {\r\n return Rectangle.equals(this, other);\r\n};\r\n\r\n/**\r\n * Compares the provided rectangles and returns true if they are equal,\r\n * false otherwise.\r\n *\r\n * @param {Rectangle} [left] The first Rectangle.\r\n * @param {Rectangle} [right] The second Rectangle.\r\n * @returns {Boolean} true if left and right are equal; otherwise false.\r\n */\r\nRectangle.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.west === right.west &&\r\n left.south === right.south &&\r\n left.east === right.east &&\r\n left.north === right.north)\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided Rectangle with this Rectangle componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Rectangle} [other] The Rectangle to compare.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if the Rectangles are within the provided epsilon, false otherwise.\r\n */\r\nRectangle.prototype.equalsEpsilon = function (other, epsilon) {\r\n return Rectangle.equalsEpsilon(this, other, epsilon);\r\n};\r\n\r\n/**\r\n * Checks a Rectangle's properties and throws if they are not in valid ranges.\r\n *\r\n * @param {Rectangle} rectangle The rectangle to validate\r\n *\r\n * @exception {DeveloperError} north must be in the interval [-Pi/2, Pi/2].\r\n * @exception {DeveloperError} south must be in the interval [-Pi/2, Pi/2].\r\n * @exception {DeveloperError} east must be in the interval [-Pi, Pi].\r\n * @exception {DeveloperError} west must be in the interval [-Pi, Pi].\r\n */\r\nRectangle.validate = function (rectangle) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n\r\n const north = rectangle.north;\r\n Check.typeOf.number.greaterThanOrEquals(\r\n \"north\",\r\n north,\r\n -CesiumMath.PI_OVER_TWO\r\n );\r\n Check.typeOf.number.lessThanOrEquals(\"north\", north, CesiumMath.PI_OVER_TWO);\r\n\r\n const south = rectangle.south;\r\n Check.typeOf.number.greaterThanOrEquals(\r\n \"south\",\r\n south,\r\n -CesiumMath.PI_OVER_TWO\r\n );\r\n Check.typeOf.number.lessThanOrEquals(\"south\", south, CesiumMath.PI_OVER_TWO);\r\n\r\n const west = rectangle.west;\r\n Check.typeOf.number.greaterThanOrEquals(\"west\", west, -Math.PI);\r\n Check.typeOf.number.lessThanOrEquals(\"west\", west, Math.PI);\r\n\r\n const east = rectangle.east;\r\n Check.typeOf.number.greaterThanOrEquals(\"east\", east, -Math.PI);\r\n Check.typeOf.number.lessThanOrEquals(\"east\", east, Math.PI);\r\n //>>includeEnd('debug');\r\n};\r\n\r\n/**\r\n * Computes the southwest corner of a rectangle.\r\n *\r\n * @param {Rectangle} rectangle The rectangle for which to find the corner\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\r\n */\r\nRectangle.southwest = function (rectangle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(rectangle.west, rectangle.south);\r\n }\r\n result.longitude = rectangle.west;\r\n result.latitude = rectangle.south;\r\n result.height = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the northwest corner of a rectangle.\r\n *\r\n * @param {Rectangle} rectangle The rectangle for which to find the corner\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\r\n */\r\nRectangle.northwest = function (rectangle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(rectangle.west, rectangle.north);\r\n }\r\n result.longitude = rectangle.west;\r\n result.latitude = rectangle.north;\r\n result.height = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the northeast corner of a rectangle.\r\n *\r\n * @param {Rectangle} rectangle The rectangle for which to find the corner\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\r\n */\r\nRectangle.northeast = function (rectangle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(rectangle.east, rectangle.north);\r\n }\r\n result.longitude = rectangle.east;\r\n result.latitude = rectangle.north;\r\n result.height = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the southeast corner of a rectangle.\r\n *\r\n * @param {Rectangle} rectangle The rectangle for which to find the corner\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\r\n */\r\nRectangle.southeast = function (rectangle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(rectangle.east, rectangle.south);\r\n }\r\n result.longitude = rectangle.east;\r\n result.latitude = rectangle.south;\r\n result.height = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the center of a rectangle.\r\n *\r\n * @param {Rectangle} rectangle The rectangle for which to find the center\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if none was provided.\r\n */\r\nRectangle.center = function (rectangle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n\r\n let east = rectangle.east;\r\n const west = rectangle.west;\r\n\r\n if (east < west) {\r\n east += CesiumMath.TWO_PI;\r\n }\r\n\r\n const longitude = CesiumMath.negativePiToPi((west + east) * 0.5);\r\n const latitude = (rectangle.south + rectangle.north) * 0.5;\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(longitude, latitude);\r\n }\r\n\r\n result.longitude = longitude;\r\n result.latitude = latitude;\r\n result.height = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the intersection of two rectangles. This function assumes that the rectangle's coordinates are\r\n * latitude and longitude in radians and produces a correct intersection, taking into account the fact that\r\n * the same angle can be represented with multiple values as well as the wrapping of longitude at the\r\n * anti-meridian. For a simple intersection that ignores these factors and can be used with projected\r\n * coordinates, see {@link Rectangle.simpleIntersection}.\r\n *\r\n * @param {Rectangle} rectangle On rectangle to find an intersection\r\n * @param {Rectangle} otherRectangle Another rectangle to find an intersection\r\n * @param {Rectangle} [result] The object onto which to store the result.\r\n * @returns {Rectangle|undefined} The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection.\r\n */\r\nRectangle.intersection = function (rectangle, otherRectangle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Check.typeOf.object(\"otherRectangle\", otherRectangle);\r\n //>>includeEnd('debug');\r\n\r\n let rectangleEast = rectangle.east;\r\n let rectangleWest = rectangle.west;\r\n\r\n let otherRectangleEast = otherRectangle.east;\r\n let otherRectangleWest = otherRectangle.west;\r\n\r\n if (rectangleEast < rectangleWest && otherRectangleEast > 0.0) {\r\n rectangleEast += CesiumMath.TWO_PI;\r\n } else if (otherRectangleEast < otherRectangleWest && rectangleEast > 0.0) {\r\n otherRectangleEast += CesiumMath.TWO_PI;\r\n }\r\n\r\n if (rectangleEast < rectangleWest && otherRectangleWest < 0.0) {\r\n otherRectangleWest += CesiumMath.TWO_PI;\r\n } else if (otherRectangleEast < otherRectangleWest && rectangleWest < 0.0) {\r\n rectangleWest += CesiumMath.TWO_PI;\r\n }\r\n\r\n const west = CesiumMath.negativePiToPi(\r\n Math.max(rectangleWest, otherRectangleWest)\r\n );\r\n const east = CesiumMath.negativePiToPi(\r\n Math.min(rectangleEast, otherRectangleEast)\r\n );\r\n\r\n if (\r\n (rectangle.west < rectangle.east ||\r\n otherRectangle.west < otherRectangle.east) &&\r\n east <= west\r\n ) {\r\n return undefined;\r\n }\r\n\r\n const south = Math.max(rectangle.south, otherRectangle.south);\r\n const north = Math.min(rectangle.north, otherRectangle.north);\r\n\r\n if (south >= north) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Rectangle(west, south, east, north);\r\n }\r\n result.west = west;\r\n result.south = south;\r\n result.east = east;\r\n result.north = north;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a simple intersection of two rectangles. Unlike {@link Rectangle.intersection}, this function\r\n * does not attempt to put the angular coordinates into a consistent range or to account for crossing the\r\n * anti-meridian. As such, it can be used for rectangles where the coordinates are not simply latitude\r\n * and longitude (i.e. projected coordinates).\r\n *\r\n * @param {Rectangle} rectangle On rectangle to find an intersection\r\n * @param {Rectangle} otherRectangle Another rectangle to find an intersection\r\n * @param {Rectangle} [result] The object onto which to store the result.\r\n * @returns {Rectangle|undefined} The modified result parameter, a new Rectangle instance if none was provided or undefined if there is no intersection.\r\n */\r\nRectangle.simpleIntersection = function (rectangle, otherRectangle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Check.typeOf.object(\"otherRectangle\", otherRectangle);\r\n //>>includeEnd('debug');\r\n\r\n const west = Math.max(rectangle.west, otherRectangle.west);\r\n const south = Math.max(rectangle.south, otherRectangle.south);\r\n const east = Math.min(rectangle.east, otherRectangle.east);\r\n const north = Math.min(rectangle.north, otherRectangle.north);\r\n\r\n if (south >= north || west >= east) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Rectangle(west, south, east, north);\r\n }\r\n\r\n result.west = west;\r\n result.south = south;\r\n result.east = east;\r\n result.north = north;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a rectangle that is the union of two rectangles.\r\n *\r\n * @param {Rectangle} rectangle A rectangle to enclose in rectangle.\r\n * @param {Rectangle} otherRectangle A rectangle to enclose in a rectangle.\r\n * @param {Rectangle} [result] The object onto which to store the result.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\r\n */\r\nRectangle.union = function (rectangle, otherRectangle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Check.typeOf.object(\"otherRectangle\", otherRectangle);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Rectangle();\r\n }\r\n\r\n let rectangleEast = rectangle.east;\r\n let rectangleWest = rectangle.west;\r\n\r\n let otherRectangleEast = otherRectangle.east;\r\n let otherRectangleWest = otherRectangle.west;\r\n\r\n if (rectangleEast < rectangleWest && otherRectangleEast > 0.0) {\r\n rectangleEast += CesiumMath.TWO_PI;\r\n } else if (otherRectangleEast < otherRectangleWest && rectangleEast > 0.0) {\r\n otherRectangleEast += CesiumMath.TWO_PI;\r\n }\r\n\r\n if (rectangleEast < rectangleWest && otherRectangleWest < 0.0) {\r\n otherRectangleWest += CesiumMath.TWO_PI;\r\n } else if (otherRectangleEast < otherRectangleWest && rectangleWest < 0.0) {\r\n rectangleWest += CesiumMath.TWO_PI;\r\n }\r\n\r\n const west = CesiumMath.negativePiToPi(\r\n Math.min(rectangleWest, otherRectangleWest)\r\n );\r\n const east = CesiumMath.negativePiToPi(\r\n Math.max(rectangleEast, otherRectangleEast)\r\n );\r\n\r\n result.west = west;\r\n result.south = Math.min(rectangle.south, otherRectangle.south);\r\n result.east = east;\r\n result.north = Math.max(rectangle.north, otherRectangle.north);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a rectangle by enlarging the provided rectangle until it contains the provided cartographic.\r\n *\r\n * @param {Rectangle} rectangle A rectangle to expand.\r\n * @param {Cartographic} cartographic A cartographic to enclose in a rectangle.\r\n * @param {Rectangle} [result] The object onto which to store the result.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if one was not provided.\r\n */\r\nRectangle.expand = function (rectangle, cartographic, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Check.typeOf.object(\"cartographic\", cartographic);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Rectangle();\r\n }\r\n\r\n result.west = Math.min(rectangle.west, cartographic.longitude);\r\n result.south = Math.min(rectangle.south, cartographic.latitude);\r\n result.east = Math.max(rectangle.east, cartographic.longitude);\r\n result.north = Math.max(rectangle.north, cartographic.latitude);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns true if the cartographic is on or inside the rectangle, false otherwise.\r\n *\r\n * @param {Rectangle} rectangle The rectangle\r\n * @param {Cartographic} cartographic The cartographic to test.\r\n * @returns {Boolean} true if the provided cartographic is inside the rectangle, false otherwise.\r\n */\r\nRectangle.contains = function (rectangle, cartographic) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Check.typeOf.object(\"cartographic\", cartographic);\r\n //>>includeEnd('debug');\r\n\r\n let longitude = cartographic.longitude;\r\n const latitude = cartographic.latitude;\r\n\r\n const west = rectangle.west;\r\n let east = rectangle.east;\r\n\r\n if (east < west) {\r\n east += CesiumMath.TWO_PI;\r\n if (longitude < 0.0) {\r\n longitude += CesiumMath.TWO_PI;\r\n }\r\n }\r\n return (\r\n (longitude > west ||\r\n CesiumMath.equalsEpsilon(longitude, west, CesiumMath.EPSILON14)) &&\r\n (longitude < east ||\r\n CesiumMath.equalsEpsilon(longitude, east, CesiumMath.EPSILON14)) &&\r\n latitude >= rectangle.south &&\r\n latitude <= rectangle.north\r\n );\r\n};\r\n\r\nconst subsampleLlaScratch = new Cartographic();\r\n/**\r\n * Samples a rectangle so that it includes a list of Cartesian points suitable for passing to\r\n * {@link BoundingSphere#fromPoints}. Sampling is necessary to account\r\n * for rectangles that cover the poles or cross the equator.\r\n *\r\n * @param {Rectangle} rectangle The rectangle to subsample.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid to use.\r\n * @param {Number} [surfaceHeight=0.0] The height of the rectangle above the ellipsoid.\r\n * @param {Cartesian3[]} [result] The array of Cartesians onto which to store the result.\r\n * @returns {Cartesian3[]} The modified result parameter or a new Array of Cartesians instances if none was provided.\r\n */\r\nRectangle.subsample = function (rectangle, ellipsoid, surfaceHeight, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n surfaceHeight = defaultValue(surfaceHeight, 0.0);\r\n\r\n if (!defined(result)) {\r\n result = [];\r\n }\r\n let length = 0;\r\n\r\n const north = rectangle.north;\r\n const south = rectangle.south;\r\n const east = rectangle.east;\r\n const west = rectangle.west;\r\n\r\n const lla = subsampleLlaScratch;\r\n lla.height = surfaceHeight;\r\n\r\n lla.longitude = west;\r\n lla.latitude = north;\r\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\r\n length++;\r\n\r\n lla.longitude = east;\r\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\r\n length++;\r\n\r\n lla.latitude = south;\r\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\r\n length++;\r\n\r\n lla.longitude = west;\r\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\r\n length++;\r\n\r\n if (north < 0.0) {\r\n lla.latitude = north;\r\n } else if (south > 0.0) {\r\n lla.latitude = south;\r\n } else {\r\n lla.latitude = 0.0;\r\n }\r\n\r\n for (let i = 1; i < 8; ++i) {\r\n lla.longitude = -Math.PI + i * CesiumMath.PI_OVER_TWO;\r\n if (Rectangle.contains(rectangle, lla)) {\r\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\r\n length++;\r\n }\r\n }\r\n\r\n if (lla.latitude === 0.0) {\r\n lla.longitude = west;\r\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\r\n length++;\r\n lla.longitude = east;\r\n result[length] = ellipsoid.cartographicToCartesian(lla, result[length]);\r\n length++;\r\n }\r\n result.length = length;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a subsection of a rectangle from normalized coordinates in the range [0.0, 1.0].\r\n *\r\n * @param {Rectangle} rectangle The rectangle to subsection.\r\n * @param {Number} westLerp The west interpolation factor in the range [0.0, 1.0]. Must be less than or equal to eastLerp.\r\n * @param {Number} southLerp The south interpolation factor in the range [0.0, 1.0]. Must be less than or equal to northLerp.\r\n * @param {Number} eastLerp The east interpolation factor in the range [0.0, 1.0]. Must be greater than or equal to westLerp.\r\n * @param {Number} northLerp The north interpolation factor in the range [0.0, 1.0]. Must be greater than or equal to southLerp.\r\n * @param {Rectangle} [result] The object onto which to store the result.\r\n * @returns {Rectangle} The modified result parameter or a new Rectangle instance if none was provided.\r\n */\r\nRectangle.subsection = function (\r\n rectangle,\r\n westLerp,\r\n southLerp,\r\n eastLerp,\r\n northLerp,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Check.typeOf.number.greaterThanOrEquals(\"westLerp\", westLerp, 0.0);\r\n Check.typeOf.number.lessThanOrEquals(\"westLerp\", westLerp, 1.0);\r\n Check.typeOf.number.greaterThanOrEquals(\"southLerp\", southLerp, 0.0);\r\n Check.typeOf.number.lessThanOrEquals(\"southLerp\", southLerp, 1.0);\r\n Check.typeOf.number.greaterThanOrEquals(\"eastLerp\", eastLerp, 0.0);\r\n Check.typeOf.number.lessThanOrEquals(\"eastLerp\", eastLerp, 1.0);\r\n Check.typeOf.number.greaterThanOrEquals(\"northLerp\", northLerp, 0.0);\r\n Check.typeOf.number.lessThanOrEquals(\"northLerp\", northLerp, 1.0);\r\n\r\n Check.typeOf.number.lessThanOrEquals(\"westLerp\", westLerp, eastLerp);\r\n Check.typeOf.number.lessThanOrEquals(\"southLerp\", southLerp, northLerp);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Rectangle();\r\n }\r\n\r\n // This function doesn't use CesiumMath.lerp because it has floating point precision problems\r\n // when the start and end values are the same but the t changes.\r\n\r\n if (rectangle.west <= rectangle.east) {\r\n const width = rectangle.east - rectangle.west;\r\n result.west = rectangle.west + westLerp * width;\r\n result.east = rectangle.west + eastLerp * width;\r\n } else {\r\n const width = CesiumMath.TWO_PI + rectangle.east - rectangle.west;\r\n result.west = CesiumMath.negativePiToPi(rectangle.west + westLerp * width);\r\n result.east = CesiumMath.negativePiToPi(rectangle.west + eastLerp * width);\r\n }\r\n const height = rectangle.north - rectangle.south;\r\n result.south = rectangle.south + southLerp * height;\r\n result.north = rectangle.south + northLerp * height;\r\n\r\n // Fix floating point precision problems when t = 1\r\n if (westLerp === 1.0) {\r\n result.west = rectangle.east;\r\n }\r\n if (eastLerp === 1.0) {\r\n result.east = rectangle.east;\r\n }\r\n if (southLerp === 1.0) {\r\n result.south = rectangle.north;\r\n }\r\n if (northLerp === 1.0) {\r\n result.north = rectangle.north;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * The largest possible rectangle.\r\n *\r\n * @type {Rectangle}\r\n * @constant\r\n */\r\nRectangle.MAX_VALUE = Object.freeze(\r\n new Rectangle(\r\n -Math.PI,\r\n -CesiumMath.PI_OVER_TWO,\r\n Math.PI,\r\n CesiumMath.PI_OVER_TWO\r\n )\r\n);\r\nexport default Rectangle;\r\n","import Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * A 2D Cartesian point.\r\n * @alias Cartesian2\r\n * @constructor\r\n *\r\n * @param {Number} [x=0.0] The X component.\r\n * @param {Number} [y=0.0] The Y component.\r\n *\r\n * @see Cartesian3\r\n * @see Cartesian4\r\n * @see Packable\r\n */\r\nfunction Cartesian2(x, y) {\r\n /**\r\n * The X component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.x = defaultValue(x, 0.0);\r\n\r\n /**\r\n * The Y component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.y = defaultValue(y, 0.0);\r\n}\r\n\r\n/**\r\n * Creates a Cartesian2 instance from x and y coordinates.\r\n *\r\n * @param {Number} x The x coordinate.\r\n * @param {Number} y The y coordinate.\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\r\n */\r\nCartesian2.fromElements = function (x, y, result) {\r\n if (!defined(result)) {\r\n return new Cartesian2(x, y);\r\n }\r\n\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a Cartesian2 instance.\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian to duplicate.\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided. (Returns undefined if cartesian is undefined)\r\n */\r\nCartesian2.clone = function (cartesian, result) {\r\n if (!defined(cartesian)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new Cartesian2(cartesian.x, cartesian.y);\r\n }\r\n\r\n result.x = cartesian.x;\r\n result.y = cartesian.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Cartesian2 instance from an existing Cartesian3. This simply takes the\r\n * x and y properties of the Cartesian3 and drops z.\r\n * @function\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian3 instance to create a Cartesian2 instance from.\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\r\n */\r\nCartesian2.fromCartesian3 = Cartesian2.clone;\r\n\r\n/**\r\n * Creates a Cartesian2 instance from an existing Cartesian4. This simply takes the\r\n * x and y properties of the Cartesian4 and drops z and w.\r\n * @function\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian4 instance to create a Cartesian2 instance from.\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\r\n */\r\nCartesian2.fromCartesian4 = Cartesian2.clone;\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nCartesian2.packedLength = 2;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Cartesian2} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCartesian2.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.x;\r\n array[startingIndex] = value.y;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Cartesian2} [result] The object into which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\r\n */\r\nCartesian2.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian2();\r\n }\r\n result.x = array[startingIndex++];\r\n result.y = array[startingIndex];\r\n return result;\r\n};\r\n\r\n/**\r\n * Flattens an array of Cartesian2s into an array of components.\r\n *\r\n * @param {Cartesian2[]} array The array of cartesians to pack.\r\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 2 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 2) elements.\r\n * @returns {Number[]} The packed array.\r\n */\r\nCartesian2.packArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n const resultLength = length * 2;\r\n if (!defined(result)) {\r\n result = new Array(resultLength);\r\n } else if (!Array.isArray(result) && result.length !== resultLength) {\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"If result is a typed array, it must have exactly array.length * 2 elements\"\r\n );\r\n //>>includeEnd('debug');\r\n } else if (result.length !== resultLength) {\r\n result.length = resultLength;\r\n }\r\n\r\n for (let i = 0; i < length; ++i) {\r\n Cartesian2.pack(array[i], result, i * 2);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Unpacks an array of cartesian components into an array of Cartesian2s.\r\n *\r\n * @param {Number[]} array The array of components to unpack.\r\n * @param {Cartesian2[]} [result] The array onto which to store the result.\r\n * @returns {Cartesian2[]} The unpacked array.\r\n */\r\nCartesian2.unpackArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 2);\r\n if (array.length % 2 !== 0) {\r\n throw new DeveloperError(\"array length must be a multiple of 2.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 2);\r\n } else {\r\n result.length = length / 2;\r\n }\r\n\r\n for (let i = 0; i < length; i += 2) {\r\n const index = i / 2;\r\n result[index] = Cartesian2.unpack(array, i, result[index]);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Cartesian2 from two consecutive elements in an array.\r\n * @function\r\n *\r\n * @param {Number[]} array The array whose two consecutive elements correspond to the x and y components, respectively.\r\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\r\n *\r\n * @example\r\n * // Create a Cartesian2 with (1.0, 2.0)\r\n * const v = [1.0, 2.0];\r\n * const p = Cesium.Cartesian2.fromArray(v);\r\n *\r\n * // Create a Cartesian2 with (1.0, 2.0) using an offset into an array\r\n * const v2 = [0.0, 0.0, 1.0, 2.0];\r\n * const p2 = Cesium.Cartesian2.fromArray(v2, 2);\r\n */\r\nCartesian2.fromArray = Cartesian2.unpack;\r\n\r\n/**\r\n * Computes the value of the maximum component for the supplied Cartesian.\r\n *\r\n * @param {Cartesian2} cartesian The cartesian to use.\r\n * @returns {Number} The value of the maximum component.\r\n */\r\nCartesian2.maximumComponent = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return Math.max(cartesian.x, cartesian.y);\r\n};\r\n\r\n/**\r\n * Computes the value of the minimum component for the supplied Cartesian.\r\n *\r\n * @param {Cartesian2} cartesian The cartesian to use.\r\n * @returns {Number} The value of the minimum component.\r\n */\r\nCartesian2.minimumComponent = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return Math.min(cartesian.x, cartesian.y);\r\n};\r\n\r\n/**\r\n * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\r\n *\r\n * @param {Cartesian2} first A cartesian to compare.\r\n * @param {Cartesian2} second A cartesian to compare.\r\n * @param {Cartesian2} result The object into which to store the result.\r\n * @returns {Cartesian2} A cartesian with the minimum components.\r\n */\r\nCartesian2.minimumByComponent = function (first, second, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"first\", first);\r\n Check.typeOf.object(\"second\", second);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.min(first.x, second.x);\r\n result.y = Math.min(first.y, second.y);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\r\n *\r\n * @param {Cartesian2} first A cartesian to compare.\r\n * @param {Cartesian2} second A cartesian to compare.\r\n * @param {Cartesian2} result The object into which to store the result.\r\n * @returns {Cartesian2} A cartesian with the maximum components.\r\n */\r\nCartesian2.maximumByComponent = function (first, second, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"first\", first);\r\n Check.typeOf.object(\"second\", second);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.max(first.x, second.x);\r\n result.y = Math.max(first.y, second.y);\r\n return result;\r\n};\r\n\r\n/**\r\n * Constrain a value to lie between two values.\r\n *\r\n * @param {Cartesian2} value The value to clamp.\r\n * @param {Cartesian2} min The minimum bound.\r\n * @param {Cartesian2} max The maximum bound.\r\n * @param {Cartesian2} result The object into which to store the result.\r\n * @returns {Cartesian2} The clamped value such that min <= result <= max.\r\n */\r\nCartesian2.clamp = function (value, min, max, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.typeOf.object(\"min\", min);\r\n Check.typeOf.object(\"max\", max);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const x = CesiumMath.clamp(value.x, min.x, max.x);\r\n const y = CesiumMath.clamp(value.y, min.y, max.y);\r\n\r\n result.x = x;\r\n result.y = y;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the provided Cartesian's squared magnitude.\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian instance whose squared magnitude is to be computed.\r\n * @returns {Number} The squared magnitude.\r\n */\r\nCartesian2.magnitudeSquared = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return cartesian.x * cartesian.x + cartesian.y * cartesian.y;\r\n};\r\n\r\n/**\r\n * Computes the Cartesian's magnitude (length).\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian instance whose magnitude is to be computed.\r\n * @returns {Number} The magnitude.\r\n */\r\nCartesian2.magnitude = function (cartesian) {\r\n return Math.sqrt(Cartesian2.magnitudeSquared(cartesian));\r\n};\r\n\r\nconst distanceScratch = new Cartesian2();\r\n\r\n/**\r\n * Computes the distance between two points.\r\n *\r\n * @param {Cartesian2} left The first point to compute the distance from.\r\n * @param {Cartesian2} right The second point to compute the distance to.\r\n * @returns {Number} The distance between two points.\r\n *\r\n * @example\r\n * // Returns 1.0\r\n * const d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(2.0, 0.0));\r\n */\r\nCartesian2.distance = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian2.subtract(left, right, distanceScratch);\r\n return Cartesian2.magnitude(distanceScratch);\r\n};\r\n\r\n/**\r\n * Computes the squared distance between two points. Comparing squared distances\r\n * using this function is more efficient than comparing distances using {@link Cartesian2#distance}.\r\n *\r\n * @param {Cartesian2} left The first point to compute the distance from.\r\n * @param {Cartesian2} right The second point to compute the distance to.\r\n * @returns {Number} The distance between two points.\r\n *\r\n * @example\r\n * // Returns 4.0, not 2.0\r\n * const d = Cesium.Cartesian2.distance(new Cesium.Cartesian2(1.0, 0.0), new Cesium.Cartesian2(3.0, 0.0));\r\n */\r\nCartesian2.distanceSquared = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian2.subtract(left, right, distanceScratch);\r\n return Cartesian2.magnitudeSquared(distanceScratch);\r\n};\r\n\r\n/**\r\n * Computes the normalized form of the supplied Cartesian.\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian to be normalized.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.normalize = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const magnitude = Cartesian2.magnitude(cartesian);\r\n\r\n result.x = cartesian.x / magnitude;\r\n result.y = cartesian.y / magnitude;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (isNaN(result.x) || isNaN(result.y)) {\r\n throw new DeveloperError(\"normalized result is not a number\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the dot (scalar) product of two Cartesians.\r\n *\r\n * @param {Cartesian2} left The first Cartesian.\r\n * @param {Cartesian2} right The second Cartesian.\r\n * @returns {Number} The dot product.\r\n */\r\nCartesian2.dot = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n return left.x * right.x + left.y * right.y;\r\n};\r\n\r\n/**\r\n * Computes the magnitude of the cross product that would result from implicitly setting the Z coordinate of the input vectors to 0\r\n *\r\n * @param {Cartesian2} left The first Cartesian.\r\n * @param {Cartesian2} right The second Cartesian.\r\n * @returns {Number} The cross product.\r\n */\r\nCartesian2.cross = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n return left.x * right.y - left.y * right.x;\r\n};\r\n\r\n/**\r\n * Computes the componentwise product of two Cartesians.\r\n *\r\n * @param {Cartesian2} left The first Cartesian.\r\n * @param {Cartesian2} right The second Cartesian.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.multiplyComponents = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x * right.x;\r\n result.y = left.y * right.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise quotient of two Cartesians.\r\n *\r\n * @param {Cartesian2} left The first Cartesian.\r\n * @param {Cartesian2} right The second Cartesian.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.divideComponents = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x / right.x;\r\n result.y = left.y / right.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise sum of two Cartesians.\r\n *\r\n * @param {Cartesian2} left The first Cartesian.\r\n * @param {Cartesian2} right The second Cartesian.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.add = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x + right.x;\r\n result.y = left.y + right.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise difference of two Cartesians.\r\n *\r\n * @param {Cartesian2} left The first Cartesian.\r\n * @param {Cartesian2} right The second Cartesian.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.subtract = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x - right.x;\r\n result.y = left.y - right.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Multiplies the provided Cartesian componentwise by the provided scalar.\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian to be scaled.\r\n * @param {Number} scalar The scalar to multiply with.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.multiplyByScalar = function (cartesian, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = cartesian.x * scalar;\r\n result.y = cartesian.y * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Divides the provided Cartesian componentwise by the provided scalar.\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian to be divided.\r\n * @param {Number} scalar The scalar to divide by.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.divideByScalar = function (cartesian, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = cartesian.x / scalar;\r\n result.y = cartesian.y / scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Negates the provided Cartesian.\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian to be negated.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.negate = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = -cartesian.x;\r\n result.y = -cartesian.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the absolute value of the provided Cartesian.\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian whose absolute value is to be computed.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.abs = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.abs(cartesian.x);\r\n result.y = Math.abs(cartesian.y);\r\n return result;\r\n};\r\n\r\nconst lerpScratch = new Cartesian2();\r\n/**\r\n * Computes the linear interpolation or extrapolation at t using the provided cartesians.\r\n *\r\n * @param {Cartesian2} start The value corresponding to t at 0.0.\r\n * @param {Cartesian2} end The value corresponding to t at 1.0.\r\n * @param {Number} t The point along t at which to interpolate.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nCartesian2.lerp = function (start, end, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"start\", start);\r\n Check.typeOf.object(\"end\", end);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian2.multiplyByScalar(end, t, lerpScratch);\r\n result = Cartesian2.multiplyByScalar(start, 1.0 - t, result);\r\n return Cartesian2.add(lerpScratch, result, result);\r\n};\r\n\r\nconst angleBetweenScratch = new Cartesian2();\r\nconst angleBetweenScratch2 = new Cartesian2();\r\n/**\r\n * Returns the angle, in radians, between the provided Cartesians.\r\n *\r\n * @param {Cartesian2} left The first Cartesian.\r\n * @param {Cartesian2} right The second Cartesian.\r\n * @returns {Number} The angle between the Cartesians.\r\n */\r\nCartesian2.angleBetween = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian2.normalize(left, angleBetweenScratch);\r\n Cartesian2.normalize(right, angleBetweenScratch2);\r\n return CesiumMath.acosClamped(\r\n Cartesian2.dot(angleBetweenScratch, angleBetweenScratch2)\r\n );\r\n};\r\n\r\nconst mostOrthogonalAxisScratch = new Cartesian2();\r\n/**\r\n * Returns the axis that is most orthogonal to the provided Cartesian.\r\n *\r\n * @param {Cartesian2} cartesian The Cartesian on which to find the most orthogonal axis.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The most orthogonal axis.\r\n */\r\nCartesian2.mostOrthogonalAxis = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const f = Cartesian2.normalize(cartesian, mostOrthogonalAxisScratch);\r\n Cartesian2.abs(f, f);\r\n\r\n if (f.x <= f.y) {\r\n result = Cartesian2.clone(Cartesian2.UNIT_X, result);\r\n } else {\r\n result = Cartesian2.clone(Cartesian2.UNIT_Y, result);\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided Cartesians componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Cartesian2} [left] The first Cartesian.\r\n * @param {Cartesian2} [right] The second Cartesian.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nCartesian2.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.x === right.x &&\r\n left.y === right.y)\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nCartesian2.equalsArray = function (cartesian, array, offset) {\r\n return cartesian.x === array[offset] && cartesian.y === array[offset + 1];\r\n};\r\n\r\n/**\r\n * Compares the provided Cartesians componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {Cartesian2} [left] The first Cartesian.\r\n * @param {Cartesian2} [right] The second Cartesian.\r\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nCartesian2.equalsEpsilon = function (\r\n left,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n CesiumMath.equalsEpsilon(\r\n left.x,\r\n right.x,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n left.y,\r\n right.y,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ))\r\n );\r\n};\r\n\r\n/**\r\n * An immutable Cartesian2 instance initialized to (0.0, 0.0).\r\n *\r\n * @type {Cartesian2}\r\n * @constant\r\n */\r\nCartesian2.ZERO = Object.freeze(new Cartesian2(0.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian2 instance initialized to (1.0, 1.0).\r\n *\r\n * @type {Cartesian2}\r\n * @constant\r\n */\r\nCartesian2.ONE = Object.freeze(new Cartesian2(1.0, 1.0));\r\n\r\n/**\r\n * An immutable Cartesian2 instance initialized to (1.0, 0.0).\r\n *\r\n * @type {Cartesian2}\r\n * @constant\r\n */\r\nCartesian2.UNIT_X = Object.freeze(new Cartesian2(1.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian2 instance initialized to (0.0, 1.0).\r\n *\r\n * @type {Cartesian2}\r\n * @constant\r\n */\r\nCartesian2.UNIT_Y = Object.freeze(new Cartesian2(0.0, 1.0));\r\n\r\n/**\r\n * Duplicates this Cartesian2 instance.\r\n *\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if one was not provided.\r\n */\r\nCartesian2.prototype.clone = function (result) {\r\n return Cartesian2.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this Cartesian against the provided Cartesian componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Cartesian2} [right] The right hand side Cartesian.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nCartesian2.prototype.equals = function (right) {\r\n return Cartesian2.equals(this, right);\r\n};\r\n\r\n/**\r\n * Compares this Cartesian against the provided Cartesian componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {Cartesian2} [right] The right hand side Cartesian.\r\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if they are within the provided epsilon, false otherwise.\r\n */\r\nCartesian2.prototype.equalsEpsilon = function (\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return Cartesian2.equalsEpsilon(\r\n this,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n );\r\n};\r\n\r\n/**\r\n * Creates a string representing this Cartesian in the format '(x, y)'.\r\n *\r\n * @returns {String} A string representing the provided Cartesian in the format '(x, y)'.\r\n */\r\nCartesian2.prototype.toString = function () {\r\n return `(${this.x}, ${this.y})`;\r\n};\r\nexport default Cartesian2;\r\n","import Cartesian2 from \"./Cartesian2.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * A 2x2 matrix, indexable as a column-major order array.\r\n * Constructor parameters are in row-major order for code readability.\r\n * @alias Matrix2\r\n * @constructor\r\n * @implements {ArrayLike}\r\n *\r\n * @param {Number} [column0Row0=0.0] The value for column 0, row 0.\r\n * @param {Number} [column1Row0=0.0] The value for column 1, row 0.\r\n * @param {Number} [column0Row1=0.0] The value for column 0, row 1.\r\n * @param {Number} [column1Row1=0.0] The value for column 1, row 1.\r\n *\r\n * @see Matrix2.fromArray\r\n * @see Matrix2.fromColumnMajorArray\r\n * @see Matrix2.fromRowMajorArray\r\n * @see Matrix2.fromScale\r\n * @see Matrix2.fromUniformScale\r\n * @see Matrix2.fromRotation\r\n * @see Matrix3\r\n * @see Matrix4\r\n */\r\nfunction Matrix2(column0Row0, column1Row0, column0Row1, column1Row1) {\r\n this[0] = defaultValue(column0Row0, 0.0);\r\n this[1] = defaultValue(column0Row1, 0.0);\r\n this[2] = defaultValue(column1Row0, 0.0);\r\n this[3] = defaultValue(column1Row1, 0.0);\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nMatrix2.packedLength = 4;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Matrix2} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nMatrix2.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value[0];\r\n array[startingIndex++] = value[1];\r\n array[startingIndex++] = value[2];\r\n array[startingIndex++] = value[3];\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Matrix2} [result] The object into which to store the result.\r\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\r\n */\r\nMatrix2.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new Matrix2();\r\n }\r\n\r\n result[0] = array[startingIndex++];\r\n result[1] = array[startingIndex++];\r\n result[2] = array[startingIndex++];\r\n result[3] = array[startingIndex++];\r\n return result;\r\n};\r\n\r\n/**\r\n * Flattens an array of Matrix2s into an array of components. The components\r\n * are stored in column-major order.\r\n *\r\n * @param {Matrix2[]} array The array of matrices to pack.\r\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 4 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 4) elements.\r\n * @returns {Number[]} The packed array.\r\n */\r\nMatrix2.packArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n const resultLength = length * 4;\r\n if (!defined(result)) {\r\n result = new Array(resultLength);\r\n } else if (!Array.isArray(result) && result.length !== resultLength) {\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"If result is a typed array, it must have exactly array.length * 4 elements\"\r\n );\r\n //>>includeEnd('debug');\r\n } else if (result.length !== resultLength) {\r\n result.length = resultLength;\r\n }\r\n\r\n for (let i = 0; i < length; ++i) {\r\n Matrix2.pack(array[i], result, i * 4);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Unpacks an array of column-major matrix components into an array of Matrix2s.\r\n *\r\n * @param {Number[]} array The array of components to unpack.\r\n * @param {Matrix2[]} [result] The array onto which to store the result.\r\n * @returns {Matrix2[]} The unpacked array.\r\n */\r\nMatrix2.unpackArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 4);\r\n if (array.length % 4 !== 0) {\r\n throw new DeveloperError(\"array length must be a multiple of 4.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 4);\r\n } else {\r\n result.length = length / 4;\r\n }\r\n\r\n for (let i = 0; i < length; i += 4) {\r\n const index = i / 4;\r\n result[index] = Matrix2.unpack(array, i, result[index]);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a Matrix2 instance.\r\n *\r\n * @param {Matrix2} matrix The matrix to duplicate.\r\n * @param {Matrix2} [result] The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided. (Returns undefined if matrix is undefined)\r\n */\r\nMatrix2.clone = function (matrix, result) {\r\n if (!defined(matrix)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new Matrix2(matrix[0], matrix[2], matrix[1], matrix[3]);\r\n }\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[3];\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Matrix2 from 4 consecutive elements in an array.\r\n *\r\n * @function\r\n * @param {Number[]} array The array whose 4 consecutive elements correspond to the positions of the matrix. Assumes column-major order.\r\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\r\n * @param {Matrix2} [result] The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\r\n *\r\n * @example\r\n * // Create the Matrix2:\r\n * // [1.0, 2.0]\r\n * // [1.0, 2.0]\r\n *\r\n * const v = [1.0, 1.0, 2.0, 2.0];\r\n * const m = Cesium.Matrix2.fromArray(v);\r\n *\r\n * // Create same Matrix2 with using an offset into an array\r\n * const v2 = [0.0, 0.0, 1.0, 1.0, 2.0, 2.0];\r\n * const m2 = Cesium.Matrix2.fromArray(v2, 2);\r\n */\r\nMatrix2.fromArray = Matrix2.unpack;\r\n/**\r\n * Creates a Matrix2 instance from a column-major order array.\r\n *\r\n * @param {Number[]} values The column-major order array.\r\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\r\n */\r\nMatrix2.fromColumnMajorArray = function (values, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"values\", values);\r\n //>>includeEnd('debug');\r\n\r\n return Matrix2.clone(values, result);\r\n};\r\n\r\n/**\r\n * Creates a Matrix2 instance from a row-major order array.\r\n * The resulting matrix will be in column-major order.\r\n *\r\n * @param {Number[]} values The row-major order array.\r\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\r\n */\r\nMatrix2.fromRowMajorArray = function (values, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"values\", values);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix2(values[0], values[1], values[2], values[3]);\r\n }\r\n result[0] = values[0];\r\n result[1] = values[2];\r\n result[2] = values[1];\r\n result[3] = values[3];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix2 instance representing a non-uniform scale.\r\n *\r\n * @param {Cartesian2} scale The x and y scale factors.\r\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\r\n *\r\n * @example\r\n * // Creates\r\n * // [7.0, 0.0]\r\n * // [0.0, 8.0]\r\n * const m = Cesium.Matrix2.fromScale(new Cesium.Cartesian2(7.0, 8.0));\r\n */\r\nMatrix2.fromScale = function (scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"scale\", scale);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix2(scale.x, 0.0, 0.0, scale.y);\r\n }\r\n\r\n result[0] = scale.x;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = scale.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix2 instance representing a uniform scale.\r\n *\r\n * @param {Number} scale The uniform scale factor.\r\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\r\n *\r\n * @example\r\n * // Creates\r\n * // [2.0, 0.0]\r\n * // [0.0, 2.0]\r\n * const m = Cesium.Matrix2.fromUniformScale(2.0);\r\n */\r\nMatrix2.fromUniformScale = function (scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"scale\", scale);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix2(scale, 0.0, 0.0, scale);\r\n }\r\n\r\n result[0] = scale;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = scale;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a rotation matrix.\r\n *\r\n * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise.\r\n * @param {Matrix2} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix2} The modified result parameter, or a new Matrix2 instance if one was not provided.\r\n *\r\n * @example\r\n * // Rotate a point 45 degrees counterclockwise.\r\n * const p = new Cesium.Cartesian2(5, 6);\r\n * const m = Cesium.Matrix2.fromRotation(Cesium.Math.toRadians(45.0));\r\n * const rotated = Cesium.Matrix2.multiplyByVector(m, p, new Cesium.Cartesian2());\r\n */\r\nMatrix2.fromRotation = function (angle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"angle\", angle);\r\n //>>includeEnd('debug');\r\n\r\n const cosAngle = Math.cos(angle);\r\n const sinAngle = Math.sin(angle);\r\n\r\n if (!defined(result)) {\r\n return new Matrix2(cosAngle, -sinAngle, sinAngle, cosAngle);\r\n }\r\n result[0] = cosAngle;\r\n result[1] = sinAngle;\r\n result[2] = -sinAngle;\r\n result[3] = cosAngle;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates an Array from the provided Matrix2 instance.\r\n * The array will be in column-major order.\r\n *\r\n * @param {Matrix2} matrix The matrix to use..\r\n * @param {Number[]} [result] The Array onto which to store the result.\r\n * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided.\r\n */\r\nMatrix2.toArray = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return [matrix[0], matrix[1], matrix[2], matrix[3]];\r\n }\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[3];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the array index of the element at the provided row and column.\r\n *\r\n * @param {Number} row The zero-based index of the row.\r\n * @param {Number} column The zero-based index of the column.\r\n * @returns {Number} The index of the element at the provided row and column.\r\n *\r\n * @exception {DeveloperError} row must be 0 or 1.\r\n * @exception {DeveloperError} column must be 0 or 1.\r\n *\r\n * @example\r\n * const myMatrix = new Cesium.Matrix2();\r\n * const column1Row0Index = Cesium.Matrix2.getElementIndex(1, 0);\r\n * const column1Row0 = myMatrix[column1Row0Index]\r\n * myMatrix[column1Row0Index] = 10.0;\r\n */\r\nMatrix2.getElementIndex = function (column, row) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"row\", row, 1);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"column\", column, 1);\r\n //>>includeEnd('debug');\r\n\r\n return column * 2 + row;\r\n};\r\n\r\n/**\r\n * Retrieves a copy of the matrix column at the provided index as a Cartesian2 instance.\r\n *\r\n * @param {Matrix2} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the column to retrieve.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0 or 1.\r\n */\r\nMatrix2.getColumn = function (matrix, index, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\r\n\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const startIndex = index * 2;\r\n const x = matrix[startIndex];\r\n const y = matrix[startIndex + 1];\r\n\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian2 instance.\r\n *\r\n * @param {Matrix2} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the column to set.\r\n * @param {Cartesian2} cartesian The Cartesian whose values will be assigned to the specified column.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0 or 1.\r\n */\r\nMatrix2.setColumn = function (matrix, index, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\r\n\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result = Matrix2.clone(matrix, result);\r\n const startIndex = index * 2;\r\n result[startIndex] = cartesian.x;\r\n result[startIndex + 1] = cartesian.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Retrieves a copy of the matrix row at the provided index as a Cartesian2 instance.\r\n *\r\n * @param {Matrix2} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the row to retrieve.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0 or 1.\r\n */\r\nMatrix2.getRow = function (matrix, index, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\r\n\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const x = matrix[index];\r\n const y = matrix[index + 2];\r\n\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian2 instance.\r\n *\r\n * @param {Matrix2} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the row to set.\r\n * @param {Cartesian2} cartesian The Cartesian whose values will be assigned to the specified row.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0 or 1.\r\n */\r\nMatrix2.setRow = function (matrix, index, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 1);\r\n\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result = Matrix2.clone(matrix, result);\r\n result[index] = cartesian.x;\r\n result[index + 2] = cartesian.y;\r\n return result;\r\n};\r\n\r\nconst scaleScratch1 = new Cartesian2();\r\n\r\n/**\r\n * Computes a new matrix that replaces the scale with the provided scale.\r\n * This assumes the matrix is an affine transformation.\r\n *\r\n * @param {Matrix2} matrix The matrix to use.\r\n * @param {Cartesian2} scale The scale that replaces the scale of the provided matrix.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n *\r\n * @see Matrix2.setUniformScale\r\n * @see Matrix2.fromScale\r\n * @see Matrix2.fromUniformScale\r\n * @see Matrix2.multiplyByScale\r\n * @see Matrix2.multiplyByUniformScale\r\n * @see Matrix2.getScale\r\n */\r\nMatrix2.setScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const existingScale = Matrix2.getScale(matrix, scaleScratch1);\r\n const scaleRatioX = scale.x / existingScale.x;\r\n const scaleRatioY = scale.y / existingScale.y;\r\n\r\n result[0] = matrix[0] * scaleRatioX;\r\n result[1] = matrix[1] * scaleRatioX;\r\n result[2] = matrix[2] * scaleRatioY;\r\n result[3] = matrix[3] * scaleRatioY;\r\n\r\n return result;\r\n};\r\n\r\nconst scaleScratch2 = new Cartesian2();\r\n\r\n/**\r\n * Computes a new matrix that replaces the scale with the provided uniform scale.\r\n * This assumes the matrix is an affine transformation.\r\n *\r\n * @param {Matrix2} matrix The matrix to use.\r\n * @param {Number} scale The uniform scale that replaces the scale of the provided matrix.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n *\r\n * @see Matrix2.setScale\r\n * @see Matrix2.fromScale\r\n * @see Matrix2.fromUniformScale\r\n * @see Matrix2.multiplyByScale\r\n * @see Matrix2.multiplyByUniformScale\r\n * @see Matrix2.getScale\r\n */\r\nMatrix2.setUniformScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const existingScale = Matrix2.getScale(matrix, scaleScratch2);\r\n const scaleRatioX = scale / existingScale.x;\r\n const scaleRatioY = scale / existingScale.y;\r\n\r\n result[0] = matrix[0] * scaleRatioX;\r\n result[1] = matrix[1] * scaleRatioX;\r\n result[2] = matrix[2] * scaleRatioY;\r\n result[3] = matrix[3] * scaleRatioY;\r\n\r\n return result;\r\n};\r\n\r\nconst scratchColumn = new Cartesian2();\r\n\r\n/**\r\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix2} matrix The matrix.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n *\r\n * @see Matrix2.multiplyByScale\r\n * @see Matrix2.multiplyByUniformScale\r\n * @see Matrix2.fromScale\r\n * @see Matrix2.fromUniformScale\r\n * @see Matrix2.setScale\r\n * @see Matrix2.setUniformScale\r\n */\r\nMatrix2.getScale = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Cartesian2.magnitude(\r\n Cartesian2.fromElements(matrix[0], matrix[1], scratchColumn)\r\n );\r\n result.y = Cartesian2.magnitude(\r\n Cartesian2.fromElements(matrix[2], matrix[3], scratchColumn)\r\n );\r\n return result;\r\n};\r\n\r\nconst scaleScratch3 = new Cartesian2();\r\n\r\n/**\r\n * Computes the maximum scale assuming the matrix is an affine transformation.\r\n * The maximum scale is the maximum length of the column vectors.\r\n *\r\n * @param {Matrix2} matrix The matrix.\r\n * @returns {Number} The maximum scale.\r\n */\r\nMatrix2.getMaximumScale = function (matrix) {\r\n Matrix2.getScale(matrix, scaleScratch3);\r\n return Cartesian2.maximumComponent(scaleScratch3);\r\n};\r\n\r\nconst scaleScratch4 = new Cartesian2();\r\n\r\n/**\r\n * Sets the rotation assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix2} matrix The matrix.\r\n * @param {Matrix2} rotation The rotation matrix.\r\n * @returns {Matrix2} The modified result parameter.\r\n *\r\n * @see Matrix2.fromRotation\r\n * @see Matrix2.getRotation\r\n */\r\nMatrix2.setRotation = function (matrix, rotation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const scale = Matrix2.getScale(matrix, scaleScratch4);\r\n\r\n result[0] = rotation[0] * scale.x;\r\n result[1] = rotation[1] * scale.x;\r\n result[2] = rotation[2] * scale.y;\r\n result[3] = rotation[3] * scale.y;\r\n\r\n return result;\r\n};\r\n\r\nconst scaleScratch5 = new Cartesian2();\r\n\r\n/**\r\n * Extracts the rotation matrix assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix2} matrix The matrix.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n *\r\n * @see Matrix2.setRotation\r\n * @see Matrix2.fromRotation\r\n */\r\nMatrix2.getRotation = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const scale = Matrix2.getScale(matrix, scaleScratch5);\r\n\r\n result[0] = matrix[0] / scale.x;\r\n result[1] = matrix[1] / scale.x;\r\n result[2] = matrix[2] / scale.y;\r\n result[3] = matrix[3] / scale.y;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of two matrices.\r\n *\r\n * @param {Matrix2} left The first matrix.\r\n * @param {Matrix2} right The second matrix.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n */\r\nMatrix2.multiply = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const column0Row0 = left[0] * right[0] + left[2] * right[1];\r\n const column1Row0 = left[0] * right[2] + left[2] * right[3];\r\n const column0Row1 = left[1] * right[0] + left[3] * right[1];\r\n const column1Row1 = left[1] * right[2] + left[3] * right[3];\r\n\r\n result[0] = column0Row0;\r\n result[1] = column0Row1;\r\n result[2] = column1Row0;\r\n result[3] = column1Row1;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the sum of two matrices.\r\n *\r\n * @param {Matrix2} left The first matrix.\r\n * @param {Matrix2} right The second matrix.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n */\r\nMatrix2.add = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = left[0] + right[0];\r\n result[1] = left[1] + right[1];\r\n result[2] = left[2] + right[2];\r\n result[3] = left[3] + right[3];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the difference of two matrices.\r\n *\r\n * @param {Matrix2} left The first matrix.\r\n * @param {Matrix2} right The second matrix.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n */\r\nMatrix2.subtract = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = left[0] - right[0];\r\n result[1] = left[1] - right[1];\r\n result[2] = left[2] - right[2];\r\n result[3] = left[3] - right[3];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix and a column vector.\r\n *\r\n * @param {Matrix2} matrix The matrix.\r\n * @param {Cartesian2} cartesian The column.\r\n * @param {Cartesian2} result The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter.\r\n */\r\nMatrix2.multiplyByVector = function (matrix, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const x = matrix[0] * cartesian.x + matrix[2] * cartesian.y;\r\n const y = matrix[1] * cartesian.x + matrix[3] * cartesian.y;\r\n\r\n result.x = x;\r\n result.y = y;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix and a scalar.\r\n *\r\n * @param {Matrix2} matrix The matrix.\r\n * @param {Number} scalar The number to multiply by.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n */\r\nMatrix2.multiplyByScalar = function (matrix, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0] * scalar;\r\n result[1] = matrix[1] * scalar;\r\n result[2] = matrix[2] * scalar;\r\n result[3] = matrix[3] * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix.\r\n *\r\n * @param {Matrix2} matrix The matrix on the left-hand side.\r\n * @param {Number} scale The non-uniform scale on the right-hand side.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n *\r\n *\r\n * @example\r\n * // Instead of Cesium.Matrix2.multiply(m, Cesium.Matrix2.fromScale(scale), m);\r\n * Cesium.Matrix2.multiplyByScale(m, scale, m);\r\n *\r\n * @see Matrix2.multiplyByUniformScale\r\n * @see Matrix2.fromScale\r\n * @see Matrix2.fromUniformScale\r\n * @see Matrix2.setScale\r\n * @see Matrix2.setUniformScale\r\n * @see Matrix2.getScale\r\n */\r\nMatrix2.multiplyByScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0] * scale.x;\r\n result[1] = matrix[1] * scale.x;\r\n result[2] = matrix[2] * scale.y;\r\n result[3] = matrix[3] * scale.y;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix.\r\n *\r\n * @param {Matrix2} matrix The matrix on the left-hand side.\r\n * @param {Number} scale The uniform scale on the right-hand side.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n *\r\n * @example\r\n * // Instead of Cesium.Matrix2.multiply(m, Cesium.Matrix2.fromUniformScale(scale), m);\r\n * Cesium.Matrix2.multiplyByUniformScale(m, scale, m);\r\n *\r\n * @see Matrix2.multiplyByScale\r\n * @see Matrix2.fromScale\r\n * @see Matrix2.fromUniformScale\r\n * @see Matrix2.setScale\r\n * @see Matrix2.setUniformScale\r\n * @see Matrix2.getScale\r\n */\r\nMatrix2.multiplyByUniformScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0] * scale;\r\n result[1] = matrix[1] * scale;\r\n result[2] = matrix[2] * scale;\r\n result[3] = matrix[3] * scale;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a negated copy of the provided matrix.\r\n *\r\n * @param {Matrix2} matrix The matrix to negate.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n */\r\nMatrix2.negate = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = -matrix[0];\r\n result[1] = -matrix[1];\r\n result[2] = -matrix[2];\r\n result[3] = -matrix[3];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the transpose of the provided matrix.\r\n *\r\n * @param {Matrix2} matrix The matrix to transpose.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n */\r\nMatrix2.transpose = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const column0Row0 = matrix[0];\r\n const column0Row1 = matrix[2];\r\n const column1Row0 = matrix[1];\r\n const column1Row1 = matrix[3];\r\n\r\n result[0] = column0Row0;\r\n result[1] = column0Row1;\r\n result[2] = column1Row0;\r\n result[3] = column1Row1;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\r\n *\r\n * @param {Matrix2} matrix The matrix with signed elements.\r\n * @param {Matrix2} result The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter.\r\n */\r\nMatrix2.abs = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = Math.abs(matrix[0]);\r\n result[1] = Math.abs(matrix[1]);\r\n result[2] = Math.abs(matrix[2]);\r\n result[3] = Math.abs(matrix[3]);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided matrices componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Matrix2} [left] The first matrix.\r\n * @param {Matrix2} [right] The second matrix.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nMatrix2.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left[0] === right[0] &&\r\n left[1] === right[1] &&\r\n left[2] === right[2] &&\r\n left[3] === right[3])\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nMatrix2.equalsArray = function (matrix, array, offset) {\r\n return (\r\n matrix[0] === array[offset] &&\r\n matrix[1] === array[offset + 1] &&\r\n matrix[2] === array[offset + 2] &&\r\n matrix[3] === array[offset + 3]\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided matrices componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Matrix2} [left] The first matrix.\r\n * @param {Matrix2} [right] The second matrix.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nMatrix2.equalsEpsilon = function (left, right, epsilon) {\r\n epsilon = defaultValue(epsilon, 0);\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Math.abs(left[0] - right[0]) <= epsilon &&\r\n Math.abs(left[1] - right[1]) <= epsilon &&\r\n Math.abs(left[2] - right[2]) <= epsilon &&\r\n Math.abs(left[3] - right[3]) <= epsilon)\r\n );\r\n};\r\n\r\n/**\r\n * An immutable Matrix2 instance initialized to the identity matrix.\r\n *\r\n * @type {Matrix2}\r\n * @constant\r\n */\r\nMatrix2.IDENTITY = Object.freeze(new Matrix2(1.0, 0.0, 0.0, 1.0));\r\n\r\n/**\r\n * An immutable Matrix2 instance initialized to the zero matrix.\r\n *\r\n * @type {Matrix2}\r\n * @constant\r\n */\r\nMatrix2.ZERO = Object.freeze(new Matrix2(0.0, 0.0, 0.0, 0.0));\r\n\r\n/**\r\n * The index into Matrix2 for column 0, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n *\r\n * @example\r\n * const matrix = new Cesium.Matrix2();\r\n * matrix[Cesium.Matrix2.COLUMN0ROW0] = 5.0; // set column 0, row 0 to 5.0\r\n */\r\nMatrix2.COLUMN0ROW0 = 0;\r\n\r\n/**\r\n * The index into Matrix2 for column 0, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n *\r\n * @example\r\n * const matrix = new Cesium.Matrix2();\r\n * matrix[Cesium.Matrix2.COLUMN0ROW1] = 5.0; // set column 0, row 1 to 5.0\r\n */\r\nMatrix2.COLUMN0ROW1 = 1;\r\n\r\n/**\r\n * The index into Matrix2 for column 1, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n *\r\n * @example\r\n * const matrix = new Cesium.Matrix2();\r\n * matrix[Cesium.Matrix2.COLUMN1ROW0] = 5.0; // set column 1, row 0 to 5.0\r\n */\r\nMatrix2.COLUMN1ROW0 = 2;\r\n\r\n/**\r\n * The index into Matrix2 for column 1, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n *\r\n * @example\r\n * const matrix = new Cesium.Matrix2();\r\n * matrix[Cesium.Matrix2.COLUMN1ROW1] = 5.0; // set column 1, row 1 to 5.0\r\n */\r\nMatrix2.COLUMN1ROW1 = 3;\r\n\r\nObject.defineProperties(Matrix2.prototype, {\r\n /**\r\n * Gets the number of items in the collection.\r\n * @memberof Matrix2.prototype\r\n *\r\n * @type {Number}\r\n */\r\n length: {\r\n get: function () {\r\n return Matrix2.packedLength;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Duplicates the provided Matrix2 instance.\r\n *\r\n * @param {Matrix2} [result] The object onto which to store the result.\r\n * @returns {Matrix2} The modified result parameter or a new Matrix2 instance if one was not provided.\r\n */\r\nMatrix2.prototype.clone = function (result) {\r\n return Matrix2.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this matrix to the provided matrix componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Matrix2} [right] The right hand side matrix.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nMatrix2.prototype.equals = function (right) {\r\n return Matrix2.equals(this, right);\r\n};\r\n\r\n/**\r\n * Compares this matrix to the provided matrix componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Matrix2} [right] The right hand side matrix.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if they are within the provided epsilon, false otherwise.\r\n */\r\nMatrix2.prototype.equalsEpsilon = function (right, epsilon) {\r\n return Matrix2.equalsEpsilon(this, right, epsilon);\r\n};\r\n\r\n/**\r\n * Creates a string representing this Matrix with each row being\r\n * on a separate line and in the format '(column0, column1)'.\r\n *\r\n * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1)'.\r\n */\r\nMatrix2.prototype.toString = function () {\r\n return `(${this[0]}, ${this[2]})\\n` + `(${this[1]}, ${this[3]})`;\r\n};\r\nexport default Matrix2;\r\n"],"names":["defaultValue","defined","Check","DeveloperError","CesiumMath","distanceScratch","lerpScratch","mostOrthogonalAxisScratch","Cartesian3","Matrix3","scaleScratch1","scaleScratch2","scratchColumn","scaleScratch3","scaleScratch4","scaleScratch5","RuntimeError","Ellipsoid","Cartographic"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAMA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;EAChC;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,CAAC,GAAGA,yBAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChC;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,CAAC,GAAGA,yBAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChC;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,CAAC,GAAGA,yBAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAChC;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,CAAC,GAAGA,yBAAY,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EAChC,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,YAAY,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE;EACxD,EAAE,IAAI,CAACC,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;EACtC,GAAG;AACH;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EAChD;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;EACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;EAC3E,GAAG;AACH;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC;EACvB,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;EACzB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,KAAK,GAAG,UAAU,SAAS,EAAE,MAAM,EAAE;EAChD,EAAE,IAAI,CAACA,oBAAO,CAAC,SAAS,CAAC,EAAE;EAC3B,IAAI,OAAO,SAAS,CAAC;EACrB,GAAG;AACH;EACA,EAAE,IAAI,CAACA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;EAC9E,GAAG;AACH;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,YAAY,GAAG,CAAC,CAAC;AAC5B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;EACzD;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC;AACA;EACA,EAAE,aAAa,GAAGF,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACnC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACnC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACnC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACjC;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;EAC5D;EACA,EAAEE,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC;AACA;EACA,EAAE,aAAa,GAAGF,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAE,IAAI,CAACC,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;EAC9B,GAAG;EACH,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;EAClC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EAChD;EACA,EAAEC,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC;AACA;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAC9B,EAAE,MAAM,YAAY,GAAG,MAAM,GAAG,CAAC,CAAC;EAClC,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;EACrC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE;EACvE;EACA,IAAI,MAAM,IAAIE,oBAAc;EAC5B,MAAM,4EAA4E;EAClF,KAAK,CAAC;EACN;EACA,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE;EAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;EACjC,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EACnC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;EAC7C,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,WAAW,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EAClD;EACA,EAAED,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;EAC3E,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;EAC9B,IAAI,MAAM,IAAIC,oBAAc,CAAC,uCAAuC,CAAC,CAAC;EACtE,GAAG;EACH;AACA;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAC9B,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC;EAC/B,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;EACtC,IAAI,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;EACxB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EAC/D,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;AACzC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,gBAAgB,GAAG,UAAU,SAAS,EAAE;EACnD;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C;AACA;EACA,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;EACtE,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,gBAAgB,GAAG,UAAU,SAAS,EAAE;EACnD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C;AACA;EACA,EAAE,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;EACtE,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,kBAAkB,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;EACjE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EACzC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EACzC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EACzC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACzC;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,kBAAkB,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE;EACjE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EACzC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EACzC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;EACzC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;AACzC;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,KAAK,GAAG,UAAU,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE;EACtD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,GAAGE,iBAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EACpD,EAAE,MAAM,CAAC,GAAGA,iBAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EACpD,EAAE,MAAM,CAAC,GAAGA,iBAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;EACpD,EAAE,MAAM,CAAC,GAAGA,iBAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AACf;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,gBAAgB,GAAG,UAAU,SAAS,EAAE;EACnD;EACA,EAAEF,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C;AACA;EACA,EAAE;EACF,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;EAC7B,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;EAC7B,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;EAC7B,IAAI,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;EAC7B,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,GAAG,UAAU,SAAS,EAAE;EAC5C,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;EAC3D,CAAC,CAAC;AACF;EACA,MAAMG,iBAAe,GAAG,IAAI,UAAU,EAAE,CAAC;AACzC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,QAAQ,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EAC7C;EACA,EAAEH,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;AACA;EACA,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAEG,iBAAe,CAAC,CAAC;EACpD,EAAE,OAAO,UAAU,CAAC,SAAS,CAACA,iBAAe,CAAC,CAAC;EAC/C,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,eAAe,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACpD;EACA,EAAEH,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;AACA;EACA,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAEG,iBAAe,CAAC,CAAC;EACpD,EAAE,OAAO,UAAU,CAAC,gBAAgB,CAACA,iBAAe,CAAC,CAAC;EACtD,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,GAAG,UAAU,SAAS,EAAE,MAAM,EAAE;EACpD;EACA,EAAEH,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;AACpD;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC;AACrC;EACA;EACA,EAAE;EACF,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACnB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACnB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACnB,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;EACnB,IAAI;EACJ,IAAI,MAAM,IAAIC,oBAAc,CAAC,mCAAmC,CAAC,CAAC;EAClE,GAAG;EACH;AACA;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACxC;EACA,EAAED,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;AACA;EACA,EAAE;EACF,IAAI,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC;EAC7E,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,kBAAkB,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;EAC/D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,gBAAgB,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;EAC7D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;EAChD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,QAAQ,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;EACrD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAC9B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,gBAAgB,GAAG,UAAU,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;EACnE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;EAClC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,cAAc,GAAG,UAAU,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE;EACjE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC;EAClC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,MAAM,GAAG,UAAU,SAAS,EAAE,MAAM,EAAE;EACjD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;EAC1B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,GAAG,GAAG,UAAU,SAAS,EAAE,MAAM,EAAE;EAC9C;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EACnC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EACnC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EACnC,EAAE,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;EACnC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAMI,aAAW,GAAG,IAAI,UAAU,EAAE,CAAC;EACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE;EACnD;EACA,EAAEJ,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EAC9B,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,UAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,EAAEI,aAAW,CAAC,CAAC;EACnD,EAAE,MAAM,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;EAC/D,EAAE,OAAO,UAAU,CAAC,GAAG,CAACA,aAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;EACrD,CAAC,CAAC;AACF;EACA,MAAMC,2BAAyB,GAAG,IAAI,UAAU,EAAE,CAAC;EACnD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,kBAAkB,GAAG,UAAU,SAAS,EAAE,MAAM,EAAE;EAC7D;EACA,EAAEL,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,SAAS,EAAEK,2BAAyB,CAAC,CAAC;EACvE,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvB;EACA,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EAClB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EACpB,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EACtB,QAAQ,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC7D,OAAO,MAAM;EACb,QAAQ,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC7D,OAAO;EACP,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EAC3B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC3D,KAAK,MAAM;EACX,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC3D,KAAK;EACL,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EACzB,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EACpB,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC3D,KAAK,MAAM;EACX,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAC3D,KAAK;EACL,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;EACzB,IAAI,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACzD,GAAG,MAAM;EACT,IAAI,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACzD,GAAG;AACH;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EAC3C,EAAE;EACF,IAAI,IAAI,KAAK,KAAK;EAClB,KAAKN,oBAAO,CAAC,IAAI,CAAC;EAClB,MAAMA,oBAAO,CAAC,KAAK,CAAC;EACpB,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;EACxB,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;EACxB,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;EACxB,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EACzB,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,UAAU,CAAC,WAAW,GAAG,UAAU,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;EAC7D,EAAE;EACF,IAAI,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC;EACjC,IAAI,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;EACrC,IAAI,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;EACrC,IAAI,SAAS,CAAC,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;EACrC,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,aAAa,GAAG;EAC3B,EAAE,IAAI;EACN,EAAE,KAAK;EACP,EAAE,eAAe;EACjB,EAAE,eAAe;EACjB,EAAE;EACF,EAAE;EACF,IAAI,IAAI,KAAK,KAAK;EAClB,KAAKA,oBAAO,CAAC,IAAI,CAAC;EAClB,MAAMA,oBAAO,CAAC,KAAK,CAAC;EACpB,MAAMG,iBAAU,CAAC,aAAa;EAC9B,QAAQ,IAAI,CAAC,CAAC;EACd,QAAQ,KAAK,CAAC,CAAC;EACf,QAAQ,eAAe;EACvB,QAAQ,eAAe;EACvB,OAAO;EACP,MAAMA,iBAAU,CAAC,aAAa;EAC9B,QAAQ,IAAI,CAAC,CAAC;EACd,QAAQ,KAAK,CAAC,CAAC;EACf,QAAQ,eAAe;EACvB,QAAQ,eAAe;EACvB,OAAO;EACP,MAAMA,iBAAU,CAAC,aAAa;EAC9B,QAAQ,IAAI,CAAC,CAAC;EACd,QAAQ,KAAK,CAAC,CAAC;EACf,QAAQ,eAAe;EACvB,QAAQ,eAAe;EACvB,OAAO;EACP,MAAMA,iBAAU,CAAC,aAAa;EAC9B,QAAQ,IAAI,CAAC,CAAC;EACd,QAAQ,KAAK,CAAC,CAAC;EACf,QAAQ,eAAe;EACvB,QAAQ,eAAe;EACvB,OAAO,CAAC;EACR,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACnE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACtE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACtE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACtE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACtE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,CAAC,KAAK,GAAG,UAAU,MAAM,EAAE;EAC/C,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;EACxC,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE;EAC/C,EAAE,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;EACxC,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,CAAC,aAAa,GAAG;EACrC,EAAE,KAAK;EACP,EAAE,eAAe;EACjB,EAAE,eAAe;EACjB,EAAE;EACF,EAAE,OAAO,UAAU,CAAC,aAAa;EACjC,IAAI,IAAI;EACR,IAAI,KAAK;EACT,IAAI,eAAe;EACnB,IAAI,eAAe;EACnB,GAAG,CAAC;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;EAC5C,EAAE,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;EACxD,CAAC,CAAC;AACF;EACA;EACA,MAAM,eAAe,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;EAC5C,MAAM,cAAc,GAAG,IAAI,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAC9D;EACA,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;EAC9C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;EAC9C,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;AACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,SAAS,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EAChD;EACA,EAAEF,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;AACA;EACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;EAC9B,GAAG;AACH;EACA;EACA,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC7B;EACA,EAAE,IAAI,YAAY,EAAE;EACpB,IAAI,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,GAAG,MAAM;EACT;EACA,IAAI,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,IAAI,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;EACjC,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,UAAU,CAAC,WAAW,GAAG,UAAU,WAAW,EAAE;EAChD;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;EAClD;AACA;EACA;EACA,EAAE,IAAI,YAAY,EAAE;EACpB,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EACtC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EACtC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EACtC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EACtC,GAAG,MAAM;EACT;EACA,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EACtC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EACtC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EACtC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EACtC,GAAG;EACH,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,CAAC;EAC5B,CAAC;;ECx8BD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO;EAChB,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE,WAAW;EACb,EAAE;EACF,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGF,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,CAAC,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC3C,EAAE,IAAI,CAAC,EAAE,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC5C,EAAE,IAAI,CAAC,EAAE,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC5C,EAAE,IAAI,CAAC,EAAE,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC5C,EAAE,IAAI,CAAC,EAAE,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC5C,EAAE,IAAI,CAAC,EAAE,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC5C,EAAE,IAAI,CAAC,EAAE,CAAC,GAAGA,yBAAY,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;EAC5C,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,YAAY,GAAG,EAAE,CAAC;AAC1B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;EACtD;EACA,EAAEE,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC;AACA;EACA,EAAE,aAAa,GAAGF,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACpC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACrC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACrC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACrC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACrC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACrC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AACnC;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;EACzD;EACA,EAAEE,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC;AACA;EACA,EAAE,aAAa,GAAGF,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAE,IAAI,CAACC,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACtC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACtC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACtC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACtC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACtC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;EACpC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,SAAS,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EAC7C;EACA,EAAEC,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC;AACA;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAC9B,EAAE,MAAM,YAAY,GAAG,MAAM,GAAG,EAAE,CAAC;EACnC,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;EACrC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE;EACvE;EACA,IAAI,MAAM,IAAIE,oBAAc;EAC5B,MAAM,6EAA6E;EACnF,KAAK,CAAC;EACN;EACA,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,EAAE;EAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,YAAY,CAAC;EACjC,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EACnC,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;EAC3C,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EAC/C;EACA,EAAED,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;EAC5E,EAAE,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,KAAK,CAAC,EAAE;EAC/B,IAAI,MAAM,IAAIC,oBAAc,CAAC,wCAAwC,CAAC,CAAC;EACvE,GAAG;EACH;AACA;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;EAC9B,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;EACpC,GAAG,MAAM;EACT,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;EAChC,GAAG;AACH;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;EACvC,IAAI,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,CAAC;EACzB,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;EAC5D,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,KAAK,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC1C,EAAE,IAAI,CAACA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,SAAS,CAAC;EACrB,GAAG;EACH,EAAE,IAAI,CAACA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,OAAO;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,KAAK,CAAC;EACN,GAAG;EACH,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;AACnC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,oBAAoB,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EACzD;EACA,EAAEC,WAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EAClC;AACA;EACA,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACvC,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,iBAAiB,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EACtD;EACA,EAAEA,WAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EAClC;AACA;EACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,OAAO;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,KAAK,CAAC;EACN,GAAG;EACH,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,uBAAuB,GAAG,UAAU,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE;EAC3E;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;EAC5C;AACA;EACA,EAAE,WAAW,GAAGF,yBAAY,CAAC,WAAW,EAAEQ,kBAAU,CAAC,IAAI,CAAC,CAAC;AAC3D;EACA,EAAE,IAAI,CAACP,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,OAAO;EACtB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,WAAW,CAAC,CAAC;EACnB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,WAAW,CAAC,CAAC;EACnB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,QAAQ,CAAC,CAAC,CAAC;EACjB,MAAM,WAAW,CAAC,CAAC;EACnB,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,sCAAsC,GAAG;EACjD,EAAE,WAAW;EACb,EAAE,QAAQ;EACV,EAAE,KAAK;EACP,EAAE,MAAM;EACR,EAAE;EACF;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;EAClD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;EAC5C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;AACA;EACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AACzB;EACA,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AACrC;EACA,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;EAChC,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EAC9B,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9B;EACA,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EAC9B,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;EACjC,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;AAC9B;EACA,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EAC9B,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;EAC9B,EAAE,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACjC;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,MAAM,CAAC;EAC5B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACnB;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,4BAA4B,GAAG;EACvC,EAAE,wBAAwB;EAC1B,EAAE,MAAM;EACR,EAAE;EACF;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,wBAAwB,CAAC,CAAC;EAC5E;AACA;EACA,EAAE,OAAO,OAAO,CAAC,sCAAsC;EACvD,IAAI,wBAAwB,CAAC,WAAW;EACxC,IAAI,wBAAwB,CAAC,QAAQ;EACrC,IAAI,wBAAwB,CAAC,KAAK;EAClC,IAAI,MAAM;EACV,GAAG,CAAC;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,eAAe,GAAG,UAAU,WAAW,EAAE,MAAM,EAAE;EACzD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;EAClD;AACA;EACA,EAAE,OAAO,OAAO,CAAC,uBAAuB,CAACO,eAAO,CAAC,QAAQ,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC;EAChF,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,SAAS,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EAC7C;EACA,EAAEP,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;AACA;EACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,OAAO;EACtB,MAAM,KAAK,CAAC,CAAC;EACb,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,KAAK,CAAC,CAAC;EACb,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,KAAK,CAAC,CAAC;EACb,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACvB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,gBAAgB,GAAG,UAAU,KAAK,EAAE,MAAM,EAAE;EACpD;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;AACA;EACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,OAAO;EACtB,MAAM,KAAK;EACX,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,KAAK;EACX,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,KAAK;EACX,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EACpB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EACpB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;EACrB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,YAAY,GAAG,UAAU,QAAQ,EAAE,MAAM,EAAE;EACnD;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;EAC5C;AACA;EACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;EAC3B,GAAG;EACH,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAClB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAClB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACnB;EACA,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACnB;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAM,WAAW,GAAG,IAAIO,kBAAU,EAAE,CAAC;EACrC,MAAM,WAAW,GAAG,IAAIA,kBAAU,EAAE,CAAC;EACrC,MAAM,WAAW,GAAG,IAAIA,kBAAU,EAAE,CAAC;AACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,UAAU,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC/C;EACA,EAAEN,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;EACnC,EAAE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC;EACrC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC;AACvB;EACA;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;EACnD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;EACrD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;EACvC;AACA;EACA,EAAEM,kBAAU,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;EAC/C,EAAEA,kBAAU,CAAC,SAAS;EACtB,IAAIA,kBAAU,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,EAAE,WAAW,CAAC;EAClD,IAAI,WAAW;EACf,GAAG,CAAC;EACJ,EAAEA,kBAAU,CAAC,SAAS;EACtB,IAAIA,kBAAU,CAAC,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;EAC3D,IAAI,WAAW;EACf,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;EAC/B,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;EAC/B,EAAE,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC;EAC/B,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC;EACjE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,SAAS,CAAC;EACjE,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,SAAS,GAAG,EAAE,GAAG,SAAS,CAAC;AAC9D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAACP,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,OAAO;EACtB,MAAM,EAAE;EACR,MAAM,EAAE;EACR,MAAM,EAAE;EACR,MAAM,EAAE;EACR,MAAM,EAAE;EACR,MAAM,EAAE;EACR,MAAM,EAAE;EACR,MAAM,EAAE;EACR,MAAM,CAAC,EAAE;EACT,MAAM,CAAC,EAAE;EACT,MAAM,CAAC,EAAE;EACT,MAAM,EAAE;EACR,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,MAAM,GAAG;EACT,KAAK,CAAC;EACN,GAAG;EACH,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACjB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACjB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACjB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACjB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACjB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EACjB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,6BAA6B,GAAG;EACxC,EAAE,IAAI;EACN,EAAE,WAAW;EACb,EAAE,IAAI;EACN,EAAE,GAAG;EACL,EAAE,MAAM;EACR,EAAE;EACF;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;EACrD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;EACtD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;EACrD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;EACnD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;AACtC;EACA,EAAE,MAAM,WAAW,GAAG,GAAG,GAAG,MAAM,CAAC;EACnC,EAAE,MAAM,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC;EAChD,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC;EAClD,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC,CAAC;AACxD;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC;EACpB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,4BAA4B,GAAG;EACvC,EAAE,IAAI;EACN,EAAE,KAAK;EACP,EAAE,MAAM;EACR,EAAE,GAAG;EACL,EAAE,IAAI;EACN,EAAE,GAAG;EACL,EAAE,MAAM;EACR,EAAE;EACF;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC;EAC/B,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,MAAM,CAAC,CAAC;EAC/B,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC;AAC7B;EACA,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;EACjC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;EACjC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;EAC/B,EAAE,CAAC,IAAI,GAAG,CAAC;EACX,EAAE,CAAC,IAAI,GAAG,CAAC;EACX,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;AACZ;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAChB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EAChB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACjB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,2BAA2B,GAAG;EACtC,EAAE,IAAI;EACN,EAAE,KAAK;EACP,EAAE,MAAM;EACR,EAAE,GAAG;EACL,EAAE,IAAI;EACN,EAAE,GAAG;EACL,EAAE,MAAM;EACR,EAAE;EACF;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC;EACpD,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC;EACpD,EAAE,MAAM,WAAW,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC;EACtD,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC;EACtD,EAAE,MAAM,WAAW,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC;EACnD,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC;EAC3B,EAAE,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,CAAC;AACzD;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,mCAAmC,GAAG;EAC9C,EAAE,IAAI;EACN,EAAE,KAAK;EACP,EAAE,MAAM;EACR,EAAE,GAAG;EACL,EAAE,IAAI;EACN,EAAE,MAAM;EACR,EAAE;EACF;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC;EACpD,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC;EACpD,EAAE,MAAM,WAAW,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,KAAK,GAAG,IAAI,CAAC,CAAC;EACtD,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,MAAM,KAAK,GAAG,GAAG,MAAM,CAAC,CAAC;EACtD,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC;EAC3B,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,CAAC;EAC3B,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC;AAClC;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,6BAA6B,GAAG;EACxC,EAAE,QAAQ;EACV,EAAE,cAAc;EAChB,EAAE,aAAa;EACf,EAAE,MAAM;EACR,EAAE;EACF,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;EAC3B,GAAG;AACH;EACA,EAAE,QAAQ,GAAGD,yBAAY,CAAC,QAAQ,EAAEA,yBAAY,CAAC,YAAY,CAAC,CAAC;EAC/D,EAAE,MAAM,CAAC,GAAGA,yBAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EAC1C,EAAE,MAAM,CAAC,GAAGA,yBAAY,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;EAC1C,EAAE,MAAM,KAAK,GAAGA,yBAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;EAClD,EAAE,MAAM,MAAM,GAAGA,yBAAY,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EACpD,EAAE,cAAc,GAAGA,yBAAY,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;EACrD,EAAE,aAAa,GAAGA,yBAAY,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;AACnD;EACA,EAAE,MAAM,SAAS,GAAG,KAAK,GAAG,GAAG,CAAC;EAChC,EAAE,MAAM,UAAU,GAAG,MAAM,GAAG,GAAG,CAAC;EAClC,EAAE,MAAM,SAAS,GAAG,CAAC,aAAa,GAAG,cAAc,IAAI,GAAG,CAAC;AAC3D;EACA,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;EAChC,EAAE,MAAM,WAAW,GAAG,UAAU,CAAC;EACjC,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;EAChC,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,SAAS,CAAC;EACpC,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,UAAU,CAAC;EACrC,EAAE,MAAM,WAAW,GAAG,cAAc,GAAG,SAAS,CAAC;EACjD,EAAE,MAAM,WAAW,GAAG,GAAG,CAAC;AAC1B;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;AAC3B;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,UAAU,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;EACxE;EACA,EAAEE,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;EAC5C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;EAChC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EACnB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EACnB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAACM,kBAAU,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;EAChD,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAACA,kBAAU,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;EAC7C,EAAE,MAAM,CAAC,EAAE,CAAC,GAAGA,kBAAU,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;EACnD,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,OAAO,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC5C;EACA,EAAEN,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO;EACX,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,CAAC,CAAC;EACf,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,MAAM,MAAM,CAAC,EAAE,CAAC;EAChB,KAAK,CAAC;EACN,GAAG;EACH,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,eAAe,GAAG,UAAU,MAAM,EAAE,GAAG,EAAE;EACjD;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;EACzD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACtD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;EAC/D,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;EAC5D;AACA;EACA,EAAE,OAAO,MAAM,GAAG,CAAC,GAAG,GAAG,CAAC;EAC1B,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,SAAS,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;EACrD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EAC7D,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;EAC/B,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;EAC/B,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;EACnC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;EACnC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;AACnC;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,SAAS,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;EAChE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EAC7D,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACzC,EAAE,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;EAC/B,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACnC,EAAE,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACvC,EAAE,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACvC,EAAE,MAAM,CAAC,UAAU,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACvC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,MAAM,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;EAClD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EAC7D,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;AAC/B;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,MAAM,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE;EAC7D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;EAC7D,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC1D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACzC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EAC9B,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;EACnC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,cAAc,GAAG,UAAU,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;EAChE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;EAClD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAMQ,eAAa,GAAG,IAAIF,kBAAU,EAAE,CAAC;AACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,QAAQ,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;EACpD;EACA,EAAEN,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAEQ,eAAa,CAAC,CAAC;EAChE,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;EAChD,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;EAChD,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;AAChD;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EACxC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAMC,eAAa,GAAG,IAAIH,kBAAU,EAAE,CAAC;AACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,eAAe,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;EAC3D;EACA,EAAEN,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAES,eAAa,CAAC,CAAC;EAChE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC;EAC9C,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC;EAC9C,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,aAAa,CAAC,CAAC,CAAC;AAC9C;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EACtC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EACxC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAMC,eAAa,GAAG,IAAIJ,kBAAU,EAAE,CAAC;AACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,QAAQ,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC7C;EACA,EAAEN,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAGM,kBAAU,CAAC,SAAS;EACjC,IAAIA,kBAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAEI,eAAa,CAAC;EAC3E,GAAG,CAAC;EACJ,EAAE,MAAM,CAAC,CAAC,GAAGJ,kBAAU,CAAC,SAAS;EACjC,IAAIA,kBAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAEI,eAAa,CAAC;EAC3E,GAAG,CAAC;EACJ,EAAE,MAAM,CAAC,CAAC,GAAGJ,kBAAU,CAAC,SAAS;EACjC,IAAIA,kBAAU,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,EAAEI,eAAa,CAAC;EAC5E,GAAG,CAAC;EACJ,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAMC,eAAa,GAAG,IAAIL,kBAAU,EAAE,CAAC;AACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,eAAe,GAAG,UAAU,MAAM,EAAE;EAC5C,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAEK,eAAa,CAAC,CAAC;EAC1C,EAAE,OAAOL,kBAAU,CAAC,gBAAgB,CAACK,eAAa,CAAC,CAAC;EACpD,CAAC,CAAC;AACF;EACA,MAAMC,eAAa,GAAG,IAAIN,kBAAU,EAAE,CAAC;AACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;EAC1D;EACA,EAAEN,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAEY,eAAa,CAAC,CAAC;AACxD;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EACrC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAMC,eAAa,GAAG,IAAIP,kBAAU,EAAE,CAAC;AACvC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAChD;EACA,EAAEN,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAEa,eAAa,CAAC,CAAC;AACxD;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClC;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAClC;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AACnC;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,QAAQ,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;EAClD;EACA,EAAEb,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAC5B;EACA,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACxE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACxE;EACA,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;EACxE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACxE;EACA,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;EACzE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;EACzE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;EAC1E,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAC1E;EACA,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;EAC3E,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;EAC3E,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;EAC5E,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5E;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,GAAG,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;EAC7C;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,QAAQ,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;EAClD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EACpC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,sBAAsB,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;EAChE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;EACpC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;AAC5B;EACA,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACxE;EACA,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACxE;EACA,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;EACxE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;EACxE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACzE;EACA,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;EACjE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,CAAC;EACjE,EAAE,MAAM,WAAW;EACnB,IAAI,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAClE;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,iBAAiB,GAAG,UAAU,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE;EAChE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;EAC5C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5B;EACA,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9B;EACA,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACxE;EACA,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;EACvE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACxE;EACA,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;EACxE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;EACxE,EAAE,MAAM,WAAW,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACzE;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,qBAAqB,GAAG,UAAU,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE;EACvE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;EAClD,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACxE,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACxE,EAAE,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AACzE;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAClB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,eAAe,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;EAC3D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;AACzB;EACA;EACA,EAAE,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;EAC1D,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EACzC,GAAG;AACH;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACjC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACnC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,sBAAsB,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;EAClE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAChC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAChC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAChC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAChC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAChC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAChC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAChC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;EAChC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;EAClC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1B;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,gBAAgB,GAAG,UAAU,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;EAChE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AACzB;EACA,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAC/E,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAC/E,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;EAChF,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AAChF;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,uBAAuB,GAAG,UAAU,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;EACvE;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AACzB;EACA,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EAC7D,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;EAC7D,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AAC9D;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,eAAe,GAAG,UAAU,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;EAC/D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;EAC9C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC;AACzB;EACA,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1E,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1E,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3E;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;EACf,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,gBAAgB,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;EAC7D;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;EACjC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;EACnC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;EACnC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;EACnC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;EACnC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;EACnC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC;EACnC,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,MAAM,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC3C;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,SAAS,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC9C;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9B;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;EACvB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;EACvB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;EACxB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,GAAG,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EACxC;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;EAClC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;EACpC,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACpC;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,MAAM,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE;EACxC;EACA;EACA;EACA;EACA,EAAE;EACF,IAAI,IAAI,KAAK,KAAK;EAClB,KAAKD,oBAAO,CAAC,IAAI,CAAC;EAClB,MAAMA,oBAAO,CAAC,KAAK,CAAC;EACpB;EACA,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;EAC5B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;EAC5B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;EAC5B;EACA,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;EAC5B;EACA,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC;EAC1B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;EAC5B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;EAC7B,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,aAAa,GAAG,UAAU,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE;EACxD,EAAE,OAAO,GAAGD,yBAAY,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AACrC;EACA,EAAE;EACF,IAAI,IAAI,KAAK,KAAK;EAClB,KAAKC,oBAAO,CAAC,IAAI,CAAC;EAClB,MAAMA,oBAAO,CAAC,KAAK,CAAC;EACpB,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO;EAC7C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;EAC/C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;EAC/C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;EAC/C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;EAC/C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO;EAC/C,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,OAAO,CAAC;EAChD,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,cAAc,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EACnD;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACxB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,UAAU,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC/C;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACxB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACzB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAM,sBAAsB,GAAG,IAAIO,eAAO,EAAE,CAAC;EAC7C,MAAM,kBAAkB,GAAG,IAAIA,eAAO,EAAE,CAAC;EACzC,MAAM,gBAAgB,GAAG,IAAI,UAAU,EAAE,CAAC;EAC1C,MAAM,wBAAwB,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACpE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,OAAO,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC5C;EACA,EAAEP,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;EACA;EACA;EACA;EACA;EACA,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC1B,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EACzB,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EAC3B,EAAE,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC3B;EACA;EACA,EAAE,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;EAC3B,EAAE,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;EAC3B,EAAE,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;EAC1B,EAAE,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;EAC3B,EAAE,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;EAC1B,EAAE,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;EAC3B,EAAE,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;EAC1B,EAAE,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;EAC3B,EAAE,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;EAC1B,EAAE,IAAI,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;EAC3B,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;EAC3B,EAAE,IAAI,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAC3B;EACA;EACA,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;EAC9C,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;EAC9C,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,KAAK,GAAG,IAAI;EAChB,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;EAC/C,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,KAAK,GAAG,IAAI;EAChB,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;EAC/C,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;EAC9C,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;EAC9C,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,KAAK,GAAG,IAAI;EAChB,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;EAC/C,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,KAAK,GAAG,IAAI;EAChB,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;AAC/C;EACA;EACA,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EACrB,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;EACtB,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;AACtB;EACA;EACA,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,KAAK;EAChB,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;EACjD,EAAE,MAAM,IAAI;EACZ,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,KAAK;EAChB,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;EACjD,EAAE,MAAM,KAAK;EACb,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,KAAK,GAAG,KAAK;EACjB,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;EAClD,EAAE,MAAM,KAAK;EACb,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,KAAK,GAAG,KAAK;EACjB,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC;EAClD,EAAE,MAAM,KAAK;EACb,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,IAAI;EACf,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC;EAChD,EAAE,MAAM,KAAK;EACb,IAAI,IAAI,GAAG,KAAK;EAChB,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,KAAK;EAChB,KAAK,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;EAChD,EAAE,MAAM,KAAK;EACb,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,KAAK,GAAG,KAAK;EACjB,IAAI,IAAI,GAAG,IAAI;EACf,KAAK,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;EAChD,EAAE,MAAM,KAAK;EACb,IAAI,KAAK,GAAG,KAAK;EACjB,IAAI,IAAI,GAAG,IAAI;EACf,IAAI,IAAI,GAAG,IAAI;EACf,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AAChD;EACA;EACA,EAAE,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAClE;EACA,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAGE,iBAAU,CAAC,SAAS,EAAE;EAC5C;EACA;EACA,IAAI;EACJ,MAAMK,eAAO,CAAC,aAAa;EAC3B,QAAQ,OAAO,CAAC,UAAU,CAAC,MAAM,EAAE,sBAAsB,CAAC;EAC1D,QAAQ,kBAAkB;EAC1B,QAAQL,iBAAU,CAAC,QAAQ;EAC3B,OAAO;EACP,MAAM,UAAU,CAAC,MAAM;EACvB,QAAQ,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,gBAAgB,CAAC;EACnD,QAAQ,wBAAwB;EAChC,OAAO;EACP,MAAM;EACN,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACtB,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC/B,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC/B,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;EAC/B,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,MAAM,CAAC;EACpB,KAAK;AACL;EACA,IAAI,MAAM,IAAIY,yBAAY;EAC1B,MAAM,2DAA2D;EACjE,KAAK,CAAC;EACN,GAAG;AACH;EACA;EACA,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAClB;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC;EACzB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;EAC3B,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;EAC3B,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,qBAAqB,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EAC1D;EACA,EAAEd,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA;EACA;EACA;EACA;EACA;AACA;EACA,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AAC9B;EACA,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACxB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;EACxB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;AACxB;EACA,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC;EACxD,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,CAAC;EACxD,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,GAAG,EAAE,GAAG,QAAQ,GAAG,EAAE,CAAC;AACzD;EACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;EACtB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC;EACxB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACjB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACjB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;EACjB,EAAE,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACnB,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAM,sBAAsB,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,gBAAgB,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE;EACrD;EACA,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;EACxC;AACA;EACA,EAAE,OAAO,OAAO,CAAC,OAAO;EACxB,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,EAAE,sBAAsB,CAAC;EACrD,IAAI,MAAM;EACV,GAAG,CAAC;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM;EAChC,EAAE,IAAI,OAAO;EACb,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,GAAG;EACH,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM;EAC5B,EAAE,IAAI,OAAO;EACb,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,IAAI,GAAG;EACP,GAAG;EACH,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC;AACxB;EAC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"} \ No newline at end of file diff --git a/debug/cesium/Workers/Matrix3-f22b0303.js b/debug/cesium/Workers/Matrix3-f22b0303.js deleted file mode 100644 index 34f2201..0000000 --- a/debug/cesium/Workers/Matrix3-f22b0303.js +++ /dev/null @@ -1,4308 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918'], (function (exports, Check, defaultValue, Math$1) { 'use strict'; - - /** - * A 3D Cartesian point. - * @alias Cartesian3 - * @constructor - * - * @param {Number} [x=0.0] The X component. - * @param {Number} [y=0.0] The Y component. - * @param {Number} [z=0.0] The Z component. - * - * @see Cartesian2 - * @see Cartesian4 - * @see Packable - */ - function Cartesian3(x, y, z) { - /** - * The X component. - * @type {Number} - * @default 0.0 - */ - this.x = defaultValue.defaultValue(x, 0.0); - - /** - * The Y component. - * @type {Number} - * @default 0.0 - */ - this.y = defaultValue.defaultValue(y, 0.0); - - /** - * The Z component. - * @type {Number} - * @default 0.0 - */ - this.z = defaultValue.defaultValue(z, 0.0); - } - - /** - * Converts the provided Spherical into Cartesian3 coordinates. - * - * @param {Spherical} spherical The Spherical to be converted to Cartesian3. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. - */ - Cartesian3.fromSpherical = function (spherical, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("spherical", spherical); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - - const clock = spherical.clock; - const cone = spherical.cone; - const magnitude = defaultValue.defaultValue(spherical.magnitude, 1.0); - const radial = magnitude * Math.sin(cone); - result.x = radial * Math.cos(clock); - result.y = radial * Math.sin(clock); - result.z = magnitude * Math.cos(cone); - return result; - }; - - /** - * Creates a Cartesian3 instance from x, y and z coordinates. - * - * @param {Number} x The x coordinate. - * @param {Number} y The y coordinate. - * @param {Number} z The z coordinate. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. - */ - Cartesian3.fromElements = function (x, y, z, result) { - if (!defaultValue.defined(result)) { - return new Cartesian3(x, y, z); - } - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Duplicates a Cartesian3 instance. - * - * @param {Cartesian3} cartesian The Cartesian to duplicate. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. (Returns undefined if cartesian is undefined) - */ - Cartesian3.clone = function (cartesian, result) { - if (!defaultValue.defined(cartesian)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new Cartesian3(cartesian.x, cartesian.y, cartesian.z); - } - - result.x = cartesian.x; - result.y = cartesian.y; - result.z = cartesian.z; - return result; - }; - - /** - * Creates a Cartesian3 instance from an existing Cartesian4. This simply takes the - * x, y, and z properties of the Cartesian4 and drops w. - * @function - * - * @param {Cartesian4} cartesian The Cartesian4 instance to create a Cartesian3 instance from. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. - */ - Cartesian3.fromCartesian4 = Cartesian3.clone; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Cartesian3.packedLength = 3; - - /** - * Stores the provided instance into the provided array. - * - * @param {Cartesian3} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Cartesian3.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.x; - array[startingIndex++] = value.y; - array[startingIndex] = value.z; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Cartesian3} [result] The object into which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. - */ - Cartesian3.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - result.x = array[startingIndex++]; - result.y = array[startingIndex++]; - result.z = array[startingIndex]; - return result; - }; - - /** - * Flattens an array of Cartesian3s into an array of components. - * - * @param {Cartesian3[]} array The array of cartesians to pack. - * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 3 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 3) elements. - * @returns {Number[]} The packed array. - */ - Cartesian3.packArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - const length = array.length; - const resultLength = length * 3; - if (!defaultValue.defined(result)) { - result = new Array(resultLength); - } else if (!Array.isArray(result) && result.length !== resultLength) { - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "If result is a typed array, it must have exactly array.length * 3 elements" - ); - //>>includeEnd('debug'); - } else if (result.length !== resultLength) { - result.length = resultLength; - } - - for (let i = 0; i < length; ++i) { - Cartesian3.pack(array[i], result, i * 3); - } - return result; - }; - - /** - * Unpacks an array of cartesian components into an array of Cartesian3s. - * - * @param {Number[]} array The array of components to unpack. - * @param {Cartesian3[]} [result] The array onto which to store the result. - * @returns {Cartesian3[]} The unpacked array. - */ - Cartesian3.unpackArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - Check.Check.typeOf.number.greaterThanOrEquals("array.length", array.length, 3); - if (array.length % 3 !== 0) { - throw new Check.DeveloperError("array length must be a multiple of 3."); - } - //>>includeEnd('debug'); - - const length = array.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 3); - } else { - result.length = length / 3; - } - - for (let i = 0; i < length; i += 3) { - const index = i / 3; - result[index] = Cartesian3.unpack(array, i, result[index]); - } - return result; - }; - - /** - * Creates a Cartesian3 from three consecutive elements in an array. - * @function - * - * @param {Number[]} array The array whose three consecutive elements correspond to the x, y, and z components, respectively. - * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. - * - * @example - * // Create a Cartesian3 with (1.0, 2.0, 3.0) - * const v = [1.0, 2.0, 3.0]; - * const p = Cesium.Cartesian3.fromArray(v); - * - * // Create a Cartesian3 with (1.0, 2.0, 3.0) using an offset into an array - * const v2 = [0.0, 0.0, 1.0, 2.0, 3.0]; - * const p2 = Cesium.Cartesian3.fromArray(v2, 2); - */ - Cartesian3.fromArray = Cartesian3.unpack; - - /** - * Computes the value of the maximum component for the supplied Cartesian. - * - * @param {Cartesian3} cartesian The cartesian to use. - * @returns {Number} The value of the maximum component. - */ - Cartesian3.maximumComponent = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return Math.max(cartesian.x, cartesian.y, cartesian.z); - }; - - /** - * Computes the value of the minimum component for the supplied Cartesian. - * - * @param {Cartesian3} cartesian The cartesian to use. - * @returns {Number} The value of the minimum component. - */ - Cartesian3.minimumComponent = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return Math.min(cartesian.x, cartesian.y, cartesian.z); - }; - - /** - * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians. - * - * @param {Cartesian3} first A cartesian to compare. - * @param {Cartesian3} second A cartesian to compare. - * @param {Cartesian3} result The object into which to store the result. - * @returns {Cartesian3} A cartesian with the minimum components. - */ - Cartesian3.minimumByComponent = function (first, second, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("first", first); - Check.Check.typeOf.object("second", second); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.min(first.x, second.x); - result.y = Math.min(first.y, second.y); - result.z = Math.min(first.z, second.z); - - return result; - }; - - /** - * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians. - * - * @param {Cartesian3} first A cartesian to compare. - * @param {Cartesian3} second A cartesian to compare. - * @param {Cartesian3} result The object into which to store the result. - * @returns {Cartesian3} A cartesian with the maximum components. - */ - Cartesian3.maximumByComponent = function (first, second, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("first", first); - Check.Check.typeOf.object("second", second); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.max(first.x, second.x); - result.y = Math.max(first.y, second.y); - result.z = Math.max(first.z, second.z); - return result; - }; - - /** - * Constrain a value to lie between two values. - * - * @param {Cartesian3} cartesian The value to clamp. - * @param {Cartesian3} min The minimum bound. - * @param {Cartesian3} max The maximum bound. - * @param {Cartesian3} result The object into which to store the result. - * @returns {Cartesian3} The clamped value such that min <= value <= max. - */ - Cartesian3.clamp = function (value, min, max, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.typeOf.object("min", min); - Check.Check.typeOf.object("max", max); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const x = Math$1.CesiumMath.clamp(value.x, min.x, max.x); - const y = Math$1.CesiumMath.clamp(value.y, min.y, max.y); - const z = Math$1.CesiumMath.clamp(value.z, min.z, max.z); - - result.x = x; - result.y = y; - result.z = z; - - return result; - }; - - /** - * Computes the provided Cartesian's squared magnitude. - * - * @param {Cartesian3} cartesian The Cartesian instance whose squared magnitude is to be computed. - * @returns {Number} The squared magnitude. - */ - Cartesian3.magnitudeSquared = function (cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - return ( - cartesian.x * cartesian.x + - cartesian.y * cartesian.y + - cartesian.z * cartesian.z - ); - }; - - /** - * Computes the Cartesian's magnitude (length). - * - * @param {Cartesian3} cartesian The Cartesian instance whose magnitude is to be computed. - * @returns {Number} The magnitude. - */ - Cartesian3.magnitude = function (cartesian) { - return Math.sqrt(Cartesian3.magnitudeSquared(cartesian)); - }; - - const distanceScratch = new Cartesian3(); - - /** - * Computes the distance between two points. - * - * @param {Cartesian3} left The first point to compute the distance from. - * @param {Cartesian3} right The second point to compute the distance to. - * @returns {Number} The distance between two points. - * - * @example - * // Returns 1.0 - * const d = Cesium.Cartesian3.distance(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(2.0, 0.0, 0.0)); - */ - Cartesian3.distance = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - Cartesian3.subtract(left, right, distanceScratch); - return Cartesian3.magnitude(distanceScratch); - }; - - /** - * Computes the squared distance between two points. Comparing squared distances - * using this function is more efficient than comparing distances using {@link Cartesian3#distance}. - * - * @param {Cartesian3} left The first point to compute the distance from. - * @param {Cartesian3} right The second point to compute the distance to. - * @returns {Number} The distance between two points. - * - * @example - * // Returns 4.0, not 2.0 - * const d = Cesium.Cartesian3.distanceSquared(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(3.0, 0.0, 0.0)); - */ - Cartesian3.distanceSquared = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - Cartesian3.subtract(left, right, distanceScratch); - return Cartesian3.magnitudeSquared(distanceScratch); - }; - - /** - * Computes the normalized form of the supplied Cartesian. - * - * @param {Cartesian3} cartesian The Cartesian to be normalized. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.normalize = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const magnitude = Cartesian3.magnitude(cartesian); - - result.x = cartesian.x / magnitude; - result.y = cartesian.y / magnitude; - result.z = cartesian.z / magnitude; - - //>>includeStart('debug', pragmas.debug); - if (isNaN(result.x) || isNaN(result.y) || isNaN(result.z)) { - throw new Check.DeveloperError("normalized result is not a number"); - } - //>>includeEnd('debug'); - - return result; - }; - - /** - * Computes the dot (scalar) product of two Cartesians. - * - * @param {Cartesian3} left The first Cartesian. - * @param {Cartesian3} right The second Cartesian. - * @returns {Number} The dot product. - */ - Cartesian3.dot = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - return left.x * right.x + left.y * right.y + left.z * right.z; - }; - - /** - * Computes the componentwise product of two Cartesians. - * - * @param {Cartesian3} left The first Cartesian. - * @param {Cartesian3} right The second Cartesian. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.multiplyComponents = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x * right.x; - result.y = left.y * right.y; - result.z = left.z * right.z; - return result; - }; - - /** - * Computes the componentwise quotient of two Cartesians. - * - * @param {Cartesian3} left The first Cartesian. - * @param {Cartesian3} right The second Cartesian. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.divideComponents = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x / right.x; - result.y = left.y / right.y; - result.z = left.z / right.z; - return result; - }; - - /** - * Computes the componentwise sum of two Cartesians. - * - * @param {Cartesian3} left The first Cartesian. - * @param {Cartesian3} right The second Cartesian. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.add = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x + right.x; - result.y = left.y + right.y; - result.z = left.z + right.z; - return result; - }; - - /** - * Computes the componentwise difference of two Cartesians. - * - * @param {Cartesian3} left The first Cartesian. - * @param {Cartesian3} right The second Cartesian. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.subtract = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x - right.x; - result.y = left.y - right.y; - result.z = left.z - right.z; - return result; - }; - - /** - * Multiplies the provided Cartesian componentwise by the provided scalar. - * - * @param {Cartesian3} cartesian The Cartesian to be scaled. - * @param {Number} scalar The scalar to multiply with. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.multiplyByScalar = function (cartesian, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = cartesian.x * scalar; - result.y = cartesian.y * scalar; - result.z = cartesian.z * scalar; - return result; - }; - - /** - * Divides the provided Cartesian componentwise by the provided scalar. - * - * @param {Cartesian3} cartesian The Cartesian to be divided. - * @param {Number} scalar The scalar to divide by. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.divideByScalar = function (cartesian, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = cartesian.x / scalar; - result.y = cartesian.y / scalar; - result.z = cartesian.z / scalar; - return result; - }; - - /** - * Negates the provided Cartesian. - * - * @param {Cartesian3} cartesian The Cartesian to be negated. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.negate = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = -cartesian.x; - result.y = -cartesian.y; - result.z = -cartesian.z; - return result; - }; - - /** - * Computes the absolute value of the provided Cartesian. - * - * @param {Cartesian3} cartesian The Cartesian whose absolute value is to be computed. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.abs = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Math.abs(cartesian.x); - result.y = Math.abs(cartesian.y); - result.z = Math.abs(cartesian.z); - return result; - }; - - const lerpScratch = new Cartesian3(); - /** - * Computes the linear interpolation or extrapolation at t using the provided cartesians. - * - * @param {Cartesian3} start The value corresponding to t at 0.0. - * @param {Cartesian3} end The value corresponding to t at 1.0. - * @param {Number} t The point along t at which to interpolate. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Cartesian3.lerp = function (start, end, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("start", start); - Check.Check.typeOf.object("end", end); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - Cartesian3.multiplyByScalar(end, t, lerpScratch); - result = Cartesian3.multiplyByScalar(start, 1.0 - t, result); - return Cartesian3.add(lerpScratch, result, result); - }; - - const angleBetweenScratch = new Cartesian3(); - const angleBetweenScratch2 = new Cartesian3(); - /** - * Returns the angle, in radians, between the provided Cartesians. - * - * @param {Cartesian3} left The first Cartesian. - * @param {Cartesian3} right The second Cartesian. - * @returns {Number} The angle between the Cartesians. - */ - Cartesian3.angleBetween = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - Cartesian3.normalize(left, angleBetweenScratch); - Cartesian3.normalize(right, angleBetweenScratch2); - const cosine = Cartesian3.dot(angleBetweenScratch, angleBetweenScratch2); - const sine = Cartesian3.magnitude( - Cartesian3.cross( - angleBetweenScratch, - angleBetweenScratch2, - angleBetweenScratch - ) - ); - return Math.atan2(sine, cosine); - }; - - const mostOrthogonalAxisScratch = new Cartesian3(); - /** - * Returns the axis that is most orthogonal to the provided Cartesian. - * - * @param {Cartesian3} cartesian The Cartesian on which to find the most orthogonal axis. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The most orthogonal axis. - */ - Cartesian3.mostOrthogonalAxis = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const f = Cartesian3.normalize(cartesian, mostOrthogonalAxisScratch); - Cartesian3.abs(f, f); - - if (f.x <= f.y) { - if (f.x <= f.z) { - result = Cartesian3.clone(Cartesian3.UNIT_X, result); - } else { - result = Cartesian3.clone(Cartesian3.UNIT_Z, result); - } - } else if (f.y <= f.z) { - result = Cartesian3.clone(Cartesian3.UNIT_Y, result); - } else { - result = Cartesian3.clone(Cartesian3.UNIT_Z, result); - } - - return result; - }; - - /** - * Projects vector a onto vector b - * @param {Cartesian3} a The vector that needs projecting - * @param {Cartesian3} b The vector to project onto - * @param {Cartesian3} result The result cartesian - * @returns {Cartesian3} The modified result parameter - */ - Cartesian3.projectVector = function (a, b, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("a", a); - Check.Check.defined("b", b); - Check.Check.defined("result", result); - //>>includeEnd('debug'); - - const scalar = Cartesian3.dot(a, b) / Cartesian3.dot(b, b); - return Cartesian3.multiplyByScalar(b, scalar, result); - }; - - /** - * Compares the provided Cartesians componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Cartesian3} [left] The first Cartesian. - * @param {Cartesian3} [right] The second Cartesian. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Cartesian3.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.x === right.x && - left.y === right.y && - left.z === right.z) - ); - }; - - /** - * @private - */ - Cartesian3.equalsArray = function (cartesian, array, offset) { - return ( - cartesian.x === array[offset] && - cartesian.y === array[offset + 1] && - cartesian.z === array[offset + 2] - ); - }; - - /** - * Compares the provided Cartesians componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {Cartesian3} [left] The first Cartesian. - * @param {Cartesian3} [right] The second Cartesian. - * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Cartesian3.equalsEpsilon = function ( - left, - right, - relativeEpsilon, - absoluteEpsilon - ) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math$1.CesiumMath.equalsEpsilon( - left.x, - right.x, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - left.y, - right.y, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - left.z, - right.z, - relativeEpsilon, - absoluteEpsilon - )) - ); - }; - - /** - * Computes the cross (outer) product of two Cartesians. - * - * @param {Cartesian3} left The first Cartesian. - * @param {Cartesian3} right The second Cartesian. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The cross product. - */ - Cartesian3.cross = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const leftX = left.x; - const leftY = left.y; - const leftZ = left.z; - const rightX = right.x; - const rightY = right.y; - const rightZ = right.z; - - const x = leftY * rightZ - leftZ * rightY; - const y = leftZ * rightX - leftX * rightZ; - const z = leftX * rightY - leftY * rightX; - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Computes the midpoint between the right and left Cartesian. - * @param {Cartesian3} left The first Cartesian. - * @param {Cartesian3} right The second Cartesian. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The midpoint. - */ - Cartesian3.midpoint = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = (left.x + right.x) * 0.5; - result.y = (left.y + right.y) * 0.5; - result.z = (left.z + right.z) * 0.5; - - return result; - }; - - /** - * Returns a Cartesian3 position from longitude and latitude values given in degrees. - * - * @param {Number} longitude The longitude, in degrees - * @param {Number} latitude The latitude, in degrees - * @param {Number} [height=0.0] The height, in meters, above the ellipsoid. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The position - * - * @example - * const position = Cesium.Cartesian3.fromDegrees(-115.0, 37.0); - */ - Cartesian3.fromDegrees = function ( - longitude, - latitude, - height, - ellipsoid, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("longitude", longitude); - Check.Check.typeOf.number("latitude", latitude); - //>>includeEnd('debug'); - - longitude = Math$1.CesiumMath.toRadians(longitude); - latitude = Math$1.CesiumMath.toRadians(latitude); - return Cartesian3.fromRadians(longitude, latitude, height, ellipsoid, result); - }; - - let scratchN = new Cartesian3(); - let scratchK = new Cartesian3(); - const wgs84RadiiSquared = new Cartesian3( - 6378137.0 * 6378137.0, - 6378137.0 * 6378137.0, - 6356752.3142451793 * 6356752.3142451793 - ); - - /** - * Returns a Cartesian3 position from longitude and latitude values given in radians. - * - * @param {Number} longitude The longitude, in radians - * @param {Number} latitude The latitude, in radians - * @param {Number} [height=0.0] The height, in meters, above the ellipsoid. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The position - * - * @example - * const position = Cesium.Cartesian3.fromRadians(-2.007, 0.645); - */ - Cartesian3.fromRadians = function ( - longitude, - latitude, - height, - ellipsoid, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("longitude", longitude); - Check.Check.typeOf.number("latitude", latitude); - //>>includeEnd('debug'); - - height = defaultValue.defaultValue(height, 0.0); - const radiiSquared = defaultValue.defined(ellipsoid) - ? ellipsoid.radiiSquared - : wgs84RadiiSquared; - - const cosLatitude = Math.cos(latitude); - scratchN.x = cosLatitude * Math.cos(longitude); - scratchN.y = cosLatitude * Math.sin(longitude); - scratchN.z = Math.sin(latitude); - scratchN = Cartesian3.normalize(scratchN, scratchN); - - Cartesian3.multiplyComponents(radiiSquared, scratchN, scratchK); - const gamma = Math.sqrt(Cartesian3.dot(scratchN, scratchK)); - scratchK = Cartesian3.divideByScalar(scratchK, gamma, scratchK); - scratchN = Cartesian3.multiplyByScalar(scratchN, height, scratchN); - - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - return Cartesian3.add(scratchK, scratchN, result); - }; - - /** - * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in degrees. - * - * @param {Number[]} coordinates A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...]. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the coordinates lie. - * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result. - * @returns {Cartesian3[]} The array of positions. - * - * @example - * const positions = Cesium.Cartesian3.fromDegreesArray([-115.0, 37.0, -107.0, 33.0]); - */ - Cartesian3.fromDegreesArray = function (coordinates, ellipsoid, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("coordinates", coordinates); - if (coordinates.length < 2 || coordinates.length % 2 !== 0) { - throw new Check.DeveloperError( - "the number of coordinates must be a multiple of 2 and at least 2" - ); - } - //>>includeEnd('debug'); - - const length = coordinates.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 2); - } else { - result.length = length / 2; - } - - for (let i = 0; i < length; i += 2) { - const longitude = coordinates[i]; - const latitude = coordinates[i + 1]; - const index = i / 2; - result[index] = Cartesian3.fromDegrees( - longitude, - latitude, - 0, - ellipsoid, - result[index] - ); - } - - return result; - }; - - /** - * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in radians. - * - * @param {Number[]} coordinates A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...]. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the coordinates lie. - * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result. - * @returns {Cartesian3[]} The array of positions. - * - * @example - * const positions = Cesium.Cartesian3.fromRadiansArray([-2.007, 0.645, -1.867, .575]); - */ - Cartesian3.fromRadiansArray = function (coordinates, ellipsoid, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("coordinates", coordinates); - if (coordinates.length < 2 || coordinates.length % 2 !== 0) { - throw new Check.DeveloperError( - "the number of coordinates must be a multiple of 2 and at least 2" - ); - } - //>>includeEnd('debug'); - - const length = coordinates.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 2); - } else { - result.length = length / 2; - } - - for (let i = 0; i < length; i += 2) { - const longitude = coordinates[i]; - const latitude = coordinates[i + 1]; - const index = i / 2; - result[index] = Cartesian3.fromRadians( - longitude, - latitude, - 0, - ellipsoid, - result[index] - ); - } - - return result; - }; - - /** - * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in degrees. - * - * @param {Number[]} coordinates A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...]. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies. - * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result. - * @returns {Cartesian3[]} The array of positions. - * - * @example - * const positions = Cesium.Cartesian3.fromDegreesArrayHeights([-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]); - */ - Cartesian3.fromDegreesArrayHeights = function (coordinates, ellipsoid, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("coordinates", coordinates); - if (coordinates.length < 3 || coordinates.length % 3 !== 0) { - throw new Check.DeveloperError( - "the number of coordinates must be a multiple of 3 and at least 3" - ); - } - //>>includeEnd('debug'); - - const length = coordinates.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 3); - } else { - result.length = length / 3; - } - - for (let i = 0; i < length; i += 3) { - const longitude = coordinates[i]; - const latitude = coordinates[i + 1]; - const height = coordinates[i + 2]; - const index = i / 3; - result[index] = Cartesian3.fromDegrees( - longitude, - latitude, - height, - ellipsoid, - result[index] - ); - } - - return result; - }; - - /** - * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in radians. - * - * @param {Number[]} coordinates A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...]. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies. - * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result. - * @returns {Cartesian3[]} The array of positions. - * - * @example - * const positions = Cesium.Cartesian3.fromRadiansArrayHeights([-2.007, 0.645, 100000.0, -1.867, .575, 150000.0]); - */ - Cartesian3.fromRadiansArrayHeights = function (coordinates, ellipsoid, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("coordinates", coordinates); - if (coordinates.length < 3 || coordinates.length % 3 !== 0) { - throw new Check.DeveloperError( - "the number of coordinates must be a multiple of 3 and at least 3" - ); - } - //>>includeEnd('debug'); - - const length = coordinates.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 3); - } else { - result.length = length / 3; - } - - for (let i = 0; i < length; i += 3) { - const longitude = coordinates[i]; - const latitude = coordinates[i + 1]; - const height = coordinates[i + 2]; - const index = i / 3; - result[index] = Cartesian3.fromRadians( - longitude, - latitude, - height, - ellipsoid, - result[index] - ); - } - - return result; - }; - - /** - * An immutable Cartesian3 instance initialized to (0.0, 0.0, 0.0). - * - * @type {Cartesian3} - * @constant - */ - Cartesian3.ZERO = Object.freeze(new Cartesian3(0.0, 0.0, 0.0)); - - /** - * An immutable Cartesian3 instance initialized to (1.0, 1.0, 1.0). - * - * @type {Cartesian3} - * @constant - */ - Cartesian3.ONE = Object.freeze(new Cartesian3(1.0, 1.0, 1.0)); - - /** - * An immutable Cartesian3 instance initialized to (1.0, 0.0, 0.0). - * - * @type {Cartesian3} - * @constant - */ - Cartesian3.UNIT_X = Object.freeze(new Cartesian3(1.0, 0.0, 0.0)); - - /** - * An immutable Cartesian3 instance initialized to (0.0, 1.0, 0.0). - * - * @type {Cartesian3} - * @constant - */ - Cartesian3.UNIT_Y = Object.freeze(new Cartesian3(0.0, 1.0, 0.0)); - - /** - * An immutable Cartesian3 instance initialized to (0.0, 0.0, 1.0). - * - * @type {Cartesian3} - * @constant - */ - Cartesian3.UNIT_Z = Object.freeze(new Cartesian3(0.0, 0.0, 1.0)); - - /** - * Duplicates this Cartesian3 instance. - * - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. - */ - Cartesian3.prototype.clone = function (result) { - return Cartesian3.clone(this, result); - }; - - /** - * Compares this Cartesian against the provided Cartesian componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Cartesian3} [right] The right hand side Cartesian. - * @returns {Boolean} true if they are equal, false otherwise. - */ - Cartesian3.prototype.equals = function (right) { - return Cartesian3.equals(this, right); - }; - - /** - * Compares this Cartesian against the provided Cartesian componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {Cartesian3} [right] The right hand side Cartesian. - * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if they are within the provided epsilon, false otherwise. - */ - Cartesian3.prototype.equalsEpsilon = function ( - right, - relativeEpsilon, - absoluteEpsilon - ) { - return Cartesian3.equalsEpsilon( - this, - right, - relativeEpsilon, - absoluteEpsilon - ); - }; - - /** - * Creates a string representing this Cartesian in the format '(x, y, z)'. - * - * @returns {String} A string representing this Cartesian in the format '(x, y, z)'. - */ - Cartesian3.prototype.toString = function () { - return `(${this.x}, ${this.y}, ${this.z})`; - }; - - const scaleToGeodeticSurfaceIntersection = new Cartesian3(); - const scaleToGeodeticSurfaceGradient = new Cartesian3(); - - /** - * Scales the provided Cartesian position along the geodetic surface normal - * so that it is on the surface of this ellipsoid. If the position is - * at the center of the ellipsoid, this function returns undefined. - * - * @param {Cartesian3} cartesian The Cartesian position to scale. - * @param {Cartesian3} oneOverRadii One over radii of the ellipsoid. - * @param {Cartesian3} oneOverRadiiSquared One over radii squared of the ellipsoid. - * @param {Number} centerToleranceSquared Tolerance for closeness to the center. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center. - * - * @function scaleToGeodeticSurface - * - * @private - */ - function scaleToGeodeticSurface( - cartesian, - oneOverRadii, - oneOverRadiiSquared, - centerToleranceSquared, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(cartesian)) { - throw new Check.DeveloperError("cartesian is required."); - } - if (!defaultValue.defined(oneOverRadii)) { - throw new Check.DeveloperError("oneOverRadii is required."); - } - if (!defaultValue.defined(oneOverRadiiSquared)) { - throw new Check.DeveloperError("oneOverRadiiSquared is required."); - } - if (!defaultValue.defined(centerToleranceSquared)) { - throw new Check.DeveloperError("centerToleranceSquared is required."); - } - //>>includeEnd('debug'); - - const positionX = cartesian.x; - const positionY = cartesian.y; - const positionZ = cartesian.z; - - const oneOverRadiiX = oneOverRadii.x; - const oneOverRadiiY = oneOverRadii.y; - const oneOverRadiiZ = oneOverRadii.z; - - const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX; - const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY; - const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ; - - // Compute the squared ellipsoid norm. - const squaredNorm = x2 + y2 + z2; - const ratio = Math.sqrt(1.0 / squaredNorm); - - // As an initial approximation, assume that the radial intersection is the projection point. - const intersection = Cartesian3.multiplyByScalar( - cartesian, - ratio, - scaleToGeodeticSurfaceIntersection - ); - - // If the position is near the center, the iteration will not converge. - if (squaredNorm < centerToleranceSquared) { - return !isFinite(ratio) - ? undefined - : Cartesian3.clone(intersection, result); - } - - const oneOverRadiiSquaredX = oneOverRadiiSquared.x; - const oneOverRadiiSquaredY = oneOverRadiiSquared.y; - const oneOverRadiiSquaredZ = oneOverRadiiSquared.z; - - // Use the gradient at the intersection point in place of the true unit normal. - // The difference in magnitude will be absorbed in the multiplier. - const gradient = scaleToGeodeticSurfaceGradient; - gradient.x = intersection.x * oneOverRadiiSquaredX * 2.0; - gradient.y = intersection.y * oneOverRadiiSquaredY * 2.0; - gradient.z = intersection.z * oneOverRadiiSquaredZ * 2.0; - - // Compute the initial guess at the normal vector multiplier, lambda. - let lambda = - ((1.0 - ratio) * Cartesian3.magnitude(cartesian)) / - (0.5 * Cartesian3.magnitude(gradient)); - let correction = 0.0; - - let func; - let denominator; - let xMultiplier; - let yMultiplier; - let zMultiplier; - let xMultiplier2; - let yMultiplier2; - let zMultiplier2; - let xMultiplier3; - let yMultiplier3; - let zMultiplier3; - - do { - lambda -= correction; - - xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX); - yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY); - zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ); - - xMultiplier2 = xMultiplier * xMultiplier; - yMultiplier2 = yMultiplier * yMultiplier; - zMultiplier2 = zMultiplier * zMultiplier; - - xMultiplier3 = xMultiplier2 * xMultiplier; - yMultiplier3 = yMultiplier2 * yMultiplier; - zMultiplier3 = zMultiplier2 * zMultiplier; - - func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0; - - // "denominator" here refers to the use of this expression in the velocity and acceleration - // computations in the sections to follow. - denominator = - x2 * xMultiplier3 * oneOverRadiiSquaredX + - y2 * yMultiplier3 * oneOverRadiiSquaredY + - z2 * zMultiplier3 * oneOverRadiiSquaredZ; - - const derivative = -2.0 * denominator; - - correction = func / derivative; - } while (Math.abs(func) > Math$1.CesiumMath.EPSILON12); - - if (!defaultValue.defined(result)) { - return new Cartesian3( - positionX * xMultiplier, - positionY * yMultiplier, - positionZ * zMultiplier - ); - } - result.x = positionX * xMultiplier; - result.y = positionY * yMultiplier; - result.z = positionZ * zMultiplier; - return result; - } - - /** - * A position defined by longitude, latitude, and height. - * @alias Cartographic - * @constructor - * - * @param {Number} [longitude=0.0] The longitude, in radians. - * @param {Number} [latitude=0.0] The latitude, in radians. - * @param {Number} [height=0.0] The height, in meters, above the ellipsoid. - * - * @see Ellipsoid - */ - function Cartographic(longitude, latitude, height) { - /** - * The longitude, in radians. - * @type {Number} - * @default 0.0 - */ - this.longitude = defaultValue.defaultValue(longitude, 0.0); - - /** - * The latitude, in radians. - * @type {Number} - * @default 0.0 - */ - this.latitude = defaultValue.defaultValue(latitude, 0.0); - - /** - * The height, in meters, above the ellipsoid. - * @type {Number} - * @default 0.0 - */ - this.height = defaultValue.defaultValue(height, 0.0); - } - - /** - * Creates a new Cartographic instance from longitude and latitude - * specified in radians. - * - * @param {Number} longitude The longitude, in radians. - * @param {Number} latitude The latitude, in radians. - * @param {Number} [height=0.0] The height, in meters, above the ellipsoid. - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided. - */ - Cartographic.fromRadians = function (longitude, latitude, height, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("longitude", longitude); - Check.Check.typeOf.number("latitude", latitude); - //>>includeEnd('debug'); - - height = defaultValue.defaultValue(height, 0.0); - - if (!defaultValue.defined(result)) { - return new Cartographic(longitude, latitude, height); - } - - result.longitude = longitude; - result.latitude = latitude; - result.height = height; - return result; - }; - - /** - * Creates a new Cartographic instance from longitude and latitude - * specified in degrees. The values in the resulting object will - * be in radians. - * - * @param {Number} longitude The longitude, in degrees. - * @param {Number} latitude The latitude, in degrees. - * @param {Number} [height=0.0] The height, in meters, above the ellipsoid. - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided. - */ - Cartographic.fromDegrees = function (longitude, latitude, height, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("longitude", longitude); - Check.Check.typeOf.number("latitude", latitude); - //>>includeEnd('debug'); - longitude = Math$1.CesiumMath.toRadians(longitude); - latitude = Math$1.CesiumMath.toRadians(latitude); - - return Cartographic.fromRadians(longitude, latitude, height, result); - }; - - const cartesianToCartographicN$1 = new Cartesian3(); - const cartesianToCartographicP$1 = new Cartesian3(); - const cartesianToCartographicH$1 = new Cartesian3(); - const wgs84OneOverRadii = new Cartesian3( - 1.0 / 6378137.0, - 1.0 / 6378137.0, - 1.0 / 6356752.3142451793 - ); - const wgs84OneOverRadiiSquared = new Cartesian3( - 1.0 / (6378137.0 * 6378137.0), - 1.0 / (6378137.0 * 6378137.0), - 1.0 / (6356752.3142451793 * 6356752.3142451793) - ); - const wgs84CenterToleranceSquared = Math$1.CesiumMath.EPSILON1; - - /** - * Creates a new Cartographic instance from a Cartesian position. The values in the - * resulting object will be in radians. - * - * @param {Cartesian3} cartesian The Cartesian position to convert to cartographic representation. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies. - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid. - */ - Cartographic.fromCartesian = function (cartesian, ellipsoid, result) { - const oneOverRadii = defaultValue.defined(ellipsoid) - ? ellipsoid.oneOverRadii - : wgs84OneOverRadii; - const oneOverRadiiSquared = defaultValue.defined(ellipsoid) - ? ellipsoid.oneOverRadiiSquared - : wgs84OneOverRadiiSquared; - const centerToleranceSquared = defaultValue.defined(ellipsoid) - ? ellipsoid._centerToleranceSquared - : wgs84CenterToleranceSquared; - - //`cartesian is required.` is thrown from scaleToGeodeticSurface - const p = scaleToGeodeticSurface( - cartesian, - oneOverRadii, - oneOverRadiiSquared, - centerToleranceSquared, - cartesianToCartographicP$1 - ); - - if (!defaultValue.defined(p)) { - return undefined; - } - - let n = Cartesian3.multiplyComponents( - p, - oneOverRadiiSquared, - cartesianToCartographicN$1 - ); - n = Cartesian3.normalize(n, n); - - const h = Cartesian3.subtract(cartesian, p, cartesianToCartographicH$1); - - const longitude = Math.atan2(n.y, n.x); - const latitude = Math.asin(n.z); - const height = - Math$1.CesiumMath.sign(Cartesian3.dot(h, cartesian)) * Cartesian3.magnitude(h); - - if (!defaultValue.defined(result)) { - return new Cartographic(longitude, latitude, height); - } - result.longitude = longitude; - result.latitude = latitude; - result.height = height; - return result; - }; - - /** - * Creates a new Cartesian3 instance from a Cartographic input. The values in the inputted - * object should be in radians. - * - * @param {Cartographic} cartographic Input to be converted into a Cartesian3 output. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The position - */ - Cartographic.toCartesian = function (cartographic, ellipsoid, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartographic", cartographic); - //>>includeEnd('debug'); - - return Cartesian3.fromRadians( - cartographic.longitude, - cartographic.latitude, - cartographic.height, - ellipsoid, - result - ); - }; - - /** - * Duplicates a Cartographic instance. - * - * @param {Cartographic} cartographic The cartographic to duplicate. - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided. (Returns undefined if cartographic is undefined) - */ - Cartographic.clone = function (cartographic, result) { - if (!defaultValue.defined(cartographic)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new Cartographic( - cartographic.longitude, - cartographic.latitude, - cartographic.height - ); - } - result.longitude = cartographic.longitude; - result.latitude = cartographic.latitude; - result.height = cartographic.height; - return result; - }; - - /** - * Compares the provided cartographics componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Cartographic} [left] The first cartographic. - * @param {Cartographic} [right] The second cartographic. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Cartographic.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.longitude === right.longitude && - left.latitude === right.latitude && - left.height === right.height) - ); - }; - - /** - * Compares the provided cartographics componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Cartographic} [left] The first cartographic. - * @param {Cartographic} [right] The second cartographic. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Cartographic.equalsEpsilon = function (left, right, epsilon) { - epsilon = defaultValue.defaultValue(epsilon, 0); - - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math.abs(left.longitude - right.longitude) <= epsilon && - Math.abs(left.latitude - right.latitude) <= epsilon && - Math.abs(left.height - right.height) <= epsilon) - ); - }; - - /** - * An immutable Cartographic instance initialized to (0.0, 0.0, 0.0). - * - * @type {Cartographic} - * @constant - */ - Cartographic.ZERO = Object.freeze(new Cartographic(0.0, 0.0, 0.0)); - - /** - * Duplicates this instance. - * - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided. - */ - Cartographic.prototype.clone = function (result) { - return Cartographic.clone(this, result); - }; - - /** - * Compares the provided against this cartographic componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Cartographic} [right] The second cartographic. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Cartographic.prototype.equals = function (right) { - return Cartographic.equals(this, right); - }; - - /** - * Compares the provided against this cartographic componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Cartographic} [right] The second cartographic. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Cartographic.prototype.equalsEpsilon = function (right, epsilon) { - return Cartographic.equalsEpsilon(this, right, epsilon); - }; - - /** - * Creates a string representing this cartographic in the format '(longitude, latitude, height)'. - * - * @returns {String} A string representing the provided cartographic in the format '(longitude, latitude, height)'. - */ - Cartographic.prototype.toString = function () { - return `(${this.longitude}, ${this.latitude}, ${this.height})`; - }; - - function initialize(ellipsoid, x, y, z) { - x = defaultValue.defaultValue(x, 0.0); - y = defaultValue.defaultValue(y, 0.0); - z = defaultValue.defaultValue(z, 0.0); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThanOrEquals("x", x, 0.0); - Check.Check.typeOf.number.greaterThanOrEquals("y", y, 0.0); - Check.Check.typeOf.number.greaterThanOrEquals("z", z, 0.0); - //>>includeEnd('debug'); - - ellipsoid._radii = new Cartesian3(x, y, z); - - ellipsoid._radiiSquared = new Cartesian3(x * x, y * y, z * z); - - ellipsoid._radiiToTheFourth = new Cartesian3( - x * x * x * x, - y * y * y * y, - z * z * z * z - ); - - ellipsoid._oneOverRadii = new Cartesian3( - x === 0.0 ? 0.0 : 1.0 / x, - y === 0.0 ? 0.0 : 1.0 / y, - z === 0.0 ? 0.0 : 1.0 / z - ); - - ellipsoid._oneOverRadiiSquared = new Cartesian3( - x === 0.0 ? 0.0 : 1.0 / (x * x), - y === 0.0 ? 0.0 : 1.0 / (y * y), - z === 0.0 ? 0.0 : 1.0 / (z * z) - ); - - ellipsoid._minimumRadius = Math.min(x, y, z); - - ellipsoid._maximumRadius = Math.max(x, y, z); - - ellipsoid._centerToleranceSquared = Math$1.CesiumMath.EPSILON1; - - if (ellipsoid._radiiSquared.z !== 0) { - ellipsoid._squaredXOverSquaredZ = - ellipsoid._radiiSquared.x / ellipsoid._radiiSquared.z; - } - } - - /** - * A quadratic surface defined in Cartesian coordinates by the equation - * (x / a)^2 + (y / b)^2 + (z / c)^2 = 1. Primarily used - * by Cesium to represent the shape of planetary bodies. - * - * Rather than constructing this object directly, one of the provided - * constants is normally used. - * @alias Ellipsoid - * @constructor - * - * @param {Number} [x=0] The radius in the x direction. - * @param {Number} [y=0] The radius in the y direction. - * @param {Number} [z=0] The radius in the z direction. - * - * @exception {DeveloperError} All radii components must be greater than or equal to zero. - * - * @see Ellipsoid.fromCartesian3 - * @see Ellipsoid.WGS84 - * @see Ellipsoid.UNIT_SPHERE - */ - function Ellipsoid(x, y, z) { - this._radii = undefined; - this._radiiSquared = undefined; - this._radiiToTheFourth = undefined; - this._oneOverRadii = undefined; - this._oneOverRadiiSquared = undefined; - this._minimumRadius = undefined; - this._maximumRadius = undefined; - this._centerToleranceSquared = undefined; - this._squaredXOverSquaredZ = undefined; - - initialize(this, x, y, z); - } - - Object.defineProperties(Ellipsoid.prototype, { - /** - * Gets the radii of the ellipsoid. - * @memberof Ellipsoid.prototype - * @type {Cartesian3} - * @readonly - */ - radii: { - get: function () { - return this._radii; - }, - }, - /** - * Gets the squared radii of the ellipsoid. - * @memberof Ellipsoid.prototype - * @type {Cartesian3} - * @readonly - */ - radiiSquared: { - get: function () { - return this._radiiSquared; - }, - }, - /** - * Gets the radii of the ellipsoid raise to the fourth power. - * @memberof Ellipsoid.prototype - * @type {Cartesian3} - * @readonly - */ - radiiToTheFourth: { - get: function () { - return this._radiiToTheFourth; - }, - }, - /** - * Gets one over the radii of the ellipsoid. - * @memberof Ellipsoid.prototype - * @type {Cartesian3} - * @readonly - */ - oneOverRadii: { - get: function () { - return this._oneOverRadii; - }, - }, - /** - * Gets one over the squared radii of the ellipsoid. - * @memberof Ellipsoid.prototype - * @type {Cartesian3} - * @readonly - */ - oneOverRadiiSquared: { - get: function () { - return this._oneOverRadiiSquared; - }, - }, - /** - * Gets the minimum radius of the ellipsoid. - * @memberof Ellipsoid.prototype - * @type {Number} - * @readonly - */ - minimumRadius: { - get: function () { - return this._minimumRadius; - }, - }, - /** - * Gets the maximum radius of the ellipsoid. - * @memberof Ellipsoid.prototype - * @type {Number} - * @readonly - */ - maximumRadius: { - get: function () { - return this._maximumRadius; - }, - }, - }); - - /** - * Duplicates an Ellipsoid instance. - * - * @param {Ellipsoid} ellipsoid The ellipsoid to duplicate. - * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new - * instance should be created. - * @returns {Ellipsoid} The cloned Ellipsoid. (Returns undefined if ellipsoid is undefined) - */ - Ellipsoid.clone = function (ellipsoid, result) { - if (!defaultValue.defined(ellipsoid)) { - return undefined; - } - const radii = ellipsoid._radii; - - if (!defaultValue.defined(result)) { - return new Ellipsoid(radii.x, radii.y, radii.z); - } - - Cartesian3.clone(radii, result._radii); - Cartesian3.clone(ellipsoid._radiiSquared, result._radiiSquared); - Cartesian3.clone(ellipsoid._radiiToTheFourth, result._radiiToTheFourth); - Cartesian3.clone(ellipsoid._oneOverRadii, result._oneOverRadii); - Cartesian3.clone(ellipsoid._oneOverRadiiSquared, result._oneOverRadiiSquared); - result._minimumRadius = ellipsoid._minimumRadius; - result._maximumRadius = ellipsoid._maximumRadius; - result._centerToleranceSquared = ellipsoid._centerToleranceSquared; - - return result; - }; - - /** - * Computes an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions. - * - * @param {Cartesian3} [cartesian=Cartesian3.ZERO] The ellipsoid's radius in the x, y, and z directions. - * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new - * instance should be created. - * @returns {Ellipsoid} A new Ellipsoid instance. - * - * @exception {DeveloperError} All radii components must be greater than or equal to zero. - * - * @see Ellipsoid.WGS84 - * @see Ellipsoid.UNIT_SPHERE - */ - Ellipsoid.fromCartesian3 = function (cartesian, result) { - if (!defaultValue.defined(result)) { - result = new Ellipsoid(); - } - - if (!defaultValue.defined(cartesian)) { - return result; - } - - initialize(result, cartesian.x, cartesian.y, cartesian.z); - return result; - }; - - /** - * An Ellipsoid instance initialized to the WGS84 standard. - * - * @type {Ellipsoid} - * @constant - */ - Ellipsoid.WGS84 = Object.freeze( - new Ellipsoid(6378137.0, 6378137.0, 6356752.3142451793) - ); - - /** - * An Ellipsoid instance initialized to radii of (1.0, 1.0, 1.0). - * - * @type {Ellipsoid} - * @constant - */ - Ellipsoid.UNIT_SPHERE = Object.freeze(new Ellipsoid(1.0, 1.0, 1.0)); - - /** - * An Ellipsoid instance initialized to a sphere with the lunar radius. - * - * @type {Ellipsoid} - * @constant - */ - Ellipsoid.MOON = Object.freeze( - new Ellipsoid( - Math$1.CesiumMath.LUNAR_RADIUS, - Math$1.CesiumMath.LUNAR_RADIUS, - Math$1.CesiumMath.LUNAR_RADIUS - ) - ); - - /** - * Duplicates an Ellipsoid instance. - * - * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new - * instance should be created. - * @returns {Ellipsoid} The cloned Ellipsoid. - */ - Ellipsoid.prototype.clone = function (result) { - return Ellipsoid.clone(this, result); - }; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Ellipsoid.packedLength = Cartesian3.packedLength; - - /** - * Stores the provided instance into the provided array. - * - * @param {Ellipsoid} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Ellipsoid.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Cartesian3.pack(value._radii, array, startingIndex); - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Ellipsoid} [result] The object into which to store the result. - * @returns {Ellipsoid} The modified result parameter or a new Ellipsoid instance if one was not provided. - */ - Ellipsoid.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const radii = Cartesian3.unpack(array, startingIndex); - return Ellipsoid.fromCartesian3(radii, result); - }; - - /** - * Computes the unit vector directed from the center of this ellipsoid toward the provided Cartesian position. - * @function - * - * @param {Cartesian3} cartesian The Cartesian for which to to determine the geocentric normal. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided. - */ - Ellipsoid.prototype.geocentricSurfaceNormal = Cartesian3.normalize; - - /** - * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position. - * - * @param {Cartographic} cartographic The cartographic position for which to to determine the geodetic normal. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided. - */ - Ellipsoid.prototype.geodeticSurfaceNormalCartographic = function ( - cartographic, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartographic", cartographic); - //>>includeEnd('debug'); - - const longitude = cartographic.longitude; - const latitude = cartographic.latitude; - const cosLatitude = Math.cos(latitude); - - const x = cosLatitude * Math.cos(longitude); - const y = cosLatitude * Math.sin(longitude); - const z = Math.sin(latitude); - - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - result.x = x; - result.y = y; - result.z = z; - return Cartesian3.normalize(result, result); - }; - - /** - * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position. - * - * @param {Cartesian3} cartesian The Cartesian position for which to to determine the surface normal. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided, or undefined if a normal cannot be found. - */ - Ellipsoid.prototype.geodeticSurfaceNormal = function (cartesian, result) { - if ( - Cartesian3.equalsEpsilon(cartesian, Cartesian3.ZERO, Math$1.CesiumMath.EPSILON14) - ) { - return undefined; - } - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - result = Cartesian3.multiplyComponents( - cartesian, - this._oneOverRadiiSquared, - result - ); - return Cartesian3.normalize(result, result); - }; - - const cartographicToCartesianNormal = new Cartesian3(); - const cartographicToCartesianK = new Cartesian3(); - - /** - * Converts the provided cartographic to Cartesian representation. - * - * @param {Cartographic} cartographic The cartographic position. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided. - * - * @example - * //Create a Cartographic and determine it's Cartesian representation on a WGS84 ellipsoid. - * const position = new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 5000); - * const cartesianPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position); - */ - Ellipsoid.prototype.cartographicToCartesian = function (cartographic, result) { - //`cartographic is required` is thrown from geodeticSurfaceNormalCartographic. - const n = cartographicToCartesianNormal; - const k = cartographicToCartesianK; - this.geodeticSurfaceNormalCartographic(cartographic, n); - Cartesian3.multiplyComponents(this._radiiSquared, n, k); - const gamma = Math.sqrt(Cartesian3.dot(n, k)); - Cartesian3.divideByScalar(k, gamma, k); - Cartesian3.multiplyByScalar(n, cartographic.height, n); - - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - return Cartesian3.add(k, n, result); - }; - - /** - * Converts the provided array of cartographics to an array of Cartesians. - * - * @param {Cartographic[]} cartographics An array of cartographic positions. - * @param {Cartesian3[]} [result] The object onto which to store the result. - * @returns {Cartesian3[]} The modified result parameter or a new Array instance if none was provided. - * - * @example - * //Convert an array of Cartographics and determine their Cartesian representation on a WGS84 ellipsoid. - * const positions = [new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 0), - * new Cesium.Cartographic(Cesium.Math.toRadians(21.321), Cesium.Math.toRadians(78.123), 100), - * new Cesium.Cartographic(Cesium.Math.toRadians(21.645), Cesium.Math.toRadians(78.456), 250)]; - * const cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(positions); - */ - Ellipsoid.prototype.cartographicArrayToCartesianArray = function ( - cartographics, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartographics", cartographics); - //>>includeEnd('debug') - - const length = cartographics.length; - if (!defaultValue.defined(result)) { - result = new Array(length); - } else { - result.length = length; - } - for (let i = 0; i < length; i++) { - result[i] = this.cartographicToCartesian(cartographics[i], result[i]); - } - return result; - }; - - const cartesianToCartographicN = new Cartesian3(); - const cartesianToCartographicP = new Cartesian3(); - const cartesianToCartographicH = new Cartesian3(); - - /** - * Converts the provided cartesian to cartographic representation. - * The cartesian is undefined at the center of the ellipsoid. - * - * @param {Cartesian3} cartesian The Cartesian position to convert to cartographic representation. - * @param {Cartographic} [result] The object onto which to store the result. - * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid. - * - * @example - * //Create a Cartesian and determine it's Cartographic representation on a WGS84 ellipsoid. - * const position = new Cesium.Cartesian3(17832.12, 83234.52, 952313.73); - * const cartographicPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position); - */ - Ellipsoid.prototype.cartesianToCartographic = function (cartesian, result) { - //`cartesian is required.` is thrown from scaleToGeodeticSurface - const p = this.scaleToGeodeticSurface(cartesian, cartesianToCartographicP); - - if (!defaultValue.defined(p)) { - return undefined; - } - - const n = this.geodeticSurfaceNormal(p, cartesianToCartographicN); - const h = Cartesian3.subtract(cartesian, p, cartesianToCartographicH); - - const longitude = Math.atan2(n.y, n.x); - const latitude = Math.asin(n.z); - const height = - Math$1.CesiumMath.sign(Cartesian3.dot(h, cartesian)) * Cartesian3.magnitude(h); - - if (!defaultValue.defined(result)) { - return new Cartographic(longitude, latitude, height); - } - result.longitude = longitude; - result.latitude = latitude; - result.height = height; - return result; - }; - - /** - * Converts the provided array of cartesians to an array of cartographics. - * - * @param {Cartesian3[]} cartesians An array of Cartesian positions. - * @param {Cartographic[]} [result] The object onto which to store the result. - * @returns {Cartographic[]} The modified result parameter or a new Array instance if none was provided. - * - * @example - * //Create an array of Cartesians and determine their Cartographic representation on a WGS84 ellipsoid. - * const positions = [new Cesium.Cartesian3(17832.12, 83234.52, 952313.73), - * new Cesium.Cartesian3(17832.13, 83234.53, 952313.73), - * new Cesium.Cartesian3(17832.14, 83234.54, 952313.73)] - * const cartographicPositions = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(positions); - */ - Ellipsoid.prototype.cartesianArrayToCartographicArray = function ( - cartesians, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("cartesians", cartesians); - //>>includeEnd('debug'); - - const length = cartesians.length; - if (!defaultValue.defined(result)) { - result = new Array(length); - } else { - result.length = length; - } - for (let i = 0; i < length; ++i) { - result[i] = this.cartesianToCartographic(cartesians[i], result[i]); - } - return result; - }; - - /** - * Scales the provided Cartesian position along the geodetic surface normal - * so that it is on the surface of this ellipsoid. If the position is - * at the center of the ellipsoid, this function returns undefined. - * - * @param {Cartesian3} cartesian The Cartesian position to scale. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center. - */ - Ellipsoid.prototype.scaleToGeodeticSurface = function (cartesian, result) { - return scaleToGeodeticSurface( - cartesian, - this._oneOverRadii, - this._oneOverRadiiSquared, - this._centerToleranceSquared, - result - ); - }; - - /** - * Scales the provided Cartesian position along the geocentric surface normal - * so that it is on the surface of this ellipsoid. - * - * @param {Cartesian3} cartesian The Cartesian position to scale. - * @param {Cartesian3} [result] The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided. - */ - Ellipsoid.prototype.scaleToGeocentricSurface = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - - const positionX = cartesian.x; - const positionY = cartesian.y; - const positionZ = cartesian.z; - const oneOverRadiiSquared = this._oneOverRadiiSquared; - - const beta = - 1.0 / - Math.sqrt( - positionX * positionX * oneOverRadiiSquared.x + - positionY * positionY * oneOverRadiiSquared.y + - positionZ * positionZ * oneOverRadiiSquared.z - ); - - return Cartesian3.multiplyByScalar(cartesian, beta, result); - }; - - /** - * Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying - * its components by the result of {@link Ellipsoid#oneOverRadii}. - * - * @param {Cartesian3} position The position to transform. - * @param {Cartesian3} [result] The position to which to copy the result, or undefined to create and - * return a new instance. - * @returns {Cartesian3} The position expressed in the scaled space. The returned instance is the - * one passed as the result parameter if it is not undefined, or a new instance of it is. - */ - Ellipsoid.prototype.transformPositionToScaledSpace = function ( - position, - result - ) { - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - - return Cartesian3.multiplyComponents(position, this._oneOverRadii, result); - }; - - /** - * Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying - * its components by the result of {@link Ellipsoid#radii}. - * - * @param {Cartesian3} position The position to transform. - * @param {Cartesian3} [result] The position to which to copy the result, or undefined to create and - * return a new instance. - * @returns {Cartesian3} The position expressed in the unscaled space. The returned instance is the - * one passed as the result parameter if it is not undefined, or a new instance of it is. - */ - Ellipsoid.prototype.transformPositionFromScaledSpace = function ( - position, - result - ) { - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - - return Cartesian3.multiplyComponents(position, this._radii, result); - }; - - /** - * Compares this Ellipsoid against the provided Ellipsoid componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Ellipsoid} [right] The other Ellipsoid. - * @returns {Boolean} true if they are equal, false otherwise. - */ - Ellipsoid.prototype.equals = function (right) { - return ( - this === right || - (defaultValue.defined(right) && Cartesian3.equals(this._radii, right._radii)) - ); - }; - - /** - * Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'. - * - * @returns {String} A string representing this ellipsoid in the format '(radii.x, radii.y, radii.z)'. - */ - Ellipsoid.prototype.toString = function () { - return this._radii.toString(); - }; - - /** - * Computes a point which is the intersection of the surface normal with the z-axis. - * - * @param {Cartesian3} position the position. must be on the surface of the ellipsoid. - * @param {Number} [buffer = 0.0] A buffer to subtract from the ellipsoid size when checking if the point is inside the ellipsoid. - * In earth case, with common earth datums, there is no need for this buffer since the intersection point is always (relatively) very close to the center. - * In WGS84 datum, intersection point is at max z = +-42841.31151331382 (0.673% of z-axis). - * Intersection point could be outside the ellipsoid if the ratio of MajorAxis / AxisOfRotation is bigger than the square root of 2 - * @param {Cartesian3} [result] The cartesian to which to copy the result, or undefined to create and - * return a new instance. - * @returns {Cartesian3 | undefined} the intersection point if it's inside the ellipsoid, undefined otherwise - * - * @exception {DeveloperError} position is required. - * @exception {DeveloperError} Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y). - * @exception {DeveloperError} Ellipsoid.radii.z must be greater than 0. - */ - Ellipsoid.prototype.getSurfaceNormalIntersectionWithZAxis = function ( - position, - buffer, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("position", position); - - if ( - !Math$1.CesiumMath.equalsEpsilon( - this._radii.x, - this._radii.y, - Math$1.CesiumMath.EPSILON15 - ) - ) { - throw new Check.DeveloperError( - "Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)" - ); - } - - Check.Check.typeOf.number.greaterThan("Ellipsoid.radii.z", this._radii.z, 0); - //>>includeEnd('debug'); - - buffer = defaultValue.defaultValue(buffer, 0.0); - - const squaredXOverSquaredZ = this._squaredXOverSquaredZ; - - if (!defaultValue.defined(result)) { - result = new Cartesian3(); - } - - result.x = 0.0; - result.y = 0.0; - result.z = position.z * (1 - squaredXOverSquaredZ); - - if (Math.abs(result.z) >= this._radii.z - buffer) { - return undefined; - } - - return result; - }; - - const abscissas = [ - 0.14887433898163, - 0.43339539412925, - 0.67940956829902, - 0.86506336668898, - 0.97390652851717, - 0.0, - ]; - const weights = [ - 0.29552422471475, - 0.26926671930999, - 0.21908636251598, - 0.14945134915058, - 0.066671344308684, - 0.0, - ]; - - /** - * Compute the 10th order Gauss-Legendre Quadrature of the given definite integral. - * - * @param {Number} a The lower bound for the integration. - * @param {Number} b The upper bound for the integration. - * @param {Ellipsoid~RealValuedScalarFunction} func The function to integrate. - * @returns {Number} The value of the integral of the given function over the given domain. - * - * @private - */ - function gaussLegendreQuadrature(a, b, func) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("a", a); - Check.Check.typeOf.number("b", b); - Check.Check.typeOf.func("func", func); - //>>includeEnd('debug'); - - // The range is half of the normal range since the five weights add to one (ten weights add to two). - // The values of the abscissas are multiplied by two to account for this. - const xMean = 0.5 * (b + a); - const xRange = 0.5 * (b - a); - - let sum = 0.0; - for (let i = 0; i < 5; i++) { - const dx = xRange * abscissas[i]; - sum += weights[i] * (func(xMean + dx) + func(xMean - dx)); - } - - // Scale the sum to the range of x. - sum *= xRange; - return sum; - } - - /** - * A real valued scalar function. - * @callback Ellipsoid~RealValuedScalarFunction - * - * @param {Number} x The value used to evaluate the function. - * @returns {Number} The value of the function at x. - * - * @private - */ - - /** - * Computes an approximation of the surface area of a rectangle on the surface of an ellipsoid using - * Gauss-Legendre 10th order quadrature. - * - * @param {Rectangle} rectangle The rectangle used for computing the surface area. - * @returns {Number} The approximate area of the rectangle on the surface of this ellipsoid. - */ - Ellipsoid.prototype.surfaceArea = function (rectangle) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - const minLongitude = rectangle.west; - let maxLongitude = rectangle.east; - const minLatitude = rectangle.south; - const maxLatitude = rectangle.north; - - while (maxLongitude < minLongitude) { - maxLongitude += Math$1.CesiumMath.TWO_PI; - } - - const radiiSquared = this._radiiSquared; - const a2 = radiiSquared.x; - const b2 = radiiSquared.y; - const c2 = radiiSquared.z; - const a2b2 = a2 * b2; - return gaussLegendreQuadrature(minLatitude, maxLatitude, function (lat) { - // phi represents the angle measured from the north pole - // sin(phi) = sin(pi / 2 - lat) = cos(lat), cos(phi) is similar - const sinPhi = Math.cos(lat); - const cosPhi = Math.sin(lat); - return ( - Math.cos(lat) * - gaussLegendreQuadrature(minLongitude, maxLongitude, function (lon) { - const cosTheta = Math.cos(lon); - const sinTheta = Math.sin(lon); - return Math.sqrt( - a2b2 * cosPhi * cosPhi + - c2 * - (b2 * cosTheta * cosTheta + a2 * sinTheta * sinTheta) * - sinPhi * - sinPhi - ); - }) - ); - }); - }; - - /** - * A 3x3 matrix, indexable as a column-major order array. - * Constructor parameters are in row-major order for code readability. - * @alias Matrix3 - * @constructor - * @implements {ArrayLike} - * - * @param {Number} [column0Row0=0.0] The value for column 0, row 0. - * @param {Number} [column1Row0=0.0] The value for column 1, row 0. - * @param {Number} [column2Row0=0.0] The value for column 2, row 0. - * @param {Number} [column0Row1=0.0] The value for column 0, row 1. - * @param {Number} [column1Row1=0.0] The value for column 1, row 1. - * @param {Number} [column2Row1=0.0] The value for column 2, row 1. - * @param {Number} [column0Row2=0.0] The value for column 0, row 2. - * @param {Number} [column1Row2=0.0] The value for column 1, row 2. - * @param {Number} [column2Row2=0.0] The value for column 2, row 2. - * - * @see Matrix3.fromArray - * @see Matrix3.fromColumnMajorArray - * @see Matrix3.fromRowMajorArray - * @see Matrix3.fromQuaternion - * @see Matrix3.fromHeadingPitchRoll - * @see Matrix3.fromScale - * @see Matrix3.fromUniformScale - * @see Matrix3.fromCrossProduct - * @see Matrix3.fromRotationX - * @see Matrix3.fromRotationY - * @see Matrix3.fromRotationZ - * @see Matrix2 - * @see Matrix4 - */ - function Matrix3( - column0Row0, - column1Row0, - column2Row0, - column0Row1, - column1Row1, - column2Row1, - column0Row2, - column1Row2, - column2Row2 - ) { - this[0] = defaultValue.defaultValue(column0Row0, 0.0); - this[1] = defaultValue.defaultValue(column0Row1, 0.0); - this[2] = defaultValue.defaultValue(column0Row2, 0.0); - this[3] = defaultValue.defaultValue(column1Row0, 0.0); - this[4] = defaultValue.defaultValue(column1Row1, 0.0); - this[5] = defaultValue.defaultValue(column1Row2, 0.0); - this[6] = defaultValue.defaultValue(column2Row0, 0.0); - this[7] = defaultValue.defaultValue(column2Row1, 0.0); - this[8] = defaultValue.defaultValue(column2Row2, 0.0); - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Matrix3.packedLength = 9; - - /** - * Stores the provided instance into the provided array. - * - * @param {Matrix3} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Matrix3.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value[0]; - array[startingIndex++] = value[1]; - array[startingIndex++] = value[2]; - array[startingIndex++] = value[3]; - array[startingIndex++] = value[4]; - array[startingIndex++] = value[5]; - array[startingIndex++] = value[6]; - array[startingIndex++] = value[7]; - array[startingIndex++] = value[8]; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Matrix3} [result] The object into which to store the result. - * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided. - */ - Matrix3.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new Matrix3(); - } - - result[0] = array[startingIndex++]; - result[1] = array[startingIndex++]; - result[2] = array[startingIndex++]; - result[3] = array[startingIndex++]; - result[4] = array[startingIndex++]; - result[5] = array[startingIndex++]; - result[6] = array[startingIndex++]; - result[7] = array[startingIndex++]; - result[8] = array[startingIndex++]; - return result; - }; - - /** - * Flattens an array of Matrix3s into an array of components. The components - * are stored in column-major order. - * - * @param {Matrix3[]} array The array of matrices to pack. - * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 9 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 9) elements. - * @returns {Number[]} The packed array. - */ - Matrix3.packArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - const length = array.length; - const resultLength = length * 9; - if (!defaultValue.defined(result)) { - result = new Array(resultLength); - } else if (!Array.isArray(result) && result.length !== resultLength) { - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError( - "If result is a typed array, it must have exactly array.length * 9 elements" - ); - //>>includeEnd('debug'); - } else if (result.length !== resultLength) { - result.length = resultLength; - } - - for (let i = 0; i < length; ++i) { - Matrix3.pack(array[i], result, i * 9); - } - return result; - }; - - /** - * Unpacks an array of column-major matrix components into an array of Matrix3s. - * - * @param {Number[]} array The array of components to unpack. - * @param {Matrix3[]} [result] The array onto which to store the result. - * @returns {Matrix3[]} The unpacked array. - */ - Matrix3.unpackArray = function (array, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - Check.Check.typeOf.number.greaterThanOrEquals("array.length", array.length, 9); - if (array.length % 9 !== 0) { - throw new Check.DeveloperError("array length must be a multiple of 9."); - } - //>>includeEnd('debug'); - - const length = array.length; - if (!defaultValue.defined(result)) { - result = new Array(length / 9); - } else { - result.length = length / 9; - } - - for (let i = 0; i < length; i += 9) { - const index = i / 9; - result[index] = Matrix3.unpack(array, i, result[index]); - } - return result; - }; - - /** - * Duplicates a Matrix3 instance. - * - * @param {Matrix3} matrix The matrix to duplicate. - * @param {Matrix3} [result] The object onto which to store the result. - * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided. (Returns undefined if matrix is undefined) - */ - Matrix3.clone = function (matrix, result) { - if (!defaultValue.defined(matrix)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new Matrix3( - matrix[0], - matrix[3], - matrix[6], - matrix[1], - matrix[4], - matrix[7], - matrix[2], - matrix[5], - matrix[8] - ); - } - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[3]; - result[4] = matrix[4]; - result[5] = matrix[5]; - result[6] = matrix[6]; - result[7] = matrix[7]; - result[8] = matrix[8]; - return result; - }; - - /** - * Creates a Matrix3 from 9 consecutive elements in an array. - * - * @function - * @param {Number[]} array The array whose 9 consecutive elements correspond to the positions of the matrix. Assumes column-major order. - * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix. - * @param {Matrix3} [result] The object onto which to store the result. - * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided. - * - * @example - * // Create the Matrix3: - * // [1.0, 2.0, 3.0] - * // [1.0, 2.0, 3.0] - * // [1.0, 2.0, 3.0] - * - * const v = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0]; - * const m = Cesium.Matrix3.fromArray(v); - * - * // Create same Matrix3 with using an offset into an array - * const v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0]; - * const m2 = Cesium.Matrix3.fromArray(v2, 2); - */ - Matrix3.fromArray = Matrix3.unpack; - - /** - * Creates a Matrix3 instance from a column-major order array. - * - * @param {Number[]} values The column-major order array. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided. - */ - Matrix3.fromColumnMajorArray = function (values, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("values", values); - //>>includeEnd('debug'); - - return Matrix3.clone(values, result); - }; - - /** - * Creates a Matrix3 instance from a row-major order array. - * The resulting matrix will be in column-major order. - * - * @param {Number[]} values The row-major order array. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided. - */ - Matrix3.fromRowMajorArray = function (values, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("values", values); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix3( - values[0], - values[1], - values[2], - values[3], - values[4], - values[5], - values[6], - values[7], - values[8] - ); - } - result[0] = values[0]; - result[1] = values[3]; - result[2] = values[6]; - result[3] = values[1]; - result[4] = values[4]; - result[5] = values[7]; - result[6] = values[2]; - result[7] = values[5]; - result[8] = values[8]; - return result; - }; - - /** - * Computes a 3x3 rotation matrix from the provided quaternion. - * - * @param {Quaternion} quaternion the quaternion to use. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The 3x3 rotation matrix from this quaternion. - */ - Matrix3.fromQuaternion = function (quaternion, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - //>>includeEnd('debug'); - - const x2 = quaternion.x * quaternion.x; - const xy = quaternion.x * quaternion.y; - const xz = quaternion.x * quaternion.z; - const xw = quaternion.x * quaternion.w; - const y2 = quaternion.y * quaternion.y; - const yz = quaternion.y * quaternion.z; - const yw = quaternion.y * quaternion.w; - const z2 = quaternion.z * quaternion.z; - const zw = quaternion.z * quaternion.w; - const w2 = quaternion.w * quaternion.w; - - const m00 = x2 - y2 - z2 + w2; - const m01 = 2.0 * (xy - zw); - const m02 = 2.0 * (xz + yw); - - const m10 = 2.0 * (xy + zw); - const m11 = -x2 + y2 - z2 + w2; - const m12 = 2.0 * (yz - xw); - - const m20 = 2.0 * (xz - yw); - const m21 = 2.0 * (yz + xw); - const m22 = -x2 - y2 + z2 + w2; - - if (!defaultValue.defined(result)) { - return new Matrix3(m00, m01, m02, m10, m11, m12, m20, m21, m22); - } - result[0] = m00; - result[1] = m10; - result[2] = m20; - result[3] = m01; - result[4] = m11; - result[5] = m21; - result[6] = m02; - result[7] = m12; - result[8] = m22; - return result; - }; - - /** - * Computes a 3x3 rotation matrix from the provided headingPitchRoll. (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles ) - * - * @param {HeadingPitchRoll} headingPitchRoll the headingPitchRoll to use. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The 3x3 rotation matrix from this headingPitchRoll. - */ - Matrix3.fromHeadingPitchRoll = function (headingPitchRoll, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("headingPitchRoll", headingPitchRoll); - //>>includeEnd('debug'); - - const cosTheta = Math.cos(-headingPitchRoll.pitch); - const cosPsi = Math.cos(-headingPitchRoll.heading); - const cosPhi = Math.cos(headingPitchRoll.roll); - const sinTheta = Math.sin(-headingPitchRoll.pitch); - const sinPsi = Math.sin(-headingPitchRoll.heading); - const sinPhi = Math.sin(headingPitchRoll.roll); - - const m00 = cosTheta * cosPsi; - const m01 = -cosPhi * sinPsi + sinPhi * sinTheta * cosPsi; - const m02 = sinPhi * sinPsi + cosPhi * sinTheta * cosPsi; - - const m10 = cosTheta * sinPsi; - const m11 = cosPhi * cosPsi + sinPhi * sinTheta * sinPsi; - const m12 = -sinPhi * cosPsi + cosPhi * sinTheta * sinPsi; - - const m20 = -sinTheta; - const m21 = sinPhi * cosTheta; - const m22 = cosPhi * cosTheta; - - if (!defaultValue.defined(result)) { - return new Matrix3(m00, m01, m02, m10, m11, m12, m20, m21, m22); - } - result[0] = m00; - result[1] = m10; - result[2] = m20; - result[3] = m01; - result[4] = m11; - result[5] = m21; - result[6] = m02; - result[7] = m12; - result[8] = m22; - return result; - }; - - /** - * Computes a Matrix3 instance representing a non-uniform scale. - * - * @param {Cartesian3} scale The x, y, and z scale factors. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided. - * - * @example - * // Creates - * // [7.0, 0.0, 0.0] - * // [0.0, 8.0, 0.0] - * // [0.0, 0.0, 9.0] - * const m = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0)); - */ - Matrix3.fromScale = function (scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("scale", scale); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix3(scale.x, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, scale.z); - } - - result[0] = scale.x; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = scale.y; - result[5] = 0.0; - result[6] = 0.0; - result[7] = 0.0; - result[8] = scale.z; - return result; - }; - - /** - * Computes a Matrix3 instance representing a uniform scale. - * - * @param {Number} scale The uniform scale factor. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided. - * - * @example - * // Creates - * // [2.0, 0.0, 0.0] - * // [0.0, 2.0, 0.0] - * // [0.0, 0.0, 2.0] - * const m = Cesium.Matrix3.fromUniformScale(2.0); - */ - Matrix3.fromUniformScale = function (scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("scale", scale); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix3(scale, 0.0, 0.0, 0.0, scale, 0.0, 0.0, 0.0, scale); - } - - result[0] = scale; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = scale; - result[5] = 0.0; - result[6] = 0.0; - result[7] = 0.0; - result[8] = scale; - return result; - }; - - /** - * Computes a Matrix3 instance representing the cross product equivalent matrix of a Cartesian3 vector. - * - * @param {Cartesian3} vector the vector on the left hand side of the cross product operation. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided. - * - * @example - * // Creates - * // [0.0, -9.0, 8.0] - * // [9.0, 0.0, -7.0] - * // [-8.0, 7.0, 0.0] - * const m = Cesium.Matrix3.fromCrossProduct(new Cesium.Cartesian3(7.0, 8.0, 9.0)); - */ - Matrix3.fromCrossProduct = function (vector, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("vector", vector); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Matrix3( - 0.0, - -vector.z, - vector.y, - vector.z, - 0.0, - -vector.x, - -vector.y, - vector.x, - 0.0 - ); - } - - result[0] = 0.0; - result[1] = vector.z; - result[2] = -vector.y; - result[3] = -vector.z; - result[4] = 0.0; - result[5] = vector.x; - result[6] = vector.y; - result[7] = -vector.x; - result[8] = 0.0; - return result; - }; - - /** - * Creates a rotation matrix around the x-axis. - * - * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided. - * - * @example - * // Rotate a point 45 degrees counterclockwise around the x-axis. - * const p = new Cesium.Cartesian3(5, 6, 7); - * const m = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(45.0)); - * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3()); - */ - Matrix3.fromRotationX = function (angle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("angle", angle); - //>>includeEnd('debug'); - - const cosAngle = Math.cos(angle); - const sinAngle = Math.sin(angle); - - if (!defaultValue.defined(result)) { - return new Matrix3( - 1.0, - 0.0, - 0.0, - 0.0, - cosAngle, - -sinAngle, - 0.0, - sinAngle, - cosAngle - ); - } - - result[0] = 1.0; - result[1] = 0.0; - result[2] = 0.0; - result[3] = 0.0; - result[4] = cosAngle; - result[5] = sinAngle; - result[6] = 0.0; - result[7] = -sinAngle; - result[8] = cosAngle; - - return result; - }; - - /** - * Creates a rotation matrix around the y-axis. - * - * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided. - * - * @example - * // Rotate a point 45 degrees counterclockwise around the y-axis. - * const p = new Cesium.Cartesian3(5, 6, 7); - * const m = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(45.0)); - * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3()); - */ - Matrix3.fromRotationY = function (angle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("angle", angle); - //>>includeEnd('debug'); - - const cosAngle = Math.cos(angle); - const sinAngle = Math.sin(angle); - - if (!defaultValue.defined(result)) { - return new Matrix3( - cosAngle, - 0.0, - sinAngle, - 0.0, - 1.0, - 0.0, - -sinAngle, - 0.0, - cosAngle - ); - } - - result[0] = cosAngle; - result[1] = 0.0; - result[2] = -sinAngle; - result[3] = 0.0; - result[4] = 1.0; - result[5] = 0.0; - result[6] = sinAngle; - result[7] = 0.0; - result[8] = cosAngle; - - return result; - }; - - /** - * Creates a rotation matrix around the z-axis. - * - * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise. - * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created. - * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided. - * - * @example - * // Rotate a point 45 degrees counterclockwise around the z-axis. - * const p = new Cesium.Cartesian3(5, 6, 7); - * const m = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(45.0)); - * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3()); - */ - Matrix3.fromRotationZ = function (angle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("angle", angle); - //>>includeEnd('debug'); - - const cosAngle = Math.cos(angle); - const sinAngle = Math.sin(angle); - - if (!defaultValue.defined(result)) { - return new Matrix3( - cosAngle, - -sinAngle, - 0.0, - sinAngle, - cosAngle, - 0.0, - 0.0, - 0.0, - 1.0 - ); - } - - result[0] = cosAngle; - result[1] = sinAngle; - result[2] = 0.0; - result[3] = -sinAngle; - result[4] = cosAngle; - result[5] = 0.0; - result[6] = 0.0; - result[7] = 0.0; - result[8] = 1.0; - - return result; - }; - - /** - * Creates an Array from the provided Matrix3 instance. - * The array will be in column-major order. - * - * @param {Matrix3} matrix The matrix to use.. - * @param {Number[]} [result] The Array onto which to store the result. - * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided. - */ - Matrix3.toArray = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return [ - matrix[0], - matrix[1], - matrix[2], - matrix[3], - matrix[4], - matrix[5], - matrix[6], - matrix[7], - matrix[8], - ]; - } - result[0] = matrix[0]; - result[1] = matrix[1]; - result[2] = matrix[2]; - result[3] = matrix[3]; - result[4] = matrix[4]; - result[5] = matrix[5]; - result[6] = matrix[6]; - result[7] = matrix[7]; - result[8] = matrix[8]; - return result; - }; - - /** - * Computes the array index of the element at the provided row and column. - * - * @param {Number} column The zero-based index of the column. - * @param {Number} row The zero-based index of the row. - * @returns {Number} The index of the element at the provided row and column. - * - * @exception {DeveloperError} row must be 0, 1, or 2. - * @exception {DeveloperError} column must be 0, 1, or 2. - * - * @example - * const myMatrix = new Cesium.Matrix3(); - * const column1Row0Index = Cesium.Matrix3.getElementIndex(1, 0); - * const column1Row0 = myMatrix[column1Row0Index] - * myMatrix[column1Row0Index] = 10.0; - */ - Matrix3.getElementIndex = function (column, row) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThanOrEquals("row", row, 0); - Check.Check.typeOf.number.lessThanOrEquals("row", row, 2); - Check.Check.typeOf.number.greaterThanOrEquals("column", column, 0); - Check.Check.typeOf.number.lessThanOrEquals("column", column, 2); - //>>includeEnd('debug'); - - return column * 3 + row; - }; - - /** - * Retrieves a copy of the matrix column at the provided index as a Cartesian3 instance. - * - * @param {Matrix3} matrix The matrix to use. - * @param {Number} index The zero-based index of the column to retrieve. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - * - * @exception {DeveloperError} index must be 0, 1, or 2. - */ - Matrix3.getColumn = function (matrix, index, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 2); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const startIndex = index * 3; - const x = matrix[startIndex]; - const y = matrix[startIndex + 1]; - const z = matrix[startIndex + 2]; - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian3 instance. - * - * @param {Matrix3} matrix The matrix to use. - * @param {Number} index The zero-based index of the column to set. - * @param {Cartesian3} cartesian The Cartesian whose values will be assigned to the specified column. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @exception {DeveloperError} index must be 0, 1, or 2. - */ - Matrix3.setColumn = function (matrix, index, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 2); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result = Matrix3.clone(matrix, result); - const startIndex = index * 3; - result[startIndex] = cartesian.x; - result[startIndex + 1] = cartesian.y; - result[startIndex + 2] = cartesian.z; - return result; - }; - - /** - * Retrieves a copy of the matrix row at the provided index as a Cartesian3 instance. - * - * @param {Matrix3} matrix The matrix to use. - * @param {Number} index The zero-based index of the row to retrieve. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - * - * @exception {DeveloperError} index must be 0, 1, or 2. - */ - Matrix3.getRow = function (matrix, index, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 2); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const x = matrix[index]; - const y = matrix[index + 3]; - const z = matrix[index + 6]; - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian3 instance. - * - * @param {Matrix3} matrix The matrix to use. - * @param {Number} index The zero-based index of the row to set. - * @param {Cartesian3} cartesian The Cartesian whose values will be assigned to the specified row. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @exception {DeveloperError} index must be 0, 1, or 2. - */ - Matrix3.setRow = function (matrix, index, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number.greaterThanOrEquals("index", index, 0); - Check.Check.typeOf.number.lessThanOrEquals("index", index, 2); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result = Matrix3.clone(matrix, result); - result[index] = cartesian.x; - result[index + 3] = cartesian.y; - result[index + 6] = cartesian.z; - return result; - }; - - const scaleScratch1 = new Cartesian3(); - - /** - * Computes a new matrix that replaces the scale with the provided scale. - * This assumes the matrix is an affine transformation. - * - * @param {Matrix3} matrix The matrix to use. - * @param {Cartesian3} scale The scale that replaces the scale of the provided matrix. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @see Matrix3.setUniformScale - * @see Matrix3.fromScale - * @see Matrix3.fromUniformScale - * @see Matrix3.multiplyByScale - * @see Matrix3.multiplyByUniformScale - * @see Matrix3.getScale - */ - Matrix3.setScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const existingScale = Matrix3.getScale(matrix, scaleScratch1); - const scaleRatioX = scale.x / existingScale.x; - const scaleRatioY = scale.y / existingScale.y; - const scaleRatioZ = scale.z / existingScale.z; - - result[0] = matrix[0] * scaleRatioX; - result[1] = matrix[1] * scaleRatioX; - result[2] = matrix[2] * scaleRatioX; - result[3] = matrix[3] * scaleRatioY; - result[4] = matrix[4] * scaleRatioY; - result[5] = matrix[5] * scaleRatioY; - result[6] = matrix[6] * scaleRatioZ; - result[7] = matrix[7] * scaleRatioZ; - result[8] = matrix[8] * scaleRatioZ; - - return result; - }; - - const scaleScratch2 = new Cartesian3(); - - /** - * Computes a new matrix that replaces the scale with the provided uniform scale. - * This assumes the matrix is an affine transformation. - * - * @param {Matrix3} matrix The matrix to use. - * @param {Number} scale The uniform scale that replaces the scale of the provided matrix. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @see Matrix3.setScale - * @see Matrix3.fromScale - * @see Matrix3.fromUniformScale - * @see Matrix3.multiplyByScale - * @see Matrix3.multiplyByUniformScale - * @see Matrix3.getScale - */ - Matrix3.setUniformScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const existingScale = Matrix3.getScale(matrix, scaleScratch2); - const scaleRatioX = scale / existingScale.x; - const scaleRatioY = scale / existingScale.y; - const scaleRatioZ = scale / existingScale.z; - - result[0] = matrix[0] * scaleRatioX; - result[1] = matrix[1] * scaleRatioX; - result[2] = matrix[2] * scaleRatioX; - result[3] = matrix[3] * scaleRatioY; - result[4] = matrix[4] * scaleRatioY; - result[5] = matrix[5] * scaleRatioY; - result[6] = matrix[6] * scaleRatioZ; - result[7] = matrix[7] * scaleRatioZ; - result[8] = matrix[8] * scaleRatioZ; - - return result; - }; - - const scratchColumn = new Cartesian3(); - - /** - * Extracts the non-uniform scale assuming the matrix is an affine transformation. - * - * @param {Matrix3} matrix The matrix. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - * - * @see Matrix3.multiplyByScale - * @see Matrix3.multiplyByUniformScale - * @see Matrix3.fromScale - * @see Matrix3.fromUniformScale - * @see Matrix3.setScale - * @see Matrix3.setUniformScale - */ - Matrix3.getScale = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = Cartesian3.magnitude( - Cartesian3.fromElements(matrix[0], matrix[1], matrix[2], scratchColumn) - ); - result.y = Cartesian3.magnitude( - Cartesian3.fromElements(matrix[3], matrix[4], matrix[5], scratchColumn) - ); - result.z = Cartesian3.magnitude( - Cartesian3.fromElements(matrix[6], matrix[7], matrix[8], scratchColumn) - ); - return result; - }; - - const scaleScratch3 = new Cartesian3(); - - /** - * Computes the maximum scale assuming the matrix is an affine transformation. - * The maximum scale is the maximum length of the column vectors. - * - * @param {Matrix3} matrix The matrix. - * @returns {Number} The maximum scale. - */ - Matrix3.getMaximumScale = function (matrix) { - Matrix3.getScale(matrix, scaleScratch3); - return Cartesian3.maximumComponent(scaleScratch3); - }; - - const scaleScratch4 = new Cartesian3(); - - /** - * Sets the rotation assuming the matrix is an affine transformation. - * - * @param {Matrix3} matrix The matrix. - * @param {Matrix3} rotation The rotation matrix. - * @returns {Matrix3} The modified result parameter. - * - * @see Matrix3.getRotation - */ - Matrix3.setRotation = function (matrix, rotation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const scale = Matrix3.getScale(matrix, scaleScratch4); - - result[0] = rotation[0] * scale.x; - result[1] = rotation[1] * scale.x; - result[2] = rotation[2] * scale.x; - result[3] = rotation[3] * scale.y; - result[4] = rotation[4] * scale.y; - result[5] = rotation[5] * scale.y; - result[6] = rotation[6] * scale.z; - result[7] = rotation[7] * scale.z; - result[8] = rotation[8] * scale.z; - - return result; - }; - - const scaleScratch5 = new Cartesian3(); - - /** - * Extracts the rotation matrix assuming the matrix is an affine transformation. - * - * @param {Matrix3} matrix The matrix. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @see Matrix3.setRotation - */ - Matrix3.getRotation = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const scale = Matrix3.getScale(matrix, scaleScratch5); - - result[0] = matrix[0] / scale.x; - result[1] = matrix[1] / scale.x; - result[2] = matrix[2] / scale.x; - result[3] = matrix[3] / scale.y; - result[4] = matrix[4] / scale.y; - result[5] = matrix[5] / scale.y; - result[6] = matrix[6] / scale.z; - result[7] = matrix[7] / scale.z; - result[8] = matrix[8] / scale.z; - - return result; - }; - - /** - * Computes the product of two matrices. - * - * @param {Matrix3} left The first matrix. - * @param {Matrix3} right The second matrix. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - */ - Matrix3.multiply = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const column0Row0 = - left[0] * right[0] + left[3] * right[1] + left[6] * right[2]; - const column0Row1 = - left[1] * right[0] + left[4] * right[1] + left[7] * right[2]; - const column0Row2 = - left[2] * right[0] + left[5] * right[1] + left[8] * right[2]; - - const column1Row0 = - left[0] * right[3] + left[3] * right[4] + left[6] * right[5]; - const column1Row1 = - left[1] * right[3] + left[4] * right[4] + left[7] * right[5]; - const column1Row2 = - left[2] * right[3] + left[5] * right[4] + left[8] * right[5]; - - const column2Row0 = - left[0] * right[6] + left[3] * right[7] + left[6] * right[8]; - const column2Row1 = - left[1] * right[6] + left[4] * right[7] + left[7] * right[8]; - const column2Row2 = - left[2] * right[6] + left[5] * right[7] + left[8] * right[8]; - - result[0] = column0Row0; - result[1] = column0Row1; - result[2] = column0Row2; - result[3] = column1Row0; - result[4] = column1Row1; - result[5] = column1Row2; - result[6] = column2Row0; - result[7] = column2Row1; - result[8] = column2Row2; - return result; - }; - - /** - * Computes the sum of two matrices. - * - * @param {Matrix3} left The first matrix. - * @param {Matrix3} right The second matrix. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - */ - Matrix3.add = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = left[0] + right[0]; - result[1] = left[1] + right[1]; - result[2] = left[2] + right[2]; - result[3] = left[3] + right[3]; - result[4] = left[4] + right[4]; - result[5] = left[5] + right[5]; - result[6] = left[6] + right[6]; - result[7] = left[7] + right[7]; - result[8] = left[8] + right[8]; - return result; - }; - - /** - * Computes the difference of two matrices. - * - * @param {Matrix3} left The first matrix. - * @param {Matrix3} right The second matrix. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - */ - Matrix3.subtract = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = left[0] - right[0]; - result[1] = left[1] - right[1]; - result[2] = left[2] - right[2]; - result[3] = left[3] - right[3]; - result[4] = left[4] - right[4]; - result[5] = left[5] - right[5]; - result[6] = left[6] - right[6]; - result[7] = left[7] - right[7]; - result[8] = left[8] - right[8]; - return result; - }; - - /** - * Computes the product of a matrix and a column vector. - * - * @param {Matrix3} matrix The matrix. - * @param {Cartesian3} cartesian The column. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Matrix3.multiplyByVector = function (matrix, cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const vX = cartesian.x; - const vY = cartesian.y; - const vZ = cartesian.z; - - const x = matrix[0] * vX + matrix[3] * vY + matrix[6] * vZ; - const y = matrix[1] * vX + matrix[4] * vY + matrix[7] * vZ; - const z = matrix[2] * vX + matrix[5] * vY + matrix[8] * vZ; - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Computes the product of a matrix and a scalar. - * - * @param {Matrix3} matrix The matrix. - * @param {Number} scalar The number to multiply by. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - */ - Matrix3.multiplyByScalar = function (matrix, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0] * scalar; - result[1] = matrix[1] * scalar; - result[2] = matrix[2] * scalar; - result[3] = matrix[3] * scalar; - result[4] = matrix[4] * scalar; - result[5] = matrix[5] * scalar; - result[6] = matrix[6] * scalar; - result[7] = matrix[7] * scalar; - result[8] = matrix[8] * scalar; - return result; - }; - - /** - * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix. - * - * @param {Matrix3} matrix The matrix on the left-hand side. - * @param {Number} scale The non-uniform scale on the right-hand side. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * - * @example - * // Instead of Cesium.Matrix3.multiply(m, Cesium.Matrix3.fromScale(scale), m); - * Cesium.Matrix3.multiplyByScale(m, scale, m); - * - * @see Matrix3.multiplyByUniformScale - * @see Matrix3.fromScale - * @see Matrix3.fromUniformScale - * @see Matrix3.setScale - * @see Matrix3.setUniformScale - * @see Matrix3.getScale - */ - Matrix3.multiplyByScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0] * scale.x; - result[1] = matrix[1] * scale.x; - result[2] = matrix[2] * scale.x; - result[3] = matrix[3] * scale.y; - result[4] = matrix[4] * scale.y; - result[5] = matrix[5] * scale.y; - result[6] = matrix[6] * scale.z; - result[7] = matrix[7] * scale.z; - result[8] = matrix[8] * scale.z; - - return result; - }; - - /** - * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix. - * - * @param {Matrix3} matrix The matrix on the left-hand side. - * @param {Number} scale The uniform scale on the right-hand side. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @example - * // Instead of Cesium.Matrix3.multiply(m, Cesium.Matrix3.fromUniformScale(scale), m); - * Cesium.Matrix3.multiplyByUniformScale(m, scale, m); - * - * @see Matrix3.multiplyByScale - * @see Matrix3.fromScale - * @see Matrix3.fromUniformScale - * @see Matrix3.setScale - * @see Matrix3.setUniformScale - * @see Matrix3.getScale - */ - Matrix3.multiplyByUniformScale = function (matrix, scale, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.number("scale", scale); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = matrix[0] * scale; - result[1] = matrix[1] * scale; - result[2] = matrix[2] * scale; - result[3] = matrix[3] * scale; - result[4] = matrix[4] * scale; - result[5] = matrix[5] * scale; - result[6] = matrix[6] * scale; - result[7] = matrix[7] * scale; - result[8] = matrix[8] * scale; - - return result; - }; - - /** - * Creates a negated copy of the provided matrix. - * - * @param {Matrix3} matrix The matrix to negate. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - */ - Matrix3.negate = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = -matrix[0]; - result[1] = -matrix[1]; - result[2] = -matrix[2]; - result[3] = -matrix[3]; - result[4] = -matrix[4]; - result[5] = -matrix[5]; - result[6] = -matrix[6]; - result[7] = -matrix[7]; - result[8] = -matrix[8]; - return result; - }; - - /** - * Computes the transpose of the provided matrix. - * - * @param {Matrix3} matrix The matrix to transpose. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - */ - Matrix3.transpose = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const column0Row0 = matrix[0]; - const column0Row1 = matrix[3]; - const column0Row2 = matrix[6]; - const column1Row0 = matrix[1]; - const column1Row1 = matrix[4]; - const column1Row2 = matrix[7]; - const column2Row0 = matrix[2]; - const column2Row1 = matrix[5]; - const column2Row2 = matrix[8]; - - result[0] = column0Row0; - result[1] = column0Row1; - result[2] = column0Row2; - result[3] = column1Row0; - result[4] = column1Row1; - result[5] = column1Row2; - result[6] = column2Row0; - result[7] = column2Row1; - result[8] = column2Row2; - return result; - }; - - function computeFrobeniusNorm(matrix) { - let norm = 0.0; - for (let i = 0; i < 9; ++i) { - const temp = matrix[i]; - norm += temp * temp; - } - - return Math.sqrt(norm); - } - - const rowVal = [1, 0, 0]; - const colVal = [2, 2, 1]; - - function offDiagonalFrobeniusNorm(matrix) { - // Computes the "off-diagonal" Frobenius norm. - // Assumes matrix is symmetric. - - let norm = 0.0; - for (let i = 0; i < 3; ++i) { - const temp = matrix[Matrix3.getElementIndex(colVal[i], rowVal[i])]; - norm += 2.0 * temp * temp; - } - - return Math.sqrt(norm); - } - - function shurDecomposition(matrix, result) { - // This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan, - // section 8.4.2 The 2by2 Symmetric Schur Decomposition. - // - // The routine takes a matrix, which is assumed to be symmetric, and - // finds the largest off-diagonal term, and then creates - // a matrix (result) which can be used to help reduce it - - const tolerance = Math$1.CesiumMath.EPSILON15; - - let maxDiagonal = 0.0; - let rotAxis = 1; - - // find pivot (rotAxis) based on max diagonal of matrix - for (let i = 0; i < 3; ++i) { - const temp = Math.abs( - matrix[Matrix3.getElementIndex(colVal[i], rowVal[i])] - ); - if (temp > maxDiagonal) { - rotAxis = i; - maxDiagonal = temp; - } - } - - let c = 1.0; - let s = 0.0; - - const p = rowVal[rotAxis]; - const q = colVal[rotAxis]; - - if (Math.abs(matrix[Matrix3.getElementIndex(q, p)]) > tolerance) { - const qq = matrix[Matrix3.getElementIndex(q, q)]; - const pp = matrix[Matrix3.getElementIndex(p, p)]; - const qp = matrix[Matrix3.getElementIndex(q, p)]; - - const tau = (qq - pp) / 2.0 / qp; - let t; - - if (tau < 0.0) { - t = -1.0 / (-tau + Math.sqrt(1.0 + tau * tau)); - } else { - t = 1.0 / (tau + Math.sqrt(1.0 + tau * tau)); - } - - c = 1.0 / Math.sqrt(1.0 + t * t); - s = t * c; - } - - result = Matrix3.clone(Matrix3.IDENTITY, result); - - result[Matrix3.getElementIndex(p, p)] = result[ - Matrix3.getElementIndex(q, q) - ] = c; - result[Matrix3.getElementIndex(q, p)] = s; - result[Matrix3.getElementIndex(p, q)] = -s; - - return result; - } - - const jMatrix = new Matrix3(); - const jMatrixTranspose = new Matrix3(); - - /** - * Computes the eigenvectors and eigenvalues of a symmetric matrix. - *

    - * Returns a diagonal matrix and unitary matrix such that: - * matrix = unitary matrix * diagonal matrix * transpose(unitary matrix) - *

    - *

    - * The values along the diagonal of the diagonal matrix are the eigenvalues. The columns - * of the unitary matrix are the corresponding eigenvectors. - *

    - * - * @param {Matrix3} matrix The matrix to decompose into diagonal and unitary matrix. Expected to be symmetric. - * @param {Object} [result] An object with unitary and diagonal properties which are matrices onto which to store the result. - * @returns {Object} An object with unitary and diagonal properties which are the unitary and diagonal matrices, respectively. - * - * @example - * const a = //... symetric matrix - * const result = { - * unitary : new Cesium.Matrix3(), - * diagonal : new Cesium.Matrix3() - * }; - * Cesium.Matrix3.computeEigenDecomposition(a, result); - * - * const unitaryTranspose = Cesium.Matrix3.transpose(result.unitary, new Cesium.Matrix3()); - * const b = Cesium.Matrix3.multiply(result.unitary, result.diagonal, new Cesium.Matrix3()); - * Cesium.Matrix3.multiply(b, unitaryTranspose, b); // b is now equal to a - * - * const lambda = Cesium.Matrix3.getColumn(result.diagonal, 0, new Cesium.Cartesian3()).x; // first eigenvalue - * const v = Cesium.Matrix3.getColumn(result.unitary, 0, new Cesium.Cartesian3()); // first eigenvector - * const c = Cesium.Cartesian3.multiplyByScalar(v, lambda, new Cesium.Cartesian3()); // equal to Cesium.Matrix3.multiplyByVector(a, v) - */ - Matrix3.computeEigenDecomposition = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - //>>includeEnd('debug'); - - // This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan, - // section 8.4.3 The Classical Jacobi Algorithm - - const tolerance = Math$1.CesiumMath.EPSILON20; - const maxSweeps = 10; - - let count = 0; - let sweep = 0; - - if (!defaultValue.defined(result)) { - result = {}; - } - - const unitaryMatrix = (result.unitary = Matrix3.clone( - Matrix3.IDENTITY, - result.unitary - )); - const diagMatrix = (result.diagonal = Matrix3.clone(matrix, result.diagonal)); - - const epsilon = tolerance * computeFrobeniusNorm(diagMatrix); - - while (sweep < maxSweeps && offDiagonalFrobeniusNorm(diagMatrix) > epsilon) { - shurDecomposition(diagMatrix, jMatrix); - Matrix3.transpose(jMatrix, jMatrixTranspose); - Matrix3.multiply(diagMatrix, jMatrix, diagMatrix); - Matrix3.multiply(jMatrixTranspose, diagMatrix, diagMatrix); - Matrix3.multiply(unitaryMatrix, jMatrix, unitaryMatrix); - - if (++count > 2) { - ++sweep; - count = 0; - } - } - - return result; - }; - - /** - * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements. - * - * @param {Matrix3} matrix The matrix with signed elements. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - */ - Matrix3.abs = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result[0] = Math.abs(matrix[0]); - result[1] = Math.abs(matrix[1]); - result[2] = Math.abs(matrix[2]); - result[3] = Math.abs(matrix[3]); - result[4] = Math.abs(matrix[4]); - result[5] = Math.abs(matrix[5]); - result[6] = Math.abs(matrix[6]); - result[7] = Math.abs(matrix[7]); - result[8] = Math.abs(matrix[8]); - - return result; - }; - - /** - * Computes the determinant of the provided matrix. - * - * @param {Matrix3} matrix The matrix to use. - * @returns {Number} The value of the determinant of the matrix. - */ - Matrix3.determinant = function (matrix) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - //>>includeEnd('debug'); - - const m11 = matrix[0]; - const m21 = matrix[3]; - const m31 = matrix[6]; - const m12 = matrix[1]; - const m22 = matrix[4]; - const m32 = matrix[7]; - const m13 = matrix[2]; - const m23 = matrix[5]; - const m33 = matrix[8]; - - return ( - m11 * (m22 * m33 - m23 * m32) + - m12 * (m23 * m31 - m21 * m33) + - m13 * (m21 * m32 - m22 * m31) - ); - }; - - /** - * Computes the inverse of the provided matrix. - * - * @param {Matrix3} matrix The matrix to invert. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - * - * @exception {DeveloperError} matrix is not invertible. - */ - Matrix3.inverse = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const m11 = matrix[0]; - const m21 = matrix[1]; - const m31 = matrix[2]; - const m12 = matrix[3]; - const m22 = matrix[4]; - const m32 = matrix[5]; - const m13 = matrix[6]; - const m23 = matrix[7]; - const m33 = matrix[8]; - - const determinant = Matrix3.determinant(matrix); - - //>>includeStart('debug', pragmas.debug); - if (Math.abs(determinant) <= Math$1.CesiumMath.EPSILON15) { - throw new Check.DeveloperError("matrix is not invertible"); - } - //>>includeEnd('debug'); - - result[0] = m22 * m33 - m23 * m32; - result[1] = m23 * m31 - m21 * m33; - result[2] = m21 * m32 - m22 * m31; - result[3] = m13 * m32 - m12 * m33; - result[4] = m11 * m33 - m13 * m31; - result[5] = m12 * m31 - m11 * m32; - result[6] = m12 * m23 - m13 * m22; - result[7] = m13 * m21 - m11 * m23; - result[8] = m11 * m22 - m12 * m21; - - const scale = 1.0 / determinant; - return Matrix3.multiplyByScalar(result, scale, result); - }; - - const scratchTransposeMatrix = new Matrix3(); - - /** - * Computes the inverse transpose of a matrix. - * - * @param {Matrix3} matrix The matrix to transpose and invert. - * @param {Matrix3} result The object onto which to store the result. - * @returns {Matrix3} The modified result parameter. - */ - Matrix3.inverseTranspose = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - return Matrix3.inverse( - Matrix3.transpose(matrix, scratchTransposeMatrix), - result - ); - }; - - /** - * Compares the provided matrices componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Matrix3} [left] The first matrix. - * @param {Matrix3} [right] The second matrix. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Matrix3.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left[0] === right[0] && - left[1] === right[1] && - left[2] === right[2] && - left[3] === right[3] && - left[4] === right[4] && - left[5] === right[5] && - left[6] === right[6] && - left[7] === right[7] && - left[8] === right[8]) - ); - }; - - /** - * Compares the provided matrices componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Matrix3} [left] The first matrix. - * @param {Matrix3} [right] The second matrix. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Matrix3.equalsEpsilon = function (left, right, epsilon) { - epsilon = defaultValue.defaultValue(epsilon, 0); - - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math.abs(left[0] - right[0]) <= epsilon && - Math.abs(left[1] - right[1]) <= epsilon && - Math.abs(left[2] - right[2]) <= epsilon && - Math.abs(left[3] - right[3]) <= epsilon && - Math.abs(left[4] - right[4]) <= epsilon && - Math.abs(left[5] - right[5]) <= epsilon && - Math.abs(left[6] - right[6]) <= epsilon && - Math.abs(left[7] - right[7]) <= epsilon && - Math.abs(left[8] - right[8]) <= epsilon) - ); - }; - - /** - * An immutable Matrix3 instance initialized to the identity matrix. - * - * @type {Matrix3} - * @constant - */ - Matrix3.IDENTITY = Object.freeze( - new Matrix3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0) - ); - - /** - * An immutable Matrix3 instance initialized to the zero matrix. - * - * @type {Matrix3} - * @constant - */ - Matrix3.ZERO = Object.freeze( - new Matrix3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) - ); - - /** - * The index into Matrix3 for column 0, row 0. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN0ROW0 = 0; - - /** - * The index into Matrix3 for column 0, row 1. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN0ROW1 = 1; - - /** - * The index into Matrix3 for column 0, row 2. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN0ROW2 = 2; - - /** - * The index into Matrix3 for column 1, row 0. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN1ROW0 = 3; - - /** - * The index into Matrix3 for column 1, row 1. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN1ROW1 = 4; - - /** - * The index into Matrix3 for column 1, row 2. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN1ROW2 = 5; - - /** - * The index into Matrix3 for column 2, row 0. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN2ROW0 = 6; - - /** - * The index into Matrix3 for column 2, row 1. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN2ROW1 = 7; - - /** - * The index into Matrix3 for column 2, row 2. - * - * @type {Number} - * @constant - */ - Matrix3.COLUMN2ROW2 = 8; - - Object.defineProperties(Matrix3.prototype, { - /** - * Gets the number of items in the collection. - * @memberof Matrix3.prototype - * - * @type {Number} - */ - length: { - get: function () { - return Matrix3.packedLength; - }, - }, - }); - - /** - * Duplicates the provided Matrix3 instance. - * - * @param {Matrix3} [result] The object onto which to store the result. - * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided. - */ - Matrix3.prototype.clone = function (result) { - return Matrix3.clone(this, result); - }; - - /** - * Compares this matrix to the provided matrix componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Matrix3} [right] The right hand side matrix. - * @returns {Boolean} true if they are equal, false otherwise. - */ - Matrix3.prototype.equals = function (right) { - return Matrix3.equals(this, right); - }; - - /** - * @private - */ - Matrix3.equalsArray = function (matrix, array, offset) { - return ( - matrix[0] === array[offset] && - matrix[1] === array[offset + 1] && - matrix[2] === array[offset + 2] && - matrix[3] === array[offset + 3] && - matrix[4] === array[offset + 4] && - matrix[5] === array[offset + 5] && - matrix[6] === array[offset + 6] && - matrix[7] === array[offset + 7] && - matrix[8] === array[offset + 8] - ); - }; - - /** - * Compares this matrix to the provided matrix componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Matrix3} [right] The right hand side matrix. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if they are within the provided epsilon, false otherwise. - */ - Matrix3.prototype.equalsEpsilon = function (right, epsilon) { - return Matrix3.equalsEpsilon(this, right, epsilon); - }; - - /** - * Creates a string representing this Matrix with each row being - * on a separate line and in the format '(column0, column1, column2)'. - * - * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2)'. - */ - Matrix3.prototype.toString = function () { - return ( - `(${this[0]}, ${this[3]}, ${this[6]})\n` + - `(${this[1]}, ${this[4]}, ${this[7]})\n` + - `(${this[2]}, ${this[5]}, ${this[8]})` - ); - }; - - exports.Cartesian3 = Cartesian3; - exports.Cartographic = Cartographic; - exports.Ellipsoid = Ellipsoid; - exports.Matrix3 = Matrix3; - -})); -//# sourceMappingURL=Matrix3-f22b0303.js.map diff --git a/debug/cesium/Workers/Matrix3-f22b0303.js.map b/debug/cesium/Workers/Matrix3-f22b0303.js.map deleted file mode 100644 index d7973ea..0000000 --- a/debug/cesium/Workers/Matrix3-f22b0303.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Matrix3-f22b0303.js","sources":["../../../Source/Core/Cartesian3.js","../../../Source/Core/scaleToGeodeticSurface.js","../../../Source/Core/Cartographic.js","../../../Source/Core/Ellipsoid.js","../../../Source/Core/Matrix3.js"],"sourcesContent":["import Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * A 3D Cartesian point.\r\n * @alias Cartesian3\r\n * @constructor\r\n *\r\n * @param {Number} [x=0.0] The X component.\r\n * @param {Number} [y=0.0] The Y component.\r\n * @param {Number} [z=0.0] The Z component.\r\n *\r\n * @see Cartesian2\r\n * @see Cartesian4\r\n * @see Packable\r\n */\r\nfunction Cartesian3(x, y, z) {\r\n /**\r\n * The X component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.x = defaultValue(x, 0.0);\r\n\r\n /**\r\n * The Y component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.y = defaultValue(y, 0.0);\r\n\r\n /**\r\n * The Z component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.z = defaultValue(z, 0.0);\r\n}\r\n\r\n/**\r\n * Converts the provided Spherical into Cartesian3 coordinates.\r\n *\r\n * @param {Spherical} spherical The Spherical to be converted to Cartesian3.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\r\n */\r\nCartesian3.fromSpherical = function (spherical, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"spherical\", spherical);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n const clock = spherical.clock;\r\n const cone = spherical.cone;\r\n const magnitude = defaultValue(spherical.magnitude, 1.0);\r\n const radial = magnitude * Math.sin(cone);\r\n result.x = radial * Math.cos(clock);\r\n result.y = radial * Math.sin(clock);\r\n result.z = magnitude * Math.cos(cone);\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Cartesian3 instance from x, y and z coordinates.\r\n *\r\n * @param {Number} x The x coordinate.\r\n * @param {Number} y The y coordinate.\r\n * @param {Number} z The z coordinate.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\r\n */\r\nCartesian3.fromElements = function (x, y, z, result) {\r\n if (!defined(result)) {\r\n return new Cartesian3(x, y, z);\r\n }\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a Cartesian3 instance.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian to duplicate.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. (Returns undefined if cartesian is undefined)\r\n */\r\nCartesian3.clone = function (cartesian, result) {\r\n if (!defined(cartesian)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new Cartesian3(cartesian.x, cartesian.y, cartesian.z);\r\n }\r\n\r\n result.x = cartesian.x;\r\n result.y = cartesian.y;\r\n result.z = cartesian.z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Cartesian3 instance from an existing Cartesian4. This simply takes the\r\n * x, y, and z properties of the Cartesian4 and drops w.\r\n * @function\r\n *\r\n * @param {Cartesian4} cartesian The Cartesian4 instance to create a Cartesian3 instance from.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\r\n */\r\nCartesian3.fromCartesian4 = Cartesian3.clone;\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nCartesian3.packedLength = 3;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Cartesian3} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCartesian3.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.x;\r\n array[startingIndex++] = value.y;\r\n array[startingIndex] = value.z;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Cartesian3} [result] The object into which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\r\n */\r\nCartesian3.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n result.x = array[startingIndex++];\r\n result.y = array[startingIndex++];\r\n result.z = array[startingIndex];\r\n return result;\r\n};\r\n\r\n/**\r\n * Flattens an array of Cartesian3s into an array of components.\r\n *\r\n * @param {Cartesian3[]} array The array of cartesians to pack.\r\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 3 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 3) elements.\r\n * @returns {Number[]} The packed array.\r\n */\r\nCartesian3.packArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n const resultLength = length * 3;\r\n if (!defined(result)) {\r\n result = new Array(resultLength);\r\n } else if (!Array.isArray(result) && result.length !== resultLength) {\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"If result is a typed array, it must have exactly array.length * 3 elements\"\r\n );\r\n //>>includeEnd('debug');\r\n } else if (result.length !== resultLength) {\r\n result.length = resultLength;\r\n }\r\n\r\n for (let i = 0; i < length; ++i) {\r\n Cartesian3.pack(array[i], result, i * 3);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Unpacks an array of cartesian components into an array of Cartesian3s.\r\n *\r\n * @param {Number[]} array The array of components to unpack.\r\n * @param {Cartesian3[]} [result] The array onto which to store the result.\r\n * @returns {Cartesian3[]} The unpacked array.\r\n */\r\nCartesian3.unpackArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 3);\r\n if (array.length % 3 !== 0) {\r\n throw new DeveloperError(\"array length must be a multiple of 3.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 3);\r\n } else {\r\n result.length = length / 3;\r\n }\r\n\r\n for (let i = 0; i < length; i += 3) {\r\n const index = i / 3;\r\n result[index] = Cartesian3.unpack(array, i, result[index]);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Cartesian3 from three consecutive elements in an array.\r\n * @function\r\n *\r\n * @param {Number[]} array The array whose three consecutive elements correspond to the x, y, and z components, respectively.\r\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to the x component.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\r\n *\r\n * @example\r\n * // Create a Cartesian3 with (1.0, 2.0, 3.0)\r\n * const v = [1.0, 2.0, 3.0];\r\n * const p = Cesium.Cartesian3.fromArray(v);\r\n *\r\n * // Create a Cartesian3 with (1.0, 2.0, 3.0) using an offset into an array\r\n * const v2 = [0.0, 0.0, 1.0, 2.0, 3.0];\r\n * const p2 = Cesium.Cartesian3.fromArray(v2, 2);\r\n */\r\nCartesian3.fromArray = Cartesian3.unpack;\r\n\r\n/**\r\n * Computes the value of the maximum component for the supplied Cartesian.\r\n *\r\n * @param {Cartesian3} cartesian The cartesian to use.\r\n * @returns {Number} The value of the maximum component.\r\n */\r\nCartesian3.maximumComponent = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return Math.max(cartesian.x, cartesian.y, cartesian.z);\r\n};\r\n\r\n/**\r\n * Computes the value of the minimum component for the supplied Cartesian.\r\n *\r\n * @param {Cartesian3} cartesian The cartesian to use.\r\n * @returns {Number} The value of the minimum component.\r\n */\r\nCartesian3.minimumComponent = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return Math.min(cartesian.x, cartesian.y, cartesian.z);\r\n};\r\n\r\n/**\r\n * Compares two Cartesians and computes a Cartesian which contains the minimum components of the supplied Cartesians.\r\n *\r\n * @param {Cartesian3} first A cartesian to compare.\r\n * @param {Cartesian3} second A cartesian to compare.\r\n * @param {Cartesian3} result The object into which to store the result.\r\n * @returns {Cartesian3} A cartesian with the minimum components.\r\n */\r\nCartesian3.minimumByComponent = function (first, second, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"first\", first);\r\n Check.typeOf.object(\"second\", second);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.min(first.x, second.x);\r\n result.y = Math.min(first.y, second.y);\r\n result.z = Math.min(first.z, second.z);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares two Cartesians and computes a Cartesian which contains the maximum components of the supplied Cartesians.\r\n *\r\n * @param {Cartesian3} first A cartesian to compare.\r\n * @param {Cartesian3} second A cartesian to compare.\r\n * @param {Cartesian3} result The object into which to store the result.\r\n * @returns {Cartesian3} A cartesian with the maximum components.\r\n */\r\nCartesian3.maximumByComponent = function (first, second, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"first\", first);\r\n Check.typeOf.object(\"second\", second);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.max(first.x, second.x);\r\n result.y = Math.max(first.y, second.y);\r\n result.z = Math.max(first.z, second.z);\r\n return result;\r\n};\r\n\r\n/**\r\n * Constrain a value to lie between two values.\r\n *\r\n * @param {Cartesian3} cartesian The value to clamp.\r\n * @param {Cartesian3} min The minimum bound.\r\n * @param {Cartesian3} max The maximum bound.\r\n * @param {Cartesian3} result The object into which to store the result.\r\n * @returns {Cartesian3} The clamped value such that min <= value <= max.\r\n */\r\nCartesian3.clamp = function (value, min, max, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.typeOf.object(\"min\", min);\r\n Check.typeOf.object(\"max\", max);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const x = CesiumMath.clamp(value.x, min.x, max.x);\r\n const y = CesiumMath.clamp(value.y, min.y, max.y);\r\n const z = CesiumMath.clamp(value.z, min.z, max.z);\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the provided Cartesian's squared magnitude.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian instance whose squared magnitude is to be computed.\r\n * @returns {Number} The squared magnitude.\r\n */\r\nCartesian3.magnitudeSquared = function (cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n return (\r\n cartesian.x * cartesian.x +\r\n cartesian.y * cartesian.y +\r\n cartesian.z * cartesian.z\r\n );\r\n};\r\n\r\n/**\r\n * Computes the Cartesian's magnitude (length).\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian instance whose magnitude is to be computed.\r\n * @returns {Number} The magnitude.\r\n */\r\nCartesian3.magnitude = function (cartesian) {\r\n return Math.sqrt(Cartesian3.magnitudeSquared(cartesian));\r\n};\r\n\r\nconst distanceScratch = new Cartesian3();\r\n\r\n/**\r\n * Computes the distance between two points.\r\n *\r\n * @param {Cartesian3} left The first point to compute the distance from.\r\n * @param {Cartesian3} right The second point to compute the distance to.\r\n * @returns {Number} The distance between two points.\r\n *\r\n * @example\r\n * // Returns 1.0\r\n * const d = Cesium.Cartesian3.distance(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(2.0, 0.0, 0.0));\r\n */\r\nCartesian3.distance = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian3.subtract(left, right, distanceScratch);\r\n return Cartesian3.magnitude(distanceScratch);\r\n};\r\n\r\n/**\r\n * Computes the squared distance between two points. Comparing squared distances\r\n * using this function is more efficient than comparing distances using {@link Cartesian3#distance}.\r\n *\r\n * @param {Cartesian3} left The first point to compute the distance from.\r\n * @param {Cartesian3} right The second point to compute the distance to.\r\n * @returns {Number} The distance between two points.\r\n *\r\n * @example\r\n * // Returns 4.0, not 2.0\r\n * const d = Cesium.Cartesian3.distanceSquared(new Cesium.Cartesian3(1.0, 0.0, 0.0), new Cesium.Cartesian3(3.0, 0.0, 0.0));\r\n */\r\nCartesian3.distanceSquared = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian3.subtract(left, right, distanceScratch);\r\n return Cartesian3.magnitudeSquared(distanceScratch);\r\n};\r\n\r\n/**\r\n * Computes the normalized form of the supplied Cartesian.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian to be normalized.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.normalize = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const magnitude = Cartesian3.magnitude(cartesian);\r\n\r\n result.x = cartesian.x / magnitude;\r\n result.y = cartesian.y / magnitude;\r\n result.z = cartesian.z / magnitude;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (isNaN(result.x) || isNaN(result.y) || isNaN(result.z)) {\r\n throw new DeveloperError(\"normalized result is not a number\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the dot (scalar) product of two Cartesians.\r\n *\r\n * @param {Cartesian3} left The first Cartesian.\r\n * @param {Cartesian3} right The second Cartesian.\r\n * @returns {Number} The dot product.\r\n */\r\nCartesian3.dot = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n return left.x * right.x + left.y * right.y + left.z * right.z;\r\n};\r\n\r\n/**\r\n * Computes the componentwise product of two Cartesians.\r\n *\r\n * @param {Cartesian3} left The first Cartesian.\r\n * @param {Cartesian3} right The second Cartesian.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.multiplyComponents = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x * right.x;\r\n result.y = left.y * right.y;\r\n result.z = left.z * right.z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise quotient of two Cartesians.\r\n *\r\n * @param {Cartesian3} left The first Cartesian.\r\n * @param {Cartesian3} right The second Cartesian.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.divideComponents = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x / right.x;\r\n result.y = left.y / right.y;\r\n result.z = left.z / right.z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise sum of two Cartesians.\r\n *\r\n * @param {Cartesian3} left The first Cartesian.\r\n * @param {Cartesian3} right The second Cartesian.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.add = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x + right.x;\r\n result.y = left.y + right.y;\r\n result.z = left.z + right.z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise difference of two Cartesians.\r\n *\r\n * @param {Cartesian3} left The first Cartesian.\r\n * @param {Cartesian3} right The second Cartesian.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.subtract = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x - right.x;\r\n result.y = left.y - right.y;\r\n result.z = left.z - right.z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Multiplies the provided Cartesian componentwise by the provided scalar.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian to be scaled.\r\n * @param {Number} scalar The scalar to multiply with.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.multiplyByScalar = function (cartesian, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = cartesian.x * scalar;\r\n result.y = cartesian.y * scalar;\r\n result.z = cartesian.z * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Divides the provided Cartesian componentwise by the provided scalar.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian to be divided.\r\n * @param {Number} scalar The scalar to divide by.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.divideByScalar = function (cartesian, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = cartesian.x / scalar;\r\n result.y = cartesian.y / scalar;\r\n result.z = cartesian.z / scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Negates the provided Cartesian.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian to be negated.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.negate = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = -cartesian.x;\r\n result.y = -cartesian.y;\r\n result.z = -cartesian.z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the absolute value of the provided Cartesian.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian whose absolute value is to be computed.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.abs = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Math.abs(cartesian.x);\r\n result.y = Math.abs(cartesian.y);\r\n result.z = Math.abs(cartesian.z);\r\n return result;\r\n};\r\n\r\nconst lerpScratch = new Cartesian3();\r\n/**\r\n * Computes the linear interpolation or extrapolation at t using the provided cartesians.\r\n *\r\n * @param {Cartesian3} start The value corresponding to t at 0.0.\r\n * @param {Cartesian3} end The value corresponding to t at 1.0.\r\n * @param {Number} t The point along t at which to interpolate.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nCartesian3.lerp = function (start, end, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"start\", start);\r\n Check.typeOf.object(\"end\", end);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian3.multiplyByScalar(end, t, lerpScratch);\r\n result = Cartesian3.multiplyByScalar(start, 1.0 - t, result);\r\n return Cartesian3.add(lerpScratch, result, result);\r\n};\r\n\r\nconst angleBetweenScratch = new Cartesian3();\r\nconst angleBetweenScratch2 = new Cartesian3();\r\n/**\r\n * Returns the angle, in radians, between the provided Cartesians.\r\n *\r\n * @param {Cartesian3} left The first Cartesian.\r\n * @param {Cartesian3} right The second Cartesian.\r\n * @returns {Number} The angle between the Cartesians.\r\n */\r\nCartesian3.angleBetween = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n Cartesian3.normalize(left, angleBetweenScratch);\r\n Cartesian3.normalize(right, angleBetweenScratch2);\r\n const cosine = Cartesian3.dot(angleBetweenScratch, angleBetweenScratch2);\r\n const sine = Cartesian3.magnitude(\r\n Cartesian3.cross(\r\n angleBetweenScratch,\r\n angleBetweenScratch2,\r\n angleBetweenScratch\r\n )\r\n );\r\n return Math.atan2(sine, cosine);\r\n};\r\n\r\nconst mostOrthogonalAxisScratch = new Cartesian3();\r\n/**\r\n * Returns the axis that is most orthogonal to the provided Cartesian.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian on which to find the most orthogonal axis.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The most orthogonal axis.\r\n */\r\nCartesian3.mostOrthogonalAxis = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const f = Cartesian3.normalize(cartesian, mostOrthogonalAxisScratch);\r\n Cartesian3.abs(f, f);\r\n\r\n if (f.x <= f.y) {\r\n if (f.x <= f.z) {\r\n result = Cartesian3.clone(Cartesian3.UNIT_X, result);\r\n } else {\r\n result = Cartesian3.clone(Cartesian3.UNIT_Z, result);\r\n }\r\n } else if (f.y <= f.z) {\r\n result = Cartesian3.clone(Cartesian3.UNIT_Y, result);\r\n } else {\r\n result = Cartesian3.clone(Cartesian3.UNIT_Z, result);\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Projects vector a onto vector b\r\n * @param {Cartesian3} a The vector that needs projecting\r\n * @param {Cartesian3} b The vector to project onto\r\n * @param {Cartesian3} result The result cartesian\r\n * @returns {Cartesian3} The modified result parameter\r\n */\r\nCartesian3.projectVector = function (a, b, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"a\", a);\r\n Check.defined(\"b\", b);\r\n Check.defined(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const scalar = Cartesian3.dot(a, b) / Cartesian3.dot(b, b);\r\n return Cartesian3.multiplyByScalar(b, scalar, result);\r\n};\r\n\r\n/**\r\n * Compares the provided Cartesians componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Cartesian3} [left] The first Cartesian.\r\n * @param {Cartesian3} [right] The second Cartesian.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nCartesian3.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.x === right.x &&\r\n left.y === right.y &&\r\n left.z === right.z)\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nCartesian3.equalsArray = function (cartesian, array, offset) {\r\n return (\r\n cartesian.x === array[offset] &&\r\n cartesian.y === array[offset + 1] &&\r\n cartesian.z === array[offset + 2]\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided Cartesians componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {Cartesian3} [left] The first Cartesian.\r\n * @param {Cartesian3} [right] The second Cartesian.\r\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nCartesian3.equalsEpsilon = function (\r\n left,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n CesiumMath.equalsEpsilon(\r\n left.x,\r\n right.x,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n left.y,\r\n right.y,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n left.z,\r\n right.z,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ))\r\n );\r\n};\r\n\r\n/**\r\n * Computes the cross (outer) product of two Cartesians.\r\n *\r\n * @param {Cartesian3} left The first Cartesian.\r\n * @param {Cartesian3} right The second Cartesian.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The cross product.\r\n */\r\nCartesian3.cross = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const leftX = left.x;\r\n const leftY = left.y;\r\n const leftZ = left.z;\r\n const rightX = right.x;\r\n const rightY = right.y;\r\n const rightZ = right.z;\r\n\r\n const x = leftY * rightZ - leftZ * rightY;\r\n const y = leftZ * rightX - leftX * rightZ;\r\n const z = leftX * rightY - leftY * rightX;\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the midpoint between the right and left Cartesian.\r\n * @param {Cartesian3} left The first Cartesian.\r\n * @param {Cartesian3} right The second Cartesian.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The midpoint.\r\n */\r\nCartesian3.midpoint = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = (left.x + right.x) * 0.5;\r\n result.y = (left.y + right.y) * 0.5;\r\n result.z = (left.z + right.z) * 0.5;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns a Cartesian3 position from longitude and latitude values given in degrees.\r\n *\r\n * @param {Number} longitude The longitude, in degrees\r\n * @param {Number} latitude The latitude, in degrees\r\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The position\r\n *\r\n * @example\r\n * const position = Cesium.Cartesian3.fromDegrees(-115.0, 37.0);\r\n */\r\nCartesian3.fromDegrees = function (\r\n longitude,\r\n latitude,\r\n height,\r\n ellipsoid,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"longitude\", longitude);\r\n Check.typeOf.number(\"latitude\", latitude);\r\n //>>includeEnd('debug');\r\n\r\n longitude = CesiumMath.toRadians(longitude);\r\n latitude = CesiumMath.toRadians(latitude);\r\n return Cartesian3.fromRadians(longitude, latitude, height, ellipsoid, result);\r\n};\r\n\r\nlet scratchN = new Cartesian3();\r\nlet scratchK = new Cartesian3();\r\nconst wgs84RadiiSquared = new Cartesian3(\r\n 6378137.0 * 6378137.0,\r\n 6378137.0 * 6378137.0,\r\n 6356752.3142451793 * 6356752.3142451793\r\n);\r\n\r\n/**\r\n * Returns a Cartesian3 position from longitude and latitude values given in radians.\r\n *\r\n * @param {Number} longitude The longitude, in radians\r\n * @param {Number} latitude The latitude, in radians\r\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The position\r\n *\r\n * @example\r\n * const position = Cesium.Cartesian3.fromRadians(-2.007, 0.645);\r\n */\r\nCartesian3.fromRadians = function (\r\n longitude,\r\n latitude,\r\n height,\r\n ellipsoid,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"longitude\", longitude);\r\n Check.typeOf.number(\"latitude\", latitude);\r\n //>>includeEnd('debug');\r\n\r\n height = defaultValue(height, 0.0);\r\n const radiiSquared = defined(ellipsoid)\r\n ? ellipsoid.radiiSquared\r\n : wgs84RadiiSquared;\r\n\r\n const cosLatitude = Math.cos(latitude);\r\n scratchN.x = cosLatitude * Math.cos(longitude);\r\n scratchN.y = cosLatitude * Math.sin(longitude);\r\n scratchN.z = Math.sin(latitude);\r\n scratchN = Cartesian3.normalize(scratchN, scratchN);\r\n\r\n Cartesian3.multiplyComponents(radiiSquared, scratchN, scratchK);\r\n const gamma = Math.sqrt(Cartesian3.dot(scratchN, scratchK));\r\n scratchK = Cartesian3.divideByScalar(scratchK, gamma, scratchK);\r\n scratchN = Cartesian3.multiplyByScalar(scratchN, height, scratchN);\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n return Cartesian3.add(scratchK, scratchN, result);\r\n};\r\n\r\n/**\r\n * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in degrees.\r\n *\r\n * @param {Number[]} coordinates A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...].\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the coordinates lie.\r\n * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\r\n * @returns {Cartesian3[]} The array of positions.\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromDegreesArray([-115.0, 37.0, -107.0, 33.0]);\r\n */\r\nCartesian3.fromDegreesArray = function (coordinates, ellipsoid, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"coordinates\", coordinates);\r\n if (coordinates.length < 2 || coordinates.length % 2 !== 0) {\r\n throw new DeveloperError(\r\n \"the number of coordinates must be a multiple of 2 and at least 2\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = coordinates.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 2);\r\n } else {\r\n result.length = length / 2;\r\n }\r\n\r\n for (let i = 0; i < length; i += 2) {\r\n const longitude = coordinates[i];\r\n const latitude = coordinates[i + 1];\r\n const index = i / 2;\r\n result[index] = Cartesian3.fromDegrees(\r\n longitude,\r\n latitude,\r\n 0,\r\n ellipsoid,\r\n result[index]\r\n );\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns an array of Cartesian3 positions given an array of longitude and latitude values given in radians.\r\n *\r\n * @param {Number[]} coordinates A list of longitude and latitude values. Values alternate [longitude, latitude, longitude, latitude...].\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the coordinates lie.\r\n * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\r\n * @returns {Cartesian3[]} The array of positions.\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromRadiansArray([-2.007, 0.645, -1.867, .575]);\r\n */\r\nCartesian3.fromRadiansArray = function (coordinates, ellipsoid, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"coordinates\", coordinates);\r\n if (coordinates.length < 2 || coordinates.length % 2 !== 0) {\r\n throw new DeveloperError(\r\n \"the number of coordinates must be a multiple of 2 and at least 2\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = coordinates.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 2);\r\n } else {\r\n result.length = length / 2;\r\n }\r\n\r\n for (let i = 0; i < length; i += 2) {\r\n const longitude = coordinates[i];\r\n const latitude = coordinates[i + 1];\r\n const index = i / 2;\r\n result[index] = Cartesian3.fromRadians(\r\n longitude,\r\n latitude,\r\n 0,\r\n ellipsoid,\r\n result[index]\r\n );\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in degrees.\r\n *\r\n * @param {Number[]} coordinates A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...].\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\r\n * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\r\n * @returns {Cartesian3[]} The array of positions.\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromDegreesArrayHeights([-115.0, 37.0, 100000.0, -107.0, 33.0, 150000.0]);\r\n */\r\nCartesian3.fromDegreesArrayHeights = function (coordinates, ellipsoid, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"coordinates\", coordinates);\r\n if (coordinates.length < 3 || coordinates.length % 3 !== 0) {\r\n throw new DeveloperError(\r\n \"the number of coordinates must be a multiple of 3 and at least 3\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = coordinates.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 3);\r\n } else {\r\n result.length = length / 3;\r\n }\r\n\r\n for (let i = 0; i < length; i += 3) {\r\n const longitude = coordinates[i];\r\n const latitude = coordinates[i + 1];\r\n const height = coordinates[i + 2];\r\n const index = i / 3;\r\n result[index] = Cartesian3.fromDegrees(\r\n longitude,\r\n latitude,\r\n height,\r\n ellipsoid,\r\n result[index]\r\n );\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns an array of Cartesian3 positions given an array of longitude, latitude and height values where longitude and latitude are given in radians.\r\n *\r\n * @param {Number[]} coordinates A list of longitude, latitude and height values. Values alternate [longitude, latitude, height, longitude, latitude, height...].\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\r\n * @param {Cartesian3[]} [result] An array of Cartesian3 objects to store the result.\r\n * @returns {Cartesian3[]} The array of positions.\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromRadiansArrayHeights([-2.007, 0.645, 100000.0, -1.867, .575, 150000.0]);\r\n */\r\nCartesian3.fromRadiansArrayHeights = function (coordinates, ellipsoid, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"coordinates\", coordinates);\r\n if (coordinates.length < 3 || coordinates.length % 3 !== 0) {\r\n throw new DeveloperError(\r\n \"the number of coordinates must be a multiple of 3 and at least 3\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = coordinates.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 3);\r\n } else {\r\n result.length = length / 3;\r\n }\r\n\r\n for (let i = 0; i < length; i += 3) {\r\n const longitude = coordinates[i];\r\n const latitude = coordinates[i + 1];\r\n const height = coordinates[i + 2];\r\n const index = i / 3;\r\n result[index] = Cartesian3.fromRadians(\r\n longitude,\r\n latitude,\r\n height,\r\n ellipsoid,\r\n result[index]\r\n );\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * An immutable Cartesian3 instance initialized to (0.0, 0.0, 0.0).\r\n *\r\n * @type {Cartesian3}\r\n * @constant\r\n */\r\nCartesian3.ZERO = Object.freeze(new Cartesian3(0.0, 0.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian3 instance initialized to (1.0, 1.0, 1.0).\r\n *\r\n * @type {Cartesian3}\r\n * @constant\r\n */\r\nCartesian3.ONE = Object.freeze(new Cartesian3(1.0, 1.0, 1.0));\r\n\r\n/**\r\n * An immutable Cartesian3 instance initialized to (1.0, 0.0, 0.0).\r\n *\r\n * @type {Cartesian3}\r\n * @constant\r\n */\r\nCartesian3.UNIT_X = Object.freeze(new Cartesian3(1.0, 0.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian3 instance initialized to (0.0, 1.0, 0.0).\r\n *\r\n * @type {Cartesian3}\r\n * @constant\r\n */\r\nCartesian3.UNIT_Y = Object.freeze(new Cartesian3(0.0, 1.0, 0.0));\r\n\r\n/**\r\n * An immutable Cartesian3 instance initialized to (0.0, 0.0, 1.0).\r\n *\r\n * @type {Cartesian3}\r\n * @constant\r\n */\r\nCartesian3.UNIT_Z = Object.freeze(new Cartesian3(0.0, 0.0, 1.0));\r\n\r\n/**\r\n * Duplicates this Cartesian3 instance.\r\n *\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\r\n */\r\nCartesian3.prototype.clone = function (result) {\r\n return Cartesian3.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this Cartesian against the provided Cartesian componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Cartesian3} [right] The right hand side Cartesian.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nCartesian3.prototype.equals = function (right) {\r\n return Cartesian3.equals(this, right);\r\n};\r\n\r\n/**\r\n * Compares this Cartesian against the provided Cartesian componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {Cartesian3} [right] The right hand side Cartesian.\r\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if they are within the provided epsilon, false otherwise.\r\n */\r\nCartesian3.prototype.equalsEpsilon = function (\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return Cartesian3.equalsEpsilon(\r\n this,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n );\r\n};\r\n\r\n/**\r\n * Creates a string representing this Cartesian in the format '(x, y, z)'.\r\n *\r\n * @returns {String} A string representing this Cartesian in the format '(x, y, z)'.\r\n */\r\nCartesian3.prototype.toString = function () {\r\n return `(${this.x}, ${this.y}, ${this.z})`;\r\n};\r\nexport default Cartesian3;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\nconst scaleToGeodeticSurfaceIntersection = new Cartesian3();\r\nconst scaleToGeodeticSurfaceGradient = new Cartesian3();\r\n\r\n/**\r\n * Scales the provided Cartesian position along the geodetic surface normal\r\n * so that it is on the surface of this ellipsoid. If the position is\r\n * at the center of the ellipsoid, this function returns undefined.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian position to scale.\r\n * @param {Cartesian3} oneOverRadii One over radii of the ellipsoid.\r\n * @param {Cartesian3} oneOverRadiiSquared One over radii squared of the ellipsoid.\r\n * @param {Number} centerToleranceSquared Tolerance for closeness to the center.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.\r\n *\r\n * @function scaleToGeodeticSurface\r\n *\r\n * @private\r\n */\r\nfunction scaleToGeodeticSurface(\r\n cartesian,\r\n oneOverRadii,\r\n oneOverRadiiSquared,\r\n centerToleranceSquared,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(cartesian)) {\r\n throw new DeveloperError(\"cartesian is required.\");\r\n }\r\n if (!defined(oneOverRadii)) {\r\n throw new DeveloperError(\"oneOverRadii is required.\");\r\n }\r\n if (!defined(oneOverRadiiSquared)) {\r\n throw new DeveloperError(\"oneOverRadiiSquared is required.\");\r\n }\r\n if (!defined(centerToleranceSquared)) {\r\n throw new DeveloperError(\"centerToleranceSquared is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const positionX = cartesian.x;\r\n const positionY = cartesian.y;\r\n const positionZ = cartesian.z;\r\n\r\n const oneOverRadiiX = oneOverRadii.x;\r\n const oneOverRadiiY = oneOverRadii.y;\r\n const oneOverRadiiZ = oneOverRadii.z;\r\n\r\n const x2 = positionX * positionX * oneOverRadiiX * oneOverRadiiX;\r\n const y2 = positionY * positionY * oneOverRadiiY * oneOverRadiiY;\r\n const z2 = positionZ * positionZ * oneOverRadiiZ * oneOverRadiiZ;\r\n\r\n // Compute the squared ellipsoid norm.\r\n const squaredNorm = x2 + y2 + z2;\r\n const ratio = Math.sqrt(1.0 / squaredNorm);\r\n\r\n // As an initial approximation, assume that the radial intersection is the projection point.\r\n const intersection = Cartesian3.multiplyByScalar(\r\n cartesian,\r\n ratio,\r\n scaleToGeodeticSurfaceIntersection\r\n );\r\n\r\n // If the position is near the center, the iteration will not converge.\r\n if (squaredNorm < centerToleranceSquared) {\r\n return !isFinite(ratio)\r\n ? undefined\r\n : Cartesian3.clone(intersection, result);\r\n }\r\n\r\n const oneOverRadiiSquaredX = oneOverRadiiSquared.x;\r\n const oneOverRadiiSquaredY = oneOverRadiiSquared.y;\r\n const oneOverRadiiSquaredZ = oneOverRadiiSquared.z;\r\n\r\n // Use the gradient at the intersection point in place of the true unit normal.\r\n // The difference in magnitude will be absorbed in the multiplier.\r\n const gradient = scaleToGeodeticSurfaceGradient;\r\n gradient.x = intersection.x * oneOverRadiiSquaredX * 2.0;\r\n gradient.y = intersection.y * oneOverRadiiSquaredY * 2.0;\r\n gradient.z = intersection.z * oneOverRadiiSquaredZ * 2.0;\r\n\r\n // Compute the initial guess at the normal vector multiplier, lambda.\r\n let lambda =\r\n ((1.0 - ratio) * Cartesian3.magnitude(cartesian)) /\r\n (0.5 * Cartesian3.magnitude(gradient));\r\n let correction = 0.0;\r\n\r\n let func;\r\n let denominator;\r\n let xMultiplier;\r\n let yMultiplier;\r\n let zMultiplier;\r\n let xMultiplier2;\r\n let yMultiplier2;\r\n let zMultiplier2;\r\n let xMultiplier3;\r\n let yMultiplier3;\r\n let zMultiplier3;\r\n\r\n do {\r\n lambda -= correction;\r\n\r\n xMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredX);\r\n yMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredY);\r\n zMultiplier = 1.0 / (1.0 + lambda * oneOverRadiiSquaredZ);\r\n\r\n xMultiplier2 = xMultiplier * xMultiplier;\r\n yMultiplier2 = yMultiplier * yMultiplier;\r\n zMultiplier2 = zMultiplier * zMultiplier;\r\n\r\n xMultiplier3 = xMultiplier2 * xMultiplier;\r\n yMultiplier3 = yMultiplier2 * yMultiplier;\r\n zMultiplier3 = zMultiplier2 * zMultiplier;\r\n\r\n func = x2 * xMultiplier2 + y2 * yMultiplier2 + z2 * zMultiplier2 - 1.0;\r\n\r\n // \"denominator\" here refers to the use of this expression in the velocity and acceleration\r\n // computations in the sections to follow.\r\n denominator =\r\n x2 * xMultiplier3 * oneOverRadiiSquaredX +\r\n y2 * yMultiplier3 * oneOverRadiiSquaredY +\r\n z2 * zMultiplier3 * oneOverRadiiSquaredZ;\r\n\r\n const derivative = -2.0 * denominator;\r\n\r\n correction = func / derivative;\r\n } while (Math.abs(func) > CesiumMath.EPSILON12);\r\n\r\n if (!defined(result)) {\r\n return new Cartesian3(\r\n positionX * xMultiplier,\r\n positionY * yMultiplier,\r\n positionZ * zMultiplier\r\n );\r\n }\r\n result.x = positionX * xMultiplier;\r\n result.y = positionY * yMultiplier;\r\n result.z = positionZ * zMultiplier;\r\n return result;\r\n}\r\nexport default scaleToGeodeticSurface;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport scaleToGeodeticSurface from \"./scaleToGeodeticSurface.js\";\r\n\r\n/**\r\n * A position defined by longitude, latitude, and height.\r\n * @alias Cartographic\r\n * @constructor\r\n *\r\n * @param {Number} [longitude=0.0] The longitude, in radians.\r\n * @param {Number} [latitude=0.0] The latitude, in radians.\r\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\r\n *\r\n * @see Ellipsoid\r\n */\r\nfunction Cartographic(longitude, latitude, height) {\r\n /**\r\n * The longitude, in radians.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.longitude = defaultValue(longitude, 0.0);\r\n\r\n /**\r\n * The latitude, in radians.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.latitude = defaultValue(latitude, 0.0);\r\n\r\n /**\r\n * The height, in meters, above the ellipsoid.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.height = defaultValue(height, 0.0);\r\n}\r\n\r\n/**\r\n * Creates a new Cartographic instance from longitude and latitude\r\n * specified in radians.\r\n *\r\n * @param {Number} longitude The longitude, in radians.\r\n * @param {Number} latitude The latitude, in radians.\r\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\r\n */\r\nCartographic.fromRadians = function (longitude, latitude, height, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"longitude\", longitude);\r\n Check.typeOf.number(\"latitude\", latitude);\r\n //>>includeEnd('debug');\r\n\r\n height = defaultValue(height, 0.0);\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(longitude, latitude, height);\r\n }\r\n\r\n result.longitude = longitude;\r\n result.latitude = latitude;\r\n result.height = height;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a new Cartographic instance from longitude and latitude\r\n * specified in degrees. The values in the resulting object will\r\n * be in radians.\r\n *\r\n * @param {Number} longitude The longitude, in degrees.\r\n * @param {Number} latitude The latitude, in degrees.\r\n * @param {Number} [height=0.0] The height, in meters, above the ellipsoid.\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\r\n */\r\nCartographic.fromDegrees = function (longitude, latitude, height, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"longitude\", longitude);\r\n Check.typeOf.number(\"latitude\", latitude);\r\n //>>includeEnd('debug');\r\n longitude = CesiumMath.toRadians(longitude);\r\n latitude = CesiumMath.toRadians(latitude);\r\n\r\n return Cartographic.fromRadians(longitude, latitude, height, result);\r\n};\r\n\r\nconst cartesianToCartographicN = new Cartesian3();\r\nconst cartesianToCartographicP = new Cartesian3();\r\nconst cartesianToCartographicH = new Cartesian3();\r\nconst wgs84OneOverRadii = new Cartesian3(\r\n 1.0 / 6378137.0,\r\n 1.0 / 6378137.0,\r\n 1.0 / 6356752.3142451793\r\n);\r\nconst wgs84OneOverRadiiSquared = new Cartesian3(\r\n 1.0 / (6378137.0 * 6378137.0),\r\n 1.0 / (6378137.0 * 6378137.0),\r\n 1.0 / (6356752.3142451793 * 6356752.3142451793)\r\n);\r\nconst wgs84CenterToleranceSquared = CesiumMath.EPSILON1;\r\n\r\n/**\r\n * Creates a new Cartographic instance from a Cartesian position. The values in the\r\n * resulting object will be in radians.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian position to convert to cartographic representation.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.\r\n */\r\nCartographic.fromCartesian = function (cartesian, ellipsoid, result) {\r\n const oneOverRadii = defined(ellipsoid)\r\n ? ellipsoid.oneOverRadii\r\n : wgs84OneOverRadii;\r\n const oneOverRadiiSquared = defined(ellipsoid)\r\n ? ellipsoid.oneOverRadiiSquared\r\n : wgs84OneOverRadiiSquared;\r\n const centerToleranceSquared = defined(ellipsoid)\r\n ? ellipsoid._centerToleranceSquared\r\n : wgs84CenterToleranceSquared;\r\n\r\n //`cartesian is required.` is thrown from scaleToGeodeticSurface\r\n const p = scaleToGeodeticSurface(\r\n cartesian,\r\n oneOverRadii,\r\n oneOverRadiiSquared,\r\n centerToleranceSquared,\r\n cartesianToCartographicP\r\n );\r\n\r\n if (!defined(p)) {\r\n return undefined;\r\n }\r\n\r\n let n = Cartesian3.multiplyComponents(\r\n p,\r\n oneOverRadiiSquared,\r\n cartesianToCartographicN\r\n );\r\n n = Cartesian3.normalize(n, n);\r\n\r\n const h = Cartesian3.subtract(cartesian, p, cartesianToCartographicH);\r\n\r\n const longitude = Math.atan2(n.y, n.x);\r\n const latitude = Math.asin(n.z);\r\n const height =\r\n CesiumMath.sign(Cartesian3.dot(h, cartesian)) * Cartesian3.magnitude(h);\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(longitude, latitude, height);\r\n }\r\n result.longitude = longitude;\r\n result.latitude = latitude;\r\n result.height = height;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a new Cartesian3 instance from a Cartographic input. The values in the inputted\r\n * object should be in radians.\r\n *\r\n * @param {Cartographic} cartographic Input to be converted into a Cartesian3 output.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the position lies.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The position\r\n */\r\nCartographic.toCartesian = function (cartographic, ellipsoid, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartographic\", cartographic);\r\n //>>includeEnd('debug');\r\n\r\n return Cartesian3.fromRadians(\r\n cartographic.longitude,\r\n cartographic.latitude,\r\n cartographic.height,\r\n ellipsoid,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Duplicates a Cartographic instance.\r\n *\r\n * @param {Cartographic} cartographic The cartographic to duplicate.\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided. (Returns undefined if cartographic is undefined)\r\n */\r\nCartographic.clone = function (cartographic, result) {\r\n if (!defined(cartographic)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new Cartographic(\r\n cartographic.longitude,\r\n cartographic.latitude,\r\n cartographic.height\r\n );\r\n }\r\n result.longitude = cartographic.longitude;\r\n result.latitude = cartographic.latitude;\r\n result.height = cartographic.height;\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided cartographics componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Cartographic} [left] The first cartographic.\r\n * @param {Cartographic} [right] The second cartographic.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nCartographic.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.longitude === right.longitude &&\r\n left.latitude === right.latitude &&\r\n left.height === right.height)\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided cartographics componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Cartographic} [left] The first cartographic.\r\n * @param {Cartographic} [right] The second cartographic.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nCartographic.equalsEpsilon = function (left, right, epsilon) {\r\n epsilon = defaultValue(epsilon, 0);\r\n\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Math.abs(left.longitude - right.longitude) <= epsilon &&\r\n Math.abs(left.latitude - right.latitude) <= epsilon &&\r\n Math.abs(left.height - right.height) <= epsilon)\r\n );\r\n};\r\n\r\n/**\r\n * An immutable Cartographic instance initialized to (0.0, 0.0, 0.0).\r\n *\r\n * @type {Cartographic}\r\n * @constant\r\n */\r\nCartographic.ZERO = Object.freeze(new Cartographic(0.0, 0.0, 0.0));\r\n\r\n/**\r\n * Duplicates this instance.\r\n *\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter or a new Cartographic instance if one was not provided.\r\n */\r\nCartographic.prototype.clone = function (result) {\r\n return Cartographic.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares the provided against this cartographic componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Cartographic} [right] The second cartographic.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nCartographic.prototype.equals = function (right) {\r\n return Cartographic.equals(this, right);\r\n};\r\n\r\n/**\r\n * Compares the provided against this cartographic componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Cartographic} [right] The second cartographic.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nCartographic.prototype.equalsEpsilon = function (right, epsilon) {\r\n return Cartographic.equalsEpsilon(this, right, epsilon);\r\n};\r\n\r\n/**\r\n * Creates a string representing this cartographic in the format '(longitude, latitude, height)'.\r\n *\r\n * @returns {String} A string representing the provided cartographic in the format '(longitude, latitude, height)'.\r\n */\r\nCartographic.prototype.toString = function () {\r\n return `(${this.longitude}, ${this.latitude}, ${this.height})`;\r\n};\r\nexport default Cartographic;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport scaleToGeodeticSurface from \"./scaleToGeodeticSurface.js\";\r\n\r\nfunction initialize(ellipsoid, x, y, z) {\r\n x = defaultValue(x, 0.0);\r\n y = defaultValue(y, 0.0);\r\n z = defaultValue(z, 0.0);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThanOrEquals(\"x\", x, 0.0);\r\n Check.typeOf.number.greaterThanOrEquals(\"y\", y, 0.0);\r\n Check.typeOf.number.greaterThanOrEquals(\"z\", z, 0.0);\r\n //>>includeEnd('debug');\r\n\r\n ellipsoid._radii = new Cartesian3(x, y, z);\r\n\r\n ellipsoid._radiiSquared = new Cartesian3(x * x, y * y, z * z);\r\n\r\n ellipsoid._radiiToTheFourth = new Cartesian3(\r\n x * x * x * x,\r\n y * y * y * y,\r\n z * z * z * z\r\n );\r\n\r\n ellipsoid._oneOverRadii = new Cartesian3(\r\n x === 0.0 ? 0.0 : 1.0 / x,\r\n y === 0.0 ? 0.0 : 1.0 / y,\r\n z === 0.0 ? 0.0 : 1.0 / z\r\n );\r\n\r\n ellipsoid._oneOverRadiiSquared = new Cartesian3(\r\n x === 0.0 ? 0.0 : 1.0 / (x * x),\r\n y === 0.0 ? 0.0 : 1.0 / (y * y),\r\n z === 0.0 ? 0.0 : 1.0 / (z * z)\r\n );\r\n\r\n ellipsoid._minimumRadius = Math.min(x, y, z);\r\n\r\n ellipsoid._maximumRadius = Math.max(x, y, z);\r\n\r\n ellipsoid._centerToleranceSquared = CesiumMath.EPSILON1;\r\n\r\n if (ellipsoid._radiiSquared.z !== 0) {\r\n ellipsoid._squaredXOverSquaredZ =\r\n ellipsoid._radiiSquared.x / ellipsoid._radiiSquared.z;\r\n }\r\n}\r\n\r\n/**\r\n * A quadratic surface defined in Cartesian coordinates by the equation\r\n * (x / a)^2 + (y / b)^2 + (z / c)^2 = 1. Primarily used\r\n * by Cesium to represent the shape of planetary bodies.\r\n *\r\n * Rather than constructing this object directly, one of the provided\r\n * constants is normally used.\r\n * @alias Ellipsoid\r\n * @constructor\r\n *\r\n * @param {Number} [x=0] The radius in the x direction.\r\n * @param {Number} [y=0] The radius in the y direction.\r\n * @param {Number} [z=0] The radius in the z direction.\r\n *\r\n * @exception {DeveloperError} All radii components must be greater than or equal to zero.\r\n *\r\n * @see Ellipsoid.fromCartesian3\r\n * @see Ellipsoid.WGS84\r\n * @see Ellipsoid.UNIT_SPHERE\r\n */\r\nfunction Ellipsoid(x, y, z) {\r\n this._radii = undefined;\r\n this._radiiSquared = undefined;\r\n this._radiiToTheFourth = undefined;\r\n this._oneOverRadii = undefined;\r\n this._oneOverRadiiSquared = undefined;\r\n this._minimumRadius = undefined;\r\n this._maximumRadius = undefined;\r\n this._centerToleranceSquared = undefined;\r\n this._squaredXOverSquaredZ = undefined;\r\n\r\n initialize(this, x, y, z);\r\n}\r\n\r\nObject.defineProperties(Ellipsoid.prototype, {\r\n /**\r\n * Gets the radii of the ellipsoid.\r\n * @memberof Ellipsoid.prototype\r\n * @type {Cartesian3}\r\n * @readonly\r\n */\r\n radii: {\r\n get: function () {\r\n return this._radii;\r\n },\r\n },\r\n /**\r\n * Gets the squared radii of the ellipsoid.\r\n * @memberof Ellipsoid.prototype\r\n * @type {Cartesian3}\r\n * @readonly\r\n */\r\n radiiSquared: {\r\n get: function () {\r\n return this._radiiSquared;\r\n },\r\n },\r\n /**\r\n * Gets the radii of the ellipsoid raise to the fourth power.\r\n * @memberof Ellipsoid.prototype\r\n * @type {Cartesian3}\r\n * @readonly\r\n */\r\n radiiToTheFourth: {\r\n get: function () {\r\n return this._radiiToTheFourth;\r\n },\r\n },\r\n /**\r\n * Gets one over the radii of the ellipsoid.\r\n * @memberof Ellipsoid.prototype\r\n * @type {Cartesian3}\r\n * @readonly\r\n */\r\n oneOverRadii: {\r\n get: function () {\r\n return this._oneOverRadii;\r\n },\r\n },\r\n /**\r\n * Gets one over the squared radii of the ellipsoid.\r\n * @memberof Ellipsoid.prototype\r\n * @type {Cartesian3}\r\n * @readonly\r\n */\r\n oneOverRadiiSquared: {\r\n get: function () {\r\n return this._oneOverRadiiSquared;\r\n },\r\n },\r\n /**\r\n * Gets the minimum radius of the ellipsoid.\r\n * @memberof Ellipsoid.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n minimumRadius: {\r\n get: function () {\r\n return this._minimumRadius;\r\n },\r\n },\r\n /**\r\n * Gets the maximum radius of the ellipsoid.\r\n * @memberof Ellipsoid.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n maximumRadius: {\r\n get: function () {\r\n return this._maximumRadius;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Duplicates an Ellipsoid instance.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid to duplicate.\r\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\r\n * instance should be created.\r\n * @returns {Ellipsoid} The cloned Ellipsoid. (Returns undefined if ellipsoid is undefined)\r\n */\r\nEllipsoid.clone = function (ellipsoid, result) {\r\n if (!defined(ellipsoid)) {\r\n return undefined;\r\n }\r\n const radii = ellipsoid._radii;\r\n\r\n if (!defined(result)) {\r\n return new Ellipsoid(radii.x, radii.y, radii.z);\r\n }\r\n\r\n Cartesian3.clone(radii, result._radii);\r\n Cartesian3.clone(ellipsoid._radiiSquared, result._radiiSquared);\r\n Cartesian3.clone(ellipsoid._radiiToTheFourth, result._radiiToTheFourth);\r\n Cartesian3.clone(ellipsoid._oneOverRadii, result._oneOverRadii);\r\n Cartesian3.clone(ellipsoid._oneOverRadiiSquared, result._oneOverRadiiSquared);\r\n result._minimumRadius = ellipsoid._minimumRadius;\r\n result._maximumRadius = ellipsoid._maximumRadius;\r\n result._centerToleranceSquared = ellipsoid._centerToleranceSquared;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes an Ellipsoid from a Cartesian specifying the radii in x, y, and z directions.\r\n *\r\n * @param {Cartesian3} [cartesian=Cartesian3.ZERO] The ellipsoid's radius in the x, y, and z directions.\r\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\r\n * instance should be created.\r\n * @returns {Ellipsoid} A new Ellipsoid instance.\r\n *\r\n * @exception {DeveloperError} All radii components must be greater than or equal to zero.\r\n *\r\n * @see Ellipsoid.WGS84\r\n * @see Ellipsoid.UNIT_SPHERE\r\n */\r\nEllipsoid.fromCartesian3 = function (cartesian, result) {\r\n if (!defined(result)) {\r\n result = new Ellipsoid();\r\n }\r\n\r\n if (!defined(cartesian)) {\r\n return result;\r\n }\r\n\r\n initialize(result, cartesian.x, cartesian.y, cartesian.z);\r\n return result;\r\n};\r\n\r\n/**\r\n * An Ellipsoid instance initialized to the WGS84 standard.\r\n *\r\n * @type {Ellipsoid}\r\n * @constant\r\n */\r\nEllipsoid.WGS84 = Object.freeze(\r\n new Ellipsoid(6378137.0, 6378137.0, 6356752.3142451793)\r\n);\r\n\r\n/**\r\n * An Ellipsoid instance initialized to radii of (1.0, 1.0, 1.0).\r\n *\r\n * @type {Ellipsoid}\r\n * @constant\r\n */\r\nEllipsoid.UNIT_SPHERE = Object.freeze(new Ellipsoid(1.0, 1.0, 1.0));\r\n\r\n/**\r\n * An Ellipsoid instance initialized to a sphere with the lunar radius.\r\n *\r\n * @type {Ellipsoid}\r\n * @constant\r\n */\r\nEllipsoid.MOON = Object.freeze(\r\n new Ellipsoid(\r\n CesiumMath.LUNAR_RADIUS,\r\n CesiumMath.LUNAR_RADIUS,\r\n CesiumMath.LUNAR_RADIUS\r\n )\r\n);\r\n\r\n/**\r\n * Duplicates an Ellipsoid instance.\r\n *\r\n * @param {Ellipsoid} [result] The object onto which to store the result, or undefined if a new\r\n * instance should be created.\r\n * @returns {Ellipsoid} The cloned Ellipsoid.\r\n */\r\nEllipsoid.prototype.clone = function (result) {\r\n return Ellipsoid.clone(this, result);\r\n};\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nEllipsoid.packedLength = Cartesian3.packedLength;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Ellipsoid} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nEllipsoid.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Cartesian3.pack(value._radii, array, startingIndex);\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Ellipsoid} [result] The object into which to store the result.\r\n * @returns {Ellipsoid} The modified result parameter or a new Ellipsoid instance if one was not provided.\r\n */\r\nEllipsoid.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const radii = Cartesian3.unpack(array, startingIndex);\r\n return Ellipsoid.fromCartesian3(radii, result);\r\n};\r\n\r\n/**\r\n * Computes the unit vector directed from the center of this ellipsoid toward the provided Cartesian position.\r\n * @function\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian for which to to determine the geocentric normal.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\r\n */\r\nEllipsoid.prototype.geocentricSurfaceNormal = Cartesian3.normalize;\r\n\r\n/**\r\n * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.\r\n *\r\n * @param {Cartographic} cartographic The cartographic position for which to to determine the geodetic normal.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\r\n */\r\nEllipsoid.prototype.geodeticSurfaceNormalCartographic = function (\r\n cartographic,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartographic\", cartographic);\r\n //>>includeEnd('debug');\r\n\r\n const longitude = cartographic.longitude;\r\n const latitude = cartographic.latitude;\r\n const cosLatitude = Math.cos(latitude);\r\n\r\n const x = cosLatitude * Math.cos(longitude);\r\n const y = cosLatitude * Math.sin(longitude);\r\n const z = Math.sin(latitude);\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return Cartesian3.normalize(result, result);\r\n};\r\n\r\n/**\r\n * Computes the normal of the plane tangent to the surface of the ellipsoid at the provided position.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian position for which to to determine the surface normal.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided, or undefined if a normal cannot be found.\r\n */\r\nEllipsoid.prototype.geodeticSurfaceNormal = function (cartesian, result) {\r\n if (\r\n Cartesian3.equalsEpsilon(cartesian, Cartesian3.ZERO, CesiumMath.EPSILON14)\r\n ) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n result = Cartesian3.multiplyComponents(\r\n cartesian,\r\n this._oneOverRadiiSquared,\r\n result\r\n );\r\n return Cartesian3.normalize(result, result);\r\n};\r\n\r\nconst cartographicToCartesianNormal = new Cartesian3();\r\nconst cartographicToCartesianK = new Cartesian3();\r\n\r\n/**\r\n * Converts the provided cartographic to Cartesian representation.\r\n *\r\n * @param {Cartographic} cartographic The cartographic position.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\r\n *\r\n * @example\r\n * //Create a Cartographic and determine it's Cartesian representation on a WGS84 ellipsoid.\r\n * const position = new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 5000);\r\n * const cartesianPosition = Cesium.Ellipsoid.WGS84.cartographicToCartesian(position);\r\n */\r\nEllipsoid.prototype.cartographicToCartesian = function (cartographic, result) {\r\n //`cartographic is required` is thrown from geodeticSurfaceNormalCartographic.\r\n const n = cartographicToCartesianNormal;\r\n const k = cartographicToCartesianK;\r\n this.geodeticSurfaceNormalCartographic(cartographic, n);\r\n Cartesian3.multiplyComponents(this._radiiSquared, n, k);\r\n const gamma = Math.sqrt(Cartesian3.dot(n, k));\r\n Cartesian3.divideByScalar(k, gamma, k);\r\n Cartesian3.multiplyByScalar(n, cartographic.height, n);\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n return Cartesian3.add(k, n, result);\r\n};\r\n\r\n/**\r\n * Converts the provided array of cartographics to an array of Cartesians.\r\n *\r\n * @param {Cartographic[]} cartographics An array of cartographic positions.\r\n * @param {Cartesian3[]} [result] The object onto which to store the result.\r\n * @returns {Cartesian3[]} The modified result parameter or a new Array instance if none was provided.\r\n *\r\n * @example\r\n * //Convert an array of Cartographics and determine their Cartesian representation on a WGS84 ellipsoid.\r\n * const positions = [new Cesium.Cartographic(Cesium.Math.toRadians(21), Cesium.Math.toRadians(78), 0),\r\n * new Cesium.Cartographic(Cesium.Math.toRadians(21.321), Cesium.Math.toRadians(78.123), 100),\r\n * new Cesium.Cartographic(Cesium.Math.toRadians(21.645), Cesium.Math.toRadians(78.456), 250)];\r\n * const cartesianPositions = Cesium.Ellipsoid.WGS84.cartographicArrayToCartesianArray(positions);\r\n */\r\nEllipsoid.prototype.cartographicArrayToCartesianArray = function (\r\n cartographics,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartographics\", cartographics);\r\n //>>includeEnd('debug')\r\n\r\n const length = cartographics.length;\r\n if (!defined(result)) {\r\n result = new Array(length);\r\n } else {\r\n result.length = length;\r\n }\r\n for (let i = 0; i < length; i++) {\r\n result[i] = this.cartographicToCartesian(cartographics[i], result[i]);\r\n }\r\n return result;\r\n};\r\n\r\nconst cartesianToCartographicN = new Cartesian3();\r\nconst cartesianToCartographicP = new Cartesian3();\r\nconst cartesianToCartographicH = new Cartesian3();\r\n\r\n/**\r\n * Converts the provided cartesian to cartographic representation.\r\n * The cartesian is undefined at the center of the ellipsoid.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian position to convert to cartographic representation.\r\n * @param {Cartographic} [result] The object onto which to store the result.\r\n * @returns {Cartographic} The modified result parameter, new Cartographic instance if none was provided, or undefined if the cartesian is at the center of the ellipsoid.\r\n *\r\n * @example\r\n * //Create a Cartesian and determine it's Cartographic representation on a WGS84 ellipsoid.\r\n * const position = new Cesium.Cartesian3(17832.12, 83234.52, 952313.73);\r\n * const cartographicPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(position);\r\n */\r\nEllipsoid.prototype.cartesianToCartographic = function (cartesian, result) {\r\n //`cartesian is required.` is thrown from scaleToGeodeticSurface\r\n const p = this.scaleToGeodeticSurface(cartesian, cartesianToCartographicP);\r\n\r\n if (!defined(p)) {\r\n return undefined;\r\n }\r\n\r\n const n = this.geodeticSurfaceNormal(p, cartesianToCartographicN);\r\n const h = Cartesian3.subtract(cartesian, p, cartesianToCartographicH);\r\n\r\n const longitude = Math.atan2(n.y, n.x);\r\n const latitude = Math.asin(n.z);\r\n const height =\r\n CesiumMath.sign(Cartesian3.dot(h, cartesian)) * Cartesian3.magnitude(h);\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(longitude, latitude, height);\r\n }\r\n result.longitude = longitude;\r\n result.latitude = latitude;\r\n result.height = height;\r\n return result;\r\n};\r\n\r\n/**\r\n * Converts the provided array of cartesians to an array of cartographics.\r\n *\r\n * @param {Cartesian3[]} cartesians An array of Cartesian positions.\r\n * @param {Cartographic[]} [result] The object onto which to store the result.\r\n * @returns {Cartographic[]} The modified result parameter or a new Array instance if none was provided.\r\n *\r\n * @example\r\n * //Create an array of Cartesians and determine their Cartographic representation on a WGS84 ellipsoid.\r\n * const positions = [new Cesium.Cartesian3(17832.12, 83234.52, 952313.73),\r\n * new Cesium.Cartesian3(17832.13, 83234.53, 952313.73),\r\n * new Cesium.Cartesian3(17832.14, 83234.54, 952313.73)]\r\n * const cartographicPositions = Cesium.Ellipsoid.WGS84.cartesianArrayToCartographicArray(positions);\r\n */\r\nEllipsoid.prototype.cartesianArrayToCartographicArray = function (\r\n cartesians,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"cartesians\", cartesians);\r\n //>>includeEnd('debug');\r\n\r\n const length = cartesians.length;\r\n if (!defined(result)) {\r\n result = new Array(length);\r\n } else {\r\n result.length = length;\r\n }\r\n for (let i = 0; i < length; ++i) {\r\n result[i] = this.cartesianToCartographic(cartesians[i], result[i]);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Scales the provided Cartesian position along the geodetic surface normal\r\n * so that it is on the surface of this ellipsoid. If the position is\r\n * at the center of the ellipsoid, this function returns undefined.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian position to scale.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter, a new Cartesian3 instance if none was provided, or undefined if the position is at the center.\r\n */\r\nEllipsoid.prototype.scaleToGeodeticSurface = function (cartesian, result) {\r\n return scaleToGeodeticSurface(\r\n cartesian,\r\n this._oneOverRadii,\r\n this._oneOverRadiiSquared,\r\n this._centerToleranceSquared,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Scales the provided Cartesian position along the geocentric surface normal\r\n * so that it is on the surface of this ellipsoid.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian position to scale.\r\n * @param {Cartesian3} [result] The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if none was provided.\r\n */\r\nEllipsoid.prototype.scaleToGeocentricSurface = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n const positionX = cartesian.x;\r\n const positionY = cartesian.y;\r\n const positionZ = cartesian.z;\r\n const oneOverRadiiSquared = this._oneOverRadiiSquared;\r\n\r\n const beta =\r\n 1.0 /\r\n Math.sqrt(\r\n positionX * positionX * oneOverRadiiSquared.x +\r\n positionY * positionY * oneOverRadiiSquared.y +\r\n positionZ * positionZ * oneOverRadiiSquared.z\r\n );\r\n\r\n return Cartesian3.multiplyByScalar(cartesian, beta, result);\r\n};\r\n\r\n/**\r\n * Transforms a Cartesian X, Y, Z position to the ellipsoid-scaled space by multiplying\r\n * its components by the result of {@link Ellipsoid#oneOverRadii}.\r\n *\r\n * @param {Cartesian3} position The position to transform.\r\n * @param {Cartesian3} [result] The position to which to copy the result, or undefined to create and\r\n * return a new instance.\r\n * @returns {Cartesian3} The position expressed in the scaled space. The returned instance is the\r\n * one passed as the result parameter if it is not undefined, or a new instance of it is.\r\n */\r\nEllipsoid.prototype.transformPositionToScaledSpace = function (\r\n position,\r\n result\r\n) {\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n return Cartesian3.multiplyComponents(position, this._oneOverRadii, result);\r\n};\r\n\r\n/**\r\n * Transforms a Cartesian X, Y, Z position from the ellipsoid-scaled space by multiplying\r\n * its components by the result of {@link Ellipsoid#radii}.\r\n *\r\n * @param {Cartesian3} position The position to transform.\r\n * @param {Cartesian3} [result] The position to which to copy the result, or undefined to create and\r\n * return a new instance.\r\n * @returns {Cartesian3} The position expressed in the unscaled space. The returned instance is the\r\n * one passed as the result parameter if it is not undefined, or a new instance of it is.\r\n */\r\nEllipsoid.prototype.transformPositionFromScaledSpace = function (\r\n position,\r\n result\r\n) {\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n return Cartesian3.multiplyComponents(position, this._radii, result);\r\n};\r\n\r\n/**\r\n * Compares this Ellipsoid against the provided Ellipsoid componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Ellipsoid} [right] The other Ellipsoid.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nEllipsoid.prototype.equals = function (right) {\r\n return (\r\n this === right ||\r\n (defined(right) && Cartesian3.equals(this._radii, right._radii))\r\n );\r\n};\r\n\r\n/**\r\n * Creates a string representing this Ellipsoid in the format '(radii.x, radii.y, radii.z)'.\r\n *\r\n * @returns {String} A string representing this ellipsoid in the format '(radii.x, radii.y, radii.z)'.\r\n */\r\nEllipsoid.prototype.toString = function () {\r\n return this._radii.toString();\r\n};\r\n\r\n/**\r\n * Computes a point which is the intersection of the surface normal with the z-axis.\r\n *\r\n * @param {Cartesian3} position the position. must be on the surface of the ellipsoid.\r\n * @param {Number} [buffer = 0.0] A buffer to subtract from the ellipsoid size when checking if the point is inside the ellipsoid.\r\n * In earth case, with common earth datums, there is no need for this buffer since the intersection point is always (relatively) very close to the center.\r\n * In WGS84 datum, intersection point is at max z = +-42841.31151331382 (0.673% of z-axis).\r\n * Intersection point could be outside the ellipsoid if the ratio of MajorAxis / AxisOfRotation is bigger than the square root of 2\r\n * @param {Cartesian3} [result] The cartesian to which to copy the result, or undefined to create and\r\n * return a new instance.\r\n * @returns {Cartesian3 | undefined} the intersection point if it's inside the ellipsoid, undefined otherwise\r\n *\r\n * @exception {DeveloperError} position is required.\r\n * @exception {DeveloperError} Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y).\r\n * @exception {DeveloperError} Ellipsoid.radii.z must be greater than 0.\r\n */\r\nEllipsoid.prototype.getSurfaceNormalIntersectionWithZAxis = function (\r\n position,\r\n buffer,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"position\", position);\r\n\r\n if (\r\n !CesiumMath.equalsEpsilon(\r\n this._radii.x,\r\n this._radii.y,\r\n CesiumMath.EPSILON15\r\n )\r\n ) {\r\n throw new DeveloperError(\r\n \"Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\"\r\n );\r\n }\r\n\r\n Check.typeOf.number.greaterThan(\"Ellipsoid.radii.z\", this._radii.z, 0);\r\n //>>includeEnd('debug');\r\n\r\n buffer = defaultValue(buffer, 0.0);\r\n\r\n const squaredXOverSquaredZ = this._squaredXOverSquaredZ;\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n result.x = 0.0;\r\n result.y = 0.0;\r\n result.z = position.z * (1 - squaredXOverSquaredZ);\r\n\r\n if (Math.abs(result.z) >= this._radii.z - buffer) {\r\n return undefined;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst abscissas = [\r\n 0.14887433898163,\r\n 0.43339539412925,\r\n 0.67940956829902,\r\n 0.86506336668898,\r\n 0.97390652851717,\r\n 0.0,\r\n];\r\nconst weights = [\r\n 0.29552422471475,\r\n 0.26926671930999,\r\n 0.21908636251598,\r\n 0.14945134915058,\r\n 0.066671344308684,\r\n 0.0,\r\n];\r\n\r\n/**\r\n * Compute the 10th order Gauss-Legendre Quadrature of the given definite integral.\r\n *\r\n * @param {Number} a The lower bound for the integration.\r\n * @param {Number} b The upper bound for the integration.\r\n * @param {Ellipsoid~RealValuedScalarFunction} func The function to integrate.\r\n * @returns {Number} The value of the integral of the given function over the given domain.\r\n *\r\n * @private\r\n */\r\nfunction gaussLegendreQuadrature(a, b, func) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"a\", a);\r\n Check.typeOf.number(\"b\", b);\r\n Check.typeOf.func(\"func\", func);\r\n //>>includeEnd('debug');\r\n\r\n // The range is half of the normal range since the five weights add to one (ten weights add to two).\r\n // The values of the abscissas are multiplied by two to account for this.\r\n const xMean = 0.5 * (b + a);\r\n const xRange = 0.5 * (b - a);\r\n\r\n let sum = 0.0;\r\n for (let i = 0; i < 5; i++) {\r\n const dx = xRange * abscissas[i];\r\n sum += weights[i] * (func(xMean + dx) + func(xMean - dx));\r\n }\r\n\r\n // Scale the sum to the range of x.\r\n sum *= xRange;\r\n return sum;\r\n}\r\n\r\n/**\r\n * A real valued scalar function.\r\n * @callback Ellipsoid~RealValuedScalarFunction\r\n *\r\n * @param {Number} x The value used to evaluate the function.\r\n * @returns {Number} The value of the function at x.\r\n *\r\n * @private\r\n */\r\n\r\n/**\r\n * Computes an approximation of the surface area of a rectangle on the surface of an ellipsoid using\r\n * Gauss-Legendre 10th order quadrature.\r\n *\r\n * @param {Rectangle} rectangle The rectangle used for computing the surface area.\r\n * @returns {Number} The approximate area of the rectangle on the surface of this ellipsoid.\r\n */\r\nEllipsoid.prototype.surfaceArea = function (rectangle) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n const minLongitude = rectangle.west;\r\n let maxLongitude = rectangle.east;\r\n const minLatitude = rectangle.south;\r\n const maxLatitude = rectangle.north;\r\n\r\n while (maxLongitude < minLongitude) {\r\n maxLongitude += CesiumMath.TWO_PI;\r\n }\r\n\r\n const radiiSquared = this._radiiSquared;\r\n const a2 = radiiSquared.x;\r\n const b2 = radiiSquared.y;\r\n const c2 = radiiSquared.z;\r\n const a2b2 = a2 * b2;\r\n return gaussLegendreQuadrature(minLatitude, maxLatitude, function (lat) {\r\n // phi represents the angle measured from the north pole\r\n // sin(phi) = sin(pi / 2 - lat) = cos(lat), cos(phi) is similar\r\n const sinPhi = Math.cos(lat);\r\n const cosPhi = Math.sin(lat);\r\n return (\r\n Math.cos(lat) *\r\n gaussLegendreQuadrature(minLongitude, maxLongitude, function (lon) {\r\n const cosTheta = Math.cos(lon);\r\n const sinTheta = Math.sin(lon);\r\n return Math.sqrt(\r\n a2b2 * cosPhi * cosPhi +\r\n c2 *\r\n (b2 * cosTheta * cosTheta + a2 * sinTheta * sinTheta) *\r\n sinPhi *\r\n sinPhi\r\n );\r\n })\r\n );\r\n });\r\n};\r\n\r\nexport default Ellipsoid;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * A 3x3 matrix, indexable as a column-major order array.\r\n * Constructor parameters are in row-major order for code readability.\r\n * @alias Matrix3\r\n * @constructor\r\n * @implements {ArrayLike}\r\n *\r\n * @param {Number} [column0Row0=0.0] The value for column 0, row 0.\r\n * @param {Number} [column1Row0=0.0] The value for column 1, row 0.\r\n * @param {Number} [column2Row0=0.0] The value for column 2, row 0.\r\n * @param {Number} [column0Row1=0.0] The value for column 0, row 1.\r\n * @param {Number} [column1Row1=0.0] The value for column 1, row 1.\r\n * @param {Number} [column2Row1=0.0] The value for column 2, row 1.\r\n * @param {Number} [column0Row2=0.0] The value for column 0, row 2.\r\n * @param {Number} [column1Row2=0.0] The value for column 1, row 2.\r\n * @param {Number} [column2Row2=0.0] The value for column 2, row 2.\r\n *\r\n * @see Matrix3.fromArray\r\n * @see Matrix3.fromColumnMajorArray\r\n * @see Matrix3.fromRowMajorArray\r\n * @see Matrix3.fromQuaternion\r\n * @see Matrix3.fromHeadingPitchRoll\r\n * @see Matrix3.fromScale\r\n * @see Matrix3.fromUniformScale\r\n * @see Matrix3.fromCrossProduct\r\n * @see Matrix3.fromRotationX\r\n * @see Matrix3.fromRotationY\r\n * @see Matrix3.fromRotationZ\r\n * @see Matrix2\r\n * @see Matrix4\r\n */\r\nfunction Matrix3(\r\n column0Row0,\r\n column1Row0,\r\n column2Row0,\r\n column0Row1,\r\n column1Row1,\r\n column2Row1,\r\n column0Row2,\r\n column1Row2,\r\n column2Row2\r\n) {\r\n this[0] = defaultValue(column0Row0, 0.0);\r\n this[1] = defaultValue(column0Row1, 0.0);\r\n this[2] = defaultValue(column0Row2, 0.0);\r\n this[3] = defaultValue(column1Row0, 0.0);\r\n this[4] = defaultValue(column1Row1, 0.0);\r\n this[5] = defaultValue(column1Row2, 0.0);\r\n this[6] = defaultValue(column2Row0, 0.0);\r\n this[7] = defaultValue(column2Row1, 0.0);\r\n this[8] = defaultValue(column2Row2, 0.0);\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nMatrix3.packedLength = 9;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Matrix3} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nMatrix3.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value[0];\r\n array[startingIndex++] = value[1];\r\n array[startingIndex++] = value[2];\r\n array[startingIndex++] = value[3];\r\n array[startingIndex++] = value[4];\r\n array[startingIndex++] = value[5];\r\n array[startingIndex++] = value[6];\r\n array[startingIndex++] = value[7];\r\n array[startingIndex++] = value[8];\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Matrix3} [result] The object into which to store the result.\r\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\r\n */\r\nMatrix3.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new Matrix3();\r\n }\r\n\r\n result[0] = array[startingIndex++];\r\n result[1] = array[startingIndex++];\r\n result[2] = array[startingIndex++];\r\n result[3] = array[startingIndex++];\r\n result[4] = array[startingIndex++];\r\n result[5] = array[startingIndex++];\r\n result[6] = array[startingIndex++];\r\n result[7] = array[startingIndex++];\r\n result[8] = array[startingIndex++];\r\n return result;\r\n};\r\n\r\n/**\r\n * Flattens an array of Matrix3s into an array of components. The components\r\n * are stored in column-major order.\r\n *\r\n * @param {Matrix3[]} array The array of matrices to pack.\r\n * @param {Number[]} [result] The array onto which to store the result. If this is a typed array, it must have array.length * 9 components, else a {@link DeveloperError} will be thrown. If it is a regular array, it will be resized to have (array.length * 9) elements.\r\n * @returns {Number[]} The packed array.\r\n */\r\nMatrix3.packArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n const resultLength = length * 9;\r\n if (!defined(result)) {\r\n result = new Array(resultLength);\r\n } else if (!Array.isArray(result) && result.length !== resultLength) {\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(\r\n \"If result is a typed array, it must have exactly array.length * 9 elements\"\r\n );\r\n //>>includeEnd('debug');\r\n } else if (result.length !== resultLength) {\r\n result.length = resultLength;\r\n }\r\n\r\n for (let i = 0; i < length; ++i) {\r\n Matrix3.pack(array[i], result, i * 9);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Unpacks an array of column-major matrix components into an array of Matrix3s.\r\n *\r\n * @param {Number[]} array The array of components to unpack.\r\n * @param {Matrix3[]} [result] The array onto which to store the result.\r\n * @returns {Matrix3[]} The unpacked array.\r\n */\r\nMatrix3.unpackArray = function (array, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n Check.typeOf.number.greaterThanOrEquals(\"array.length\", array.length, 9);\r\n if (array.length % 9 !== 0) {\r\n throw new DeveloperError(\"array length must be a multiple of 9.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = array.length;\r\n if (!defined(result)) {\r\n result = new Array(length / 9);\r\n } else {\r\n result.length = length / 9;\r\n }\r\n\r\n for (let i = 0; i < length; i += 9) {\r\n const index = i / 9;\r\n result[index] = Matrix3.unpack(array, i, result[index]);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a Matrix3 instance.\r\n *\r\n * @param {Matrix3} matrix The matrix to duplicate.\r\n * @param {Matrix3} [result] The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided. (Returns undefined if matrix is undefined)\r\n */\r\nMatrix3.clone = function (matrix, result) {\r\n if (!defined(matrix)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new Matrix3(\r\n matrix[0],\r\n matrix[3],\r\n matrix[6],\r\n matrix[1],\r\n matrix[4],\r\n matrix[7],\r\n matrix[2],\r\n matrix[5],\r\n matrix[8]\r\n );\r\n }\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[3];\r\n result[4] = matrix[4];\r\n result[5] = matrix[5];\r\n result[6] = matrix[6];\r\n result[7] = matrix[7];\r\n result[8] = matrix[8];\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a Matrix3 from 9 consecutive elements in an array.\r\n *\r\n * @function\r\n * @param {Number[]} array The array whose 9 consecutive elements correspond to the positions of the matrix. Assumes column-major order.\r\n * @param {Number} [startingIndex=0] The offset into the array of the first element, which corresponds to first column first row position in the matrix.\r\n * @param {Matrix3} [result] The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\r\n *\r\n * @example\r\n * // Create the Matrix3:\r\n * // [1.0, 2.0, 3.0]\r\n * // [1.0, 2.0, 3.0]\r\n * // [1.0, 2.0, 3.0]\r\n *\r\n * const v = [1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0];\r\n * const m = Cesium.Matrix3.fromArray(v);\r\n *\r\n * // Create same Matrix3 with using an offset into an array\r\n * const v2 = [0.0, 0.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0];\r\n * const m2 = Cesium.Matrix3.fromArray(v2, 2);\r\n */\r\nMatrix3.fromArray = Matrix3.unpack;\r\n\r\n/**\r\n * Creates a Matrix3 instance from a column-major order array.\r\n *\r\n * @param {Number[]} values The column-major order array.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\r\n */\r\nMatrix3.fromColumnMajorArray = function (values, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"values\", values);\r\n //>>includeEnd('debug');\r\n\r\n return Matrix3.clone(values, result);\r\n};\r\n\r\n/**\r\n * Creates a Matrix3 instance from a row-major order array.\r\n * The resulting matrix will be in column-major order.\r\n *\r\n * @param {Number[]} values The row-major order array.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\r\n */\r\nMatrix3.fromRowMajorArray = function (values, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"values\", values);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(\r\n values[0],\r\n values[1],\r\n values[2],\r\n values[3],\r\n values[4],\r\n values[5],\r\n values[6],\r\n values[7],\r\n values[8]\r\n );\r\n }\r\n result[0] = values[0];\r\n result[1] = values[3];\r\n result[2] = values[6];\r\n result[3] = values[1];\r\n result[4] = values[4];\r\n result[5] = values[7];\r\n result[6] = values[2];\r\n result[7] = values[5];\r\n result[8] = values[8];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a 3x3 rotation matrix from the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion the quaternion to use.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The 3x3 rotation matrix from this quaternion.\r\n */\r\nMatrix3.fromQuaternion = function (quaternion, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n //>>includeEnd('debug');\r\n\r\n const x2 = quaternion.x * quaternion.x;\r\n const xy = quaternion.x * quaternion.y;\r\n const xz = quaternion.x * quaternion.z;\r\n const xw = quaternion.x * quaternion.w;\r\n const y2 = quaternion.y * quaternion.y;\r\n const yz = quaternion.y * quaternion.z;\r\n const yw = quaternion.y * quaternion.w;\r\n const z2 = quaternion.z * quaternion.z;\r\n const zw = quaternion.z * quaternion.w;\r\n const w2 = quaternion.w * quaternion.w;\r\n\r\n const m00 = x2 - y2 - z2 + w2;\r\n const m01 = 2.0 * (xy - zw);\r\n const m02 = 2.0 * (xz + yw);\r\n\r\n const m10 = 2.0 * (xy + zw);\r\n const m11 = -x2 + y2 - z2 + w2;\r\n const m12 = 2.0 * (yz - xw);\r\n\r\n const m20 = 2.0 * (xz - yw);\r\n const m21 = 2.0 * (yz + xw);\r\n const m22 = -x2 - y2 + z2 + w2;\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(m00, m01, m02, m10, m11, m12, m20, m21, m22);\r\n }\r\n result[0] = m00;\r\n result[1] = m10;\r\n result[2] = m20;\r\n result[3] = m01;\r\n result[4] = m11;\r\n result[5] = m21;\r\n result[6] = m02;\r\n result[7] = m12;\r\n result[8] = m22;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a 3x3 rotation matrix from the provided headingPitchRoll. (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles )\r\n *\r\n * @param {HeadingPitchRoll} headingPitchRoll the headingPitchRoll to use.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The 3x3 rotation matrix from this headingPitchRoll.\r\n */\r\nMatrix3.fromHeadingPitchRoll = function (headingPitchRoll, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"headingPitchRoll\", headingPitchRoll);\r\n //>>includeEnd('debug');\r\n\r\n const cosTheta = Math.cos(-headingPitchRoll.pitch);\r\n const cosPsi = Math.cos(-headingPitchRoll.heading);\r\n const cosPhi = Math.cos(headingPitchRoll.roll);\r\n const sinTheta = Math.sin(-headingPitchRoll.pitch);\r\n const sinPsi = Math.sin(-headingPitchRoll.heading);\r\n const sinPhi = Math.sin(headingPitchRoll.roll);\r\n\r\n const m00 = cosTheta * cosPsi;\r\n const m01 = -cosPhi * sinPsi + sinPhi * sinTheta * cosPsi;\r\n const m02 = sinPhi * sinPsi + cosPhi * sinTheta * cosPsi;\r\n\r\n const m10 = cosTheta * sinPsi;\r\n const m11 = cosPhi * cosPsi + sinPhi * sinTheta * sinPsi;\r\n const m12 = -sinPhi * cosPsi + cosPhi * sinTheta * sinPsi;\r\n\r\n const m20 = -sinTheta;\r\n const m21 = sinPhi * cosTheta;\r\n const m22 = cosPhi * cosTheta;\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(m00, m01, m02, m10, m11, m12, m20, m21, m22);\r\n }\r\n result[0] = m00;\r\n result[1] = m10;\r\n result[2] = m20;\r\n result[3] = m01;\r\n result[4] = m11;\r\n result[5] = m21;\r\n result[6] = m02;\r\n result[7] = m12;\r\n result[8] = m22;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix3 instance representing a non-uniform scale.\r\n *\r\n * @param {Cartesian3} scale The x, y, and z scale factors.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\r\n *\r\n * @example\r\n * // Creates\r\n * // [7.0, 0.0, 0.0]\r\n * // [0.0, 8.0, 0.0]\r\n * // [0.0, 0.0, 9.0]\r\n * const m = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(7.0, 8.0, 9.0));\r\n */\r\nMatrix3.fromScale = function (scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"scale\", scale);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(scale.x, 0.0, 0.0, 0.0, scale.y, 0.0, 0.0, 0.0, scale.z);\r\n }\r\n\r\n result[0] = scale.x;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = scale.y;\r\n result[5] = 0.0;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = scale.z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix3 instance representing a uniform scale.\r\n *\r\n * @param {Number} scale The uniform scale factor.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\r\n *\r\n * @example\r\n * // Creates\r\n * // [2.0, 0.0, 0.0]\r\n * // [0.0, 2.0, 0.0]\r\n * // [0.0, 0.0, 2.0]\r\n * const m = Cesium.Matrix3.fromUniformScale(2.0);\r\n */\r\nMatrix3.fromUniformScale = function (scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"scale\", scale);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(scale, 0.0, 0.0, 0.0, scale, 0.0, 0.0, 0.0, scale);\r\n }\r\n\r\n result[0] = scale;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = scale;\r\n result[5] = 0.0;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = scale;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a Matrix3 instance representing the cross product equivalent matrix of a Cartesian3 vector.\r\n *\r\n * @param {Cartesian3} vector the vector on the left hand side of the cross product operation.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\r\n *\r\n * @example\r\n * // Creates\r\n * // [0.0, -9.0, 8.0]\r\n * // [9.0, 0.0, -7.0]\r\n * // [-8.0, 7.0, 0.0]\r\n * const m = Cesium.Matrix3.fromCrossProduct(new Cesium.Cartesian3(7.0, 8.0, 9.0));\r\n */\r\nMatrix3.fromCrossProduct = function (vector, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"vector\", vector);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(\r\n 0.0,\r\n -vector.z,\r\n vector.y,\r\n vector.z,\r\n 0.0,\r\n -vector.x,\r\n -vector.y,\r\n vector.x,\r\n 0.0\r\n );\r\n }\r\n\r\n result[0] = 0.0;\r\n result[1] = vector.z;\r\n result[2] = -vector.y;\r\n result[3] = -vector.z;\r\n result[4] = 0.0;\r\n result[5] = vector.x;\r\n result[6] = vector.y;\r\n result[7] = -vector.x;\r\n result[8] = 0.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a rotation matrix around the x-axis.\r\n *\r\n * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\r\n *\r\n * @example\r\n * // Rotate a point 45 degrees counterclockwise around the x-axis.\r\n * const p = new Cesium.Cartesian3(5, 6, 7);\r\n * const m = Cesium.Matrix3.fromRotationX(Cesium.Math.toRadians(45.0));\r\n * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\r\n */\r\nMatrix3.fromRotationX = function (angle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"angle\", angle);\r\n //>>includeEnd('debug');\r\n\r\n const cosAngle = Math.cos(angle);\r\n const sinAngle = Math.sin(angle);\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(\r\n 1.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n cosAngle,\r\n -sinAngle,\r\n 0.0,\r\n sinAngle,\r\n cosAngle\r\n );\r\n }\r\n\r\n result[0] = 1.0;\r\n result[1] = 0.0;\r\n result[2] = 0.0;\r\n result[3] = 0.0;\r\n result[4] = cosAngle;\r\n result[5] = sinAngle;\r\n result[6] = 0.0;\r\n result[7] = -sinAngle;\r\n result[8] = cosAngle;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a rotation matrix around the y-axis.\r\n *\r\n * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\r\n *\r\n * @example\r\n * // Rotate a point 45 degrees counterclockwise around the y-axis.\r\n * const p = new Cesium.Cartesian3(5, 6, 7);\r\n * const m = Cesium.Matrix3.fromRotationY(Cesium.Math.toRadians(45.0));\r\n * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\r\n */\r\nMatrix3.fromRotationY = function (angle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"angle\", angle);\r\n //>>includeEnd('debug');\r\n\r\n const cosAngle = Math.cos(angle);\r\n const sinAngle = Math.sin(angle);\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(\r\n cosAngle,\r\n 0.0,\r\n sinAngle,\r\n 0.0,\r\n 1.0,\r\n 0.0,\r\n -sinAngle,\r\n 0.0,\r\n cosAngle\r\n );\r\n }\r\n\r\n result[0] = cosAngle;\r\n result[1] = 0.0;\r\n result[2] = -sinAngle;\r\n result[3] = 0.0;\r\n result[4] = 1.0;\r\n result[5] = 0.0;\r\n result[6] = sinAngle;\r\n result[7] = 0.0;\r\n result[8] = cosAngle;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a rotation matrix around the z-axis.\r\n *\r\n * @param {Number} angle The angle, in radians, of the rotation. Positive angles are counterclockwise.\r\n * @param {Matrix3} [result] The object in which the result will be stored, if undefined a new instance will be created.\r\n * @returns {Matrix3} The modified result parameter, or a new Matrix3 instance if one was not provided.\r\n *\r\n * @example\r\n * // Rotate a point 45 degrees counterclockwise around the z-axis.\r\n * const p = new Cesium.Cartesian3(5, 6, 7);\r\n * const m = Cesium.Matrix3.fromRotationZ(Cesium.Math.toRadians(45.0));\r\n * const rotated = Cesium.Matrix3.multiplyByVector(m, p, new Cesium.Cartesian3());\r\n */\r\nMatrix3.fromRotationZ = function (angle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"angle\", angle);\r\n //>>includeEnd('debug');\r\n\r\n const cosAngle = Math.cos(angle);\r\n const sinAngle = Math.sin(angle);\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(\r\n cosAngle,\r\n -sinAngle,\r\n 0.0,\r\n sinAngle,\r\n cosAngle,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n );\r\n }\r\n\r\n result[0] = cosAngle;\r\n result[1] = sinAngle;\r\n result[2] = 0.0;\r\n result[3] = -sinAngle;\r\n result[4] = cosAngle;\r\n result[5] = 0.0;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = 1.0;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates an Array from the provided Matrix3 instance.\r\n * The array will be in column-major order.\r\n *\r\n * @param {Matrix3} matrix The matrix to use..\r\n * @param {Number[]} [result] The Array onto which to store the result.\r\n * @returns {Number[]} The modified Array parameter or a new Array instance if one was not provided.\r\n */\r\nMatrix3.toArray = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return [\r\n matrix[0],\r\n matrix[1],\r\n matrix[2],\r\n matrix[3],\r\n matrix[4],\r\n matrix[5],\r\n matrix[6],\r\n matrix[7],\r\n matrix[8],\r\n ];\r\n }\r\n result[0] = matrix[0];\r\n result[1] = matrix[1];\r\n result[2] = matrix[2];\r\n result[3] = matrix[3];\r\n result[4] = matrix[4];\r\n result[5] = matrix[5];\r\n result[6] = matrix[6];\r\n result[7] = matrix[7];\r\n result[8] = matrix[8];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the array index of the element at the provided row and column.\r\n *\r\n * @param {Number} column The zero-based index of the column.\r\n * @param {Number} row The zero-based index of the row.\r\n * @returns {Number} The index of the element at the provided row and column.\r\n *\r\n * @exception {DeveloperError} row must be 0, 1, or 2.\r\n * @exception {DeveloperError} column must be 0, 1, or 2.\r\n *\r\n * @example\r\n * const myMatrix = new Cesium.Matrix3();\r\n * const column1Row0Index = Cesium.Matrix3.getElementIndex(1, 0);\r\n * const column1Row0 = myMatrix[column1Row0Index]\r\n * myMatrix[column1Row0Index] = 10.0;\r\n */\r\nMatrix3.getElementIndex = function (column, row) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThanOrEquals(\"row\", row, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"row\", row, 2);\r\n Check.typeOf.number.greaterThanOrEquals(\"column\", column, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"column\", column, 2);\r\n //>>includeEnd('debug');\r\n\r\n return column * 3 + row;\r\n};\r\n\r\n/**\r\n * Retrieves a copy of the matrix column at the provided index as a Cartesian3 instance.\r\n *\r\n * @param {Matrix3} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the column to retrieve.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0, 1, or 2.\r\n */\r\nMatrix3.getColumn = function (matrix, index, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const startIndex = index * 3;\r\n const x = matrix[startIndex];\r\n const y = matrix[startIndex + 1];\r\n const z = matrix[startIndex + 2];\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a new matrix that replaces the specified column in the provided matrix with the provided Cartesian3 instance.\r\n *\r\n * @param {Matrix3} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the column to set.\r\n * @param {Cartesian3} cartesian The Cartesian whose values will be assigned to the specified column.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0, 1, or 2.\r\n */\r\nMatrix3.setColumn = function (matrix, index, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result = Matrix3.clone(matrix, result);\r\n const startIndex = index * 3;\r\n result[startIndex] = cartesian.x;\r\n result[startIndex + 1] = cartesian.y;\r\n result[startIndex + 2] = cartesian.z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Retrieves a copy of the matrix row at the provided index as a Cartesian3 instance.\r\n *\r\n * @param {Matrix3} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the row to retrieve.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0, 1, or 2.\r\n */\r\nMatrix3.getRow = function (matrix, index, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const x = matrix[index];\r\n const y = matrix[index + 3];\r\n const z = matrix[index + 6];\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a new matrix that replaces the specified row in the provided matrix with the provided Cartesian3 instance.\r\n *\r\n * @param {Matrix3} matrix The matrix to use.\r\n * @param {Number} index The zero-based index of the row to set.\r\n * @param {Cartesian3} cartesian The Cartesian whose values will be assigned to the specified row.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} index must be 0, 1, or 2.\r\n */\r\nMatrix3.setRow = function (matrix, index, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number.greaterThanOrEquals(\"index\", index, 0);\r\n Check.typeOf.number.lessThanOrEquals(\"index\", index, 2);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result = Matrix3.clone(matrix, result);\r\n result[index] = cartesian.x;\r\n result[index + 3] = cartesian.y;\r\n result[index + 6] = cartesian.z;\r\n return result;\r\n};\r\n\r\nconst scaleScratch1 = new Cartesian3();\r\n\r\n/**\r\n * Computes a new matrix that replaces the scale with the provided scale.\r\n * This assumes the matrix is an affine transformation.\r\n *\r\n * @param {Matrix3} matrix The matrix to use.\r\n * @param {Cartesian3} scale The scale that replaces the scale of the provided matrix.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @see Matrix3.setUniformScale\r\n * @see Matrix3.fromScale\r\n * @see Matrix3.fromUniformScale\r\n * @see Matrix3.multiplyByScale\r\n * @see Matrix3.multiplyByUniformScale\r\n * @see Matrix3.getScale\r\n */\r\nMatrix3.setScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const existingScale = Matrix3.getScale(matrix, scaleScratch1);\r\n const scaleRatioX = scale.x / existingScale.x;\r\n const scaleRatioY = scale.y / existingScale.y;\r\n const scaleRatioZ = scale.z / existingScale.z;\r\n\r\n result[0] = matrix[0] * scaleRatioX;\r\n result[1] = matrix[1] * scaleRatioX;\r\n result[2] = matrix[2] * scaleRatioX;\r\n result[3] = matrix[3] * scaleRatioY;\r\n result[4] = matrix[4] * scaleRatioY;\r\n result[5] = matrix[5] * scaleRatioY;\r\n result[6] = matrix[6] * scaleRatioZ;\r\n result[7] = matrix[7] * scaleRatioZ;\r\n result[8] = matrix[8] * scaleRatioZ;\r\n\r\n return result;\r\n};\r\n\r\nconst scaleScratch2 = new Cartesian3();\r\n\r\n/**\r\n * Computes a new matrix that replaces the scale with the provided uniform scale.\r\n * This assumes the matrix is an affine transformation.\r\n *\r\n * @param {Matrix3} matrix The matrix to use.\r\n * @param {Number} scale The uniform scale that replaces the scale of the provided matrix.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @see Matrix3.setScale\r\n * @see Matrix3.fromScale\r\n * @see Matrix3.fromUniformScale\r\n * @see Matrix3.multiplyByScale\r\n * @see Matrix3.multiplyByUniformScale\r\n * @see Matrix3.getScale\r\n */\r\nMatrix3.setUniformScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const existingScale = Matrix3.getScale(matrix, scaleScratch2);\r\n const scaleRatioX = scale / existingScale.x;\r\n const scaleRatioY = scale / existingScale.y;\r\n const scaleRatioZ = scale / existingScale.z;\r\n\r\n result[0] = matrix[0] * scaleRatioX;\r\n result[1] = matrix[1] * scaleRatioX;\r\n result[2] = matrix[2] * scaleRatioX;\r\n result[3] = matrix[3] * scaleRatioY;\r\n result[4] = matrix[4] * scaleRatioY;\r\n result[5] = matrix[5] * scaleRatioY;\r\n result[6] = matrix[6] * scaleRatioZ;\r\n result[7] = matrix[7] * scaleRatioZ;\r\n result[8] = matrix[8] * scaleRatioZ;\r\n\r\n return result;\r\n};\r\n\r\nconst scratchColumn = new Cartesian3();\r\n\r\n/**\r\n * Extracts the non-uniform scale assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix3} matrix The matrix.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n *\r\n * @see Matrix3.multiplyByScale\r\n * @see Matrix3.multiplyByUniformScale\r\n * @see Matrix3.fromScale\r\n * @see Matrix3.fromUniformScale\r\n * @see Matrix3.setScale\r\n * @see Matrix3.setUniformScale\r\n */\r\nMatrix3.getScale = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = Cartesian3.magnitude(\r\n Cartesian3.fromElements(matrix[0], matrix[1], matrix[2], scratchColumn)\r\n );\r\n result.y = Cartesian3.magnitude(\r\n Cartesian3.fromElements(matrix[3], matrix[4], matrix[5], scratchColumn)\r\n );\r\n result.z = Cartesian3.magnitude(\r\n Cartesian3.fromElements(matrix[6], matrix[7], matrix[8], scratchColumn)\r\n );\r\n return result;\r\n};\r\n\r\nconst scaleScratch3 = new Cartesian3();\r\n\r\n/**\r\n * Computes the maximum scale assuming the matrix is an affine transformation.\r\n * The maximum scale is the maximum length of the column vectors.\r\n *\r\n * @param {Matrix3} matrix The matrix.\r\n * @returns {Number} The maximum scale.\r\n */\r\nMatrix3.getMaximumScale = function (matrix) {\r\n Matrix3.getScale(matrix, scaleScratch3);\r\n return Cartesian3.maximumComponent(scaleScratch3);\r\n};\r\n\r\nconst scaleScratch4 = new Cartesian3();\r\n\r\n/**\r\n * Sets the rotation assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix3} matrix The matrix.\r\n * @param {Matrix3} rotation The rotation matrix.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @see Matrix3.getRotation\r\n */\r\nMatrix3.setRotation = function (matrix, rotation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const scale = Matrix3.getScale(matrix, scaleScratch4);\r\n\r\n result[0] = rotation[0] * scale.x;\r\n result[1] = rotation[1] * scale.x;\r\n result[2] = rotation[2] * scale.x;\r\n result[3] = rotation[3] * scale.y;\r\n result[4] = rotation[4] * scale.y;\r\n result[5] = rotation[5] * scale.y;\r\n result[6] = rotation[6] * scale.z;\r\n result[7] = rotation[7] * scale.z;\r\n result[8] = rotation[8] * scale.z;\r\n\r\n return result;\r\n};\r\n\r\nconst scaleScratch5 = new Cartesian3();\r\n\r\n/**\r\n * Extracts the rotation matrix assuming the matrix is an affine transformation.\r\n *\r\n * @param {Matrix3} matrix The matrix.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @see Matrix3.setRotation\r\n */\r\nMatrix3.getRotation = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const scale = Matrix3.getScale(matrix, scaleScratch5);\r\n\r\n result[0] = matrix[0] / scale.x;\r\n result[1] = matrix[1] / scale.x;\r\n result[2] = matrix[2] / scale.x;\r\n result[3] = matrix[3] / scale.y;\r\n result[4] = matrix[4] / scale.y;\r\n result[5] = matrix[5] / scale.y;\r\n result[6] = matrix[6] / scale.z;\r\n result[7] = matrix[7] / scale.z;\r\n result[8] = matrix[8] / scale.z;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of two matrices.\r\n *\r\n * @param {Matrix3} left The first matrix.\r\n * @param {Matrix3} right The second matrix.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n */\r\nMatrix3.multiply = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const column0Row0 =\r\n left[0] * right[0] + left[3] * right[1] + left[6] * right[2];\r\n const column0Row1 =\r\n left[1] * right[0] + left[4] * right[1] + left[7] * right[2];\r\n const column0Row2 =\r\n left[2] * right[0] + left[5] * right[1] + left[8] * right[2];\r\n\r\n const column1Row0 =\r\n left[0] * right[3] + left[3] * right[4] + left[6] * right[5];\r\n const column1Row1 =\r\n left[1] * right[3] + left[4] * right[4] + left[7] * right[5];\r\n const column1Row2 =\r\n left[2] * right[3] + left[5] * right[4] + left[8] * right[5];\r\n\r\n const column2Row0 =\r\n left[0] * right[6] + left[3] * right[7] + left[6] * right[8];\r\n const column2Row1 =\r\n left[1] * right[6] + left[4] * right[7] + left[7] * right[8];\r\n const column2Row2 =\r\n left[2] * right[6] + left[5] * right[7] + left[8] * right[8];\r\n\r\n result[0] = column0Row0;\r\n result[1] = column0Row1;\r\n result[2] = column0Row2;\r\n result[3] = column1Row0;\r\n result[4] = column1Row1;\r\n result[5] = column1Row2;\r\n result[6] = column2Row0;\r\n result[7] = column2Row1;\r\n result[8] = column2Row2;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the sum of two matrices.\r\n *\r\n * @param {Matrix3} left The first matrix.\r\n * @param {Matrix3} right The second matrix.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n */\r\nMatrix3.add = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = left[0] + right[0];\r\n result[1] = left[1] + right[1];\r\n result[2] = left[2] + right[2];\r\n result[3] = left[3] + right[3];\r\n result[4] = left[4] + right[4];\r\n result[5] = left[5] + right[5];\r\n result[6] = left[6] + right[6];\r\n result[7] = left[7] + right[7];\r\n result[8] = left[8] + right[8];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the difference of two matrices.\r\n *\r\n * @param {Matrix3} left The first matrix.\r\n * @param {Matrix3} right The second matrix.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n */\r\nMatrix3.subtract = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = left[0] - right[0];\r\n result[1] = left[1] - right[1];\r\n result[2] = left[2] - right[2];\r\n result[3] = left[3] - right[3];\r\n result[4] = left[4] - right[4];\r\n result[5] = left[5] - right[5];\r\n result[6] = left[6] - right[6];\r\n result[7] = left[7] - right[7];\r\n result[8] = left[8] - right[8];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix and a column vector.\r\n *\r\n * @param {Matrix3} matrix The matrix.\r\n * @param {Cartesian3} cartesian The column.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nMatrix3.multiplyByVector = function (matrix, cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const vX = cartesian.x;\r\n const vY = cartesian.y;\r\n const vZ = cartesian.z;\r\n\r\n const x = matrix[0] * vX + matrix[3] * vY + matrix[6] * vZ;\r\n const y = matrix[1] * vX + matrix[4] * vY + matrix[7] * vZ;\r\n const z = matrix[2] * vX + matrix[5] * vY + matrix[8] * vZ;\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix and a scalar.\r\n *\r\n * @param {Matrix3} matrix The matrix.\r\n * @param {Number} scalar The number to multiply by.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n */\r\nMatrix3.multiplyByScalar = function (matrix, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0] * scalar;\r\n result[1] = matrix[1] * scalar;\r\n result[2] = matrix[2] * scalar;\r\n result[3] = matrix[3] * scalar;\r\n result[4] = matrix[4] * scalar;\r\n result[5] = matrix[5] * scalar;\r\n result[6] = matrix[6] * scalar;\r\n result[7] = matrix[7] * scalar;\r\n result[8] = matrix[8] * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix times a (non-uniform) scale, as if the scale were a scale matrix.\r\n *\r\n * @param {Matrix3} matrix The matrix on the left-hand side.\r\n * @param {Number} scale The non-uniform scale on the right-hand side.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n *\r\n * @example\r\n * // Instead of Cesium.Matrix3.multiply(m, Cesium.Matrix3.fromScale(scale), m);\r\n * Cesium.Matrix3.multiplyByScale(m, scale, m);\r\n *\r\n * @see Matrix3.multiplyByUniformScale\r\n * @see Matrix3.fromScale\r\n * @see Matrix3.fromUniformScale\r\n * @see Matrix3.setScale\r\n * @see Matrix3.setUniformScale\r\n * @see Matrix3.getScale\r\n */\r\nMatrix3.multiplyByScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0] * scale.x;\r\n result[1] = matrix[1] * scale.x;\r\n result[2] = matrix[2] * scale.x;\r\n result[3] = matrix[3] * scale.y;\r\n result[4] = matrix[4] * scale.y;\r\n result[5] = matrix[5] * scale.y;\r\n result[6] = matrix[6] * scale.z;\r\n result[7] = matrix[7] * scale.z;\r\n result[8] = matrix[8] * scale.z;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the product of a matrix times a uniform scale, as if the scale were a scale matrix.\r\n *\r\n * @param {Matrix3} matrix The matrix on the left-hand side.\r\n * @param {Number} scale The uniform scale on the right-hand side.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @example\r\n * // Instead of Cesium.Matrix3.multiply(m, Cesium.Matrix3.fromUniformScale(scale), m);\r\n * Cesium.Matrix3.multiplyByUniformScale(m, scale, m);\r\n *\r\n * @see Matrix3.multiplyByScale\r\n * @see Matrix3.fromScale\r\n * @see Matrix3.fromUniformScale\r\n * @see Matrix3.setScale\r\n * @see Matrix3.setUniformScale\r\n * @see Matrix3.getScale\r\n */\r\nMatrix3.multiplyByUniformScale = function (matrix, scale, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.number(\"scale\", scale);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = matrix[0] * scale;\r\n result[1] = matrix[1] * scale;\r\n result[2] = matrix[2] * scale;\r\n result[3] = matrix[3] * scale;\r\n result[4] = matrix[4] * scale;\r\n result[5] = matrix[5] * scale;\r\n result[6] = matrix[6] * scale;\r\n result[7] = matrix[7] * scale;\r\n result[8] = matrix[8] * scale;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a negated copy of the provided matrix.\r\n *\r\n * @param {Matrix3} matrix The matrix to negate.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n */\r\nMatrix3.negate = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = -matrix[0];\r\n result[1] = -matrix[1];\r\n result[2] = -matrix[2];\r\n result[3] = -matrix[3];\r\n result[4] = -matrix[4];\r\n result[5] = -matrix[5];\r\n result[6] = -matrix[6];\r\n result[7] = -matrix[7];\r\n result[8] = -matrix[8];\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the transpose of the provided matrix.\r\n *\r\n * @param {Matrix3} matrix The matrix to transpose.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n */\r\nMatrix3.transpose = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const column0Row0 = matrix[0];\r\n const column0Row1 = matrix[3];\r\n const column0Row2 = matrix[6];\r\n const column1Row0 = matrix[1];\r\n const column1Row1 = matrix[4];\r\n const column1Row2 = matrix[7];\r\n const column2Row0 = matrix[2];\r\n const column2Row1 = matrix[5];\r\n const column2Row2 = matrix[8];\r\n\r\n result[0] = column0Row0;\r\n result[1] = column0Row1;\r\n result[2] = column0Row2;\r\n result[3] = column1Row0;\r\n result[4] = column1Row1;\r\n result[5] = column1Row2;\r\n result[6] = column2Row0;\r\n result[7] = column2Row1;\r\n result[8] = column2Row2;\r\n return result;\r\n};\r\n\r\nfunction computeFrobeniusNorm(matrix) {\r\n let norm = 0.0;\r\n for (let i = 0; i < 9; ++i) {\r\n const temp = matrix[i];\r\n norm += temp * temp;\r\n }\r\n\r\n return Math.sqrt(norm);\r\n}\r\n\r\nconst rowVal = [1, 0, 0];\r\nconst colVal = [2, 2, 1];\r\n\r\nfunction offDiagonalFrobeniusNorm(matrix) {\r\n // Computes the \"off-diagonal\" Frobenius norm.\r\n // Assumes matrix is symmetric.\r\n\r\n let norm = 0.0;\r\n for (let i = 0; i < 3; ++i) {\r\n const temp = matrix[Matrix3.getElementIndex(colVal[i], rowVal[i])];\r\n norm += 2.0 * temp * temp;\r\n }\r\n\r\n return Math.sqrt(norm);\r\n}\r\n\r\nfunction shurDecomposition(matrix, result) {\r\n // This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan,\r\n // section 8.4.2 The 2by2 Symmetric Schur Decomposition.\r\n //\r\n // The routine takes a matrix, which is assumed to be symmetric, and\r\n // finds the largest off-diagonal term, and then creates\r\n // a matrix (result) which can be used to help reduce it\r\n\r\n const tolerance = CesiumMath.EPSILON15;\r\n\r\n let maxDiagonal = 0.0;\r\n let rotAxis = 1;\r\n\r\n // find pivot (rotAxis) based on max diagonal of matrix\r\n for (let i = 0; i < 3; ++i) {\r\n const temp = Math.abs(\r\n matrix[Matrix3.getElementIndex(colVal[i], rowVal[i])]\r\n );\r\n if (temp > maxDiagonal) {\r\n rotAxis = i;\r\n maxDiagonal = temp;\r\n }\r\n }\r\n\r\n let c = 1.0;\r\n let s = 0.0;\r\n\r\n const p = rowVal[rotAxis];\r\n const q = colVal[rotAxis];\r\n\r\n if (Math.abs(matrix[Matrix3.getElementIndex(q, p)]) > tolerance) {\r\n const qq = matrix[Matrix3.getElementIndex(q, q)];\r\n const pp = matrix[Matrix3.getElementIndex(p, p)];\r\n const qp = matrix[Matrix3.getElementIndex(q, p)];\r\n\r\n const tau = (qq - pp) / 2.0 / qp;\r\n let t;\r\n\r\n if (tau < 0.0) {\r\n t = -1.0 / (-tau + Math.sqrt(1.0 + tau * tau));\r\n } else {\r\n t = 1.0 / (tau + Math.sqrt(1.0 + tau * tau));\r\n }\r\n\r\n c = 1.0 / Math.sqrt(1.0 + t * t);\r\n s = t * c;\r\n }\r\n\r\n result = Matrix3.clone(Matrix3.IDENTITY, result);\r\n\r\n result[Matrix3.getElementIndex(p, p)] = result[\r\n Matrix3.getElementIndex(q, q)\r\n ] = c;\r\n result[Matrix3.getElementIndex(q, p)] = s;\r\n result[Matrix3.getElementIndex(p, q)] = -s;\r\n\r\n return result;\r\n}\r\n\r\nconst jMatrix = new Matrix3();\r\nconst jMatrixTranspose = new Matrix3();\r\n\r\n/**\r\n * Computes the eigenvectors and eigenvalues of a symmetric matrix.\r\n *

    \r\n * Returns a diagonal matrix and unitary matrix such that:\r\n * matrix = unitary matrix * diagonal matrix * transpose(unitary matrix)\r\n *

    \r\n *

    \r\n * The values along the diagonal of the diagonal matrix are the eigenvalues. The columns\r\n * of the unitary matrix are the corresponding eigenvectors.\r\n *

    \r\n *\r\n * @param {Matrix3} matrix The matrix to decompose into diagonal and unitary matrix. Expected to be symmetric.\r\n * @param {Object} [result] An object with unitary and diagonal properties which are matrices onto which to store the result.\r\n * @returns {Object} An object with unitary and diagonal properties which are the unitary and diagonal matrices, respectively.\r\n *\r\n * @example\r\n * const a = //... symetric matrix\r\n * const result = {\r\n * unitary : new Cesium.Matrix3(),\r\n * diagonal : new Cesium.Matrix3()\r\n * };\r\n * Cesium.Matrix3.computeEigenDecomposition(a, result);\r\n *\r\n * const unitaryTranspose = Cesium.Matrix3.transpose(result.unitary, new Cesium.Matrix3());\r\n * const b = Cesium.Matrix3.multiply(result.unitary, result.diagonal, new Cesium.Matrix3());\r\n * Cesium.Matrix3.multiply(b, unitaryTranspose, b); // b is now equal to a\r\n *\r\n * const lambda = Cesium.Matrix3.getColumn(result.diagonal, 0, new Cesium.Cartesian3()).x; // first eigenvalue\r\n * const v = Cesium.Matrix3.getColumn(result.unitary, 0, new Cesium.Cartesian3()); // first eigenvector\r\n * const c = Cesium.Cartesian3.multiplyByScalar(v, lambda, new Cesium.Cartesian3()); // equal to Cesium.Matrix3.multiplyByVector(a, v)\r\n */\r\nMatrix3.computeEigenDecomposition = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n //>>includeEnd('debug');\r\n\r\n // This routine was created based upon Matrix Computations, 3rd ed., by Golub and Van Loan,\r\n // section 8.4.3 The Classical Jacobi Algorithm\r\n\r\n const tolerance = CesiumMath.EPSILON20;\r\n const maxSweeps = 10;\r\n\r\n let count = 0;\r\n let sweep = 0;\r\n\r\n if (!defined(result)) {\r\n result = {};\r\n }\r\n\r\n const unitaryMatrix = (result.unitary = Matrix3.clone(\r\n Matrix3.IDENTITY,\r\n result.unitary\r\n ));\r\n const diagMatrix = (result.diagonal = Matrix3.clone(matrix, result.diagonal));\r\n\r\n const epsilon = tolerance * computeFrobeniusNorm(diagMatrix);\r\n\r\n while (sweep < maxSweeps && offDiagonalFrobeniusNorm(diagMatrix) > epsilon) {\r\n shurDecomposition(diagMatrix, jMatrix);\r\n Matrix3.transpose(jMatrix, jMatrixTranspose);\r\n Matrix3.multiply(diagMatrix, jMatrix, diagMatrix);\r\n Matrix3.multiply(jMatrixTranspose, diagMatrix, diagMatrix);\r\n Matrix3.multiply(unitaryMatrix, jMatrix, unitaryMatrix);\r\n\r\n if (++count > 2) {\r\n ++sweep;\r\n count = 0;\r\n }\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a matrix, which contains the absolute (unsigned) values of the provided matrix's elements.\r\n *\r\n * @param {Matrix3} matrix The matrix with signed elements.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n */\r\nMatrix3.abs = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result[0] = Math.abs(matrix[0]);\r\n result[1] = Math.abs(matrix[1]);\r\n result[2] = Math.abs(matrix[2]);\r\n result[3] = Math.abs(matrix[3]);\r\n result[4] = Math.abs(matrix[4]);\r\n result[5] = Math.abs(matrix[5]);\r\n result[6] = Math.abs(matrix[6]);\r\n result[7] = Math.abs(matrix[7]);\r\n result[8] = Math.abs(matrix[8]);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the determinant of the provided matrix.\r\n *\r\n * @param {Matrix3} matrix The matrix to use.\r\n * @returns {Number} The value of the determinant of the matrix.\r\n */\r\nMatrix3.determinant = function (matrix) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n //>>includeEnd('debug');\r\n\r\n const m11 = matrix[0];\r\n const m21 = matrix[3];\r\n const m31 = matrix[6];\r\n const m12 = matrix[1];\r\n const m22 = matrix[4];\r\n const m32 = matrix[7];\r\n const m13 = matrix[2];\r\n const m23 = matrix[5];\r\n const m33 = matrix[8];\r\n\r\n return (\r\n m11 * (m22 * m33 - m23 * m32) +\r\n m12 * (m23 * m31 - m21 * m33) +\r\n m13 * (m21 * m32 - m22 * m31)\r\n );\r\n};\r\n\r\n/**\r\n * Computes the inverse of the provided matrix.\r\n *\r\n * @param {Matrix3} matrix The matrix to invert.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n *\r\n * @exception {DeveloperError} matrix is not invertible.\r\n */\r\nMatrix3.inverse = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const m11 = matrix[0];\r\n const m21 = matrix[1];\r\n const m31 = matrix[2];\r\n const m12 = matrix[3];\r\n const m22 = matrix[4];\r\n const m32 = matrix[5];\r\n const m13 = matrix[6];\r\n const m23 = matrix[7];\r\n const m33 = matrix[8];\r\n\r\n const determinant = Matrix3.determinant(matrix);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (Math.abs(determinant) <= CesiumMath.EPSILON15) {\r\n throw new DeveloperError(\"matrix is not invertible\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n result[0] = m22 * m33 - m23 * m32;\r\n result[1] = m23 * m31 - m21 * m33;\r\n result[2] = m21 * m32 - m22 * m31;\r\n result[3] = m13 * m32 - m12 * m33;\r\n result[4] = m11 * m33 - m13 * m31;\r\n result[5] = m12 * m31 - m11 * m32;\r\n result[6] = m12 * m23 - m13 * m22;\r\n result[7] = m13 * m21 - m11 * m23;\r\n result[8] = m11 * m22 - m12 * m21;\r\n\r\n const scale = 1.0 / determinant;\r\n return Matrix3.multiplyByScalar(result, scale, result);\r\n};\r\n\r\nconst scratchTransposeMatrix = new Matrix3();\r\n\r\n/**\r\n * Computes the inverse transpose of a matrix.\r\n *\r\n * @param {Matrix3} matrix The matrix to transpose and invert.\r\n * @param {Matrix3} result The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter.\r\n */\r\nMatrix3.inverseTranspose = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n return Matrix3.inverse(\r\n Matrix3.transpose(matrix, scratchTransposeMatrix),\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided matrices componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Matrix3} [left] The first matrix.\r\n * @param {Matrix3} [right] The second matrix.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nMatrix3.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left[0] === right[0] &&\r\n left[1] === right[1] &&\r\n left[2] === right[2] &&\r\n left[3] === right[3] &&\r\n left[4] === right[4] &&\r\n left[5] === right[5] &&\r\n left[6] === right[6] &&\r\n left[7] === right[7] &&\r\n left[8] === right[8])\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided matrices componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Matrix3} [left] The first matrix.\r\n * @param {Matrix3} [right] The second matrix.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nMatrix3.equalsEpsilon = function (left, right, epsilon) {\r\n epsilon = defaultValue(epsilon, 0);\r\n\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Math.abs(left[0] - right[0]) <= epsilon &&\r\n Math.abs(left[1] - right[1]) <= epsilon &&\r\n Math.abs(left[2] - right[2]) <= epsilon &&\r\n Math.abs(left[3] - right[3]) <= epsilon &&\r\n Math.abs(left[4] - right[4]) <= epsilon &&\r\n Math.abs(left[5] - right[5]) <= epsilon &&\r\n Math.abs(left[6] - right[6]) <= epsilon &&\r\n Math.abs(left[7] - right[7]) <= epsilon &&\r\n Math.abs(left[8] - right[8]) <= epsilon)\r\n );\r\n};\r\n\r\n/**\r\n * An immutable Matrix3 instance initialized to the identity matrix.\r\n *\r\n * @type {Matrix3}\r\n * @constant\r\n */\r\nMatrix3.IDENTITY = Object.freeze(\r\n new Matrix3(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0)\r\n);\r\n\r\n/**\r\n * An immutable Matrix3 instance initialized to the zero matrix.\r\n *\r\n * @type {Matrix3}\r\n * @constant\r\n */\r\nMatrix3.ZERO = Object.freeze(\r\n new Matrix3(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0)\r\n);\r\n\r\n/**\r\n * The index into Matrix3 for column 0, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN0ROW0 = 0;\r\n\r\n/**\r\n * The index into Matrix3 for column 0, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN0ROW1 = 1;\r\n\r\n/**\r\n * The index into Matrix3 for column 0, row 2.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN0ROW2 = 2;\r\n\r\n/**\r\n * The index into Matrix3 for column 1, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN1ROW0 = 3;\r\n\r\n/**\r\n * The index into Matrix3 for column 1, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN1ROW1 = 4;\r\n\r\n/**\r\n * The index into Matrix3 for column 1, row 2.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN1ROW2 = 5;\r\n\r\n/**\r\n * The index into Matrix3 for column 2, row 0.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN2ROW0 = 6;\r\n\r\n/**\r\n * The index into Matrix3 for column 2, row 1.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN2ROW1 = 7;\r\n\r\n/**\r\n * The index into Matrix3 for column 2, row 2.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\nMatrix3.COLUMN2ROW2 = 8;\r\n\r\nObject.defineProperties(Matrix3.prototype, {\r\n /**\r\n * Gets the number of items in the collection.\r\n * @memberof Matrix3.prototype\r\n *\r\n * @type {Number}\r\n */\r\n length: {\r\n get: function () {\r\n return Matrix3.packedLength;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Duplicates the provided Matrix3 instance.\r\n *\r\n * @param {Matrix3} [result] The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if one was not provided.\r\n */\r\nMatrix3.prototype.clone = function (result) {\r\n return Matrix3.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this matrix to the provided matrix componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Matrix3} [right] The right hand side matrix.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nMatrix3.prototype.equals = function (right) {\r\n return Matrix3.equals(this, right);\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nMatrix3.equalsArray = function (matrix, array, offset) {\r\n return (\r\n matrix[0] === array[offset] &&\r\n matrix[1] === array[offset + 1] &&\r\n matrix[2] === array[offset + 2] &&\r\n matrix[3] === array[offset + 3] &&\r\n matrix[4] === array[offset + 4] &&\r\n matrix[5] === array[offset + 5] &&\r\n matrix[6] === array[offset + 6] &&\r\n matrix[7] === array[offset + 7] &&\r\n matrix[8] === array[offset + 8]\r\n );\r\n};\r\n\r\n/**\r\n * Compares this matrix to the provided matrix componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Matrix3} [right] The right hand side matrix.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if they are within the provided epsilon, false otherwise.\r\n */\r\nMatrix3.prototype.equalsEpsilon = function (right, epsilon) {\r\n return Matrix3.equalsEpsilon(this, right, epsilon);\r\n};\r\n\r\n/**\r\n * Creates a string representing this Matrix with each row being\r\n * on a separate line and in the format '(column0, column1, column2)'.\r\n *\r\n * @returns {String} A string representing the provided Matrix with each row being on a separate line and in the format '(column0, column1, column2)'.\r\n */\r\nMatrix3.prototype.toString = function () {\r\n return (\r\n `(${this[0]}, ${this[3]}, ${this[6]})\\n` +\r\n `(${this[1]}, ${this[4]}, ${this[7]})\\n` +\r\n `(${this[2]}, ${this[5]}, ${this[8]})`\r\n );\r\n};\r\nexport default Matrix3;\r\n"],"names":["defaultValue","Check","defined","DeveloperError","CesiumMath","cartesianToCartographicN","cartesianToCartographicP","cartesianToCartographicH"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/OrientedBoundingBox-7e2eebab.js b/debug/cesium/Workers/OrientedBoundingBox-7e2eebab.js deleted file mode 100644 index f4893d0..0000000 --- a/debug/cesium/Workers/OrientedBoundingBox-7e2eebab.js +++ /dev/null @@ -1,1283 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './EllipsoidTangentPlane-c421b2cb', './Math-9be8b918', './Plane-c9f1487d'], (function (exports, Transforms, Matrix2, Matrix3, Check, defaultValue, EllipsoidTangentPlane, Math$1, Plane) { 'use strict'; - - /** - * Creates an instance of an OrientedBoundingBox. - * An OrientedBoundingBox of some object is a closed and convex cuboid. It can provide a tighter bounding volume than {@link BoundingSphere} or {@link AxisAlignedBoundingBox} in many cases. - * @alias OrientedBoundingBox - * @constructor - * - * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the box. - * @param {Matrix3} [halfAxes=Matrix3.ZERO] The three orthogonal half-axes of the bounding box. - * Equivalently, the transformation matrix, to rotate and scale a 0x0x0 - * cube centered at the origin. - * - * - * @example - * // Create an OrientedBoundingBox using a transformation matrix, a position where the box will be translated, and a scale. - * const center = new Cesium.Cartesian3(1.0, 0.0, 0.0); - * const halfAxes = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(1.0, 3.0, 2.0), new Cesium.Matrix3()); - * - * const obb = new Cesium.OrientedBoundingBox(center, halfAxes); - * - * @see BoundingSphere - * @see BoundingRectangle - */ - function OrientedBoundingBox(center, halfAxes) { - /** - * The center of the box. - * @type {Cartesian3} - * @default {@link Cartesian3.ZERO} - */ - this.center = Matrix3.Cartesian3.clone(defaultValue.defaultValue(center, Matrix3.Cartesian3.ZERO)); - /** - * The transformation matrix, to rotate the box to the right position. - * @type {Matrix3} - * @default {@link Matrix3.ZERO} - */ - this.halfAxes = Matrix3.Matrix3.clone(defaultValue.defaultValue(halfAxes, Matrix3.Matrix3.ZERO)); - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - OrientedBoundingBox.packedLength = - Matrix3.Cartesian3.packedLength + Matrix3.Matrix3.packedLength; - - /** - * Stores the provided instance into the provided array. - * - * @param {OrientedBoundingBox} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - OrientedBoundingBox.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix3.Cartesian3.pack(value.center, array, startingIndex); - Matrix3.Matrix3.pack(value.halfAxes, array, startingIndex + Matrix3.Cartesian3.packedLength); - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {OrientedBoundingBox} [result] The object into which to store the result. - * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided. - */ - OrientedBoundingBox.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new OrientedBoundingBox(); - } - - Matrix3.Cartesian3.unpack(array, startingIndex, result.center); - Matrix3.Matrix3.unpack( - array, - startingIndex + Matrix3.Cartesian3.packedLength, - result.halfAxes - ); - return result; - }; - - const scratchCartesian1 = new Matrix3.Cartesian3(); - const scratchCartesian2 = new Matrix3.Cartesian3(); - const scratchCartesian3 = new Matrix3.Cartesian3(); - const scratchCartesian4 = new Matrix3.Cartesian3(); - const scratchCartesian5 = new Matrix3.Cartesian3(); - const scratchCartesian6 = new Matrix3.Cartesian3(); - const scratchCovarianceResult = new Matrix3.Matrix3(); - const scratchEigenResult = { - unitary: new Matrix3.Matrix3(), - diagonal: new Matrix3.Matrix3(), - }; - - /** - * Computes an instance of an OrientedBoundingBox of the given positions. - * This is an implementation of Stefan Gottschalk's Collision Queries using Oriented Bounding Boxes solution (PHD thesis). - * Reference: http://gamma.cs.unc.edu/users/gottschalk/main.pdf - * - * @param {Cartesian3[]} [positions] List of {@link Cartesian3} points that the bounding box will enclose. - * @param {OrientedBoundingBox} [result] The object onto which to store the result. - * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided. - * - * @example - * // Compute an object oriented bounding box enclosing two points. - * const box = Cesium.OrientedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]); - */ - OrientedBoundingBox.fromPoints = function (positions, result) { - if (!defaultValue.defined(result)) { - result = new OrientedBoundingBox(); - } - - if (!defaultValue.defined(positions) || positions.length === 0) { - result.halfAxes = Matrix3.Matrix3.ZERO; - result.center = Matrix3.Cartesian3.ZERO; - return result; - } - - let i; - const length = positions.length; - - const meanPoint = Matrix3.Cartesian3.clone(positions[0], scratchCartesian1); - for (i = 1; i < length; i++) { - Matrix3.Cartesian3.add(meanPoint, positions[i], meanPoint); - } - const invLength = 1.0 / length; - Matrix3.Cartesian3.multiplyByScalar(meanPoint, invLength, meanPoint); - - let exx = 0.0; - let exy = 0.0; - let exz = 0.0; - let eyy = 0.0; - let eyz = 0.0; - let ezz = 0.0; - let p; - - for (i = 0; i < length; i++) { - p = Matrix3.Cartesian3.subtract(positions[i], meanPoint, scratchCartesian2); - exx += p.x * p.x; - exy += p.x * p.y; - exz += p.x * p.z; - eyy += p.y * p.y; - eyz += p.y * p.z; - ezz += p.z * p.z; - } - - exx *= invLength; - exy *= invLength; - exz *= invLength; - eyy *= invLength; - eyz *= invLength; - ezz *= invLength; - - const covarianceMatrix = scratchCovarianceResult; - covarianceMatrix[0] = exx; - covarianceMatrix[1] = exy; - covarianceMatrix[2] = exz; - covarianceMatrix[3] = exy; - covarianceMatrix[4] = eyy; - covarianceMatrix[5] = eyz; - covarianceMatrix[6] = exz; - covarianceMatrix[7] = eyz; - covarianceMatrix[8] = ezz; - - const eigenDecomposition = Matrix3.Matrix3.computeEigenDecomposition( - covarianceMatrix, - scratchEigenResult - ); - const rotation = Matrix3.Matrix3.clone(eigenDecomposition.unitary, result.halfAxes); - - let v1 = Matrix3.Matrix3.getColumn(rotation, 0, scratchCartesian4); - let v2 = Matrix3.Matrix3.getColumn(rotation, 1, scratchCartesian5); - let v3 = Matrix3.Matrix3.getColumn(rotation, 2, scratchCartesian6); - - let u1 = -Number.MAX_VALUE; - let u2 = -Number.MAX_VALUE; - let u3 = -Number.MAX_VALUE; - let l1 = Number.MAX_VALUE; - let l2 = Number.MAX_VALUE; - let l3 = Number.MAX_VALUE; - - for (i = 0; i < length; i++) { - p = positions[i]; - u1 = Math.max(Matrix3.Cartesian3.dot(v1, p), u1); - u2 = Math.max(Matrix3.Cartesian3.dot(v2, p), u2); - u3 = Math.max(Matrix3.Cartesian3.dot(v3, p), u3); - - l1 = Math.min(Matrix3.Cartesian3.dot(v1, p), l1); - l2 = Math.min(Matrix3.Cartesian3.dot(v2, p), l2); - l3 = Math.min(Matrix3.Cartesian3.dot(v3, p), l3); - } - - v1 = Matrix3.Cartesian3.multiplyByScalar(v1, 0.5 * (l1 + u1), v1); - v2 = Matrix3.Cartesian3.multiplyByScalar(v2, 0.5 * (l2 + u2), v2); - v3 = Matrix3.Cartesian3.multiplyByScalar(v3, 0.5 * (l3 + u3), v3); - - const center = Matrix3.Cartesian3.add(v1, v2, result.center); - Matrix3.Cartesian3.add(center, v3, center); - - const scale = scratchCartesian3; - scale.x = u1 - l1; - scale.y = u2 - l2; - scale.z = u3 - l3; - Matrix3.Cartesian3.multiplyByScalar(scale, 0.5, scale); - Matrix3.Matrix3.multiplyByScale(result.halfAxes, scale, result.halfAxes); - - return result; - }; - - const scratchOffset = new Matrix3.Cartesian3(); - const scratchScale = new Matrix3.Cartesian3(); - function fromPlaneExtents( - planeOrigin, - planeXAxis, - planeYAxis, - planeZAxis, - minimumX, - maximumX, - minimumY, - maximumY, - minimumZ, - maximumZ, - result - ) { - //>>includeStart('debug', pragmas.debug); - if ( - !defaultValue.defined(minimumX) || - !defaultValue.defined(maximumX) || - !defaultValue.defined(minimumY) || - !defaultValue.defined(maximumY) || - !defaultValue.defined(minimumZ) || - !defaultValue.defined(maximumZ) - ) { - throw new Check.DeveloperError( - "all extents (minimum/maximum X/Y/Z) are required." - ); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new OrientedBoundingBox(); - } - - const halfAxes = result.halfAxes; - Matrix3.Matrix3.setColumn(halfAxes, 0, planeXAxis, halfAxes); - Matrix3.Matrix3.setColumn(halfAxes, 1, planeYAxis, halfAxes); - Matrix3.Matrix3.setColumn(halfAxes, 2, planeZAxis, halfAxes); - - let centerOffset = scratchOffset; - centerOffset.x = (minimumX + maximumX) / 2.0; - centerOffset.y = (minimumY + maximumY) / 2.0; - centerOffset.z = (minimumZ + maximumZ) / 2.0; - - const scale = scratchScale; - scale.x = (maximumX - minimumX) / 2.0; - scale.y = (maximumY - minimumY) / 2.0; - scale.z = (maximumZ - minimumZ) / 2.0; - - const center = result.center; - centerOffset = Matrix3.Matrix3.multiplyByVector(halfAxes, centerOffset, centerOffset); - Matrix3.Cartesian3.add(planeOrigin, centerOffset, center); - Matrix3.Matrix3.multiplyByScale(halfAxes, scale, halfAxes); - - return result; - } - - const scratchRectangleCenterCartographic = new Matrix3.Cartographic(); - const scratchRectangleCenter = new Matrix3.Cartesian3(); - const scratchPerimeterCartographicNC = new Matrix3.Cartographic(); - const scratchPerimeterCartographicNW = new Matrix3.Cartographic(); - const scratchPerimeterCartographicCW = new Matrix3.Cartographic(); - const scratchPerimeterCartographicSW = new Matrix3.Cartographic(); - const scratchPerimeterCartographicSC = new Matrix3.Cartographic(); - const scratchPerimeterCartesianNC = new Matrix3.Cartesian3(); - const scratchPerimeterCartesianNW = new Matrix3.Cartesian3(); - const scratchPerimeterCartesianCW = new Matrix3.Cartesian3(); - const scratchPerimeterCartesianSW = new Matrix3.Cartesian3(); - const scratchPerimeterCartesianSC = new Matrix3.Cartesian3(); - const scratchPerimeterProjectedNC = new Matrix2.Cartesian2(); - const scratchPerimeterProjectedNW = new Matrix2.Cartesian2(); - const scratchPerimeterProjectedCW = new Matrix2.Cartesian2(); - const scratchPerimeterProjectedSW = new Matrix2.Cartesian2(); - const scratchPerimeterProjectedSC = new Matrix2.Cartesian2(); - - const scratchPlaneOrigin = new Matrix3.Cartesian3(); - const scratchPlaneNormal = new Matrix3.Cartesian3(); - const scratchPlaneXAxis = new Matrix3.Cartesian3(); - const scratchHorizonCartesian = new Matrix3.Cartesian3(); - const scratchHorizonProjected = new Matrix2.Cartesian2(); - const scratchMaxY = new Matrix3.Cartesian3(); - const scratchMinY = new Matrix3.Cartesian3(); - const scratchZ = new Matrix3.Cartesian3(); - const scratchPlane = new Plane.Plane(Matrix3.Cartesian3.UNIT_X, 0.0); - - /** - * Computes an OrientedBoundingBox that bounds a {@link Rectangle} on the surface of an {@link Ellipsoid}. - * There are no guarantees about the orientation of the bounding box. - * - * @param {Rectangle} rectangle The cartographic rectangle on the surface of the ellipsoid. - * @param {Number} [minimumHeight=0.0] The minimum height (elevation) within the tile. - * @param {Number} [maximumHeight=0.0] The maximum height (elevation) within the tile. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle is defined. - * @param {OrientedBoundingBox} [result] The object onto which to store the result. - * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided. - * - * @exception {DeveloperError} rectangle.width must be between 0 and pi. - * @exception {DeveloperError} rectangle.height must be between 0 and pi. - * @exception {DeveloperError} ellipsoid must be an ellipsoid of revolution (radii.x == radii.y) - */ - OrientedBoundingBox.fromRectangle = function ( - rectangle, - minimumHeight, - maximumHeight, - ellipsoid, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(rectangle)) { - throw new Check.DeveloperError("rectangle is required"); - } - if (rectangle.width < 0.0 || rectangle.width > Math$1.CesiumMath.TWO_PI) { - throw new Check.DeveloperError("Rectangle width must be between 0 and 2*pi"); - } - if (rectangle.height < 0.0 || rectangle.height > Math$1.CesiumMath.PI) { - throw new Check.DeveloperError("Rectangle height must be between 0 and pi"); - } - if ( - defaultValue.defined(ellipsoid) && - !Math$1.CesiumMath.equalsEpsilon( - ellipsoid.radii.x, - ellipsoid.radii.y, - Math$1.CesiumMath.EPSILON15 - ) - ) { - throw new Check.DeveloperError( - "Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)" - ); - } - //>>includeEnd('debug'); - - minimumHeight = defaultValue.defaultValue(minimumHeight, 0.0); - maximumHeight = defaultValue.defaultValue(maximumHeight, 0.0); - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - - let minX, maxX, minY, maxY, minZ, maxZ, plane; - - if (rectangle.width <= Math$1.CesiumMath.PI) { - // The bounding box will be aligned with the tangent plane at the center of the rectangle. - const tangentPointCartographic = Matrix2.Rectangle.center( - rectangle, - scratchRectangleCenterCartographic - ); - const tangentPoint = ellipsoid.cartographicToCartesian( - tangentPointCartographic, - scratchRectangleCenter - ); - const tangentPlane = new EllipsoidTangentPlane.EllipsoidTangentPlane(tangentPoint, ellipsoid); - plane = tangentPlane.plane; - - // If the rectangle spans the equator, CW is instead aligned with the equator (because it sticks out the farthest at the equator). - const lonCenter = tangentPointCartographic.longitude; - const latCenter = - rectangle.south < 0.0 && rectangle.north > 0.0 - ? 0.0 - : tangentPointCartographic.latitude; - - // Compute XY extents using the rectangle at maximum height - const perimeterCartographicNC = Matrix3.Cartographic.fromRadians( - lonCenter, - rectangle.north, - maximumHeight, - scratchPerimeterCartographicNC - ); - const perimeterCartographicNW = Matrix3.Cartographic.fromRadians( - rectangle.west, - rectangle.north, - maximumHeight, - scratchPerimeterCartographicNW - ); - const perimeterCartographicCW = Matrix3.Cartographic.fromRadians( - rectangle.west, - latCenter, - maximumHeight, - scratchPerimeterCartographicCW - ); - const perimeterCartographicSW = Matrix3.Cartographic.fromRadians( - rectangle.west, - rectangle.south, - maximumHeight, - scratchPerimeterCartographicSW - ); - const perimeterCartographicSC = Matrix3.Cartographic.fromRadians( - lonCenter, - rectangle.south, - maximumHeight, - scratchPerimeterCartographicSC - ); - - const perimeterCartesianNC = ellipsoid.cartographicToCartesian( - perimeterCartographicNC, - scratchPerimeterCartesianNC - ); - let perimeterCartesianNW = ellipsoid.cartographicToCartesian( - perimeterCartographicNW, - scratchPerimeterCartesianNW - ); - const perimeterCartesianCW = ellipsoid.cartographicToCartesian( - perimeterCartographicCW, - scratchPerimeterCartesianCW - ); - let perimeterCartesianSW = ellipsoid.cartographicToCartesian( - perimeterCartographicSW, - scratchPerimeterCartesianSW - ); - const perimeterCartesianSC = ellipsoid.cartographicToCartesian( - perimeterCartographicSC, - scratchPerimeterCartesianSC - ); - - const perimeterProjectedNC = tangentPlane.projectPointToNearestOnPlane( - perimeterCartesianNC, - scratchPerimeterProjectedNC - ); - const perimeterProjectedNW = tangentPlane.projectPointToNearestOnPlane( - perimeterCartesianNW, - scratchPerimeterProjectedNW - ); - const perimeterProjectedCW = tangentPlane.projectPointToNearestOnPlane( - perimeterCartesianCW, - scratchPerimeterProjectedCW - ); - const perimeterProjectedSW = tangentPlane.projectPointToNearestOnPlane( - perimeterCartesianSW, - scratchPerimeterProjectedSW - ); - const perimeterProjectedSC = tangentPlane.projectPointToNearestOnPlane( - perimeterCartesianSC, - scratchPerimeterProjectedSC - ); - - minX = Math.min( - perimeterProjectedNW.x, - perimeterProjectedCW.x, - perimeterProjectedSW.x - ); - maxX = -minX; // symmetrical - - maxY = Math.max(perimeterProjectedNW.y, perimeterProjectedNC.y); - minY = Math.min(perimeterProjectedSW.y, perimeterProjectedSC.y); - - // Compute minimum Z using the rectangle at minimum height, since it will be deeper than the maximum height - perimeterCartographicNW.height = perimeterCartographicSW.height = minimumHeight; - perimeterCartesianNW = ellipsoid.cartographicToCartesian( - perimeterCartographicNW, - scratchPerimeterCartesianNW - ); - perimeterCartesianSW = ellipsoid.cartographicToCartesian( - perimeterCartographicSW, - scratchPerimeterCartesianSW - ); - - minZ = Math.min( - Plane.Plane.getPointDistance(plane, perimeterCartesianNW), - Plane.Plane.getPointDistance(plane, perimeterCartesianSW) - ); - maxZ = maximumHeight; // Since the tangent plane touches the surface at height = 0, this is okay - - return fromPlaneExtents( - tangentPlane.origin, - tangentPlane.xAxis, - tangentPlane.yAxis, - tangentPlane.zAxis, - minX, - maxX, - minY, - maxY, - minZ, - maxZ, - result - ); - } - - // Handle the case where rectangle width is greater than PI (wraps around more than half the ellipsoid). - const fullyAboveEquator = rectangle.south > 0.0; - const fullyBelowEquator = rectangle.north < 0.0; - const latitudeNearestToEquator = fullyAboveEquator - ? rectangle.south - : fullyBelowEquator - ? rectangle.north - : 0.0; - const centerLongitude = Matrix2.Rectangle.center( - rectangle, - scratchRectangleCenterCartographic - ).longitude; - - // Plane is located at the rectangle's center longitude and the rectangle's latitude that is closest to the equator. It rotates around the Z axis. - // This results in a better fit than the obb approach for smaller rectangles, which orients with the rectangle's center normal. - const planeOrigin = Matrix3.Cartesian3.fromRadians( - centerLongitude, - latitudeNearestToEquator, - maximumHeight, - ellipsoid, - scratchPlaneOrigin - ); - planeOrigin.z = 0.0; // center the plane on the equator to simpify plane normal calculation - const isPole = - Math.abs(planeOrigin.x) < Math$1.CesiumMath.EPSILON10 && - Math.abs(planeOrigin.y) < Math$1.CesiumMath.EPSILON10; - const planeNormal = !isPole - ? Matrix3.Cartesian3.normalize(planeOrigin, scratchPlaneNormal) - : Matrix3.Cartesian3.UNIT_X; - const planeYAxis = Matrix3.Cartesian3.UNIT_Z; - const planeXAxis = Matrix3.Cartesian3.cross( - planeNormal, - planeYAxis, - scratchPlaneXAxis - ); - plane = Plane.Plane.fromPointNormal(planeOrigin, planeNormal, scratchPlane); - - // Get the horizon point relative to the center. This will be the farthest extent in the plane's X dimension. - const horizonCartesian = Matrix3.Cartesian3.fromRadians( - centerLongitude + Math$1.CesiumMath.PI_OVER_TWO, - latitudeNearestToEquator, - maximumHeight, - ellipsoid, - scratchHorizonCartesian - ); - maxX = Matrix3.Cartesian3.dot( - Plane.Plane.projectPointOntoPlane( - plane, - horizonCartesian, - scratchHorizonProjected - ), - planeXAxis - ); - minX = -maxX; // symmetrical - - // Get the min and max Y, using the height that will give the largest extent - maxY = Matrix3.Cartesian3.fromRadians( - 0.0, - rectangle.north, - fullyBelowEquator ? minimumHeight : maximumHeight, - ellipsoid, - scratchMaxY - ).z; - minY = Matrix3.Cartesian3.fromRadians( - 0.0, - rectangle.south, - fullyAboveEquator ? minimumHeight : maximumHeight, - ellipsoid, - scratchMinY - ).z; - - const farZ = Matrix3.Cartesian3.fromRadians( - rectangle.east, - latitudeNearestToEquator, - maximumHeight, - ellipsoid, - scratchZ - ); - minZ = Plane.Plane.getPointDistance(plane, farZ); - maxZ = 0.0; // plane origin starts at maxZ already - - // min and max are local to the plane axes - return fromPlaneExtents( - planeOrigin, - planeXAxis, - planeYAxis, - planeNormal, - minX, - maxX, - minY, - maxY, - minZ, - maxZ, - result - ); - }; - - /** - * Computes an OrientedBoundingBox that bounds an affine transformation. - * - * @param {Matrix4} transformation The affine transformation. - * @param {OrientedBoundingBox} [result] The object onto which to store the result. - * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided. - */ - OrientedBoundingBox.fromTransformation = function (transformation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("transformation", transformation); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new OrientedBoundingBox(); - } - - result.center = Matrix2.Matrix4.getTranslation(transformation, result.center); - result.halfAxes = Matrix2.Matrix4.getMatrix3(transformation, result.halfAxes); - result.halfAxes = Matrix3.Matrix3.multiplyByScalar( - result.halfAxes, - 0.5, - result.halfAxes - ); - return result; - }; - - /** - * Duplicates a OrientedBoundingBox instance. - * - * @param {OrientedBoundingBox} box The bounding box to duplicate. - * @param {OrientedBoundingBox} [result] The object onto which to store the result. - * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided. (Returns undefined if box is undefined) - */ - OrientedBoundingBox.clone = function (box, result) { - if (!defaultValue.defined(box)) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new OrientedBoundingBox(box.center, box.halfAxes); - } - - Matrix3.Cartesian3.clone(box.center, result.center); - Matrix3.Matrix3.clone(box.halfAxes, result.halfAxes); - - return result; - }; - - /** - * Determines which side of a plane the oriented bounding box is located. - * - * @param {OrientedBoundingBox} box The oriented bounding box to test. - * @param {Plane} plane The plane to test against. - * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane - * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is - * on the opposite side, and {@link Intersect.INTERSECTING} if the box - * intersects the plane. - */ - OrientedBoundingBox.intersectPlane = function (box, plane) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(box)) { - throw new Check.DeveloperError("box is required."); - } - - if (!defaultValue.defined(plane)) { - throw new Check.DeveloperError("plane is required."); - } - //>>includeEnd('debug'); - - const center = box.center; - const normal = plane.normal; - const halfAxes = box.halfAxes; - const normalX = normal.x, - normalY = normal.y, - normalZ = normal.z; - // plane is used as if it is its normal; the first three components are assumed to be normalized - const radEffective = - Math.abs( - normalX * halfAxes[Matrix3.Matrix3.COLUMN0ROW0] + - normalY * halfAxes[Matrix3.Matrix3.COLUMN0ROW1] + - normalZ * halfAxes[Matrix3.Matrix3.COLUMN0ROW2] - ) + - Math.abs( - normalX * halfAxes[Matrix3.Matrix3.COLUMN1ROW0] + - normalY * halfAxes[Matrix3.Matrix3.COLUMN1ROW1] + - normalZ * halfAxes[Matrix3.Matrix3.COLUMN1ROW2] - ) + - Math.abs( - normalX * halfAxes[Matrix3.Matrix3.COLUMN2ROW0] + - normalY * halfAxes[Matrix3.Matrix3.COLUMN2ROW1] + - normalZ * halfAxes[Matrix3.Matrix3.COLUMN2ROW2] - ); - const distanceToPlane = Matrix3.Cartesian3.dot(normal, center) + plane.distance; - - if (distanceToPlane <= -radEffective) { - // The entire box is on the negative side of the plane normal - return Transforms.Intersect.OUTSIDE; - } else if (distanceToPlane >= radEffective) { - // The entire box is on the positive side of the plane normal - return Transforms.Intersect.INSIDE; - } - return Transforms.Intersect.INTERSECTING; - }; - - const scratchCartesianU = new Matrix3.Cartesian3(); - const scratchCartesianV = new Matrix3.Cartesian3(); - const scratchCartesianW = new Matrix3.Cartesian3(); - const scratchValidAxis2 = new Matrix3.Cartesian3(); - const scratchValidAxis3 = new Matrix3.Cartesian3(); - const scratchPPrime = new Matrix3.Cartesian3(); - - /** - * Computes the estimated distance squared from the closest point on a bounding box to a point. - * - * @param {OrientedBoundingBox} box The box. - * @param {Cartesian3} cartesian The point - * @returns {Number} The distance squared from the oriented bounding box to the point. Returns 0 if the point is inside the box. - * - * @example - * // Sort bounding boxes from back to front - * boxes.sort(function(a, b) { - * return Cesium.OrientedBoundingBox.distanceSquaredTo(b, camera.positionWC) - Cesium.OrientedBoundingBox.distanceSquaredTo(a, camera.positionWC); - * }); - */ - OrientedBoundingBox.distanceSquaredTo = function (box, cartesian) { - // See Geometric Tools for Computer Graphics 10.4.2 - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(box)) { - throw new Check.DeveloperError("box is required."); - } - if (!defaultValue.defined(cartesian)) { - throw new Check.DeveloperError("cartesian is required."); - } - //>>includeEnd('debug'); - - const offset = Matrix3.Cartesian3.subtract(cartesian, box.center, scratchOffset); - - const halfAxes = box.halfAxes; - let u = Matrix3.Matrix3.getColumn(halfAxes, 0, scratchCartesianU); - let v = Matrix3.Matrix3.getColumn(halfAxes, 1, scratchCartesianV); - let w = Matrix3.Matrix3.getColumn(halfAxes, 2, scratchCartesianW); - - const uHalf = Matrix3.Cartesian3.magnitude(u); - const vHalf = Matrix3.Cartesian3.magnitude(v); - const wHalf = Matrix3.Cartesian3.magnitude(w); - - let uValid = true; - let vValid = true; - let wValid = true; - - if (uHalf > 0) { - Matrix3.Cartesian3.divideByScalar(u, uHalf, u); - } else { - uValid = false; - } - - if (vHalf > 0) { - Matrix3.Cartesian3.divideByScalar(v, vHalf, v); - } else { - vValid = false; - } - - if (wHalf > 0) { - Matrix3.Cartesian3.divideByScalar(w, wHalf, w); - } else { - wValid = false; - } - - const numberOfDegenerateAxes = !uValid + !vValid + !wValid; - let validAxis1; - let validAxis2; - let validAxis3; - - if (numberOfDegenerateAxes === 1) { - let degenerateAxis = u; - validAxis1 = v; - validAxis2 = w; - if (!vValid) { - degenerateAxis = v; - validAxis1 = u; - } else if (!wValid) { - degenerateAxis = w; - validAxis2 = u; - } - - validAxis3 = Matrix3.Cartesian3.cross(validAxis1, validAxis2, scratchValidAxis3); - - if (degenerateAxis === u) { - u = validAxis3; - } else if (degenerateAxis === v) { - v = validAxis3; - } else if (degenerateAxis === w) { - w = validAxis3; - } - } else if (numberOfDegenerateAxes === 2) { - validAxis1 = u; - if (vValid) { - validAxis1 = v; - } else if (wValid) { - validAxis1 = w; - } - - let crossVector = Matrix3.Cartesian3.UNIT_Y; - if (crossVector.equalsEpsilon(validAxis1, Math$1.CesiumMath.EPSILON3)) { - crossVector = Matrix3.Cartesian3.UNIT_X; - } - - validAxis2 = Matrix3.Cartesian3.cross(validAxis1, crossVector, scratchValidAxis2); - Matrix3.Cartesian3.normalize(validAxis2, validAxis2); - validAxis3 = Matrix3.Cartesian3.cross(validAxis1, validAxis2, scratchValidAxis3); - Matrix3.Cartesian3.normalize(validAxis3, validAxis3); - - if (validAxis1 === u) { - v = validAxis2; - w = validAxis3; - } else if (validAxis1 === v) { - w = validAxis2; - u = validAxis3; - } else if (validAxis1 === w) { - u = validAxis2; - v = validAxis3; - } - } else if (numberOfDegenerateAxes === 3) { - u = Matrix3.Cartesian3.UNIT_X; - v = Matrix3.Cartesian3.UNIT_Y; - w = Matrix3.Cartesian3.UNIT_Z; - } - - const pPrime = scratchPPrime; - pPrime.x = Matrix3.Cartesian3.dot(offset, u); - pPrime.y = Matrix3.Cartesian3.dot(offset, v); - pPrime.z = Matrix3.Cartesian3.dot(offset, w); - - let distanceSquared = 0.0; - let d; - - if (pPrime.x < -uHalf) { - d = pPrime.x + uHalf; - distanceSquared += d * d; - } else if (pPrime.x > uHalf) { - d = pPrime.x - uHalf; - distanceSquared += d * d; - } - - if (pPrime.y < -vHalf) { - d = pPrime.y + vHalf; - distanceSquared += d * d; - } else if (pPrime.y > vHalf) { - d = pPrime.y - vHalf; - distanceSquared += d * d; - } - - if (pPrime.z < -wHalf) { - d = pPrime.z + wHalf; - distanceSquared += d * d; - } else if (pPrime.z > wHalf) { - d = pPrime.z - wHalf; - distanceSquared += d * d; - } - - return distanceSquared; - }; - - const scratchCorner = new Matrix3.Cartesian3(); - const scratchToCenter = new Matrix3.Cartesian3(); - - /** - * The distances calculated by the vector from the center of the bounding box to position projected onto direction. - *
    - * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the - * closest and farthest planes from position that intersect the bounding box. - * - * @param {OrientedBoundingBox} box The bounding box to calculate the distance to. - * @param {Cartesian3} position The position to calculate the distance from. - * @param {Cartesian3} direction The direction from position. - * @param {Interval} [result] A Interval to store the nearest and farthest distances. - * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction. - */ - OrientedBoundingBox.computePlaneDistances = function ( - box, - position, - direction, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(box)) { - throw new Check.DeveloperError("box is required."); - } - - if (!defaultValue.defined(position)) { - throw new Check.DeveloperError("position is required."); - } - - if (!defaultValue.defined(direction)) { - throw new Check.DeveloperError("direction is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Transforms.Interval(); - } - - let minDist = Number.POSITIVE_INFINITY; - let maxDist = Number.NEGATIVE_INFINITY; - - const center = box.center; - const halfAxes = box.halfAxes; - - const u = Matrix3.Matrix3.getColumn(halfAxes, 0, scratchCartesianU); - const v = Matrix3.Matrix3.getColumn(halfAxes, 1, scratchCartesianV); - const w = Matrix3.Matrix3.getColumn(halfAxes, 2, scratchCartesianW); - - // project first corner - const corner = Matrix3.Cartesian3.add(u, v, scratchCorner); - Matrix3.Cartesian3.add(corner, w, corner); - Matrix3.Cartesian3.add(corner, center, corner); - - const toCenter = Matrix3.Cartesian3.subtract(corner, position, scratchToCenter); - let mag = Matrix3.Cartesian3.dot(direction, toCenter); - - minDist = Math.min(mag, minDist); - maxDist = Math.max(mag, maxDist); - - // project second corner - Matrix3.Cartesian3.add(center, u, corner); - Matrix3.Cartesian3.add(corner, v, corner); - Matrix3.Cartesian3.subtract(corner, w, corner); - - Matrix3.Cartesian3.subtract(corner, position, toCenter); - mag = Matrix3.Cartesian3.dot(direction, toCenter); - - minDist = Math.min(mag, minDist); - maxDist = Math.max(mag, maxDist); - - // project third corner - Matrix3.Cartesian3.add(center, u, corner); - Matrix3.Cartesian3.subtract(corner, v, corner); - Matrix3.Cartesian3.add(corner, w, corner); - - Matrix3.Cartesian3.subtract(corner, position, toCenter); - mag = Matrix3.Cartesian3.dot(direction, toCenter); - - minDist = Math.min(mag, minDist); - maxDist = Math.max(mag, maxDist); - - // project fourth corner - Matrix3.Cartesian3.add(center, u, corner); - Matrix3.Cartesian3.subtract(corner, v, corner); - Matrix3.Cartesian3.subtract(corner, w, corner); - - Matrix3.Cartesian3.subtract(corner, position, toCenter); - mag = Matrix3.Cartesian3.dot(direction, toCenter); - - minDist = Math.min(mag, minDist); - maxDist = Math.max(mag, maxDist); - - // project fifth corner - Matrix3.Cartesian3.subtract(center, u, corner); - Matrix3.Cartesian3.add(corner, v, corner); - Matrix3.Cartesian3.add(corner, w, corner); - - Matrix3.Cartesian3.subtract(corner, position, toCenter); - mag = Matrix3.Cartesian3.dot(direction, toCenter); - - minDist = Math.min(mag, minDist); - maxDist = Math.max(mag, maxDist); - - // project sixth corner - Matrix3.Cartesian3.subtract(center, u, corner); - Matrix3.Cartesian3.add(corner, v, corner); - Matrix3.Cartesian3.subtract(corner, w, corner); - - Matrix3.Cartesian3.subtract(corner, position, toCenter); - mag = Matrix3.Cartesian3.dot(direction, toCenter); - - minDist = Math.min(mag, minDist); - maxDist = Math.max(mag, maxDist); - - // project seventh corner - Matrix3.Cartesian3.subtract(center, u, corner); - Matrix3.Cartesian3.subtract(corner, v, corner); - Matrix3.Cartesian3.add(corner, w, corner); - - Matrix3.Cartesian3.subtract(corner, position, toCenter); - mag = Matrix3.Cartesian3.dot(direction, toCenter); - - minDist = Math.min(mag, minDist); - maxDist = Math.max(mag, maxDist); - - // project eighth corner - Matrix3.Cartesian3.subtract(center, u, corner); - Matrix3.Cartesian3.subtract(corner, v, corner); - Matrix3.Cartesian3.subtract(corner, w, corner); - - Matrix3.Cartesian3.subtract(corner, position, toCenter); - mag = Matrix3.Cartesian3.dot(direction, toCenter); - - minDist = Math.min(mag, minDist); - maxDist = Math.max(mag, maxDist); - - result.start = minDist; - result.stop = maxDist; - return result; - }; - - const scratchXAxis = new Matrix3.Cartesian3(); - const scratchYAxis = new Matrix3.Cartesian3(); - const scratchZAxis = new Matrix3.Cartesian3(); - - /** - * Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z). - * - * @param {OrientedBoundingBox} box The oriented bounding box. - * @param {Cartesian3[]} [result] An array of eight {@link Cartesian3} instances onto which to store the corners. - * @returns {Cartesian3[]} The modified result parameter or a new array if none was provided. - */ - OrientedBoundingBox.computeCorners = function (box, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("box", box); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = [ - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - ]; - } - - const center = box.center; - const halfAxes = box.halfAxes; - const xAxis = Matrix3.Matrix3.getColumn(halfAxes, 0, scratchXAxis); - const yAxis = Matrix3.Matrix3.getColumn(halfAxes, 1, scratchYAxis); - const zAxis = Matrix3.Matrix3.getColumn(halfAxes, 2, scratchZAxis); - - Matrix3.Cartesian3.clone(center, result[0]); - Matrix3.Cartesian3.subtract(result[0], xAxis, result[0]); - Matrix3.Cartesian3.subtract(result[0], yAxis, result[0]); - Matrix3.Cartesian3.subtract(result[0], zAxis, result[0]); - - Matrix3.Cartesian3.clone(center, result[1]); - Matrix3.Cartesian3.subtract(result[1], xAxis, result[1]); - Matrix3.Cartesian3.subtract(result[1], yAxis, result[1]); - Matrix3.Cartesian3.add(result[1], zAxis, result[1]); - - Matrix3.Cartesian3.clone(center, result[2]); - Matrix3.Cartesian3.subtract(result[2], xAxis, result[2]); - Matrix3.Cartesian3.add(result[2], yAxis, result[2]); - Matrix3.Cartesian3.subtract(result[2], zAxis, result[2]); - - Matrix3.Cartesian3.clone(center, result[3]); - Matrix3.Cartesian3.subtract(result[3], xAxis, result[3]); - Matrix3.Cartesian3.add(result[3], yAxis, result[3]); - Matrix3.Cartesian3.add(result[3], zAxis, result[3]); - - Matrix3.Cartesian3.clone(center, result[4]); - Matrix3.Cartesian3.add(result[4], xAxis, result[4]); - Matrix3.Cartesian3.subtract(result[4], yAxis, result[4]); - Matrix3.Cartesian3.subtract(result[4], zAxis, result[4]); - - Matrix3.Cartesian3.clone(center, result[5]); - Matrix3.Cartesian3.add(result[5], xAxis, result[5]); - Matrix3.Cartesian3.subtract(result[5], yAxis, result[5]); - Matrix3.Cartesian3.add(result[5], zAxis, result[5]); - - Matrix3.Cartesian3.clone(center, result[6]); - Matrix3.Cartesian3.add(result[6], xAxis, result[6]); - Matrix3.Cartesian3.add(result[6], yAxis, result[6]); - Matrix3.Cartesian3.subtract(result[6], zAxis, result[6]); - - Matrix3.Cartesian3.clone(center, result[7]); - Matrix3.Cartesian3.add(result[7], xAxis, result[7]); - Matrix3.Cartesian3.add(result[7], yAxis, result[7]); - Matrix3.Cartesian3.add(result[7], zAxis, result[7]); - - return result; - }; - - const scratchRotationScale = new Matrix3.Matrix3(); - - /** - * Computes a transformation matrix from an oriented bounding box. - * - * @param {OrientedBoundingBox} box The oriented bounding box. - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new {@link Matrix4} instance if none was provided. - */ - OrientedBoundingBox.computeTransformation = function (box, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("box", box); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix2.Matrix4(); - } - - const translation = box.center; - const rotationScale = Matrix3.Matrix3.multiplyByUniformScale( - box.halfAxes, - 2.0, - scratchRotationScale - ); - return Matrix2.Matrix4.fromRotationTranslation(rotationScale, translation, result); - }; - - const scratchBoundingSphere = new Transforms.BoundingSphere(); - - /** - * Determines whether or not a bounding box is hidden from view by the occluder. - * - * @param {OrientedBoundingBox} box The bounding box surrounding the occludee object. - * @param {Occluder} occluder The occluder. - * @returns {Boolean} true if the box is not visible; otherwise false. - */ - OrientedBoundingBox.isOccluded = function (box, occluder) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(box)) { - throw new Check.DeveloperError("box is required."); - } - if (!defaultValue.defined(occluder)) { - throw new Check.DeveloperError("occluder is required."); - } - //>>includeEnd('debug'); - - const sphere = Transforms.BoundingSphere.fromOrientedBoundingBox( - box, - scratchBoundingSphere - ); - - return !occluder.isBoundingSphereVisible(sphere); - }; - - /** - * Determines which side of a plane the oriented bounding box is located. - * - * @param {Plane} plane The plane to test against. - * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane - * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is - * on the opposite side, and {@link Intersect.INTERSECTING} if the box - * intersects the plane. - */ - OrientedBoundingBox.prototype.intersectPlane = function (plane) { - return OrientedBoundingBox.intersectPlane(this, plane); - }; - - /** - * Computes the estimated distance squared from the closest point on a bounding box to a point. - * - * @param {Cartesian3} cartesian The point - * @returns {Number} The estimated distance squared from the bounding sphere to the point. - * - * @example - * // Sort bounding boxes from back to front - * boxes.sort(function(a, b) { - * return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC); - * }); - */ - OrientedBoundingBox.prototype.distanceSquaredTo = function (cartesian) { - return OrientedBoundingBox.distanceSquaredTo(this, cartesian); - }; - - /** - * The distances calculated by the vector from the center of the bounding box to position projected onto direction. - *
    - * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the - * closest and farthest planes from position that intersect the bounding box. - * - * @param {Cartesian3} position The position to calculate the distance from. - * @param {Cartesian3} direction The direction from position. - * @param {Interval} [result] A Interval to store the nearest and farthest distances. - * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction. - */ - OrientedBoundingBox.prototype.computePlaneDistances = function ( - position, - direction, - result - ) { - return OrientedBoundingBox.computePlaneDistances( - this, - position, - direction, - result - ); - }; - - /** - * Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z). - * - * @param {Cartesian3[]} [result] An array of eight {@link Cartesian3} instances onto which to store the corners. - * @returns {Cartesian3[]} The modified result parameter or a new array if none was provided. - */ - OrientedBoundingBox.prototype.computeCorners = function (result) { - return OrientedBoundingBox.computeCorners(this, result); - }; - - /** - * Computes a transformation matrix from an oriented bounding box. - * - * @param {Matrix4} result The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new {@link Matrix4} instance if none was provided. - */ - OrientedBoundingBox.prototype.computeTransformation = function (result) { - return OrientedBoundingBox.computeTransformation(this, result); - }; - - /** - * Determines whether or not a bounding box is hidden from view by the occluder. - * - * @param {Occluder} occluder The occluder. - * @returns {Boolean} true if the sphere is not visible; otherwise false. - */ - OrientedBoundingBox.prototype.isOccluded = function (occluder) { - return OrientedBoundingBox.isOccluded(this, occluder); - }; - - /** - * Compares the provided OrientedBoundingBox componentwise and returns - * true if they are equal, false otherwise. - * - * @param {OrientedBoundingBox} left The first OrientedBoundingBox. - * @param {OrientedBoundingBox} right The second OrientedBoundingBox. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - OrientedBoundingBox.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Matrix3.Cartesian3.equals(left.center, right.center) && - Matrix3.Matrix3.equals(left.halfAxes, right.halfAxes)) - ); - }; - - /** - * Duplicates this OrientedBoundingBox instance. - * - * @param {OrientedBoundingBox} [result] The object onto which to store the result. - * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided. - */ - OrientedBoundingBox.prototype.clone = function (result) { - return OrientedBoundingBox.clone(this, result); - }; - - /** - * Compares this OrientedBoundingBox against the provided OrientedBoundingBox componentwise and returns - * true if they are equal, false otherwise. - * - * @param {OrientedBoundingBox} [right] The right hand side OrientedBoundingBox. - * @returns {Boolean} true if they are equal, false otherwise. - */ - OrientedBoundingBox.prototype.equals = function (right) { - return OrientedBoundingBox.equals(this, right); - }; - - exports.OrientedBoundingBox = OrientedBoundingBox; - -})); -//# sourceMappingURL=OrientedBoundingBox-7e2eebab.js.map diff --git a/debug/cesium/Workers/OrientedBoundingBox-7e2eebab.js.map b/debug/cesium/Workers/OrientedBoundingBox-7e2eebab.js.map deleted file mode 100644 index a7e856a..0000000 --- a/debug/cesium/Workers/OrientedBoundingBox-7e2eebab.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"OrientedBoundingBox-7e2eebab.js","sources":["../../../Source/Core/OrientedBoundingBox.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\r\nimport Intersect from \"./Intersect.js\";\r\nimport Interval from \"./Interval.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport Plane from \"./Plane.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\n\r\n/**\r\n * Creates an instance of an OrientedBoundingBox.\r\n * An OrientedBoundingBox of some object is a closed and convex cuboid. It can provide a tighter bounding volume than {@link BoundingSphere} or {@link AxisAlignedBoundingBox} in many cases.\r\n * @alias OrientedBoundingBox\r\n * @constructor\r\n *\r\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the box.\r\n * @param {Matrix3} [halfAxes=Matrix3.ZERO] The three orthogonal half-axes of the bounding box.\r\n * Equivalently, the transformation matrix, to rotate and scale a 0x0x0\r\n * cube centered at the origin.\r\n *\r\n *\r\n * @example\r\n * // Create an OrientedBoundingBox using a transformation matrix, a position where the box will be translated, and a scale.\r\n * const center = new Cesium.Cartesian3(1.0, 0.0, 0.0);\r\n * const halfAxes = Cesium.Matrix3.fromScale(new Cesium.Cartesian3(1.0, 3.0, 2.0), new Cesium.Matrix3());\r\n *\r\n * const obb = new Cesium.OrientedBoundingBox(center, halfAxes);\r\n *\r\n * @see BoundingSphere\r\n * @see BoundingRectangle\r\n */\r\nfunction OrientedBoundingBox(center, halfAxes) {\r\n /**\r\n * The center of the box.\r\n * @type {Cartesian3}\r\n * @default {@link Cartesian3.ZERO}\r\n */\r\n this.center = Cartesian3.clone(defaultValue(center, Cartesian3.ZERO));\r\n /**\r\n * The transformation matrix, to rotate the box to the right position.\r\n * @type {Matrix3}\r\n * @default {@link Matrix3.ZERO}\r\n */\r\n this.halfAxes = Matrix3.clone(defaultValue(halfAxes, Matrix3.ZERO));\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nOrientedBoundingBox.packedLength =\r\n Cartesian3.packedLength + Matrix3.packedLength;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {OrientedBoundingBox} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nOrientedBoundingBox.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Cartesian3.pack(value.center, array, startingIndex);\r\n Matrix3.pack(value.halfAxes, array, startingIndex + Cartesian3.packedLength);\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {OrientedBoundingBox} [result] The object into which to store the result.\r\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\r\n */\r\nOrientedBoundingBox.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new OrientedBoundingBox();\r\n }\r\n\r\n Cartesian3.unpack(array, startingIndex, result.center);\r\n Matrix3.unpack(\r\n array,\r\n startingIndex + Cartesian3.packedLength,\r\n result.halfAxes\r\n );\r\n return result;\r\n};\r\n\r\nconst scratchCartesian1 = new Cartesian3();\r\nconst scratchCartesian2 = new Cartesian3();\r\nconst scratchCartesian3 = new Cartesian3();\r\nconst scratchCartesian4 = new Cartesian3();\r\nconst scratchCartesian5 = new Cartesian3();\r\nconst scratchCartesian6 = new Cartesian3();\r\nconst scratchCovarianceResult = new Matrix3();\r\nconst scratchEigenResult = {\r\n unitary: new Matrix3(),\r\n diagonal: new Matrix3(),\r\n};\r\n\r\n/**\r\n * Computes an instance of an OrientedBoundingBox of the given positions.\r\n * This is an implementation of Stefan Gottschalk's Collision Queries using Oriented Bounding Boxes solution (PHD thesis).\r\n * Reference: http://gamma.cs.unc.edu/users/gottschalk/main.pdf\r\n *\r\n * @param {Cartesian3[]} [positions] List of {@link Cartesian3} points that the bounding box will enclose.\r\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\r\n *\r\n * @example\r\n * // Compute an object oriented bounding box enclosing two points.\r\n * const box = Cesium.OrientedBoundingBox.fromPoints([new Cesium.Cartesian3(2, 0, 0), new Cesium.Cartesian3(-2, 0, 0)]);\r\n */\r\nOrientedBoundingBox.fromPoints = function (positions, result) {\r\n if (!defined(result)) {\r\n result = new OrientedBoundingBox();\r\n }\r\n\r\n if (!defined(positions) || positions.length === 0) {\r\n result.halfAxes = Matrix3.ZERO;\r\n result.center = Cartesian3.ZERO;\r\n return result;\r\n }\r\n\r\n let i;\r\n const length = positions.length;\r\n\r\n const meanPoint = Cartesian3.clone(positions[0], scratchCartesian1);\r\n for (i = 1; i < length; i++) {\r\n Cartesian3.add(meanPoint, positions[i], meanPoint);\r\n }\r\n const invLength = 1.0 / length;\r\n Cartesian3.multiplyByScalar(meanPoint, invLength, meanPoint);\r\n\r\n let exx = 0.0;\r\n let exy = 0.0;\r\n let exz = 0.0;\r\n let eyy = 0.0;\r\n let eyz = 0.0;\r\n let ezz = 0.0;\r\n let p;\r\n\r\n for (i = 0; i < length; i++) {\r\n p = Cartesian3.subtract(positions[i], meanPoint, scratchCartesian2);\r\n exx += p.x * p.x;\r\n exy += p.x * p.y;\r\n exz += p.x * p.z;\r\n eyy += p.y * p.y;\r\n eyz += p.y * p.z;\r\n ezz += p.z * p.z;\r\n }\r\n\r\n exx *= invLength;\r\n exy *= invLength;\r\n exz *= invLength;\r\n eyy *= invLength;\r\n eyz *= invLength;\r\n ezz *= invLength;\r\n\r\n const covarianceMatrix = scratchCovarianceResult;\r\n covarianceMatrix[0] = exx;\r\n covarianceMatrix[1] = exy;\r\n covarianceMatrix[2] = exz;\r\n covarianceMatrix[3] = exy;\r\n covarianceMatrix[4] = eyy;\r\n covarianceMatrix[5] = eyz;\r\n covarianceMatrix[6] = exz;\r\n covarianceMatrix[7] = eyz;\r\n covarianceMatrix[8] = ezz;\r\n\r\n const eigenDecomposition = Matrix3.computeEigenDecomposition(\r\n covarianceMatrix,\r\n scratchEigenResult\r\n );\r\n const rotation = Matrix3.clone(eigenDecomposition.unitary, result.halfAxes);\r\n\r\n let v1 = Matrix3.getColumn(rotation, 0, scratchCartesian4);\r\n let v2 = Matrix3.getColumn(rotation, 1, scratchCartesian5);\r\n let v3 = Matrix3.getColumn(rotation, 2, scratchCartesian6);\r\n\r\n let u1 = -Number.MAX_VALUE;\r\n let u2 = -Number.MAX_VALUE;\r\n let u3 = -Number.MAX_VALUE;\r\n let l1 = Number.MAX_VALUE;\r\n let l2 = Number.MAX_VALUE;\r\n let l3 = Number.MAX_VALUE;\r\n\r\n for (i = 0; i < length; i++) {\r\n p = positions[i];\r\n u1 = Math.max(Cartesian3.dot(v1, p), u1);\r\n u2 = Math.max(Cartesian3.dot(v2, p), u2);\r\n u3 = Math.max(Cartesian3.dot(v3, p), u3);\r\n\r\n l1 = Math.min(Cartesian3.dot(v1, p), l1);\r\n l2 = Math.min(Cartesian3.dot(v2, p), l2);\r\n l3 = Math.min(Cartesian3.dot(v3, p), l3);\r\n }\r\n\r\n v1 = Cartesian3.multiplyByScalar(v1, 0.5 * (l1 + u1), v1);\r\n v2 = Cartesian3.multiplyByScalar(v2, 0.5 * (l2 + u2), v2);\r\n v3 = Cartesian3.multiplyByScalar(v3, 0.5 * (l3 + u3), v3);\r\n\r\n const center = Cartesian3.add(v1, v2, result.center);\r\n Cartesian3.add(center, v3, center);\r\n\r\n const scale = scratchCartesian3;\r\n scale.x = u1 - l1;\r\n scale.y = u2 - l2;\r\n scale.z = u3 - l3;\r\n Cartesian3.multiplyByScalar(scale, 0.5, scale);\r\n Matrix3.multiplyByScale(result.halfAxes, scale, result.halfAxes);\r\n\r\n return result;\r\n};\r\n\r\nconst scratchOffset = new Cartesian3();\r\nconst scratchScale = new Cartesian3();\r\nfunction fromPlaneExtents(\r\n planeOrigin,\r\n planeXAxis,\r\n planeYAxis,\r\n planeZAxis,\r\n minimumX,\r\n maximumX,\r\n minimumY,\r\n maximumY,\r\n minimumZ,\r\n maximumZ,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n !defined(minimumX) ||\r\n !defined(maximumX) ||\r\n !defined(minimumY) ||\r\n !defined(maximumY) ||\r\n !defined(minimumZ) ||\r\n !defined(maximumZ)\r\n ) {\r\n throw new DeveloperError(\r\n \"all extents (minimum/maximum X/Y/Z) are required.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new OrientedBoundingBox();\r\n }\r\n\r\n const halfAxes = result.halfAxes;\r\n Matrix3.setColumn(halfAxes, 0, planeXAxis, halfAxes);\r\n Matrix3.setColumn(halfAxes, 1, planeYAxis, halfAxes);\r\n Matrix3.setColumn(halfAxes, 2, planeZAxis, halfAxes);\r\n\r\n let centerOffset = scratchOffset;\r\n centerOffset.x = (minimumX + maximumX) / 2.0;\r\n centerOffset.y = (minimumY + maximumY) / 2.0;\r\n centerOffset.z = (minimumZ + maximumZ) / 2.0;\r\n\r\n const scale = scratchScale;\r\n scale.x = (maximumX - minimumX) / 2.0;\r\n scale.y = (maximumY - minimumY) / 2.0;\r\n scale.z = (maximumZ - minimumZ) / 2.0;\r\n\r\n const center = result.center;\r\n centerOffset = Matrix3.multiplyByVector(halfAxes, centerOffset, centerOffset);\r\n Cartesian3.add(planeOrigin, centerOffset, center);\r\n Matrix3.multiplyByScale(halfAxes, scale, halfAxes);\r\n\r\n return result;\r\n}\r\n\r\nconst scratchRectangleCenterCartographic = new Cartographic();\r\nconst scratchRectangleCenter = new Cartesian3();\r\nconst scratchPerimeterCartographicNC = new Cartographic();\r\nconst scratchPerimeterCartographicNW = new Cartographic();\r\nconst scratchPerimeterCartographicCW = new Cartographic();\r\nconst scratchPerimeterCartographicSW = new Cartographic();\r\nconst scratchPerimeterCartographicSC = new Cartographic();\r\nconst scratchPerimeterCartesianNC = new Cartesian3();\r\nconst scratchPerimeterCartesianNW = new Cartesian3();\r\nconst scratchPerimeterCartesianCW = new Cartesian3();\r\nconst scratchPerimeterCartesianSW = new Cartesian3();\r\nconst scratchPerimeterCartesianSC = new Cartesian3();\r\nconst scratchPerimeterProjectedNC = new Cartesian2();\r\nconst scratchPerimeterProjectedNW = new Cartesian2();\r\nconst scratchPerimeterProjectedCW = new Cartesian2();\r\nconst scratchPerimeterProjectedSW = new Cartesian2();\r\nconst scratchPerimeterProjectedSC = new Cartesian2();\r\n\r\nconst scratchPlaneOrigin = new Cartesian3();\r\nconst scratchPlaneNormal = new Cartesian3();\r\nconst scratchPlaneXAxis = new Cartesian3();\r\nconst scratchHorizonCartesian = new Cartesian3();\r\nconst scratchHorizonProjected = new Cartesian2();\r\nconst scratchMaxY = new Cartesian3();\r\nconst scratchMinY = new Cartesian3();\r\nconst scratchZ = new Cartesian3();\r\nconst scratchPlane = new Plane(Cartesian3.UNIT_X, 0.0);\r\n\r\n/**\r\n * Computes an OrientedBoundingBox that bounds a {@link Rectangle} on the surface of an {@link Ellipsoid}.\r\n * There are no guarantees about the orientation of the bounding box.\r\n *\r\n * @param {Rectangle} rectangle The cartographic rectangle on the surface of the ellipsoid.\r\n * @param {Number} [minimumHeight=0.0] The minimum height (elevation) within the tile.\r\n * @param {Number} [maximumHeight=0.0] The maximum height (elevation) within the tile.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle is defined.\r\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided.\r\n *\r\n * @exception {DeveloperError} rectangle.width must be between 0 and pi.\r\n * @exception {DeveloperError} rectangle.height must be between 0 and pi.\r\n * @exception {DeveloperError} ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\r\n */\r\nOrientedBoundingBox.fromRectangle = function (\r\n rectangle,\r\n minimumHeight,\r\n maximumHeight,\r\n ellipsoid,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(rectangle)) {\r\n throw new DeveloperError(\"rectangle is required\");\r\n }\r\n if (rectangle.width < 0.0 || rectangle.width > CesiumMath.TWO_PI) {\r\n throw new DeveloperError(\"Rectangle width must be between 0 and 2*pi\");\r\n }\r\n if (rectangle.height < 0.0 || rectangle.height > CesiumMath.PI) {\r\n throw new DeveloperError(\"Rectangle height must be between 0 and pi\");\r\n }\r\n if (\r\n defined(ellipsoid) &&\r\n !CesiumMath.equalsEpsilon(\r\n ellipsoid.radii.x,\r\n ellipsoid.radii.y,\r\n CesiumMath.EPSILON15\r\n )\r\n ) {\r\n throw new DeveloperError(\r\n \"Ellipsoid must be an ellipsoid of revolution (radii.x == radii.y)\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n minimumHeight = defaultValue(minimumHeight, 0.0);\r\n maximumHeight = defaultValue(maximumHeight, 0.0);\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n\r\n let minX, maxX, minY, maxY, minZ, maxZ, plane;\r\n\r\n if (rectangle.width <= CesiumMath.PI) {\r\n // The bounding box will be aligned with the tangent plane at the center of the rectangle.\r\n const tangentPointCartographic = Rectangle.center(\r\n rectangle,\r\n scratchRectangleCenterCartographic\r\n );\r\n const tangentPoint = ellipsoid.cartographicToCartesian(\r\n tangentPointCartographic,\r\n scratchRectangleCenter\r\n );\r\n const tangentPlane = new EllipsoidTangentPlane(tangentPoint, ellipsoid);\r\n plane = tangentPlane.plane;\r\n\r\n // If the rectangle spans the equator, CW is instead aligned with the equator (because it sticks out the farthest at the equator).\r\n const lonCenter = tangentPointCartographic.longitude;\r\n const latCenter =\r\n rectangle.south < 0.0 && rectangle.north > 0.0\r\n ? 0.0\r\n : tangentPointCartographic.latitude;\r\n\r\n // Compute XY extents using the rectangle at maximum height\r\n const perimeterCartographicNC = Cartographic.fromRadians(\r\n lonCenter,\r\n rectangle.north,\r\n maximumHeight,\r\n scratchPerimeterCartographicNC\r\n );\r\n const perimeterCartographicNW = Cartographic.fromRadians(\r\n rectangle.west,\r\n rectangle.north,\r\n maximumHeight,\r\n scratchPerimeterCartographicNW\r\n );\r\n const perimeterCartographicCW = Cartographic.fromRadians(\r\n rectangle.west,\r\n latCenter,\r\n maximumHeight,\r\n scratchPerimeterCartographicCW\r\n );\r\n const perimeterCartographicSW = Cartographic.fromRadians(\r\n rectangle.west,\r\n rectangle.south,\r\n maximumHeight,\r\n scratchPerimeterCartographicSW\r\n );\r\n const perimeterCartographicSC = Cartographic.fromRadians(\r\n lonCenter,\r\n rectangle.south,\r\n maximumHeight,\r\n scratchPerimeterCartographicSC\r\n );\r\n\r\n const perimeterCartesianNC = ellipsoid.cartographicToCartesian(\r\n perimeterCartographicNC,\r\n scratchPerimeterCartesianNC\r\n );\r\n let perimeterCartesianNW = ellipsoid.cartographicToCartesian(\r\n perimeterCartographicNW,\r\n scratchPerimeterCartesianNW\r\n );\r\n const perimeterCartesianCW = ellipsoid.cartographicToCartesian(\r\n perimeterCartographicCW,\r\n scratchPerimeterCartesianCW\r\n );\r\n let perimeterCartesianSW = ellipsoid.cartographicToCartesian(\r\n perimeterCartographicSW,\r\n scratchPerimeterCartesianSW\r\n );\r\n const perimeterCartesianSC = ellipsoid.cartographicToCartesian(\r\n perimeterCartographicSC,\r\n scratchPerimeterCartesianSC\r\n );\r\n\r\n const perimeterProjectedNC = tangentPlane.projectPointToNearestOnPlane(\r\n perimeterCartesianNC,\r\n scratchPerimeterProjectedNC\r\n );\r\n const perimeterProjectedNW = tangentPlane.projectPointToNearestOnPlane(\r\n perimeterCartesianNW,\r\n scratchPerimeterProjectedNW\r\n );\r\n const perimeterProjectedCW = tangentPlane.projectPointToNearestOnPlane(\r\n perimeterCartesianCW,\r\n scratchPerimeterProjectedCW\r\n );\r\n const perimeterProjectedSW = tangentPlane.projectPointToNearestOnPlane(\r\n perimeterCartesianSW,\r\n scratchPerimeterProjectedSW\r\n );\r\n const perimeterProjectedSC = tangentPlane.projectPointToNearestOnPlane(\r\n perimeterCartesianSC,\r\n scratchPerimeterProjectedSC\r\n );\r\n\r\n minX = Math.min(\r\n perimeterProjectedNW.x,\r\n perimeterProjectedCW.x,\r\n perimeterProjectedSW.x\r\n );\r\n maxX = -minX; // symmetrical\r\n\r\n maxY = Math.max(perimeterProjectedNW.y, perimeterProjectedNC.y);\r\n minY = Math.min(perimeterProjectedSW.y, perimeterProjectedSC.y);\r\n\r\n // Compute minimum Z using the rectangle at minimum height, since it will be deeper than the maximum height\r\n perimeterCartographicNW.height = perimeterCartographicSW.height = minimumHeight;\r\n perimeterCartesianNW = ellipsoid.cartographicToCartesian(\r\n perimeterCartographicNW,\r\n scratchPerimeterCartesianNW\r\n );\r\n perimeterCartesianSW = ellipsoid.cartographicToCartesian(\r\n perimeterCartographicSW,\r\n scratchPerimeterCartesianSW\r\n );\r\n\r\n minZ = Math.min(\r\n Plane.getPointDistance(plane, perimeterCartesianNW),\r\n Plane.getPointDistance(plane, perimeterCartesianSW)\r\n );\r\n maxZ = maximumHeight; // Since the tangent plane touches the surface at height = 0, this is okay\r\n\r\n return fromPlaneExtents(\r\n tangentPlane.origin,\r\n tangentPlane.xAxis,\r\n tangentPlane.yAxis,\r\n tangentPlane.zAxis,\r\n minX,\r\n maxX,\r\n minY,\r\n maxY,\r\n minZ,\r\n maxZ,\r\n result\r\n );\r\n }\r\n\r\n // Handle the case where rectangle width is greater than PI (wraps around more than half the ellipsoid).\r\n const fullyAboveEquator = rectangle.south > 0.0;\r\n const fullyBelowEquator = rectangle.north < 0.0;\r\n const latitudeNearestToEquator = fullyAboveEquator\r\n ? rectangle.south\r\n : fullyBelowEquator\r\n ? rectangle.north\r\n : 0.0;\r\n const centerLongitude = Rectangle.center(\r\n rectangle,\r\n scratchRectangleCenterCartographic\r\n ).longitude;\r\n\r\n // Plane is located at the rectangle's center longitude and the rectangle's latitude that is closest to the equator. It rotates around the Z axis.\r\n // This results in a better fit than the obb approach for smaller rectangles, which orients with the rectangle's center normal.\r\n const planeOrigin = Cartesian3.fromRadians(\r\n centerLongitude,\r\n latitudeNearestToEquator,\r\n maximumHeight,\r\n ellipsoid,\r\n scratchPlaneOrigin\r\n );\r\n planeOrigin.z = 0.0; // center the plane on the equator to simpify plane normal calculation\r\n const isPole =\r\n Math.abs(planeOrigin.x) < CesiumMath.EPSILON10 &&\r\n Math.abs(planeOrigin.y) < CesiumMath.EPSILON10;\r\n const planeNormal = !isPole\r\n ? Cartesian3.normalize(planeOrigin, scratchPlaneNormal)\r\n : Cartesian3.UNIT_X;\r\n const planeYAxis = Cartesian3.UNIT_Z;\r\n const planeXAxis = Cartesian3.cross(\r\n planeNormal,\r\n planeYAxis,\r\n scratchPlaneXAxis\r\n );\r\n plane = Plane.fromPointNormal(planeOrigin, planeNormal, scratchPlane);\r\n\r\n // Get the horizon point relative to the center. This will be the farthest extent in the plane's X dimension.\r\n const horizonCartesian = Cartesian3.fromRadians(\r\n centerLongitude + CesiumMath.PI_OVER_TWO,\r\n latitudeNearestToEquator,\r\n maximumHeight,\r\n ellipsoid,\r\n scratchHorizonCartesian\r\n );\r\n maxX = Cartesian3.dot(\r\n Plane.projectPointOntoPlane(\r\n plane,\r\n horizonCartesian,\r\n scratchHorizonProjected\r\n ),\r\n planeXAxis\r\n );\r\n minX = -maxX; // symmetrical\r\n\r\n // Get the min and max Y, using the height that will give the largest extent\r\n maxY = Cartesian3.fromRadians(\r\n 0.0,\r\n rectangle.north,\r\n fullyBelowEquator ? minimumHeight : maximumHeight,\r\n ellipsoid,\r\n scratchMaxY\r\n ).z;\r\n minY = Cartesian3.fromRadians(\r\n 0.0,\r\n rectangle.south,\r\n fullyAboveEquator ? minimumHeight : maximumHeight,\r\n ellipsoid,\r\n scratchMinY\r\n ).z;\r\n\r\n const farZ = Cartesian3.fromRadians(\r\n rectangle.east,\r\n latitudeNearestToEquator,\r\n maximumHeight,\r\n ellipsoid,\r\n scratchZ\r\n );\r\n minZ = Plane.getPointDistance(plane, farZ);\r\n maxZ = 0.0; // plane origin starts at maxZ already\r\n\r\n // min and max are local to the plane axes\r\n return fromPlaneExtents(\r\n planeOrigin,\r\n planeXAxis,\r\n planeYAxis,\r\n planeNormal,\r\n minX,\r\n maxX,\r\n minY,\r\n maxY,\r\n minZ,\r\n maxZ,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Computes an OrientedBoundingBox that bounds an affine transformation.\r\n *\r\n * @param {Matrix4} transformation The affine transformation.\r\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided.\r\n */\r\nOrientedBoundingBox.fromTransformation = function (transformation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"transformation\", transformation);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new OrientedBoundingBox();\r\n }\r\n\r\n result.center = Matrix4.getTranslation(transformation, result.center);\r\n result.halfAxes = Matrix4.getMatrix3(transformation, result.halfAxes);\r\n result.halfAxes = Matrix3.multiplyByScalar(\r\n result.halfAxes,\r\n 0.5,\r\n result.halfAxes\r\n );\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a OrientedBoundingBox instance.\r\n *\r\n * @param {OrientedBoundingBox} box The bounding box to duplicate.\r\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if none was provided. (Returns undefined if box is undefined)\r\n */\r\nOrientedBoundingBox.clone = function (box, result) {\r\n if (!defined(box)) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new OrientedBoundingBox(box.center, box.halfAxes);\r\n }\r\n\r\n Cartesian3.clone(box.center, result.center);\r\n Matrix3.clone(box.halfAxes, result.halfAxes);\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Determines which side of a plane the oriented bounding box is located.\r\n *\r\n * @param {OrientedBoundingBox} box The oriented bounding box to test.\r\n * @param {Plane} plane The plane to test against.\r\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\r\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\r\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\r\n * intersects the plane.\r\n */\r\nOrientedBoundingBox.intersectPlane = function (box, plane) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(box)) {\r\n throw new DeveloperError(\"box is required.\");\r\n }\r\n\r\n if (!defined(plane)) {\r\n throw new DeveloperError(\"plane is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const center = box.center;\r\n const normal = plane.normal;\r\n const halfAxes = box.halfAxes;\r\n const normalX = normal.x,\r\n normalY = normal.y,\r\n normalZ = normal.z;\r\n // plane is used as if it is its normal; the first three components are assumed to be normalized\r\n const radEffective =\r\n Math.abs(\r\n normalX * halfAxes[Matrix3.COLUMN0ROW0] +\r\n normalY * halfAxes[Matrix3.COLUMN0ROW1] +\r\n normalZ * halfAxes[Matrix3.COLUMN0ROW2]\r\n ) +\r\n Math.abs(\r\n normalX * halfAxes[Matrix3.COLUMN1ROW0] +\r\n normalY * halfAxes[Matrix3.COLUMN1ROW1] +\r\n normalZ * halfAxes[Matrix3.COLUMN1ROW2]\r\n ) +\r\n Math.abs(\r\n normalX * halfAxes[Matrix3.COLUMN2ROW0] +\r\n normalY * halfAxes[Matrix3.COLUMN2ROW1] +\r\n normalZ * halfAxes[Matrix3.COLUMN2ROW2]\r\n );\r\n const distanceToPlane = Cartesian3.dot(normal, center) + plane.distance;\r\n\r\n if (distanceToPlane <= -radEffective) {\r\n // The entire box is on the negative side of the plane normal\r\n return Intersect.OUTSIDE;\r\n } else if (distanceToPlane >= radEffective) {\r\n // The entire box is on the positive side of the plane normal\r\n return Intersect.INSIDE;\r\n }\r\n return Intersect.INTERSECTING;\r\n};\r\n\r\nconst scratchCartesianU = new Cartesian3();\r\nconst scratchCartesianV = new Cartesian3();\r\nconst scratchCartesianW = new Cartesian3();\r\nconst scratchValidAxis2 = new Cartesian3();\r\nconst scratchValidAxis3 = new Cartesian3();\r\nconst scratchPPrime = new Cartesian3();\r\n\r\n/**\r\n * Computes the estimated distance squared from the closest point on a bounding box to a point.\r\n *\r\n * @param {OrientedBoundingBox} box The box.\r\n * @param {Cartesian3} cartesian The point\r\n * @returns {Number} The distance squared from the oriented bounding box to the point. Returns 0 if the point is inside the box.\r\n *\r\n * @example\r\n * // Sort bounding boxes from back to front\r\n * boxes.sort(function(a, b) {\r\n * return Cesium.OrientedBoundingBox.distanceSquaredTo(b, camera.positionWC) - Cesium.OrientedBoundingBox.distanceSquaredTo(a, camera.positionWC);\r\n * });\r\n */\r\nOrientedBoundingBox.distanceSquaredTo = function (box, cartesian) {\r\n // See Geometric Tools for Computer Graphics 10.4.2\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(box)) {\r\n throw new DeveloperError(\"box is required.\");\r\n }\r\n if (!defined(cartesian)) {\r\n throw new DeveloperError(\"cartesian is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const offset = Cartesian3.subtract(cartesian, box.center, scratchOffset);\r\n\r\n const halfAxes = box.halfAxes;\r\n let u = Matrix3.getColumn(halfAxes, 0, scratchCartesianU);\r\n let v = Matrix3.getColumn(halfAxes, 1, scratchCartesianV);\r\n let w = Matrix3.getColumn(halfAxes, 2, scratchCartesianW);\r\n\r\n const uHalf = Cartesian3.magnitude(u);\r\n const vHalf = Cartesian3.magnitude(v);\r\n const wHalf = Cartesian3.magnitude(w);\r\n\r\n let uValid = true;\r\n let vValid = true;\r\n let wValid = true;\r\n\r\n if (uHalf > 0) {\r\n Cartesian3.divideByScalar(u, uHalf, u);\r\n } else {\r\n uValid = false;\r\n }\r\n\r\n if (vHalf > 0) {\r\n Cartesian3.divideByScalar(v, vHalf, v);\r\n } else {\r\n vValid = false;\r\n }\r\n\r\n if (wHalf > 0) {\r\n Cartesian3.divideByScalar(w, wHalf, w);\r\n } else {\r\n wValid = false;\r\n }\r\n\r\n const numberOfDegenerateAxes = !uValid + !vValid + !wValid;\r\n let validAxis1;\r\n let validAxis2;\r\n let validAxis3;\r\n\r\n if (numberOfDegenerateAxes === 1) {\r\n let degenerateAxis = u;\r\n validAxis1 = v;\r\n validAxis2 = w;\r\n if (!vValid) {\r\n degenerateAxis = v;\r\n validAxis1 = u;\r\n } else if (!wValid) {\r\n degenerateAxis = w;\r\n validAxis2 = u;\r\n }\r\n\r\n validAxis3 = Cartesian3.cross(validAxis1, validAxis2, scratchValidAxis3);\r\n\r\n if (degenerateAxis === u) {\r\n u = validAxis3;\r\n } else if (degenerateAxis === v) {\r\n v = validAxis3;\r\n } else if (degenerateAxis === w) {\r\n w = validAxis3;\r\n }\r\n } else if (numberOfDegenerateAxes === 2) {\r\n validAxis1 = u;\r\n if (vValid) {\r\n validAxis1 = v;\r\n } else if (wValid) {\r\n validAxis1 = w;\r\n }\r\n\r\n let crossVector = Cartesian3.UNIT_Y;\r\n if (crossVector.equalsEpsilon(validAxis1, CesiumMath.EPSILON3)) {\r\n crossVector = Cartesian3.UNIT_X;\r\n }\r\n\r\n validAxis2 = Cartesian3.cross(validAxis1, crossVector, scratchValidAxis2);\r\n Cartesian3.normalize(validAxis2, validAxis2);\r\n validAxis3 = Cartesian3.cross(validAxis1, validAxis2, scratchValidAxis3);\r\n Cartesian3.normalize(validAxis3, validAxis3);\r\n\r\n if (validAxis1 === u) {\r\n v = validAxis2;\r\n w = validAxis3;\r\n } else if (validAxis1 === v) {\r\n w = validAxis2;\r\n u = validAxis3;\r\n } else if (validAxis1 === w) {\r\n u = validAxis2;\r\n v = validAxis3;\r\n }\r\n } else if (numberOfDegenerateAxes === 3) {\r\n u = Cartesian3.UNIT_X;\r\n v = Cartesian3.UNIT_Y;\r\n w = Cartesian3.UNIT_Z;\r\n }\r\n\r\n const pPrime = scratchPPrime;\r\n pPrime.x = Cartesian3.dot(offset, u);\r\n pPrime.y = Cartesian3.dot(offset, v);\r\n pPrime.z = Cartesian3.dot(offset, w);\r\n\r\n let distanceSquared = 0.0;\r\n let d;\r\n\r\n if (pPrime.x < -uHalf) {\r\n d = pPrime.x + uHalf;\r\n distanceSquared += d * d;\r\n } else if (pPrime.x > uHalf) {\r\n d = pPrime.x - uHalf;\r\n distanceSquared += d * d;\r\n }\r\n\r\n if (pPrime.y < -vHalf) {\r\n d = pPrime.y + vHalf;\r\n distanceSquared += d * d;\r\n } else if (pPrime.y > vHalf) {\r\n d = pPrime.y - vHalf;\r\n distanceSquared += d * d;\r\n }\r\n\r\n if (pPrime.z < -wHalf) {\r\n d = pPrime.z + wHalf;\r\n distanceSquared += d * d;\r\n } else if (pPrime.z > wHalf) {\r\n d = pPrime.z - wHalf;\r\n distanceSquared += d * d;\r\n }\r\n\r\n return distanceSquared;\r\n};\r\n\r\nconst scratchCorner = new Cartesian3();\r\nconst scratchToCenter = new Cartesian3();\r\n\r\n/**\r\n * The distances calculated by the vector from the center of the bounding box to position projected onto direction.\r\n *
    \r\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\r\n * closest and farthest planes from position that intersect the bounding box.\r\n *\r\n * @param {OrientedBoundingBox} box The bounding box to calculate the distance to.\r\n * @param {Cartesian3} position The position to calculate the distance from.\r\n * @param {Cartesian3} direction The direction from position.\r\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\r\n * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction.\r\n */\r\nOrientedBoundingBox.computePlaneDistances = function (\r\n box,\r\n position,\r\n direction,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(box)) {\r\n throw new DeveloperError(\"box is required.\");\r\n }\r\n\r\n if (!defined(position)) {\r\n throw new DeveloperError(\"position is required.\");\r\n }\r\n\r\n if (!defined(direction)) {\r\n throw new DeveloperError(\"direction is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Interval();\r\n }\r\n\r\n let minDist = Number.POSITIVE_INFINITY;\r\n let maxDist = Number.NEGATIVE_INFINITY;\r\n\r\n const center = box.center;\r\n const halfAxes = box.halfAxes;\r\n\r\n const u = Matrix3.getColumn(halfAxes, 0, scratchCartesianU);\r\n const v = Matrix3.getColumn(halfAxes, 1, scratchCartesianV);\r\n const w = Matrix3.getColumn(halfAxes, 2, scratchCartesianW);\r\n\r\n // project first corner\r\n const corner = Cartesian3.add(u, v, scratchCorner);\r\n Cartesian3.add(corner, w, corner);\r\n Cartesian3.add(corner, center, corner);\r\n\r\n const toCenter = Cartesian3.subtract(corner, position, scratchToCenter);\r\n let mag = Cartesian3.dot(direction, toCenter);\r\n\r\n minDist = Math.min(mag, minDist);\r\n maxDist = Math.max(mag, maxDist);\r\n\r\n // project second corner\r\n Cartesian3.add(center, u, corner);\r\n Cartesian3.add(corner, v, corner);\r\n Cartesian3.subtract(corner, w, corner);\r\n\r\n Cartesian3.subtract(corner, position, toCenter);\r\n mag = Cartesian3.dot(direction, toCenter);\r\n\r\n minDist = Math.min(mag, minDist);\r\n maxDist = Math.max(mag, maxDist);\r\n\r\n // project third corner\r\n Cartesian3.add(center, u, corner);\r\n Cartesian3.subtract(corner, v, corner);\r\n Cartesian3.add(corner, w, corner);\r\n\r\n Cartesian3.subtract(corner, position, toCenter);\r\n mag = Cartesian3.dot(direction, toCenter);\r\n\r\n minDist = Math.min(mag, minDist);\r\n maxDist = Math.max(mag, maxDist);\r\n\r\n // project fourth corner\r\n Cartesian3.add(center, u, corner);\r\n Cartesian3.subtract(corner, v, corner);\r\n Cartesian3.subtract(corner, w, corner);\r\n\r\n Cartesian3.subtract(corner, position, toCenter);\r\n mag = Cartesian3.dot(direction, toCenter);\r\n\r\n minDist = Math.min(mag, minDist);\r\n maxDist = Math.max(mag, maxDist);\r\n\r\n // project fifth corner\r\n Cartesian3.subtract(center, u, corner);\r\n Cartesian3.add(corner, v, corner);\r\n Cartesian3.add(corner, w, corner);\r\n\r\n Cartesian3.subtract(corner, position, toCenter);\r\n mag = Cartesian3.dot(direction, toCenter);\r\n\r\n minDist = Math.min(mag, minDist);\r\n maxDist = Math.max(mag, maxDist);\r\n\r\n // project sixth corner\r\n Cartesian3.subtract(center, u, corner);\r\n Cartesian3.add(corner, v, corner);\r\n Cartesian3.subtract(corner, w, corner);\r\n\r\n Cartesian3.subtract(corner, position, toCenter);\r\n mag = Cartesian3.dot(direction, toCenter);\r\n\r\n minDist = Math.min(mag, minDist);\r\n maxDist = Math.max(mag, maxDist);\r\n\r\n // project seventh corner\r\n Cartesian3.subtract(center, u, corner);\r\n Cartesian3.subtract(corner, v, corner);\r\n Cartesian3.add(corner, w, corner);\r\n\r\n Cartesian3.subtract(corner, position, toCenter);\r\n mag = Cartesian3.dot(direction, toCenter);\r\n\r\n minDist = Math.min(mag, minDist);\r\n maxDist = Math.max(mag, maxDist);\r\n\r\n // project eighth corner\r\n Cartesian3.subtract(center, u, corner);\r\n Cartesian3.subtract(corner, v, corner);\r\n Cartesian3.subtract(corner, w, corner);\r\n\r\n Cartesian3.subtract(corner, position, toCenter);\r\n mag = Cartesian3.dot(direction, toCenter);\r\n\r\n minDist = Math.min(mag, minDist);\r\n maxDist = Math.max(mag, maxDist);\r\n\r\n result.start = minDist;\r\n result.stop = maxDist;\r\n return result;\r\n};\r\n\r\nconst scratchXAxis = new Cartesian3();\r\nconst scratchYAxis = new Cartesian3();\r\nconst scratchZAxis = new Cartesian3();\r\n\r\n/**\r\n * Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z).\r\n *\r\n * @param {OrientedBoundingBox} box The oriented bounding box.\r\n * @param {Cartesian3[]} [result] An array of eight {@link Cartesian3} instances onto which to store the corners.\r\n * @returns {Cartesian3[]} The modified result parameter or a new array if none was provided.\r\n */\r\nOrientedBoundingBox.computeCorners = function (box, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"box\", box);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = [\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n ];\r\n }\r\n\r\n const center = box.center;\r\n const halfAxes = box.halfAxes;\r\n const xAxis = Matrix3.getColumn(halfAxes, 0, scratchXAxis);\r\n const yAxis = Matrix3.getColumn(halfAxes, 1, scratchYAxis);\r\n const zAxis = Matrix3.getColumn(halfAxes, 2, scratchZAxis);\r\n\r\n Cartesian3.clone(center, result[0]);\r\n Cartesian3.subtract(result[0], xAxis, result[0]);\r\n Cartesian3.subtract(result[0], yAxis, result[0]);\r\n Cartesian3.subtract(result[0], zAxis, result[0]);\r\n\r\n Cartesian3.clone(center, result[1]);\r\n Cartesian3.subtract(result[1], xAxis, result[1]);\r\n Cartesian3.subtract(result[1], yAxis, result[1]);\r\n Cartesian3.add(result[1], zAxis, result[1]);\r\n\r\n Cartesian3.clone(center, result[2]);\r\n Cartesian3.subtract(result[2], xAxis, result[2]);\r\n Cartesian3.add(result[2], yAxis, result[2]);\r\n Cartesian3.subtract(result[2], zAxis, result[2]);\r\n\r\n Cartesian3.clone(center, result[3]);\r\n Cartesian3.subtract(result[3], xAxis, result[3]);\r\n Cartesian3.add(result[3], yAxis, result[3]);\r\n Cartesian3.add(result[3], zAxis, result[3]);\r\n\r\n Cartesian3.clone(center, result[4]);\r\n Cartesian3.add(result[4], xAxis, result[4]);\r\n Cartesian3.subtract(result[4], yAxis, result[4]);\r\n Cartesian3.subtract(result[4], zAxis, result[4]);\r\n\r\n Cartesian3.clone(center, result[5]);\r\n Cartesian3.add(result[5], xAxis, result[5]);\r\n Cartesian3.subtract(result[5], yAxis, result[5]);\r\n Cartesian3.add(result[5], zAxis, result[5]);\r\n\r\n Cartesian3.clone(center, result[6]);\r\n Cartesian3.add(result[6], xAxis, result[6]);\r\n Cartesian3.add(result[6], yAxis, result[6]);\r\n Cartesian3.subtract(result[6], zAxis, result[6]);\r\n\r\n Cartesian3.clone(center, result[7]);\r\n Cartesian3.add(result[7], xAxis, result[7]);\r\n Cartesian3.add(result[7], yAxis, result[7]);\r\n Cartesian3.add(result[7], zAxis, result[7]);\r\n\r\n return result;\r\n};\r\n\r\nconst scratchRotationScale = new Matrix3();\r\n\r\n/**\r\n * Computes a transformation matrix from an oriented bounding box.\r\n *\r\n * @param {OrientedBoundingBox} box The oriented bounding box.\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new {@link Matrix4} instance if none was provided.\r\n */\r\nOrientedBoundingBox.computeTransformation = function (box, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"box\", box);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Matrix4();\r\n }\r\n\r\n const translation = box.center;\r\n const rotationScale = Matrix3.multiplyByUniformScale(\r\n box.halfAxes,\r\n 2.0,\r\n scratchRotationScale\r\n );\r\n return Matrix4.fromRotationTranslation(rotationScale, translation, result);\r\n};\r\n\r\nconst scratchBoundingSphere = new BoundingSphere();\r\n\r\n/**\r\n * Determines whether or not a bounding box is hidden from view by the occluder.\r\n *\r\n * @param {OrientedBoundingBox} box The bounding box surrounding the occludee object.\r\n * @param {Occluder} occluder The occluder.\r\n * @returns {Boolean} true if the box is not visible; otherwise false.\r\n */\r\nOrientedBoundingBox.isOccluded = function (box, occluder) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(box)) {\r\n throw new DeveloperError(\"box is required.\");\r\n }\r\n if (!defined(occluder)) {\r\n throw new DeveloperError(\"occluder is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const sphere = BoundingSphere.fromOrientedBoundingBox(\r\n box,\r\n scratchBoundingSphere\r\n );\r\n\r\n return !occluder.isBoundingSphereVisible(sphere);\r\n};\r\n\r\n/**\r\n * Determines which side of a plane the oriented bounding box is located.\r\n *\r\n * @param {Plane} plane The plane to test against.\r\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire box is on the side of the plane\r\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire box is\r\n * on the opposite side, and {@link Intersect.INTERSECTING} if the box\r\n * intersects the plane.\r\n */\r\nOrientedBoundingBox.prototype.intersectPlane = function (plane) {\r\n return OrientedBoundingBox.intersectPlane(this, plane);\r\n};\r\n\r\n/**\r\n * Computes the estimated distance squared from the closest point on a bounding box to a point.\r\n *\r\n * @param {Cartesian3} cartesian The point\r\n * @returns {Number} The estimated distance squared from the bounding sphere to the point.\r\n *\r\n * @example\r\n * // Sort bounding boxes from back to front\r\n * boxes.sort(function(a, b) {\r\n * return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);\r\n * });\r\n */\r\nOrientedBoundingBox.prototype.distanceSquaredTo = function (cartesian) {\r\n return OrientedBoundingBox.distanceSquaredTo(this, cartesian);\r\n};\r\n\r\n/**\r\n * The distances calculated by the vector from the center of the bounding box to position projected onto direction.\r\n *
    \r\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\r\n * closest and farthest planes from position that intersect the bounding box.\r\n *\r\n * @param {Cartesian3} position The position to calculate the distance from.\r\n * @param {Cartesian3} direction The direction from position.\r\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\r\n * @returns {Interval} The nearest and farthest distances on the bounding box from position in direction.\r\n */\r\nOrientedBoundingBox.prototype.computePlaneDistances = function (\r\n position,\r\n direction,\r\n result\r\n) {\r\n return OrientedBoundingBox.computePlaneDistances(\r\n this,\r\n position,\r\n direction,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Computes the eight corners of an oriented bounding box. The corners are ordered by (-X, -Y, -Z), (-X, -Y, +Z), (-X, +Y, -Z), (-X, +Y, +Z), (+X, -Y, -Z), (+X, -Y, +Z), (+X, +Y, -Z), (+X, +Y, +Z).\r\n *\r\n * @param {Cartesian3[]} [result] An array of eight {@link Cartesian3} instances onto which to store the corners.\r\n * @returns {Cartesian3[]} The modified result parameter or a new array if none was provided.\r\n */\r\nOrientedBoundingBox.prototype.computeCorners = function (result) {\r\n return OrientedBoundingBox.computeCorners(this, result);\r\n};\r\n\r\n/**\r\n * Computes a transformation matrix from an oriented bounding box.\r\n *\r\n * @param {Matrix4} result The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new {@link Matrix4} instance if none was provided.\r\n */\r\nOrientedBoundingBox.prototype.computeTransformation = function (result) {\r\n return OrientedBoundingBox.computeTransformation(this, result);\r\n};\r\n\r\n/**\r\n * Determines whether or not a bounding box is hidden from view by the occluder.\r\n *\r\n * @param {Occluder} occluder The occluder.\r\n * @returns {Boolean} true if the sphere is not visible; otherwise false.\r\n */\r\nOrientedBoundingBox.prototype.isOccluded = function (occluder) {\r\n return OrientedBoundingBox.isOccluded(this, occluder);\r\n};\r\n\r\n/**\r\n * Compares the provided OrientedBoundingBox componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {OrientedBoundingBox} left The first OrientedBoundingBox.\r\n * @param {OrientedBoundingBox} right The second OrientedBoundingBox.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nOrientedBoundingBox.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Cartesian3.equals(left.center, right.center) &&\r\n Matrix3.equals(left.halfAxes, right.halfAxes))\r\n );\r\n};\r\n\r\n/**\r\n * Duplicates this OrientedBoundingBox instance.\r\n *\r\n * @param {OrientedBoundingBox} [result] The object onto which to store the result.\r\n * @returns {OrientedBoundingBox} The modified result parameter or a new OrientedBoundingBox instance if one was not provided.\r\n */\r\nOrientedBoundingBox.prototype.clone = function (result) {\r\n return OrientedBoundingBox.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this OrientedBoundingBox against the provided OrientedBoundingBox componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {OrientedBoundingBox} [right] The right hand side OrientedBoundingBox.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nOrientedBoundingBox.prototype.equals = function (right) {\r\n return OrientedBoundingBox.equals(this, right);\r\n};\r\nexport default OrientedBoundingBox;\r\n"],"names":["Cartesian3","defaultValue","Matrix3","Check","defined","DeveloperError","Cartographic","Cartesian2","Plane","CesiumMath","Ellipsoid","Rectangle","EllipsoidTangentPlane","Matrix4","Intersect","Interval","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/Plane-c9f1487d.js b/debug/cesium/Workers/Plane-c9f1487d.js deleted file mode 100644 index 0edb36c..0000000 --- a/debug/cesium/Workers/Plane-c9f1487d.js +++ /dev/null @@ -1,335 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './Matrix2-036c77dd', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918'], (function (exports, Matrix3, Matrix2, Check, defaultValue, Math) { 'use strict'; - - /** - * A plane in Hessian Normal Form defined by - *
    -   * ax + by + cz + d = 0
    -   * 
    - * where (a, b, c) is the plane's normal, d is the signed - * distance to the plane, and (x, y, z) is any point on - * the plane. - * - * @alias Plane - * @constructor - * - * @param {Cartesian3} normal The plane's normal (normalized). - * @param {Number} distance The shortest distance from the origin to the plane. The sign of - * distance determines which side of the plane the origin - * is on. If distance is positive, the origin is in the half-space - * in the direction of the normal; if negative, the origin is in the half-space - * opposite to the normal; if zero, the plane passes through the origin. - * - * @example - * // The plane x=0 - * const plane = new Cesium.Plane(Cesium.Cartesian3.UNIT_X, 0.0); - * - * @exception {DeveloperError} Normal must be normalized - */ - function Plane(normal, distance) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("normal", normal); - if ( - !Math.CesiumMath.equalsEpsilon( - Matrix3.Cartesian3.magnitude(normal), - 1.0, - Math.CesiumMath.EPSILON6 - ) - ) { - throw new Check.DeveloperError("normal must be normalized."); - } - Check.Check.typeOf.number("distance", distance); - //>>includeEnd('debug'); - - /** - * The plane's normal. - * - * @type {Cartesian3} - */ - this.normal = Matrix3.Cartesian3.clone(normal); - - /** - * The shortest distance from the origin to the plane. The sign of - * distance determines which side of the plane the origin - * is on. If distance is positive, the origin is in the half-space - * in the direction of the normal; if negative, the origin is in the half-space - * opposite to the normal; if zero, the plane passes through the origin. - * - * @type {Number} - */ - this.distance = distance; - } - - /** - * Creates a plane from a normal and a point on the plane. - * - * @param {Cartesian3} point The point on the plane. - * @param {Cartesian3} normal The plane's normal (normalized). - * @param {Plane} [result] The object onto which to store the result. - * @returns {Plane} A new plane instance or the modified result parameter. - * - * @example - * const point = Cesium.Cartesian3.fromDegrees(-72.0, 40.0); - * const normal = ellipsoid.geodeticSurfaceNormal(point); - * const tangentPlane = Cesium.Plane.fromPointNormal(point, normal); - * - * @exception {DeveloperError} Normal must be normalized - */ - Plane.fromPointNormal = function (point, normal, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("point", point); - Check.Check.typeOf.object("normal", normal); - if ( - !Math.CesiumMath.equalsEpsilon( - Matrix3.Cartesian3.magnitude(normal), - 1.0, - Math.CesiumMath.EPSILON6 - ) - ) { - throw new Check.DeveloperError("normal must be normalized."); - } - //>>includeEnd('debug'); - - const distance = -Matrix3.Cartesian3.dot(normal, point); - - if (!defaultValue.defined(result)) { - return new Plane(normal, distance); - } - - Matrix3.Cartesian3.clone(normal, result.normal); - result.distance = distance; - return result; - }; - - const scratchNormal = new Matrix3.Cartesian3(); - /** - * Creates a plane from the general equation - * - * @param {Cartesian4} coefficients The plane's normal (normalized). - * @param {Plane} [result] The object onto which to store the result. - * @returns {Plane} A new plane instance or the modified result parameter. - * - * @exception {DeveloperError} Normal must be normalized - */ - Plane.fromCartesian4 = function (coefficients, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("coefficients", coefficients); - //>>includeEnd('debug'); - - const normal = Matrix3.Cartesian3.fromCartesian4(coefficients, scratchNormal); - const distance = coefficients.w; - - //>>includeStart('debug', pragmas.debug); - if ( - !Math.CesiumMath.equalsEpsilon( - Matrix3.Cartesian3.magnitude(normal), - 1.0, - Math.CesiumMath.EPSILON6 - ) - ) { - throw new Check.DeveloperError("normal must be normalized."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Plane(normal, distance); - } - Matrix3.Cartesian3.clone(normal, result.normal); - result.distance = distance; - return result; - }; - - /** - * Computes the signed shortest distance of a point to a plane. - * The sign of the distance determines which side of the plane the point - * is on. If the distance is positive, the point is in the half-space - * in the direction of the normal; if negative, the point is in the half-space - * opposite to the normal; if zero, the plane passes through the point. - * - * @param {Plane} plane The plane. - * @param {Cartesian3} point The point. - * @returns {Number} The signed shortest distance of the point to the plane. - */ - Plane.getPointDistance = function (plane, point) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("plane", plane); - Check.Check.typeOf.object("point", point); - //>>includeEnd('debug'); - - return Matrix3.Cartesian3.dot(plane.normal, point) + plane.distance; - }; - - const scratchCartesian = new Matrix3.Cartesian3(); - /** - * Projects a point onto the plane. - * @param {Plane} plane The plane to project the point onto - * @param {Cartesian3} point The point to project onto the plane - * @param {Cartesian3} [result] The result point. If undefined, a new Cartesian3 will be created. - * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided. - */ - Plane.projectPointOntoPlane = function (plane, point, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("plane", plane); - Check.Check.typeOf.object("point", point); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - // projectedPoint = point - (normal.point + scale) * normal - const pointDistance = Plane.getPointDistance(plane, point); - const scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - plane.normal, - pointDistance, - scratchCartesian - ); - - return Matrix3.Cartesian3.subtract(point, scaledNormal, result); - }; - - const scratchInverseTranspose = new Matrix2.Matrix4(); - const scratchPlaneCartesian4 = new Matrix2.Cartesian4(); - const scratchTransformNormal = new Matrix3.Cartesian3(); - /** - * Transforms the plane by the given transformation matrix. - * - * @param {Plane} plane The plane. - * @param {Matrix4} transform The transformation matrix. - * @param {Plane} [result] The object into which to store the result. - * @returns {Plane} The plane transformed by the given transformation matrix. - */ - Plane.transform = function (plane, transform, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("plane", plane); - Check.Check.typeOf.object("transform", transform); - //>>includeEnd('debug'); - - const normal = plane.normal; - const distance = plane.distance; - const inverseTranspose = Matrix2.Matrix4.inverseTranspose( - transform, - scratchInverseTranspose - ); - let planeAsCartesian4 = Matrix2.Cartesian4.fromElements( - normal.x, - normal.y, - normal.z, - distance, - scratchPlaneCartesian4 - ); - planeAsCartesian4 = Matrix2.Matrix4.multiplyByVector( - inverseTranspose, - planeAsCartesian4, - planeAsCartesian4 - ); - - // Convert the transformed plane to Hessian Normal Form - const transformedNormal = Matrix3.Cartesian3.fromCartesian4( - planeAsCartesian4, - scratchTransformNormal - ); - - planeAsCartesian4 = Matrix2.Cartesian4.divideByScalar( - planeAsCartesian4, - Matrix3.Cartesian3.magnitude(transformedNormal), - planeAsCartesian4 - ); - - return Plane.fromCartesian4(planeAsCartesian4, result); - }; - - /** - * Duplicates a Plane instance. - * - * @param {Plane} plane The plane to duplicate. - * @param {Plane} [result] The object onto which to store the result. - * @returns {Plane} The modified result parameter or a new Plane instance if one was not provided. - */ - Plane.clone = function (plane, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("plane", plane); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new Plane(plane.normal, plane.distance); - } - - Matrix3.Cartesian3.clone(plane.normal, result.normal); - result.distance = plane.distance; - - return result; - }; - - /** - * Compares the provided Planes by normal and distance and returns - * true if they are equal, false otherwise. - * - * @param {Plane} left The first plane. - * @param {Plane} right The second plane. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Plane.equals = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - return ( - left.distance === right.distance && - Matrix3.Cartesian3.equals(left.normal, right.normal) - ); - }; - - /** - * A constant initialized to the XY plane passing through the origin, with normal in positive Z. - * - * @type {Plane} - * @constant - */ - Plane.ORIGIN_XY_PLANE = Object.freeze(new Plane(Matrix3.Cartesian3.UNIT_Z, 0.0)); - - /** - * A constant initialized to the YZ plane passing through the origin, with normal in positive X. - * - * @type {Plane} - * @constant - */ - Plane.ORIGIN_YZ_PLANE = Object.freeze(new Plane(Matrix3.Cartesian3.UNIT_X, 0.0)); - - /** - * A constant initialized to the ZX plane passing through the origin, with normal in positive Y. - * - * @type {Plane} - * @constant - */ - Plane.ORIGIN_ZX_PLANE = Object.freeze(new Plane(Matrix3.Cartesian3.UNIT_Y, 0.0)); - - exports.Plane = Plane; - -})); -//# sourceMappingURL=Plane-c9f1487d.js.map diff --git a/debug/cesium/Workers/Plane-c9f1487d.js.map b/debug/cesium/Workers/Plane-c9f1487d.js.map deleted file mode 100644 index 4c13bcf..0000000 --- a/debug/cesium/Workers/Plane-c9f1487d.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Plane-c9f1487d.js","sources":["../../../Source/Core/Plane.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport Check from \"./Check.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\n\r\n/**\r\n * A plane in Hessian Normal Form defined by\r\n *
    \r\n * ax + by + cz + d = 0\r\n * 
    \r\n * where (a, b, c) is the plane's normal, d is the signed\r\n * distance to the plane, and (x, y, z) is any point on\r\n * the plane.\r\n *\r\n * @alias Plane\r\n * @constructor\r\n *\r\n * @param {Cartesian3} normal The plane's normal (normalized).\r\n * @param {Number} distance The shortest distance from the origin to the plane. The sign of\r\n * distance determines which side of the plane the origin\r\n * is on. If distance is positive, the origin is in the half-space\r\n * in the direction of the normal; if negative, the origin is in the half-space\r\n * opposite to the normal; if zero, the plane passes through the origin.\r\n *\r\n * @example\r\n * // The plane x=0\r\n * const plane = new Cesium.Plane(Cesium.Cartesian3.UNIT_X, 0.0);\r\n *\r\n * @exception {DeveloperError} Normal must be normalized\r\n */\r\nfunction Plane(normal, distance) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"normal\", normal);\r\n if (\r\n !CesiumMath.equalsEpsilon(\r\n Cartesian3.magnitude(normal),\r\n 1.0,\r\n CesiumMath.EPSILON6\r\n )\r\n ) {\r\n throw new DeveloperError(\"normal must be normalized.\");\r\n }\r\n Check.typeOf.number(\"distance\", distance);\r\n //>>includeEnd('debug');\r\n\r\n /**\r\n * The plane's normal.\r\n *\r\n * @type {Cartesian3}\r\n */\r\n this.normal = Cartesian3.clone(normal);\r\n\r\n /**\r\n * The shortest distance from the origin to the plane. The sign of\r\n * distance determines which side of the plane the origin\r\n * is on. If distance is positive, the origin is in the half-space\r\n * in the direction of the normal; if negative, the origin is in the half-space\r\n * opposite to the normal; if zero, the plane passes through the origin.\r\n *\r\n * @type {Number}\r\n */\r\n this.distance = distance;\r\n}\r\n\r\n/**\r\n * Creates a plane from a normal and a point on the plane.\r\n *\r\n * @param {Cartesian3} point The point on the plane.\r\n * @param {Cartesian3} normal The plane's normal (normalized).\r\n * @param {Plane} [result] The object onto which to store the result.\r\n * @returns {Plane} A new plane instance or the modified result parameter.\r\n *\r\n * @example\r\n * const point = Cesium.Cartesian3.fromDegrees(-72.0, 40.0);\r\n * const normal = ellipsoid.geodeticSurfaceNormal(point);\r\n * const tangentPlane = Cesium.Plane.fromPointNormal(point, normal);\r\n *\r\n * @exception {DeveloperError} Normal must be normalized\r\n */\r\nPlane.fromPointNormal = function (point, normal, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"point\", point);\r\n Check.typeOf.object(\"normal\", normal);\r\n if (\r\n !CesiumMath.equalsEpsilon(\r\n Cartesian3.magnitude(normal),\r\n 1.0,\r\n CesiumMath.EPSILON6\r\n )\r\n ) {\r\n throw new DeveloperError(\"normal must be normalized.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const distance = -Cartesian3.dot(normal, point);\r\n\r\n if (!defined(result)) {\r\n return new Plane(normal, distance);\r\n }\r\n\r\n Cartesian3.clone(normal, result.normal);\r\n result.distance = distance;\r\n return result;\r\n};\r\n\r\nconst scratchNormal = new Cartesian3();\r\n/**\r\n * Creates a plane from the general equation\r\n *\r\n * @param {Cartesian4} coefficients The plane's normal (normalized).\r\n * @param {Plane} [result] The object onto which to store the result.\r\n * @returns {Plane} A new plane instance or the modified result parameter.\r\n *\r\n * @exception {DeveloperError} Normal must be normalized\r\n */\r\nPlane.fromCartesian4 = function (coefficients, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"coefficients\", coefficients);\r\n //>>includeEnd('debug');\r\n\r\n const normal = Cartesian3.fromCartesian4(coefficients, scratchNormal);\r\n const distance = coefficients.w;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n !CesiumMath.equalsEpsilon(\r\n Cartesian3.magnitude(normal),\r\n 1.0,\r\n CesiumMath.EPSILON6\r\n )\r\n ) {\r\n throw new DeveloperError(\"normal must be normalized.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Plane(normal, distance);\r\n }\r\n Cartesian3.clone(normal, result.normal);\r\n result.distance = distance;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the signed shortest distance of a point to a plane.\r\n * The sign of the distance determines which side of the plane the point\r\n * is on. If the distance is positive, the point is in the half-space\r\n * in the direction of the normal; if negative, the point is in the half-space\r\n * opposite to the normal; if zero, the plane passes through the point.\r\n *\r\n * @param {Plane} plane The plane.\r\n * @param {Cartesian3} point The point.\r\n * @returns {Number} The signed shortest distance of the point to the plane.\r\n */\r\nPlane.getPointDistance = function (plane, point) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"plane\", plane);\r\n Check.typeOf.object(\"point\", point);\r\n //>>includeEnd('debug');\r\n\r\n return Cartesian3.dot(plane.normal, point) + plane.distance;\r\n};\r\n\r\nconst scratchCartesian = new Cartesian3();\r\n/**\r\n * Projects a point onto the plane.\r\n * @param {Plane} plane The plane to project the point onto\r\n * @param {Cartesian3} point The point to project onto the plane\r\n * @param {Cartesian3} [result] The result point. If undefined, a new Cartesian3 will be created.\r\n * @returns {Cartesian3} The modified result parameter or a new Cartesian3 instance if one was not provided.\r\n */\r\nPlane.projectPointOntoPlane = function (plane, point, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"plane\", plane);\r\n Check.typeOf.object(\"point\", point);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n // projectedPoint = point - (normal.point + scale) * normal\r\n const pointDistance = Plane.getPointDistance(plane, point);\r\n const scaledNormal = Cartesian3.multiplyByScalar(\r\n plane.normal,\r\n pointDistance,\r\n scratchCartesian\r\n );\r\n\r\n return Cartesian3.subtract(point, scaledNormal, result);\r\n};\r\n\r\nconst scratchInverseTranspose = new Matrix4();\r\nconst scratchPlaneCartesian4 = new Cartesian4();\r\nconst scratchTransformNormal = new Cartesian3();\r\n/**\r\n * Transforms the plane by the given transformation matrix.\r\n *\r\n * @param {Plane} plane The plane.\r\n * @param {Matrix4} transform The transformation matrix.\r\n * @param {Plane} [result] The object into which to store the result.\r\n * @returns {Plane} The plane transformed by the given transformation matrix.\r\n */\r\nPlane.transform = function (plane, transform, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"plane\", plane);\r\n Check.typeOf.object(\"transform\", transform);\r\n //>>includeEnd('debug');\r\n\r\n const normal = plane.normal;\r\n const distance = plane.distance;\r\n const inverseTranspose = Matrix4.inverseTranspose(\r\n transform,\r\n scratchInverseTranspose\r\n );\r\n let planeAsCartesian4 = Cartesian4.fromElements(\r\n normal.x,\r\n normal.y,\r\n normal.z,\r\n distance,\r\n scratchPlaneCartesian4\r\n );\r\n planeAsCartesian4 = Matrix4.multiplyByVector(\r\n inverseTranspose,\r\n planeAsCartesian4,\r\n planeAsCartesian4\r\n );\r\n\r\n // Convert the transformed plane to Hessian Normal Form\r\n const transformedNormal = Cartesian3.fromCartesian4(\r\n planeAsCartesian4,\r\n scratchTransformNormal\r\n );\r\n\r\n planeAsCartesian4 = Cartesian4.divideByScalar(\r\n planeAsCartesian4,\r\n Cartesian3.magnitude(transformedNormal),\r\n planeAsCartesian4\r\n );\r\n\r\n return Plane.fromCartesian4(planeAsCartesian4, result);\r\n};\r\n\r\n/**\r\n * Duplicates a Plane instance.\r\n *\r\n * @param {Plane} plane The plane to duplicate.\r\n * @param {Plane} [result] The object onto which to store the result.\r\n * @returns {Plane} The modified result parameter or a new Plane instance if one was not provided.\r\n */\r\nPlane.clone = function (plane, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"plane\", plane);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new Plane(plane.normal, plane.distance);\r\n }\r\n\r\n Cartesian3.clone(plane.normal, result.normal);\r\n result.distance = plane.distance;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided Planes by normal and distance and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Plane} left The first plane.\r\n * @param {Plane} right The second plane.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nPlane.equals = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n return (\r\n left.distance === right.distance &&\r\n Cartesian3.equals(left.normal, right.normal)\r\n );\r\n};\r\n\r\n/**\r\n * A constant initialized to the XY plane passing through the origin, with normal in positive Z.\r\n *\r\n * @type {Plane}\r\n * @constant\r\n */\r\nPlane.ORIGIN_XY_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_Z, 0.0));\r\n\r\n/**\r\n * A constant initialized to the YZ plane passing through the origin, with normal in positive X.\r\n *\r\n * @type {Plane}\r\n * @constant\r\n */\r\nPlane.ORIGIN_YZ_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_X, 0.0));\r\n\r\n/**\r\n * A constant initialized to the ZX plane passing through the origin, with normal in positive Y.\r\n *\r\n * @type {Plane}\r\n * @constant\r\n */\r\nPlane.ORIGIN_ZX_PLANE = Object.freeze(new Plane(Cartesian3.UNIT_Y, 0.0));\r\nexport default Plane;\r\n"],"names":["Check","CesiumMath","Cartesian3","DeveloperError","defined","Matrix4","Cartesian4"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/PolygonGeometryLibrary-62266ab5.js b/debug/cesium/Workers/PolygonGeometryLibrary-62266ab5.js deleted file mode 100644 index 4e5e7dd..0000000 --- a/debug/cesium/Workers/PolygonGeometryLibrary-62266ab5.js +++ /dev/null @@ -1,1100 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './ArcType-d608b872', './arrayRemoveDuplicates-c3526030', './Matrix2-036c77dd', './Matrix3-f22b0303', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './EllipsoidRhumbLine-48b4507b', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonPipeline-313487c3', './Transforms-11fb6b0a'], (function (exports, ArcType, arrayRemoveDuplicates, Matrix2, Matrix3, ComponentDatatype, defaultValue, EllipsoidRhumbLine, GeometryAttribute, GeometryAttributes, GeometryPipeline, IndexDatatype, Math$1, PolygonPipeline, Transforms) { 'use strict'; - - /** - * A queue that can enqueue items at the end, and dequeue items from the front. - * - * @alias Queue - * @constructor - */ - function Queue() { - this._array = []; - this._offset = 0; - this._length = 0; - } - - Object.defineProperties(Queue.prototype, { - /** - * The length of the queue. - * - * @memberof Queue.prototype - * - * @type {Number} - * @readonly - */ - length: { - get: function () { - return this._length; - }, - }, - }); - - /** - * Enqueues the specified item. - * - * @param {*} item The item to enqueue. - */ - Queue.prototype.enqueue = function (item) { - this._array.push(item); - this._length++; - }; - - /** - * Dequeues an item. Returns undefined if the queue is empty. - * - * @returns {*} The the dequeued item. - */ - Queue.prototype.dequeue = function () { - if (this._length === 0) { - return undefined; - } - - const array = this._array; - let offset = this._offset; - const item = array[offset]; - array[offset] = undefined; - - offset++; - if (offset > 10 && offset * 2 > array.length) { - //compact array - this._array = array.slice(offset); - offset = 0; - } - - this._offset = offset; - this._length--; - - return item; - }; - - /** - * Returns the item at the front of the queue. Returns undefined if the queue is empty. - * - * @returns {*} The item at the front of the queue. - */ - Queue.prototype.peek = function () { - if (this._length === 0) { - return undefined; - } - - return this._array[this._offset]; - }; - - /** - * Check whether this queue contains the specified item. - * - * @param {*} item The item to search for. - */ - Queue.prototype.contains = function (item) { - return this._array.indexOf(item) !== -1; - }; - - /** - * Remove all items from the queue. - */ - Queue.prototype.clear = function () { - this._array.length = this._offset = this._length = 0; - }; - - /** - * Sort the items in the queue in-place. - * - * @param {Queue.Comparator} compareFunction A function that defines the sort order. - */ - Queue.prototype.sort = function (compareFunction) { - if (this._offset > 0) { - //compact array - this._array = this._array.slice(this._offset); - this._offset = 0; - } - - this._array.sort(compareFunction); - }; - - /** - * @private - */ - const PolygonGeometryLibrary = {}; - - PolygonGeometryLibrary.computeHierarchyPackedLength = function ( - polygonHierarchy, - CartesianX - ) { - let numComponents = 0; - const stack = [polygonHierarchy]; - while (stack.length > 0) { - const hierarchy = stack.pop(); - if (!defaultValue.defined(hierarchy)) { - continue; - } - - numComponents += 2; - - const positions = hierarchy.positions; - const holes = hierarchy.holes; - - if (defaultValue.defined(positions) && positions.length > 0) { - numComponents += positions.length * CartesianX.packedLength; - } - - if (defaultValue.defined(holes)) { - const length = holes.length; - for (let i = 0; i < length; ++i) { - stack.push(holes[i]); - } - } - } - - return numComponents; - }; - - PolygonGeometryLibrary.packPolygonHierarchy = function ( - polygonHierarchy, - array, - startingIndex, - CartesianX - ) { - const stack = [polygonHierarchy]; - while (stack.length > 0) { - const hierarchy = stack.pop(); - if (!defaultValue.defined(hierarchy)) { - continue; - } - - const positions = hierarchy.positions; - const holes = hierarchy.holes; - - array[startingIndex++] = defaultValue.defined(positions) ? positions.length : 0; - array[startingIndex++] = defaultValue.defined(holes) ? holes.length : 0; - - if (defaultValue.defined(positions)) { - const positionsLength = positions.length; - for ( - let i = 0; - i < positionsLength; - ++i, startingIndex += CartesianX.packedLength - ) { - CartesianX.pack(positions[i], array, startingIndex); - } - } - - if (defaultValue.defined(holes)) { - const holesLength = holes.length; - for (let j = 0; j < holesLength; ++j) { - stack.push(holes[j]); - } - } - } - - return startingIndex; - }; - - PolygonGeometryLibrary.unpackPolygonHierarchy = function ( - array, - startingIndex, - CartesianX - ) { - const positionsLength = array[startingIndex++]; - const holesLength = array[startingIndex++]; - - const positions = new Array(positionsLength); - const holes = holesLength > 0 ? new Array(holesLength) : undefined; - - for ( - let i = 0; - i < positionsLength; - ++i, startingIndex += CartesianX.packedLength - ) { - positions[i] = CartesianX.unpack(array, startingIndex); - } - - for (let j = 0; j < holesLength; ++j) { - holes[j] = PolygonGeometryLibrary.unpackPolygonHierarchy( - array, - startingIndex, - CartesianX - ); - startingIndex = holes[j].startingIndex; - delete holes[j].startingIndex; - } - - return { - positions: positions, - holes: holes, - startingIndex: startingIndex, - }; - }; - - const distance2DScratch = new Matrix2.Cartesian2(); - function getPointAtDistance2D(p0, p1, distance, length) { - Matrix2.Cartesian2.subtract(p1, p0, distance2DScratch); - Matrix2.Cartesian2.multiplyByScalar( - distance2DScratch, - distance / length, - distance2DScratch - ); - Matrix2.Cartesian2.add(p0, distance2DScratch, distance2DScratch); - return [distance2DScratch.x, distance2DScratch.y]; - } - - const distanceScratch = new Matrix3.Cartesian3(); - function getPointAtDistance(p0, p1, distance, length) { - Matrix3.Cartesian3.subtract(p1, p0, distanceScratch); - Matrix3.Cartesian3.multiplyByScalar( - distanceScratch, - distance / length, - distanceScratch - ); - Matrix3.Cartesian3.add(p0, distanceScratch, distanceScratch); - return [distanceScratch.x, distanceScratch.y, distanceScratch.z]; - } - - PolygonGeometryLibrary.subdivideLineCount = function (p0, p1, minDistance) { - const distance = Matrix3.Cartesian3.distance(p0, p1); - const n = distance / minDistance; - const countDivide = Math.max(0, Math.ceil(Math$1.CesiumMath.log2(n))); - return Math.pow(2, countDivide); - }; - - const scratchCartographic0 = new Matrix3.Cartographic(); - const scratchCartographic1 = new Matrix3.Cartographic(); - const scratchCartographic2 = new Matrix3.Cartographic(); - const scratchCartesian0 = new Matrix3.Cartesian3(); - const scratchRhumbLine = new EllipsoidRhumbLine.EllipsoidRhumbLine(); - PolygonGeometryLibrary.subdivideRhumbLineCount = function ( - ellipsoid, - p0, - p1, - minDistance - ) { - const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0); - const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1); - const rhumb = new EllipsoidRhumbLine.EllipsoidRhumbLine(c0, c1, ellipsoid); - const n = rhumb.surfaceDistance / minDistance; - const countDivide = Math.max(0, Math.ceil(Math$1.CesiumMath.log2(n))); - return Math.pow(2, countDivide); - }; - - /** - * Subdivides texture coordinates based on the subdivision of the associated world positions. - * - * @param {Cartesian2} t0 First texture coordinate. - * @param {Cartesian2} t1 Second texture coordinate. - * @param {Cartesian3} p0 First world position. - * @param {Cartesian3} p1 Second world position. - * @param {Number} minDistance Minimum distance for a segment. - * @param {Array} result The subdivided texture coordinates. - * - * @private - */ - PolygonGeometryLibrary.subdivideTexcoordLine = function ( - t0, - t1, - p0, - p1, - minDistance, - result - ) { - // Compute the number of subdivisions. - const subdivisions = PolygonGeometryLibrary.subdivideLineCount( - p0, - p1, - minDistance - ); - - // Compute the distance between each subdivided point. - const length2D = Matrix2.Cartesian2.distance(t0, t1); - const distanceBetweenCoords = length2D / subdivisions; - - // Resize the result array. - const texcoords = result; - texcoords.length = subdivisions * 2; - - // Compute texture coordinates using linear interpolation. - let index = 0; - for (let i = 0; i < subdivisions; i++) { - const t = getPointAtDistance2D(t0, t1, i * distanceBetweenCoords, length2D); - texcoords[index++] = t[0]; - texcoords[index++] = t[1]; - } - - return texcoords; - }; - - PolygonGeometryLibrary.subdivideLine = function (p0, p1, minDistance, result) { - const numVertices = PolygonGeometryLibrary.subdivideLineCount( - p0, - p1, - minDistance - ); - const length = Matrix3.Cartesian3.distance(p0, p1); - const distanceBetweenVertices = length / numVertices; - - if (!defaultValue.defined(result)) { - result = []; - } - - const positions = result; - positions.length = numVertices * 3; - - let index = 0; - for (let i = 0; i < numVertices; i++) { - const p = getPointAtDistance(p0, p1, i * distanceBetweenVertices, length); - positions[index++] = p[0]; - positions[index++] = p[1]; - positions[index++] = p[2]; - } - - return positions; - }; - - /** - * Subdivides texture coordinates based on the subdivision of the associated world positions using a rhumb line. - * - * @param {Cartesian2} t0 First texture coordinate. - * @param {Cartesian2} t1 Second texture coordinate. - * @param {Ellipsoid} ellipsoid The ellipsoid. - * @param {Cartesian3} p0 First world position. - * @param {Cartesian3} p1 Second world position. - * @param {Number} minDistance Minimum distance for a segment. - * @param {Array} result The subdivided texture coordinates. - * - * @private - */ - PolygonGeometryLibrary.subdivideTexcoordRhumbLine = function ( - t0, - t1, - ellipsoid, - p0, - p1, - minDistance, - result - ) { - // Compute the surface distance. - const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0); - const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1); - scratchRhumbLine.setEndPoints(c0, c1); - const n = scratchRhumbLine.surfaceDistance / minDistance; - - // Compute the number of subdivisions. - const countDivide = Math.max(0, Math.ceil(Math$1.CesiumMath.log2(n))); - const subdivisions = Math.pow(2, countDivide); - - // Compute the distance between each subdivided point. - const length2D = Matrix2.Cartesian2.distance(t0, t1); - const distanceBetweenCoords = length2D / subdivisions; - - // Resize the result array. - const texcoords = result; - texcoords.length = subdivisions * 2; - - // Compute texture coordinates using linear interpolation. - let index = 0; - for (let i = 0; i < subdivisions; i++) { - const t = getPointAtDistance2D(t0, t1, i * distanceBetweenCoords, length2D); - texcoords[index++] = t[0]; - texcoords[index++] = t[1]; - } - - return texcoords; - }; - - PolygonGeometryLibrary.subdivideRhumbLine = function ( - ellipsoid, - p0, - p1, - minDistance, - result - ) { - const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0); - const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1); - const rhumb = new EllipsoidRhumbLine.EllipsoidRhumbLine(c0, c1, ellipsoid); - - const n = rhumb.surfaceDistance / minDistance; - const countDivide = Math.max(0, Math.ceil(Math$1.CesiumMath.log2(n))); - const numVertices = Math.pow(2, countDivide); - const distanceBetweenVertices = rhumb.surfaceDistance / numVertices; - - if (!defaultValue.defined(result)) { - result = []; - } - - const positions = result; - positions.length = numVertices * 3; - - let index = 0; - for (let i = 0; i < numVertices; i++) { - const c = rhumb.interpolateUsingSurfaceDistance( - i * distanceBetweenVertices, - scratchCartographic2 - ); - const p = ellipsoid.cartographicToCartesian(c, scratchCartesian0); - positions[index++] = p.x; - positions[index++] = p.y; - positions[index++] = p.z; - } - - return positions; - }; - - const scaleToGeodeticHeightN1 = new Matrix3.Cartesian3(); - const scaleToGeodeticHeightN2 = new Matrix3.Cartesian3(); - const scaleToGeodeticHeightP1 = new Matrix3.Cartesian3(); - const scaleToGeodeticHeightP2 = new Matrix3.Cartesian3(); - - PolygonGeometryLibrary.scaleToGeodeticHeightExtruded = function ( - geometry, - maxHeight, - minHeight, - ellipsoid, - perPositionHeight - ) { - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - - const n1 = scaleToGeodeticHeightN1; - let n2 = scaleToGeodeticHeightN2; - const p = scaleToGeodeticHeightP1; - let p2 = scaleToGeodeticHeightP2; - - if ( - defaultValue.defined(geometry) && - defaultValue.defined(geometry.attributes) && - defaultValue.defined(geometry.attributes.position) - ) { - const positions = geometry.attributes.position.values; - const length = positions.length / 2; - - for (let i = 0; i < length; i += 3) { - Matrix3.Cartesian3.fromArray(positions, i, p); - - ellipsoid.geodeticSurfaceNormal(p, n1); - p2 = ellipsoid.scaleToGeodeticSurface(p, p2); - n2 = Matrix3.Cartesian3.multiplyByScalar(n1, minHeight, n2); - n2 = Matrix3.Cartesian3.add(p2, n2, n2); - positions[i + length] = n2.x; - positions[i + 1 + length] = n2.y; - positions[i + 2 + length] = n2.z; - - if (perPositionHeight) { - p2 = Matrix3.Cartesian3.clone(p, p2); - } - n2 = Matrix3.Cartesian3.multiplyByScalar(n1, maxHeight, n2); - n2 = Matrix3.Cartesian3.add(p2, n2, n2); - positions[i] = n2.x; - positions[i + 1] = n2.y; - positions[i + 2] = n2.z; - } - } - return geometry; - }; - - PolygonGeometryLibrary.polygonOutlinesFromHierarchy = function ( - polygonHierarchy, - scaleToEllipsoidSurface, - ellipsoid - ) { - // create from a polygon hierarchy - // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf - const polygons = []; - const queue = new Queue(); - queue.enqueue(polygonHierarchy); - let i; - let j; - let length; - while (queue.length !== 0) { - const outerNode = queue.dequeue(); - let outerRing = outerNode.positions; - if (scaleToEllipsoidSurface) { - length = outerRing.length; - for (i = 0; i < length; i++) { - ellipsoid.scaleToGeodeticSurface(outerRing[i], outerRing[i]); - } - } - outerRing = arrayRemoveDuplicates.arrayRemoveDuplicates( - outerRing, - Matrix3.Cartesian3.equalsEpsilon, - true - ); - if (outerRing.length < 3) { - continue; - } - - const numChildren = outerNode.holes ? outerNode.holes.length : 0; - // The outer polygon contains inner polygons - for (i = 0; i < numChildren; i++) { - const hole = outerNode.holes[i]; - let holePositions = hole.positions; - if (scaleToEllipsoidSurface) { - length = holePositions.length; - for (j = 0; j < length; ++j) { - ellipsoid.scaleToGeodeticSurface(holePositions[j], holePositions[j]); - } - } - holePositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - holePositions, - Matrix3.Cartesian3.equalsEpsilon, - true - ); - if (holePositions.length < 3) { - continue; - } - polygons.push(holePositions); - - let numGrandchildren = 0; - if (defaultValue.defined(hole.holes)) { - numGrandchildren = hole.holes.length; - } - - for (j = 0; j < numGrandchildren; j++) { - queue.enqueue(hole.holes[j]); - } - } - - polygons.push(outerRing); - } - - return polygons; - }; - - PolygonGeometryLibrary.polygonsFromHierarchy = function ( - polygonHierarchy, - keepDuplicates, - projectPointsTo2D, - scaleToEllipsoidSurface, - ellipsoid - ) { - // create from a polygon hierarchy - // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf - const hierarchy = []; - const polygons = []; - - const queue = new Queue(); - queue.enqueue(polygonHierarchy); - - while (queue.length !== 0) { - const outerNode = queue.dequeue(); - let outerRing = outerNode.positions; - const holes = outerNode.holes; - - let i; - let length; - if (scaleToEllipsoidSurface) { - length = outerRing.length; - for (i = 0; i < length; i++) { - ellipsoid.scaleToGeodeticSurface(outerRing[i], outerRing[i]); - } - } - - if (!keepDuplicates) { - outerRing = arrayRemoveDuplicates.arrayRemoveDuplicates( - outerRing, - Matrix3.Cartesian3.equalsEpsilon, - true - ); - } - if (outerRing.length < 3) { - continue; - } - - let positions2D = projectPointsTo2D(outerRing); - if (!defaultValue.defined(positions2D)) { - continue; - } - const holeIndices = []; - - let originalWindingOrder = PolygonPipeline.PolygonPipeline.computeWindingOrder2D( - positions2D - ); - if (originalWindingOrder === PolygonPipeline.WindingOrder.CLOCKWISE) { - positions2D.reverse(); - outerRing = outerRing.slice().reverse(); - } - - let positions = outerRing.slice(); - const numChildren = defaultValue.defined(holes) ? holes.length : 0; - const polygonHoles = []; - let j; - - for (i = 0; i < numChildren; i++) { - const hole = holes[i]; - let holePositions = hole.positions; - if (scaleToEllipsoidSurface) { - length = holePositions.length; - for (j = 0; j < length; ++j) { - ellipsoid.scaleToGeodeticSurface(holePositions[j], holePositions[j]); - } - } - - if (!keepDuplicates) { - holePositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - holePositions, - Matrix3.Cartesian3.equalsEpsilon, - true - ); - } - if (holePositions.length < 3) { - continue; - } - - const holePositions2D = projectPointsTo2D(holePositions); - if (!defaultValue.defined(holePositions2D)) { - continue; - } - - originalWindingOrder = PolygonPipeline.PolygonPipeline.computeWindingOrder2D( - holePositions2D - ); - if (originalWindingOrder === PolygonPipeline.WindingOrder.CLOCKWISE) { - holePositions2D.reverse(); - holePositions = holePositions.slice().reverse(); - } - - polygonHoles.push(holePositions); - holeIndices.push(positions.length); - positions = positions.concat(holePositions); - positions2D = positions2D.concat(holePositions2D); - - let numGrandchildren = 0; - if (defaultValue.defined(hole.holes)) { - numGrandchildren = hole.holes.length; - } - - for (j = 0; j < numGrandchildren; j++) { - queue.enqueue(hole.holes[j]); - } - } - - hierarchy.push({ - outerRing: outerRing, - holes: polygonHoles, - }); - polygons.push({ - positions: positions, - positions2D: positions2D, - holes: holeIndices, - }); - } - - return { - hierarchy: hierarchy, - polygons: polygons, - }; - }; - - const computeBoundingRectangleCartesian2 = new Matrix2.Cartesian2(); - const computeBoundingRectangleCartesian3 = new Matrix3.Cartesian3(); - const computeBoundingRectangleQuaternion = new Transforms.Quaternion(); - const computeBoundingRectangleMatrix3 = new Matrix3.Matrix3(); - PolygonGeometryLibrary.computeBoundingRectangle = function ( - planeNormal, - projectPointTo2D, - positions, - angle, - result - ) { - const rotation = Transforms.Quaternion.fromAxisAngle( - planeNormal, - angle, - computeBoundingRectangleQuaternion - ); - const textureMatrix = Matrix3.Matrix3.fromQuaternion( - rotation, - computeBoundingRectangleMatrix3 - ); - - let minX = Number.POSITIVE_INFINITY; - let maxX = Number.NEGATIVE_INFINITY; - let minY = Number.POSITIVE_INFINITY; - let maxY = Number.NEGATIVE_INFINITY; - - const length = positions.length; - for (let i = 0; i < length; ++i) { - const p = Matrix3.Cartesian3.clone( - positions[i], - computeBoundingRectangleCartesian3 - ); - Matrix3.Matrix3.multiplyByVector(textureMatrix, p, p); - const st = projectPointTo2D(p, computeBoundingRectangleCartesian2); - - if (defaultValue.defined(st)) { - minX = Math.min(minX, st.x); - maxX = Math.max(maxX, st.x); - - minY = Math.min(minY, st.y); - maxY = Math.max(maxY, st.y); - } - } - - result.x = minX; - result.y = minY; - result.width = maxX - minX; - result.height = maxY - minY; - return result; - }; - - PolygonGeometryLibrary.createGeometryFromPositions = function ( - ellipsoid, - polygon, - textureCoordinates, - granularity, - perPositionHeight, - vertexFormat, - arcType - ) { - let indices = PolygonPipeline.PolygonPipeline.triangulate(polygon.positions2D, polygon.holes); - - /* If polygon is completely unrenderable, just use the first three vertices */ - if (indices.length < 3) { - indices = [0, 1, 2]; - } - - const positions = polygon.positions; - - const hasTexcoords = defaultValue.defined(textureCoordinates); - const texcoords = hasTexcoords ? textureCoordinates.positions : undefined; - - if (perPositionHeight) { - const length = positions.length; - const flattenedPositions = new Array(length * 3); - let index = 0; - for (let i = 0; i < length; i++) { - const p = positions[i]; - flattenedPositions[index++] = p.x; - flattenedPositions[index++] = p.y; - flattenedPositions[index++] = p.z; - } - - const geometryOptions = { - attributes: { - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: flattenedPositions, - }), - }, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }; - - if (hasTexcoords) { - geometryOptions.attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: Matrix2.Cartesian2.packArray(texcoords), - }); - } - - const geometry = new GeometryAttribute.Geometry(geometryOptions); - - if (vertexFormat.normal) { - return GeometryPipeline.GeometryPipeline.computeNormal(geometry); - } - - return geometry; - } - - if (arcType === ArcType.ArcType.GEODESIC) { - return PolygonPipeline.PolygonPipeline.computeSubdivision( - ellipsoid, - positions, - indices, - texcoords, - granularity - ); - } else if (arcType === ArcType.ArcType.RHUMB) { - return PolygonPipeline.PolygonPipeline.computeRhumbLineSubdivision( - ellipsoid, - positions, - indices, - texcoords, - granularity - ); - } - }; - - const computeWallTexcoordsSubdivided = []; - const computeWallIndicesSubdivided = []; - const p1Scratch = new Matrix3.Cartesian3(); - const p2Scratch = new Matrix3.Cartesian3(); - - PolygonGeometryLibrary.computeWallGeometry = function ( - positions, - textureCoordinates, - ellipsoid, - granularity, - perPositionHeight, - arcType - ) { - let edgePositions; - let topEdgeLength; - let i; - let p1; - let p2; - let t1; - let t2; - let edgeTexcoords; - let topEdgeTexcoordLength; - - let length = positions.length; - let index = 0; - let textureIndex = 0; - - const hasTexcoords = defaultValue.defined(textureCoordinates); - const texcoords = hasTexcoords ? textureCoordinates.positions : undefined; - - if (!perPositionHeight) { - const minDistance = Math$1.CesiumMath.chordLength( - granularity, - ellipsoid.maximumRadius - ); - - let numVertices = 0; - if (arcType === ArcType.ArcType.GEODESIC) { - for (i = 0; i < length; i++) { - numVertices += PolygonGeometryLibrary.subdivideLineCount( - positions[i], - positions[(i + 1) % length], - minDistance - ); - } - } else if (arcType === ArcType.ArcType.RHUMB) { - for (i = 0; i < length; i++) { - numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount( - ellipsoid, - positions[i], - positions[(i + 1) % length], - minDistance - ); - } - } - - topEdgeLength = (numVertices + length) * 3; - edgePositions = new Array(topEdgeLength * 2); - - if (hasTexcoords) { - topEdgeTexcoordLength = (numVertices + length) * 2; - edgeTexcoords = new Array(topEdgeTexcoordLength * 2); - } - - for (i = 0; i < length; i++) { - p1 = positions[i]; - p2 = positions[(i + 1) % length]; - - let tempPositions; - let tempTexcoords; - - if (hasTexcoords) { - t1 = texcoords[i]; - t2 = texcoords[(i + 1) % length]; - } - - if (arcType === ArcType.ArcType.GEODESIC) { - tempPositions = PolygonGeometryLibrary.subdivideLine( - p1, - p2, - minDistance, - computeWallIndicesSubdivided - ); - if (hasTexcoords) { - tempTexcoords = PolygonGeometryLibrary.subdivideTexcoordLine( - t1, - t2, - p1, - p2, - minDistance, - computeWallTexcoordsSubdivided - ); - } - } else if (arcType === ArcType.ArcType.RHUMB) { - tempPositions = PolygonGeometryLibrary.subdivideRhumbLine( - ellipsoid, - p1, - p2, - minDistance, - computeWallIndicesSubdivided - ); - if (hasTexcoords) { - tempTexcoords = PolygonGeometryLibrary.subdivideTexcoordRhumbLine( - t1, - t2, - ellipsoid, - p1, - p2, - minDistance, - computeWallTexcoordsSubdivided - ); - } - } - const tempPositionsLength = tempPositions.length; - for (let j = 0; j < tempPositionsLength; ++j, ++index) { - edgePositions[index] = tempPositions[j]; - edgePositions[index + topEdgeLength] = tempPositions[j]; - } - - edgePositions[index] = p2.x; - edgePositions[index + topEdgeLength] = p2.x; - ++index; - - edgePositions[index] = p2.y; - edgePositions[index + topEdgeLength] = p2.y; - ++index; - - edgePositions[index] = p2.z; - edgePositions[index + topEdgeLength] = p2.z; - ++index; - - if (hasTexcoords) { - const tempTexcoordsLength = tempTexcoords.length; - for (let k = 0; k < tempTexcoordsLength; ++k, ++textureIndex) { - edgeTexcoords[textureIndex] = tempTexcoords[k]; - edgeTexcoords[textureIndex + topEdgeTexcoordLength] = - tempTexcoords[k]; - } - - edgeTexcoords[textureIndex] = t2.x; - edgeTexcoords[textureIndex + topEdgeTexcoordLength] = t2.x; - ++textureIndex; - - edgeTexcoords[textureIndex] = t2.y; - edgeTexcoords[textureIndex + topEdgeTexcoordLength] = t2.y; - ++textureIndex; - } - } - } else { - topEdgeLength = length * 3 * 2; - edgePositions = new Array(topEdgeLength * 2); - - if (hasTexcoords) { - topEdgeTexcoordLength = length * 2 * 2; - edgeTexcoords = new Array(topEdgeTexcoordLength * 2); - } - - for (i = 0; i < length; i++) { - p1 = positions[i]; - p2 = positions[(i + 1) % length]; - edgePositions[index] = edgePositions[index + topEdgeLength] = p1.x; - ++index; - edgePositions[index] = edgePositions[index + topEdgeLength] = p1.y; - ++index; - edgePositions[index] = edgePositions[index + topEdgeLength] = p1.z; - ++index; - edgePositions[index] = edgePositions[index + topEdgeLength] = p2.x; - ++index; - edgePositions[index] = edgePositions[index + topEdgeLength] = p2.y; - ++index; - edgePositions[index] = edgePositions[index + topEdgeLength] = p2.z; - ++index; - - if (hasTexcoords) { - t1 = texcoords[i]; - t2 = texcoords[(i + 1) % length]; - edgeTexcoords[textureIndex] = edgeTexcoords[ - textureIndex + topEdgeTexcoordLength - ] = t1.x; - ++textureIndex; - edgeTexcoords[textureIndex] = edgeTexcoords[ - textureIndex + topEdgeTexcoordLength - ] = t1.y; - ++textureIndex; - edgeTexcoords[textureIndex] = edgeTexcoords[ - textureIndex + topEdgeTexcoordLength - ] = t2.x; - ++textureIndex; - edgeTexcoords[textureIndex] = edgeTexcoords[ - textureIndex + topEdgeTexcoordLength - ] = t2.y; - ++textureIndex; - } - } - } - - length = edgePositions.length; - const indices = IndexDatatype.IndexDatatype.createTypedArray( - length / 3, - length - positions.length * 6 - ); - let edgeIndex = 0; - length /= 6; - - for (i = 0; i < length; i++) { - const UL = i; - const UR = UL + 1; - const LL = UL + length; - const LR = LL + 1; - - p1 = Matrix3.Cartesian3.fromArray(edgePositions, UL * 3, p1Scratch); - p2 = Matrix3.Cartesian3.fromArray(edgePositions, UR * 3, p2Scratch); - if ( - Matrix3.Cartesian3.equalsEpsilon( - p1, - p2, - Math$1.CesiumMath.EPSILON10, - Math$1.CesiumMath.EPSILON10 - ) - ) { - //skip corner - continue; - } - - indices[edgeIndex++] = UL; - indices[edgeIndex++] = LL; - indices[edgeIndex++] = UR; - indices[edgeIndex++] = UR; - indices[edgeIndex++] = LL; - indices[edgeIndex++] = LR; - } - - const geometryOptions = { - attributes: new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: edgePositions, - }), - }), - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }; - - if (hasTexcoords) { - geometryOptions.attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: edgeTexcoords, - }); - } - - const geometry = new GeometryAttribute.Geometry(geometryOptions); - - return geometry; - }; - var PolygonGeometryLibrary$1 = PolygonGeometryLibrary; - - exports.PolygonGeometryLibrary = PolygonGeometryLibrary$1; - -})); -//# sourceMappingURL=PolygonGeometryLibrary-62266ab5.js.map diff --git a/debug/cesium/Workers/PolygonGeometryLibrary-62266ab5.js.map b/debug/cesium/Workers/PolygonGeometryLibrary-62266ab5.js.map deleted file mode 100644 index 6266beb..0000000 --- a/debug/cesium/Workers/PolygonGeometryLibrary-62266ab5.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PolygonGeometryLibrary-62266ab5.js","sources":["../../../Source/Core/Queue.js","../../../Source/Core/PolygonGeometryLibrary.js"],"sourcesContent":["/**\r\n * A queue that can enqueue items at the end, and dequeue items from the front.\r\n *\r\n * @alias Queue\r\n * @constructor\r\n */\r\nfunction Queue() {\r\n this._array = [];\r\n this._offset = 0;\r\n this._length = 0;\r\n}\r\n\r\nObject.defineProperties(Queue.prototype, {\r\n /**\r\n * The length of the queue.\r\n *\r\n * @memberof Queue.prototype\r\n *\r\n * @type {Number}\r\n * @readonly\r\n */\r\n length: {\r\n get: function () {\r\n return this._length;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Enqueues the specified item.\r\n *\r\n * @param {*} item The item to enqueue.\r\n */\r\nQueue.prototype.enqueue = function (item) {\r\n this._array.push(item);\r\n this._length++;\r\n};\r\n\r\n/**\r\n * Dequeues an item. Returns undefined if the queue is empty.\r\n *\r\n * @returns {*} The the dequeued item.\r\n */\r\nQueue.prototype.dequeue = function () {\r\n if (this._length === 0) {\r\n return undefined;\r\n }\r\n\r\n const array = this._array;\r\n let offset = this._offset;\r\n const item = array[offset];\r\n array[offset] = undefined;\r\n\r\n offset++;\r\n if (offset > 10 && offset * 2 > array.length) {\r\n //compact array\r\n this._array = array.slice(offset);\r\n offset = 0;\r\n }\r\n\r\n this._offset = offset;\r\n this._length--;\r\n\r\n return item;\r\n};\r\n\r\n/**\r\n * Returns the item at the front of the queue. Returns undefined if the queue is empty.\r\n *\r\n * @returns {*} The item at the front of the queue.\r\n */\r\nQueue.prototype.peek = function () {\r\n if (this._length === 0) {\r\n return undefined;\r\n }\r\n\r\n return this._array[this._offset];\r\n};\r\n\r\n/**\r\n * Check whether this queue contains the specified item.\r\n *\r\n * @param {*} item The item to search for.\r\n */\r\nQueue.prototype.contains = function (item) {\r\n return this._array.indexOf(item) !== -1;\r\n};\r\n\r\n/**\r\n * Remove all items from the queue.\r\n */\r\nQueue.prototype.clear = function () {\r\n this._array.length = this._offset = this._length = 0;\r\n};\r\n\r\n/**\r\n * Sort the items in the queue in-place.\r\n *\r\n * @param {Queue.Comparator} compareFunction A function that defines the sort order.\r\n */\r\nQueue.prototype.sort = function (compareFunction) {\r\n if (this._offset > 0) {\r\n //compact array\r\n this._array = this._array.slice(this._offset);\r\n this._offset = 0;\r\n }\r\n\r\n this._array.sort(compareFunction);\r\n};\r\n\r\n/**\r\n * A function used to compare two items while sorting a queue.\r\n * @callback Queue.Comparator\r\n *\r\n * @param {*} a An item in the array.\r\n * @param {*} b An item in the array.\r\n * @returns {Number} Returns a negative value if a is less than b,\r\n * a positive value if a is greater than b, or\r\n * 0 if a is equal to b.\r\n *\r\n * @example\r\n * function compareNumbers(a, b) {\r\n * return a - b;\r\n * }\r\n */\r\nexport default Queue;\r\n","import ArcType from \"./ArcType.js\";\r\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryPipeline from \"./GeometryPipeline.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport Queue from \"./Queue.js\";\r\nimport WindingOrder from \"./WindingOrder.js\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst PolygonGeometryLibrary = {};\r\n\r\nPolygonGeometryLibrary.computeHierarchyPackedLength = function (\r\n polygonHierarchy,\r\n CartesianX\r\n) {\r\n let numComponents = 0;\r\n const stack = [polygonHierarchy];\r\n while (stack.length > 0) {\r\n const hierarchy = stack.pop();\r\n if (!defined(hierarchy)) {\r\n continue;\r\n }\r\n\r\n numComponents += 2;\r\n\r\n const positions = hierarchy.positions;\r\n const holes = hierarchy.holes;\r\n\r\n if (defined(positions) && positions.length > 0) {\r\n numComponents += positions.length * CartesianX.packedLength;\r\n }\r\n\r\n if (defined(holes)) {\r\n const length = holes.length;\r\n for (let i = 0; i < length; ++i) {\r\n stack.push(holes[i]);\r\n }\r\n }\r\n }\r\n\r\n return numComponents;\r\n};\r\n\r\nPolygonGeometryLibrary.packPolygonHierarchy = function (\r\n polygonHierarchy,\r\n array,\r\n startingIndex,\r\n CartesianX\r\n) {\r\n const stack = [polygonHierarchy];\r\n while (stack.length > 0) {\r\n const hierarchy = stack.pop();\r\n if (!defined(hierarchy)) {\r\n continue;\r\n }\r\n\r\n const positions = hierarchy.positions;\r\n const holes = hierarchy.holes;\r\n\r\n array[startingIndex++] = defined(positions) ? positions.length : 0;\r\n array[startingIndex++] = defined(holes) ? holes.length : 0;\r\n\r\n if (defined(positions)) {\r\n const positionsLength = positions.length;\r\n for (\r\n let i = 0;\r\n i < positionsLength;\r\n ++i, startingIndex += CartesianX.packedLength\r\n ) {\r\n CartesianX.pack(positions[i], array, startingIndex);\r\n }\r\n }\r\n\r\n if (defined(holes)) {\r\n const holesLength = holes.length;\r\n for (let j = 0; j < holesLength; ++j) {\r\n stack.push(holes[j]);\r\n }\r\n }\r\n }\r\n\r\n return startingIndex;\r\n};\r\n\r\nPolygonGeometryLibrary.unpackPolygonHierarchy = function (\r\n array,\r\n startingIndex,\r\n CartesianX\r\n) {\r\n const positionsLength = array[startingIndex++];\r\n const holesLength = array[startingIndex++];\r\n\r\n const positions = new Array(positionsLength);\r\n const holes = holesLength > 0 ? new Array(holesLength) : undefined;\r\n\r\n for (\r\n let i = 0;\r\n i < positionsLength;\r\n ++i, startingIndex += CartesianX.packedLength\r\n ) {\r\n positions[i] = CartesianX.unpack(array, startingIndex);\r\n }\r\n\r\n for (let j = 0; j < holesLength; ++j) {\r\n holes[j] = PolygonGeometryLibrary.unpackPolygonHierarchy(\r\n array,\r\n startingIndex,\r\n CartesianX\r\n );\r\n startingIndex = holes[j].startingIndex;\r\n delete holes[j].startingIndex;\r\n }\r\n\r\n return {\r\n positions: positions,\r\n holes: holes,\r\n startingIndex: startingIndex,\r\n };\r\n};\r\n\r\nconst distance2DScratch = new Cartesian2();\r\nfunction getPointAtDistance2D(p0, p1, distance, length) {\r\n Cartesian2.subtract(p1, p0, distance2DScratch);\r\n Cartesian2.multiplyByScalar(\r\n distance2DScratch,\r\n distance / length,\r\n distance2DScratch\r\n );\r\n Cartesian2.add(p0, distance2DScratch, distance2DScratch);\r\n return [distance2DScratch.x, distance2DScratch.y];\r\n}\r\n\r\nconst distanceScratch = new Cartesian3();\r\nfunction getPointAtDistance(p0, p1, distance, length) {\r\n Cartesian3.subtract(p1, p0, distanceScratch);\r\n Cartesian3.multiplyByScalar(\r\n distanceScratch,\r\n distance / length,\r\n distanceScratch\r\n );\r\n Cartesian3.add(p0, distanceScratch, distanceScratch);\r\n return [distanceScratch.x, distanceScratch.y, distanceScratch.z];\r\n}\r\n\r\nPolygonGeometryLibrary.subdivideLineCount = function (p0, p1, minDistance) {\r\n const distance = Cartesian3.distance(p0, p1);\r\n const n = distance / minDistance;\r\n const countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\r\n return Math.pow(2, countDivide);\r\n};\r\n\r\nconst scratchCartographic0 = new Cartographic();\r\nconst scratchCartographic1 = new Cartographic();\r\nconst scratchCartographic2 = new Cartographic();\r\nconst scratchCartesian0 = new Cartesian3();\r\nconst scratchRhumbLine = new EllipsoidRhumbLine();\r\nPolygonGeometryLibrary.subdivideRhumbLineCount = function (\r\n ellipsoid,\r\n p0,\r\n p1,\r\n minDistance\r\n) {\r\n const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0);\r\n const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1);\r\n const rhumb = new EllipsoidRhumbLine(c0, c1, ellipsoid);\r\n const n = rhumb.surfaceDistance / minDistance;\r\n const countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\r\n return Math.pow(2, countDivide);\r\n};\r\n\r\n/**\r\n * Subdivides texture coordinates based on the subdivision of the associated world positions.\r\n *\r\n * @param {Cartesian2} t0 First texture coordinate.\r\n * @param {Cartesian2} t1 Second texture coordinate.\r\n * @param {Cartesian3} p0 First world position.\r\n * @param {Cartesian3} p1 Second world position.\r\n * @param {Number} minDistance Minimum distance for a segment.\r\n * @param {Array} result The subdivided texture coordinates.\r\n *\r\n * @private\r\n */\r\nPolygonGeometryLibrary.subdivideTexcoordLine = function (\r\n t0,\r\n t1,\r\n p0,\r\n p1,\r\n minDistance,\r\n result\r\n) {\r\n // Compute the number of subdivisions.\r\n const subdivisions = PolygonGeometryLibrary.subdivideLineCount(\r\n p0,\r\n p1,\r\n minDistance\r\n );\r\n\r\n // Compute the distance between each subdivided point.\r\n const length2D = Cartesian2.distance(t0, t1);\r\n const distanceBetweenCoords = length2D / subdivisions;\r\n\r\n // Resize the result array.\r\n const texcoords = result;\r\n texcoords.length = subdivisions * 2;\r\n\r\n // Compute texture coordinates using linear interpolation.\r\n let index = 0;\r\n for (let i = 0; i < subdivisions; i++) {\r\n const t = getPointAtDistance2D(t0, t1, i * distanceBetweenCoords, length2D);\r\n texcoords[index++] = t[0];\r\n texcoords[index++] = t[1];\r\n }\r\n\r\n return texcoords;\r\n};\r\n\r\nPolygonGeometryLibrary.subdivideLine = function (p0, p1, minDistance, result) {\r\n const numVertices = PolygonGeometryLibrary.subdivideLineCount(\r\n p0,\r\n p1,\r\n minDistance\r\n );\r\n const length = Cartesian3.distance(p0, p1);\r\n const distanceBetweenVertices = length / numVertices;\r\n\r\n if (!defined(result)) {\r\n result = [];\r\n }\r\n\r\n const positions = result;\r\n positions.length = numVertices * 3;\r\n\r\n let index = 0;\r\n for (let i = 0; i < numVertices; i++) {\r\n const p = getPointAtDistance(p0, p1, i * distanceBetweenVertices, length);\r\n positions[index++] = p[0];\r\n positions[index++] = p[1];\r\n positions[index++] = p[2];\r\n }\r\n\r\n return positions;\r\n};\r\n\r\n/**\r\n * Subdivides texture coordinates based on the subdivision of the associated world positions using a rhumb line.\r\n *\r\n * @param {Cartesian2} t0 First texture coordinate.\r\n * @param {Cartesian2} t1 Second texture coordinate.\r\n * @param {Ellipsoid} ellipsoid The ellipsoid.\r\n * @param {Cartesian3} p0 First world position.\r\n * @param {Cartesian3} p1 Second world position.\r\n * @param {Number} minDistance Minimum distance for a segment.\r\n * @param {Array} result The subdivided texture coordinates.\r\n *\r\n * @private\r\n */\r\nPolygonGeometryLibrary.subdivideTexcoordRhumbLine = function (\r\n t0,\r\n t1,\r\n ellipsoid,\r\n p0,\r\n p1,\r\n minDistance,\r\n result\r\n) {\r\n // Compute the surface distance.\r\n const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0);\r\n const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1);\r\n scratchRhumbLine.setEndPoints(c0, c1);\r\n const n = scratchRhumbLine.surfaceDistance / minDistance;\r\n\r\n // Compute the number of subdivisions.\r\n const countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\r\n const subdivisions = Math.pow(2, countDivide);\r\n\r\n // Compute the distance between each subdivided point.\r\n const length2D = Cartesian2.distance(t0, t1);\r\n const distanceBetweenCoords = length2D / subdivisions;\r\n\r\n // Resize the result array.\r\n const texcoords = result;\r\n texcoords.length = subdivisions * 2;\r\n\r\n // Compute texture coordinates using linear interpolation.\r\n let index = 0;\r\n for (let i = 0; i < subdivisions; i++) {\r\n const t = getPointAtDistance2D(t0, t1, i * distanceBetweenCoords, length2D);\r\n texcoords[index++] = t[0];\r\n texcoords[index++] = t[1];\r\n }\r\n\r\n return texcoords;\r\n};\r\n\r\nPolygonGeometryLibrary.subdivideRhumbLine = function (\r\n ellipsoid,\r\n p0,\r\n p1,\r\n minDistance,\r\n result\r\n) {\r\n const c0 = ellipsoid.cartesianToCartographic(p0, scratchCartographic0);\r\n const c1 = ellipsoid.cartesianToCartographic(p1, scratchCartographic1);\r\n const rhumb = new EllipsoidRhumbLine(c0, c1, ellipsoid);\r\n\r\n const n = rhumb.surfaceDistance / minDistance;\r\n const countDivide = Math.max(0, Math.ceil(CesiumMath.log2(n)));\r\n const numVertices = Math.pow(2, countDivide);\r\n const distanceBetweenVertices = rhumb.surfaceDistance / numVertices;\r\n\r\n if (!defined(result)) {\r\n result = [];\r\n }\r\n\r\n const positions = result;\r\n positions.length = numVertices * 3;\r\n\r\n let index = 0;\r\n for (let i = 0; i < numVertices; i++) {\r\n const c = rhumb.interpolateUsingSurfaceDistance(\r\n i * distanceBetweenVertices,\r\n scratchCartographic2\r\n );\r\n const p = ellipsoid.cartographicToCartesian(c, scratchCartesian0);\r\n positions[index++] = p.x;\r\n positions[index++] = p.y;\r\n positions[index++] = p.z;\r\n }\r\n\r\n return positions;\r\n};\r\n\r\nconst scaleToGeodeticHeightN1 = new Cartesian3();\r\nconst scaleToGeodeticHeightN2 = new Cartesian3();\r\nconst scaleToGeodeticHeightP1 = new Cartesian3();\r\nconst scaleToGeodeticHeightP2 = new Cartesian3();\r\n\r\nPolygonGeometryLibrary.scaleToGeodeticHeightExtruded = function (\r\n geometry,\r\n maxHeight,\r\n minHeight,\r\n ellipsoid,\r\n perPositionHeight\r\n) {\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n\r\n const n1 = scaleToGeodeticHeightN1;\r\n let n2 = scaleToGeodeticHeightN2;\r\n const p = scaleToGeodeticHeightP1;\r\n let p2 = scaleToGeodeticHeightP2;\r\n\r\n if (\r\n defined(geometry) &&\r\n defined(geometry.attributes) &&\r\n defined(geometry.attributes.position)\r\n ) {\r\n const positions = geometry.attributes.position.values;\r\n const length = positions.length / 2;\r\n\r\n for (let i = 0; i < length; i += 3) {\r\n Cartesian3.fromArray(positions, i, p);\r\n\r\n ellipsoid.geodeticSurfaceNormal(p, n1);\r\n p2 = ellipsoid.scaleToGeodeticSurface(p, p2);\r\n n2 = Cartesian3.multiplyByScalar(n1, minHeight, n2);\r\n n2 = Cartesian3.add(p2, n2, n2);\r\n positions[i + length] = n2.x;\r\n positions[i + 1 + length] = n2.y;\r\n positions[i + 2 + length] = n2.z;\r\n\r\n if (perPositionHeight) {\r\n p2 = Cartesian3.clone(p, p2);\r\n }\r\n n2 = Cartesian3.multiplyByScalar(n1, maxHeight, n2);\r\n n2 = Cartesian3.add(p2, n2, n2);\r\n positions[i] = n2.x;\r\n positions[i + 1] = n2.y;\r\n positions[i + 2] = n2.z;\r\n }\r\n }\r\n return geometry;\r\n};\r\n\r\nPolygonGeometryLibrary.polygonOutlinesFromHierarchy = function (\r\n polygonHierarchy,\r\n scaleToEllipsoidSurface,\r\n ellipsoid\r\n) {\r\n // create from a polygon hierarchy\r\n // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf\r\n const polygons = [];\r\n const queue = new Queue();\r\n queue.enqueue(polygonHierarchy);\r\n let i;\r\n let j;\r\n let length;\r\n while (queue.length !== 0) {\r\n const outerNode = queue.dequeue();\r\n let outerRing = outerNode.positions;\r\n if (scaleToEllipsoidSurface) {\r\n length = outerRing.length;\r\n for (i = 0; i < length; i++) {\r\n ellipsoid.scaleToGeodeticSurface(outerRing[i], outerRing[i]);\r\n }\r\n }\r\n outerRing = arrayRemoveDuplicates(\r\n outerRing,\r\n Cartesian3.equalsEpsilon,\r\n true\r\n );\r\n if (outerRing.length < 3) {\r\n continue;\r\n }\r\n\r\n const numChildren = outerNode.holes ? outerNode.holes.length : 0;\r\n // The outer polygon contains inner polygons\r\n for (i = 0; i < numChildren; i++) {\r\n const hole = outerNode.holes[i];\r\n let holePositions = hole.positions;\r\n if (scaleToEllipsoidSurface) {\r\n length = holePositions.length;\r\n for (j = 0; j < length; ++j) {\r\n ellipsoid.scaleToGeodeticSurface(holePositions[j], holePositions[j]);\r\n }\r\n }\r\n holePositions = arrayRemoveDuplicates(\r\n holePositions,\r\n Cartesian3.equalsEpsilon,\r\n true\r\n );\r\n if (holePositions.length < 3) {\r\n continue;\r\n }\r\n polygons.push(holePositions);\r\n\r\n let numGrandchildren = 0;\r\n if (defined(hole.holes)) {\r\n numGrandchildren = hole.holes.length;\r\n }\r\n\r\n for (j = 0; j < numGrandchildren; j++) {\r\n queue.enqueue(hole.holes[j]);\r\n }\r\n }\r\n\r\n polygons.push(outerRing);\r\n }\r\n\r\n return polygons;\r\n};\r\n\r\nPolygonGeometryLibrary.polygonsFromHierarchy = function (\r\n polygonHierarchy,\r\n keepDuplicates,\r\n projectPointsTo2D,\r\n scaleToEllipsoidSurface,\r\n ellipsoid\r\n) {\r\n // create from a polygon hierarchy\r\n // Algorithm adapted from http://www.geometrictools.com/Documentation/TriangulationByEarClipping.pdf\r\n const hierarchy = [];\r\n const polygons = [];\r\n\r\n const queue = new Queue();\r\n queue.enqueue(polygonHierarchy);\r\n\r\n while (queue.length !== 0) {\r\n const outerNode = queue.dequeue();\r\n let outerRing = outerNode.positions;\r\n const holes = outerNode.holes;\r\n\r\n let i;\r\n let length;\r\n if (scaleToEllipsoidSurface) {\r\n length = outerRing.length;\r\n for (i = 0; i < length; i++) {\r\n ellipsoid.scaleToGeodeticSurface(outerRing[i], outerRing[i]);\r\n }\r\n }\r\n\r\n if (!keepDuplicates) {\r\n outerRing = arrayRemoveDuplicates(\r\n outerRing,\r\n Cartesian3.equalsEpsilon,\r\n true\r\n );\r\n }\r\n if (outerRing.length < 3) {\r\n continue;\r\n }\r\n\r\n let positions2D = projectPointsTo2D(outerRing);\r\n if (!defined(positions2D)) {\r\n continue;\r\n }\r\n const holeIndices = [];\r\n\r\n let originalWindingOrder = PolygonPipeline.computeWindingOrder2D(\r\n positions2D\r\n );\r\n if (originalWindingOrder === WindingOrder.CLOCKWISE) {\r\n positions2D.reverse();\r\n outerRing = outerRing.slice().reverse();\r\n }\r\n\r\n let positions = outerRing.slice();\r\n const numChildren = defined(holes) ? holes.length : 0;\r\n const polygonHoles = [];\r\n let j;\r\n\r\n for (i = 0; i < numChildren; i++) {\r\n const hole = holes[i];\r\n let holePositions = hole.positions;\r\n if (scaleToEllipsoidSurface) {\r\n length = holePositions.length;\r\n for (j = 0; j < length; ++j) {\r\n ellipsoid.scaleToGeodeticSurface(holePositions[j], holePositions[j]);\r\n }\r\n }\r\n\r\n if (!keepDuplicates) {\r\n holePositions = arrayRemoveDuplicates(\r\n holePositions,\r\n Cartesian3.equalsEpsilon,\r\n true\r\n );\r\n }\r\n if (holePositions.length < 3) {\r\n continue;\r\n }\r\n\r\n const holePositions2D = projectPointsTo2D(holePositions);\r\n if (!defined(holePositions2D)) {\r\n continue;\r\n }\r\n\r\n originalWindingOrder = PolygonPipeline.computeWindingOrder2D(\r\n holePositions2D\r\n );\r\n if (originalWindingOrder === WindingOrder.CLOCKWISE) {\r\n holePositions2D.reverse();\r\n holePositions = holePositions.slice().reverse();\r\n }\r\n\r\n polygonHoles.push(holePositions);\r\n holeIndices.push(positions.length);\r\n positions = positions.concat(holePositions);\r\n positions2D = positions2D.concat(holePositions2D);\r\n\r\n let numGrandchildren = 0;\r\n if (defined(hole.holes)) {\r\n numGrandchildren = hole.holes.length;\r\n }\r\n\r\n for (j = 0; j < numGrandchildren; j++) {\r\n queue.enqueue(hole.holes[j]);\r\n }\r\n }\r\n\r\n hierarchy.push({\r\n outerRing: outerRing,\r\n holes: polygonHoles,\r\n });\r\n polygons.push({\r\n positions: positions,\r\n positions2D: positions2D,\r\n holes: holeIndices,\r\n });\r\n }\r\n\r\n return {\r\n hierarchy: hierarchy,\r\n polygons: polygons,\r\n };\r\n};\r\n\r\nconst computeBoundingRectangleCartesian2 = new Cartesian2();\r\nconst computeBoundingRectangleCartesian3 = new Cartesian3();\r\nconst computeBoundingRectangleQuaternion = new Quaternion();\r\nconst computeBoundingRectangleMatrix3 = new Matrix3();\r\nPolygonGeometryLibrary.computeBoundingRectangle = function (\r\n planeNormal,\r\n projectPointTo2D,\r\n positions,\r\n angle,\r\n result\r\n) {\r\n const rotation = Quaternion.fromAxisAngle(\r\n planeNormal,\r\n angle,\r\n computeBoundingRectangleQuaternion\r\n );\r\n const textureMatrix = Matrix3.fromQuaternion(\r\n rotation,\r\n computeBoundingRectangleMatrix3\r\n );\r\n\r\n let minX = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n\r\n const length = positions.length;\r\n for (let i = 0; i < length; ++i) {\r\n const p = Cartesian3.clone(\r\n positions[i],\r\n computeBoundingRectangleCartesian3\r\n );\r\n Matrix3.multiplyByVector(textureMatrix, p, p);\r\n const st = projectPointTo2D(p, computeBoundingRectangleCartesian2);\r\n\r\n if (defined(st)) {\r\n minX = Math.min(minX, st.x);\r\n maxX = Math.max(maxX, st.x);\r\n\r\n minY = Math.min(minY, st.y);\r\n maxY = Math.max(maxY, st.y);\r\n }\r\n }\r\n\r\n result.x = minX;\r\n result.y = minY;\r\n result.width = maxX - minX;\r\n result.height = maxY - minY;\r\n return result;\r\n};\r\n\r\nPolygonGeometryLibrary.createGeometryFromPositions = function (\r\n ellipsoid,\r\n polygon,\r\n textureCoordinates,\r\n granularity,\r\n perPositionHeight,\r\n vertexFormat,\r\n arcType\r\n) {\r\n let indices = PolygonPipeline.triangulate(polygon.positions2D, polygon.holes);\r\n\r\n /* If polygon is completely unrenderable, just use the first three vertices */\r\n if (indices.length < 3) {\r\n indices = [0, 1, 2];\r\n }\r\n\r\n const positions = polygon.positions;\r\n\r\n const hasTexcoords = defined(textureCoordinates);\r\n const texcoords = hasTexcoords ? textureCoordinates.positions : undefined;\r\n\r\n if (perPositionHeight) {\r\n const length = positions.length;\r\n const flattenedPositions = new Array(length * 3);\r\n let index = 0;\r\n for (let i = 0; i < length; i++) {\r\n const p = positions[i];\r\n flattenedPositions[index++] = p.x;\r\n flattenedPositions[index++] = p.y;\r\n flattenedPositions[index++] = p.z;\r\n }\r\n\r\n const geometryOptions = {\r\n attributes: {\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: flattenedPositions,\r\n }),\r\n },\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n };\r\n\r\n if (hasTexcoords) {\r\n geometryOptions.attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: Cartesian2.packArray(texcoords),\r\n });\r\n }\r\n\r\n const geometry = new Geometry(geometryOptions);\r\n\r\n if (vertexFormat.normal) {\r\n return GeometryPipeline.computeNormal(geometry);\r\n }\r\n\r\n return geometry;\r\n }\r\n\r\n if (arcType === ArcType.GEODESIC) {\r\n return PolygonPipeline.computeSubdivision(\r\n ellipsoid,\r\n positions,\r\n indices,\r\n texcoords,\r\n granularity\r\n );\r\n } else if (arcType === ArcType.RHUMB) {\r\n return PolygonPipeline.computeRhumbLineSubdivision(\r\n ellipsoid,\r\n positions,\r\n indices,\r\n texcoords,\r\n granularity\r\n );\r\n }\r\n};\r\n\r\nconst computeWallTexcoordsSubdivided = [];\r\nconst computeWallIndicesSubdivided = [];\r\nconst p1Scratch = new Cartesian3();\r\nconst p2Scratch = new Cartesian3();\r\n\r\nPolygonGeometryLibrary.computeWallGeometry = function (\r\n positions,\r\n textureCoordinates,\r\n ellipsoid,\r\n granularity,\r\n perPositionHeight,\r\n arcType\r\n) {\r\n let edgePositions;\r\n let topEdgeLength;\r\n let i;\r\n let p1;\r\n let p2;\r\n let t1;\r\n let t2;\r\n let edgeTexcoords;\r\n let topEdgeTexcoordLength;\r\n\r\n let length = positions.length;\r\n let index = 0;\r\n let textureIndex = 0;\r\n\r\n const hasTexcoords = defined(textureCoordinates);\r\n const texcoords = hasTexcoords ? textureCoordinates.positions : undefined;\r\n\r\n if (!perPositionHeight) {\r\n const minDistance = CesiumMath.chordLength(\r\n granularity,\r\n ellipsoid.maximumRadius\r\n );\r\n\r\n let numVertices = 0;\r\n if (arcType === ArcType.GEODESIC) {\r\n for (i = 0; i < length; i++) {\r\n numVertices += PolygonGeometryLibrary.subdivideLineCount(\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance\r\n );\r\n }\r\n } else if (arcType === ArcType.RHUMB) {\r\n for (i = 0; i < length; i++) {\r\n numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\r\n ellipsoid,\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance\r\n );\r\n }\r\n }\r\n\r\n topEdgeLength = (numVertices + length) * 3;\r\n edgePositions = new Array(topEdgeLength * 2);\r\n\r\n if (hasTexcoords) {\r\n topEdgeTexcoordLength = (numVertices + length) * 2;\r\n edgeTexcoords = new Array(topEdgeTexcoordLength * 2);\r\n }\r\n\r\n for (i = 0; i < length; i++) {\r\n p1 = positions[i];\r\n p2 = positions[(i + 1) % length];\r\n\r\n let tempPositions;\r\n let tempTexcoords;\r\n\r\n if (hasTexcoords) {\r\n t1 = texcoords[i];\r\n t2 = texcoords[(i + 1) % length];\r\n }\r\n\r\n if (arcType === ArcType.GEODESIC) {\r\n tempPositions = PolygonGeometryLibrary.subdivideLine(\r\n p1,\r\n p2,\r\n minDistance,\r\n computeWallIndicesSubdivided\r\n );\r\n if (hasTexcoords) {\r\n tempTexcoords = PolygonGeometryLibrary.subdivideTexcoordLine(\r\n t1,\r\n t2,\r\n p1,\r\n p2,\r\n minDistance,\r\n computeWallTexcoordsSubdivided\r\n );\r\n }\r\n } else if (arcType === ArcType.RHUMB) {\r\n tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\r\n ellipsoid,\r\n p1,\r\n p2,\r\n minDistance,\r\n computeWallIndicesSubdivided\r\n );\r\n if (hasTexcoords) {\r\n tempTexcoords = PolygonGeometryLibrary.subdivideTexcoordRhumbLine(\r\n t1,\r\n t2,\r\n ellipsoid,\r\n p1,\r\n p2,\r\n minDistance,\r\n computeWallTexcoordsSubdivided\r\n );\r\n }\r\n }\r\n const tempPositionsLength = tempPositions.length;\r\n for (let j = 0; j < tempPositionsLength; ++j, ++index) {\r\n edgePositions[index] = tempPositions[j];\r\n edgePositions[index + topEdgeLength] = tempPositions[j];\r\n }\r\n\r\n edgePositions[index] = p2.x;\r\n edgePositions[index + topEdgeLength] = p2.x;\r\n ++index;\r\n\r\n edgePositions[index] = p2.y;\r\n edgePositions[index + topEdgeLength] = p2.y;\r\n ++index;\r\n\r\n edgePositions[index] = p2.z;\r\n edgePositions[index + topEdgeLength] = p2.z;\r\n ++index;\r\n\r\n if (hasTexcoords) {\r\n const tempTexcoordsLength = tempTexcoords.length;\r\n for (let k = 0; k < tempTexcoordsLength; ++k, ++textureIndex) {\r\n edgeTexcoords[textureIndex] = tempTexcoords[k];\r\n edgeTexcoords[textureIndex + topEdgeTexcoordLength] =\r\n tempTexcoords[k];\r\n }\r\n\r\n edgeTexcoords[textureIndex] = t2.x;\r\n edgeTexcoords[textureIndex + topEdgeTexcoordLength] = t2.x;\r\n ++textureIndex;\r\n\r\n edgeTexcoords[textureIndex] = t2.y;\r\n edgeTexcoords[textureIndex + topEdgeTexcoordLength] = t2.y;\r\n ++textureIndex;\r\n }\r\n }\r\n } else {\r\n topEdgeLength = length * 3 * 2;\r\n edgePositions = new Array(topEdgeLength * 2);\r\n\r\n if (hasTexcoords) {\r\n topEdgeTexcoordLength = length * 2 * 2;\r\n edgeTexcoords = new Array(topEdgeTexcoordLength * 2);\r\n }\r\n\r\n for (i = 0; i < length; i++) {\r\n p1 = positions[i];\r\n p2 = positions[(i + 1) % length];\r\n edgePositions[index] = edgePositions[index + topEdgeLength] = p1.x;\r\n ++index;\r\n edgePositions[index] = edgePositions[index + topEdgeLength] = p1.y;\r\n ++index;\r\n edgePositions[index] = edgePositions[index + topEdgeLength] = p1.z;\r\n ++index;\r\n edgePositions[index] = edgePositions[index + topEdgeLength] = p2.x;\r\n ++index;\r\n edgePositions[index] = edgePositions[index + topEdgeLength] = p2.y;\r\n ++index;\r\n edgePositions[index] = edgePositions[index + topEdgeLength] = p2.z;\r\n ++index;\r\n\r\n if (hasTexcoords) {\r\n t1 = texcoords[i];\r\n t2 = texcoords[(i + 1) % length];\r\n edgeTexcoords[textureIndex] = edgeTexcoords[\r\n textureIndex + topEdgeTexcoordLength\r\n ] = t1.x;\r\n ++textureIndex;\r\n edgeTexcoords[textureIndex] = edgeTexcoords[\r\n textureIndex + topEdgeTexcoordLength\r\n ] = t1.y;\r\n ++textureIndex;\r\n edgeTexcoords[textureIndex] = edgeTexcoords[\r\n textureIndex + topEdgeTexcoordLength\r\n ] = t2.x;\r\n ++textureIndex;\r\n edgeTexcoords[textureIndex] = edgeTexcoords[\r\n textureIndex + topEdgeTexcoordLength\r\n ] = t2.y;\r\n ++textureIndex;\r\n }\r\n }\r\n }\r\n\r\n length = edgePositions.length;\r\n const indices = IndexDatatype.createTypedArray(\r\n length / 3,\r\n length - positions.length * 6\r\n );\r\n let edgeIndex = 0;\r\n length /= 6;\r\n\r\n for (i = 0; i < length; i++) {\r\n const UL = i;\r\n const UR = UL + 1;\r\n const LL = UL + length;\r\n const LR = LL + 1;\r\n\r\n p1 = Cartesian3.fromArray(edgePositions, UL * 3, p1Scratch);\r\n p2 = Cartesian3.fromArray(edgePositions, UR * 3, p2Scratch);\r\n if (\r\n Cartesian3.equalsEpsilon(\r\n p1,\r\n p2,\r\n CesiumMath.EPSILON10,\r\n CesiumMath.EPSILON10\r\n )\r\n ) {\r\n //skip corner\r\n continue;\r\n }\r\n\r\n indices[edgeIndex++] = UL;\r\n indices[edgeIndex++] = LL;\r\n indices[edgeIndex++] = UR;\r\n indices[edgeIndex++] = UR;\r\n indices[edgeIndex++] = LL;\r\n indices[edgeIndex++] = LR;\r\n }\r\n\r\n const geometryOptions = {\r\n attributes: new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: edgePositions,\r\n }),\r\n }),\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n };\r\n\r\n if (hasTexcoords) {\r\n geometryOptions.attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: edgeTexcoords,\r\n });\r\n }\r\n\r\n const geometry = new Geometry(geometryOptions);\r\n\r\n return geometry;\r\n};\r\nexport default PolygonGeometryLibrary;\r\n"],"names":["defined","Cartesian2","Cartesian3","CesiumMath","Cartographic","EllipsoidRhumbLine","defaultValue","Ellipsoid","arrayRemoveDuplicates","PolygonPipeline","WindingOrder","Quaternion","Matrix3","GeometryAttribute","ComponentDatatype","PrimitiveType","Geometry","GeometryPipeline","ArcType","IndexDatatype","GeometryAttributes"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/PolygonPipeline-313487c3.js b/debug/cesium/Workers/PolygonPipeline-313487c3.js deleted file mode 100644 index c4f9794..0000000 --- a/debug/cesium/Workers/PolygonPipeline-313487c3.js +++ /dev/null @@ -1,1367 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './EllipsoidRhumbLine-48b4507b', './GeometryAttribute-f2746b95', './Math-9be8b918', './WebGLConstants-f27a5e29'], (function (exports, Matrix2, Matrix3, Check, ComponentDatatype, defaultValue, EllipsoidRhumbLine, GeometryAttribute, Math$1, WebGLConstants) { 'use strict'; - - var earcut$1 = {exports: {}}; - - earcut$1.exports = earcut; - earcut$1.exports.default = earcut; - - function earcut(data, holeIndices, dim) { - - dim = dim || 2; - - var hasHoles = holeIndices && holeIndices.length, - outerLen = hasHoles ? holeIndices[0] * dim : data.length, - outerNode = linkedList(data, 0, outerLen, dim, true), - triangles = []; - - if (!outerNode || outerNode.next === outerNode.prev) return triangles; - - var minX, minY, maxX, maxY, x, y, invSize; - - if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim); - - // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox - if (data.length > 80 * dim) { - minX = maxX = data[0]; - minY = maxY = data[1]; - - for (var i = dim; i < outerLen; i += dim) { - x = data[i]; - y = data[i + 1]; - if (x < minX) minX = x; - if (y < minY) minY = y; - if (x > maxX) maxX = x; - if (y > maxY) maxY = y; - } - - // minX, minY and invSize are later used to transform coords into integers for z-order calculation - invSize = Math.max(maxX - minX, maxY - minY); - invSize = invSize !== 0 ? 32767 / invSize : 0; - } - - earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0); - - return triangles; - } - - // create a circular doubly linked list from polygon points in the specified winding order - function linkedList(data, start, end, dim, clockwise) { - var i, last; - - if (clockwise === (signedArea(data, start, end, dim) > 0)) { - for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last); - } else { - for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last); - } - - if (last && equals(last, last.next)) { - removeNode(last); - last = last.next; - } - - return last; - } - - // eliminate colinear or duplicate points - function filterPoints(start, end) { - if (!start) return start; - if (!end) end = start; - - var p = start, - again; - do { - again = false; - - if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) { - removeNode(p); - p = end = p.prev; - if (p === p.next) break; - again = true; - - } else { - p = p.next; - } - } while (again || p !== end); - - return end; - } - - // main ear slicing loop which triangulates a polygon (given as a linked list) - function earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) { - if (!ear) return; - - // interlink polygon nodes in z-order - if (!pass && invSize) indexCurve(ear, minX, minY, invSize); - - var stop = ear, - prev, next; - - // iterate through ears, slicing them one by one - while (ear.prev !== ear.next) { - prev = ear.prev; - next = ear.next; - - if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) { - // cut off the triangle - triangles.push(prev.i / dim | 0); - triangles.push(ear.i / dim | 0); - triangles.push(next.i / dim | 0); - - removeNode(ear); - - // skipping the next vertex leads to less sliver triangles - ear = next.next; - stop = next.next; - - continue; - } - - ear = next; - - // if we looped through the whole remaining polygon and can't find any more ears - if (ear === stop) { - // try filtering points and slicing again - if (!pass) { - earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1); - - // if this didn't work, try curing all small self-intersections locally - } else if (pass === 1) { - ear = cureLocalIntersections(filterPoints(ear), triangles, dim); - earcutLinked(ear, triangles, dim, minX, minY, invSize, 2); - - // as a last resort, try splitting the remaining polygon into two - } else if (pass === 2) { - splitEarcut(ear, triangles, dim, minX, minY, invSize); - } - - break; - } - } - } - - // check whether a polygon node forms a valid ear with adjacent nodes - function isEar(ear) { - var a = ear.prev, - b = ear, - c = ear.next; - - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - - // now make sure we don't have other points inside the potential ear - var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; - - // triangle bbox; min & max are calculated like this for speed - var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx), - y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy), - x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx), - y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy); - - var p = c.next; - while (p !== a) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && - pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && - area(p.prev, p, p.next) >= 0) return false; - p = p.next; - } - - return true; - } - - function isEarHashed(ear, minX, minY, invSize) { - var a = ear.prev, - b = ear, - c = ear.next; - - if (area(a, b, c) >= 0) return false; // reflex, can't be an ear - - var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y; - - // triangle bbox; min & max are calculated like this for speed - var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx), - y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy), - x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx), - y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy); - - // z-order range for the current triangle bbox; - var minZ = zOrder(x0, y0, minX, minY, invSize), - maxZ = zOrder(x1, y1, minX, minY, invSize); - - var p = ear.prevZ, - n = ear.nextZ; - - // look for points inside the triangle in both directions - while (p && p.z >= minZ && n && n.z <= maxZ) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && - pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - - if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && - pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - - // look for remaining points in decreasing z-order - while (p && p.z >= minZ) { - if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c && - pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false; - p = p.prevZ; - } - - // look for remaining points in increasing z-order - while (n && n.z <= maxZ) { - if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c && - pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false; - n = n.nextZ; - } - - return true; - } - - // go through all polygon nodes and cure small local self-intersections - function cureLocalIntersections(start, triangles, dim) { - var p = start; - do { - var a = p.prev, - b = p.next.next; - - if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) { - - triangles.push(a.i / dim | 0); - triangles.push(p.i / dim | 0); - triangles.push(b.i / dim | 0); - - // remove two nodes involved - removeNode(p); - removeNode(p.next); - - p = start = b; - } - p = p.next; - } while (p !== start); - - return filterPoints(p); - } - - // try splitting polygon into two and triangulate them independently - function splitEarcut(start, triangles, dim, minX, minY, invSize) { - // look for a valid diagonal that divides the polygon into two - var a = start; - do { - var b = a.next.next; - while (b !== a.prev) { - if (a.i !== b.i && isValidDiagonal(a, b)) { - // split the polygon in two by the diagonal - var c = splitPolygon(a, b); - - // filter colinear points around the cuts - a = filterPoints(a, a.next); - c = filterPoints(c, c.next); - - // run earcut on each half - earcutLinked(a, triangles, dim, minX, minY, invSize, 0); - earcutLinked(c, triangles, dim, minX, minY, invSize, 0); - return; - } - b = b.next; - } - a = a.next; - } while (a !== start); - } - - // link every hole into the outer loop, producing a single-ring polygon without holes - function eliminateHoles(data, holeIndices, outerNode, dim) { - var queue = [], - i, len, start, end, list; - - for (i = 0, len = holeIndices.length; i < len; i++) { - start = holeIndices[i] * dim; - end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; - list = linkedList(data, start, end, dim, false); - if (list === list.next) list.steiner = true; - queue.push(getLeftmost(list)); - } - - queue.sort(compareX); - - // process holes from left to right - for (i = 0; i < queue.length; i++) { - outerNode = eliminateHole(queue[i], outerNode); - } - - return outerNode; - } - - function compareX(a, b) { - return a.x - b.x; - } - - // find a bridge between vertices that connects hole with an outer ring and and link it - function eliminateHole(hole, outerNode) { - var bridge = findHoleBridge(hole, outerNode); - if (!bridge) { - return outerNode; - } - - var bridgeReverse = splitPolygon(bridge, hole); - - // filter collinear points around the cuts - filterPoints(bridgeReverse, bridgeReverse.next); - return filterPoints(bridge, bridge.next); - } - - // David Eberly's algorithm for finding a bridge between hole and outer polygon - function findHoleBridge(hole, outerNode) { - var p = outerNode, - hx = hole.x, - hy = hole.y, - qx = -Infinity, - m; - - // find a segment intersected by a ray from the hole's leftmost point to the left; - // segment's endpoint with lesser x will be potential connection point - do { - if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) { - var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y); - if (x <= hx && x > qx) { - qx = x; - m = p.x < p.next.x ? p : p.next; - if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint - } - } - p = p.next; - } while (p !== outerNode); - - if (!m) return null; - - // look for points inside the triangle of hole point, segment intersection and endpoint; - // if there are no points found, we have a valid connection; - // otherwise choose the point of the minimum angle with the ray as connection point - - var stop = m, - mx = m.x, - my = m.y, - tanMin = Infinity, - tan; - - p = m; - - do { - if (hx >= p.x && p.x >= mx && hx !== p.x && - pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) { - - tan = Math.abs(hy - p.y) / (hx - p.x); // tangential - - if (locallyInside(p, hole) && - (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) { - m = p; - tanMin = tan; - } - } - - p = p.next; - } while (p !== stop); - - return m; - } - - // whether sector in vertex m contains sector in vertex p in the same coordinates - function sectorContainsSector(m, p) { - return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0; - } - - // interlink polygon nodes in z-order - function indexCurve(start, minX, minY, invSize) { - var p = start; - do { - if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize); - p.prevZ = p.prev; - p.nextZ = p.next; - p = p.next; - } while (p !== start); - - p.prevZ.nextZ = null; - p.prevZ = null; - - sortLinked(p); - } - - // Simon Tatham's linked list merge sort algorithm - // http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html - function sortLinked(list) { - var i, p, q, e, tail, numMerges, pSize, qSize, - inSize = 1; - - do { - p = list; - list = null; - tail = null; - numMerges = 0; - - while (p) { - numMerges++; - q = p; - pSize = 0; - for (i = 0; i < inSize; i++) { - pSize++; - q = q.nextZ; - if (!q) break; - } - qSize = inSize; - - while (pSize > 0 || (qSize > 0 && q)) { - - if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) { - e = p; - p = p.nextZ; - pSize--; - } else { - e = q; - q = q.nextZ; - qSize--; - } - - if (tail) tail.nextZ = e; - else list = e; - - e.prevZ = tail; - tail = e; - } - - p = q; - } - - tail.nextZ = null; - inSize *= 2; - - } while (numMerges > 1); - - return list; - } - - // z-order of a point given coords and inverse of the longer side of data bbox - function zOrder(x, y, minX, minY, invSize) { - // coords are transformed into non-negative 15-bit integer range - x = (x - minX) * invSize | 0; - y = (y - minY) * invSize | 0; - - x = (x | (x << 8)) & 0x00FF00FF; - x = (x | (x << 4)) & 0x0F0F0F0F; - x = (x | (x << 2)) & 0x33333333; - x = (x | (x << 1)) & 0x55555555; - - y = (y | (y << 8)) & 0x00FF00FF; - y = (y | (y << 4)) & 0x0F0F0F0F; - y = (y | (y << 2)) & 0x33333333; - y = (y | (y << 1)) & 0x55555555; - - return x | (y << 1); - } - - // find the leftmost node of a polygon ring - function getLeftmost(start) { - var p = start, - leftmost = start; - do { - if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p; - p = p.next; - } while (p !== start); - - return leftmost; - } - - // check if a point lies within a convex triangle - function pointInTriangle(ax, ay, bx, by, cx, cy, px, py) { - return (cx - px) * (ay - py) >= (ax - px) * (cy - py) && - (ax - px) * (by - py) >= (bx - px) * (ay - py) && - (bx - px) * (cy - py) >= (cx - px) * (by - py); - } - - // check if a diagonal between two polygon nodes is valid (lies in polygon interior) - function isValidDiagonal(a, b) { - return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges - (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible - (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors - equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case - } - - // signed area of a triangle - function area(p, q, r) { - return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y); - } - - // check if two points are equal - function equals(p1, p2) { - return p1.x === p2.x && p1.y === p2.y; - } - - // check if two segments intersect - function intersects(p1, q1, p2, q2) { - var o1 = sign(area(p1, q1, p2)); - var o2 = sign(area(p1, q1, q2)); - var o3 = sign(area(p2, q2, p1)); - var o4 = sign(area(p2, q2, q1)); - - if (o1 !== o2 && o3 !== o4) return true; // general case - - if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1 - if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1 - if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2 - if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2 - - return false; - } - - // for collinear points p, q, r, check if point q lies on segment pr - function onSegment(p, q, r) { - return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y); - } - - function sign(num) { - return num > 0 ? 1 : num < 0 ? -1 : 0; - } - - // check if a polygon diagonal intersects any polygon segments - function intersectsPolygon(a, b) { - var p = a; - do { - if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i && - intersects(p, p.next, a, b)) return true; - p = p.next; - } while (p !== a); - - return false; - } - - // check if a polygon diagonal is locally inside the polygon - function locallyInside(a, b) { - return area(a.prev, a, a.next) < 0 ? - area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 : - area(a, b, a.prev) < 0 || area(a, a.next, b) < 0; - } - - // check if the middle point of a polygon diagonal is inside the polygon - function middleInside(a, b) { - var p = a, - inside = false, - px = (a.x + b.x) / 2, - py = (a.y + b.y) / 2; - do { - if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y && - (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) - inside = !inside; - p = p.next; - } while (p !== a); - - return inside; - } - - // link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two; - // if one belongs to the outer ring and another to a hole, it merges it into a single ring - function splitPolygon(a, b) { - var a2 = new Node(a.i, a.x, a.y), - b2 = new Node(b.i, b.x, b.y), - an = a.next, - bp = b.prev; - - a.next = b; - b.prev = a; - - a2.next = an; - an.prev = a2; - - b2.next = a2; - a2.prev = b2; - - bp.next = b2; - b2.prev = bp; - - return b2; - } - - // create a node and optionally link it with previous one (in a circular doubly linked list) - function insertNode(i, x, y, last) { - var p = new Node(i, x, y); - - if (!last) { - p.prev = p; - p.next = p; - - } else { - p.next = last.next; - p.prev = last; - last.next.prev = p; - last.next = p; - } - return p; - } - - function removeNode(p) { - p.next.prev = p.prev; - p.prev.next = p.next; - - if (p.prevZ) p.prevZ.nextZ = p.nextZ; - if (p.nextZ) p.nextZ.prevZ = p.prevZ; - } - - function Node(i, x, y) { - // vertex index in coordinates array - this.i = i; - - // vertex coordinates - this.x = x; - this.y = y; - - // previous and next vertex nodes in a polygon ring - this.prev = null; - this.next = null; - - // z-order curve value - this.z = 0; - - // previous and next nodes in z-order - this.prevZ = null; - this.nextZ = null; - - // indicates whether this is a steiner point - this.steiner = false; - } - - // return a percentage difference between the polygon area and its triangulation area; - // used to verify correctness of triangulation - earcut.deviation = function (data, holeIndices, dim, triangles) { - var hasHoles = holeIndices && holeIndices.length; - var outerLen = hasHoles ? holeIndices[0] * dim : data.length; - - var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim)); - if (hasHoles) { - for (var i = 0, len = holeIndices.length; i < len; i++) { - var start = holeIndices[i] * dim; - var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length; - polygonArea -= Math.abs(signedArea(data, start, end, dim)); - } - } - - var trianglesArea = 0; - for (i = 0; i < triangles.length; i += 3) { - var a = triangles[i] * dim; - var b = triangles[i + 1] * dim; - var c = triangles[i + 2] * dim; - trianglesArea += Math.abs( - (data[a] - data[c]) * (data[b + 1] - data[a + 1]) - - (data[a] - data[b]) * (data[c + 1] - data[a + 1])); - } - - return polygonArea === 0 && trianglesArea === 0 ? 0 : - Math.abs((trianglesArea - polygonArea) / polygonArea); - }; - - function signedArea(data, start, end, dim) { - var sum = 0; - for (var i = start, j = end - dim; i < end; i += dim) { - sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]); - j = i; - } - return sum; - } - - // turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts - earcut.flatten = function (data) { - var dim = data[0][0].length, - result = {vertices: [], holes: [], dimensions: dim}, - holeIndex = 0; - - for (var i = 0; i < data.length; i++) { - for (var j = 0; j < data[i].length; j++) { - for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]); - } - if (i > 0) { - holeIndex += data[i - 1].length; - result.holes.push(holeIndex); - } - } - return result; - }; - - /** - * Winding order defines the order of vertices for a triangle to be considered front-facing. - * - * @enum {Number} - */ - const WindingOrder = { - /** - * Vertices are in clockwise order. - * - * @type {Number} - * @constant - */ - CLOCKWISE: WebGLConstants.WebGLConstants.CW, - - /** - * Vertices are in counter-clockwise order. - * - * @type {Number} - * @constant - */ - COUNTER_CLOCKWISE: WebGLConstants.WebGLConstants.CCW, - }; - - /** - * @private - */ - WindingOrder.validate = function (windingOrder) { - return ( - windingOrder === WindingOrder.CLOCKWISE || - windingOrder === WindingOrder.COUNTER_CLOCKWISE - ); - }; - - var WindingOrder$1 = Object.freeze(WindingOrder); - - const scaleToGeodeticHeightN = new Matrix3.Cartesian3(); - const scaleToGeodeticHeightP = new Matrix3.Cartesian3(); - - /** - * @private - */ - const PolygonPipeline = {}; - - /** - * @exception {DeveloperError} At least three positions are required. - */ - PolygonPipeline.computeArea2D = function (positions) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("positions", positions); - Check.Check.typeOf.number.greaterThanOrEquals( - "positions.length", - positions.length, - 3 - ); - //>>includeEnd('debug'); - - const length = positions.length; - let area = 0.0; - - for (let i0 = length - 1, i1 = 0; i1 < length; i0 = i1++) { - const v0 = positions[i0]; - const v1 = positions[i1]; - - area += v0.x * v1.y - v1.x * v0.y; - } - - return area * 0.5; - }; - - /** - * @returns {WindingOrder} The winding order. - * - * @exception {DeveloperError} At least three positions are required. - */ - PolygonPipeline.computeWindingOrder2D = function (positions) { - const area = PolygonPipeline.computeArea2D(positions); - return area > 0.0 ? WindingOrder$1.COUNTER_CLOCKWISE : WindingOrder$1.CLOCKWISE; - }; - - /** - * Triangulate a polygon. - * - * @param {Cartesian2[]} positions Cartesian2 array containing the vertices of the polygon - * @param {Number[]} [holes] An array of the staring indices of the holes. - * @returns {Number[]} Index array representing triangles that fill the polygon - */ - PolygonPipeline.triangulate = function (positions, holes) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("positions", positions); - //>>includeEnd('debug'); - - const flattenedPositions = Matrix2.Cartesian2.packArray(positions); - return earcut$1.exports(flattenedPositions, holes, 2); - }; - - const subdivisionV0Scratch = new Matrix3.Cartesian3(); - const subdivisionV1Scratch = new Matrix3.Cartesian3(); - const subdivisionV2Scratch = new Matrix3.Cartesian3(); - const subdivisionS0Scratch = new Matrix3.Cartesian3(); - const subdivisionS1Scratch = new Matrix3.Cartesian3(); - const subdivisionS2Scratch = new Matrix3.Cartesian3(); - const subdivisionMidScratch = new Matrix3.Cartesian3(); - const subdivisionT0Scratch = new Matrix2.Cartesian2(); - const subdivisionT1Scratch = new Matrix2.Cartesian2(); - const subdivisionT2Scratch = new Matrix2.Cartesian2(); - const subdivisionTexcoordMidScratch = new Matrix2.Cartesian2(); - - /** - * Subdivides positions and raises points to the surface of the ellipsoid. - * - * @param {Ellipsoid} ellipsoid The ellipsoid the polygon in on. - * @param {Cartesian3[]} positions An array of {@link Cartesian3} positions of the polygon. - * @param {Number[]} indices An array of indices that determines the triangles in the polygon. - * @param {Cartesian2[]} texcoords An optional array of {@link Cartesian2} texture coordinates of the polygon. - * @param {Number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * - * @exception {DeveloperError} At least three indices are required. - * @exception {DeveloperError} The number of indices must be divisable by three. - * @exception {DeveloperError} Granularity must be greater than zero. - */ - PolygonPipeline.computeSubdivision = function ( - ellipsoid, - positions, - indices, - texcoords, - granularity - ) { - granularity = defaultValue.defaultValue(granularity, Math$1.CesiumMath.RADIANS_PER_DEGREE); - - const hasTexcoords = defaultValue.defined(texcoords); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("ellipsoid", ellipsoid); - Check.Check.defined("positions", positions); - Check.Check.defined("indices", indices); - Check.Check.typeOf.number.greaterThanOrEquals("indices.length", indices.length, 3); - Check.Check.typeOf.number.equals("indices.length % 3", "0", indices.length % 3, 0); - Check.Check.typeOf.number.greaterThan("granularity", granularity, 0.0); - //>>includeEnd('debug'); - - // triangles that need (or might need) to be subdivided. - const triangles = indices.slice(0); - - // New positions due to edge splits are appended to the positions list. - let i; - const length = positions.length; - const subdividedPositions = new Array(length * 3); - const subdividedTexcoords = new Array(length * 2); - let q = 0; - let p = 0; - for (i = 0; i < length; i++) { - const item = positions[i]; - subdividedPositions[q++] = item.x; - subdividedPositions[q++] = item.y; - subdividedPositions[q++] = item.z; - - if (hasTexcoords) { - const texcoordItem = texcoords[i]; - subdividedTexcoords[p++] = texcoordItem.x; - subdividedTexcoords[p++] = texcoordItem.y; - } - } - - const subdividedIndices = []; - - // Used to make sure shared edges are not split more than once. - const edges = {}; - - const radius = ellipsoid.maximumRadius; - const minDistance = Math$1.CesiumMath.chordLength(granularity, radius); - const minDistanceSqrd = minDistance * minDistance; - - while (triangles.length > 0) { - const i2 = triangles.pop(); - const i1 = triangles.pop(); - const i0 = triangles.pop(); - - const v0 = Matrix3.Cartesian3.fromArray( - subdividedPositions, - i0 * 3, - subdivisionV0Scratch - ); - const v1 = Matrix3.Cartesian3.fromArray( - subdividedPositions, - i1 * 3, - subdivisionV1Scratch - ); - const v2 = Matrix3.Cartesian3.fromArray( - subdividedPositions, - i2 * 3, - subdivisionV2Scratch - ); - - let t0, t1, t2; - if (hasTexcoords) { - t0 = Matrix2.Cartesian2.fromArray( - subdividedTexcoords, - i0 * 2, - subdivisionT0Scratch - ); - t1 = Matrix2.Cartesian2.fromArray( - subdividedTexcoords, - i1 * 2, - subdivisionT1Scratch - ); - t2 = Matrix2.Cartesian2.fromArray( - subdividedTexcoords, - i2 * 2, - subdivisionT2Scratch - ); - } - - const s0 = Matrix3.Cartesian3.multiplyByScalar( - Matrix3.Cartesian3.normalize(v0, subdivisionS0Scratch), - radius, - subdivisionS0Scratch - ); - const s1 = Matrix3.Cartesian3.multiplyByScalar( - Matrix3.Cartesian3.normalize(v1, subdivisionS1Scratch), - radius, - subdivisionS1Scratch - ); - const s2 = Matrix3.Cartesian3.multiplyByScalar( - Matrix3.Cartesian3.normalize(v2, subdivisionS2Scratch), - radius, - subdivisionS2Scratch - ); - - const g0 = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(s0, s1, subdivisionMidScratch) - ); - const g1 = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(s1, s2, subdivisionMidScratch) - ); - const g2 = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(s2, s0, subdivisionMidScratch) - ); - - const max = Math.max(g0, g1, g2); - let edge; - let mid; - let midTexcoord; - - // if the max length squared of a triangle edge is greater than the chord length of squared - // of the granularity, subdivide the triangle - if (max > minDistanceSqrd) { - if (g0 === max) { - edge = `${Math.min(i0, i1)} ${Math.max(i0, i1)}`; - - i = edges[edge]; - if (!defaultValue.defined(i)) { - mid = Matrix3.Cartesian3.add(v0, v1, subdivisionMidScratch); - Matrix3.Cartesian3.multiplyByScalar(mid, 0.5, mid); - subdividedPositions.push(mid.x, mid.y, mid.z); - i = subdividedPositions.length / 3 - 1; - edges[edge] = i; - - if (hasTexcoords) { - midTexcoord = Matrix2.Cartesian2.add(t0, t1, subdivisionTexcoordMidScratch); - Matrix2.Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord); - subdividedTexcoords.push(midTexcoord.x, midTexcoord.y); - } - } - - triangles.push(i0, i, i2); - triangles.push(i, i1, i2); - } else if (g1 === max) { - edge = `${Math.min(i1, i2)} ${Math.max(i1, i2)}`; - - i = edges[edge]; - if (!defaultValue.defined(i)) { - mid = Matrix3.Cartesian3.add(v1, v2, subdivisionMidScratch); - Matrix3.Cartesian3.multiplyByScalar(mid, 0.5, mid); - subdividedPositions.push(mid.x, mid.y, mid.z); - i = subdividedPositions.length / 3 - 1; - edges[edge] = i; - - if (hasTexcoords) { - midTexcoord = Matrix2.Cartesian2.add(t1, t2, subdivisionTexcoordMidScratch); - Matrix2.Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord); - subdividedTexcoords.push(midTexcoord.x, midTexcoord.y); - } - } - - triangles.push(i1, i, i0); - triangles.push(i, i2, i0); - } else if (g2 === max) { - edge = `${Math.min(i2, i0)} ${Math.max(i2, i0)}`; - - i = edges[edge]; - if (!defaultValue.defined(i)) { - mid = Matrix3.Cartesian3.add(v2, v0, subdivisionMidScratch); - Matrix3.Cartesian3.multiplyByScalar(mid, 0.5, mid); - subdividedPositions.push(mid.x, mid.y, mid.z); - i = subdividedPositions.length / 3 - 1; - edges[edge] = i; - - if (hasTexcoords) { - midTexcoord = Matrix2.Cartesian2.add(t2, t0, subdivisionTexcoordMidScratch); - Matrix2.Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord); - subdividedTexcoords.push(midTexcoord.x, midTexcoord.y); - } - } - - triangles.push(i2, i, i1); - triangles.push(i, i0, i1); - } - } else { - subdividedIndices.push(i0); - subdividedIndices.push(i1); - subdividedIndices.push(i2); - } - } - - const geometryOptions = { - attributes: { - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: subdividedPositions, - }), - }, - indices: subdividedIndices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }; - - if (hasTexcoords) { - geometryOptions.attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: subdividedTexcoords, - }); - } - - return new GeometryAttribute.Geometry(geometryOptions); - }; - - const subdivisionC0Scratch = new Matrix3.Cartographic(); - const subdivisionC1Scratch = new Matrix3.Cartographic(); - const subdivisionC2Scratch = new Matrix3.Cartographic(); - const subdivisionCartographicScratch = new Matrix3.Cartographic(); - - /** - * Subdivides positions on rhumb lines and raises points to the surface of the ellipsoid. - * - * @param {Ellipsoid} ellipsoid The ellipsoid the polygon in on. - * @param {Cartesian3[]} positions An array of {@link Cartesian3} positions of the polygon. - * @param {Number[]} indices An array of indices that determines the triangles in the polygon. - * @param {Cartesian2[]} texcoords An optional array of {@link Cartesian2} texture coordinates of the polygon. - * @param {Number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * - * @exception {DeveloperError} At least three indices are required. - * @exception {DeveloperError} The number of indices must be divisable by three. - * @exception {DeveloperError} Granularity must be greater than zero. - */ - PolygonPipeline.computeRhumbLineSubdivision = function ( - ellipsoid, - positions, - indices, - texcoords, - granularity - ) { - granularity = defaultValue.defaultValue(granularity, Math$1.CesiumMath.RADIANS_PER_DEGREE); - - const hasTexcoords = defaultValue.defined(texcoords); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("ellipsoid", ellipsoid); - Check.Check.defined("positions", positions); - Check.Check.defined("indices", indices); - Check.Check.typeOf.number.greaterThanOrEquals("indices.length", indices.length, 3); - Check.Check.typeOf.number.equals("indices.length % 3", "0", indices.length % 3, 0); - Check.Check.typeOf.number.greaterThan("granularity", granularity, 0.0); - //>>includeEnd('debug'); - - // triangles that need (or might need) to be subdivided. - const triangles = indices.slice(0); - - // New positions due to edge splits are appended to the positions list. - let i; - const length = positions.length; - const subdividedPositions = new Array(length * 3); - const subdividedTexcoords = new Array(length * 2); - let q = 0; - let p = 0; - for (i = 0; i < length; i++) { - const item = positions[i]; - subdividedPositions[q++] = item.x; - subdividedPositions[q++] = item.y; - subdividedPositions[q++] = item.z; - - if (hasTexcoords) { - const texcoordItem = texcoords[i]; - subdividedTexcoords[p++] = texcoordItem.x; - subdividedTexcoords[p++] = texcoordItem.y; - } - } - - const subdividedIndices = []; - - // Used to make sure shared edges are not split more than once. - const edges = {}; - - const radius = ellipsoid.maximumRadius; - const minDistance = Math$1.CesiumMath.chordLength(granularity, radius); - - const rhumb0 = new EllipsoidRhumbLine.EllipsoidRhumbLine(undefined, undefined, ellipsoid); - const rhumb1 = new EllipsoidRhumbLine.EllipsoidRhumbLine(undefined, undefined, ellipsoid); - const rhumb2 = new EllipsoidRhumbLine.EllipsoidRhumbLine(undefined, undefined, ellipsoid); - - while (triangles.length > 0) { - const i2 = triangles.pop(); - const i1 = triangles.pop(); - const i0 = triangles.pop(); - - const v0 = Matrix3.Cartesian3.fromArray( - subdividedPositions, - i0 * 3, - subdivisionV0Scratch - ); - const v1 = Matrix3.Cartesian3.fromArray( - subdividedPositions, - i1 * 3, - subdivisionV1Scratch - ); - const v2 = Matrix3.Cartesian3.fromArray( - subdividedPositions, - i2 * 3, - subdivisionV2Scratch - ); - - let t0, t1, t2; - if (hasTexcoords) { - t0 = Matrix2.Cartesian2.fromArray( - subdividedTexcoords, - i0 * 2, - subdivisionT0Scratch - ); - t1 = Matrix2.Cartesian2.fromArray( - subdividedTexcoords, - i1 * 2, - subdivisionT1Scratch - ); - t2 = Matrix2.Cartesian2.fromArray( - subdividedTexcoords, - i2 * 2, - subdivisionT2Scratch - ); - } - - const c0 = ellipsoid.cartesianToCartographic(v0, subdivisionC0Scratch); - const c1 = ellipsoid.cartesianToCartographic(v1, subdivisionC1Scratch); - const c2 = ellipsoid.cartesianToCartographic(v2, subdivisionC2Scratch); - - rhumb0.setEndPoints(c0, c1); - const g0 = rhumb0.surfaceDistance; - rhumb1.setEndPoints(c1, c2); - const g1 = rhumb1.surfaceDistance; - rhumb2.setEndPoints(c2, c0); - const g2 = rhumb2.surfaceDistance; - - const max = Math.max(g0, g1, g2); - let edge; - let mid; - let midHeight; - let midCartesian3; - let midTexcoord; - - // if the max length squared of a triangle edge is greater than granularity, subdivide the triangle - if (max > minDistance) { - if (g0 === max) { - edge = `${Math.min(i0, i1)} ${Math.max(i0, i1)}`; - - i = edges[edge]; - if (!defaultValue.defined(i)) { - mid = rhumb0.interpolateUsingFraction( - 0.5, - subdivisionCartographicScratch - ); - midHeight = (c0.height + c1.height) * 0.5; - midCartesian3 = Matrix3.Cartesian3.fromRadians( - mid.longitude, - mid.latitude, - midHeight, - ellipsoid, - subdivisionMidScratch - ); - subdividedPositions.push( - midCartesian3.x, - midCartesian3.y, - midCartesian3.z - ); - i = subdividedPositions.length / 3 - 1; - edges[edge] = i; - - if (hasTexcoords) { - midTexcoord = Matrix2.Cartesian2.add(t0, t1, subdivisionTexcoordMidScratch); - Matrix2.Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord); - subdividedTexcoords.push(midTexcoord.x, midTexcoord.y); - } - } - - triangles.push(i0, i, i2); - triangles.push(i, i1, i2); - } else if (g1 === max) { - edge = `${Math.min(i1, i2)} ${Math.max(i1, i2)}`; - - i = edges[edge]; - if (!defaultValue.defined(i)) { - mid = rhumb1.interpolateUsingFraction( - 0.5, - subdivisionCartographicScratch - ); - midHeight = (c1.height + c2.height) * 0.5; - midCartesian3 = Matrix3.Cartesian3.fromRadians( - mid.longitude, - mid.latitude, - midHeight, - ellipsoid, - subdivisionMidScratch - ); - subdividedPositions.push( - midCartesian3.x, - midCartesian3.y, - midCartesian3.z - ); - i = subdividedPositions.length / 3 - 1; - edges[edge] = i; - - if (hasTexcoords) { - midTexcoord = Matrix2.Cartesian2.add(t1, t2, subdivisionTexcoordMidScratch); - Matrix2.Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord); - subdividedTexcoords.push(midTexcoord.x, midTexcoord.y); - } - } - - triangles.push(i1, i, i0); - triangles.push(i, i2, i0); - } else if (g2 === max) { - edge = `${Math.min(i2, i0)} ${Math.max(i2, i0)}`; - - i = edges[edge]; - if (!defaultValue.defined(i)) { - mid = rhumb2.interpolateUsingFraction( - 0.5, - subdivisionCartographicScratch - ); - midHeight = (c2.height + c0.height) * 0.5; - midCartesian3 = Matrix3.Cartesian3.fromRadians( - mid.longitude, - mid.latitude, - midHeight, - ellipsoid, - subdivisionMidScratch - ); - subdividedPositions.push( - midCartesian3.x, - midCartesian3.y, - midCartesian3.z - ); - i = subdividedPositions.length / 3 - 1; - edges[edge] = i; - - if (hasTexcoords) { - midTexcoord = Matrix2.Cartesian2.add(t2, t0, subdivisionTexcoordMidScratch); - Matrix2.Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord); - subdividedTexcoords.push(midTexcoord.x, midTexcoord.y); - } - } - - triangles.push(i2, i, i1); - triangles.push(i, i0, i1); - } - } else { - subdividedIndices.push(i0); - subdividedIndices.push(i1); - subdividedIndices.push(i2); - } - } - - const geometryOptions = { - attributes: { - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: subdividedPositions, - }), - }, - indices: subdividedIndices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }; - - if (hasTexcoords) { - geometryOptions.attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: subdividedTexcoords, - }); - } - - return new GeometryAttribute.Geometry(geometryOptions); - }; - - /** - * Scales each position of a geometry's position attribute to a height, in place. - * - * @param {Number[]} positions The array of numbers representing the positions to be scaled - * @param {Number} [height=0.0] The desired height to add to the positions - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie. - * @param {Boolean} [scaleToSurface=true] true if the positions need to be scaled to the surface before the height is added. - * @returns {Number[]} The input array of positions, scaled to height - */ - PolygonPipeline.scaleToGeodeticHeight = function ( - positions, - height, - ellipsoid, - scaleToSurface - ) { - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - - let n = scaleToGeodeticHeightN; - let p = scaleToGeodeticHeightP; - - height = defaultValue.defaultValue(height, 0.0); - scaleToSurface = defaultValue.defaultValue(scaleToSurface, true); - - if (defaultValue.defined(positions)) { - const length = positions.length; - - for (let i = 0; i < length; i += 3) { - Matrix3.Cartesian3.fromArray(positions, i, p); - - if (scaleToSurface) { - p = ellipsoid.scaleToGeodeticSurface(p, p); - } - - if (height !== 0) { - n = ellipsoid.geodeticSurfaceNormal(p, n); - - Matrix3.Cartesian3.multiplyByScalar(n, height, n); - Matrix3.Cartesian3.add(p, n, p); - } - - positions[i] = p.x; - positions[i + 1] = p.y; - positions[i + 2] = p.z; - } - } - - return positions; - }; - var PolygonPipeline$1 = PolygonPipeline; - - exports.PolygonPipeline = PolygonPipeline$1; - exports.WindingOrder = WindingOrder$1; - -})); -//# sourceMappingURL=PolygonPipeline-313487c3.js.map diff --git a/debug/cesium/Workers/PolygonPipeline-313487c3.js.map b/debug/cesium/Workers/PolygonPipeline-313487c3.js.map deleted file mode 100644 index 7998139..0000000 --- a/debug/cesium/Workers/PolygonPipeline-313487c3.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PolygonPipeline-313487c3.js","sources":["../../../node_modules/earcut/src/earcut.js","../../../Source/Core/WindingOrder.js","../../../Source/Core/PolygonPipeline.js"],"sourcesContent":["'use strict';\n\nmodule.exports = earcut;\nmodule.exports.default = earcut;\n\nfunction earcut(data, holeIndices, dim) {\n\n dim = dim || 2;\n\n var hasHoles = holeIndices && holeIndices.length,\n outerLen = hasHoles ? holeIndices[0] * dim : data.length,\n outerNode = linkedList(data, 0, outerLen, dim, true),\n triangles = [];\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles;\n\n var minX, minY, maxX, maxY, x, y, invSize;\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim);\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0];\n minY = maxY = data[1];\n\n for (var i = dim; i < outerLen; i += dim) {\n x = data[i];\n y = data[i + 1];\n if (x < minX) minX = x;\n if (y < minY) minY = y;\n if (x > maxX) maxX = x;\n if (y > maxY) maxY = y;\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY);\n invSize = invSize !== 0 ? 32767 / invSize : 0;\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize, 0);\n\n return triangles;\n}\n\n// create a circular doubly linked list from polygon points in the specified winding order\nfunction linkedList(data, start, end, dim, clockwise) {\n var i, last;\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (i = start; i < end; i += dim) last = insertNode(i, data[i], data[i + 1], last);\n } else {\n for (i = end - dim; i >= start; i -= dim) last = insertNode(i, data[i], data[i + 1], last);\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last);\n last = last.next;\n }\n\n return last;\n}\n\n// eliminate colinear or duplicate points\nfunction filterPoints(start, end) {\n if (!start) return start;\n if (!end) end = start;\n\n var p = start,\n again;\n do {\n again = false;\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p);\n p = end = p.prev;\n if (p === p.next) break;\n again = true;\n\n } else {\n p = p.next;\n }\n } while (again || p !== end);\n\n return end;\n}\n\n// main ear slicing loop which triangulates a polygon (given as a linked list)\nfunction earcutLinked(ear, triangles, dim, minX, minY, invSize, pass) {\n if (!ear) return;\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize);\n\n var stop = ear,\n prev, next;\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev;\n next = ear.next;\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim | 0);\n triangles.push(ear.i / dim | 0);\n triangles.push(next.i / dim | 0);\n\n removeNode(ear);\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next;\n stop = next.next;\n\n continue;\n }\n\n ear = next;\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1);\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim);\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2);\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize);\n }\n\n break;\n }\n }\n}\n\n// check whether a polygon node forms a valid ear with adjacent nodes\nfunction isEar(ear) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n var p = c.next;\n while (p !== a) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false;\n p = p.next;\n }\n\n return true;\n}\n\nfunction isEarHashed(ear, minX, minY, invSize) {\n var a = ear.prev,\n b = ear,\n c = ear.next;\n\n if (area(a, b, c) >= 0) return false; // reflex, can't be an ear\n\n var ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;\n\n // triangle bbox; min & max are calculated like this for speed\n var x0 = ax < bx ? (ax < cx ? ax : cx) : (bx < cx ? bx : cx),\n y0 = ay < by ? (ay < cy ? ay : cy) : (by < cy ? by : cy),\n x1 = ax > bx ? (ax > cx ? ax : cx) : (bx > cx ? bx : cx),\n y1 = ay > by ? (ay > cy ? ay : cy) : (by > cy ? by : cy);\n\n // z-order range for the current triangle bbox;\n var minZ = zOrder(x0, y0, minX, minY, invSize),\n maxZ = zOrder(x1, y1, minX, minY, invSize);\n\n var p = ear.prevZ,\n n = ear.nextZ;\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, p.x, p.y) && area(p.prev, p, p.next) >= 0) return false;\n p = p.prevZ;\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&\n pointInTriangle(ax, ay, bx, by, cx, cy, n.x, n.y) && area(n.prev, n, n.next) >= 0) return false;\n n = n.nextZ;\n }\n\n return true;\n}\n\n// go through all polygon nodes and cure small local self-intersections\nfunction cureLocalIntersections(start, triangles, dim) {\n var p = start;\n do {\n var a = p.prev,\n b = p.next.next;\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n\n triangles.push(a.i / dim | 0);\n triangles.push(p.i / dim | 0);\n triangles.push(b.i / dim | 0);\n\n // remove two nodes involved\n removeNode(p);\n removeNode(p.next);\n\n p = start = b;\n }\n p = p.next;\n } while (p !== start);\n\n return filterPoints(p);\n}\n\n// try splitting polygon into two and triangulate them independently\nfunction splitEarcut(start, triangles, dim, minX, minY, invSize) {\n // look for a valid diagonal that divides the polygon into two\n var a = start;\n do {\n var b = a.next.next;\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n var c = splitPolygon(a, b);\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next);\n c = filterPoints(c, c.next);\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize, 0);\n earcutLinked(c, triangles, dim, minX, minY, invSize, 0);\n return;\n }\n b = b.next;\n }\n a = a.next;\n } while (a !== start);\n}\n\n// link every hole into the outer loop, producing a single-ring polygon without holes\nfunction eliminateHoles(data, holeIndices, outerNode, dim) {\n var queue = [],\n i, len, start, end, list;\n\n for (i = 0, len = holeIndices.length; i < len; i++) {\n start = holeIndices[i] * dim;\n end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n list = linkedList(data, start, end, dim, false);\n if (list === list.next) list.steiner = true;\n queue.push(getLeftmost(list));\n }\n\n queue.sort(compareX);\n\n // process holes from left to right\n for (i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode);\n }\n\n return outerNode;\n}\n\nfunction compareX(a, b) {\n return a.x - b.x;\n}\n\n// find a bridge between vertices that connects hole with an outer ring and and link it\nfunction eliminateHole(hole, outerNode) {\n var bridge = findHoleBridge(hole, outerNode);\n if (!bridge) {\n return outerNode;\n }\n\n var bridgeReverse = splitPolygon(bridge, hole);\n\n // filter collinear points around the cuts\n filterPoints(bridgeReverse, bridgeReverse.next);\n return filterPoints(bridge, bridge.next);\n}\n\n// David Eberly's algorithm for finding a bridge between hole and outer polygon\nfunction findHoleBridge(hole, outerNode) {\n var p = outerNode,\n hx = hole.x,\n hy = hole.y,\n qx = -Infinity,\n m;\n\n // find a segment intersected by a ray from the hole's leftmost point to the left;\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n var x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y);\n if (x <= hx && x > qx) {\n qx = x;\n m = p.x < p.next.x ? p : p.next;\n if (x === hx) return m; // hole touches outer segment; pick leftmost endpoint\n }\n }\n p = p.next;\n } while (p !== outerNode);\n\n if (!m) return null;\n\n // look for points inside the triangle of hole point, segment intersection and endpoint;\n // if there are no points found, we have a valid connection;\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n var stop = m,\n mx = m.x,\n my = m.y,\n tanMin = Infinity,\n tan;\n\n p = m;\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n\n tan = Math.abs(hy - p.y) / (hx - p.x); // tangential\n\n if (locallyInside(p, hole) &&\n (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p;\n tanMin = tan;\n }\n }\n\n p = p.next;\n } while (p !== stop);\n\n return m;\n}\n\n// whether sector in vertex m contains sector in vertex p in the same coordinates\nfunction sectorContainsSector(m, p) {\n return area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0;\n}\n\n// interlink polygon nodes in z-order\nfunction indexCurve(start, minX, minY, invSize) {\n var p = start;\n do {\n if (p.z === 0) p.z = zOrder(p.x, p.y, minX, minY, invSize);\n p.prevZ = p.prev;\n p.nextZ = p.next;\n p = p.next;\n } while (p !== start);\n\n p.prevZ.nextZ = null;\n p.prevZ = null;\n\n sortLinked(p);\n}\n\n// Simon Tatham's linked list merge sort algorithm\n// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nfunction sortLinked(list) {\n var i, p, q, e, tail, numMerges, pSize, qSize,\n inSize = 1;\n\n do {\n p = list;\n list = null;\n tail = null;\n numMerges = 0;\n\n while (p) {\n numMerges++;\n q = p;\n pSize = 0;\n for (i = 0; i < inSize; i++) {\n pSize++;\n q = q.nextZ;\n if (!q) break;\n }\n qSize = inSize;\n\n while (pSize > 0 || (qSize > 0 && q)) {\n\n if (pSize !== 0 && (qSize === 0 || !q || p.z <= q.z)) {\n e = p;\n p = p.nextZ;\n pSize--;\n } else {\n e = q;\n q = q.nextZ;\n qSize--;\n }\n\n if (tail) tail.nextZ = e;\n else list = e;\n\n e.prevZ = tail;\n tail = e;\n }\n\n p = q;\n }\n\n tail.nextZ = null;\n inSize *= 2;\n\n } while (numMerges > 1);\n\n return list;\n}\n\n// z-order of a point given coords and inverse of the longer side of data bbox\nfunction zOrder(x, y, minX, minY, invSize) {\n // coords are transformed into non-negative 15-bit integer range\n x = (x - minX) * invSize | 0;\n y = (y - minY) * invSize | 0;\n\n x = (x | (x << 8)) & 0x00FF00FF;\n x = (x | (x << 4)) & 0x0F0F0F0F;\n x = (x | (x << 2)) & 0x33333333;\n x = (x | (x << 1)) & 0x55555555;\n\n y = (y | (y << 8)) & 0x00FF00FF;\n y = (y | (y << 4)) & 0x0F0F0F0F;\n y = (y | (y << 2)) & 0x33333333;\n y = (y | (y << 1)) & 0x55555555;\n\n return x | (y << 1);\n}\n\n// find the leftmost node of a polygon ring\nfunction getLeftmost(start) {\n var p = start,\n leftmost = start;\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p;\n p = p.next;\n } while (p !== start);\n\n return leftmost;\n}\n\n// check if a point lies within a convex triangle\nfunction pointInTriangle(ax, ay, bx, by, cx, cy, px, py) {\n return (cx - px) * (ay - py) >= (ax - px) * (cy - py) &&\n (ax - px) * (by - py) >= (bx - px) * (ay - py) &&\n (bx - px) * (cy - py) >= (cx - px) * (by - py);\n}\n\n// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\nfunction isValidDiagonal(a, b) {\n return a.next.i !== b.i && a.prev.i !== b.i && !intersectsPolygon(a, b) && // dones't intersect other edges\n (locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0); // special zero-length case\n}\n\n// signed area of a triangle\nfunction area(p, q, r) {\n return (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y);\n}\n\n// check if two points are equal\nfunction equals(p1, p2) {\n return p1.x === p2.x && p1.y === p2.y;\n}\n\n// check if two segments intersect\nfunction intersects(p1, q1, p2, q2) {\n var o1 = sign(area(p1, q1, p2));\n var o2 = sign(area(p1, q1, q2));\n var o3 = sign(area(p2, q2, p1));\n var o4 = sign(area(p2, q2, q1));\n\n if (o1 !== o2 && o3 !== o4) return true; // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2\n\n return false;\n}\n\n// for collinear points p, q, r, check if point q lies on segment pr\nfunction onSegment(p, q, r) {\n return q.x <= Math.max(p.x, r.x) && q.x >= Math.min(p.x, r.x) && q.y <= Math.max(p.y, r.y) && q.y >= Math.min(p.y, r.y);\n}\n\nfunction sign(num) {\n return num > 0 ? 1 : num < 0 ? -1 : 0;\n}\n\n// check if a polygon diagonal intersects any polygon segments\nfunction intersectsPolygon(a, b) {\n var p = a;\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true;\n p = p.next;\n } while (p !== a);\n\n return false;\n}\n\n// check if a polygon diagonal is locally inside the polygon\nfunction locallyInside(a, b) {\n return area(a.prev, a, a.next) < 0 ?\n area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0 :\n area(a, b, a.prev) < 0 || area(a, a.next, b) < 0;\n}\n\n// check if the middle point of a polygon diagonal is inside the polygon\nfunction middleInside(a, b) {\n var p = a,\n inside = false,\n px = (a.x + b.x) / 2,\n py = (a.y + b.y) / 2;\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x))\n inside = !inside;\n p = p.next;\n } while (p !== a);\n\n return inside;\n}\n\n// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n// if one belongs to the outer ring and another to a hole, it merges it into a single ring\nfunction splitPolygon(a, b) {\n var a2 = new Node(a.i, a.x, a.y),\n b2 = new Node(b.i, b.x, b.y),\n an = a.next,\n bp = b.prev;\n\n a.next = b;\n b.prev = a;\n\n a2.next = an;\n an.prev = a2;\n\n b2.next = a2;\n a2.prev = b2;\n\n bp.next = b2;\n b2.prev = bp;\n\n return b2;\n}\n\n// create a node and optionally link it with previous one (in a circular doubly linked list)\nfunction insertNode(i, x, y, last) {\n var p = new Node(i, x, y);\n\n if (!last) {\n p.prev = p;\n p.next = p;\n\n } else {\n p.next = last.next;\n p.prev = last;\n last.next.prev = p;\n last.next = p;\n }\n return p;\n}\n\nfunction removeNode(p) {\n p.next.prev = p.prev;\n p.prev.next = p.next;\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ;\n if (p.nextZ) p.nextZ.prevZ = p.prevZ;\n}\n\nfunction Node(i, x, y) {\n // vertex index in coordinates array\n this.i = i;\n\n // vertex coordinates\n this.x = x;\n this.y = y;\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null;\n this.next = null;\n\n // z-order curve value\n this.z = 0;\n\n // previous and next nodes in z-order\n this.prevZ = null;\n this.nextZ = null;\n\n // indicates whether this is a steiner point\n this.steiner = false;\n}\n\n// return a percentage difference between the polygon area and its triangulation area;\n// used to verify correctness of triangulation\nearcut.deviation = function (data, holeIndices, dim, triangles) {\n var hasHoles = holeIndices && holeIndices.length;\n var outerLen = hasHoles ? holeIndices[0] * dim : data.length;\n\n var polygonArea = Math.abs(signedArea(data, 0, outerLen, dim));\n if (hasHoles) {\n for (var i = 0, len = holeIndices.length; i < len; i++) {\n var start = holeIndices[i] * dim;\n var end = i < len - 1 ? holeIndices[i + 1] * dim : data.length;\n polygonArea -= Math.abs(signedArea(data, start, end, dim));\n }\n }\n\n var trianglesArea = 0;\n for (i = 0; i < triangles.length; i += 3) {\n var a = triangles[i] * dim;\n var b = triangles[i + 1] * dim;\n var c = triangles[i + 2] * dim;\n trianglesArea += Math.abs(\n (data[a] - data[c]) * (data[b + 1] - data[a + 1]) -\n (data[a] - data[b]) * (data[c + 1] - data[a + 1]));\n }\n\n return polygonArea === 0 && trianglesArea === 0 ? 0 :\n Math.abs((trianglesArea - polygonArea) / polygonArea);\n};\n\nfunction signedArea(data, start, end, dim) {\n var sum = 0;\n for (var i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1]);\n j = i;\n }\n return sum;\n}\n\n// turn a polygon in a multi-dimensional array form (e.g. as in GeoJSON) into a form Earcut accepts\nearcut.flatten = function (data) {\n var dim = data[0][0].length,\n result = {vertices: [], holes: [], dimensions: dim},\n holeIndex = 0;\n\n for (var i = 0; i < data.length; i++) {\n for (var j = 0; j < data[i].length; j++) {\n for (var d = 0; d < dim; d++) result.vertices.push(data[i][j][d]);\n }\n if (i > 0) {\n holeIndex += data[i - 1].length;\n result.holes.push(holeIndex);\n }\n }\n return result;\n};\n","import WebGLConstants from \"./WebGLConstants.js\";\r\n\r\n/**\r\n * Winding order defines the order of vertices for a triangle to be considered front-facing.\r\n *\r\n * @enum {Number}\r\n */\r\nconst WindingOrder = {\r\n /**\r\n * Vertices are in clockwise order.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n CLOCKWISE: WebGLConstants.CW,\r\n\r\n /**\r\n * Vertices are in counter-clockwise order.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n COUNTER_CLOCKWISE: WebGLConstants.CCW,\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nWindingOrder.validate = function (windingOrder) {\r\n return (\r\n windingOrder === WindingOrder.CLOCKWISE ||\r\n windingOrder === WindingOrder.COUNTER_CLOCKWISE\r\n );\r\n};\r\n\r\nexport default Object.freeze(WindingOrder);\r\n","import earcut from \"earcut\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport WindingOrder from \"./WindingOrder.js\";\r\n\r\nconst scaleToGeodeticHeightN = new Cartesian3();\r\nconst scaleToGeodeticHeightP = new Cartesian3();\r\n\r\n/**\r\n * @private\r\n */\r\nconst PolygonPipeline = {};\r\n\r\n/**\r\n * @exception {DeveloperError} At least three positions are required.\r\n */\r\nPolygonPipeline.computeArea2D = function (positions) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"positions\", positions);\r\n Check.typeOf.number.greaterThanOrEquals(\r\n \"positions.length\",\r\n positions.length,\r\n 3\r\n );\r\n //>>includeEnd('debug');\r\n\r\n const length = positions.length;\r\n let area = 0.0;\r\n\r\n for (let i0 = length - 1, i1 = 0; i1 < length; i0 = i1++) {\r\n const v0 = positions[i0];\r\n const v1 = positions[i1];\r\n\r\n area += v0.x * v1.y - v1.x * v0.y;\r\n }\r\n\r\n return area * 0.5;\r\n};\r\n\r\n/**\r\n * @returns {WindingOrder} The winding order.\r\n *\r\n * @exception {DeveloperError} At least three positions are required.\r\n */\r\nPolygonPipeline.computeWindingOrder2D = function (positions) {\r\n const area = PolygonPipeline.computeArea2D(positions);\r\n return area > 0.0 ? WindingOrder.COUNTER_CLOCKWISE : WindingOrder.CLOCKWISE;\r\n};\r\n\r\n/**\r\n * Triangulate a polygon.\r\n *\r\n * @param {Cartesian2[]} positions Cartesian2 array containing the vertices of the polygon\r\n * @param {Number[]} [holes] An array of the staring indices of the holes.\r\n * @returns {Number[]} Index array representing triangles that fill the polygon\r\n */\r\nPolygonPipeline.triangulate = function (positions, holes) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"positions\", positions);\r\n //>>includeEnd('debug');\r\n\r\n const flattenedPositions = Cartesian2.packArray(positions);\r\n return earcut(flattenedPositions, holes, 2);\r\n};\r\n\r\nconst subdivisionV0Scratch = new Cartesian3();\r\nconst subdivisionV1Scratch = new Cartesian3();\r\nconst subdivisionV2Scratch = new Cartesian3();\r\nconst subdivisionS0Scratch = new Cartesian3();\r\nconst subdivisionS1Scratch = new Cartesian3();\r\nconst subdivisionS2Scratch = new Cartesian3();\r\nconst subdivisionMidScratch = new Cartesian3();\r\nconst subdivisionT0Scratch = new Cartesian2();\r\nconst subdivisionT1Scratch = new Cartesian2();\r\nconst subdivisionT2Scratch = new Cartesian2();\r\nconst subdivisionTexcoordMidScratch = new Cartesian2();\r\n\r\n/**\r\n * Subdivides positions and raises points to the surface of the ellipsoid.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid the polygon in on.\r\n * @param {Cartesian3[]} positions An array of {@link Cartesian3} positions of the polygon.\r\n * @param {Number[]} indices An array of indices that determines the triangles in the polygon.\r\n * @param {Cartesian2[]} texcoords An optional array of {@link Cartesian2} texture coordinates of the polygon.\r\n * @param {Number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n *\r\n * @exception {DeveloperError} At least three indices are required.\r\n * @exception {DeveloperError} The number of indices must be divisable by three.\r\n * @exception {DeveloperError} Granularity must be greater than zero.\r\n */\r\nPolygonPipeline.computeSubdivision = function (\r\n ellipsoid,\r\n positions,\r\n indices,\r\n texcoords,\r\n granularity\r\n) {\r\n granularity = defaultValue(granularity, CesiumMath.RADIANS_PER_DEGREE);\r\n\r\n const hasTexcoords = defined(texcoords);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\r\n Check.defined(\"positions\", positions);\r\n Check.defined(\"indices\", indices);\r\n Check.typeOf.number.greaterThanOrEquals(\"indices.length\", indices.length, 3);\r\n Check.typeOf.number.equals(\"indices.length % 3\", \"0\", indices.length % 3, 0);\r\n Check.typeOf.number.greaterThan(\"granularity\", granularity, 0.0);\r\n //>>includeEnd('debug');\r\n\r\n // triangles that need (or might need) to be subdivided.\r\n const triangles = indices.slice(0);\r\n\r\n // New positions due to edge splits are appended to the positions list.\r\n let i;\r\n const length = positions.length;\r\n const subdividedPositions = new Array(length * 3);\r\n const subdividedTexcoords = new Array(length * 2);\r\n let q = 0;\r\n let p = 0;\r\n for (i = 0; i < length; i++) {\r\n const item = positions[i];\r\n subdividedPositions[q++] = item.x;\r\n subdividedPositions[q++] = item.y;\r\n subdividedPositions[q++] = item.z;\r\n\r\n if (hasTexcoords) {\r\n const texcoordItem = texcoords[i];\r\n subdividedTexcoords[p++] = texcoordItem.x;\r\n subdividedTexcoords[p++] = texcoordItem.y;\r\n }\r\n }\r\n\r\n const subdividedIndices = [];\r\n\r\n // Used to make sure shared edges are not split more than once.\r\n const edges = {};\r\n\r\n const radius = ellipsoid.maximumRadius;\r\n const minDistance = CesiumMath.chordLength(granularity, radius);\r\n const minDistanceSqrd = minDistance * minDistance;\r\n\r\n while (triangles.length > 0) {\r\n const i2 = triangles.pop();\r\n const i1 = triangles.pop();\r\n const i0 = triangles.pop();\r\n\r\n const v0 = Cartesian3.fromArray(\r\n subdividedPositions,\r\n i0 * 3,\r\n subdivisionV0Scratch\r\n );\r\n const v1 = Cartesian3.fromArray(\r\n subdividedPositions,\r\n i1 * 3,\r\n subdivisionV1Scratch\r\n );\r\n const v2 = Cartesian3.fromArray(\r\n subdividedPositions,\r\n i2 * 3,\r\n subdivisionV2Scratch\r\n );\r\n\r\n let t0, t1, t2;\r\n if (hasTexcoords) {\r\n t0 = Cartesian2.fromArray(\r\n subdividedTexcoords,\r\n i0 * 2,\r\n subdivisionT0Scratch\r\n );\r\n t1 = Cartesian2.fromArray(\r\n subdividedTexcoords,\r\n i1 * 2,\r\n subdivisionT1Scratch\r\n );\r\n t2 = Cartesian2.fromArray(\r\n subdividedTexcoords,\r\n i2 * 2,\r\n subdivisionT2Scratch\r\n );\r\n }\r\n\r\n const s0 = Cartesian3.multiplyByScalar(\r\n Cartesian3.normalize(v0, subdivisionS0Scratch),\r\n radius,\r\n subdivisionS0Scratch\r\n );\r\n const s1 = Cartesian3.multiplyByScalar(\r\n Cartesian3.normalize(v1, subdivisionS1Scratch),\r\n radius,\r\n subdivisionS1Scratch\r\n );\r\n const s2 = Cartesian3.multiplyByScalar(\r\n Cartesian3.normalize(v2, subdivisionS2Scratch),\r\n radius,\r\n subdivisionS2Scratch\r\n );\r\n\r\n const g0 = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(s0, s1, subdivisionMidScratch)\r\n );\r\n const g1 = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(s1, s2, subdivisionMidScratch)\r\n );\r\n const g2 = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(s2, s0, subdivisionMidScratch)\r\n );\r\n\r\n const max = Math.max(g0, g1, g2);\r\n let edge;\r\n let mid;\r\n let midTexcoord;\r\n\r\n // if the max length squared of a triangle edge is greater than the chord length of squared\r\n // of the granularity, subdivide the triangle\r\n if (max > minDistanceSqrd) {\r\n if (g0 === max) {\r\n edge = `${Math.min(i0, i1)} ${Math.max(i0, i1)}`;\r\n\r\n i = edges[edge];\r\n if (!defined(i)) {\r\n mid = Cartesian3.add(v0, v1, subdivisionMidScratch);\r\n Cartesian3.multiplyByScalar(mid, 0.5, mid);\r\n subdividedPositions.push(mid.x, mid.y, mid.z);\r\n i = subdividedPositions.length / 3 - 1;\r\n edges[edge] = i;\r\n\r\n if (hasTexcoords) {\r\n midTexcoord = Cartesian2.add(t0, t1, subdivisionTexcoordMidScratch);\r\n Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\r\n subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\r\n }\r\n }\r\n\r\n triangles.push(i0, i, i2);\r\n triangles.push(i, i1, i2);\r\n } else if (g1 === max) {\r\n edge = `${Math.min(i1, i2)} ${Math.max(i1, i2)}`;\r\n\r\n i = edges[edge];\r\n if (!defined(i)) {\r\n mid = Cartesian3.add(v1, v2, subdivisionMidScratch);\r\n Cartesian3.multiplyByScalar(mid, 0.5, mid);\r\n subdividedPositions.push(mid.x, mid.y, mid.z);\r\n i = subdividedPositions.length / 3 - 1;\r\n edges[edge] = i;\r\n\r\n if (hasTexcoords) {\r\n midTexcoord = Cartesian2.add(t1, t2, subdivisionTexcoordMidScratch);\r\n Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\r\n subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\r\n }\r\n }\r\n\r\n triangles.push(i1, i, i0);\r\n triangles.push(i, i2, i0);\r\n } else if (g2 === max) {\r\n edge = `${Math.min(i2, i0)} ${Math.max(i2, i0)}`;\r\n\r\n i = edges[edge];\r\n if (!defined(i)) {\r\n mid = Cartesian3.add(v2, v0, subdivisionMidScratch);\r\n Cartesian3.multiplyByScalar(mid, 0.5, mid);\r\n subdividedPositions.push(mid.x, mid.y, mid.z);\r\n i = subdividedPositions.length / 3 - 1;\r\n edges[edge] = i;\r\n\r\n if (hasTexcoords) {\r\n midTexcoord = Cartesian2.add(t2, t0, subdivisionTexcoordMidScratch);\r\n Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\r\n subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\r\n }\r\n }\r\n\r\n triangles.push(i2, i, i1);\r\n triangles.push(i, i0, i1);\r\n }\r\n } else {\r\n subdividedIndices.push(i0);\r\n subdividedIndices.push(i1);\r\n subdividedIndices.push(i2);\r\n }\r\n }\r\n\r\n const geometryOptions = {\r\n attributes: {\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: subdividedPositions,\r\n }),\r\n },\r\n indices: subdividedIndices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n };\r\n\r\n if (hasTexcoords) {\r\n geometryOptions.attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: subdividedTexcoords,\r\n });\r\n }\r\n\r\n return new Geometry(geometryOptions);\r\n};\r\n\r\nconst subdivisionC0Scratch = new Cartographic();\r\nconst subdivisionC1Scratch = new Cartographic();\r\nconst subdivisionC2Scratch = new Cartographic();\r\nconst subdivisionCartographicScratch = new Cartographic();\r\n\r\n/**\r\n * Subdivides positions on rhumb lines and raises points to the surface of the ellipsoid.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid the polygon in on.\r\n * @param {Cartesian3[]} positions An array of {@link Cartesian3} positions of the polygon.\r\n * @param {Number[]} indices An array of indices that determines the triangles in the polygon.\r\n * @param {Cartesian2[]} texcoords An optional array of {@link Cartesian2} texture coordinates of the polygon.\r\n * @param {Number} [granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n *\r\n * @exception {DeveloperError} At least three indices are required.\r\n * @exception {DeveloperError} The number of indices must be divisable by three.\r\n * @exception {DeveloperError} Granularity must be greater than zero.\r\n */\r\nPolygonPipeline.computeRhumbLineSubdivision = function (\r\n ellipsoid,\r\n positions,\r\n indices,\r\n texcoords,\r\n granularity\r\n) {\r\n granularity = defaultValue(granularity, CesiumMath.RADIANS_PER_DEGREE);\r\n\r\n const hasTexcoords = defined(texcoords);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\r\n Check.defined(\"positions\", positions);\r\n Check.defined(\"indices\", indices);\r\n Check.typeOf.number.greaterThanOrEquals(\"indices.length\", indices.length, 3);\r\n Check.typeOf.number.equals(\"indices.length % 3\", \"0\", indices.length % 3, 0);\r\n Check.typeOf.number.greaterThan(\"granularity\", granularity, 0.0);\r\n //>>includeEnd('debug');\r\n\r\n // triangles that need (or might need) to be subdivided.\r\n const triangles = indices.slice(0);\r\n\r\n // New positions due to edge splits are appended to the positions list.\r\n let i;\r\n const length = positions.length;\r\n const subdividedPositions = new Array(length * 3);\r\n const subdividedTexcoords = new Array(length * 2);\r\n let q = 0;\r\n let p = 0;\r\n for (i = 0; i < length; i++) {\r\n const item = positions[i];\r\n subdividedPositions[q++] = item.x;\r\n subdividedPositions[q++] = item.y;\r\n subdividedPositions[q++] = item.z;\r\n\r\n if (hasTexcoords) {\r\n const texcoordItem = texcoords[i];\r\n subdividedTexcoords[p++] = texcoordItem.x;\r\n subdividedTexcoords[p++] = texcoordItem.y;\r\n }\r\n }\r\n\r\n const subdividedIndices = [];\r\n\r\n // Used to make sure shared edges are not split more than once.\r\n const edges = {};\r\n\r\n const radius = ellipsoid.maximumRadius;\r\n const minDistance = CesiumMath.chordLength(granularity, radius);\r\n\r\n const rhumb0 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\r\n const rhumb1 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\r\n const rhumb2 = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\r\n\r\n while (triangles.length > 0) {\r\n const i2 = triangles.pop();\r\n const i1 = triangles.pop();\r\n const i0 = triangles.pop();\r\n\r\n const v0 = Cartesian3.fromArray(\r\n subdividedPositions,\r\n i0 * 3,\r\n subdivisionV0Scratch\r\n );\r\n const v1 = Cartesian3.fromArray(\r\n subdividedPositions,\r\n i1 * 3,\r\n subdivisionV1Scratch\r\n );\r\n const v2 = Cartesian3.fromArray(\r\n subdividedPositions,\r\n i2 * 3,\r\n subdivisionV2Scratch\r\n );\r\n\r\n let t0, t1, t2;\r\n if (hasTexcoords) {\r\n t0 = Cartesian2.fromArray(\r\n subdividedTexcoords,\r\n i0 * 2,\r\n subdivisionT0Scratch\r\n );\r\n t1 = Cartesian2.fromArray(\r\n subdividedTexcoords,\r\n i1 * 2,\r\n subdivisionT1Scratch\r\n );\r\n t2 = Cartesian2.fromArray(\r\n subdividedTexcoords,\r\n i2 * 2,\r\n subdivisionT2Scratch\r\n );\r\n }\r\n\r\n const c0 = ellipsoid.cartesianToCartographic(v0, subdivisionC0Scratch);\r\n const c1 = ellipsoid.cartesianToCartographic(v1, subdivisionC1Scratch);\r\n const c2 = ellipsoid.cartesianToCartographic(v2, subdivisionC2Scratch);\r\n\r\n rhumb0.setEndPoints(c0, c1);\r\n const g0 = rhumb0.surfaceDistance;\r\n rhumb1.setEndPoints(c1, c2);\r\n const g1 = rhumb1.surfaceDistance;\r\n rhumb2.setEndPoints(c2, c0);\r\n const g2 = rhumb2.surfaceDistance;\r\n\r\n const max = Math.max(g0, g1, g2);\r\n let edge;\r\n let mid;\r\n let midHeight;\r\n let midCartesian3;\r\n let midTexcoord;\r\n\r\n // if the max length squared of a triangle edge is greater than granularity, subdivide the triangle\r\n if (max > minDistance) {\r\n if (g0 === max) {\r\n edge = `${Math.min(i0, i1)} ${Math.max(i0, i1)}`;\r\n\r\n i = edges[edge];\r\n if (!defined(i)) {\r\n mid = rhumb0.interpolateUsingFraction(\r\n 0.5,\r\n subdivisionCartographicScratch\r\n );\r\n midHeight = (c0.height + c1.height) * 0.5;\r\n midCartesian3 = Cartesian3.fromRadians(\r\n mid.longitude,\r\n mid.latitude,\r\n midHeight,\r\n ellipsoid,\r\n subdivisionMidScratch\r\n );\r\n subdividedPositions.push(\r\n midCartesian3.x,\r\n midCartesian3.y,\r\n midCartesian3.z\r\n );\r\n i = subdividedPositions.length / 3 - 1;\r\n edges[edge] = i;\r\n\r\n if (hasTexcoords) {\r\n midTexcoord = Cartesian2.add(t0, t1, subdivisionTexcoordMidScratch);\r\n Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\r\n subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\r\n }\r\n }\r\n\r\n triangles.push(i0, i, i2);\r\n triangles.push(i, i1, i2);\r\n } else if (g1 === max) {\r\n edge = `${Math.min(i1, i2)} ${Math.max(i1, i2)}`;\r\n\r\n i = edges[edge];\r\n if (!defined(i)) {\r\n mid = rhumb1.interpolateUsingFraction(\r\n 0.5,\r\n subdivisionCartographicScratch\r\n );\r\n midHeight = (c1.height + c2.height) * 0.5;\r\n midCartesian3 = Cartesian3.fromRadians(\r\n mid.longitude,\r\n mid.latitude,\r\n midHeight,\r\n ellipsoid,\r\n subdivisionMidScratch\r\n );\r\n subdividedPositions.push(\r\n midCartesian3.x,\r\n midCartesian3.y,\r\n midCartesian3.z\r\n );\r\n i = subdividedPositions.length / 3 - 1;\r\n edges[edge] = i;\r\n\r\n if (hasTexcoords) {\r\n midTexcoord = Cartesian2.add(t1, t2, subdivisionTexcoordMidScratch);\r\n Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\r\n subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\r\n }\r\n }\r\n\r\n triangles.push(i1, i, i0);\r\n triangles.push(i, i2, i0);\r\n } else if (g2 === max) {\r\n edge = `${Math.min(i2, i0)} ${Math.max(i2, i0)}`;\r\n\r\n i = edges[edge];\r\n if (!defined(i)) {\r\n mid = rhumb2.interpolateUsingFraction(\r\n 0.5,\r\n subdivisionCartographicScratch\r\n );\r\n midHeight = (c2.height + c0.height) * 0.5;\r\n midCartesian3 = Cartesian3.fromRadians(\r\n mid.longitude,\r\n mid.latitude,\r\n midHeight,\r\n ellipsoid,\r\n subdivisionMidScratch\r\n );\r\n subdividedPositions.push(\r\n midCartesian3.x,\r\n midCartesian3.y,\r\n midCartesian3.z\r\n );\r\n i = subdividedPositions.length / 3 - 1;\r\n edges[edge] = i;\r\n\r\n if (hasTexcoords) {\r\n midTexcoord = Cartesian2.add(t2, t0, subdivisionTexcoordMidScratch);\r\n Cartesian2.multiplyByScalar(midTexcoord, 0.5, midTexcoord);\r\n subdividedTexcoords.push(midTexcoord.x, midTexcoord.y);\r\n }\r\n }\r\n\r\n triangles.push(i2, i, i1);\r\n triangles.push(i, i0, i1);\r\n }\r\n } else {\r\n subdividedIndices.push(i0);\r\n subdividedIndices.push(i1);\r\n subdividedIndices.push(i2);\r\n }\r\n }\r\n\r\n const geometryOptions = {\r\n attributes: {\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: subdividedPositions,\r\n }),\r\n },\r\n indices: subdividedIndices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n };\r\n\r\n if (hasTexcoords) {\r\n geometryOptions.attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: subdividedTexcoords,\r\n });\r\n }\r\n\r\n return new Geometry(geometryOptions);\r\n};\r\n\r\n/**\r\n * Scales each position of a geometry's position attribute to a height, in place.\r\n *\r\n * @param {Number[]} positions The array of numbers representing the positions to be scaled\r\n * @param {Number} [height=0.0] The desired height to add to the positions\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\r\n * @param {Boolean} [scaleToSurface=true] true if the positions need to be scaled to the surface before the height is added.\r\n * @returns {Number[]} The input array of positions, scaled to height\r\n */\r\nPolygonPipeline.scaleToGeodeticHeight = function (\r\n positions,\r\n height,\r\n ellipsoid,\r\n scaleToSurface\r\n) {\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n\r\n let n = scaleToGeodeticHeightN;\r\n let p = scaleToGeodeticHeightP;\r\n\r\n height = defaultValue(height, 0.0);\r\n scaleToSurface = defaultValue(scaleToSurface, true);\r\n\r\n if (defined(positions)) {\r\n const length = positions.length;\r\n\r\n for (let i = 0; i < length; i += 3) {\r\n Cartesian3.fromArray(positions, i, p);\r\n\r\n if (scaleToSurface) {\r\n p = ellipsoid.scaleToGeodeticSurface(p, p);\r\n }\r\n\r\n if (height !== 0) {\r\n n = ellipsoid.geodeticSurfaceNormal(p, n);\r\n\r\n Cartesian3.multiplyByScalar(n, height, n);\r\n Cartesian3.add(p, n, p);\r\n }\r\n\r\n positions[i] = p.x;\r\n positions[i + 1] = p.y;\r\n positions[i + 2] = p.z;\r\n }\r\n }\r\n\r\n return positions;\r\n};\r\nexport default PolygonPipeline;\r\n"],"names":["earcutModule","earcut_1","WebGLConstants","Cartesian3","Check","WindingOrder","Cartesian2","earcut","defaultValue","CesiumMath","defined","GeometryAttribute","ComponentDatatype","PrimitiveType","Geometry","Cartographic","EllipsoidRhumbLine","Ellipsoid"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/PolylinePipeline-3c021236.js b/debug/cesium/Workers/PolylinePipeline-3c021236.js deleted file mode 100644 index d5a5a92..0000000 --- a/debug/cesium/Workers/PolylinePipeline-3c021236.js +++ /dev/null @@ -1,599 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './defaultValue-0ab18f7d', './Check-d10e5f2e', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b', './IntersectionTests-2c7928de', './Math-9be8b918', './Matrix2-036c77dd', './Plane-c9f1487d'], (function (exports, Matrix3, defaultValue, Check, EllipsoidGeodesic, EllipsoidRhumbLine, IntersectionTests, Math$1, Matrix2, Plane) { 'use strict'; - - /** - * @private - */ - const PolylinePipeline = {}; - - PolylinePipeline.numberOfPoints = function (p0, p1, minDistance) { - const distance = Matrix3.Cartesian3.distance(p0, p1); - return Math.ceil(distance / minDistance); - }; - - PolylinePipeline.numberOfPointsRhumbLine = function (p0, p1, granularity) { - const radiansDistanceSquared = - Math.pow(p0.longitude - p1.longitude, 2) + - Math.pow(p0.latitude - p1.latitude, 2); - - return Math.max( - 1, - Math.ceil(Math.sqrt(radiansDistanceSquared / (granularity * granularity))) - ); - }; - - const cartoScratch = new Matrix3.Cartographic(); - PolylinePipeline.extractHeights = function (positions, ellipsoid) { - const length = positions.length; - const heights = new Array(length); - for (let i = 0; i < length; i++) { - const p = positions[i]; - heights[i] = ellipsoid.cartesianToCartographic(p, cartoScratch).height; - } - return heights; - }; - - const wrapLongitudeInversMatrix = new Matrix2.Matrix4(); - const wrapLongitudeOrigin = new Matrix3.Cartesian3(); - const wrapLongitudeXZNormal = new Matrix3.Cartesian3(); - const wrapLongitudeXZPlane = new Plane.Plane(Matrix3.Cartesian3.UNIT_X, 0.0); - const wrapLongitudeYZNormal = new Matrix3.Cartesian3(); - const wrapLongitudeYZPlane = new Plane.Plane(Matrix3.Cartesian3.UNIT_X, 0.0); - const wrapLongitudeIntersection = new Matrix3.Cartesian3(); - const wrapLongitudeOffset = new Matrix3.Cartesian3(); - - const subdivideHeightsScratchArray = []; - - function subdivideHeights(numPoints, h0, h1) { - const heights = subdivideHeightsScratchArray; - heights.length = numPoints; - - let i; - if (h0 === h1) { - for (i = 0; i < numPoints; i++) { - heights[i] = h0; - } - return heights; - } - - const dHeight = h1 - h0; - const heightPerVertex = dHeight / numPoints; - - for (i = 0; i < numPoints; i++) { - const h = h0 + i * heightPerVertex; - heights[i] = h; - } - - return heights; - } - - const carto1 = new Matrix3.Cartographic(); - const carto2 = new Matrix3.Cartographic(); - const cartesian = new Matrix3.Cartesian3(); - const scaleFirst = new Matrix3.Cartesian3(); - const scaleLast = new Matrix3.Cartesian3(); - const ellipsoidGeodesic = new EllipsoidGeodesic.EllipsoidGeodesic(); - let ellipsoidRhumb = new EllipsoidRhumbLine.EllipsoidRhumbLine(); - - //Returns subdivided line scaled to ellipsoid surface starting at p1 and ending at p2. - //Result includes p1, but not include p2. This function is called for a sequence of line segments, - //and this prevents duplication of end point. - function generateCartesianArc( - p0, - p1, - minDistance, - ellipsoid, - h0, - h1, - array, - offset - ) { - const first = ellipsoid.scaleToGeodeticSurface(p0, scaleFirst); - const last = ellipsoid.scaleToGeodeticSurface(p1, scaleLast); - const numPoints = PolylinePipeline.numberOfPoints(p0, p1, minDistance); - const start = ellipsoid.cartesianToCartographic(first, carto1); - const end = ellipsoid.cartesianToCartographic(last, carto2); - const heights = subdivideHeights(numPoints, h0, h1); - - ellipsoidGeodesic.setEndPoints(start, end); - const surfaceDistanceBetweenPoints = - ellipsoidGeodesic.surfaceDistance / numPoints; - - let index = offset; - start.height = h0; - let cart = ellipsoid.cartographicToCartesian(start, cartesian); - Matrix3.Cartesian3.pack(cart, array, index); - index += 3; - - for (let i = 1; i < numPoints; i++) { - const carto = ellipsoidGeodesic.interpolateUsingSurfaceDistance( - i * surfaceDistanceBetweenPoints, - carto2 - ); - carto.height = heights[i]; - cart = ellipsoid.cartographicToCartesian(carto, cartesian); - Matrix3.Cartesian3.pack(cart, array, index); - index += 3; - } - - return index; - } - - //Returns subdivided line scaled to ellipsoid surface starting at p1 and ending at p2. - //Result includes p1, but not include p2. This function is called for a sequence of line segments, - //and this prevents duplication of end point. - function generateCartesianRhumbArc( - p0, - p1, - granularity, - ellipsoid, - h0, - h1, - array, - offset - ) { - const start = ellipsoid.cartesianToCartographic(p0, carto1); - const end = ellipsoid.cartesianToCartographic(p1, carto2); - const numPoints = PolylinePipeline.numberOfPointsRhumbLine( - start, - end, - granularity - ); - start.height = 0.0; - end.height = 0.0; - const heights = subdivideHeights(numPoints, h0, h1); - - if (!ellipsoidRhumb.ellipsoid.equals(ellipsoid)) { - ellipsoidRhumb = new EllipsoidRhumbLine.EllipsoidRhumbLine(undefined, undefined, ellipsoid); - } - ellipsoidRhumb.setEndPoints(start, end); - const surfaceDistanceBetweenPoints = - ellipsoidRhumb.surfaceDistance / numPoints; - - let index = offset; - start.height = h0; - let cart = ellipsoid.cartographicToCartesian(start, cartesian); - Matrix3.Cartesian3.pack(cart, array, index); - index += 3; - - for (let i = 1; i < numPoints; i++) { - const carto = ellipsoidRhumb.interpolateUsingSurfaceDistance( - i * surfaceDistanceBetweenPoints, - carto2 - ); - carto.height = heights[i]; - cart = ellipsoid.cartographicToCartesian(carto, cartesian); - Matrix3.Cartesian3.pack(cart, array, index); - index += 3; - } - - return index; - } - - /** - * Breaks a {@link Polyline} into segments such that it does not cross the ±180 degree meridian of an ellipsoid. - * - * @param {Cartesian3[]} positions The polyline's Cartesian positions. - * @param {Matrix4} [modelMatrix=Matrix4.IDENTITY] The polyline's model matrix. Assumed to be an affine - * transformation matrix, where the upper left 3x3 elements are a rotation matrix, and - * the upper three elements in the fourth column are the translation. The bottom row is assumed to be [0, 0, 0, 1]. - * The matrix is not verified to be in the proper form. - * @returns {Object} An object with a positions property that is an array of positions and a - * segments property. - * - * - * @example - * const polylines = new Cesium.PolylineCollection(); - * const polyline = polylines.add(...); - * const positions = polyline.positions; - * const modelMatrix = polylines.modelMatrix; - * const segments = Cesium.PolylinePipeline.wrapLongitude(positions, modelMatrix); - * - * @see PolygonPipeline.wrapLongitude - * @see Polyline - * @see PolylineCollection - */ - PolylinePipeline.wrapLongitude = function (positions, modelMatrix) { - const cartesians = []; - const segments = []; - - if (defaultValue.defined(positions) && positions.length > 0) { - modelMatrix = defaultValue.defaultValue(modelMatrix, Matrix2.Matrix4.IDENTITY); - const inverseModelMatrix = Matrix2.Matrix4.inverseTransformation( - modelMatrix, - wrapLongitudeInversMatrix - ); - - const origin = Matrix2.Matrix4.multiplyByPoint( - inverseModelMatrix, - Matrix3.Cartesian3.ZERO, - wrapLongitudeOrigin - ); - const xzNormal = Matrix3.Cartesian3.normalize( - Matrix2.Matrix4.multiplyByPointAsVector( - inverseModelMatrix, - Matrix3.Cartesian3.UNIT_Y, - wrapLongitudeXZNormal - ), - wrapLongitudeXZNormal - ); - const xzPlane = Plane.Plane.fromPointNormal( - origin, - xzNormal, - wrapLongitudeXZPlane - ); - const yzNormal = Matrix3.Cartesian3.normalize( - Matrix2.Matrix4.multiplyByPointAsVector( - inverseModelMatrix, - Matrix3.Cartesian3.UNIT_X, - wrapLongitudeYZNormal - ), - wrapLongitudeYZNormal - ); - const yzPlane = Plane.Plane.fromPointNormal( - origin, - yzNormal, - wrapLongitudeYZPlane - ); - - let count = 1; - cartesians.push(Matrix3.Cartesian3.clone(positions[0])); - let prev = cartesians[0]; - - const length = positions.length; - for (let i = 1; i < length; ++i) { - const cur = positions[i]; - - // intersects the IDL if either endpoint is on the negative side of the yz-plane - if ( - Plane.Plane.getPointDistance(yzPlane, prev) < 0.0 || - Plane.Plane.getPointDistance(yzPlane, cur) < 0.0 - ) { - // and intersects the xz-plane - const intersection = IntersectionTests.IntersectionTests.lineSegmentPlane( - prev, - cur, - xzPlane, - wrapLongitudeIntersection - ); - if (defaultValue.defined(intersection)) { - // move point on the xz-plane slightly away from the plane - const offset = Matrix3.Cartesian3.multiplyByScalar( - xzNormal, - 5.0e-9, - wrapLongitudeOffset - ); - if (Plane.Plane.getPointDistance(xzPlane, prev) < 0.0) { - Matrix3.Cartesian3.negate(offset, offset); - } - - cartesians.push( - Matrix3.Cartesian3.add(intersection, offset, new Matrix3.Cartesian3()) - ); - segments.push(count + 1); - - Matrix3.Cartesian3.negate(offset, offset); - cartesians.push( - Matrix3.Cartesian3.add(intersection, offset, new Matrix3.Cartesian3()) - ); - count = 1; - } - } - - cartesians.push(Matrix3.Cartesian3.clone(positions[i])); - count++; - - prev = cur; - } - - segments.push(count); - } - - return { - positions: cartesians, - lengths: segments, - }; - }; - - /** - * Subdivides polyline and raises all points to the specified height. Returns an array of numbers to represent the positions. - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions. - * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position. - * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie. - * @returns {Number[]} A new array of positions of type {Number} that have been subdivided and raised to the surface of the ellipsoid. - * - * @example - * const positions = Cesium.Cartesian3.fromDegreesArray([ - * -105.0, 40.0, - * -100.0, 38.0, - * -105.0, 35.0, - * -100.0, 32.0 - * ]); - * const surfacePositions = Cesium.PolylinePipeline.generateArc({ - * positons: positions - * }); - */ - PolylinePipeline.generateArc = function (options) { - if (!defaultValue.defined(options)) { - options = {}; - } - const positions = options.positions; - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions)) { - throw new Check.DeveloperError("options.positions is required."); - } - //>>includeEnd('debug'); - - const length = positions.length; - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - let height = defaultValue.defaultValue(options.height, 0); - const hasHeightArray = Array.isArray(height); - - if (length < 1) { - return []; - } else if (length === 1) { - const p = ellipsoid.scaleToGeodeticSurface(positions[0], scaleFirst); - height = hasHeightArray ? height[0] : height; - if (height !== 0) { - const n = ellipsoid.geodeticSurfaceNormal(p, cartesian); - Matrix3.Cartesian3.multiplyByScalar(n, height, n); - Matrix3.Cartesian3.add(p, n, p); - } - - return [p.x, p.y, p.z]; - } - - let minDistance = options.minDistance; - if (!defaultValue.defined(minDistance)) { - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - minDistance = Math$1.CesiumMath.chordLength(granularity, ellipsoid.maximumRadius); - } - - let numPoints = 0; - let i; - - for (i = 0; i < length - 1; i++) { - numPoints += PolylinePipeline.numberOfPoints( - positions[i], - positions[i + 1], - minDistance - ); - } - - const arrayLength = (numPoints + 1) * 3; - const newPositions = new Array(arrayLength); - let offset = 0; - - for (i = 0; i < length - 1; i++) { - const p0 = positions[i]; - const p1 = positions[i + 1]; - - const h0 = hasHeightArray ? height[i] : height; - const h1 = hasHeightArray ? height[i + 1] : height; - - offset = generateCartesianArc( - p0, - p1, - minDistance, - ellipsoid, - h0, - h1, - newPositions, - offset - ); - } - - subdivideHeightsScratchArray.length = 0; - - const lastPoint = positions[length - 1]; - const carto = ellipsoid.cartesianToCartographic(lastPoint, carto1); - carto.height = hasHeightArray ? height[length - 1] : height; - const cart = ellipsoid.cartographicToCartesian(carto, cartesian); - Matrix3.Cartesian3.pack(cart, newPositions, arrayLength - 3); - - return newPositions; - }; - - const scratchCartographic0 = new Matrix3.Cartographic(); - const scratchCartographic1 = new Matrix3.Cartographic(); - - /** - * Subdivides polyline and raises all points to the specified height using Rhumb lines. Returns an array of numbers to represent the positions. - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions. - * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position. - * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie. - * @returns {Number[]} A new array of positions of type {Number} that have been subdivided and raised to the surface of the ellipsoid. - * - * @example - * const positions = Cesium.Cartesian3.fromDegreesArray([ - * -105.0, 40.0, - * -100.0, 38.0, - * -105.0, 35.0, - * -100.0, 32.0 - * ]); - * const surfacePositions = Cesium.PolylinePipeline.generateRhumbArc({ - * positons: positions - * }); - */ - PolylinePipeline.generateRhumbArc = function (options) { - if (!defaultValue.defined(options)) { - options = {}; - } - const positions = options.positions; - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions)) { - throw new Check.DeveloperError("options.positions is required."); - } - //>>includeEnd('debug'); - - const length = positions.length; - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - let height = defaultValue.defaultValue(options.height, 0); - const hasHeightArray = Array.isArray(height); - - if (length < 1) { - return []; - } else if (length === 1) { - const p = ellipsoid.scaleToGeodeticSurface(positions[0], scaleFirst); - height = hasHeightArray ? height[0] : height; - if (height !== 0) { - const n = ellipsoid.geodeticSurfaceNormal(p, cartesian); - Matrix3.Cartesian3.multiplyByScalar(n, height, n); - Matrix3.Cartesian3.add(p, n, p); - } - - return [p.x, p.y, p.z]; - } - - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - - let numPoints = 0; - let i; - - let c0 = ellipsoid.cartesianToCartographic( - positions[0], - scratchCartographic0 - ); - let c1; - for (i = 0; i < length - 1; i++) { - c1 = ellipsoid.cartesianToCartographic( - positions[i + 1], - scratchCartographic1 - ); - numPoints += PolylinePipeline.numberOfPointsRhumbLine(c0, c1, granularity); - c0 = Matrix3.Cartographic.clone(c1, scratchCartographic0); - } - - const arrayLength = (numPoints + 1) * 3; - const newPositions = new Array(arrayLength); - let offset = 0; - - for (i = 0; i < length - 1; i++) { - const p0 = positions[i]; - const p1 = positions[i + 1]; - - const h0 = hasHeightArray ? height[i] : height; - const h1 = hasHeightArray ? height[i + 1] : height; - - offset = generateCartesianRhumbArc( - p0, - p1, - granularity, - ellipsoid, - h0, - h1, - newPositions, - offset - ); - } - - subdivideHeightsScratchArray.length = 0; - - const lastPoint = positions[length - 1]; - const carto = ellipsoid.cartesianToCartographic(lastPoint, carto1); - carto.height = hasHeightArray ? height[length - 1] : height; - const cart = ellipsoid.cartographicToCartesian(carto, cartesian); - Matrix3.Cartesian3.pack(cart, newPositions, arrayLength - 3); - - return newPositions; - }; - - /** - * Subdivides polyline and raises all points to the specified height. Returns an array of new {Cartesian3} positions. - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions. - * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position. - * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie. - * @returns {Cartesian3[]} A new array of cartesian3 positions that have been subdivided and raised to the surface of the ellipsoid. - * - * @example - * const positions = Cesium.Cartesian3.fromDegreesArray([ - * -105.0, 40.0, - * -100.0, 38.0, - * -105.0, 35.0, - * -100.0, 32.0 - * ]); - * const surfacePositions = Cesium.PolylinePipeline.generateCartesianArc({ - * positons: positions - * }); - */ - PolylinePipeline.generateCartesianArc = function (options) { - const numberArray = PolylinePipeline.generateArc(options); - const size = numberArray.length / 3; - const newPositions = new Array(size); - for (let i = 0; i < size; i++) { - newPositions[i] = Matrix3.Cartesian3.unpack(numberArray, i * 3); - } - return newPositions; - }; - - /** - * Subdivides polyline and raises all points to the specified height using Rhumb Lines. Returns an array of new {Cartesian3} positions. - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions. - * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position. - * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie. - * @returns {Cartesian3[]} A new array of cartesian3 positions that have been subdivided and raised to the surface of the ellipsoid. - * - * @example - * const positions = Cesium.Cartesian3.fromDegreesArray([ - * -105.0, 40.0, - * -100.0, 38.0, - * -105.0, 35.0, - * -100.0, 32.0 - * ]); - * const surfacePositions = Cesium.PolylinePipeline.generateCartesianRhumbArc({ - * positons: positions - * }); - */ - PolylinePipeline.generateCartesianRhumbArc = function (options) { - const numberArray = PolylinePipeline.generateRhumbArc(options); - const size = numberArray.length / 3; - const newPositions = new Array(size); - for (let i = 0; i < size; i++) { - newPositions[i] = Matrix3.Cartesian3.unpack(numberArray, i * 3); - } - return newPositions; - }; - var PolylinePipeline$1 = PolylinePipeline; - - exports.PolylinePipeline = PolylinePipeline$1; - -})); -//# sourceMappingURL=PolylinePipeline-3c021236.js.map diff --git a/debug/cesium/Workers/PolylinePipeline-3c021236.js.map b/debug/cesium/Workers/PolylinePipeline-3c021236.js.map deleted file mode 100644 index ff5b099..0000000 --- a/debug/cesium/Workers/PolylinePipeline-3c021236.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PolylinePipeline-3c021236.js","sources":["../../../Source/Core/PolylinePipeline.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport EllipsoidGeodesic from \"./EllipsoidGeodesic.js\";\r\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\r\nimport IntersectionTests from \"./IntersectionTests.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport Plane from \"./Plane.js\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst PolylinePipeline = {};\r\n\r\nPolylinePipeline.numberOfPoints = function (p0, p1, minDistance) {\r\n const distance = Cartesian3.distance(p0, p1);\r\n return Math.ceil(distance / minDistance);\r\n};\r\n\r\nPolylinePipeline.numberOfPointsRhumbLine = function (p0, p1, granularity) {\r\n const radiansDistanceSquared =\r\n Math.pow(p0.longitude - p1.longitude, 2) +\r\n Math.pow(p0.latitude - p1.latitude, 2);\r\n\r\n return Math.max(\r\n 1,\r\n Math.ceil(Math.sqrt(radiansDistanceSquared / (granularity * granularity)))\r\n );\r\n};\r\n\r\nconst cartoScratch = new Cartographic();\r\nPolylinePipeline.extractHeights = function (positions, ellipsoid) {\r\n const length = positions.length;\r\n const heights = new Array(length);\r\n for (let i = 0; i < length; i++) {\r\n const p = positions[i];\r\n heights[i] = ellipsoid.cartesianToCartographic(p, cartoScratch).height;\r\n }\r\n return heights;\r\n};\r\n\r\nconst wrapLongitudeInversMatrix = new Matrix4();\r\nconst wrapLongitudeOrigin = new Cartesian3();\r\nconst wrapLongitudeXZNormal = new Cartesian3();\r\nconst wrapLongitudeXZPlane = new Plane(Cartesian3.UNIT_X, 0.0);\r\nconst wrapLongitudeYZNormal = new Cartesian3();\r\nconst wrapLongitudeYZPlane = new Plane(Cartesian3.UNIT_X, 0.0);\r\nconst wrapLongitudeIntersection = new Cartesian3();\r\nconst wrapLongitudeOffset = new Cartesian3();\r\n\r\nconst subdivideHeightsScratchArray = [];\r\n\r\nfunction subdivideHeights(numPoints, h0, h1) {\r\n const heights = subdivideHeightsScratchArray;\r\n heights.length = numPoints;\r\n\r\n let i;\r\n if (h0 === h1) {\r\n for (i = 0; i < numPoints; i++) {\r\n heights[i] = h0;\r\n }\r\n return heights;\r\n }\r\n\r\n const dHeight = h1 - h0;\r\n const heightPerVertex = dHeight / numPoints;\r\n\r\n for (i = 0; i < numPoints; i++) {\r\n const h = h0 + i * heightPerVertex;\r\n heights[i] = h;\r\n }\r\n\r\n return heights;\r\n}\r\n\r\nconst carto1 = new Cartographic();\r\nconst carto2 = new Cartographic();\r\nconst cartesian = new Cartesian3();\r\nconst scaleFirst = new Cartesian3();\r\nconst scaleLast = new Cartesian3();\r\nconst ellipsoidGeodesic = new EllipsoidGeodesic();\r\nlet ellipsoidRhumb = new EllipsoidRhumbLine();\r\n\r\n//Returns subdivided line scaled to ellipsoid surface starting at p1 and ending at p2.\r\n//Result includes p1, but not include p2. This function is called for a sequence of line segments,\r\n//and this prevents duplication of end point.\r\nfunction generateCartesianArc(\r\n p0,\r\n p1,\r\n minDistance,\r\n ellipsoid,\r\n h0,\r\n h1,\r\n array,\r\n offset\r\n) {\r\n const first = ellipsoid.scaleToGeodeticSurface(p0, scaleFirst);\r\n const last = ellipsoid.scaleToGeodeticSurface(p1, scaleLast);\r\n const numPoints = PolylinePipeline.numberOfPoints(p0, p1, minDistance);\r\n const start = ellipsoid.cartesianToCartographic(first, carto1);\r\n const end = ellipsoid.cartesianToCartographic(last, carto2);\r\n const heights = subdivideHeights(numPoints, h0, h1);\r\n\r\n ellipsoidGeodesic.setEndPoints(start, end);\r\n const surfaceDistanceBetweenPoints =\r\n ellipsoidGeodesic.surfaceDistance / numPoints;\r\n\r\n let index = offset;\r\n start.height = h0;\r\n let cart = ellipsoid.cartographicToCartesian(start, cartesian);\r\n Cartesian3.pack(cart, array, index);\r\n index += 3;\r\n\r\n for (let i = 1; i < numPoints; i++) {\r\n const carto = ellipsoidGeodesic.interpolateUsingSurfaceDistance(\r\n i * surfaceDistanceBetweenPoints,\r\n carto2\r\n );\r\n carto.height = heights[i];\r\n cart = ellipsoid.cartographicToCartesian(carto, cartesian);\r\n Cartesian3.pack(cart, array, index);\r\n index += 3;\r\n }\r\n\r\n return index;\r\n}\r\n\r\n//Returns subdivided line scaled to ellipsoid surface starting at p1 and ending at p2.\r\n//Result includes p1, but not include p2. This function is called for a sequence of line segments,\r\n//and this prevents duplication of end point.\r\nfunction generateCartesianRhumbArc(\r\n p0,\r\n p1,\r\n granularity,\r\n ellipsoid,\r\n h0,\r\n h1,\r\n array,\r\n offset\r\n) {\r\n const start = ellipsoid.cartesianToCartographic(p0, carto1);\r\n const end = ellipsoid.cartesianToCartographic(p1, carto2);\r\n const numPoints = PolylinePipeline.numberOfPointsRhumbLine(\r\n start,\r\n end,\r\n granularity\r\n );\r\n start.height = 0.0;\r\n end.height = 0.0;\r\n const heights = subdivideHeights(numPoints, h0, h1);\r\n\r\n if (!ellipsoidRhumb.ellipsoid.equals(ellipsoid)) {\r\n ellipsoidRhumb = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\r\n }\r\n ellipsoidRhumb.setEndPoints(start, end);\r\n const surfaceDistanceBetweenPoints =\r\n ellipsoidRhumb.surfaceDistance / numPoints;\r\n\r\n let index = offset;\r\n start.height = h0;\r\n let cart = ellipsoid.cartographicToCartesian(start, cartesian);\r\n Cartesian3.pack(cart, array, index);\r\n index += 3;\r\n\r\n for (let i = 1; i < numPoints; i++) {\r\n const carto = ellipsoidRhumb.interpolateUsingSurfaceDistance(\r\n i * surfaceDistanceBetweenPoints,\r\n carto2\r\n );\r\n carto.height = heights[i];\r\n cart = ellipsoid.cartographicToCartesian(carto, cartesian);\r\n Cartesian3.pack(cart, array, index);\r\n index += 3;\r\n }\r\n\r\n return index;\r\n}\r\n\r\n/**\r\n * Breaks a {@link Polyline} into segments such that it does not cross the ±180 degree meridian of an ellipsoid.\r\n *\r\n * @param {Cartesian3[]} positions The polyline's Cartesian positions.\r\n * @param {Matrix4} [modelMatrix=Matrix4.IDENTITY] The polyline's model matrix. Assumed to be an affine\r\n * transformation matrix, where the upper left 3x3 elements are a rotation matrix, and\r\n * the upper three elements in the fourth column are the translation. The bottom row is assumed to be [0, 0, 0, 1].\r\n * The matrix is not verified to be in the proper form.\r\n * @returns {Object} An object with a positions property that is an array of positions and a\r\n * segments property.\r\n *\r\n *\r\n * @example\r\n * const polylines = new Cesium.PolylineCollection();\r\n * const polyline = polylines.add(...);\r\n * const positions = polyline.positions;\r\n * const modelMatrix = polylines.modelMatrix;\r\n * const segments = Cesium.PolylinePipeline.wrapLongitude(positions, modelMatrix);\r\n *\r\n * @see PolygonPipeline.wrapLongitude\r\n * @see Polyline\r\n * @see PolylineCollection\r\n */\r\nPolylinePipeline.wrapLongitude = function (positions, modelMatrix) {\r\n const cartesians = [];\r\n const segments = [];\r\n\r\n if (defined(positions) && positions.length > 0) {\r\n modelMatrix = defaultValue(modelMatrix, Matrix4.IDENTITY);\r\n const inverseModelMatrix = Matrix4.inverseTransformation(\r\n modelMatrix,\r\n wrapLongitudeInversMatrix\r\n );\r\n\r\n const origin = Matrix4.multiplyByPoint(\r\n inverseModelMatrix,\r\n Cartesian3.ZERO,\r\n wrapLongitudeOrigin\r\n );\r\n const xzNormal = Cartesian3.normalize(\r\n Matrix4.multiplyByPointAsVector(\r\n inverseModelMatrix,\r\n Cartesian3.UNIT_Y,\r\n wrapLongitudeXZNormal\r\n ),\r\n wrapLongitudeXZNormal\r\n );\r\n const xzPlane = Plane.fromPointNormal(\r\n origin,\r\n xzNormal,\r\n wrapLongitudeXZPlane\r\n );\r\n const yzNormal = Cartesian3.normalize(\r\n Matrix4.multiplyByPointAsVector(\r\n inverseModelMatrix,\r\n Cartesian3.UNIT_X,\r\n wrapLongitudeYZNormal\r\n ),\r\n wrapLongitudeYZNormal\r\n );\r\n const yzPlane = Plane.fromPointNormal(\r\n origin,\r\n yzNormal,\r\n wrapLongitudeYZPlane\r\n );\r\n\r\n let count = 1;\r\n cartesians.push(Cartesian3.clone(positions[0]));\r\n let prev = cartesians[0];\r\n\r\n const length = positions.length;\r\n for (let i = 1; i < length; ++i) {\r\n const cur = positions[i];\r\n\r\n // intersects the IDL if either endpoint is on the negative side of the yz-plane\r\n if (\r\n Plane.getPointDistance(yzPlane, prev) < 0.0 ||\r\n Plane.getPointDistance(yzPlane, cur) < 0.0\r\n ) {\r\n // and intersects the xz-plane\r\n const intersection = IntersectionTests.lineSegmentPlane(\r\n prev,\r\n cur,\r\n xzPlane,\r\n wrapLongitudeIntersection\r\n );\r\n if (defined(intersection)) {\r\n // move point on the xz-plane slightly away from the plane\r\n const offset = Cartesian3.multiplyByScalar(\r\n xzNormal,\r\n 5.0e-9,\r\n wrapLongitudeOffset\r\n );\r\n if (Plane.getPointDistance(xzPlane, prev) < 0.0) {\r\n Cartesian3.negate(offset, offset);\r\n }\r\n\r\n cartesians.push(\r\n Cartesian3.add(intersection, offset, new Cartesian3())\r\n );\r\n segments.push(count + 1);\r\n\r\n Cartesian3.negate(offset, offset);\r\n cartesians.push(\r\n Cartesian3.add(intersection, offset, new Cartesian3())\r\n );\r\n count = 1;\r\n }\r\n }\r\n\r\n cartesians.push(Cartesian3.clone(positions[i]));\r\n count++;\r\n\r\n prev = cur;\r\n }\r\n\r\n segments.push(count);\r\n }\r\n\r\n return {\r\n positions: cartesians,\r\n lengths: segments,\r\n };\r\n};\r\n\r\n/**\r\n * Subdivides polyline and raises all points to the specified height. Returns an array of numbers to represent the positions.\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\r\n * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\r\n * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\r\n * @returns {Number[]} A new array of positions of type {Number} that have been subdivided and raised to the surface of the ellipsoid.\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromDegreesArray([\r\n * -105.0, 40.0,\r\n * -100.0, 38.0,\r\n * -105.0, 35.0,\r\n * -100.0, 32.0\r\n * ]);\r\n * const surfacePositions = Cesium.PolylinePipeline.generateArc({\r\n * positons: positions\r\n * });\r\n */\r\nPolylinePipeline.generateArc = function (options) {\r\n if (!defined(options)) {\r\n options = {};\r\n }\r\n const positions = options.positions;\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions)) {\r\n throw new DeveloperError(\"options.positions is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = positions.length;\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n let height = defaultValue(options.height, 0);\r\n const hasHeightArray = Array.isArray(height);\r\n\r\n if (length < 1) {\r\n return [];\r\n } else if (length === 1) {\r\n const p = ellipsoid.scaleToGeodeticSurface(positions[0], scaleFirst);\r\n height = hasHeightArray ? height[0] : height;\r\n if (height !== 0) {\r\n const n = ellipsoid.geodeticSurfaceNormal(p, cartesian);\r\n Cartesian3.multiplyByScalar(n, height, n);\r\n Cartesian3.add(p, n, p);\r\n }\r\n\r\n return [p.x, p.y, p.z];\r\n }\r\n\r\n let minDistance = options.minDistance;\r\n if (!defined(minDistance)) {\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n minDistance = CesiumMath.chordLength(granularity, ellipsoid.maximumRadius);\r\n }\r\n\r\n let numPoints = 0;\r\n let i;\r\n\r\n for (i = 0; i < length - 1; i++) {\r\n numPoints += PolylinePipeline.numberOfPoints(\r\n positions[i],\r\n positions[i + 1],\r\n minDistance\r\n );\r\n }\r\n\r\n const arrayLength = (numPoints + 1) * 3;\r\n const newPositions = new Array(arrayLength);\r\n let offset = 0;\r\n\r\n for (i = 0; i < length - 1; i++) {\r\n const p0 = positions[i];\r\n const p1 = positions[i + 1];\r\n\r\n const h0 = hasHeightArray ? height[i] : height;\r\n const h1 = hasHeightArray ? height[i + 1] : height;\r\n\r\n offset = generateCartesianArc(\r\n p0,\r\n p1,\r\n minDistance,\r\n ellipsoid,\r\n h0,\r\n h1,\r\n newPositions,\r\n offset\r\n );\r\n }\r\n\r\n subdivideHeightsScratchArray.length = 0;\r\n\r\n const lastPoint = positions[length - 1];\r\n const carto = ellipsoid.cartesianToCartographic(lastPoint, carto1);\r\n carto.height = hasHeightArray ? height[length - 1] : height;\r\n const cart = ellipsoid.cartographicToCartesian(carto, cartesian);\r\n Cartesian3.pack(cart, newPositions, arrayLength - 3);\r\n\r\n return newPositions;\r\n};\r\n\r\nconst scratchCartographic0 = new Cartographic();\r\nconst scratchCartographic1 = new Cartographic();\r\n\r\n/**\r\n * Subdivides polyline and raises all points to the specified height using Rhumb lines. Returns an array of numbers to represent the positions.\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\r\n * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\r\n * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\r\n * @returns {Number[]} A new array of positions of type {Number} that have been subdivided and raised to the surface of the ellipsoid.\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromDegreesArray([\r\n * -105.0, 40.0,\r\n * -100.0, 38.0,\r\n * -105.0, 35.0,\r\n * -100.0, 32.0\r\n * ]);\r\n * const surfacePositions = Cesium.PolylinePipeline.generateRhumbArc({\r\n * positons: positions\r\n * });\r\n */\r\nPolylinePipeline.generateRhumbArc = function (options) {\r\n if (!defined(options)) {\r\n options = {};\r\n }\r\n const positions = options.positions;\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions)) {\r\n throw new DeveloperError(\"options.positions is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const length = positions.length;\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n let height = defaultValue(options.height, 0);\r\n const hasHeightArray = Array.isArray(height);\r\n\r\n if (length < 1) {\r\n return [];\r\n } else if (length === 1) {\r\n const p = ellipsoid.scaleToGeodeticSurface(positions[0], scaleFirst);\r\n height = hasHeightArray ? height[0] : height;\r\n if (height !== 0) {\r\n const n = ellipsoid.geodeticSurfaceNormal(p, cartesian);\r\n Cartesian3.multiplyByScalar(n, height, n);\r\n Cartesian3.add(p, n, p);\r\n }\r\n\r\n return [p.x, p.y, p.z];\r\n }\r\n\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n\r\n let numPoints = 0;\r\n let i;\r\n\r\n let c0 = ellipsoid.cartesianToCartographic(\r\n positions[0],\r\n scratchCartographic0\r\n );\r\n let c1;\r\n for (i = 0; i < length - 1; i++) {\r\n c1 = ellipsoid.cartesianToCartographic(\r\n positions[i + 1],\r\n scratchCartographic1\r\n );\r\n numPoints += PolylinePipeline.numberOfPointsRhumbLine(c0, c1, granularity);\r\n c0 = Cartographic.clone(c1, scratchCartographic0);\r\n }\r\n\r\n const arrayLength = (numPoints + 1) * 3;\r\n const newPositions = new Array(arrayLength);\r\n let offset = 0;\r\n\r\n for (i = 0; i < length - 1; i++) {\r\n const p0 = positions[i];\r\n const p1 = positions[i + 1];\r\n\r\n const h0 = hasHeightArray ? height[i] : height;\r\n const h1 = hasHeightArray ? height[i + 1] : height;\r\n\r\n offset = generateCartesianRhumbArc(\r\n p0,\r\n p1,\r\n granularity,\r\n ellipsoid,\r\n h0,\r\n h1,\r\n newPositions,\r\n offset\r\n );\r\n }\r\n\r\n subdivideHeightsScratchArray.length = 0;\r\n\r\n const lastPoint = positions[length - 1];\r\n const carto = ellipsoid.cartesianToCartographic(lastPoint, carto1);\r\n carto.height = hasHeightArray ? height[length - 1] : height;\r\n const cart = ellipsoid.cartographicToCartesian(carto, cartesian);\r\n Cartesian3.pack(cart, newPositions, arrayLength - 3);\r\n\r\n return newPositions;\r\n};\r\n\r\n/**\r\n * Subdivides polyline and raises all points to the specified height. Returns an array of new {Cartesian3} positions.\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\r\n * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\r\n * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\r\n * @returns {Cartesian3[]} A new array of cartesian3 positions that have been subdivided and raised to the surface of the ellipsoid.\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromDegreesArray([\r\n * -105.0, 40.0,\r\n * -100.0, 38.0,\r\n * -105.0, 35.0,\r\n * -100.0, 32.0\r\n * ]);\r\n * const surfacePositions = Cesium.PolylinePipeline.generateCartesianArc({\r\n * positons: positions\r\n * });\r\n */\r\nPolylinePipeline.generateCartesianArc = function (options) {\r\n const numberArray = PolylinePipeline.generateArc(options);\r\n const size = numberArray.length / 3;\r\n const newPositions = new Array(size);\r\n for (let i = 0; i < size; i++) {\r\n newPositions[i] = Cartesian3.unpack(numberArray, i * 3);\r\n }\r\n return newPositions;\r\n};\r\n\r\n/**\r\n * Subdivides polyline and raises all points to the specified height using Rhumb Lines. Returns an array of new {Cartesian3} positions.\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions The array of type {Cartesian3} representing positions.\r\n * @param {Number|Number[]} [options.height=0.0] A number or array of numbers representing the heights of each position.\r\n * @param {Number} [options.granularity = CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the positions lie.\r\n * @returns {Cartesian3[]} A new array of cartesian3 positions that have been subdivided and raised to the surface of the ellipsoid.\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromDegreesArray([\r\n * -105.0, 40.0,\r\n * -100.0, 38.0,\r\n * -105.0, 35.0,\r\n * -100.0, 32.0\r\n * ]);\r\n * const surfacePositions = Cesium.PolylinePipeline.generateCartesianRhumbArc({\r\n * positons: positions\r\n * });\r\n */\r\nPolylinePipeline.generateCartesianRhumbArc = function (options) {\r\n const numberArray = PolylinePipeline.generateRhumbArc(options);\r\n const size = numberArray.length / 3;\r\n const newPositions = new Array(size);\r\n for (let i = 0; i < size; i++) {\r\n newPositions[i] = Cartesian3.unpack(numberArray, i * 3);\r\n }\r\n return newPositions;\r\n};\r\nexport default PolylinePipeline;\r\n"],"names":["Cartesian3","Cartographic","Matrix4","Plane","EllipsoidGeodesic","EllipsoidRhumbLine","defined","defaultValue","IntersectionTests","DeveloperError","Ellipsoid","CesiumMath"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/PolylineVolumeGeometryLibrary-eed2bdf7.js b/debug/cesium/Workers/PolylineVolumeGeometryLibrary-eed2bdf7.js deleted file mode 100644 index 56dfbed..0000000 --- a/debug/cesium/Workers/PolylineVolumeGeometryLibrary-eed2bdf7.js +++ /dev/null @@ -1,807 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix2-036c77dd', './Matrix3-f22b0303', './EllipsoidTangentPlane-c421b2cb', './Math-9be8b918', './PolylinePipeline-3c021236', './Transforms-11fb6b0a', './defaultValue-0ab18f7d', './Check-d10e5f2e'], (function (exports, Matrix2, Matrix3, EllipsoidTangentPlane, Math$1, PolylinePipeline, Transforms, defaultValue, Check) { 'use strict'; - - /** - * Style options for corners. - * - * @demo The {@link https://sandcastle.cesium.com/index.html?src=Corridor.html&label=Geometries|Corridor Demo} - * demonstrates the three corner types, as used by {@link CorridorGraphics}. - * - * @enum {Number} - */ - const CornerType = { - /** - * - * - * Corner has a smooth edge. - * @type {Number} - * @constant - */ - ROUNDED: 0, - - /** - * - * - * Corner point is the intersection of adjacent edges. - * @type {Number} - * @constant - */ - MITERED: 1, - - /** - * - * - * Corner is clipped. - * @type {Number} - * @constant - */ - BEVELED: 2, - }; - var CornerType$1 = Object.freeze(CornerType); - - const warnings = {}; - - /** - * Logs a one time message to the console. Use this function instead of - * console.log directly since this does not log duplicate messages - * unless it is called from multiple workers. - * - * @function oneTimeWarning - * - * @param {String} identifier The unique identifier for this warning. - * @param {String} [message=identifier] The message to log to the console. - * - * @example - * for(let i=0;i>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(identifier)) { - throw new Check.DeveloperError("identifier is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(warnings[identifier])) { - warnings[identifier] = true; - console.warn(defaultValue.defaultValue(message, identifier)); - } - } - - oneTimeWarning.geometryOutlines = - "Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0."; - - oneTimeWarning.geometryZIndex = - "Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored"; - - oneTimeWarning.geometryHeightReference = - "Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored"; - oneTimeWarning.geometryExtrudedHeightReference = - "Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored"; - - const scratch2Array = [new Matrix3.Cartesian3(), new Matrix3.Cartesian3()]; - const scratchCartesian1 = new Matrix3.Cartesian3(); - const scratchCartesian2 = new Matrix3.Cartesian3(); - const scratchCartesian3 = new Matrix3.Cartesian3(); - const scratchCartesian4 = new Matrix3.Cartesian3(); - const scratchCartesian5 = new Matrix3.Cartesian3(); - const scratchCartesian6 = new Matrix3.Cartesian3(); - const scratchCartesian7 = new Matrix3.Cartesian3(); - const scratchCartesian8 = new Matrix3.Cartesian3(); - const scratchCartesian9 = new Matrix3.Cartesian3(); - - const scratch1 = new Matrix3.Cartesian3(); - const scratch2 = new Matrix3.Cartesian3(); - - /** - * @private - */ - const PolylineVolumeGeometryLibrary = {}; - - let cartographic = new Matrix3.Cartographic(); - function scaleToSurface(positions, ellipsoid) { - const heights = new Array(positions.length); - for (let i = 0; i < positions.length; i++) { - const pos = positions[i]; - cartographic = ellipsoid.cartesianToCartographic(pos, cartographic); - heights[i] = cartographic.height; - positions[i] = ellipsoid.scaleToGeodeticSurface(pos, pos); - } - return heights; - } - - function subdivideHeights(points, h0, h1, granularity) { - const p0 = points[0]; - const p1 = points[1]; - const angleBetween = Matrix3.Cartesian3.angleBetween(p0, p1); - const numPoints = Math.ceil(angleBetween / granularity); - const heights = new Array(numPoints); - let i; - if (h0 === h1) { - for (i = 0; i < numPoints; i++) { - heights[i] = h0; - } - heights.push(h1); - return heights; - } - - const dHeight = h1 - h0; - const heightPerVertex = dHeight / numPoints; - - for (i = 1; i < numPoints; i++) { - const h = h0 + i * heightPerVertex; - heights[i] = h; - } - - heights[0] = h0; - heights.push(h1); - return heights; - } - - const nextScratch = new Matrix3.Cartesian3(); - const prevScratch = new Matrix3.Cartesian3(); - - function computeRotationAngle(start, end, position, ellipsoid) { - const tangentPlane = new EllipsoidTangentPlane.EllipsoidTangentPlane(position, ellipsoid); - const next = tangentPlane.projectPointOntoPlane( - Matrix3.Cartesian3.add(position, start, nextScratch), - nextScratch - ); - const prev = tangentPlane.projectPointOntoPlane( - Matrix3.Cartesian3.add(position, end, prevScratch), - prevScratch - ); - const angle = Matrix2.Cartesian2.angleBetween(next, prev); - - return prev.x * next.y - prev.y * next.x >= 0.0 ? -angle : angle; - } - - const negativeX = new Matrix3.Cartesian3(-1, 0, 0); - let transform = new Matrix2.Matrix4(); - const translation = new Matrix2.Matrix4(); - let rotationZ = new Matrix3.Matrix3(); - const scaleMatrix = Matrix3.Matrix3.IDENTITY.clone(); - const westScratch = new Matrix3.Cartesian3(); - const finalPosScratch = new Matrix2.Cartesian4(); - const heightCartesian = new Matrix3.Cartesian3(); - function addPosition( - center, - left, - shape, - finalPositions, - ellipsoid, - height, - xScalar, - repeat - ) { - let west = westScratch; - let finalPosition = finalPosScratch; - transform = Transforms.Transforms.eastNorthUpToFixedFrame(center, ellipsoid, transform); - - west = Matrix2.Matrix4.multiplyByPointAsVector(transform, negativeX, west); - west = Matrix3.Cartesian3.normalize(west, west); - const angle = computeRotationAngle(west, left, center, ellipsoid); - rotationZ = Matrix3.Matrix3.fromRotationZ(angle, rotationZ); - - heightCartesian.z = height; - transform = Matrix2.Matrix4.multiplyTransformation( - transform, - Matrix2.Matrix4.fromRotationTranslation(rotationZ, heightCartesian, translation), - transform - ); - const scale = scaleMatrix; - scale[0] = xScalar; - - for (let j = 0; j < repeat; j++) { - for (let i = 0; i < shape.length; i += 3) { - finalPosition = Matrix3.Cartesian3.fromArray(shape, i, finalPosition); - finalPosition = Matrix3.Matrix3.multiplyByVector( - scale, - finalPosition, - finalPosition - ); - finalPosition = Matrix2.Matrix4.multiplyByPoint( - transform, - finalPosition, - finalPosition - ); - finalPositions.push(finalPosition.x, finalPosition.y, finalPosition.z); - } - } - - return finalPositions; - } - - const centerScratch = new Matrix3.Cartesian3(); - function addPositions( - centers, - left, - shape, - finalPositions, - ellipsoid, - heights, - xScalar - ) { - for (let i = 0; i < centers.length; i += 3) { - const center = Matrix3.Cartesian3.fromArray(centers, i, centerScratch); - finalPositions = addPosition( - center, - left, - shape, - finalPositions, - ellipsoid, - heights[i / 3], - xScalar, - 1 - ); - } - return finalPositions; - } - - function convertShapeTo3DDuplicate(shape2D, boundingRectangle) { - //orientate 2D shape to XZ plane center at (0, 0, 0), duplicate points - const length = shape2D.length; - const shape = new Array(length * 6); - let index = 0; - const xOffset = boundingRectangle.x + boundingRectangle.width / 2; - const yOffset = boundingRectangle.y + boundingRectangle.height / 2; - - let point = shape2D[0]; - shape[index++] = point.x - xOffset; - shape[index++] = 0.0; - shape[index++] = point.y - yOffset; - for (let i = 1; i < length; i++) { - point = shape2D[i]; - const x = point.x - xOffset; - const z = point.y - yOffset; - shape[index++] = x; - shape[index++] = 0.0; - shape[index++] = z; - - shape[index++] = x; - shape[index++] = 0.0; - shape[index++] = z; - } - point = shape2D[0]; - shape[index++] = point.x - xOffset; - shape[index++] = 0.0; - shape[index++] = point.y - yOffset; - - return shape; - } - - function convertShapeTo3D(shape2D, boundingRectangle) { - //orientate 2D shape to XZ plane center at (0, 0, 0) - const length = shape2D.length; - const shape = new Array(length * 3); - let index = 0; - const xOffset = boundingRectangle.x + boundingRectangle.width / 2; - const yOffset = boundingRectangle.y + boundingRectangle.height / 2; - - for (let i = 0; i < length; i++) { - shape[index++] = shape2D[i].x - xOffset; - shape[index++] = 0; - shape[index++] = shape2D[i].y - yOffset; - } - - return shape; - } - - const quaterion = new Transforms.Quaternion(); - const startPointScratch = new Matrix3.Cartesian3(); - const rotMatrix = new Matrix3.Matrix3(); - function computeRoundCorner( - pivot, - startPoint, - endPoint, - cornerType, - leftIsOutside, - ellipsoid, - finalPositions, - shape, - height, - duplicatePoints - ) { - const angle = Matrix3.Cartesian3.angleBetween( - Matrix3.Cartesian3.subtract(startPoint, pivot, scratch1), - Matrix3.Cartesian3.subtract(endPoint, pivot, scratch2) - ); - const granularity = - cornerType === CornerType$1.BEVELED - ? 0 - : Math.ceil(angle / Math$1.CesiumMath.toRadians(5)); - - let m; - if (leftIsOutside) { - m = Matrix3.Matrix3.fromQuaternion( - Transforms.Quaternion.fromAxisAngle( - Matrix3.Cartesian3.negate(pivot, scratch1), - angle / (granularity + 1), - quaterion - ), - rotMatrix - ); - } else { - m = Matrix3.Matrix3.fromQuaternion( - Transforms.Quaternion.fromAxisAngle(pivot, angle / (granularity + 1), quaterion), - rotMatrix - ); - } - - let left; - let surfacePoint; - startPoint = Matrix3.Cartesian3.clone(startPoint, startPointScratch); - if (granularity > 0) { - const repeat = duplicatePoints ? 2 : 1; - for (let i = 0; i < granularity; i++) { - startPoint = Matrix3.Matrix3.multiplyByVector(m, startPoint, startPoint); - left = Matrix3.Cartesian3.subtract(startPoint, pivot, scratch1); - left = Matrix3.Cartesian3.normalize(left, left); - if (!leftIsOutside) { - left = Matrix3.Cartesian3.negate(left, left); - } - surfacePoint = ellipsoid.scaleToGeodeticSurface(startPoint, scratch2); - finalPositions = addPosition( - surfacePoint, - left, - shape, - finalPositions, - ellipsoid, - height, - 1, - repeat - ); - } - } else { - left = Matrix3.Cartesian3.subtract(startPoint, pivot, scratch1); - left = Matrix3.Cartesian3.normalize(left, left); - if (!leftIsOutside) { - left = Matrix3.Cartesian3.negate(left, left); - } - surfacePoint = ellipsoid.scaleToGeodeticSurface(startPoint, scratch2); - finalPositions = addPosition( - surfacePoint, - left, - shape, - finalPositions, - ellipsoid, - height, - 1, - 1 - ); - - endPoint = Matrix3.Cartesian3.clone(endPoint, startPointScratch); - left = Matrix3.Cartesian3.subtract(endPoint, pivot, scratch1); - left = Matrix3.Cartesian3.normalize(left, left); - if (!leftIsOutside) { - left = Matrix3.Cartesian3.negate(left, left); - } - surfacePoint = ellipsoid.scaleToGeodeticSurface(endPoint, scratch2); - finalPositions = addPosition( - surfacePoint, - left, - shape, - finalPositions, - ellipsoid, - height, - 1, - 1 - ); - } - - return finalPositions; - } - - PolylineVolumeGeometryLibrary.removeDuplicatesFromShape = function ( - shapePositions - ) { - const length = shapePositions.length; - const cleanedPositions = []; - for (let i0 = length - 1, i1 = 0; i1 < length; i0 = i1++) { - const v0 = shapePositions[i0]; - const v1 = shapePositions[i1]; - - if (!Matrix2.Cartesian2.equals(v0, v1)) { - cleanedPositions.push(v1); // Shallow copy! - } - } - - return cleanedPositions; - }; - - PolylineVolumeGeometryLibrary.angleIsGreaterThanPi = function ( - forward, - backward, - position, - ellipsoid - ) { - const tangentPlane = new EllipsoidTangentPlane.EllipsoidTangentPlane(position, ellipsoid); - const next = tangentPlane.projectPointOntoPlane( - Matrix3.Cartesian3.add(position, forward, nextScratch), - nextScratch - ); - const prev = tangentPlane.projectPointOntoPlane( - Matrix3.Cartesian3.add(position, backward, prevScratch), - prevScratch - ); - - return prev.x * next.y - prev.y * next.x >= 0.0; - }; - - const scratchForwardProjection = new Matrix3.Cartesian3(); - const scratchBackwardProjection = new Matrix3.Cartesian3(); - - PolylineVolumeGeometryLibrary.computePositions = function ( - positions, - shape2D, - boundingRectangle, - geometry, - duplicatePoints - ) { - const ellipsoid = geometry._ellipsoid; - const heights = scaleToSurface(positions, ellipsoid); - const granularity = geometry._granularity; - const cornerType = geometry._cornerType; - const shapeForSides = duplicatePoints - ? convertShapeTo3DDuplicate(shape2D, boundingRectangle) - : convertShapeTo3D(shape2D, boundingRectangle); - const shapeForEnds = duplicatePoints - ? convertShapeTo3D(shape2D, boundingRectangle) - : undefined; - const heightOffset = boundingRectangle.height / 2; - const width = boundingRectangle.width / 2; - let length = positions.length; - let finalPositions = []; - let ends = duplicatePoints ? [] : undefined; - - let forward = scratchCartesian1; - let backward = scratchCartesian2; - let cornerDirection = scratchCartesian3; - let surfaceNormal = scratchCartesian4; - let pivot = scratchCartesian5; - let start = scratchCartesian6; - let end = scratchCartesian7; - let left = scratchCartesian8; - let previousPosition = scratchCartesian9; - - let position = positions[0]; - let nextPosition = positions[1]; - surfaceNormal = ellipsoid.geodeticSurfaceNormal(position, surfaceNormal); - forward = Matrix3.Cartesian3.subtract(nextPosition, position, forward); - forward = Matrix3.Cartesian3.normalize(forward, forward); - left = Matrix3.Cartesian3.cross(surfaceNormal, forward, left); - left = Matrix3.Cartesian3.normalize(left, left); - let h0 = heights[0]; - let h1 = heights[1]; - if (duplicatePoints) { - ends = addPosition( - position, - left, - shapeForEnds, - ends, - ellipsoid, - h0 + heightOffset, - 1, - 1 - ); - } - previousPosition = Matrix3.Cartesian3.clone(position, previousPosition); - position = nextPosition; - backward = Matrix3.Cartesian3.negate(forward, backward); - let subdividedHeights; - let subdividedPositions; - for (let i = 1; i < length - 1; i++) { - const repeat = duplicatePoints ? 2 : 1; - nextPosition = positions[i + 1]; - if (position.equals(nextPosition)) { - oneTimeWarning( - "Positions are too close and are considered equivalent with rounding error." - ); - continue; - } - forward = Matrix3.Cartesian3.subtract(nextPosition, position, forward); - forward = Matrix3.Cartesian3.normalize(forward, forward); - cornerDirection = Matrix3.Cartesian3.add(forward, backward, cornerDirection); - cornerDirection = Matrix3.Cartesian3.normalize(cornerDirection, cornerDirection); - surfaceNormal = ellipsoid.geodeticSurfaceNormal(position, surfaceNormal); - - const forwardProjection = Matrix3.Cartesian3.multiplyByScalar( - surfaceNormal, - Matrix3.Cartesian3.dot(forward, surfaceNormal), - scratchForwardProjection - ); - Matrix3.Cartesian3.subtract(forward, forwardProjection, forwardProjection); - Matrix3.Cartesian3.normalize(forwardProjection, forwardProjection); - - const backwardProjection = Matrix3.Cartesian3.multiplyByScalar( - surfaceNormal, - Matrix3.Cartesian3.dot(backward, surfaceNormal), - scratchBackwardProjection - ); - Matrix3.Cartesian3.subtract(backward, backwardProjection, backwardProjection); - Matrix3.Cartesian3.normalize(backwardProjection, backwardProjection); - - const doCorner = !Math$1.CesiumMath.equalsEpsilon( - Math.abs(Matrix3.Cartesian3.dot(forwardProjection, backwardProjection)), - 1.0, - Math$1.CesiumMath.EPSILON7 - ); - - if (doCorner) { - cornerDirection = Matrix3.Cartesian3.cross( - cornerDirection, - surfaceNormal, - cornerDirection - ); - cornerDirection = Matrix3.Cartesian3.cross( - surfaceNormal, - cornerDirection, - cornerDirection - ); - cornerDirection = Matrix3.Cartesian3.normalize(cornerDirection, cornerDirection); - const scalar = - 1 / - Math.max( - 0.25, - Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.cross(cornerDirection, backward, scratch1) - ) - ); - const leftIsOutside = PolylineVolumeGeometryLibrary.angleIsGreaterThanPi( - forward, - backward, - position, - ellipsoid - ); - if (leftIsOutside) { - pivot = Matrix3.Cartesian3.add( - position, - Matrix3.Cartesian3.multiplyByScalar( - cornerDirection, - scalar * width, - cornerDirection - ), - pivot - ); - start = Matrix3.Cartesian3.add( - pivot, - Matrix3.Cartesian3.multiplyByScalar(left, width, start), - start - ); - scratch2Array[0] = Matrix3.Cartesian3.clone(previousPosition, scratch2Array[0]); - scratch2Array[1] = Matrix3.Cartesian3.clone(start, scratch2Array[1]); - subdividedHeights = subdivideHeights( - scratch2Array, - h0 + heightOffset, - h1 + heightOffset, - granularity - ); - subdividedPositions = PolylinePipeline.PolylinePipeline.generateArc({ - positions: scratch2Array, - granularity: granularity, - ellipsoid: ellipsoid, - }); - finalPositions = addPositions( - subdividedPositions, - left, - shapeForSides, - finalPositions, - ellipsoid, - subdividedHeights, - 1 - ); - left = Matrix3.Cartesian3.cross(surfaceNormal, forward, left); - left = Matrix3.Cartesian3.normalize(left, left); - end = Matrix3.Cartesian3.add( - pivot, - Matrix3.Cartesian3.multiplyByScalar(left, width, end), - end - ); - if ( - cornerType === CornerType$1.ROUNDED || - cornerType === CornerType$1.BEVELED - ) { - computeRoundCorner( - pivot, - start, - end, - cornerType, - leftIsOutside, - ellipsoid, - finalPositions, - shapeForSides, - h1 + heightOffset, - duplicatePoints - ); - } else { - cornerDirection = Matrix3.Cartesian3.negate(cornerDirection, cornerDirection); - finalPositions = addPosition( - position, - cornerDirection, - shapeForSides, - finalPositions, - ellipsoid, - h1 + heightOffset, - scalar, - repeat - ); - } - previousPosition = Matrix3.Cartesian3.clone(end, previousPosition); - } else { - pivot = Matrix3.Cartesian3.add( - position, - Matrix3.Cartesian3.multiplyByScalar( - cornerDirection, - scalar * width, - cornerDirection - ), - pivot - ); - start = Matrix3.Cartesian3.add( - pivot, - Matrix3.Cartesian3.multiplyByScalar(left, -width, start), - start - ); - scratch2Array[0] = Matrix3.Cartesian3.clone(previousPosition, scratch2Array[0]); - scratch2Array[1] = Matrix3.Cartesian3.clone(start, scratch2Array[1]); - subdividedHeights = subdivideHeights( - scratch2Array, - h0 + heightOffset, - h1 + heightOffset, - granularity - ); - subdividedPositions = PolylinePipeline.PolylinePipeline.generateArc({ - positions: scratch2Array, - granularity: granularity, - ellipsoid: ellipsoid, - }); - finalPositions = addPositions( - subdividedPositions, - left, - shapeForSides, - finalPositions, - ellipsoid, - subdividedHeights, - 1 - ); - left = Matrix3.Cartesian3.cross(surfaceNormal, forward, left); - left = Matrix3.Cartesian3.normalize(left, left); - end = Matrix3.Cartesian3.add( - pivot, - Matrix3.Cartesian3.multiplyByScalar(left, -width, end), - end - ); - if ( - cornerType === CornerType$1.ROUNDED || - cornerType === CornerType$1.BEVELED - ) { - computeRoundCorner( - pivot, - start, - end, - cornerType, - leftIsOutside, - ellipsoid, - finalPositions, - shapeForSides, - h1 + heightOffset, - duplicatePoints - ); - } else { - finalPositions = addPosition( - position, - cornerDirection, - shapeForSides, - finalPositions, - ellipsoid, - h1 + heightOffset, - scalar, - repeat - ); - } - previousPosition = Matrix3.Cartesian3.clone(end, previousPosition); - } - backward = Matrix3.Cartesian3.negate(forward, backward); - } else { - finalPositions = addPosition( - previousPosition, - left, - shapeForSides, - finalPositions, - ellipsoid, - h0 + heightOffset, - 1, - 1 - ); - previousPosition = position; - } - h0 = h1; - h1 = heights[i + 1]; - position = nextPosition; - } - - scratch2Array[0] = Matrix3.Cartesian3.clone(previousPosition, scratch2Array[0]); - scratch2Array[1] = Matrix3.Cartesian3.clone(position, scratch2Array[1]); - subdividedHeights = subdivideHeights( - scratch2Array, - h0 + heightOffset, - h1 + heightOffset, - granularity - ); - subdividedPositions = PolylinePipeline.PolylinePipeline.generateArc({ - positions: scratch2Array, - granularity: granularity, - ellipsoid: ellipsoid, - }); - finalPositions = addPositions( - subdividedPositions, - left, - shapeForSides, - finalPositions, - ellipsoid, - subdividedHeights, - 1 - ); - if (duplicatePoints) { - ends = addPosition( - position, - left, - shapeForEnds, - ends, - ellipsoid, - h1 + heightOffset, - 1, - 1 - ); - } - - length = finalPositions.length; - const posLength = duplicatePoints ? length + ends.length : length; - const combinedPositions = new Float64Array(posLength); - combinedPositions.set(finalPositions); - if (duplicatePoints) { - combinedPositions.set(ends, length); - } - - return combinedPositions; - }; - var PolylineVolumeGeometryLibrary$1 = PolylineVolumeGeometryLibrary; - - exports.CornerType = CornerType$1; - exports.PolylineVolumeGeometryLibrary = PolylineVolumeGeometryLibrary$1; - exports.oneTimeWarning = oneTimeWarning; - -})); -//# sourceMappingURL=PolylineVolumeGeometryLibrary-eed2bdf7.js.map diff --git a/debug/cesium/Workers/PolylineVolumeGeometryLibrary-eed2bdf7.js.map b/debug/cesium/Workers/PolylineVolumeGeometryLibrary-eed2bdf7.js.map deleted file mode 100644 index 8684eb1..0000000 --- a/debug/cesium/Workers/PolylineVolumeGeometryLibrary-eed2bdf7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PolylineVolumeGeometryLibrary-eed2bdf7.js","sources":["../../../Source/Core/CornerType.js","../../../Source/Core/oneTimeWarning.js","../../../Source/Core/PolylineVolumeGeometryLibrary.js"],"sourcesContent":["/**\r\n * Style options for corners.\r\n *\r\n * @demo The {@link https://sandcastle.cesium.com/index.html?src=Corridor.html&label=Geometries|Corridor Demo}\r\n * demonstrates the three corner types, as used by {@link CorridorGraphics}.\r\n *\r\n * @enum {Number}\r\n */\r\nconst CornerType = {\r\n /**\r\n * \r\n *\r\n * Corner has a smooth edge.\r\n * @type {Number}\r\n * @constant\r\n */\r\n ROUNDED: 0,\r\n\r\n /**\r\n * \r\n *\r\n * Corner point is the intersection of adjacent edges.\r\n * @type {Number}\r\n * @constant\r\n */\r\n MITERED: 1,\r\n\r\n /**\r\n * \r\n *\r\n * Corner is clipped.\r\n * @type {Number}\r\n * @constant\r\n */\r\n BEVELED: 2,\r\n};\r\nexport default Object.freeze(CornerType);\r\n","import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\nconst warnings = {};\r\n\r\n/**\r\n * Logs a one time message to the console. Use this function instead of\r\n * console.log directly since this does not log duplicate messages\r\n * unless it is called from multiple workers.\r\n *\r\n * @function oneTimeWarning\r\n *\r\n * @param {String} identifier The unique identifier for this warning.\r\n * @param {String} [message=identifier] The message to log to the console.\r\n *\r\n * @example\r\n * for(let i=0;i>includeStart('debug', pragmas.debug);\r\n if (!defined(identifier)) {\r\n throw new DeveloperError(\"identifier is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(warnings[identifier])) {\r\n warnings[identifier] = true;\r\n console.warn(defaultValue(message, identifier));\r\n }\r\n}\r\n\r\noneTimeWarning.geometryOutlines =\r\n \"Entity geometry outlines are unsupported on terrain. Outlines will be disabled. To enable outlines, disable geometry terrain clamping by explicitly setting height to 0.\";\r\n\r\noneTimeWarning.geometryZIndex =\r\n \"Entity geometry with zIndex are unsupported when height or extrudedHeight are defined. zIndex will be ignored\";\r\n\r\noneTimeWarning.geometryHeightReference =\r\n \"Entity corridor, ellipse, polygon or rectangle with heightReference must also have a defined height. heightReference will be ignored\";\r\noneTimeWarning.geometryExtrudedHeightReference =\r\n \"Entity corridor, ellipse, polygon or rectangle with extrudedHeightReference must also have a defined extrudedHeight. extrudedHeightReference will be ignored\";\r\nexport default oneTimeWarning;\r\n","import Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport CornerType from \"./CornerType.js\";\r\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport PolylinePipeline from \"./PolylinePipeline.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport Transforms from \"./Transforms.js\";\r\nimport oneTimeWarning from \"../Core/oneTimeWarning.js\";\r\n\r\nconst scratch2Array = [new Cartesian3(), new Cartesian3()];\r\nconst scratchCartesian1 = new Cartesian3();\r\nconst scratchCartesian2 = new Cartesian3();\r\nconst scratchCartesian3 = new Cartesian3();\r\nconst scratchCartesian4 = new Cartesian3();\r\nconst scratchCartesian5 = new Cartesian3();\r\nconst scratchCartesian6 = new Cartesian3();\r\nconst scratchCartesian7 = new Cartesian3();\r\nconst scratchCartesian8 = new Cartesian3();\r\nconst scratchCartesian9 = new Cartesian3();\r\n\r\nconst scratch1 = new Cartesian3();\r\nconst scratch2 = new Cartesian3();\r\n\r\n/**\r\n * @private\r\n */\r\nconst PolylineVolumeGeometryLibrary = {};\r\n\r\nlet cartographic = new Cartographic();\r\nfunction scaleToSurface(positions, ellipsoid) {\r\n const heights = new Array(positions.length);\r\n for (let i = 0; i < positions.length; i++) {\r\n const pos = positions[i];\r\n cartographic = ellipsoid.cartesianToCartographic(pos, cartographic);\r\n heights[i] = cartographic.height;\r\n positions[i] = ellipsoid.scaleToGeodeticSurface(pos, pos);\r\n }\r\n return heights;\r\n}\r\n\r\nfunction subdivideHeights(points, h0, h1, granularity) {\r\n const p0 = points[0];\r\n const p1 = points[1];\r\n const angleBetween = Cartesian3.angleBetween(p0, p1);\r\n const numPoints = Math.ceil(angleBetween / granularity);\r\n const heights = new Array(numPoints);\r\n let i;\r\n if (h0 === h1) {\r\n for (i = 0; i < numPoints; i++) {\r\n heights[i] = h0;\r\n }\r\n heights.push(h1);\r\n return heights;\r\n }\r\n\r\n const dHeight = h1 - h0;\r\n const heightPerVertex = dHeight / numPoints;\r\n\r\n for (i = 1; i < numPoints; i++) {\r\n const h = h0 + i * heightPerVertex;\r\n heights[i] = h;\r\n }\r\n\r\n heights[0] = h0;\r\n heights.push(h1);\r\n return heights;\r\n}\r\n\r\nconst nextScratch = new Cartesian3();\r\nconst prevScratch = new Cartesian3();\r\n\r\nfunction computeRotationAngle(start, end, position, ellipsoid) {\r\n const tangentPlane = new EllipsoidTangentPlane(position, ellipsoid);\r\n const next = tangentPlane.projectPointOntoPlane(\r\n Cartesian3.add(position, start, nextScratch),\r\n nextScratch\r\n );\r\n const prev = tangentPlane.projectPointOntoPlane(\r\n Cartesian3.add(position, end, prevScratch),\r\n prevScratch\r\n );\r\n const angle = Cartesian2.angleBetween(next, prev);\r\n\r\n return prev.x * next.y - prev.y * next.x >= 0.0 ? -angle : angle;\r\n}\r\n\r\nconst negativeX = new Cartesian3(-1, 0, 0);\r\nlet transform = new Matrix4();\r\nconst translation = new Matrix4();\r\nlet rotationZ = new Matrix3();\r\nconst scaleMatrix = Matrix3.IDENTITY.clone();\r\nconst westScratch = new Cartesian3();\r\nconst finalPosScratch = new Cartesian4();\r\nconst heightCartesian = new Cartesian3();\r\nfunction addPosition(\r\n center,\r\n left,\r\n shape,\r\n finalPositions,\r\n ellipsoid,\r\n height,\r\n xScalar,\r\n repeat\r\n) {\r\n let west = westScratch;\r\n let finalPosition = finalPosScratch;\r\n transform = Transforms.eastNorthUpToFixedFrame(center, ellipsoid, transform);\r\n\r\n west = Matrix4.multiplyByPointAsVector(transform, negativeX, west);\r\n west = Cartesian3.normalize(west, west);\r\n const angle = computeRotationAngle(west, left, center, ellipsoid);\r\n rotationZ = Matrix3.fromRotationZ(angle, rotationZ);\r\n\r\n heightCartesian.z = height;\r\n transform = Matrix4.multiplyTransformation(\r\n transform,\r\n Matrix4.fromRotationTranslation(rotationZ, heightCartesian, translation),\r\n transform\r\n );\r\n const scale = scaleMatrix;\r\n scale[0] = xScalar;\r\n\r\n for (let j = 0; j < repeat; j++) {\r\n for (let i = 0; i < shape.length; i += 3) {\r\n finalPosition = Cartesian3.fromArray(shape, i, finalPosition);\r\n finalPosition = Matrix3.multiplyByVector(\r\n scale,\r\n finalPosition,\r\n finalPosition\r\n );\r\n finalPosition = Matrix4.multiplyByPoint(\r\n transform,\r\n finalPosition,\r\n finalPosition\r\n );\r\n finalPositions.push(finalPosition.x, finalPosition.y, finalPosition.z);\r\n }\r\n }\r\n\r\n return finalPositions;\r\n}\r\n\r\nconst centerScratch = new Cartesian3();\r\nfunction addPositions(\r\n centers,\r\n left,\r\n shape,\r\n finalPositions,\r\n ellipsoid,\r\n heights,\r\n xScalar\r\n) {\r\n for (let i = 0; i < centers.length; i += 3) {\r\n const center = Cartesian3.fromArray(centers, i, centerScratch);\r\n finalPositions = addPosition(\r\n center,\r\n left,\r\n shape,\r\n finalPositions,\r\n ellipsoid,\r\n heights[i / 3],\r\n xScalar,\r\n 1\r\n );\r\n }\r\n return finalPositions;\r\n}\r\n\r\nfunction convertShapeTo3DDuplicate(shape2D, boundingRectangle) {\r\n //orientate 2D shape to XZ plane center at (0, 0, 0), duplicate points\r\n const length = shape2D.length;\r\n const shape = new Array(length * 6);\r\n let index = 0;\r\n const xOffset = boundingRectangle.x + boundingRectangle.width / 2;\r\n const yOffset = boundingRectangle.y + boundingRectangle.height / 2;\r\n\r\n let point = shape2D[0];\r\n shape[index++] = point.x - xOffset;\r\n shape[index++] = 0.0;\r\n shape[index++] = point.y - yOffset;\r\n for (let i = 1; i < length; i++) {\r\n point = shape2D[i];\r\n const x = point.x - xOffset;\r\n const z = point.y - yOffset;\r\n shape[index++] = x;\r\n shape[index++] = 0.0;\r\n shape[index++] = z;\r\n\r\n shape[index++] = x;\r\n shape[index++] = 0.0;\r\n shape[index++] = z;\r\n }\r\n point = shape2D[0];\r\n shape[index++] = point.x - xOffset;\r\n shape[index++] = 0.0;\r\n shape[index++] = point.y - yOffset;\r\n\r\n return shape;\r\n}\r\n\r\nfunction convertShapeTo3D(shape2D, boundingRectangle) {\r\n //orientate 2D shape to XZ plane center at (0, 0, 0)\r\n const length = shape2D.length;\r\n const shape = new Array(length * 3);\r\n let index = 0;\r\n const xOffset = boundingRectangle.x + boundingRectangle.width / 2;\r\n const yOffset = boundingRectangle.y + boundingRectangle.height / 2;\r\n\r\n for (let i = 0; i < length; i++) {\r\n shape[index++] = shape2D[i].x - xOffset;\r\n shape[index++] = 0;\r\n shape[index++] = shape2D[i].y - yOffset;\r\n }\r\n\r\n return shape;\r\n}\r\n\r\nconst quaterion = new Quaternion();\r\nconst startPointScratch = new Cartesian3();\r\nconst rotMatrix = new Matrix3();\r\nfunction computeRoundCorner(\r\n pivot,\r\n startPoint,\r\n endPoint,\r\n cornerType,\r\n leftIsOutside,\r\n ellipsoid,\r\n finalPositions,\r\n shape,\r\n height,\r\n duplicatePoints\r\n) {\r\n const angle = Cartesian3.angleBetween(\r\n Cartesian3.subtract(startPoint, pivot, scratch1),\r\n Cartesian3.subtract(endPoint, pivot, scratch2)\r\n );\r\n const granularity =\r\n cornerType === CornerType.BEVELED\r\n ? 0\r\n : Math.ceil(angle / CesiumMath.toRadians(5));\r\n\r\n let m;\r\n if (leftIsOutside) {\r\n m = Matrix3.fromQuaternion(\r\n Quaternion.fromAxisAngle(\r\n Cartesian3.negate(pivot, scratch1),\r\n angle / (granularity + 1),\r\n quaterion\r\n ),\r\n rotMatrix\r\n );\r\n } else {\r\n m = Matrix3.fromQuaternion(\r\n Quaternion.fromAxisAngle(pivot, angle / (granularity + 1), quaterion),\r\n rotMatrix\r\n );\r\n }\r\n\r\n let left;\r\n let surfacePoint;\r\n startPoint = Cartesian3.clone(startPoint, startPointScratch);\r\n if (granularity > 0) {\r\n const repeat = duplicatePoints ? 2 : 1;\r\n for (let i = 0; i < granularity; i++) {\r\n startPoint = Matrix3.multiplyByVector(m, startPoint, startPoint);\r\n left = Cartesian3.subtract(startPoint, pivot, scratch1);\r\n left = Cartesian3.normalize(left, left);\r\n if (!leftIsOutside) {\r\n left = Cartesian3.negate(left, left);\r\n }\r\n surfacePoint = ellipsoid.scaleToGeodeticSurface(startPoint, scratch2);\r\n finalPositions = addPosition(\r\n surfacePoint,\r\n left,\r\n shape,\r\n finalPositions,\r\n ellipsoid,\r\n height,\r\n 1,\r\n repeat\r\n );\r\n }\r\n } else {\r\n left = Cartesian3.subtract(startPoint, pivot, scratch1);\r\n left = Cartesian3.normalize(left, left);\r\n if (!leftIsOutside) {\r\n left = Cartesian3.negate(left, left);\r\n }\r\n surfacePoint = ellipsoid.scaleToGeodeticSurface(startPoint, scratch2);\r\n finalPositions = addPosition(\r\n surfacePoint,\r\n left,\r\n shape,\r\n finalPositions,\r\n ellipsoid,\r\n height,\r\n 1,\r\n 1\r\n );\r\n\r\n endPoint = Cartesian3.clone(endPoint, startPointScratch);\r\n left = Cartesian3.subtract(endPoint, pivot, scratch1);\r\n left = Cartesian3.normalize(left, left);\r\n if (!leftIsOutside) {\r\n left = Cartesian3.negate(left, left);\r\n }\r\n surfacePoint = ellipsoid.scaleToGeodeticSurface(endPoint, scratch2);\r\n finalPositions = addPosition(\r\n surfacePoint,\r\n left,\r\n shape,\r\n finalPositions,\r\n ellipsoid,\r\n height,\r\n 1,\r\n 1\r\n );\r\n }\r\n\r\n return finalPositions;\r\n}\r\n\r\nPolylineVolumeGeometryLibrary.removeDuplicatesFromShape = function (\r\n shapePositions\r\n) {\r\n const length = shapePositions.length;\r\n const cleanedPositions = [];\r\n for (let i0 = length - 1, i1 = 0; i1 < length; i0 = i1++) {\r\n const v0 = shapePositions[i0];\r\n const v1 = shapePositions[i1];\r\n\r\n if (!Cartesian2.equals(v0, v1)) {\r\n cleanedPositions.push(v1); // Shallow copy!\r\n }\r\n }\r\n\r\n return cleanedPositions;\r\n};\r\n\r\nPolylineVolumeGeometryLibrary.angleIsGreaterThanPi = function (\r\n forward,\r\n backward,\r\n position,\r\n ellipsoid\r\n) {\r\n const tangentPlane = new EllipsoidTangentPlane(position, ellipsoid);\r\n const next = tangentPlane.projectPointOntoPlane(\r\n Cartesian3.add(position, forward, nextScratch),\r\n nextScratch\r\n );\r\n const prev = tangentPlane.projectPointOntoPlane(\r\n Cartesian3.add(position, backward, prevScratch),\r\n prevScratch\r\n );\r\n\r\n return prev.x * next.y - prev.y * next.x >= 0.0;\r\n};\r\n\r\nconst scratchForwardProjection = new Cartesian3();\r\nconst scratchBackwardProjection = new Cartesian3();\r\n\r\nPolylineVolumeGeometryLibrary.computePositions = function (\r\n positions,\r\n shape2D,\r\n boundingRectangle,\r\n geometry,\r\n duplicatePoints\r\n) {\r\n const ellipsoid = geometry._ellipsoid;\r\n const heights = scaleToSurface(positions, ellipsoid);\r\n const granularity = geometry._granularity;\r\n const cornerType = geometry._cornerType;\r\n const shapeForSides = duplicatePoints\r\n ? convertShapeTo3DDuplicate(shape2D, boundingRectangle)\r\n : convertShapeTo3D(shape2D, boundingRectangle);\r\n const shapeForEnds = duplicatePoints\r\n ? convertShapeTo3D(shape2D, boundingRectangle)\r\n : undefined;\r\n const heightOffset = boundingRectangle.height / 2;\r\n const width = boundingRectangle.width / 2;\r\n let length = positions.length;\r\n let finalPositions = [];\r\n let ends = duplicatePoints ? [] : undefined;\r\n\r\n let forward = scratchCartesian1;\r\n let backward = scratchCartesian2;\r\n let cornerDirection = scratchCartesian3;\r\n let surfaceNormal = scratchCartesian4;\r\n let pivot = scratchCartesian5;\r\n let start = scratchCartesian6;\r\n let end = scratchCartesian7;\r\n let left = scratchCartesian8;\r\n let previousPosition = scratchCartesian9;\r\n\r\n let position = positions[0];\r\n let nextPosition = positions[1];\r\n surfaceNormal = ellipsoid.geodeticSurfaceNormal(position, surfaceNormal);\r\n forward = Cartesian3.subtract(nextPosition, position, forward);\r\n forward = Cartesian3.normalize(forward, forward);\r\n left = Cartesian3.cross(surfaceNormal, forward, left);\r\n left = Cartesian3.normalize(left, left);\r\n let h0 = heights[0];\r\n let h1 = heights[1];\r\n if (duplicatePoints) {\r\n ends = addPosition(\r\n position,\r\n left,\r\n shapeForEnds,\r\n ends,\r\n ellipsoid,\r\n h0 + heightOffset,\r\n 1,\r\n 1\r\n );\r\n }\r\n previousPosition = Cartesian3.clone(position, previousPosition);\r\n position = nextPosition;\r\n backward = Cartesian3.negate(forward, backward);\r\n let subdividedHeights;\r\n let subdividedPositions;\r\n for (let i = 1; i < length - 1; i++) {\r\n const repeat = duplicatePoints ? 2 : 1;\r\n nextPosition = positions[i + 1];\r\n if (position.equals(nextPosition)) {\r\n oneTimeWarning(\r\n \"Positions are too close and are considered equivalent with rounding error.\"\r\n );\r\n continue;\r\n }\r\n forward = Cartesian3.subtract(nextPosition, position, forward);\r\n forward = Cartesian3.normalize(forward, forward);\r\n cornerDirection = Cartesian3.add(forward, backward, cornerDirection);\r\n cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\r\n surfaceNormal = ellipsoid.geodeticSurfaceNormal(position, surfaceNormal);\r\n\r\n const forwardProjection = Cartesian3.multiplyByScalar(\r\n surfaceNormal,\r\n Cartesian3.dot(forward, surfaceNormal),\r\n scratchForwardProjection\r\n );\r\n Cartesian3.subtract(forward, forwardProjection, forwardProjection);\r\n Cartesian3.normalize(forwardProjection, forwardProjection);\r\n\r\n const backwardProjection = Cartesian3.multiplyByScalar(\r\n surfaceNormal,\r\n Cartesian3.dot(backward, surfaceNormal),\r\n scratchBackwardProjection\r\n );\r\n Cartesian3.subtract(backward, backwardProjection, backwardProjection);\r\n Cartesian3.normalize(backwardProjection, backwardProjection);\r\n\r\n const doCorner = !CesiumMath.equalsEpsilon(\r\n Math.abs(Cartesian3.dot(forwardProjection, backwardProjection)),\r\n 1.0,\r\n CesiumMath.EPSILON7\r\n );\r\n\r\n if (doCorner) {\r\n cornerDirection = Cartesian3.cross(\r\n cornerDirection,\r\n surfaceNormal,\r\n cornerDirection\r\n );\r\n cornerDirection = Cartesian3.cross(\r\n surfaceNormal,\r\n cornerDirection,\r\n cornerDirection\r\n );\r\n cornerDirection = Cartesian3.normalize(cornerDirection, cornerDirection);\r\n const scalar =\r\n 1 /\r\n Math.max(\r\n 0.25,\r\n Cartesian3.magnitude(\r\n Cartesian3.cross(cornerDirection, backward, scratch1)\r\n )\r\n );\r\n const leftIsOutside = PolylineVolumeGeometryLibrary.angleIsGreaterThanPi(\r\n forward,\r\n backward,\r\n position,\r\n ellipsoid\r\n );\r\n if (leftIsOutside) {\r\n pivot = Cartesian3.add(\r\n position,\r\n Cartesian3.multiplyByScalar(\r\n cornerDirection,\r\n scalar * width,\r\n cornerDirection\r\n ),\r\n pivot\r\n );\r\n start = Cartesian3.add(\r\n pivot,\r\n Cartesian3.multiplyByScalar(left, width, start),\r\n start\r\n );\r\n scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\r\n scratch2Array[1] = Cartesian3.clone(start, scratch2Array[1]);\r\n subdividedHeights = subdivideHeights(\r\n scratch2Array,\r\n h0 + heightOffset,\r\n h1 + heightOffset,\r\n granularity\r\n );\r\n subdividedPositions = PolylinePipeline.generateArc({\r\n positions: scratch2Array,\r\n granularity: granularity,\r\n ellipsoid: ellipsoid,\r\n });\r\n finalPositions = addPositions(\r\n subdividedPositions,\r\n left,\r\n shapeForSides,\r\n finalPositions,\r\n ellipsoid,\r\n subdividedHeights,\r\n 1\r\n );\r\n left = Cartesian3.cross(surfaceNormal, forward, left);\r\n left = Cartesian3.normalize(left, left);\r\n end = Cartesian3.add(\r\n pivot,\r\n Cartesian3.multiplyByScalar(left, width, end),\r\n end\r\n );\r\n if (\r\n cornerType === CornerType.ROUNDED ||\r\n cornerType === CornerType.BEVELED\r\n ) {\r\n computeRoundCorner(\r\n pivot,\r\n start,\r\n end,\r\n cornerType,\r\n leftIsOutside,\r\n ellipsoid,\r\n finalPositions,\r\n shapeForSides,\r\n h1 + heightOffset,\r\n duplicatePoints\r\n );\r\n } else {\r\n cornerDirection = Cartesian3.negate(cornerDirection, cornerDirection);\r\n finalPositions = addPosition(\r\n position,\r\n cornerDirection,\r\n shapeForSides,\r\n finalPositions,\r\n ellipsoid,\r\n h1 + heightOffset,\r\n scalar,\r\n repeat\r\n );\r\n }\r\n previousPosition = Cartesian3.clone(end, previousPosition);\r\n } else {\r\n pivot = Cartesian3.add(\r\n position,\r\n Cartesian3.multiplyByScalar(\r\n cornerDirection,\r\n scalar * width,\r\n cornerDirection\r\n ),\r\n pivot\r\n );\r\n start = Cartesian3.add(\r\n pivot,\r\n Cartesian3.multiplyByScalar(left, -width, start),\r\n start\r\n );\r\n scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\r\n scratch2Array[1] = Cartesian3.clone(start, scratch2Array[1]);\r\n subdividedHeights = subdivideHeights(\r\n scratch2Array,\r\n h0 + heightOffset,\r\n h1 + heightOffset,\r\n granularity\r\n );\r\n subdividedPositions = PolylinePipeline.generateArc({\r\n positions: scratch2Array,\r\n granularity: granularity,\r\n ellipsoid: ellipsoid,\r\n });\r\n finalPositions = addPositions(\r\n subdividedPositions,\r\n left,\r\n shapeForSides,\r\n finalPositions,\r\n ellipsoid,\r\n subdividedHeights,\r\n 1\r\n );\r\n left = Cartesian3.cross(surfaceNormal, forward, left);\r\n left = Cartesian3.normalize(left, left);\r\n end = Cartesian3.add(\r\n pivot,\r\n Cartesian3.multiplyByScalar(left, -width, end),\r\n end\r\n );\r\n if (\r\n cornerType === CornerType.ROUNDED ||\r\n cornerType === CornerType.BEVELED\r\n ) {\r\n computeRoundCorner(\r\n pivot,\r\n start,\r\n end,\r\n cornerType,\r\n leftIsOutside,\r\n ellipsoid,\r\n finalPositions,\r\n shapeForSides,\r\n h1 + heightOffset,\r\n duplicatePoints\r\n );\r\n } else {\r\n finalPositions = addPosition(\r\n position,\r\n cornerDirection,\r\n shapeForSides,\r\n finalPositions,\r\n ellipsoid,\r\n h1 + heightOffset,\r\n scalar,\r\n repeat\r\n );\r\n }\r\n previousPosition = Cartesian3.clone(end, previousPosition);\r\n }\r\n backward = Cartesian3.negate(forward, backward);\r\n } else {\r\n finalPositions = addPosition(\r\n previousPosition,\r\n left,\r\n shapeForSides,\r\n finalPositions,\r\n ellipsoid,\r\n h0 + heightOffset,\r\n 1,\r\n 1\r\n );\r\n previousPosition = position;\r\n }\r\n h0 = h1;\r\n h1 = heights[i + 1];\r\n position = nextPosition;\r\n }\r\n\r\n scratch2Array[0] = Cartesian3.clone(previousPosition, scratch2Array[0]);\r\n scratch2Array[1] = Cartesian3.clone(position, scratch2Array[1]);\r\n subdividedHeights = subdivideHeights(\r\n scratch2Array,\r\n h0 + heightOffset,\r\n h1 + heightOffset,\r\n granularity\r\n );\r\n subdividedPositions = PolylinePipeline.generateArc({\r\n positions: scratch2Array,\r\n granularity: granularity,\r\n ellipsoid: ellipsoid,\r\n });\r\n finalPositions = addPositions(\r\n subdividedPositions,\r\n left,\r\n shapeForSides,\r\n finalPositions,\r\n ellipsoid,\r\n subdividedHeights,\r\n 1\r\n );\r\n if (duplicatePoints) {\r\n ends = addPosition(\r\n position,\r\n left,\r\n shapeForEnds,\r\n ends,\r\n ellipsoid,\r\n h1 + heightOffset,\r\n 1,\r\n 1\r\n );\r\n }\r\n\r\n length = finalPositions.length;\r\n const posLength = duplicatePoints ? length + ends.length : length;\r\n const combinedPositions = new Float64Array(posLength);\r\n combinedPositions.set(finalPositions);\r\n if (duplicatePoints) {\r\n combinedPositions.set(ends, length);\r\n }\r\n\r\n return combinedPositions;\r\n};\r\nexport default PolylineVolumeGeometryLibrary;\r\n"],"names":["defined","DeveloperError","defaultValue","Cartesian3","Cartographic","EllipsoidTangentPlane","Cartesian2","Matrix4","Matrix3","Cartesian4","Transforms","Quaternion","CornerType","CesiumMath","PolylinePipeline"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/PrimitivePipeline-f6d2b3b0.js b/debug/cesium/Workers/PrimitivePipeline-f6d2b3b0.js deleted file mode 100644 index 342e5e8..0000000 --- a/debug/cesium/Workers/PrimitivePipeline-f6d2b3b0.js +++ /dev/null @@ -1,992 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './Check-d10e5f2e', './Matrix3-f22b0303', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './Matrix2-036c77dd', './WebMercatorProjection-306f7acc'], (function (exports, Transforms, ComponentDatatype, defaultValue, Check, Matrix3, GeometryAttribute, GeometryAttributes, GeometryPipeline, IndexDatatype, Matrix2, WebMercatorProjection) { 'use strict'; - - /** - * Value and type information for per-instance geometry attribute that determines the geometry instance offset - * - * @alias OffsetGeometryInstanceAttribute - * @constructor - * - * @param {Number} [x=0] The x translation - * @param {Number} [y=0] The y translation - * @param {Number} [z=0] The z translation - * - * @private - * - * @see GeometryInstance - * @see GeometryInstanceAttribute - */ - function OffsetGeometryInstanceAttribute(x, y, z) { - x = defaultValue.defaultValue(x, 0); - y = defaultValue.defaultValue(y, 0); - z = defaultValue.defaultValue(z, 0); - - /** - * The values for the attributes stored in a typed array. - * - * @type Float32Array - */ - this.value = new Float32Array([x, y, z]); - } - - Object.defineProperties(OffsetGeometryInstanceAttribute.prototype, { - /** - * The datatype of each component in the attribute, e.g., individual elements in - * {@link OffsetGeometryInstanceAttribute#value}. - * - * @memberof OffsetGeometryInstanceAttribute.prototype - * - * @type {ComponentDatatype} - * @readonly - * - * @default {@link ComponentDatatype.FLOAT} - */ - componentDatatype: { - get: function () { - return ComponentDatatype.ComponentDatatype.FLOAT; - }, - }, - - /** - * The number of components in the attributes, i.e., {@link OffsetGeometryInstanceAttribute#value}. - * - * @memberof OffsetGeometryInstanceAttribute.prototype - * - * @type {Number} - * @readonly - * - * @default 3 - */ - componentsPerAttribute: { - get: function () { - return 3; - }, - }, - - /** - * When true and componentDatatype is an integer format, - * indicate that the components should be mapped to the range [0, 1] (unsigned) - * or [-1, 1] (signed) when they are accessed as floating-point for rendering. - * - * @memberof OffsetGeometryInstanceAttribute.prototype - * - * @type {Boolean} - * @readonly - * - * @default false - */ - normalize: { - get: function () { - return false; - }, - }, - }); - - /** - * Creates a new {@link OffsetGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}. - * - * @param {Cartesian3} offset The cartesian offset - * @returns {OffsetGeometryInstanceAttribute} The new {@link OffsetGeometryInstanceAttribute} instance. - */ - OffsetGeometryInstanceAttribute.fromCartesian3 = function (offset) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("offset", offset); - //>>includeEnd('debug'); - - return new OffsetGeometryInstanceAttribute(offset.x, offset.y, offset.z); - }; - - /** - * Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute. - * - * @param {Cartesian3} offset The cartesian offset - * @param {Float32Array} [result] The array to store the result in, if undefined a new instance will be created. - * @returns {Float32Array} The modified result parameter or a new instance if result was undefined. - * - * @example - * const attributes = primitive.getGeometryInstanceAttributes('an id'); - * attributes.modelMatrix = Cesium.OffsetGeometryInstanceAttribute.toValue(modelMatrix, attributes.modelMatrix); - */ - OffsetGeometryInstanceAttribute.toValue = function (offset, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("offset", offset); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Float32Array([offset.x, offset.y, offset.z]); - } - - result[0] = offset.x; - result[1] = offset.y; - result[2] = offset.z; - return result; - }; - - function transformToWorldCoordinates( - instances, - primitiveModelMatrix, - scene3DOnly - ) { - let toWorld = !scene3DOnly; - const length = instances.length; - let i; - - if (!toWorld && length > 1) { - const modelMatrix = instances[0].modelMatrix; - - for (i = 1; i < length; ++i) { - if (!Matrix2.Matrix4.equals(modelMatrix, instances[i].modelMatrix)) { - toWorld = true; - break; - } - } - } - - if (toWorld) { - for (i = 0; i < length; ++i) { - if (defaultValue.defined(instances[i].geometry)) { - GeometryPipeline.GeometryPipeline.transformToWorldCoordinates(instances[i]); - } - } - } else { - // Leave geometry in local coordinate system; auto update model-matrix. - Matrix2.Matrix4.multiplyTransformation( - primitiveModelMatrix, - instances[0].modelMatrix, - primitiveModelMatrix - ); - } - } - - function addGeometryBatchId(geometry, batchId) { - const attributes = geometry.attributes; - const positionAttr = attributes.position; - const numberOfComponents = - positionAttr.values.length / positionAttr.componentsPerAttribute; - - attributes.batchId = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 1, - values: new Float32Array(numberOfComponents), - }); - - const values = attributes.batchId.values; - for (let j = 0; j < numberOfComponents; ++j) { - values[j] = batchId; - } - } - - function addBatchIds(instances) { - const length = instances.length; - - for (let i = 0; i < length; ++i) { - const instance = instances[i]; - if (defaultValue.defined(instance.geometry)) { - addGeometryBatchId(instance.geometry, i); - } else if ( - defaultValue.defined(instance.westHemisphereGeometry) && - defaultValue.defined(instance.eastHemisphereGeometry) - ) { - addGeometryBatchId(instance.westHemisphereGeometry, i); - addGeometryBatchId(instance.eastHemisphereGeometry, i); - } - } - } - - function geometryPipeline(parameters) { - const instances = parameters.instances; - const projection = parameters.projection; - const uintIndexSupport = parameters.elementIndexUintSupported; - const scene3DOnly = parameters.scene3DOnly; - const vertexCacheOptimize = parameters.vertexCacheOptimize; - const compressVertices = parameters.compressVertices; - const modelMatrix = parameters.modelMatrix; - - let i; - let geometry; - let primitiveType; - let length = instances.length; - - for (i = 0; i < length; ++i) { - if (defaultValue.defined(instances[i].geometry)) { - primitiveType = instances[i].geometry.primitiveType; - break; - } - } - - //>>includeStart('debug', pragmas.debug); - for (i = 1; i < length; ++i) { - if ( - defaultValue.defined(instances[i].geometry) && - instances[i].geometry.primitiveType !== primitiveType - ) { - throw new Check.DeveloperError( - "All instance geometries must have the same primitiveType." - ); - } - } - //>>includeEnd('debug'); - - // Unify to world coordinates before combining. - transformToWorldCoordinates(instances, modelMatrix, scene3DOnly); - - // Clip to IDL - if (!scene3DOnly) { - for (i = 0; i < length; ++i) { - if (defaultValue.defined(instances[i].geometry)) { - GeometryPipeline.GeometryPipeline.splitLongitude(instances[i]); - } - } - } - - addBatchIds(instances); - - // Optimize for vertex shader caches - if (vertexCacheOptimize) { - for (i = 0; i < length; ++i) { - const instance = instances[i]; - if (defaultValue.defined(instance.geometry)) { - GeometryPipeline.GeometryPipeline.reorderForPostVertexCache(instance.geometry); - GeometryPipeline.GeometryPipeline.reorderForPreVertexCache(instance.geometry); - } else if ( - defaultValue.defined(instance.westHemisphereGeometry) && - defaultValue.defined(instance.eastHemisphereGeometry) - ) { - GeometryPipeline.GeometryPipeline.reorderForPostVertexCache( - instance.westHemisphereGeometry - ); - GeometryPipeline.GeometryPipeline.reorderForPreVertexCache( - instance.westHemisphereGeometry - ); - - GeometryPipeline.GeometryPipeline.reorderForPostVertexCache( - instance.eastHemisphereGeometry - ); - GeometryPipeline.GeometryPipeline.reorderForPreVertexCache( - instance.eastHemisphereGeometry - ); - } - } - } - - // Combine into single geometry for better rendering performance. - let geometries = GeometryPipeline.GeometryPipeline.combineInstances(instances); - - length = geometries.length; - for (i = 0; i < length; ++i) { - geometry = geometries[i]; - - // Split positions for GPU RTE - const attributes = geometry.attributes; - if (!scene3DOnly) { - for (const name in attributes) { - if ( - attributes.hasOwnProperty(name) && - attributes[name].componentDatatype === ComponentDatatype.ComponentDatatype.DOUBLE - ) { - const name3D = `${name}3D`; - const name2D = `${name}2D`; - - // Compute 2D positions - GeometryPipeline.GeometryPipeline.projectTo2D( - geometry, - name, - name3D, - name2D, - projection - ); - if (defaultValue.defined(geometry.boundingSphere) && name === "position") { - geometry.boundingSphereCV = Transforms.BoundingSphere.fromVertices( - geometry.attributes.position2D.values - ); - } - - GeometryPipeline.GeometryPipeline.encodeAttribute( - geometry, - name3D, - `${name3D}High`, - `${name3D}Low` - ); - GeometryPipeline.GeometryPipeline.encodeAttribute( - geometry, - name2D, - `${name2D}High`, - `${name2D}Low` - ); - } - } - } else { - for (const name in attributes) { - if ( - attributes.hasOwnProperty(name) && - attributes[name].componentDatatype === ComponentDatatype.ComponentDatatype.DOUBLE - ) { - GeometryPipeline.GeometryPipeline.encodeAttribute( - geometry, - name, - `${name}3DHigh`, - `${name}3DLow` - ); - } - } - } - - // oct encode and pack normals, compress texture coordinates - if (compressVertices) { - GeometryPipeline.GeometryPipeline.compressVertices(geometry); - } - } - - if (!uintIndexSupport) { - // Break into multiple geometries to fit within unsigned short indices if needed - let splitGeometries = []; - length = geometries.length; - for (i = 0; i < length; ++i) { - geometry = geometries[i]; - splitGeometries = splitGeometries.concat( - GeometryPipeline.GeometryPipeline.fitToUnsignedShortIndices(geometry) - ); - } - - geometries = splitGeometries; - } - - return geometries; - } - - function createPickOffsets(instances, geometryName, geometries, pickOffsets) { - let offset; - let indexCount; - let geometryIndex; - - const offsetIndex = pickOffsets.length - 1; - if (offsetIndex >= 0) { - const pickOffset = pickOffsets[offsetIndex]; - offset = pickOffset.offset + pickOffset.count; - geometryIndex = pickOffset.index; - indexCount = geometries[geometryIndex].indices.length; - } else { - offset = 0; - geometryIndex = 0; - indexCount = geometries[geometryIndex].indices.length; - } - - const length = instances.length; - for (let i = 0; i < length; ++i) { - const instance = instances[i]; - const geometry = instance[geometryName]; - if (!defaultValue.defined(geometry)) { - continue; - } - - const count = geometry.indices.length; - - if (offset + count > indexCount) { - offset = 0; - indexCount = geometries[++geometryIndex].indices.length; - } - - pickOffsets.push({ - index: geometryIndex, - offset: offset, - count: count, - }); - offset += count; - } - } - - function createInstancePickOffsets(instances, geometries) { - const pickOffsets = []; - createPickOffsets(instances, "geometry", geometries, pickOffsets); - createPickOffsets( - instances, - "westHemisphereGeometry", - geometries, - pickOffsets - ); - createPickOffsets( - instances, - "eastHemisphereGeometry", - geometries, - pickOffsets - ); - return pickOffsets; - } - - /** - * @private - */ - const PrimitivePipeline = {}; - - /** - * @private - */ - PrimitivePipeline.combineGeometry = function (parameters) { - let geometries; - let attributeLocations; - const instances = parameters.instances; - const length = instances.length; - let pickOffsets; - - let offsetInstanceExtend; - let hasOffset = false; - if (length > 0) { - geometries = geometryPipeline(parameters); - if (geometries.length > 0) { - attributeLocations = GeometryPipeline.GeometryPipeline.createAttributeLocations( - geometries[0] - ); - if (parameters.createPickOffsets) { - pickOffsets = createInstancePickOffsets(instances, geometries); - } - } - if ( - defaultValue.defined(instances[0].attributes) && - defaultValue.defined(instances[0].attributes.offset) - ) { - offsetInstanceExtend = new Array(length); - hasOffset = true; - } - } - - const boundingSpheres = new Array(length); - const boundingSpheresCV = new Array(length); - for (let i = 0; i < length; ++i) { - const instance = instances[i]; - const geometry = instance.geometry; - if (defaultValue.defined(geometry)) { - boundingSpheres[i] = geometry.boundingSphere; - boundingSpheresCV[i] = geometry.boundingSphereCV; - if (hasOffset) { - offsetInstanceExtend[i] = instance.geometry.offsetAttribute; - } - } - - const eastHemisphereGeometry = instance.eastHemisphereGeometry; - const westHemisphereGeometry = instance.westHemisphereGeometry; - if (defaultValue.defined(eastHemisphereGeometry) && defaultValue.defined(westHemisphereGeometry)) { - if ( - defaultValue.defined(eastHemisphereGeometry.boundingSphere) && - defaultValue.defined(westHemisphereGeometry.boundingSphere) - ) { - boundingSpheres[i] = Transforms.BoundingSphere.union( - eastHemisphereGeometry.boundingSphere, - westHemisphereGeometry.boundingSphere - ); - } - if ( - defaultValue.defined(eastHemisphereGeometry.boundingSphereCV) && - defaultValue.defined(westHemisphereGeometry.boundingSphereCV) - ) { - boundingSpheresCV[i] = Transforms.BoundingSphere.union( - eastHemisphereGeometry.boundingSphereCV, - westHemisphereGeometry.boundingSphereCV - ); - } - } - } - - return { - geometries: geometries, - modelMatrix: parameters.modelMatrix, - attributeLocations: attributeLocations, - pickOffsets: pickOffsets, - offsetInstanceExtend: offsetInstanceExtend, - boundingSpheres: boundingSpheres, - boundingSpheresCV: boundingSpheresCV, - }; - }; - - function transferGeometry(geometry, transferableObjects) { - const attributes = geometry.attributes; - for (const name in attributes) { - if (attributes.hasOwnProperty(name)) { - const attribute = attributes[name]; - - if (defaultValue.defined(attribute) && defaultValue.defined(attribute.values)) { - transferableObjects.push(attribute.values.buffer); - } - } - } - - if (defaultValue.defined(geometry.indices)) { - transferableObjects.push(geometry.indices.buffer); - } - } - - function transferGeometries(geometries, transferableObjects) { - const length = geometries.length; - for (let i = 0; i < length; ++i) { - transferGeometry(geometries[i], transferableObjects); - } - } - - // This function was created by simplifying packCreateGeometryResults into a count-only operation. - function countCreateGeometryResults(items) { - let count = 1; - const length = items.length; - for (let i = 0; i < length; i++) { - const geometry = items[i]; - ++count; - - if (!defaultValue.defined(geometry)) { - continue; - } - - const attributes = geometry.attributes; - - count += - 7 + - 2 * Transforms.BoundingSphere.packedLength + - (defaultValue.defined(geometry.indices) ? geometry.indices.length : 0); - - for (const property in attributes) { - if ( - attributes.hasOwnProperty(property) && - defaultValue.defined(attributes[property]) - ) { - const attribute = attributes[property]; - count += 5 + attribute.values.length; - } - } - } - - return count; - } - - /** - * @private - */ - PrimitivePipeline.packCreateGeometryResults = function ( - items, - transferableObjects - ) { - const packedData = new Float64Array(countCreateGeometryResults(items)); - const stringTable = []; - const stringHash = {}; - - const length = items.length; - let count = 0; - packedData[count++] = length; - for (let i = 0; i < length; i++) { - const geometry = items[i]; - - const validGeometry = defaultValue.defined(geometry); - packedData[count++] = validGeometry ? 1.0 : 0.0; - - if (!validGeometry) { - continue; - } - - packedData[count++] = geometry.primitiveType; - packedData[count++] = geometry.geometryType; - packedData[count++] = defaultValue.defaultValue(geometry.offsetAttribute, -1); - - const validBoundingSphere = defaultValue.defined(geometry.boundingSphere) ? 1.0 : 0.0; - packedData[count++] = validBoundingSphere; - if (validBoundingSphere) { - Transforms.BoundingSphere.pack(geometry.boundingSphere, packedData, count); - } - - count += Transforms.BoundingSphere.packedLength; - - const validBoundingSphereCV = defaultValue.defined(geometry.boundingSphereCV) - ? 1.0 - : 0.0; - packedData[count++] = validBoundingSphereCV; - if (validBoundingSphereCV) { - Transforms.BoundingSphere.pack(geometry.boundingSphereCV, packedData, count); - } - - count += Transforms.BoundingSphere.packedLength; - - const attributes = geometry.attributes; - const attributesToWrite = []; - for (const property in attributes) { - if ( - attributes.hasOwnProperty(property) && - defaultValue.defined(attributes[property]) - ) { - attributesToWrite.push(property); - if (!defaultValue.defined(stringHash[property])) { - stringHash[property] = stringTable.length; - stringTable.push(property); - } - } - } - - packedData[count++] = attributesToWrite.length; - for (let q = 0; q < attributesToWrite.length; q++) { - const name = attributesToWrite[q]; - const attribute = attributes[name]; - packedData[count++] = stringHash[name]; - packedData[count++] = attribute.componentDatatype; - packedData[count++] = attribute.componentsPerAttribute; - packedData[count++] = attribute.normalize ? 1 : 0; - packedData[count++] = attribute.values.length; - packedData.set(attribute.values, count); - count += attribute.values.length; - } - - const indicesLength = defaultValue.defined(geometry.indices) - ? geometry.indices.length - : 0; - packedData[count++] = indicesLength; - - if (indicesLength > 0) { - packedData.set(geometry.indices, count); - count += indicesLength; - } - } - - transferableObjects.push(packedData.buffer); - - return { - stringTable: stringTable, - packedData: packedData, - }; - }; - - /** - * @private - */ - PrimitivePipeline.unpackCreateGeometryResults = function ( - createGeometryResult - ) { - const stringTable = createGeometryResult.stringTable; - const packedGeometry = createGeometryResult.packedData; - - let i; - const result = new Array(packedGeometry[0]); - let resultIndex = 0; - - let packedGeometryIndex = 1; - while (packedGeometryIndex < packedGeometry.length) { - const valid = packedGeometry[packedGeometryIndex++] === 1.0; - if (!valid) { - result[resultIndex++] = undefined; - continue; - } - - const primitiveType = packedGeometry[packedGeometryIndex++]; - const geometryType = packedGeometry[packedGeometryIndex++]; - let offsetAttribute = packedGeometry[packedGeometryIndex++]; - if (offsetAttribute === -1) { - offsetAttribute = undefined; - } - - let boundingSphere; - let boundingSphereCV; - - const validBoundingSphere = packedGeometry[packedGeometryIndex++] === 1.0; - if (validBoundingSphere) { - boundingSphere = Transforms.BoundingSphere.unpack( - packedGeometry, - packedGeometryIndex - ); - } - - packedGeometryIndex += Transforms.BoundingSphere.packedLength; - - const validBoundingSphereCV = packedGeometry[packedGeometryIndex++] === 1.0; - if (validBoundingSphereCV) { - boundingSphereCV = Transforms.BoundingSphere.unpack( - packedGeometry, - packedGeometryIndex - ); - } - - packedGeometryIndex += Transforms.BoundingSphere.packedLength; - - let length; - let values; - let componentsPerAttribute; - const attributes = new GeometryAttributes.GeometryAttributes(); - const numAttributes = packedGeometry[packedGeometryIndex++]; - for (i = 0; i < numAttributes; i++) { - const name = stringTable[packedGeometry[packedGeometryIndex++]]; - const componentDatatype = packedGeometry[packedGeometryIndex++]; - componentsPerAttribute = packedGeometry[packedGeometryIndex++]; - const normalize = packedGeometry[packedGeometryIndex++] !== 0; - - length = packedGeometry[packedGeometryIndex++]; - values = ComponentDatatype.ComponentDatatype.createTypedArray(componentDatatype, length); - for (let valuesIndex = 0; valuesIndex < length; valuesIndex++) { - values[valuesIndex] = packedGeometry[packedGeometryIndex++]; - } - - attributes[name] = new GeometryAttribute.GeometryAttribute({ - componentDatatype: componentDatatype, - componentsPerAttribute: componentsPerAttribute, - normalize: normalize, - values: values, - }); - } - - let indices; - length = packedGeometry[packedGeometryIndex++]; - - if (length > 0) { - const numberOfVertices = values.length / componentsPerAttribute; - indices = IndexDatatype.IndexDatatype.createTypedArray(numberOfVertices, length); - for (i = 0; i < length; i++) { - indices[i] = packedGeometry[packedGeometryIndex++]; - } - } - - result[resultIndex++] = new GeometryAttribute.Geometry({ - primitiveType: primitiveType, - geometryType: geometryType, - boundingSphere: boundingSphere, - boundingSphereCV: boundingSphereCV, - indices: indices, - attributes: attributes, - offsetAttribute: offsetAttribute, - }); - } - - return result; - }; - - function packInstancesForCombine(instances, transferableObjects) { - const length = instances.length; - const packedData = new Float64Array(1 + length * 19); - let count = 0; - packedData[count++] = length; - for (let i = 0; i < length; i++) { - const instance = instances[i]; - Matrix2.Matrix4.pack(instance.modelMatrix, packedData, count); - count += Matrix2.Matrix4.packedLength; - if (defaultValue.defined(instance.attributes) && defaultValue.defined(instance.attributes.offset)) { - const values = instance.attributes.offset.value; - packedData[count] = values[0]; - packedData[count + 1] = values[1]; - packedData[count + 2] = values[2]; - } - count += 3; - } - transferableObjects.push(packedData.buffer); - - return packedData; - } - - function unpackInstancesForCombine(data) { - const packedInstances = data; - const result = new Array(packedInstances[0]); - let count = 0; - - let i = 1; - while (i < packedInstances.length) { - const modelMatrix = Matrix2.Matrix4.unpack(packedInstances, i); - let attributes; - i += Matrix2.Matrix4.packedLength; - if (defaultValue.defined(packedInstances[i])) { - attributes = { - offset: new OffsetGeometryInstanceAttribute( - packedInstances[i], - packedInstances[i + 1], - packedInstances[i + 2] - ), - }; - } - i += 3; - - result[count++] = { - modelMatrix: modelMatrix, - attributes: attributes, - }; - } - - return result; - } - - /** - * @private - */ - PrimitivePipeline.packCombineGeometryParameters = function ( - parameters, - transferableObjects - ) { - const createGeometryResults = parameters.createGeometryResults; - const length = createGeometryResults.length; - - for (let i = 0; i < length; i++) { - transferableObjects.push(createGeometryResults[i].packedData.buffer); - } - - return { - createGeometryResults: parameters.createGeometryResults, - packedInstances: packInstancesForCombine( - parameters.instances, - transferableObjects - ), - ellipsoid: parameters.ellipsoid, - isGeographic: parameters.projection instanceof Transforms.GeographicProjection, - elementIndexUintSupported: parameters.elementIndexUintSupported, - scene3DOnly: parameters.scene3DOnly, - vertexCacheOptimize: parameters.vertexCacheOptimize, - compressVertices: parameters.compressVertices, - modelMatrix: parameters.modelMatrix, - createPickOffsets: parameters.createPickOffsets, - }; - }; - - /** - * @private - */ - PrimitivePipeline.unpackCombineGeometryParameters = function ( - packedParameters - ) { - const instances = unpackInstancesForCombine(packedParameters.packedInstances); - const createGeometryResults = packedParameters.createGeometryResults; - const length = createGeometryResults.length; - let instanceIndex = 0; - - for (let resultIndex = 0; resultIndex < length; resultIndex++) { - const geometries = PrimitivePipeline.unpackCreateGeometryResults( - createGeometryResults[resultIndex] - ); - const geometriesLength = geometries.length; - for ( - let geometryIndex = 0; - geometryIndex < geometriesLength; - geometryIndex++ - ) { - const geometry = geometries[geometryIndex]; - const instance = instances[instanceIndex]; - instance.geometry = geometry; - ++instanceIndex; - } - } - - const ellipsoid = Matrix3.Ellipsoid.clone(packedParameters.ellipsoid); - const projection = packedParameters.isGeographic - ? new Transforms.GeographicProjection(ellipsoid) - : new WebMercatorProjection.WebMercatorProjection(ellipsoid); - - return { - instances: instances, - ellipsoid: ellipsoid, - projection: projection, - elementIndexUintSupported: packedParameters.elementIndexUintSupported, - scene3DOnly: packedParameters.scene3DOnly, - vertexCacheOptimize: packedParameters.vertexCacheOptimize, - compressVertices: packedParameters.compressVertices, - modelMatrix: Matrix2.Matrix4.clone(packedParameters.modelMatrix), - createPickOffsets: packedParameters.createPickOffsets, - }; - }; - - function packBoundingSpheres(boundingSpheres) { - const length = boundingSpheres.length; - const bufferLength = 1 + (Transforms.BoundingSphere.packedLength + 1) * length; - const buffer = new Float32Array(bufferLength); - - let bufferIndex = 0; - buffer[bufferIndex++] = length; - - for (let i = 0; i < length; ++i) { - const bs = boundingSpheres[i]; - if (!defaultValue.defined(bs)) { - buffer[bufferIndex++] = 0.0; - } else { - buffer[bufferIndex++] = 1.0; - Transforms.BoundingSphere.pack(boundingSpheres[i], buffer, bufferIndex); - } - bufferIndex += Transforms.BoundingSphere.packedLength; - } - - return buffer; - } - - function unpackBoundingSpheres(buffer) { - const result = new Array(buffer[0]); - let count = 0; - - let i = 1; - while (i < buffer.length) { - if (buffer[i++] === 1.0) { - result[count] = Transforms.BoundingSphere.unpack(buffer, i); - } - ++count; - i += Transforms.BoundingSphere.packedLength; - } - - return result; - } - - /** - * @private - */ - PrimitivePipeline.packCombineGeometryResults = function ( - results, - transferableObjects - ) { - if (defaultValue.defined(results.geometries)) { - transferGeometries(results.geometries, transferableObjects); - } - - const packedBoundingSpheres = packBoundingSpheres(results.boundingSpheres); - const packedBoundingSpheresCV = packBoundingSpheres( - results.boundingSpheresCV - ); - transferableObjects.push( - packedBoundingSpheres.buffer, - packedBoundingSpheresCV.buffer - ); - - return { - geometries: results.geometries, - attributeLocations: results.attributeLocations, - modelMatrix: results.modelMatrix, - pickOffsets: results.pickOffsets, - offsetInstanceExtend: results.offsetInstanceExtend, - boundingSpheres: packedBoundingSpheres, - boundingSpheresCV: packedBoundingSpheresCV, - }; - }; - - /** - * @private - */ - PrimitivePipeline.unpackCombineGeometryResults = function (packedResult) { - return { - geometries: packedResult.geometries, - attributeLocations: packedResult.attributeLocations, - modelMatrix: packedResult.modelMatrix, - pickOffsets: packedResult.pickOffsets, - offsetInstanceExtend: packedResult.offsetInstanceExtend, - boundingSpheres: unpackBoundingSpheres(packedResult.boundingSpheres), - boundingSpheresCV: unpackBoundingSpheres(packedResult.boundingSpheresCV), - }; - }; - var PrimitivePipeline$1 = PrimitivePipeline; - - exports.PrimitivePipeline = PrimitivePipeline$1; - -})); -//# sourceMappingURL=PrimitivePipeline-f6d2b3b0.js.map diff --git a/debug/cesium/Workers/PrimitivePipeline-f6d2b3b0.js.map b/debug/cesium/Workers/PrimitivePipeline-f6d2b3b0.js.map deleted file mode 100644 index 8573f7e..0000000 --- a/debug/cesium/Workers/PrimitivePipeline-f6d2b3b0.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PrimitivePipeline-f6d2b3b0.js","sources":["../../../Source/Core/OffsetGeometryInstanceAttribute.js","../../../Source/Scene/PrimitivePipeline.js"],"sourcesContent":["import Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\n\r\n/**\r\n * Value and type information for per-instance geometry attribute that determines the geometry instance offset\r\n *\r\n * @alias OffsetGeometryInstanceAttribute\r\n * @constructor\r\n *\r\n * @param {Number} [x=0] The x translation\r\n * @param {Number} [y=0] The y translation\r\n * @param {Number} [z=0] The z translation\r\n *\r\n * @private\r\n *\r\n * @see GeometryInstance\r\n * @see GeometryInstanceAttribute\r\n */\r\nfunction OffsetGeometryInstanceAttribute(x, y, z) {\r\n x = defaultValue(x, 0);\r\n y = defaultValue(y, 0);\r\n z = defaultValue(z, 0);\r\n\r\n /**\r\n * The values for the attributes stored in a typed array.\r\n *\r\n * @type Float32Array\r\n */\r\n this.value = new Float32Array([x, y, z]);\r\n}\r\n\r\nObject.defineProperties(OffsetGeometryInstanceAttribute.prototype, {\r\n /**\r\n * The datatype of each component in the attribute, e.g., individual elements in\r\n * {@link OffsetGeometryInstanceAttribute#value}.\r\n *\r\n * @memberof OffsetGeometryInstanceAttribute.prototype\r\n *\r\n * @type {ComponentDatatype}\r\n * @readonly\r\n *\r\n * @default {@link ComponentDatatype.FLOAT}\r\n */\r\n componentDatatype: {\r\n get: function () {\r\n return ComponentDatatype.FLOAT;\r\n },\r\n },\r\n\r\n /**\r\n * The number of components in the attributes, i.e., {@link OffsetGeometryInstanceAttribute#value}.\r\n *\r\n * @memberof OffsetGeometryInstanceAttribute.prototype\r\n *\r\n * @type {Number}\r\n * @readonly\r\n *\r\n * @default 3\r\n */\r\n componentsPerAttribute: {\r\n get: function () {\r\n return 3;\r\n },\r\n },\r\n\r\n /**\r\n * When true and componentDatatype is an integer format,\r\n * indicate that the components should be mapped to the range [0, 1] (unsigned)\r\n * or [-1, 1] (signed) when they are accessed as floating-point for rendering.\r\n *\r\n * @memberof OffsetGeometryInstanceAttribute.prototype\r\n *\r\n * @type {Boolean}\r\n * @readonly\r\n *\r\n * @default false\r\n */\r\n normalize: {\r\n get: function () {\r\n return false;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Creates a new {@link OffsetGeometryInstanceAttribute} instance given the provided an enabled flag and {@link DistanceDisplayCondition}.\r\n *\r\n * @param {Cartesian3} offset The cartesian offset\r\n * @returns {OffsetGeometryInstanceAttribute} The new {@link OffsetGeometryInstanceAttribute} instance.\r\n */\r\nOffsetGeometryInstanceAttribute.fromCartesian3 = function (offset) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"offset\", offset);\r\n //>>includeEnd('debug');\r\n\r\n return new OffsetGeometryInstanceAttribute(offset.x, offset.y, offset.z);\r\n};\r\n\r\n/**\r\n * Converts a distance display condition to a typed array that can be used to assign a distance display condition attribute.\r\n *\r\n * @param {Cartesian3} offset The cartesian offset\r\n * @param {Float32Array} [result] The array to store the result in, if undefined a new instance will be created.\r\n * @returns {Float32Array} The modified result parameter or a new instance if result was undefined.\r\n *\r\n * @example\r\n * const attributes = primitive.getGeometryInstanceAttributes('an id');\r\n * attributes.modelMatrix = Cesium.OffsetGeometryInstanceAttribute.toValue(modelMatrix, attributes.modelMatrix);\r\n */\r\nOffsetGeometryInstanceAttribute.toValue = function (offset, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"offset\", offset);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Float32Array([offset.x, offset.y, offset.z]);\r\n }\r\n\r\n result[0] = offset.x;\r\n result[1] = offset.y;\r\n result[2] = offset.z;\r\n return result;\r\n};\r\nexport default OffsetGeometryInstanceAttribute;\r\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\r\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\r\nimport defaultValue from \"../Core/defaultValue.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport DeveloperError from \"../Core/DeveloperError.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport GeographicProjection from \"../Core/GeographicProjection.js\";\r\nimport Geometry from \"../Core/Geometry.js\";\r\nimport GeometryAttribute from \"../Core/GeometryAttribute.js\";\r\nimport GeometryAttributes from \"../Core/GeometryAttributes.js\";\r\nimport GeometryPipeline from \"../Core/GeometryPipeline.js\";\r\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\r\nimport Matrix4 from \"../Core/Matrix4.js\";\r\nimport OffsetGeometryInstanceAttribute from \"../Core/OffsetGeometryInstanceAttribute.js\";\r\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\r\n\r\nfunction transformToWorldCoordinates(\r\n instances,\r\n primitiveModelMatrix,\r\n scene3DOnly\r\n) {\r\n let toWorld = !scene3DOnly;\r\n const length = instances.length;\r\n let i;\r\n\r\n if (!toWorld && length > 1) {\r\n const modelMatrix = instances[0].modelMatrix;\r\n\r\n for (i = 1; i < length; ++i) {\r\n if (!Matrix4.equals(modelMatrix, instances[i].modelMatrix)) {\r\n toWorld = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n if (toWorld) {\r\n for (i = 0; i < length; ++i) {\r\n if (defined(instances[i].geometry)) {\r\n GeometryPipeline.transformToWorldCoordinates(instances[i]);\r\n }\r\n }\r\n } else {\r\n // Leave geometry in local coordinate system; auto update model-matrix.\r\n Matrix4.multiplyTransformation(\r\n primitiveModelMatrix,\r\n instances[0].modelMatrix,\r\n primitiveModelMatrix\r\n );\r\n }\r\n}\r\n\r\nfunction addGeometryBatchId(geometry, batchId) {\r\n const attributes = geometry.attributes;\r\n const positionAttr = attributes.position;\r\n const numberOfComponents =\r\n positionAttr.values.length / positionAttr.componentsPerAttribute;\r\n\r\n attributes.batchId = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 1,\r\n values: new Float32Array(numberOfComponents),\r\n });\r\n\r\n const values = attributes.batchId.values;\r\n for (let j = 0; j < numberOfComponents; ++j) {\r\n values[j] = batchId;\r\n }\r\n}\r\n\r\nfunction addBatchIds(instances) {\r\n const length = instances.length;\r\n\r\n for (let i = 0; i < length; ++i) {\r\n const instance = instances[i];\r\n if (defined(instance.geometry)) {\r\n addGeometryBatchId(instance.geometry, i);\r\n } else if (\r\n defined(instance.westHemisphereGeometry) &&\r\n defined(instance.eastHemisphereGeometry)\r\n ) {\r\n addGeometryBatchId(instance.westHemisphereGeometry, i);\r\n addGeometryBatchId(instance.eastHemisphereGeometry, i);\r\n }\r\n }\r\n}\r\n\r\nfunction geometryPipeline(parameters) {\r\n const instances = parameters.instances;\r\n const projection = parameters.projection;\r\n const uintIndexSupport = parameters.elementIndexUintSupported;\r\n const scene3DOnly = parameters.scene3DOnly;\r\n const vertexCacheOptimize = parameters.vertexCacheOptimize;\r\n const compressVertices = parameters.compressVertices;\r\n const modelMatrix = parameters.modelMatrix;\r\n\r\n let i;\r\n let geometry;\r\n let primitiveType;\r\n let length = instances.length;\r\n\r\n for (i = 0; i < length; ++i) {\r\n if (defined(instances[i].geometry)) {\r\n primitiveType = instances[i].geometry.primitiveType;\r\n break;\r\n }\r\n }\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n for (i = 1; i < length; ++i) {\r\n if (\r\n defined(instances[i].geometry) &&\r\n instances[i].geometry.primitiveType !== primitiveType\r\n ) {\r\n throw new DeveloperError(\r\n \"All instance geometries must have the same primitiveType.\"\r\n );\r\n }\r\n }\r\n //>>includeEnd('debug');\r\n\r\n // Unify to world coordinates before combining.\r\n transformToWorldCoordinates(instances, modelMatrix, scene3DOnly);\r\n\r\n // Clip to IDL\r\n if (!scene3DOnly) {\r\n for (i = 0; i < length; ++i) {\r\n if (defined(instances[i].geometry)) {\r\n GeometryPipeline.splitLongitude(instances[i]);\r\n }\r\n }\r\n }\r\n\r\n addBatchIds(instances);\r\n\r\n // Optimize for vertex shader caches\r\n if (vertexCacheOptimize) {\r\n for (i = 0; i < length; ++i) {\r\n const instance = instances[i];\r\n if (defined(instance.geometry)) {\r\n GeometryPipeline.reorderForPostVertexCache(instance.geometry);\r\n GeometryPipeline.reorderForPreVertexCache(instance.geometry);\r\n } else if (\r\n defined(instance.westHemisphereGeometry) &&\r\n defined(instance.eastHemisphereGeometry)\r\n ) {\r\n GeometryPipeline.reorderForPostVertexCache(\r\n instance.westHemisphereGeometry\r\n );\r\n GeometryPipeline.reorderForPreVertexCache(\r\n instance.westHemisphereGeometry\r\n );\r\n\r\n GeometryPipeline.reorderForPostVertexCache(\r\n instance.eastHemisphereGeometry\r\n );\r\n GeometryPipeline.reorderForPreVertexCache(\r\n instance.eastHemisphereGeometry\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Combine into single geometry for better rendering performance.\r\n let geometries = GeometryPipeline.combineInstances(instances);\r\n\r\n length = geometries.length;\r\n for (i = 0; i < length; ++i) {\r\n geometry = geometries[i];\r\n\r\n // Split positions for GPU RTE\r\n const attributes = geometry.attributes;\r\n if (!scene3DOnly) {\r\n for (const name in attributes) {\r\n if (\r\n attributes.hasOwnProperty(name) &&\r\n attributes[name].componentDatatype === ComponentDatatype.DOUBLE\r\n ) {\r\n const name3D = `${name}3D`;\r\n const name2D = `${name}2D`;\r\n\r\n // Compute 2D positions\r\n GeometryPipeline.projectTo2D(\r\n geometry,\r\n name,\r\n name3D,\r\n name2D,\r\n projection\r\n );\r\n if (defined(geometry.boundingSphere) && name === \"position\") {\r\n geometry.boundingSphereCV = BoundingSphere.fromVertices(\r\n geometry.attributes.position2D.values\r\n );\r\n }\r\n\r\n GeometryPipeline.encodeAttribute(\r\n geometry,\r\n name3D,\r\n `${name3D}High`,\r\n `${name3D}Low`\r\n );\r\n GeometryPipeline.encodeAttribute(\r\n geometry,\r\n name2D,\r\n `${name2D}High`,\r\n `${name2D}Low`\r\n );\r\n }\r\n }\r\n } else {\r\n for (const name in attributes) {\r\n if (\r\n attributes.hasOwnProperty(name) &&\r\n attributes[name].componentDatatype === ComponentDatatype.DOUBLE\r\n ) {\r\n GeometryPipeline.encodeAttribute(\r\n geometry,\r\n name,\r\n `${name}3DHigh`,\r\n `${name}3DLow`\r\n );\r\n }\r\n }\r\n }\r\n\r\n // oct encode and pack normals, compress texture coordinates\r\n if (compressVertices) {\r\n GeometryPipeline.compressVertices(geometry);\r\n }\r\n }\r\n\r\n if (!uintIndexSupport) {\r\n // Break into multiple geometries to fit within unsigned short indices if needed\r\n let splitGeometries = [];\r\n length = geometries.length;\r\n for (i = 0; i < length; ++i) {\r\n geometry = geometries[i];\r\n splitGeometries = splitGeometries.concat(\r\n GeometryPipeline.fitToUnsignedShortIndices(geometry)\r\n );\r\n }\r\n\r\n geometries = splitGeometries;\r\n }\r\n\r\n return geometries;\r\n}\r\n\r\nfunction createPickOffsets(instances, geometryName, geometries, pickOffsets) {\r\n let offset;\r\n let indexCount;\r\n let geometryIndex;\r\n\r\n const offsetIndex = pickOffsets.length - 1;\r\n if (offsetIndex >= 0) {\r\n const pickOffset = pickOffsets[offsetIndex];\r\n offset = pickOffset.offset + pickOffset.count;\r\n geometryIndex = pickOffset.index;\r\n indexCount = geometries[geometryIndex].indices.length;\r\n } else {\r\n offset = 0;\r\n geometryIndex = 0;\r\n indexCount = geometries[geometryIndex].indices.length;\r\n }\r\n\r\n const length = instances.length;\r\n for (let i = 0; i < length; ++i) {\r\n const instance = instances[i];\r\n const geometry = instance[geometryName];\r\n if (!defined(geometry)) {\r\n continue;\r\n }\r\n\r\n const count = geometry.indices.length;\r\n\r\n if (offset + count > indexCount) {\r\n offset = 0;\r\n indexCount = geometries[++geometryIndex].indices.length;\r\n }\r\n\r\n pickOffsets.push({\r\n index: geometryIndex,\r\n offset: offset,\r\n count: count,\r\n });\r\n offset += count;\r\n }\r\n}\r\n\r\nfunction createInstancePickOffsets(instances, geometries) {\r\n const pickOffsets = [];\r\n createPickOffsets(instances, \"geometry\", geometries, pickOffsets);\r\n createPickOffsets(\r\n instances,\r\n \"westHemisphereGeometry\",\r\n geometries,\r\n pickOffsets\r\n );\r\n createPickOffsets(\r\n instances,\r\n \"eastHemisphereGeometry\",\r\n geometries,\r\n pickOffsets\r\n );\r\n return pickOffsets;\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nconst PrimitivePipeline = {};\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitivePipeline.combineGeometry = function (parameters) {\r\n let geometries;\r\n let attributeLocations;\r\n const instances = parameters.instances;\r\n const length = instances.length;\r\n let pickOffsets;\r\n\r\n let offsetInstanceExtend;\r\n let hasOffset = false;\r\n if (length > 0) {\r\n geometries = geometryPipeline(parameters);\r\n if (geometries.length > 0) {\r\n attributeLocations = GeometryPipeline.createAttributeLocations(\r\n geometries[0]\r\n );\r\n if (parameters.createPickOffsets) {\r\n pickOffsets = createInstancePickOffsets(instances, geometries);\r\n }\r\n }\r\n if (\r\n defined(instances[0].attributes) &&\r\n defined(instances[0].attributes.offset)\r\n ) {\r\n offsetInstanceExtend = new Array(length);\r\n hasOffset = true;\r\n }\r\n }\r\n\r\n const boundingSpheres = new Array(length);\r\n const boundingSpheresCV = new Array(length);\r\n for (let i = 0; i < length; ++i) {\r\n const instance = instances[i];\r\n const geometry = instance.geometry;\r\n if (defined(geometry)) {\r\n boundingSpheres[i] = geometry.boundingSphere;\r\n boundingSpheresCV[i] = geometry.boundingSphereCV;\r\n if (hasOffset) {\r\n offsetInstanceExtend[i] = instance.geometry.offsetAttribute;\r\n }\r\n }\r\n\r\n const eastHemisphereGeometry = instance.eastHemisphereGeometry;\r\n const westHemisphereGeometry = instance.westHemisphereGeometry;\r\n if (defined(eastHemisphereGeometry) && defined(westHemisphereGeometry)) {\r\n if (\r\n defined(eastHemisphereGeometry.boundingSphere) &&\r\n defined(westHemisphereGeometry.boundingSphere)\r\n ) {\r\n boundingSpheres[i] = BoundingSphere.union(\r\n eastHemisphereGeometry.boundingSphere,\r\n westHemisphereGeometry.boundingSphere\r\n );\r\n }\r\n if (\r\n defined(eastHemisphereGeometry.boundingSphereCV) &&\r\n defined(westHemisphereGeometry.boundingSphereCV)\r\n ) {\r\n boundingSpheresCV[i] = BoundingSphere.union(\r\n eastHemisphereGeometry.boundingSphereCV,\r\n westHemisphereGeometry.boundingSphereCV\r\n );\r\n }\r\n }\r\n }\r\n\r\n return {\r\n geometries: geometries,\r\n modelMatrix: parameters.modelMatrix,\r\n attributeLocations: attributeLocations,\r\n pickOffsets: pickOffsets,\r\n offsetInstanceExtend: offsetInstanceExtend,\r\n boundingSpheres: boundingSpheres,\r\n boundingSpheresCV: boundingSpheresCV,\r\n };\r\n};\r\n\r\nfunction transferGeometry(geometry, transferableObjects) {\r\n const attributes = geometry.attributes;\r\n for (const name in attributes) {\r\n if (attributes.hasOwnProperty(name)) {\r\n const attribute = attributes[name];\r\n\r\n if (defined(attribute) && defined(attribute.values)) {\r\n transferableObjects.push(attribute.values.buffer);\r\n }\r\n }\r\n }\r\n\r\n if (defined(geometry.indices)) {\r\n transferableObjects.push(geometry.indices.buffer);\r\n }\r\n}\r\n\r\nfunction transferGeometries(geometries, transferableObjects) {\r\n const length = geometries.length;\r\n for (let i = 0; i < length; ++i) {\r\n transferGeometry(geometries[i], transferableObjects);\r\n }\r\n}\r\n\r\n// This function was created by simplifying packCreateGeometryResults into a count-only operation.\r\nfunction countCreateGeometryResults(items) {\r\n let count = 1;\r\n const length = items.length;\r\n for (let i = 0; i < length; i++) {\r\n const geometry = items[i];\r\n ++count;\r\n\r\n if (!defined(geometry)) {\r\n continue;\r\n }\r\n\r\n const attributes = geometry.attributes;\r\n\r\n count +=\r\n 7 +\r\n 2 * BoundingSphere.packedLength +\r\n (defined(geometry.indices) ? geometry.indices.length : 0);\r\n\r\n for (const property in attributes) {\r\n if (\r\n attributes.hasOwnProperty(property) &&\r\n defined(attributes[property])\r\n ) {\r\n const attribute = attributes[property];\r\n count += 5 + attribute.values.length;\r\n }\r\n }\r\n }\r\n\r\n return count;\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitivePipeline.packCreateGeometryResults = function (\r\n items,\r\n transferableObjects\r\n) {\r\n const packedData = new Float64Array(countCreateGeometryResults(items));\r\n const stringTable = [];\r\n const stringHash = {};\r\n\r\n const length = items.length;\r\n let count = 0;\r\n packedData[count++] = length;\r\n for (let i = 0; i < length; i++) {\r\n const geometry = items[i];\r\n\r\n const validGeometry = defined(geometry);\r\n packedData[count++] = validGeometry ? 1.0 : 0.0;\r\n\r\n if (!validGeometry) {\r\n continue;\r\n }\r\n\r\n packedData[count++] = geometry.primitiveType;\r\n packedData[count++] = geometry.geometryType;\r\n packedData[count++] = defaultValue(geometry.offsetAttribute, -1);\r\n\r\n const validBoundingSphere = defined(geometry.boundingSphere) ? 1.0 : 0.0;\r\n packedData[count++] = validBoundingSphere;\r\n if (validBoundingSphere) {\r\n BoundingSphere.pack(geometry.boundingSphere, packedData, count);\r\n }\r\n\r\n count += BoundingSphere.packedLength;\r\n\r\n const validBoundingSphereCV = defined(geometry.boundingSphereCV)\r\n ? 1.0\r\n : 0.0;\r\n packedData[count++] = validBoundingSphereCV;\r\n if (validBoundingSphereCV) {\r\n BoundingSphere.pack(geometry.boundingSphereCV, packedData, count);\r\n }\r\n\r\n count += BoundingSphere.packedLength;\r\n\r\n const attributes = geometry.attributes;\r\n const attributesToWrite = [];\r\n for (const property in attributes) {\r\n if (\r\n attributes.hasOwnProperty(property) &&\r\n defined(attributes[property])\r\n ) {\r\n attributesToWrite.push(property);\r\n if (!defined(stringHash[property])) {\r\n stringHash[property] = stringTable.length;\r\n stringTable.push(property);\r\n }\r\n }\r\n }\r\n\r\n packedData[count++] = attributesToWrite.length;\r\n for (let q = 0; q < attributesToWrite.length; q++) {\r\n const name = attributesToWrite[q];\r\n const attribute = attributes[name];\r\n packedData[count++] = stringHash[name];\r\n packedData[count++] = attribute.componentDatatype;\r\n packedData[count++] = attribute.componentsPerAttribute;\r\n packedData[count++] = attribute.normalize ? 1 : 0;\r\n packedData[count++] = attribute.values.length;\r\n packedData.set(attribute.values, count);\r\n count += attribute.values.length;\r\n }\r\n\r\n const indicesLength = defined(geometry.indices)\r\n ? geometry.indices.length\r\n : 0;\r\n packedData[count++] = indicesLength;\r\n\r\n if (indicesLength > 0) {\r\n packedData.set(geometry.indices, count);\r\n count += indicesLength;\r\n }\r\n }\r\n\r\n transferableObjects.push(packedData.buffer);\r\n\r\n return {\r\n stringTable: stringTable,\r\n packedData: packedData,\r\n };\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitivePipeline.unpackCreateGeometryResults = function (\r\n createGeometryResult\r\n) {\r\n const stringTable = createGeometryResult.stringTable;\r\n const packedGeometry = createGeometryResult.packedData;\r\n\r\n let i;\r\n const result = new Array(packedGeometry[0]);\r\n let resultIndex = 0;\r\n\r\n let packedGeometryIndex = 1;\r\n while (packedGeometryIndex < packedGeometry.length) {\r\n const valid = packedGeometry[packedGeometryIndex++] === 1.0;\r\n if (!valid) {\r\n result[resultIndex++] = undefined;\r\n continue;\r\n }\r\n\r\n const primitiveType = packedGeometry[packedGeometryIndex++];\r\n const geometryType = packedGeometry[packedGeometryIndex++];\r\n let offsetAttribute = packedGeometry[packedGeometryIndex++];\r\n if (offsetAttribute === -1) {\r\n offsetAttribute = undefined;\r\n }\r\n\r\n let boundingSphere;\r\n let boundingSphereCV;\r\n\r\n const validBoundingSphere = packedGeometry[packedGeometryIndex++] === 1.0;\r\n if (validBoundingSphere) {\r\n boundingSphere = BoundingSphere.unpack(\r\n packedGeometry,\r\n packedGeometryIndex\r\n );\r\n }\r\n\r\n packedGeometryIndex += BoundingSphere.packedLength;\r\n\r\n const validBoundingSphereCV = packedGeometry[packedGeometryIndex++] === 1.0;\r\n if (validBoundingSphereCV) {\r\n boundingSphereCV = BoundingSphere.unpack(\r\n packedGeometry,\r\n packedGeometryIndex\r\n );\r\n }\r\n\r\n packedGeometryIndex += BoundingSphere.packedLength;\r\n\r\n let length;\r\n let values;\r\n let componentsPerAttribute;\r\n const attributes = new GeometryAttributes();\r\n const numAttributes = packedGeometry[packedGeometryIndex++];\r\n for (i = 0; i < numAttributes; i++) {\r\n const name = stringTable[packedGeometry[packedGeometryIndex++]];\r\n const componentDatatype = packedGeometry[packedGeometryIndex++];\r\n componentsPerAttribute = packedGeometry[packedGeometryIndex++];\r\n const normalize = packedGeometry[packedGeometryIndex++] !== 0;\r\n\r\n length = packedGeometry[packedGeometryIndex++];\r\n values = ComponentDatatype.createTypedArray(componentDatatype, length);\r\n for (let valuesIndex = 0; valuesIndex < length; valuesIndex++) {\r\n values[valuesIndex] = packedGeometry[packedGeometryIndex++];\r\n }\r\n\r\n attributes[name] = new GeometryAttribute({\r\n componentDatatype: componentDatatype,\r\n componentsPerAttribute: componentsPerAttribute,\r\n normalize: normalize,\r\n values: values,\r\n });\r\n }\r\n\r\n let indices;\r\n length = packedGeometry[packedGeometryIndex++];\r\n\r\n if (length > 0) {\r\n const numberOfVertices = values.length / componentsPerAttribute;\r\n indices = IndexDatatype.createTypedArray(numberOfVertices, length);\r\n for (i = 0; i < length; i++) {\r\n indices[i] = packedGeometry[packedGeometryIndex++];\r\n }\r\n }\r\n\r\n result[resultIndex++] = new Geometry({\r\n primitiveType: primitiveType,\r\n geometryType: geometryType,\r\n boundingSphere: boundingSphere,\r\n boundingSphereCV: boundingSphereCV,\r\n indices: indices,\r\n attributes: attributes,\r\n offsetAttribute: offsetAttribute,\r\n });\r\n }\r\n\r\n return result;\r\n};\r\n\r\nfunction packInstancesForCombine(instances, transferableObjects) {\r\n const length = instances.length;\r\n const packedData = new Float64Array(1 + length * 19);\r\n let count = 0;\r\n packedData[count++] = length;\r\n for (let i = 0; i < length; i++) {\r\n const instance = instances[i];\r\n Matrix4.pack(instance.modelMatrix, packedData, count);\r\n count += Matrix4.packedLength;\r\n if (defined(instance.attributes) && defined(instance.attributes.offset)) {\r\n const values = instance.attributes.offset.value;\r\n packedData[count] = values[0];\r\n packedData[count + 1] = values[1];\r\n packedData[count + 2] = values[2];\r\n }\r\n count += 3;\r\n }\r\n transferableObjects.push(packedData.buffer);\r\n\r\n return packedData;\r\n}\r\n\r\nfunction unpackInstancesForCombine(data) {\r\n const packedInstances = data;\r\n const result = new Array(packedInstances[0]);\r\n let count = 0;\r\n\r\n let i = 1;\r\n while (i < packedInstances.length) {\r\n const modelMatrix = Matrix4.unpack(packedInstances, i);\r\n let attributes;\r\n i += Matrix4.packedLength;\r\n if (defined(packedInstances[i])) {\r\n attributes = {\r\n offset: new OffsetGeometryInstanceAttribute(\r\n packedInstances[i],\r\n packedInstances[i + 1],\r\n packedInstances[i + 2]\r\n ),\r\n };\r\n }\r\n i += 3;\r\n\r\n result[count++] = {\r\n modelMatrix: modelMatrix,\r\n attributes: attributes,\r\n };\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitivePipeline.packCombineGeometryParameters = function (\r\n parameters,\r\n transferableObjects\r\n) {\r\n const createGeometryResults = parameters.createGeometryResults;\r\n const length = createGeometryResults.length;\r\n\r\n for (let i = 0; i < length; i++) {\r\n transferableObjects.push(createGeometryResults[i].packedData.buffer);\r\n }\r\n\r\n return {\r\n createGeometryResults: parameters.createGeometryResults,\r\n packedInstances: packInstancesForCombine(\r\n parameters.instances,\r\n transferableObjects\r\n ),\r\n ellipsoid: parameters.ellipsoid,\r\n isGeographic: parameters.projection instanceof GeographicProjection,\r\n elementIndexUintSupported: parameters.elementIndexUintSupported,\r\n scene3DOnly: parameters.scene3DOnly,\r\n vertexCacheOptimize: parameters.vertexCacheOptimize,\r\n compressVertices: parameters.compressVertices,\r\n modelMatrix: parameters.modelMatrix,\r\n createPickOffsets: parameters.createPickOffsets,\r\n };\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitivePipeline.unpackCombineGeometryParameters = function (\r\n packedParameters\r\n) {\r\n const instances = unpackInstancesForCombine(packedParameters.packedInstances);\r\n const createGeometryResults = packedParameters.createGeometryResults;\r\n const length = createGeometryResults.length;\r\n let instanceIndex = 0;\r\n\r\n for (let resultIndex = 0; resultIndex < length; resultIndex++) {\r\n const geometries = PrimitivePipeline.unpackCreateGeometryResults(\r\n createGeometryResults[resultIndex]\r\n );\r\n const geometriesLength = geometries.length;\r\n for (\r\n let geometryIndex = 0;\r\n geometryIndex < geometriesLength;\r\n geometryIndex++\r\n ) {\r\n const geometry = geometries[geometryIndex];\r\n const instance = instances[instanceIndex];\r\n instance.geometry = geometry;\r\n ++instanceIndex;\r\n }\r\n }\r\n\r\n const ellipsoid = Ellipsoid.clone(packedParameters.ellipsoid);\r\n const projection = packedParameters.isGeographic\r\n ? new GeographicProjection(ellipsoid)\r\n : new WebMercatorProjection(ellipsoid);\r\n\r\n return {\r\n instances: instances,\r\n ellipsoid: ellipsoid,\r\n projection: projection,\r\n elementIndexUintSupported: packedParameters.elementIndexUintSupported,\r\n scene3DOnly: packedParameters.scene3DOnly,\r\n vertexCacheOptimize: packedParameters.vertexCacheOptimize,\r\n compressVertices: packedParameters.compressVertices,\r\n modelMatrix: Matrix4.clone(packedParameters.modelMatrix),\r\n createPickOffsets: packedParameters.createPickOffsets,\r\n };\r\n};\r\n\r\nfunction packBoundingSpheres(boundingSpheres) {\r\n const length = boundingSpheres.length;\r\n const bufferLength = 1 + (BoundingSphere.packedLength + 1) * length;\r\n const buffer = new Float32Array(bufferLength);\r\n\r\n let bufferIndex = 0;\r\n buffer[bufferIndex++] = length;\r\n\r\n for (let i = 0; i < length; ++i) {\r\n const bs = boundingSpheres[i];\r\n if (!defined(bs)) {\r\n buffer[bufferIndex++] = 0.0;\r\n } else {\r\n buffer[bufferIndex++] = 1.0;\r\n BoundingSphere.pack(boundingSpheres[i], buffer, bufferIndex);\r\n }\r\n bufferIndex += BoundingSphere.packedLength;\r\n }\r\n\r\n return buffer;\r\n}\r\n\r\nfunction unpackBoundingSpheres(buffer) {\r\n const result = new Array(buffer[0]);\r\n let count = 0;\r\n\r\n let i = 1;\r\n while (i < buffer.length) {\r\n if (buffer[i++] === 1.0) {\r\n result[count] = BoundingSphere.unpack(buffer, i);\r\n }\r\n ++count;\r\n i += BoundingSphere.packedLength;\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitivePipeline.packCombineGeometryResults = function (\r\n results,\r\n transferableObjects\r\n) {\r\n if (defined(results.geometries)) {\r\n transferGeometries(results.geometries, transferableObjects);\r\n }\r\n\r\n const packedBoundingSpheres = packBoundingSpheres(results.boundingSpheres);\r\n const packedBoundingSpheresCV = packBoundingSpheres(\r\n results.boundingSpheresCV\r\n );\r\n transferableObjects.push(\r\n packedBoundingSpheres.buffer,\r\n packedBoundingSpheresCV.buffer\r\n );\r\n\r\n return {\r\n geometries: results.geometries,\r\n attributeLocations: results.attributeLocations,\r\n modelMatrix: results.modelMatrix,\r\n pickOffsets: results.pickOffsets,\r\n offsetInstanceExtend: results.offsetInstanceExtend,\r\n boundingSpheres: packedBoundingSpheres,\r\n boundingSpheresCV: packedBoundingSpheresCV,\r\n };\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPrimitivePipeline.unpackCombineGeometryResults = function (packedResult) {\r\n return {\r\n geometries: packedResult.geometries,\r\n attributeLocations: packedResult.attributeLocations,\r\n modelMatrix: packedResult.modelMatrix,\r\n pickOffsets: packedResult.pickOffsets,\r\n offsetInstanceExtend: packedResult.offsetInstanceExtend,\r\n boundingSpheres: unpackBoundingSpheres(packedResult.boundingSpheres),\r\n boundingSpheresCV: unpackBoundingSpheres(packedResult.boundingSpheresCV),\r\n };\r\n};\r\nexport default PrimitivePipeline;\r\n"],"names":["defaultValue","ComponentDatatype","Check","defined","Matrix4","GeometryPipeline","GeometryAttribute","DeveloperError","BoundingSphere","GeometryAttributes","IndexDatatype","Geometry","GeographicProjection","Ellipsoid","WebMercatorProjection"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/RectangleGeometryLibrary-94f83a5a.js b/debug/cesium/Workers/RectangleGeometryLibrary-94f83a5a.js deleted file mode 100644 index 32807ce..0000000 --- a/debug/cesium/Workers/RectangleGeometryLibrary-94f83a5a.js +++ /dev/null @@ -1,306 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './defaultValue-0ab18f7d', './Check-d10e5f2e', './Transforms-11fb6b0a', './Math-9be8b918', './Matrix2-036c77dd'], (function (exports, Matrix3, defaultValue, Check, Transforms, Math$1, Matrix2) { 'use strict'; - - const cos = Math.cos; - const sin = Math.sin; - const sqrt = Math.sqrt; - - /** - * @private - */ - const RectangleGeometryLibrary = {}; - - /** - * @private - */ - RectangleGeometryLibrary.computePosition = function ( - computedOptions, - ellipsoid, - computeST, - row, - col, - position, - st - ) { - const radiiSquared = ellipsoid.radiiSquared; - const nwCorner = computedOptions.nwCorner; - const rectangle = computedOptions.boundingRectangle; - - let stLatitude = - nwCorner.latitude - - computedOptions.granYCos * row + - col * computedOptions.granXSin; - const cosLatitude = cos(stLatitude); - const nZ = sin(stLatitude); - const kZ = radiiSquared.z * nZ; - - let stLongitude = - nwCorner.longitude + - row * computedOptions.granYSin + - col * computedOptions.granXCos; - const nX = cosLatitude * cos(stLongitude); - const nY = cosLatitude * sin(stLongitude); - - const kX = radiiSquared.x * nX; - const kY = radiiSquared.y * nY; - - const gamma = sqrt(kX * nX + kY * nY + kZ * nZ); - - position.x = kX / gamma; - position.y = kY / gamma; - position.z = kZ / gamma; - - if (computeST) { - const stNwCorner = computedOptions.stNwCorner; - if (defaultValue.defined(stNwCorner)) { - stLatitude = - stNwCorner.latitude - - computedOptions.stGranYCos * row + - col * computedOptions.stGranXSin; - stLongitude = - stNwCorner.longitude + - row * computedOptions.stGranYSin + - col * computedOptions.stGranXCos; - - st.x = (stLongitude - computedOptions.stWest) * computedOptions.lonScalar; - st.y = (stLatitude - computedOptions.stSouth) * computedOptions.latScalar; - } else { - st.x = (stLongitude - rectangle.west) * computedOptions.lonScalar; - st.y = (stLatitude - rectangle.south) * computedOptions.latScalar; - } - } - }; - - const rotationMatrixScratch = new Matrix2.Matrix2(); - let nwCartesian = new Matrix3.Cartesian3(); - const centerScratch = new Matrix3.Cartographic(); - let centerCartesian = new Matrix3.Cartesian3(); - const proj = new Transforms.GeographicProjection(); - - function getRotationOptions( - nwCorner, - rotation, - granularityX, - granularityY, - center, - width, - height - ) { - const cosRotation = Math.cos(rotation); - const granYCos = granularityY * cosRotation; - const granXCos = granularityX * cosRotation; - - const sinRotation = Math.sin(rotation); - const granYSin = granularityY * sinRotation; - const granXSin = granularityX * sinRotation; - - nwCartesian = proj.project(nwCorner, nwCartesian); - - nwCartesian = Matrix3.Cartesian3.subtract(nwCartesian, centerCartesian, nwCartesian); - const rotationMatrix = Matrix2.Matrix2.fromRotation(rotation, rotationMatrixScratch); - nwCartesian = Matrix2.Matrix2.multiplyByVector( - rotationMatrix, - nwCartesian, - nwCartesian - ); - nwCartesian = Matrix3.Cartesian3.add(nwCartesian, centerCartesian, nwCartesian); - nwCorner = proj.unproject(nwCartesian, nwCorner); - - width -= 1; - height -= 1; - - const latitude = nwCorner.latitude; - const latitude0 = latitude + width * granXSin; - const latitude1 = latitude - granYCos * height; - const latitude2 = latitude - granYCos * height + width * granXSin; - - const north = Math.max(latitude, latitude0, latitude1, latitude2); - const south = Math.min(latitude, latitude0, latitude1, latitude2); - - const longitude = nwCorner.longitude; - const longitude0 = longitude + width * granXCos; - const longitude1 = longitude + height * granYSin; - const longitude2 = longitude + height * granYSin + width * granXCos; - - const east = Math.max(longitude, longitude0, longitude1, longitude2); - const west = Math.min(longitude, longitude0, longitude1, longitude2); - - return { - north: north, - south: south, - east: east, - west: west, - granYCos: granYCos, - granYSin: granYSin, - granXCos: granXCos, - granXSin: granXSin, - nwCorner: nwCorner, - }; - } - - /** - * @private - */ - RectangleGeometryLibrary.computeOptions = function ( - rectangle, - granularity, - rotation, - stRotation, - boundingRectangleScratch, - nwCornerResult, - stNwCornerResult - ) { - let east = rectangle.east; - let west = rectangle.west; - let north = rectangle.north; - let south = rectangle.south; - - let northCap = false; - let southCap = false; - - if (north === Math$1.CesiumMath.PI_OVER_TWO) { - northCap = true; - } - if (south === -Math$1.CesiumMath.PI_OVER_TWO) { - southCap = true; - } - - let dx; - const dy = north - south; - if (west > east) { - dx = Math$1.CesiumMath.TWO_PI - west + east; - } else { - dx = east - west; - } - - const width = Math.ceil(dx / granularity) + 1; - const height = Math.ceil(dy / granularity) + 1; - const granularityX = dx / (width - 1); - const granularityY = dy / (height - 1); - - const nwCorner = Matrix2.Rectangle.northwest(rectangle, nwCornerResult); - const center = Matrix2.Rectangle.center(rectangle, centerScratch); - if (rotation !== 0 || stRotation !== 0) { - if (center.longitude < nwCorner.longitude) { - center.longitude += Math$1.CesiumMath.TWO_PI; - } - centerCartesian = proj.project(center, centerCartesian); - } - - const granYCos = granularityY; - const granXCos = granularityX; - const granYSin = 0.0; - const granXSin = 0.0; - - const boundingRectangle = Matrix2.Rectangle.clone( - rectangle, - boundingRectangleScratch - ); - - const computedOptions = { - granYCos: granYCos, - granYSin: granYSin, - granXCos: granXCos, - granXSin: granXSin, - nwCorner: nwCorner, - boundingRectangle: boundingRectangle, - width: width, - height: height, - northCap: northCap, - southCap: southCap, - }; - - if (rotation !== 0) { - const rotationOptions = getRotationOptions( - nwCorner, - rotation, - granularityX, - granularityY, - center, - width, - height - ); - north = rotationOptions.north; - south = rotationOptions.south; - east = rotationOptions.east; - west = rotationOptions.west; - - //>>includeStart('debug', pragmas.debug); - if ( - north < -Math$1.CesiumMath.PI_OVER_TWO || - north > Math$1.CesiumMath.PI_OVER_TWO || - south < -Math$1.CesiumMath.PI_OVER_TWO || - south > Math$1.CesiumMath.PI_OVER_TWO - ) { - throw new Check.DeveloperError( - "Rotated rectangle is invalid. It crosses over either the north or south pole." - ); - } - //>>includeEnd('debug') - - computedOptions.granYCos = rotationOptions.granYCos; - computedOptions.granYSin = rotationOptions.granYSin; - computedOptions.granXCos = rotationOptions.granXCos; - computedOptions.granXSin = rotationOptions.granXSin; - - boundingRectangle.north = north; - boundingRectangle.south = south; - boundingRectangle.east = east; - boundingRectangle.west = west; - } - - if (stRotation !== 0) { - rotation = rotation - stRotation; - const stNwCorner = Matrix2.Rectangle.northwest(boundingRectangle, stNwCornerResult); - - const stRotationOptions = getRotationOptions( - stNwCorner, - rotation, - granularityX, - granularityY, - center, - width, - height - ); - - computedOptions.stGranYCos = stRotationOptions.granYCos; - computedOptions.stGranXCos = stRotationOptions.granXCos; - computedOptions.stGranYSin = stRotationOptions.granYSin; - computedOptions.stGranXSin = stRotationOptions.granXSin; - computedOptions.stNwCorner = stNwCorner; - computedOptions.stWest = stRotationOptions.west; - computedOptions.stSouth = stRotationOptions.south; - } - - return computedOptions; - }; - var RectangleGeometryLibrary$1 = RectangleGeometryLibrary; - - exports.RectangleGeometryLibrary = RectangleGeometryLibrary$1; - -})); -//# sourceMappingURL=RectangleGeometryLibrary-94f83a5a.js.map diff --git a/debug/cesium/Workers/RectangleGeometryLibrary-94f83a5a.js.map b/debug/cesium/Workers/RectangleGeometryLibrary-94f83a5a.js.map deleted file mode 100644 index 24afd6c..0000000 --- a/debug/cesium/Workers/RectangleGeometryLibrary-94f83a5a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"RectangleGeometryLibrary-94f83a5a.js","sources":["../../../Source/Core/RectangleGeometryLibrary.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport GeographicProjection from \"./GeographicProjection.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix2 from \"./Matrix2.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\n\r\nconst cos = Math.cos;\r\nconst sin = Math.sin;\r\nconst sqrt = Math.sqrt;\r\n\r\n/**\r\n * @private\r\n */\r\nconst RectangleGeometryLibrary = {};\r\n\r\n/**\r\n * @private\r\n */\r\nRectangleGeometryLibrary.computePosition = function (\r\n computedOptions,\r\n ellipsoid,\r\n computeST,\r\n row,\r\n col,\r\n position,\r\n st\r\n) {\r\n const radiiSquared = ellipsoid.radiiSquared;\r\n const nwCorner = computedOptions.nwCorner;\r\n const rectangle = computedOptions.boundingRectangle;\r\n\r\n let stLatitude =\r\n nwCorner.latitude -\r\n computedOptions.granYCos * row +\r\n col * computedOptions.granXSin;\r\n const cosLatitude = cos(stLatitude);\r\n const nZ = sin(stLatitude);\r\n const kZ = radiiSquared.z * nZ;\r\n\r\n let stLongitude =\r\n nwCorner.longitude +\r\n row * computedOptions.granYSin +\r\n col * computedOptions.granXCos;\r\n const nX = cosLatitude * cos(stLongitude);\r\n const nY = cosLatitude * sin(stLongitude);\r\n\r\n const kX = radiiSquared.x * nX;\r\n const kY = radiiSquared.y * nY;\r\n\r\n const gamma = sqrt(kX * nX + kY * nY + kZ * nZ);\r\n\r\n position.x = kX / gamma;\r\n position.y = kY / gamma;\r\n position.z = kZ / gamma;\r\n\r\n if (computeST) {\r\n const stNwCorner = computedOptions.stNwCorner;\r\n if (defined(stNwCorner)) {\r\n stLatitude =\r\n stNwCorner.latitude -\r\n computedOptions.stGranYCos * row +\r\n col * computedOptions.stGranXSin;\r\n stLongitude =\r\n stNwCorner.longitude +\r\n row * computedOptions.stGranYSin +\r\n col * computedOptions.stGranXCos;\r\n\r\n st.x = (stLongitude - computedOptions.stWest) * computedOptions.lonScalar;\r\n st.y = (stLatitude - computedOptions.stSouth) * computedOptions.latScalar;\r\n } else {\r\n st.x = (stLongitude - rectangle.west) * computedOptions.lonScalar;\r\n st.y = (stLatitude - rectangle.south) * computedOptions.latScalar;\r\n }\r\n }\r\n};\r\n\r\nconst rotationMatrixScratch = new Matrix2();\r\nlet nwCartesian = new Cartesian3();\r\nconst centerScratch = new Cartographic();\r\nlet centerCartesian = new Cartesian3();\r\nconst proj = new GeographicProjection();\r\n\r\nfunction getRotationOptions(\r\n nwCorner,\r\n rotation,\r\n granularityX,\r\n granularityY,\r\n center,\r\n width,\r\n height\r\n) {\r\n const cosRotation = Math.cos(rotation);\r\n const granYCos = granularityY * cosRotation;\r\n const granXCos = granularityX * cosRotation;\r\n\r\n const sinRotation = Math.sin(rotation);\r\n const granYSin = granularityY * sinRotation;\r\n const granXSin = granularityX * sinRotation;\r\n\r\n nwCartesian = proj.project(nwCorner, nwCartesian);\r\n\r\n nwCartesian = Cartesian3.subtract(nwCartesian, centerCartesian, nwCartesian);\r\n const rotationMatrix = Matrix2.fromRotation(rotation, rotationMatrixScratch);\r\n nwCartesian = Matrix2.multiplyByVector(\r\n rotationMatrix,\r\n nwCartesian,\r\n nwCartesian\r\n );\r\n nwCartesian = Cartesian3.add(nwCartesian, centerCartesian, nwCartesian);\r\n nwCorner = proj.unproject(nwCartesian, nwCorner);\r\n\r\n width -= 1;\r\n height -= 1;\r\n\r\n const latitude = nwCorner.latitude;\r\n const latitude0 = latitude + width * granXSin;\r\n const latitude1 = latitude - granYCos * height;\r\n const latitude2 = latitude - granYCos * height + width * granXSin;\r\n\r\n const north = Math.max(latitude, latitude0, latitude1, latitude2);\r\n const south = Math.min(latitude, latitude0, latitude1, latitude2);\r\n\r\n const longitude = nwCorner.longitude;\r\n const longitude0 = longitude + width * granXCos;\r\n const longitude1 = longitude + height * granYSin;\r\n const longitude2 = longitude + height * granYSin + width * granXCos;\r\n\r\n const east = Math.max(longitude, longitude0, longitude1, longitude2);\r\n const west = Math.min(longitude, longitude0, longitude1, longitude2);\r\n\r\n return {\r\n north: north,\r\n south: south,\r\n east: east,\r\n west: west,\r\n granYCos: granYCos,\r\n granYSin: granYSin,\r\n granXCos: granXCos,\r\n granXSin: granXSin,\r\n nwCorner: nwCorner,\r\n };\r\n}\r\n\r\n/**\r\n * @private\r\n */\r\nRectangleGeometryLibrary.computeOptions = function (\r\n rectangle,\r\n granularity,\r\n rotation,\r\n stRotation,\r\n boundingRectangleScratch,\r\n nwCornerResult,\r\n stNwCornerResult\r\n) {\r\n let east = rectangle.east;\r\n let west = rectangle.west;\r\n let north = rectangle.north;\r\n let south = rectangle.south;\r\n\r\n let northCap = false;\r\n let southCap = false;\r\n\r\n if (north === CesiumMath.PI_OVER_TWO) {\r\n northCap = true;\r\n }\r\n if (south === -CesiumMath.PI_OVER_TWO) {\r\n southCap = true;\r\n }\r\n\r\n let dx;\r\n const dy = north - south;\r\n if (west > east) {\r\n dx = CesiumMath.TWO_PI - west + east;\r\n } else {\r\n dx = east - west;\r\n }\r\n\r\n const width = Math.ceil(dx / granularity) + 1;\r\n const height = Math.ceil(dy / granularity) + 1;\r\n const granularityX = dx / (width - 1);\r\n const granularityY = dy / (height - 1);\r\n\r\n const nwCorner = Rectangle.northwest(rectangle, nwCornerResult);\r\n const center = Rectangle.center(rectangle, centerScratch);\r\n if (rotation !== 0 || stRotation !== 0) {\r\n if (center.longitude < nwCorner.longitude) {\r\n center.longitude += CesiumMath.TWO_PI;\r\n }\r\n centerCartesian = proj.project(center, centerCartesian);\r\n }\r\n\r\n const granYCos = granularityY;\r\n const granXCos = granularityX;\r\n const granYSin = 0.0;\r\n const granXSin = 0.0;\r\n\r\n const boundingRectangle = Rectangle.clone(\r\n rectangle,\r\n boundingRectangleScratch\r\n );\r\n\r\n const computedOptions = {\r\n granYCos: granYCos,\r\n granYSin: granYSin,\r\n granXCos: granXCos,\r\n granXSin: granXSin,\r\n nwCorner: nwCorner,\r\n boundingRectangle: boundingRectangle,\r\n width: width,\r\n height: height,\r\n northCap: northCap,\r\n southCap: southCap,\r\n };\r\n\r\n if (rotation !== 0) {\r\n const rotationOptions = getRotationOptions(\r\n nwCorner,\r\n rotation,\r\n granularityX,\r\n granularityY,\r\n center,\r\n width,\r\n height\r\n );\r\n north = rotationOptions.north;\r\n south = rotationOptions.south;\r\n east = rotationOptions.east;\r\n west = rotationOptions.west;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n north < -CesiumMath.PI_OVER_TWO ||\r\n north > CesiumMath.PI_OVER_TWO ||\r\n south < -CesiumMath.PI_OVER_TWO ||\r\n south > CesiumMath.PI_OVER_TWO\r\n ) {\r\n throw new DeveloperError(\r\n \"Rotated rectangle is invalid. It crosses over either the north or south pole.\"\r\n );\r\n }\r\n //>>includeEnd('debug')\r\n\r\n computedOptions.granYCos = rotationOptions.granYCos;\r\n computedOptions.granYSin = rotationOptions.granYSin;\r\n computedOptions.granXCos = rotationOptions.granXCos;\r\n computedOptions.granXSin = rotationOptions.granXSin;\r\n\r\n boundingRectangle.north = north;\r\n boundingRectangle.south = south;\r\n boundingRectangle.east = east;\r\n boundingRectangle.west = west;\r\n }\r\n\r\n if (stRotation !== 0) {\r\n rotation = rotation - stRotation;\r\n const stNwCorner = Rectangle.northwest(boundingRectangle, stNwCornerResult);\r\n\r\n const stRotationOptions = getRotationOptions(\r\n stNwCorner,\r\n rotation,\r\n granularityX,\r\n granularityY,\r\n center,\r\n width,\r\n height\r\n );\r\n\r\n computedOptions.stGranYCos = stRotationOptions.granYCos;\r\n computedOptions.stGranXCos = stRotationOptions.granXCos;\r\n computedOptions.stGranYSin = stRotationOptions.granYSin;\r\n computedOptions.stGranXSin = stRotationOptions.granXSin;\r\n computedOptions.stNwCorner = stNwCorner;\r\n computedOptions.stWest = stRotationOptions.west;\r\n computedOptions.stSouth = stRotationOptions.south;\r\n }\r\n\r\n return computedOptions;\r\n};\r\nexport default RectangleGeometryLibrary;\r\n"],"names":["defined","Matrix2","Cartesian3","Cartographic","GeographicProjection","CesiumMath","Rectangle","DeveloperError"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/RuntimeError-e5c6a8b9.js b/debug/cesium/Workers/RuntimeError-e5c6a8b9.js deleted file mode 100644 index 26679bb..0000000 --- a/debug/cesium/Workers/RuntimeError-e5c6a8b9.js +++ /dev/null @@ -1,94 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './defaultValue-0ab18f7d'], (function (exports, defaultValue) { 'use strict'; - - /** - * Constructs an exception object that is thrown due to an error that can occur at runtime, e.g., - * out of memory, could not compile shader, etc. If a function may throw this - * exception, the calling code should be prepared to catch it. - *

    - * On the other hand, a {@link DeveloperError} indicates an exception due - * to a developer error, e.g., invalid argument, that usually indicates a bug in the - * calling code. - * - * @alias RuntimeError - * @constructor - * @extends Error - * - * @param {String} [message] The error message for this exception. - * - * @see DeveloperError - */ - function RuntimeError(message) { - /** - * 'RuntimeError' indicating that this exception was thrown due to a runtime error. - * @type {String} - * @readonly - */ - this.name = "RuntimeError"; - - /** - * The explanation for why this exception was thrown. - * @type {String} - * @readonly - */ - this.message = message; - - //Browsers such as IE don't have a stack property until you actually throw the error. - let stack; - try { - throw new Error(); - } catch (e) { - stack = e.stack; - } - - /** - * The stack trace of this exception, if available. - * @type {String} - * @readonly - */ - this.stack = stack; - } - - if (defaultValue.defined(Object.create)) { - RuntimeError.prototype = Object.create(Error.prototype); - RuntimeError.prototype.constructor = RuntimeError; - } - - RuntimeError.prototype.toString = function () { - let str = `${this.name}: ${this.message}`; - - if (defaultValue.defined(this.stack)) { - str += `\n${this.stack.toString()}`; - } - - return str; - }; - - exports.RuntimeError = RuntimeError; - -})); -//# sourceMappingURL=RuntimeError-e5c6a8b9.js.map diff --git a/debug/cesium/Workers/RuntimeError-e5c6a8b9.js.map b/debug/cesium/Workers/RuntimeError-e5c6a8b9.js.map deleted file mode 100644 index a061f06..0000000 --- a/debug/cesium/Workers/RuntimeError-e5c6a8b9.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"RuntimeError-e5c6a8b9.js","sources":["../../../Source/Core/RuntimeError.js"],"sourcesContent":["import defined from \"./defined.js\";\r\n\r\n/**\r\n * Constructs an exception object that is thrown due to an error that can occur at runtime, e.g.,\r\n * out of memory, could not compile shader, etc. If a function may throw this\r\n * exception, the calling code should be prepared to catch it.\r\n *

    \r\n * On the other hand, a {@link DeveloperError} indicates an exception due\r\n * to a developer error, e.g., invalid argument, that usually indicates a bug in the\r\n * calling code.\r\n *\r\n * @alias RuntimeError\r\n * @constructor\r\n * @extends Error\r\n *\r\n * @param {String} [message] The error message for this exception.\r\n *\r\n * @see DeveloperError\r\n */\r\nfunction RuntimeError(message) {\r\n /**\r\n * 'RuntimeError' indicating that this exception was thrown due to a runtime error.\r\n * @type {String}\r\n * @readonly\r\n */\r\n this.name = \"RuntimeError\";\r\n\r\n /**\r\n * The explanation for why this exception was thrown.\r\n * @type {String}\r\n * @readonly\r\n */\r\n this.message = message;\r\n\r\n //Browsers such as IE don't have a stack property until you actually throw the error.\r\n let stack;\r\n try {\r\n throw new Error();\r\n } catch (e) {\r\n stack = e.stack;\r\n }\r\n\r\n /**\r\n * The stack trace of this exception, if available.\r\n * @type {String}\r\n * @readonly\r\n */\r\n this.stack = stack;\r\n}\r\n\r\nif (defined(Object.create)) {\r\n RuntimeError.prototype = Object.create(Error.prototype);\r\n RuntimeError.prototype.constructor = RuntimeError;\r\n}\r\n\r\nRuntimeError.prototype.toString = function () {\r\n let str = `${this.name}: ${this.message}`;\r\n\r\n if (defined(this.stack)) {\r\n str += `\\n${this.stack.toString()}`;\r\n }\r\n\r\n return str;\r\n};\r\nexport default RuntimeError;\r\n"],"names":["defined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,YAAY,CAAC,OAAO,EAAE;EAC/B;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;AAC7B;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB;EACA;EACA,EAAE,IAAI,KAAK,CAAC;EACZ,EAAE,IAAI;EACN,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;EACtB,GAAG,CAAC,OAAO,CAAC,EAAE;EACd,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;EACpB,GAAG;AACH;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;EACrB,CAAC;AACD;EACA,IAAIA,oBAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;EAC5B,EAAE,YAAY,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;EAC1D,EAAE,YAAY,CAAC,SAAS,CAAC,WAAW,GAAG,YAAY,CAAC;EACpD,CAAC;AACD;EACA,YAAY,CAAC,SAAS,CAAC,QAAQ,GAAG,YAAY;EAC9C,EAAE,IAAI,GAAG,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5C;EACA,EAAE,IAAIA,oBAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;EAC3B,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;EACxC,GAAG;AACH;EACA,EAAE,OAAO,GAAG,CAAC;EACb,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/TerrainEncoding-c7d764e4.js b/debug/cesium/Workers/TerrainEncoding-c7d764e4.js deleted file mode 100644 index 51bfae5..0000000 --- a/debug/cesium/Workers/TerrainEncoding-c7d764e4.js +++ /dev/null @@ -1,1253 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Matrix2-036c77dd', './AttributeCompression-e9888cb8', './ComponentDatatype-13a5630b', './Math-9be8b918'], (function (exports, Transforms, Matrix3, Check, defaultValue, Matrix2, AttributeCompression, ComponentDatatype, Math$1) { 'use strict'; - - /** - * Determine whether or not other objects are visible or hidden behind the visible horizon defined by - * an {@link Ellipsoid} and a camera position. The ellipsoid is assumed to be located at the - * origin of the coordinate system. This class uses the algorithm described in the - * {@link https://cesium.com/blog/2013/04/25/Horizon-culling/|Horizon Culling} blog post. - * - * @alias EllipsoidalOccluder - * - * @param {Ellipsoid} ellipsoid The ellipsoid to use as an occluder. - * @param {Cartesian3} [cameraPosition] The coordinate of the viewer/camera. If this parameter is not - * specified, {@link EllipsoidalOccluder#cameraPosition} must be called before - * testing visibility. - * - * @constructor - * - * @example - * // Construct an ellipsoidal occluder with radii 1.0, 1.1, and 0.9. - * const cameraPosition = new Cesium.Cartesian3(5.0, 6.0, 7.0); - * const occluderEllipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9); - * const occluder = new Cesium.EllipsoidalOccluder(occluderEllipsoid, cameraPosition); - * - * @private - */ - function EllipsoidalOccluder(ellipsoid, cameraPosition) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("ellipsoid", ellipsoid); - //>>includeEnd('debug'); - - this._ellipsoid = ellipsoid; - this._cameraPosition = new Matrix3.Cartesian3(); - this._cameraPositionInScaledSpace = new Matrix3.Cartesian3(); - this._distanceToLimbInScaledSpaceSquared = 0.0; - - // cameraPosition fills in the above values - if (defaultValue.defined(cameraPosition)) { - this.cameraPosition = cameraPosition; - } - } - - Object.defineProperties(EllipsoidalOccluder.prototype, { - /** - * Gets the occluding ellipsoid. - * @memberof EllipsoidalOccluder.prototype - * @type {Ellipsoid} - */ - ellipsoid: { - get: function () { - return this._ellipsoid; - }, - }, - /** - * Gets or sets the position of the camera. - * @memberof EllipsoidalOccluder.prototype - * @type {Cartesian3} - */ - cameraPosition: { - get: function () { - return this._cameraPosition; - }, - set: function (cameraPosition) { - // See https://cesium.com/blog/2013/04/25/Horizon-culling/ - const ellipsoid = this._ellipsoid; - const cv = ellipsoid.transformPositionToScaledSpace( - cameraPosition, - this._cameraPositionInScaledSpace - ); - const vhMagnitudeSquared = Matrix3.Cartesian3.magnitudeSquared(cv) - 1.0; - - Matrix3.Cartesian3.clone(cameraPosition, this._cameraPosition); - this._cameraPositionInScaledSpace = cv; - this._distanceToLimbInScaledSpaceSquared = vhMagnitudeSquared; - }, - }, - }); - - const scratchCartesian = new Matrix3.Cartesian3(); - - /** - * Determines whether or not a point, the occludee, is hidden from view by the occluder. - * - * @param {Cartesian3} occludee The point to test for visibility. - * @returns {Boolean} true if the occludee is visible; otherwise false. - * - * @example - * const cameraPosition = new Cesium.Cartesian3(0, 0, 2.5); - * const ellipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9); - * const occluder = new Cesium.EllipsoidalOccluder(ellipsoid, cameraPosition); - * const point = new Cesium.Cartesian3(0, -3, -3); - * occluder.isPointVisible(point); //returns true - */ - EllipsoidalOccluder.prototype.isPointVisible = function (occludee) { - const ellipsoid = this._ellipsoid; - const occludeeScaledSpacePosition = ellipsoid.transformPositionToScaledSpace( - occludee, - scratchCartesian - ); - return isScaledSpacePointVisible( - occludeeScaledSpacePosition, - this._cameraPositionInScaledSpace, - this._distanceToLimbInScaledSpaceSquared - ); - }; - - /** - * Determines whether or not a point expressed in the ellipsoid scaled space, is hidden from view by the - * occluder. To transform a Cartesian X, Y, Z position in the coordinate system aligned with the ellipsoid - * into the scaled space, call {@link Ellipsoid#transformPositionToScaledSpace}. - * - * @param {Cartesian3} occludeeScaledSpacePosition The point to test for visibility, represented in the scaled space. - * @returns {Boolean} true if the occludee is visible; otherwise false. - * - * @example - * const cameraPosition = new Cesium.Cartesian3(0, 0, 2.5); - * const ellipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9); - * const occluder = new Cesium.EllipsoidalOccluder(ellipsoid, cameraPosition); - * const point = new Cesium.Cartesian3(0, -3, -3); - * const scaledSpacePoint = ellipsoid.transformPositionToScaledSpace(point); - * occluder.isScaledSpacePointVisible(scaledSpacePoint); //returns true - */ - EllipsoidalOccluder.prototype.isScaledSpacePointVisible = function ( - occludeeScaledSpacePosition - ) { - return isScaledSpacePointVisible( - occludeeScaledSpacePosition, - this._cameraPositionInScaledSpace, - this._distanceToLimbInScaledSpaceSquared - ); - }; - - const scratchCameraPositionInScaledSpaceShrunk = new Matrix3.Cartesian3(); - - /** - * Similar to {@link EllipsoidalOccluder#isScaledSpacePointVisible} except tests against an - * ellipsoid that has been shrunk by the minimum height when the minimum height is below - * the ellipsoid. This is intended to be used with points generated by - * {@link EllipsoidalOccluder#computeHorizonCullingPointPossiblyUnderEllipsoid} or - * {@link EllipsoidalOccluder#computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid}. - * - * @param {Cartesian3} occludeeScaledSpacePosition The point to test for visibility, represented in the scaled space of the possibly-shrunk ellipsoid. - * @returns {Boolean} true if the occludee is visible; otherwise false. - */ - EllipsoidalOccluder.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid = function ( - occludeeScaledSpacePosition, - minimumHeight - ) { - const ellipsoid = this._ellipsoid; - let vhMagnitudeSquared; - let cv; - - if ( - defaultValue.defined(minimumHeight) && - minimumHeight < 0.0 && - ellipsoid.minimumRadius > -minimumHeight - ) { - // This code is similar to the cameraPosition setter, but unrolled for performance because it will be called a lot. - cv = scratchCameraPositionInScaledSpaceShrunk; - cv.x = this._cameraPosition.x / (ellipsoid.radii.x + minimumHeight); - cv.y = this._cameraPosition.y / (ellipsoid.radii.y + minimumHeight); - cv.z = this._cameraPosition.z / (ellipsoid.radii.z + minimumHeight); - vhMagnitudeSquared = cv.x * cv.x + cv.y * cv.y + cv.z * cv.z - 1.0; - } else { - cv = this._cameraPositionInScaledSpace; - vhMagnitudeSquared = this._distanceToLimbInScaledSpaceSquared; - } - - return isScaledSpacePointVisible( - occludeeScaledSpacePosition, - cv, - vhMagnitudeSquared - ); - }; - - /** - * Computes a point that can be used for horizon culling from a list of positions. If the point is below - * the horizon, all of the positions are guaranteed to be below the horizon as well. The returned point - * is expressed in the ellipsoid-scaled space and is suitable for use with - * {@link EllipsoidalOccluder#isScaledSpacePointVisible}. - * - * @param {Cartesian3} directionToPoint The direction that the computed point will lie along. - * A reasonable direction to use is the direction from the center of the ellipsoid to - * the center of the bounding sphere computed from the positions. The direction need not - * be normalized. - * @param {Cartesian3[]} positions The positions from which to compute the horizon culling point. The positions - * must be expressed in a reference frame centered at the ellipsoid and aligned with the - * ellipsoid's axes. - * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance. - * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space. - */ - EllipsoidalOccluder.prototype.computeHorizonCullingPoint = function ( - directionToPoint, - positions, - result - ) { - return computeHorizonCullingPointFromPositions( - this._ellipsoid, - directionToPoint, - positions, - result - ); - }; - - const scratchEllipsoidShrunk = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - - /** - * Similar to {@link EllipsoidalOccluder#computeHorizonCullingPoint} except computes the culling - * point relative to an ellipsoid that has been shrunk by the minimum height when the minimum height is below - * the ellipsoid. The returned point is expressed in the possibly-shrunk ellipsoid-scaled space and is suitable - * for use with {@link EllipsoidalOccluder#isScaledSpacePointVisiblePossiblyUnderEllipsoid}. - * - * @param {Cartesian3} directionToPoint The direction that the computed point will lie along. - * A reasonable direction to use is the direction from the center of the ellipsoid to - * the center of the bounding sphere computed from the positions. The direction need not - * be normalized. - * @param {Cartesian3[]} positions The positions from which to compute the horizon culling point. The positions - * must be expressed in a reference frame centered at the ellipsoid and aligned with the - * ellipsoid's axes. - * @param {Number} [minimumHeight] The minimum height of all positions. If this value is undefined, all positions are assumed to be above the ellipsoid. - * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance. - * @returns {Cartesian3} The computed horizon culling point, expressed in the possibly-shrunk ellipsoid-scaled space. - */ - EllipsoidalOccluder.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid = function ( - directionToPoint, - positions, - minimumHeight, - result - ) { - const possiblyShrunkEllipsoid = getPossiblyShrunkEllipsoid( - this._ellipsoid, - minimumHeight, - scratchEllipsoidShrunk - ); - return computeHorizonCullingPointFromPositions( - possiblyShrunkEllipsoid, - directionToPoint, - positions, - result - ); - }; - /** - * Computes a point that can be used for horizon culling from a list of positions. If the point is below - * the horizon, all of the positions are guaranteed to be below the horizon as well. The returned point - * is expressed in the ellipsoid-scaled space and is suitable for use with - * {@link EllipsoidalOccluder#isScaledSpacePointVisible}. - * - * @param {Cartesian3} directionToPoint The direction that the computed point will lie along. - * A reasonable direction to use is the direction from the center of the ellipsoid to - * the center of the bounding sphere computed from the positions. The direction need not - * be normalized. - * @param {Number[]} vertices The vertices from which to compute the horizon culling point. The positions - * must be expressed in a reference frame centered at the ellipsoid and aligned with the - * ellipsoid's axes. - * @param {Number} [stride=3] - * @param {Cartesian3} [center=Cartesian3.ZERO] - * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance. - * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space. - */ - EllipsoidalOccluder.prototype.computeHorizonCullingPointFromVertices = function ( - directionToPoint, - vertices, - stride, - center, - result - ) { - return computeHorizonCullingPointFromVertices( - this._ellipsoid, - directionToPoint, - vertices, - stride, - center, - result - ); - }; - - /** - * Similar to {@link EllipsoidalOccluder#computeHorizonCullingPointFromVertices} except computes the culling - * point relative to an ellipsoid that has been shrunk by the minimum height when the minimum height is below - * the ellipsoid. The returned point is expressed in the possibly-shrunk ellipsoid-scaled space and is suitable - * for use with {@link EllipsoidalOccluder#isScaledSpacePointVisiblePossiblyUnderEllipsoid}. - * - * @param {Cartesian3} directionToPoint The direction that the computed point will lie along. - * A reasonable direction to use is the direction from the center of the ellipsoid to - * the center of the bounding sphere computed from the positions. The direction need not - * be normalized. - * @param {Number[]} vertices The vertices from which to compute the horizon culling point. The positions - * must be expressed in a reference frame centered at the ellipsoid and aligned with the - * ellipsoid's axes. - * @param {Number} [stride=3] - * @param {Cartesian3} [center=Cartesian3.ZERO] - * @param {Number} [minimumHeight] The minimum height of all vertices. If this value is undefined, all vertices are assumed to be above the ellipsoid. - * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance. - * @returns {Cartesian3} The computed horizon culling point, expressed in the possibly-shrunk ellipsoid-scaled space. - */ - EllipsoidalOccluder.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid = function ( - directionToPoint, - vertices, - stride, - center, - minimumHeight, - result - ) { - const possiblyShrunkEllipsoid = getPossiblyShrunkEllipsoid( - this._ellipsoid, - minimumHeight, - scratchEllipsoidShrunk - ); - return computeHorizonCullingPointFromVertices( - possiblyShrunkEllipsoid, - directionToPoint, - vertices, - stride, - center, - result - ); - }; - - const subsampleScratch = []; - - /** - * Computes a point that can be used for horizon culling of a rectangle. If the point is below - * the horizon, the ellipsoid-conforming rectangle is guaranteed to be below the horizon as well. - * The returned point is expressed in the ellipsoid-scaled space and is suitable for use with - * {@link EllipsoidalOccluder#isScaledSpacePointVisible}. - * - * @param {Rectangle} rectangle The rectangle for which to compute the horizon culling point. - * @param {Ellipsoid} ellipsoid The ellipsoid on which the rectangle is defined. This may be different from - * the ellipsoid used by this instance for occlusion testing. - * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance. - * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space. - */ - EllipsoidalOccluder.prototype.computeHorizonCullingPointFromRectangle = function ( - rectangle, - ellipsoid, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - //>>includeEnd('debug'); - - const positions = Matrix2.Rectangle.subsample( - rectangle, - ellipsoid, - 0.0, - subsampleScratch - ); - const bs = Transforms.BoundingSphere.fromPoints(positions); - - // If the bounding sphere center is too close to the center of the occluder, it doesn't make - // sense to try to horizon cull it. - if (Matrix3.Cartesian3.magnitude(bs.center) < 0.1 * ellipsoid.minimumRadius) { - return undefined; - } - - return this.computeHorizonCullingPoint(bs.center, positions, result); - }; - - const scratchEllipsoidShrunkRadii = new Matrix3.Cartesian3(); - - function getPossiblyShrunkEllipsoid(ellipsoid, minimumHeight, result) { - if ( - defaultValue.defined(minimumHeight) && - minimumHeight < 0.0 && - ellipsoid.minimumRadius > -minimumHeight - ) { - const ellipsoidShrunkRadii = Matrix3.Cartesian3.fromElements( - ellipsoid.radii.x + minimumHeight, - ellipsoid.radii.y + minimumHeight, - ellipsoid.radii.z + minimumHeight, - scratchEllipsoidShrunkRadii - ); - ellipsoid = Matrix3.Ellipsoid.fromCartesian3(ellipsoidShrunkRadii, result); - } - return ellipsoid; - } - - function computeHorizonCullingPointFromPositions( - ellipsoid, - directionToPoint, - positions, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("directionToPoint", directionToPoint); - Check.Check.defined("positions", positions); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - const scaledSpaceDirectionToPoint = computeScaledSpaceDirectionToPoint( - ellipsoid, - directionToPoint - ); - let resultMagnitude = 0.0; - - for (let i = 0, len = positions.length; i < len; ++i) { - const position = positions[i]; - const candidateMagnitude = computeMagnitude( - ellipsoid, - position, - scaledSpaceDirectionToPoint - ); - if (candidateMagnitude < 0.0) { - // all points should face the same direction, but this one doesn't, so return undefined - return undefined; - } - resultMagnitude = Math.max(resultMagnitude, candidateMagnitude); - } - - return magnitudeToPoint(scaledSpaceDirectionToPoint, resultMagnitude, result); - } - - const positionScratch = new Matrix3.Cartesian3(); - - function computeHorizonCullingPointFromVertices( - ellipsoid, - directionToPoint, - vertices, - stride, - center, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("directionToPoint", directionToPoint); - Check.Check.defined("vertices", vertices); - Check.Check.typeOf.number("stride", stride); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - stride = defaultValue.defaultValue(stride, 3); - center = defaultValue.defaultValue(center, Matrix3.Cartesian3.ZERO); - const scaledSpaceDirectionToPoint = computeScaledSpaceDirectionToPoint( - ellipsoid, - directionToPoint - ); - let resultMagnitude = 0.0; - - for (let i = 0, len = vertices.length; i < len; i += stride) { - positionScratch.x = vertices[i] + center.x; - positionScratch.y = vertices[i + 1] + center.y; - positionScratch.z = vertices[i + 2] + center.z; - - const candidateMagnitude = computeMagnitude( - ellipsoid, - positionScratch, - scaledSpaceDirectionToPoint - ); - if (candidateMagnitude < 0.0) { - // all points should face the same direction, but this one doesn't, so return undefined - return undefined; - } - resultMagnitude = Math.max(resultMagnitude, candidateMagnitude); - } - - return magnitudeToPoint(scaledSpaceDirectionToPoint, resultMagnitude, result); - } - - function isScaledSpacePointVisible( - occludeeScaledSpacePosition, - cameraPositionInScaledSpace, - distanceToLimbInScaledSpaceSquared - ) { - // See https://cesium.com/blog/2013/04/25/Horizon-culling/ - const cv = cameraPositionInScaledSpace; - const vhMagnitudeSquared = distanceToLimbInScaledSpaceSquared; - const vt = Matrix3.Cartesian3.subtract( - occludeeScaledSpacePosition, - cv, - scratchCartesian - ); - const vtDotVc = -Matrix3.Cartesian3.dot(vt, cv); - // If vhMagnitudeSquared < 0 then we are below the surface of the ellipsoid and - // in this case, set the culling plane to be on V. - const isOccluded = - vhMagnitudeSquared < 0 - ? vtDotVc > 0 - : vtDotVc > vhMagnitudeSquared && - (vtDotVc * vtDotVc) / Matrix3.Cartesian3.magnitudeSquared(vt) > - vhMagnitudeSquared; - return !isOccluded; - } - - const scaledSpaceScratch = new Matrix3.Cartesian3(); - const directionScratch = new Matrix3.Cartesian3(); - - function computeMagnitude(ellipsoid, position, scaledSpaceDirectionToPoint) { - const scaledSpacePosition = ellipsoid.transformPositionToScaledSpace( - position, - scaledSpaceScratch - ); - let magnitudeSquared = Matrix3.Cartesian3.magnitudeSquared(scaledSpacePosition); - let magnitude = Math.sqrt(magnitudeSquared); - const direction = Matrix3.Cartesian3.divideByScalar( - scaledSpacePosition, - magnitude, - directionScratch - ); - - // For the purpose of this computation, points below the ellipsoid are consider to be on it instead. - magnitudeSquared = Math.max(1.0, magnitudeSquared); - magnitude = Math.max(1.0, magnitude); - - const cosAlpha = Matrix3.Cartesian3.dot(direction, scaledSpaceDirectionToPoint); - const sinAlpha = Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.cross(direction, scaledSpaceDirectionToPoint, direction) - ); - const cosBeta = 1.0 / magnitude; - const sinBeta = Math.sqrt(magnitudeSquared - 1.0) * cosBeta; - - return 1.0 / (cosAlpha * cosBeta - sinAlpha * sinBeta); - } - - function magnitudeToPoint( - scaledSpaceDirectionToPoint, - resultMagnitude, - result - ) { - // The horizon culling point is undefined if there were no positions from which to compute it, - // the directionToPoint is pointing opposite all of the positions, or if we computed NaN or infinity. - if ( - resultMagnitude <= 0.0 || - resultMagnitude === 1.0 / 0.0 || - resultMagnitude !== resultMagnitude - ) { - return undefined; - } - - return Matrix3.Cartesian3.multiplyByScalar( - scaledSpaceDirectionToPoint, - resultMagnitude, - result - ); - } - - const directionToPointScratch = new Matrix3.Cartesian3(); - - function computeScaledSpaceDirectionToPoint(ellipsoid, directionToPoint) { - if (Matrix3.Cartesian3.equals(directionToPoint, Matrix3.Cartesian3.ZERO)) { - return directionToPoint; - } - - ellipsoid.transformPositionToScaledSpace( - directionToPoint, - directionToPointScratch - ); - return Matrix3.Cartesian3.normalize(directionToPointScratch, directionToPointScratch); - } - - /** - * @private - */ - const TerrainExaggeration = {}; - - /** - * Scales a height relative to an offset. - * - * @param {Number} height The height. - * @param {Number} scale A scalar used to exaggerate the terrain. If the value is 1.0 there will be no effect. - * @param {Number} relativeHeight The height relative to which terrain is exaggerated. If the value is 0.0 terrain will be exaggerated relative to the ellipsoid surface. - */ - TerrainExaggeration.getHeight = function (height, scale, relativeHeight) { - return (height - relativeHeight) * scale + relativeHeight; - }; - - const scratchCartographic = new Matrix3.Cartesian3(); - - /** - * Scales a position by exaggeration. - */ - TerrainExaggeration.getPosition = function ( - position, - ellipsoid, - terrainExaggeration, - terrainExaggerationRelativeHeight, - result - ) { - const cartographic = ellipsoid.cartesianToCartographic( - position, - scratchCartographic - ); - const newHeight = TerrainExaggeration.getHeight( - cartographic.height, - terrainExaggeration, - terrainExaggerationRelativeHeight - ); - return Matrix3.Cartesian3.fromRadians( - cartographic.longitude, - cartographic.latitude, - newHeight, - ellipsoid, - result - ); - }; - - var TerrainExaggeration$1 = TerrainExaggeration; - - /** - * This enumerated type is used to determine how the vertices of the terrain mesh are compressed. - * - * @enum {Number} - * - * @private - */ - const TerrainQuantization = { - /** - * The vertices are not compressed. - * - * @type {Number} - * @constant - */ - NONE: 0, - - /** - * The vertices are compressed to 12 bits. - * - * @type {Number} - * @constant - */ - BITS12: 1, - }; - var TerrainQuantization$1 = Object.freeze(TerrainQuantization); - - const cartesian3Scratch = new Matrix3.Cartesian3(); - const cartesian3DimScratch = new Matrix3.Cartesian3(); - const cartesian2Scratch = new Matrix2.Cartesian2(); - const matrix4Scratch = new Matrix2.Matrix4(); - const matrix4Scratch2 = new Matrix2.Matrix4(); - - const SHIFT_LEFT_12 = Math.pow(2.0, 12.0); - - /** - * Data used to quantize and pack the terrain mesh. The position can be unpacked for picking and all attributes - * are unpacked in the vertex shader. - * - * @alias TerrainEncoding - * @constructor - * - * @param {Cartesian3} center The center point of the vertices. - * @param {AxisAlignedBoundingBox} axisAlignedBoundingBox The bounds of the tile in the east-north-up coordinates at the tiles center. - * @param {Number} minimumHeight The minimum height. - * @param {Number} maximumHeight The maximum height. - * @param {Matrix4} fromENU The east-north-up to fixed frame matrix at the center of the terrain mesh. - * @param {Boolean} hasVertexNormals If the mesh has vertex normals. - * @param {Boolean} [hasWebMercatorT=false] true if the terrain data includes a Web Mercator texture coordinate; otherwise, false. - * @param {Boolean} [hasGeodeticSurfaceNormals=false] true if the terrain data includes geodetic surface normals; otherwise, false. - * @param {Number} [exaggeration=1.0] A scalar used to exaggerate terrain. - * @param {Number} [exaggerationRelativeHeight=0.0] The relative height from which terrain is exaggerated. - * - * @private - */ - function TerrainEncoding( - center, - axisAlignedBoundingBox, - minimumHeight, - maximumHeight, - fromENU, - hasVertexNormals, - hasWebMercatorT, - hasGeodeticSurfaceNormals, - exaggeration, - exaggerationRelativeHeight - ) { - let quantization = TerrainQuantization$1.NONE; - let toENU; - let matrix; - - if ( - defaultValue.defined(axisAlignedBoundingBox) && - defaultValue.defined(minimumHeight) && - defaultValue.defined(maximumHeight) && - defaultValue.defined(fromENU) - ) { - const minimum = axisAlignedBoundingBox.minimum; - const maximum = axisAlignedBoundingBox.maximum; - - const dimensions = Matrix3.Cartesian3.subtract( - maximum, - minimum, - cartesian3DimScratch - ); - const hDim = maximumHeight - minimumHeight; - const maxDim = Math.max(Matrix3.Cartesian3.maximumComponent(dimensions), hDim); - - if (maxDim < SHIFT_LEFT_12 - 1.0) { - quantization = TerrainQuantization$1.BITS12; - } else { - quantization = TerrainQuantization$1.NONE; - } - - toENU = Matrix2.Matrix4.inverseTransformation(fromENU, new Matrix2.Matrix4()); - - const translation = Matrix3.Cartesian3.negate(minimum, cartesian3Scratch); - Matrix2.Matrix4.multiply( - Matrix2.Matrix4.fromTranslation(translation, matrix4Scratch), - toENU, - toENU - ); - - const scale = cartesian3Scratch; - scale.x = 1.0 / dimensions.x; - scale.y = 1.0 / dimensions.y; - scale.z = 1.0 / dimensions.z; - Matrix2.Matrix4.multiply(Matrix2.Matrix4.fromScale(scale, matrix4Scratch), toENU, toENU); - - matrix = Matrix2.Matrix4.clone(fromENU); - Matrix2.Matrix4.setTranslation(matrix, Matrix3.Cartesian3.ZERO, matrix); - - fromENU = Matrix2.Matrix4.clone(fromENU, new Matrix2.Matrix4()); - - const translationMatrix = Matrix2.Matrix4.fromTranslation(minimum, matrix4Scratch); - const scaleMatrix = Matrix2.Matrix4.fromScale(dimensions, matrix4Scratch2); - const st = Matrix2.Matrix4.multiply(translationMatrix, scaleMatrix, matrix4Scratch); - - Matrix2.Matrix4.multiply(fromENU, st, fromENU); - Matrix2.Matrix4.multiply(matrix, st, matrix); - } - - /** - * How the vertices of the mesh were compressed. - * @type {TerrainQuantization} - */ - this.quantization = quantization; - - /** - * The minimum height of the tile including the skirts. - * @type {Number} - */ - this.minimumHeight = minimumHeight; - - /** - * The maximum height of the tile. - * @type {Number} - */ - this.maximumHeight = maximumHeight; - - /** - * The center of the tile. - * @type {Cartesian3} - */ - this.center = Matrix3.Cartesian3.clone(center); - - /** - * A matrix that takes a vertex from the tile, transforms it to east-north-up at the center and scales - * it so each component is in the [0, 1] range. - * @type {Matrix4} - */ - this.toScaledENU = toENU; - - /** - * A matrix that restores a vertex transformed with toScaledENU back to the earth fixed reference frame - * @type {Matrix4} - */ - this.fromScaledENU = fromENU; - - /** - * The matrix used to decompress the terrain vertices in the shader for RTE rendering. - * @type {Matrix4} - */ - this.matrix = matrix; - - /** - * The terrain mesh contains normals. - * @type {Boolean} - */ - this.hasVertexNormals = hasVertexNormals; - - /** - * The terrain mesh contains a vertical texture coordinate following the Web Mercator projection. - * @type {Boolean} - */ - this.hasWebMercatorT = defaultValue.defaultValue(hasWebMercatorT, false); - - /** - * The terrain mesh contains geodetic surface normals, used for terrain exaggeration. - * @type {Boolean} - */ - this.hasGeodeticSurfaceNormals = defaultValue.defaultValue( - hasGeodeticSurfaceNormals, - false - ); - - /** - * A scalar used to exaggerate terrain. - * @type {Number} - */ - this.exaggeration = defaultValue.defaultValue(exaggeration, 1.0); - - /** - * The relative height from which terrain is exaggerated. - */ - this.exaggerationRelativeHeight = defaultValue.defaultValue( - exaggerationRelativeHeight, - 0.0 - ); - - /** - * The number of components in each vertex. This value can differ with different quantizations. - * @type {Number} - */ - this.stride = 0; - - this._offsetGeodeticSurfaceNormal = 0; - this._offsetVertexNormal = 0; - - // Calculate the stride and offsets declared above - this._calculateStrideAndOffsets(); - } - - TerrainEncoding.prototype.encode = function ( - vertexBuffer, - bufferIndex, - position, - uv, - height, - normalToPack, - webMercatorT, - geodeticSurfaceNormal - ) { - const u = uv.x; - const v = uv.y; - - if (this.quantization === TerrainQuantization$1.BITS12) { - position = Matrix2.Matrix4.multiplyByPoint( - this.toScaledENU, - position, - cartesian3Scratch - ); - - position.x = Math$1.CesiumMath.clamp(position.x, 0.0, 1.0); - position.y = Math$1.CesiumMath.clamp(position.y, 0.0, 1.0); - position.z = Math$1.CesiumMath.clamp(position.z, 0.0, 1.0); - - const hDim = this.maximumHeight - this.minimumHeight; - const h = Math$1.CesiumMath.clamp((height - this.minimumHeight) / hDim, 0.0, 1.0); - - Matrix2.Cartesian2.fromElements(position.x, position.y, cartesian2Scratch); - const compressed0 = AttributeCompression.AttributeCompression.compressTextureCoordinates( - cartesian2Scratch - ); - - Matrix2.Cartesian2.fromElements(position.z, h, cartesian2Scratch); - const compressed1 = AttributeCompression.AttributeCompression.compressTextureCoordinates( - cartesian2Scratch - ); - - Matrix2.Cartesian2.fromElements(u, v, cartesian2Scratch); - const compressed2 = AttributeCompression.AttributeCompression.compressTextureCoordinates( - cartesian2Scratch - ); - - vertexBuffer[bufferIndex++] = compressed0; - vertexBuffer[bufferIndex++] = compressed1; - vertexBuffer[bufferIndex++] = compressed2; - - if (this.hasWebMercatorT) { - Matrix2.Cartesian2.fromElements(webMercatorT, 0.0, cartesian2Scratch); - const compressed3 = AttributeCompression.AttributeCompression.compressTextureCoordinates( - cartesian2Scratch - ); - vertexBuffer[bufferIndex++] = compressed3; - } - } else { - Matrix3.Cartesian3.subtract(position, this.center, cartesian3Scratch); - - vertexBuffer[bufferIndex++] = cartesian3Scratch.x; - vertexBuffer[bufferIndex++] = cartesian3Scratch.y; - vertexBuffer[bufferIndex++] = cartesian3Scratch.z; - vertexBuffer[bufferIndex++] = height; - vertexBuffer[bufferIndex++] = u; - vertexBuffer[bufferIndex++] = v; - - if (this.hasWebMercatorT) { - vertexBuffer[bufferIndex++] = webMercatorT; - } - } - - if (this.hasVertexNormals) { - vertexBuffer[bufferIndex++] = AttributeCompression.AttributeCompression.octPackFloat( - normalToPack - ); - } - - if (this.hasGeodeticSurfaceNormals) { - vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.x; - vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.y; - vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.z; - } - - return bufferIndex; - }; - - const scratchPosition = new Matrix3.Cartesian3(); - const scratchGeodeticSurfaceNormal = new Matrix3.Cartesian3(); - - TerrainEncoding.prototype.addGeodeticSurfaceNormals = function ( - oldBuffer, - newBuffer, - ellipsoid - ) { - if (this.hasGeodeticSurfaceNormals) { - return; - } - - const oldStride = this.stride; - const vertexCount = oldBuffer.length / oldStride; - this.hasGeodeticSurfaceNormals = true; - this._calculateStrideAndOffsets(); - const newStride = this.stride; - - for (let index = 0; index < vertexCount; index++) { - for (let offset = 0; offset < oldStride; offset++) { - const oldIndex = index * oldStride + offset; - const newIndex = index * newStride + offset; - newBuffer[newIndex] = oldBuffer[oldIndex]; - } - const position = this.decodePosition(newBuffer, index, scratchPosition); - const geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal( - position, - scratchGeodeticSurfaceNormal - ); - - const bufferIndex = index * newStride + this._offsetGeodeticSurfaceNormal; - newBuffer[bufferIndex] = geodeticSurfaceNormal.x; - newBuffer[bufferIndex + 1] = geodeticSurfaceNormal.y; - newBuffer[bufferIndex + 2] = geodeticSurfaceNormal.z; - } - }; - - TerrainEncoding.prototype.removeGeodeticSurfaceNormals = function ( - oldBuffer, - newBuffer - ) { - if (!this.hasGeodeticSurfaceNormals) { - return; - } - - const oldStride = this.stride; - const vertexCount = oldBuffer.length / oldStride; - this.hasGeodeticSurfaceNormals = false; - this._calculateStrideAndOffsets(); - const newStride = this.stride; - - for (let index = 0; index < vertexCount; index++) { - for (let offset = 0; offset < newStride; offset++) { - const oldIndex = index * oldStride + offset; - const newIndex = index * newStride + offset; - newBuffer[newIndex] = oldBuffer[oldIndex]; - } - } - }; - - TerrainEncoding.prototype.decodePosition = function (buffer, index, result) { - if (!defaultValue.defined(result)) { - result = new Matrix3.Cartesian3(); - } - - index *= this.stride; - - if (this.quantization === TerrainQuantization$1.BITS12) { - const xy = AttributeCompression.AttributeCompression.decompressTextureCoordinates( - buffer[index], - cartesian2Scratch - ); - result.x = xy.x; - result.y = xy.y; - - const zh = AttributeCompression.AttributeCompression.decompressTextureCoordinates( - buffer[index + 1], - cartesian2Scratch - ); - result.z = zh.x; - - return Matrix2.Matrix4.multiplyByPoint(this.fromScaledENU, result, result); - } - - result.x = buffer[index]; - result.y = buffer[index + 1]; - result.z = buffer[index + 2]; - return Matrix3.Cartesian3.add(result, this.center, result); - }; - - TerrainEncoding.prototype.getExaggeratedPosition = function ( - buffer, - index, - result - ) { - result = this.decodePosition(buffer, index, result); - - const exaggeration = this.exaggeration; - const exaggerationRelativeHeight = this.exaggerationRelativeHeight; - const hasExaggeration = exaggeration !== 1.0; - if (hasExaggeration && this.hasGeodeticSurfaceNormals) { - const geodeticSurfaceNormal = this.decodeGeodeticSurfaceNormal( - buffer, - index, - scratchGeodeticSurfaceNormal - ); - const rawHeight = this.decodeHeight(buffer, index); - const heightDifference = - TerrainExaggeration$1.getHeight( - rawHeight, - exaggeration, - exaggerationRelativeHeight - ) - rawHeight; - - // some math is unrolled for better performance - result.x += geodeticSurfaceNormal.x * heightDifference; - result.y += geodeticSurfaceNormal.y * heightDifference; - result.z += geodeticSurfaceNormal.z * heightDifference; - } - - return result; - }; - - TerrainEncoding.prototype.decodeTextureCoordinates = function ( - buffer, - index, - result - ) { - if (!defaultValue.defined(result)) { - result = new Matrix2.Cartesian2(); - } - - index *= this.stride; - - if (this.quantization === TerrainQuantization$1.BITS12) { - return AttributeCompression.AttributeCompression.decompressTextureCoordinates( - buffer[index + 2], - result - ); - } - - return Matrix2.Cartesian2.fromElements(buffer[index + 4], buffer[index + 5], result); - }; - - TerrainEncoding.prototype.decodeHeight = function (buffer, index) { - index *= this.stride; - - if (this.quantization === TerrainQuantization$1.BITS12) { - const zh = AttributeCompression.AttributeCompression.decompressTextureCoordinates( - buffer[index + 1], - cartesian2Scratch - ); - return ( - zh.y * (this.maximumHeight - this.minimumHeight) + this.minimumHeight - ); - } - - return buffer[index + 3]; - }; - - TerrainEncoding.prototype.decodeWebMercatorT = function (buffer, index) { - index *= this.stride; - - if (this.quantization === TerrainQuantization$1.BITS12) { - return AttributeCompression.AttributeCompression.decompressTextureCoordinates( - buffer[index + 3], - cartesian2Scratch - ).x; - } - - return buffer[index + 6]; - }; - - TerrainEncoding.prototype.getOctEncodedNormal = function ( - buffer, - index, - result - ) { - index = index * this.stride + this._offsetVertexNormal; - - const temp = buffer[index] / 256.0; - const x = Math.floor(temp); - const y = (temp - x) * 256.0; - - return Matrix2.Cartesian2.fromElements(x, y, result); - }; - - TerrainEncoding.prototype.decodeGeodeticSurfaceNormal = function ( - buffer, - index, - result - ) { - index = index * this.stride + this._offsetGeodeticSurfaceNormal; - - result.x = buffer[index]; - result.y = buffer[index + 1]; - result.z = buffer[index + 2]; - return result; - }; - - TerrainEncoding.prototype._calculateStrideAndOffsets = function () { - let vertexStride = 0; - - switch (this.quantization) { - case TerrainQuantization$1.BITS12: - vertexStride += 3; - break; - default: - vertexStride += 6; - } - if (this.hasWebMercatorT) { - vertexStride += 1; - } - if (this.hasVertexNormals) { - this._offsetVertexNormal = vertexStride; - vertexStride += 1; - } - if (this.hasGeodeticSurfaceNormals) { - this._offsetGeodeticSurfaceNormal = vertexStride; - vertexStride += 3; - } - - this.stride = vertexStride; - }; - - const attributesIndicesNone = { - position3DAndHeight: 0, - textureCoordAndEncodedNormals: 1, - geodeticSurfaceNormal: 2, - }; - const attributesIndicesBits12 = { - compressed0: 0, - compressed1: 1, - geodeticSurfaceNormal: 2, - }; - - TerrainEncoding.prototype.getAttributes = function (buffer) { - const datatype = ComponentDatatype.ComponentDatatype.FLOAT; - const sizeInBytes = ComponentDatatype.ComponentDatatype.getSizeInBytes(datatype); - const strideInBytes = this.stride * sizeInBytes; - let offsetInBytes = 0; - - const attributes = []; - function addAttribute(index, componentsPerAttribute) { - attributes.push({ - index: index, - vertexBuffer: buffer, - componentDatatype: datatype, - componentsPerAttribute: componentsPerAttribute, - offsetInBytes: offsetInBytes, - strideInBytes: strideInBytes, - }); - offsetInBytes += componentsPerAttribute * sizeInBytes; - } - - if (this.quantization === TerrainQuantization$1.NONE) { - addAttribute(attributesIndicesNone.position3DAndHeight, 4); - - let componentsTexCoordAndNormals = 2; - componentsTexCoordAndNormals += this.hasWebMercatorT ? 1 : 0; - componentsTexCoordAndNormals += this.hasVertexNormals ? 1 : 0; - addAttribute( - attributesIndicesNone.textureCoordAndEncodedNormals, - componentsTexCoordAndNormals - ); - - if (this.hasGeodeticSurfaceNormals) { - addAttribute(attributesIndicesNone.geodeticSurfaceNormal, 3); - } - } else { - // When there is no webMercatorT or vertex normals, the attribute only needs 3 components: x/y, z/h, u/v. - // WebMercatorT and vertex normals each take up one component, so if only one of them is present the first - // attribute gets a 4th component. If both are present, we need an additional attribute that has 1 component. - const usingAttribute0Component4 = - this.hasWebMercatorT || this.hasVertexNormals; - const usingAttribute1Component1 = - this.hasWebMercatorT && this.hasVertexNormals; - addAttribute( - attributesIndicesBits12.compressed0, - usingAttribute0Component4 ? 4 : 3 - ); - - if (usingAttribute1Component1) { - addAttribute(attributesIndicesBits12.compressed1, 1); - } - - if (this.hasGeodeticSurfaceNormals) { - addAttribute(attributesIndicesBits12.geodeticSurfaceNormal, 3); - } - } - - return attributes; - }; - - TerrainEncoding.prototype.getAttributeLocations = function () { - if (this.quantization === TerrainQuantization$1.NONE) { - return attributesIndicesNone; - } - return attributesIndicesBits12; - }; - - TerrainEncoding.clone = function (encoding, result) { - if (!defaultValue.defined(encoding)) { - return undefined; - } - if (!defaultValue.defined(result)) { - result = new TerrainEncoding(); - } - - result.quantization = encoding.quantization; - result.minimumHeight = encoding.minimumHeight; - result.maximumHeight = encoding.maximumHeight; - result.center = Matrix3.Cartesian3.clone(encoding.center); - result.toScaledENU = Matrix2.Matrix4.clone(encoding.toScaledENU); - result.fromScaledENU = Matrix2.Matrix4.clone(encoding.fromScaledENU); - result.matrix = Matrix2.Matrix4.clone(encoding.matrix); - result.hasVertexNormals = encoding.hasVertexNormals; - result.hasWebMercatorT = encoding.hasWebMercatorT; - result.hasGeodeticSurfaceNormals = encoding.hasGeodeticSurfaceNormals; - result.exaggeration = encoding.exaggeration; - result.exaggerationRelativeHeight = encoding.exaggerationRelativeHeight; - - result._calculateStrideAndOffsets(); - - return result; - }; - - exports.EllipsoidalOccluder = EllipsoidalOccluder; - exports.TerrainEncoding = TerrainEncoding; - -})); -//# sourceMappingURL=TerrainEncoding-c7d764e4.js.map diff --git a/debug/cesium/Workers/TerrainEncoding-c7d764e4.js.map b/debug/cesium/Workers/TerrainEncoding-c7d764e4.js.map deleted file mode 100644 index b0e4a36..0000000 --- a/debug/cesium/Workers/TerrainEncoding-c7d764e4.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"TerrainEncoding-c7d764e4.js","sources":["../../../Source/Core/EllipsoidalOccluder.js","../../../Source/Core/TerrainExaggeration.js","../../../Source/Core/TerrainQuantization.js","../../../Source/Core/TerrainEncoding.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\n\r\n/**\r\n * Determine whether or not other objects are visible or hidden behind the visible horizon defined by\r\n * an {@link Ellipsoid} and a camera position. The ellipsoid is assumed to be located at the\r\n * origin of the coordinate system. This class uses the algorithm described in the\r\n * {@link https://cesium.com/blog/2013/04/25/Horizon-culling/|Horizon Culling} blog post.\r\n *\r\n * @alias EllipsoidalOccluder\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid to use as an occluder.\r\n * @param {Cartesian3} [cameraPosition] The coordinate of the viewer/camera. If this parameter is not\r\n * specified, {@link EllipsoidalOccluder#cameraPosition} must be called before\r\n * testing visibility.\r\n *\r\n * @constructor\r\n *\r\n * @example\r\n * // Construct an ellipsoidal occluder with radii 1.0, 1.1, and 0.9.\r\n * const cameraPosition = new Cesium.Cartesian3(5.0, 6.0, 7.0);\r\n * const occluderEllipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\r\n * const occluder = new Cesium.EllipsoidalOccluder(occluderEllipsoid, cameraPosition);\r\n *\r\n * @private\r\n */\r\nfunction EllipsoidalOccluder(ellipsoid, cameraPosition) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\r\n //>>includeEnd('debug');\r\n\r\n this._ellipsoid = ellipsoid;\r\n this._cameraPosition = new Cartesian3();\r\n this._cameraPositionInScaledSpace = new Cartesian3();\r\n this._distanceToLimbInScaledSpaceSquared = 0.0;\r\n\r\n // cameraPosition fills in the above values\r\n if (defined(cameraPosition)) {\r\n this.cameraPosition = cameraPosition;\r\n }\r\n}\r\n\r\nObject.defineProperties(EllipsoidalOccluder.prototype, {\r\n /**\r\n * Gets the occluding ellipsoid.\r\n * @memberof EllipsoidalOccluder.prototype\r\n * @type {Ellipsoid}\r\n */\r\n ellipsoid: {\r\n get: function () {\r\n return this._ellipsoid;\r\n },\r\n },\r\n /**\r\n * Gets or sets the position of the camera.\r\n * @memberof EllipsoidalOccluder.prototype\r\n * @type {Cartesian3}\r\n */\r\n cameraPosition: {\r\n get: function () {\r\n return this._cameraPosition;\r\n },\r\n set: function (cameraPosition) {\r\n // See https://cesium.com/blog/2013/04/25/Horizon-culling/\r\n const ellipsoid = this._ellipsoid;\r\n const cv = ellipsoid.transformPositionToScaledSpace(\r\n cameraPosition,\r\n this._cameraPositionInScaledSpace\r\n );\r\n const vhMagnitudeSquared = Cartesian3.magnitudeSquared(cv) - 1.0;\r\n\r\n Cartesian3.clone(cameraPosition, this._cameraPosition);\r\n this._cameraPositionInScaledSpace = cv;\r\n this._distanceToLimbInScaledSpaceSquared = vhMagnitudeSquared;\r\n },\r\n },\r\n});\r\n\r\nconst scratchCartesian = new Cartesian3();\r\n\r\n/**\r\n * Determines whether or not a point, the occludee, is hidden from view by the occluder.\r\n *\r\n * @param {Cartesian3} occludee The point to test for visibility.\r\n * @returns {Boolean} true if the occludee is visible; otherwise false.\r\n *\r\n * @example\r\n * const cameraPosition = new Cesium.Cartesian3(0, 0, 2.5);\r\n * const ellipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\r\n * const occluder = new Cesium.EllipsoidalOccluder(ellipsoid, cameraPosition);\r\n * const point = new Cesium.Cartesian3(0, -3, -3);\r\n * occluder.isPointVisible(point); //returns true\r\n */\r\nEllipsoidalOccluder.prototype.isPointVisible = function (occludee) {\r\n const ellipsoid = this._ellipsoid;\r\n const occludeeScaledSpacePosition = ellipsoid.transformPositionToScaledSpace(\r\n occludee,\r\n scratchCartesian\r\n );\r\n return isScaledSpacePointVisible(\r\n occludeeScaledSpacePosition,\r\n this._cameraPositionInScaledSpace,\r\n this._distanceToLimbInScaledSpaceSquared\r\n );\r\n};\r\n\r\n/**\r\n * Determines whether or not a point expressed in the ellipsoid scaled space, is hidden from view by the\r\n * occluder. To transform a Cartesian X, Y, Z position in the coordinate system aligned with the ellipsoid\r\n * into the scaled space, call {@link Ellipsoid#transformPositionToScaledSpace}.\r\n *\r\n * @param {Cartesian3} occludeeScaledSpacePosition The point to test for visibility, represented in the scaled space.\r\n * @returns {Boolean} true if the occludee is visible; otherwise false.\r\n *\r\n * @example\r\n * const cameraPosition = new Cesium.Cartesian3(0, 0, 2.5);\r\n * const ellipsoid = new Cesium.Ellipsoid(1.0, 1.1, 0.9);\r\n * const occluder = new Cesium.EllipsoidalOccluder(ellipsoid, cameraPosition);\r\n * const point = new Cesium.Cartesian3(0, -3, -3);\r\n * const scaledSpacePoint = ellipsoid.transformPositionToScaledSpace(point);\r\n * occluder.isScaledSpacePointVisible(scaledSpacePoint); //returns true\r\n */\r\nEllipsoidalOccluder.prototype.isScaledSpacePointVisible = function (\r\n occludeeScaledSpacePosition\r\n) {\r\n return isScaledSpacePointVisible(\r\n occludeeScaledSpacePosition,\r\n this._cameraPositionInScaledSpace,\r\n this._distanceToLimbInScaledSpaceSquared\r\n );\r\n};\r\n\r\nconst scratchCameraPositionInScaledSpaceShrunk = new Cartesian3();\r\n\r\n/**\r\n * Similar to {@link EllipsoidalOccluder#isScaledSpacePointVisible} except tests against an\r\n * ellipsoid that has been shrunk by the minimum height when the minimum height is below\r\n * the ellipsoid. This is intended to be used with points generated by\r\n * {@link EllipsoidalOccluder#computeHorizonCullingPointPossiblyUnderEllipsoid} or\r\n * {@link EllipsoidalOccluder#computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid}.\r\n *\r\n * @param {Cartesian3} occludeeScaledSpacePosition The point to test for visibility, represented in the scaled space of the possibly-shrunk ellipsoid.\r\n * @returns {Boolean} true if the occludee is visible; otherwise false.\r\n */\r\nEllipsoidalOccluder.prototype.isScaledSpacePointVisiblePossiblyUnderEllipsoid = function (\r\n occludeeScaledSpacePosition,\r\n minimumHeight\r\n) {\r\n const ellipsoid = this._ellipsoid;\r\n let vhMagnitudeSquared;\r\n let cv;\r\n\r\n if (\r\n defined(minimumHeight) &&\r\n minimumHeight < 0.0 &&\r\n ellipsoid.minimumRadius > -minimumHeight\r\n ) {\r\n // This code is similar to the cameraPosition setter, but unrolled for performance because it will be called a lot.\r\n cv = scratchCameraPositionInScaledSpaceShrunk;\r\n cv.x = this._cameraPosition.x / (ellipsoid.radii.x + minimumHeight);\r\n cv.y = this._cameraPosition.y / (ellipsoid.radii.y + minimumHeight);\r\n cv.z = this._cameraPosition.z / (ellipsoid.radii.z + minimumHeight);\r\n vhMagnitudeSquared = cv.x * cv.x + cv.y * cv.y + cv.z * cv.z - 1.0;\r\n } else {\r\n cv = this._cameraPositionInScaledSpace;\r\n vhMagnitudeSquared = this._distanceToLimbInScaledSpaceSquared;\r\n }\r\n\r\n return isScaledSpacePointVisible(\r\n occludeeScaledSpacePosition,\r\n cv,\r\n vhMagnitudeSquared\r\n );\r\n};\r\n\r\n/**\r\n * Computes a point that can be used for horizon culling from a list of positions. If the point is below\r\n * the horizon, all of the positions are guaranteed to be below the horizon as well. The returned point\r\n * is expressed in the ellipsoid-scaled space and is suitable for use with\r\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\r\n *\r\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\r\n * A reasonable direction to use is the direction from the center of the ellipsoid to\r\n * the center of the bounding sphere computed from the positions. The direction need not\r\n * be normalized.\r\n * @param {Cartesian3[]} positions The positions from which to compute the horizon culling point. The positions\r\n * must be expressed in a reference frame centered at the ellipsoid and aligned with the\r\n * ellipsoid's axes.\r\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\r\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\r\n */\r\nEllipsoidalOccluder.prototype.computeHorizonCullingPoint = function (\r\n directionToPoint,\r\n positions,\r\n result\r\n) {\r\n return computeHorizonCullingPointFromPositions(\r\n this._ellipsoid,\r\n directionToPoint,\r\n positions,\r\n result\r\n );\r\n};\r\n\r\nconst scratchEllipsoidShrunk = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\n\r\n/**\r\n * Similar to {@link EllipsoidalOccluder#computeHorizonCullingPoint} except computes the culling\r\n * point relative to an ellipsoid that has been shrunk by the minimum height when the minimum height is below\r\n * the ellipsoid. The returned point is expressed in the possibly-shrunk ellipsoid-scaled space and is suitable\r\n * for use with {@link EllipsoidalOccluder#isScaledSpacePointVisiblePossiblyUnderEllipsoid}.\r\n *\r\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\r\n * A reasonable direction to use is the direction from the center of the ellipsoid to\r\n * the center of the bounding sphere computed from the positions. The direction need not\r\n * be normalized.\r\n * @param {Cartesian3[]} positions The positions from which to compute the horizon culling point. The positions\r\n * must be expressed in a reference frame centered at the ellipsoid and aligned with the\r\n * ellipsoid's axes.\r\n * @param {Number} [minimumHeight] The minimum height of all positions. If this value is undefined, all positions are assumed to be above the ellipsoid.\r\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\r\n * @returns {Cartesian3} The computed horizon culling point, expressed in the possibly-shrunk ellipsoid-scaled space.\r\n */\r\nEllipsoidalOccluder.prototype.computeHorizonCullingPointPossiblyUnderEllipsoid = function (\r\n directionToPoint,\r\n positions,\r\n minimumHeight,\r\n result\r\n) {\r\n const possiblyShrunkEllipsoid = getPossiblyShrunkEllipsoid(\r\n this._ellipsoid,\r\n minimumHeight,\r\n scratchEllipsoidShrunk\r\n );\r\n return computeHorizonCullingPointFromPositions(\r\n possiblyShrunkEllipsoid,\r\n directionToPoint,\r\n positions,\r\n result\r\n );\r\n};\r\n/**\r\n * Computes a point that can be used for horizon culling from a list of positions. If the point is below\r\n * the horizon, all of the positions are guaranteed to be below the horizon as well. The returned point\r\n * is expressed in the ellipsoid-scaled space and is suitable for use with\r\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\r\n *\r\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\r\n * A reasonable direction to use is the direction from the center of the ellipsoid to\r\n * the center of the bounding sphere computed from the positions. The direction need not\r\n * be normalized.\r\n * @param {Number[]} vertices The vertices from which to compute the horizon culling point. The positions\r\n * must be expressed in a reference frame centered at the ellipsoid and aligned with the\r\n * ellipsoid's axes.\r\n * @param {Number} [stride=3]\r\n * @param {Cartesian3} [center=Cartesian3.ZERO]\r\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\r\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\r\n */\r\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromVertices = function (\r\n directionToPoint,\r\n vertices,\r\n stride,\r\n center,\r\n result\r\n) {\r\n return computeHorizonCullingPointFromVertices(\r\n this._ellipsoid,\r\n directionToPoint,\r\n vertices,\r\n stride,\r\n center,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Similar to {@link EllipsoidalOccluder#computeHorizonCullingPointFromVertices} except computes the culling\r\n * point relative to an ellipsoid that has been shrunk by the minimum height when the minimum height is below\r\n * the ellipsoid. The returned point is expressed in the possibly-shrunk ellipsoid-scaled space and is suitable\r\n * for use with {@link EllipsoidalOccluder#isScaledSpacePointVisiblePossiblyUnderEllipsoid}.\r\n *\r\n * @param {Cartesian3} directionToPoint The direction that the computed point will lie along.\r\n * A reasonable direction to use is the direction from the center of the ellipsoid to\r\n * the center of the bounding sphere computed from the positions. The direction need not\r\n * be normalized.\r\n * @param {Number[]} vertices The vertices from which to compute the horizon culling point. The positions\r\n * must be expressed in a reference frame centered at the ellipsoid and aligned with the\r\n * ellipsoid's axes.\r\n * @param {Number} [stride=3]\r\n * @param {Cartesian3} [center=Cartesian3.ZERO]\r\n * @param {Number} [minimumHeight] The minimum height of all vertices. If this value is undefined, all vertices are assumed to be above the ellipsoid.\r\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\r\n * @returns {Cartesian3} The computed horizon culling point, expressed in the possibly-shrunk ellipsoid-scaled space.\r\n */\r\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid = function (\r\n directionToPoint,\r\n vertices,\r\n stride,\r\n center,\r\n minimumHeight,\r\n result\r\n) {\r\n const possiblyShrunkEllipsoid = getPossiblyShrunkEllipsoid(\r\n this._ellipsoid,\r\n minimumHeight,\r\n scratchEllipsoidShrunk\r\n );\r\n return computeHorizonCullingPointFromVertices(\r\n possiblyShrunkEllipsoid,\r\n directionToPoint,\r\n vertices,\r\n stride,\r\n center,\r\n result\r\n );\r\n};\r\n\r\nconst subsampleScratch = [];\r\n\r\n/**\r\n * Computes a point that can be used for horizon culling of a rectangle. If the point is below\r\n * the horizon, the ellipsoid-conforming rectangle is guaranteed to be below the horizon as well.\r\n * The returned point is expressed in the ellipsoid-scaled space and is suitable for use with\r\n * {@link EllipsoidalOccluder#isScaledSpacePointVisible}.\r\n *\r\n * @param {Rectangle} rectangle The rectangle for which to compute the horizon culling point.\r\n * @param {Ellipsoid} ellipsoid The ellipsoid on which the rectangle is defined. This may be different from\r\n * the ellipsoid used by this instance for occlusion testing.\r\n * @param {Cartesian3} [result] The instance on which to store the result instead of allocating a new instance.\r\n * @returns {Cartesian3} The computed horizon culling point, expressed in the ellipsoid-scaled space.\r\n */\r\nEllipsoidalOccluder.prototype.computeHorizonCullingPointFromRectangle = function (\r\n rectangle,\r\n ellipsoid,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n\r\n const positions = Rectangle.subsample(\r\n rectangle,\r\n ellipsoid,\r\n 0.0,\r\n subsampleScratch\r\n );\r\n const bs = BoundingSphere.fromPoints(positions);\r\n\r\n // If the bounding sphere center is too close to the center of the occluder, it doesn't make\r\n // sense to try to horizon cull it.\r\n if (Cartesian3.magnitude(bs.center) < 0.1 * ellipsoid.minimumRadius) {\r\n return undefined;\r\n }\r\n\r\n return this.computeHorizonCullingPoint(bs.center, positions, result);\r\n};\r\n\r\nconst scratchEllipsoidShrunkRadii = new Cartesian3();\r\n\r\nfunction getPossiblyShrunkEllipsoid(ellipsoid, minimumHeight, result) {\r\n if (\r\n defined(minimumHeight) &&\r\n minimumHeight < 0.0 &&\r\n ellipsoid.minimumRadius > -minimumHeight\r\n ) {\r\n const ellipsoidShrunkRadii = Cartesian3.fromElements(\r\n ellipsoid.radii.x + minimumHeight,\r\n ellipsoid.radii.y + minimumHeight,\r\n ellipsoid.radii.z + minimumHeight,\r\n scratchEllipsoidShrunkRadii\r\n );\r\n ellipsoid = Ellipsoid.fromCartesian3(ellipsoidShrunkRadii, result);\r\n }\r\n return ellipsoid;\r\n}\r\n\r\nfunction computeHorizonCullingPointFromPositions(\r\n ellipsoid,\r\n directionToPoint,\r\n positions,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"directionToPoint\", directionToPoint);\r\n Check.defined(\"positions\", positions);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n const scaledSpaceDirectionToPoint = computeScaledSpaceDirectionToPoint(\r\n ellipsoid,\r\n directionToPoint\r\n );\r\n let resultMagnitude = 0.0;\r\n\r\n for (let i = 0, len = positions.length; i < len; ++i) {\r\n const position = positions[i];\r\n const candidateMagnitude = computeMagnitude(\r\n ellipsoid,\r\n position,\r\n scaledSpaceDirectionToPoint\r\n );\r\n if (candidateMagnitude < 0.0) {\r\n // all points should face the same direction, but this one doesn't, so return undefined\r\n return undefined;\r\n }\r\n resultMagnitude = Math.max(resultMagnitude, candidateMagnitude);\r\n }\r\n\r\n return magnitudeToPoint(scaledSpaceDirectionToPoint, resultMagnitude, result);\r\n}\r\n\r\nconst positionScratch = new Cartesian3();\r\n\r\nfunction computeHorizonCullingPointFromVertices(\r\n ellipsoid,\r\n directionToPoint,\r\n vertices,\r\n stride,\r\n center,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"directionToPoint\", directionToPoint);\r\n Check.defined(\"vertices\", vertices);\r\n Check.typeOf.number(\"stride\", stride);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n stride = defaultValue(stride, 3);\r\n center = defaultValue(center, Cartesian3.ZERO);\r\n const scaledSpaceDirectionToPoint = computeScaledSpaceDirectionToPoint(\r\n ellipsoid,\r\n directionToPoint\r\n );\r\n let resultMagnitude = 0.0;\r\n\r\n for (let i = 0, len = vertices.length; i < len; i += stride) {\r\n positionScratch.x = vertices[i] + center.x;\r\n positionScratch.y = vertices[i + 1] + center.y;\r\n positionScratch.z = vertices[i + 2] + center.z;\r\n\r\n const candidateMagnitude = computeMagnitude(\r\n ellipsoid,\r\n positionScratch,\r\n scaledSpaceDirectionToPoint\r\n );\r\n if (candidateMagnitude < 0.0) {\r\n // all points should face the same direction, but this one doesn't, so return undefined\r\n return undefined;\r\n }\r\n resultMagnitude = Math.max(resultMagnitude, candidateMagnitude);\r\n }\r\n\r\n return magnitudeToPoint(scaledSpaceDirectionToPoint, resultMagnitude, result);\r\n}\r\n\r\nfunction isScaledSpacePointVisible(\r\n occludeeScaledSpacePosition,\r\n cameraPositionInScaledSpace,\r\n distanceToLimbInScaledSpaceSquared\r\n) {\r\n // See https://cesium.com/blog/2013/04/25/Horizon-culling/\r\n const cv = cameraPositionInScaledSpace;\r\n const vhMagnitudeSquared = distanceToLimbInScaledSpaceSquared;\r\n const vt = Cartesian3.subtract(\r\n occludeeScaledSpacePosition,\r\n cv,\r\n scratchCartesian\r\n );\r\n const vtDotVc = -Cartesian3.dot(vt, cv);\r\n // If vhMagnitudeSquared < 0 then we are below the surface of the ellipsoid and\r\n // in this case, set the culling plane to be on V.\r\n const isOccluded =\r\n vhMagnitudeSquared < 0\r\n ? vtDotVc > 0\r\n : vtDotVc > vhMagnitudeSquared &&\r\n (vtDotVc * vtDotVc) / Cartesian3.magnitudeSquared(vt) >\r\n vhMagnitudeSquared;\r\n return !isOccluded;\r\n}\r\n\r\nconst scaledSpaceScratch = new Cartesian3();\r\nconst directionScratch = new Cartesian3();\r\n\r\nfunction computeMagnitude(ellipsoid, position, scaledSpaceDirectionToPoint) {\r\n const scaledSpacePosition = ellipsoid.transformPositionToScaledSpace(\r\n position,\r\n scaledSpaceScratch\r\n );\r\n let magnitudeSquared = Cartesian3.magnitudeSquared(scaledSpacePosition);\r\n let magnitude = Math.sqrt(magnitudeSquared);\r\n const direction = Cartesian3.divideByScalar(\r\n scaledSpacePosition,\r\n magnitude,\r\n directionScratch\r\n );\r\n\r\n // For the purpose of this computation, points below the ellipsoid are consider to be on it instead.\r\n magnitudeSquared = Math.max(1.0, magnitudeSquared);\r\n magnitude = Math.max(1.0, magnitude);\r\n\r\n const cosAlpha = Cartesian3.dot(direction, scaledSpaceDirectionToPoint);\r\n const sinAlpha = Cartesian3.magnitude(\r\n Cartesian3.cross(direction, scaledSpaceDirectionToPoint, direction)\r\n );\r\n const cosBeta = 1.0 / magnitude;\r\n const sinBeta = Math.sqrt(magnitudeSquared - 1.0) * cosBeta;\r\n\r\n return 1.0 / (cosAlpha * cosBeta - sinAlpha * sinBeta);\r\n}\r\n\r\nfunction magnitudeToPoint(\r\n scaledSpaceDirectionToPoint,\r\n resultMagnitude,\r\n result\r\n) {\r\n // The horizon culling point is undefined if there were no positions from which to compute it,\r\n // the directionToPoint is pointing opposite all of the positions, or if we computed NaN or infinity.\r\n if (\r\n resultMagnitude <= 0.0 ||\r\n resultMagnitude === 1.0 / 0.0 ||\r\n resultMagnitude !== resultMagnitude\r\n ) {\r\n return undefined;\r\n }\r\n\r\n return Cartesian3.multiplyByScalar(\r\n scaledSpaceDirectionToPoint,\r\n resultMagnitude,\r\n result\r\n );\r\n}\r\n\r\nconst directionToPointScratch = new Cartesian3();\r\n\r\nfunction computeScaledSpaceDirectionToPoint(ellipsoid, directionToPoint) {\r\n if (Cartesian3.equals(directionToPoint, Cartesian3.ZERO)) {\r\n return directionToPoint;\r\n }\r\n\r\n ellipsoid.transformPositionToScaledSpace(\r\n directionToPoint,\r\n directionToPointScratch\r\n );\r\n return Cartesian3.normalize(directionToPointScratch, directionToPointScratch);\r\n}\r\nexport default EllipsoidalOccluder;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst TerrainExaggeration = {};\r\n\r\n/**\r\n * Scales a height relative to an offset.\r\n *\r\n * @param {Number} height The height.\r\n * @param {Number} scale A scalar used to exaggerate the terrain. If the value is 1.0 there will be no effect.\r\n * @param {Number} relativeHeight The height relative to which terrain is exaggerated. If the value is 0.0 terrain will be exaggerated relative to the ellipsoid surface.\r\n */\r\nTerrainExaggeration.getHeight = function (height, scale, relativeHeight) {\r\n return (height - relativeHeight) * scale + relativeHeight;\r\n};\r\n\r\nconst scratchCartographic = new Cartesian3();\r\n\r\n/**\r\n * Scales a position by exaggeration.\r\n */\r\nTerrainExaggeration.getPosition = function (\r\n position,\r\n ellipsoid,\r\n terrainExaggeration,\r\n terrainExaggerationRelativeHeight,\r\n result\r\n) {\r\n const cartographic = ellipsoid.cartesianToCartographic(\r\n position,\r\n scratchCartographic\r\n );\r\n const newHeight = TerrainExaggeration.getHeight(\r\n cartographic.height,\r\n terrainExaggeration,\r\n terrainExaggerationRelativeHeight\r\n );\r\n return Cartesian3.fromRadians(\r\n cartographic.longitude,\r\n cartographic.latitude,\r\n newHeight,\r\n ellipsoid,\r\n result\r\n );\r\n};\r\n\r\nexport default TerrainExaggeration;\r\n","/**\r\n * This enumerated type is used to determine how the vertices of the terrain mesh are compressed.\r\n *\r\n * @enum {Number}\r\n *\r\n * @private\r\n */\r\nconst TerrainQuantization = {\r\n /**\r\n * The vertices are not compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n NONE: 0,\r\n\r\n /**\r\n * The vertices are compressed to 12 bits.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n BITS12: 1,\r\n};\r\nexport default Object.freeze(TerrainQuantization);\r\n","import AttributeCompression from \"./AttributeCompression.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport TerrainExaggeration from \"./TerrainExaggeration.js\";\r\nimport TerrainQuantization from \"./TerrainQuantization.js\";\r\n\r\nconst cartesian3Scratch = new Cartesian3();\r\nconst cartesian3DimScratch = new Cartesian3();\r\nconst cartesian2Scratch = new Cartesian2();\r\nconst matrix4Scratch = new Matrix4();\r\nconst matrix4Scratch2 = new Matrix4();\r\n\r\nconst SHIFT_LEFT_12 = Math.pow(2.0, 12.0);\r\n\r\n/**\r\n * Data used to quantize and pack the terrain mesh. The position can be unpacked for picking and all attributes\r\n * are unpacked in the vertex shader.\r\n *\r\n * @alias TerrainEncoding\r\n * @constructor\r\n *\r\n * @param {Cartesian3} center The center point of the vertices.\r\n * @param {AxisAlignedBoundingBox} axisAlignedBoundingBox The bounds of the tile in the east-north-up coordinates at the tiles center.\r\n * @param {Number} minimumHeight The minimum height.\r\n * @param {Number} maximumHeight The maximum height.\r\n * @param {Matrix4} fromENU The east-north-up to fixed frame matrix at the center of the terrain mesh.\r\n * @param {Boolean} hasVertexNormals If the mesh has vertex normals.\r\n * @param {Boolean} [hasWebMercatorT=false] true if the terrain data includes a Web Mercator texture coordinate; otherwise, false.\r\n * @param {Boolean} [hasGeodeticSurfaceNormals=false] true if the terrain data includes geodetic surface normals; otherwise, false.\r\n * @param {Number} [exaggeration=1.0] A scalar used to exaggerate terrain.\r\n * @param {Number} [exaggerationRelativeHeight=0.0] The relative height from which terrain is exaggerated.\r\n *\r\n * @private\r\n */\r\nfunction TerrainEncoding(\r\n center,\r\n axisAlignedBoundingBox,\r\n minimumHeight,\r\n maximumHeight,\r\n fromENU,\r\n hasVertexNormals,\r\n hasWebMercatorT,\r\n hasGeodeticSurfaceNormals,\r\n exaggeration,\r\n exaggerationRelativeHeight\r\n) {\r\n let quantization = TerrainQuantization.NONE;\r\n let toENU;\r\n let matrix;\r\n\r\n if (\r\n defined(axisAlignedBoundingBox) &&\r\n defined(minimumHeight) &&\r\n defined(maximumHeight) &&\r\n defined(fromENU)\r\n ) {\r\n const minimum = axisAlignedBoundingBox.minimum;\r\n const maximum = axisAlignedBoundingBox.maximum;\r\n\r\n const dimensions = Cartesian3.subtract(\r\n maximum,\r\n minimum,\r\n cartesian3DimScratch\r\n );\r\n const hDim = maximumHeight - minimumHeight;\r\n const maxDim = Math.max(Cartesian3.maximumComponent(dimensions), hDim);\r\n\r\n if (maxDim < SHIFT_LEFT_12 - 1.0) {\r\n quantization = TerrainQuantization.BITS12;\r\n } else {\r\n quantization = TerrainQuantization.NONE;\r\n }\r\n\r\n toENU = Matrix4.inverseTransformation(fromENU, new Matrix4());\r\n\r\n const translation = Cartesian3.negate(minimum, cartesian3Scratch);\r\n Matrix4.multiply(\r\n Matrix4.fromTranslation(translation, matrix4Scratch),\r\n toENU,\r\n toENU\r\n );\r\n\r\n const scale = cartesian3Scratch;\r\n scale.x = 1.0 / dimensions.x;\r\n scale.y = 1.0 / dimensions.y;\r\n scale.z = 1.0 / dimensions.z;\r\n Matrix4.multiply(Matrix4.fromScale(scale, matrix4Scratch), toENU, toENU);\r\n\r\n matrix = Matrix4.clone(fromENU);\r\n Matrix4.setTranslation(matrix, Cartesian3.ZERO, matrix);\r\n\r\n fromENU = Matrix4.clone(fromENU, new Matrix4());\r\n\r\n const translationMatrix = Matrix4.fromTranslation(minimum, matrix4Scratch);\r\n const scaleMatrix = Matrix4.fromScale(dimensions, matrix4Scratch2);\r\n const st = Matrix4.multiply(translationMatrix, scaleMatrix, matrix4Scratch);\r\n\r\n Matrix4.multiply(fromENU, st, fromENU);\r\n Matrix4.multiply(matrix, st, matrix);\r\n }\r\n\r\n /**\r\n * How the vertices of the mesh were compressed.\r\n * @type {TerrainQuantization}\r\n */\r\n this.quantization = quantization;\r\n\r\n /**\r\n * The minimum height of the tile including the skirts.\r\n * @type {Number}\r\n */\r\n this.minimumHeight = minimumHeight;\r\n\r\n /**\r\n * The maximum height of the tile.\r\n * @type {Number}\r\n */\r\n this.maximumHeight = maximumHeight;\r\n\r\n /**\r\n * The center of the tile.\r\n * @type {Cartesian3}\r\n */\r\n this.center = Cartesian3.clone(center);\r\n\r\n /**\r\n * A matrix that takes a vertex from the tile, transforms it to east-north-up at the center and scales\r\n * it so each component is in the [0, 1] range.\r\n * @type {Matrix4}\r\n */\r\n this.toScaledENU = toENU;\r\n\r\n /**\r\n * A matrix that restores a vertex transformed with toScaledENU back to the earth fixed reference frame\r\n * @type {Matrix4}\r\n */\r\n this.fromScaledENU = fromENU;\r\n\r\n /**\r\n * The matrix used to decompress the terrain vertices in the shader for RTE rendering.\r\n * @type {Matrix4}\r\n */\r\n this.matrix = matrix;\r\n\r\n /**\r\n * The terrain mesh contains normals.\r\n * @type {Boolean}\r\n */\r\n this.hasVertexNormals = hasVertexNormals;\r\n\r\n /**\r\n * The terrain mesh contains a vertical texture coordinate following the Web Mercator projection.\r\n * @type {Boolean}\r\n */\r\n this.hasWebMercatorT = defaultValue(hasWebMercatorT, false);\r\n\r\n /**\r\n * The terrain mesh contains geodetic surface normals, used for terrain exaggeration.\r\n * @type {Boolean}\r\n */\r\n this.hasGeodeticSurfaceNormals = defaultValue(\r\n hasGeodeticSurfaceNormals,\r\n false\r\n );\r\n\r\n /**\r\n * A scalar used to exaggerate terrain.\r\n * @type {Number}\r\n */\r\n this.exaggeration = defaultValue(exaggeration, 1.0);\r\n\r\n /**\r\n * The relative height from which terrain is exaggerated.\r\n */\r\n this.exaggerationRelativeHeight = defaultValue(\r\n exaggerationRelativeHeight,\r\n 0.0\r\n );\r\n\r\n /**\r\n * The number of components in each vertex. This value can differ with different quantizations.\r\n * @type {Number}\r\n */\r\n this.stride = 0;\r\n\r\n this._offsetGeodeticSurfaceNormal = 0;\r\n this._offsetVertexNormal = 0;\r\n\r\n // Calculate the stride and offsets declared above\r\n this._calculateStrideAndOffsets();\r\n}\r\n\r\nTerrainEncoding.prototype.encode = function (\r\n vertexBuffer,\r\n bufferIndex,\r\n position,\r\n uv,\r\n height,\r\n normalToPack,\r\n webMercatorT,\r\n geodeticSurfaceNormal\r\n) {\r\n const u = uv.x;\r\n const v = uv.y;\r\n\r\n if (this.quantization === TerrainQuantization.BITS12) {\r\n position = Matrix4.multiplyByPoint(\r\n this.toScaledENU,\r\n position,\r\n cartesian3Scratch\r\n );\r\n\r\n position.x = CesiumMath.clamp(position.x, 0.0, 1.0);\r\n position.y = CesiumMath.clamp(position.y, 0.0, 1.0);\r\n position.z = CesiumMath.clamp(position.z, 0.0, 1.0);\r\n\r\n const hDim = this.maximumHeight - this.minimumHeight;\r\n const h = CesiumMath.clamp((height - this.minimumHeight) / hDim, 0.0, 1.0);\r\n\r\n Cartesian2.fromElements(position.x, position.y, cartesian2Scratch);\r\n const compressed0 = AttributeCompression.compressTextureCoordinates(\r\n cartesian2Scratch\r\n );\r\n\r\n Cartesian2.fromElements(position.z, h, cartesian2Scratch);\r\n const compressed1 = AttributeCompression.compressTextureCoordinates(\r\n cartesian2Scratch\r\n );\r\n\r\n Cartesian2.fromElements(u, v, cartesian2Scratch);\r\n const compressed2 = AttributeCompression.compressTextureCoordinates(\r\n cartesian2Scratch\r\n );\r\n\r\n vertexBuffer[bufferIndex++] = compressed0;\r\n vertexBuffer[bufferIndex++] = compressed1;\r\n vertexBuffer[bufferIndex++] = compressed2;\r\n\r\n if (this.hasWebMercatorT) {\r\n Cartesian2.fromElements(webMercatorT, 0.0, cartesian2Scratch);\r\n const compressed3 = AttributeCompression.compressTextureCoordinates(\r\n cartesian2Scratch\r\n );\r\n vertexBuffer[bufferIndex++] = compressed3;\r\n }\r\n } else {\r\n Cartesian3.subtract(position, this.center, cartesian3Scratch);\r\n\r\n vertexBuffer[bufferIndex++] = cartesian3Scratch.x;\r\n vertexBuffer[bufferIndex++] = cartesian3Scratch.y;\r\n vertexBuffer[bufferIndex++] = cartesian3Scratch.z;\r\n vertexBuffer[bufferIndex++] = height;\r\n vertexBuffer[bufferIndex++] = u;\r\n vertexBuffer[bufferIndex++] = v;\r\n\r\n if (this.hasWebMercatorT) {\r\n vertexBuffer[bufferIndex++] = webMercatorT;\r\n }\r\n }\r\n\r\n if (this.hasVertexNormals) {\r\n vertexBuffer[bufferIndex++] = AttributeCompression.octPackFloat(\r\n normalToPack\r\n );\r\n }\r\n\r\n if (this.hasGeodeticSurfaceNormals) {\r\n vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.x;\r\n vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.y;\r\n vertexBuffer[bufferIndex++] = geodeticSurfaceNormal.z;\r\n }\r\n\r\n return bufferIndex;\r\n};\r\n\r\nconst scratchPosition = new Cartesian3();\r\nconst scratchGeodeticSurfaceNormal = new Cartesian3();\r\n\r\nTerrainEncoding.prototype.addGeodeticSurfaceNormals = function (\r\n oldBuffer,\r\n newBuffer,\r\n ellipsoid\r\n) {\r\n if (this.hasGeodeticSurfaceNormals) {\r\n return;\r\n }\r\n\r\n const oldStride = this.stride;\r\n const vertexCount = oldBuffer.length / oldStride;\r\n this.hasGeodeticSurfaceNormals = true;\r\n this._calculateStrideAndOffsets();\r\n const newStride = this.stride;\r\n\r\n for (let index = 0; index < vertexCount; index++) {\r\n for (let offset = 0; offset < oldStride; offset++) {\r\n const oldIndex = index * oldStride + offset;\r\n const newIndex = index * newStride + offset;\r\n newBuffer[newIndex] = oldBuffer[oldIndex];\r\n }\r\n const position = this.decodePosition(newBuffer, index, scratchPosition);\r\n const geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(\r\n position,\r\n scratchGeodeticSurfaceNormal\r\n );\r\n\r\n const bufferIndex = index * newStride + this._offsetGeodeticSurfaceNormal;\r\n newBuffer[bufferIndex] = geodeticSurfaceNormal.x;\r\n newBuffer[bufferIndex + 1] = geodeticSurfaceNormal.y;\r\n newBuffer[bufferIndex + 2] = geodeticSurfaceNormal.z;\r\n }\r\n};\r\n\r\nTerrainEncoding.prototype.removeGeodeticSurfaceNormals = function (\r\n oldBuffer,\r\n newBuffer\r\n) {\r\n if (!this.hasGeodeticSurfaceNormals) {\r\n return;\r\n }\r\n\r\n const oldStride = this.stride;\r\n const vertexCount = oldBuffer.length / oldStride;\r\n this.hasGeodeticSurfaceNormals = false;\r\n this._calculateStrideAndOffsets();\r\n const newStride = this.stride;\r\n\r\n for (let index = 0; index < vertexCount; index++) {\r\n for (let offset = 0; offset < newStride; offset++) {\r\n const oldIndex = index * oldStride + offset;\r\n const newIndex = index * newStride + offset;\r\n newBuffer[newIndex] = oldBuffer[oldIndex];\r\n }\r\n }\r\n};\r\n\r\nTerrainEncoding.prototype.decodePosition = function (buffer, index, result) {\r\n if (!defined(result)) {\r\n result = new Cartesian3();\r\n }\r\n\r\n index *= this.stride;\r\n\r\n if (this.quantization === TerrainQuantization.BITS12) {\r\n const xy = AttributeCompression.decompressTextureCoordinates(\r\n buffer[index],\r\n cartesian2Scratch\r\n );\r\n result.x = xy.x;\r\n result.y = xy.y;\r\n\r\n const zh = AttributeCompression.decompressTextureCoordinates(\r\n buffer[index + 1],\r\n cartesian2Scratch\r\n );\r\n result.z = zh.x;\r\n\r\n return Matrix4.multiplyByPoint(this.fromScaledENU, result, result);\r\n }\r\n\r\n result.x = buffer[index];\r\n result.y = buffer[index + 1];\r\n result.z = buffer[index + 2];\r\n return Cartesian3.add(result, this.center, result);\r\n};\r\n\r\nTerrainEncoding.prototype.getExaggeratedPosition = function (\r\n buffer,\r\n index,\r\n result\r\n) {\r\n result = this.decodePosition(buffer, index, result);\r\n\r\n const exaggeration = this.exaggeration;\r\n const exaggerationRelativeHeight = this.exaggerationRelativeHeight;\r\n const hasExaggeration = exaggeration !== 1.0;\r\n if (hasExaggeration && this.hasGeodeticSurfaceNormals) {\r\n const geodeticSurfaceNormal = this.decodeGeodeticSurfaceNormal(\r\n buffer,\r\n index,\r\n scratchGeodeticSurfaceNormal\r\n );\r\n const rawHeight = this.decodeHeight(buffer, index);\r\n const heightDifference =\r\n TerrainExaggeration.getHeight(\r\n rawHeight,\r\n exaggeration,\r\n exaggerationRelativeHeight\r\n ) - rawHeight;\r\n\r\n // some math is unrolled for better performance\r\n result.x += geodeticSurfaceNormal.x * heightDifference;\r\n result.y += geodeticSurfaceNormal.y * heightDifference;\r\n result.z += geodeticSurfaceNormal.z * heightDifference;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nTerrainEncoding.prototype.decodeTextureCoordinates = function (\r\n buffer,\r\n index,\r\n result\r\n) {\r\n if (!defined(result)) {\r\n result = new Cartesian2();\r\n }\r\n\r\n index *= this.stride;\r\n\r\n if (this.quantization === TerrainQuantization.BITS12) {\r\n return AttributeCompression.decompressTextureCoordinates(\r\n buffer[index + 2],\r\n result\r\n );\r\n }\r\n\r\n return Cartesian2.fromElements(buffer[index + 4], buffer[index + 5], result);\r\n};\r\n\r\nTerrainEncoding.prototype.decodeHeight = function (buffer, index) {\r\n index *= this.stride;\r\n\r\n if (this.quantization === TerrainQuantization.BITS12) {\r\n const zh = AttributeCompression.decompressTextureCoordinates(\r\n buffer[index + 1],\r\n cartesian2Scratch\r\n );\r\n return (\r\n zh.y * (this.maximumHeight - this.minimumHeight) + this.minimumHeight\r\n );\r\n }\r\n\r\n return buffer[index + 3];\r\n};\r\n\r\nTerrainEncoding.prototype.decodeWebMercatorT = function (buffer, index) {\r\n index *= this.stride;\r\n\r\n if (this.quantization === TerrainQuantization.BITS12) {\r\n return AttributeCompression.decompressTextureCoordinates(\r\n buffer[index + 3],\r\n cartesian2Scratch\r\n ).x;\r\n }\r\n\r\n return buffer[index + 6];\r\n};\r\n\r\nTerrainEncoding.prototype.getOctEncodedNormal = function (\r\n buffer,\r\n index,\r\n result\r\n) {\r\n index = index * this.stride + this._offsetVertexNormal;\r\n\r\n const temp = buffer[index] / 256.0;\r\n const x = Math.floor(temp);\r\n const y = (temp - x) * 256.0;\r\n\r\n return Cartesian2.fromElements(x, y, result);\r\n};\r\n\r\nTerrainEncoding.prototype.decodeGeodeticSurfaceNormal = function (\r\n buffer,\r\n index,\r\n result\r\n) {\r\n index = index * this.stride + this._offsetGeodeticSurfaceNormal;\r\n\r\n result.x = buffer[index];\r\n result.y = buffer[index + 1];\r\n result.z = buffer[index + 2];\r\n return result;\r\n};\r\n\r\nTerrainEncoding.prototype._calculateStrideAndOffsets = function () {\r\n let vertexStride = 0;\r\n\r\n switch (this.quantization) {\r\n case TerrainQuantization.BITS12:\r\n vertexStride += 3;\r\n break;\r\n default:\r\n vertexStride += 6;\r\n }\r\n if (this.hasWebMercatorT) {\r\n vertexStride += 1;\r\n }\r\n if (this.hasVertexNormals) {\r\n this._offsetVertexNormal = vertexStride;\r\n vertexStride += 1;\r\n }\r\n if (this.hasGeodeticSurfaceNormals) {\r\n this._offsetGeodeticSurfaceNormal = vertexStride;\r\n vertexStride += 3;\r\n }\r\n\r\n this.stride = vertexStride;\r\n};\r\n\r\nconst attributesIndicesNone = {\r\n position3DAndHeight: 0,\r\n textureCoordAndEncodedNormals: 1,\r\n geodeticSurfaceNormal: 2,\r\n};\r\nconst attributesIndicesBits12 = {\r\n compressed0: 0,\r\n compressed1: 1,\r\n geodeticSurfaceNormal: 2,\r\n};\r\n\r\nTerrainEncoding.prototype.getAttributes = function (buffer) {\r\n const datatype = ComponentDatatype.FLOAT;\r\n const sizeInBytes = ComponentDatatype.getSizeInBytes(datatype);\r\n const strideInBytes = this.stride * sizeInBytes;\r\n let offsetInBytes = 0;\r\n\r\n const attributes = [];\r\n function addAttribute(index, componentsPerAttribute) {\r\n attributes.push({\r\n index: index,\r\n vertexBuffer: buffer,\r\n componentDatatype: datatype,\r\n componentsPerAttribute: componentsPerAttribute,\r\n offsetInBytes: offsetInBytes,\r\n strideInBytes: strideInBytes,\r\n });\r\n offsetInBytes += componentsPerAttribute * sizeInBytes;\r\n }\r\n\r\n if (this.quantization === TerrainQuantization.NONE) {\r\n addAttribute(attributesIndicesNone.position3DAndHeight, 4);\r\n\r\n let componentsTexCoordAndNormals = 2;\r\n componentsTexCoordAndNormals += this.hasWebMercatorT ? 1 : 0;\r\n componentsTexCoordAndNormals += this.hasVertexNormals ? 1 : 0;\r\n addAttribute(\r\n attributesIndicesNone.textureCoordAndEncodedNormals,\r\n componentsTexCoordAndNormals\r\n );\r\n\r\n if (this.hasGeodeticSurfaceNormals) {\r\n addAttribute(attributesIndicesNone.geodeticSurfaceNormal, 3);\r\n }\r\n } else {\r\n // When there is no webMercatorT or vertex normals, the attribute only needs 3 components: x/y, z/h, u/v.\r\n // WebMercatorT and vertex normals each take up one component, so if only one of them is present the first\r\n // attribute gets a 4th component. If both are present, we need an additional attribute that has 1 component.\r\n const usingAttribute0Component4 =\r\n this.hasWebMercatorT || this.hasVertexNormals;\r\n const usingAttribute1Component1 =\r\n this.hasWebMercatorT && this.hasVertexNormals;\r\n addAttribute(\r\n attributesIndicesBits12.compressed0,\r\n usingAttribute0Component4 ? 4 : 3\r\n );\r\n\r\n if (usingAttribute1Component1) {\r\n addAttribute(attributesIndicesBits12.compressed1, 1);\r\n }\r\n\r\n if (this.hasGeodeticSurfaceNormals) {\r\n addAttribute(attributesIndicesBits12.geodeticSurfaceNormal, 3);\r\n }\r\n }\r\n\r\n return attributes;\r\n};\r\n\r\nTerrainEncoding.prototype.getAttributeLocations = function () {\r\n if (this.quantization === TerrainQuantization.NONE) {\r\n return attributesIndicesNone;\r\n }\r\n return attributesIndicesBits12;\r\n};\r\n\r\nTerrainEncoding.clone = function (encoding, result) {\r\n if (!defined(encoding)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n result = new TerrainEncoding();\r\n }\r\n\r\n result.quantization = encoding.quantization;\r\n result.minimumHeight = encoding.minimumHeight;\r\n result.maximumHeight = encoding.maximumHeight;\r\n result.center = Cartesian3.clone(encoding.center);\r\n result.toScaledENU = Matrix4.clone(encoding.toScaledENU);\r\n result.fromScaledENU = Matrix4.clone(encoding.fromScaledENU);\r\n result.matrix = Matrix4.clone(encoding.matrix);\r\n result.hasVertexNormals = encoding.hasVertexNormals;\r\n result.hasWebMercatorT = encoding.hasWebMercatorT;\r\n result.hasGeodeticSurfaceNormals = encoding.hasGeodeticSurfaceNormals;\r\n result.exaggeration = encoding.exaggeration;\r\n result.exaggerationRelativeHeight = encoding.exaggerationRelativeHeight;\r\n\r\n result._calculateStrideAndOffsets();\r\n\r\n return result;\r\n};\r\nexport default TerrainEncoding;\r\n"],"names":["Check","Cartesian3","defined","Ellipsoid","Rectangle","BoundingSphere","defaultValue","Cartesian2","Matrix4","TerrainQuantization","CesiumMath","AttributeCompression","TerrainExaggeration","ComponentDatatype"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/Transforms-11fb6b0a.js b/debug/cesium/Workers/Transforms-11fb6b0a.js deleted file mode 100644 index 4e79f0b..0000000 --- a/debug/cesium/Workers/Transforms-11fb6b0a.js +++ /dev/null @@ -1,14709 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['require', 'exports', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918', './Matrix2-036c77dd', './combine-4598d225', './RuntimeError-e5c6a8b9'], (function (require, exports, Matrix3, Check, defaultValue, Math$1, Matrix2, combine, RuntimeError) { 'use strict'; - - function _interopNamespace(e) { - if (e && e.__esModule) return e; - var n = Object.create(null); - if (e) { - Object.keys(e).forEach(function (k) { - if (k !== 'default') { - var d = Object.getOwnPropertyDescriptor(e, k); - Object.defineProperty(n, k, d.get ? d : { - enumerable: true, - get: function () { return e[k]; } - }); - } - }); - } - n["default"] = e; - return Object.freeze(n); - } - - var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - /** - * A simple map projection where longitude and latitude are linearly mapped to X and Y by multiplying - * them by the {@link Ellipsoid#maximumRadius}. This projection - * is commonly known as geographic, equirectangular, equidistant cylindrical, or plate carrée. It - * is also known as EPSG:4326. - * - * @alias GeographicProjection - * @constructor - * - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid. - * - * @see WebMercatorProjection - */ - function GeographicProjection(ellipsoid) { - this._ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - this._semimajorAxis = this._ellipsoid.maximumRadius; - this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis; - } - - Object.defineProperties(GeographicProjection.prototype, { - /** - * Gets the {@link Ellipsoid}. - * - * @memberof GeographicProjection.prototype - * - * @type {Ellipsoid} - * @readonly - */ - ellipsoid: { - get: function () { - return this._ellipsoid; - }, - }, - }); - - /** - * Projects a set of {@link Cartographic} coordinates, in radians, to map coordinates, in meters. - * X and Y are the longitude and latitude, respectively, multiplied by the maximum radius of the - * ellipsoid. Z is the unmodified height. - * - * @param {Cartographic} cartographic The coordinates to project. - * @param {Cartesian3} [result] An instance into which to copy the result. If this parameter is - * undefined, a new instance is created and returned. - * @returns {Cartesian3} The projected coordinates. If the result parameter is not undefined, the - * coordinates are copied there and that instance is returned. Otherwise, a new instance is - * created and returned. - */ - GeographicProjection.prototype.project = function (cartographic, result) { - // Actually this is the special case of equidistant cylindrical called the plate carree - const semimajorAxis = this._semimajorAxis; - const x = cartographic.longitude * semimajorAxis; - const y = cartographic.latitude * semimajorAxis; - const z = cartographic.height; - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartesian3(x, y, z); - } - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Unprojects a set of projected {@link Cartesian3} coordinates, in meters, to {@link Cartographic} - * coordinates, in radians. Longitude and Latitude are the X and Y coordinates, respectively, - * divided by the maximum radius of the ellipsoid. Height is the unmodified Z coordinate. - * - * @param {Cartesian3} cartesian The Cartesian position to unproject with height (z) in meters. - * @param {Cartographic} [result] An instance into which to copy the result. If this parameter is - * undefined, a new instance is created and returned. - * @returns {Cartographic} The unprojected coordinates. If the result parameter is not undefined, the - * coordinates are copied there and that instance is returned. Otherwise, a new instance is - * created and returned. - */ - GeographicProjection.prototype.unproject = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(cartesian)) { - throw new Check.DeveloperError("cartesian is required"); - } - //>>includeEnd('debug'); - - const oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis; - const longitude = cartesian.x * oneOverEarthSemimajorAxis; - const latitude = cartesian.y * oneOverEarthSemimajorAxis; - const height = cartesian.z; - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartographic(longitude, latitude, height); - } - - result.longitude = longitude; - result.latitude = latitude; - result.height = height; - return result; - }; - - /** - * This enumerated type is used in determining where, relative to the frustum, an - * object is located. The object can either be fully contained within the frustum (INSIDE), - * partially inside the frustum and partially outside (INTERSECTING), or somewhere entirely - * outside of the frustum's 6 planes (OUTSIDE). - * - * @enum {Number} - */ - const Intersect = { - /** - * Represents that an object is not contained within the frustum. - * - * @type {Number} - * @constant - */ - OUTSIDE: -1, - - /** - * Represents that an object intersects one of the frustum's planes. - * - * @type {Number} - * @constant - */ - INTERSECTING: 0, - - /** - * Represents that an object is fully within the frustum. - * - * @type {Number} - * @constant - */ - INSIDE: 1, - }; - var Intersect$1 = Object.freeze(Intersect); - - /** - * Represents the closed interval [start, stop]. - * @alias Interval - * @constructor - * - * @param {Number} [start=0.0] The beginning of the interval. - * @param {Number} [stop=0.0] The end of the interval. - */ - function Interval(start, stop) { - /** - * The beginning of the interval. - * @type {Number} - * @default 0.0 - */ - this.start = defaultValue.defaultValue(start, 0.0); - /** - * The end of the interval. - * @type {Number} - * @default 0.0 - */ - this.stop = defaultValue.defaultValue(stop, 0.0); - } - - /** - * A bounding sphere with a center and a radius. - * @alias BoundingSphere - * @constructor - * - * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the bounding sphere. - * @param {Number} [radius=0.0] The radius of the bounding sphere. - * - * @see AxisAlignedBoundingBox - * @see BoundingRectangle - * @see Packable - */ - function BoundingSphere(center, radius) { - /** - * The center point of the sphere. - * @type {Cartesian3} - * @default {@link Cartesian3.ZERO} - */ - this.center = Matrix3.Cartesian3.clone(defaultValue.defaultValue(center, Matrix3.Cartesian3.ZERO)); - - /** - * The radius of the sphere. - * @type {Number} - * @default 0.0 - */ - this.radius = defaultValue.defaultValue(radius, 0.0); - } - - const fromPointsXMin = new Matrix3.Cartesian3(); - const fromPointsYMin = new Matrix3.Cartesian3(); - const fromPointsZMin = new Matrix3.Cartesian3(); - const fromPointsXMax = new Matrix3.Cartesian3(); - const fromPointsYMax = new Matrix3.Cartesian3(); - const fromPointsZMax = new Matrix3.Cartesian3(); - const fromPointsCurrentPos = new Matrix3.Cartesian3(); - const fromPointsScratch = new Matrix3.Cartesian3(); - const fromPointsRitterCenter = new Matrix3.Cartesian3(); - const fromPointsMinBoxPt = new Matrix3.Cartesian3(); - const fromPointsMaxBoxPt = new Matrix3.Cartesian3(); - const fromPointsNaiveCenterScratch = new Matrix3.Cartesian3(); - const volumeConstant = (4.0 / 3.0) * Math$1.CesiumMath.PI; - - /** - * Computes a tight-fitting bounding sphere enclosing a list of 3D Cartesian points. - * The bounding sphere is computed by running two algorithms, a naive algorithm and - * Ritter's algorithm. The smaller of the two spheres is used to ensure a tight fit. - * - * @param {Cartesian3[]} [positions] An array of points that the bounding sphere will enclose. Each point must have x, y, and z properties. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided. - * - * @see {@link http://help.agi.com/AGIComponents/html/BlogBoundingSphere.htm|Bounding Sphere computation article} - */ - BoundingSphere.fromPoints = function (positions, result) { - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - if (!defaultValue.defined(positions) || positions.length === 0) { - result.center = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.center); - result.radius = 0.0; - return result; - } - - const currentPos = Matrix3.Cartesian3.clone(positions[0], fromPointsCurrentPos); - - const xMin = Matrix3.Cartesian3.clone(currentPos, fromPointsXMin); - const yMin = Matrix3.Cartesian3.clone(currentPos, fromPointsYMin); - const zMin = Matrix3.Cartesian3.clone(currentPos, fromPointsZMin); - - const xMax = Matrix3.Cartesian3.clone(currentPos, fromPointsXMax); - const yMax = Matrix3.Cartesian3.clone(currentPos, fromPointsYMax); - const zMax = Matrix3.Cartesian3.clone(currentPos, fromPointsZMax); - - const numPositions = positions.length; - let i; - for (i = 1; i < numPositions; i++) { - Matrix3.Cartesian3.clone(positions[i], currentPos); - - const x = currentPos.x; - const y = currentPos.y; - const z = currentPos.z; - - // Store points containing the the smallest and largest components - if (x < xMin.x) { - Matrix3.Cartesian3.clone(currentPos, xMin); - } - - if (x > xMax.x) { - Matrix3.Cartesian3.clone(currentPos, xMax); - } - - if (y < yMin.y) { - Matrix3.Cartesian3.clone(currentPos, yMin); - } - - if (y > yMax.y) { - Matrix3.Cartesian3.clone(currentPos, yMax); - } - - if (z < zMin.z) { - Matrix3.Cartesian3.clone(currentPos, zMin); - } - - if (z > zMax.z) { - Matrix3.Cartesian3.clone(currentPos, zMax); - } - } - - // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.). - const xSpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(xMax, xMin, fromPointsScratch) - ); - const ySpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(yMax, yMin, fromPointsScratch) - ); - const zSpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(zMax, zMin, fromPointsScratch) - ); - - // Set the diameter endpoints to the largest span. - let diameter1 = xMin; - let diameter2 = xMax; - let maxSpan = xSpan; - if (ySpan > maxSpan) { - maxSpan = ySpan; - diameter1 = yMin; - diameter2 = yMax; - } - if (zSpan > maxSpan) { - maxSpan = zSpan; - diameter1 = zMin; - diameter2 = zMax; - } - - // Calculate the center of the initial sphere found by Ritter's algorithm - const ritterCenter = fromPointsRitterCenter; - ritterCenter.x = (diameter1.x + diameter2.x) * 0.5; - ritterCenter.y = (diameter1.y + diameter2.y) * 0.5; - ritterCenter.z = (diameter1.z + diameter2.z) * 0.5; - - // Calculate the radius of the initial sphere found by Ritter's algorithm - let radiusSquared = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch) - ); - let ritterRadius = Math.sqrt(radiusSquared); - - // Find the center of the sphere found using the Naive method. - const minBoxPt = fromPointsMinBoxPt; - minBoxPt.x = xMin.x; - minBoxPt.y = yMin.y; - minBoxPt.z = zMin.z; - - const maxBoxPt = fromPointsMaxBoxPt; - maxBoxPt.x = xMax.x; - maxBoxPt.y = yMax.y; - maxBoxPt.z = zMax.z; - - const naiveCenter = Matrix3.Cartesian3.midpoint( - minBoxPt, - maxBoxPt, - fromPointsNaiveCenterScratch - ); - - // Begin 2nd pass to find naive radius and modify the ritter sphere. - let naiveRadius = 0; - for (i = 0; i < numPositions; i++) { - Matrix3.Cartesian3.clone(positions[i], currentPos); - - // Find the furthest point from the naive center to calculate the naive radius. - const r = Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch) - ); - if (r > naiveRadius) { - naiveRadius = r; - } - - // Make adjustments to the Ritter Sphere to include all points. - const oldCenterToPointSquared = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch) - ); - if (oldCenterToPointSquared > radiusSquared) { - const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared); - // Calculate new radius to include the point that lies outside - ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5; - radiusSquared = ritterRadius * ritterRadius; - // Calculate center of new Ritter sphere - const oldToNew = oldCenterToPoint - ritterRadius; - ritterCenter.x = - (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / - oldCenterToPoint; - ritterCenter.y = - (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / - oldCenterToPoint; - ritterCenter.z = - (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / - oldCenterToPoint; - } - } - - if (ritterRadius < naiveRadius) { - Matrix3.Cartesian3.clone(ritterCenter, result.center); - result.radius = ritterRadius; - } else { - Matrix3.Cartesian3.clone(naiveCenter, result.center); - result.radius = naiveRadius; - } - - return result; - }; - - const defaultProjection = new GeographicProjection(); - const fromRectangle2DLowerLeft = new Matrix3.Cartesian3(); - const fromRectangle2DUpperRight = new Matrix3.Cartesian3(); - const fromRectangle2DSouthwest = new Matrix3.Cartographic(); - const fromRectangle2DNortheast = new Matrix3.Cartographic(); - - /** - * Computes a bounding sphere from a rectangle projected in 2D. - * - * @param {Rectangle} [rectangle] The rectangle around which to create a bounding sphere. - * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.fromRectangle2D = function (rectangle, projection, result) { - return BoundingSphere.fromRectangleWithHeights2D( - rectangle, - projection, - 0.0, - 0.0, - result - ); - }; - - /** - * Computes a bounding sphere from a rectangle projected in 2D. The bounding sphere accounts for the - * object's minimum and maximum heights over the rectangle. - * - * @param {Rectangle} [rectangle] The rectangle around which to create a bounding sphere. - * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D. - * @param {Number} [minimumHeight=0.0] The minimum height over the rectangle. - * @param {Number} [maximumHeight=0.0] The maximum height over the rectangle. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.fromRectangleWithHeights2D = function ( - rectangle, - projection, - minimumHeight, - maximumHeight, - result - ) { - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - if (!defaultValue.defined(rectangle)) { - result.center = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.center); - result.radius = 0.0; - return result; - } - - projection = defaultValue.defaultValue(projection, defaultProjection); - - Matrix2.Rectangle.southwest(rectangle, fromRectangle2DSouthwest); - fromRectangle2DSouthwest.height = minimumHeight; - Matrix2.Rectangle.northeast(rectangle, fromRectangle2DNortheast); - fromRectangle2DNortheast.height = maximumHeight; - - const lowerLeft = projection.project( - fromRectangle2DSouthwest, - fromRectangle2DLowerLeft - ); - const upperRight = projection.project( - fromRectangle2DNortheast, - fromRectangle2DUpperRight - ); - - const width = upperRight.x - lowerLeft.x; - const height = upperRight.y - lowerLeft.y; - const elevation = upperRight.z - lowerLeft.z; - - result.radius = - Math.sqrt(width * width + height * height + elevation * elevation) * 0.5; - const center = result.center; - center.x = lowerLeft.x + width * 0.5; - center.y = lowerLeft.y + height * 0.5; - center.z = lowerLeft.z + elevation * 0.5; - return result; - }; - - const fromRectangle3DScratch = []; - - /** - * Computes a bounding sphere from a rectangle in 3D. The bounding sphere is created using a subsample of points - * on the ellipsoid and contained in the rectangle. It may not be accurate for all rectangles on all types of ellipsoids. - * - * @param {Rectangle} [rectangle] The valid rectangle used to create a bounding sphere. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid used to determine positions of the rectangle. - * @param {Number} [surfaceHeight=0.0] The height above the surface of the ellipsoid. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.fromRectangle3D = function ( - rectangle, - ellipsoid, - surfaceHeight, - result - ) { - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - surfaceHeight = defaultValue.defaultValue(surfaceHeight, 0.0); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - if (!defaultValue.defined(rectangle)) { - result.center = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.center); - result.radius = 0.0; - return result; - } - - const positions = Matrix2.Rectangle.subsample( - rectangle, - ellipsoid, - surfaceHeight, - fromRectangle3DScratch - ); - return BoundingSphere.fromPoints(positions, result); - }; - - /** - * Computes a tight-fitting bounding sphere enclosing a list of 3D points, where the points are - * stored in a flat array in X, Y, Z, order. The bounding sphere is computed by running two - * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to - * ensure a tight fit. - * - * @param {Number[]} [positions] An array of points that the bounding sphere will enclose. Each point - * is formed from three elements in the array in the order X, Y, Z. - * @param {Cartesian3} [center=Cartesian3.ZERO] The position to which the positions are relative, which need not be the - * origin of the coordinate system. This is useful when the positions are to be used for - * relative-to-center (RTC) rendering. - * @param {Number} [stride=3] The number of array elements per vertex. It must be at least 3, but it may - * be higher. Regardless of the value of this parameter, the X coordinate of the first position - * is at array index 0, the Y coordinate is at array index 1, and the Z coordinate is at array index - * 2. When stride is 3, the X coordinate of the next position then begins at array index 3. If - * the stride is 5, however, two array elements are skipped and the next position begins at array - * index 5. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided. - * - * @example - * // Compute the bounding sphere from 3 positions, each specified relative to a center. - * // In addition to the X, Y, and Z coordinates, the points array contains two additional - * // elements per point which are ignored for the purpose of computing the bounding sphere. - * const center = new Cesium.Cartesian3(1.0, 2.0, 3.0); - * const points = [1.0, 2.0, 3.0, 0.1, 0.2, - * 4.0, 5.0, 6.0, 0.1, 0.2, - * 7.0, 8.0, 9.0, 0.1, 0.2]; - * const sphere = Cesium.BoundingSphere.fromVertices(points, center, 5); - * - * @see {@link http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/|Bounding Sphere computation article} - */ - BoundingSphere.fromVertices = function (positions, center, stride, result) { - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - if (!defaultValue.defined(positions) || positions.length === 0) { - result.center = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.center); - result.radius = 0.0; - return result; - } - - center = defaultValue.defaultValue(center, Matrix3.Cartesian3.ZERO); - - stride = defaultValue.defaultValue(stride, 3); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThanOrEquals("stride", stride, 3); - //>>includeEnd('debug'); - - const currentPos = fromPointsCurrentPos; - currentPos.x = positions[0] + center.x; - currentPos.y = positions[1] + center.y; - currentPos.z = positions[2] + center.z; - - const xMin = Matrix3.Cartesian3.clone(currentPos, fromPointsXMin); - const yMin = Matrix3.Cartesian3.clone(currentPos, fromPointsYMin); - const zMin = Matrix3.Cartesian3.clone(currentPos, fromPointsZMin); - - const xMax = Matrix3.Cartesian3.clone(currentPos, fromPointsXMax); - const yMax = Matrix3.Cartesian3.clone(currentPos, fromPointsYMax); - const zMax = Matrix3.Cartesian3.clone(currentPos, fromPointsZMax); - - const numElements = positions.length; - let i; - for (i = 0; i < numElements; i += stride) { - const x = positions[i] + center.x; - const y = positions[i + 1] + center.y; - const z = positions[i + 2] + center.z; - - currentPos.x = x; - currentPos.y = y; - currentPos.z = z; - - // Store points containing the the smallest and largest components - if (x < xMin.x) { - Matrix3.Cartesian3.clone(currentPos, xMin); - } - - if (x > xMax.x) { - Matrix3.Cartesian3.clone(currentPos, xMax); - } - - if (y < yMin.y) { - Matrix3.Cartesian3.clone(currentPos, yMin); - } - - if (y > yMax.y) { - Matrix3.Cartesian3.clone(currentPos, yMax); - } - - if (z < zMin.z) { - Matrix3.Cartesian3.clone(currentPos, zMin); - } - - if (z > zMax.z) { - Matrix3.Cartesian3.clone(currentPos, zMax); - } - } - - // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.). - const xSpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(xMax, xMin, fromPointsScratch) - ); - const ySpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(yMax, yMin, fromPointsScratch) - ); - const zSpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(zMax, zMin, fromPointsScratch) - ); - - // Set the diameter endpoints to the largest span. - let diameter1 = xMin; - let diameter2 = xMax; - let maxSpan = xSpan; - if (ySpan > maxSpan) { - maxSpan = ySpan; - diameter1 = yMin; - diameter2 = yMax; - } - if (zSpan > maxSpan) { - maxSpan = zSpan; - diameter1 = zMin; - diameter2 = zMax; - } - - // Calculate the center of the initial sphere found by Ritter's algorithm - const ritterCenter = fromPointsRitterCenter; - ritterCenter.x = (diameter1.x + diameter2.x) * 0.5; - ritterCenter.y = (diameter1.y + diameter2.y) * 0.5; - ritterCenter.z = (diameter1.z + diameter2.z) * 0.5; - - // Calculate the radius of the initial sphere found by Ritter's algorithm - let radiusSquared = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch) - ); - let ritterRadius = Math.sqrt(radiusSquared); - - // Find the center of the sphere found using the Naive method. - const minBoxPt = fromPointsMinBoxPt; - minBoxPt.x = xMin.x; - minBoxPt.y = yMin.y; - minBoxPt.z = zMin.z; - - const maxBoxPt = fromPointsMaxBoxPt; - maxBoxPt.x = xMax.x; - maxBoxPt.y = yMax.y; - maxBoxPt.z = zMax.z; - - const naiveCenter = Matrix3.Cartesian3.midpoint( - minBoxPt, - maxBoxPt, - fromPointsNaiveCenterScratch - ); - - // Begin 2nd pass to find naive radius and modify the ritter sphere. - let naiveRadius = 0; - for (i = 0; i < numElements; i += stride) { - currentPos.x = positions[i] + center.x; - currentPos.y = positions[i + 1] + center.y; - currentPos.z = positions[i + 2] + center.z; - - // Find the furthest point from the naive center to calculate the naive radius. - const r = Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch) - ); - if (r > naiveRadius) { - naiveRadius = r; - } - - // Make adjustments to the Ritter Sphere to include all points. - const oldCenterToPointSquared = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch) - ); - if (oldCenterToPointSquared > radiusSquared) { - const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared); - // Calculate new radius to include the point that lies outside - ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5; - radiusSquared = ritterRadius * ritterRadius; - // Calculate center of new Ritter sphere - const oldToNew = oldCenterToPoint - ritterRadius; - ritterCenter.x = - (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / - oldCenterToPoint; - ritterCenter.y = - (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / - oldCenterToPoint; - ritterCenter.z = - (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / - oldCenterToPoint; - } - } - - if (ritterRadius < naiveRadius) { - Matrix3.Cartesian3.clone(ritterCenter, result.center); - result.radius = ritterRadius; - } else { - Matrix3.Cartesian3.clone(naiveCenter, result.center); - result.radius = naiveRadius; - } - - return result; - }; - - /** - * Computes a tight-fitting bounding sphere enclosing a list of EncodedCartesian3s, where the points are - * stored in parallel flat arrays in X, Y, Z, order. The bounding sphere is computed by running two - * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to - * ensure a tight fit. - * - * @param {Number[]} [positionsHigh] An array of high bits of the encoded cartesians that the bounding sphere will enclose. Each point - * is formed from three elements in the array in the order X, Y, Z. - * @param {Number[]} [positionsLow] An array of low bits of the encoded cartesians that the bounding sphere will enclose. Each point - * is formed from three elements in the array in the order X, Y, Z. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided. - * - * @see {@link http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/|Bounding Sphere computation article} - */ - BoundingSphere.fromEncodedCartesianVertices = function ( - positionsHigh, - positionsLow, - result - ) { - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - if ( - !defaultValue.defined(positionsHigh) || - !defaultValue.defined(positionsLow) || - positionsHigh.length !== positionsLow.length || - positionsHigh.length === 0 - ) { - result.center = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.center); - result.radius = 0.0; - return result; - } - - const currentPos = fromPointsCurrentPos; - currentPos.x = positionsHigh[0] + positionsLow[0]; - currentPos.y = positionsHigh[1] + positionsLow[1]; - currentPos.z = positionsHigh[2] + positionsLow[2]; - - const xMin = Matrix3.Cartesian3.clone(currentPos, fromPointsXMin); - const yMin = Matrix3.Cartesian3.clone(currentPos, fromPointsYMin); - const zMin = Matrix3.Cartesian3.clone(currentPos, fromPointsZMin); - - const xMax = Matrix3.Cartesian3.clone(currentPos, fromPointsXMax); - const yMax = Matrix3.Cartesian3.clone(currentPos, fromPointsYMax); - const zMax = Matrix3.Cartesian3.clone(currentPos, fromPointsZMax); - - const numElements = positionsHigh.length; - let i; - for (i = 0; i < numElements; i += 3) { - const x = positionsHigh[i] + positionsLow[i]; - const y = positionsHigh[i + 1] + positionsLow[i + 1]; - const z = positionsHigh[i + 2] + positionsLow[i + 2]; - - currentPos.x = x; - currentPos.y = y; - currentPos.z = z; - - // Store points containing the the smallest and largest components - if (x < xMin.x) { - Matrix3.Cartesian3.clone(currentPos, xMin); - } - - if (x > xMax.x) { - Matrix3.Cartesian3.clone(currentPos, xMax); - } - - if (y < yMin.y) { - Matrix3.Cartesian3.clone(currentPos, yMin); - } - - if (y > yMax.y) { - Matrix3.Cartesian3.clone(currentPos, yMax); - } - - if (z < zMin.z) { - Matrix3.Cartesian3.clone(currentPos, zMin); - } - - if (z > zMax.z) { - Matrix3.Cartesian3.clone(currentPos, zMax); - } - } - - // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.). - const xSpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(xMax, xMin, fromPointsScratch) - ); - const ySpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(yMax, yMin, fromPointsScratch) - ); - const zSpan = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(zMax, zMin, fromPointsScratch) - ); - - // Set the diameter endpoints to the largest span. - let diameter1 = xMin; - let diameter2 = xMax; - let maxSpan = xSpan; - if (ySpan > maxSpan) { - maxSpan = ySpan; - diameter1 = yMin; - diameter2 = yMax; - } - if (zSpan > maxSpan) { - maxSpan = zSpan; - diameter1 = zMin; - diameter2 = zMax; - } - - // Calculate the center of the initial sphere found by Ritter's algorithm - const ritterCenter = fromPointsRitterCenter; - ritterCenter.x = (diameter1.x + diameter2.x) * 0.5; - ritterCenter.y = (diameter1.y + diameter2.y) * 0.5; - ritterCenter.z = (diameter1.z + diameter2.z) * 0.5; - - // Calculate the radius of the initial sphere found by Ritter's algorithm - let radiusSquared = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch) - ); - let ritterRadius = Math.sqrt(radiusSquared); - - // Find the center of the sphere found using the Naive method. - const minBoxPt = fromPointsMinBoxPt; - minBoxPt.x = xMin.x; - minBoxPt.y = yMin.y; - minBoxPt.z = zMin.z; - - const maxBoxPt = fromPointsMaxBoxPt; - maxBoxPt.x = xMax.x; - maxBoxPt.y = yMax.y; - maxBoxPt.z = zMax.z; - - const naiveCenter = Matrix3.Cartesian3.midpoint( - minBoxPt, - maxBoxPt, - fromPointsNaiveCenterScratch - ); - - // Begin 2nd pass to find naive radius and modify the ritter sphere. - let naiveRadius = 0; - for (i = 0; i < numElements; i += 3) { - currentPos.x = positionsHigh[i] + positionsLow[i]; - currentPos.y = positionsHigh[i + 1] + positionsLow[i + 1]; - currentPos.z = positionsHigh[i + 2] + positionsLow[i + 2]; - - // Find the furthest point from the naive center to calculate the naive radius. - const r = Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch) - ); - if (r > naiveRadius) { - naiveRadius = r; - } - - // Make adjustments to the Ritter Sphere to include all points. - const oldCenterToPointSquared = Matrix3.Cartesian3.magnitudeSquared( - Matrix3.Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch) - ); - if (oldCenterToPointSquared > radiusSquared) { - const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared); - // Calculate new radius to include the point that lies outside - ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5; - radiusSquared = ritterRadius * ritterRadius; - // Calculate center of new Ritter sphere - const oldToNew = oldCenterToPoint - ritterRadius; - ritterCenter.x = - (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) / - oldCenterToPoint; - ritterCenter.y = - (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) / - oldCenterToPoint; - ritterCenter.z = - (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) / - oldCenterToPoint; - } - } - - if (ritterRadius < naiveRadius) { - Matrix3.Cartesian3.clone(ritterCenter, result.center); - result.radius = ritterRadius; - } else { - Matrix3.Cartesian3.clone(naiveCenter, result.center); - result.radius = naiveRadius; - } - - return result; - }; - - /** - * Computes a bounding sphere from the corner points of an axis-aligned bounding box. The sphere - * tightly and fully encompasses the box. - * - * @param {Cartesian3} [corner] The minimum height over the rectangle. - * @param {Cartesian3} [oppositeCorner] The maximum height over the rectangle. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - * - * @example - * // Create a bounding sphere around the unit cube - * const sphere = Cesium.BoundingSphere.fromCornerPoints(new Cesium.Cartesian3(-0.5, -0.5, -0.5), new Cesium.Cartesian3(0.5, 0.5, 0.5)); - */ - BoundingSphere.fromCornerPoints = function (corner, oppositeCorner, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("corner", corner); - Check.Check.typeOf.object("oppositeCorner", oppositeCorner); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - const center = Matrix3.Cartesian3.midpoint(corner, oppositeCorner, result.center); - result.radius = Matrix3.Cartesian3.distance(center, oppositeCorner); - return result; - }; - - /** - * Creates a bounding sphere encompassing an ellipsoid. - * - * @param {Ellipsoid} ellipsoid The ellipsoid around which to create a bounding sphere. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - * - * @example - * const boundingSphere = Cesium.BoundingSphere.fromEllipsoid(ellipsoid); - */ - BoundingSphere.fromEllipsoid = function (ellipsoid, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("ellipsoid", ellipsoid); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.center); - result.radius = ellipsoid.maximumRadius; - return result; - }; - - const fromBoundingSpheresScratch = new Matrix3.Cartesian3(); - - /** - * Computes a tight-fitting bounding sphere enclosing the provided array of bounding spheres. - * - * @param {BoundingSphere[]} [boundingSpheres] The array of bounding spheres. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.fromBoundingSpheres = function (boundingSpheres, result) { - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - if (!defaultValue.defined(boundingSpheres) || boundingSpheres.length === 0) { - result.center = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, result.center); - result.radius = 0.0; - return result; - } - - const length = boundingSpheres.length; - if (length === 1) { - return BoundingSphere.clone(boundingSpheres[0], result); - } - - if (length === 2) { - return BoundingSphere.union(boundingSpheres[0], boundingSpheres[1], result); - } - - const positions = []; - let i; - for (i = 0; i < length; i++) { - positions.push(boundingSpheres[i].center); - } - - result = BoundingSphere.fromPoints(positions, result); - - const center = result.center; - let radius = result.radius; - for (i = 0; i < length; i++) { - const tmp = boundingSpheres[i]; - radius = Math.max( - radius, - Matrix3.Cartesian3.distance(center, tmp.center, fromBoundingSpheresScratch) + - tmp.radius - ); - } - result.radius = radius; - - return result; - }; - - const fromOrientedBoundingBoxScratchU = new Matrix3.Cartesian3(); - const fromOrientedBoundingBoxScratchV = new Matrix3.Cartesian3(); - const fromOrientedBoundingBoxScratchW = new Matrix3.Cartesian3(); - - /** - * Computes a tight-fitting bounding sphere enclosing the provided oriented bounding box. - * - * @param {OrientedBoundingBox} orientedBoundingBox The oriented bounding box. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.fromOrientedBoundingBox = function ( - orientedBoundingBox, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("orientedBoundingBox", orientedBoundingBox); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - const halfAxes = orientedBoundingBox.halfAxes; - const u = Matrix3.Matrix3.getColumn(halfAxes, 0, fromOrientedBoundingBoxScratchU); - const v = Matrix3.Matrix3.getColumn(halfAxes, 1, fromOrientedBoundingBoxScratchV); - const w = Matrix3.Matrix3.getColumn(halfAxes, 2, fromOrientedBoundingBoxScratchW); - - Matrix3.Cartesian3.add(u, v, u); - Matrix3.Cartesian3.add(u, w, u); - - result.center = Matrix3.Cartesian3.clone(orientedBoundingBox.center, result.center); - result.radius = Matrix3.Cartesian3.magnitude(u); - - return result; - }; - - const scratchFromTransformationCenter = new Matrix3.Cartesian3(); - const scratchFromTransformationScale = new Matrix3.Cartesian3(); - - /** - * Computes a tight-fitting bounding sphere enclosing the provided affine transformation. - * - * @param {Matrix4} transformation The affine transformation. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.fromTransformation = function (transformation, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("transformation", transformation); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - const center = Matrix2.Matrix4.getTranslation( - transformation, - scratchFromTransformationCenter - ); - const scale = Matrix2.Matrix4.getScale( - transformation, - scratchFromTransformationScale - ); - const radius = 0.5 * Matrix3.Cartesian3.magnitude(scale); - result.center = Matrix3.Cartesian3.clone(center, result.center); - result.radius = radius; - - return result; - }; - - /** - * Duplicates a BoundingSphere instance. - * - * @param {BoundingSphere} sphere The bounding sphere to duplicate. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. (Returns undefined if sphere is undefined) - */ - BoundingSphere.clone = function (sphere, result) { - if (!defaultValue.defined(sphere)) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new BoundingSphere(sphere.center, sphere.radius); - } - - result.center = Matrix3.Cartesian3.clone(sphere.center, result.center); - result.radius = sphere.radius; - return result; - }; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - BoundingSphere.packedLength = 4; - - /** - * Stores the provided instance into the provided array. - * - * @param {BoundingSphere} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - BoundingSphere.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const center = value.center; - array[startingIndex++] = center.x; - array[startingIndex++] = center.y; - array[startingIndex++] = center.z; - array[startingIndex] = value.radius; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {BoundingSphere} [result] The object into which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided. - */ - BoundingSphere.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - const center = result.center; - center.x = array[startingIndex++]; - center.y = array[startingIndex++]; - center.z = array[startingIndex++]; - result.radius = array[startingIndex]; - return result; - }; - - const unionScratch = new Matrix3.Cartesian3(); - const unionScratchCenter = new Matrix3.Cartesian3(); - /** - * Computes a bounding sphere that contains both the left and right bounding spheres. - * - * @param {BoundingSphere} left A sphere to enclose in a bounding sphere. - * @param {BoundingSphere} right A sphere to enclose in a bounding sphere. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.union = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - const leftCenter = left.center; - const leftRadius = left.radius; - const rightCenter = right.center; - const rightRadius = right.radius; - - const toRightCenter = Matrix3.Cartesian3.subtract( - rightCenter, - leftCenter, - unionScratch - ); - const centerSeparation = Matrix3.Cartesian3.magnitude(toRightCenter); - - if (leftRadius >= centerSeparation + rightRadius) { - // Left sphere wins. - left.clone(result); - return result; - } - - if (rightRadius >= centerSeparation + leftRadius) { - // Right sphere wins. - right.clone(result); - return result; - } - - // There are two tangent points, one on far side of each sphere. - const halfDistanceBetweenTangentPoints = - (leftRadius + centerSeparation + rightRadius) * 0.5; - - // Compute the center point halfway between the two tangent points. - const center = Matrix3.Cartesian3.multiplyByScalar( - toRightCenter, - (-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation, - unionScratchCenter - ); - Matrix3.Cartesian3.add(center, leftCenter, center); - Matrix3.Cartesian3.clone(center, result.center); - result.radius = halfDistanceBetweenTangentPoints; - - return result; - }; - - const expandScratch = new Matrix3.Cartesian3(); - /** - * Computes a bounding sphere by enlarging the provided sphere to contain the provided point. - * - * @param {BoundingSphere} sphere A sphere to expand. - * @param {Cartesian3} point A point to enclose in a bounding sphere. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.expand = function (sphere, point, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("sphere", sphere); - Check.Check.typeOf.object("point", point); - //>>includeEnd('debug'); - - result = BoundingSphere.clone(sphere, result); - - const radius = Matrix3.Cartesian3.magnitude( - Matrix3.Cartesian3.subtract(point, result.center, expandScratch) - ); - if (radius > result.radius) { - result.radius = radius; - } - - return result; - }; - - /** - * Determines which side of a plane a sphere is located. - * - * @param {BoundingSphere} sphere The bounding sphere to test. - * @param {Plane} plane The plane to test against. - * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane - * the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is - * on the opposite side, and {@link Intersect.INTERSECTING} if the sphere - * intersects the plane. - */ - BoundingSphere.intersectPlane = function (sphere, plane) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("sphere", sphere); - Check.Check.typeOf.object("plane", plane); - //>>includeEnd('debug'); - - const center = sphere.center; - const radius = sphere.radius; - const normal = plane.normal; - const distanceToPlane = Matrix3.Cartesian3.dot(normal, center) + plane.distance; - - if (distanceToPlane < -radius) { - // The center point is negative side of the plane normal - return Intersect$1.OUTSIDE; - } else if (distanceToPlane < radius) { - // The center point is positive side of the plane, but radius extends beyond it; partial overlap - return Intersect$1.INTERSECTING; - } - return Intersect$1.INSIDE; - }; - - /** - * Applies a 4x4 affine transformation matrix to a bounding sphere. - * - * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to. - * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.transform = function (sphere, transform, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("sphere", sphere); - Check.Check.typeOf.object("transform", transform); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - result.center = Matrix2.Matrix4.multiplyByPoint( - transform, - sphere.center, - result.center - ); - result.radius = Matrix2.Matrix4.getMaximumScale(transform) * sphere.radius; - - return result; - }; - - const distanceSquaredToScratch = new Matrix3.Cartesian3(); - - /** - * Computes the estimated distance squared from the closest point on a bounding sphere to a point. - * - * @param {BoundingSphere} sphere The sphere. - * @param {Cartesian3} cartesian The point - * @returns {Number} The distance squared from the bounding sphere to the point. Returns 0 if the point is inside the sphere. - * - * @example - * // Sort bounding spheres from back to front - * spheres.sort(function(a, b) { - * return Cesium.BoundingSphere.distanceSquaredTo(b, camera.positionWC) - Cesium.BoundingSphere.distanceSquaredTo(a, camera.positionWC); - * }); - */ - BoundingSphere.distanceSquaredTo = function (sphere, cartesian) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("sphere", sphere); - Check.Check.typeOf.object("cartesian", cartesian); - //>>includeEnd('debug'); - - const diff = Matrix3.Cartesian3.subtract( - sphere.center, - cartesian, - distanceSquaredToScratch - ); - - const distance = Matrix3.Cartesian3.magnitude(diff) - sphere.radius; - if (distance <= 0.0) { - return 0.0; - } - - return distance * distance; - }; - - /** - * Applies a 4x4 affine transformation matrix to a bounding sphere where there is no scale - * The transformation matrix is not verified to have a uniform scale of 1. - * This method is faster than computing the general bounding sphere transform using {@link BoundingSphere.transform}. - * - * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to. - * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - * - * @example - * const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid); - * const boundingSphere = new Cesium.BoundingSphere(); - * const newBoundingSphere = Cesium.BoundingSphere.transformWithoutScale(boundingSphere, modelMatrix); - */ - BoundingSphere.transformWithoutScale = function (sphere, transform, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("sphere", sphere); - Check.Check.typeOf.object("transform", transform); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new BoundingSphere(); - } - - result.center = Matrix2.Matrix4.multiplyByPoint( - transform, - sphere.center, - result.center - ); - result.radius = sphere.radius; - - return result; - }; - - const scratchCartesian3 = new Matrix3.Cartesian3(); - /** - * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction - * plus/minus the radius of the bounding sphere. - *
    - * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the - * closest and farthest planes from position that intersect the bounding sphere. - * - * @param {BoundingSphere} sphere The bounding sphere to calculate the distance to. - * @param {Cartesian3} position The position to calculate the distance from. - * @param {Cartesian3} direction The direction from position. - * @param {Interval} [result] A Interval to store the nearest and farthest distances. - * @returns {Interval} The nearest and farthest distances on the bounding sphere from position in direction. - */ - BoundingSphere.computePlaneDistances = function ( - sphere, - position, - direction, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("sphere", sphere); - Check.Check.typeOf.object("position", position); - Check.Check.typeOf.object("direction", direction); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Interval(); - } - - const toCenter = Matrix3.Cartesian3.subtract( - sphere.center, - position, - scratchCartesian3 - ); - const mag = Matrix3.Cartesian3.dot(direction, toCenter); - - result.start = mag - sphere.radius; - result.stop = mag + sphere.radius; - return result; - }; - - const projectTo2DNormalScratch = new Matrix3.Cartesian3(); - const projectTo2DEastScratch = new Matrix3.Cartesian3(); - const projectTo2DNorthScratch = new Matrix3.Cartesian3(); - const projectTo2DWestScratch = new Matrix3.Cartesian3(); - const projectTo2DSouthScratch = new Matrix3.Cartesian3(); - const projectTo2DCartographicScratch = new Matrix3.Cartographic(); - const projectTo2DPositionsScratch = new Array(8); - for (let n = 0; n < 8; ++n) { - projectTo2DPositionsScratch[n] = new Matrix3.Cartesian3(); - } - - const projectTo2DProjection = new GeographicProjection(); - /** - * Creates a bounding sphere in 2D from a bounding sphere in 3D world coordinates. - * - * @param {BoundingSphere} sphere The bounding sphere to transform to 2D. - * @param {Object} [projection=GeographicProjection] The projection to 2D. - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.projectTo2D = function (sphere, projection, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("sphere", sphere); - //>>includeEnd('debug'); - - projection = defaultValue.defaultValue(projection, projectTo2DProjection); - - const ellipsoid = projection.ellipsoid; - let center = sphere.center; - const radius = sphere.radius; - - let normal; - if (Matrix3.Cartesian3.equals(center, Matrix3.Cartesian3.ZERO)) { - // Bounding sphere is at the center. The geodetic surface normal is not - // defined here so pick the x-axis as a fallback. - normal = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_X, projectTo2DNormalScratch); - } else { - normal = ellipsoid.geodeticSurfaceNormal(center, projectTo2DNormalScratch); - } - const east = Matrix3.Cartesian3.cross( - Matrix3.Cartesian3.UNIT_Z, - normal, - projectTo2DEastScratch - ); - Matrix3.Cartesian3.normalize(east, east); - const north = Matrix3.Cartesian3.cross(normal, east, projectTo2DNorthScratch); - Matrix3.Cartesian3.normalize(north, north); - - Matrix3.Cartesian3.multiplyByScalar(normal, radius, normal); - Matrix3.Cartesian3.multiplyByScalar(north, radius, north); - Matrix3.Cartesian3.multiplyByScalar(east, radius, east); - - const south = Matrix3.Cartesian3.negate(north, projectTo2DSouthScratch); - const west = Matrix3.Cartesian3.negate(east, projectTo2DWestScratch); - - const positions = projectTo2DPositionsScratch; - - // top NE corner - let corner = positions[0]; - Matrix3.Cartesian3.add(normal, north, corner); - Matrix3.Cartesian3.add(corner, east, corner); - - // top NW corner - corner = positions[1]; - Matrix3.Cartesian3.add(normal, north, corner); - Matrix3.Cartesian3.add(corner, west, corner); - - // top SW corner - corner = positions[2]; - Matrix3.Cartesian3.add(normal, south, corner); - Matrix3.Cartesian3.add(corner, west, corner); - - // top SE corner - corner = positions[3]; - Matrix3.Cartesian3.add(normal, south, corner); - Matrix3.Cartesian3.add(corner, east, corner); - - Matrix3.Cartesian3.negate(normal, normal); - - // bottom NE corner - corner = positions[4]; - Matrix3.Cartesian3.add(normal, north, corner); - Matrix3.Cartesian3.add(corner, east, corner); - - // bottom NW corner - corner = positions[5]; - Matrix3.Cartesian3.add(normal, north, corner); - Matrix3.Cartesian3.add(corner, west, corner); - - // bottom SW corner - corner = positions[6]; - Matrix3.Cartesian3.add(normal, south, corner); - Matrix3.Cartesian3.add(corner, west, corner); - - // bottom SE corner - corner = positions[7]; - Matrix3.Cartesian3.add(normal, south, corner); - Matrix3.Cartesian3.add(corner, east, corner); - - const length = positions.length; - for (let i = 0; i < length; ++i) { - const position = positions[i]; - Matrix3.Cartesian3.add(center, position, position); - const cartographic = ellipsoid.cartesianToCartographic( - position, - projectTo2DCartographicScratch - ); - projection.project(cartographic, position); - } - - result = BoundingSphere.fromPoints(positions, result); - - // swizzle center components - center = result.center; - const x = center.x; - const y = center.y; - const z = center.z; - center.x = z; - center.y = x; - center.z = y; - - return result; - }; - - /** - * Determines whether or not a sphere is hidden from view by the occluder. - * - * @param {BoundingSphere} sphere The bounding sphere surrounding the occludee object. - * @param {Occluder} occluder The occluder. - * @returns {Boolean} true if the sphere is not visible; otherwise false. - */ - BoundingSphere.isOccluded = function (sphere, occluder) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("sphere", sphere); - Check.Check.typeOf.object("occluder", occluder); - //>>includeEnd('debug'); - return !occluder.isBoundingSphereVisible(sphere); - }; - - /** - * Compares the provided BoundingSphere componentwise and returns - * true if they are equal, false otherwise. - * - * @param {BoundingSphere} [left] The first BoundingSphere. - * @param {BoundingSphere} [right] The second BoundingSphere. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - BoundingSphere.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Matrix3.Cartesian3.equals(left.center, right.center) && - left.radius === right.radius) - ); - }; - - /** - * Determines which side of a plane the sphere is located. - * - * @param {Plane} plane The plane to test against. - * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane - * the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is - * on the opposite side, and {@link Intersect.INTERSECTING} if the sphere - * intersects the plane. - */ - BoundingSphere.prototype.intersectPlane = function (plane) { - return BoundingSphere.intersectPlane(this, plane); - }; - - /** - * Computes the estimated distance squared from the closest point on a bounding sphere to a point. - * - * @param {Cartesian3} cartesian The point - * @returns {Number} The estimated distance squared from the bounding sphere to the point. - * - * @example - * // Sort bounding spheres from back to front - * spheres.sort(function(a, b) { - * return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC); - * }); - */ - BoundingSphere.prototype.distanceSquaredTo = function (cartesian) { - return BoundingSphere.distanceSquaredTo(this, cartesian); - }; - - /** - * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction - * plus/minus the radius of the bounding sphere. - *
    - * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the - * closest and farthest planes from position that intersect the bounding sphere. - * - * @param {Cartesian3} position The position to calculate the distance from. - * @param {Cartesian3} direction The direction from position. - * @param {Interval} [result] A Interval to store the nearest and farthest distances. - * @returns {Interval} The nearest and farthest distances on the bounding sphere from position in direction. - */ - BoundingSphere.prototype.computePlaneDistances = function ( - position, - direction, - result - ) { - return BoundingSphere.computePlaneDistances( - this, - position, - direction, - result - ); - }; - - /** - * Determines whether or not a sphere is hidden from view by the occluder. - * - * @param {Occluder} occluder The occluder. - * @returns {Boolean} true if the sphere is not visible; otherwise false. - */ - BoundingSphere.prototype.isOccluded = function (occluder) { - return BoundingSphere.isOccluded(this, occluder); - }; - - /** - * Compares this BoundingSphere against the provided BoundingSphere componentwise and returns - * true if they are equal, false otherwise. - * - * @param {BoundingSphere} [right] The right hand side BoundingSphere. - * @returns {Boolean} true if they are equal, false otherwise. - */ - BoundingSphere.prototype.equals = function (right) { - return BoundingSphere.equals(this, right); - }; - - /** - * Duplicates this BoundingSphere instance. - * - * @param {BoundingSphere} [result] The object onto which to store the result. - * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. - */ - BoundingSphere.prototype.clone = function (result) { - return BoundingSphere.clone(this, result); - }; - - /** - * Computes the radius of the BoundingSphere. - * @returns {Number} The radius of the BoundingSphere. - */ - BoundingSphere.prototype.volume = function () { - const radius = this.radius; - return volumeConstant * radius * radius * radius; - }; - - let _supportsFullscreen; - const _names = { - requestFullscreen: undefined, - exitFullscreen: undefined, - fullscreenEnabled: undefined, - fullscreenElement: undefined, - fullscreenchange: undefined, - fullscreenerror: undefined, - }; - - /** - * Browser-independent functions for working with the standard fullscreen API. - * - * @namespace Fullscreen - * - * @see {@link http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html|W3C Fullscreen Living Specification} - */ - const Fullscreen = {}; - - Object.defineProperties(Fullscreen, { - /** - * The element that is currently fullscreen, if any. To simply check if the - * browser is in fullscreen mode or not, use {@link Fullscreen#fullscreen}. - * @memberof Fullscreen - * @type {Object} - * @readonly - */ - element: { - get: function () { - if (!Fullscreen.supportsFullscreen()) { - return undefined; - } - - return document[_names.fullscreenElement]; - }, - }, - - /** - * The name of the event on the document that is fired when fullscreen is - * entered or exited. This event name is intended for use with addEventListener. - * In your event handler, to determine if the browser is in fullscreen mode or not, - * use {@link Fullscreen#fullscreen}. - * @memberof Fullscreen - * @type {String} - * @readonly - */ - changeEventName: { - get: function () { - if (!Fullscreen.supportsFullscreen()) { - return undefined; - } - - return _names.fullscreenchange; - }, - }, - - /** - * The name of the event that is fired when a fullscreen error - * occurs. This event name is intended for use with addEventListener. - * @memberof Fullscreen - * @type {String} - * @readonly - */ - errorEventName: { - get: function () { - if (!Fullscreen.supportsFullscreen()) { - return undefined; - } - - return _names.fullscreenerror; - }, - }, - - /** - * Determine whether the browser will allow an element to be made fullscreen, or not. - * For example, by default, iframes cannot go fullscreen unless the containing page - * adds an "allowfullscreen" attribute (or prefixed equivalent). - * @memberof Fullscreen - * @type {Boolean} - * @readonly - */ - enabled: { - get: function () { - if (!Fullscreen.supportsFullscreen()) { - return undefined; - } - - return document[_names.fullscreenEnabled]; - }, - }, - - /** - * Determines if the browser is currently in fullscreen mode. - * @memberof Fullscreen - * @type {Boolean} - * @readonly - */ - fullscreen: { - get: function () { - if (!Fullscreen.supportsFullscreen()) { - return undefined; - } - - return Fullscreen.element !== null; - }, - }, - }); - - /** - * Detects whether the browser supports the standard fullscreen API. - * - * @returns {Boolean} true if the browser supports the standard fullscreen API, - * false otherwise. - */ - Fullscreen.supportsFullscreen = function () { - if (defaultValue.defined(_supportsFullscreen)) { - return _supportsFullscreen; - } - - _supportsFullscreen = false; - - const body = document.body; - if (typeof body.requestFullscreen === "function") { - // go with the unprefixed, standard set of names - _names.requestFullscreen = "requestFullscreen"; - _names.exitFullscreen = "exitFullscreen"; - _names.fullscreenEnabled = "fullscreenEnabled"; - _names.fullscreenElement = "fullscreenElement"; - _names.fullscreenchange = "fullscreenchange"; - _names.fullscreenerror = "fullscreenerror"; - _supportsFullscreen = true; - return _supportsFullscreen; - } - - //check for the correct combination of prefix plus the various names that browsers use - const prefixes = ["webkit", "moz", "o", "ms", "khtml"]; - let name; - for (let i = 0, len = prefixes.length; i < len; ++i) { - const prefix = prefixes[i]; - - // casing of Fullscreen differs across browsers - name = `${prefix}RequestFullscreen`; - if (typeof body[name] === "function") { - _names.requestFullscreen = name; - _supportsFullscreen = true; - } else { - name = `${prefix}RequestFullScreen`; - if (typeof body[name] === "function") { - _names.requestFullscreen = name; - _supportsFullscreen = true; - } - } - - // disagreement about whether it's "exit" as per spec, or "cancel" - name = `${prefix}ExitFullscreen`; - if (typeof document[name] === "function") { - _names.exitFullscreen = name; - } else { - name = `${prefix}CancelFullScreen`; - if (typeof document[name] === "function") { - _names.exitFullscreen = name; - } - } - - // casing of Fullscreen differs across browsers - name = `${prefix}FullscreenEnabled`; - if (document[name] !== undefined) { - _names.fullscreenEnabled = name; - } else { - name = `${prefix}FullScreenEnabled`; - if (document[name] !== undefined) { - _names.fullscreenEnabled = name; - } - } - - // casing of Fullscreen differs across browsers - name = `${prefix}FullscreenElement`; - if (document[name] !== undefined) { - _names.fullscreenElement = name; - } else { - name = `${prefix}FullScreenElement`; - if (document[name] !== undefined) { - _names.fullscreenElement = name; - } - } - - // thankfully, event names are all lowercase per spec - name = `${prefix}fullscreenchange`; - // event names do not have 'on' in the front, but the property on the document does - if (document[`on${name}`] !== undefined) { - //except on IE - if (prefix === "ms") { - name = "MSFullscreenChange"; - } - _names.fullscreenchange = name; - } - - name = `${prefix}fullscreenerror`; - if (document[`on${name}`] !== undefined) { - //except on IE - if (prefix === "ms") { - name = "MSFullscreenError"; - } - _names.fullscreenerror = name; - } - } - - return _supportsFullscreen; - }; - - /** - * Asynchronously requests the browser to enter fullscreen mode on the given element. - * If fullscreen mode is not supported by the browser, does nothing. - * - * @param {Object} element The HTML element which will be placed into fullscreen mode. - * @param {Object} [vrDevice] The HMDVRDevice device. - * - * @example - * // Put the entire page into fullscreen. - * Cesium.Fullscreen.requestFullscreen(document.body) - * - * // Place only the Cesium canvas into fullscreen. - * Cesium.Fullscreen.requestFullscreen(scene.canvas) - */ - Fullscreen.requestFullscreen = function (element, vrDevice) { - if (!Fullscreen.supportsFullscreen()) { - return; - } - - element[_names.requestFullscreen]({ vrDisplay: vrDevice }); - }; - - /** - * Asynchronously exits fullscreen mode. If the browser is not currently - * in fullscreen, or if fullscreen mode is not supported by the browser, does nothing. - */ - Fullscreen.exitFullscreen = function () { - if (!Fullscreen.supportsFullscreen()) { - return; - } - - document[_names.exitFullscreen](); - }; - - //For unit tests - Fullscreen._names = _names; - var Fullscreen$1 = Fullscreen; - - let theNavigator; - if (typeof navigator !== "undefined") { - theNavigator = navigator; - } else { - theNavigator = {}; - } - - function extractVersion(versionString) { - const parts = versionString.split("."); - for (let i = 0, len = parts.length; i < len; ++i) { - parts[i] = parseInt(parts[i], 10); - } - return parts; - } - - let isChromeResult; - let chromeVersionResult; - function isChrome() { - if (!defaultValue.defined(isChromeResult)) { - isChromeResult = false; - // Edge contains Chrome in the user agent too - if (!isEdge()) { - const fields = / Chrome\/([\.0-9]+)/.exec(theNavigator.userAgent); - if (fields !== null) { - isChromeResult = true; - chromeVersionResult = extractVersion(fields[1]); - } - } - } - - return isChromeResult; - } - - function chromeVersion() { - return isChrome() && chromeVersionResult; - } - - let isSafariResult; - let safariVersionResult; - function isSafari() { - if (!defaultValue.defined(isSafariResult)) { - isSafariResult = false; - - // Chrome and Edge contain Safari in the user agent too - if ( - !isChrome() && - !isEdge() && - / Safari\/[\.0-9]+/.test(theNavigator.userAgent) - ) { - const fields = / Version\/([\.0-9]+)/.exec(theNavigator.userAgent); - if (fields !== null) { - isSafariResult = true; - safariVersionResult = extractVersion(fields[1]); - } - } - } - - return isSafariResult; - } - - function safariVersion() { - return isSafari() && safariVersionResult; - } - - let isWebkitResult; - let webkitVersionResult; - function isWebkit() { - if (!defaultValue.defined(isWebkitResult)) { - isWebkitResult = false; - - const fields = / AppleWebKit\/([\.0-9]+)(\+?)/.exec(theNavigator.userAgent); - if (fields !== null) { - isWebkitResult = true; - webkitVersionResult = extractVersion(fields[1]); - webkitVersionResult.isNightly = !!fields[2]; - } - } - - return isWebkitResult; - } - - function webkitVersion() { - return isWebkit() && webkitVersionResult; - } - - let isInternetExplorerResult; - let internetExplorerVersionResult; - function isInternetExplorer() { - if (!defaultValue.defined(isInternetExplorerResult)) { - isInternetExplorerResult = false; - - let fields; - if (theNavigator.appName === "Microsoft Internet Explorer") { - fields = /MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(theNavigator.userAgent); - if (fields !== null) { - isInternetExplorerResult = true; - internetExplorerVersionResult = extractVersion(fields[1]); - } - } else if (theNavigator.appName === "Netscape") { - fields = /Trident\/.*rv:([0-9]{1,}[\.0-9]{0,})/.exec( - theNavigator.userAgent - ); - if (fields !== null) { - isInternetExplorerResult = true; - internetExplorerVersionResult = extractVersion(fields[1]); - } - } - } - return isInternetExplorerResult; - } - - function internetExplorerVersion() { - return isInternetExplorer() && internetExplorerVersionResult; - } - - let isEdgeResult; - let edgeVersionResult; - function isEdge() { - if (!defaultValue.defined(isEdgeResult)) { - isEdgeResult = false; - const fields = / Edg\/([\.0-9]+)/.exec(theNavigator.userAgent); - if (fields !== null) { - isEdgeResult = true; - edgeVersionResult = extractVersion(fields[1]); - } - } - return isEdgeResult; - } - - function edgeVersion() { - return isEdge() && edgeVersionResult; - } - - let isFirefoxResult; - let firefoxVersionResult; - function isFirefox() { - if (!defaultValue.defined(isFirefoxResult)) { - isFirefoxResult = false; - - const fields = /Firefox\/([\.0-9]+)/.exec(theNavigator.userAgent); - if (fields !== null) { - isFirefoxResult = true; - firefoxVersionResult = extractVersion(fields[1]); - } - } - return isFirefoxResult; - } - - let isWindowsResult; - function isWindows() { - if (!defaultValue.defined(isWindowsResult)) { - isWindowsResult = /Windows/i.test(theNavigator.appVersion); - } - return isWindowsResult; - } - - let isIPadOrIOSResult; - function isIPadOrIOS() { - if (!defaultValue.defined(isIPadOrIOSResult)) { - isIPadOrIOSResult = - navigator.platform === "iPhone" || - navigator.platform === "iPod" || - navigator.platform === "iPad"; - } - - return isIPadOrIOSResult; - } - - function firefoxVersion() { - return isFirefox() && firefoxVersionResult; - } - - let hasPointerEvents; - function supportsPointerEvents() { - if (!defaultValue.defined(hasPointerEvents)) { - //While navigator.pointerEnabled is deprecated in the W3C specification - //we still need to use it if it exists in order to support browsers - //that rely on it, such as the Windows WebBrowser control which defines - //PointerEvent but sets navigator.pointerEnabled to false. - - //Firefox disabled because of https://github.com/CesiumGS/cesium/issues/6372 - hasPointerEvents = - !isFirefox() && - typeof PointerEvent !== "undefined" && - (!defaultValue.defined(theNavigator.pointerEnabled) || theNavigator.pointerEnabled); - } - return hasPointerEvents; - } - - let imageRenderingValueResult; - let supportsImageRenderingPixelatedResult; - function supportsImageRenderingPixelated() { - if (!defaultValue.defined(supportsImageRenderingPixelatedResult)) { - const canvas = document.createElement("canvas"); - canvas.setAttribute( - "style", - "image-rendering: -moz-crisp-edges;" + "image-rendering: pixelated;" - ); - //canvas.style.imageRendering will be undefined, null or an empty string on unsupported browsers. - const tmp = canvas.style.imageRendering; - supportsImageRenderingPixelatedResult = defaultValue.defined(tmp) && tmp !== ""; - if (supportsImageRenderingPixelatedResult) { - imageRenderingValueResult = tmp; - } - } - return supportsImageRenderingPixelatedResult; - } - - function imageRenderingValue() { - return supportsImageRenderingPixelated() - ? imageRenderingValueResult - : undefined; - } - - function supportsWebP() { - //>>includeStart('debug', pragmas.debug); - if (!supportsWebP.initialized) { - throw new Check.DeveloperError( - "You must call FeatureDetection.supportsWebP.initialize and wait for the promise to resolve before calling FeatureDetection.supportsWebP" - ); - } - //>>includeEnd('debug'); - return supportsWebP._result; - } - supportsWebP._promise = undefined; - supportsWebP._result = undefined; - supportsWebP.initialize = function () { - // From https://developers.google.com/speed/webp/faq#how_can_i_detect_browser_support_for_webp - if (defaultValue.defined(supportsWebP._promise)) { - return supportsWebP._promise; - } - - supportsWebP._promise = new Promise((resolve) => { - const image = new Image(); - image.onload = function () { - supportsWebP._result = image.width > 0 && image.height > 0; - resolve(supportsWebP._result); - }; - - image.onerror = function () { - supportsWebP._result = false; - resolve(supportsWebP._result); - }; - image.src = - "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"; - }); - - return supportsWebP._promise; - }; - Object.defineProperties(supportsWebP, { - initialized: { - get: function () { - return defaultValue.defined(supportsWebP._result); - }, - }, - }); - - const typedArrayTypes = []; - if (typeof ArrayBuffer !== "undefined") { - typedArrayTypes.push( - Int8Array, - Uint8Array, - Int16Array, - Uint16Array, - Int32Array, - Uint32Array, - Float32Array, - Float64Array - ); - - if (typeof Uint8ClampedArray !== "undefined") { - typedArrayTypes.push(Uint8ClampedArray); - } - - if (typeof Uint8ClampedArray !== "undefined") { - typedArrayTypes.push(Uint8ClampedArray); - } - - if (typeof BigInt64Array !== "undefined") { - // eslint-disable-next-line no-undef - typedArrayTypes.push(BigInt64Array); - } - - if (typeof BigUint64Array !== "undefined") { - // eslint-disable-next-line no-undef - typedArrayTypes.push(BigUint64Array); - } - } - - /** - * A set of functions to detect whether the current browser supports - * various features. - * - * @namespace FeatureDetection - */ - const FeatureDetection = { - isChrome: isChrome, - chromeVersion: chromeVersion, - isSafari: isSafari, - safariVersion: safariVersion, - isWebkit: isWebkit, - webkitVersion: webkitVersion, - isInternetExplorer: isInternetExplorer, - internetExplorerVersion: internetExplorerVersion, - isEdge: isEdge, - edgeVersion: edgeVersion, - isFirefox: isFirefox, - firefoxVersion: firefoxVersion, - isWindows: isWindows, - isIPadOrIOS: isIPadOrIOS, - hardwareConcurrency: defaultValue.defaultValue(theNavigator.hardwareConcurrency, 3), - supportsPointerEvents: supportsPointerEvents, - supportsImageRenderingPixelated: supportsImageRenderingPixelated, - supportsWebP: supportsWebP, - imageRenderingValue: imageRenderingValue, - typedArrayTypes: typedArrayTypes, - }; - - /** - * Detects whether the current browser supports Basis Universal textures and the web assembly modules needed to transcode them. - * - * @param {Scene} scene - * @returns {Boolean} true if the browser supports web assembly modules and the scene supports Basis Universal textures, false if not. - */ - FeatureDetection.supportsBasis = function (scene) { - return FeatureDetection.supportsWebAssembly() && scene.context.supportsBasis; - }; - - /** - * Detects whether the current browser supports the full screen standard. - * - * @returns {Boolean} true if the browser supports the full screen standard, false if not. - * - * @see Fullscreen - * @see {@link http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html|W3C Fullscreen Living Specification} - */ - FeatureDetection.supportsFullscreen = function () { - return Fullscreen$1.supportsFullscreen(); - }; - - /** - * Detects whether the current browser supports typed arrays. - * - * @returns {Boolean} true if the browser supports typed arrays, false if not. - * - * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification} - */ - FeatureDetection.supportsTypedArrays = function () { - return typeof ArrayBuffer !== "undefined"; - }; - - /** - * Detects whether the current browser supports BigInt64Array typed arrays. - * - * @returns {Boolean} true if the browser supports BigInt64Array typed arrays, false if not. - * - * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification} - */ - FeatureDetection.supportsBigInt64Array = function () { - return typeof BigInt64Array !== "undefined"; - }; - - /** - * Detects whether the current browser supports BigUint64Array typed arrays. - * - * @returns {Boolean} true if the browser supports BigUint64Array typed arrays, false if not. - * - * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification} - */ - FeatureDetection.supportsBigUint64Array = function () { - return typeof BigUint64Array !== "undefined"; - }; - - /** - * Detects whether the current browser supports BigInt. - * - * @returns {Boolean} true if the browser supports BigInt, false if not. - * - * @see {@link https://tc39.es/ecma262/#sec-bigint-objects|BigInt Specification} - */ - FeatureDetection.supportsBigInt = function () { - return typeof BigInt !== "undefined"; - }; - - /** - * Detects whether the current browser supports Web Workers. - * - * @returns {Boolean} true if the browsers supports Web Workers, false if not. - * - * @see {@link http://www.w3.org/TR/workers/} - */ - FeatureDetection.supportsWebWorkers = function () { - return typeof Worker !== "undefined"; - }; - - /** - * Detects whether the current browser supports Web Assembly. - * - * @returns {Boolean} true if the browsers supports Web Assembly, false if not. - * - * @see {@link https://developer.mozilla.org/en-US/docs/WebAssembly} - */ - FeatureDetection.supportsWebAssembly = function () { - return typeof WebAssembly !== "undefined"; - }; - var FeatureDetection$1 = FeatureDetection; - - /** - * A set of 4-dimensional coordinates used to represent rotation in 3-dimensional space. - * @alias Quaternion - * @constructor - * - * @param {Number} [x=0.0] The X component. - * @param {Number} [y=0.0] The Y component. - * @param {Number} [z=0.0] The Z component. - * @param {Number} [w=0.0] The W component. - * - * @see PackableForInterpolation - */ - function Quaternion(x, y, z, w) { - /** - * The X component. - * @type {Number} - * @default 0.0 - */ - this.x = defaultValue.defaultValue(x, 0.0); - - /** - * The Y component. - * @type {Number} - * @default 0.0 - */ - this.y = defaultValue.defaultValue(y, 0.0); - - /** - * The Z component. - * @type {Number} - * @default 0.0 - */ - this.z = defaultValue.defaultValue(z, 0.0); - - /** - * The W component. - * @type {Number} - * @default 0.0 - */ - this.w = defaultValue.defaultValue(w, 0.0); - } - - let fromAxisAngleScratch = new Matrix3.Cartesian3(); - - /** - * Computes a quaternion representing a rotation around an axis. - * - * @param {Cartesian3} axis The axis of rotation. - * @param {Number} angle The angle in radians to rotate around the axis. - * @param {Quaternion} [result] The object onto which to store the result. - * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. - */ - Quaternion.fromAxisAngle = function (axis, angle, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("axis", axis); - Check.Check.typeOf.number("angle", angle); - //>>includeEnd('debug'); - - const halfAngle = angle / 2.0; - const s = Math.sin(halfAngle); - fromAxisAngleScratch = Matrix3.Cartesian3.normalize(axis, fromAxisAngleScratch); - - const x = fromAxisAngleScratch.x * s; - const y = fromAxisAngleScratch.y * s; - const z = fromAxisAngleScratch.z * s; - const w = Math.cos(halfAngle); - if (!defaultValue.defined(result)) { - return new Quaternion(x, y, z, w); - } - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - }; - - const fromRotationMatrixNext = [1, 2, 0]; - const fromRotationMatrixQuat = new Array(3); - /** - * Computes a Quaternion from the provided Matrix3 instance. - * - * @param {Matrix3} matrix The rotation matrix. - * @param {Quaternion} [result] The object onto which to store the result. - * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. - * - * @see Matrix3.fromQuaternion - */ - Quaternion.fromRotationMatrix = function (matrix, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("matrix", matrix); - //>>includeEnd('debug'); - - let root; - let x; - let y; - let z; - let w; - - const m00 = matrix[Matrix3.Matrix3.COLUMN0ROW0]; - const m11 = matrix[Matrix3.Matrix3.COLUMN1ROW1]; - const m22 = matrix[Matrix3.Matrix3.COLUMN2ROW2]; - const trace = m00 + m11 + m22; - - if (trace > 0.0) { - // |w| > 1/2, may as well choose w > 1/2 - root = Math.sqrt(trace + 1.0); // 2w - w = 0.5 * root; - root = 0.5 / root; // 1/(4w) - - x = (matrix[Matrix3.Matrix3.COLUMN1ROW2] - matrix[Matrix3.Matrix3.COLUMN2ROW1]) * root; - y = (matrix[Matrix3.Matrix3.COLUMN2ROW0] - matrix[Matrix3.Matrix3.COLUMN0ROW2]) * root; - z = (matrix[Matrix3.Matrix3.COLUMN0ROW1] - matrix[Matrix3.Matrix3.COLUMN1ROW0]) * root; - } else { - // |w| <= 1/2 - const next = fromRotationMatrixNext; - - let i = 0; - if (m11 > m00) { - i = 1; - } - if (m22 > m00 && m22 > m11) { - i = 2; - } - const j = next[i]; - const k = next[j]; - - root = Math.sqrt( - matrix[Matrix3.Matrix3.getElementIndex(i, i)] - - matrix[Matrix3.Matrix3.getElementIndex(j, j)] - - matrix[Matrix3.Matrix3.getElementIndex(k, k)] + - 1.0 - ); - - const quat = fromRotationMatrixQuat; - quat[i] = 0.5 * root; - root = 0.5 / root; - w = - (matrix[Matrix3.Matrix3.getElementIndex(k, j)] - - matrix[Matrix3.Matrix3.getElementIndex(j, k)]) * - root; - quat[j] = - (matrix[Matrix3.Matrix3.getElementIndex(j, i)] + - matrix[Matrix3.Matrix3.getElementIndex(i, j)]) * - root; - quat[k] = - (matrix[Matrix3.Matrix3.getElementIndex(k, i)] + - matrix[Matrix3.Matrix3.getElementIndex(i, k)]) * - root; - - x = -quat[0]; - y = -quat[1]; - z = -quat[2]; - } - - if (!defaultValue.defined(result)) { - return new Quaternion(x, y, z, w); - } - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - }; - - const scratchHPRQuaternion$1 = new Quaternion(); - let scratchHeadingQuaternion = new Quaternion(); - let scratchPitchQuaternion = new Quaternion(); - let scratchRollQuaternion = new Quaternion(); - - /** - * Computes a rotation from the given heading, pitch and roll angles. Heading is the rotation about the - * negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about - * the positive x axis. - * - * @param {HeadingPitchRoll} headingPitchRoll The rotation expressed as a heading, pitch and roll. - * @param {Quaternion} [result] The object onto which to store the result. - * @returns {Quaternion} The modified result parameter or a new Quaternion instance if none was provided. - */ - Quaternion.fromHeadingPitchRoll = function (headingPitchRoll, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("headingPitchRoll", headingPitchRoll); - //>>includeEnd('debug'); - - scratchRollQuaternion = Quaternion.fromAxisAngle( - Matrix3.Cartesian3.UNIT_X, - headingPitchRoll.roll, - scratchHPRQuaternion$1 - ); - scratchPitchQuaternion = Quaternion.fromAxisAngle( - Matrix3.Cartesian3.UNIT_Y, - -headingPitchRoll.pitch, - result - ); - result = Quaternion.multiply( - scratchPitchQuaternion, - scratchRollQuaternion, - scratchPitchQuaternion - ); - scratchHeadingQuaternion = Quaternion.fromAxisAngle( - Matrix3.Cartesian3.UNIT_Z, - -headingPitchRoll.heading, - scratchHPRQuaternion$1 - ); - return Quaternion.multiply(scratchHeadingQuaternion, result, result); - }; - - const sampledQuaternionAxis = new Matrix3.Cartesian3(); - const sampledQuaternionRotation = new Matrix3.Cartesian3(); - const sampledQuaternionTempQuaternion = new Quaternion(); - const sampledQuaternionQuaternion0 = new Quaternion(); - const sampledQuaternionQuaternion0Conjugate = new Quaternion(); - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - Quaternion.packedLength = 4; - - /** - * Stores the provided instance into the provided array. - * - * @param {Quaternion} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - Quaternion.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.x; - array[startingIndex++] = value.y; - array[startingIndex++] = value.z; - array[startingIndex] = value.w; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {Quaternion} [result] The object into which to store the result. - * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. - */ - Quaternion.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new Quaternion(); - } - result.x = array[startingIndex]; - result.y = array[startingIndex + 1]; - result.z = array[startingIndex + 2]; - result.w = array[startingIndex + 3]; - return result; - }; - - /** - * The number of elements used to store the object into an array in its interpolatable form. - * @type {Number} - */ - Quaternion.packedInterpolationLength = 3; - - /** - * Converts a packed array into a form suitable for interpolation. - * - * @param {Number[]} packedArray The packed array. - * @param {Number} [startingIndex=0] The index of the first element to be converted. - * @param {Number} [lastIndex=packedArray.length] The index of the last element to be converted. - * @param {Number[]} [result] The object into which to store the result. - */ - Quaternion.convertPackedArrayForInterpolation = function ( - packedArray, - startingIndex, - lastIndex, - result - ) { - Quaternion.unpack( - packedArray, - lastIndex * 4, - sampledQuaternionQuaternion0Conjugate - ); - Quaternion.conjugate( - sampledQuaternionQuaternion0Conjugate, - sampledQuaternionQuaternion0Conjugate - ); - - for (let i = 0, len = lastIndex - startingIndex + 1; i < len; i++) { - const offset = i * 3; - Quaternion.unpack( - packedArray, - (startingIndex + i) * 4, - sampledQuaternionTempQuaternion - ); - - Quaternion.multiply( - sampledQuaternionTempQuaternion, - sampledQuaternionQuaternion0Conjugate, - sampledQuaternionTempQuaternion - ); - - if (sampledQuaternionTempQuaternion.w < 0) { - Quaternion.negate( - sampledQuaternionTempQuaternion, - sampledQuaternionTempQuaternion - ); - } - - Quaternion.computeAxis( - sampledQuaternionTempQuaternion, - sampledQuaternionAxis - ); - const angle = Quaternion.computeAngle(sampledQuaternionTempQuaternion); - if (!defaultValue.defined(result)) { - result = []; - } - result[offset] = sampledQuaternionAxis.x * angle; - result[offset + 1] = sampledQuaternionAxis.y * angle; - result[offset + 2] = sampledQuaternionAxis.z * angle; - } - }; - - /** - * Retrieves an instance from a packed array converted with {@link convertPackedArrayForInterpolation}. - * - * @param {Number[]} array The array previously packed for interpolation. - * @param {Number[]} sourceArray The original packed array. - * @param {Number} [firstIndex=0] The firstIndex used to convert the array. - * @param {Number} [lastIndex=packedArray.length] The lastIndex used to convert the array. - * @param {Quaternion} [result] The object into which to store the result. - * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. - */ - Quaternion.unpackInterpolationResult = function ( - array, - sourceArray, - firstIndex, - lastIndex, - result - ) { - if (!defaultValue.defined(result)) { - result = new Quaternion(); - } - Matrix3.Cartesian3.fromArray(array, 0, sampledQuaternionRotation); - const magnitude = Matrix3.Cartesian3.magnitude(sampledQuaternionRotation); - - Quaternion.unpack(sourceArray, lastIndex * 4, sampledQuaternionQuaternion0); - - if (magnitude === 0) { - Quaternion.clone(Quaternion.IDENTITY, sampledQuaternionTempQuaternion); - } else { - Quaternion.fromAxisAngle( - sampledQuaternionRotation, - magnitude, - sampledQuaternionTempQuaternion - ); - } - - return Quaternion.multiply( - sampledQuaternionTempQuaternion, - sampledQuaternionQuaternion0, - result - ); - }; - - /** - * Duplicates a Quaternion instance. - * - * @param {Quaternion} quaternion The quaternion to duplicate. - * @param {Quaternion} [result] The object onto which to store the result. - * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. (Returns undefined if quaternion is undefined) - */ - Quaternion.clone = function (quaternion, result) { - if (!defaultValue.defined(quaternion)) { - return undefined; - } - - if (!defaultValue.defined(result)) { - return new Quaternion( - quaternion.x, - quaternion.y, - quaternion.z, - quaternion.w - ); - } - - result.x = quaternion.x; - result.y = quaternion.y; - result.z = quaternion.z; - result.w = quaternion.w; - return result; - }; - - /** - * Computes the conjugate of the provided quaternion. - * - * @param {Quaternion} quaternion The quaternion to conjugate. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.conjugate = function (quaternion, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = -quaternion.x; - result.y = -quaternion.y; - result.z = -quaternion.z; - result.w = quaternion.w; - return result; - }; - - /** - * Computes magnitude squared for the provided quaternion. - * - * @param {Quaternion} quaternion The quaternion to conjugate. - * @returns {Number} The magnitude squared. - */ - Quaternion.magnitudeSquared = function (quaternion) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - //>>includeEnd('debug'); - - return ( - quaternion.x * quaternion.x + - quaternion.y * quaternion.y + - quaternion.z * quaternion.z + - quaternion.w * quaternion.w - ); - }; - - /** - * Computes magnitude for the provided quaternion. - * - * @param {Quaternion} quaternion The quaternion to conjugate. - * @returns {Number} The magnitude. - */ - Quaternion.magnitude = function (quaternion) { - return Math.sqrt(Quaternion.magnitudeSquared(quaternion)); - }; - - /** - * Computes the normalized form of the provided quaternion. - * - * @param {Quaternion} quaternion The quaternion to normalize. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.normalize = function (quaternion, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const inverseMagnitude = 1.0 / Quaternion.magnitude(quaternion); - const x = quaternion.x * inverseMagnitude; - const y = quaternion.y * inverseMagnitude; - const z = quaternion.z * inverseMagnitude; - const w = quaternion.w * inverseMagnitude; - - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - }; - - /** - * Computes the inverse of the provided quaternion. - * - * @param {Quaternion} quaternion The quaternion to normalize. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.inverse = function (quaternion, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const magnitudeSquared = Quaternion.magnitudeSquared(quaternion); - result = Quaternion.conjugate(quaternion, result); - return Quaternion.multiplyByScalar(result, 1.0 / magnitudeSquared, result); - }; - - /** - * Computes the componentwise sum of two quaternions. - * - * @param {Quaternion} left The first quaternion. - * @param {Quaternion} right The second quaternion. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.add = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x + right.x; - result.y = left.y + right.y; - result.z = left.z + right.z; - result.w = left.w + right.w; - return result; - }; - - /** - * Computes the componentwise difference of two quaternions. - * - * @param {Quaternion} left The first quaternion. - * @param {Quaternion} right The second quaternion. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.subtract = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = left.x - right.x; - result.y = left.y - right.y; - result.z = left.z - right.z; - result.w = left.w - right.w; - return result; - }; - - /** - * Negates the provided quaternion. - * - * @param {Quaternion} quaternion The quaternion to be negated. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.negate = function (quaternion, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = -quaternion.x; - result.y = -quaternion.y; - result.z = -quaternion.z; - result.w = -quaternion.w; - return result; - }; - - /** - * Computes the dot (scalar) product of two quaternions. - * - * @param {Quaternion} left The first quaternion. - * @param {Quaternion} right The second quaternion. - * @returns {Number} The dot product. - */ - Quaternion.dot = function (left, right) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - //>>includeEnd('debug'); - - return ( - left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w - ); - }; - - /** - * Computes the product of two quaternions. - * - * @param {Quaternion} left The first quaternion. - * @param {Quaternion} right The second quaternion. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.multiply = function (left, right, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("left", left); - Check.Check.typeOf.object("right", right); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const leftX = left.x; - const leftY = left.y; - const leftZ = left.z; - const leftW = left.w; - - const rightX = right.x; - const rightY = right.y; - const rightZ = right.z; - const rightW = right.w; - - const x = leftW * rightX + leftX * rightW + leftY * rightZ - leftZ * rightY; - const y = leftW * rightY - leftX * rightZ + leftY * rightW + leftZ * rightX; - const z = leftW * rightZ + leftX * rightY - leftY * rightX + leftZ * rightW; - const w = leftW * rightW - leftX * rightX - leftY * rightY - leftZ * rightZ; - - result.x = x; - result.y = y; - result.z = z; - result.w = w; - return result; - }; - - /** - * Multiplies the provided quaternion componentwise by the provided scalar. - * - * @param {Quaternion} quaternion The quaternion to be scaled. - * @param {Number} scalar The scalar to multiply with. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.multiplyByScalar = function (quaternion, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = quaternion.x * scalar; - result.y = quaternion.y * scalar; - result.z = quaternion.z * scalar; - result.w = quaternion.w * scalar; - return result; - }; - - /** - * Divides the provided quaternion componentwise by the provided scalar. - * - * @param {Quaternion} quaternion The quaternion to be divided. - * @param {Number} scalar The scalar to divide by. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.divideByScalar = function (quaternion, scalar, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - Check.Check.typeOf.number("scalar", scalar); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - result.x = quaternion.x / scalar; - result.y = quaternion.y / scalar; - result.z = quaternion.z / scalar; - result.w = quaternion.w / scalar; - return result; - }; - - /** - * Computes the axis of rotation of the provided quaternion. - * - * @param {Quaternion} quaternion The quaternion to use. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Quaternion.computeAxis = function (quaternion, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const w = quaternion.w; - if (Math.abs(w - 1.0) < Math$1.CesiumMath.EPSILON6) { - result.x = result.y = result.z = 0; - return result; - } - - const scalar = 1.0 / Math.sqrt(1.0 - w * w); - - result.x = quaternion.x * scalar; - result.y = quaternion.y * scalar; - result.z = quaternion.z * scalar; - return result; - }; - - /** - * Computes the angle of rotation of the provided quaternion. - * - * @param {Quaternion} quaternion The quaternion to use. - * @returns {Number} The angle of rotation. - */ - Quaternion.computeAngle = function (quaternion) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - //>>includeEnd('debug'); - - if (Math.abs(quaternion.w - 1.0) < Math$1.CesiumMath.EPSILON6) { - return 0.0; - } - return 2.0 * Math.acos(quaternion.w); - }; - - let lerpScratch = new Quaternion(); - /** - * Computes the linear interpolation or extrapolation at t using the provided quaternions. - * - * @param {Quaternion} start The value corresponding to t at 0.0. - * @param {Quaternion} end The value corresponding to t at 1.0. - * @param {Number} t The point along t at which to interpolate. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.lerp = function (start, end, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("start", start); - Check.Check.typeOf.object("end", end); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - lerpScratch = Quaternion.multiplyByScalar(end, t, lerpScratch); - result = Quaternion.multiplyByScalar(start, 1.0 - t, result); - return Quaternion.add(lerpScratch, result, result); - }; - - let slerpEndNegated = new Quaternion(); - let slerpScaledP = new Quaternion(); - let slerpScaledR = new Quaternion(); - /** - * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions. - * - * @param {Quaternion} start The value corresponding to t at 0.0. - * @param {Quaternion} end The value corresponding to t at 1.0. - * @param {Number} t The point along t at which to interpolate. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - * - * @see Quaternion#fastSlerp - */ - Quaternion.slerp = function (start, end, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("start", start); - Check.Check.typeOf.object("end", end); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - let dot = Quaternion.dot(start, end); - - // The angle between start must be acute. Since q and -q represent - // the same rotation, negate q to get the acute angle. - let r = end; - if (dot < 0.0) { - dot = -dot; - r = slerpEndNegated = Quaternion.negate(end, slerpEndNegated); - } - - // dot > 0, as the dot product approaches 1, the angle between the - // quaternions vanishes. use linear interpolation. - if (1.0 - dot < Math$1.CesiumMath.EPSILON6) { - return Quaternion.lerp(start, r, t, result); - } - - const theta = Math.acos(dot); - slerpScaledP = Quaternion.multiplyByScalar( - start, - Math.sin((1 - t) * theta), - slerpScaledP - ); - slerpScaledR = Quaternion.multiplyByScalar( - r, - Math.sin(t * theta), - slerpScaledR - ); - result = Quaternion.add(slerpScaledP, slerpScaledR, result); - return Quaternion.multiplyByScalar(result, 1.0 / Math.sin(theta), result); - }; - - /** - * The logarithmic quaternion function. - * - * @param {Quaternion} quaternion The unit quaternion. - * @param {Cartesian3} result The object onto which to store the result. - * @returns {Cartesian3} The modified result parameter. - */ - Quaternion.log = function (quaternion, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("quaternion", quaternion); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const theta = Math$1.CesiumMath.acosClamped(quaternion.w); - let thetaOverSinTheta = 0.0; - - if (theta !== 0.0) { - thetaOverSinTheta = theta / Math.sin(theta); - } - - return Matrix3.Cartesian3.multiplyByScalar(quaternion, thetaOverSinTheta, result); - }; - - /** - * The exponential quaternion function. - * - * @param {Cartesian3} cartesian The cartesian. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - */ - Quaternion.exp = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("cartesian", cartesian); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const theta = Matrix3.Cartesian3.magnitude(cartesian); - let sinThetaOverTheta = 0.0; - - if (theta !== 0.0) { - sinThetaOverTheta = Math.sin(theta) / theta; - } - - result.x = cartesian.x * sinThetaOverTheta; - result.y = cartesian.y * sinThetaOverTheta; - result.z = cartesian.z * sinThetaOverTheta; - result.w = Math.cos(theta); - - return result; - }; - - const squadScratchCartesian0 = new Matrix3.Cartesian3(); - const squadScratchCartesian1 = new Matrix3.Cartesian3(); - const squadScratchQuaternion0 = new Quaternion(); - const squadScratchQuaternion1 = new Quaternion(); - - /** - * Computes an inner quadrangle point. - *

    This will compute quaternions that ensure a squad curve is C1.

    - * - * @param {Quaternion} q0 The first quaternion. - * @param {Quaternion} q1 The second quaternion. - * @param {Quaternion} q2 The third quaternion. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - * - * @see Quaternion#squad - */ - Quaternion.computeInnerQuadrangle = function (q0, q1, q2, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("q0", q0); - Check.Check.typeOf.object("q1", q1); - Check.Check.typeOf.object("q2", q2); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const qInv = Quaternion.conjugate(q1, squadScratchQuaternion0); - Quaternion.multiply(qInv, q2, squadScratchQuaternion1); - const cart0 = Quaternion.log(squadScratchQuaternion1, squadScratchCartesian0); - - Quaternion.multiply(qInv, q0, squadScratchQuaternion1); - const cart1 = Quaternion.log(squadScratchQuaternion1, squadScratchCartesian1); - - Matrix3.Cartesian3.add(cart0, cart1, cart0); - Matrix3.Cartesian3.multiplyByScalar(cart0, 0.25, cart0); - Matrix3.Cartesian3.negate(cart0, cart0); - Quaternion.exp(cart0, squadScratchQuaternion0); - - return Quaternion.multiply(q1, squadScratchQuaternion0, result); - }; - - /** - * Computes the spherical quadrangle interpolation between quaternions. - * - * @param {Quaternion} q0 The first quaternion. - * @param {Quaternion} q1 The second quaternion. - * @param {Quaternion} s0 The first inner quadrangle. - * @param {Quaternion} s1 The second inner quadrangle. - * @param {Number} t The time in [0,1] used to interpolate. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - * - * - * @example - * // 1. compute the squad interpolation between two quaternions on a curve - * const s0 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i - 1], quaternions[i], quaternions[i + 1], new Cesium.Quaternion()); - * const s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i], quaternions[i + 1], quaternions[i + 2], new Cesium.Quaternion()); - * const q = Cesium.Quaternion.squad(quaternions[i], quaternions[i + 1], s0, s1, t, new Cesium.Quaternion()); - * - * // 2. compute the squad interpolation as above but where the first quaternion is a end point. - * const s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[0], quaternions[1], quaternions[2], new Cesium.Quaternion()); - * const q = Cesium.Quaternion.squad(quaternions[0], quaternions[1], quaternions[0], s1, t, new Cesium.Quaternion()); - * - * @see Quaternion#computeInnerQuadrangle - */ - Quaternion.squad = function (q0, q1, s0, s1, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("q0", q0); - Check.Check.typeOf.object("q1", q1); - Check.Check.typeOf.object("s0", s0); - Check.Check.typeOf.object("s1", s1); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const slerp0 = Quaternion.slerp(q0, q1, t, squadScratchQuaternion0); - const slerp1 = Quaternion.slerp(s0, s1, t, squadScratchQuaternion1); - return Quaternion.slerp(slerp0, slerp1, 2.0 * t * (1.0 - t), result); - }; - - const fastSlerpScratchQuaternion = new Quaternion(); - // eslint-disable-next-line no-loss-of-precision - const opmu = 1.90110745351730037; - const u = FeatureDetection$1.supportsTypedArrays() ? new Float32Array(8) : []; - const v = FeatureDetection$1.supportsTypedArrays() ? new Float32Array(8) : []; - const bT = FeatureDetection$1.supportsTypedArrays() ? new Float32Array(8) : []; - const bD = FeatureDetection$1.supportsTypedArrays() ? new Float32Array(8) : []; - - for (let i = 0; i < 7; ++i) { - const s = i + 1.0; - const t = 2.0 * s + 1.0; - u[i] = 1.0 / (s * t); - v[i] = s / t; - } - - u[7] = opmu / (8.0 * 17.0); - v[7] = (opmu * 8.0) / 17.0; - - /** - * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions. - * This implementation is faster than {@link Quaternion#slerp}, but is only accurate up to 10-6. - * - * @param {Quaternion} start The value corresponding to t at 0.0. - * @param {Quaternion} end The value corresponding to t at 1.0. - * @param {Number} t The point along t at which to interpolate. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter. - * - * @see Quaternion#slerp - */ - Quaternion.fastSlerp = function (start, end, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("start", start); - Check.Check.typeOf.object("end", end); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - let x = Quaternion.dot(start, end); - - let sign; - if (x >= 0) { - sign = 1.0; - } else { - sign = -1.0; - x = -x; - } - - const xm1 = x - 1.0; - const d = 1.0 - t; - const sqrT = t * t; - const sqrD = d * d; - - for (let i = 7; i >= 0; --i) { - bT[i] = (u[i] * sqrT - v[i]) * xm1; - bD[i] = (u[i] * sqrD - v[i]) * xm1; - } - - const cT = - sign * - t * - (1.0 + - bT[0] * - (1.0 + - bT[1] * - (1.0 + - bT[2] * - (1.0 + - bT[3] * - (1.0 + - bT[4] * - (1.0 + bT[5] * (1.0 + bT[6] * (1.0 + bT[7])))))))); - const cD = - d * - (1.0 + - bD[0] * - (1.0 + - bD[1] * - (1.0 + - bD[2] * - (1.0 + - bD[3] * - (1.0 + - bD[4] * - (1.0 + bD[5] * (1.0 + bD[6] * (1.0 + bD[7])))))))); - - const temp = Quaternion.multiplyByScalar( - start, - cD, - fastSlerpScratchQuaternion - ); - Quaternion.multiplyByScalar(end, cT, result); - return Quaternion.add(temp, result, result); - }; - - /** - * Computes the spherical quadrangle interpolation between quaternions. - * An implementation that is faster than {@link Quaternion#squad}, but less accurate. - * - * @param {Quaternion} q0 The first quaternion. - * @param {Quaternion} q1 The second quaternion. - * @param {Quaternion} s0 The first inner quadrangle. - * @param {Quaternion} s1 The second inner quadrangle. - * @param {Number} t The time in [0,1] used to interpolate. - * @param {Quaternion} result The object onto which to store the result. - * @returns {Quaternion} The modified result parameter or a new instance if none was provided. - * - * @see Quaternion#squad - */ - Quaternion.fastSquad = function (q0, q1, s0, s1, t, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("q0", q0); - Check.Check.typeOf.object("q1", q1); - Check.Check.typeOf.object("s0", s0); - Check.Check.typeOf.object("s1", s1); - Check.Check.typeOf.number("t", t); - Check.Check.typeOf.object("result", result); - //>>includeEnd('debug'); - - const slerp0 = Quaternion.fastSlerp(q0, q1, t, squadScratchQuaternion0); - const slerp1 = Quaternion.fastSlerp(s0, s1, t, squadScratchQuaternion1); - return Quaternion.fastSlerp(slerp0, slerp1, 2.0 * t * (1.0 - t), result); - }; - - /** - * Compares the provided quaternions componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Quaternion} [left] The first quaternion. - * @param {Quaternion} [right] The second quaternion. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Quaternion.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.x === right.x && - left.y === right.y && - left.z === right.z && - left.w === right.w) - ); - }; - - /** - * Compares the provided quaternions componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Quaternion} [left] The first quaternion. - * @param {Quaternion} [right] The second quaternion. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Quaternion.equalsEpsilon = function (left, right, epsilon) { - epsilon = defaultValue.defaultValue(epsilon, 0); - - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math.abs(left.x - right.x) <= epsilon && - Math.abs(left.y - right.y) <= epsilon && - Math.abs(left.z - right.z) <= epsilon && - Math.abs(left.w - right.w) <= epsilon) - ); - }; - - /** - * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 0.0). - * - * @type {Quaternion} - * @constant - */ - Quaternion.ZERO = Object.freeze(new Quaternion(0.0, 0.0, 0.0, 0.0)); - - /** - * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 1.0). - * - * @type {Quaternion} - * @constant - */ - Quaternion.IDENTITY = Object.freeze(new Quaternion(0.0, 0.0, 0.0, 1.0)); - - /** - * Duplicates this Quaternion instance. - * - * @param {Quaternion} [result] The object onto which to store the result. - * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. - */ - Quaternion.prototype.clone = function (result) { - return Quaternion.clone(this, result); - }; - - /** - * Compares this and the provided quaternion componentwise and returns - * true if they are equal, false otherwise. - * - * @param {Quaternion} [right] The right hand side quaternion. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - Quaternion.prototype.equals = function (right) { - return Quaternion.equals(this, right); - }; - - /** - * Compares this and the provided quaternion componentwise and returns - * true if they are within the provided epsilon, - * false otherwise. - * - * @param {Quaternion} [right] The right hand side quaternion. - * @param {Number} [epsilon=0] The epsilon to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - Quaternion.prototype.equalsEpsilon = function (right, epsilon) { - return Quaternion.equalsEpsilon(this, right, epsilon); - }; - - /** - * Returns a string representing this quaternion in the format (x, y, z, w). - * - * @returns {String} A string representing this Quaternion. - */ - Quaternion.prototype.toString = function () { - return `(${this.x}, ${this.y}, ${this.z}, ${this.w})`; - }; - - /** - * Finds an item in a sorted array. - * - * @function - * @param {Array} array The sorted array to search. - * @param {*} itemToFind The item to find in the array. - * @param {binarySearchComparator} comparator The function to use to compare the item to - * elements in the array. - * @returns {Number} The index of itemToFind in the array, if it exists. If itemToFind - * does not exist, the return value is a negative number which is the bitwise complement (~) - * of the index before which the itemToFind should be inserted in order to maintain the - * sorted order of the array. - * - * @example - * // Create a comparator function to search through an array of numbers. - * function comparator(a, b) { - * return a - b; - * }; - * const numbers = [0, 2, 4, 6, 8]; - * const index = Cesium.binarySearch(numbers, 6, comparator); // 3 - */ - function binarySearch(array, itemToFind, comparator) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - Check.Check.defined("itemToFind", itemToFind); - Check.Check.defined("comparator", comparator); - //>>includeEnd('debug'); - - let low = 0; - let high = array.length - 1; - let i; - let comparison; - - while (low <= high) { - i = ~~((low + high) / 2); - comparison = comparator(array[i], itemToFind); - if (comparison < 0) { - low = i + 1; - continue; - } - if (comparison > 0) { - high = i - 1; - continue; - } - return i; - } - return ~(high + 1); - } - - /** - * A set of Earth Orientation Parameters (EOP) sampled at a time. - * - * @alias EarthOrientationParametersSample - * @constructor - * - * @param {Number} xPoleWander The pole wander about the X axis, in radians. - * @param {Number} yPoleWander The pole wander about the Y axis, in radians. - * @param {Number} xPoleOffset The offset to the Celestial Intermediate Pole (CIP) about the X axis, in radians. - * @param {Number} yPoleOffset The offset to the Celestial Intermediate Pole (CIP) about the Y axis, in radians. - * @param {Number} ut1MinusUtc The difference in time standards, UT1 - UTC, in seconds. - * - * @private - */ - function EarthOrientationParametersSample( - xPoleWander, - yPoleWander, - xPoleOffset, - yPoleOffset, - ut1MinusUtc - ) { - /** - * The pole wander about the X axis, in radians. - * @type {Number} - */ - this.xPoleWander = xPoleWander; - - /** - * The pole wander about the Y axis, in radians. - * @type {Number} - */ - this.yPoleWander = yPoleWander; - - /** - * The offset to the Celestial Intermediate Pole (CIP) about the X axis, in radians. - * @type {Number} - */ - this.xPoleOffset = xPoleOffset; - - /** - * The offset to the Celestial Intermediate Pole (CIP) about the Y axis, in radians. - * @type {Number} - */ - this.yPoleOffset = yPoleOffset; - - /** - * The difference in time standards, UT1 - UTC, in seconds. - * @type {Number} - */ - this.ut1MinusUtc = ut1MinusUtc; - } - - /** - * Represents a Gregorian date in a more precise format than the JavaScript Date object. - * In addition to submillisecond precision, this object can also represent leap seconds. - * @alias GregorianDate - * @constructor - * - * @param {Number} [year] The year as a whole number. - * @param {Number} [month] The month as a whole number with range [1, 12]. - * @param {Number} [day] The day of the month as a whole number starting at 1. - * @param {Number} [hour] The hour as a whole number with range [0, 23]. - * @param {Number} [minute] The minute of the hour as a whole number with range [0, 59]. - * @param {Number} [second] The second of the minute as a whole number with range [0, 60], with 60 representing a leap second. - * @param {Number} [millisecond] The millisecond of the second as a floating point number with range [0.0, 1000.0). - * @param {Boolean} [isLeapSecond] Whether this time is during a leap second. - * - * @see JulianDate#toGregorianDate - */ - function GregorianDate( - year, - month, - day, - hour, - minute, - second, - millisecond, - isLeapSecond - ) { - /** - * Gets or sets the year as a whole number. - * @type {Number} - */ - this.year = year; - /** - * Gets or sets the month as a whole number with range [1, 12]. - * @type {Number} - */ - this.month = month; - /** - * Gets or sets the day of the month as a whole number starting at 1. - * @type {Number} - */ - this.day = day; - /** - * Gets or sets the hour as a whole number with range [0, 23]. - * @type {Number} - */ - this.hour = hour; - /** - * Gets or sets the minute of the hour as a whole number with range [0, 59]. - * @type {Number} - */ - this.minute = minute; - /** - * Gets or sets the second of the minute as a whole number with range [0, 60], with 60 representing a leap second. - * @type {Number} - */ - this.second = second; - /** - * Gets or sets the millisecond of the second as a floating point number with range [0.0, 1000.0). - * @type {Number} - */ - this.millisecond = millisecond; - /** - * Gets or sets whether this time is during a leap second. - * @type {Boolean} - */ - this.isLeapSecond = isLeapSecond; - } - - /** - * Determines if a given date is a leap year. - * - * @function isLeapYear - * - * @param {Number} year The year to be tested. - * @returns {Boolean} True if year is a leap year. - * - * @example - * const leapYear = Cesium.isLeapYear(2000); // true - */ - function isLeapYear(year) { - //>>includeStart('debug', pragmas.debug); - if (year === null || isNaN(year)) { - throw new Check.DeveloperError("year is required and must be a number."); - } - //>>includeEnd('debug'); - - return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; - } - - /** - * Describes a single leap second, which is constructed from a {@link JulianDate} and a - * numerical offset representing the number of seconds TAI is ahead of the UTC time standard. - * @alias LeapSecond - * @constructor - * - * @param {JulianDate} [date] A Julian date representing the time of the leap second. - * @param {Number} [offset] The cumulative number of seconds that TAI is ahead of UTC at the provided date. - */ - function LeapSecond(date, offset) { - /** - * Gets or sets the date at which this leap second occurs. - * @type {JulianDate} - */ - this.julianDate = date; - - /** - * Gets or sets the cumulative number of seconds between the UTC and TAI time standards at the time - * of this leap second. - * @type {Number} - */ - this.offset = offset; - } - - /** - * Constants for time conversions like those done by {@link JulianDate}. - * - * @namespace TimeConstants - * - * @see JulianDate - * - * @private - */ - const TimeConstants = { - /** - * The number of seconds in one millisecond: 0.001 - * @type {Number} - * @constant - */ - SECONDS_PER_MILLISECOND: 0.001, - - /** - * The number of seconds in one minute: 60. - * @type {Number} - * @constant - */ - SECONDS_PER_MINUTE: 60.0, - - /** - * The number of minutes in one hour: 60. - * @type {Number} - * @constant - */ - MINUTES_PER_HOUR: 60.0, - - /** - * The number of hours in one day: 24. - * @type {Number} - * @constant - */ - HOURS_PER_DAY: 24.0, - - /** - * The number of seconds in one hour: 3600. - * @type {Number} - * @constant - */ - SECONDS_PER_HOUR: 3600.0, - - /** - * The number of minutes in one day: 1440. - * @type {Number} - * @constant - */ - MINUTES_PER_DAY: 1440.0, - - /** - * The number of seconds in one day, ignoring leap seconds: 86400. - * @type {Number} - * @constant - */ - SECONDS_PER_DAY: 86400.0, - - /** - * The number of days in one Julian century: 36525. - * @type {Number} - * @constant - */ - DAYS_PER_JULIAN_CENTURY: 36525.0, - - /** - * One trillionth of a second. - * @type {Number} - * @constant - */ - PICOSECOND: 0.000000001, - - /** - * The number of days to subtract from a Julian date to determine the - * modified Julian date, which gives the number of days since midnight - * on November 17, 1858. - * @type {Number} - * @constant - */ - MODIFIED_JULIAN_DATE_DIFFERENCE: 2400000.5, - }; - var TimeConstants$1 = Object.freeze(TimeConstants); - - /** - * Provides the type of time standards which JulianDate can take as input. - * - * @enum {Number} - * - * @see JulianDate - */ - const TimeStandard = { - /** - * Represents the coordinated Universal Time (UTC) time standard. - * - * UTC is related to TAI according to the relationship - * UTC = TAI - deltaT where deltaT is the number of leap - * seconds which have been introduced as of the time in TAI. - * - * @type {Number} - * @constant - */ - UTC: 0, - - /** - * Represents the International Atomic Time (TAI) time standard. - * TAI is the principal time standard to which the other time standards are related. - * - * @type {Number} - * @constant - */ - TAI: 1, - }; - var TimeStandard$1 = Object.freeze(TimeStandard); - - const gregorianDateScratch = new GregorianDate(); - const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - const daysInLeapFeburary = 29; - - function compareLeapSecondDates$1(leapSecond, dateToFind) { - return JulianDate.compare(leapSecond.julianDate, dateToFind.julianDate); - } - - // we don't really need a leap second instance, anything with a julianDate property will do - const binarySearchScratchLeapSecond = new LeapSecond(); - - function convertUtcToTai(julianDate) { - //Even though julianDate is in UTC, we'll treat it as TAI and - //search the leap second table for it. - binarySearchScratchLeapSecond.julianDate = julianDate; - const leapSeconds = JulianDate.leapSeconds; - let index = binarySearch( - leapSeconds, - binarySearchScratchLeapSecond, - compareLeapSecondDates$1 - ); - - if (index < 0) { - index = ~index; - } - - if (index >= leapSeconds.length) { - index = leapSeconds.length - 1; - } - - let offset = leapSeconds[index].offset; - if (index > 0) { - //Now we have the index of the closest leap second that comes on or after our UTC time. - //However, if the difference between the UTC date being converted and the TAI - //defined leap second is greater than the offset, we are off by one and need to use - //the previous leap second. - const difference = JulianDate.secondsDifference( - leapSeconds[index].julianDate, - julianDate - ); - if (difference > offset) { - index--; - offset = leapSeconds[index].offset; - } - } - - JulianDate.addSeconds(julianDate, offset, julianDate); - } - - function convertTaiToUtc(julianDate, result) { - binarySearchScratchLeapSecond.julianDate = julianDate; - const leapSeconds = JulianDate.leapSeconds; - let index = binarySearch( - leapSeconds, - binarySearchScratchLeapSecond, - compareLeapSecondDates$1 - ); - if (index < 0) { - index = ~index; - } - - //All times before our first leap second get the first offset. - if (index === 0) { - return JulianDate.addSeconds(julianDate, -leapSeconds[0].offset, result); - } - - //All times after our leap second get the last offset. - if (index >= leapSeconds.length) { - return JulianDate.addSeconds( - julianDate, - -leapSeconds[index - 1].offset, - result - ); - } - - //Compute the difference between the found leap second and the time we are converting. - const difference = JulianDate.secondsDifference( - leapSeconds[index].julianDate, - julianDate - ); - - if (difference === 0) { - //The date is in our leap second table. - return JulianDate.addSeconds( - julianDate, - -leapSeconds[index].offset, - result - ); - } - - if (difference <= 1.0) { - //The requested date is during the moment of a leap second, then we cannot convert to UTC - return undefined; - } - - //The time is in between two leap seconds, index is the leap second after the date - //we're converting, so we subtract one to get the correct LeapSecond instance. - return JulianDate.addSeconds( - julianDate, - -leapSeconds[--index].offset, - result - ); - } - - function setComponents(wholeDays, secondsOfDay, julianDate) { - const extraDays = (secondsOfDay / TimeConstants$1.SECONDS_PER_DAY) | 0; - wholeDays += extraDays; - secondsOfDay -= TimeConstants$1.SECONDS_PER_DAY * extraDays; - - if (secondsOfDay < 0) { - wholeDays--; - secondsOfDay += TimeConstants$1.SECONDS_PER_DAY; - } - - julianDate.dayNumber = wholeDays; - julianDate.secondsOfDay = secondsOfDay; - return julianDate; - } - - function computeJulianDateComponents( - year, - month, - day, - hour, - minute, - second, - millisecond - ) { - // Algorithm from page 604 of the Explanatory Supplement to the - // Astronomical Almanac (Seidelmann 1992). - - const a = ((month - 14) / 12) | 0; - const b = year + 4800 + a; - let dayNumber = - (((1461 * b) / 4) | 0) + - (((367 * (month - 2 - 12 * a)) / 12) | 0) - - (((3 * (((b + 100) / 100) | 0)) / 4) | 0) + - day - - 32075; - - // JulianDates are noon-based - hour = hour - 12; - if (hour < 0) { - hour += 24; - } - - const secondsOfDay = - second + - (hour * TimeConstants$1.SECONDS_PER_HOUR + - minute * TimeConstants$1.SECONDS_PER_MINUTE + - millisecond * TimeConstants$1.SECONDS_PER_MILLISECOND); - - if (secondsOfDay >= 43200.0) { - dayNumber -= 1; - } - - return [dayNumber, secondsOfDay]; - } - - //Regular expressions used for ISO8601 date parsing. - //YYYY - const matchCalendarYear = /^(\d{4})$/; - //YYYY-MM (YYYYMM is invalid) - const matchCalendarMonth = /^(\d{4})-(\d{2})$/; - //YYYY-DDD or YYYYDDD - const matchOrdinalDate = /^(\d{4})-?(\d{3})$/; - //YYYY-Www or YYYYWww or YYYY-Www-D or YYYYWwwD - const matchWeekDate = /^(\d{4})-?W(\d{2})-?(\d{1})?$/; - //YYYY-MM-DD or YYYYMMDD - const matchCalendarDate = /^(\d{4})-?(\d{2})-?(\d{2})$/; - // Match utc offset - const utcOffset = /([Z+\-])?(\d{2})?:?(\d{2})?$/; - // Match hours HH or HH.xxxxx - const matchHours = /^(\d{2})(\.\d+)?/.source + utcOffset.source; - // Match hours/minutes HH:MM HHMM.xxxxx - const matchHoursMinutes = /^(\d{2}):?(\d{2})(\.\d+)?/.source + utcOffset.source; - // Match hours/minutes HH:MM:SS HHMMSS.xxxxx - const matchHoursMinutesSeconds = - /^(\d{2}):?(\d{2}):?(\d{2})(\.\d+)?/.source + utcOffset.source; - - const iso8601ErrorMessage = "Invalid ISO 8601 date."; - - /** - * Represents an astronomical Julian date, which is the number of days since noon on January 1, -4712 (4713 BC). - * For increased precision, this class stores the whole number part of the date and the seconds - * part of the date in separate components. In order to be safe for arithmetic and represent - * leap seconds, the date is always stored in the International Atomic Time standard - * {@link TimeStandard.TAI}. - * @alias JulianDate - * @constructor - * - * @param {Number} [julianDayNumber=0.0] The Julian Day Number representing the number of whole days. Fractional days will also be handled correctly. - * @param {Number} [secondsOfDay=0.0] The number of seconds into the current Julian Day Number. Fractional seconds, negative seconds and seconds greater than a day will be handled correctly. - * @param {TimeStandard} [timeStandard=TimeStandard.UTC] The time standard in which the first two parameters are defined. - */ - function JulianDate(julianDayNumber, secondsOfDay, timeStandard) { - /** - * Gets or sets the number of whole days. - * @type {Number} - */ - this.dayNumber = undefined; - - /** - * Gets or sets the number of seconds into the current day. - * @type {Number} - */ - this.secondsOfDay = undefined; - - julianDayNumber = defaultValue.defaultValue(julianDayNumber, 0.0); - secondsOfDay = defaultValue.defaultValue(secondsOfDay, 0.0); - timeStandard = defaultValue.defaultValue(timeStandard, TimeStandard$1.UTC); - - //If julianDayNumber is fractional, make it an integer and add the number of seconds the fraction represented. - const wholeDays = julianDayNumber | 0; - secondsOfDay = - secondsOfDay + - (julianDayNumber - wholeDays) * TimeConstants$1.SECONDS_PER_DAY; - - setComponents(wholeDays, secondsOfDay, this); - - if (timeStandard === TimeStandard$1.UTC) { - convertUtcToTai(this); - } - } - - /** - * Creates a new instance from a GregorianDate. - * - * @param {GregorianDate} date A GregorianDate. - * @param {JulianDate} [result] An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter or a new instance if none was provided. - * - * @exception {DeveloperError} date must be a valid GregorianDate. - */ - JulianDate.fromGregorianDate = function (date, result) { - //>>includeStart('debug', pragmas.debug); - if (!(date instanceof GregorianDate)) { - throw new Check.DeveloperError("date must be a valid GregorianDate."); - } - //>>includeEnd('debug'); - - const components = computeJulianDateComponents( - date.year, - date.month, - date.day, - date.hour, - date.minute, - date.second, - date.millisecond - ); - if (!defaultValue.defined(result)) { - return new JulianDate(components[0], components[1], TimeStandard$1.UTC); - } - setComponents(components[0], components[1], result); - convertUtcToTai(result); - return result; - }; - - /** - * Creates a new instance from a JavaScript Date. - * - * @param {Date} date A JavaScript Date. - * @param {JulianDate} [result] An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter or a new instance if none was provided. - * - * @exception {DeveloperError} date must be a valid JavaScript Date. - */ - JulianDate.fromDate = function (date, result) { - //>>includeStart('debug', pragmas.debug); - if (!(date instanceof Date) || isNaN(date.getTime())) { - throw new Check.DeveloperError("date must be a valid JavaScript Date."); - } - //>>includeEnd('debug'); - - const components = computeJulianDateComponents( - date.getUTCFullYear(), - date.getUTCMonth() + 1, - date.getUTCDate(), - date.getUTCHours(), - date.getUTCMinutes(), - date.getUTCSeconds(), - date.getUTCMilliseconds() - ); - if (!defaultValue.defined(result)) { - return new JulianDate(components[0], components[1], TimeStandard$1.UTC); - } - setComponents(components[0], components[1], result); - convertUtcToTai(result); - return result; - }; - - /** - * Creates a new instance from a from an {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} date. - * This method is superior to Date.parse because it will handle all valid formats defined by the ISO 8601 - * specification, including leap seconds and sub-millisecond times, which discarded by most JavaScript implementations. - * - * @param {String} iso8601String An ISO 8601 date. - * @param {JulianDate} [result] An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter or a new instance if none was provided. - * - * @exception {DeveloperError} Invalid ISO 8601 date. - */ - JulianDate.fromIso8601 = function (iso8601String, result) { - //>>includeStart('debug', pragmas.debug); - if (typeof iso8601String !== "string") { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - //>>includeEnd('debug'); - - //Comma and decimal point both indicate a fractional number according to ISO 8601, - //start out by blanket replacing , with . which is the only valid such symbol in JS. - iso8601String = iso8601String.replace(",", "."); - - //Split the string into its date and time components, denoted by a mandatory T - let tokens = iso8601String.split("T"); - let year; - let month = 1; - let day = 1; - let hour = 0; - let minute = 0; - let second = 0; - let millisecond = 0; - - //Lacking a time is okay, but a missing date is illegal. - const date = tokens[0]; - const time = tokens[1]; - let tmp; - let inLeapYear; - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(date)) { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - - let dashCount; - //>>includeEnd('debug'); - - //First match the date against possible regular expressions. - tokens = date.match(matchCalendarDate); - if (tokens !== null) { - //>>includeStart('debug', pragmas.debug); - dashCount = date.split("-").length - 1; - if (dashCount > 0 && dashCount !== 2) { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - //>>includeEnd('debug'); - year = +tokens[1]; - month = +tokens[2]; - day = +tokens[3]; - } else { - tokens = date.match(matchCalendarMonth); - if (tokens !== null) { - year = +tokens[1]; - month = +tokens[2]; - } else { - tokens = date.match(matchCalendarYear); - if (tokens !== null) { - year = +tokens[1]; - } else { - //Not a year/month/day so it must be an ordinal date. - let dayOfYear; - tokens = date.match(matchOrdinalDate); - if (tokens !== null) { - year = +tokens[1]; - dayOfYear = +tokens[2]; - inLeapYear = isLeapYear(year); - - //This validation is only applicable for this format. - //>>includeStart('debug', pragmas.debug); - if ( - dayOfYear < 1 || - (inLeapYear && dayOfYear > 366) || - (!inLeapYear && dayOfYear > 365) - ) { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - //>>includeEnd('debug') - } else { - tokens = date.match(matchWeekDate); - if (tokens !== null) { - //ISO week date to ordinal date from - //http://en.wikipedia.org/w/index.php?title=ISO_week_date&oldid=474176775 - year = +tokens[1]; - const weekNumber = +tokens[2]; - const dayOfWeek = +tokens[3] || 0; - - //>>includeStart('debug', pragmas.debug); - dashCount = date.split("-").length - 1; - if ( - dashCount > 0 && - ((!defaultValue.defined(tokens[3]) && dashCount !== 1) || - (defaultValue.defined(tokens[3]) && dashCount !== 2)) - ) { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - //>>includeEnd('debug') - - const january4 = new Date(Date.UTC(year, 0, 4)); - dayOfYear = weekNumber * 7 + dayOfWeek - january4.getUTCDay() - 3; - } else { - //None of our regular expressions succeeded in parsing the date properly. - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError(iso8601ErrorMessage); - //>>includeEnd('debug') - } - } - //Split an ordinal date into month/day. - tmp = new Date(Date.UTC(year, 0, 1)); - tmp.setUTCDate(dayOfYear); - month = tmp.getUTCMonth() + 1; - day = tmp.getUTCDate(); - } - } - } - - //Now that we have all of the date components, validate them to make sure nothing is out of range. - inLeapYear = isLeapYear(year); - //>>includeStart('debug', pragmas.debug); - if ( - month < 1 || - month > 12 || - day < 1 || - ((month !== 2 || !inLeapYear) && day > daysInMonth[month - 1]) || - (inLeapYear && month === 2 && day > daysInLeapFeburary) - ) { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - //>>includeEnd('debug') - - //Now move onto the time string, which is much simpler. - //If no time is specified, it is considered the beginning of the day, UTC to match Javascript's implementation. - let offsetIndex; - if (defaultValue.defined(time)) { - tokens = time.match(matchHoursMinutesSeconds); - if (tokens !== null) { - //>>includeStart('debug', pragmas.debug); - dashCount = time.split(":").length - 1; - if (dashCount > 0 && dashCount !== 2 && dashCount !== 3) { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - //>>includeEnd('debug') - - hour = +tokens[1]; - minute = +tokens[2]; - second = +tokens[3]; - millisecond = +(tokens[4] || 0) * 1000.0; - offsetIndex = 5; - } else { - tokens = time.match(matchHoursMinutes); - if (tokens !== null) { - //>>includeStart('debug', pragmas.debug); - dashCount = time.split(":").length - 1; - if (dashCount > 2) { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - //>>includeEnd('debug') - - hour = +tokens[1]; - minute = +tokens[2]; - second = +(tokens[3] || 0) * 60.0; - offsetIndex = 4; - } else { - tokens = time.match(matchHours); - if (tokens !== null) { - hour = +tokens[1]; - minute = +(tokens[2] || 0) * 60.0; - offsetIndex = 3; - } else { - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError(iso8601ErrorMessage); - //>>includeEnd('debug') - } - } - } - - //Validate that all values are in proper range. Minutes and hours have special cases at 60 and 24. - //>>includeStart('debug', pragmas.debug); - if ( - minute >= 60 || - second >= 61 || - hour > 24 || - (hour === 24 && (minute > 0 || second > 0 || millisecond > 0)) - ) { - throw new Check.DeveloperError(iso8601ErrorMessage); - } - //>>includeEnd('debug'); - - //Check the UTC offset value, if no value exists, use local time - //a Z indicates UTC, + or - are offsets. - const offset = tokens[offsetIndex]; - const offsetHours = +tokens[offsetIndex + 1]; - const offsetMinutes = +(tokens[offsetIndex + 2] || 0); - switch (offset) { - case "+": - hour = hour - offsetHours; - minute = minute - offsetMinutes; - break; - case "-": - hour = hour + offsetHours; - minute = minute + offsetMinutes; - break; - case "Z": - break; - default: - minute = - minute + - new Date( - Date.UTC(year, month - 1, day, hour, minute) - ).getTimezoneOffset(); - break; - } - } - - //ISO8601 denotes a leap second by any time having a seconds component of 60 seconds. - //If that's the case, we need to temporarily subtract a second in order to build a UTC date. - //Then we add it back in after converting to TAI. - const isLeapSecond = second === 60; - if (isLeapSecond) { - second--; - } - - //Even if we successfully parsed the string into its components, after applying UTC offset or - //special cases like 24:00:00 denoting midnight, we need to normalize the data appropriately. - - //milliseconds can never be greater than 1000, and seconds can't be above 60, so we start with minutes - while (minute >= 60) { - minute -= 60; - hour++; - } - - while (hour >= 24) { - hour -= 24; - day++; - } - - tmp = inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1]; - while (day > tmp) { - day -= tmp; - month++; - - if (month > 12) { - month -= 12; - year++; - } - - tmp = - inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1]; - } - - //If UTC offset is at the beginning/end of the day, minutes can be negative. - while (minute < 0) { - minute += 60; - hour--; - } - - while (hour < 0) { - hour += 24; - day--; - } - - while (day < 1) { - month--; - if (month < 1) { - month += 12; - year--; - } - - tmp = - inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1]; - day += tmp; - } - - //Now create the JulianDate components from the Gregorian date and actually create our instance. - const components = computeJulianDateComponents( - year, - month, - day, - hour, - minute, - second, - millisecond - ); - - if (!defaultValue.defined(result)) { - result = new JulianDate(components[0], components[1], TimeStandard$1.UTC); - } else { - setComponents(components[0], components[1], result); - convertUtcToTai(result); - } - - //If we were on a leap second, add it back. - if (isLeapSecond) { - JulianDate.addSeconds(result, 1, result); - } - - return result; - }; - - /** - * Creates a new instance that represents the current system time. - * This is equivalent to calling JulianDate.fromDate(new Date());. - * - * @param {JulianDate} [result] An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter or a new instance if none was provided. - */ - JulianDate.now = function (result) { - return JulianDate.fromDate(new Date(), result); - }; - - const toGregorianDateScratch = new JulianDate(0, 0, TimeStandard$1.TAI); - - /** - * Creates a {@link GregorianDate} from the provided instance. - * - * @param {JulianDate} julianDate The date to be converted. - * @param {GregorianDate} [result] An existing instance to use for the result. - * @returns {GregorianDate} The modified result parameter or a new instance if none was provided. - */ - JulianDate.toGregorianDate = function (julianDate, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(julianDate)) { - throw new Check.DeveloperError("julianDate is required."); - } - //>>includeEnd('debug'); - - let isLeapSecond = false; - let thisUtc = convertTaiToUtc(julianDate, toGregorianDateScratch); - if (!defaultValue.defined(thisUtc)) { - //Conversion to UTC will fail if we are during a leap second. - //If that's the case, subtract a second and convert again. - //JavaScript doesn't support leap seconds, so this results in second 59 being repeated twice. - JulianDate.addSeconds(julianDate, -1, toGregorianDateScratch); - thisUtc = convertTaiToUtc(toGregorianDateScratch, toGregorianDateScratch); - isLeapSecond = true; - } - - let julianDayNumber = thisUtc.dayNumber; - const secondsOfDay = thisUtc.secondsOfDay; - - if (secondsOfDay >= 43200.0) { - julianDayNumber += 1; - } - - // Algorithm from page 604 of the Explanatory Supplement to the - // Astronomical Almanac (Seidelmann 1992). - let L = (julianDayNumber + 68569) | 0; - const N = ((4 * L) / 146097) | 0; - L = (L - (((146097 * N + 3) / 4) | 0)) | 0; - const I = ((4000 * (L + 1)) / 1461001) | 0; - L = (L - (((1461 * I) / 4) | 0) + 31) | 0; - const J = ((80 * L) / 2447) | 0; - const day = (L - (((2447 * J) / 80) | 0)) | 0; - L = (J / 11) | 0; - const month = (J + 2 - 12 * L) | 0; - const year = (100 * (N - 49) + I + L) | 0; - - let hour = (secondsOfDay / TimeConstants$1.SECONDS_PER_HOUR) | 0; - let remainingSeconds = secondsOfDay - hour * TimeConstants$1.SECONDS_PER_HOUR; - const minute = (remainingSeconds / TimeConstants$1.SECONDS_PER_MINUTE) | 0; - remainingSeconds = - remainingSeconds - minute * TimeConstants$1.SECONDS_PER_MINUTE; - let second = remainingSeconds | 0; - const millisecond = - (remainingSeconds - second) / TimeConstants$1.SECONDS_PER_MILLISECOND; - - // JulianDates are noon-based - hour += 12; - if (hour > 23) { - hour -= 24; - } - - //If we were on a leap second, add it back. - if (isLeapSecond) { - second += 1; - } - - if (!defaultValue.defined(result)) { - return new GregorianDate( - year, - month, - day, - hour, - minute, - second, - millisecond, - isLeapSecond - ); - } - - result.year = year; - result.month = month; - result.day = day; - result.hour = hour; - result.minute = minute; - result.second = second; - result.millisecond = millisecond; - result.isLeapSecond = isLeapSecond; - return result; - }; - - /** - * Creates a JavaScript Date from the provided instance. - * Since JavaScript dates are only accurate to the nearest millisecond and - * cannot represent a leap second, consider using {@link JulianDate.toGregorianDate} instead. - * If the provided JulianDate is during a leap second, the previous second is used. - * - * @param {JulianDate} julianDate The date to be converted. - * @returns {Date} A new instance representing the provided date. - */ - JulianDate.toDate = function (julianDate) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(julianDate)) { - throw new Check.DeveloperError("julianDate is required."); - } - //>>includeEnd('debug'); - - const gDate = JulianDate.toGregorianDate(julianDate, gregorianDateScratch); - let second = gDate.second; - if (gDate.isLeapSecond) { - second -= 1; - } - return new Date( - Date.UTC( - gDate.year, - gDate.month - 1, - gDate.day, - gDate.hour, - gDate.minute, - second, - gDate.millisecond - ) - ); - }; - - /** - * Creates an ISO8601 representation of the provided date. - * - * @param {JulianDate} julianDate The date to be converted. - * @param {Number} [precision] The number of fractional digits used to represent the seconds component. By default, the most precise representation is used. - * @returns {String} The ISO8601 representation of the provided date. - */ - JulianDate.toIso8601 = function (julianDate, precision) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(julianDate)) { - throw new Check.DeveloperError("julianDate is required."); - } - //>>includeEnd('debug'); - - const gDate = JulianDate.toGregorianDate(julianDate, gregorianDateScratch); - let year = gDate.year; - let month = gDate.month; - let day = gDate.day; - let hour = gDate.hour; - const minute = gDate.minute; - const second = gDate.second; - const millisecond = gDate.millisecond; - - // special case - Iso8601.MAXIMUM_VALUE produces a string which we can't parse unless we adjust. - // 10000-01-01T00:00:00 is the same instant as 9999-12-31T24:00:00 - if ( - year === 10000 && - month === 1 && - day === 1 && - hour === 0 && - minute === 0 && - second === 0 && - millisecond === 0 - ) { - year = 9999; - month = 12; - day = 31; - hour = 24; - } - - let millisecondStr; - - if (!defaultValue.defined(precision) && millisecond !== 0) { - //Forces milliseconds into a number with at least 3 digits to whatever the default toString() precision is. - millisecondStr = (millisecond * 0.01).toString().replace(".", ""); - return `${year.toString().padStart(4, "0")}-${month - .toString() - .padStart(2, "0")}-${day - .toString() - .padStart(2, "0")}T${hour - .toString() - .padStart(2, "0")}:${minute - .toString() - .padStart(2, "0")}:${second - .toString() - .padStart(2, "0")}.${millisecondStr}Z`; - } - - //Precision is either 0 or milliseconds is 0 with undefined precision, in either case, leave off milliseconds entirely - if (!defaultValue.defined(precision) || precision === 0) { - return `${year.toString().padStart(4, "0")}-${month - .toString() - .padStart(2, "0")}-${day - .toString() - .padStart(2, "0")}T${hour - .toString() - .padStart(2, "0")}:${minute - .toString() - .padStart(2, "0")}:${second.toString().padStart(2, "0")}Z`; - } - - //Forces milliseconds into a number with at least 3 digits to whatever the specified precision is. - millisecondStr = (millisecond * 0.01) - .toFixed(precision) - .replace(".", "") - .slice(0, precision); - return `${year.toString().padStart(4, "0")}-${month - .toString() - .padStart(2, "0")}-${day - .toString() - .padStart(2, "0")}T${hour - .toString() - .padStart(2, "0")}:${minute - .toString() - .padStart(2, "0")}:${second - .toString() - .padStart(2, "0")}.${millisecondStr}Z`; - }; - - /** - * Duplicates a JulianDate instance. - * - * @param {JulianDate} julianDate The date to duplicate. - * @param {JulianDate} [result] An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter or a new instance if none was provided. Returns undefined if julianDate is undefined. - */ - JulianDate.clone = function (julianDate, result) { - if (!defaultValue.defined(julianDate)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new JulianDate( - julianDate.dayNumber, - julianDate.secondsOfDay, - TimeStandard$1.TAI - ); - } - result.dayNumber = julianDate.dayNumber; - result.secondsOfDay = julianDate.secondsOfDay; - return result; - }; - - /** - * Compares two instances. - * - * @param {JulianDate} left The first instance. - * @param {JulianDate} right The second instance. - * @returns {Number} A negative value if left is less than right, a positive value if left is greater than right, or zero if left and right are equal. - */ - JulianDate.compare = function (left, right) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(left)) { - throw new Check.DeveloperError("left is required."); - } - if (!defaultValue.defined(right)) { - throw new Check.DeveloperError("right is required."); - } - //>>includeEnd('debug'); - - const julianDayNumberDifference = left.dayNumber - right.dayNumber; - if (julianDayNumberDifference !== 0) { - return julianDayNumberDifference; - } - return left.secondsOfDay - right.secondsOfDay; - }; - - /** - * Compares two instances and returns true if they are equal, false otherwise. - * - * @param {JulianDate} [left] The first instance. - * @param {JulianDate} [right] The second instance. - * @returns {Boolean} true if the dates are equal; otherwise, false. - */ - JulianDate.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.dayNumber === right.dayNumber && - left.secondsOfDay === right.secondsOfDay) - ); - }; - - /** - * Compares two instances and returns true if they are within epsilon seconds of - * each other. That is, in order for the dates to be considered equal (and for - * this function to return true), the absolute value of the difference between them, in - * seconds, must be less than epsilon. - * - * @param {JulianDate} [left] The first instance. - * @param {JulianDate} [right] The second instance. - * @param {Number} [epsilon=0] The maximum number of seconds that should separate the two instances. - * @returns {Boolean} true if the two dates are within epsilon seconds of each other; otherwise false. - */ - JulianDate.equalsEpsilon = function (left, right, epsilon) { - epsilon = defaultValue.defaultValue(epsilon, 0); - - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math.abs(JulianDate.secondsDifference(left, right)) <= epsilon) - ); - }; - - /** - * Computes the total number of whole and fractional days represented by the provided instance. - * - * @param {JulianDate} julianDate The date. - * @returns {Number} The Julian date as single floating point number. - */ - JulianDate.totalDays = function (julianDate) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(julianDate)) { - throw new Check.DeveloperError("julianDate is required."); - } - //>>includeEnd('debug'); - return ( - julianDate.dayNumber + - julianDate.secondsOfDay / TimeConstants$1.SECONDS_PER_DAY - ); - }; - - /** - * Computes the difference in seconds between the provided instance. - * - * @param {JulianDate} left The first instance. - * @param {JulianDate} right The second instance. - * @returns {Number} The difference, in seconds, when subtracting right from left. - */ - JulianDate.secondsDifference = function (left, right) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(left)) { - throw new Check.DeveloperError("left is required."); - } - if (!defaultValue.defined(right)) { - throw new Check.DeveloperError("right is required."); - } - //>>includeEnd('debug'); - - const dayDifference = - (left.dayNumber - right.dayNumber) * TimeConstants$1.SECONDS_PER_DAY; - return dayDifference + (left.secondsOfDay - right.secondsOfDay); - }; - - /** - * Computes the difference in days between the provided instance. - * - * @param {JulianDate} left The first instance. - * @param {JulianDate} right The second instance. - * @returns {Number} The difference, in days, when subtracting right from left. - */ - JulianDate.daysDifference = function (left, right) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(left)) { - throw new Check.DeveloperError("left is required."); - } - if (!defaultValue.defined(right)) { - throw new Check.DeveloperError("right is required."); - } - //>>includeEnd('debug'); - - const dayDifference = left.dayNumber - right.dayNumber; - const secondDifference = - (left.secondsOfDay - right.secondsOfDay) / TimeConstants$1.SECONDS_PER_DAY; - return dayDifference + secondDifference; - }; - - /** - * Computes the number of seconds the provided instance is ahead of UTC. - * - * @param {JulianDate} julianDate The date. - * @returns {Number} The number of seconds the provided instance is ahead of UTC - */ - JulianDate.computeTaiMinusUtc = function (julianDate) { - binarySearchScratchLeapSecond.julianDate = julianDate; - const leapSeconds = JulianDate.leapSeconds; - let index = binarySearch( - leapSeconds, - binarySearchScratchLeapSecond, - compareLeapSecondDates$1 - ); - if (index < 0) { - index = ~index; - --index; - if (index < 0) { - index = 0; - } - } - return leapSeconds[index].offset; - }; - - /** - * Adds the provided number of seconds to the provided date instance. - * - * @param {JulianDate} julianDate The date. - * @param {Number} seconds The number of seconds to add or subtract. - * @param {JulianDate} result An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter. - */ - JulianDate.addSeconds = function (julianDate, seconds, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(julianDate)) { - throw new Check.DeveloperError("julianDate is required."); - } - if (!defaultValue.defined(seconds)) { - throw new Check.DeveloperError("seconds is required."); - } - if (!defaultValue.defined(result)) { - throw new Check.DeveloperError("result is required."); - } - //>>includeEnd('debug'); - - return setComponents( - julianDate.dayNumber, - julianDate.secondsOfDay + seconds, - result - ); - }; - - /** - * Adds the provided number of minutes to the provided date instance. - * - * @param {JulianDate} julianDate The date. - * @param {Number} minutes The number of minutes to add or subtract. - * @param {JulianDate} result An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter. - */ - JulianDate.addMinutes = function (julianDate, minutes, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(julianDate)) { - throw new Check.DeveloperError("julianDate is required."); - } - if (!defaultValue.defined(minutes)) { - throw new Check.DeveloperError("minutes is required."); - } - if (!defaultValue.defined(result)) { - throw new Check.DeveloperError("result is required."); - } - //>>includeEnd('debug'); - - const newSecondsOfDay = - julianDate.secondsOfDay + minutes * TimeConstants$1.SECONDS_PER_MINUTE; - return setComponents(julianDate.dayNumber, newSecondsOfDay, result); - }; - - /** - * Adds the provided number of hours to the provided date instance. - * - * @param {JulianDate} julianDate The date. - * @param {Number} hours The number of hours to add or subtract. - * @param {JulianDate} result An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter. - */ - JulianDate.addHours = function (julianDate, hours, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(julianDate)) { - throw new Check.DeveloperError("julianDate is required."); - } - if (!defaultValue.defined(hours)) { - throw new Check.DeveloperError("hours is required."); - } - if (!defaultValue.defined(result)) { - throw new Check.DeveloperError("result is required."); - } - //>>includeEnd('debug'); - - const newSecondsOfDay = - julianDate.secondsOfDay + hours * TimeConstants$1.SECONDS_PER_HOUR; - return setComponents(julianDate.dayNumber, newSecondsOfDay, result); - }; - - /** - * Adds the provided number of days to the provided date instance. - * - * @param {JulianDate} julianDate The date. - * @param {Number} days The number of days to add or subtract. - * @param {JulianDate} result An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter. - */ - JulianDate.addDays = function (julianDate, days, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(julianDate)) { - throw new Check.DeveloperError("julianDate is required."); - } - if (!defaultValue.defined(days)) { - throw new Check.DeveloperError("days is required."); - } - if (!defaultValue.defined(result)) { - throw new Check.DeveloperError("result is required."); - } - //>>includeEnd('debug'); - - const newJulianDayNumber = julianDate.dayNumber + days; - return setComponents(newJulianDayNumber, julianDate.secondsOfDay, result); - }; - - /** - * Compares the provided instances and returns true if left is earlier than right, false otherwise. - * - * @param {JulianDate} left The first instance. - * @param {JulianDate} right The second instance. - * @returns {Boolean} true if left is earlier than right, false otherwise. - */ - JulianDate.lessThan = function (left, right) { - return JulianDate.compare(left, right) < 0; - }; - - /** - * Compares the provided instances and returns true if left is earlier than or equal to right, false otherwise. - * - * @param {JulianDate} left The first instance. - * @param {JulianDate} right The second instance. - * @returns {Boolean} true if left is earlier than or equal to right, false otherwise. - */ - JulianDate.lessThanOrEquals = function (left, right) { - return JulianDate.compare(left, right) <= 0; - }; - - /** - * Compares the provided instances and returns true if left is later than right, false otherwise. - * - * @param {JulianDate} left The first instance. - * @param {JulianDate} right The second instance. - * @returns {Boolean} true if left is later than right, false otherwise. - */ - JulianDate.greaterThan = function (left, right) { - return JulianDate.compare(left, right) > 0; - }; - - /** - * Compares the provided instances and returns true if left is later than or equal to right, false otherwise. - * - * @param {JulianDate} left The first instance. - * @param {JulianDate} right The second instance. - * @returns {Boolean} true if left is later than or equal to right, false otherwise. - */ - JulianDate.greaterThanOrEquals = function (left, right) { - return JulianDate.compare(left, right) >= 0; - }; - - /** - * Duplicates this instance. - * - * @param {JulianDate} [result] An existing instance to use for the result. - * @returns {JulianDate} The modified result parameter or a new instance if none was provided. - */ - JulianDate.prototype.clone = function (result) { - return JulianDate.clone(this, result); - }; - - /** - * Compares this and the provided instance and returns true if they are equal, false otherwise. - * - * @param {JulianDate} [right] The second instance. - * @returns {Boolean} true if the dates are equal; otherwise, false. - */ - JulianDate.prototype.equals = function (right) { - return JulianDate.equals(this, right); - }; - - /** - * Compares this and the provided instance and returns true if they are within epsilon seconds of - * each other. That is, in order for the dates to be considered equal (and for - * this function to return true), the absolute value of the difference between them, in - * seconds, must be less than epsilon. - * - * @param {JulianDate} [right] The second instance. - * @param {Number} [epsilon=0] The maximum number of seconds that should separate the two instances. - * @returns {Boolean} true if the two dates are within epsilon seconds of each other; otherwise false. - */ - JulianDate.prototype.equalsEpsilon = function (right, epsilon) { - return JulianDate.equalsEpsilon(this, right, epsilon); - }; - - /** - * Creates a string representing this date in ISO8601 format. - * - * @returns {String} A string representing this date in ISO8601 format. - */ - JulianDate.prototype.toString = function () { - return JulianDate.toIso8601(this); - }; - - /** - * Gets or sets the list of leap seconds used throughout Cesium. - * @memberof JulianDate - * @type {LeapSecond[]} - */ - JulianDate.leapSeconds = [ - new LeapSecond(new JulianDate(2441317, 43210.0, TimeStandard$1.TAI), 10), // January 1, 1972 00:00:00 UTC - new LeapSecond(new JulianDate(2441499, 43211.0, TimeStandard$1.TAI), 11), // July 1, 1972 00:00:00 UTC - new LeapSecond(new JulianDate(2441683, 43212.0, TimeStandard$1.TAI), 12), // January 1, 1973 00:00:00 UTC - new LeapSecond(new JulianDate(2442048, 43213.0, TimeStandard$1.TAI), 13), // January 1, 1974 00:00:00 UTC - new LeapSecond(new JulianDate(2442413, 43214.0, TimeStandard$1.TAI), 14), // January 1, 1975 00:00:00 UTC - new LeapSecond(new JulianDate(2442778, 43215.0, TimeStandard$1.TAI), 15), // January 1, 1976 00:00:00 UTC - new LeapSecond(new JulianDate(2443144, 43216.0, TimeStandard$1.TAI), 16), // January 1, 1977 00:00:00 UTC - new LeapSecond(new JulianDate(2443509, 43217.0, TimeStandard$1.TAI), 17), // January 1, 1978 00:00:00 UTC - new LeapSecond(new JulianDate(2443874, 43218.0, TimeStandard$1.TAI), 18), // January 1, 1979 00:00:00 UTC - new LeapSecond(new JulianDate(2444239, 43219.0, TimeStandard$1.TAI), 19), // January 1, 1980 00:00:00 UTC - new LeapSecond(new JulianDate(2444786, 43220.0, TimeStandard$1.TAI), 20), // July 1, 1981 00:00:00 UTC - new LeapSecond(new JulianDate(2445151, 43221.0, TimeStandard$1.TAI), 21), // July 1, 1982 00:00:00 UTC - new LeapSecond(new JulianDate(2445516, 43222.0, TimeStandard$1.TAI), 22), // July 1, 1983 00:00:00 UTC - new LeapSecond(new JulianDate(2446247, 43223.0, TimeStandard$1.TAI), 23), // July 1, 1985 00:00:00 UTC - new LeapSecond(new JulianDate(2447161, 43224.0, TimeStandard$1.TAI), 24), // January 1, 1988 00:00:00 UTC - new LeapSecond(new JulianDate(2447892, 43225.0, TimeStandard$1.TAI), 25), // January 1, 1990 00:00:00 UTC - new LeapSecond(new JulianDate(2448257, 43226.0, TimeStandard$1.TAI), 26), // January 1, 1991 00:00:00 UTC - new LeapSecond(new JulianDate(2448804, 43227.0, TimeStandard$1.TAI), 27), // July 1, 1992 00:00:00 UTC - new LeapSecond(new JulianDate(2449169, 43228.0, TimeStandard$1.TAI), 28), // July 1, 1993 00:00:00 UTC - new LeapSecond(new JulianDate(2449534, 43229.0, TimeStandard$1.TAI), 29), // July 1, 1994 00:00:00 UTC - new LeapSecond(new JulianDate(2450083, 43230.0, TimeStandard$1.TAI), 30), // January 1, 1996 00:00:00 UTC - new LeapSecond(new JulianDate(2450630, 43231.0, TimeStandard$1.TAI), 31), // July 1, 1997 00:00:00 UTC - new LeapSecond(new JulianDate(2451179, 43232.0, TimeStandard$1.TAI), 32), // January 1, 1999 00:00:00 UTC - new LeapSecond(new JulianDate(2453736, 43233.0, TimeStandard$1.TAI), 33), // January 1, 2006 00:00:00 UTC - new LeapSecond(new JulianDate(2454832, 43234.0, TimeStandard$1.TAI), 34), // January 1, 2009 00:00:00 UTC - new LeapSecond(new JulianDate(2456109, 43235.0, TimeStandard$1.TAI), 35), // July 1, 2012 00:00:00 UTC - new LeapSecond(new JulianDate(2457204, 43236.0, TimeStandard$1.TAI), 36), // July 1, 2015 00:00:00 UTC - new LeapSecond(new JulianDate(2457754, 43237.0, TimeStandard$1.TAI), 37), // January 1, 2017 00:00:00 UTC - ]; - - var URI = {exports: {}}; - - var punycode = {exports: {}}; - - /*! https://mths.be/punycode v1.4.0 by @mathias */ - - var hasRequiredPunycode; - - function requirePunycode () { - if (hasRequiredPunycode) return punycode.exports; - hasRequiredPunycode = 1; - (function (module, exports) { - (function(root) { - - /** Detect free variables */ - var freeExports = exports && - !exports.nodeType && exports; - var freeModule = module && - !module.nodeType && module; - var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal; - if ( - freeGlobal.global === freeGlobal || - freeGlobal.window === freeGlobal || - freeGlobal.self === freeGlobal - ) { - root = freeGlobal; - } - - /** - * The `punycode` object. - * @name punycode - * @type Object - */ - var punycode, - - /** Highest positive signed 32-bit float value */ - maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1 - - /** Bootstring parameters */ - base = 36, - tMin = 1, - tMax = 26, - skew = 38, - damp = 700, - initialBias = 72, - initialN = 128, // 0x80 - delimiter = '-', // '\x2D' - - /** Regular expressions */ - regexPunycode = /^xn--/, - regexNonASCII = /[^\x20-\x7E]/, // unprintable ASCII chars + non-ASCII chars - regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, // RFC 3490 separators - - /** Error messages */ - errors = { - 'overflow': 'Overflow: input needs wider integers to process', - 'not-basic': 'Illegal input >= 0x80 (not a basic code point)', - 'invalid-input': 'Invalid input' - }, - - /** Convenience shortcuts */ - baseMinusTMin = base - tMin, - floor = Math.floor, - stringFromCharCode = String.fromCharCode, - - /** Temporary variable */ - key; - - /*--------------------------------------------------------------------------*/ - - /** - * A generic error utility function. - * @private - * @param {String} type The error type. - * @returns {Error} Throws a `RangeError` with the applicable error message. - */ - function error(type) { - throw new RangeError(errors[type]); - } - - /** - * A generic `Array#map` utility function. - * @private - * @param {Array} array The array to iterate over. - * @param {Function} callback The function that gets called for every array - * item. - * @returns {Array} A new array of values returned by the callback function. - */ - function map(array, fn) { - var length = array.length; - var result = []; - while (length--) { - result[length] = fn(array[length]); - } - return result; - } - - /** - * A simple `Array#map`-like wrapper to work with domain name strings or email - * addresses. - * @private - * @param {String} domain The domain name or email address. - * @param {Function} callback The function that gets called for every - * character. - * @returns {Array} A new string of characters returned by the callback - * function. - */ - function mapDomain(string, fn) { - var parts = string.split('@'); - var result = ''; - if (parts.length > 1) { - // In email addresses, only the domain name should be punycoded. Leave - // the local part (i.e. everything up to `@`) intact. - result = parts[0] + '@'; - string = parts[1]; - } - // Avoid `split(regex)` for IE8 compatibility. See #17. - string = string.replace(regexSeparators, '\x2E'); - var labels = string.split('.'); - var encoded = map(labels, fn).join('.'); - return result + encoded; - } - - /** - * Creates an array containing the numeric code points of each Unicode - * character in the string. While JavaScript uses UCS-2 internally, - * this function will convert a pair of surrogate halves (each of which - * UCS-2 exposes as separate characters) into a single code point, - * matching UTF-16. - * @see `punycode.ucs2.encode` - * @see - * @memberOf punycode.ucs2 - * @name decode - * @param {String} string The Unicode input string (UCS-2). - * @returns {Array} The new array of code points. - */ - function ucs2decode(string) { - var output = [], - counter = 0, - length = string.length, - value, - extra; - while (counter < length) { - value = string.charCodeAt(counter++); - if (value >= 0xD800 && value <= 0xDBFF && counter < length) { - // high surrogate, and there is a next character - extra = string.charCodeAt(counter++); - if ((extra & 0xFC00) == 0xDC00) { // low surrogate - output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000); - } else { - // unmatched surrogate; only append this code unit, in case the next - // code unit is the high surrogate of a surrogate pair - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - - /** - * Creates a string based on an array of numeric code points. - * @see `punycode.ucs2.decode` - * @memberOf punycode.ucs2 - * @name encode - * @param {Array} codePoints The array of numeric code points. - * @returns {String} The new Unicode string (UCS-2). - */ - function ucs2encode(array) { - return map(array, function(value) { - var output = ''; - if (value > 0xFFFF) { - value -= 0x10000; - output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800); - value = 0xDC00 | value & 0x3FF; - } - output += stringFromCharCode(value); - return output; - }).join(''); - } - - /** - * Converts a basic code point into a digit/integer. - * @see `digitToBasic()` - * @private - * @param {Number} codePoint The basic numeric code point value. - * @returns {Number} The numeric value of a basic code point (for use in - * representing integers) in the range `0` to `base - 1`, or `base` if - * the code point does not represent a value. - */ - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - - /** - * Converts a digit/integer into a basic code point. - * @see `basicToDigit()` - * @private - * @param {Number} digit The numeric value of a basic code point. - * @returns {Number} The basic code point whose value (when used for - * representing integers) is `digit`, which needs to be in the range - * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is - * used; else, the lowercase form is used. The behavior is undefined - * if `flag` is non-zero and `digit` has no uppercase form. - */ - function digitToBasic(digit, flag) { - // 0..25 map to ASCII a..z or A..Z - // 26..35 map to ASCII 0..9 - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - - /** - * Bias adaptation function as per section 3.4 of RFC 3492. - * https://tools.ietf.org/html/rfc3492#section-3.4 - * @private - */ - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - - /** - * Converts a Punycode string of ASCII-only symbols to a string of Unicode - * symbols. - * @memberOf punycode - * @param {String} input The Punycode string of ASCII-only symbols. - * @returns {String} The resulting string of Unicode symbols. - */ - function decode(input) { - // Don't use UCS-2 - var output = [], - inputLength = input.length, - out, - i = 0, - n = initialN, - bias = initialBias, - basic, - j, - index, - oldi, - w, - k, - digit, - t, - /** Cached calculation results */ - baseMinusT; - - // Handle the basic code points: let `basic` be the number of input code - // points before the last delimiter, or `0` if there is none, then copy - // the first basic code points to the output. - - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - - for (j = 0; j < basic; ++j) { - // if it's not a basic code point - if (input.charCodeAt(j) >= 0x80) { - error('not-basic'); - } - output.push(input.charCodeAt(j)); - } - - // Main decoding loop: start just after the last delimiter if any basic code - // points were copied; start at the beginning otherwise. - - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) { - - // `index` is the index of the next character to be consumed. - // Decode a generalized variable-length integer into `delta`, - // which gets added to `i`. The overflow checking is easier - // if we increase `i` as we go, then subtract off its starting - // value at the end to obtain `delta`. - for (oldi = i, w = 1, k = base; /* no condition */; k += base) { - - if (index >= inputLength) { - error('invalid-input'); - } - - digit = basicToDigit(input.charCodeAt(index++)); - - if (digit >= base || digit > floor((maxInt - i) / w)) { - error('overflow'); - } - - i += digit * w; - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - - if (digit < t) { - break; - } - - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error('overflow'); - } - - w *= baseMinusT; - - } - - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - - // `i` was supposed to wrap around from `out` to `0`, - // incrementing `n` each time, so we'll fix that now: - if (floor(i / out) > maxInt - n) { - error('overflow'); - } - - n += floor(i / out); - i %= out; - - // Insert `n` at position `i` of the output - output.splice(i++, 0, n); - - } - - return ucs2encode(output); - } - - /** - * Converts a string of Unicode symbols (e.g. a domain name label) to a - * Punycode string of ASCII-only symbols. - * @memberOf punycode - * @param {String} input The string of Unicode symbols. - * @returns {String} The resulting Punycode string of ASCII-only symbols. - */ - function encode(input) { - var n, - delta, - handledCPCount, - basicLength, - bias, - j, - m, - q, - k, - t, - currentValue, - output = [], - /** `inputLength` will hold the number of code points in `input`. */ - inputLength, - /** Cached calculation results */ - handledCPCountPlusOne, - baseMinusT, - qMinusT; - - // Convert the input in UCS-2 to Unicode - input = ucs2decode(input); - - // Cache the length - inputLength = input.length; - - // Initialize the state - n = initialN; - delta = 0; - bias = initialBias; - - // Handle the basic code points - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 0x80) { - output.push(stringFromCharCode(currentValue)); - } - } - - handledCPCount = basicLength = output.length; - - // `handledCPCount` is the number of code points that have been handled; - // `basicLength` is the number of basic code points. - - // Finish the basic string - if it is not empty - with a delimiter - if (basicLength) { - output.push(delimiter); - } - - // Main encoding loop: - while (handledCPCount < inputLength) { - - // All non-basic code points < n have been handled already. Find the next - // larger one: - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - - // Increase `delta` enough to advance the decoder's state to , - // but guard against overflow - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error('overflow'); - } - - delta += (m - n) * handledCPCountPlusOne; - n = m; - - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - - if (currentValue < n && ++delta > maxInt) { - error('overflow'); - } - - if (currentValue == n) { - // Represent delta as a generalized variable-length integer - for (q = delta, k = base; /* no condition */; k += base) { - t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias); - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - - ++delta; - ++n; - - } - return output.join(''); - } - - /** - * Converts a Punycode string representing a domain name or an email address - * to Unicode. Only the Punycoded parts of the input will be converted, i.e. - * it doesn't matter if you call it on a string that has already been - * converted to Unicode. - * @memberOf punycode - * @param {String} input The Punycoded domain name or email address to - * convert to Unicode. - * @returns {String} The Unicode representation of the given Punycode - * string. - */ - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) - ? decode(string.slice(4).toLowerCase()) - : string; - }); - } - - /** - * Converts a Unicode string representing a domain name or an email address to - * Punycode. Only the non-ASCII parts of the domain name will be converted, - * i.e. it doesn't matter if you call it with a domain that's already in - * ASCII. - * @memberOf punycode - * @param {String} input The domain name or email address to convert, as a - * Unicode string. - * @returns {String} The Punycode representation of the given domain name or - * email address. - */ - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) - ? 'xn--' + encode(string) - : string; - }); - } - - /*--------------------------------------------------------------------------*/ - - /** Define the public API */ - punycode = { - /** - * A string representing the current Punycode.js version number. - * @memberOf punycode - * @type String - */ - 'version': '1.3.2', - /** - * An object of methods to convert from JavaScript's internal character - * representation (UCS-2) to Unicode code points, and back. - * @see - * @memberOf punycode - * @type Object - */ - 'ucs2': { - 'decode': ucs2decode, - 'encode': ucs2encode - }, - 'decode': decode, - 'encode': encode, - 'toASCII': toASCII, - 'toUnicode': toUnicode - }; - - /** Expose `punycode` */ - // Some AMD build optimizers, like r.js, check for specific condition patterns - // like the following: - if (freeExports && freeModule) { - if (module.exports == freeExports) { - // in Node.js, io.js, or RingoJS v0.8.0+ - freeModule.exports = punycode; - } else { - // in Narwhal or RingoJS v0.7.0- - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - // in Rhino or a web browser - root.punycode = punycode; - } - - }(commonjsGlobal)); - } (punycode, punycode.exports)); - return punycode.exports; - } - - var IPv6 = {exports: {}}; - - /*! - * URI.js - Mutating URLs - * IPv6 Support - * - * Version: 1.19.11 - * - * Author: Rodney Rehm - * Web: http://medialize.github.io/URI.js/ - * - * Licensed under - * MIT License http://www.opensource.org/licenses/mit-license - * - */ - - var hasRequiredIPv6; - - function requireIPv6 () { - if (hasRequiredIPv6) return IPv6.exports; - hasRequiredIPv6 = 1; - (function (module) { - (function (root, factory) { - // https://github.com/umdjs/umd/blob/master/returnExports.js - if (module.exports) { - // Node - module.exports = factory(); - } else { - // Browser globals (root is window) - root.IPv6 = factory(root); - } - }(commonjsGlobal, function (root) { - - /* - var _in = "fe80:0000:0000:0000:0204:61ff:fe9d:f156"; - var _out = IPv6.best(_in); - var _expected = "fe80::204:61ff:fe9d:f156"; - - console.log(_in, _out, _expected, _out === _expected); - */ - - // save current IPv6 variable, if any - var _IPv6 = root && root.IPv6; - - function bestPresentation(address) { - // based on: - // Javascript to test an IPv6 address for proper format, and to - // present the "best text representation" according to IETF Draft RFC at - // http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04 - // 8 Feb 2010 Rich Brown, Dartware, LLC - // Please feel free to use this code as long as you provide a link to - // http://www.intermapper.com - // http://intermapper.com/support/tools/IPV6-Validator.aspx - // http://download.dartware.com/thirdparty/ipv6validator.js - - var _address = address.toLowerCase(); - var segments = _address.split(':'); - var length = segments.length; - var total = 8; - - // trim colons (:: or ::a:b:c… or …a:b:c::) - if (segments[0] === '' && segments[1] === '' && segments[2] === '') { - // must have been :: - // remove first two items - segments.shift(); - segments.shift(); - } else if (segments[0] === '' && segments[1] === '') { - // must have been ::xxxx - // remove the first item - segments.shift(); - } else if (segments[length - 1] === '' && segments[length - 2] === '') { - // must have been xxxx:: - segments.pop(); - } - - length = segments.length; - - // adjust total segments for IPv4 trailer - if (segments[length - 1].indexOf('.') !== -1) { - // found a "." which means IPv4 - total = 7; - } - - // fill empty segments them with "0000" - var pos; - for (pos = 0; pos < length; pos++) { - if (segments[pos] === '') { - break; - } - } - - if (pos < total) { - segments.splice(pos, 1, '0000'); - while (segments.length < total) { - segments.splice(pos, 0, '0000'); - } - } - - // strip leading zeros - var _segments; - for (var i = 0; i < total; i++) { - _segments = segments[i].split(''); - for (var j = 0; j < 3 ; j++) { - if (_segments[0] === '0' && _segments.length > 1) { - _segments.splice(0,1); - } else { - break; - } - } - - segments[i] = _segments.join(''); - } - - // find longest sequence of zeroes and coalesce them into one segment - var best = -1; - var _best = 0; - var _current = 0; - var current = -1; - var inzeroes = false; - // i; already declared - - for (i = 0; i < total; i++) { - if (inzeroes) { - if (segments[i] === '0') { - _current += 1; - } else { - inzeroes = false; - if (_current > _best) { - best = current; - _best = _current; - } - } - } else { - if (segments[i] === '0') { - inzeroes = true; - current = i; - _current = 1; - } - } - } - - if (_current > _best) { - best = current; - _best = _current; - } - - if (_best > 1) { - segments.splice(best, _best, ''); - } - - length = segments.length; - - // assemble remaining segments - var result = ''; - if (segments[0] === '') { - result = ':'; - } - - for (i = 0; i < length; i++) { - result += segments[i]; - if (i === length - 1) { - break; - } - - result += ':'; - } - - if (segments[length - 1] === '') { - result += ':'; - } - - return result; - } - - function noConflict() { - /*jshint validthis: true */ - if (root.IPv6 === this) { - root.IPv6 = _IPv6; - } - - return this; - } - - return { - best: bestPresentation, - noConflict: noConflict - }; - })); - } (IPv6)); - return IPv6.exports; - } - - var SecondLevelDomains = {exports: {}}; - - /*! - * URI.js - Mutating URLs - * Second Level Domain (SLD) Support - * - * Version: 1.19.11 - * - * Author: Rodney Rehm - * Web: http://medialize.github.io/URI.js/ - * - * Licensed under - * MIT License http://www.opensource.org/licenses/mit-license - * - */ - - var hasRequiredSecondLevelDomains; - - function requireSecondLevelDomains () { - if (hasRequiredSecondLevelDomains) return SecondLevelDomains.exports; - hasRequiredSecondLevelDomains = 1; - (function (module) { - (function (root, factory) { - // https://github.com/umdjs/umd/blob/master/returnExports.js - if (module.exports) { - // Node - module.exports = factory(); - } else { - // Browser globals (root is window) - root.SecondLevelDomains = factory(root); - } - }(commonjsGlobal, function (root) { - - // save current SecondLevelDomains variable, if any - var _SecondLevelDomains = root && root.SecondLevelDomains; - - var SLD = { - // list of known Second Level Domains - // converted list of SLDs from https://github.com/gavingmiller/second-level-domains - // ---- - // publicsuffix.org is more current and actually used by a couple of browsers internally. - // downside is it also contains domains like "dyndns.org" - which is fine for the security - // issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js - // ---- - list: { - 'ac':' com gov mil net org ', - 'ae':' ac co gov mil name net org pro sch ', - 'af':' com edu gov net org ', - 'al':' com edu gov mil net org ', - 'ao':' co ed gv it og pb ', - 'ar':' com edu gob gov int mil net org tur ', - 'at':' ac co gv or ', - 'au':' asn com csiro edu gov id net org ', - 'ba':' co com edu gov mil net org rs unbi unmo unsa untz unze ', - 'bb':' biz co com edu gov info net org store tv ', - 'bh':' biz cc com edu gov info net org ', - 'bn':' com edu gov net org ', - 'bo':' com edu gob gov int mil net org tv ', - 'br':' adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ', - 'bs':' com edu gov net org ', - 'bz':' du et om ov rg ', - 'ca':' ab bc mb nb nf nl ns nt nu on pe qc sk yk ', - 'ck':' biz co edu gen gov info net org ', - 'cn':' ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ', - 'co':' com edu gov mil net nom org ', - 'cr':' ac c co ed fi go or sa ', - 'cy':' ac biz com ekloges gov ltd name net org parliament press pro tm ', - 'do':' art com edu gob gov mil net org sld web ', - 'dz':' art asso com edu gov net org pol ', - 'ec':' com edu fin gov info med mil net org pro ', - 'eg':' com edu eun gov mil name net org sci ', - 'er':' com edu gov ind mil net org rochest w ', - 'es':' com edu gob nom org ', - 'et':' biz com edu gov info name net org ', - 'fj':' ac biz com info mil name net org pro ', - 'fk':' ac co gov net nom org ', - 'fr':' asso com f gouv nom prd presse tm ', - 'gg':' co net org ', - 'gh':' com edu gov mil org ', - 'gn':' ac com gov net org ', - 'gr':' com edu gov mil net org ', - 'gt':' com edu gob ind mil net org ', - 'gu':' com edu gov net org ', - 'hk':' com edu gov idv net org ', - 'hu':' 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ', - 'id':' ac co go mil net or sch web ', - 'il':' ac co gov idf k12 muni net org ', - 'in':' ac co edu ernet firm gen gov i ind mil net nic org res ', - 'iq':' com edu gov i mil net org ', - 'ir':' ac co dnssec gov i id net org sch ', - 'it':' edu gov ', - 'je':' co net org ', - 'jo':' com edu gov mil name net org sch ', - 'jp':' ac ad co ed go gr lg ne or ', - 'ke':' ac co go info me mobi ne or sc ', - 'kh':' com edu gov mil net org per ', - 'ki':' biz com de edu gov info mob net org tel ', - 'km':' asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ', - 'kn':' edu gov net org ', - 'kr':' ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ', - 'kw':' com edu gov net org ', - 'ky':' com edu gov net org ', - 'kz':' com edu gov mil net org ', - 'lb':' com edu gov net org ', - 'lk':' assn com edu gov grp hotel int ltd net ngo org sch soc web ', - 'lr':' com edu gov net org ', - 'lv':' asn com conf edu gov id mil net org ', - 'ly':' com edu gov id med net org plc sch ', - 'ma':' ac co gov m net org press ', - 'mc':' asso tm ', - 'me':' ac co edu gov its net org priv ', - 'mg':' com edu gov mil nom org prd tm ', - 'mk':' com edu gov inf name net org pro ', - 'ml':' com edu gov net org presse ', - 'mn':' edu gov org ', - 'mo':' com edu gov net org ', - 'mt':' com edu gov net org ', - 'mv':' aero biz com coop edu gov info int mil museum name net org pro ', - 'mw':' ac co com coop edu gov int museum net org ', - 'mx':' com edu gob net org ', - 'my':' com edu gov mil name net org sch ', - 'nf':' arts com firm info net other per rec store web ', - 'ng':' biz com edu gov mil mobi name net org sch ', - 'ni':' ac co com edu gob mil net nom org ', - 'np':' com edu gov mil net org ', - 'nr':' biz com edu gov info net org ', - 'om':' ac biz co com edu gov med mil museum net org pro sch ', - 'pe':' com edu gob mil net nom org sld ', - 'ph':' com edu gov i mil net ngo org ', - 'pk':' biz com edu fam gob gok gon gop gos gov net org web ', - 'pl':' art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ', - 'pr':' ac biz com edu est gov info isla name net org pro prof ', - 'ps':' com edu gov net org plo sec ', - 'pw':' belau co ed go ne or ', - 'ro':' arts com firm info nom nt org rec store tm www ', - 'rs':' ac co edu gov in org ', - 'sb':' com edu gov net org ', - 'sc':' com edu gov net org ', - 'sh':' co com edu gov net nom org ', - 'sl':' com edu gov net org ', - 'st':' co com consulado edu embaixada gov mil net org principe saotome store ', - 'sv':' com edu gob org red ', - 'sz':' ac co org ', - 'tr':' av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ', - 'tt':' aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ', - 'tw':' club com ebiz edu game gov idv mil net org ', - 'mu':' ac co com gov net or org ', - 'mz':' ac co edu gov org ', - 'na':' co com ', - 'nz':' ac co cri geek gen govt health iwi maori mil net org parliament school ', - 'pa':' abo ac com edu gob ing med net nom org sld ', - 'pt':' com edu gov int net nome org publ ', - 'py':' com edu gov mil net org ', - 'qa':' com edu gov mil net org ', - 're':' asso com nom ', - 'ru':' ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ', - 'rw':' ac co com edu gouv gov int mil net ', - 'sa':' com edu gov med net org pub sch ', - 'sd':' com edu gov info med net org tv ', - 'se':' a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ', - 'sg':' com edu gov idn net org per ', - 'sn':' art com edu gouv org perso univ ', - 'sy':' com edu gov mil net news org ', - 'th':' ac co go in mi net or ', - 'tj':' ac biz co com edu go gov info int mil name net nic org test web ', - 'tn':' agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ', - 'tz':' ac co go ne or ', - 'ua':' biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ', - 'ug':' ac co go ne or org sc ', - 'uk':' ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ', - 'us':' dni fed isa kids nsn ', - 'uy':' com edu gub mil net org ', - 've':' co com edu gob info mil net org web ', - 'vi':' co com k12 net org ', - 'vn':' ac biz com edu gov health info int name net org pro ', - 'ye':' co com gov ltd me net org plc ', - 'yu':' ac co edu gov org ', - 'za':' ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ', - 'zm':' ac co com edu gov net org sch ', - // https://en.wikipedia.org/wiki/CentralNic#Second-level_domains - 'com': 'ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ', - 'net': 'gb jp se uk ', - 'org': 'ae', - 'de': 'com ' - }, - // gorhill 2013-10-25: Using indexOf() instead Regexp(). Significant boost - // in both performance and memory footprint. No initialization required. - // http://jsperf.com/uri-js-sld-regex-vs-binary-search/4 - // Following methods use lastIndexOf() rather than array.split() in order - // to avoid any memory allocations. - has: function(domain) { - var tldOffset = domain.lastIndexOf('.'); - if (tldOffset <= 0 || tldOffset >= (domain.length-1)) { - return false; - } - var sldOffset = domain.lastIndexOf('.', tldOffset-1); - if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) { - return false; - } - var sldList = SLD.list[domain.slice(tldOffset+1)]; - if (!sldList) { - return false; - } - return sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') >= 0; - }, - is: function(domain) { - var tldOffset = domain.lastIndexOf('.'); - if (tldOffset <= 0 || tldOffset >= (domain.length-1)) { - return false; - } - var sldOffset = domain.lastIndexOf('.', tldOffset-1); - if (sldOffset >= 0) { - return false; - } - var sldList = SLD.list[domain.slice(tldOffset+1)]; - if (!sldList) { - return false; - } - return sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0; - }, - get: function(domain) { - var tldOffset = domain.lastIndexOf('.'); - if (tldOffset <= 0 || tldOffset >= (domain.length-1)) { - return null; - } - var sldOffset = domain.lastIndexOf('.', tldOffset-1); - if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) { - return null; - } - var sldList = SLD.list[domain.slice(tldOffset+1)]; - if (!sldList) { - return null; - } - if (sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') < 0) { - return null; - } - return domain.slice(sldOffset+1); - }, - noConflict: function(){ - if (root.SecondLevelDomains === this) { - root.SecondLevelDomains = _SecondLevelDomains; - } - return this; - } - }; - - return SLD; - })); - } (SecondLevelDomains)); - return SecondLevelDomains.exports; - } - - /*! - * URI.js - Mutating URLs - * - * Version: 1.19.11 - * - * Author: Rodney Rehm - * Web: http://medialize.github.io/URI.js/ - * - * Licensed under - * MIT License http://www.opensource.org/licenses/mit-license - * - */ - - (function (module) { - (function (root, factory) { - // https://github.com/umdjs/umd/blob/master/returnExports.js - if (module.exports) { - // Node - module.exports = factory(requirePunycode(), requireIPv6(), requireSecondLevelDomains()); - } else { - // Browser globals (root is window) - root.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root); - } - }(commonjsGlobal, function (punycode, IPv6, SLD, root) { - /*global location, escape, unescape */ - // FIXME: v2.0.0 renamce non-camelCase properties to uppercase - /*jshint camelcase: false */ - - // save current URI variable, if any - var _URI = root && root.URI; - - function URI(url, base) { - var _urlSupplied = arguments.length >= 1; - var _baseSupplied = arguments.length >= 2; - - // Allow instantiation without the 'new' keyword - if (!(this instanceof URI)) { - if (_urlSupplied) { - if (_baseSupplied) { - return new URI(url, base); - } - - return new URI(url); - } - - return new URI(); - } - - if (url === undefined) { - if (_urlSupplied) { - throw new TypeError('undefined is not a valid argument for URI'); - } - - if (typeof location !== 'undefined') { - url = location.href + ''; - } else { - url = ''; - } - } - - if (url === null) { - if (_urlSupplied) { - throw new TypeError('null is not a valid argument for URI'); - } - } - - this.href(url); - - // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor - if (base !== undefined) { - return this.absoluteTo(base); - } - - return this; - } - - function isInteger(value) { - return /^[0-9]+$/.test(value); - } - - URI.version = '1.19.11'; - - var p = URI.prototype; - var hasOwn = Object.prototype.hasOwnProperty; - - function escapeRegEx(string) { - // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963 - return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); - } - - function getType(value) { - // IE8 doesn't return [Object Undefined] but [Object Object] for undefined value - if (value === undefined) { - return 'Undefined'; - } - - return String(Object.prototype.toString.call(value)).slice(8, -1); - } - - function isArray(obj) { - return getType(obj) === 'Array'; - } - - function filterArrayValues(data, value) { - var lookup = {}; - var i, length; - - if (getType(value) === 'RegExp') { - lookup = null; - } else if (isArray(value)) { - for (i = 0, length = value.length; i < length; i++) { - lookup[value[i]] = true; - } - } else { - lookup[value] = true; - } - - for (i = 0, length = data.length; i < length; i++) { - /*jshint laxbreak: true */ - var _match = lookup && lookup[data[i]] !== undefined - || !lookup && value.test(data[i]); - /*jshint laxbreak: false */ - if (_match) { - data.splice(i, 1); - length--; - i--; - } - } - - return data; - } - - function arrayContains(list, value) { - var i, length; - - // value may be string, number, array, regexp - if (isArray(value)) { - // Note: this can be optimized to O(n) (instead of current O(m * n)) - for (i = 0, length = value.length; i < length; i++) { - if (!arrayContains(list, value[i])) { - return false; - } - } - - return true; - } - - var _type = getType(value); - for (i = 0, length = list.length; i < length; i++) { - if (_type === 'RegExp') { - if (typeof list[i] === 'string' && list[i].match(value)) { - return true; - } - } else if (list[i] === value) { - return true; - } - } - - return false; - } - - function arraysEqual(one, two) { - if (!isArray(one) || !isArray(two)) { - return false; - } - - // arrays can't be equal if they have different amount of content - if (one.length !== two.length) { - return false; - } - - one.sort(); - two.sort(); - - for (var i = 0, l = one.length; i < l; i++) { - if (one[i] !== two[i]) { - return false; - } - } - - return true; - } - - function trimSlashes(text) { - var trim_expression = /^\/+|\/+$/g; - return text.replace(trim_expression, ''); - } - - URI._parts = function() { - return { - protocol: null, - username: null, - password: null, - hostname: null, - urn: null, - port: null, - path: null, - query: null, - fragment: null, - // state - preventInvalidHostname: URI.preventInvalidHostname, - duplicateQueryParameters: URI.duplicateQueryParameters, - escapeQuerySpace: URI.escapeQuerySpace - }; - }; - // state: throw on invalid hostname - // see https://github.com/medialize/URI.js/pull/345 - // and https://github.com/medialize/URI.js/issues/354 - URI.preventInvalidHostname = false; - // state: allow duplicate query parameters (a=1&a=1) - URI.duplicateQueryParameters = false; - // state: replaces + with %20 (space in query strings) - URI.escapeQuerySpace = true; - // static properties - URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i; - URI.idn_expression = /[^a-z0-9\._-]/i; - URI.punycode_expression = /(xn--)/i; - // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care? - URI.ip4_expression = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; - // credits to Rich Brown - // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096 - // specification: http://www.ietf.org/rfc/rfc4291.txt - URI.ip6_expression = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; - // expression used is "gruber revised" (@gruber v2) determined to be the - // best solution in a regex-golf we did a couple of ages ago at - // * http://mathiasbynens.be/demo/url-regex - // * http://rodneyrehm.de/t/url-regex.html - URI.find_uri_expression = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig; - URI.findUri = { - // valid "scheme://" or "www." - start: /\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi, - // everything up to the next whitespace - end: /[\s\r\n]|$/, - // trim trailing punctuation captured by end RegExp - trim: /[`!()\[\]{};:'".,<>?«»“”„‘’]+$/, - // balanced parens inclusion (), [], {}, <> - parens: /(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g, - }; - URI.leading_whitespace_expression = /^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/; - // https://infra.spec.whatwg.org/#ascii-tab-or-newline - URI.ascii_tab_whitespace = /[\u0009\u000A\u000D]+/g; - // http://www.iana.org/assignments/uri-schemes.html - // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports - URI.defaultPorts = { - http: '80', - https: '443', - ftp: '21', - gopher: '70', - ws: '80', - wss: '443' - }; - // list of protocols which always require a hostname - URI.hostProtocols = [ - 'http', - 'https' - ]; - - // allowed hostname characters according to RFC 3986 - // ALPHA DIGIT "-" "." "_" "~" "!" "$" "&" "'" "(" ")" "*" "+" "," ";" "=" %encoded - // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . - _ - URI.invalid_hostname_characters = /[^a-zA-Z0-9\.\-:_]/; - // map DOM Elements to their URI attribute - URI.domAttributes = { - 'a': 'href', - 'blockquote': 'cite', - 'link': 'href', - 'base': 'href', - 'script': 'src', - 'form': 'action', - 'img': 'src', - 'area': 'href', - 'iframe': 'src', - 'embed': 'src', - 'source': 'src', - 'track': 'src', - 'input': 'src', // but only if type="image" - 'audio': 'src', - 'video': 'src' - }; - URI.getDomAttribute = function(node) { - if (!node || !node.nodeName) { - return undefined; - } - - var nodeName = node.nodeName.toLowerCase(); - // should only expose src for type="image" - if (nodeName === 'input' && node.type !== 'image') { - return undefined; - } - - return URI.domAttributes[nodeName]; - }; - - function escapeForDumbFirefox36(value) { - // https://github.com/medialize/URI.js/issues/91 - return escape(value); - } - - // encoding / decoding according to RFC3986 - function strictEncodeURIComponent(string) { - // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent - return encodeURIComponent(string) - .replace(/[!'()*]/g, escapeForDumbFirefox36) - .replace(/\*/g, '%2A'); - } - URI.encode = strictEncodeURIComponent; - URI.decode = decodeURIComponent; - URI.iso8859 = function() { - URI.encode = escape; - URI.decode = unescape; - }; - URI.unicode = function() { - URI.encode = strictEncodeURIComponent; - URI.decode = decodeURIComponent; - }; - URI.characters = { - pathname: { - encode: { - // RFC3986 2.1: For consistency, URI producers and normalizers should - // use uppercase hexadecimal digits for all percent-encodings. - expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig, - map: { - // -._~!'()* - '%24': '$', - '%26': '&', - '%2B': '+', - '%2C': ',', - '%3B': ';', - '%3D': '=', - '%3A': ':', - '%40': '@' - } - }, - decode: { - expression: /[\/\?#]/g, - map: { - '/': '%2F', - '?': '%3F', - '#': '%23' - } - } - }, - reserved: { - encode: { - // RFC3986 2.1: For consistency, URI producers and normalizers should - // use uppercase hexadecimal digits for all percent-encodings. - expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig, - map: { - // gen-delims - '%3A': ':', - '%2F': '/', - '%3F': '?', - '%23': '#', - '%5B': '[', - '%5D': ']', - '%40': '@', - // sub-delims - '%21': '!', - '%24': '$', - '%26': '&', - '%27': '\'', - '%28': '(', - '%29': ')', - '%2A': '*', - '%2B': '+', - '%2C': ',', - '%3B': ';', - '%3D': '=' - } - } - }, - urnpath: { - // The characters under `encode` are the characters called out by RFC 2141 as being acceptable - // for usage in a URN. RFC2141 also calls out "-", ".", and "_" as acceptable characters, but - // these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also - // note that the colon character is not featured in the encoding map; this is because URI.js - // gives the colons in URNs semantic meaning as the delimiters of path segements, and so it - // should not appear unencoded in a segment itself. - // See also the note above about RFC3986 and capitalalized hex digits. - encode: { - expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig, - map: { - '%21': '!', - '%24': '$', - '%27': '\'', - '%28': '(', - '%29': ')', - '%2A': '*', - '%2B': '+', - '%2C': ',', - '%3B': ';', - '%3D': '=', - '%40': '@' - } - }, - // These characters are the characters called out by RFC2141 as "reserved" characters that - // should never appear in a URN, plus the colon character (see note above). - decode: { - expression: /[\/\?#:]/g, - map: { - '/': '%2F', - '?': '%3F', - '#': '%23', - ':': '%3A' - } - } - } - }; - URI.encodeQuery = function(string, escapeQuerySpace) { - var escaped = URI.encode(string + ''); - if (escapeQuerySpace === undefined) { - escapeQuerySpace = URI.escapeQuerySpace; - } - - return escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped; - }; - URI.decodeQuery = function(string, escapeQuerySpace) { - string += ''; - if (escapeQuerySpace === undefined) { - escapeQuerySpace = URI.escapeQuerySpace; - } - - try { - return URI.decode(escapeQuerySpace ? string.replace(/\+/g, '%20') : string); - } catch(e) { - // we're not going to mess with weird encodings, - // give up and return the undecoded original string - // see https://github.com/medialize/URI.js/issues/87 - // see https://github.com/medialize/URI.js/issues/92 - return string; - } - }; - // generate encode/decode path functions - var _parts = {'encode':'encode', 'decode':'decode'}; - var _part; - var generateAccessor = function(_group, _part) { - return function(string) { - try { - return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) { - return URI.characters[_group][_part].map[c]; - }); - } catch (e) { - // we're not going to mess with weird encodings, - // give up and return the undecoded original string - // see https://github.com/medialize/URI.js/issues/87 - // see https://github.com/medialize/URI.js/issues/92 - return string; - } - }; - }; - - for (_part in _parts) { - URI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]); - URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]); - } - - var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) { - return function(string) { - // Why pass in names of functions, rather than the function objects themselves? The - // definitions of some functions (but in particular, URI.decode) will occasionally change due - // to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure - // that the functions we use here are "fresh". - var actualCodingFunc; - if (!_innerCodingFuncName) { - actualCodingFunc = URI[_codingFuncName]; - } else { - actualCodingFunc = function(string) { - return URI[_codingFuncName](URI[_innerCodingFuncName](string)); - }; - } - - var segments = (string + '').split(_sep); - - for (var i = 0, length = segments.length; i < length; i++) { - segments[i] = actualCodingFunc(segments[i]); - } - - return segments.join(_sep); - }; - }; - - // This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions. - URI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment'); - URI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment'); - URI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode'); - URI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode'); - - URI.encodeReserved = generateAccessor('reserved', 'encode'); - - URI.parse = function(string, parts) { - var pos; - if (!parts) { - parts = { - preventInvalidHostname: URI.preventInvalidHostname - }; - } - - string = string.replace(URI.leading_whitespace_expression, ''); - // https://infra.spec.whatwg.org/#ascii-tab-or-newline - string = string.replace(URI.ascii_tab_whitespace, ''); - - // [protocol"://"[username[":"password]"@"]hostname[":"port]"/"?][path]["?"querystring]["#"fragment] - - // extract fragment - pos = string.indexOf('#'); - if (pos > -1) { - // escaping? - parts.fragment = string.substring(pos + 1) || null; - string = string.substring(0, pos); - } - - // extract query - pos = string.indexOf('?'); - if (pos > -1) { - // escaping? - parts.query = string.substring(pos + 1) || null; - string = string.substring(0, pos); - } - - // slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws) - string = string.replace(/^(https?|ftp|wss?)?:+[/\\]*/i, '$1://'); - // slashes and backslashes have lost all meaning for scheme relative URLs - string = string.replace(/^[/\\]{2,}/i, '//'); - - // extract protocol - if (string.substring(0, 2) === '//') { - // relative-scheme - parts.protocol = null; - string = string.substring(2); - // extract "user:pass@host:port" - string = URI.parseAuthority(string, parts); - } else { - pos = string.indexOf(':'); - if (pos > -1) { - parts.protocol = string.substring(0, pos) || null; - if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) { - // : may be within the path - parts.protocol = undefined; - } else if (string.substring(pos + 1, pos + 3).replace(/\\/g, '/') === '//') { - string = string.substring(pos + 3); - - // extract "user:pass@host:port" - string = URI.parseAuthority(string, parts); - } else { - string = string.substring(pos + 1); - parts.urn = true; - } - } - } - - // what's left must be the path - parts.path = string; - - // and we're done - return parts; - }; - URI.parseHost = function(string, parts) { - if (!string) { - string = ''; - } - - // Copy chrome, IE, opera backslash-handling behavior. - // Back slashes before the query string get converted to forward slashes - // See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124 - // See: https://code.google.com/p/chromium/issues/detail?id=25916 - // https://github.com/medialize/URI.js/pull/233 - string = string.replace(/\\/g, '/'); - - // extract host:port - var pos = string.indexOf('/'); - var bracketPos; - var t; - - if (pos === -1) { - pos = string.length; - } - - if (string.charAt(0) === '[') { - // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6 - // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts - // IPv6+port in the format [2001:db8::1]:80 (for the time being) - bracketPos = string.indexOf(']'); - parts.hostname = string.substring(1, bracketPos) || null; - parts.port = string.substring(bracketPos + 2, pos) || null; - if (parts.port === '/') { - parts.port = null; - } - } else { - var firstColon = string.indexOf(':'); - var firstSlash = string.indexOf('/'); - var nextColon = string.indexOf(':', firstColon + 1); - if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) { - // IPv6 host contains multiple colons - but no port - // this notation is actually not allowed by RFC 3986, but we're a liberal parser - parts.hostname = string.substring(0, pos) || null; - parts.port = null; - } else { - t = string.substring(0, pos).split(':'); - parts.hostname = t[0] || null; - parts.port = t[1] || null; - } - } - - if (parts.hostname && string.substring(pos).charAt(0) !== '/') { - pos++; - string = '/' + string; - } - - if (parts.preventInvalidHostname) { - URI.ensureValidHostname(parts.hostname, parts.protocol); - } - - if (parts.port) { - URI.ensureValidPort(parts.port); - } - - return string.substring(pos) || '/'; - }; - URI.parseAuthority = function(string, parts) { - string = URI.parseUserinfo(string, parts); - return URI.parseHost(string, parts); - }; - URI.parseUserinfo = function(string, parts) { - // extract username:password - var _string = string; - var firstBackSlash = string.indexOf('\\'); - if (firstBackSlash !== -1) { - string = string.replace(/\\/g, '/'); - } - var firstSlash = string.indexOf('/'); - var pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1); - var t; - - // authority@ must come before /path or \path - if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) { - t = string.substring(0, pos).split(':'); - parts.username = t[0] ? URI.decode(t[0]) : null; - t.shift(); - parts.password = t[0] ? URI.decode(t.join(':')) : null; - string = _string.substring(pos + 1); - } else { - parts.username = null; - parts.password = null; - } - - return string; - }; - URI.parseQuery = function(string, escapeQuerySpace) { - if (!string) { - return {}; - } - - // throw out the funky business - "?"[name"="value"&"]+ - string = string.replace(/&+/g, '&').replace(/^\?*&*|&+$/g, ''); - - if (!string) { - return {}; - } - - var items = {}; - var splits = string.split('&'); - var length = splits.length; - var v, name, value; - - for (var i = 0; i < length; i++) { - v = splits[i].split('='); - name = URI.decodeQuery(v.shift(), escapeQuerySpace); - // no "=" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters - value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null; - - if (name === '__proto__') { - // ignore attempt at exploiting JavaScript internals - continue; - } else if (hasOwn.call(items, name)) { - if (typeof items[name] === 'string' || items[name] === null) { - items[name] = [items[name]]; - } - - items[name].push(value); - } else { - items[name] = value; - } - } - - return items; - }; - - URI.build = function(parts) { - var t = ''; - var requireAbsolutePath = false; - - if (parts.protocol) { - t += parts.protocol + ':'; - } - - if (!parts.urn && (t || parts.hostname)) { - t += '//'; - requireAbsolutePath = true; - } - - t += (URI.buildAuthority(parts) || ''); - - if (typeof parts.path === 'string') { - if (parts.path.charAt(0) !== '/' && requireAbsolutePath) { - t += '/'; - } - - t += parts.path; - } - - if (typeof parts.query === 'string' && parts.query) { - t += '?' + parts.query; - } - - if (typeof parts.fragment === 'string' && parts.fragment) { - t += '#' + parts.fragment; - } - return t; - }; - URI.buildHost = function(parts) { - var t = ''; - - if (!parts.hostname) { - return ''; - } else if (URI.ip6_expression.test(parts.hostname)) { - t += '[' + parts.hostname + ']'; - } else { - t += parts.hostname; - } - - if (parts.port) { - t += ':' + parts.port; - } - - return t; - }; - URI.buildAuthority = function(parts) { - return URI.buildUserinfo(parts) + URI.buildHost(parts); - }; - URI.buildUserinfo = function(parts) { - var t = ''; - - if (parts.username) { - t += URI.encode(parts.username); - } - - if (parts.password) { - t += ':' + URI.encode(parts.password); - } - - if (t) { - t += '@'; - } - - return t; - }; - URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) { - // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html - // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed - // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax! - // URI.js treats the query string as being application/x-www-form-urlencoded - // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type - - var t = ''; - var unique, key, i, length; - for (key in data) { - if (key === '__proto__') { - // ignore attempt at exploiting JavaScript internals - continue; - } else if (hasOwn.call(data, key)) { - if (isArray(data[key])) { - unique = {}; - for (i = 0, length = data[key].length; i < length; i++) { - if (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) { - t += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace); - if (duplicateQueryParameters !== true) { - unique[data[key][i] + ''] = true; - } - } - } - } else if (data[key] !== undefined) { - t += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace); - } - } - } - - return t.substring(1); - }; - URI.buildQueryParameter = function(name, value, escapeQuerySpace) { - // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded - // don't append "=" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization - return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : ''); - }; - - URI.addQuery = function(data, name, value) { - if (typeof name === 'object') { - for (var key in name) { - if (hasOwn.call(name, key)) { - URI.addQuery(data, key, name[key]); - } - } - } else if (typeof name === 'string') { - if (data[name] === undefined) { - data[name] = value; - return; - } else if (typeof data[name] === 'string') { - data[name] = [data[name]]; - } - - if (!isArray(value)) { - value = [value]; - } - - data[name] = (data[name] || []).concat(value); - } else { - throw new TypeError('URI.addQuery() accepts an object, string as the name parameter'); - } - }; - - URI.setQuery = function(data, name, value) { - if (typeof name === 'object') { - for (var key in name) { - if (hasOwn.call(name, key)) { - URI.setQuery(data, key, name[key]); - } - } - } else if (typeof name === 'string') { - data[name] = value === undefined ? null : value; - } else { - throw new TypeError('URI.setQuery() accepts an object, string as the name parameter'); - } - }; - - URI.removeQuery = function(data, name, value) { - var i, length, key; - - if (isArray(name)) { - for (i = 0, length = name.length; i < length; i++) { - data[name[i]] = undefined; - } - } else if (getType(name) === 'RegExp') { - for (key in data) { - if (name.test(key)) { - data[key] = undefined; - } - } - } else if (typeof name === 'object') { - for (key in name) { - if (hasOwn.call(name, key)) { - URI.removeQuery(data, key, name[key]); - } - } - } else if (typeof name === 'string') { - if (value !== undefined) { - if (getType(value) === 'RegExp') { - if (!isArray(data[name]) && value.test(data[name])) { - data[name] = undefined; - } else { - data[name] = filterArrayValues(data[name], value); - } - } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) { - data[name] = undefined; - } else if (isArray(data[name])) { - data[name] = filterArrayValues(data[name], value); - } - } else { - data[name] = undefined; - } - } else { - throw new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter'); - } - }; - URI.hasQuery = function(data, name, value, withinArray) { - switch (getType(name)) { - case 'String': - // Nothing to do here - break; - - case 'RegExp': - for (var key in data) { - if (hasOwn.call(data, key)) { - if (name.test(key) && (value === undefined || URI.hasQuery(data, key, value))) { - return true; - } - } - } - - return false; - - case 'Object': - for (var _key in name) { - if (hasOwn.call(name, _key)) { - if (!URI.hasQuery(data, _key, name[_key])) { - return false; - } - } - } - - return true; - - default: - throw new TypeError('URI.hasQuery() accepts a string, regular expression or object as the name parameter'); - } - - switch (getType(value)) { - case 'Undefined': - // true if exists (but may be empty) - return name in data; // data[name] !== undefined; - - case 'Boolean': - // true if exists and non-empty - var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]); - return value === _booly; - - case 'Function': - // allow complex comparison - return !!value(data[name], name, data); - - case 'Array': - if (!isArray(data[name])) { - return false; - } - - var op = withinArray ? arrayContains : arraysEqual; - return op(data[name], value); - - case 'RegExp': - if (!isArray(data[name])) { - return Boolean(data[name] && data[name].match(value)); - } - - if (!withinArray) { - return false; - } - - return arrayContains(data[name], value); - - case 'Number': - value = String(value); - /* falls through */ - case 'String': - if (!isArray(data[name])) { - return data[name] === value; - } - - if (!withinArray) { - return false; - } - - return arrayContains(data[name], value); - - default: - throw new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter'); - } - }; - - - URI.joinPaths = function() { - var input = []; - var segments = []; - var nonEmptySegments = 0; - - for (var i = 0; i < arguments.length; i++) { - var url = new URI(arguments[i]); - input.push(url); - var _segments = url.segment(); - for (var s = 0; s < _segments.length; s++) { - if (typeof _segments[s] === 'string') { - segments.push(_segments[s]); - } - - if (_segments[s]) { - nonEmptySegments++; - } - } - } - - if (!segments.length || !nonEmptySegments) { - return new URI(''); - } - - var uri = new URI('').segment(segments); - - if (input[0].path() === '' || input[0].path().slice(0, 1) === '/') { - uri.path('/' + uri.path()); - } - - return uri.normalize(); - }; - - URI.commonPath = function(one, two) { - var length = Math.min(one.length, two.length); - var pos; - - // find first non-matching character - for (pos = 0; pos < length; pos++) { - if (one.charAt(pos) !== two.charAt(pos)) { - pos--; - break; - } - } - - if (pos < 1) { - return one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : ''; - } - - // revert to last / - if (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') { - pos = one.substring(0, pos).lastIndexOf('/'); - } - - return one.substring(0, pos + 1); - }; - - URI.withinString = function(string, callback, options) { - options || (options = {}); - var _start = options.start || URI.findUri.start; - var _end = options.end || URI.findUri.end; - var _trim = options.trim || URI.findUri.trim; - var _parens = options.parens || URI.findUri.parens; - var _attributeOpen = /[a-z0-9-]=["']?$/i; - - _start.lastIndex = 0; - while (true) { - var match = _start.exec(string); - if (!match) { - break; - } - - var start = match.index; - if (options.ignoreHtml) { - // attribut(e=["']?$) - var attributeOpen = string.slice(Math.max(start - 3, 0), start); - if (attributeOpen && _attributeOpen.test(attributeOpen)) { - continue; - } - } - - var end = start + string.slice(start).search(_end); - var slice = string.slice(start, end); - // make sure we include well balanced parens - var parensEnd = -1; - while (true) { - var parensMatch = _parens.exec(slice); - if (!parensMatch) { - break; - } - - var parensMatchEnd = parensMatch.index + parensMatch[0].length; - parensEnd = Math.max(parensEnd, parensMatchEnd); - } - - if (parensEnd > -1) { - slice = slice.slice(0, parensEnd) + slice.slice(parensEnd).replace(_trim, ''); - } else { - slice = slice.replace(_trim, ''); - } - - if (slice.length <= match[0].length) { - // the extract only contains the starting marker of a URI, - // e.g. "www" or "http://" - continue; - } - - if (options.ignore && options.ignore.test(slice)) { - continue; - } - - end = start + slice.length; - var result = callback(slice, start, end, string); - if (result === undefined) { - _start.lastIndex = end; - continue; - } - - result = String(result); - string = string.slice(0, start) + result + string.slice(end); - _start.lastIndex = start + result.length; - } - - _start.lastIndex = 0; - return string; - }; - - URI.ensureValidHostname = function(v, protocol) { - // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986) - // they are not part of DNS and therefore ignored by URI.js - - var hasHostname = !!v; // not null and not an empty string - var hasProtocol = !!protocol; - var rejectEmptyHostname = false; - - if (hasProtocol) { - rejectEmptyHostname = arrayContains(URI.hostProtocols, protocol); - } - - if (rejectEmptyHostname && !hasHostname) { - throw new TypeError('Hostname cannot be empty, if protocol is ' + protocol); - } else if (v && v.match(URI.invalid_hostname_characters)) { - // test punycode - if (!punycode) { - throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available'); - } - if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) { - throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-:_]'); - } - } - }; - - URI.ensureValidPort = function (v) { - if (!v) { - return; - } - - var port = Number(v); - if (isInteger(port) && (port > 0) && (port < 65536)) { - return; - } - - throw new TypeError('Port "' + v + '" is not a valid port'); - }; - - // noConflict - URI.noConflict = function(removeAll) { - if (removeAll) { - var unconflicted = { - URI: this.noConflict() - }; - - if (root.URITemplate && typeof root.URITemplate.noConflict === 'function') { - unconflicted.URITemplate = root.URITemplate.noConflict(); - } - - if (root.IPv6 && typeof root.IPv6.noConflict === 'function') { - unconflicted.IPv6 = root.IPv6.noConflict(); - } - - if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') { - unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict(); - } - - return unconflicted; - } else if (root.URI === this) { - root.URI = _URI; - } - - return this; - }; - - p.build = function(deferBuild) { - if (deferBuild === true) { - this._deferred_build = true; - } else if (deferBuild === undefined || this._deferred_build) { - this._string = URI.build(this._parts); - this._deferred_build = false; - } - - return this; - }; - - p.clone = function() { - return new URI(this); - }; - - p.valueOf = p.toString = function() { - return this.build(false)._string; - }; - - - function generateSimpleAccessor(_part){ - return function(v, build) { - if (v === undefined) { - return this._parts[_part] || ''; - } else { - this._parts[_part] = v || null; - this.build(!build); - return this; - } - }; - } - - function generatePrefixAccessor(_part, _key){ - return function(v, build) { - if (v === undefined) { - return this._parts[_part] || ''; - } else { - if (v !== null) { - v = v + ''; - if (v.charAt(0) === _key) { - v = v.substring(1); - } - } - - this._parts[_part] = v; - this.build(!build); - return this; - } - }; - } - - p.protocol = generateSimpleAccessor('protocol'); - p.username = generateSimpleAccessor('username'); - p.password = generateSimpleAccessor('password'); - p.hostname = generateSimpleAccessor('hostname'); - p.port = generateSimpleAccessor('port'); - p.query = generatePrefixAccessor('query', '?'); - p.fragment = generatePrefixAccessor('fragment', '#'); - - p.search = function(v, build) { - var t = this.query(v, build); - return typeof t === 'string' && t.length ? ('?' + t) : t; - }; - p.hash = function(v, build) { - var t = this.fragment(v, build); - return typeof t === 'string' && t.length ? ('#' + t) : t; - }; - - p.pathname = function(v, build) { - if (v === undefined || v === true) { - var res = this._parts.path || (this._parts.hostname ? '/' : ''); - return v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res; - } else { - if (this._parts.urn) { - this._parts.path = v ? URI.recodeUrnPath(v) : ''; - } else { - this._parts.path = v ? URI.recodePath(v) : '/'; - } - this.build(!build); - return this; - } - }; - p.path = p.pathname; - p.href = function(href, build) { - var key; - - if (href === undefined) { - return this.toString(); - } - - this._string = ''; - this._parts = URI._parts(); - - var _URI = href instanceof URI; - var _object = typeof href === 'object' && (href.hostname || href.path || href.pathname); - if (href.nodeName) { - var attribute = URI.getDomAttribute(href); - href = href[attribute] || ''; - _object = false; - } - - // window.location is reported to be an object, but it's not the sort - // of object we're looking for: - // * location.protocol ends with a colon - // * location.query != object.search - // * location.hash != object.fragment - // simply serializing the unknown object should do the trick - // (for location, not for everything...) - if (!_URI && _object && href.pathname !== undefined) { - href = href.toString(); - } - - if (typeof href === 'string' || href instanceof String) { - this._parts = URI.parse(String(href), this._parts); - } else if (_URI || _object) { - var src = _URI ? href._parts : href; - for (key in src) { - if (key === 'query') { continue; } - if (hasOwn.call(this._parts, key)) { - this._parts[key] = src[key]; - } - } - if (src.query) { - this.query(src.query, false); - } - } else { - throw new TypeError('invalid input'); - } - - this.build(!build); - return this; - }; - - // identification accessors - p.is = function(what) { - var ip = false; - var ip4 = false; - var ip6 = false; - var name = false; - var sld = false; - var idn = false; - var punycode = false; - var relative = !this._parts.urn; - - if (this._parts.hostname) { - relative = false; - ip4 = URI.ip4_expression.test(this._parts.hostname); - ip6 = URI.ip6_expression.test(this._parts.hostname); - ip = ip4 || ip6; - name = !ip; - sld = name && SLD && SLD.has(this._parts.hostname); - idn = name && URI.idn_expression.test(this._parts.hostname); - punycode = name && URI.punycode_expression.test(this._parts.hostname); - } - - switch (what.toLowerCase()) { - case 'relative': - return relative; - - case 'absolute': - return !relative; - - // hostname identification - case 'domain': - case 'name': - return name; - - case 'sld': - return sld; - - case 'ip': - return ip; - - case 'ip4': - case 'ipv4': - case 'inet4': - return ip4; - - case 'ip6': - case 'ipv6': - case 'inet6': - return ip6; - - case 'idn': - return idn; - - case 'url': - return !this._parts.urn; - - case 'urn': - return !!this._parts.urn; - - case 'punycode': - return punycode; - } - - return null; - }; - - // component specific input validation - var _protocol = p.protocol; - var _port = p.port; - var _hostname = p.hostname; - - p.protocol = function(v, build) { - if (v) { - // accept trailing :// - v = v.replace(/:(\/\/)?$/, ''); - - if (!v.match(URI.protocol_expression)) { - throw new TypeError('Protocol "' + v + '" contains characters other than [A-Z0-9.+-] or doesn\'t start with [A-Z]'); - } - } - - return _protocol.call(this, v, build); - }; - p.scheme = p.protocol; - p.port = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (v !== undefined) { - if (v === 0) { - v = null; - } - - if (v) { - v += ''; - if (v.charAt(0) === ':') { - v = v.substring(1); - } - - URI.ensureValidPort(v); - } - } - return _port.call(this, v, build); - }; - p.hostname = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (v !== undefined) { - var x = { preventInvalidHostname: this._parts.preventInvalidHostname }; - var res = URI.parseHost(v, x); - if (res !== '/') { - throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]'); - } - - v = x.hostname; - if (this._parts.preventInvalidHostname) { - URI.ensureValidHostname(v, this._parts.protocol); - } - } - - return _hostname.call(this, v, build); - }; - - // compound accessors - p.origin = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (v === undefined) { - var protocol = this.protocol(); - var authority = this.authority(); - if (!authority) { - return ''; - } - - return (protocol ? protocol + '://' : '') + this.authority(); - } else { - var origin = URI(v); - this - .protocol(origin.protocol()) - .authority(origin.authority()) - .build(!build); - return this; - } - }; - p.host = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (v === undefined) { - return this._parts.hostname ? URI.buildHost(this._parts) : ''; - } else { - var res = URI.parseHost(v, this._parts); - if (res !== '/') { - throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]'); - } - - this.build(!build); - return this; - } - }; - p.authority = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (v === undefined) { - return this._parts.hostname ? URI.buildAuthority(this._parts) : ''; - } else { - var res = URI.parseAuthority(v, this._parts); - if (res !== '/') { - throw new TypeError('Hostname "' + v + '" contains characters other than [A-Z0-9.-]'); - } - - this.build(!build); - return this; - } - }; - p.userinfo = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (v === undefined) { - var t = URI.buildUserinfo(this._parts); - return t ? t.substring(0, t.length -1) : t; - } else { - if (v[v.length-1] !== '@') { - v += '@'; - } - - URI.parseUserinfo(v, this._parts); - this.build(!build); - return this; - } - }; - p.resource = function(v, build) { - var parts; - - if (v === undefined) { - return this.path() + this.search() + this.hash(); - } - - parts = URI.parse(v); - this._parts.path = parts.path; - this._parts.query = parts.query; - this._parts.fragment = parts.fragment; - this.build(!build); - return this; - }; - - // fraction accessors - p.subdomain = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - // convenience, return "www" from "www.example.org" - if (v === undefined) { - if (!this._parts.hostname || this.is('IP')) { - return ''; - } - - // grab domain and add another segment - var end = this._parts.hostname.length - this.domain().length - 1; - return this._parts.hostname.substring(0, end) || ''; - } else { - var e = this._parts.hostname.length - this.domain().length; - var sub = this._parts.hostname.substring(0, e); - var replace = new RegExp('^' + escapeRegEx(sub)); - - if (v && v.charAt(v.length - 1) !== '.') { - v += '.'; - } - - if (v.indexOf(':') !== -1) { - throw new TypeError('Domains cannot contain colons'); - } - - if (v) { - URI.ensureValidHostname(v, this._parts.protocol); - } - - this._parts.hostname = this._parts.hostname.replace(replace, v); - this.build(!build); - return this; - } - }; - p.domain = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (typeof v === 'boolean') { - build = v; - v = undefined; - } - - // convenience, return "example.org" from "www.example.org" - if (v === undefined) { - if (!this._parts.hostname || this.is('IP')) { - return ''; - } - - // if hostname consists of 1 or 2 segments, it must be the domain - var t = this._parts.hostname.match(/\./g); - if (t && t.length < 2) { - return this._parts.hostname; - } - - // grab tld and add another segment - var end = this._parts.hostname.length - this.tld(build).length - 1; - end = this._parts.hostname.lastIndexOf('.', end -1) + 1; - return this._parts.hostname.substring(end) || ''; - } else { - if (!v) { - throw new TypeError('cannot set domain empty'); - } - - if (v.indexOf(':') !== -1) { - throw new TypeError('Domains cannot contain colons'); - } - - URI.ensureValidHostname(v, this._parts.protocol); - - if (!this._parts.hostname || this.is('IP')) { - this._parts.hostname = v; - } else { - var replace = new RegExp(escapeRegEx(this.domain()) + '$'); - this._parts.hostname = this._parts.hostname.replace(replace, v); - } - - this.build(!build); - return this; - } - }; - p.tld = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (typeof v === 'boolean') { - build = v; - v = undefined; - } - - // return "org" from "www.example.org" - if (v === undefined) { - if (!this._parts.hostname || this.is('IP')) { - return ''; - } - - var pos = this._parts.hostname.lastIndexOf('.'); - var tld = this._parts.hostname.substring(pos + 1); - - if (build !== true && SLD && SLD.list[tld.toLowerCase()]) { - return SLD.get(this._parts.hostname) || tld; - } - - return tld; - } else { - var replace; - - if (!v) { - throw new TypeError('cannot set TLD empty'); - } else if (v.match(/[^a-zA-Z0-9-]/)) { - if (SLD && SLD.is(v)) { - replace = new RegExp(escapeRegEx(this.tld()) + '$'); - this._parts.hostname = this._parts.hostname.replace(replace, v); - } else { - throw new TypeError('TLD "' + v + '" contains characters other than [A-Z0-9]'); - } - } else if (!this._parts.hostname || this.is('IP')) { - throw new ReferenceError('cannot set TLD on non-domain host'); - } else { - replace = new RegExp(escapeRegEx(this.tld()) + '$'); - this._parts.hostname = this._parts.hostname.replace(replace, v); - } - - this.build(!build); - return this; - } - }; - p.directory = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (v === undefined || v === true) { - if (!this._parts.path && !this._parts.hostname) { - return ''; - } - - if (this._parts.path === '/') { - return '/'; - } - - var end = this._parts.path.length - this.filename().length - 1; - var res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : ''); - - return v ? URI.decodePath(res) : res; - - } else { - var e = this._parts.path.length - this.filename().length; - var directory = this._parts.path.substring(0, e); - var replace = new RegExp('^' + escapeRegEx(directory)); - - // fully qualifier directories begin with a slash - if (!this.is('relative')) { - if (!v) { - v = '/'; - } - - if (v.charAt(0) !== '/') { - v = '/' + v; - } - } - - // directories always end with a slash - if (v && v.charAt(v.length - 1) !== '/') { - v += '/'; - } - - v = URI.recodePath(v); - this._parts.path = this._parts.path.replace(replace, v); - this.build(!build); - return this; - } - }; - p.filename = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (typeof v !== 'string') { - if (!this._parts.path || this._parts.path === '/') { - return ''; - } - - var pos = this._parts.path.lastIndexOf('/'); - var res = this._parts.path.substring(pos+1); - - return v ? URI.decodePathSegment(res) : res; - } else { - var mutatedDirectory = false; - - if (v.charAt(0) === '/') { - v = v.substring(1); - } - - if (v.match(/\.?\//)) { - mutatedDirectory = true; - } - - var replace = new RegExp(escapeRegEx(this.filename()) + '$'); - v = URI.recodePath(v); - this._parts.path = this._parts.path.replace(replace, v); - - if (mutatedDirectory) { - this.normalizePath(build); - } else { - this.build(!build); - } - - return this; - } - }; - p.suffix = function(v, build) { - if (this._parts.urn) { - return v === undefined ? '' : this; - } - - if (v === undefined || v === true) { - if (!this._parts.path || this._parts.path === '/') { - return ''; - } - - var filename = this.filename(); - var pos = filename.lastIndexOf('.'); - var s, res; - - if (pos === -1) { - return ''; - } - - // suffix may only contain alnum characters (yup, I made this up.) - s = filename.substring(pos+1); - res = (/^[a-z0-9%]+$/i).test(s) ? s : ''; - return v ? URI.decodePathSegment(res) : res; - } else { - if (v.charAt(0) === '.') { - v = v.substring(1); - } - - var suffix = this.suffix(); - var replace; - - if (!suffix) { - if (!v) { - return this; - } - - this._parts.path += '.' + URI.recodePath(v); - } else if (!v) { - replace = new RegExp(escapeRegEx('.' + suffix) + '$'); - } else { - replace = new RegExp(escapeRegEx(suffix) + '$'); - } - - if (replace) { - v = URI.recodePath(v); - this._parts.path = this._parts.path.replace(replace, v); - } - - this.build(!build); - return this; - } - }; - p.segment = function(segment, v, build) { - var separator = this._parts.urn ? ':' : '/'; - var path = this.path(); - var absolute = path.substring(0, 1) === '/'; - var segments = path.split(separator); - - if (segment !== undefined && typeof segment !== 'number') { - build = v; - v = segment; - segment = undefined; - } - - if (segment !== undefined && typeof segment !== 'number') { - throw new Error('Bad segment "' + segment + '", must be 0-based integer'); - } - - if (absolute) { - segments.shift(); - } - - if (segment < 0) { - // allow negative indexes to address from the end - segment = Math.max(segments.length + segment, 0); - } - - if (v === undefined) { - /*jshint laxbreak: true */ - return segment === undefined - ? segments - : segments[segment]; - /*jshint laxbreak: false */ - } else if (segment === null || segments[segment] === undefined) { - if (isArray(v)) { - segments = []; - // collapse empty elements within array - for (var i=0, l=v.length; i < l; i++) { - if (!v[i].length && (!segments.length || !segments[segments.length -1].length)) { - continue; - } - - if (segments.length && !segments[segments.length -1].length) { - segments.pop(); - } - - segments.push(trimSlashes(v[i])); - } - } else if (v || typeof v === 'string') { - v = trimSlashes(v); - if (segments[segments.length -1] === '') { - // empty trailing elements have to be overwritten - // to prevent results such as /foo//bar - segments[segments.length -1] = v; - } else { - segments.push(v); - } - } - } else { - if (v) { - segments[segment] = trimSlashes(v); - } else { - segments.splice(segment, 1); - } - } - - if (absolute) { - segments.unshift(''); - } - - return this.path(segments.join(separator), build); - }; - p.segmentCoded = function(segment, v, build) { - var segments, i, l; - - if (typeof segment !== 'number') { - build = v; - v = segment; - segment = undefined; - } - - if (v === undefined) { - segments = this.segment(segment, v, build); - if (!isArray(segments)) { - segments = segments !== undefined ? URI.decode(segments) : undefined; - } else { - for (i = 0, l = segments.length; i < l; i++) { - segments[i] = URI.decode(segments[i]); - } - } - - return segments; - } - - if (!isArray(v)) { - v = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v; - } else { - for (i = 0, l = v.length; i < l; i++) { - v[i] = URI.encode(v[i]); - } - } - - return this.segment(segment, v, build); - }; - - // mutating query string - var q = p.query; - p.query = function(v, build) { - if (v === true) { - return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - } else if (typeof v === 'function') { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - var result = v.call(this, data); - this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - this.build(!build); - return this; - } else if (v !== undefined && typeof v !== 'string') { - this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - this.build(!build); - return this; - } else { - return q.call(this, v, build); - } - }; - p.setQuery = function(name, value, build) { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - - if (typeof name === 'string' || name instanceof String) { - data[name] = value !== undefined ? value : null; - } else if (typeof name === 'object') { - for (var key in name) { - if (hasOwn.call(name, key)) { - data[key] = name[key]; - } - } - } else { - throw new TypeError('URI.addQuery() accepts an object, string as the name parameter'); - } - - this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - if (typeof name !== 'string') { - build = value; - } - - this.build(!build); - return this; - }; - p.addQuery = function(name, value, build) { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - URI.addQuery(data, name, value === undefined ? null : value); - this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - if (typeof name !== 'string') { - build = value; - } - - this.build(!build); - return this; - }; - p.removeQuery = function(name, value, build) { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - URI.removeQuery(data, name, value); - this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - if (typeof name !== 'string') { - build = value; - } - - this.build(!build); - return this; - }; - p.hasQuery = function(name, value, withinArray) { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - return URI.hasQuery(data, name, value, withinArray); - }; - p.setSearch = p.setQuery; - p.addSearch = p.addQuery; - p.removeSearch = p.removeQuery; - p.hasSearch = p.hasQuery; - - // sanitizing URLs - p.normalize = function() { - if (this._parts.urn) { - return this - .normalizeProtocol(false) - .normalizePath(false) - .normalizeQuery(false) - .normalizeFragment(false) - .build(); - } - - return this - .normalizeProtocol(false) - .normalizeHostname(false) - .normalizePort(false) - .normalizePath(false) - .normalizeQuery(false) - .normalizeFragment(false) - .build(); - }; - p.normalizeProtocol = function(build) { - if (typeof this._parts.protocol === 'string') { - this._parts.protocol = this._parts.protocol.toLowerCase(); - this.build(!build); - } - - return this; - }; - p.normalizeHostname = function(build) { - if (this._parts.hostname) { - if (this.is('IDN') && punycode) { - this._parts.hostname = punycode.toASCII(this._parts.hostname); - } else if (this.is('IPv6') && IPv6) { - this._parts.hostname = IPv6.best(this._parts.hostname); - } - - this._parts.hostname = this._parts.hostname.toLowerCase(); - this.build(!build); - } - - return this; - }; - p.normalizePort = function(build) { - // remove port of it's the protocol's default - if (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) { - this._parts.port = null; - this.build(!build); - } - - return this; - }; - p.normalizePath = function(build) { - var _path = this._parts.path; - if (!_path) { - return this; - } - - if (this._parts.urn) { - this._parts.path = URI.recodeUrnPath(this._parts.path); - this.build(!build); - return this; - } - - if (this._parts.path === '/') { - return this; - } - - _path = URI.recodePath(_path); - - var _was_relative; - var _leadingParents = ''; - var _parent, _pos; - - // handle relative paths - if (_path.charAt(0) !== '/') { - _was_relative = true; - _path = '/' + _path; - } - - // handle relative files (as opposed to directories) - if (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') { - _path += '/'; - } - - // resolve simples - _path = _path - .replace(/(\/(\.\/)+)|(\/\.$)/g, '/') - .replace(/\/{2,}/g, '/'); - - // remember leading parents - if (_was_relative) { - _leadingParents = _path.substring(1).match(/^(\.\.\/)+/) || ''; - if (_leadingParents) { - _leadingParents = _leadingParents[0]; - } - } - - // resolve parents - while (true) { - _parent = _path.search(/\/\.\.(\/|$)/); - if (_parent === -1) { - // no more ../ to resolve - break; - } else if (_parent === 0) { - // top level cannot be relative, skip it - _path = _path.substring(3); - continue; - } - - _pos = _path.substring(0, _parent).lastIndexOf('/'); - if (_pos === -1) { - _pos = _parent; - } - _path = _path.substring(0, _pos) + _path.substring(_parent + 3); - } - - // revert to relative - if (_was_relative && this.is('relative')) { - _path = _leadingParents + _path.substring(1); - } - - this._parts.path = _path; - this.build(!build); - return this; - }; - p.normalizePathname = p.normalizePath; - p.normalizeQuery = function(build) { - if (typeof this._parts.query === 'string') { - if (!this._parts.query.length) { - this._parts.query = null; - } else { - this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace)); - } - - this.build(!build); - } - - return this; - }; - p.normalizeFragment = function(build) { - if (!this._parts.fragment) { - this._parts.fragment = null; - this.build(!build); - } - - return this; - }; - p.normalizeSearch = p.normalizeQuery; - p.normalizeHash = p.normalizeFragment; - - p.iso8859 = function() { - // expect unicode input, iso8859 output - var e = URI.encode; - var d = URI.decode; - - URI.encode = escape; - URI.decode = decodeURIComponent; - try { - this.normalize(); - } finally { - URI.encode = e; - URI.decode = d; - } - return this; - }; - - p.unicode = function() { - // expect iso8859 input, unicode output - var e = URI.encode; - var d = URI.decode; - - URI.encode = strictEncodeURIComponent; - URI.decode = unescape; - try { - this.normalize(); - } finally { - URI.encode = e; - URI.decode = d; - } - return this; - }; - - p.readable = function() { - var uri = this.clone(); - // removing username, password, because they shouldn't be displayed according to RFC 3986 - uri.username('').password('').normalize(); - var t = ''; - if (uri._parts.protocol) { - t += uri._parts.protocol + '://'; - } - - if (uri._parts.hostname) { - if (uri.is('punycode') && punycode) { - t += punycode.toUnicode(uri._parts.hostname); - if (uri._parts.port) { - t += ':' + uri._parts.port; - } - } else { - t += uri.host(); - } - } - - if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') { - t += '/'; - } - - t += uri.path(true); - if (uri._parts.query) { - var q = ''; - for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) { - var kv = (qp[i] || '').split('='); - q += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace) - .replace(/&/g, '%26'); - - if (kv[1] !== undefined) { - q += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace) - .replace(/&/g, '%26'); - } - } - t += '?' + q.substring(1); - } - - t += URI.decodeQuery(uri.hash(), true); - return t; - }; - - // resolving relative and absolute URLs - p.absoluteTo = function(base) { - var resolved = this.clone(); - var properties = ['protocol', 'username', 'password', 'hostname', 'port']; - var basedir, i, p; - - if (this._parts.urn) { - throw new Error('URNs do not have any generally defined hierarchical components'); - } - - if (!(base instanceof URI)) { - base = new URI(base); - } - - if (resolved._parts.protocol) { - // Directly returns even if this._parts.hostname is empty. - return resolved; - } else { - resolved._parts.protocol = base._parts.protocol; - } - - if (this._parts.hostname) { - return resolved; - } - - for (i = 0; (p = properties[i]); i++) { - resolved._parts[p] = base._parts[p]; - } - - if (!resolved._parts.path) { - resolved._parts.path = base._parts.path; - if (!resolved._parts.query) { - resolved._parts.query = base._parts.query; - } - } else { - if (resolved._parts.path.substring(-2) === '..') { - resolved._parts.path += '/'; - } - - if (resolved.path().charAt(0) !== '/') { - basedir = base.directory(); - basedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : ''; - resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path; - resolved.normalizePath(); - } - } - - resolved.build(); - return resolved; - }; - p.relativeTo = function(base) { - var relative = this.clone().normalize(); - var relativeParts, baseParts, common, relativePath, basePath; - - if (relative._parts.urn) { - throw new Error('URNs do not have any generally defined hierarchical components'); - } - - base = new URI(base).normalize(); - relativeParts = relative._parts; - baseParts = base._parts; - relativePath = relative.path(); - basePath = base.path(); - - if (relativePath.charAt(0) !== '/') { - throw new Error('URI is already relative'); - } - - if (basePath.charAt(0) !== '/') { - throw new Error('Cannot calculate a URI relative to another relative URI'); - } - - if (relativeParts.protocol === baseParts.protocol) { - relativeParts.protocol = null; - } - - if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) { - return relative.build(); - } - - if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) { - return relative.build(); - } - - if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) { - relativeParts.hostname = null; - relativeParts.port = null; - } else { - return relative.build(); - } - - if (relativePath === basePath) { - relativeParts.path = ''; - return relative.build(); - } - - // determine common sub path - common = URI.commonPath(relativePath, basePath); - - // If the paths have nothing in common, return a relative URL with the absolute path. - if (!common) { - return relative.build(); - } - - var parents = baseParts.path - .substring(common.length) - .replace(/[^\/]*$/, '') - .replace(/.*?\//g, '../'); - - relativeParts.path = (parents + relativeParts.path.substring(common.length)) || './'; - - return relative.build(); - }; - - // comparing URIs - p.equals = function(uri) { - var one = this.clone(); - var two = new URI(uri); - var one_map = {}; - var two_map = {}; - var checked = {}; - var one_query, two_query, key; - - one.normalize(); - two.normalize(); - - // exact match - if (one.toString() === two.toString()) { - return true; - } - - // extract query string - one_query = one.query(); - two_query = two.query(); - one.query(''); - two.query(''); - - // definitely not equal if not even non-query parts match - if (one.toString() !== two.toString()) { - return false; - } - - // query parameters have the same length, even if they're permuted - if (one_query.length !== two_query.length) { - return false; - } - - one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace); - two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace); - - for (key in one_map) { - if (hasOwn.call(one_map, key)) { - if (!isArray(one_map[key])) { - if (one_map[key] !== two_map[key]) { - return false; - } - } else if (!arraysEqual(one_map[key], two_map[key])) { - return false; - } - - checked[key] = true; - } - } - - for (key in two_map) { - if (hasOwn.call(two_map, key)) { - if (!checked[key]) { - // two contains a parameter not present in one - return false; - } - } - } - - return true; - }; - - // state - p.preventInvalidHostname = function(v) { - this._parts.preventInvalidHostname = !!v; - return this; - }; - - p.duplicateQueryParameters = function(v) { - this._parts.duplicateQueryParameters = !!v; - return this; - }; - - p.escapeQuerySpace = function(v) { - this._parts.escapeQuerySpace = !!v; - return this; - }; - - return URI; - })); - } (URI)); - - var Uri = URI.exports; - - /** - * @private - */ - function appendForwardSlash(url) { - if (url.length === 0 || url[url.length - 1] !== "/") { - url = `${url}/`; - } - return url; - } - - /** - * Clones an object, returning a new object containing the same properties. - * - * @function - * - * @param {Object} object The object to clone. - * @param {Boolean} [deep=false] If true, all properties will be deep cloned recursively. - * @returns {Object} The cloned object. - */ - function clone(object, deep) { - if (object === null || typeof object !== "object") { - return object; - } - - deep = defaultValue.defaultValue(deep, false); - - const result = new object.constructor(); - for (const propertyName in object) { - if (object.hasOwnProperty(propertyName)) { - let value = object[propertyName]; - if (deep) { - value = clone(value, deep); - } - result[propertyName] = value; - } - } - - return result; - } - - /** - * A function used to resolve a promise upon completion . - * @callback defer.resolve - * - * @param {*} value The resulting value. - */ - - /** - * A function used to reject a promise upon failure. - * @callback defer.reject - * - * @param {*} error The error. - */ - - /** - * An object which contains a promise object, and functions to resolve or reject the promise. - * - * @typedef {Object} defer.deferred - * @property {defer.resolve} resolve Resolves the promise when called. - * @property {defer.reject} reject Rejects the promise when called. - * @property {Promise} promise Promise object. - */ - - /** - * Creates a deferred object, containing a promise object, and functions to resolve or reject the promise. - * @returns {defer.deferred} - * @private - */ - function defer() { - let resolve; - let reject; - const promise = new Promise(function (res, rej) { - resolve = res; - reject = rej; - }); - - return { - resolve: resolve, - reject: reject, - promise: promise, - }; - } - - /** - * Given a relative Uri and a base Uri, returns the absolute Uri of the relative Uri. - * @function - * - * @param {String} relative The relative Uri. - * @param {String} [base] The base Uri. - * @returns {String} The absolute Uri of the given relative Uri. - * - * @example - * //absolute Uri will be "https://test.com/awesome.png"; - * const absoluteUri = Cesium.getAbsoluteUri('awesome.png', 'https://test.com'); - */ - function getAbsoluteUri(relative, base) { - let documentObject; - if (typeof document !== "undefined") { - documentObject = document; - } - - return getAbsoluteUri._implementation(relative, base, documentObject); - } - - getAbsoluteUri._implementation = function (relative, base, documentObject) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(relative)) { - throw new Check.DeveloperError("relative uri is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(base)) { - if (typeof documentObject === "undefined") { - return relative; - } - base = defaultValue.defaultValue(documentObject.baseURI, documentObject.location.href); - } - - const relativeUri = new Uri(relative); - if (relativeUri.scheme() !== "") { - return relativeUri.toString(); - } - return relativeUri.absoluteTo(base).toString(); - }; - - /** - * Given a URI, returns the base path of the URI. - * @function - * - * @param {String} uri The Uri. - * @param {Boolean} [includeQuery = false] Whether or not to include the query string and fragment form the uri - * @returns {String} The base path of the Uri. - * - * @example - * // basePath will be "/Gallery/"; - * const basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false'); - * - * // basePath will be "/Gallery/?value=true&example=false"; - * const basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false', true); - */ - function getBaseUri(uri, includeQuery) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(uri)) { - throw new Check.DeveloperError("uri is required."); - } - //>>includeEnd('debug'); - - let basePath = ""; - const i = uri.lastIndexOf("/"); - if (i !== -1) { - basePath = uri.substring(0, i + 1); - } - - if (!includeQuery) { - return basePath; - } - - uri = new Uri(uri); - if (uri.query().length !== 0) { - basePath += `?${uri.query()}`; - } - if (uri.fragment().length !== 0) { - basePath += `#${uri.fragment()}`; - } - - return basePath; - } - - /** - * Given a URI, returns the extension of the URI. - * @function getExtensionFromUri - * - * @param {String} uri The Uri. - * @returns {String} The extension of the Uri. - * - * @example - * //extension will be "czml"; - * const extension = Cesium.getExtensionFromUri('/Gallery/simple.czml?value=true&example=false'); - */ - function getExtensionFromUri(uri) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(uri)) { - throw new Check.DeveloperError("uri is required."); - } - //>>includeEnd('debug'); - - const uriObject = new Uri(uri); - uriObject.normalize(); - let path = uriObject.path(); - let index = path.lastIndexOf("/"); - if (index !== -1) { - path = path.substr(index + 1); - } - index = path.lastIndexOf("."); - if (index === -1) { - path = ""; - } else { - path = path.substr(index + 1); - } - return path; - } - - const context2DsByWidthAndHeight = {}; - - /** - * Extract a pixel array from a loaded image. Draws the image - * into a canvas so it can read the pixels back. - * - * @function getImagePixels - * - * @param {HTMLImageElement|ImageBitmap} image The image to extract pixels from. - * @param {Number} width The width of the image. If not defined, then image.width is assigned. - * @param {Number} height The height of the image. If not defined, then image.height is assigned. - * @returns {ImageData} The pixels of the image. - */ - function getImagePixels(image, width, height) { - if (!defaultValue.defined(width)) { - width = image.width; - } - if (!defaultValue.defined(height)) { - height = image.height; - } - - let context2DsByHeight = context2DsByWidthAndHeight[width]; - if (!defaultValue.defined(context2DsByHeight)) { - context2DsByHeight = {}; - context2DsByWidthAndHeight[width] = context2DsByHeight; - } - - let context2d = context2DsByHeight[height]; - if (!defaultValue.defined(context2d)) { - const canvas = document.createElement("canvas"); - canvas.width = width; - canvas.height = height; - context2d = canvas.getContext("2d"); - context2d.globalCompositeOperation = "copy"; - context2DsByHeight[height] = context2d; - } - - context2d.drawImage(image, 0, 0, width, height); - return context2d.getImageData(0, 0, width, height).data; - } - - const blobUriRegex = /^blob:/i; - - /** - * Determines if the specified uri is a blob uri. - * - * @function isBlobUri - * - * @param {String} uri The uri to test. - * @returns {Boolean} true when the uri is a blob uri; otherwise, false. - * - * @private - */ - function isBlobUri(uri) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.string("uri", uri); - //>>includeEnd('debug'); - - return blobUriRegex.test(uri); - } - - let a$1; - - /** - * Given a URL, determine whether that URL is considered cross-origin to the current page. - * - * @private - */ - function isCrossOriginUrl(url) { - if (!defaultValue.defined(a$1)) { - a$1 = document.createElement("a"); - } - - // copy window location into the anchor to get consistent results - // when the port is default for the protocol (e.g. 80 for HTTP) - a$1.href = window.location.href; - - // host includes both hostname and port if the port is not standard - const host = a$1.host; - const protocol = a$1.protocol; - - a$1.href = url; - // IE only absolutizes href on get, not set - // eslint-disable-next-line no-self-assign - a$1.href = a$1.href; - - return protocol !== a$1.protocol || host !== a$1.host; - } - - const dataUriRegex$1 = /^data:/i; - - /** - * Determines if the specified uri is a data uri. - * - * @function isDataUri - * - * @param {String} uri The uri to test. - * @returns {Boolean} true when the uri is a data uri; otherwise, false. - * - * @private - */ - function isDataUri(uri) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.string("uri", uri); - //>>includeEnd('debug'); - - return dataUriRegex$1.test(uri); - } - - /** - * @private - */ - function loadAndExecuteScript(url) { - const script = document.createElement("script"); - script.async = true; - script.src = url; - - return new Promise((resolve, reject) => { - if (window.crossOriginIsolated) { - script.setAttribute("crossorigin", "anonymous"); - } - - const head = document.getElementsByTagName("head")[0]; - script.onload = function () { - script.onload = undefined; - head.removeChild(script); - resolve(); - }; - script.onerror = function (e) { - reject(e); - }; - - head.appendChild(script); - }); - } - - /** - * Converts an object representing a set of name/value pairs into a query string, - * with names and values encoded properly for use in a URL. Values that are arrays - * will produce multiple values with the same name. - * @function objectToQuery - * - * @param {Object} obj The object containing data to encode. - * @returns {String} An encoded query string. - * - * - * @example - * const str = Cesium.objectToQuery({ - * key1 : 'some value', - * key2 : 'a/b', - * key3 : ['x', 'y'] - * }); - * - * @see queryToObject - * // str will be: - * // 'key1=some%20value&key2=a%2Fb&key3=x&key3=y' - */ - function objectToQuery(obj) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(obj)) { - throw new Check.DeveloperError("obj is required."); - } - //>>includeEnd('debug'); - - let result = ""; - for (const propName in obj) { - if (obj.hasOwnProperty(propName)) { - const value = obj[propName]; - - const part = `${encodeURIComponent(propName)}=`; - if (Array.isArray(value)) { - for (let i = 0, len = value.length; i < len; ++i) { - result += `${part + encodeURIComponent(value[i])}&`; - } - } else { - result += `${part + encodeURIComponent(value)}&`; - } - } - } - - // trim last & - result = result.slice(0, -1); - - // This function used to replace %20 with + which is more compact and readable. - // However, some servers didn't properly handle + as a space. - // https://github.com/CesiumGS/cesium/issues/2192 - - return result; - } - - /** - * Parses a query string into an object, where the keys and values of the object are the - * name/value pairs from the query string, decoded. If a name appears multiple times, - * the value in the object will be an array of values. - * @function queryToObject - * - * @param {String} queryString The query string. - * @returns {Object} An object containing the parameters parsed from the query string. - * - * - * @example - * const obj = Cesium.queryToObject('key1=some%20value&key2=a%2Fb&key3=x&key3=y'); - * // obj will be: - * // { - * // key1 : 'some value', - * // key2 : 'a/b', - * // key3 : ['x', 'y'] - * // } - * - * @see objectToQuery - */ - function queryToObject(queryString) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(queryString)) { - throw new Check.DeveloperError("queryString is required."); - } - //>>includeEnd('debug'); - - const result = {}; - if (queryString === "") { - return result; - } - const parts = queryString.replace(/\+/g, "%20").split(/[&;]/); - for (let i = 0, len = parts.length; i < len; ++i) { - const subparts = parts[i].split("="); - - const name = decodeURIComponent(subparts[0]); - let value = subparts[1]; - if (defaultValue.defined(value)) { - value = decodeURIComponent(value); - } else { - value = ""; - } - - const resultValue = result[name]; - if (typeof resultValue === "string") { - // expand the single value to an array - result[name] = [resultValue, value]; - } else if (Array.isArray(resultValue)) { - resultValue.push(value); - } else { - result[name] = value; - } - } - return result; - } - - /** - * State of the request. - * - * @enum {Number} - */ - const RequestState = { - /** - * Initial unissued state. - * - * @type Number - * @constant - */ - UNISSUED: 0, - - /** - * Issued but not yet active. Will become active when open slots are available. - * - * @type Number - * @constant - */ - ISSUED: 1, - - /** - * Actual http request has been sent. - * - * @type Number - * @constant - */ - ACTIVE: 2, - - /** - * Request completed successfully. - * - * @type Number - * @constant - */ - RECEIVED: 3, - - /** - * Request was cancelled, either explicitly or automatically because of low priority. - * - * @type Number - * @constant - */ - CANCELLED: 4, - - /** - * Request failed. - * - * @type Number - * @constant - */ - FAILED: 5, - }; - var RequestState$1 = Object.freeze(RequestState); - - /** - * An enum identifying the type of request. Used for finer grained logging and priority sorting. - * - * @enum {Number} - */ - const RequestType = { - /** - * Terrain request. - * - * @type Number - * @constant - */ - TERRAIN: 0, - - /** - * Imagery request. - * - * @type Number - * @constant - */ - IMAGERY: 1, - - /** - * 3D Tiles request. - * - * @type Number - * @constant - */ - TILES3D: 2, - - /** - * Other request. - * - * @type Number - * @constant - */ - OTHER: 3, - }; - var RequestType$1 = Object.freeze(RequestType); - - /** - * Stores information for making a request. In general this does not need to be constructed directly. - * - * @alias Request - * @constructor - - * @param {Object} [options] An object with the following properties: - * @param {String} [options.url] The url to request. - * @param {Request.RequestCallback} [options.requestFunction] The function that makes the actual data request. - * @param {Request.CancelCallback} [options.cancelFunction] The function that is called when the request is cancelled. - * @param {Request.PriorityCallback} [options.priorityFunction] The function that is called to update the request's priority, which occurs once per frame. - * @param {Number} [options.priority=0.0] The initial priority of the request. - * @param {Boolean} [options.throttle=false] Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the request will be throttled and sent based on priority. - * @param {Boolean} [options.throttleByServer=false] Whether to throttle the request by server. - * @param {RequestType} [options.type=RequestType.OTHER] The type of request. - */ - function Request(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const throttleByServer = defaultValue.defaultValue(options.throttleByServer, false); - const throttle = defaultValue.defaultValue(options.throttle, false); - - /** - * The URL to request. - * - * @type {String} - */ - this.url = options.url; - - /** - * The function that makes the actual data request. - * - * @type {Request.RequestCallback} - */ - this.requestFunction = options.requestFunction; - - /** - * The function that is called when the request is cancelled. - * - * @type {Request.CancelCallback} - */ - this.cancelFunction = options.cancelFunction; - - /** - * The function that is called to update the request's priority, which occurs once per frame. - * - * @type {Request.PriorityCallback} - */ - this.priorityFunction = options.priorityFunction; - - /** - * Priority is a unit-less value where lower values represent higher priority. - * For world-based objects, this is usually the distance from the camera. - * A request that does not have a priority function defaults to a priority of 0. - * - * If priorityFunction is defined, this value is updated every frame with the result of that call. - * - * @type {Number} - * @default 0.0 - */ - this.priority = defaultValue.defaultValue(options.priority, 0.0); - - /** - * Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the - * request will be throttled and sent based on priority. - * - * @type {Boolean} - * @readonly - * - * @default false - */ - this.throttle = throttle; - - /** - * Whether to throttle the request by server. Browsers typically support about 6-8 parallel connections - * for HTTP/1 servers, and an unlimited amount of connections for HTTP/2 servers. Setting this value - * to true is preferable for requests going through HTTP/1 servers. - * - * @type {Boolean} - * @readonly - * - * @default false - */ - this.throttleByServer = throttleByServer; - - /** - * Type of request. - * - * @type {RequestType} - * @readonly - * - * @default RequestType.OTHER - */ - this.type = defaultValue.defaultValue(options.type, RequestType$1.OTHER); - - /** - * A key used to identify the server that a request is going to. It is derived from the url's authority and scheme. - * - * @type {String} - * - * @private - */ - this.serverKey = undefined; - - /** - * The current state of the request. - * - * @type {RequestState} - * @readonly - */ - this.state = RequestState$1.UNISSUED; - - /** - * The requests's deferred promise. - * - * @type {Object} - * - * @private - */ - this.deferred = undefined; - - /** - * Whether the request was explicitly cancelled. - * - * @type {Boolean} - * - * @private - */ - this.cancelled = false; - } - - /** - * Mark the request as cancelled. - * - * @private - */ - Request.prototype.cancel = function () { - this.cancelled = true; - }; - - /** - * Duplicates a Request instance. - * - * @param {Request} [result] The object onto which to store the result. - * - * @returns {Request} The modified result parameter or a new Resource instance if one was not provided. - */ - Request.prototype.clone = function (result) { - if (!defaultValue.defined(result)) { - return new Request(this); - } - - result.url = this.url; - result.requestFunction = this.requestFunction; - result.cancelFunction = this.cancelFunction; - result.priorityFunction = this.priorityFunction; - result.priority = this.priority; - result.throttle = this.throttle; - result.throttleByServer = this.throttleByServer; - result.type = this.type; - result.serverKey = this.serverKey; - - // These get defaulted because the cloned request hasn't been issued - result.state = this.RequestState.UNISSUED; - result.deferred = undefined; - result.cancelled = false; - - return result; - }; - - /** - * Parses the result of XMLHttpRequest's getAllResponseHeaders() method into - * a dictionary. - * - * @function parseResponseHeaders - * - * @param {String} headerString The header string returned by getAllResponseHeaders(). The format is - * described here: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method - * @returns {Object} A dictionary of key/value pairs, where each key is the name of a header and the corresponding value - * is that header's value. - * - * @private - */ - function parseResponseHeaders(headerString) { - const headers = {}; - - if (!headerString) { - return headers; - } - - const headerPairs = headerString.split("\u000d\u000a"); - - for (let i = 0; i < headerPairs.length; ++i) { - const headerPair = headerPairs[i]; - // Can't use split() here because it does the wrong thing - // if the header value has the string ": " in it. - const index = headerPair.indexOf("\u003a\u0020"); - if (index > 0) { - const key = headerPair.substring(0, index); - const val = headerPair.substring(index + 2); - headers[key] = val; - } - } - - return headers; - } - - /** - * An event that is raised when a request encounters an error. - * - * @constructor - * @alias RequestErrorEvent - * - * @param {Number} [statusCode] The HTTP error status code, such as 404. - * @param {Object} [response] The response included along with the error. - * @param {String|Object} [responseHeaders] The response headers, represented either as an object literal or as a - * string in the format returned by XMLHttpRequest's getAllResponseHeaders() function. - */ - function RequestErrorEvent(statusCode, response, responseHeaders) { - /** - * The HTTP error status code, such as 404. If the error does not have a particular - * HTTP code, this property will be undefined. - * - * @type {Number} - */ - this.statusCode = statusCode; - - /** - * The response included along with the error. If the error does not include a response, - * this property will be undefined. - * - * @type {Object} - */ - this.response = response; - - /** - * The headers included in the response, represented as an object literal of key/value pairs. - * If the error does not include any headers, this property will be undefined. - * - * @type {Object} - */ - this.responseHeaders = responseHeaders; - - if (typeof this.responseHeaders === "string") { - this.responseHeaders = parseResponseHeaders(this.responseHeaders); - } - } - - /** - * Creates a string representing this RequestErrorEvent. - * @memberof RequestErrorEvent - * - * @returns {String} A string representing the provided RequestErrorEvent. - */ - RequestErrorEvent.prototype.toString = function () { - let str = "Request has failed."; - if (defaultValue.defined(this.statusCode)) { - str += ` Status Code: ${this.statusCode}`; - } - return str; - }; - - /** - * A generic utility class for managing subscribers for a particular event. - * This class is usually instantiated inside of a container class and - * exposed as a property for others to subscribe to. - * - * @alias Event - * @template Listener extends (...args: any[]) => void = (...args: any[]) => void - * @constructor - * @example - * MyObject.prototype.myListener = function(arg1, arg2) { - * this.myArg1Copy = arg1; - * this.myArg2Copy = arg2; - * } - * - * const myObjectInstance = new MyObject(); - * const evt = new Cesium.Event(); - * evt.addEventListener(MyObject.prototype.myListener, myObjectInstance); - * evt.raiseEvent('1', '2'); - * evt.removeEventListener(MyObject.prototype.myListener); - */ - function Event() { - this._listeners = []; - this._scopes = []; - this._toRemove = []; - this._insideRaiseEvent = false; - } - - Object.defineProperties(Event.prototype, { - /** - * The number of listeners currently subscribed to the event. - * @memberof Event.prototype - * @type {Number} - * @readonly - */ - numberOfListeners: { - get: function () { - return this._listeners.length - this._toRemove.length; - }, - }, - }); - - /** - * Registers a callback function to be executed whenever the event is raised. - * An optional scope can be provided to serve as the this pointer - * in which the function will execute. - * - * @param {Listener} listener The function to be executed when the event is raised. - * @param {Object} [scope] An optional object scope to serve as the this - * pointer in which the listener function will execute. - * @returns {Event.RemoveCallback} A function that will remove this event listener when invoked. - * - * @see Event#raiseEvent - * @see Event#removeEventListener - */ - Event.prototype.addEventListener = function (listener, scope) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.func("listener", listener); - //>>includeEnd('debug'); - - this._listeners.push(listener); - this._scopes.push(scope); - - const event = this; - return function () { - event.removeEventListener(listener, scope); - }; - }; - - /** - * Unregisters a previously registered callback. - * - * @param {Listener} listener The function to be unregistered. - * @param {Object} [scope] The scope that was originally passed to addEventListener. - * @returns {Boolean} true if the listener was removed; false if the listener and scope are not registered with the event. - * - * @see Event#addEventListener - * @see Event#raiseEvent - */ - Event.prototype.removeEventListener = function (listener, scope) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.func("listener", listener); - //>>includeEnd('debug'); - - const listeners = this._listeners; - const scopes = this._scopes; - - let index = -1; - for (let i = 0; i < listeners.length; i++) { - if (listeners[i] === listener && scopes[i] === scope) { - index = i; - break; - } - } - - if (index !== -1) { - if (this._insideRaiseEvent) { - //In order to allow removing an event subscription from within - //a callback, we don't actually remove the items here. Instead - //remember the index they are at and undefined their value. - this._toRemove.push(index); - listeners[index] = undefined; - scopes[index] = undefined; - } else { - listeners.splice(index, 1); - scopes.splice(index, 1); - } - return true; - } - - return false; - }; - - function compareNumber(a, b) { - return b - a; - } - - /** - * Raises the event by calling each registered listener with all supplied arguments. - * - * @param {...Parameters} arguments This method takes any number of parameters and passes them through to the listener functions. - * - * @see Event#addEventListener - * @see Event#removeEventListener - */ - Event.prototype.raiseEvent = function () { - this._insideRaiseEvent = true; - - let i; - const listeners = this._listeners; - const scopes = this._scopes; - let length = listeners.length; - - for (i = 0; i < length; i++) { - const listener = listeners[i]; - if (defaultValue.defined(listener)) { - listeners[i].apply(scopes[i], arguments); - } - } - - //Actually remove items removed in removeEventListener. - const toRemove = this._toRemove; - length = toRemove.length; - if (length > 0) { - toRemove.sort(compareNumber); - for (i = 0; i < length; i++) { - const index = toRemove[i]; - listeners.splice(index, 1); - scopes.splice(index, 1); - } - toRemove.length = 0; - } - - this._insideRaiseEvent = false; - }; - - /** - * Array implementation of a heap. - * - * @alias Heap - * @constructor - * @private - * - * @param {Object} options Object with the following properties: - * @param {Heap.ComparatorCallback} options.comparator The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index. - */ - function Heap(options) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("options", options); - Check.Check.defined("options.comparator", options.comparator); - //>>includeEnd('debug'); - - this._comparator = options.comparator; - this._array = []; - this._length = 0; - this._maximumLength = undefined; - } - - Object.defineProperties(Heap.prototype, { - /** - * Gets the length of the heap. - * - * @memberof Heap.prototype - * - * @type {Number} - * @readonly - */ - length: { - get: function () { - return this._length; - }, - }, - - /** - * Gets the internal array. - * - * @memberof Heap.prototype - * - * @type {Array} - * @readonly - */ - internalArray: { - get: function () { - return this._array; - }, - }, - - /** - * Gets and sets the maximum length of the heap. - * - * @memberof Heap.prototype - * - * @type {Number} - */ - maximumLength: { - get: function () { - return this._maximumLength; - }, - set: function (value) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.greaterThanOrEquals("maximumLength", value, 0); - //>>includeEnd('debug'); - const originalLength = this._length; - if (value < originalLength) { - const array = this._array; - // Remove trailing references - for (let i = value; i < originalLength; ++i) { - array[i] = undefined; - } - this._length = value; - array.length = value; - } - this._maximumLength = value; - }, - }, - - /** - * The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index. - * - * @memberof Heap.prototype - * - * @type {Heap.ComparatorCallback} - */ - comparator: { - get: function () { - return this._comparator; - }, - }, - }); - - function swap(array, a, b) { - const temp = array[a]; - array[a] = array[b]; - array[b] = temp; - } - - /** - * Resizes the internal array of the heap. - * - * @param {Number} [length] The length to resize internal array to. Defaults to the current length of the heap. - */ - Heap.prototype.reserve = function (length) { - length = defaultValue.defaultValue(length, this._length); - this._array.length = length; - }; - - /** - * Update the heap so that index and all descendants satisfy the heap property. - * - * @param {Number} [index=0] The starting index to heapify from. - */ - Heap.prototype.heapify = function (index) { - index = defaultValue.defaultValue(index, 0); - const length = this._length; - const comparator = this._comparator; - const array = this._array; - let candidate = -1; - let inserting = true; - - while (inserting) { - const right = 2 * (index + 1); - const left = right - 1; - - if (left < length && comparator(array[left], array[index]) < 0) { - candidate = left; - } else { - candidate = index; - } - - if (right < length && comparator(array[right], array[candidate]) < 0) { - candidate = right; - } - if (candidate !== index) { - swap(array, candidate, index); - index = candidate; - } else { - inserting = false; - } - } - }; - - /** - * Resort the heap. - */ - Heap.prototype.resort = function () { - const length = this._length; - for (let i = Math.ceil(length / 2); i >= 0; --i) { - this.heapify(i); - } - }; - - /** - * Insert an element into the heap. If the length would grow greater than maximumLength - * of the heap, extra elements are removed. - * - * @param {*} element The element to insert - * - * @return {*} The element that was removed from the heap if the heap is at full capacity. - */ - Heap.prototype.insert = function (element) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("element", element); - //>>includeEnd('debug'); - - const array = this._array; - const comparator = this._comparator; - const maximumLength = this._maximumLength; - - let index = this._length++; - if (index < array.length) { - array[index] = element; - } else { - array.push(element); - } - - while (index !== 0) { - const parent = Math.floor((index - 1) / 2); - if (comparator(array[index], array[parent]) < 0) { - swap(array, index, parent); - index = parent; - } else { - break; - } - } - - let removedElement; - - if (defaultValue.defined(maximumLength) && this._length > maximumLength) { - removedElement = array[maximumLength]; - this._length = maximumLength; - } - - return removedElement; - }; - - /** - * Remove the element specified by index from the heap and return it. - * - * @param {Number} [index=0] The index to remove. - * @returns {*} The specified element of the heap. - */ - Heap.prototype.pop = function (index) { - index = defaultValue.defaultValue(index, 0); - if (this._length === 0) { - return undefined; - } - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number.lessThan("index", index, this._length); - //>>includeEnd('debug'); - - const array = this._array; - const root = array[index]; - swap(array, index, --this._length); - this.heapify(index); - array[this._length] = undefined; // Remove trailing reference - return root; - }; - - function sortRequests(a, b) { - return a.priority - b.priority; - } - - const statistics = { - numberOfAttemptedRequests: 0, - numberOfActiveRequests: 0, - numberOfCancelledRequests: 0, - numberOfCancelledActiveRequests: 0, - numberOfFailedRequests: 0, - numberOfActiveRequestsEver: 0, - lastNumberOfActiveRequests: 0, - }; - - let priorityHeapLength = 20; - const requestHeap = new Heap({ - comparator: sortRequests, - }); - requestHeap.maximumLength = priorityHeapLength; - requestHeap.reserve(priorityHeapLength); - - const activeRequests = []; - let numberOfActiveRequestsByServer = {}; - - const pageUri = - typeof document !== "undefined" ? new Uri(document.location.href) : new Uri(); - - const requestCompletedEvent = new Event(); - - /** - * The request scheduler is used to track and constrain the number of active requests in order to prioritize incoming requests. The ability - * to retain control over the number of requests in CesiumJS is important because due to events such as changes in the camera position, - * a lot of new requests may be generated and a lot of in-flight requests may become redundant. The request scheduler manually constrains the - * number of requests so that newer requests wait in a shorter queue and don't have to compete for bandwidth with requests that have expired. - * - * @namespace RequestScheduler - * - */ - function RequestScheduler() {} - - /** - * The maximum number of simultaneous active requests. Un-throttled requests do not observe this limit. - * @type {Number} - * @default 50 - */ - RequestScheduler.maximumRequests = 50; - - /** - * The maximum number of simultaneous active requests per server. Un-throttled requests or servers specifically - * listed in {@link requestsByServer} do not observe this limit. - * @type {Number} - * @default 6 - */ - RequestScheduler.maximumRequestsPerServer = 6; - - /** - * A per server key list of overrides to use for throttling instead of maximumRequestsPerServer - * @type {Object} - * - * @example - * RequestScheduler.requestsByServer = { - * 'api.cesium.com:443': 18, - * 'assets.cesium.com:443': 18 - * }; - */ - RequestScheduler.requestsByServer = { - "api.cesium.com:443": 18, - "assets.cesium.com:443": 18, - }; - - /** - * Specifies if the request scheduler should throttle incoming requests, or let the browser queue requests under its control. - * @type {Boolean} - * @default true - */ - RequestScheduler.throttleRequests = true; - - /** - * When true, log statistics to the console every frame - * @type {Boolean} - * @default false - * @private - */ - RequestScheduler.debugShowStatistics = false; - - /** - * An event that's raised when a request is completed. Event handlers are passed - * the error object if the request fails. - * - * @type {Event} - * @default Event() - * @private - */ - RequestScheduler.requestCompletedEvent = requestCompletedEvent; - - Object.defineProperties(RequestScheduler, { - /** - * Returns the statistics used by the request scheduler. - * - * @memberof RequestScheduler - * - * @type Object - * @readonly - * @private - */ - statistics: { - get: function () { - return statistics; - }, - }, - - /** - * The maximum size of the priority heap. This limits the number of requests that are sorted by priority. Only applies to requests that are not yet active. - * - * @memberof RequestScheduler - * - * @type {Number} - * @default 20 - * @private - */ - priorityHeapLength: { - get: function () { - return priorityHeapLength; - }, - set: function (value) { - // If the new length shrinks the heap, need to cancel some of the requests. - // Since this value is not intended to be tweaked regularly it is fine to just cancel the high priority requests. - if (value < priorityHeapLength) { - while (requestHeap.length > value) { - const request = requestHeap.pop(); - cancelRequest(request); - } - } - priorityHeapLength = value; - requestHeap.maximumLength = value; - requestHeap.reserve(value); - }, - }, - }); - - function updatePriority(request) { - if (defaultValue.defined(request.priorityFunction)) { - request.priority = request.priorityFunction(); - } - } - - /** - * Check if there are open slots for a particular server key. If desiredRequests is greater than 1, this checks if the queue has room for scheduling multiple requests. - * @param {String} serverKey The server key returned by {@link RequestScheduler.getServerKey}. - * @param {Number} [desiredRequests=1] How many requests the caller plans to request - * @return {Boolean} True if there are enough open slots for desiredRequests more requests. - * @private - */ - RequestScheduler.serverHasOpenSlots = function (serverKey, desiredRequests) { - desiredRequests = defaultValue.defaultValue(desiredRequests, 1); - - const maxRequests = defaultValue.defaultValue( - RequestScheduler.requestsByServer[serverKey], - RequestScheduler.maximumRequestsPerServer - ); - const hasOpenSlotsServer = - numberOfActiveRequestsByServer[serverKey] + desiredRequests <= maxRequests; - - return hasOpenSlotsServer; - }; - - /** - * Check if the priority heap has open slots, regardless of which server they - * are from. This is used in {@link Multiple3DTileContent} for determining when - * all requests can be scheduled - * @param {Number} desiredRequests The number of requests the caller intends to make - * @return {Boolean} true if the heap has enough available slots to meet the desiredRequests. false otherwise. - * - * @private - */ - RequestScheduler.heapHasOpenSlots = function (desiredRequests) { - const hasOpenSlotsHeap = - requestHeap.length + desiredRequests <= priorityHeapLength; - return hasOpenSlotsHeap; - }; - - function issueRequest(request) { - if (request.state === RequestState$1.UNISSUED) { - request.state = RequestState$1.ISSUED; - request.deferred = defer(); - } - return request.deferred.promise; - } - - function getRequestReceivedFunction(request) { - return function (results) { - if (request.state === RequestState$1.CANCELLED) { - // If the data request comes back but the request is cancelled, ignore it. - return; - } - // explicitly set to undefined to ensure GC of request response data. See #8843 - const deferred = request.deferred; - - --statistics.numberOfActiveRequests; - --numberOfActiveRequestsByServer[request.serverKey]; - requestCompletedEvent.raiseEvent(); - request.state = RequestState$1.RECEIVED; - request.deferred = undefined; - - deferred.resolve(results); - }; - } - - function getRequestFailedFunction(request) { - return function (error) { - if (request.state === RequestState$1.CANCELLED) { - // If the data request comes back but the request is cancelled, ignore it. - return; - } - ++statistics.numberOfFailedRequests; - --statistics.numberOfActiveRequests; - --numberOfActiveRequestsByServer[request.serverKey]; - requestCompletedEvent.raiseEvent(error); - request.state = RequestState$1.FAILED; - request.deferred.reject(error); - }; - } - - function startRequest(request) { - const promise = issueRequest(request); - request.state = RequestState$1.ACTIVE; - activeRequests.push(request); - ++statistics.numberOfActiveRequests; - ++statistics.numberOfActiveRequestsEver; - ++numberOfActiveRequestsByServer[request.serverKey]; - request - .requestFunction() - .then(getRequestReceivedFunction(request)) - .catch(getRequestFailedFunction(request)); - return promise; - } - - function cancelRequest(request) { - const active = request.state === RequestState$1.ACTIVE; - request.state = RequestState$1.CANCELLED; - ++statistics.numberOfCancelledRequests; - // check that deferred has not been cleared since cancelRequest can be called - // on a finished request, e.g. by clearForSpecs during tests - if (defaultValue.defined(request.deferred)) { - const deferred = request.deferred; - request.deferred = undefined; - deferred.reject(); - } - - if (active) { - --statistics.numberOfActiveRequests; - --numberOfActiveRequestsByServer[request.serverKey]; - ++statistics.numberOfCancelledActiveRequests; - } - - if (defaultValue.defined(request.cancelFunction)) { - request.cancelFunction(); - } - } - - /** - * Sort requests by priority and start requests. - * @private - */ - RequestScheduler.update = function () { - let i; - let request; - - // Loop over all active requests. Cancelled, failed, or received requests are removed from the array to make room for new requests. - let removeCount = 0; - const activeLength = activeRequests.length; - for (i = 0; i < activeLength; ++i) { - request = activeRequests[i]; - if (request.cancelled) { - // Request was explicitly cancelled - cancelRequest(request); - } - if (request.state !== RequestState$1.ACTIVE) { - // Request is no longer active, remove from array - ++removeCount; - continue; - } - if (removeCount > 0) { - // Shift back to fill in vacated slots from completed requests - activeRequests[i - removeCount] = request; - } - } - activeRequests.length -= removeCount; - - // Update priority of issued requests and resort the heap - const issuedRequests = requestHeap.internalArray; - const issuedLength = requestHeap.length; - for (i = 0; i < issuedLength; ++i) { - updatePriority(issuedRequests[i]); - } - requestHeap.resort(); - - // Get the number of open slots and fill with the highest priority requests. - // Un-throttled requests are automatically added to activeRequests, so activeRequests.length may exceed maximumRequests - const openSlots = Math.max( - RequestScheduler.maximumRequests - activeRequests.length, - 0 - ); - let filledSlots = 0; - while (filledSlots < openSlots && requestHeap.length > 0) { - // Loop until all open slots are filled or the heap becomes empty - request = requestHeap.pop(); - if (request.cancelled) { - // Request was explicitly cancelled - cancelRequest(request); - continue; - } - - if ( - request.throttleByServer && - !RequestScheduler.serverHasOpenSlots(request.serverKey) - ) { - // Open slots are available, but the request is throttled by its server. Cancel and try again later. - cancelRequest(request); - continue; - } - - startRequest(request); - ++filledSlots; - } - - updateStatistics(); - }; - - /** - * Get the server key from a given url. - * - * @param {String} url The url. - * @returns {String} The server key. - * @private - */ - RequestScheduler.getServerKey = function (url) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.string("url", url); - //>>includeEnd('debug'); - - let uri = new Uri(url); - if (uri.scheme() === "") { - uri = new Uri(url).absoluteTo(pageUri); - uri.normalize(); - } - - let serverKey = uri.authority(); - if (!/:/.test(serverKey)) { - // If the authority does not contain a port number, add port 443 for https or port 80 for http - serverKey = `${serverKey}:${uri.scheme() === "https" ? "443" : "80"}`; - } - - const length = numberOfActiveRequestsByServer[serverKey]; - if (!defaultValue.defined(length)) { - numberOfActiveRequestsByServer[serverKey] = 0; - } - - return serverKey; - }; - - /** - * Issue a request. If request.throttle is false, the request is sent immediately. Otherwise the request will be - * queued and sorted by priority before being sent. - * - * @param {Request} request The request object. - * - * @returns {Promise|undefined} A Promise for the requested data, or undefined if this request does not have high enough priority to be issued. - * - * @private - */ - RequestScheduler.request = function (request) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("request", request); - Check.Check.typeOf.string("request.url", request.url); - Check.Check.typeOf.func("request.requestFunction", request.requestFunction); - //>>includeEnd('debug'); - - if (isDataUri(request.url) || isBlobUri(request.url)) { - requestCompletedEvent.raiseEvent(); - request.state = RequestState$1.RECEIVED; - return request.requestFunction(); - } - - ++statistics.numberOfAttemptedRequests; - - if (!defaultValue.defined(request.serverKey)) { - request.serverKey = RequestScheduler.getServerKey(request.url); - } - - if ( - RequestScheduler.throttleRequests && - request.throttleByServer && - !RequestScheduler.serverHasOpenSlots(request.serverKey) - ) { - // Server is saturated. Try again later. - return undefined; - } - - if (!RequestScheduler.throttleRequests || !request.throttle) { - return startRequest(request); - } - - if (activeRequests.length >= RequestScheduler.maximumRequests) { - // Active requests are saturated. Try again later. - return undefined; - } - - // Insert into the priority heap and see if a request was bumped off. If this request is the lowest - // priority it will be returned. - updatePriority(request); - const removedRequest = requestHeap.insert(request); - - if (defaultValue.defined(removedRequest)) { - if (removedRequest === request) { - // Request does not have high enough priority to be issued - return undefined; - } - // A previously issued request has been bumped off the priority heap, so cancel it - cancelRequest(removedRequest); - } - - return issueRequest(request); - }; - - function updateStatistics() { - if (!RequestScheduler.debugShowStatistics) { - return; - } - - if ( - statistics.numberOfActiveRequests === 0 && - statistics.lastNumberOfActiveRequests > 0 - ) { - if (statistics.numberOfAttemptedRequests > 0) { - console.log( - `Number of attempted requests: ${statistics.numberOfAttemptedRequests}` - ); - statistics.numberOfAttemptedRequests = 0; - } - - if (statistics.numberOfCancelledRequests > 0) { - console.log( - `Number of cancelled requests: ${statistics.numberOfCancelledRequests}` - ); - statistics.numberOfCancelledRequests = 0; - } - - if (statistics.numberOfCancelledActiveRequests > 0) { - console.log( - `Number of cancelled active requests: ${statistics.numberOfCancelledActiveRequests}` - ); - statistics.numberOfCancelledActiveRequests = 0; - } - - if (statistics.numberOfFailedRequests > 0) { - console.log( - `Number of failed requests: ${statistics.numberOfFailedRequests}` - ); - statistics.numberOfFailedRequests = 0; - } - } - - statistics.lastNumberOfActiveRequests = statistics.numberOfActiveRequests; - } - - /** - * For testing only. Clears any requests that may not have completed from previous tests. - * - * @private - */ - RequestScheduler.clearForSpecs = function () { - while (requestHeap.length > 0) { - const request = requestHeap.pop(); - cancelRequest(request); - } - const length = activeRequests.length; - for (let i = 0; i < length; ++i) { - cancelRequest(activeRequests[i]); - } - activeRequests.length = 0; - numberOfActiveRequestsByServer = {}; - - // Clear stats - statistics.numberOfAttemptedRequests = 0; - statistics.numberOfActiveRequests = 0; - statistics.numberOfCancelledRequests = 0; - statistics.numberOfCancelledActiveRequests = 0; - statistics.numberOfFailedRequests = 0; - statistics.numberOfActiveRequestsEver = 0; - statistics.lastNumberOfActiveRequests = 0; - }; - - /** - * For testing only. - * - * @private - */ - RequestScheduler.numberOfActiveRequestsByServer = function (serverKey) { - return numberOfActiveRequestsByServer[serverKey]; - }; - - /** - * For testing only. - * - * @private - */ - RequestScheduler.requestHeap = requestHeap; - - /** - * A singleton that contains all of the servers that are trusted. Credentials will be sent with - * any requests to these servers. - * - * @namespace TrustedServers - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - */ - const TrustedServers = {}; - let _servers = {}; - - /** - * Adds a trusted server to the registry - * - * @param {String} host The host to be added. - * @param {Number} port The port used to access the host. - * - * @example - * // Add a trusted server - * TrustedServers.add('my.server.com', 80); - */ - TrustedServers.add = function (host, port) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(host)) { - throw new Check.DeveloperError("host is required."); - } - if (!defaultValue.defined(port) || port <= 0) { - throw new Check.DeveloperError("port is required to be greater than 0."); - } - //>>includeEnd('debug'); - - const authority = `${host.toLowerCase()}:${port}`; - if (!defaultValue.defined(_servers[authority])) { - _servers[authority] = true; - } - }; - - /** - * Removes a trusted server from the registry - * - * @param {String} host The host to be removed. - * @param {Number} port The port used to access the host. - * - * @example - * // Remove a trusted server - * TrustedServers.remove('my.server.com', 80); - */ - TrustedServers.remove = function (host, port) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(host)) { - throw new Check.DeveloperError("host is required."); - } - if (!defaultValue.defined(port) || port <= 0) { - throw new Check.DeveloperError("port is required to be greater than 0."); - } - //>>includeEnd('debug'); - - const authority = `${host.toLowerCase()}:${port}`; - if (defaultValue.defined(_servers[authority])) { - delete _servers[authority]; - } - }; - - function getAuthority(url) { - const uri = new Uri(url); - uri.normalize(); - - // Removes username:password@ so we just have host[:port] - let authority = uri.authority(); - if (authority.length === 0) { - return undefined; // Relative URL - } - uri.authority(authority); - - if (authority.indexOf("@") !== -1) { - const parts = authority.split("@"); - authority = parts[1]; - } - - // If the port is missing add one based on the scheme - if (authority.indexOf(":") === -1) { - let scheme = uri.scheme(); - if (scheme.length === 0) { - scheme = window.location.protocol; - scheme = scheme.substring(0, scheme.length - 1); - } - if (scheme === "http") { - authority += ":80"; - } else if (scheme === "https") { - authority += ":443"; - } else { - return undefined; - } - } - - return authority; - } - - /** - * Tests whether a server is trusted or not. The server must have been added with the port if it is included in the url. - * - * @param {String} url The url to be tested against the trusted list - * - * @returns {boolean} Returns true if url is trusted, false otherwise. - * - * @example - * // Add server - * TrustedServers.add('my.server.com', 81); - * - * // Check if server is trusted - * if (TrustedServers.contains('https://my.server.com:81/path/to/file.png')) { - * // my.server.com:81 is trusted - * } - * if (TrustedServers.contains('https://my.server.com/path/to/file.png')) { - * // my.server.com isn't trusted - * } - */ - TrustedServers.contains = function (url) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(url)) { - throw new Check.DeveloperError("url is required."); - } - //>>includeEnd('debug'); - const authority = getAuthority(url); - if (defaultValue.defined(authority) && defaultValue.defined(_servers[authority])) { - return true; - } - - return false; - }; - - /** - * Clears the registry - * - * @example - * // Remove a trusted server - * TrustedServers.clear(); - */ - TrustedServers.clear = function () { - _servers = {}; - }; - var TrustedServers$1 = TrustedServers; - - const xhrBlobSupported = (function () { - try { - const xhr = new XMLHttpRequest(); - xhr.open("GET", "#", true); - xhr.responseType = "blob"; - return xhr.responseType === "blob"; - } catch (e) { - return false; - } - })(); - - /** - * Parses a query string and returns the object equivalent. - * - * @param {Uri} uri The Uri with a query object. - * @param {Resource} resource The Resource that will be assigned queryParameters. - * @param {Boolean} merge If true, we'll merge with the resource's existing queryParameters. Otherwise they will be replaced. - * @param {Boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in uri will take precedence. - * - * @private - */ - function parseQuery(uri, resource, merge, preserveQueryParameters) { - const queryString = uri.query(); - if (queryString.length === 0) { - return {}; - } - - let query; - // Special case we run into where the querystring is just a string, not key/value pairs - if (queryString.indexOf("=") === -1) { - const result = {}; - result[queryString] = undefined; - query = result; - } else { - query = queryToObject(queryString); - } - - if (merge) { - resource._queryParameters = combineQueryParameters( - query, - resource._queryParameters, - preserveQueryParameters - ); - } else { - resource._queryParameters = query; - } - uri.search(""); - } - - /** - * Converts a query object into a string. - * - * @param {Uri} uri The Uri object that will have the query object set. - * @param {Resource} resource The resource that has queryParameters - * - * @private - */ - function stringifyQuery(uri, resource) { - const queryObject = resource._queryParameters; - - const keys = Object.keys(queryObject); - - // We have 1 key with an undefined value, so this is just a string, not key/value pairs - if (keys.length === 1 && !defaultValue.defined(queryObject[keys[0]])) { - uri.search(keys[0]); - } else { - uri.search(objectToQuery(queryObject)); - } - } - - /** - * Clones a value if it is defined, otherwise returns the default value - * - * @param {*} [val] The value to clone. - * @param {*} [defaultVal] The default value. - * - * @returns {*} A clone of val or the defaultVal. - * - * @private - */ - function defaultClone(val, defaultVal) { - if (!defaultValue.defined(val)) { - return defaultVal; - } - - return defaultValue.defined(val.clone) ? val.clone() : clone(val); - } - - /** - * Checks to make sure the Resource isn't already being requested. - * - * @param {Request} request The request to check. - * - * @private - */ - function checkAndResetRequest(request) { - if ( - request.state === RequestState$1.ISSUED || - request.state === RequestState$1.ACTIVE - ) { - throw new RuntimeError.RuntimeError("The Resource is already being fetched."); - } - - request.state = RequestState$1.UNISSUED; - request.deferred = undefined; - } - - /** - * This combines a map of query parameters. - * - * @param {Object} q1 The first map of query parameters. Values in this map will take precedence if preserveQueryParameters is false. - * @param {Object} q2 The second map of query parameters. - * @param {Boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in q1 will take precedence. - * - * @returns {Object} The combined map of query parameters. - * - * @example - * const q1 = { - * a: 1, - * b: 2 - * }; - * const q2 = { - * a: 3, - * c: 4 - * }; - * const q3 = { - * b: [5, 6], - * d: 7 - * } - * - * // Returns - * // { - * // a: [1, 3], - * // b: 2, - * // c: 4 - * // }; - * combineQueryParameters(q1, q2, true); - * - * // Returns - * // { - * // a: 1, - * // b: 2, - * // c: 4 - * // }; - * combineQueryParameters(q1, q2, false); - * - * // Returns - * // { - * // a: 1, - * // b: [2, 5, 6], - * // d: 7 - * // }; - * combineQueryParameters(q1, q3, true); - * - * // Returns - * // { - * // a: 1, - * // b: 2, - * // d: 7 - * // }; - * combineQueryParameters(q1, q3, false); - * - * @private - */ - function combineQueryParameters(q1, q2, preserveQueryParameters) { - if (!preserveQueryParameters) { - return combine.combine(q1, q2); - } - - const result = clone(q1, true); - for (const param in q2) { - if (q2.hasOwnProperty(param)) { - let value = result[param]; - const q2Value = q2[param]; - if (defaultValue.defined(value)) { - if (!Array.isArray(value)) { - value = result[param] = [value]; - } - - result[param] = value.concat(q2Value); - } else { - result[param] = Array.isArray(q2Value) ? q2Value.slice() : q2Value; - } - } - } - - return result; - } - - /** - * @typedef {Object} Resource.ConstructorOptions - * - * Initialization options for the Resource constructor - * - * @property {String} url The url of the resource. - * @property {Object} [queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @property {Object} [templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @property {Object} [headers={}] Additional HTTP headers that will be sent. - * @property {Proxy} [proxy] A proxy to be used when loading the resource. - * @property {Resource.RetryCallback} [retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @property {Number} [retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @property {Request} [request] A Request object that will be used. Intended for internal use only. - */ - - /** - * A resource that includes the location and any other parameters we need to retrieve it or create derived resources. It also provides the ability to retry requests. - * - * @alias Resource - * @constructor - * - * @param {String|Resource.ConstructorOptions} options A url or an object describing initialization options - * - * @example - * function refreshTokenRetryCallback(resource, error) { - * if (error.statusCode === 403) { - * // 403 status code means a new token should be generated - * return getNewAccessToken() - * .then(function(token) { - * resource.queryParameters.access_token = token; - * return true; - * }) - * .catch(function() { - * return false; - * }); - * } - * - * return false; - * } - * - * const resource = new Resource({ - * url: 'http://server.com/path/to/resource.json', - * proxy: new DefaultProxy('/proxy/'), - * headers: { - * 'X-My-Header': 'valueOfHeader' - * }, - * queryParameters: { - * 'access_token': '123-435-456-000' - * }, - * retryCallback: refreshTokenRetryCallback, - * retryAttempts: 1 - * }); - */ - function Resource(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - if (typeof options === "string") { - options = { - url: options, - }; - } - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.string("options.url", options.url); - //>>includeEnd('debug'); - - this._url = undefined; - this._templateValues = defaultClone(options.templateValues, {}); - this._queryParameters = defaultClone(options.queryParameters, {}); - - /** - * Additional HTTP headers that will be sent with the request. - * - * @type {Object} - */ - this.headers = defaultClone(options.headers, {}); - - /** - * A Request object that will be used. Intended for internal use only. - * - * @type {Request} - */ - this.request = defaultValue.defaultValue(options.request, new Request()); - - /** - * A proxy to be used when loading the resource. - * - * @type {Proxy} - */ - this.proxy = options.proxy; - - /** - * Function to call when a request for this resource fails. If it returns true or a Promise that resolves to true, the request will be retried. - * - * @type {Function} - */ - this.retryCallback = options.retryCallback; - - /** - * The number of times the retryCallback should be called before giving up. - * - * @type {Number} - */ - this.retryAttempts = defaultValue.defaultValue(options.retryAttempts, 0); - this._retryCount = 0; - - const uri = new Uri(options.url); - parseQuery(uri, this, true, true); - - // Remove the fragment as it's not sent with a request - uri.fragment(""); - - this._url = uri.toString(); - } - - /** - * A helper function to create a resource depending on whether we have a String or a Resource - * - * @param {Resource|String} resource A Resource or a String to use when creating a new Resource. - * - * @returns {Resource} If resource is a String, a Resource constructed with the url and options. Otherwise the resource parameter is returned. - * - * @private - */ - Resource.createIfNeeded = function (resource) { - if (resource instanceof Resource) { - // Keep existing request object. This function is used internally to duplicate a Resource, so that it can't - // be modified outside of a class that holds it (eg. an imagery or terrain provider). Since the Request objects - // are managed outside of the providers, by the tile loading code, we want to keep the request property the same so if it is changed - // in the underlying tiling code the requests for this resource will use it. - return resource.getDerivedResource({ - request: resource.request, - }); - } - - if (typeof resource !== "string") { - return resource; - } - - return new Resource({ - url: resource, - }); - }; - - let supportsImageBitmapOptionsPromise; - /** - * A helper function to check whether createImageBitmap supports passing ImageBitmapOptions. - * - * @returns {Promise} A promise that resolves to true if this browser supports creating an ImageBitmap with options. - * - * @private - */ - Resource.supportsImageBitmapOptions = function () { - // Until the HTML folks figure out what to do about this, we need to actually try loading an image to - // know if this browser supports passing options to the createImageBitmap function. - // https://github.com/whatwg/html/pull/4248 - // - // We also need to check whether the colorSpaceConversion option is supported. - // We do this by loading a PNG with an embedded color profile, first with - // colorSpaceConversion: "none" and then with colorSpaceConversion: "default". - // If the pixel color is different then we know the option is working. - // As of Webkit 17612.3.6.1.6 the createImageBitmap promise resolves but the - // option is not actually supported. - if (defaultValue.defined(supportsImageBitmapOptionsPromise)) { - return supportsImageBitmapOptionsPromise; - } - - if (typeof createImageBitmap !== "function") { - supportsImageBitmapOptionsPromise = Promise.resolve(false); - return supportsImageBitmapOptionsPromise; - } - - const imageDataUri = - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABGdBTUEAAE4g3rEiDgAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADElEQVQI12Ng6GAAAAEUAIngE3ZiAAAAAElFTkSuQmCC"; - - supportsImageBitmapOptionsPromise = Resource.fetchBlob({ - url: imageDataUri, - }) - .then(function (blob) { - const imageBitmapOptions = { - imageOrientation: "flipY", // default is "none" - premultiplyAlpha: "none", // default is "default" - colorSpaceConversion: "none", // default is "default" - }; - return Promise.all([ - createImageBitmap(blob, imageBitmapOptions), - createImageBitmap(blob), - ]); - }) - .then(function (imageBitmaps) { - // Check whether the colorSpaceConversion option had any effect on the green channel - const colorWithOptions = getImagePixels(imageBitmaps[0]); - const colorWithDefaults = getImagePixels(imageBitmaps[1]); - return colorWithOptions[1] !== colorWithDefaults[1]; - }) - .catch(function () { - return false; - }); - - return supportsImageBitmapOptionsPromise; - }; - - Object.defineProperties(Resource, { - /** - * Returns true if blobs are supported. - * - * @memberof Resource - * @type {Boolean} - * - * @readonly - */ - isBlobSupported: { - get: function () { - return xhrBlobSupported; - }, - }, - }); - - Object.defineProperties(Resource.prototype, { - /** - * Query parameters appended to the url. - * - * @memberof Resource.prototype - * @type {Object} - * - * @readonly - */ - queryParameters: { - get: function () { - return this._queryParameters; - }, - }, - - /** - * The key/value pairs used to replace template parameters in the url. - * - * @memberof Resource.prototype - * @type {Object} - * - * @readonly - */ - templateValues: { - get: function () { - return this._templateValues; - }, - }, - - /** - * The url to the resource with template values replaced, query string appended and encoded by proxy if one was set. - * - * @memberof Resource.prototype - * @type {String} - */ - url: { - get: function () { - return this.getUrlComponent(true, true); - }, - set: function (value) { - const uri = new Uri(value); - - parseQuery(uri, this, false); - - // Remove the fragment as it's not sent with a request - uri.fragment(""); - - this._url = uri.toString(); - }, - }, - - /** - * The file extension of the resource. - * - * @memberof Resource.prototype - * @type {String} - * - * @readonly - */ - extension: { - get: function () { - return getExtensionFromUri(this._url); - }, - }, - - /** - * True if the Resource refers to a data URI. - * - * @memberof Resource.prototype - * @type {Boolean} - */ - isDataUri: { - get: function () { - return isDataUri(this._url); - }, - }, - - /** - * True if the Resource refers to a blob URI. - * - * @memberof Resource.prototype - * @type {Boolean} - */ - isBlobUri: { - get: function () { - return isBlobUri(this._url); - }, - }, - - /** - * True if the Resource refers to a cross origin URL. - * - * @memberof Resource.prototype - * @type {Boolean} - */ - isCrossOriginUrl: { - get: function () { - return isCrossOriginUrl(this._url); - }, - }, - - /** - * True if the Resource has request headers. This is equivalent to checking if the headers property has any keys. - * - * @memberof Resource.prototype - * @type {Boolean} - */ - hasHeaders: { - get: function () { - return Object.keys(this.headers).length > 0; - }, - }, - }); - - /** - * Override Object#toString so that implicit string conversion gives the - * complete URL represented by this Resource. - * - * @returns {String} The URL represented by this Resource - */ - Resource.prototype.toString = function () { - return this.getUrlComponent(true, true); - }; - - /** - * Returns the url, optional with the query string and processed by a proxy. - * - * @param {Boolean} [query=false] If true, the query string is included. - * @param {Boolean} [proxy=false] If true, the url is processed by the proxy object, if defined. - * - * @returns {String} The url with all the requested components. - */ - Resource.prototype.getUrlComponent = function (query, proxy) { - if (this.isDataUri) { - return this._url; - } - - const uri = new Uri(this._url); - - if (query) { - stringifyQuery(uri, this); - } - - // objectToQuery escapes the placeholders. Undo that. - let url = uri.toString().replace(/%7B/g, "{").replace(/%7D/g, "}"); - - const templateValues = this._templateValues; - url = url.replace(/{(.*?)}/g, function (match, key) { - const replacement = templateValues[key]; - if (defaultValue.defined(replacement)) { - // use the replacement value from templateValues if there is one... - return encodeURIComponent(replacement); - } - // otherwise leave it unchanged - return match; - }); - - if (proxy && defaultValue.defined(this.proxy)) { - url = this.proxy.getURL(url); - } - return url; - }; - - /** - * Combines the specified object and the existing query parameters. This allows you to add many parameters at once, - * as opposed to adding them one at a time to the queryParameters property. If a value is already set, it will be replaced with the new value. - * - * @param {Object} params The query parameters - * @param {Boolean} [useAsDefault=false] If true the params will be used as the default values, so they will only be set if they are undefined. - */ - Resource.prototype.setQueryParameters = function (params, useAsDefault) { - if (useAsDefault) { - this._queryParameters = combineQueryParameters( - this._queryParameters, - params, - false - ); - } else { - this._queryParameters = combineQueryParameters( - params, - this._queryParameters, - false - ); - } - }; - - /** - * Combines the specified object and the existing query parameters. This allows you to add many parameters at once, - * as opposed to adding them one at a time to the queryParameters property. - * - * @param {Object} params The query parameters - */ - Resource.prototype.appendQueryParameters = function (params) { - this._queryParameters = combineQueryParameters( - params, - this._queryParameters, - true - ); - }; - - /** - * Combines the specified object and the existing template values. This allows you to add many values at once, - * as opposed to adding them one at a time to the templateValues property. If a value is already set, it will become an array and the new value will be appended. - * - * @param {Object} template The template values - * @param {Boolean} [useAsDefault=false] If true the values will be used as the default values, so they will only be set if they are undefined. - */ - Resource.prototype.setTemplateValues = function (template, useAsDefault) { - if (useAsDefault) { - this._templateValues = combine.combine(this._templateValues, template); - } else { - this._templateValues = combine.combine(template, this._templateValues); - } - }; - - /** - * Returns a resource relative to the current instance. All properties remain the same as the current instance unless overridden in options. - * - * @param {Object} options An object with the following properties - * @param {String} [options.url] The url that will be resolved relative to the url of the current instance. - * @param {Object} [options.queryParameters] An object containing query parameters that will be combined with those of the current instance. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). These will be combined with those of the current instance. - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The function to call when loading the resource fails. - * @param {Number} [options.retryAttempts] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {Boolean} [options.preserveQueryParameters=false] If true, this will keep all query parameters from the current resource and derived resource. If false, derived parameters will replace those of the current resource. - * - * @returns {Resource} The resource derived from the current one. - */ - Resource.prototype.getDerivedResource = function (options) { - const resource = this.clone(); - resource._retryCount = 0; - - if (defaultValue.defined(options.url)) { - const uri = new Uri(options.url); - - const preserveQueryParameters = defaultValue.defaultValue( - options.preserveQueryParameters, - false - ); - parseQuery(uri, resource, true, preserveQueryParameters); - - // Remove the fragment as it's not sent with a request - uri.fragment(""); - - if (uri.scheme() !== "") { - resource._url = uri.toString(); - } else { - resource._url = uri - .absoluteTo(new Uri(getAbsoluteUri(this._url))) - .toString(); - } - } - - if (defaultValue.defined(options.queryParameters)) { - resource._queryParameters = combine.combine( - options.queryParameters, - resource._queryParameters - ); - } - if (defaultValue.defined(options.templateValues)) { - resource._templateValues = combine.combine( - options.templateValues, - resource.templateValues - ); - } - if (defaultValue.defined(options.headers)) { - resource.headers = combine.combine(options.headers, resource.headers); - } - if (defaultValue.defined(options.proxy)) { - resource.proxy = options.proxy; - } - if (defaultValue.defined(options.request)) { - resource.request = options.request; - } - if (defaultValue.defined(options.retryCallback)) { - resource.retryCallback = options.retryCallback; - } - if (defaultValue.defined(options.retryAttempts)) { - resource.retryAttempts = options.retryAttempts; - } - - return resource; - }; - - /** - * Called when a resource fails to load. This will call the retryCallback function if defined until retryAttempts is reached. - * - * @param {Error} [error] The error that was encountered. - * - * @returns {Promise} A promise to a boolean, that if true will cause the resource request to be retried. - * - * @private - */ - Resource.prototype.retryOnError = function (error) { - const retryCallback = this.retryCallback; - if ( - typeof retryCallback !== "function" || - this._retryCount >= this.retryAttempts - ) { - return Promise.resolve(false); - } - - const that = this; - return Promise.resolve(retryCallback(this, error)).then(function (result) { - ++that._retryCount; - - return result; - }); - }; - - /** - * Duplicates a Resource instance. - * - * @param {Resource} [result] The object onto which to store the result. - * - * @returns {Resource} The modified result parameter or a new Resource instance if one was not provided. - */ - Resource.prototype.clone = function (result) { - if (!defaultValue.defined(result)) { - result = new Resource({ - url: this._url, - }); - } - - result._url = this._url; - result._queryParameters = clone(this._queryParameters); - result._templateValues = clone(this._templateValues); - result.headers = clone(this.headers); - result.proxy = this.proxy; - result.retryCallback = this.retryCallback; - result.retryAttempts = this.retryAttempts; - result._retryCount = 0; - result.request = this.request.clone(); - - return result; - }; - - /** - * Returns the base path of the Resource. - * - * @param {Boolean} [includeQuery = false] Whether or not to include the query string and fragment form the uri - * - * @returns {String} The base URI of the resource - */ - Resource.prototype.getBaseUri = function (includeQuery) { - return getBaseUri(this.getUrlComponent(includeQuery), includeQuery); - }; - - /** - * Appends a forward slash to the URL. - */ - Resource.prototype.appendForwardSlash = function () { - this._url = appendForwardSlash(this._url); - }; - - /** - * Asynchronously loads the resource as raw binary data. Returns a promise that will resolve to - * an ArrayBuffer once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * @example - * // load a single URL asynchronously - * resource.fetchArrayBuffer().then(function(arrayBuffer) { - * // use the data - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.fetchArrayBuffer = function () { - return this.fetch({ - responseType: "arraybuffer", - }); - }; - - /** - * Creates a Resource and calls fetchArrayBuffer() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.fetchArrayBuffer = function (options) { - const resource = new Resource(options); - return resource.fetchArrayBuffer(); - }; - - /** - * Asynchronously loads the given resource as a blob. Returns a promise that will resolve to - * a Blob once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * @example - * // load a single URL asynchronously - * resource.fetchBlob().then(function(blob) { - * // use the data - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.fetchBlob = function () { - return this.fetch({ - responseType: "blob", - }); - }; - - /** - * Creates a Resource and calls fetchBlob() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.fetchBlob = function (options) { - const resource = new Resource(options); - return resource.fetchBlob(); - }; - - /** - * Asynchronously loads the given image resource. Returns a promise that will resolve to - * an {@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap|ImageBitmap} if preferImageBitmap is true and the browser supports createImageBitmap or otherwise an - * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement|Image} once loaded, or reject if the image failed to load. - * - * @param {Object} [options] An object with the following properties. - * @param {Boolean} [options.preferBlob=false] If true, we will load the image via a blob. - * @param {Boolean} [options.preferImageBitmap=false] If true, image will be decoded during fetch and an ImageBitmap is returned. - * @param {Boolean} [options.flipY=false] If true, image will be vertically flipped during decode. Only applies if the browser supports createImageBitmap. - * @param {Boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies if the browser supports createImageBitmap. - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * // load a single image asynchronously - * resource.fetchImage().then(function(image) { - * // use the loaded image - * }).catch(function(error) { - * // an error occurred - * }); - * - * // load several images in parallel - * Promise.all([resource1.fetchImage(), resource2.fetchImage()]).then(function(images) { - * // images is an array containing all the loaded images - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.fetchImage = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const preferImageBitmap = defaultValue.defaultValue(options.preferImageBitmap, false); - const preferBlob = defaultValue.defaultValue(options.preferBlob, false); - const flipY = defaultValue.defaultValue(options.flipY, false); - const skipColorSpaceConversion = defaultValue.defaultValue( - options.skipColorSpaceConversion, - false - ); - - checkAndResetRequest(this.request); - // We try to load the image normally if - // 1. Blobs aren't supported - // 2. It's a data URI - // 3. It's a blob URI - // 4. It doesn't have request headers and we preferBlob is false - if ( - !xhrBlobSupported || - this.isDataUri || - this.isBlobUri || - (!this.hasHeaders && !preferBlob) - ) { - return fetchImage({ - resource: this, - flipY: flipY, - skipColorSpaceConversion: skipColorSpaceConversion, - preferImageBitmap: preferImageBitmap, - }); - } - - const blobPromise = this.fetchBlob(); - if (!defaultValue.defined(blobPromise)) { - return; - } - - let supportsImageBitmap; - let useImageBitmap; - let generatedBlobResource; - let generatedBlob; - return Resource.supportsImageBitmapOptions() - .then(function (result) { - supportsImageBitmap = result; - useImageBitmap = supportsImageBitmap && preferImageBitmap; - return blobPromise; - }) - .then(function (blob) { - if (!defaultValue.defined(blob)) { - return; - } - generatedBlob = blob; - if (useImageBitmap) { - return Resource.createImageBitmapFromBlob(blob, { - flipY: flipY, - premultiplyAlpha: false, - skipColorSpaceConversion: skipColorSpaceConversion, - }); - } - const blobUrl = window.URL.createObjectURL(blob); - generatedBlobResource = new Resource({ - url: blobUrl, - }); - - return fetchImage({ - resource: generatedBlobResource, - flipY: flipY, - skipColorSpaceConversion: skipColorSpaceConversion, - preferImageBitmap: false, - }); - }) - .then(function (image) { - if (!defaultValue.defined(image)) { - return; - } - - // The blob object may be needed for use by a TileDiscardPolicy, - // so attach it to the image. - image.blob = generatedBlob; - - if (useImageBitmap) { - return image; - } - - window.URL.revokeObjectURL(generatedBlobResource.url); - return image; - }) - .catch(function (error) { - if (defaultValue.defined(generatedBlobResource)) { - window.URL.revokeObjectURL(generatedBlobResource.url); - } - - // If the blob load succeeded but the image decode failed, attach the blob - // to the error object for use by a TileDiscardPolicy. - // In particular, BingMapsImageryProvider uses this to detect the - // zero-length response that is returned when a tile is not available. - error.blob = generatedBlob; - - return Promise.reject(error); - }); - }; - - /** - * Fetches an image and returns a promise to it. - * - * @param {Object} [options] An object with the following properties. - * @param {Resource} [options.resource] Resource object that points to an image to fetch. - * @param {Boolean} [options.preferImageBitmap] If true, image will be decoded during fetch and an ImageBitmap is returned. - * @param {Boolean} [options.flipY] If true, image will be vertically flipped during decode. Only applies if the browser supports createImageBitmap. - * @param {Boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies if the browser supports createImageBitmap. - * @private - */ - function fetchImage(options) { - const resource = options.resource; - const flipY = options.flipY; - const skipColorSpaceConversion = options.skipColorSpaceConversion; - const preferImageBitmap = options.preferImageBitmap; - - const request = resource.request; - request.url = resource.url; - request.requestFunction = function () { - let crossOrigin = false; - - // data URIs can't have crossorigin set. - if (!resource.isDataUri && !resource.isBlobUri) { - crossOrigin = resource.isCrossOriginUrl; - } - - const deferred = defer(); - Resource._Implementations.createImage( - request, - crossOrigin, - deferred, - flipY, - skipColorSpaceConversion, - preferImageBitmap - ); - - return deferred.promise; - }; - - const promise = RequestScheduler.request(request); - if (!defaultValue.defined(promise)) { - return; - } - - return promise.catch(function (e) { - // Don't retry cancelled or otherwise aborted requests - if (request.state !== RequestState$1.FAILED) { - return Promise.reject(e); - } - return resource.retryOnError(e).then(function (retry) { - if (retry) { - // Reset request so it can try again - request.state = RequestState$1.UNISSUED; - request.deferred = undefined; - - return fetchImage({ - resource: resource, - flipY: flipY, - skipColorSpaceConversion: skipColorSpaceConversion, - preferImageBitmap: preferImageBitmap, - }); - } - return Promise.reject(e); - }); - }); - } - - /** - * Creates a Resource and calls fetchImage() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Boolean} [options.flipY=false] Whether to vertically flip the image during fetch and decode. Only applies when requesting an image and the browser supports createImageBitmap. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {Boolean} [options.preferBlob=false] If true, we will load the image via a blob. - * @param {Boolean} [options.preferImageBitmap=false] If true, image will be decoded during fetch and an ImageBitmap is returned. - * @param {Boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies when requesting an image and the browser supports createImageBitmap. - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.fetchImage = function (options) { - const resource = new Resource(options); - return resource.fetchImage({ - flipY: options.flipY, - skipColorSpaceConversion: options.skipColorSpaceConversion, - preferBlob: options.preferBlob, - preferImageBitmap: options.preferImageBitmap, - }); - }; - - /** - * Asynchronously loads the given resource as text. Returns a promise that will resolve to - * a String once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * @example - * // load text from a URL, setting a custom header - * const resource = new Resource({ - * url: 'http://someUrl.com/someJson.txt', - * headers: { - * 'X-Custom-Header' : 'some value' - * } - * }); - * resource.fetchText().then(function(text) { - * // Do something with the text - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest} - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.fetchText = function () { - return this.fetch({ - responseType: "text", - }); - }; - - /** - * Creates a Resource and calls fetchText() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.fetchText = function (options) { - const resource = new Resource(options); - return resource.fetchText(); - }; - - // note: */* below is */* but that ends the comment block early - /** - * Asynchronously loads the given resource as JSON. Returns a promise that will resolve to - * a JSON object once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. This function - * adds 'Accept: application/json,*/*;q=0.01' to the request headers, if not - * already specified. - * - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * resource.fetchJson().then(function(jsonData) { - * // Do something with the JSON object - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.fetchJson = function () { - const promise = this.fetch({ - responseType: "text", - headers: { - Accept: "application/json,*/*;q=0.01", - }, - }); - - if (!defaultValue.defined(promise)) { - return undefined; - } - - return promise.then(function (value) { - if (!defaultValue.defined(value)) { - return; - } - return JSON.parse(value); - }); - }; - - /** - * Creates a Resource and calls fetchJson() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.fetchJson = function (options) { - const resource = new Resource(options); - return resource.fetchJson(); - }; - - /** - * Asynchronously loads the given resource as XML. Returns a promise that will resolve to - * an XML Document once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * // load XML from a URL, setting a custom header - * Cesium.loadXML('http://someUrl.com/someXML.xml', { - * 'X-Custom-Header' : 'some value' - * }).then(function(document) { - * // Do something with the document - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest} - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.fetchXML = function () { - return this.fetch({ - responseType: "document", - overrideMimeType: "text/xml", - }); - }; - - /** - * Creates a Resource and calls fetchXML() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.fetchXML = function (options) { - const resource = new Resource(options); - return resource.fetchXML(); - }; - - /** - * Requests a resource using JSONP. - * - * @param {String} [callbackParameterName='callback'] The callback parameter name that the server expects. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * // load a data asynchronously - * resource.fetchJsonp().then(function(data) { - * // use the loaded data - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.fetchJsonp = function (callbackParameterName) { - callbackParameterName = defaultValue.defaultValue(callbackParameterName, "callback"); - - checkAndResetRequest(this.request); - - //generate a unique function name - let functionName; - do { - functionName = `loadJsonp${Math$1.CesiumMath.nextRandomNumber() - .toString() - .substring(2, 8)}`; - } while (defaultValue.defined(window[functionName])); - - return fetchJsonp(this, callbackParameterName, functionName); - }; - - function fetchJsonp(resource, callbackParameterName, functionName) { - const callbackQuery = {}; - callbackQuery[callbackParameterName] = functionName; - resource.setQueryParameters(callbackQuery); - - const request = resource.request; - request.url = resource.url; - request.requestFunction = function () { - const deferred = defer(); - - //assign a function with that name in the global scope - window[functionName] = function (data) { - deferred.resolve(data); - - try { - delete window[functionName]; - } catch (e) { - window[functionName] = undefined; - } - }; - - Resource._Implementations.loadAndExecuteScript( - resource.url, - functionName, - deferred - ); - return deferred.promise; - }; - - const promise = RequestScheduler.request(request); - if (!defaultValue.defined(promise)) { - return; - } - - return promise.catch(function (e) { - if (request.state !== RequestState$1.FAILED) { - return Promise.reject(e); - } - - return resource.retryOnError(e).then(function (retry) { - if (retry) { - // Reset request so it can try again - request.state = RequestState$1.UNISSUED; - request.deferred = undefined; - - return fetchJsonp(resource, callbackParameterName, functionName); - } - - return Promise.reject(e); - }); - }); - } - - /** - * Creates a Resource from a URL and calls fetchJsonp() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {String} [options.callbackParameterName='callback'] The callback parameter name that the server expects. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.fetchJsonp = function (options) { - const resource = new Resource(options); - return resource.fetchJsonp(options.callbackParameterName); - }; - - /** - * @private - */ - Resource.prototype._makeRequest = function (options) { - const resource = this; - checkAndResetRequest(resource.request); - - const request = resource.request; - request.url = resource.url; - - request.requestFunction = function () { - const responseType = options.responseType; - const headers = combine.combine(options.headers, resource.headers); - const overrideMimeType = options.overrideMimeType; - const method = options.method; - const data = options.data; - const deferred = defer(); - const xhr = Resource._Implementations.loadWithXhr( - resource.url, - responseType, - method, - data, - headers, - deferred, - overrideMimeType - ); - if (defaultValue.defined(xhr) && defaultValue.defined(xhr.abort)) { - request.cancelFunction = function () { - xhr.abort(); - }; - } - return deferred.promise; - }; - - const promise = RequestScheduler.request(request); - if (!defaultValue.defined(promise)) { - return; - } - - return promise - .then(function (data) { - // explicitly set to undefined to ensure GC of request response data. See #8843 - request.cancelFunction = undefined; - return data; - }) - .catch(function (e) { - request.cancelFunction = undefined; - if (request.state !== RequestState$1.FAILED) { - return Promise.reject(e); - } - - return resource.retryOnError(e).then(function (retry) { - if (retry) { - // Reset request so it can try again - request.state = RequestState$1.UNISSUED; - request.deferred = undefined; - - return resource.fetch(options); - } - - return Promise.reject(e); - }); - }); - }; - - const dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/; - - function decodeDataUriText(isBase64, data) { - const result = decodeURIComponent(data); - if (isBase64) { - return atob(result); - } - return result; - } - - function decodeDataUriArrayBuffer(isBase64, data) { - const byteString = decodeDataUriText(isBase64, data); - const buffer = new ArrayBuffer(byteString.length); - const view = new Uint8Array(buffer); - for (let i = 0; i < byteString.length; i++) { - view[i] = byteString.charCodeAt(i); - } - return buffer; - } - - function decodeDataUri(dataUriRegexResult, responseType) { - responseType = defaultValue.defaultValue(responseType, ""); - const mimeType = dataUriRegexResult[1]; - const isBase64 = !!dataUriRegexResult[2]; - const data = dataUriRegexResult[3]; - let buffer; - let parser; - - switch (responseType) { - case "": - case "text": - return decodeDataUriText(isBase64, data); - case "arraybuffer": - return decodeDataUriArrayBuffer(isBase64, data); - case "blob": - buffer = decodeDataUriArrayBuffer(isBase64, data); - return new Blob([buffer], { - type: mimeType, - }); - case "document": - parser = new DOMParser(); - return parser.parseFromString( - decodeDataUriText(isBase64, data), - mimeType - ); - case "json": - return JSON.parse(decodeDataUriText(isBase64, data)); - default: - //>>includeStart('debug', pragmas.debug); - throw new Check.DeveloperError(`Unhandled responseType: ${responseType}`); - //>>includeEnd('debug'); - } - } - - /** - * Asynchronously loads the given resource. Returns a promise that will resolve to - * the result once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. It's recommended that you use - * the more specific functions eg. fetchJson, fetchBlob, etc. - * - * @param {Object} [options] Object with the following properties: - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * resource.fetch() - * .then(function(body) { - * // use the data - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.fetch = function (options) { - options = defaultClone(options, {}); - options.method = "GET"; - - return this._makeRequest(options); - }; - - /** - * Creates a Resource from a URL and calls fetch() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.fetch = function (options) { - const resource = new Resource(options); - return resource.fetch({ - // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch - responseType: options.responseType, - overrideMimeType: options.overrideMimeType, - }); - }; - - /** - * Asynchronously deletes the given resource. Returns a promise that will resolve to - * the result once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @param {Object} [options] Object with the following properties: - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * resource.delete() - * .then(function(body) { - * // use the data - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.delete = function (options) { - options = defaultClone(options, {}); - options.method = "DELETE"; - - return this._makeRequest(options); - }; - - /** - * Creates a Resource from a URL and calls delete() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.data] Data that is posted with the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.delete = function (options) { - const resource = new Resource(options); - return resource.delete({ - // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch - responseType: options.responseType, - overrideMimeType: options.overrideMimeType, - data: options.data, - }); - }; - - /** - * Asynchronously gets headers the given resource. Returns a promise that will resolve to - * the result once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @param {Object} [options] Object with the following properties: - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * resource.head() - * .then(function(headers) { - * // use the data - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.head = function (options) { - options = defaultClone(options, {}); - options.method = "HEAD"; - - return this._makeRequest(options); - }; - - /** - * Creates a Resource from a URL and calls head() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.head = function (options) { - const resource = new Resource(options); - return resource.head({ - // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch - responseType: options.responseType, - overrideMimeType: options.overrideMimeType, - }); - }; - - /** - * Asynchronously gets options the given resource. Returns a promise that will resolve to - * the result once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @param {Object} [options] Object with the following properties: - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * resource.options() - * .then(function(headers) { - * // use the data - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.options = function (options) { - options = defaultClone(options, {}); - options.method = "OPTIONS"; - - return this._makeRequest(options); - }; - - /** - * Creates a Resource from a URL and calls options() on it. - * - * @param {String|Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.options = function (options) { - const resource = new Resource(options); - return resource.options({ - // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch - responseType: options.responseType, - overrideMimeType: options.overrideMimeType, - }); - }; - - /** - * Asynchronously posts data to the given resource. Returns a promise that will resolve to - * the result once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @param {Object} data Data that is posted with the resource. - * @param {Object} [options] Object with the following properties: - * @param {Object} [options.data] Data that is posted with the resource. - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * resource.post(data) - * .then(function(result) { - * // use the result - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.post = function (data, options) { - Check.Check.defined("data", data); - - options = defaultClone(options, {}); - options.method = "POST"; - options.data = data; - - return this._makeRequest(options); - }; - - /** - * Creates a Resource from a URL and calls post() on it. - * - * @param {Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} options.data Data that is posted with the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.post = function (options) { - const resource = new Resource(options); - return resource.post(options.data, { - // Make copy of just the needed fields because headers can be passed to both the constructor and to post - responseType: options.responseType, - overrideMimeType: options.overrideMimeType, - }); - }; - - /** - * Asynchronously puts data to the given resource. Returns a promise that will resolve to - * the result once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @param {Object} data Data that is posted with the resource. - * @param {Object} [options] Object with the following properties: - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * resource.put(data) - * .then(function(result) { - * // use the result - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.put = function (data, options) { - Check.Check.defined("data", data); - - options = defaultClone(options, {}); - options.method = "PUT"; - options.data = data; - - return this._makeRequest(options); - }; - - /** - * Creates a Resource from a URL and calls put() on it. - * - * @param {Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} options.data Data that is posted with the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.put = function (options) { - const resource = new Resource(options); - return resource.put(options.data, { - // Make copy of just the needed fields because headers can be passed to both the constructor and to post - responseType: options.responseType, - overrideMimeType: options.overrideMimeType, - }); - }; - - /** - * Asynchronously patches data to the given resource. Returns a promise that will resolve to - * the result once loaded, or reject if the resource failed to load. The data is loaded - * using XMLHttpRequest, which means that in order to make requests to another origin, - * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. - * - * @param {Object} data Data that is posted with the resource. - * @param {Object} [options] Object with the following properties: - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - * - * - * @example - * resource.patch(data) - * .then(function(result) { - * // use the result - * }).catch(function(error) { - * // an error occurred - * }); - * - * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing} - * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A} - */ - Resource.prototype.patch = function (data, options) { - Check.Check.defined("data", data); - - options = defaultClone(options, {}); - options.method = "PATCH"; - options.data = data; - - return this._makeRequest(options); - }; - - /** - * Creates a Resource from a URL and calls patch() on it. - * - * @param {Object} options A url or an object with the following properties - * @param {String} options.url The url of the resource. - * @param {Object} options.data Data that is posted with the resource. - * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource. - * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). - * @param {Object} [options.headers={}] Additional HTTP headers that will be sent. - * @param {Proxy} [options.proxy] A proxy to be used when loading the resource. - * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried. - * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up. - * @param {Request} [options.request] A Request object that will be used. Intended for internal use only. - * @param {String} [options.responseType] The type of response. This controls the type of item returned. - * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server. - * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority. - */ - Resource.patch = function (options) { - const resource = new Resource(options); - return resource.patch(options.data, { - // Make copy of just the needed fields because headers can be passed to both the constructor and to post - responseType: options.responseType, - overrideMimeType: options.overrideMimeType, - }); - }; - - /** - * Contains implementations of functions that can be replaced for testing - * - * @private - */ - Resource._Implementations = {}; - - Resource._Implementations.loadImageElement = function ( - url, - crossOrigin, - deferred - ) { - const image = new Image(); - - image.onload = function () { - // work-around a known issue with Firefox and dimensionless SVG, see: - // - https://github.com/whatwg/html/issues/3510 - // - https://bugzilla.mozilla.org/show_bug.cgi?id=700533 - if ( - image.naturalWidth === 0 && - image.naturalHeight === 0 && - image.width === 0 && - image.height === 0 - ) { - // these values affect rasterization and will likely mar the content - // until Firefox takes a stance on the issue, marred content is better than no content - // Chromium uses a more refined heuristic about its choice given nil viewBox, and a better stance and solution is - // proposed later in the original issue thread: - // - Chromium behavior: https://github.com/CesiumGS/cesium/issues/9188#issuecomment-704400825 - // - Cesium's stance/solve: https://github.com/CesiumGS/cesium/issues/9188#issuecomment-720645777 - image.width = 300; - image.height = 150; - } - deferred.resolve(image); - }; - - image.onerror = function (e) { - deferred.reject(e); - }; - - if (crossOrigin) { - if (TrustedServers$1.contains(url)) { - image.crossOrigin = "use-credentials"; - } else { - image.crossOrigin = ""; - } - } - - image.src = url; - }; - - Resource._Implementations.createImage = function ( - request, - crossOrigin, - deferred, - flipY, - skipColorSpaceConversion, - preferImageBitmap - ) { - const url = request.url; - // Passing an Image to createImageBitmap will force it to run on the main thread - // since DOM elements don't exist on workers. We convert it to a blob so it's non-blocking. - // See: - // https://bugzilla.mozilla.org/show_bug.cgi?id=1044102#c38 - // https://bugs.chromium.org/p/chromium/issues/detail?id=580202#c10 - Resource.supportsImageBitmapOptions() - .then(function (supportsImageBitmap) { - // We can only use ImageBitmap if we can flip on decode. - // See: https://github.com/CesiumGS/cesium/pull/7579#issuecomment-466146898 - if (!(supportsImageBitmap && preferImageBitmap)) { - Resource._Implementations.loadImageElement(url, crossOrigin, deferred); - return; - } - const responseType = "blob"; - const method = "GET"; - const xhrDeferred = defer(); - const xhr = Resource._Implementations.loadWithXhr( - url, - responseType, - method, - undefined, - undefined, - xhrDeferred, - undefined, - undefined, - undefined - ); - - if (defaultValue.defined(xhr) && defaultValue.defined(xhr.abort)) { - request.cancelFunction = function () { - xhr.abort(); - }; - } - return xhrDeferred.promise - .then(function (blob) { - if (!defaultValue.defined(blob)) { - deferred.reject( - new RuntimeError.RuntimeError( - `Successfully retrieved ${url} but it contained no content.` - ) - ); - return; - } - - return Resource.createImageBitmapFromBlob(blob, { - flipY: flipY, - premultiplyAlpha: false, - skipColorSpaceConversion: skipColorSpaceConversion, - }); - }) - .then(function (image) { - deferred.resolve(image); - }); - }) - .catch(function (e) { - deferred.reject(e); - }); - }; - - /** - * Wrapper for createImageBitmap - * - * @private - */ - Resource.createImageBitmapFromBlob = function (blob, options) { - Check.Check.defined("options", options); - Check.Check.typeOf.bool("options.flipY", options.flipY); - Check.Check.typeOf.bool("options.premultiplyAlpha", options.premultiplyAlpha); - Check.Check.typeOf.bool( - "options.skipColorSpaceConversion", - options.skipColorSpaceConversion - ); - - return createImageBitmap(blob, { - imageOrientation: options.flipY ? "flipY" : "none", - premultiplyAlpha: options.premultiplyAlpha ? "premultiply" : "none", - colorSpaceConversion: options.skipColorSpaceConversion ? "none" : "default", - }); - }; - - function decodeResponse(loadWithHttpResponse, responseType) { - switch (responseType) { - case "text": - return loadWithHttpResponse.toString("utf8"); - case "json": - return JSON.parse(loadWithHttpResponse.toString("utf8")); - default: - return new Uint8Array(loadWithHttpResponse).buffer; - } - } - - function loadWithHttpRequest( - url, - responseType, - method, - data, - headers, - deferred, - overrideMimeType - ) { - // Note: only the 'json' and 'text' responseTypes transforms the loaded buffer - let URL; - let zlib; - Promise.all([new Promise(function (resolve, reject) { require(['url'], function (m) { resolve(/*#__PURE__*/_interopNamespace(m)); }, reject); }), new Promise(function (resolve, reject) { require(['zlib'], function (m) { resolve(/*#__PURE__*/_interopNamespace(m)); }, reject); })]) - .then(([urlImport, zlibImport]) => { - URL = urlImport.parse(url); - zlib = zlibImport; - - return URL.protocol === "https:" ? new Promise(function (resolve, reject) { require(['https'], function (m) { resolve(/*#__PURE__*/_interopNamespace(m)); }, reject); }) : new Promise(function (resolve, reject) { require(['http'], function (m) { resolve(/*#__PURE__*/_interopNamespace(m)); }, reject); }); - }) - .then((http) => { - const options = { - protocol: URL.protocol, - hostname: URL.hostname, - port: URL.port, - path: URL.path, - query: URL.query, - method: method, - headers: headers, - }; - http - .request(options) - .on("response", function (res) { - if (res.statusCode < 200 || res.statusCode >= 300) { - deferred.reject( - new RequestErrorEvent(res.statusCode, res, res.headers) - ); - return; - } - - const chunkArray = []; - res.on("data", function (chunk) { - chunkArray.push(chunk); - }); - - res.on("end", function () { - // eslint-disable-next-line no-undef - const result = Buffer.concat(chunkArray); - if (res.headers["content-encoding"] === "gzip") { - zlib.gunzip(result, function (error, resultUnzipped) { - if (error) { - deferred.reject( - new RuntimeError.RuntimeError("Error decompressing response.") - ); - } else { - deferred.resolve( - decodeResponse(resultUnzipped, responseType) - ); - } - }); - } else { - deferred.resolve(decodeResponse(result, responseType)); - } - }); - }) - .on("error", function (e) { - deferred.reject(new RequestErrorEvent()); - }) - .end(); - }); - } - - const noXMLHttpRequest = typeof XMLHttpRequest === "undefined"; - Resource._Implementations.loadWithXhr = function ( - url, - responseType, - method, - data, - headers, - deferred, - overrideMimeType - ) { - const dataUriRegexResult = dataUriRegex.exec(url); - if (dataUriRegexResult !== null) { - deferred.resolve(decodeDataUri(dataUriRegexResult, responseType)); - return; - } - - if (noXMLHttpRequest) { - loadWithHttpRequest( - url, - responseType, - method, - data, - headers, - deferred); - return; - } - - const xhr = new XMLHttpRequest(); - - if (TrustedServers$1.contains(url)) { - xhr.withCredentials = true; - } - - xhr.open(method, url, true); - - if (defaultValue.defined(overrideMimeType) && defaultValue.defined(xhr.overrideMimeType)) { - xhr.overrideMimeType(overrideMimeType); - } - - if (defaultValue.defined(headers)) { - for (const key in headers) { - if (headers.hasOwnProperty(key)) { - xhr.setRequestHeader(key, headers[key]); - } - } - } - - if (defaultValue.defined(responseType)) { - xhr.responseType = responseType; - } - - // While non-standard, file protocol always returns a status of 0 on success - let localFile = false; - if (typeof url === "string") { - localFile = - url.indexOf("file://") === 0 || - (typeof window !== "undefined" && window.location.origin === "file://"); - } - - xhr.onload = function () { - if ( - (xhr.status < 200 || xhr.status >= 300) && - !(localFile && xhr.status === 0) - ) { - deferred.reject( - new RequestErrorEvent( - xhr.status, - xhr.response, - xhr.getAllResponseHeaders() - ) - ); - return; - } - - const response = xhr.response; - const browserResponseType = xhr.responseType; - - if (method === "HEAD" || method === "OPTIONS") { - const responseHeaderString = xhr.getAllResponseHeaders(); - const splitHeaders = responseHeaderString.trim().split(/[\r\n]+/); - - const responseHeaders = {}; - splitHeaders.forEach(function (line) { - const parts = line.split(": "); - const header = parts.shift(); - responseHeaders[header] = parts.join(": "); - }); - - deferred.resolve(responseHeaders); - return; - } - - //All modern browsers will go into either the first or second if block or last else block. - //Other code paths support older browsers that either do not support the supplied responseType - //or do not support the xhr.response property. - if (xhr.status === 204) { - // accept no content - deferred.resolve(); - } else if ( - defaultValue.defined(response) && - (!defaultValue.defined(responseType) || browserResponseType === responseType) - ) { - deferred.resolve(response); - } else if (responseType === "json" && typeof response === "string") { - try { - deferred.resolve(JSON.parse(response)); - } catch (e) { - deferred.reject(e); - } - } else if ( - (browserResponseType === "" || browserResponseType === "document") && - defaultValue.defined(xhr.responseXML) && - xhr.responseXML.hasChildNodes() - ) { - deferred.resolve(xhr.responseXML); - } else if ( - (browserResponseType === "" || browserResponseType === "text") && - defaultValue.defined(xhr.responseText) - ) { - deferred.resolve(xhr.responseText); - } else { - deferred.reject( - new RuntimeError.RuntimeError("Invalid XMLHttpRequest response type.") - ); - } - }; - - xhr.onerror = function (e) { - deferred.reject(new RequestErrorEvent()); - }; - - xhr.send(data); - - return xhr; - }; - - Resource._Implementations.loadAndExecuteScript = function ( - url, - functionName, - deferred - ) { - return loadAndExecuteScript(url).catch(function (e) { - deferred.reject(e); - }); - }; - - /** - * The default implementations - * - * @private - */ - Resource._DefaultImplementations = {}; - Resource._DefaultImplementations.createImage = - Resource._Implementations.createImage; - Resource._DefaultImplementations.loadWithXhr = - Resource._Implementations.loadWithXhr; - Resource._DefaultImplementations.loadAndExecuteScript = - Resource._Implementations.loadAndExecuteScript; - - /** - * A resource instance initialized to the current browser location - * - * @type {Resource} - * @constant - */ - Resource.DEFAULT = Object.freeze( - new Resource({ - url: - typeof document === "undefined" - ? "" - : document.location.href.split("?")[0], - }) - ); - - /** - * Specifies Earth polar motion coordinates and the difference between UT1 and UTC. - * These Earth Orientation Parameters (EOP) are primarily used in the transformation from - * the International Celestial Reference Frame (ICRF) to the International Terrestrial - * Reference Frame (ITRF). - * - * @alias EarthOrientationParameters - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {Resource|String} [options.url] The URL from which to obtain EOP data. If neither this - * parameter nor options.data is specified, all EOP values are assumed - * to be 0.0. If options.data is specified, this parameter is - * ignored. - * @param {Object} [options.data] The actual EOP data. If neither this - * parameter nor options.data is specified, all EOP values are assumed - * to be 0.0. - * @param {Boolean} [options.addNewLeapSeconds=true] True if leap seconds that - * are specified in the EOP data but not in {@link JulianDate.leapSeconds} - * should be added to {@link JulianDate.leapSeconds}. False if - * new leap seconds should be handled correctly in the context - * of the EOP data but otherwise ignored. - * - * @example - * // An example EOP data file, EOP.json: - * { - * "columnNames" : ["dateIso8601","modifiedJulianDateUtc","xPoleWanderRadians","yPoleWanderRadians","ut1MinusUtcSeconds","lengthOfDayCorrectionSeconds","xCelestialPoleOffsetRadians","yCelestialPoleOffsetRadians","taiMinusUtcSeconds"], - * "samples" : [ - * "2011-07-01T00:00:00Z",55743.0,2.117957047295119e-7,2.111518721609984e-6,-0.2908948,-2.956e-4,3.393695767766752e-11,3.3452143996557983e-10,34.0, - * "2011-07-02T00:00:00Z",55744.0,2.193297093339541e-7,2.115460256837405e-6,-0.29065,-1.824e-4,-8.241832578862112e-11,5.623838700870617e-10,34.0, - * "2011-07-03T00:00:00Z",55745.0,2.262286080161428e-7,2.1191157519929706e-6,-0.2905572,1.9e-6,-3.490658503988659e-10,6.981317007977318e-10,34.0 - * ] - * } - * - * @example - * // Loading the EOP data - * const eop = new Cesium.EarthOrientationParameters({ url : 'Data/EOP.json' }); - * Cesium.Transforms.earthOrientationParameters = eop; - * - * @private - */ - function EarthOrientationParameters(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - this._dates = undefined; - this._samples = undefined; - - this._dateColumn = -1; - this._xPoleWanderRadiansColumn = -1; - this._yPoleWanderRadiansColumn = -1; - this._ut1MinusUtcSecondsColumn = -1; - this._xCelestialPoleOffsetRadiansColumn = -1; - this._yCelestialPoleOffsetRadiansColumn = -1; - this._taiMinusUtcSecondsColumn = -1; - - this._columnCount = 0; - this._lastIndex = -1; - - this._downloadPromise = undefined; - this._dataError = undefined; - - this._addNewLeapSeconds = defaultValue.defaultValue(options.addNewLeapSeconds, true); - - if (defaultValue.defined(options.data)) { - // Use supplied EOP data. - onDataReady(this, options.data); - } else if (defaultValue.defined(options.url)) { - const resource = Resource.createIfNeeded(options.url); - - // Download EOP data. - const that = this; - this._downloadPromise = resource - .fetchJson() - .then(function (eopData) { - onDataReady(that, eopData); - }) - .catch(function () { - that._dataError = `An error occurred while retrieving the EOP data from the URL ${resource.url}.`; - }); - } else { - // Use all zeros for EOP data. - onDataReady(this, { - columnNames: [ - "dateIso8601", - "modifiedJulianDateUtc", - "xPoleWanderRadians", - "yPoleWanderRadians", - "ut1MinusUtcSeconds", - "lengthOfDayCorrectionSeconds", - "xCelestialPoleOffsetRadians", - "yCelestialPoleOffsetRadians", - "taiMinusUtcSeconds", - ], - samples: [], - }); - } - } - - /** - * A default {@link EarthOrientationParameters} instance that returns zero for all EOP values. - */ - EarthOrientationParameters.NONE = Object.freeze({ - getPromiseToLoad: function () { - return Promise.resolve(); - }, - compute: function (date, result) { - if (!defaultValue.defined(result)) { - result = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0); - } else { - result.xPoleWander = 0.0; - result.yPoleWander = 0.0; - result.xPoleOffset = 0.0; - result.yPoleOffset = 0.0; - result.ut1MinusUtc = 0.0; - } - return result; - }, - }); - - /** - * Gets a promise that, when resolved, indicates that the EOP data has been loaded and is - * ready to use. - * - * @returns {Promise} The promise. - */ - EarthOrientationParameters.prototype.getPromiseToLoad = function () { - return Promise.resolve(this._downloadPromise); - }; - - /** - * Computes the Earth Orientation Parameters (EOP) for a given date by interpolating. - * If the EOP data has not yet been download, this method returns undefined. - * - * @param {JulianDate} date The date for each to evaluate the EOP. - * @param {EarthOrientationParametersSample} [result] The instance to which to copy the result. - * If this parameter is undefined, a new instance is created and returned. - * @returns {EarthOrientationParametersSample} The EOP evaluated at the given date, or - * undefined if the data necessary to evaluate EOP at the date has not yet been - * downloaded. - * - * @exception {RuntimeError} The loaded EOP data has an error and cannot be used. - * - * @see EarthOrientationParameters#getPromiseToLoad - */ - EarthOrientationParameters.prototype.compute = function (date, result) { - // We cannot compute until the samples are available. - if (!defaultValue.defined(this._samples)) { - if (defaultValue.defined(this._dataError)) { - throw new RuntimeError.RuntimeError(this._dataError); - } - - return undefined; - } - - if (!defaultValue.defined(result)) { - result = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0); - } - - if (this._samples.length === 0) { - result.xPoleWander = 0.0; - result.yPoleWander = 0.0; - result.xPoleOffset = 0.0; - result.yPoleOffset = 0.0; - result.ut1MinusUtc = 0.0; - return result; - } - - const dates = this._dates; - const lastIndex = this._lastIndex; - - let before = 0; - let after = 0; - if (defaultValue.defined(lastIndex)) { - const previousIndexDate = dates[lastIndex]; - const nextIndexDate = dates[lastIndex + 1]; - const isAfterPrevious = JulianDate.lessThanOrEquals( - previousIndexDate, - date - ); - const isAfterLastSample = !defaultValue.defined(nextIndexDate); - const isBeforeNext = - isAfterLastSample || JulianDate.greaterThanOrEquals(nextIndexDate, date); - - if (isAfterPrevious && isBeforeNext) { - before = lastIndex; - - if (!isAfterLastSample && nextIndexDate.equals(date)) { - ++before; - } - after = before + 1; - - interpolate(this, dates, this._samples, date, before, after, result); - return result; - } - } - - let index = binarySearch(dates, date, JulianDate.compare, this._dateColumn); - if (index >= 0) { - // If the next entry is the same date, use the later entry. This way, if two entries - // describe the same moment, one before a leap second and the other after, then we will use - // the post-leap second data. - if (index < dates.length - 1 && dates[index + 1].equals(date)) { - ++index; - } - before = index; - after = index; - } else { - after = ~index; - before = after - 1; - - // Use the first entry if the date requested is before the beginning of the data. - if (before < 0) { - before = 0; - } - } - - this._lastIndex = before; - - interpolate(this, dates, this._samples, date, before, after, result); - return result; - }; - - function compareLeapSecondDates(leapSecond, dateToFind) { - return JulianDate.compare(leapSecond.julianDate, dateToFind); - } - - function onDataReady(eop, eopData) { - if (!defaultValue.defined(eopData.columnNames)) { - eop._dataError = - "Error in loaded EOP data: The columnNames property is required."; - return; - } - - if (!defaultValue.defined(eopData.samples)) { - eop._dataError = - "Error in loaded EOP data: The samples property is required."; - return; - } - - const dateColumn = eopData.columnNames.indexOf("modifiedJulianDateUtc"); - const xPoleWanderRadiansColumn = eopData.columnNames.indexOf( - "xPoleWanderRadians" - ); - const yPoleWanderRadiansColumn = eopData.columnNames.indexOf( - "yPoleWanderRadians" - ); - const ut1MinusUtcSecondsColumn = eopData.columnNames.indexOf( - "ut1MinusUtcSeconds" - ); - const xCelestialPoleOffsetRadiansColumn = eopData.columnNames.indexOf( - "xCelestialPoleOffsetRadians" - ); - const yCelestialPoleOffsetRadiansColumn = eopData.columnNames.indexOf( - "yCelestialPoleOffsetRadians" - ); - const taiMinusUtcSecondsColumn = eopData.columnNames.indexOf( - "taiMinusUtcSeconds" - ); - - if ( - dateColumn < 0 || - xPoleWanderRadiansColumn < 0 || - yPoleWanderRadiansColumn < 0 || - ut1MinusUtcSecondsColumn < 0 || - xCelestialPoleOffsetRadiansColumn < 0 || - yCelestialPoleOffsetRadiansColumn < 0 || - taiMinusUtcSecondsColumn < 0 - ) { - eop._dataError = - "Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns"; - return; - } - - const samples = (eop._samples = eopData.samples); - const dates = (eop._dates = []); - - eop._dateColumn = dateColumn; - eop._xPoleWanderRadiansColumn = xPoleWanderRadiansColumn; - eop._yPoleWanderRadiansColumn = yPoleWanderRadiansColumn; - eop._ut1MinusUtcSecondsColumn = ut1MinusUtcSecondsColumn; - eop._xCelestialPoleOffsetRadiansColumn = xCelestialPoleOffsetRadiansColumn; - eop._yCelestialPoleOffsetRadiansColumn = yCelestialPoleOffsetRadiansColumn; - eop._taiMinusUtcSecondsColumn = taiMinusUtcSecondsColumn; - - eop._columnCount = eopData.columnNames.length; - eop._lastIndex = undefined; - - let lastTaiMinusUtc; - - const addNewLeapSeconds = eop._addNewLeapSeconds; - - // Convert the ISO8601 dates to JulianDates. - for (let i = 0, len = samples.length; i < len; i += eop._columnCount) { - const mjd = samples[i + dateColumn]; - const taiMinusUtc = samples[i + taiMinusUtcSecondsColumn]; - const day = mjd + TimeConstants$1.MODIFIED_JULIAN_DATE_DIFFERENCE; - const date = new JulianDate(day, taiMinusUtc, TimeStandard$1.TAI); - dates.push(date); - - if (addNewLeapSeconds) { - if (taiMinusUtc !== lastTaiMinusUtc && defaultValue.defined(lastTaiMinusUtc)) { - // We crossed a leap second boundary, so add the leap second - // if it does not already exist. - const leapSeconds = JulianDate.leapSeconds; - const leapSecondIndex = binarySearch( - leapSeconds, - date, - compareLeapSecondDates - ); - if (leapSecondIndex < 0) { - const leapSecond = new LeapSecond(date, taiMinusUtc); - leapSeconds.splice(~leapSecondIndex, 0, leapSecond); - } - } - lastTaiMinusUtc = taiMinusUtc; - } - } - } - - function fillResultFromIndex(eop, samples, index, columnCount, result) { - const start = index * columnCount; - result.xPoleWander = samples[start + eop._xPoleWanderRadiansColumn]; - result.yPoleWander = samples[start + eop._yPoleWanderRadiansColumn]; - result.xPoleOffset = samples[start + eop._xCelestialPoleOffsetRadiansColumn]; - result.yPoleOffset = samples[start + eop._yCelestialPoleOffsetRadiansColumn]; - result.ut1MinusUtc = samples[start + eop._ut1MinusUtcSecondsColumn]; - } - - function linearInterp(dx, y1, y2) { - return y1 + dx * (y2 - y1); - } - - function interpolate(eop, dates, samples, date, before, after, result) { - const columnCount = eop._columnCount; - - // First check the bounds on the EOP data - // If we are after the bounds of the data, return zeros. - // The 'before' index should never be less than zero. - if (after > dates.length - 1) { - result.xPoleWander = 0; - result.yPoleWander = 0; - result.xPoleOffset = 0; - result.yPoleOffset = 0; - result.ut1MinusUtc = 0; - return result; - } - - const beforeDate = dates[before]; - const afterDate = dates[after]; - if (beforeDate.equals(afterDate) || date.equals(beforeDate)) { - fillResultFromIndex(eop, samples, before, columnCount, result); - return result; - } else if (date.equals(afterDate)) { - fillResultFromIndex(eop, samples, after, columnCount, result); - return result; - } - - const factor = - JulianDate.secondsDifference(date, beforeDate) / - JulianDate.secondsDifference(afterDate, beforeDate); - - const startBefore = before * columnCount; - const startAfter = after * columnCount; - - // Handle UT1 leap second edge case - let beforeUt1MinusUtc = samples[startBefore + eop._ut1MinusUtcSecondsColumn]; - let afterUt1MinusUtc = samples[startAfter + eop._ut1MinusUtcSecondsColumn]; - - const offsetDifference = afterUt1MinusUtc - beforeUt1MinusUtc; - if (offsetDifference > 0.5 || offsetDifference < -0.5) { - // The absolute difference between the values is more than 0.5, so we may have - // crossed a leap second. Check if this is the case and, if so, adjust the - // afterValue to account for the leap second. This way, our interpolation will - // produce reasonable results. - const beforeTaiMinusUtc = - samples[startBefore + eop._taiMinusUtcSecondsColumn]; - const afterTaiMinusUtc = - samples[startAfter + eop._taiMinusUtcSecondsColumn]; - if (beforeTaiMinusUtc !== afterTaiMinusUtc) { - if (afterDate.equals(date)) { - // If we are at the end of the leap second interval, take the second value - // Otherwise, the interpolation below will yield the wrong side of the - // discontinuity - // At the end of the leap second, we need to start accounting for the jump - beforeUt1MinusUtc = afterUt1MinusUtc; - } else { - // Otherwise, remove the leap second so that the interpolation is correct - afterUt1MinusUtc -= afterTaiMinusUtc - beforeTaiMinusUtc; - } - } - } - - result.xPoleWander = linearInterp( - factor, - samples[startBefore + eop._xPoleWanderRadiansColumn], - samples[startAfter + eop._xPoleWanderRadiansColumn] - ); - result.yPoleWander = linearInterp( - factor, - samples[startBefore + eop._yPoleWanderRadiansColumn], - samples[startAfter + eop._yPoleWanderRadiansColumn] - ); - result.xPoleOffset = linearInterp( - factor, - samples[startBefore + eop._xCelestialPoleOffsetRadiansColumn], - samples[startAfter + eop._xCelestialPoleOffsetRadiansColumn] - ); - result.yPoleOffset = linearInterp( - factor, - samples[startBefore + eop._yCelestialPoleOffsetRadiansColumn], - samples[startAfter + eop._yCelestialPoleOffsetRadiansColumn] - ); - result.ut1MinusUtc = linearInterp( - factor, - beforeUt1MinusUtc, - afterUt1MinusUtc - ); - return result; - } - - /** - * A rotation expressed as a heading, pitch, and roll. Heading is the rotation about the - * negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about - * the positive x axis. - * @alias HeadingPitchRoll - * @constructor - * - * @param {Number} [heading=0.0] The heading component in radians. - * @param {Number} [pitch=0.0] The pitch component in radians. - * @param {Number} [roll=0.0] The roll component in radians. - */ - function HeadingPitchRoll(heading, pitch, roll) { - /** - * Gets or sets the heading. - * @type {Number} - * @default 0.0 - */ - this.heading = defaultValue.defaultValue(heading, 0.0); - /** - * Gets or sets the pitch. - * @type {Number} - * @default 0.0 - */ - this.pitch = defaultValue.defaultValue(pitch, 0.0); - /** - * Gets or sets the roll. - * @type {Number} - * @default 0.0 - */ - this.roll = defaultValue.defaultValue(roll, 0.0); - } - - /** - * Computes the heading, pitch and roll from a quaternion (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles ) - * - * @param {Quaternion} quaternion The quaternion from which to retrieve heading, pitch, and roll, all expressed in radians. - * @param {HeadingPitchRoll} [result] The object in which to store the result. If not provided, a new instance is created and returned. - * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided. - */ - HeadingPitchRoll.fromQuaternion = function (quaternion, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(quaternion)) { - throw new Check.DeveloperError("quaternion is required"); - } - //>>includeEnd('debug'); - if (!defaultValue.defined(result)) { - result = new HeadingPitchRoll(); - } - const test = 2 * (quaternion.w * quaternion.y - quaternion.z * quaternion.x); - const denominatorRoll = - 1 - 2 * (quaternion.x * quaternion.x + quaternion.y * quaternion.y); - const numeratorRoll = - 2 * (quaternion.w * quaternion.x + quaternion.y * quaternion.z); - const denominatorHeading = - 1 - 2 * (quaternion.y * quaternion.y + quaternion.z * quaternion.z); - const numeratorHeading = - 2 * (quaternion.w * quaternion.z + quaternion.x * quaternion.y); - result.heading = -Math.atan2(numeratorHeading, denominatorHeading); - result.roll = Math.atan2(numeratorRoll, denominatorRoll); - result.pitch = -Math$1.CesiumMath.asinClamped(test); - return result; - }; - - /** - * Returns a new HeadingPitchRoll instance from angles given in degrees. - * - * @param {Number} heading the heading in degrees - * @param {Number} pitch the pitch in degrees - * @param {Number} roll the heading in degrees - * @param {HeadingPitchRoll} [result] The object in which to store the result. If not provided, a new instance is created and returned. - * @returns {HeadingPitchRoll} A new HeadingPitchRoll instance - */ - HeadingPitchRoll.fromDegrees = function (heading, pitch, roll, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(heading)) { - throw new Check.DeveloperError("heading is required"); - } - if (!defaultValue.defined(pitch)) { - throw new Check.DeveloperError("pitch is required"); - } - if (!defaultValue.defined(roll)) { - throw new Check.DeveloperError("roll is required"); - } - //>>includeEnd('debug'); - if (!defaultValue.defined(result)) { - result = new HeadingPitchRoll(); - } - result.heading = heading * Math$1.CesiumMath.RADIANS_PER_DEGREE; - result.pitch = pitch * Math$1.CesiumMath.RADIANS_PER_DEGREE; - result.roll = roll * Math$1.CesiumMath.RADIANS_PER_DEGREE; - return result; - }; - - /** - * Duplicates a HeadingPitchRoll instance. - * - * @param {HeadingPitchRoll} headingPitchRoll The HeadingPitchRoll to duplicate. - * @param {HeadingPitchRoll} [result] The object onto which to store the result. - * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided. (Returns undefined if headingPitchRoll is undefined) - */ - HeadingPitchRoll.clone = function (headingPitchRoll, result) { - if (!defaultValue.defined(headingPitchRoll)) { - return undefined; - } - if (!defaultValue.defined(result)) { - return new HeadingPitchRoll( - headingPitchRoll.heading, - headingPitchRoll.pitch, - headingPitchRoll.roll - ); - } - result.heading = headingPitchRoll.heading; - result.pitch = headingPitchRoll.pitch; - result.roll = headingPitchRoll.roll; - return result; - }; - - /** - * Compares the provided HeadingPitchRolls componentwise and returns - * true if they are equal, false otherwise. - * - * @param {HeadingPitchRoll} [left] The first HeadingPitchRoll. - * @param {HeadingPitchRoll} [right] The second HeadingPitchRoll. - * @returns {Boolean} true if left and right are equal, false otherwise. - */ - HeadingPitchRoll.equals = function (left, right) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - left.heading === right.heading && - left.pitch === right.pitch && - left.roll === right.roll) - ); - }; - - /** - * Compares the provided HeadingPitchRolls componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {HeadingPitchRoll} [left] The first HeadingPitchRoll. - * @param {HeadingPitchRoll} [right] The second HeadingPitchRoll. - * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise. - */ - HeadingPitchRoll.equalsEpsilon = function ( - left, - right, - relativeEpsilon, - absoluteEpsilon - ) { - return ( - left === right || - (defaultValue.defined(left) && - defaultValue.defined(right) && - Math$1.CesiumMath.equalsEpsilon( - left.heading, - right.heading, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - left.pitch, - right.pitch, - relativeEpsilon, - absoluteEpsilon - ) && - Math$1.CesiumMath.equalsEpsilon( - left.roll, - right.roll, - relativeEpsilon, - absoluteEpsilon - )) - ); - }; - - /** - * Duplicates this HeadingPitchRoll instance. - * - * @param {HeadingPitchRoll} [result] The object onto which to store the result. - * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided. - */ - HeadingPitchRoll.prototype.clone = function (result) { - return HeadingPitchRoll.clone(this, result); - }; - - /** - * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns - * true if they are equal, false otherwise. - * - * @param {HeadingPitchRoll} [right] The right hand side HeadingPitchRoll. - * @returns {Boolean} true if they are equal, false otherwise. - */ - HeadingPitchRoll.prototype.equals = function (right) { - return HeadingPitchRoll.equals(this, right); - }; - - /** - * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns - * true if they pass an absolute or relative tolerance test, - * false otherwise. - * - * @param {HeadingPitchRoll} [right] The right hand side HeadingPitchRoll. - * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing. - * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing. - * @returns {Boolean} true if they are within the provided epsilon, false otherwise. - */ - HeadingPitchRoll.prototype.equalsEpsilon = function ( - right, - relativeEpsilon, - absoluteEpsilon - ) { - return HeadingPitchRoll.equalsEpsilon( - this, - right, - relativeEpsilon, - absoluteEpsilon - ); - }; - - /** - * Creates a string representing this HeadingPitchRoll in the format '(heading, pitch, roll)' in radians. - * - * @returns {String} A string representing the provided HeadingPitchRoll in the format '(heading, pitch, roll)'. - */ - HeadingPitchRoll.prototype.toString = function () { - return `(${this.heading}, ${this.pitch}, ${this.roll})`; - }; - - /*global CESIUM_BASE_URL,define,require*/ - - const cesiumScriptRegex = /((?:.*\/)|^)Cesium\.js(?:\?|\#|$)/; - function getBaseUrlFromCesiumScript() { - const scripts = document.getElementsByTagName("script"); - for (let i = 0, len = scripts.length; i < len; ++i) { - const src = scripts[i].getAttribute("src"); - const result = cesiumScriptRegex.exec(src); - if (result !== null) { - return result[1]; - } - } - return undefined; - } - - let a; - function tryMakeAbsolute(url) { - if (typeof document === "undefined") { - //Node.js and Web Workers. In both cases, the URL will already be absolute. - return url; - } - - if (!defaultValue.defined(a)) { - a = document.createElement("a"); - } - a.href = url; - - // IE only absolutizes href on get, not set - // eslint-disable-next-line no-self-assign - a.href = a.href; - return a.href; - } - - let baseResource; - function getCesiumBaseUrl() { - if (defaultValue.defined(baseResource)) { - return baseResource; - } - - let baseUrlString; - if (typeof CESIUM_BASE_URL !== "undefined") { - baseUrlString = CESIUM_BASE_URL; - } else if ( - typeof define === "object" && - defaultValue.defined(define.amd) && - !define.amd.toUrlUndefined && - defaultValue.defined(require.toUrl) - ) { - baseUrlString = getAbsoluteUri( - "..", - buildModuleUrl("Core/buildModuleUrl.js") - ); - } else { - baseUrlString = getBaseUrlFromCesiumScript(); - } - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(baseUrlString)) { - throw new Check.DeveloperError( - "Unable to determine Cesium base URL automatically, try defining a global variable called CESIUM_BASE_URL." - ); - } - //>>includeEnd('debug'); - - baseResource = new Resource({ - url: tryMakeAbsolute(baseUrlString), - }); - baseResource.appendForwardSlash(); - - return baseResource; - } - - function buildModuleUrlFromRequireToUrl(moduleID) { - //moduleID will be non-relative, so require it relative to this module, in Core. - return tryMakeAbsolute(require.toUrl(`../${moduleID}`)); - } - - function buildModuleUrlFromBaseUrl(moduleID) { - const resource = getCesiumBaseUrl().getDerivedResource({ - url: moduleID, - }); - return resource.url; - } - - let implementation; - - /** - * Given a relative URL under the Cesium base URL, returns an absolute URL. - * @function - * - * @param {String} relativeUrl The relative path. - * @returns {String} The absolutely URL representation of the provided path. - * - * @example - * const viewer = new Cesium.Viewer("cesiumContainer", { - * imageryProvider: new Cesium.TileMapServiceImageryProvider({ - * url: Cesium.buildModuleUrl("Assets/Textures/NaturalEarthII"), - * }), - * baseLayerPicker: false, - * }); - */ - function buildModuleUrl(relativeUrl) { - if (!defaultValue.defined(implementation)) { - //select implementation - if ( - typeof define === "object" && - defaultValue.defined(define.amd) && - !define.amd.toUrlUndefined && - defaultValue.defined(require.toUrl) - ) { - implementation = buildModuleUrlFromRequireToUrl; - } else { - implementation = buildModuleUrlFromBaseUrl; - } - } - - const url = implementation(relativeUrl); - return url; - } - - // exposed for testing - buildModuleUrl._cesiumScriptRegex = cesiumScriptRegex; - buildModuleUrl._buildModuleUrlFromBaseUrl = buildModuleUrlFromBaseUrl; - buildModuleUrl._clearBaseResource = function () { - baseResource = undefined; - }; - - /** - * Sets the base URL for resolving modules. - * @param {String} value The new base URL. - */ - buildModuleUrl.setBaseUrl = function (value) { - baseResource = Resource.DEFAULT.getDerivedResource({ - url: value, - }); - }; - - /** - * Gets the base URL for resolving modules. - * - * @function - * @returns {String} The configured base URL - */ - buildModuleUrl.getCesiumBaseUrl = getCesiumBaseUrl; - - /** - * An IAU 2006 XYS value sampled at a particular time. - * - * @alias Iau2006XysSample - * @constructor - * - * @param {Number} x The X value. - * @param {Number} y The Y value. - * @param {Number} s The S value. - * - * @private - */ - function Iau2006XysSample(x, y, s) { - /** - * The X value. - * @type {Number} - */ - this.x = x; - - /** - * The Y value. - * @type {Number} - */ - this.y = y; - - /** - * The S value. - * @type {Number} - */ - this.s = s; - } - - /** - * A set of IAU2006 XYS data that is used to evaluate the transformation between the International - * Celestial Reference Frame (ICRF) and the International Terrestrial Reference Frame (ITRF). - * - * @alias Iau2006XysData - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {Resource|String} [options.xysFileUrlTemplate='Assets/IAU2006_XYS/IAU2006_XYS_{0}.json'] A template URL for obtaining the XYS data. In the template, - * `{0}` will be replaced with the file index. - * @param {Number} [options.interpolationOrder=9] The order of interpolation to perform on the XYS data. - * @param {Number} [options.sampleZeroJulianEphemerisDate=2442396.5] The Julian ephemeris date (JED) of the - * first XYS sample. - * @param {Number} [options.stepSizeDays=1.0] The step size, in days, between successive XYS samples. - * @param {Number} [options.samplesPerXysFile=1000] The number of samples in each XYS file. - * @param {Number} [options.totalSamples=27426] The total number of samples in all XYS files. - * - * @private - */ - function Iau2006XysData(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - this._xysFileUrlTemplate = Resource.createIfNeeded( - options.xysFileUrlTemplate - ); - this._interpolationOrder = defaultValue.defaultValue(options.interpolationOrder, 9); - this._sampleZeroJulianEphemerisDate = defaultValue.defaultValue( - options.sampleZeroJulianEphemerisDate, - 2442396.5 - ); - this._sampleZeroDateTT = new JulianDate( - this._sampleZeroJulianEphemerisDate, - 0.0, - TimeStandard$1.TAI - ); - this._stepSizeDays = defaultValue.defaultValue(options.stepSizeDays, 1.0); - this._samplesPerXysFile = defaultValue.defaultValue(options.samplesPerXysFile, 1000); - this._totalSamples = defaultValue.defaultValue(options.totalSamples, 27426); - this._samples = new Array(this._totalSamples * 3); - this._chunkDownloadsInProgress = []; - - const order = this._interpolationOrder; - - // Compute denominators and X values for interpolation. - const denom = (this._denominators = new Array(order + 1)); - const xTable = (this._xTable = new Array(order + 1)); - - const stepN = Math.pow(this._stepSizeDays, order); - - for (let i = 0; i <= order; ++i) { - denom[i] = stepN; - xTable[i] = i * this._stepSizeDays; - - for (let j = 0; j <= order; ++j) { - if (j !== i) { - denom[i] *= i - j; - } - } - - denom[i] = 1.0 / denom[i]; - } - - // Allocate scratch arrays for interpolation. - this._work = new Array(order + 1); - this._coef = new Array(order + 1); - } - - const julianDateScratch = new JulianDate(0, 0.0, TimeStandard$1.TAI); - - function getDaysSinceEpoch(xys, dayTT, secondTT) { - const dateTT = julianDateScratch; - dateTT.dayNumber = dayTT; - dateTT.secondsOfDay = secondTT; - return JulianDate.daysDifference(dateTT, xys._sampleZeroDateTT); - } - - /** - * Preloads XYS data for a specified date range. - * - * @param {Number} startDayTT The Julian day number of the beginning of the interval to preload, expressed in - * the Terrestrial Time (TT) time standard. - * @param {Number} startSecondTT The seconds past noon of the beginning of the interval to preload, expressed in - * the Terrestrial Time (TT) time standard. - * @param {Number} stopDayTT The Julian day number of the end of the interval to preload, expressed in - * the Terrestrial Time (TT) time standard. - * @param {Number} stopSecondTT The seconds past noon of the end of the interval to preload, expressed in - * the Terrestrial Time (TT) time standard. - * @returns {Promise} A promise that, when resolved, indicates that the requested interval has been - * preloaded. - */ - Iau2006XysData.prototype.preload = function ( - startDayTT, - startSecondTT, - stopDayTT, - stopSecondTT - ) { - const startDaysSinceEpoch = getDaysSinceEpoch( - this, - startDayTT, - startSecondTT - ); - const stopDaysSinceEpoch = getDaysSinceEpoch(this, stopDayTT, stopSecondTT); - - let startIndex = - (startDaysSinceEpoch / this._stepSizeDays - this._interpolationOrder / 2) | - 0; - if (startIndex < 0) { - startIndex = 0; - } - - let stopIndex = - (stopDaysSinceEpoch / this._stepSizeDays - this._interpolationOrder / 2) | - (0 + this._interpolationOrder); - if (stopIndex >= this._totalSamples) { - stopIndex = this._totalSamples - 1; - } - - const startChunk = (startIndex / this._samplesPerXysFile) | 0; - const stopChunk = (stopIndex / this._samplesPerXysFile) | 0; - - const promises = []; - for (let i = startChunk; i <= stopChunk; ++i) { - promises.push(requestXysChunk(this, i)); - } - - return Promise.all(promises); - }; - - /** - * Computes the XYS values for a given date by interpolating. If the required data is not yet downloaded, - * this method will return undefined. - * - * @param {Number} dayTT The Julian day number for which to compute the XYS value, expressed in - * the Terrestrial Time (TT) time standard. - * @param {Number} secondTT The seconds past noon of the date for which to compute the XYS value, expressed in - * the Terrestrial Time (TT) time standard. - * @param {Iau2006XysSample} [result] The instance to which to copy the interpolated result. If this parameter - * is undefined, a new instance is allocated and returned. - * @returns {Iau2006XysSample} The interpolated XYS values, or undefined if the required data for this - * computation has not yet been downloaded. - * - * @see Iau2006XysData#preload - */ - Iau2006XysData.prototype.computeXysRadians = function ( - dayTT, - secondTT, - result - ) { - const daysSinceEpoch = getDaysSinceEpoch(this, dayTT, secondTT); - if (daysSinceEpoch < 0.0) { - // Can't evaluate prior to the epoch of the data. - return undefined; - } - - const centerIndex = (daysSinceEpoch / this._stepSizeDays) | 0; - if (centerIndex >= this._totalSamples) { - // Can't evaluate after the last sample in the data. - return undefined; - } - - const degree = this._interpolationOrder; - - let firstIndex = centerIndex - ((degree / 2) | 0); - if (firstIndex < 0) { - firstIndex = 0; - } - let lastIndex = firstIndex + degree; - if (lastIndex >= this._totalSamples) { - lastIndex = this._totalSamples - 1; - firstIndex = lastIndex - degree; - if (firstIndex < 0) { - firstIndex = 0; - } - } - - // Are all the samples we need present? - // We can assume so if the first and last are present - let isDataMissing = false; - const samples = this._samples; - if (!defaultValue.defined(samples[firstIndex * 3])) { - requestXysChunk(this, (firstIndex / this._samplesPerXysFile) | 0); - isDataMissing = true; - } - - if (!defaultValue.defined(samples[lastIndex * 3])) { - requestXysChunk(this, (lastIndex / this._samplesPerXysFile) | 0); - isDataMissing = true; - } - - if (isDataMissing) { - return undefined; - } - - if (!defaultValue.defined(result)) { - result = new Iau2006XysSample(0.0, 0.0, 0.0); - } else { - result.x = 0.0; - result.y = 0.0; - result.s = 0.0; - } - - const x = daysSinceEpoch - firstIndex * this._stepSizeDays; - - const work = this._work; - const denom = this._denominators; - const coef = this._coef; - const xTable = this._xTable; - - let i, j; - for (i = 0; i <= degree; ++i) { - work[i] = x - xTable[i]; - } - - for (i = 0; i <= degree; ++i) { - coef[i] = 1.0; - - for (j = 0; j <= degree; ++j) { - if (j !== i) { - coef[i] *= work[j]; - } - } - - coef[i] *= denom[i]; - - let sampleIndex = (firstIndex + i) * 3; - result.x += coef[i] * samples[sampleIndex++]; - result.y += coef[i] * samples[sampleIndex++]; - result.s += coef[i] * samples[sampleIndex]; - } - - return result; - }; - - function requestXysChunk(xysData, chunkIndex) { - if (xysData._chunkDownloadsInProgress[chunkIndex]) { - // Chunk has already been requested. - return xysData._chunkDownloadsInProgress[chunkIndex]; - } - - let chunkUrl; - const xysFileUrlTemplate = xysData._xysFileUrlTemplate; - if (defaultValue.defined(xysFileUrlTemplate)) { - chunkUrl = xysFileUrlTemplate.getDerivedResource({ - templateValues: { - 0: chunkIndex, - }, - }); - } else { - chunkUrl = new Resource({ - url: buildModuleUrl(`Assets/IAU2006_XYS/IAU2006_XYS_${chunkIndex}.json`), - }); - } - - const promise = chunkUrl.fetchJson().then(function (chunk) { - xysData._chunkDownloadsInProgress[chunkIndex] = false; - - const samples = xysData._samples; - const newSamples = chunk.samples; - const startIndex = chunkIndex * xysData._samplesPerXysFile * 3; - - for (let i = 0, len = newSamples.length; i < len; ++i) { - samples[startIndex + i] = newSamples[i]; - } - }); - xysData._chunkDownloadsInProgress[chunkIndex] = promise; - - return promise; - } - - /** - * Contains functions for transforming positions to various reference frames. - * - * @namespace Transforms - */ - const Transforms = {}; - - const vectorProductLocalFrame = { - up: { - south: "east", - north: "west", - west: "south", - east: "north", - }, - down: { - south: "west", - north: "east", - west: "north", - east: "south", - }, - south: { - up: "west", - down: "east", - west: "down", - east: "up", - }, - north: { - up: "east", - down: "west", - west: "up", - east: "down", - }, - west: { - up: "north", - down: "south", - north: "down", - south: "up", - }, - east: { - up: "south", - down: "north", - north: "up", - south: "down", - }, - }; - - const degeneratePositionLocalFrame = { - north: [-1, 0, 0], - east: [0, 1, 0], - up: [0, 0, 1], - south: [1, 0, 0], - west: [0, -1, 0], - down: [0, 0, -1], - }; - - const localFrameToFixedFrameCache = {}; - - const scratchCalculateCartesian = { - east: new Matrix3.Cartesian3(), - north: new Matrix3.Cartesian3(), - up: new Matrix3.Cartesian3(), - west: new Matrix3.Cartesian3(), - south: new Matrix3.Cartesian3(), - down: new Matrix3.Cartesian3(), - }; - let scratchFirstCartesian = new Matrix3.Cartesian3(); - let scratchSecondCartesian = new Matrix3.Cartesian3(); - let scratchThirdCartesian = new Matrix3.Cartesian3(); - /** - * Generates a function that computes a 4x4 transformation matrix from a reference frame - * centered at the provided origin to the provided ellipsoid's fixed reference frame. - * @param {String} firstAxis name of the first axis of the local reference frame. Must be - * 'east', 'north', 'up', 'west', 'south' or 'down'. - * @param {String} secondAxis name of the second axis of the local reference frame. Must be - * 'east', 'north', 'up', 'west', 'south' or 'down'. - * @return {Transforms.LocalFrameToFixedFrame} The function that will computes a - * 4x4 transformation matrix from a reference frame, with first axis and second axis compliant with the parameters, - */ - Transforms.localFrameToFixedFrameGenerator = function (firstAxis, secondAxis) { - if ( - !vectorProductLocalFrame.hasOwnProperty(firstAxis) || - !vectorProductLocalFrame[firstAxis].hasOwnProperty(secondAxis) - ) { - throw new Check.DeveloperError( - "firstAxis and secondAxis must be east, north, up, west, south or down." - ); - } - const thirdAxis = vectorProductLocalFrame[firstAxis][secondAxis]; - - /** - * Computes a 4x4 transformation matrix from a reference frame - * centered at the provided origin to the provided ellipsoid's fixed reference frame. - * @callback Transforms.LocalFrameToFixedFrame - * @param {Cartesian3} origin The center point of the local reference frame. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided. - */ - let resultat; - const hashAxis = firstAxis + secondAxis; - if (defaultValue.defined(localFrameToFixedFrameCache[hashAxis])) { - resultat = localFrameToFixedFrameCache[hashAxis]; - } else { - resultat = function (origin, ellipsoid, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(origin)) { - throw new Check.DeveloperError("origin is required."); - } - //>>includeEnd('debug'); - if (!defaultValue.defined(result)) { - result = new Matrix2.Matrix4(); - } - if ( - Matrix3.Cartesian3.equalsEpsilon(origin, Matrix3.Cartesian3.ZERO, Math$1.CesiumMath.EPSILON14) - ) { - // If x, y, and z are zero, use the degenerate local frame, which is a special case - Matrix3.Cartesian3.unpack( - degeneratePositionLocalFrame[firstAxis], - 0, - scratchFirstCartesian - ); - Matrix3.Cartesian3.unpack( - degeneratePositionLocalFrame[secondAxis], - 0, - scratchSecondCartesian - ); - Matrix3.Cartesian3.unpack( - degeneratePositionLocalFrame[thirdAxis], - 0, - scratchThirdCartesian - ); - } else if ( - Math$1.CesiumMath.equalsEpsilon(origin.x, 0.0, Math$1.CesiumMath.EPSILON14) && - Math$1.CesiumMath.equalsEpsilon(origin.y, 0.0, Math$1.CesiumMath.EPSILON14) - ) { - // If x and y are zero, assume origin is at a pole, which is a special case. - const sign = Math$1.CesiumMath.sign(origin.z); - - Matrix3.Cartesian3.unpack( - degeneratePositionLocalFrame[firstAxis], - 0, - scratchFirstCartesian - ); - if (firstAxis !== "east" && firstAxis !== "west") { - Matrix3.Cartesian3.multiplyByScalar( - scratchFirstCartesian, - sign, - scratchFirstCartesian - ); - } - - Matrix3.Cartesian3.unpack( - degeneratePositionLocalFrame[secondAxis], - 0, - scratchSecondCartesian - ); - if (secondAxis !== "east" && secondAxis !== "west") { - Matrix3.Cartesian3.multiplyByScalar( - scratchSecondCartesian, - sign, - scratchSecondCartesian - ); - } - - Matrix3.Cartesian3.unpack( - degeneratePositionLocalFrame[thirdAxis], - 0, - scratchThirdCartesian - ); - if (thirdAxis !== "east" && thirdAxis !== "west") { - Matrix3.Cartesian3.multiplyByScalar( - scratchThirdCartesian, - sign, - scratchThirdCartesian - ); - } - } else { - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - ellipsoid.geodeticSurfaceNormal(origin, scratchCalculateCartesian.up); - - const up = scratchCalculateCartesian.up; - const east = scratchCalculateCartesian.east; - east.x = -origin.y; - east.y = origin.x; - east.z = 0.0; - Matrix3.Cartesian3.normalize(east, scratchCalculateCartesian.east); - Matrix3.Cartesian3.cross(up, east, scratchCalculateCartesian.north); - - Matrix3.Cartesian3.multiplyByScalar( - scratchCalculateCartesian.up, - -1, - scratchCalculateCartesian.down - ); - Matrix3.Cartesian3.multiplyByScalar( - scratchCalculateCartesian.east, - -1, - scratchCalculateCartesian.west - ); - Matrix3.Cartesian3.multiplyByScalar( - scratchCalculateCartesian.north, - -1, - scratchCalculateCartesian.south - ); - - scratchFirstCartesian = scratchCalculateCartesian[firstAxis]; - scratchSecondCartesian = scratchCalculateCartesian[secondAxis]; - scratchThirdCartesian = scratchCalculateCartesian[thirdAxis]; - } - result[0] = scratchFirstCartesian.x; - result[1] = scratchFirstCartesian.y; - result[2] = scratchFirstCartesian.z; - result[3] = 0.0; - result[4] = scratchSecondCartesian.x; - result[5] = scratchSecondCartesian.y; - result[6] = scratchSecondCartesian.z; - result[7] = 0.0; - result[8] = scratchThirdCartesian.x; - result[9] = scratchThirdCartesian.y; - result[10] = scratchThirdCartesian.z; - result[11] = 0.0; - result[12] = origin.x; - result[13] = origin.y; - result[14] = origin.z; - result[15] = 1.0; - return result; - }; - localFrameToFixedFrameCache[hashAxis] = resultat; - } - return resultat; - }; - - /** - * Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes - * centered at the provided origin to the provided ellipsoid's fixed reference frame. - * The local axes are defined as: - *
      - *
    • The x axis points in the local east direction.
    • - *
    • The y axis points in the local north direction.
    • - *
    • The z axis points in the direction of the ellipsoid surface normal which passes through the position.
    • - *
    - * - * @function - * @param {Cartesian3} origin The center point of the local reference frame. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided. - * - * @example - * // Get the transform from local east-north-up at cartographic (0.0, 0.0) to Earth's fixed frame. - * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); - * const transform = Cesium.Transforms.eastNorthUpToFixedFrame(center); - */ - Transforms.eastNorthUpToFixedFrame = Transforms.localFrameToFixedFrameGenerator( - "east", - "north" - ); - - /** - * Computes a 4x4 transformation matrix from a reference frame with an north-east-down axes - * centered at the provided origin to the provided ellipsoid's fixed reference frame. - * The local axes are defined as: - *
      - *
    • The x axis points in the local north direction.
    • - *
    • The y axis points in the local east direction.
    • - *
    • The z axis points in the opposite direction of the ellipsoid surface normal which passes through the position.
    • - *
    - * - * @function - * @param {Cartesian3} origin The center point of the local reference frame. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided. - * - * @example - * // Get the transform from local north-east-down at cartographic (0.0, 0.0) to Earth's fixed frame. - * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); - * const transform = Cesium.Transforms.northEastDownToFixedFrame(center); - */ - Transforms.northEastDownToFixedFrame = Transforms.localFrameToFixedFrameGenerator( - "north", - "east" - ); - - /** - * Computes a 4x4 transformation matrix from a reference frame with an north-up-east axes - * centered at the provided origin to the provided ellipsoid's fixed reference frame. - * The local axes are defined as: - *
      - *
    • The x axis points in the local north direction.
    • - *
    • The y axis points in the direction of the ellipsoid surface normal which passes through the position.
    • - *
    • The z axis points in the local east direction.
    • - *
    - * - * @function - * @param {Cartesian3} origin The center point of the local reference frame. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided. - * - * @example - * // Get the transform from local north-up-east at cartographic (0.0, 0.0) to Earth's fixed frame. - * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); - * const transform = Cesium.Transforms.northUpEastToFixedFrame(center); - */ - Transforms.northUpEastToFixedFrame = Transforms.localFrameToFixedFrameGenerator( - "north", - "up" - ); - - /** - * Computes a 4x4 transformation matrix from a reference frame with an north-west-up axes - * centered at the provided origin to the provided ellipsoid's fixed reference frame. - * The local axes are defined as: - *
      - *
    • The x axis points in the local north direction.
    • - *
    • The y axis points in the local west direction.
    • - *
    • The z axis points in the direction of the ellipsoid surface normal which passes through the position.
    • - *
    - * - * @function - * @param {Cartesian3} origin The center point of the local reference frame. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided. - * - * @example - * // Get the transform from local north-West-Up at cartographic (0.0, 0.0) to Earth's fixed frame. - * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); - * const transform = Cesium.Transforms.northWestUpToFixedFrame(center); - */ - Transforms.northWestUpToFixedFrame = Transforms.localFrameToFixedFrameGenerator( - "north", - "west" - ); - - const scratchHPRQuaternion = new Quaternion(); - const scratchScale = new Matrix3.Cartesian3(1.0, 1.0, 1.0); - const scratchHPRMatrix4 = new Matrix2.Matrix4(); - - /** - * Computes a 4x4 transformation matrix from a reference frame with axes computed from the heading-pitch-roll angles - * centered at the provided origin to the provided ellipsoid's fixed reference frame. Heading is the rotation from the local north - * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles - * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis. - * - * @param {Cartesian3} origin The center point of the local reference frame. - * @param {HeadingPitchRoll} headingPitchRoll The heading, pitch, and roll. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation - * matrix from a reference frame to the provided ellipsoid's fixed reference frame - * @param {Matrix4} [result] The object onto which to store the result. - * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided. - * - * @example - * // Get the transform from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame. - * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); - * const heading = -Cesium.Math.PI_OVER_TWO; - * const pitch = Cesium.Math.PI_OVER_FOUR; - * const roll = 0.0; - * const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll); - * const transform = Cesium.Transforms.headingPitchRollToFixedFrame(center, hpr); - */ - Transforms.headingPitchRollToFixedFrame = function ( - origin, - headingPitchRoll, - ellipsoid, - fixedFrameTransform, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("HeadingPitchRoll", headingPitchRoll); - //>>includeEnd('debug'); - - fixedFrameTransform = defaultValue.defaultValue( - fixedFrameTransform, - Transforms.eastNorthUpToFixedFrame - ); - const hprQuaternion = Quaternion.fromHeadingPitchRoll( - headingPitchRoll, - scratchHPRQuaternion - ); - const hprMatrix = Matrix2.Matrix4.fromTranslationQuaternionRotationScale( - Matrix3.Cartesian3.ZERO, - hprQuaternion, - scratchScale, - scratchHPRMatrix4 - ); - result = fixedFrameTransform(origin, ellipsoid, result); - return Matrix2.Matrix4.multiply(result, hprMatrix, result); - }; - - const scratchENUMatrix4 = new Matrix2.Matrix4(); - const scratchHPRMatrix3 = new Matrix3.Matrix3(); - - /** - * Computes a quaternion from a reference frame with axes computed from the heading-pitch-roll angles - * centered at the provided origin. Heading is the rotation from the local north - * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles - * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis. - * - * @param {Cartesian3} origin The center point of the local reference frame. - * @param {HeadingPitchRoll} headingPitchRoll The heading, pitch, and roll. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation - * matrix from a reference frame to the provided ellipsoid's fixed reference frame - * @param {Quaternion} [result] The object onto which to store the result. - * @returns {Quaternion} The modified result parameter or a new Quaternion instance if none was provided. - * - * @example - * // Get the quaternion from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame. - * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0); - * const heading = -Cesium.Math.PI_OVER_TWO; - * const pitch = Cesium.Math.PI_OVER_FOUR; - * const roll = 0.0; - * const hpr = new HeadingPitchRoll(heading, pitch, roll); - * const quaternion = Cesium.Transforms.headingPitchRollQuaternion(center, hpr); - */ - Transforms.headingPitchRollQuaternion = function ( - origin, - headingPitchRoll, - ellipsoid, - fixedFrameTransform, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("HeadingPitchRoll", headingPitchRoll); - //>>includeEnd('debug'); - - const transform = Transforms.headingPitchRollToFixedFrame( - origin, - headingPitchRoll, - ellipsoid, - fixedFrameTransform, - scratchENUMatrix4 - ); - const rotation = Matrix2.Matrix4.getMatrix3(transform, scratchHPRMatrix3); - return Quaternion.fromRotationMatrix(rotation, result); - }; - - const noScale = new Matrix3.Cartesian3(1.0, 1.0, 1.0); - const hprCenterScratch = new Matrix3.Cartesian3(); - const ffScratch = new Matrix2.Matrix4(); - const hprTransformScratch = new Matrix2.Matrix4(); - const hprRotationScratch = new Matrix3.Matrix3(); - const hprQuaternionScratch = new Quaternion(); - /** - * Computes heading-pitch-roll angles from a transform in a particular reference frame. Heading is the rotation from the local north - * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles - * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis. - * - * @param {Matrix4} transform The transform - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation - * matrix from a reference frame to the provided ellipsoid's fixed reference frame - * @param {HeadingPitchRoll} [result] The object onto which to store the result. - * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if none was provided. - */ - Transforms.fixedFrameToHeadingPitchRoll = function ( - transform, - ellipsoid, - fixedFrameTransform, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("transform", transform); - //>>includeEnd('debug'); - - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - fixedFrameTransform = defaultValue.defaultValue( - fixedFrameTransform, - Transforms.eastNorthUpToFixedFrame - ); - if (!defaultValue.defined(result)) { - result = new HeadingPitchRoll(); - } - - const center = Matrix2.Matrix4.getTranslation(transform, hprCenterScratch); - if (Matrix3.Cartesian3.equals(center, Matrix3.Cartesian3.ZERO)) { - result.heading = 0; - result.pitch = 0; - result.roll = 0; - return result; - } - let toFixedFrame = Matrix2.Matrix4.inverseTransformation( - fixedFrameTransform(center, ellipsoid, ffScratch), - ffScratch - ); - let transformCopy = Matrix2.Matrix4.setScale(transform, noScale, hprTransformScratch); - transformCopy = Matrix2.Matrix4.setTranslation( - transformCopy, - Matrix3.Cartesian3.ZERO, - transformCopy - ); - - toFixedFrame = Matrix2.Matrix4.multiply(toFixedFrame, transformCopy, toFixedFrame); - let quaternionRotation = Quaternion.fromRotationMatrix( - Matrix2.Matrix4.getMatrix3(toFixedFrame, hprRotationScratch), - hprQuaternionScratch - ); - quaternionRotation = Quaternion.normalize( - quaternionRotation, - quaternionRotation - ); - - return HeadingPitchRoll.fromQuaternion(quaternionRotation, result); - }; - - const gmstConstant0 = 6 * 3600 + 41 * 60 + 50.54841; - const gmstConstant1 = 8640184.812866; - const gmstConstant2 = 0.093104; - const gmstConstant3 = -6.2e-6; - const rateCoef = 1.1772758384668e-19; - const wgs84WRPrecessing = 7.2921158553e-5; - const twoPiOverSecondsInDay = Math$1.CesiumMath.TWO_PI / 86400.0; - let dateInUtc = new JulianDate(); - - /** - * Computes a rotation matrix to transform a point or vector from True Equator Mean Equinox (TEME) axes to the - * pseudo-fixed axes at a given time. This method treats the UT1 time standard as equivalent to UTC. - * - * @param {JulianDate} date The time at which to compute the rotation matrix. - * @param {Matrix3} [result] The object onto which to store the result. - * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided. - * - * @example - * //Set the view to the inertial frame. - * scene.postUpdate.addEventListener(function(scene, time) { - * const now = Cesium.JulianDate.now(); - * const offset = Cesium.Matrix4.multiplyByPoint(camera.transform, camera.position, new Cesium.Cartesian3()); - * const transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Transforms.computeTemeToPseudoFixedMatrix(now)); - * const inverseTransform = Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4()); - * Cesium.Matrix4.multiplyByPoint(inverseTransform, offset, offset); - * camera.lookAtTransform(transform, offset); - * }); - */ - Transforms.computeTemeToPseudoFixedMatrix = function (date, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(date)) { - throw new Check.DeveloperError("date is required."); - } - //>>includeEnd('debug'); - - // GMST is actually computed using UT1. We're using UTC as an approximation of UT1. - // We do not want to use the function like convertTaiToUtc in JulianDate because - // we explicitly do not want to fail when inside the leap second. - - dateInUtc = JulianDate.addSeconds( - date, - -JulianDate.computeTaiMinusUtc(date), - dateInUtc - ); - const utcDayNumber = dateInUtc.dayNumber; - const utcSecondsIntoDay = dateInUtc.secondsOfDay; - - let t; - const diffDays = utcDayNumber - 2451545; - if (utcSecondsIntoDay >= 43200.0) { - t = (diffDays + 0.5) / TimeConstants$1.DAYS_PER_JULIAN_CENTURY; - } else { - t = (diffDays - 0.5) / TimeConstants$1.DAYS_PER_JULIAN_CENTURY; - } - - const gmst0 = - gmstConstant0 + - t * (gmstConstant1 + t * (gmstConstant2 + t * gmstConstant3)); - const angle = (gmst0 * twoPiOverSecondsInDay) % Math$1.CesiumMath.TWO_PI; - const ratio = wgs84WRPrecessing + rateCoef * (utcDayNumber - 2451545.5); - const secondsSinceMidnight = - (utcSecondsIntoDay + TimeConstants$1.SECONDS_PER_DAY * 0.5) % - TimeConstants$1.SECONDS_PER_DAY; - const gha = angle + ratio * secondsSinceMidnight; - const cosGha = Math.cos(gha); - const sinGha = Math.sin(gha); - - if (!defaultValue.defined(result)) { - return new Matrix3.Matrix3( - cosGha, - sinGha, - 0.0, - -sinGha, - cosGha, - 0.0, - 0.0, - 0.0, - 1.0 - ); - } - result[0] = cosGha; - result[1] = -sinGha; - result[2] = 0.0; - result[3] = sinGha; - result[4] = cosGha; - result[5] = 0.0; - result[6] = 0.0; - result[7] = 0.0; - result[8] = 1.0; - return result; - }; - - /** - * The source of IAU 2006 XYS data, used for computing the transformation between the - * Fixed and ICRF axes. - * @type {Iau2006XysData} - * - * @see Transforms.computeIcrfToFixedMatrix - * @see Transforms.computeFixedToIcrfMatrix - * - * @private - */ - Transforms.iau2006XysData = new Iau2006XysData(); - - /** - * The source of Earth Orientation Parameters (EOP) data, used for computing the transformation - * between the Fixed and ICRF axes. By default, zero values are used for all EOP values, - * yielding a reasonable but not completely accurate representation of the ICRF axes. - * @type {EarthOrientationParameters} - * - * @see Transforms.computeIcrfToFixedMatrix - * @see Transforms.computeFixedToIcrfMatrix - * - * @private - */ - Transforms.earthOrientationParameters = EarthOrientationParameters.NONE; - - const ttMinusTai = 32.184; - const j2000ttDays = 2451545.0; - - /** - * Preloads the data necessary to transform between the ICRF and Fixed axes, in either - * direction, over a given interval. This function returns a promise that, when resolved, - * indicates that the preload has completed. - * - * @param {TimeInterval} timeInterval The interval to preload. - * @returns {Promise} A promise that, when resolved, indicates that the preload has completed - * and evaluation of the transformation between the fixed and ICRF axes will - * no longer return undefined for a time inside the interval. - * - * - * @example - * const interval = new Cesium.TimeInterval(...); - * Promise.resolve(Cesium.Transforms.preloadIcrfFixed(interval)).then(function() { - * // the data is now loaded - * }); - * - * @see Transforms.computeIcrfToFixedMatrix - * @see Transforms.computeFixedToIcrfMatrix - */ - Transforms.preloadIcrfFixed = function (timeInterval) { - const startDayTT = timeInterval.start.dayNumber; - const startSecondTT = timeInterval.start.secondsOfDay + ttMinusTai; - const stopDayTT = timeInterval.stop.dayNumber; - const stopSecondTT = timeInterval.stop.secondsOfDay + ttMinusTai; - - const xysPromise = Transforms.iau2006XysData.preload( - startDayTT, - startSecondTT, - stopDayTT, - stopSecondTT - ); - const eopPromise = Transforms.earthOrientationParameters.getPromiseToLoad(); - - return Promise.all([xysPromise, eopPromise]); - }; - - /** - * Computes a rotation matrix to transform a point or vector from the International Celestial - * Reference Frame (GCRF/ICRF) inertial frame axes to the Earth-Fixed frame axes (ITRF) - * at a given time. This function may return undefined if the data necessary to - * do the transformation is not yet loaded. - * - * @param {JulianDate} date The time at which to compute the rotation matrix. - * @param {Matrix3} [result] The object onto which to store the result. If this parameter is - * not specified, a new instance is created and returned. - * @returns {Matrix3} The rotation matrix, or undefined if the data necessary to do the - * transformation is not yet loaded. - * - * - * @example - * scene.postUpdate.addEventListener(function(scene, time) { - * // View in ICRF. - * const icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time); - * if (Cesium.defined(icrfToFixed)) { - * const offset = Cesium.Cartesian3.clone(camera.position); - * const transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed); - * camera.lookAtTransform(transform, offset); - * } - * }); - * - * @see Transforms.preloadIcrfFixed - */ - Transforms.computeIcrfToFixedMatrix = function (date, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(date)) { - throw new Check.DeveloperError("date is required."); - } - //>>includeEnd('debug'); - if (!defaultValue.defined(result)) { - result = new Matrix3.Matrix3(); - } - - const fixedToIcrfMtx = Transforms.computeFixedToIcrfMatrix(date, result); - if (!defaultValue.defined(fixedToIcrfMtx)) { - return undefined; - } - - return Matrix3.Matrix3.transpose(fixedToIcrfMtx, result); - }; - - const xysScratch = new Iau2006XysSample(0.0, 0.0, 0.0); - const eopScratch = new EarthOrientationParametersSample( - 0.0, - 0.0, - 0.0, - 0.0, - 0.0); - const rotation1Scratch = new Matrix3.Matrix3(); - const rotation2Scratch = new Matrix3.Matrix3(); - - /** - * Computes a rotation matrix to transform a point or vector from the Earth-Fixed frame axes (ITRF) - * to the International Celestial Reference Frame (GCRF/ICRF) inertial frame axes - * at a given time. This function may return undefined if the data necessary to - * do the transformation is not yet loaded. - * - * @param {JulianDate} date The time at which to compute the rotation matrix. - * @param {Matrix3} [result] The object onto which to store the result. If this parameter is - * not specified, a new instance is created and returned. - * @returns {Matrix3} The rotation matrix, or undefined if the data necessary to do the - * transformation is not yet loaded. - * - * - * @example - * // Transform a point from the ICRF axes to the Fixed axes. - * const now = Cesium.JulianDate.now(); - * const pointInFixed = Cesium.Cartesian3.fromDegrees(0.0, 0.0); - * const fixedToIcrf = Cesium.Transforms.computeIcrfToFixedMatrix(now); - * let pointInInertial = new Cesium.Cartesian3(); - * if (Cesium.defined(fixedToIcrf)) { - * pointInInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, pointInFixed, pointInInertial); - * } - * - * @see Transforms.preloadIcrfFixed - */ - Transforms.computeFixedToIcrfMatrix = function (date, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(date)) { - throw new Check.DeveloperError("date is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Matrix3(); - } - - // Compute pole wander - const eop = Transforms.earthOrientationParameters.compute(date, eopScratch); - if (!defaultValue.defined(eop)) { - return undefined; - } - - // There is no external conversion to Terrestrial Time (TT). - // So use International Atomic Time (TAI) and convert using offsets. - // Here we are assuming that dayTT and secondTT are positive - const dayTT = date.dayNumber; - // It's possible here that secondTT could roll over 86400 - // This does not seem to affect the precision (unit tests check for this) - const secondTT = date.secondsOfDay + ttMinusTai; - - const xys = Transforms.iau2006XysData.computeXysRadians( - dayTT, - secondTT, - xysScratch - ); - if (!defaultValue.defined(xys)) { - return undefined; - } - - const x = xys.x + eop.xPoleOffset; - const y = xys.y + eop.yPoleOffset; - - // Compute XYS rotation - const a = 1.0 / (1.0 + Math.sqrt(1.0 - x * x - y * y)); - - const rotation1 = rotation1Scratch; - rotation1[0] = 1.0 - a * x * x; - rotation1[3] = -a * x * y; - rotation1[6] = x; - rotation1[1] = -a * x * y; - rotation1[4] = 1 - a * y * y; - rotation1[7] = y; - rotation1[2] = -x; - rotation1[5] = -y; - rotation1[8] = 1 - a * (x * x + y * y); - - const rotation2 = Matrix3.Matrix3.fromRotationZ(-xys.s, rotation2Scratch); - const matrixQ = Matrix3.Matrix3.multiply(rotation1, rotation2, rotation1Scratch); - - // Similar to TT conversions above - // It's possible here that secondTT could roll over 86400 - // This does not seem to affect the precision (unit tests check for this) - const dateUt1day = date.dayNumber; - const dateUt1sec = - date.secondsOfDay - JulianDate.computeTaiMinusUtc(date) + eop.ut1MinusUtc; - - // Compute Earth rotation angle - // The IERS standard for era is - // era = 0.7790572732640 + 1.00273781191135448 * Tu - // where - // Tu = JulianDateInUt1 - 2451545.0 - // However, you get much more precision if you make the following simplification - // era = a + (1 + b) * (JulianDayNumber + FractionOfDay - 2451545) - // era = a + (JulianDayNumber - 2451545) + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay) - // era = a + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay) - // since (JulianDayNumber - 2451545) represents an integer number of revolutions which will be discarded anyway. - const daysSinceJ2000 = dateUt1day - 2451545; - const fractionOfDay = dateUt1sec / TimeConstants$1.SECONDS_PER_DAY; - let era = - 0.779057273264 + - fractionOfDay + - 0.00273781191135448 * (daysSinceJ2000 + fractionOfDay); - era = (era % 1.0) * Math$1.CesiumMath.TWO_PI; - - const earthRotation = Matrix3.Matrix3.fromRotationZ(era, rotation2Scratch); - - // pseudoFixed to ICRF - const pfToIcrf = Matrix3.Matrix3.multiply(matrixQ, earthRotation, rotation1Scratch); - - // Compute pole wander matrix - const cosxp = Math.cos(eop.xPoleWander); - const cosyp = Math.cos(eop.yPoleWander); - const sinxp = Math.sin(eop.xPoleWander); - const sinyp = Math.sin(eop.yPoleWander); - - let ttt = dayTT - j2000ttDays + secondTT / TimeConstants$1.SECONDS_PER_DAY; - ttt /= 36525.0; - - // approximate sp value in rad - const sp = (-47.0e-6 * ttt * Math$1.CesiumMath.RADIANS_PER_DEGREE) / 3600.0; - const cossp = Math.cos(sp); - const sinsp = Math.sin(sp); - - const fToPfMtx = rotation2Scratch; - fToPfMtx[0] = cosxp * cossp; - fToPfMtx[1] = cosxp * sinsp; - fToPfMtx[2] = sinxp; - fToPfMtx[3] = -cosyp * sinsp + sinyp * sinxp * cossp; - fToPfMtx[4] = cosyp * cossp + sinyp * sinxp * sinsp; - fToPfMtx[5] = -sinyp * cosxp; - fToPfMtx[6] = -sinyp * sinsp - cosyp * sinxp * cossp; - fToPfMtx[7] = sinyp * cossp - cosyp * sinxp * sinsp; - fToPfMtx[8] = cosyp * cosxp; - - return Matrix3.Matrix3.multiply(pfToIcrf, fToPfMtx, result); - }; - - const pointToWindowCoordinatesTemp = new Matrix2.Cartesian4(); - - /** - * Transform a point from model coordinates to window coordinates. - * - * @param {Matrix4} modelViewProjectionMatrix The 4x4 model-view-projection matrix. - * @param {Matrix4} viewportTransformation The 4x4 viewport transformation. - * @param {Cartesian3} point The point to transform. - * @param {Cartesian2} [result] The object onto which to store the result. - * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided. - */ - Transforms.pointToWindowCoordinates = function ( - modelViewProjectionMatrix, - viewportTransformation, - point, - result - ) { - result = Transforms.pointToGLWindowCoordinates( - modelViewProjectionMatrix, - viewportTransformation, - point, - result - ); - result.y = 2.0 * viewportTransformation[5] - result.y; - return result; - }; - - /** - * @private - */ - Transforms.pointToGLWindowCoordinates = function ( - modelViewProjectionMatrix, - viewportTransformation, - point, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(modelViewProjectionMatrix)) { - throw new Check.DeveloperError("modelViewProjectionMatrix is required."); - } - - if (!defaultValue.defined(viewportTransformation)) { - throw new Check.DeveloperError("viewportTransformation is required."); - } - - if (!defaultValue.defined(point)) { - throw new Check.DeveloperError("point is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = new Matrix2.Cartesian2(); - } - - const tmp = pointToWindowCoordinatesTemp; - - Matrix2.Matrix4.multiplyByVector( - modelViewProjectionMatrix, - Matrix2.Cartesian4.fromElements(point.x, point.y, point.z, 1, tmp), - tmp - ); - Matrix2.Cartesian4.multiplyByScalar(tmp, 1.0 / tmp.w, tmp); - Matrix2.Matrix4.multiplyByVector(viewportTransformation, tmp, tmp); - return Matrix2.Cartesian2.fromCartesian4(tmp, result); - }; - - const normalScratch = new Matrix3.Cartesian3(); - const rightScratch = new Matrix3.Cartesian3(); - const upScratch = new Matrix3.Cartesian3(); - - /** - * Transform a position and velocity to a rotation matrix. - * - * @param {Cartesian3} position The position to transform. - * @param {Cartesian3} velocity The velocity vector to transform. - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation. - * @param {Matrix3} [result] The object onto which to store the result. - * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided. - */ - Transforms.rotationMatrixFromPositionVelocity = function ( - position, - velocity, - ellipsoid, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(position)) { - throw new Check.DeveloperError("position is required."); - } - - if (!defaultValue.defined(velocity)) { - throw new Check.DeveloperError("velocity is required."); - } - //>>includeEnd('debug'); - - const normal = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84).geodeticSurfaceNormal( - position, - normalScratch - ); - let right = Matrix3.Cartesian3.cross(velocity, normal, rightScratch); - - if (Matrix3.Cartesian3.equalsEpsilon(right, Matrix3.Cartesian3.ZERO, Math$1.CesiumMath.EPSILON6)) { - right = Matrix3.Cartesian3.clone(Matrix3.Cartesian3.UNIT_X, right); - } - - const up = Matrix3.Cartesian3.cross(right, velocity, upScratch); - Matrix3.Cartesian3.normalize(up, up); - Matrix3.Cartesian3.cross(velocity, up, right); - Matrix3.Cartesian3.negate(right, right); - Matrix3.Cartesian3.normalize(right, right); - - if (!defaultValue.defined(result)) { - result = new Matrix3.Matrix3(); - } - - result[0] = velocity.x; - result[1] = velocity.y; - result[2] = velocity.z; - result[3] = right.x; - result[4] = right.y; - result[5] = right.z; - result[6] = up.x; - result[7] = up.y; - result[8] = up.z; - - return result; - }; - - const swizzleMatrix = new Matrix2.Matrix4( - 0.0, - 0.0, - 1.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0, - 0.0, - 0.0, - 0.0, - 0.0, - 0.0, - 1.0 - ); - - const scratchCartographic = new Matrix3.Cartographic(); - const scratchCartesian3Projection = new Matrix3.Cartesian3(); - const scratchCenter = new Matrix3.Cartesian3(); - const scratchRotation = new Matrix3.Matrix3(); - const scratchFromENU = new Matrix2.Matrix4(); - const scratchToENU = new Matrix2.Matrix4(); - - /** - * @private - */ - Transforms.basisTo2D = function (projection, matrix, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(projection)) { - throw new Check.DeveloperError("projection is required."); - } - if (!defaultValue.defined(matrix)) { - throw new Check.DeveloperError("matrix is required."); - } - if (!defaultValue.defined(result)) { - throw new Check.DeveloperError("result is required."); - } - //>>includeEnd('debug'); - - const rtcCenter = Matrix2.Matrix4.getTranslation(matrix, scratchCenter); - const ellipsoid = projection.ellipsoid; - - // Get the 2D Center - const cartographic = ellipsoid.cartesianToCartographic( - rtcCenter, - scratchCartographic - ); - const projectedPosition = projection.project( - cartographic, - scratchCartesian3Projection - ); - Matrix3.Cartesian3.fromElements( - projectedPosition.z, - projectedPosition.x, - projectedPosition.y, - projectedPosition - ); - - // Assuming the instance are positioned in WGS84, invert the WGS84 transform to get the local transform and then convert to 2D - const fromENU = Transforms.eastNorthUpToFixedFrame( - rtcCenter, - ellipsoid, - scratchFromENU - ); - const toENU = Matrix2.Matrix4.inverseTransformation(fromENU, scratchToENU); - const rotation = Matrix2.Matrix4.getMatrix3(matrix, scratchRotation); - const local = Matrix2.Matrix4.multiplyByMatrix3(toENU, rotation, result); - Matrix2.Matrix4.multiply(swizzleMatrix, local, result); // Swap x, y, z for 2D - Matrix2.Matrix4.setTranslation(result, projectedPosition, result); // Use the projected center - - return result; - }; - - /** - * @private - */ - Transforms.wgs84To2DModelMatrix = function (projection, center, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(projection)) { - throw new Check.DeveloperError("projection is required."); - } - if (!defaultValue.defined(center)) { - throw new Check.DeveloperError("center is required."); - } - if (!defaultValue.defined(result)) { - throw new Check.DeveloperError("result is required."); - } - //>>includeEnd('debug'); - - const ellipsoid = projection.ellipsoid; - - const fromENU = Transforms.eastNorthUpToFixedFrame( - center, - ellipsoid, - scratchFromENU - ); - const toENU = Matrix2.Matrix4.inverseTransformation(fromENU, scratchToENU); - - const cartographic = ellipsoid.cartesianToCartographic( - center, - scratchCartographic - ); - const projectedPosition = projection.project( - cartographic, - scratchCartesian3Projection - ); - Matrix3.Cartesian3.fromElements( - projectedPosition.z, - projectedPosition.x, - projectedPosition.y, - projectedPosition - ); - - const translation = Matrix2.Matrix4.fromTranslation( - projectedPosition, - scratchFromENU - ); - Matrix2.Matrix4.multiply(swizzleMatrix, toENU, result); - Matrix2.Matrix4.multiply(translation, result, result); - - return result; - }; - var Transforms$1 = Transforms; - - exports.BoundingSphere = BoundingSphere; - exports.FeatureDetection = FeatureDetection$1; - exports.GeographicProjection = GeographicProjection; - exports.Intersect = Intersect$1; - exports.Interval = Interval; - exports.Quaternion = Quaternion; - exports.Resource = Resource; - exports.Transforms = Transforms$1; - exports.buildModuleUrl = buildModuleUrl; - -})); -//# sourceMappingURL=Transforms-11fb6b0a.js.map diff --git a/debug/cesium/Workers/Transforms-11fb6b0a.js.map b/debug/cesium/Workers/Transforms-11fb6b0a.js.map deleted file mode 100644 index 487fecd..0000000 --- a/debug/cesium/Workers/Transforms-11fb6b0a.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Transforms-11fb6b0a.js","sources":["../../../Source/Core/GeographicProjection.js","../../../Source/Core/Intersect.js","../../../Source/Core/Interval.js","../../../Source/Core/BoundingSphere.js","../../../Source/Core/Fullscreen.js","../../../Source/Core/FeatureDetection.js","../../../Source/Core/Quaternion.js","../../../Source/Core/binarySearch.js","../../../Source/Core/EarthOrientationParametersSample.js","../../../Source/Core/GregorianDate.js","../../../Source/Core/isLeapYear.js","../../../Source/Core/LeapSecond.js","../../../Source/Core/TimeConstants.js","../../../Source/Core/TimeStandard.js","../../../Source/Core/JulianDate.js","../../../node_modules/urijs/src/punycode.js","../../../node_modules/urijs/src/IPv6.js","../../../node_modules/urijs/src/SecondLevelDomains.js","../../../node_modules/urijs/src/URI.js","../../../Source/Core/appendForwardSlash.js","../../../Source/Core/clone.js","../../../Source/Core/defer.js","../../../Source/Core/getAbsoluteUri.js","../../../Source/Core/getBaseUri.js","../../../Source/Core/getExtensionFromUri.js","../../../Source/Core/getImagePixels.js","../../../Source/Core/isBlobUri.js","../../../Source/Core/isCrossOriginUrl.js","../../../Source/Core/isDataUri.js","../../../Source/Core/loadAndExecuteScript.js","../../../Source/Core/objectToQuery.js","../../../Source/Core/queryToObject.js","../../../Source/Core/RequestState.js","../../../Source/Core/RequestType.js","../../../Source/Core/Request.js","../../../Source/Core/parseResponseHeaders.js","../../../Source/Core/RequestErrorEvent.js","../../../Source/Core/Event.js","../../../Source/Core/Heap.js","../../../Source/Core/RequestScheduler.js","../../../Source/Core/TrustedServers.js","../../../Source/Core/Resource.js","../../../Source/Core/EarthOrientationParameters.js","../../../Source/Core/HeadingPitchRoll.js","../../../Source/Core/buildModuleUrl.js","../../../Source/Core/Iau2006XysSample.js","../../../Source/Core/Iau2006XysData.js","../../../Source/Core/Transforms.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\n\r\n/**\r\n * A simple map projection where longitude and latitude are linearly mapped to X and Y by multiplying\r\n * them by the {@link Ellipsoid#maximumRadius}. This projection\r\n * is commonly known as geographic, equirectangular, equidistant cylindrical, or plate carrée. It\r\n * is also known as EPSG:4326.\r\n *\r\n * @alias GeographicProjection\r\n * @constructor\r\n *\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid.\r\n *\r\n * @see WebMercatorProjection\r\n */\r\nfunction GeographicProjection(ellipsoid) {\r\n this._ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n this._semimajorAxis = this._ellipsoid.maximumRadius;\r\n this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis;\r\n}\r\n\r\nObject.defineProperties(GeographicProjection.prototype, {\r\n /**\r\n * Gets the {@link Ellipsoid}.\r\n *\r\n * @memberof GeographicProjection.prototype\r\n *\r\n * @type {Ellipsoid}\r\n * @readonly\r\n */\r\n ellipsoid: {\r\n get: function () {\r\n return this._ellipsoid;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Projects a set of {@link Cartographic} coordinates, in radians, to map coordinates, in meters.\r\n * X and Y are the longitude and latitude, respectively, multiplied by the maximum radius of the\r\n * ellipsoid. Z is the unmodified height.\r\n *\r\n * @param {Cartographic} cartographic The coordinates to project.\r\n * @param {Cartesian3} [result] An instance into which to copy the result. If this parameter is\r\n * undefined, a new instance is created and returned.\r\n * @returns {Cartesian3} The projected coordinates. If the result parameter is not undefined, the\r\n * coordinates are copied there and that instance is returned. Otherwise, a new instance is\r\n * created and returned.\r\n */\r\nGeographicProjection.prototype.project = function (cartographic, result) {\r\n // Actually this is the special case of equidistant cylindrical called the plate carree\r\n const semimajorAxis = this._semimajorAxis;\r\n const x = cartographic.longitude * semimajorAxis;\r\n const y = cartographic.latitude * semimajorAxis;\r\n const z = cartographic.height;\r\n\r\n if (!defined(result)) {\r\n return new Cartesian3(x, y, z);\r\n }\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Unprojects a set of projected {@link Cartesian3} coordinates, in meters, to {@link Cartographic}\r\n * coordinates, in radians. Longitude and Latitude are the X and Y coordinates, respectively,\r\n * divided by the maximum radius of the ellipsoid. Height is the unmodified Z coordinate.\r\n *\r\n * @param {Cartesian3} cartesian The Cartesian position to unproject with height (z) in meters.\r\n * @param {Cartographic} [result] An instance into which to copy the result. If this parameter is\r\n * undefined, a new instance is created and returned.\r\n * @returns {Cartographic} The unprojected coordinates. If the result parameter is not undefined, the\r\n * coordinates are copied there and that instance is returned. Otherwise, a new instance is\r\n * created and returned.\r\n */\r\nGeographicProjection.prototype.unproject = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(cartesian)) {\r\n throw new DeveloperError(\"cartesian is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis;\r\n const longitude = cartesian.x * oneOverEarthSemimajorAxis;\r\n const latitude = cartesian.y * oneOverEarthSemimajorAxis;\r\n const height = cartesian.z;\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(longitude, latitude, height);\r\n }\r\n\r\n result.longitude = longitude;\r\n result.latitude = latitude;\r\n result.height = height;\r\n return result;\r\n};\r\nexport default GeographicProjection;\r\n","/**\r\n * This enumerated type is used in determining where, relative to the frustum, an\r\n * object is located. The object can either be fully contained within the frustum (INSIDE),\r\n * partially inside the frustum and partially outside (INTERSECTING), or somewhere entirely\r\n * outside of the frustum's 6 planes (OUTSIDE).\r\n *\r\n * @enum {Number}\r\n */\r\nconst Intersect = {\r\n /**\r\n * Represents that an object is not contained within the frustum.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n OUTSIDE: -1,\r\n\r\n /**\r\n * Represents that an object intersects one of the frustum's planes.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n INTERSECTING: 0,\r\n\r\n /**\r\n * Represents that an object is fully within the frustum.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n INSIDE: 1,\r\n};\r\nexport default Object.freeze(Intersect);\r\n","import defaultValue from \"./defaultValue.js\";\r\n\r\n/**\r\n * Represents the closed interval [start, stop].\r\n * @alias Interval\r\n * @constructor\r\n *\r\n * @param {Number} [start=0.0] The beginning of the interval.\r\n * @param {Number} [stop=0.0] The end of the interval.\r\n */\r\nfunction Interval(start, stop) {\r\n /**\r\n * The beginning of the interval.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.start = defaultValue(start, 0.0);\r\n /**\r\n * The end of the interval.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.stop = defaultValue(stop, 0.0);\r\n}\r\nexport default Interval;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport GeographicProjection from \"./GeographicProjection.js\";\r\nimport Intersect from \"./Intersect.js\";\r\nimport Interval from \"./Interval.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\n\r\n/**\r\n * A bounding sphere with a center and a radius.\r\n * @alias BoundingSphere\r\n * @constructor\r\n *\r\n * @param {Cartesian3} [center=Cartesian3.ZERO] The center of the bounding sphere.\r\n * @param {Number} [radius=0.0] The radius of the bounding sphere.\r\n *\r\n * @see AxisAlignedBoundingBox\r\n * @see BoundingRectangle\r\n * @see Packable\r\n */\r\nfunction BoundingSphere(center, radius) {\r\n /**\r\n * The center point of the sphere.\r\n * @type {Cartesian3}\r\n * @default {@link Cartesian3.ZERO}\r\n */\r\n this.center = Cartesian3.clone(defaultValue(center, Cartesian3.ZERO));\r\n\r\n /**\r\n * The radius of the sphere.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.radius = defaultValue(radius, 0.0);\r\n}\r\n\r\nconst fromPointsXMin = new Cartesian3();\r\nconst fromPointsYMin = new Cartesian3();\r\nconst fromPointsZMin = new Cartesian3();\r\nconst fromPointsXMax = new Cartesian3();\r\nconst fromPointsYMax = new Cartesian3();\r\nconst fromPointsZMax = new Cartesian3();\r\nconst fromPointsCurrentPos = new Cartesian3();\r\nconst fromPointsScratch = new Cartesian3();\r\nconst fromPointsRitterCenter = new Cartesian3();\r\nconst fromPointsMinBoxPt = new Cartesian3();\r\nconst fromPointsMaxBoxPt = new Cartesian3();\r\nconst fromPointsNaiveCenterScratch = new Cartesian3();\r\nconst volumeConstant = (4.0 / 3.0) * CesiumMath.PI;\r\n\r\n/**\r\n * Computes a tight-fitting bounding sphere enclosing a list of 3D Cartesian points.\r\n * The bounding sphere is computed by running two algorithms, a naive algorithm and\r\n * Ritter's algorithm. The smaller of the two spheres is used to ensure a tight fit.\r\n *\r\n * @param {Cartesian3[]} [positions] An array of points that the bounding sphere will enclose. Each point must have x, y, and z properties.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\r\n *\r\n * @see {@link http://help.agi.com/AGIComponents/html/BlogBoundingSphere.htm|Bounding Sphere computation article}\r\n */\r\nBoundingSphere.fromPoints = function (positions, result) {\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n if (!defined(positions) || positions.length === 0) {\r\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\r\n result.radius = 0.0;\r\n return result;\r\n }\r\n\r\n const currentPos = Cartesian3.clone(positions[0], fromPointsCurrentPos);\r\n\r\n const xMin = Cartesian3.clone(currentPos, fromPointsXMin);\r\n const yMin = Cartesian3.clone(currentPos, fromPointsYMin);\r\n const zMin = Cartesian3.clone(currentPos, fromPointsZMin);\r\n\r\n const xMax = Cartesian3.clone(currentPos, fromPointsXMax);\r\n const yMax = Cartesian3.clone(currentPos, fromPointsYMax);\r\n const zMax = Cartesian3.clone(currentPos, fromPointsZMax);\r\n\r\n const numPositions = positions.length;\r\n let i;\r\n for (i = 1; i < numPositions; i++) {\r\n Cartesian3.clone(positions[i], currentPos);\r\n\r\n const x = currentPos.x;\r\n const y = currentPos.y;\r\n const z = currentPos.z;\r\n\r\n // Store points containing the the smallest and largest components\r\n if (x < xMin.x) {\r\n Cartesian3.clone(currentPos, xMin);\r\n }\r\n\r\n if (x > xMax.x) {\r\n Cartesian3.clone(currentPos, xMax);\r\n }\r\n\r\n if (y < yMin.y) {\r\n Cartesian3.clone(currentPos, yMin);\r\n }\r\n\r\n if (y > yMax.y) {\r\n Cartesian3.clone(currentPos, yMax);\r\n }\r\n\r\n if (z < zMin.z) {\r\n Cartesian3.clone(currentPos, zMin);\r\n }\r\n\r\n if (z > zMax.z) {\r\n Cartesian3.clone(currentPos, zMax);\r\n }\r\n }\r\n\r\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\r\n const xSpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(xMax, xMin, fromPointsScratch)\r\n );\r\n const ySpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(yMax, yMin, fromPointsScratch)\r\n );\r\n const zSpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(zMax, zMin, fromPointsScratch)\r\n );\r\n\r\n // Set the diameter endpoints to the largest span.\r\n let diameter1 = xMin;\r\n let diameter2 = xMax;\r\n let maxSpan = xSpan;\r\n if (ySpan > maxSpan) {\r\n maxSpan = ySpan;\r\n diameter1 = yMin;\r\n diameter2 = yMax;\r\n }\r\n if (zSpan > maxSpan) {\r\n maxSpan = zSpan;\r\n diameter1 = zMin;\r\n diameter2 = zMax;\r\n }\r\n\r\n // Calculate the center of the initial sphere found by Ritter's algorithm\r\n const ritterCenter = fromPointsRitterCenter;\r\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\r\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\r\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\r\n\r\n // Calculate the radius of the initial sphere found by Ritter's algorithm\r\n let radiusSquared = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch)\r\n );\r\n let ritterRadius = Math.sqrt(radiusSquared);\r\n\r\n // Find the center of the sphere found using the Naive method.\r\n const minBoxPt = fromPointsMinBoxPt;\r\n minBoxPt.x = xMin.x;\r\n minBoxPt.y = yMin.y;\r\n minBoxPt.z = zMin.z;\r\n\r\n const maxBoxPt = fromPointsMaxBoxPt;\r\n maxBoxPt.x = xMax.x;\r\n maxBoxPt.y = yMax.y;\r\n maxBoxPt.z = zMax.z;\r\n\r\n const naiveCenter = Cartesian3.midpoint(\r\n minBoxPt,\r\n maxBoxPt,\r\n fromPointsNaiveCenterScratch\r\n );\r\n\r\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\r\n let naiveRadius = 0;\r\n for (i = 0; i < numPositions; i++) {\r\n Cartesian3.clone(positions[i], currentPos);\r\n\r\n // Find the furthest point from the naive center to calculate the naive radius.\r\n const r = Cartesian3.magnitude(\r\n Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch)\r\n );\r\n if (r > naiveRadius) {\r\n naiveRadius = r;\r\n }\r\n\r\n // Make adjustments to the Ritter Sphere to include all points.\r\n const oldCenterToPointSquared = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch)\r\n );\r\n if (oldCenterToPointSquared > radiusSquared) {\r\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\r\n // Calculate new radius to include the point that lies outside\r\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\r\n radiusSquared = ritterRadius * ritterRadius;\r\n // Calculate center of new Ritter sphere\r\n const oldToNew = oldCenterToPoint - ritterRadius;\r\n ritterCenter.x =\r\n (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\r\n oldCenterToPoint;\r\n ritterCenter.y =\r\n (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\r\n oldCenterToPoint;\r\n ritterCenter.z =\r\n (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\r\n oldCenterToPoint;\r\n }\r\n }\r\n\r\n if (ritterRadius < naiveRadius) {\r\n Cartesian3.clone(ritterCenter, result.center);\r\n result.radius = ritterRadius;\r\n } else {\r\n Cartesian3.clone(naiveCenter, result.center);\r\n result.radius = naiveRadius;\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst defaultProjection = new GeographicProjection();\r\nconst fromRectangle2DLowerLeft = new Cartesian3();\r\nconst fromRectangle2DUpperRight = new Cartesian3();\r\nconst fromRectangle2DSouthwest = new Cartographic();\r\nconst fromRectangle2DNortheast = new Cartographic();\r\n\r\n/**\r\n * Computes a bounding sphere from a rectangle projected in 2D.\r\n *\r\n * @param {Rectangle} [rectangle] The rectangle around which to create a bounding sphere.\r\n * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.fromRectangle2D = function (rectangle, projection, result) {\r\n return BoundingSphere.fromRectangleWithHeights2D(\r\n rectangle,\r\n projection,\r\n 0.0,\r\n 0.0,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Computes a bounding sphere from a rectangle projected in 2D. The bounding sphere accounts for the\r\n * object's minimum and maximum heights over the rectangle.\r\n *\r\n * @param {Rectangle} [rectangle] The rectangle around which to create a bounding sphere.\r\n * @param {Object} [projection=GeographicProjection] The projection used to project the rectangle into 2D.\r\n * @param {Number} [minimumHeight=0.0] The minimum height over the rectangle.\r\n * @param {Number} [maximumHeight=0.0] The maximum height over the rectangle.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.fromRectangleWithHeights2D = function (\r\n rectangle,\r\n projection,\r\n minimumHeight,\r\n maximumHeight,\r\n result\r\n) {\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n if (!defined(rectangle)) {\r\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\r\n result.radius = 0.0;\r\n return result;\r\n }\r\n\r\n projection = defaultValue(projection, defaultProjection);\r\n\r\n Rectangle.southwest(rectangle, fromRectangle2DSouthwest);\r\n fromRectangle2DSouthwest.height = minimumHeight;\r\n Rectangle.northeast(rectangle, fromRectangle2DNortheast);\r\n fromRectangle2DNortheast.height = maximumHeight;\r\n\r\n const lowerLeft = projection.project(\r\n fromRectangle2DSouthwest,\r\n fromRectangle2DLowerLeft\r\n );\r\n const upperRight = projection.project(\r\n fromRectangle2DNortheast,\r\n fromRectangle2DUpperRight\r\n );\r\n\r\n const width = upperRight.x - lowerLeft.x;\r\n const height = upperRight.y - lowerLeft.y;\r\n const elevation = upperRight.z - lowerLeft.z;\r\n\r\n result.radius =\r\n Math.sqrt(width * width + height * height + elevation * elevation) * 0.5;\r\n const center = result.center;\r\n center.x = lowerLeft.x + width * 0.5;\r\n center.y = lowerLeft.y + height * 0.5;\r\n center.z = lowerLeft.z + elevation * 0.5;\r\n return result;\r\n};\r\n\r\nconst fromRectangle3DScratch = [];\r\n\r\n/**\r\n * Computes a bounding sphere from a rectangle in 3D. The bounding sphere is created using a subsample of points\r\n * on the ellipsoid and contained in the rectangle. It may not be accurate for all rectangles on all types of ellipsoids.\r\n *\r\n * @param {Rectangle} [rectangle] The valid rectangle used to create a bounding sphere.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid used to determine positions of the rectangle.\r\n * @param {Number} [surfaceHeight=0.0] The height above the surface of the ellipsoid.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.fromRectangle3D = function (\r\n rectangle,\r\n ellipsoid,\r\n surfaceHeight,\r\n result\r\n) {\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n surfaceHeight = defaultValue(surfaceHeight, 0.0);\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n if (!defined(rectangle)) {\r\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\r\n result.radius = 0.0;\r\n return result;\r\n }\r\n\r\n const positions = Rectangle.subsample(\r\n rectangle,\r\n ellipsoid,\r\n surfaceHeight,\r\n fromRectangle3DScratch\r\n );\r\n return BoundingSphere.fromPoints(positions, result);\r\n};\r\n\r\n/**\r\n * Computes a tight-fitting bounding sphere enclosing a list of 3D points, where the points are\r\n * stored in a flat array in X, Y, Z, order. The bounding sphere is computed by running two\r\n * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to\r\n * ensure a tight fit.\r\n *\r\n * @param {Number[]} [positions] An array of points that the bounding sphere will enclose. Each point\r\n * is formed from three elements in the array in the order X, Y, Z.\r\n * @param {Cartesian3} [center=Cartesian3.ZERO] The position to which the positions are relative, which need not be the\r\n * origin of the coordinate system. This is useful when the positions are to be used for\r\n * relative-to-center (RTC) rendering.\r\n * @param {Number} [stride=3] The number of array elements per vertex. It must be at least 3, but it may\r\n * be higher. Regardless of the value of this parameter, the X coordinate of the first position\r\n * is at array index 0, the Y coordinate is at array index 1, and the Z coordinate is at array index\r\n * 2. When stride is 3, the X coordinate of the next position then begins at array index 3. If\r\n * the stride is 5, however, two array elements are skipped and the next position begins at array\r\n * index 5.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\r\n *\r\n * @example\r\n * // Compute the bounding sphere from 3 positions, each specified relative to a center.\r\n * // In addition to the X, Y, and Z coordinates, the points array contains two additional\r\n * // elements per point which are ignored for the purpose of computing the bounding sphere.\r\n * const center = new Cesium.Cartesian3(1.0, 2.0, 3.0);\r\n * const points = [1.0, 2.0, 3.0, 0.1, 0.2,\r\n * 4.0, 5.0, 6.0, 0.1, 0.2,\r\n * 7.0, 8.0, 9.0, 0.1, 0.2];\r\n * const sphere = Cesium.BoundingSphere.fromVertices(points, center, 5);\r\n *\r\n * @see {@link http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/|Bounding Sphere computation article}\r\n */\r\nBoundingSphere.fromVertices = function (positions, center, stride, result) {\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n if (!defined(positions) || positions.length === 0) {\r\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\r\n result.radius = 0.0;\r\n return result;\r\n }\r\n\r\n center = defaultValue(center, Cartesian3.ZERO);\r\n\r\n stride = defaultValue(stride, 3);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThanOrEquals(\"stride\", stride, 3);\r\n //>>includeEnd('debug');\r\n\r\n const currentPos = fromPointsCurrentPos;\r\n currentPos.x = positions[0] + center.x;\r\n currentPos.y = positions[1] + center.y;\r\n currentPos.z = positions[2] + center.z;\r\n\r\n const xMin = Cartesian3.clone(currentPos, fromPointsXMin);\r\n const yMin = Cartesian3.clone(currentPos, fromPointsYMin);\r\n const zMin = Cartesian3.clone(currentPos, fromPointsZMin);\r\n\r\n const xMax = Cartesian3.clone(currentPos, fromPointsXMax);\r\n const yMax = Cartesian3.clone(currentPos, fromPointsYMax);\r\n const zMax = Cartesian3.clone(currentPos, fromPointsZMax);\r\n\r\n const numElements = positions.length;\r\n let i;\r\n for (i = 0; i < numElements; i += stride) {\r\n const x = positions[i] + center.x;\r\n const y = positions[i + 1] + center.y;\r\n const z = positions[i + 2] + center.z;\r\n\r\n currentPos.x = x;\r\n currentPos.y = y;\r\n currentPos.z = z;\r\n\r\n // Store points containing the the smallest and largest components\r\n if (x < xMin.x) {\r\n Cartesian3.clone(currentPos, xMin);\r\n }\r\n\r\n if (x > xMax.x) {\r\n Cartesian3.clone(currentPos, xMax);\r\n }\r\n\r\n if (y < yMin.y) {\r\n Cartesian3.clone(currentPos, yMin);\r\n }\r\n\r\n if (y > yMax.y) {\r\n Cartesian3.clone(currentPos, yMax);\r\n }\r\n\r\n if (z < zMin.z) {\r\n Cartesian3.clone(currentPos, zMin);\r\n }\r\n\r\n if (z > zMax.z) {\r\n Cartesian3.clone(currentPos, zMax);\r\n }\r\n }\r\n\r\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\r\n const xSpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(xMax, xMin, fromPointsScratch)\r\n );\r\n const ySpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(yMax, yMin, fromPointsScratch)\r\n );\r\n const zSpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(zMax, zMin, fromPointsScratch)\r\n );\r\n\r\n // Set the diameter endpoints to the largest span.\r\n let diameter1 = xMin;\r\n let diameter2 = xMax;\r\n let maxSpan = xSpan;\r\n if (ySpan > maxSpan) {\r\n maxSpan = ySpan;\r\n diameter1 = yMin;\r\n diameter2 = yMax;\r\n }\r\n if (zSpan > maxSpan) {\r\n maxSpan = zSpan;\r\n diameter1 = zMin;\r\n diameter2 = zMax;\r\n }\r\n\r\n // Calculate the center of the initial sphere found by Ritter's algorithm\r\n const ritterCenter = fromPointsRitterCenter;\r\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\r\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\r\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\r\n\r\n // Calculate the radius of the initial sphere found by Ritter's algorithm\r\n let radiusSquared = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch)\r\n );\r\n let ritterRadius = Math.sqrt(radiusSquared);\r\n\r\n // Find the center of the sphere found using the Naive method.\r\n const minBoxPt = fromPointsMinBoxPt;\r\n minBoxPt.x = xMin.x;\r\n minBoxPt.y = yMin.y;\r\n minBoxPt.z = zMin.z;\r\n\r\n const maxBoxPt = fromPointsMaxBoxPt;\r\n maxBoxPt.x = xMax.x;\r\n maxBoxPt.y = yMax.y;\r\n maxBoxPt.z = zMax.z;\r\n\r\n const naiveCenter = Cartesian3.midpoint(\r\n minBoxPt,\r\n maxBoxPt,\r\n fromPointsNaiveCenterScratch\r\n );\r\n\r\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\r\n let naiveRadius = 0;\r\n for (i = 0; i < numElements; i += stride) {\r\n currentPos.x = positions[i] + center.x;\r\n currentPos.y = positions[i + 1] + center.y;\r\n currentPos.z = positions[i + 2] + center.z;\r\n\r\n // Find the furthest point from the naive center to calculate the naive radius.\r\n const r = Cartesian3.magnitude(\r\n Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch)\r\n );\r\n if (r > naiveRadius) {\r\n naiveRadius = r;\r\n }\r\n\r\n // Make adjustments to the Ritter Sphere to include all points.\r\n const oldCenterToPointSquared = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch)\r\n );\r\n if (oldCenterToPointSquared > radiusSquared) {\r\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\r\n // Calculate new radius to include the point that lies outside\r\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\r\n radiusSquared = ritterRadius * ritterRadius;\r\n // Calculate center of new Ritter sphere\r\n const oldToNew = oldCenterToPoint - ritterRadius;\r\n ritterCenter.x =\r\n (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\r\n oldCenterToPoint;\r\n ritterCenter.y =\r\n (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\r\n oldCenterToPoint;\r\n ritterCenter.z =\r\n (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\r\n oldCenterToPoint;\r\n }\r\n }\r\n\r\n if (ritterRadius < naiveRadius) {\r\n Cartesian3.clone(ritterCenter, result.center);\r\n result.radius = ritterRadius;\r\n } else {\r\n Cartesian3.clone(naiveCenter, result.center);\r\n result.radius = naiveRadius;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a tight-fitting bounding sphere enclosing a list of EncodedCartesian3s, where the points are\r\n * stored in parallel flat arrays in X, Y, Z, order. The bounding sphere is computed by running two\r\n * algorithms, a naive algorithm and Ritter's algorithm. The smaller of the two spheres is used to\r\n * ensure a tight fit.\r\n *\r\n * @param {Number[]} [positionsHigh] An array of high bits of the encoded cartesians that the bounding sphere will enclose. Each point\r\n * is formed from three elements in the array in the order X, Y, Z.\r\n * @param {Number[]} [positionsLow] An array of low bits of the encoded cartesians that the bounding sphere will enclose. Each point\r\n * is formed from three elements in the array in the order X, Y, Z.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\r\n *\r\n * @see {@link http://blogs.agi.com/insight3d/index.php/2008/02/04/a-bounding/|Bounding Sphere computation article}\r\n */\r\nBoundingSphere.fromEncodedCartesianVertices = function (\r\n positionsHigh,\r\n positionsLow,\r\n result\r\n) {\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n if (\r\n !defined(positionsHigh) ||\r\n !defined(positionsLow) ||\r\n positionsHigh.length !== positionsLow.length ||\r\n positionsHigh.length === 0\r\n ) {\r\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\r\n result.radius = 0.0;\r\n return result;\r\n }\r\n\r\n const currentPos = fromPointsCurrentPos;\r\n currentPos.x = positionsHigh[0] + positionsLow[0];\r\n currentPos.y = positionsHigh[1] + positionsLow[1];\r\n currentPos.z = positionsHigh[2] + positionsLow[2];\r\n\r\n const xMin = Cartesian3.clone(currentPos, fromPointsXMin);\r\n const yMin = Cartesian3.clone(currentPos, fromPointsYMin);\r\n const zMin = Cartesian3.clone(currentPos, fromPointsZMin);\r\n\r\n const xMax = Cartesian3.clone(currentPos, fromPointsXMax);\r\n const yMax = Cartesian3.clone(currentPos, fromPointsYMax);\r\n const zMax = Cartesian3.clone(currentPos, fromPointsZMax);\r\n\r\n const numElements = positionsHigh.length;\r\n let i;\r\n for (i = 0; i < numElements; i += 3) {\r\n const x = positionsHigh[i] + positionsLow[i];\r\n const y = positionsHigh[i + 1] + positionsLow[i + 1];\r\n const z = positionsHigh[i + 2] + positionsLow[i + 2];\r\n\r\n currentPos.x = x;\r\n currentPos.y = y;\r\n currentPos.z = z;\r\n\r\n // Store points containing the the smallest and largest components\r\n if (x < xMin.x) {\r\n Cartesian3.clone(currentPos, xMin);\r\n }\r\n\r\n if (x > xMax.x) {\r\n Cartesian3.clone(currentPos, xMax);\r\n }\r\n\r\n if (y < yMin.y) {\r\n Cartesian3.clone(currentPos, yMin);\r\n }\r\n\r\n if (y > yMax.y) {\r\n Cartesian3.clone(currentPos, yMax);\r\n }\r\n\r\n if (z < zMin.z) {\r\n Cartesian3.clone(currentPos, zMin);\r\n }\r\n\r\n if (z > zMax.z) {\r\n Cartesian3.clone(currentPos, zMax);\r\n }\r\n }\r\n\r\n // Compute x-, y-, and z-spans (Squared distances b/n each component's min. and max.).\r\n const xSpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(xMax, xMin, fromPointsScratch)\r\n );\r\n const ySpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(yMax, yMin, fromPointsScratch)\r\n );\r\n const zSpan = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(zMax, zMin, fromPointsScratch)\r\n );\r\n\r\n // Set the diameter endpoints to the largest span.\r\n let diameter1 = xMin;\r\n let diameter2 = xMax;\r\n let maxSpan = xSpan;\r\n if (ySpan > maxSpan) {\r\n maxSpan = ySpan;\r\n diameter1 = yMin;\r\n diameter2 = yMax;\r\n }\r\n if (zSpan > maxSpan) {\r\n maxSpan = zSpan;\r\n diameter1 = zMin;\r\n diameter2 = zMax;\r\n }\r\n\r\n // Calculate the center of the initial sphere found by Ritter's algorithm\r\n const ritterCenter = fromPointsRitterCenter;\r\n ritterCenter.x = (diameter1.x + diameter2.x) * 0.5;\r\n ritterCenter.y = (diameter1.y + diameter2.y) * 0.5;\r\n ritterCenter.z = (diameter1.z + diameter2.z) * 0.5;\r\n\r\n // Calculate the radius of the initial sphere found by Ritter's algorithm\r\n let radiusSquared = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(diameter2, ritterCenter, fromPointsScratch)\r\n );\r\n let ritterRadius = Math.sqrt(radiusSquared);\r\n\r\n // Find the center of the sphere found using the Naive method.\r\n const minBoxPt = fromPointsMinBoxPt;\r\n minBoxPt.x = xMin.x;\r\n minBoxPt.y = yMin.y;\r\n minBoxPt.z = zMin.z;\r\n\r\n const maxBoxPt = fromPointsMaxBoxPt;\r\n maxBoxPt.x = xMax.x;\r\n maxBoxPt.y = yMax.y;\r\n maxBoxPt.z = zMax.z;\r\n\r\n const naiveCenter = Cartesian3.midpoint(\r\n minBoxPt,\r\n maxBoxPt,\r\n fromPointsNaiveCenterScratch\r\n );\r\n\r\n // Begin 2nd pass to find naive radius and modify the ritter sphere.\r\n let naiveRadius = 0;\r\n for (i = 0; i < numElements; i += 3) {\r\n currentPos.x = positionsHigh[i] + positionsLow[i];\r\n currentPos.y = positionsHigh[i + 1] + positionsLow[i + 1];\r\n currentPos.z = positionsHigh[i + 2] + positionsLow[i + 2];\r\n\r\n // Find the furthest point from the naive center to calculate the naive radius.\r\n const r = Cartesian3.magnitude(\r\n Cartesian3.subtract(currentPos, naiveCenter, fromPointsScratch)\r\n );\r\n if (r > naiveRadius) {\r\n naiveRadius = r;\r\n }\r\n\r\n // Make adjustments to the Ritter Sphere to include all points.\r\n const oldCenterToPointSquared = Cartesian3.magnitudeSquared(\r\n Cartesian3.subtract(currentPos, ritterCenter, fromPointsScratch)\r\n );\r\n if (oldCenterToPointSquared > radiusSquared) {\r\n const oldCenterToPoint = Math.sqrt(oldCenterToPointSquared);\r\n // Calculate new radius to include the point that lies outside\r\n ritterRadius = (ritterRadius + oldCenterToPoint) * 0.5;\r\n radiusSquared = ritterRadius * ritterRadius;\r\n // Calculate center of new Ritter sphere\r\n const oldToNew = oldCenterToPoint - ritterRadius;\r\n ritterCenter.x =\r\n (ritterRadius * ritterCenter.x + oldToNew * currentPos.x) /\r\n oldCenterToPoint;\r\n ritterCenter.y =\r\n (ritterRadius * ritterCenter.y + oldToNew * currentPos.y) /\r\n oldCenterToPoint;\r\n ritterCenter.z =\r\n (ritterRadius * ritterCenter.z + oldToNew * currentPos.z) /\r\n oldCenterToPoint;\r\n }\r\n }\r\n\r\n if (ritterRadius < naiveRadius) {\r\n Cartesian3.clone(ritterCenter, result.center);\r\n result.radius = ritterRadius;\r\n } else {\r\n Cartesian3.clone(naiveCenter, result.center);\r\n result.radius = naiveRadius;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes a bounding sphere from the corner points of an axis-aligned bounding box. The sphere\r\n * tightly and fully encompasses the box.\r\n *\r\n * @param {Cartesian3} [corner] The minimum height over the rectangle.\r\n * @param {Cartesian3} [oppositeCorner] The maximum height over the rectangle.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n *\r\n * @example\r\n * // Create a bounding sphere around the unit cube\r\n * const sphere = Cesium.BoundingSphere.fromCornerPoints(new Cesium.Cartesian3(-0.5, -0.5, -0.5), new Cesium.Cartesian3(0.5, 0.5, 0.5));\r\n */\r\nBoundingSphere.fromCornerPoints = function (corner, oppositeCorner, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"corner\", corner);\r\n Check.typeOf.object(\"oppositeCorner\", oppositeCorner);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n const center = Cartesian3.midpoint(corner, oppositeCorner, result.center);\r\n result.radius = Cartesian3.distance(center, oppositeCorner);\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a bounding sphere encompassing an ellipsoid.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid around which to create a bounding sphere.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n *\r\n * @example\r\n * const boundingSphere = Cesium.BoundingSphere.fromEllipsoid(ellipsoid);\r\n */\r\nBoundingSphere.fromEllipsoid = function (ellipsoid, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"ellipsoid\", ellipsoid);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n Cartesian3.clone(Cartesian3.ZERO, result.center);\r\n result.radius = ellipsoid.maximumRadius;\r\n return result;\r\n};\r\n\r\nconst fromBoundingSpheresScratch = new Cartesian3();\r\n\r\n/**\r\n * Computes a tight-fitting bounding sphere enclosing the provided array of bounding spheres.\r\n *\r\n * @param {BoundingSphere[]} [boundingSpheres] The array of bounding spheres.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.fromBoundingSpheres = function (boundingSpheres, result) {\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n if (!defined(boundingSpheres) || boundingSpheres.length === 0) {\r\n result.center = Cartesian3.clone(Cartesian3.ZERO, result.center);\r\n result.radius = 0.0;\r\n return result;\r\n }\r\n\r\n const length = boundingSpheres.length;\r\n if (length === 1) {\r\n return BoundingSphere.clone(boundingSpheres[0], result);\r\n }\r\n\r\n if (length === 2) {\r\n return BoundingSphere.union(boundingSpheres[0], boundingSpheres[1], result);\r\n }\r\n\r\n const positions = [];\r\n let i;\r\n for (i = 0; i < length; i++) {\r\n positions.push(boundingSpheres[i].center);\r\n }\r\n\r\n result = BoundingSphere.fromPoints(positions, result);\r\n\r\n const center = result.center;\r\n let radius = result.radius;\r\n for (i = 0; i < length; i++) {\r\n const tmp = boundingSpheres[i];\r\n radius = Math.max(\r\n radius,\r\n Cartesian3.distance(center, tmp.center, fromBoundingSpheresScratch) +\r\n tmp.radius\r\n );\r\n }\r\n result.radius = radius;\r\n\r\n return result;\r\n};\r\n\r\nconst fromOrientedBoundingBoxScratchU = new Cartesian3();\r\nconst fromOrientedBoundingBoxScratchV = new Cartesian3();\r\nconst fromOrientedBoundingBoxScratchW = new Cartesian3();\r\n\r\n/**\r\n * Computes a tight-fitting bounding sphere enclosing the provided oriented bounding box.\r\n *\r\n * @param {OrientedBoundingBox} orientedBoundingBox The oriented bounding box.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.fromOrientedBoundingBox = function (\r\n orientedBoundingBox,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"orientedBoundingBox\", orientedBoundingBox);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n const halfAxes = orientedBoundingBox.halfAxes;\r\n const u = Matrix3.getColumn(halfAxes, 0, fromOrientedBoundingBoxScratchU);\r\n const v = Matrix3.getColumn(halfAxes, 1, fromOrientedBoundingBoxScratchV);\r\n const w = Matrix3.getColumn(halfAxes, 2, fromOrientedBoundingBoxScratchW);\r\n\r\n Cartesian3.add(u, v, u);\r\n Cartesian3.add(u, w, u);\r\n\r\n result.center = Cartesian3.clone(orientedBoundingBox.center, result.center);\r\n result.radius = Cartesian3.magnitude(u);\r\n\r\n return result;\r\n};\r\n\r\nconst scratchFromTransformationCenter = new Cartesian3();\r\nconst scratchFromTransformationScale = new Cartesian3();\r\n\r\n/**\r\n * Computes a tight-fitting bounding sphere enclosing the provided affine transformation.\r\n *\r\n * @param {Matrix4} transformation The affine transformation.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.fromTransformation = function (transformation, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"transformation\", transformation);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n const center = Matrix4.getTranslation(\r\n transformation,\r\n scratchFromTransformationCenter\r\n );\r\n const scale = Matrix4.getScale(\r\n transformation,\r\n scratchFromTransformationScale\r\n );\r\n const radius = 0.5 * Cartesian3.magnitude(scale);\r\n result.center = Cartesian3.clone(center, result.center);\r\n result.radius = radius;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a BoundingSphere instance.\r\n *\r\n * @param {BoundingSphere} sphere The bounding sphere to duplicate.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided. (Returns undefined if sphere is undefined)\r\n */\r\nBoundingSphere.clone = function (sphere, result) {\r\n if (!defined(sphere)) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new BoundingSphere(sphere.center, sphere.radius);\r\n }\r\n\r\n result.center = Cartesian3.clone(sphere.center, result.center);\r\n result.radius = sphere.radius;\r\n return result;\r\n};\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nBoundingSphere.packedLength = 4;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {BoundingSphere} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nBoundingSphere.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const center = value.center;\r\n array[startingIndex++] = center.x;\r\n array[startingIndex++] = center.y;\r\n array[startingIndex++] = center.z;\r\n array[startingIndex] = value.radius;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {BoundingSphere} [result] The object into which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if one was not provided.\r\n */\r\nBoundingSphere.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n const center = result.center;\r\n center.x = array[startingIndex++];\r\n center.y = array[startingIndex++];\r\n center.z = array[startingIndex++];\r\n result.radius = array[startingIndex];\r\n return result;\r\n};\r\n\r\nconst unionScratch = new Cartesian3();\r\nconst unionScratchCenter = new Cartesian3();\r\n/**\r\n * Computes a bounding sphere that contains both the left and right bounding spheres.\r\n *\r\n * @param {BoundingSphere} left A sphere to enclose in a bounding sphere.\r\n * @param {BoundingSphere} right A sphere to enclose in a bounding sphere.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.union = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n const leftCenter = left.center;\r\n const leftRadius = left.radius;\r\n const rightCenter = right.center;\r\n const rightRadius = right.radius;\r\n\r\n const toRightCenter = Cartesian3.subtract(\r\n rightCenter,\r\n leftCenter,\r\n unionScratch\r\n );\r\n const centerSeparation = Cartesian3.magnitude(toRightCenter);\r\n\r\n if (leftRadius >= centerSeparation + rightRadius) {\r\n // Left sphere wins.\r\n left.clone(result);\r\n return result;\r\n }\r\n\r\n if (rightRadius >= centerSeparation + leftRadius) {\r\n // Right sphere wins.\r\n right.clone(result);\r\n return result;\r\n }\r\n\r\n // There are two tangent points, one on far side of each sphere.\r\n const halfDistanceBetweenTangentPoints =\r\n (leftRadius + centerSeparation + rightRadius) * 0.5;\r\n\r\n // Compute the center point halfway between the two tangent points.\r\n const center = Cartesian3.multiplyByScalar(\r\n toRightCenter,\r\n (-leftRadius + halfDistanceBetweenTangentPoints) / centerSeparation,\r\n unionScratchCenter\r\n );\r\n Cartesian3.add(center, leftCenter, center);\r\n Cartesian3.clone(center, result.center);\r\n result.radius = halfDistanceBetweenTangentPoints;\r\n\r\n return result;\r\n};\r\n\r\nconst expandScratch = new Cartesian3();\r\n/**\r\n * Computes a bounding sphere by enlarging the provided sphere to contain the provided point.\r\n *\r\n * @param {BoundingSphere} sphere A sphere to expand.\r\n * @param {Cartesian3} point A point to enclose in a bounding sphere.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.expand = function (sphere, point, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"sphere\", sphere);\r\n Check.typeOf.object(\"point\", point);\r\n //>>includeEnd('debug');\r\n\r\n result = BoundingSphere.clone(sphere, result);\r\n\r\n const radius = Cartesian3.magnitude(\r\n Cartesian3.subtract(point, result.center, expandScratch)\r\n );\r\n if (radius > result.radius) {\r\n result.radius = radius;\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Determines which side of a plane a sphere is located.\r\n *\r\n * @param {BoundingSphere} sphere The bounding sphere to test.\r\n * @param {Plane} plane The plane to test against.\r\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane\r\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is\r\n * on the opposite side, and {@link Intersect.INTERSECTING} if the sphere\r\n * intersects the plane.\r\n */\r\nBoundingSphere.intersectPlane = function (sphere, plane) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"sphere\", sphere);\r\n Check.typeOf.object(\"plane\", plane);\r\n //>>includeEnd('debug');\r\n\r\n const center = sphere.center;\r\n const radius = sphere.radius;\r\n const normal = plane.normal;\r\n const distanceToPlane = Cartesian3.dot(normal, center) + plane.distance;\r\n\r\n if (distanceToPlane < -radius) {\r\n // The center point is negative side of the plane normal\r\n return Intersect.OUTSIDE;\r\n } else if (distanceToPlane < radius) {\r\n // The center point is positive side of the plane, but radius extends beyond it; partial overlap\r\n return Intersect.INTERSECTING;\r\n }\r\n return Intersect.INSIDE;\r\n};\r\n\r\n/**\r\n * Applies a 4x4 affine transformation matrix to a bounding sphere.\r\n *\r\n * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to.\r\n * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.transform = function (sphere, transform, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"sphere\", sphere);\r\n Check.typeOf.object(\"transform\", transform);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n result.center = Matrix4.multiplyByPoint(\r\n transform,\r\n sphere.center,\r\n result.center\r\n );\r\n result.radius = Matrix4.getMaximumScale(transform) * sphere.radius;\r\n\r\n return result;\r\n};\r\n\r\nconst distanceSquaredToScratch = new Cartesian3();\r\n\r\n/**\r\n * Computes the estimated distance squared from the closest point on a bounding sphere to a point.\r\n *\r\n * @param {BoundingSphere} sphere The sphere.\r\n * @param {Cartesian3} cartesian The point\r\n * @returns {Number} The distance squared from the bounding sphere to the point. Returns 0 if the point is inside the sphere.\r\n *\r\n * @example\r\n * // Sort bounding spheres from back to front\r\n * spheres.sort(function(a, b) {\r\n * return Cesium.BoundingSphere.distanceSquaredTo(b, camera.positionWC) - Cesium.BoundingSphere.distanceSquaredTo(a, camera.positionWC);\r\n * });\r\n */\r\nBoundingSphere.distanceSquaredTo = function (sphere, cartesian) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"sphere\", sphere);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n //>>includeEnd('debug');\r\n\r\n const diff = Cartesian3.subtract(\r\n sphere.center,\r\n cartesian,\r\n distanceSquaredToScratch\r\n );\r\n\r\n const distance = Cartesian3.magnitude(diff) - sphere.radius;\r\n if (distance <= 0.0) {\r\n return 0.0;\r\n }\r\n\r\n return distance * distance;\r\n};\r\n\r\n/**\r\n * Applies a 4x4 affine transformation matrix to a bounding sphere where there is no scale\r\n * The transformation matrix is not verified to have a uniform scale of 1.\r\n * This method is faster than computing the general bounding sphere transform using {@link BoundingSphere.transform}.\r\n *\r\n * @param {BoundingSphere} sphere The bounding sphere to apply the transformation to.\r\n * @param {Matrix4} transform The transformation matrix to apply to the bounding sphere.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n *\r\n * @example\r\n * const modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(positionOnEllipsoid);\r\n * const boundingSphere = new Cesium.BoundingSphere();\r\n * const newBoundingSphere = Cesium.BoundingSphere.transformWithoutScale(boundingSphere, modelMatrix);\r\n */\r\nBoundingSphere.transformWithoutScale = function (sphere, transform, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"sphere\", sphere);\r\n Check.typeOf.object(\"transform\", transform);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new BoundingSphere();\r\n }\r\n\r\n result.center = Matrix4.multiplyByPoint(\r\n transform,\r\n sphere.center,\r\n result.center\r\n );\r\n result.radius = sphere.radius;\r\n\r\n return result;\r\n};\r\n\r\nconst scratchCartesian3 = new Cartesian3();\r\n/**\r\n * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction\r\n * plus/minus the radius of the bounding sphere.\r\n *
    \r\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\r\n * closest and farthest planes from position that intersect the bounding sphere.\r\n *\r\n * @param {BoundingSphere} sphere The bounding sphere to calculate the distance to.\r\n * @param {Cartesian3} position The position to calculate the distance from.\r\n * @param {Cartesian3} direction The direction from position.\r\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\r\n * @returns {Interval} The nearest and farthest distances on the bounding sphere from position in direction.\r\n */\r\nBoundingSphere.computePlaneDistances = function (\r\n sphere,\r\n position,\r\n direction,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"sphere\", sphere);\r\n Check.typeOf.object(\"position\", position);\r\n Check.typeOf.object(\"direction\", direction);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Interval();\r\n }\r\n\r\n const toCenter = Cartesian3.subtract(\r\n sphere.center,\r\n position,\r\n scratchCartesian3\r\n );\r\n const mag = Cartesian3.dot(direction, toCenter);\r\n\r\n result.start = mag - sphere.radius;\r\n result.stop = mag + sphere.radius;\r\n return result;\r\n};\r\n\r\nconst projectTo2DNormalScratch = new Cartesian3();\r\nconst projectTo2DEastScratch = new Cartesian3();\r\nconst projectTo2DNorthScratch = new Cartesian3();\r\nconst projectTo2DWestScratch = new Cartesian3();\r\nconst projectTo2DSouthScratch = new Cartesian3();\r\nconst projectTo2DCartographicScratch = new Cartographic();\r\nconst projectTo2DPositionsScratch = new Array(8);\r\nfor (let n = 0; n < 8; ++n) {\r\n projectTo2DPositionsScratch[n] = new Cartesian3();\r\n}\r\n\r\nconst projectTo2DProjection = new GeographicProjection();\r\n/**\r\n * Creates a bounding sphere in 2D from a bounding sphere in 3D world coordinates.\r\n *\r\n * @param {BoundingSphere} sphere The bounding sphere to transform to 2D.\r\n * @param {Object} [projection=GeographicProjection] The projection to 2D.\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.projectTo2D = function (sphere, projection, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"sphere\", sphere);\r\n //>>includeEnd('debug');\r\n\r\n projection = defaultValue(projection, projectTo2DProjection);\r\n\r\n const ellipsoid = projection.ellipsoid;\r\n let center = sphere.center;\r\n const radius = sphere.radius;\r\n\r\n let normal;\r\n if (Cartesian3.equals(center, Cartesian3.ZERO)) {\r\n // Bounding sphere is at the center. The geodetic surface normal is not\r\n // defined here so pick the x-axis as a fallback.\r\n normal = Cartesian3.clone(Cartesian3.UNIT_X, projectTo2DNormalScratch);\r\n } else {\r\n normal = ellipsoid.geodeticSurfaceNormal(center, projectTo2DNormalScratch);\r\n }\r\n const east = Cartesian3.cross(\r\n Cartesian3.UNIT_Z,\r\n normal,\r\n projectTo2DEastScratch\r\n );\r\n Cartesian3.normalize(east, east);\r\n const north = Cartesian3.cross(normal, east, projectTo2DNorthScratch);\r\n Cartesian3.normalize(north, north);\r\n\r\n Cartesian3.multiplyByScalar(normal, radius, normal);\r\n Cartesian3.multiplyByScalar(north, radius, north);\r\n Cartesian3.multiplyByScalar(east, radius, east);\r\n\r\n const south = Cartesian3.negate(north, projectTo2DSouthScratch);\r\n const west = Cartesian3.negate(east, projectTo2DWestScratch);\r\n\r\n const positions = projectTo2DPositionsScratch;\r\n\r\n // top NE corner\r\n let corner = positions[0];\r\n Cartesian3.add(normal, north, corner);\r\n Cartesian3.add(corner, east, corner);\r\n\r\n // top NW corner\r\n corner = positions[1];\r\n Cartesian3.add(normal, north, corner);\r\n Cartesian3.add(corner, west, corner);\r\n\r\n // top SW corner\r\n corner = positions[2];\r\n Cartesian3.add(normal, south, corner);\r\n Cartesian3.add(corner, west, corner);\r\n\r\n // top SE corner\r\n corner = positions[3];\r\n Cartesian3.add(normal, south, corner);\r\n Cartesian3.add(corner, east, corner);\r\n\r\n Cartesian3.negate(normal, normal);\r\n\r\n // bottom NE corner\r\n corner = positions[4];\r\n Cartesian3.add(normal, north, corner);\r\n Cartesian3.add(corner, east, corner);\r\n\r\n // bottom NW corner\r\n corner = positions[5];\r\n Cartesian3.add(normal, north, corner);\r\n Cartesian3.add(corner, west, corner);\r\n\r\n // bottom SW corner\r\n corner = positions[6];\r\n Cartesian3.add(normal, south, corner);\r\n Cartesian3.add(corner, west, corner);\r\n\r\n // bottom SE corner\r\n corner = positions[7];\r\n Cartesian3.add(normal, south, corner);\r\n Cartesian3.add(corner, east, corner);\r\n\r\n const length = positions.length;\r\n for (let i = 0; i < length; ++i) {\r\n const position = positions[i];\r\n Cartesian3.add(center, position, position);\r\n const cartographic = ellipsoid.cartesianToCartographic(\r\n position,\r\n projectTo2DCartographicScratch\r\n );\r\n projection.project(cartographic, position);\r\n }\r\n\r\n result = BoundingSphere.fromPoints(positions, result);\r\n\r\n // swizzle center components\r\n center = result.center;\r\n const x = center.x;\r\n const y = center.y;\r\n const z = center.z;\r\n center.x = z;\r\n center.y = x;\r\n center.z = y;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Determines whether or not a sphere is hidden from view by the occluder.\r\n *\r\n * @param {BoundingSphere} sphere The bounding sphere surrounding the occludee object.\r\n * @param {Occluder} occluder The occluder.\r\n * @returns {Boolean} true if the sphere is not visible; otherwise false.\r\n */\r\nBoundingSphere.isOccluded = function (sphere, occluder) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"sphere\", sphere);\r\n Check.typeOf.object(\"occluder\", occluder);\r\n //>>includeEnd('debug');\r\n return !occluder.isBoundingSphereVisible(sphere);\r\n};\r\n\r\n/**\r\n * Compares the provided BoundingSphere componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {BoundingSphere} [left] The first BoundingSphere.\r\n * @param {BoundingSphere} [right] The second BoundingSphere.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nBoundingSphere.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Cartesian3.equals(left.center, right.center) &&\r\n left.radius === right.radius)\r\n );\r\n};\r\n\r\n/**\r\n * Determines which side of a plane the sphere is located.\r\n *\r\n * @param {Plane} plane The plane to test against.\r\n * @returns {Intersect} {@link Intersect.INSIDE} if the entire sphere is on the side of the plane\r\n * the normal is pointing, {@link Intersect.OUTSIDE} if the entire sphere is\r\n * on the opposite side, and {@link Intersect.INTERSECTING} if the sphere\r\n * intersects the plane.\r\n */\r\nBoundingSphere.prototype.intersectPlane = function (plane) {\r\n return BoundingSphere.intersectPlane(this, plane);\r\n};\r\n\r\n/**\r\n * Computes the estimated distance squared from the closest point on a bounding sphere to a point.\r\n *\r\n * @param {Cartesian3} cartesian The point\r\n * @returns {Number} The estimated distance squared from the bounding sphere to the point.\r\n *\r\n * @example\r\n * // Sort bounding spheres from back to front\r\n * spheres.sort(function(a, b) {\r\n * return b.distanceSquaredTo(camera.positionWC) - a.distanceSquaredTo(camera.positionWC);\r\n * });\r\n */\r\nBoundingSphere.prototype.distanceSquaredTo = function (cartesian) {\r\n return BoundingSphere.distanceSquaredTo(this, cartesian);\r\n};\r\n\r\n/**\r\n * The distances calculated by the vector from the center of the bounding sphere to position projected onto direction\r\n * plus/minus the radius of the bounding sphere.\r\n *
    \r\n * If you imagine the infinite number of planes with normal direction, this computes the smallest distance to the\r\n * closest and farthest planes from position that intersect the bounding sphere.\r\n *\r\n * @param {Cartesian3} position The position to calculate the distance from.\r\n * @param {Cartesian3} direction The direction from position.\r\n * @param {Interval} [result] A Interval to store the nearest and farthest distances.\r\n * @returns {Interval} The nearest and farthest distances on the bounding sphere from position in direction.\r\n */\r\nBoundingSphere.prototype.computePlaneDistances = function (\r\n position,\r\n direction,\r\n result\r\n) {\r\n return BoundingSphere.computePlaneDistances(\r\n this,\r\n position,\r\n direction,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Determines whether or not a sphere is hidden from view by the occluder.\r\n *\r\n * @param {Occluder} occluder The occluder.\r\n * @returns {Boolean} true if the sphere is not visible; otherwise false.\r\n */\r\nBoundingSphere.prototype.isOccluded = function (occluder) {\r\n return BoundingSphere.isOccluded(this, occluder);\r\n};\r\n\r\n/**\r\n * Compares this BoundingSphere against the provided BoundingSphere componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {BoundingSphere} [right] The right hand side BoundingSphere.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nBoundingSphere.prototype.equals = function (right) {\r\n return BoundingSphere.equals(this, right);\r\n};\r\n\r\n/**\r\n * Duplicates this BoundingSphere instance.\r\n *\r\n * @param {BoundingSphere} [result] The object onto which to store the result.\r\n * @returns {BoundingSphere} The modified result parameter or a new BoundingSphere instance if none was provided.\r\n */\r\nBoundingSphere.prototype.clone = function (result) {\r\n return BoundingSphere.clone(this, result);\r\n};\r\n\r\n/**\r\n * Computes the radius of the BoundingSphere.\r\n * @returns {Number} The radius of the BoundingSphere.\r\n */\r\nBoundingSphere.prototype.volume = function () {\r\n const radius = this.radius;\r\n return volumeConstant * radius * radius * radius;\r\n};\r\nexport default BoundingSphere;\r\n","import defined from \"./defined.js\";\r\n\r\nlet _supportsFullscreen;\r\nconst _names = {\r\n requestFullscreen: undefined,\r\n exitFullscreen: undefined,\r\n fullscreenEnabled: undefined,\r\n fullscreenElement: undefined,\r\n fullscreenchange: undefined,\r\n fullscreenerror: undefined,\r\n};\r\n\r\n/**\r\n * Browser-independent functions for working with the standard fullscreen API.\r\n *\r\n * @namespace Fullscreen\r\n *\r\n * @see {@link http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html|W3C Fullscreen Living Specification}\r\n */\r\nconst Fullscreen = {};\r\n\r\nObject.defineProperties(Fullscreen, {\r\n /**\r\n * The element that is currently fullscreen, if any. To simply check if the\r\n * browser is in fullscreen mode or not, use {@link Fullscreen#fullscreen}.\r\n * @memberof Fullscreen\r\n * @type {Object}\r\n * @readonly\r\n */\r\n element: {\r\n get: function () {\r\n if (!Fullscreen.supportsFullscreen()) {\r\n return undefined;\r\n }\r\n\r\n return document[_names.fullscreenElement];\r\n },\r\n },\r\n\r\n /**\r\n * The name of the event on the document that is fired when fullscreen is\r\n * entered or exited. This event name is intended for use with addEventListener.\r\n * In your event handler, to determine if the browser is in fullscreen mode or not,\r\n * use {@link Fullscreen#fullscreen}.\r\n * @memberof Fullscreen\r\n * @type {String}\r\n * @readonly\r\n */\r\n changeEventName: {\r\n get: function () {\r\n if (!Fullscreen.supportsFullscreen()) {\r\n return undefined;\r\n }\r\n\r\n return _names.fullscreenchange;\r\n },\r\n },\r\n\r\n /**\r\n * The name of the event that is fired when a fullscreen error\r\n * occurs. This event name is intended for use with addEventListener.\r\n * @memberof Fullscreen\r\n * @type {String}\r\n * @readonly\r\n */\r\n errorEventName: {\r\n get: function () {\r\n if (!Fullscreen.supportsFullscreen()) {\r\n return undefined;\r\n }\r\n\r\n return _names.fullscreenerror;\r\n },\r\n },\r\n\r\n /**\r\n * Determine whether the browser will allow an element to be made fullscreen, or not.\r\n * For example, by default, iframes cannot go fullscreen unless the containing page\r\n * adds an \"allowfullscreen\" attribute (or prefixed equivalent).\r\n * @memberof Fullscreen\r\n * @type {Boolean}\r\n * @readonly\r\n */\r\n enabled: {\r\n get: function () {\r\n if (!Fullscreen.supportsFullscreen()) {\r\n return undefined;\r\n }\r\n\r\n return document[_names.fullscreenEnabled];\r\n },\r\n },\r\n\r\n /**\r\n * Determines if the browser is currently in fullscreen mode.\r\n * @memberof Fullscreen\r\n * @type {Boolean}\r\n * @readonly\r\n */\r\n fullscreen: {\r\n get: function () {\r\n if (!Fullscreen.supportsFullscreen()) {\r\n return undefined;\r\n }\r\n\r\n return Fullscreen.element !== null;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Detects whether the browser supports the standard fullscreen API.\r\n *\r\n * @returns {Boolean} true if the browser supports the standard fullscreen API,\r\n * false otherwise.\r\n */\r\nFullscreen.supportsFullscreen = function () {\r\n if (defined(_supportsFullscreen)) {\r\n return _supportsFullscreen;\r\n }\r\n\r\n _supportsFullscreen = false;\r\n\r\n const body = document.body;\r\n if (typeof body.requestFullscreen === \"function\") {\r\n // go with the unprefixed, standard set of names\r\n _names.requestFullscreen = \"requestFullscreen\";\r\n _names.exitFullscreen = \"exitFullscreen\";\r\n _names.fullscreenEnabled = \"fullscreenEnabled\";\r\n _names.fullscreenElement = \"fullscreenElement\";\r\n _names.fullscreenchange = \"fullscreenchange\";\r\n _names.fullscreenerror = \"fullscreenerror\";\r\n _supportsFullscreen = true;\r\n return _supportsFullscreen;\r\n }\r\n\r\n //check for the correct combination of prefix plus the various names that browsers use\r\n const prefixes = [\"webkit\", \"moz\", \"o\", \"ms\", \"khtml\"];\r\n let name;\r\n for (let i = 0, len = prefixes.length; i < len; ++i) {\r\n const prefix = prefixes[i];\r\n\r\n // casing of Fullscreen differs across browsers\r\n name = `${prefix}RequestFullscreen`;\r\n if (typeof body[name] === \"function\") {\r\n _names.requestFullscreen = name;\r\n _supportsFullscreen = true;\r\n } else {\r\n name = `${prefix}RequestFullScreen`;\r\n if (typeof body[name] === \"function\") {\r\n _names.requestFullscreen = name;\r\n _supportsFullscreen = true;\r\n }\r\n }\r\n\r\n // disagreement about whether it's \"exit\" as per spec, or \"cancel\"\r\n name = `${prefix}ExitFullscreen`;\r\n if (typeof document[name] === \"function\") {\r\n _names.exitFullscreen = name;\r\n } else {\r\n name = `${prefix}CancelFullScreen`;\r\n if (typeof document[name] === \"function\") {\r\n _names.exitFullscreen = name;\r\n }\r\n }\r\n\r\n // casing of Fullscreen differs across browsers\r\n name = `${prefix}FullscreenEnabled`;\r\n if (document[name] !== undefined) {\r\n _names.fullscreenEnabled = name;\r\n } else {\r\n name = `${prefix}FullScreenEnabled`;\r\n if (document[name] !== undefined) {\r\n _names.fullscreenEnabled = name;\r\n }\r\n }\r\n\r\n // casing of Fullscreen differs across browsers\r\n name = `${prefix}FullscreenElement`;\r\n if (document[name] !== undefined) {\r\n _names.fullscreenElement = name;\r\n } else {\r\n name = `${prefix}FullScreenElement`;\r\n if (document[name] !== undefined) {\r\n _names.fullscreenElement = name;\r\n }\r\n }\r\n\r\n // thankfully, event names are all lowercase per spec\r\n name = `${prefix}fullscreenchange`;\r\n // event names do not have 'on' in the front, but the property on the document does\r\n if (document[`on${name}`] !== undefined) {\r\n //except on IE\r\n if (prefix === \"ms\") {\r\n name = \"MSFullscreenChange\";\r\n }\r\n _names.fullscreenchange = name;\r\n }\r\n\r\n name = `${prefix}fullscreenerror`;\r\n if (document[`on${name}`] !== undefined) {\r\n //except on IE\r\n if (prefix === \"ms\") {\r\n name = \"MSFullscreenError\";\r\n }\r\n _names.fullscreenerror = name;\r\n }\r\n }\r\n\r\n return _supportsFullscreen;\r\n};\r\n\r\n/**\r\n * Asynchronously requests the browser to enter fullscreen mode on the given element.\r\n * If fullscreen mode is not supported by the browser, does nothing.\r\n *\r\n * @param {Object} element The HTML element which will be placed into fullscreen mode.\r\n * @param {Object} [vrDevice] The HMDVRDevice device.\r\n *\r\n * @example\r\n * // Put the entire page into fullscreen.\r\n * Cesium.Fullscreen.requestFullscreen(document.body)\r\n *\r\n * // Place only the Cesium canvas into fullscreen.\r\n * Cesium.Fullscreen.requestFullscreen(scene.canvas)\r\n */\r\nFullscreen.requestFullscreen = function (element, vrDevice) {\r\n if (!Fullscreen.supportsFullscreen()) {\r\n return;\r\n }\r\n\r\n element[_names.requestFullscreen]({ vrDisplay: vrDevice });\r\n};\r\n\r\n/**\r\n * Asynchronously exits fullscreen mode. If the browser is not currently\r\n * in fullscreen, or if fullscreen mode is not supported by the browser, does nothing.\r\n */\r\nFullscreen.exitFullscreen = function () {\r\n if (!Fullscreen.supportsFullscreen()) {\r\n return;\r\n }\r\n\r\n document[_names.exitFullscreen]();\r\n};\r\n\r\n//For unit tests\r\nFullscreen._names = _names;\r\nexport default Fullscreen;\r\n","import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Fullscreen from \"./Fullscreen.js\";\r\n\r\nlet theNavigator;\r\nif (typeof navigator !== \"undefined\") {\r\n theNavigator = navigator;\r\n} else {\r\n theNavigator = {};\r\n}\r\n\r\nfunction extractVersion(versionString) {\r\n const parts = versionString.split(\".\");\r\n for (let i = 0, len = parts.length; i < len; ++i) {\r\n parts[i] = parseInt(parts[i], 10);\r\n }\r\n return parts;\r\n}\r\n\r\nlet isChromeResult;\r\nlet chromeVersionResult;\r\nfunction isChrome() {\r\n if (!defined(isChromeResult)) {\r\n isChromeResult = false;\r\n // Edge contains Chrome in the user agent too\r\n if (!isEdge()) {\r\n const fields = / Chrome\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\r\n if (fields !== null) {\r\n isChromeResult = true;\r\n chromeVersionResult = extractVersion(fields[1]);\r\n }\r\n }\r\n }\r\n\r\n return isChromeResult;\r\n}\r\n\r\nfunction chromeVersion() {\r\n return isChrome() && chromeVersionResult;\r\n}\r\n\r\nlet isSafariResult;\r\nlet safariVersionResult;\r\nfunction isSafari() {\r\n if (!defined(isSafariResult)) {\r\n isSafariResult = false;\r\n\r\n // Chrome and Edge contain Safari in the user agent too\r\n if (\r\n !isChrome() &&\r\n !isEdge() &&\r\n / Safari\\/[\\.0-9]+/.test(theNavigator.userAgent)\r\n ) {\r\n const fields = / Version\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\r\n if (fields !== null) {\r\n isSafariResult = true;\r\n safariVersionResult = extractVersion(fields[1]);\r\n }\r\n }\r\n }\r\n\r\n return isSafariResult;\r\n}\r\n\r\nfunction safariVersion() {\r\n return isSafari() && safariVersionResult;\r\n}\r\n\r\nlet isWebkitResult;\r\nlet webkitVersionResult;\r\nfunction isWebkit() {\r\n if (!defined(isWebkitResult)) {\r\n isWebkitResult = false;\r\n\r\n const fields = / AppleWebKit\\/([\\.0-9]+)(\\+?)/.exec(theNavigator.userAgent);\r\n if (fields !== null) {\r\n isWebkitResult = true;\r\n webkitVersionResult = extractVersion(fields[1]);\r\n webkitVersionResult.isNightly = !!fields[2];\r\n }\r\n }\r\n\r\n return isWebkitResult;\r\n}\r\n\r\nfunction webkitVersion() {\r\n return isWebkit() && webkitVersionResult;\r\n}\r\n\r\nlet isInternetExplorerResult;\r\nlet internetExplorerVersionResult;\r\nfunction isInternetExplorer() {\r\n if (!defined(isInternetExplorerResult)) {\r\n isInternetExplorerResult = false;\r\n\r\n let fields;\r\n if (theNavigator.appName === \"Microsoft Internet Explorer\") {\r\n fields = /MSIE ([0-9]{1,}[\\.0-9]{0,})/.exec(theNavigator.userAgent);\r\n if (fields !== null) {\r\n isInternetExplorerResult = true;\r\n internetExplorerVersionResult = extractVersion(fields[1]);\r\n }\r\n } else if (theNavigator.appName === \"Netscape\") {\r\n fields = /Trident\\/.*rv:([0-9]{1,}[\\.0-9]{0,})/.exec(\r\n theNavigator.userAgent\r\n );\r\n if (fields !== null) {\r\n isInternetExplorerResult = true;\r\n internetExplorerVersionResult = extractVersion(fields[1]);\r\n }\r\n }\r\n }\r\n return isInternetExplorerResult;\r\n}\r\n\r\nfunction internetExplorerVersion() {\r\n return isInternetExplorer() && internetExplorerVersionResult;\r\n}\r\n\r\nlet isEdgeResult;\r\nlet edgeVersionResult;\r\nfunction isEdge() {\r\n if (!defined(isEdgeResult)) {\r\n isEdgeResult = false;\r\n const fields = / Edg\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\r\n if (fields !== null) {\r\n isEdgeResult = true;\r\n edgeVersionResult = extractVersion(fields[1]);\r\n }\r\n }\r\n return isEdgeResult;\r\n}\r\n\r\nfunction edgeVersion() {\r\n return isEdge() && edgeVersionResult;\r\n}\r\n\r\nlet isFirefoxResult;\r\nlet firefoxVersionResult;\r\nfunction isFirefox() {\r\n if (!defined(isFirefoxResult)) {\r\n isFirefoxResult = false;\r\n\r\n const fields = /Firefox\\/([\\.0-9]+)/.exec(theNavigator.userAgent);\r\n if (fields !== null) {\r\n isFirefoxResult = true;\r\n firefoxVersionResult = extractVersion(fields[1]);\r\n }\r\n }\r\n return isFirefoxResult;\r\n}\r\n\r\nlet isWindowsResult;\r\nfunction isWindows() {\r\n if (!defined(isWindowsResult)) {\r\n isWindowsResult = /Windows/i.test(theNavigator.appVersion);\r\n }\r\n return isWindowsResult;\r\n}\r\n\r\nlet isIPadOrIOSResult;\r\nfunction isIPadOrIOS() {\r\n if (!defined(isIPadOrIOSResult)) {\r\n isIPadOrIOSResult =\r\n navigator.platform === \"iPhone\" ||\r\n navigator.platform === \"iPod\" ||\r\n navigator.platform === \"iPad\";\r\n }\r\n\r\n return isIPadOrIOSResult;\r\n}\r\n\r\nfunction firefoxVersion() {\r\n return isFirefox() && firefoxVersionResult;\r\n}\r\n\r\nlet hasPointerEvents;\r\nfunction supportsPointerEvents() {\r\n if (!defined(hasPointerEvents)) {\r\n //While navigator.pointerEnabled is deprecated in the W3C specification\r\n //we still need to use it if it exists in order to support browsers\r\n //that rely on it, such as the Windows WebBrowser control which defines\r\n //PointerEvent but sets navigator.pointerEnabled to false.\r\n\r\n //Firefox disabled because of https://github.com/CesiumGS/cesium/issues/6372\r\n hasPointerEvents =\r\n !isFirefox() &&\r\n typeof PointerEvent !== \"undefined\" &&\r\n (!defined(theNavigator.pointerEnabled) || theNavigator.pointerEnabled);\r\n }\r\n return hasPointerEvents;\r\n}\r\n\r\nlet imageRenderingValueResult;\r\nlet supportsImageRenderingPixelatedResult;\r\nfunction supportsImageRenderingPixelated() {\r\n if (!defined(supportsImageRenderingPixelatedResult)) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.setAttribute(\r\n \"style\",\r\n \"image-rendering: -moz-crisp-edges;\" + \"image-rendering: pixelated;\"\r\n );\r\n //canvas.style.imageRendering will be undefined, null or an empty string on unsupported browsers.\r\n const tmp = canvas.style.imageRendering;\r\n supportsImageRenderingPixelatedResult = defined(tmp) && tmp !== \"\";\r\n if (supportsImageRenderingPixelatedResult) {\r\n imageRenderingValueResult = tmp;\r\n }\r\n }\r\n return supportsImageRenderingPixelatedResult;\r\n}\r\n\r\nfunction imageRenderingValue() {\r\n return supportsImageRenderingPixelated()\r\n ? imageRenderingValueResult\r\n : undefined;\r\n}\r\n\r\nfunction supportsWebP() {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!supportsWebP.initialized) {\r\n throw new DeveloperError(\r\n \"You must call FeatureDetection.supportsWebP.initialize and wait for the promise to resolve before calling FeatureDetection.supportsWebP\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n return supportsWebP._result;\r\n}\r\nsupportsWebP._promise = undefined;\r\nsupportsWebP._result = undefined;\r\nsupportsWebP.initialize = function () {\r\n // From https://developers.google.com/speed/webp/faq#how_can_i_detect_browser_support_for_webp\r\n if (defined(supportsWebP._promise)) {\r\n return supportsWebP._promise;\r\n }\r\n\r\n supportsWebP._promise = new Promise((resolve) => {\r\n const image = new Image();\r\n image.onload = function () {\r\n supportsWebP._result = image.width > 0 && image.height > 0;\r\n resolve(supportsWebP._result);\r\n };\r\n\r\n image.onerror = function () {\r\n supportsWebP._result = false;\r\n resolve(supportsWebP._result);\r\n };\r\n image.src =\r\n \"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\";\r\n });\r\n\r\n return supportsWebP._promise;\r\n};\r\nObject.defineProperties(supportsWebP, {\r\n initialized: {\r\n get: function () {\r\n return defined(supportsWebP._result);\r\n },\r\n },\r\n});\r\n\r\nconst typedArrayTypes = [];\r\nif (typeof ArrayBuffer !== \"undefined\") {\r\n typedArrayTypes.push(\r\n Int8Array,\r\n Uint8Array,\r\n Int16Array,\r\n Uint16Array,\r\n Int32Array,\r\n Uint32Array,\r\n Float32Array,\r\n Float64Array\r\n );\r\n\r\n if (typeof Uint8ClampedArray !== \"undefined\") {\r\n typedArrayTypes.push(Uint8ClampedArray);\r\n }\r\n\r\n if (typeof Uint8ClampedArray !== \"undefined\") {\r\n typedArrayTypes.push(Uint8ClampedArray);\r\n }\r\n\r\n if (typeof BigInt64Array !== \"undefined\") {\r\n // eslint-disable-next-line no-undef\r\n typedArrayTypes.push(BigInt64Array);\r\n }\r\n\r\n if (typeof BigUint64Array !== \"undefined\") {\r\n // eslint-disable-next-line no-undef\r\n typedArrayTypes.push(BigUint64Array);\r\n }\r\n}\r\n\r\n/**\r\n * A set of functions to detect whether the current browser supports\r\n * various features.\r\n *\r\n * @namespace FeatureDetection\r\n */\r\nconst FeatureDetection = {\r\n isChrome: isChrome,\r\n chromeVersion: chromeVersion,\r\n isSafari: isSafari,\r\n safariVersion: safariVersion,\r\n isWebkit: isWebkit,\r\n webkitVersion: webkitVersion,\r\n isInternetExplorer: isInternetExplorer,\r\n internetExplorerVersion: internetExplorerVersion,\r\n isEdge: isEdge,\r\n edgeVersion: edgeVersion,\r\n isFirefox: isFirefox,\r\n firefoxVersion: firefoxVersion,\r\n isWindows: isWindows,\r\n isIPadOrIOS: isIPadOrIOS,\r\n hardwareConcurrency: defaultValue(theNavigator.hardwareConcurrency, 3),\r\n supportsPointerEvents: supportsPointerEvents,\r\n supportsImageRenderingPixelated: supportsImageRenderingPixelated,\r\n supportsWebP: supportsWebP,\r\n imageRenderingValue: imageRenderingValue,\r\n typedArrayTypes: typedArrayTypes,\r\n};\r\n\r\n/**\r\n * Detects whether the current browser supports Basis Universal textures and the web assembly modules needed to transcode them.\r\n *\r\n * @param {Scene} scene\r\n * @returns {Boolean} true if the browser supports web assembly modules and the scene supports Basis Universal textures, false if not.\r\n */\r\nFeatureDetection.supportsBasis = function (scene) {\r\n return FeatureDetection.supportsWebAssembly() && scene.context.supportsBasis;\r\n};\r\n\r\n/**\r\n * Detects whether the current browser supports the full screen standard.\r\n *\r\n * @returns {Boolean} true if the browser supports the full screen standard, false if not.\r\n *\r\n * @see Fullscreen\r\n * @see {@link http://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html|W3C Fullscreen Living Specification}\r\n */\r\nFeatureDetection.supportsFullscreen = function () {\r\n return Fullscreen.supportsFullscreen();\r\n};\r\n\r\n/**\r\n * Detects whether the current browser supports typed arrays.\r\n *\r\n * @returns {Boolean} true if the browser supports typed arrays, false if not.\r\n *\r\n * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification}\r\n */\r\nFeatureDetection.supportsTypedArrays = function () {\r\n return typeof ArrayBuffer !== \"undefined\";\r\n};\r\n\r\n/**\r\n * Detects whether the current browser supports BigInt64Array typed arrays.\r\n *\r\n * @returns {Boolean} true if the browser supports BigInt64Array typed arrays, false if not.\r\n *\r\n * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification}\r\n */\r\nFeatureDetection.supportsBigInt64Array = function () {\r\n return typeof BigInt64Array !== \"undefined\";\r\n};\r\n\r\n/**\r\n * Detects whether the current browser supports BigUint64Array typed arrays.\r\n *\r\n * @returns {Boolean} true if the browser supports BigUint64Array typed arrays, false if not.\r\n *\r\n * @see {@link https://tc39.es/ecma262/#sec-typedarray-objects|Typed Array Specification}\r\n */\r\nFeatureDetection.supportsBigUint64Array = function () {\r\n return typeof BigUint64Array !== \"undefined\";\r\n};\r\n\r\n/**\r\n * Detects whether the current browser supports BigInt.\r\n *\r\n * @returns {Boolean} true if the browser supports BigInt, false if not.\r\n *\r\n * @see {@link https://tc39.es/ecma262/#sec-bigint-objects|BigInt Specification}\r\n */\r\nFeatureDetection.supportsBigInt = function () {\r\n return typeof BigInt !== \"undefined\";\r\n};\r\n\r\n/**\r\n * Detects whether the current browser supports Web Workers.\r\n *\r\n * @returns {Boolean} true if the browsers supports Web Workers, false if not.\r\n *\r\n * @see {@link http://www.w3.org/TR/workers/}\r\n */\r\nFeatureDetection.supportsWebWorkers = function () {\r\n return typeof Worker !== \"undefined\";\r\n};\r\n\r\n/**\r\n * Detects whether the current browser supports Web Assembly.\r\n *\r\n * @returns {Boolean} true if the browsers supports Web Assembly, false if not.\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/WebAssembly}\r\n */\r\nFeatureDetection.supportsWebAssembly = function () {\r\n return typeof WebAssembly !== \"undefined\";\r\n};\r\nexport default FeatureDetection;\r\n","import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport FeatureDetection from \"./FeatureDetection.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\n\r\n/**\r\n * A set of 4-dimensional coordinates used to represent rotation in 3-dimensional space.\r\n * @alias Quaternion\r\n * @constructor\r\n *\r\n * @param {Number} [x=0.0] The X component.\r\n * @param {Number} [y=0.0] The Y component.\r\n * @param {Number} [z=0.0] The Z component.\r\n * @param {Number} [w=0.0] The W component.\r\n *\r\n * @see PackableForInterpolation\r\n */\r\nfunction Quaternion(x, y, z, w) {\r\n /**\r\n * The X component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.x = defaultValue(x, 0.0);\r\n\r\n /**\r\n * The Y component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.y = defaultValue(y, 0.0);\r\n\r\n /**\r\n * The Z component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.z = defaultValue(z, 0.0);\r\n\r\n /**\r\n * The W component.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.w = defaultValue(w, 0.0);\r\n}\r\n\r\nlet fromAxisAngleScratch = new Cartesian3();\r\n\r\n/**\r\n * Computes a quaternion representing a rotation around an axis.\r\n *\r\n * @param {Cartesian3} axis The axis of rotation.\r\n * @param {Number} angle The angle in radians to rotate around the axis.\r\n * @param {Quaternion} [result] The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\r\n */\r\nQuaternion.fromAxisAngle = function (axis, angle, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"axis\", axis);\r\n Check.typeOf.number(\"angle\", angle);\r\n //>>includeEnd('debug');\r\n\r\n const halfAngle = angle / 2.0;\r\n const s = Math.sin(halfAngle);\r\n fromAxisAngleScratch = Cartesian3.normalize(axis, fromAxisAngleScratch);\r\n\r\n const x = fromAxisAngleScratch.x * s;\r\n const y = fromAxisAngleScratch.y * s;\r\n const z = fromAxisAngleScratch.z * s;\r\n const w = Math.cos(halfAngle);\r\n if (!defined(result)) {\r\n return new Quaternion(x, y, z, w);\r\n }\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n return result;\r\n};\r\n\r\nconst fromRotationMatrixNext = [1, 2, 0];\r\nconst fromRotationMatrixQuat = new Array(3);\r\n/**\r\n * Computes a Quaternion from the provided Matrix3 instance.\r\n *\r\n * @param {Matrix3} matrix The rotation matrix.\r\n * @param {Quaternion} [result] The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\r\n *\r\n * @see Matrix3.fromQuaternion\r\n */\r\nQuaternion.fromRotationMatrix = function (matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"matrix\", matrix);\r\n //>>includeEnd('debug');\r\n\r\n let root;\r\n let x;\r\n let y;\r\n let z;\r\n let w;\r\n\r\n const m00 = matrix[Matrix3.COLUMN0ROW0];\r\n const m11 = matrix[Matrix3.COLUMN1ROW1];\r\n const m22 = matrix[Matrix3.COLUMN2ROW2];\r\n const trace = m00 + m11 + m22;\r\n\r\n if (trace > 0.0) {\r\n // |w| > 1/2, may as well choose w > 1/2\r\n root = Math.sqrt(trace + 1.0); // 2w\r\n w = 0.5 * root;\r\n root = 0.5 / root; // 1/(4w)\r\n\r\n x = (matrix[Matrix3.COLUMN1ROW2] - matrix[Matrix3.COLUMN2ROW1]) * root;\r\n y = (matrix[Matrix3.COLUMN2ROW0] - matrix[Matrix3.COLUMN0ROW2]) * root;\r\n z = (matrix[Matrix3.COLUMN0ROW1] - matrix[Matrix3.COLUMN1ROW0]) * root;\r\n } else {\r\n // |w| <= 1/2\r\n const next = fromRotationMatrixNext;\r\n\r\n let i = 0;\r\n if (m11 > m00) {\r\n i = 1;\r\n }\r\n if (m22 > m00 && m22 > m11) {\r\n i = 2;\r\n }\r\n const j = next[i];\r\n const k = next[j];\r\n\r\n root = Math.sqrt(\r\n matrix[Matrix3.getElementIndex(i, i)] -\r\n matrix[Matrix3.getElementIndex(j, j)] -\r\n matrix[Matrix3.getElementIndex(k, k)] +\r\n 1.0\r\n );\r\n\r\n const quat = fromRotationMatrixQuat;\r\n quat[i] = 0.5 * root;\r\n root = 0.5 / root;\r\n w =\r\n (matrix[Matrix3.getElementIndex(k, j)] -\r\n matrix[Matrix3.getElementIndex(j, k)]) *\r\n root;\r\n quat[j] =\r\n (matrix[Matrix3.getElementIndex(j, i)] +\r\n matrix[Matrix3.getElementIndex(i, j)]) *\r\n root;\r\n quat[k] =\r\n (matrix[Matrix3.getElementIndex(k, i)] +\r\n matrix[Matrix3.getElementIndex(i, k)]) *\r\n root;\r\n\r\n x = -quat[0];\r\n y = -quat[1];\r\n z = -quat[2];\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Quaternion(x, y, z, w);\r\n }\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n return result;\r\n};\r\n\r\nconst scratchHPRQuaternion = new Quaternion();\r\nlet scratchHeadingQuaternion = new Quaternion();\r\nlet scratchPitchQuaternion = new Quaternion();\r\nlet scratchRollQuaternion = new Quaternion();\r\n\r\n/**\r\n * Computes a rotation from the given heading, pitch and roll angles. Heading is the rotation about the\r\n * negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about\r\n * the positive x axis.\r\n *\r\n * @param {HeadingPitchRoll} headingPitchRoll The rotation expressed as a heading, pitch and roll.\r\n * @param {Quaternion} [result] The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if none was provided.\r\n */\r\nQuaternion.fromHeadingPitchRoll = function (headingPitchRoll, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"headingPitchRoll\", headingPitchRoll);\r\n //>>includeEnd('debug');\r\n\r\n scratchRollQuaternion = Quaternion.fromAxisAngle(\r\n Cartesian3.UNIT_X,\r\n headingPitchRoll.roll,\r\n scratchHPRQuaternion\r\n );\r\n scratchPitchQuaternion = Quaternion.fromAxisAngle(\r\n Cartesian3.UNIT_Y,\r\n -headingPitchRoll.pitch,\r\n result\r\n );\r\n result = Quaternion.multiply(\r\n scratchPitchQuaternion,\r\n scratchRollQuaternion,\r\n scratchPitchQuaternion\r\n );\r\n scratchHeadingQuaternion = Quaternion.fromAxisAngle(\r\n Cartesian3.UNIT_Z,\r\n -headingPitchRoll.heading,\r\n scratchHPRQuaternion\r\n );\r\n return Quaternion.multiply(scratchHeadingQuaternion, result, result);\r\n};\r\n\r\nconst sampledQuaternionAxis = new Cartesian3();\r\nconst sampledQuaternionRotation = new Cartesian3();\r\nconst sampledQuaternionTempQuaternion = new Quaternion();\r\nconst sampledQuaternionQuaternion0 = new Quaternion();\r\nconst sampledQuaternionQuaternion0Conjugate = new Quaternion();\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nQuaternion.packedLength = 4;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {Quaternion} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nQuaternion.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.x;\r\n array[startingIndex++] = value.y;\r\n array[startingIndex++] = value.z;\r\n array[startingIndex] = value.w;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {Quaternion} [result] The object into which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\r\n */\r\nQuaternion.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new Quaternion();\r\n }\r\n result.x = array[startingIndex];\r\n result.y = array[startingIndex + 1];\r\n result.z = array[startingIndex + 2];\r\n result.w = array[startingIndex + 3];\r\n return result;\r\n};\r\n\r\n/**\r\n * The number of elements used to store the object into an array in its interpolatable form.\r\n * @type {Number}\r\n */\r\nQuaternion.packedInterpolationLength = 3;\r\n\r\n/**\r\n * Converts a packed array into a form suitable for interpolation.\r\n *\r\n * @param {Number[]} packedArray The packed array.\r\n * @param {Number} [startingIndex=0] The index of the first element to be converted.\r\n * @param {Number} [lastIndex=packedArray.length] The index of the last element to be converted.\r\n * @param {Number[]} [result] The object into which to store the result.\r\n */\r\nQuaternion.convertPackedArrayForInterpolation = function (\r\n packedArray,\r\n startingIndex,\r\n lastIndex,\r\n result\r\n) {\r\n Quaternion.unpack(\r\n packedArray,\r\n lastIndex * 4,\r\n sampledQuaternionQuaternion0Conjugate\r\n );\r\n Quaternion.conjugate(\r\n sampledQuaternionQuaternion0Conjugate,\r\n sampledQuaternionQuaternion0Conjugate\r\n );\r\n\r\n for (let i = 0, len = lastIndex - startingIndex + 1; i < len; i++) {\r\n const offset = i * 3;\r\n Quaternion.unpack(\r\n packedArray,\r\n (startingIndex + i) * 4,\r\n sampledQuaternionTempQuaternion\r\n );\r\n\r\n Quaternion.multiply(\r\n sampledQuaternionTempQuaternion,\r\n sampledQuaternionQuaternion0Conjugate,\r\n sampledQuaternionTempQuaternion\r\n );\r\n\r\n if (sampledQuaternionTempQuaternion.w < 0) {\r\n Quaternion.negate(\r\n sampledQuaternionTempQuaternion,\r\n sampledQuaternionTempQuaternion\r\n );\r\n }\r\n\r\n Quaternion.computeAxis(\r\n sampledQuaternionTempQuaternion,\r\n sampledQuaternionAxis\r\n );\r\n const angle = Quaternion.computeAngle(sampledQuaternionTempQuaternion);\r\n if (!defined(result)) {\r\n result = [];\r\n }\r\n result[offset] = sampledQuaternionAxis.x * angle;\r\n result[offset + 1] = sampledQuaternionAxis.y * angle;\r\n result[offset + 2] = sampledQuaternionAxis.z * angle;\r\n }\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array converted with {@link convertPackedArrayForInterpolation}.\r\n *\r\n * @param {Number[]} array The array previously packed for interpolation.\r\n * @param {Number[]} sourceArray The original packed array.\r\n * @param {Number} [firstIndex=0] The firstIndex used to convert the array.\r\n * @param {Number} [lastIndex=packedArray.length] The lastIndex used to convert the array.\r\n * @param {Quaternion} [result] The object into which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\r\n */\r\nQuaternion.unpackInterpolationResult = function (\r\n array,\r\n sourceArray,\r\n firstIndex,\r\n lastIndex,\r\n result\r\n) {\r\n if (!defined(result)) {\r\n result = new Quaternion();\r\n }\r\n Cartesian3.fromArray(array, 0, sampledQuaternionRotation);\r\n const magnitude = Cartesian3.magnitude(sampledQuaternionRotation);\r\n\r\n Quaternion.unpack(sourceArray, lastIndex * 4, sampledQuaternionQuaternion0);\r\n\r\n if (magnitude === 0) {\r\n Quaternion.clone(Quaternion.IDENTITY, sampledQuaternionTempQuaternion);\r\n } else {\r\n Quaternion.fromAxisAngle(\r\n sampledQuaternionRotation,\r\n magnitude,\r\n sampledQuaternionTempQuaternion\r\n );\r\n }\r\n\r\n return Quaternion.multiply(\r\n sampledQuaternionTempQuaternion,\r\n sampledQuaternionQuaternion0,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Duplicates a Quaternion instance.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to duplicate.\r\n * @param {Quaternion} [result] The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided. (Returns undefined if quaternion is undefined)\r\n */\r\nQuaternion.clone = function (quaternion, result) {\r\n if (!defined(quaternion)) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Quaternion(\r\n quaternion.x,\r\n quaternion.y,\r\n quaternion.z,\r\n quaternion.w\r\n );\r\n }\r\n\r\n result.x = quaternion.x;\r\n result.y = quaternion.y;\r\n result.z = quaternion.z;\r\n result.w = quaternion.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the conjugate of the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to conjugate.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.conjugate = function (quaternion, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = -quaternion.x;\r\n result.y = -quaternion.y;\r\n result.z = -quaternion.z;\r\n result.w = quaternion.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes magnitude squared for the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to conjugate.\r\n * @returns {Number} The magnitude squared.\r\n */\r\nQuaternion.magnitudeSquared = function (quaternion) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n //>>includeEnd('debug');\r\n\r\n return (\r\n quaternion.x * quaternion.x +\r\n quaternion.y * quaternion.y +\r\n quaternion.z * quaternion.z +\r\n quaternion.w * quaternion.w\r\n );\r\n};\r\n\r\n/**\r\n * Computes magnitude for the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to conjugate.\r\n * @returns {Number} The magnitude.\r\n */\r\nQuaternion.magnitude = function (quaternion) {\r\n return Math.sqrt(Quaternion.magnitudeSquared(quaternion));\r\n};\r\n\r\n/**\r\n * Computes the normalized form of the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to normalize.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.normalize = function (quaternion, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const inverseMagnitude = 1.0 / Quaternion.magnitude(quaternion);\r\n const x = quaternion.x * inverseMagnitude;\r\n const y = quaternion.y * inverseMagnitude;\r\n const z = quaternion.z * inverseMagnitude;\r\n const w = quaternion.w * inverseMagnitude;\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the inverse of the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to normalize.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.inverse = function (quaternion, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const magnitudeSquared = Quaternion.magnitudeSquared(quaternion);\r\n result = Quaternion.conjugate(quaternion, result);\r\n return Quaternion.multiplyByScalar(result, 1.0 / magnitudeSquared, result);\r\n};\r\n\r\n/**\r\n * Computes the componentwise sum of two quaternions.\r\n *\r\n * @param {Quaternion} left The first quaternion.\r\n * @param {Quaternion} right The second quaternion.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.add = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x + right.x;\r\n result.y = left.y + right.y;\r\n result.z = left.z + right.z;\r\n result.w = left.w + right.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the componentwise difference of two quaternions.\r\n *\r\n * @param {Quaternion} left The first quaternion.\r\n * @param {Quaternion} right The second quaternion.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.subtract = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = left.x - right.x;\r\n result.y = left.y - right.y;\r\n result.z = left.z - right.z;\r\n result.w = left.w - right.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Negates the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to be negated.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.negate = function (quaternion, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = -quaternion.x;\r\n result.y = -quaternion.y;\r\n result.z = -quaternion.z;\r\n result.w = -quaternion.w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the dot (scalar) product of two quaternions.\r\n *\r\n * @param {Quaternion} left The first quaternion.\r\n * @param {Quaternion} right The second quaternion.\r\n * @returns {Number} The dot product.\r\n */\r\nQuaternion.dot = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n //>>includeEnd('debug');\r\n\r\n return (\r\n left.x * right.x + left.y * right.y + left.z * right.z + left.w * right.w\r\n );\r\n};\r\n\r\n/**\r\n * Computes the product of two quaternions.\r\n *\r\n * @param {Quaternion} left The first quaternion.\r\n * @param {Quaternion} right The second quaternion.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.multiply = function (left, right, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"left\", left);\r\n Check.typeOf.object(\"right\", right);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const leftX = left.x;\r\n const leftY = left.y;\r\n const leftZ = left.z;\r\n const leftW = left.w;\r\n\r\n const rightX = right.x;\r\n const rightY = right.y;\r\n const rightZ = right.z;\r\n const rightW = right.w;\r\n\r\n const x = leftW * rightX + leftX * rightW + leftY * rightZ - leftZ * rightY;\r\n const y = leftW * rightY - leftX * rightZ + leftY * rightW + leftZ * rightX;\r\n const z = leftW * rightZ + leftX * rightY - leftY * rightX + leftZ * rightW;\r\n const w = leftW * rightW - leftX * rightX - leftY * rightY - leftZ * rightZ;\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n result.w = w;\r\n return result;\r\n};\r\n\r\n/**\r\n * Multiplies the provided quaternion componentwise by the provided scalar.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to be scaled.\r\n * @param {Number} scalar The scalar to multiply with.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.multiplyByScalar = function (quaternion, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = quaternion.x * scalar;\r\n result.y = quaternion.y * scalar;\r\n result.z = quaternion.z * scalar;\r\n result.w = quaternion.w * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Divides the provided quaternion componentwise by the provided scalar.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to be divided.\r\n * @param {Number} scalar The scalar to divide by.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.divideByScalar = function (quaternion, scalar, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n Check.typeOf.number(\"scalar\", scalar);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n result.x = quaternion.x / scalar;\r\n result.y = quaternion.y / scalar;\r\n result.z = quaternion.z / scalar;\r\n result.w = quaternion.w / scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the axis of rotation of the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to use.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nQuaternion.computeAxis = function (quaternion, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const w = quaternion.w;\r\n if (Math.abs(w - 1.0) < CesiumMath.EPSILON6) {\r\n result.x = result.y = result.z = 0;\r\n return result;\r\n }\r\n\r\n const scalar = 1.0 / Math.sqrt(1.0 - w * w);\r\n\r\n result.x = quaternion.x * scalar;\r\n result.y = quaternion.y * scalar;\r\n result.z = quaternion.z * scalar;\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the angle of rotation of the provided quaternion.\r\n *\r\n * @param {Quaternion} quaternion The quaternion to use.\r\n * @returns {Number} The angle of rotation.\r\n */\r\nQuaternion.computeAngle = function (quaternion) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n //>>includeEnd('debug');\r\n\r\n if (Math.abs(quaternion.w - 1.0) < CesiumMath.EPSILON6) {\r\n return 0.0;\r\n }\r\n return 2.0 * Math.acos(quaternion.w);\r\n};\r\n\r\nlet lerpScratch = new Quaternion();\r\n/**\r\n * Computes the linear interpolation or extrapolation at t using the provided quaternions.\r\n *\r\n * @param {Quaternion} start The value corresponding to t at 0.0.\r\n * @param {Quaternion} end The value corresponding to t at 1.0.\r\n * @param {Number} t The point along t at which to interpolate.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.lerp = function (start, end, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"start\", start);\r\n Check.typeOf.object(\"end\", end);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n lerpScratch = Quaternion.multiplyByScalar(end, t, lerpScratch);\r\n result = Quaternion.multiplyByScalar(start, 1.0 - t, result);\r\n return Quaternion.add(lerpScratch, result, result);\r\n};\r\n\r\nlet slerpEndNegated = new Quaternion();\r\nlet slerpScaledP = new Quaternion();\r\nlet slerpScaledR = new Quaternion();\r\n/**\r\n * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions.\r\n *\r\n * @param {Quaternion} start The value corresponding to t at 0.0.\r\n * @param {Quaternion} end The value corresponding to t at 1.0.\r\n * @param {Number} t The point along t at which to interpolate.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n *\r\n * @see Quaternion#fastSlerp\r\n */\r\nQuaternion.slerp = function (start, end, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"start\", start);\r\n Check.typeOf.object(\"end\", end);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n let dot = Quaternion.dot(start, end);\r\n\r\n // The angle between start must be acute. Since q and -q represent\r\n // the same rotation, negate q to get the acute angle.\r\n let r = end;\r\n if (dot < 0.0) {\r\n dot = -dot;\r\n r = slerpEndNegated = Quaternion.negate(end, slerpEndNegated);\r\n }\r\n\r\n // dot > 0, as the dot product approaches 1, the angle between the\r\n // quaternions vanishes. use linear interpolation.\r\n if (1.0 - dot < CesiumMath.EPSILON6) {\r\n return Quaternion.lerp(start, r, t, result);\r\n }\r\n\r\n const theta = Math.acos(dot);\r\n slerpScaledP = Quaternion.multiplyByScalar(\r\n start,\r\n Math.sin((1 - t) * theta),\r\n slerpScaledP\r\n );\r\n slerpScaledR = Quaternion.multiplyByScalar(\r\n r,\r\n Math.sin(t * theta),\r\n slerpScaledR\r\n );\r\n result = Quaternion.add(slerpScaledP, slerpScaledR, result);\r\n return Quaternion.multiplyByScalar(result, 1.0 / Math.sin(theta), result);\r\n};\r\n\r\n/**\r\n * The logarithmic quaternion function.\r\n *\r\n * @param {Quaternion} quaternion The unit quaternion.\r\n * @param {Cartesian3} result The object onto which to store the result.\r\n * @returns {Cartesian3} The modified result parameter.\r\n */\r\nQuaternion.log = function (quaternion, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"quaternion\", quaternion);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const theta = CesiumMath.acosClamped(quaternion.w);\r\n let thetaOverSinTheta = 0.0;\r\n\r\n if (theta !== 0.0) {\r\n thetaOverSinTheta = theta / Math.sin(theta);\r\n }\r\n\r\n return Cartesian3.multiplyByScalar(quaternion, thetaOverSinTheta, result);\r\n};\r\n\r\n/**\r\n * The exponential quaternion function.\r\n *\r\n * @param {Cartesian3} cartesian The cartesian.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n */\r\nQuaternion.exp = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"cartesian\", cartesian);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const theta = Cartesian3.magnitude(cartesian);\r\n let sinThetaOverTheta = 0.0;\r\n\r\n if (theta !== 0.0) {\r\n sinThetaOverTheta = Math.sin(theta) / theta;\r\n }\r\n\r\n result.x = cartesian.x * sinThetaOverTheta;\r\n result.y = cartesian.y * sinThetaOverTheta;\r\n result.z = cartesian.z * sinThetaOverTheta;\r\n result.w = Math.cos(theta);\r\n\r\n return result;\r\n};\r\n\r\nconst squadScratchCartesian0 = new Cartesian3();\r\nconst squadScratchCartesian1 = new Cartesian3();\r\nconst squadScratchQuaternion0 = new Quaternion();\r\nconst squadScratchQuaternion1 = new Quaternion();\r\n\r\n/**\r\n * Computes an inner quadrangle point.\r\n *

    This will compute quaternions that ensure a squad curve is C1.

    \r\n *\r\n * @param {Quaternion} q0 The first quaternion.\r\n * @param {Quaternion} q1 The second quaternion.\r\n * @param {Quaternion} q2 The third quaternion.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n *\r\n * @see Quaternion#squad\r\n */\r\nQuaternion.computeInnerQuadrangle = function (q0, q1, q2, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"q0\", q0);\r\n Check.typeOf.object(\"q1\", q1);\r\n Check.typeOf.object(\"q2\", q2);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const qInv = Quaternion.conjugate(q1, squadScratchQuaternion0);\r\n Quaternion.multiply(qInv, q2, squadScratchQuaternion1);\r\n const cart0 = Quaternion.log(squadScratchQuaternion1, squadScratchCartesian0);\r\n\r\n Quaternion.multiply(qInv, q0, squadScratchQuaternion1);\r\n const cart1 = Quaternion.log(squadScratchQuaternion1, squadScratchCartesian1);\r\n\r\n Cartesian3.add(cart0, cart1, cart0);\r\n Cartesian3.multiplyByScalar(cart0, 0.25, cart0);\r\n Cartesian3.negate(cart0, cart0);\r\n Quaternion.exp(cart0, squadScratchQuaternion0);\r\n\r\n return Quaternion.multiply(q1, squadScratchQuaternion0, result);\r\n};\r\n\r\n/**\r\n * Computes the spherical quadrangle interpolation between quaternions.\r\n *\r\n * @param {Quaternion} q0 The first quaternion.\r\n * @param {Quaternion} q1 The second quaternion.\r\n * @param {Quaternion} s0 The first inner quadrangle.\r\n * @param {Quaternion} s1 The second inner quadrangle.\r\n * @param {Number} t The time in [0,1] used to interpolate.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n *\r\n *\r\n * @example\r\n * // 1. compute the squad interpolation between two quaternions on a curve\r\n * const s0 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i - 1], quaternions[i], quaternions[i + 1], new Cesium.Quaternion());\r\n * const s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[i], quaternions[i + 1], quaternions[i + 2], new Cesium.Quaternion());\r\n * const q = Cesium.Quaternion.squad(quaternions[i], quaternions[i + 1], s0, s1, t, new Cesium.Quaternion());\r\n *\r\n * // 2. compute the squad interpolation as above but where the first quaternion is a end point.\r\n * const s1 = Cesium.Quaternion.computeInnerQuadrangle(quaternions[0], quaternions[1], quaternions[2], new Cesium.Quaternion());\r\n * const q = Cesium.Quaternion.squad(quaternions[0], quaternions[1], quaternions[0], s1, t, new Cesium.Quaternion());\r\n *\r\n * @see Quaternion#computeInnerQuadrangle\r\n */\r\nQuaternion.squad = function (q0, q1, s0, s1, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"q0\", q0);\r\n Check.typeOf.object(\"q1\", q1);\r\n Check.typeOf.object(\"s0\", s0);\r\n Check.typeOf.object(\"s1\", s1);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const slerp0 = Quaternion.slerp(q0, q1, t, squadScratchQuaternion0);\r\n const slerp1 = Quaternion.slerp(s0, s1, t, squadScratchQuaternion1);\r\n return Quaternion.slerp(slerp0, slerp1, 2.0 * t * (1.0 - t), result);\r\n};\r\n\r\nconst fastSlerpScratchQuaternion = new Quaternion();\r\n// eslint-disable-next-line no-loss-of-precision\r\nconst opmu = 1.90110745351730037;\r\nconst u = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\r\nconst v = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\r\nconst bT = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\r\nconst bD = FeatureDetection.supportsTypedArrays() ? new Float32Array(8) : [];\r\n\r\nfor (let i = 0; i < 7; ++i) {\r\n const s = i + 1.0;\r\n const t = 2.0 * s + 1.0;\r\n u[i] = 1.0 / (s * t);\r\n v[i] = s / t;\r\n}\r\n\r\nu[7] = opmu / (8.0 * 17.0);\r\nv[7] = (opmu * 8.0) / 17.0;\r\n\r\n/**\r\n * Computes the spherical linear interpolation or extrapolation at t using the provided quaternions.\r\n * This implementation is faster than {@link Quaternion#slerp}, but is only accurate up to 10-6.\r\n *\r\n * @param {Quaternion} start The value corresponding to t at 0.0.\r\n * @param {Quaternion} end The value corresponding to t at 1.0.\r\n * @param {Number} t The point along t at which to interpolate.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter.\r\n *\r\n * @see Quaternion#slerp\r\n */\r\nQuaternion.fastSlerp = function (start, end, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"start\", start);\r\n Check.typeOf.object(\"end\", end);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n let x = Quaternion.dot(start, end);\r\n\r\n let sign;\r\n if (x >= 0) {\r\n sign = 1.0;\r\n } else {\r\n sign = -1.0;\r\n x = -x;\r\n }\r\n\r\n const xm1 = x - 1.0;\r\n const d = 1.0 - t;\r\n const sqrT = t * t;\r\n const sqrD = d * d;\r\n\r\n for (let i = 7; i >= 0; --i) {\r\n bT[i] = (u[i] * sqrT - v[i]) * xm1;\r\n bD[i] = (u[i] * sqrD - v[i]) * xm1;\r\n }\r\n\r\n const cT =\r\n sign *\r\n t *\r\n (1.0 +\r\n bT[0] *\r\n (1.0 +\r\n bT[1] *\r\n (1.0 +\r\n bT[2] *\r\n (1.0 +\r\n bT[3] *\r\n (1.0 +\r\n bT[4] *\r\n (1.0 + bT[5] * (1.0 + bT[6] * (1.0 + bT[7]))))))));\r\n const cD =\r\n d *\r\n (1.0 +\r\n bD[0] *\r\n (1.0 +\r\n bD[1] *\r\n (1.0 +\r\n bD[2] *\r\n (1.0 +\r\n bD[3] *\r\n (1.0 +\r\n bD[4] *\r\n (1.0 + bD[5] * (1.0 + bD[6] * (1.0 + bD[7]))))))));\r\n\r\n const temp = Quaternion.multiplyByScalar(\r\n start,\r\n cD,\r\n fastSlerpScratchQuaternion\r\n );\r\n Quaternion.multiplyByScalar(end, cT, result);\r\n return Quaternion.add(temp, result, result);\r\n};\r\n\r\n/**\r\n * Computes the spherical quadrangle interpolation between quaternions.\r\n * An implementation that is faster than {@link Quaternion#squad}, but less accurate.\r\n *\r\n * @param {Quaternion} q0 The first quaternion.\r\n * @param {Quaternion} q1 The second quaternion.\r\n * @param {Quaternion} s0 The first inner quadrangle.\r\n * @param {Quaternion} s1 The second inner quadrangle.\r\n * @param {Number} t The time in [0,1] used to interpolate.\r\n * @param {Quaternion} result The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new instance if none was provided.\r\n *\r\n * @see Quaternion#squad\r\n */\r\nQuaternion.fastSquad = function (q0, q1, s0, s1, t, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"q0\", q0);\r\n Check.typeOf.object(\"q1\", q1);\r\n Check.typeOf.object(\"s0\", s0);\r\n Check.typeOf.object(\"s1\", s1);\r\n Check.typeOf.number(\"t\", t);\r\n Check.typeOf.object(\"result\", result);\r\n //>>includeEnd('debug');\r\n\r\n const slerp0 = Quaternion.fastSlerp(q0, q1, t, squadScratchQuaternion0);\r\n const slerp1 = Quaternion.fastSlerp(s0, s1, t, squadScratchQuaternion1);\r\n return Quaternion.fastSlerp(slerp0, slerp1, 2.0 * t * (1.0 - t), result);\r\n};\r\n\r\n/**\r\n * Compares the provided quaternions componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Quaternion} [left] The first quaternion.\r\n * @param {Quaternion} [right] The second quaternion.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nQuaternion.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.x === right.x &&\r\n left.y === right.y &&\r\n left.z === right.z &&\r\n left.w === right.w)\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided quaternions componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Quaternion} [left] The first quaternion.\r\n * @param {Quaternion} [right] The second quaternion.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nQuaternion.equalsEpsilon = function (left, right, epsilon) {\r\n epsilon = defaultValue(epsilon, 0);\r\n\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Math.abs(left.x - right.x) <= epsilon &&\r\n Math.abs(left.y - right.y) <= epsilon &&\r\n Math.abs(left.z - right.z) <= epsilon &&\r\n Math.abs(left.w - right.w) <= epsilon)\r\n );\r\n};\r\n\r\n/**\r\n * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 0.0).\r\n *\r\n * @type {Quaternion}\r\n * @constant\r\n */\r\nQuaternion.ZERO = Object.freeze(new Quaternion(0.0, 0.0, 0.0, 0.0));\r\n\r\n/**\r\n * An immutable Quaternion instance initialized to (0.0, 0.0, 0.0, 1.0).\r\n *\r\n * @type {Quaternion}\r\n * @constant\r\n */\r\nQuaternion.IDENTITY = Object.freeze(new Quaternion(0.0, 0.0, 0.0, 1.0));\r\n\r\n/**\r\n * Duplicates this Quaternion instance.\r\n *\r\n * @param {Quaternion} [result] The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if one was not provided.\r\n */\r\nQuaternion.prototype.clone = function (result) {\r\n return Quaternion.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this and the provided quaternion componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {Quaternion} [right] The right hand side quaternion.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nQuaternion.prototype.equals = function (right) {\r\n return Quaternion.equals(this, right);\r\n};\r\n\r\n/**\r\n * Compares this and the provided quaternion componentwise and returns\r\n * true if they are within the provided epsilon,\r\n * false otherwise.\r\n *\r\n * @param {Quaternion} [right] The right hand side quaternion.\r\n * @param {Number} [epsilon=0] The epsilon to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nQuaternion.prototype.equalsEpsilon = function (right, epsilon) {\r\n return Quaternion.equalsEpsilon(this, right, epsilon);\r\n};\r\n\r\n/**\r\n * Returns a string representing this quaternion in the format (x, y, z, w).\r\n *\r\n * @returns {String} A string representing this Quaternion.\r\n */\r\nQuaternion.prototype.toString = function () {\r\n return `(${this.x}, ${this.y}, ${this.z}, ${this.w})`;\r\n};\r\nexport default Quaternion;\r\n","import Check from \"./Check.js\";\r\n\r\n/**\r\n * Finds an item in a sorted array.\r\n *\r\n * @function\r\n * @param {Array} array The sorted array to search.\r\n * @param {*} itemToFind The item to find in the array.\r\n * @param {binarySearchComparator} comparator The function to use to compare the item to\r\n * elements in the array.\r\n * @returns {Number} The index of itemToFind in the array, if it exists. If itemToFind\r\n * does not exist, the return value is a negative number which is the bitwise complement (~)\r\n * of the index before which the itemToFind should be inserted in order to maintain the\r\n * sorted order of the array.\r\n *\r\n * @example\r\n * // Create a comparator function to search through an array of numbers.\r\n * function comparator(a, b) {\r\n * return a - b;\r\n * };\r\n * const numbers = [0, 2, 4, 6, 8];\r\n * const index = Cesium.binarySearch(numbers, 6, comparator); // 3\r\n */\r\nfunction binarySearch(array, itemToFind, comparator) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n Check.defined(\"itemToFind\", itemToFind);\r\n Check.defined(\"comparator\", comparator);\r\n //>>includeEnd('debug');\r\n\r\n let low = 0;\r\n let high = array.length - 1;\r\n let i;\r\n let comparison;\r\n\r\n while (low <= high) {\r\n i = ~~((low + high) / 2);\r\n comparison = comparator(array[i], itemToFind);\r\n if (comparison < 0) {\r\n low = i + 1;\r\n continue;\r\n }\r\n if (comparison > 0) {\r\n high = i - 1;\r\n continue;\r\n }\r\n return i;\r\n }\r\n return ~(high + 1);\r\n}\r\n\r\n/**\r\n * A function used to compare two items while performing a binary search.\r\n * @callback binarySearchComparator\r\n *\r\n * @param {*} a An item in the array.\r\n * @param {*} b The item being searched for.\r\n * @returns {Number} Returns a negative value if a is less than b,\r\n * a positive value if a is greater than b, or\r\n * 0 if a is equal to b.\r\n *\r\n * @example\r\n * function compareNumbers(a, b) {\r\n * return a - b;\r\n * }\r\n */\r\nexport default binarySearch;\r\n","/**\r\n * A set of Earth Orientation Parameters (EOP) sampled at a time.\r\n *\r\n * @alias EarthOrientationParametersSample\r\n * @constructor\r\n *\r\n * @param {Number} xPoleWander The pole wander about the X axis, in radians.\r\n * @param {Number} yPoleWander The pole wander about the Y axis, in radians.\r\n * @param {Number} xPoleOffset The offset to the Celestial Intermediate Pole (CIP) about the X axis, in radians.\r\n * @param {Number} yPoleOffset The offset to the Celestial Intermediate Pole (CIP) about the Y axis, in radians.\r\n * @param {Number} ut1MinusUtc The difference in time standards, UT1 - UTC, in seconds.\r\n *\r\n * @private\r\n */\r\nfunction EarthOrientationParametersSample(\r\n xPoleWander,\r\n yPoleWander,\r\n xPoleOffset,\r\n yPoleOffset,\r\n ut1MinusUtc\r\n) {\r\n /**\r\n * The pole wander about the X axis, in radians.\r\n * @type {Number}\r\n */\r\n this.xPoleWander = xPoleWander;\r\n\r\n /**\r\n * The pole wander about the Y axis, in radians.\r\n * @type {Number}\r\n */\r\n this.yPoleWander = yPoleWander;\r\n\r\n /**\r\n * The offset to the Celestial Intermediate Pole (CIP) about the X axis, in radians.\r\n * @type {Number}\r\n */\r\n this.xPoleOffset = xPoleOffset;\r\n\r\n /**\r\n * The offset to the Celestial Intermediate Pole (CIP) about the Y axis, in radians.\r\n * @type {Number}\r\n */\r\n this.yPoleOffset = yPoleOffset;\r\n\r\n /**\r\n * The difference in time standards, UT1 - UTC, in seconds.\r\n * @type {Number}\r\n */\r\n this.ut1MinusUtc = ut1MinusUtc;\r\n}\r\nexport default EarthOrientationParametersSample;\r\n","/**\r\n * Represents a Gregorian date in a more precise format than the JavaScript Date object.\r\n * In addition to submillisecond precision, this object can also represent leap seconds.\r\n * @alias GregorianDate\r\n * @constructor\r\n *\r\n * @param {Number} [year] The year as a whole number.\r\n * @param {Number} [month] The month as a whole number with range [1, 12].\r\n * @param {Number} [day] The day of the month as a whole number starting at 1.\r\n * @param {Number} [hour] The hour as a whole number with range [0, 23].\r\n * @param {Number} [minute] The minute of the hour as a whole number with range [0, 59].\r\n * @param {Number} [second] The second of the minute as a whole number with range [0, 60], with 60 representing a leap second.\r\n * @param {Number} [millisecond] The millisecond of the second as a floating point number with range [0.0, 1000.0).\r\n * @param {Boolean} [isLeapSecond] Whether this time is during a leap second.\r\n *\r\n * @see JulianDate#toGregorianDate\r\n */\r\nfunction GregorianDate(\r\n year,\r\n month,\r\n day,\r\n hour,\r\n minute,\r\n second,\r\n millisecond,\r\n isLeapSecond\r\n) {\r\n /**\r\n * Gets or sets the year as a whole number.\r\n * @type {Number}\r\n */\r\n this.year = year;\r\n /**\r\n * Gets or sets the month as a whole number with range [1, 12].\r\n * @type {Number}\r\n */\r\n this.month = month;\r\n /**\r\n * Gets or sets the day of the month as a whole number starting at 1.\r\n * @type {Number}\r\n */\r\n this.day = day;\r\n /**\r\n * Gets or sets the hour as a whole number with range [0, 23].\r\n * @type {Number}\r\n */\r\n this.hour = hour;\r\n /**\r\n * Gets or sets the minute of the hour as a whole number with range [0, 59].\r\n * @type {Number}\r\n */\r\n this.minute = minute;\r\n /**\r\n * Gets or sets the second of the minute as a whole number with range [0, 60], with 60 representing a leap second.\r\n * @type {Number}\r\n */\r\n this.second = second;\r\n /**\r\n * Gets or sets the millisecond of the second as a floating point number with range [0.0, 1000.0).\r\n * @type {Number}\r\n */\r\n this.millisecond = millisecond;\r\n /**\r\n * Gets or sets whether this time is during a leap second.\r\n * @type {Boolean}\r\n */\r\n this.isLeapSecond = isLeapSecond;\r\n}\r\nexport default GregorianDate;\r\n","import DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Determines if a given date is a leap year.\r\n *\r\n * @function isLeapYear\r\n *\r\n * @param {Number} year The year to be tested.\r\n * @returns {Boolean} True if year is a leap year.\r\n *\r\n * @example\r\n * const leapYear = Cesium.isLeapYear(2000); // true\r\n */\r\nfunction isLeapYear(year) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (year === null || isNaN(year)) {\r\n throw new DeveloperError(\"year is required and must be a number.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n}\r\nexport default isLeapYear;\r\n","/**\r\n * Describes a single leap second, which is constructed from a {@link JulianDate} and a\r\n * numerical offset representing the number of seconds TAI is ahead of the UTC time standard.\r\n * @alias LeapSecond\r\n * @constructor\r\n *\r\n * @param {JulianDate} [date] A Julian date representing the time of the leap second.\r\n * @param {Number} [offset] The cumulative number of seconds that TAI is ahead of UTC at the provided date.\r\n */\r\nfunction LeapSecond(date, offset) {\r\n /**\r\n * Gets or sets the date at which this leap second occurs.\r\n * @type {JulianDate}\r\n */\r\n this.julianDate = date;\r\n\r\n /**\r\n * Gets or sets the cumulative number of seconds between the UTC and TAI time standards at the time\r\n * of this leap second.\r\n * @type {Number}\r\n */\r\n this.offset = offset;\r\n}\r\nexport default LeapSecond;\r\n","/**\r\n * Constants for time conversions like those done by {@link JulianDate}.\r\n *\r\n * @namespace TimeConstants\r\n *\r\n * @see JulianDate\r\n *\r\n * @private\r\n */\r\nconst TimeConstants = {\r\n /**\r\n * The number of seconds in one millisecond: 0.001\r\n * @type {Number}\r\n * @constant\r\n */\r\n SECONDS_PER_MILLISECOND: 0.001,\r\n\r\n /**\r\n * The number of seconds in one minute: 60.\r\n * @type {Number}\r\n * @constant\r\n */\r\n SECONDS_PER_MINUTE: 60.0,\r\n\r\n /**\r\n * The number of minutes in one hour: 60.\r\n * @type {Number}\r\n * @constant\r\n */\r\n MINUTES_PER_HOUR: 60.0,\r\n\r\n /**\r\n * The number of hours in one day: 24.\r\n * @type {Number}\r\n * @constant\r\n */\r\n HOURS_PER_DAY: 24.0,\r\n\r\n /**\r\n * The number of seconds in one hour: 3600.\r\n * @type {Number}\r\n * @constant\r\n */\r\n SECONDS_PER_HOUR: 3600.0,\r\n\r\n /**\r\n * The number of minutes in one day: 1440.\r\n * @type {Number}\r\n * @constant\r\n */\r\n MINUTES_PER_DAY: 1440.0,\r\n\r\n /**\r\n * The number of seconds in one day, ignoring leap seconds: 86400.\r\n * @type {Number}\r\n * @constant\r\n */\r\n SECONDS_PER_DAY: 86400.0,\r\n\r\n /**\r\n * The number of days in one Julian century: 36525.\r\n * @type {Number}\r\n * @constant\r\n */\r\n DAYS_PER_JULIAN_CENTURY: 36525.0,\r\n\r\n /**\r\n * One trillionth of a second.\r\n * @type {Number}\r\n * @constant\r\n */\r\n PICOSECOND: 0.000000001,\r\n\r\n /**\r\n * The number of days to subtract from a Julian date to determine the\r\n * modified Julian date, which gives the number of days since midnight\r\n * on November 17, 1858.\r\n * @type {Number}\r\n * @constant\r\n */\r\n MODIFIED_JULIAN_DATE_DIFFERENCE: 2400000.5,\r\n};\r\nexport default Object.freeze(TimeConstants);\r\n","/**\r\n * Provides the type of time standards which JulianDate can take as input.\r\n *\r\n * @enum {Number}\r\n *\r\n * @see JulianDate\r\n */\r\nconst TimeStandard = {\r\n /**\r\n * Represents the coordinated Universal Time (UTC) time standard.\r\n *\r\n * UTC is related to TAI according to the relationship\r\n * UTC = TAI - deltaT where deltaT is the number of leap\r\n * seconds which have been introduced as of the time in TAI.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n UTC: 0,\r\n\r\n /**\r\n * Represents the International Atomic Time (TAI) time standard.\r\n * TAI is the principal time standard to which the other time standards are related.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n TAI: 1,\r\n};\r\nexport default Object.freeze(TimeStandard);\r\n","import binarySearch from \"./binarySearch.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport GregorianDate from \"./GregorianDate.js\";\r\nimport isLeapYear from \"./isLeapYear.js\";\r\nimport LeapSecond from \"./LeapSecond.js\";\r\nimport TimeConstants from \"./TimeConstants.js\";\r\nimport TimeStandard from \"./TimeStandard.js\";\r\n\r\nconst gregorianDateScratch = new GregorianDate();\r\nconst daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\r\nconst daysInLeapFeburary = 29;\r\n\r\nfunction compareLeapSecondDates(leapSecond, dateToFind) {\r\n return JulianDate.compare(leapSecond.julianDate, dateToFind.julianDate);\r\n}\r\n\r\n// we don't really need a leap second instance, anything with a julianDate property will do\r\nconst binarySearchScratchLeapSecond = new LeapSecond();\r\n\r\nfunction convertUtcToTai(julianDate) {\r\n //Even though julianDate is in UTC, we'll treat it as TAI and\r\n //search the leap second table for it.\r\n binarySearchScratchLeapSecond.julianDate = julianDate;\r\n const leapSeconds = JulianDate.leapSeconds;\r\n let index = binarySearch(\r\n leapSeconds,\r\n binarySearchScratchLeapSecond,\r\n compareLeapSecondDates\r\n );\r\n\r\n if (index < 0) {\r\n index = ~index;\r\n }\r\n\r\n if (index >= leapSeconds.length) {\r\n index = leapSeconds.length - 1;\r\n }\r\n\r\n let offset = leapSeconds[index].offset;\r\n if (index > 0) {\r\n //Now we have the index of the closest leap second that comes on or after our UTC time.\r\n //However, if the difference between the UTC date being converted and the TAI\r\n //defined leap second is greater than the offset, we are off by one and need to use\r\n //the previous leap second.\r\n const difference = JulianDate.secondsDifference(\r\n leapSeconds[index].julianDate,\r\n julianDate\r\n );\r\n if (difference > offset) {\r\n index--;\r\n offset = leapSeconds[index].offset;\r\n }\r\n }\r\n\r\n JulianDate.addSeconds(julianDate, offset, julianDate);\r\n}\r\n\r\nfunction convertTaiToUtc(julianDate, result) {\r\n binarySearchScratchLeapSecond.julianDate = julianDate;\r\n const leapSeconds = JulianDate.leapSeconds;\r\n let index = binarySearch(\r\n leapSeconds,\r\n binarySearchScratchLeapSecond,\r\n compareLeapSecondDates\r\n );\r\n if (index < 0) {\r\n index = ~index;\r\n }\r\n\r\n //All times before our first leap second get the first offset.\r\n if (index === 0) {\r\n return JulianDate.addSeconds(julianDate, -leapSeconds[0].offset, result);\r\n }\r\n\r\n //All times after our leap second get the last offset.\r\n if (index >= leapSeconds.length) {\r\n return JulianDate.addSeconds(\r\n julianDate,\r\n -leapSeconds[index - 1].offset,\r\n result\r\n );\r\n }\r\n\r\n //Compute the difference between the found leap second and the time we are converting.\r\n const difference = JulianDate.secondsDifference(\r\n leapSeconds[index].julianDate,\r\n julianDate\r\n );\r\n\r\n if (difference === 0) {\r\n //The date is in our leap second table.\r\n return JulianDate.addSeconds(\r\n julianDate,\r\n -leapSeconds[index].offset,\r\n result\r\n );\r\n }\r\n\r\n if (difference <= 1.0) {\r\n //The requested date is during the moment of a leap second, then we cannot convert to UTC\r\n return undefined;\r\n }\r\n\r\n //The time is in between two leap seconds, index is the leap second after the date\r\n //we're converting, so we subtract one to get the correct LeapSecond instance.\r\n return JulianDate.addSeconds(\r\n julianDate,\r\n -leapSeconds[--index].offset,\r\n result\r\n );\r\n}\r\n\r\nfunction setComponents(wholeDays, secondsOfDay, julianDate) {\r\n const extraDays = (secondsOfDay / TimeConstants.SECONDS_PER_DAY) | 0;\r\n wholeDays += extraDays;\r\n secondsOfDay -= TimeConstants.SECONDS_PER_DAY * extraDays;\r\n\r\n if (secondsOfDay < 0) {\r\n wholeDays--;\r\n secondsOfDay += TimeConstants.SECONDS_PER_DAY;\r\n }\r\n\r\n julianDate.dayNumber = wholeDays;\r\n julianDate.secondsOfDay = secondsOfDay;\r\n return julianDate;\r\n}\r\n\r\nfunction computeJulianDateComponents(\r\n year,\r\n month,\r\n day,\r\n hour,\r\n minute,\r\n second,\r\n millisecond\r\n) {\r\n // Algorithm from page 604 of the Explanatory Supplement to the\r\n // Astronomical Almanac (Seidelmann 1992).\r\n\r\n const a = ((month - 14) / 12) | 0;\r\n const b = year + 4800 + a;\r\n let dayNumber =\r\n (((1461 * b) / 4) | 0) +\r\n (((367 * (month - 2 - 12 * a)) / 12) | 0) -\r\n (((3 * (((b + 100) / 100) | 0)) / 4) | 0) +\r\n day -\r\n 32075;\r\n\r\n // JulianDates are noon-based\r\n hour = hour - 12;\r\n if (hour < 0) {\r\n hour += 24;\r\n }\r\n\r\n const secondsOfDay =\r\n second +\r\n (hour * TimeConstants.SECONDS_PER_HOUR +\r\n minute * TimeConstants.SECONDS_PER_MINUTE +\r\n millisecond * TimeConstants.SECONDS_PER_MILLISECOND);\r\n\r\n if (secondsOfDay >= 43200.0) {\r\n dayNumber -= 1;\r\n }\r\n\r\n return [dayNumber, secondsOfDay];\r\n}\r\n\r\n//Regular expressions used for ISO8601 date parsing.\r\n//YYYY\r\nconst matchCalendarYear = /^(\\d{4})$/;\r\n//YYYY-MM (YYYYMM is invalid)\r\nconst matchCalendarMonth = /^(\\d{4})-(\\d{2})$/;\r\n//YYYY-DDD or YYYYDDD\r\nconst matchOrdinalDate = /^(\\d{4})-?(\\d{3})$/;\r\n//YYYY-Www or YYYYWww or YYYY-Www-D or YYYYWwwD\r\nconst matchWeekDate = /^(\\d{4})-?W(\\d{2})-?(\\d{1})?$/;\r\n//YYYY-MM-DD or YYYYMMDD\r\nconst matchCalendarDate = /^(\\d{4})-?(\\d{2})-?(\\d{2})$/;\r\n// Match utc offset\r\nconst utcOffset = /([Z+\\-])?(\\d{2})?:?(\\d{2})?$/;\r\n// Match hours HH or HH.xxxxx\r\nconst matchHours = /^(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\r\n// Match hours/minutes HH:MM HHMM.xxxxx\r\nconst matchHoursMinutes = /^(\\d{2}):?(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\r\n// Match hours/minutes HH:MM:SS HHMMSS.xxxxx\r\nconst matchHoursMinutesSeconds =\r\n /^(\\d{2}):?(\\d{2}):?(\\d{2})(\\.\\d+)?/.source + utcOffset.source;\r\n\r\nconst iso8601ErrorMessage = \"Invalid ISO 8601 date.\";\r\n\r\n/**\r\n * Represents an astronomical Julian date, which is the number of days since noon on January 1, -4712 (4713 BC).\r\n * For increased precision, this class stores the whole number part of the date and the seconds\r\n * part of the date in separate components. In order to be safe for arithmetic and represent\r\n * leap seconds, the date is always stored in the International Atomic Time standard\r\n * {@link TimeStandard.TAI}.\r\n * @alias JulianDate\r\n * @constructor\r\n *\r\n * @param {Number} [julianDayNumber=0.0] The Julian Day Number representing the number of whole days. Fractional days will also be handled correctly.\r\n * @param {Number} [secondsOfDay=0.0] The number of seconds into the current Julian Day Number. Fractional seconds, negative seconds and seconds greater than a day will be handled correctly.\r\n * @param {TimeStandard} [timeStandard=TimeStandard.UTC] The time standard in which the first two parameters are defined.\r\n */\r\nfunction JulianDate(julianDayNumber, secondsOfDay, timeStandard) {\r\n /**\r\n * Gets or sets the number of whole days.\r\n * @type {Number}\r\n */\r\n this.dayNumber = undefined;\r\n\r\n /**\r\n * Gets or sets the number of seconds into the current day.\r\n * @type {Number}\r\n */\r\n this.secondsOfDay = undefined;\r\n\r\n julianDayNumber = defaultValue(julianDayNumber, 0.0);\r\n secondsOfDay = defaultValue(secondsOfDay, 0.0);\r\n timeStandard = defaultValue(timeStandard, TimeStandard.UTC);\r\n\r\n //If julianDayNumber is fractional, make it an integer and add the number of seconds the fraction represented.\r\n const wholeDays = julianDayNumber | 0;\r\n secondsOfDay =\r\n secondsOfDay +\r\n (julianDayNumber - wholeDays) * TimeConstants.SECONDS_PER_DAY;\r\n\r\n setComponents(wholeDays, secondsOfDay, this);\r\n\r\n if (timeStandard === TimeStandard.UTC) {\r\n convertUtcToTai(this);\r\n }\r\n}\r\n\r\n/**\r\n * Creates a new instance from a GregorianDate.\r\n *\r\n * @param {GregorianDate} date A GregorianDate.\r\n * @param {JulianDate} [result] An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\r\n *\r\n * @exception {DeveloperError} date must be a valid GregorianDate.\r\n */\r\nJulianDate.fromGregorianDate = function (date, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!(date instanceof GregorianDate)) {\r\n throw new DeveloperError(\"date must be a valid GregorianDate.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const components = computeJulianDateComponents(\r\n date.year,\r\n date.month,\r\n date.day,\r\n date.hour,\r\n date.minute,\r\n date.second,\r\n date.millisecond\r\n );\r\n if (!defined(result)) {\r\n return new JulianDate(components[0], components[1], TimeStandard.UTC);\r\n }\r\n setComponents(components[0], components[1], result);\r\n convertUtcToTai(result);\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a new instance from a JavaScript Date.\r\n *\r\n * @param {Date} date A JavaScript Date.\r\n * @param {JulianDate} [result] An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\r\n *\r\n * @exception {DeveloperError} date must be a valid JavaScript Date.\r\n */\r\nJulianDate.fromDate = function (date, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!(date instanceof Date) || isNaN(date.getTime())) {\r\n throw new DeveloperError(\"date must be a valid JavaScript Date.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const components = computeJulianDateComponents(\r\n date.getUTCFullYear(),\r\n date.getUTCMonth() + 1,\r\n date.getUTCDate(),\r\n date.getUTCHours(),\r\n date.getUTCMinutes(),\r\n date.getUTCSeconds(),\r\n date.getUTCMilliseconds()\r\n );\r\n if (!defined(result)) {\r\n return new JulianDate(components[0], components[1], TimeStandard.UTC);\r\n }\r\n setComponents(components[0], components[1], result);\r\n convertUtcToTai(result);\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a new instance from a from an {@link http://en.wikipedia.org/wiki/ISO_8601|ISO 8601} date.\r\n * This method is superior to Date.parse because it will handle all valid formats defined by the ISO 8601\r\n * specification, including leap seconds and sub-millisecond times, which discarded by most JavaScript implementations.\r\n *\r\n * @param {String} iso8601String An ISO 8601 date.\r\n * @param {JulianDate} [result] An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\r\n *\r\n * @exception {DeveloperError} Invalid ISO 8601 date.\r\n */\r\nJulianDate.fromIso8601 = function (iso8601String, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (typeof iso8601String !== \"string\") {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n //>>includeEnd('debug');\r\n\r\n //Comma and decimal point both indicate a fractional number according to ISO 8601,\r\n //start out by blanket replacing , with . which is the only valid such symbol in JS.\r\n iso8601String = iso8601String.replace(\",\", \".\");\r\n\r\n //Split the string into its date and time components, denoted by a mandatory T\r\n let tokens = iso8601String.split(\"T\");\r\n let year;\r\n let month = 1;\r\n let day = 1;\r\n let hour = 0;\r\n let minute = 0;\r\n let second = 0;\r\n let millisecond = 0;\r\n\r\n //Lacking a time is okay, but a missing date is illegal.\r\n const date = tokens[0];\r\n const time = tokens[1];\r\n let tmp;\r\n let inLeapYear;\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(date)) {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n\r\n let dashCount;\r\n //>>includeEnd('debug');\r\n\r\n //First match the date against possible regular expressions.\r\n tokens = date.match(matchCalendarDate);\r\n if (tokens !== null) {\r\n //>>includeStart('debug', pragmas.debug);\r\n dashCount = date.split(\"-\").length - 1;\r\n if (dashCount > 0 && dashCount !== 2) {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n //>>includeEnd('debug');\r\n year = +tokens[1];\r\n month = +tokens[2];\r\n day = +tokens[3];\r\n } else {\r\n tokens = date.match(matchCalendarMonth);\r\n if (tokens !== null) {\r\n year = +tokens[1];\r\n month = +tokens[2];\r\n } else {\r\n tokens = date.match(matchCalendarYear);\r\n if (tokens !== null) {\r\n year = +tokens[1];\r\n } else {\r\n //Not a year/month/day so it must be an ordinal date.\r\n let dayOfYear;\r\n tokens = date.match(matchOrdinalDate);\r\n if (tokens !== null) {\r\n year = +tokens[1];\r\n dayOfYear = +tokens[2];\r\n inLeapYear = isLeapYear(year);\r\n\r\n //This validation is only applicable for this format.\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n dayOfYear < 1 ||\r\n (inLeapYear && dayOfYear > 366) ||\r\n (!inLeapYear && dayOfYear > 365)\r\n ) {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n //>>includeEnd('debug')\r\n } else {\r\n tokens = date.match(matchWeekDate);\r\n if (tokens !== null) {\r\n //ISO week date to ordinal date from\r\n //http://en.wikipedia.org/w/index.php?title=ISO_week_date&oldid=474176775\r\n year = +tokens[1];\r\n const weekNumber = +tokens[2];\r\n const dayOfWeek = +tokens[3] || 0;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n dashCount = date.split(\"-\").length - 1;\r\n if (\r\n dashCount > 0 &&\r\n ((!defined(tokens[3]) && dashCount !== 1) ||\r\n (defined(tokens[3]) && dashCount !== 2))\r\n ) {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n //>>includeEnd('debug')\r\n\r\n const january4 = new Date(Date.UTC(year, 0, 4));\r\n dayOfYear = weekNumber * 7 + dayOfWeek - january4.getUTCDay() - 3;\r\n } else {\r\n //None of our regular expressions succeeded in parsing the date properly.\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n //>>includeEnd('debug')\r\n }\r\n }\r\n //Split an ordinal date into month/day.\r\n tmp = new Date(Date.UTC(year, 0, 1));\r\n tmp.setUTCDate(dayOfYear);\r\n month = tmp.getUTCMonth() + 1;\r\n day = tmp.getUTCDate();\r\n }\r\n }\r\n }\r\n\r\n //Now that we have all of the date components, validate them to make sure nothing is out of range.\r\n inLeapYear = isLeapYear(year);\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n month < 1 ||\r\n month > 12 ||\r\n day < 1 ||\r\n ((month !== 2 || !inLeapYear) && day > daysInMonth[month - 1]) ||\r\n (inLeapYear && month === 2 && day > daysInLeapFeburary)\r\n ) {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n //>>includeEnd('debug')\r\n\r\n //Now move onto the time string, which is much simpler.\r\n //If no time is specified, it is considered the beginning of the day, UTC to match Javascript's implementation.\r\n let offsetIndex;\r\n if (defined(time)) {\r\n tokens = time.match(matchHoursMinutesSeconds);\r\n if (tokens !== null) {\r\n //>>includeStart('debug', pragmas.debug);\r\n dashCount = time.split(\":\").length - 1;\r\n if (dashCount > 0 && dashCount !== 2 && dashCount !== 3) {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n //>>includeEnd('debug')\r\n\r\n hour = +tokens[1];\r\n minute = +tokens[2];\r\n second = +tokens[3];\r\n millisecond = +(tokens[4] || 0) * 1000.0;\r\n offsetIndex = 5;\r\n } else {\r\n tokens = time.match(matchHoursMinutes);\r\n if (tokens !== null) {\r\n //>>includeStart('debug', pragmas.debug);\r\n dashCount = time.split(\":\").length - 1;\r\n if (dashCount > 2) {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n //>>includeEnd('debug')\r\n\r\n hour = +tokens[1];\r\n minute = +tokens[2];\r\n second = +(tokens[3] || 0) * 60.0;\r\n offsetIndex = 4;\r\n } else {\r\n tokens = time.match(matchHours);\r\n if (tokens !== null) {\r\n hour = +tokens[1];\r\n minute = +(tokens[2] || 0) * 60.0;\r\n offsetIndex = 3;\r\n } else {\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n //>>includeEnd('debug')\r\n }\r\n }\r\n }\r\n\r\n //Validate that all values are in proper range. Minutes and hours have special cases at 60 and 24.\r\n //>>includeStart('debug', pragmas.debug);\r\n if (\r\n minute >= 60 ||\r\n second >= 61 ||\r\n hour > 24 ||\r\n (hour === 24 && (minute > 0 || second > 0 || millisecond > 0))\r\n ) {\r\n throw new DeveloperError(iso8601ErrorMessage);\r\n }\r\n //>>includeEnd('debug');\r\n\r\n //Check the UTC offset value, if no value exists, use local time\r\n //a Z indicates UTC, + or - are offsets.\r\n const offset = tokens[offsetIndex];\r\n const offsetHours = +tokens[offsetIndex + 1];\r\n const offsetMinutes = +(tokens[offsetIndex + 2] || 0);\r\n switch (offset) {\r\n case \"+\":\r\n hour = hour - offsetHours;\r\n minute = minute - offsetMinutes;\r\n break;\r\n case \"-\":\r\n hour = hour + offsetHours;\r\n minute = minute + offsetMinutes;\r\n break;\r\n case \"Z\":\r\n break;\r\n default:\r\n minute =\r\n minute +\r\n new Date(\r\n Date.UTC(year, month - 1, day, hour, minute)\r\n ).getTimezoneOffset();\r\n break;\r\n }\r\n }\r\n\r\n //ISO8601 denotes a leap second by any time having a seconds component of 60 seconds.\r\n //If that's the case, we need to temporarily subtract a second in order to build a UTC date.\r\n //Then we add it back in after converting to TAI.\r\n const isLeapSecond = second === 60;\r\n if (isLeapSecond) {\r\n second--;\r\n }\r\n\r\n //Even if we successfully parsed the string into its components, after applying UTC offset or\r\n //special cases like 24:00:00 denoting midnight, we need to normalize the data appropriately.\r\n\r\n //milliseconds can never be greater than 1000, and seconds can't be above 60, so we start with minutes\r\n while (minute >= 60) {\r\n minute -= 60;\r\n hour++;\r\n }\r\n\r\n while (hour >= 24) {\r\n hour -= 24;\r\n day++;\r\n }\r\n\r\n tmp = inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1];\r\n while (day > tmp) {\r\n day -= tmp;\r\n month++;\r\n\r\n if (month > 12) {\r\n month -= 12;\r\n year++;\r\n }\r\n\r\n tmp =\r\n inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1];\r\n }\r\n\r\n //If UTC offset is at the beginning/end of the day, minutes can be negative.\r\n while (minute < 0) {\r\n minute += 60;\r\n hour--;\r\n }\r\n\r\n while (hour < 0) {\r\n hour += 24;\r\n day--;\r\n }\r\n\r\n while (day < 1) {\r\n month--;\r\n if (month < 1) {\r\n month += 12;\r\n year--;\r\n }\r\n\r\n tmp =\r\n inLeapYear && month === 2 ? daysInLeapFeburary : daysInMonth[month - 1];\r\n day += tmp;\r\n }\r\n\r\n //Now create the JulianDate components from the Gregorian date and actually create our instance.\r\n const components = computeJulianDateComponents(\r\n year,\r\n month,\r\n day,\r\n hour,\r\n minute,\r\n second,\r\n millisecond\r\n );\r\n\r\n if (!defined(result)) {\r\n result = new JulianDate(components[0], components[1], TimeStandard.UTC);\r\n } else {\r\n setComponents(components[0], components[1], result);\r\n convertUtcToTai(result);\r\n }\r\n\r\n //If we were on a leap second, add it back.\r\n if (isLeapSecond) {\r\n JulianDate.addSeconds(result, 1, result);\r\n }\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a new instance that represents the current system time.\r\n * This is equivalent to calling JulianDate.fromDate(new Date());.\r\n *\r\n * @param {JulianDate} [result] An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\r\n */\r\nJulianDate.now = function (result) {\r\n return JulianDate.fromDate(new Date(), result);\r\n};\r\n\r\nconst toGregorianDateScratch = new JulianDate(0, 0, TimeStandard.TAI);\r\n\r\n/**\r\n * Creates a {@link GregorianDate} from the provided instance.\r\n *\r\n * @param {JulianDate} julianDate The date to be converted.\r\n * @param {GregorianDate} [result] An existing instance to use for the result.\r\n * @returns {GregorianDate} The modified result parameter or a new instance if none was provided.\r\n */\r\nJulianDate.toGregorianDate = function (julianDate, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(julianDate)) {\r\n throw new DeveloperError(\"julianDate is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let isLeapSecond = false;\r\n let thisUtc = convertTaiToUtc(julianDate, toGregorianDateScratch);\r\n if (!defined(thisUtc)) {\r\n //Conversion to UTC will fail if we are during a leap second.\r\n //If that's the case, subtract a second and convert again.\r\n //JavaScript doesn't support leap seconds, so this results in second 59 being repeated twice.\r\n JulianDate.addSeconds(julianDate, -1, toGregorianDateScratch);\r\n thisUtc = convertTaiToUtc(toGregorianDateScratch, toGregorianDateScratch);\r\n isLeapSecond = true;\r\n }\r\n\r\n let julianDayNumber = thisUtc.dayNumber;\r\n const secondsOfDay = thisUtc.secondsOfDay;\r\n\r\n if (secondsOfDay >= 43200.0) {\r\n julianDayNumber += 1;\r\n }\r\n\r\n // Algorithm from page 604 of the Explanatory Supplement to the\r\n // Astronomical Almanac (Seidelmann 1992).\r\n let L = (julianDayNumber + 68569) | 0;\r\n const N = ((4 * L) / 146097) | 0;\r\n L = (L - (((146097 * N + 3) / 4) | 0)) | 0;\r\n const I = ((4000 * (L + 1)) / 1461001) | 0;\r\n L = (L - (((1461 * I) / 4) | 0) + 31) | 0;\r\n const J = ((80 * L) / 2447) | 0;\r\n const day = (L - (((2447 * J) / 80) | 0)) | 0;\r\n L = (J / 11) | 0;\r\n const month = (J + 2 - 12 * L) | 0;\r\n const year = (100 * (N - 49) + I + L) | 0;\r\n\r\n let hour = (secondsOfDay / TimeConstants.SECONDS_PER_HOUR) | 0;\r\n let remainingSeconds = secondsOfDay - hour * TimeConstants.SECONDS_PER_HOUR;\r\n const minute = (remainingSeconds / TimeConstants.SECONDS_PER_MINUTE) | 0;\r\n remainingSeconds =\r\n remainingSeconds - minute * TimeConstants.SECONDS_PER_MINUTE;\r\n let second = remainingSeconds | 0;\r\n const millisecond =\r\n (remainingSeconds - second) / TimeConstants.SECONDS_PER_MILLISECOND;\r\n\r\n // JulianDates are noon-based\r\n hour += 12;\r\n if (hour > 23) {\r\n hour -= 24;\r\n }\r\n\r\n //If we were on a leap second, add it back.\r\n if (isLeapSecond) {\r\n second += 1;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new GregorianDate(\r\n year,\r\n month,\r\n day,\r\n hour,\r\n minute,\r\n second,\r\n millisecond,\r\n isLeapSecond\r\n );\r\n }\r\n\r\n result.year = year;\r\n result.month = month;\r\n result.day = day;\r\n result.hour = hour;\r\n result.minute = minute;\r\n result.second = second;\r\n result.millisecond = millisecond;\r\n result.isLeapSecond = isLeapSecond;\r\n return result;\r\n};\r\n\r\n/**\r\n * Creates a JavaScript Date from the provided instance.\r\n * Since JavaScript dates are only accurate to the nearest millisecond and\r\n * cannot represent a leap second, consider using {@link JulianDate.toGregorianDate} instead.\r\n * If the provided JulianDate is during a leap second, the previous second is used.\r\n *\r\n * @param {JulianDate} julianDate The date to be converted.\r\n * @returns {Date} A new instance representing the provided date.\r\n */\r\nJulianDate.toDate = function (julianDate) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(julianDate)) {\r\n throw new DeveloperError(\"julianDate is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const gDate = JulianDate.toGregorianDate(julianDate, gregorianDateScratch);\r\n let second = gDate.second;\r\n if (gDate.isLeapSecond) {\r\n second -= 1;\r\n }\r\n return new Date(\r\n Date.UTC(\r\n gDate.year,\r\n gDate.month - 1,\r\n gDate.day,\r\n gDate.hour,\r\n gDate.minute,\r\n second,\r\n gDate.millisecond\r\n )\r\n );\r\n};\r\n\r\n/**\r\n * Creates an ISO8601 representation of the provided date.\r\n *\r\n * @param {JulianDate} julianDate The date to be converted.\r\n * @param {Number} [precision] The number of fractional digits used to represent the seconds component. By default, the most precise representation is used.\r\n * @returns {String} The ISO8601 representation of the provided date.\r\n */\r\nJulianDate.toIso8601 = function (julianDate, precision) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(julianDate)) {\r\n throw new DeveloperError(\"julianDate is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const gDate = JulianDate.toGregorianDate(julianDate, gregorianDateScratch);\r\n let year = gDate.year;\r\n let month = gDate.month;\r\n let day = gDate.day;\r\n let hour = gDate.hour;\r\n const minute = gDate.minute;\r\n const second = gDate.second;\r\n const millisecond = gDate.millisecond;\r\n\r\n // special case - Iso8601.MAXIMUM_VALUE produces a string which we can't parse unless we adjust.\r\n // 10000-01-01T00:00:00 is the same instant as 9999-12-31T24:00:00\r\n if (\r\n year === 10000 &&\r\n month === 1 &&\r\n day === 1 &&\r\n hour === 0 &&\r\n minute === 0 &&\r\n second === 0 &&\r\n millisecond === 0\r\n ) {\r\n year = 9999;\r\n month = 12;\r\n day = 31;\r\n hour = 24;\r\n }\r\n\r\n let millisecondStr;\r\n\r\n if (!defined(precision) && millisecond !== 0) {\r\n //Forces milliseconds into a number with at least 3 digits to whatever the default toString() precision is.\r\n millisecondStr = (millisecond * 0.01).toString().replace(\".\", \"\");\r\n return `${year.toString().padStart(4, \"0\")}-${month\r\n .toString()\r\n .padStart(2, \"0\")}-${day\r\n .toString()\r\n .padStart(2, \"0\")}T${hour\r\n .toString()\r\n .padStart(2, \"0\")}:${minute\r\n .toString()\r\n .padStart(2, \"0\")}:${second\r\n .toString()\r\n .padStart(2, \"0\")}.${millisecondStr}Z`;\r\n }\r\n\r\n //Precision is either 0 or milliseconds is 0 with undefined precision, in either case, leave off milliseconds entirely\r\n if (!defined(precision) || precision === 0) {\r\n return `${year.toString().padStart(4, \"0\")}-${month\r\n .toString()\r\n .padStart(2, \"0\")}-${day\r\n .toString()\r\n .padStart(2, \"0\")}T${hour\r\n .toString()\r\n .padStart(2, \"0\")}:${minute\r\n .toString()\r\n .padStart(2, \"0\")}:${second.toString().padStart(2, \"0\")}Z`;\r\n }\r\n\r\n //Forces milliseconds into a number with at least 3 digits to whatever the specified precision is.\r\n millisecondStr = (millisecond * 0.01)\r\n .toFixed(precision)\r\n .replace(\".\", \"\")\r\n .slice(0, precision);\r\n return `${year.toString().padStart(4, \"0\")}-${month\r\n .toString()\r\n .padStart(2, \"0\")}-${day\r\n .toString()\r\n .padStart(2, \"0\")}T${hour\r\n .toString()\r\n .padStart(2, \"0\")}:${minute\r\n .toString()\r\n .padStart(2, \"0\")}:${second\r\n .toString()\r\n .padStart(2, \"0\")}.${millisecondStr}Z`;\r\n};\r\n\r\n/**\r\n * Duplicates a JulianDate instance.\r\n *\r\n * @param {JulianDate} julianDate The date to duplicate.\r\n * @param {JulianDate} [result] An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided. Returns undefined if julianDate is undefined.\r\n */\r\nJulianDate.clone = function (julianDate, result) {\r\n if (!defined(julianDate)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new JulianDate(\r\n julianDate.dayNumber,\r\n julianDate.secondsOfDay,\r\n TimeStandard.TAI\r\n );\r\n }\r\n result.dayNumber = julianDate.dayNumber;\r\n result.secondsOfDay = julianDate.secondsOfDay;\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares two instances.\r\n *\r\n * @param {JulianDate} left The first instance.\r\n * @param {JulianDate} right The second instance.\r\n * @returns {Number} A negative value if left is less than right, a positive value if left is greater than right, or zero if left and right are equal.\r\n */\r\nJulianDate.compare = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(left)) {\r\n throw new DeveloperError(\"left is required.\");\r\n }\r\n if (!defined(right)) {\r\n throw new DeveloperError(\"right is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const julianDayNumberDifference = left.dayNumber - right.dayNumber;\r\n if (julianDayNumberDifference !== 0) {\r\n return julianDayNumberDifference;\r\n }\r\n return left.secondsOfDay - right.secondsOfDay;\r\n};\r\n\r\n/**\r\n * Compares two instances and returns true if they are equal, false otherwise.\r\n *\r\n * @param {JulianDate} [left] The first instance.\r\n * @param {JulianDate} [right] The second instance.\r\n * @returns {Boolean} true if the dates are equal; otherwise, false.\r\n */\r\nJulianDate.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.dayNumber === right.dayNumber &&\r\n left.secondsOfDay === right.secondsOfDay)\r\n );\r\n};\r\n\r\n/**\r\n * Compares two instances and returns true if they are within epsilon seconds of\r\n * each other. That is, in order for the dates to be considered equal (and for\r\n * this function to return true), the absolute value of the difference between them, in\r\n * seconds, must be less than epsilon.\r\n *\r\n * @param {JulianDate} [left] The first instance.\r\n * @param {JulianDate} [right] The second instance.\r\n * @param {Number} [epsilon=0] The maximum number of seconds that should separate the two instances.\r\n * @returns {Boolean} true if the two dates are within epsilon seconds of each other; otherwise false.\r\n */\r\nJulianDate.equalsEpsilon = function (left, right, epsilon) {\r\n epsilon = defaultValue(epsilon, 0);\r\n\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n Math.abs(JulianDate.secondsDifference(left, right)) <= epsilon)\r\n );\r\n};\r\n\r\n/**\r\n * Computes the total number of whole and fractional days represented by the provided instance.\r\n *\r\n * @param {JulianDate} julianDate The date.\r\n * @returns {Number} The Julian date as single floating point number.\r\n */\r\nJulianDate.totalDays = function (julianDate) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(julianDate)) {\r\n throw new DeveloperError(\"julianDate is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n return (\r\n julianDate.dayNumber +\r\n julianDate.secondsOfDay / TimeConstants.SECONDS_PER_DAY\r\n );\r\n};\r\n\r\n/**\r\n * Computes the difference in seconds between the provided instance.\r\n *\r\n * @param {JulianDate} left The first instance.\r\n * @param {JulianDate} right The second instance.\r\n * @returns {Number} The difference, in seconds, when subtracting right from left.\r\n */\r\nJulianDate.secondsDifference = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(left)) {\r\n throw new DeveloperError(\"left is required.\");\r\n }\r\n if (!defined(right)) {\r\n throw new DeveloperError(\"right is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const dayDifference =\r\n (left.dayNumber - right.dayNumber) * TimeConstants.SECONDS_PER_DAY;\r\n return dayDifference + (left.secondsOfDay - right.secondsOfDay);\r\n};\r\n\r\n/**\r\n * Computes the difference in days between the provided instance.\r\n *\r\n * @param {JulianDate} left The first instance.\r\n * @param {JulianDate} right The second instance.\r\n * @returns {Number} The difference, in days, when subtracting right from left.\r\n */\r\nJulianDate.daysDifference = function (left, right) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(left)) {\r\n throw new DeveloperError(\"left is required.\");\r\n }\r\n if (!defined(right)) {\r\n throw new DeveloperError(\"right is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const dayDifference = left.dayNumber - right.dayNumber;\r\n const secondDifference =\r\n (left.secondsOfDay - right.secondsOfDay) / TimeConstants.SECONDS_PER_DAY;\r\n return dayDifference + secondDifference;\r\n};\r\n\r\n/**\r\n * Computes the number of seconds the provided instance is ahead of UTC.\r\n *\r\n * @param {JulianDate} julianDate The date.\r\n * @returns {Number} The number of seconds the provided instance is ahead of UTC\r\n */\r\nJulianDate.computeTaiMinusUtc = function (julianDate) {\r\n binarySearchScratchLeapSecond.julianDate = julianDate;\r\n const leapSeconds = JulianDate.leapSeconds;\r\n let index = binarySearch(\r\n leapSeconds,\r\n binarySearchScratchLeapSecond,\r\n compareLeapSecondDates\r\n );\r\n if (index < 0) {\r\n index = ~index;\r\n --index;\r\n if (index < 0) {\r\n index = 0;\r\n }\r\n }\r\n return leapSeconds[index].offset;\r\n};\r\n\r\n/**\r\n * Adds the provided number of seconds to the provided date instance.\r\n *\r\n * @param {JulianDate} julianDate The date.\r\n * @param {Number} seconds The number of seconds to add or subtract.\r\n * @param {JulianDate} result An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter.\r\n */\r\nJulianDate.addSeconds = function (julianDate, seconds, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(julianDate)) {\r\n throw new DeveloperError(\"julianDate is required.\");\r\n }\r\n if (!defined(seconds)) {\r\n throw new DeveloperError(\"seconds is required.\");\r\n }\r\n if (!defined(result)) {\r\n throw new DeveloperError(\"result is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n return setComponents(\r\n julianDate.dayNumber,\r\n julianDate.secondsOfDay + seconds,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Adds the provided number of minutes to the provided date instance.\r\n *\r\n * @param {JulianDate} julianDate The date.\r\n * @param {Number} minutes The number of minutes to add or subtract.\r\n * @param {JulianDate} result An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter.\r\n */\r\nJulianDate.addMinutes = function (julianDate, minutes, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(julianDate)) {\r\n throw new DeveloperError(\"julianDate is required.\");\r\n }\r\n if (!defined(minutes)) {\r\n throw new DeveloperError(\"minutes is required.\");\r\n }\r\n if (!defined(result)) {\r\n throw new DeveloperError(\"result is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const newSecondsOfDay =\r\n julianDate.secondsOfDay + minutes * TimeConstants.SECONDS_PER_MINUTE;\r\n return setComponents(julianDate.dayNumber, newSecondsOfDay, result);\r\n};\r\n\r\n/**\r\n * Adds the provided number of hours to the provided date instance.\r\n *\r\n * @param {JulianDate} julianDate The date.\r\n * @param {Number} hours The number of hours to add or subtract.\r\n * @param {JulianDate} result An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter.\r\n */\r\nJulianDate.addHours = function (julianDate, hours, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(julianDate)) {\r\n throw new DeveloperError(\"julianDate is required.\");\r\n }\r\n if (!defined(hours)) {\r\n throw new DeveloperError(\"hours is required.\");\r\n }\r\n if (!defined(result)) {\r\n throw new DeveloperError(\"result is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const newSecondsOfDay =\r\n julianDate.secondsOfDay + hours * TimeConstants.SECONDS_PER_HOUR;\r\n return setComponents(julianDate.dayNumber, newSecondsOfDay, result);\r\n};\r\n\r\n/**\r\n * Adds the provided number of days to the provided date instance.\r\n *\r\n * @param {JulianDate} julianDate The date.\r\n * @param {Number} days The number of days to add or subtract.\r\n * @param {JulianDate} result An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter.\r\n */\r\nJulianDate.addDays = function (julianDate, days, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(julianDate)) {\r\n throw new DeveloperError(\"julianDate is required.\");\r\n }\r\n if (!defined(days)) {\r\n throw new DeveloperError(\"days is required.\");\r\n }\r\n if (!defined(result)) {\r\n throw new DeveloperError(\"result is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const newJulianDayNumber = julianDate.dayNumber + days;\r\n return setComponents(newJulianDayNumber, julianDate.secondsOfDay, result);\r\n};\r\n\r\n/**\r\n * Compares the provided instances and returns true if left is earlier than right, false otherwise.\r\n *\r\n * @param {JulianDate} left The first instance.\r\n * @param {JulianDate} right The second instance.\r\n * @returns {Boolean} true if left is earlier than right, false otherwise.\r\n */\r\nJulianDate.lessThan = function (left, right) {\r\n return JulianDate.compare(left, right) < 0;\r\n};\r\n\r\n/**\r\n * Compares the provided instances and returns true if left is earlier than or equal to right, false otherwise.\r\n *\r\n * @param {JulianDate} left The first instance.\r\n * @param {JulianDate} right The second instance.\r\n * @returns {Boolean} true if left is earlier than or equal to right, false otherwise.\r\n */\r\nJulianDate.lessThanOrEquals = function (left, right) {\r\n return JulianDate.compare(left, right) <= 0;\r\n};\r\n\r\n/**\r\n * Compares the provided instances and returns true if left is later than right, false otherwise.\r\n *\r\n * @param {JulianDate} left The first instance.\r\n * @param {JulianDate} right The second instance.\r\n * @returns {Boolean} true if left is later than right, false otherwise.\r\n */\r\nJulianDate.greaterThan = function (left, right) {\r\n return JulianDate.compare(left, right) > 0;\r\n};\r\n\r\n/**\r\n * Compares the provided instances and returns true if left is later than or equal to right, false otherwise.\r\n *\r\n * @param {JulianDate} left The first instance.\r\n * @param {JulianDate} right The second instance.\r\n * @returns {Boolean} true if left is later than or equal to right, false otherwise.\r\n */\r\nJulianDate.greaterThanOrEquals = function (left, right) {\r\n return JulianDate.compare(left, right) >= 0;\r\n};\r\n\r\n/**\r\n * Duplicates this instance.\r\n *\r\n * @param {JulianDate} [result] An existing instance to use for the result.\r\n * @returns {JulianDate} The modified result parameter or a new instance if none was provided.\r\n */\r\nJulianDate.prototype.clone = function (result) {\r\n return JulianDate.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this and the provided instance and returns true if they are equal, false otherwise.\r\n *\r\n * @param {JulianDate} [right] The second instance.\r\n * @returns {Boolean} true if the dates are equal; otherwise, false.\r\n */\r\nJulianDate.prototype.equals = function (right) {\r\n return JulianDate.equals(this, right);\r\n};\r\n\r\n/**\r\n * Compares this and the provided instance and returns true if they are within epsilon seconds of\r\n * each other. That is, in order for the dates to be considered equal (and for\r\n * this function to return true), the absolute value of the difference between them, in\r\n * seconds, must be less than epsilon.\r\n *\r\n * @param {JulianDate} [right] The second instance.\r\n * @param {Number} [epsilon=0] The maximum number of seconds that should separate the two instances.\r\n * @returns {Boolean} true if the two dates are within epsilon seconds of each other; otherwise false.\r\n */\r\nJulianDate.prototype.equalsEpsilon = function (right, epsilon) {\r\n return JulianDate.equalsEpsilon(this, right, epsilon);\r\n};\r\n\r\n/**\r\n * Creates a string representing this date in ISO8601 format.\r\n *\r\n * @returns {String} A string representing this date in ISO8601 format.\r\n */\r\nJulianDate.prototype.toString = function () {\r\n return JulianDate.toIso8601(this);\r\n};\r\n\r\n/**\r\n * Gets or sets the list of leap seconds used throughout Cesium.\r\n * @memberof JulianDate\r\n * @type {LeapSecond[]}\r\n */\r\nJulianDate.leapSeconds = [\r\n new LeapSecond(new JulianDate(2441317, 43210.0, TimeStandard.TAI), 10), // January 1, 1972 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2441499, 43211.0, TimeStandard.TAI), 11), // July 1, 1972 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2441683, 43212.0, TimeStandard.TAI), 12), // January 1, 1973 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2442048, 43213.0, TimeStandard.TAI), 13), // January 1, 1974 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2442413, 43214.0, TimeStandard.TAI), 14), // January 1, 1975 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2442778, 43215.0, TimeStandard.TAI), 15), // January 1, 1976 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2443144, 43216.0, TimeStandard.TAI), 16), // January 1, 1977 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2443509, 43217.0, TimeStandard.TAI), 17), // January 1, 1978 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2443874, 43218.0, TimeStandard.TAI), 18), // January 1, 1979 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2444239, 43219.0, TimeStandard.TAI), 19), // January 1, 1980 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2444786, 43220.0, TimeStandard.TAI), 20), // July 1, 1981 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2445151, 43221.0, TimeStandard.TAI), 21), // July 1, 1982 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2445516, 43222.0, TimeStandard.TAI), 22), // July 1, 1983 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2446247, 43223.0, TimeStandard.TAI), 23), // July 1, 1985 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2447161, 43224.0, TimeStandard.TAI), 24), // January 1, 1988 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2447892, 43225.0, TimeStandard.TAI), 25), // January 1, 1990 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2448257, 43226.0, TimeStandard.TAI), 26), // January 1, 1991 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2448804, 43227.0, TimeStandard.TAI), 27), // July 1, 1992 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2449169, 43228.0, TimeStandard.TAI), 28), // July 1, 1993 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2449534, 43229.0, TimeStandard.TAI), 29), // July 1, 1994 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2450083, 43230.0, TimeStandard.TAI), 30), // January 1, 1996 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2450630, 43231.0, TimeStandard.TAI), 31), // July 1, 1997 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2451179, 43232.0, TimeStandard.TAI), 32), // January 1, 1999 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2453736, 43233.0, TimeStandard.TAI), 33), // January 1, 2006 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2454832, 43234.0, TimeStandard.TAI), 34), // January 1, 2009 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2456109, 43235.0, TimeStandard.TAI), 35), // July 1, 2012 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2457204, 43236.0, TimeStandard.TAI), 36), // July 1, 2015 00:00:00 UTC\r\n new LeapSecond(new JulianDate(2457754, 43237.0, TimeStandard.TAI), 37), // January 1, 2017 00:00:00 UTC\r\n];\r\nexport default JulianDate;\r\n","/*! https://mths.be/punycode v1.4.0 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow new RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * https://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) {\n\t\t\t// in Node.js, io.js, or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else {\n\t\t\t// in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else {\n\t\t// in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","/*!\n * URI.js - Mutating URLs\n * IPv6 Support\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n 'use strict';\n // https://github.com/umdjs/umd/blob/master/returnExports.js\n if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory);\n } else {\n // Browser globals (root is window)\n root.IPv6 = factory(root);\n }\n}(this, function (root) {\n 'use strict';\n\n /*\n var _in = \"fe80:0000:0000:0000:0204:61ff:fe9d:f156\";\n var _out = IPv6.best(_in);\n var _expected = \"fe80::204:61ff:fe9d:f156\";\n\n console.log(_in, _out, _expected, _out === _expected);\n */\n\n // save current IPv6 variable, if any\n var _IPv6 = root && root.IPv6;\n\n function bestPresentation(address) {\n // based on:\n // Javascript to test an IPv6 address for proper format, and to\n // present the \"best text representation\" according to IETF Draft RFC at\n // http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04\n // 8 Feb 2010 Rich Brown, Dartware, LLC\n // Please feel free to use this code as long as you provide a link to\n // http://www.intermapper.com\n // http://intermapper.com/support/tools/IPV6-Validator.aspx\n // http://download.dartware.com/thirdparty/ipv6validator.js\n\n var _address = address.toLowerCase();\n var segments = _address.split(':');\n var length = segments.length;\n var total = 8;\n\n // trim colons (:: or ::a:b:c… or …a:b:c::)\n if (segments[0] === '' && segments[1] === '' && segments[2] === '') {\n // must have been ::\n // remove first two items\n segments.shift();\n segments.shift();\n } else if (segments[0] === '' && segments[1] === '') {\n // must have been ::xxxx\n // remove the first item\n segments.shift();\n } else if (segments[length - 1] === '' && segments[length - 2] === '') {\n // must have been xxxx::\n segments.pop();\n }\n\n length = segments.length;\n\n // adjust total segments for IPv4 trailer\n if (segments[length - 1].indexOf('.') !== -1) {\n // found a \".\" which means IPv4\n total = 7;\n }\n\n // fill empty segments them with \"0000\"\n var pos;\n for (pos = 0; pos < length; pos++) {\n if (segments[pos] === '') {\n break;\n }\n }\n\n if (pos < total) {\n segments.splice(pos, 1, '0000');\n while (segments.length < total) {\n segments.splice(pos, 0, '0000');\n }\n }\n\n // strip leading zeros\n var _segments;\n for (var i = 0; i < total; i++) {\n _segments = segments[i].split('');\n for (var j = 0; j < 3 ; j++) {\n if (_segments[0] === '0' && _segments.length > 1) {\n _segments.splice(0,1);\n } else {\n break;\n }\n }\n\n segments[i] = _segments.join('');\n }\n\n // find longest sequence of zeroes and coalesce them into one segment\n var best = -1;\n var _best = 0;\n var _current = 0;\n var current = -1;\n var inzeroes = false;\n // i; already declared\n\n for (i = 0; i < total; i++) {\n if (inzeroes) {\n if (segments[i] === '0') {\n _current += 1;\n } else {\n inzeroes = false;\n if (_current > _best) {\n best = current;\n _best = _current;\n }\n }\n } else {\n if (segments[i] === '0') {\n inzeroes = true;\n current = i;\n _current = 1;\n }\n }\n }\n\n if (_current > _best) {\n best = current;\n _best = _current;\n }\n\n if (_best > 1) {\n segments.splice(best, _best, '');\n }\n\n length = segments.length;\n\n // assemble remaining segments\n var result = '';\n if (segments[0] === '') {\n result = ':';\n }\n\n for (i = 0; i < length; i++) {\n result += segments[i];\n if (i === length - 1) {\n break;\n }\n\n result += ':';\n }\n\n if (segments[length - 1] === '') {\n result += ':';\n }\n\n return result;\n }\n\n function noConflict() {\n /*jshint validthis: true */\n if (root.IPv6 === this) {\n root.IPv6 = _IPv6;\n }\n\n return this;\n }\n\n return {\n best: bestPresentation,\n noConflict: noConflict\n };\n}));\n","/*!\n * URI.js - Mutating URLs\n * Second Level Domain (SLD) Support\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n\n(function (root, factory) {\n 'use strict';\n // https://github.com/umdjs/umd/blob/master/returnExports.js\n if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = factory();\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory);\n } else {\n // Browser globals (root is window)\n root.SecondLevelDomains = factory(root);\n }\n}(this, function (root) {\n 'use strict';\n\n // save current SecondLevelDomains variable, if any\n var _SecondLevelDomains = root && root.SecondLevelDomains;\n\n var SLD = {\n // list of known Second Level Domains\n // converted list of SLDs from https://github.com/gavingmiller/second-level-domains\n // ----\n // publicsuffix.org is more current and actually used by a couple of browsers internally.\n // downside is it also contains domains like \"dyndns.org\" - which is fine for the security\n // issues browser have to deal with (SOP for cookies, etc) - but is way overboard for URI.js\n // ----\n list: {\n 'ac':' com gov mil net org ',\n 'ae':' ac co gov mil name net org pro sch ',\n 'af':' com edu gov net org ',\n 'al':' com edu gov mil net org ',\n 'ao':' co ed gv it og pb ',\n 'ar':' com edu gob gov int mil net org tur ',\n 'at':' ac co gv or ',\n 'au':' asn com csiro edu gov id net org ',\n 'ba':' co com edu gov mil net org rs unbi unmo unsa untz unze ',\n 'bb':' biz co com edu gov info net org store tv ',\n 'bh':' biz cc com edu gov info net org ',\n 'bn':' com edu gov net org ',\n 'bo':' com edu gob gov int mil net org tv ',\n 'br':' adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ',\n 'bs':' com edu gov net org ',\n 'bz':' du et om ov rg ',\n 'ca':' ab bc mb nb nf nl ns nt nu on pe qc sk yk ',\n 'ck':' biz co edu gen gov info net org ',\n 'cn':' ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ',\n 'co':' com edu gov mil net nom org ',\n 'cr':' ac c co ed fi go or sa ',\n 'cy':' ac biz com ekloges gov ltd name net org parliament press pro tm ',\n 'do':' art com edu gob gov mil net org sld web ',\n 'dz':' art asso com edu gov net org pol ',\n 'ec':' com edu fin gov info med mil net org pro ',\n 'eg':' com edu eun gov mil name net org sci ',\n 'er':' com edu gov ind mil net org rochest w ',\n 'es':' com edu gob nom org ',\n 'et':' biz com edu gov info name net org ',\n 'fj':' ac biz com info mil name net org pro ',\n 'fk':' ac co gov net nom org ',\n 'fr':' asso com f gouv nom prd presse tm ',\n 'gg':' co net org ',\n 'gh':' com edu gov mil org ',\n 'gn':' ac com gov net org ',\n 'gr':' com edu gov mil net org ',\n 'gt':' com edu gob ind mil net org ',\n 'gu':' com edu gov net org ',\n 'hk':' com edu gov idv net org ',\n 'hu':' 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ',\n 'id':' ac co go mil net or sch web ',\n 'il':' ac co gov idf k12 muni net org ',\n 'in':' ac co edu ernet firm gen gov i ind mil net nic org res ',\n 'iq':' com edu gov i mil net org ',\n 'ir':' ac co dnssec gov i id net org sch ',\n 'it':' edu gov ',\n 'je':' co net org ',\n 'jo':' com edu gov mil name net org sch ',\n 'jp':' ac ad co ed go gr lg ne or ',\n 'ke':' ac co go info me mobi ne or sc ',\n 'kh':' com edu gov mil net org per ',\n 'ki':' biz com de edu gov info mob net org tel ',\n 'km':' asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ',\n 'kn':' edu gov net org ',\n 'kr':' ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ',\n 'kw':' com edu gov net org ',\n 'ky':' com edu gov net org ',\n 'kz':' com edu gov mil net org ',\n 'lb':' com edu gov net org ',\n 'lk':' assn com edu gov grp hotel int ltd net ngo org sch soc web ',\n 'lr':' com edu gov net org ',\n 'lv':' asn com conf edu gov id mil net org ',\n 'ly':' com edu gov id med net org plc sch ',\n 'ma':' ac co gov m net org press ',\n 'mc':' asso tm ',\n 'me':' ac co edu gov its net org priv ',\n 'mg':' com edu gov mil nom org prd tm ',\n 'mk':' com edu gov inf name net org pro ',\n 'ml':' com edu gov net org presse ',\n 'mn':' edu gov org ',\n 'mo':' com edu gov net org ',\n 'mt':' com edu gov net org ',\n 'mv':' aero biz com coop edu gov info int mil museum name net org pro ',\n 'mw':' ac co com coop edu gov int museum net org ',\n 'mx':' com edu gob net org ',\n 'my':' com edu gov mil name net org sch ',\n 'nf':' arts com firm info net other per rec store web ',\n 'ng':' biz com edu gov mil mobi name net org sch ',\n 'ni':' ac co com edu gob mil net nom org ',\n 'np':' com edu gov mil net org ',\n 'nr':' biz com edu gov info net org ',\n 'om':' ac biz co com edu gov med mil museum net org pro sch ',\n 'pe':' com edu gob mil net nom org sld ',\n 'ph':' com edu gov i mil net ngo org ',\n 'pk':' biz com edu fam gob gok gon gop gos gov net org web ',\n 'pl':' art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ',\n 'pr':' ac biz com edu est gov info isla name net org pro prof ',\n 'ps':' com edu gov net org plo sec ',\n 'pw':' belau co ed go ne or ',\n 'ro':' arts com firm info nom nt org rec store tm www ',\n 'rs':' ac co edu gov in org ',\n 'sb':' com edu gov net org ',\n 'sc':' com edu gov net org ',\n 'sh':' co com edu gov net nom org ',\n 'sl':' com edu gov net org ',\n 'st':' co com consulado edu embaixada gov mil net org principe saotome store ',\n 'sv':' com edu gob org red ',\n 'sz':' ac co org ',\n 'tr':' av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ',\n 'tt':' aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ',\n 'tw':' club com ebiz edu game gov idv mil net org ',\n 'mu':' ac co com gov net or org ',\n 'mz':' ac co edu gov org ',\n 'na':' co com ',\n 'nz':' ac co cri geek gen govt health iwi maori mil net org parliament school ',\n 'pa':' abo ac com edu gob ing med net nom org sld ',\n 'pt':' com edu gov int net nome org publ ',\n 'py':' com edu gov mil net org ',\n 'qa':' com edu gov mil net org ',\n 're':' asso com nom ',\n 'ru':' ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ',\n 'rw':' ac co com edu gouv gov int mil net ',\n 'sa':' com edu gov med net org pub sch ',\n 'sd':' com edu gov info med net org tv ',\n 'se':' a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ',\n 'sg':' com edu gov idn net org per ',\n 'sn':' art com edu gouv org perso univ ',\n 'sy':' com edu gov mil net news org ',\n 'th':' ac co go in mi net or ',\n 'tj':' ac biz co com edu go gov info int mil name net nic org test web ',\n 'tn':' agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ',\n 'tz':' ac co go ne or ',\n 'ua':' biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ',\n 'ug':' ac co go ne or org sc ',\n 'uk':' ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ',\n 'us':' dni fed isa kids nsn ',\n 'uy':' com edu gub mil net org ',\n 've':' co com edu gob info mil net org web ',\n 'vi':' co com k12 net org ',\n 'vn':' ac biz com edu gov health info int name net org pro ',\n 'ye':' co com gov ltd me net org plc ',\n 'yu':' ac co edu gov org ',\n 'za':' ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ',\n 'zm':' ac co com edu gov net org sch ',\n // https://en.wikipedia.org/wiki/CentralNic#Second-level_domains\n 'com': 'ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ',\n 'net': 'gb jp se uk ',\n 'org': 'ae',\n 'de': 'com '\n },\n // gorhill 2013-10-25: Using indexOf() instead Regexp(). Significant boost\n // in both performance and memory footprint. No initialization required.\n // http://jsperf.com/uri-js-sld-regex-vs-binary-search/4\n // Following methods use lastIndexOf() rather than array.split() in order\n // to avoid any memory allocations.\n has: function(domain) {\n var tldOffset = domain.lastIndexOf('.');\n if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n return false;\n }\n var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n return false;\n }\n var sldList = SLD.list[domain.slice(tldOffset+1)];\n if (!sldList) {\n return false;\n }\n return sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') >= 0;\n },\n is: function(domain) {\n var tldOffset = domain.lastIndexOf('.');\n if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n return false;\n }\n var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n if (sldOffset >= 0) {\n return false;\n }\n var sldList = SLD.list[domain.slice(tldOffset+1)];\n if (!sldList) {\n return false;\n }\n return sldList.indexOf(' ' + domain.slice(0, tldOffset) + ' ') >= 0;\n },\n get: function(domain) {\n var tldOffset = domain.lastIndexOf('.');\n if (tldOffset <= 0 || tldOffset >= (domain.length-1)) {\n return null;\n }\n var sldOffset = domain.lastIndexOf('.', tldOffset-1);\n if (sldOffset <= 0 || sldOffset >= (tldOffset-1)) {\n return null;\n }\n var sldList = SLD.list[domain.slice(tldOffset+1)];\n if (!sldList) {\n return null;\n }\n if (sldList.indexOf(' ' + domain.slice(sldOffset+1, tldOffset) + ' ') < 0) {\n return null;\n }\n return domain.slice(sldOffset+1);\n },\n noConflict: function(){\n if (root.SecondLevelDomains === this) {\n root.SecondLevelDomains = _SecondLevelDomains;\n }\n return this;\n }\n };\n\n return SLD;\n}));\n","/*!\n * URI.js - Mutating URLs\n *\n * Version: 1.19.11\n *\n * Author: Rodney Rehm\n * Web: http://medialize.github.io/URI.js/\n *\n * Licensed under\n * MIT License http://www.opensource.org/licenses/mit-license\n *\n */\n(function (root, factory) {\n 'use strict';\n // https://github.com/umdjs/umd/blob/master/returnExports.js\n if (typeof module === 'object' && module.exports) {\n // Node\n module.exports = factory(require('./punycode'), require('./IPv6'), require('./SecondLevelDomains'));\n } else if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['./punycode', './IPv6', './SecondLevelDomains'], factory);\n } else {\n // Browser globals (root is window)\n root.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root);\n }\n}(this, function (punycode, IPv6, SLD, root) {\n 'use strict';\n /*global location, escape, unescape */\n // FIXME: v2.0.0 renamce non-camelCase properties to uppercase\n /*jshint camelcase: false */\n\n // save current URI variable, if any\n var _URI = root && root.URI;\n\n function URI(url, base) {\n var _urlSupplied = arguments.length >= 1;\n var _baseSupplied = arguments.length >= 2;\n\n // Allow instantiation without the 'new' keyword\n if (!(this instanceof URI)) {\n if (_urlSupplied) {\n if (_baseSupplied) {\n return new URI(url, base);\n }\n\n return new URI(url);\n }\n\n return new URI();\n }\n\n if (url === undefined) {\n if (_urlSupplied) {\n throw new TypeError('undefined is not a valid argument for URI');\n }\n\n if (typeof location !== 'undefined') {\n url = location.href + '';\n } else {\n url = '';\n }\n }\n\n if (url === null) {\n if (_urlSupplied) {\n throw new TypeError('null is not a valid argument for URI');\n }\n }\n\n this.href(url);\n\n // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor\n if (base !== undefined) {\n return this.absoluteTo(base);\n }\n\n return this;\n }\n\n function isInteger(value) {\n return /^[0-9]+$/.test(value);\n }\n\n URI.version = '1.19.11';\n\n var p = URI.prototype;\n var hasOwn = Object.prototype.hasOwnProperty;\n\n function escapeRegEx(string) {\n // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963\n return string.replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n }\n\n function getType(value) {\n // IE8 doesn't return [Object Undefined] but [Object Object] for undefined value\n if (value === undefined) {\n return 'Undefined';\n }\n\n return String(Object.prototype.toString.call(value)).slice(8, -1);\n }\n\n function isArray(obj) {\n return getType(obj) === 'Array';\n }\n\n function filterArrayValues(data, value) {\n var lookup = {};\n var i, length;\n\n if (getType(value) === 'RegExp') {\n lookup = null;\n } else if (isArray(value)) {\n for (i = 0, length = value.length; i < length; i++) {\n lookup[value[i]] = true;\n }\n } else {\n lookup[value] = true;\n }\n\n for (i = 0, length = data.length; i < length; i++) {\n /*jshint laxbreak: true */\n var _match = lookup && lookup[data[i]] !== undefined\n || !lookup && value.test(data[i]);\n /*jshint laxbreak: false */\n if (_match) {\n data.splice(i, 1);\n length--;\n i--;\n }\n }\n\n return data;\n }\n\n function arrayContains(list, value) {\n var i, length;\n\n // value may be string, number, array, regexp\n if (isArray(value)) {\n // Note: this can be optimized to O(n) (instead of current O(m * n))\n for (i = 0, length = value.length; i < length; i++) {\n if (!arrayContains(list, value[i])) {\n return false;\n }\n }\n\n return true;\n }\n\n var _type = getType(value);\n for (i = 0, length = list.length; i < length; i++) {\n if (_type === 'RegExp') {\n if (typeof list[i] === 'string' && list[i].match(value)) {\n return true;\n }\n } else if (list[i] === value) {\n return true;\n }\n }\n\n return false;\n }\n\n function arraysEqual(one, two) {\n if (!isArray(one) || !isArray(two)) {\n return false;\n }\n\n // arrays can't be equal if they have different amount of content\n if (one.length !== two.length) {\n return false;\n }\n\n one.sort();\n two.sort();\n\n for (var i = 0, l = one.length; i < l; i++) {\n if (one[i] !== two[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n function trimSlashes(text) {\n var trim_expression = /^\\/+|\\/+$/g;\n return text.replace(trim_expression, '');\n }\n\n URI._parts = function() {\n return {\n protocol: null,\n username: null,\n password: null,\n hostname: null,\n urn: null,\n port: null,\n path: null,\n query: null,\n fragment: null,\n // state\n preventInvalidHostname: URI.preventInvalidHostname,\n duplicateQueryParameters: URI.duplicateQueryParameters,\n escapeQuerySpace: URI.escapeQuerySpace\n };\n };\n // state: throw on invalid hostname\n // see https://github.com/medialize/URI.js/pull/345\n // and https://github.com/medialize/URI.js/issues/354\n URI.preventInvalidHostname = false;\n // state: allow duplicate query parameters (a=1&a=1)\n URI.duplicateQueryParameters = false;\n // state: replaces + with %20 (space in query strings)\n URI.escapeQuerySpace = true;\n // static properties\n URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i;\n URI.idn_expression = /[^a-z0-9\\._-]/i;\n URI.punycode_expression = /(xn--)/i;\n // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care?\n URI.ip4_expression = /^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;\n // credits to Rich Brown\n // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096\n // specification: http://www.ietf.org/rfc/rfc4291.txt\n URI.ip6_expression = /^\\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(%.+)?\\s*$/;\n // expression used is \"gruber revised\" (@gruber v2) determined to be the\n // best solution in a regex-golf we did a couple of ages ago at\n // * http://mathiasbynens.be/demo/url-regex\n // * http://rodneyrehm.de/t/url-regex.html\n URI.find_uri_expression = /\\b((?:[a-z][\\w-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))/ig;\n URI.findUri = {\n // valid \"scheme://\" or \"www.\"\n start: /\\b(?:([a-z][a-z0-9.+-]*:\\/\\/)|www\\.)/gi,\n // everything up to the next whitespace\n end: /[\\s\\r\\n]|$/,\n // trim trailing punctuation captured by end RegExp\n trim: /[`!()\\[\\]{};:'\".,<>?«»“”„‘’]+$/,\n // balanced parens inclusion (), [], {}, <>\n parens: /(\\([^\\)]*\\)|\\[[^\\]]*\\]|\\{[^}]*\\}|<[^>]*>)/g,\n };\n URI.leading_whitespace_expression = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n // https://infra.spec.whatwg.org/#ascii-tab-or-newline\n URI.ascii_tab_whitespace = /[\\u0009\\u000A\\u000D]+/g\n // http://www.iana.org/assignments/uri-schemes.html\n // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports\n URI.defaultPorts = {\n http: '80',\n https: '443',\n ftp: '21',\n gopher: '70',\n ws: '80',\n wss: '443'\n };\n // list of protocols which always require a hostname\n URI.hostProtocols = [\n 'http',\n 'https'\n ];\n\n // allowed hostname characters according to RFC 3986\n // ALPHA DIGIT \"-\" \".\" \"_\" \"~\" \"!\" \"$\" \"&\" \"'\" \"(\" \")\" \"*\" \"+\" \",\" \";\" \"=\" %encoded\n // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . - _\n URI.invalid_hostname_characters = /[^a-zA-Z0-9\\.\\-:_]/;\n // map DOM Elements to their URI attribute\n URI.domAttributes = {\n 'a': 'href',\n 'blockquote': 'cite',\n 'link': 'href',\n 'base': 'href',\n 'script': 'src',\n 'form': 'action',\n 'img': 'src',\n 'area': 'href',\n 'iframe': 'src',\n 'embed': 'src',\n 'source': 'src',\n 'track': 'src',\n 'input': 'src', // but only if type=\"image\"\n 'audio': 'src',\n 'video': 'src'\n };\n URI.getDomAttribute = function(node) {\n if (!node || !node.nodeName) {\n return undefined;\n }\n\n var nodeName = node.nodeName.toLowerCase();\n // should only expose src for type=\"image\"\n if (nodeName === 'input' && node.type !== 'image') {\n return undefined;\n }\n\n return URI.domAttributes[nodeName];\n };\n\n function escapeForDumbFirefox36(value) {\n // https://github.com/medialize/URI.js/issues/91\n return escape(value);\n }\n\n // encoding / decoding according to RFC3986\n function strictEncodeURIComponent(string) {\n // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent\n return encodeURIComponent(string)\n .replace(/[!'()*]/g, escapeForDumbFirefox36)\n .replace(/\\*/g, '%2A');\n }\n URI.encode = strictEncodeURIComponent;\n URI.decode = decodeURIComponent;\n URI.iso8859 = function() {\n URI.encode = escape;\n URI.decode = unescape;\n };\n URI.unicode = function() {\n URI.encode = strictEncodeURIComponent;\n URI.decode = decodeURIComponent;\n };\n URI.characters = {\n pathname: {\n encode: {\n // RFC3986 2.1: For consistency, URI producers and normalizers should\n // use uppercase hexadecimal digits for all percent-encodings.\n expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig,\n map: {\n // -._~!'()*\n '%24': '$',\n '%26': '&',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '=',\n '%3A': ':',\n '%40': '@'\n }\n },\n decode: {\n expression: /[\\/\\?#]/g,\n map: {\n '/': '%2F',\n '?': '%3F',\n '#': '%23'\n }\n }\n },\n reserved: {\n encode: {\n // RFC3986 2.1: For consistency, URI producers and normalizers should\n // use uppercase hexadecimal digits for all percent-encodings.\n expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig,\n map: {\n // gen-delims\n '%3A': ':',\n '%2F': '/',\n '%3F': '?',\n '%23': '#',\n '%5B': '[',\n '%5D': ']',\n '%40': '@',\n // sub-delims\n '%21': '!',\n '%24': '$',\n '%26': '&',\n '%27': '\\'',\n '%28': '(',\n '%29': ')',\n '%2A': '*',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '='\n }\n }\n },\n urnpath: {\n // The characters under `encode` are the characters called out by RFC 2141 as being acceptable\n // for usage in a URN. RFC2141 also calls out \"-\", \".\", and \"_\" as acceptable characters, but\n // these aren't encoded by encodeURIComponent, so we don't have to call them out here. Also\n // note that the colon character is not featured in the encoding map; this is because URI.js\n // gives the colons in URNs semantic meaning as the delimiters of path segements, and so it\n // should not appear unencoded in a segment itself.\n // See also the note above about RFC3986 and capitalalized hex digits.\n encode: {\n expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig,\n map: {\n '%21': '!',\n '%24': '$',\n '%27': '\\'',\n '%28': '(',\n '%29': ')',\n '%2A': '*',\n '%2B': '+',\n '%2C': ',',\n '%3B': ';',\n '%3D': '=',\n '%40': '@'\n }\n },\n // These characters are the characters called out by RFC2141 as \"reserved\" characters that\n // should never appear in a URN, plus the colon character (see note above).\n decode: {\n expression: /[\\/\\?#:]/g,\n map: {\n '/': '%2F',\n '?': '%3F',\n '#': '%23',\n ':': '%3A'\n }\n }\n }\n };\n URI.encodeQuery = function(string, escapeQuerySpace) {\n var escaped = URI.encode(string + '');\n if (escapeQuerySpace === undefined) {\n escapeQuerySpace = URI.escapeQuerySpace;\n }\n\n return escapeQuerySpace ? escaped.replace(/%20/g, '+') : escaped;\n };\n URI.decodeQuery = function(string, escapeQuerySpace) {\n string += '';\n if (escapeQuerySpace === undefined) {\n escapeQuerySpace = URI.escapeQuerySpace;\n }\n\n try {\n return URI.decode(escapeQuerySpace ? string.replace(/\\+/g, '%20') : string);\n } catch(e) {\n // we're not going to mess with weird encodings,\n // give up and return the undecoded original string\n // see https://github.com/medialize/URI.js/issues/87\n // see https://github.com/medialize/URI.js/issues/92\n return string;\n }\n };\n // generate encode/decode path functions\n var _parts = {'encode':'encode', 'decode':'decode'};\n var _part;\n var generateAccessor = function(_group, _part) {\n return function(string) {\n try {\n return URI[_part](string + '').replace(URI.characters[_group][_part].expression, function(c) {\n return URI.characters[_group][_part].map[c];\n });\n } catch (e) {\n // we're not going to mess with weird encodings,\n // give up and return the undecoded original string\n // see https://github.com/medialize/URI.js/issues/87\n // see https://github.com/medialize/URI.js/issues/92\n return string;\n }\n };\n };\n\n for (_part in _parts) {\n URI[_part + 'PathSegment'] = generateAccessor('pathname', _parts[_part]);\n URI[_part + 'UrnPathSegment'] = generateAccessor('urnpath', _parts[_part]);\n }\n\n var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) {\n return function(string) {\n // Why pass in names of functions, rather than the function objects themselves? The\n // definitions of some functions (but in particular, URI.decode) will occasionally change due\n // to URI.js having ISO8859 and Unicode modes. Passing in the name and getting it will ensure\n // that the functions we use here are \"fresh\".\n var actualCodingFunc;\n if (!_innerCodingFuncName) {\n actualCodingFunc = URI[_codingFuncName];\n } else {\n actualCodingFunc = function(string) {\n return URI[_codingFuncName](URI[_innerCodingFuncName](string));\n };\n }\n\n var segments = (string + '').split(_sep);\n\n for (var i = 0, length = segments.length; i < length; i++) {\n segments[i] = actualCodingFunc(segments[i]);\n }\n\n return segments.join(_sep);\n };\n };\n\n // This takes place outside the above loop because we don't want, e.g., encodeUrnPath functions.\n URI.decodePath = generateSegmentedPathFunction('/', 'decodePathSegment');\n URI.decodeUrnPath = generateSegmentedPathFunction(':', 'decodeUrnPathSegment');\n URI.recodePath = generateSegmentedPathFunction('/', 'encodePathSegment', 'decode');\n URI.recodeUrnPath = generateSegmentedPathFunction(':', 'encodeUrnPathSegment', 'decode');\n\n URI.encodeReserved = generateAccessor('reserved', 'encode');\n\n URI.parse = function(string, parts) {\n var pos;\n if (!parts) {\n parts = {\n preventInvalidHostname: URI.preventInvalidHostname\n };\n }\n\n string = string.replace(URI.leading_whitespace_expression, '')\n // https://infra.spec.whatwg.org/#ascii-tab-or-newline\n string = string.replace(URI.ascii_tab_whitespace, '')\n\n // [protocol\"://\"[username[\":\"password]\"@\"]hostname[\":\"port]\"/\"?][path][\"?\"querystring][\"#\"fragment]\n\n // extract fragment\n pos = string.indexOf('#');\n if (pos > -1) {\n // escaping?\n parts.fragment = string.substring(pos + 1) || null;\n string = string.substring(0, pos);\n }\n\n // extract query\n pos = string.indexOf('?');\n if (pos > -1) {\n // escaping?\n parts.query = string.substring(pos + 1) || null;\n string = string.substring(0, pos);\n }\n\n // slashes and backslashes have lost all meaning for the web protocols (https, http, wss, ws)\n string = string.replace(/^(https?|ftp|wss?)?:+[/\\\\]*/i, '$1://');\n // slashes and backslashes have lost all meaning for scheme relative URLs\n string = string.replace(/^[/\\\\]{2,}/i, '//');\n\n // extract protocol\n if (string.substring(0, 2) === '//') {\n // relative-scheme\n parts.protocol = null;\n string = string.substring(2);\n // extract \"user:pass@host:port\"\n string = URI.parseAuthority(string, parts);\n } else {\n pos = string.indexOf(':');\n if (pos > -1) {\n parts.protocol = string.substring(0, pos) || null;\n if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) {\n // : may be within the path\n parts.protocol = undefined;\n } else if (string.substring(pos + 1, pos + 3).replace(/\\\\/g, '/') === '//') {\n string = string.substring(pos + 3);\n\n // extract \"user:pass@host:port\"\n string = URI.parseAuthority(string, parts);\n } else {\n string = string.substring(pos + 1);\n parts.urn = true;\n }\n }\n }\n\n // what's left must be the path\n parts.path = string;\n\n // and we're done\n return parts;\n };\n URI.parseHost = function(string, parts) {\n if (!string) {\n string = '';\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://github.com/joyent/node/blob/386fd24f49b0e9d1a8a076592a404168faeecc34/lib/url.js#L115-L124\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n // https://github.com/medialize/URI.js/pull/233\n string = string.replace(/\\\\/g, '/');\n\n // extract host:port\n var pos = string.indexOf('/');\n var bracketPos;\n var t;\n\n if (pos === -1) {\n pos = string.length;\n }\n\n if (string.charAt(0) === '[') {\n // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6\n // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts\n // IPv6+port in the format [2001:db8::1]:80 (for the time being)\n bracketPos = string.indexOf(']');\n parts.hostname = string.substring(1, bracketPos) || null;\n parts.port = string.substring(bracketPos + 2, pos) || null;\n if (parts.port === '/') {\n parts.port = null;\n }\n } else {\n var firstColon = string.indexOf(':');\n var firstSlash = string.indexOf('/');\n var nextColon = string.indexOf(':', firstColon + 1);\n if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) {\n // IPv6 host contains multiple colons - but no port\n // this notation is actually not allowed by RFC 3986, but we're a liberal parser\n parts.hostname = string.substring(0, pos) || null;\n parts.port = null;\n } else {\n t = string.substring(0, pos).split(':');\n parts.hostname = t[0] || null;\n parts.port = t[1] || null;\n }\n }\n\n if (parts.hostname && string.substring(pos).charAt(0) !== '/') {\n pos++;\n string = '/' + string;\n }\n\n if (parts.preventInvalidHostname) {\n URI.ensureValidHostname(parts.hostname, parts.protocol);\n }\n\n if (parts.port) {\n URI.ensureValidPort(parts.port);\n }\n\n return string.substring(pos) || '/';\n };\n URI.parseAuthority = function(string, parts) {\n string = URI.parseUserinfo(string, parts);\n return URI.parseHost(string, parts);\n };\n URI.parseUserinfo = function(string, parts) {\n // extract username:password\n var _string = string\n var firstBackSlash = string.indexOf('\\\\');\n if (firstBackSlash !== -1) {\n string = string.replace(/\\\\/g, '/')\n }\n var firstSlash = string.indexOf('/');\n var pos = string.lastIndexOf('@', firstSlash > -1 ? firstSlash : string.length - 1);\n var t;\n\n // authority@ must come before /path or \\path\n if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) {\n t = string.substring(0, pos).split(':');\n parts.username = t[0] ? URI.decode(t[0]) : null;\n t.shift();\n parts.password = t[0] ? URI.decode(t.join(':')) : null;\n string = _string.substring(pos + 1);\n } else {\n parts.username = null;\n parts.password = null;\n }\n\n return string;\n };\n URI.parseQuery = function(string, escapeQuerySpace) {\n if (!string) {\n return {};\n }\n\n // throw out the funky business - \"?\"[name\"=\"value\"&\"]+\n string = string.replace(/&+/g, '&').replace(/^\\?*&*|&+$/g, '');\n\n if (!string) {\n return {};\n }\n\n var items = {};\n var splits = string.split('&');\n var length = splits.length;\n var v, name, value;\n\n for (var i = 0; i < length; i++) {\n v = splits[i].split('=');\n name = URI.decodeQuery(v.shift(), escapeQuerySpace);\n // no \"=\" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters\n value = v.length ? URI.decodeQuery(v.join('='), escapeQuerySpace) : null;\n\n if (name === '__proto__') {\n // ignore attempt at exploiting JavaScript internals\n continue;\n } else if (hasOwn.call(items, name)) {\n if (typeof items[name] === 'string' || items[name] === null) {\n items[name] = [items[name]];\n }\n\n items[name].push(value);\n } else {\n items[name] = value;\n }\n }\n\n return items;\n };\n\n URI.build = function(parts) {\n var t = '';\n var requireAbsolutePath = false\n\n if (parts.protocol) {\n t += parts.protocol + ':';\n }\n\n if (!parts.urn && (t || parts.hostname)) {\n t += '//';\n requireAbsolutePath = true\n }\n\n t += (URI.buildAuthority(parts) || '');\n\n if (typeof parts.path === 'string') {\n if (parts.path.charAt(0) !== '/' && requireAbsolutePath) {\n t += '/';\n }\n\n t += parts.path;\n }\n\n if (typeof parts.query === 'string' && parts.query) {\n t += '?' + parts.query;\n }\n\n if (typeof parts.fragment === 'string' && parts.fragment) {\n t += '#' + parts.fragment;\n }\n return t;\n };\n URI.buildHost = function(parts) {\n var t = '';\n\n if (!parts.hostname) {\n return '';\n } else if (URI.ip6_expression.test(parts.hostname)) {\n t += '[' + parts.hostname + ']';\n } else {\n t += parts.hostname;\n }\n\n if (parts.port) {\n t += ':' + parts.port;\n }\n\n return t;\n };\n URI.buildAuthority = function(parts) {\n return URI.buildUserinfo(parts) + URI.buildHost(parts);\n };\n URI.buildUserinfo = function(parts) {\n var t = '';\n\n if (parts.username) {\n t += URI.encode(parts.username);\n }\n\n if (parts.password) {\n t += ':' + URI.encode(parts.password);\n }\n\n if (t) {\n t += '@';\n }\n\n return t;\n };\n URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) {\n // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html\n // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed\n // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax!\n // URI.js treats the query string as being application/x-www-form-urlencoded\n // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type\n\n var t = '';\n var unique, key, i, length;\n for (key in data) {\n if (key === '__proto__') {\n // ignore attempt at exploiting JavaScript internals\n continue;\n } else if (hasOwn.call(data, key)) {\n if (isArray(data[key])) {\n unique = {};\n for (i = 0, length = data[key].length; i < length; i++) {\n if (data[key][i] !== undefined && unique[data[key][i] + ''] === undefined) {\n t += '&' + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace);\n if (duplicateQueryParameters !== true) {\n unique[data[key][i] + ''] = true;\n }\n }\n }\n } else if (data[key] !== undefined) {\n t += '&' + URI.buildQueryParameter(key, data[key], escapeQuerySpace);\n }\n }\n }\n\n return t.substring(1);\n };\n URI.buildQueryParameter = function(name, value, escapeQuerySpace) {\n // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded\n // don't append \"=\" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization\n return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? '=' + URI.encodeQuery(value, escapeQuerySpace) : '');\n };\n\n URI.addQuery = function(data, name, value) {\n if (typeof name === 'object') {\n for (var key in name) {\n if (hasOwn.call(name, key)) {\n URI.addQuery(data, key, name[key]);\n }\n }\n } else if (typeof name === 'string') {\n if (data[name] === undefined) {\n data[name] = value;\n return;\n } else if (typeof data[name] === 'string') {\n data[name] = [data[name]];\n }\n\n if (!isArray(value)) {\n value = [value];\n }\n\n data[name] = (data[name] || []).concat(value);\n } else {\n throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n }\n };\n\n URI.setQuery = function(data, name, value) {\n if (typeof name === 'object') {\n for (var key in name) {\n if (hasOwn.call(name, key)) {\n URI.setQuery(data, key, name[key]);\n }\n }\n } else if (typeof name === 'string') {\n data[name] = value === undefined ? null : value;\n } else {\n throw new TypeError('URI.setQuery() accepts an object, string as the name parameter');\n }\n };\n\n URI.removeQuery = function(data, name, value) {\n var i, length, key;\n\n if (isArray(name)) {\n for (i = 0, length = name.length; i < length; i++) {\n data[name[i]] = undefined;\n }\n } else if (getType(name) === 'RegExp') {\n for (key in data) {\n if (name.test(key)) {\n data[key] = undefined;\n }\n }\n } else if (typeof name === 'object') {\n for (key in name) {\n if (hasOwn.call(name, key)) {\n URI.removeQuery(data, key, name[key]);\n }\n }\n } else if (typeof name === 'string') {\n if (value !== undefined) {\n if (getType(value) === 'RegExp') {\n if (!isArray(data[name]) && value.test(data[name])) {\n data[name] = undefined;\n } else {\n data[name] = filterArrayValues(data[name], value);\n }\n } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) {\n data[name] = undefined;\n } else if (isArray(data[name])) {\n data[name] = filterArrayValues(data[name], value);\n }\n } else {\n data[name] = undefined;\n }\n } else {\n throw new TypeError('URI.removeQuery() accepts an object, string, RegExp as the first parameter');\n }\n };\n URI.hasQuery = function(data, name, value, withinArray) {\n switch (getType(name)) {\n case 'String':\n // Nothing to do here\n break;\n\n case 'RegExp':\n for (var key in data) {\n if (hasOwn.call(data, key)) {\n if (name.test(key) && (value === undefined || URI.hasQuery(data, key, value))) {\n return true;\n }\n }\n }\n\n return false;\n\n case 'Object':\n for (var _key in name) {\n if (hasOwn.call(name, _key)) {\n if (!URI.hasQuery(data, _key, name[_key])) {\n return false;\n }\n }\n }\n\n return true;\n\n default:\n throw new TypeError('URI.hasQuery() accepts a string, regular expression or object as the name parameter');\n }\n\n switch (getType(value)) {\n case 'Undefined':\n // true if exists (but may be empty)\n return name in data; // data[name] !== undefined;\n\n case 'Boolean':\n // true if exists and non-empty\n var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]);\n return value === _booly;\n\n case 'Function':\n // allow complex comparison\n return !!value(data[name], name, data);\n\n case 'Array':\n if (!isArray(data[name])) {\n return false;\n }\n\n var op = withinArray ? arrayContains : arraysEqual;\n return op(data[name], value);\n\n case 'RegExp':\n if (!isArray(data[name])) {\n return Boolean(data[name] && data[name].match(value));\n }\n\n if (!withinArray) {\n return false;\n }\n\n return arrayContains(data[name], value);\n\n case 'Number':\n value = String(value);\n /* falls through */\n case 'String':\n if (!isArray(data[name])) {\n return data[name] === value;\n }\n\n if (!withinArray) {\n return false;\n }\n\n return arrayContains(data[name], value);\n\n default:\n throw new TypeError('URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter');\n }\n };\n\n\n URI.joinPaths = function() {\n var input = [];\n var segments = [];\n var nonEmptySegments = 0;\n\n for (var i = 0; i < arguments.length; i++) {\n var url = new URI(arguments[i]);\n input.push(url);\n var _segments = url.segment();\n for (var s = 0; s < _segments.length; s++) {\n if (typeof _segments[s] === 'string') {\n segments.push(_segments[s]);\n }\n\n if (_segments[s]) {\n nonEmptySegments++;\n }\n }\n }\n\n if (!segments.length || !nonEmptySegments) {\n return new URI('');\n }\n\n var uri = new URI('').segment(segments);\n\n if (input[0].path() === '' || input[0].path().slice(0, 1) === '/') {\n uri.path('/' + uri.path());\n }\n\n return uri.normalize();\n };\n\n URI.commonPath = function(one, two) {\n var length = Math.min(one.length, two.length);\n var pos;\n\n // find first non-matching character\n for (pos = 0; pos < length; pos++) {\n if (one.charAt(pos) !== two.charAt(pos)) {\n pos--;\n break;\n }\n }\n\n if (pos < 1) {\n return one.charAt(0) === two.charAt(0) && one.charAt(0) === '/' ? '/' : '';\n }\n\n // revert to last /\n if (one.charAt(pos) !== '/' || two.charAt(pos) !== '/') {\n pos = one.substring(0, pos).lastIndexOf('/');\n }\n\n return one.substring(0, pos + 1);\n };\n\n URI.withinString = function(string, callback, options) {\n options || (options = {});\n var _start = options.start || URI.findUri.start;\n var _end = options.end || URI.findUri.end;\n var _trim = options.trim || URI.findUri.trim;\n var _parens = options.parens || URI.findUri.parens;\n var _attributeOpen = /[a-z0-9-]=[\"']?$/i;\n\n _start.lastIndex = 0;\n while (true) {\n var match = _start.exec(string);\n if (!match) {\n break;\n }\n\n var start = match.index;\n if (options.ignoreHtml) {\n // attribut(e=[\"']?$)\n var attributeOpen = string.slice(Math.max(start - 3, 0), start);\n if (attributeOpen && _attributeOpen.test(attributeOpen)) {\n continue;\n }\n }\n\n var end = start + string.slice(start).search(_end);\n var slice = string.slice(start, end);\n // make sure we include well balanced parens\n var parensEnd = -1;\n while (true) {\n var parensMatch = _parens.exec(slice);\n if (!parensMatch) {\n break;\n }\n\n var parensMatchEnd = parensMatch.index + parensMatch[0].length;\n parensEnd = Math.max(parensEnd, parensMatchEnd);\n }\n\n if (parensEnd > -1) {\n slice = slice.slice(0, parensEnd) + slice.slice(parensEnd).replace(_trim, '');\n } else {\n slice = slice.replace(_trim, '');\n }\n\n if (slice.length <= match[0].length) {\n // the extract only contains the starting marker of a URI,\n // e.g. \"www\" or \"http://\"\n continue;\n }\n\n if (options.ignore && options.ignore.test(slice)) {\n continue;\n }\n\n end = start + slice.length;\n var result = callback(slice, start, end, string);\n if (result === undefined) {\n _start.lastIndex = end;\n continue;\n }\n\n result = String(result);\n string = string.slice(0, start) + result + string.slice(end);\n _start.lastIndex = start + result.length;\n }\n\n _start.lastIndex = 0;\n return string;\n };\n\n URI.ensureValidHostname = function(v, protocol) {\n // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986)\n // they are not part of DNS and therefore ignored by URI.js\n\n var hasHostname = !!v; // not null and not an empty string\n var hasProtocol = !!protocol;\n var rejectEmptyHostname = false;\n\n if (hasProtocol) {\n rejectEmptyHostname = arrayContains(URI.hostProtocols, protocol);\n }\n\n if (rejectEmptyHostname && !hasHostname) {\n throw new TypeError('Hostname cannot be empty, if protocol is ' + protocol);\n } else if (v && v.match(URI.invalid_hostname_characters)) {\n // test punycode\n if (!punycode) {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available');\n }\n if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-:_]');\n }\n }\n };\n\n URI.ensureValidPort = function (v) {\n if (!v) {\n return;\n }\n\n var port = Number(v);\n if (isInteger(port) && (port > 0) && (port < 65536)) {\n return;\n }\n\n throw new TypeError('Port \"' + v + '\" is not a valid port');\n };\n\n // noConflict\n URI.noConflict = function(removeAll) {\n if (removeAll) {\n var unconflicted = {\n URI: this.noConflict()\n };\n\n if (root.URITemplate && typeof root.URITemplate.noConflict === 'function') {\n unconflicted.URITemplate = root.URITemplate.noConflict();\n }\n\n if (root.IPv6 && typeof root.IPv6.noConflict === 'function') {\n unconflicted.IPv6 = root.IPv6.noConflict();\n }\n\n if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === 'function') {\n unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict();\n }\n\n return unconflicted;\n } else if (root.URI === this) {\n root.URI = _URI;\n }\n\n return this;\n };\n\n p.build = function(deferBuild) {\n if (deferBuild === true) {\n this._deferred_build = true;\n } else if (deferBuild === undefined || this._deferred_build) {\n this._string = URI.build(this._parts);\n this._deferred_build = false;\n }\n\n return this;\n };\n\n p.clone = function() {\n return new URI(this);\n };\n\n p.valueOf = p.toString = function() {\n return this.build(false)._string;\n };\n\n\n function generateSimpleAccessor(_part){\n return function(v, build) {\n if (v === undefined) {\n return this._parts[_part] || '';\n } else {\n this._parts[_part] = v || null;\n this.build(!build);\n return this;\n }\n };\n }\n\n function generatePrefixAccessor(_part, _key){\n return function(v, build) {\n if (v === undefined) {\n return this._parts[_part] || '';\n } else {\n if (v !== null) {\n v = v + '';\n if (v.charAt(0) === _key) {\n v = v.substring(1);\n }\n }\n\n this._parts[_part] = v;\n this.build(!build);\n return this;\n }\n };\n }\n\n p.protocol = generateSimpleAccessor('protocol');\n p.username = generateSimpleAccessor('username');\n p.password = generateSimpleAccessor('password');\n p.hostname = generateSimpleAccessor('hostname');\n p.port = generateSimpleAccessor('port');\n p.query = generatePrefixAccessor('query', '?');\n p.fragment = generatePrefixAccessor('fragment', '#');\n\n p.search = function(v, build) {\n var t = this.query(v, build);\n return typeof t === 'string' && t.length ? ('?' + t) : t;\n };\n p.hash = function(v, build) {\n var t = this.fragment(v, build);\n return typeof t === 'string' && t.length ? ('#' + t) : t;\n };\n\n p.pathname = function(v, build) {\n if (v === undefined || v === true) {\n var res = this._parts.path || (this._parts.hostname ? '/' : '');\n return v ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res;\n } else {\n if (this._parts.urn) {\n this._parts.path = v ? URI.recodeUrnPath(v) : '';\n } else {\n this._parts.path = v ? URI.recodePath(v) : '/';\n }\n this.build(!build);\n return this;\n }\n };\n p.path = p.pathname;\n p.href = function(href, build) {\n var key;\n\n if (href === undefined) {\n return this.toString();\n }\n\n this._string = '';\n this._parts = URI._parts();\n\n var _URI = href instanceof URI;\n var _object = typeof href === 'object' && (href.hostname || href.path || href.pathname);\n if (href.nodeName) {\n var attribute = URI.getDomAttribute(href);\n href = href[attribute] || '';\n _object = false;\n }\n\n // window.location is reported to be an object, but it's not the sort\n // of object we're looking for:\n // * location.protocol ends with a colon\n // * location.query != object.search\n // * location.hash != object.fragment\n // simply serializing the unknown object should do the trick\n // (for location, not for everything...)\n if (!_URI && _object && href.pathname !== undefined) {\n href = href.toString();\n }\n\n if (typeof href === 'string' || href instanceof String) {\n this._parts = URI.parse(String(href), this._parts);\n } else if (_URI || _object) {\n var src = _URI ? href._parts : href;\n for (key in src) {\n if (key === 'query') { continue; }\n if (hasOwn.call(this._parts, key)) {\n this._parts[key] = src[key];\n }\n }\n if (src.query) {\n this.query(src.query, false);\n }\n } else {\n throw new TypeError('invalid input');\n }\n\n this.build(!build);\n return this;\n };\n\n // identification accessors\n p.is = function(what) {\n var ip = false;\n var ip4 = false;\n var ip6 = false;\n var name = false;\n var sld = false;\n var idn = false;\n var punycode = false;\n var relative = !this._parts.urn;\n\n if (this._parts.hostname) {\n relative = false;\n ip4 = URI.ip4_expression.test(this._parts.hostname);\n ip6 = URI.ip6_expression.test(this._parts.hostname);\n ip = ip4 || ip6;\n name = !ip;\n sld = name && SLD && SLD.has(this._parts.hostname);\n idn = name && URI.idn_expression.test(this._parts.hostname);\n punycode = name && URI.punycode_expression.test(this._parts.hostname);\n }\n\n switch (what.toLowerCase()) {\n case 'relative':\n return relative;\n\n case 'absolute':\n return !relative;\n\n // hostname identification\n case 'domain':\n case 'name':\n return name;\n\n case 'sld':\n return sld;\n\n case 'ip':\n return ip;\n\n case 'ip4':\n case 'ipv4':\n case 'inet4':\n return ip4;\n\n case 'ip6':\n case 'ipv6':\n case 'inet6':\n return ip6;\n\n case 'idn':\n return idn;\n\n case 'url':\n return !this._parts.urn;\n\n case 'urn':\n return !!this._parts.urn;\n\n case 'punycode':\n return punycode;\n }\n\n return null;\n };\n\n // component specific input validation\n var _protocol = p.protocol;\n var _port = p.port;\n var _hostname = p.hostname;\n\n p.protocol = function(v, build) {\n if (v) {\n // accept trailing ://\n v = v.replace(/:(\\/\\/)?$/, '');\n\n if (!v.match(URI.protocol_expression)) {\n throw new TypeError('Protocol \"' + v + '\" contains characters other than [A-Z0-9.+-] or doesn\\'t start with [A-Z]');\n }\n }\n\n return _protocol.call(this, v, build);\n };\n p.scheme = p.protocol;\n p.port = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v !== undefined) {\n if (v === 0) {\n v = null;\n }\n\n if (v) {\n v += '';\n if (v.charAt(0) === ':') {\n v = v.substring(1);\n }\n\n URI.ensureValidPort(v);\n }\n }\n return _port.call(this, v, build);\n };\n p.hostname = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v !== undefined) {\n var x = { preventInvalidHostname: this._parts.preventInvalidHostname };\n var res = URI.parseHost(v, x);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n v = x.hostname;\n if (this._parts.preventInvalidHostname) {\n URI.ensureValidHostname(v, this._parts.protocol);\n }\n }\n\n return _hostname.call(this, v, build);\n };\n\n // compound accessors\n p.origin = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n var protocol = this.protocol();\n var authority = this.authority();\n if (!authority) {\n return '';\n }\n\n return (protocol ? protocol + '://' : '') + this.authority();\n } else {\n var origin = URI(v);\n this\n .protocol(origin.protocol())\n .authority(origin.authority())\n .build(!build);\n return this;\n }\n };\n p.host = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n return this._parts.hostname ? URI.buildHost(this._parts) : '';\n } else {\n var res = URI.parseHost(v, this._parts);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n this.build(!build);\n return this;\n }\n };\n p.authority = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n return this._parts.hostname ? URI.buildAuthority(this._parts) : '';\n } else {\n var res = URI.parseAuthority(v, this._parts);\n if (res !== '/') {\n throw new TypeError('Hostname \"' + v + '\" contains characters other than [A-Z0-9.-]');\n }\n\n this.build(!build);\n return this;\n }\n };\n p.userinfo = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined) {\n var t = URI.buildUserinfo(this._parts);\n return t ? t.substring(0, t.length -1) : t;\n } else {\n if (v[v.length-1] !== '@') {\n v += '@';\n }\n\n URI.parseUserinfo(v, this._parts);\n this.build(!build);\n return this;\n }\n };\n p.resource = function(v, build) {\n var parts;\n\n if (v === undefined) {\n return this.path() + this.search() + this.hash();\n }\n\n parts = URI.parse(v);\n this._parts.path = parts.path;\n this._parts.query = parts.query;\n this._parts.fragment = parts.fragment;\n this.build(!build);\n return this;\n };\n\n // fraction accessors\n p.subdomain = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n // convenience, return \"www\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n // grab domain and add another segment\n var end = this._parts.hostname.length - this.domain().length - 1;\n return this._parts.hostname.substring(0, end) || '';\n } else {\n var e = this._parts.hostname.length - this.domain().length;\n var sub = this._parts.hostname.substring(0, e);\n var replace = new RegExp('^' + escapeRegEx(sub));\n\n if (v && v.charAt(v.length - 1) !== '.') {\n v += '.';\n }\n\n if (v.indexOf(':') !== -1) {\n throw new TypeError('Domains cannot contain colons');\n }\n\n if (v) {\n URI.ensureValidHostname(v, this._parts.protocol);\n }\n\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n this.build(!build);\n return this;\n }\n };\n p.domain = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v === 'boolean') {\n build = v;\n v = undefined;\n }\n\n // convenience, return \"example.org\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n // if hostname consists of 1 or 2 segments, it must be the domain\n var t = this._parts.hostname.match(/\\./g);\n if (t && t.length < 2) {\n return this._parts.hostname;\n }\n\n // grab tld and add another segment\n var end = this._parts.hostname.length - this.tld(build).length - 1;\n end = this._parts.hostname.lastIndexOf('.', end -1) + 1;\n return this._parts.hostname.substring(end) || '';\n } else {\n if (!v) {\n throw new TypeError('cannot set domain empty');\n }\n\n if (v.indexOf(':') !== -1) {\n throw new TypeError('Domains cannot contain colons');\n }\n\n URI.ensureValidHostname(v, this._parts.protocol);\n\n if (!this._parts.hostname || this.is('IP')) {\n this._parts.hostname = v;\n } else {\n var replace = new RegExp(escapeRegEx(this.domain()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.tld = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v === 'boolean') {\n build = v;\n v = undefined;\n }\n\n // return \"org\" from \"www.example.org\"\n if (v === undefined) {\n if (!this._parts.hostname || this.is('IP')) {\n return '';\n }\n\n var pos = this._parts.hostname.lastIndexOf('.');\n var tld = this._parts.hostname.substring(pos + 1);\n\n if (build !== true && SLD && SLD.list[tld.toLowerCase()]) {\n return SLD.get(this._parts.hostname) || tld;\n }\n\n return tld;\n } else {\n var replace;\n\n if (!v) {\n throw new TypeError('cannot set TLD empty');\n } else if (v.match(/[^a-zA-Z0-9-]/)) {\n if (SLD && SLD.is(v)) {\n replace = new RegExp(escapeRegEx(this.tld()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n } else {\n throw new TypeError('TLD \"' + v + '\" contains characters other than [A-Z0-9]');\n }\n } else if (!this._parts.hostname || this.is('IP')) {\n throw new ReferenceError('cannot set TLD on non-domain host');\n } else {\n replace = new RegExp(escapeRegEx(this.tld()) + '$');\n this._parts.hostname = this._parts.hostname.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.directory = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined || v === true) {\n if (!this._parts.path && !this._parts.hostname) {\n return '';\n }\n\n if (this._parts.path === '/') {\n return '/';\n }\n\n var end = this._parts.path.length - this.filename().length - 1;\n var res = this._parts.path.substring(0, end) || (this._parts.hostname ? '/' : '');\n\n return v ? URI.decodePath(res) : res;\n\n } else {\n var e = this._parts.path.length - this.filename().length;\n var directory = this._parts.path.substring(0, e);\n var replace = new RegExp('^' + escapeRegEx(directory));\n\n // fully qualifier directories begin with a slash\n if (!this.is('relative')) {\n if (!v) {\n v = '/';\n }\n\n if (v.charAt(0) !== '/') {\n v = '/' + v;\n }\n }\n\n // directories always end with a slash\n if (v && v.charAt(v.length - 1) !== '/') {\n v += '/';\n }\n\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n this.build(!build);\n return this;\n }\n };\n p.filename = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (typeof v !== 'string') {\n if (!this._parts.path || this._parts.path === '/') {\n return '';\n }\n\n var pos = this._parts.path.lastIndexOf('/');\n var res = this._parts.path.substring(pos+1);\n\n return v ? URI.decodePathSegment(res) : res;\n } else {\n var mutatedDirectory = false;\n\n if (v.charAt(0) === '/') {\n v = v.substring(1);\n }\n\n if (v.match(/\\.?\\//)) {\n mutatedDirectory = true;\n }\n\n var replace = new RegExp(escapeRegEx(this.filename()) + '$');\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n\n if (mutatedDirectory) {\n this.normalizePath(build);\n } else {\n this.build(!build);\n }\n\n return this;\n }\n };\n p.suffix = function(v, build) {\n if (this._parts.urn) {\n return v === undefined ? '' : this;\n }\n\n if (v === undefined || v === true) {\n if (!this._parts.path || this._parts.path === '/') {\n return '';\n }\n\n var filename = this.filename();\n var pos = filename.lastIndexOf('.');\n var s, res;\n\n if (pos === -1) {\n return '';\n }\n\n // suffix may only contain alnum characters (yup, I made this up.)\n s = filename.substring(pos+1);\n res = (/^[a-z0-9%]+$/i).test(s) ? s : '';\n return v ? URI.decodePathSegment(res) : res;\n } else {\n if (v.charAt(0) === '.') {\n v = v.substring(1);\n }\n\n var suffix = this.suffix();\n var replace;\n\n if (!suffix) {\n if (!v) {\n return this;\n }\n\n this._parts.path += '.' + URI.recodePath(v);\n } else if (!v) {\n replace = new RegExp(escapeRegEx('.' + suffix) + '$');\n } else {\n replace = new RegExp(escapeRegEx(suffix) + '$');\n }\n\n if (replace) {\n v = URI.recodePath(v);\n this._parts.path = this._parts.path.replace(replace, v);\n }\n\n this.build(!build);\n return this;\n }\n };\n p.segment = function(segment, v, build) {\n var separator = this._parts.urn ? ':' : '/';\n var path = this.path();\n var absolute = path.substring(0, 1) === '/';\n var segments = path.split(separator);\n\n if (segment !== undefined && typeof segment !== 'number') {\n build = v;\n v = segment;\n segment = undefined;\n }\n\n if (segment !== undefined && typeof segment !== 'number') {\n throw new Error('Bad segment \"' + segment + '\", must be 0-based integer');\n }\n\n if (absolute) {\n segments.shift();\n }\n\n if (segment < 0) {\n // allow negative indexes to address from the end\n segment = Math.max(segments.length + segment, 0);\n }\n\n if (v === undefined) {\n /*jshint laxbreak: true */\n return segment === undefined\n ? segments\n : segments[segment];\n /*jshint laxbreak: false */\n } else if (segment === null || segments[segment] === undefined) {\n if (isArray(v)) {\n segments = [];\n // collapse empty elements within array\n for (var i=0, l=v.length; i < l; i++) {\n if (!v[i].length && (!segments.length || !segments[segments.length -1].length)) {\n continue;\n }\n\n if (segments.length && !segments[segments.length -1].length) {\n segments.pop();\n }\n\n segments.push(trimSlashes(v[i]));\n }\n } else if (v || typeof v === 'string') {\n v = trimSlashes(v);\n if (segments[segments.length -1] === '') {\n // empty trailing elements have to be overwritten\n // to prevent results such as /foo//bar\n segments[segments.length -1] = v;\n } else {\n segments.push(v);\n }\n }\n } else {\n if (v) {\n segments[segment] = trimSlashes(v);\n } else {\n segments.splice(segment, 1);\n }\n }\n\n if (absolute) {\n segments.unshift('');\n }\n\n return this.path(segments.join(separator), build);\n };\n p.segmentCoded = function(segment, v, build) {\n var segments, i, l;\n\n if (typeof segment !== 'number') {\n build = v;\n v = segment;\n segment = undefined;\n }\n\n if (v === undefined) {\n segments = this.segment(segment, v, build);\n if (!isArray(segments)) {\n segments = segments !== undefined ? URI.decode(segments) : undefined;\n } else {\n for (i = 0, l = segments.length; i < l; i++) {\n segments[i] = URI.decode(segments[i]);\n }\n }\n\n return segments;\n }\n\n if (!isArray(v)) {\n v = (typeof v === 'string' || v instanceof String) ? URI.encode(v) : v;\n } else {\n for (i = 0, l = v.length; i < l; i++) {\n v[i] = URI.encode(v[i]);\n }\n }\n\n return this.segment(segment, v, build);\n };\n\n // mutating query string\n var q = p.query;\n p.query = function(v, build) {\n if (v === true) {\n return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n } else if (typeof v === 'function') {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n var result = v.call(this, data);\n this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n this.build(!build);\n return this;\n } else if (v !== undefined && typeof v !== 'string') {\n this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n this.build(!build);\n return this;\n } else {\n return q.call(this, v, build);\n }\n };\n p.setQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n\n if (typeof name === 'string' || name instanceof String) {\n data[name] = value !== undefined ? value : null;\n } else if (typeof name === 'object') {\n for (var key in name) {\n if (hasOwn.call(name, key)) {\n data[key] = name[key];\n }\n }\n } else {\n throw new TypeError('URI.addQuery() accepts an object, string as the name parameter');\n }\n\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.addQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n URI.addQuery(data, name, value === undefined ? null : value);\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.removeQuery = function(name, value, build) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n URI.removeQuery(data, name, value);\n this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace);\n if (typeof name !== 'string') {\n build = value;\n }\n\n this.build(!build);\n return this;\n };\n p.hasQuery = function(name, value, withinArray) {\n var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace);\n return URI.hasQuery(data, name, value, withinArray);\n };\n p.setSearch = p.setQuery;\n p.addSearch = p.addQuery;\n p.removeSearch = p.removeQuery;\n p.hasSearch = p.hasQuery;\n\n // sanitizing URLs\n p.normalize = function() {\n if (this._parts.urn) {\n return this\n .normalizeProtocol(false)\n .normalizePath(false)\n .normalizeQuery(false)\n .normalizeFragment(false)\n .build();\n }\n\n return this\n .normalizeProtocol(false)\n .normalizeHostname(false)\n .normalizePort(false)\n .normalizePath(false)\n .normalizeQuery(false)\n .normalizeFragment(false)\n .build();\n };\n p.normalizeProtocol = function(build) {\n if (typeof this._parts.protocol === 'string') {\n this._parts.protocol = this._parts.protocol.toLowerCase();\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeHostname = function(build) {\n if (this._parts.hostname) {\n if (this.is('IDN') && punycode) {\n this._parts.hostname = punycode.toASCII(this._parts.hostname);\n } else if (this.is('IPv6') && IPv6) {\n this._parts.hostname = IPv6.best(this._parts.hostname);\n }\n\n this._parts.hostname = this._parts.hostname.toLowerCase();\n this.build(!build);\n }\n\n return this;\n };\n p.normalizePort = function(build) {\n // remove port of it's the protocol's default\n if (typeof this._parts.protocol === 'string' && this._parts.port === URI.defaultPorts[this._parts.protocol]) {\n this._parts.port = null;\n this.build(!build);\n }\n\n return this;\n };\n p.normalizePath = function(build) {\n var _path = this._parts.path;\n if (!_path) {\n return this;\n }\n\n if (this._parts.urn) {\n this._parts.path = URI.recodeUrnPath(this._parts.path);\n this.build(!build);\n return this;\n }\n\n if (this._parts.path === '/') {\n return this;\n }\n\n _path = URI.recodePath(_path);\n\n var _was_relative;\n var _leadingParents = '';\n var _parent, _pos;\n\n // handle relative paths\n if (_path.charAt(0) !== '/') {\n _was_relative = true;\n _path = '/' + _path;\n }\n\n // handle relative files (as opposed to directories)\n if (_path.slice(-3) === '/..' || _path.slice(-2) === '/.') {\n _path += '/';\n }\n\n // resolve simples\n _path = _path\n .replace(/(\\/(\\.\\/)+)|(\\/\\.$)/g, '/')\n .replace(/\\/{2,}/g, '/');\n\n // remember leading parents\n if (_was_relative) {\n _leadingParents = _path.substring(1).match(/^(\\.\\.\\/)+/) || '';\n if (_leadingParents) {\n _leadingParents = _leadingParents[0];\n }\n }\n\n // resolve parents\n while (true) {\n _parent = _path.search(/\\/\\.\\.(\\/|$)/);\n if (_parent === -1) {\n // no more ../ to resolve\n break;\n } else if (_parent === 0) {\n // top level cannot be relative, skip it\n _path = _path.substring(3);\n continue;\n }\n\n _pos = _path.substring(0, _parent).lastIndexOf('/');\n if (_pos === -1) {\n _pos = _parent;\n }\n _path = _path.substring(0, _pos) + _path.substring(_parent + 3);\n }\n\n // revert to relative\n if (_was_relative && this.is('relative')) {\n _path = _leadingParents + _path.substring(1);\n }\n\n this._parts.path = _path;\n this.build(!build);\n return this;\n };\n p.normalizePathname = p.normalizePath;\n p.normalizeQuery = function(build) {\n if (typeof this._parts.query === 'string') {\n if (!this._parts.query.length) {\n this._parts.query = null;\n } else {\n this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace));\n }\n\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeFragment = function(build) {\n if (!this._parts.fragment) {\n this._parts.fragment = null;\n this.build(!build);\n }\n\n return this;\n };\n p.normalizeSearch = p.normalizeQuery;\n p.normalizeHash = p.normalizeFragment;\n\n p.iso8859 = function() {\n // expect unicode input, iso8859 output\n var e = URI.encode;\n var d = URI.decode;\n\n URI.encode = escape;\n URI.decode = decodeURIComponent;\n try {\n this.normalize();\n } finally {\n URI.encode = e;\n URI.decode = d;\n }\n return this;\n };\n\n p.unicode = function() {\n // expect iso8859 input, unicode output\n var e = URI.encode;\n var d = URI.decode;\n\n URI.encode = strictEncodeURIComponent;\n URI.decode = unescape;\n try {\n this.normalize();\n } finally {\n URI.encode = e;\n URI.decode = d;\n }\n return this;\n };\n\n p.readable = function() {\n var uri = this.clone();\n // removing username, password, because they shouldn't be displayed according to RFC 3986\n uri.username('').password('').normalize();\n var t = '';\n if (uri._parts.protocol) {\n t += uri._parts.protocol + '://';\n }\n\n if (uri._parts.hostname) {\n if (uri.is('punycode') && punycode) {\n t += punycode.toUnicode(uri._parts.hostname);\n if (uri._parts.port) {\n t += ':' + uri._parts.port;\n }\n } else {\n t += uri.host();\n }\n }\n\n if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== '/') {\n t += '/';\n }\n\n t += uri.path(true);\n if (uri._parts.query) {\n var q = '';\n for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) {\n var kv = (qp[i] || '').split('=');\n q += '&' + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace)\n .replace(/&/g, '%26');\n\n if (kv[1] !== undefined) {\n q += '=' + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace)\n .replace(/&/g, '%26');\n }\n }\n t += '?' + q.substring(1);\n }\n\n t += URI.decodeQuery(uri.hash(), true);\n return t;\n };\n\n // resolving relative and absolute URLs\n p.absoluteTo = function(base) {\n var resolved = this.clone();\n var properties = ['protocol', 'username', 'password', 'hostname', 'port'];\n var basedir, i, p;\n\n if (this._parts.urn) {\n throw new Error('URNs do not have any generally defined hierarchical components');\n }\n\n if (!(base instanceof URI)) {\n base = new URI(base);\n }\n\n if (resolved._parts.protocol) {\n // Directly returns even if this._parts.hostname is empty.\n return resolved;\n } else {\n resolved._parts.protocol = base._parts.protocol;\n }\n\n if (this._parts.hostname) {\n return resolved;\n }\n\n for (i = 0; (p = properties[i]); i++) {\n resolved._parts[p] = base._parts[p];\n }\n\n if (!resolved._parts.path) {\n resolved._parts.path = base._parts.path;\n if (!resolved._parts.query) {\n resolved._parts.query = base._parts.query;\n }\n } else {\n if (resolved._parts.path.substring(-2) === '..') {\n resolved._parts.path += '/';\n }\n\n if (resolved.path().charAt(0) !== '/') {\n basedir = base.directory();\n basedir = basedir ? basedir : base.path().indexOf('/') === 0 ? '/' : '';\n resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path;\n resolved.normalizePath();\n }\n }\n\n resolved.build();\n return resolved;\n };\n p.relativeTo = function(base) {\n var relative = this.clone().normalize();\n var relativeParts, baseParts, common, relativePath, basePath;\n\n if (relative._parts.urn) {\n throw new Error('URNs do not have any generally defined hierarchical components');\n }\n\n base = new URI(base).normalize();\n relativeParts = relative._parts;\n baseParts = base._parts;\n relativePath = relative.path();\n basePath = base.path();\n\n if (relativePath.charAt(0) !== '/') {\n throw new Error('URI is already relative');\n }\n\n if (basePath.charAt(0) !== '/') {\n throw new Error('Cannot calculate a URI relative to another relative URI');\n }\n\n if (relativeParts.protocol === baseParts.protocol) {\n relativeParts.protocol = null;\n }\n\n if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) {\n return relative.build();\n }\n\n if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) {\n return relative.build();\n }\n\n if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) {\n relativeParts.hostname = null;\n relativeParts.port = null;\n } else {\n return relative.build();\n }\n\n if (relativePath === basePath) {\n relativeParts.path = '';\n return relative.build();\n }\n\n // determine common sub path\n common = URI.commonPath(relativePath, basePath);\n\n // If the paths have nothing in common, return a relative URL with the absolute path.\n if (!common) {\n return relative.build();\n }\n\n var parents = baseParts.path\n .substring(common.length)\n .replace(/[^\\/]*$/, '')\n .replace(/.*?\\//g, '../');\n\n relativeParts.path = (parents + relativeParts.path.substring(common.length)) || './';\n\n return relative.build();\n };\n\n // comparing URIs\n p.equals = function(uri) {\n var one = this.clone();\n var two = new URI(uri);\n var one_map = {};\n var two_map = {};\n var checked = {};\n var one_query, two_query, key;\n\n one.normalize();\n two.normalize();\n\n // exact match\n if (one.toString() === two.toString()) {\n return true;\n }\n\n // extract query string\n one_query = one.query();\n two_query = two.query();\n one.query('');\n two.query('');\n\n // definitely not equal if not even non-query parts match\n if (one.toString() !== two.toString()) {\n return false;\n }\n\n // query parameters have the same length, even if they're permuted\n if (one_query.length !== two_query.length) {\n return false;\n }\n\n one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace);\n two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace);\n\n for (key in one_map) {\n if (hasOwn.call(one_map, key)) {\n if (!isArray(one_map[key])) {\n if (one_map[key] !== two_map[key]) {\n return false;\n }\n } else if (!arraysEqual(one_map[key], two_map[key])) {\n return false;\n }\n\n checked[key] = true;\n }\n }\n\n for (key in two_map) {\n if (hasOwn.call(two_map, key)) {\n if (!checked[key]) {\n // two contains a parameter not present in one\n return false;\n }\n }\n }\n\n return true;\n };\n\n // state\n p.preventInvalidHostname = function(v) {\n this._parts.preventInvalidHostname = !!v;\n return this;\n };\n\n p.duplicateQueryParameters = function(v) {\n this._parts.duplicateQueryParameters = !!v;\n return this;\n };\n\n p.escapeQuerySpace = function(v) {\n this._parts.escapeQuerySpace = !!v;\n return this;\n };\n\n return URI;\n}));\n","/**\r\n * @private\r\n */\r\nfunction appendForwardSlash(url) {\r\n if (url.length === 0 || url[url.length - 1] !== \"/\") {\r\n url = `${url}/`;\r\n }\r\n return url;\r\n}\r\nexport default appendForwardSlash;\r\n","import defaultValue from \"./defaultValue.js\";\r\n\r\n/**\r\n * Clones an object, returning a new object containing the same properties.\r\n *\r\n * @function\r\n *\r\n * @param {Object} object The object to clone.\r\n * @param {Boolean} [deep=false] If true, all properties will be deep cloned recursively.\r\n * @returns {Object} The cloned object.\r\n */\r\nfunction clone(object, deep) {\r\n if (object === null || typeof object !== \"object\") {\r\n return object;\r\n }\r\n\r\n deep = defaultValue(deep, false);\r\n\r\n const result = new object.constructor();\r\n for (const propertyName in object) {\r\n if (object.hasOwnProperty(propertyName)) {\r\n let value = object[propertyName];\r\n if (deep) {\r\n value = clone(value, deep);\r\n }\r\n result[propertyName] = value;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\nexport default clone;\r\n","/**\r\n * A function used to resolve a promise upon completion .\r\n * @callback defer.resolve\r\n *\r\n * @param {*} value The resulting value.\r\n */\r\n\r\n/**\r\n * A function used to reject a promise upon failure.\r\n * @callback defer.reject\r\n *\r\n * @param {*} error The error.\r\n */\r\n\r\n/**\r\n * An object which contains a promise object, and functions to resolve or reject the promise.\r\n *\r\n * @typedef {Object} defer.deferred\r\n * @property {defer.resolve} resolve Resolves the promise when called.\r\n * @property {defer.reject} reject Rejects the promise when called.\r\n * @property {Promise} promise Promise object.\r\n */\r\n\r\n/**\r\n * Creates a deferred object, containing a promise object, and functions to resolve or reject the promise.\r\n * @returns {defer.deferred}\r\n * @private\r\n */\r\nfunction defer() {\r\n let resolve;\r\n let reject;\r\n const promise = new Promise(function (res, rej) {\r\n resolve = res;\r\n reject = rej;\r\n });\r\n\r\n return {\r\n resolve: resolve,\r\n reject: reject,\r\n promise: promise,\r\n };\r\n}\r\n\r\nexport default defer;\r\n","import Uri from \"urijs\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Given a relative Uri and a base Uri, returns the absolute Uri of the relative Uri.\r\n * @function\r\n *\r\n * @param {String} relative The relative Uri.\r\n * @param {String} [base] The base Uri.\r\n * @returns {String} The absolute Uri of the given relative Uri.\r\n *\r\n * @example\r\n * //absolute Uri will be \"https://test.com/awesome.png\";\r\n * const absoluteUri = Cesium.getAbsoluteUri('awesome.png', 'https://test.com');\r\n */\r\nfunction getAbsoluteUri(relative, base) {\r\n let documentObject;\r\n if (typeof document !== \"undefined\") {\r\n documentObject = document;\r\n }\r\n\r\n return getAbsoluteUri._implementation(relative, base, documentObject);\r\n}\r\n\r\ngetAbsoluteUri._implementation = function (relative, base, documentObject) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(relative)) {\r\n throw new DeveloperError(\"relative uri is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(base)) {\r\n if (typeof documentObject === \"undefined\") {\r\n return relative;\r\n }\r\n base = defaultValue(documentObject.baseURI, documentObject.location.href);\r\n }\r\n\r\n const relativeUri = new Uri(relative);\r\n if (relativeUri.scheme() !== \"\") {\r\n return relativeUri.toString();\r\n }\r\n return relativeUri.absoluteTo(base).toString();\r\n};\r\nexport default getAbsoluteUri;\r\n","import Uri from \"urijs\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Given a URI, returns the base path of the URI.\r\n * @function\r\n *\r\n * @param {String} uri The Uri.\r\n * @param {Boolean} [includeQuery = false] Whether or not to include the query string and fragment form the uri\r\n * @returns {String} The base path of the Uri.\r\n *\r\n * @example\r\n * // basePath will be \"/Gallery/\";\r\n * const basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false');\r\n *\r\n * // basePath will be \"/Gallery/?value=true&example=false\";\r\n * const basePath = Cesium.getBaseUri('/Gallery/simple.czml?value=true&example=false', true);\r\n */\r\nfunction getBaseUri(uri, includeQuery) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(uri)) {\r\n throw new DeveloperError(\"uri is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let basePath = \"\";\r\n const i = uri.lastIndexOf(\"/\");\r\n if (i !== -1) {\r\n basePath = uri.substring(0, i + 1);\r\n }\r\n\r\n if (!includeQuery) {\r\n return basePath;\r\n }\r\n\r\n uri = new Uri(uri);\r\n if (uri.query().length !== 0) {\r\n basePath += `?${uri.query()}`;\r\n }\r\n if (uri.fragment().length !== 0) {\r\n basePath += `#${uri.fragment()}`;\r\n }\r\n\r\n return basePath;\r\n}\r\nexport default getBaseUri;\r\n","import Uri from \"urijs\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Given a URI, returns the extension of the URI.\r\n * @function getExtensionFromUri\r\n *\r\n * @param {String} uri The Uri.\r\n * @returns {String} The extension of the Uri.\r\n *\r\n * @example\r\n * //extension will be \"czml\";\r\n * const extension = Cesium.getExtensionFromUri('/Gallery/simple.czml?value=true&example=false');\r\n */\r\nfunction getExtensionFromUri(uri) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(uri)) {\r\n throw new DeveloperError(\"uri is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const uriObject = new Uri(uri);\r\n uriObject.normalize();\r\n let path = uriObject.path();\r\n let index = path.lastIndexOf(\"/\");\r\n if (index !== -1) {\r\n path = path.substr(index + 1);\r\n }\r\n index = path.lastIndexOf(\".\");\r\n if (index === -1) {\r\n path = \"\";\r\n } else {\r\n path = path.substr(index + 1);\r\n }\r\n return path;\r\n}\r\nexport default getExtensionFromUri;\r\n","import defined from \"./defined.js\";\r\n\r\nconst context2DsByWidthAndHeight = {};\r\n\r\n/**\r\n * Extract a pixel array from a loaded image. Draws the image\r\n * into a canvas so it can read the pixels back.\r\n *\r\n * @function getImagePixels\r\n *\r\n * @param {HTMLImageElement|ImageBitmap} image The image to extract pixels from.\r\n * @param {Number} width The width of the image. If not defined, then image.width is assigned.\r\n * @param {Number} height The height of the image. If not defined, then image.height is assigned.\r\n * @returns {ImageData} The pixels of the image.\r\n */\r\nfunction getImagePixels(image, width, height) {\r\n if (!defined(width)) {\r\n width = image.width;\r\n }\r\n if (!defined(height)) {\r\n height = image.height;\r\n }\r\n\r\n let context2DsByHeight = context2DsByWidthAndHeight[width];\r\n if (!defined(context2DsByHeight)) {\r\n context2DsByHeight = {};\r\n context2DsByWidthAndHeight[width] = context2DsByHeight;\r\n }\r\n\r\n let context2d = context2DsByHeight[height];\r\n if (!defined(context2d)) {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = width;\r\n canvas.height = height;\r\n context2d = canvas.getContext(\"2d\");\r\n context2d.globalCompositeOperation = \"copy\";\r\n context2DsByHeight[height] = context2d;\r\n }\r\n\r\n context2d.drawImage(image, 0, 0, width, height);\r\n return context2d.getImageData(0, 0, width, height).data;\r\n}\r\nexport default getImagePixels;\r\n","import Check from \"./Check.js\";\r\n\r\nconst blobUriRegex = /^blob:/i;\r\n\r\n/**\r\n * Determines if the specified uri is a blob uri.\r\n *\r\n * @function isBlobUri\r\n *\r\n * @param {String} uri The uri to test.\r\n * @returns {Boolean} true when the uri is a blob uri; otherwise, false.\r\n *\r\n * @private\r\n */\r\nfunction isBlobUri(uri) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.string(\"uri\", uri);\r\n //>>includeEnd('debug');\r\n\r\n return blobUriRegex.test(uri);\r\n}\r\nexport default isBlobUri;\r\n","import defined from \"./defined.js\";\r\n\r\nlet a;\r\n\r\n/**\r\n * Given a URL, determine whether that URL is considered cross-origin to the current page.\r\n *\r\n * @private\r\n */\r\nfunction isCrossOriginUrl(url) {\r\n if (!defined(a)) {\r\n a = document.createElement(\"a\");\r\n }\r\n\r\n // copy window location into the anchor to get consistent results\r\n // when the port is default for the protocol (e.g. 80 for HTTP)\r\n a.href = window.location.href;\r\n\r\n // host includes both hostname and port if the port is not standard\r\n const host = a.host;\r\n const protocol = a.protocol;\r\n\r\n a.href = url;\r\n // IE only absolutizes href on get, not set\r\n // eslint-disable-next-line no-self-assign\r\n a.href = a.href;\r\n\r\n return protocol !== a.protocol || host !== a.host;\r\n}\r\nexport default isCrossOriginUrl;\r\n","import Check from \"./Check.js\";\r\n\r\nconst dataUriRegex = /^data:/i;\r\n\r\n/**\r\n * Determines if the specified uri is a data uri.\r\n *\r\n * @function isDataUri\r\n *\r\n * @param {String} uri The uri to test.\r\n * @returns {Boolean} true when the uri is a data uri; otherwise, false.\r\n *\r\n * @private\r\n */\r\nfunction isDataUri(uri) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.string(\"uri\", uri);\r\n //>>includeEnd('debug');\r\n\r\n return dataUriRegex.test(uri);\r\n}\r\nexport default isDataUri;\r\n","/**\r\n * @private\r\n */\r\nfunction loadAndExecuteScript(url) {\r\n const script = document.createElement(\"script\");\r\n script.async = true;\r\n script.src = url;\r\n\r\n return new Promise((resolve, reject) => {\r\n if (window.crossOriginIsolated) {\r\n script.setAttribute(\"crossorigin\", \"anonymous\");\r\n }\r\n\r\n const head = document.getElementsByTagName(\"head\")[0];\r\n script.onload = function () {\r\n script.onload = undefined;\r\n head.removeChild(script);\r\n resolve();\r\n };\r\n script.onerror = function (e) {\r\n reject(e);\r\n };\r\n\r\n head.appendChild(script);\r\n });\r\n}\r\nexport default loadAndExecuteScript;\r\n","import defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Converts an object representing a set of name/value pairs into a query string,\r\n * with names and values encoded properly for use in a URL. Values that are arrays\r\n * will produce multiple values with the same name.\r\n * @function objectToQuery\r\n *\r\n * @param {Object} obj The object containing data to encode.\r\n * @returns {String} An encoded query string.\r\n *\r\n *\r\n * @example\r\n * const str = Cesium.objectToQuery({\r\n * key1 : 'some value',\r\n * key2 : 'a/b',\r\n * key3 : ['x', 'y']\r\n * });\r\n *\r\n * @see queryToObject\r\n * // str will be:\r\n * // 'key1=some%20value&key2=a%2Fb&key3=x&key3=y'\r\n */\r\nfunction objectToQuery(obj) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(obj)) {\r\n throw new DeveloperError(\"obj is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let result = \"\";\r\n for (const propName in obj) {\r\n if (obj.hasOwnProperty(propName)) {\r\n const value = obj[propName];\r\n\r\n const part = `${encodeURIComponent(propName)}=`;\r\n if (Array.isArray(value)) {\r\n for (let i = 0, len = value.length; i < len; ++i) {\r\n result += `${part + encodeURIComponent(value[i])}&`;\r\n }\r\n } else {\r\n result += `${part + encodeURIComponent(value)}&`;\r\n }\r\n }\r\n }\r\n\r\n // trim last &\r\n result = result.slice(0, -1);\r\n\r\n // This function used to replace %20 with + which is more compact and readable.\r\n // However, some servers didn't properly handle + as a space.\r\n // https://github.com/CesiumGS/cesium/issues/2192\r\n\r\n return result;\r\n}\r\nexport default objectToQuery;\r\n","import defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Parses a query string into an object, where the keys and values of the object are the\r\n * name/value pairs from the query string, decoded. If a name appears multiple times,\r\n * the value in the object will be an array of values.\r\n * @function queryToObject\r\n *\r\n * @param {String} queryString The query string.\r\n * @returns {Object} An object containing the parameters parsed from the query string.\r\n *\r\n *\r\n * @example\r\n * const obj = Cesium.queryToObject('key1=some%20value&key2=a%2Fb&key3=x&key3=y');\r\n * // obj will be:\r\n * // {\r\n * // key1 : 'some value',\r\n * // key2 : 'a/b',\r\n * // key3 : ['x', 'y']\r\n * // }\r\n *\r\n * @see objectToQuery\r\n */\r\nfunction queryToObject(queryString) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(queryString)) {\r\n throw new DeveloperError(\"queryString is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const result = {};\r\n if (queryString === \"\") {\r\n return result;\r\n }\r\n const parts = queryString.replace(/\\+/g, \"%20\").split(/[&;]/);\r\n for (let i = 0, len = parts.length; i < len; ++i) {\r\n const subparts = parts[i].split(\"=\");\r\n\r\n const name = decodeURIComponent(subparts[0]);\r\n let value = subparts[1];\r\n if (defined(value)) {\r\n value = decodeURIComponent(value);\r\n } else {\r\n value = \"\";\r\n }\r\n\r\n const resultValue = result[name];\r\n if (typeof resultValue === \"string\") {\r\n // expand the single value to an array\r\n result[name] = [resultValue, value];\r\n } else if (Array.isArray(resultValue)) {\r\n resultValue.push(value);\r\n } else {\r\n result[name] = value;\r\n }\r\n }\r\n return result;\r\n}\r\nexport default queryToObject;\r\n","/**\r\n * State of the request.\r\n *\r\n * @enum {Number}\r\n */\r\nconst RequestState = {\r\n /**\r\n * Initial unissued state.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n UNISSUED: 0,\r\n\r\n /**\r\n * Issued but not yet active. Will become active when open slots are available.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n ISSUED: 1,\r\n\r\n /**\r\n * Actual http request has been sent.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n ACTIVE: 2,\r\n\r\n /**\r\n * Request completed successfully.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n RECEIVED: 3,\r\n\r\n /**\r\n * Request was cancelled, either explicitly or automatically because of low priority.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n CANCELLED: 4,\r\n\r\n /**\r\n * Request failed.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n FAILED: 5,\r\n};\r\nexport default Object.freeze(RequestState);\r\n","/**\r\n * An enum identifying the type of request. Used for finer grained logging and priority sorting.\r\n *\r\n * @enum {Number}\r\n */\r\nconst RequestType = {\r\n /**\r\n * Terrain request.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n TERRAIN: 0,\r\n\r\n /**\r\n * Imagery request.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n IMAGERY: 1,\r\n\r\n /**\r\n * 3D Tiles request.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n TILES3D: 2,\r\n\r\n /**\r\n * Other request.\r\n *\r\n * @type Number\r\n * @constant\r\n */\r\n OTHER: 3,\r\n};\r\nexport default Object.freeze(RequestType);\r\n","import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport RequestState from \"./RequestState.js\";\r\nimport RequestType from \"./RequestType.js\";\r\n\r\n/**\r\n * Stores information for making a request. In general this does not need to be constructed directly.\r\n *\r\n * @alias Request\r\n * @constructor\r\n\r\n * @param {Object} [options] An object with the following properties:\r\n * @param {String} [options.url] The url to request.\r\n * @param {Request.RequestCallback} [options.requestFunction] The function that makes the actual data request.\r\n * @param {Request.CancelCallback} [options.cancelFunction] The function that is called when the request is cancelled.\r\n * @param {Request.PriorityCallback} [options.priorityFunction] The function that is called to update the request's priority, which occurs once per frame.\r\n * @param {Number} [options.priority=0.0] The initial priority of the request.\r\n * @param {Boolean} [options.throttle=false] Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the request will be throttled and sent based on priority.\r\n * @param {Boolean} [options.throttleByServer=false] Whether to throttle the request by server.\r\n * @param {RequestType} [options.type=RequestType.OTHER] The type of request.\r\n */\r\nfunction Request(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const throttleByServer = defaultValue(options.throttleByServer, false);\r\n const throttle = defaultValue(options.throttle, false);\r\n\r\n /**\r\n * The URL to request.\r\n *\r\n * @type {String}\r\n */\r\n this.url = options.url;\r\n\r\n /**\r\n * The function that makes the actual data request.\r\n *\r\n * @type {Request.RequestCallback}\r\n */\r\n this.requestFunction = options.requestFunction;\r\n\r\n /**\r\n * The function that is called when the request is cancelled.\r\n *\r\n * @type {Request.CancelCallback}\r\n */\r\n this.cancelFunction = options.cancelFunction;\r\n\r\n /**\r\n * The function that is called to update the request's priority, which occurs once per frame.\r\n *\r\n * @type {Request.PriorityCallback}\r\n */\r\n this.priorityFunction = options.priorityFunction;\r\n\r\n /**\r\n * Priority is a unit-less value where lower values represent higher priority.\r\n * For world-based objects, this is usually the distance from the camera.\r\n * A request that does not have a priority function defaults to a priority of 0.\r\n *\r\n * If priorityFunction is defined, this value is updated every frame with the result of that call.\r\n *\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.priority = defaultValue(options.priority, 0.0);\r\n\r\n /**\r\n * Whether to throttle and prioritize the request. If false, the request will be sent immediately. If true, the\r\n * request will be throttled and sent based on priority.\r\n *\r\n * @type {Boolean}\r\n * @readonly\r\n *\r\n * @default false\r\n */\r\n this.throttle = throttle;\r\n\r\n /**\r\n * Whether to throttle the request by server. Browsers typically support about 6-8 parallel connections\r\n * for HTTP/1 servers, and an unlimited amount of connections for HTTP/2 servers. Setting this value\r\n * to true is preferable for requests going through HTTP/1 servers.\r\n *\r\n * @type {Boolean}\r\n * @readonly\r\n *\r\n * @default false\r\n */\r\n this.throttleByServer = throttleByServer;\r\n\r\n /**\r\n * Type of request.\r\n *\r\n * @type {RequestType}\r\n * @readonly\r\n *\r\n * @default RequestType.OTHER\r\n */\r\n this.type = defaultValue(options.type, RequestType.OTHER);\r\n\r\n /**\r\n * A key used to identify the server that a request is going to. It is derived from the url's authority and scheme.\r\n *\r\n * @type {String}\r\n *\r\n * @private\r\n */\r\n this.serverKey = undefined;\r\n\r\n /**\r\n * The current state of the request.\r\n *\r\n * @type {RequestState}\r\n * @readonly\r\n */\r\n this.state = RequestState.UNISSUED;\r\n\r\n /**\r\n * The requests's deferred promise.\r\n *\r\n * @type {Object}\r\n *\r\n * @private\r\n */\r\n this.deferred = undefined;\r\n\r\n /**\r\n * Whether the request was explicitly cancelled.\r\n *\r\n * @type {Boolean}\r\n *\r\n * @private\r\n */\r\n this.cancelled = false;\r\n}\r\n\r\n/**\r\n * Mark the request as cancelled.\r\n *\r\n * @private\r\n */\r\nRequest.prototype.cancel = function () {\r\n this.cancelled = true;\r\n};\r\n\r\n/**\r\n * Duplicates a Request instance.\r\n *\r\n * @param {Request} [result] The object onto which to store the result.\r\n *\r\n * @returns {Request} The modified result parameter or a new Resource instance if one was not provided.\r\n */\r\nRequest.prototype.clone = function (result) {\r\n if (!defined(result)) {\r\n return new Request(this);\r\n }\r\n\r\n result.url = this.url;\r\n result.requestFunction = this.requestFunction;\r\n result.cancelFunction = this.cancelFunction;\r\n result.priorityFunction = this.priorityFunction;\r\n result.priority = this.priority;\r\n result.throttle = this.throttle;\r\n result.throttleByServer = this.throttleByServer;\r\n result.type = this.type;\r\n result.serverKey = this.serverKey;\r\n\r\n // These get defaulted because the cloned request hasn't been issued\r\n result.state = this.RequestState.UNISSUED;\r\n result.deferred = undefined;\r\n result.cancelled = false;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * The function that makes the actual data request.\r\n * @callback Request.RequestCallback\r\n * @returns {Promise} A promise for the requested data.\r\n */\r\n\r\n/**\r\n * The function that is called when the request is cancelled.\r\n * @callback Request.CancelCallback\r\n */\r\n\r\n/**\r\n * The function that is called to update the request's priority, which occurs once per frame.\r\n * @callback Request.PriorityCallback\r\n * @returns {Number} The updated priority value.\r\n */\r\nexport default Request;\r\n","/**\r\n * Parses the result of XMLHttpRequest's getAllResponseHeaders() method into\r\n * a dictionary.\r\n *\r\n * @function parseResponseHeaders\r\n *\r\n * @param {String} headerString The header string returned by getAllResponseHeaders(). The format is\r\n * described here: http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders()-method\r\n * @returns {Object} A dictionary of key/value pairs, where each key is the name of a header and the corresponding value\r\n * is that header's value.\r\n *\r\n * @private\r\n */\r\nfunction parseResponseHeaders(headerString) {\r\n const headers = {};\r\n\r\n if (!headerString) {\r\n return headers;\r\n }\r\n\r\n const headerPairs = headerString.split(\"\\u000d\\u000a\");\r\n\r\n for (let i = 0; i < headerPairs.length; ++i) {\r\n const headerPair = headerPairs[i];\r\n // Can't use split() here because it does the wrong thing\r\n // if the header value has the string \": \" in it.\r\n const index = headerPair.indexOf(\"\\u003a\\u0020\");\r\n if (index > 0) {\r\n const key = headerPair.substring(0, index);\r\n const val = headerPair.substring(index + 2);\r\n headers[key] = val;\r\n }\r\n }\r\n\r\n return headers;\r\n}\r\nexport default parseResponseHeaders;\r\n","import defined from \"./defined.js\";\r\nimport parseResponseHeaders from \"./parseResponseHeaders.js\";\r\n\r\n/**\r\n * An event that is raised when a request encounters an error.\r\n *\r\n * @constructor\r\n * @alias RequestErrorEvent\r\n *\r\n * @param {Number} [statusCode] The HTTP error status code, such as 404.\r\n * @param {Object} [response] The response included along with the error.\r\n * @param {String|Object} [responseHeaders] The response headers, represented either as an object literal or as a\r\n * string in the format returned by XMLHttpRequest's getAllResponseHeaders() function.\r\n */\r\nfunction RequestErrorEvent(statusCode, response, responseHeaders) {\r\n /**\r\n * The HTTP error status code, such as 404. If the error does not have a particular\r\n * HTTP code, this property will be undefined.\r\n *\r\n * @type {Number}\r\n */\r\n this.statusCode = statusCode;\r\n\r\n /**\r\n * The response included along with the error. If the error does not include a response,\r\n * this property will be undefined.\r\n *\r\n * @type {Object}\r\n */\r\n this.response = response;\r\n\r\n /**\r\n * The headers included in the response, represented as an object literal of key/value pairs.\r\n * If the error does not include any headers, this property will be undefined.\r\n *\r\n * @type {Object}\r\n */\r\n this.responseHeaders = responseHeaders;\r\n\r\n if (typeof this.responseHeaders === \"string\") {\r\n this.responseHeaders = parseResponseHeaders(this.responseHeaders);\r\n }\r\n}\r\n\r\n/**\r\n * Creates a string representing this RequestErrorEvent.\r\n * @memberof RequestErrorEvent\r\n *\r\n * @returns {String} A string representing the provided RequestErrorEvent.\r\n */\r\nRequestErrorEvent.prototype.toString = function () {\r\n let str = \"Request has failed.\";\r\n if (defined(this.statusCode)) {\r\n str += ` Status Code: ${this.statusCode}`;\r\n }\r\n return str;\r\n};\r\nexport default RequestErrorEvent;\r\n","import Check from \"./Check.js\";\r\nimport defined from \"./defined.js\";\r\n\r\n/**\r\n * A generic utility class for managing subscribers for a particular event.\r\n * This class is usually instantiated inside of a container class and\r\n * exposed as a property for others to subscribe to.\r\n *\r\n * @alias Event\r\n * @template Listener extends (...args: any[]) => void = (...args: any[]) => void\r\n * @constructor\r\n * @example\r\n * MyObject.prototype.myListener = function(arg1, arg2) {\r\n * this.myArg1Copy = arg1;\r\n * this.myArg2Copy = arg2;\r\n * }\r\n *\r\n * const myObjectInstance = new MyObject();\r\n * const evt = new Cesium.Event();\r\n * evt.addEventListener(MyObject.prototype.myListener, myObjectInstance);\r\n * evt.raiseEvent('1', '2');\r\n * evt.removeEventListener(MyObject.prototype.myListener);\r\n */\r\nfunction Event() {\r\n this._listeners = [];\r\n this._scopes = [];\r\n this._toRemove = [];\r\n this._insideRaiseEvent = false;\r\n}\r\n\r\nObject.defineProperties(Event.prototype, {\r\n /**\r\n * The number of listeners currently subscribed to the event.\r\n * @memberof Event.prototype\r\n * @type {Number}\r\n * @readonly\r\n */\r\n numberOfListeners: {\r\n get: function () {\r\n return this._listeners.length - this._toRemove.length;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Registers a callback function to be executed whenever the event is raised.\r\n * An optional scope can be provided to serve as the this pointer\r\n * in which the function will execute.\r\n *\r\n * @param {Listener} listener The function to be executed when the event is raised.\r\n * @param {Object} [scope] An optional object scope to serve as the this\r\n * pointer in which the listener function will execute.\r\n * @returns {Event.RemoveCallback} A function that will remove this event listener when invoked.\r\n *\r\n * @see Event#raiseEvent\r\n * @see Event#removeEventListener\r\n */\r\nEvent.prototype.addEventListener = function (listener, scope) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.func(\"listener\", listener);\r\n //>>includeEnd('debug');\r\n\r\n this._listeners.push(listener);\r\n this._scopes.push(scope);\r\n\r\n const event = this;\r\n return function () {\r\n event.removeEventListener(listener, scope);\r\n };\r\n};\r\n\r\n/**\r\n * Unregisters a previously registered callback.\r\n *\r\n * @param {Listener} listener The function to be unregistered.\r\n * @param {Object} [scope] The scope that was originally passed to addEventListener.\r\n * @returns {Boolean} true if the listener was removed; false if the listener and scope are not registered with the event.\r\n *\r\n * @see Event#addEventListener\r\n * @see Event#raiseEvent\r\n */\r\nEvent.prototype.removeEventListener = function (listener, scope) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.func(\"listener\", listener);\r\n //>>includeEnd('debug');\r\n\r\n const listeners = this._listeners;\r\n const scopes = this._scopes;\r\n\r\n let index = -1;\r\n for (let i = 0; i < listeners.length; i++) {\r\n if (listeners[i] === listener && scopes[i] === scope) {\r\n index = i;\r\n break;\r\n }\r\n }\r\n\r\n if (index !== -1) {\r\n if (this._insideRaiseEvent) {\r\n //In order to allow removing an event subscription from within\r\n //a callback, we don't actually remove the items here. Instead\r\n //remember the index they are at and undefined their value.\r\n this._toRemove.push(index);\r\n listeners[index] = undefined;\r\n scopes[index] = undefined;\r\n } else {\r\n listeners.splice(index, 1);\r\n scopes.splice(index, 1);\r\n }\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nfunction compareNumber(a, b) {\r\n return b - a;\r\n}\r\n\r\n/**\r\n * Raises the event by calling each registered listener with all supplied arguments.\r\n *\r\n * @param {...Parameters} arguments This method takes any number of parameters and passes them through to the listener functions.\r\n *\r\n * @see Event#addEventListener\r\n * @see Event#removeEventListener\r\n */\r\nEvent.prototype.raiseEvent = function () {\r\n this._insideRaiseEvent = true;\r\n\r\n let i;\r\n const listeners = this._listeners;\r\n const scopes = this._scopes;\r\n let length = listeners.length;\r\n\r\n for (i = 0; i < length; i++) {\r\n const listener = listeners[i];\r\n if (defined(listener)) {\r\n listeners[i].apply(scopes[i], arguments);\r\n }\r\n }\r\n\r\n //Actually remove items removed in removeEventListener.\r\n const toRemove = this._toRemove;\r\n length = toRemove.length;\r\n if (length > 0) {\r\n toRemove.sort(compareNumber);\r\n for (i = 0; i < length; i++) {\r\n const index = toRemove[i];\r\n listeners.splice(index, 1);\r\n scopes.splice(index, 1);\r\n }\r\n toRemove.length = 0;\r\n }\r\n\r\n this._insideRaiseEvent = false;\r\n};\r\n\r\n/**\r\n * A function that removes a listener.\r\n * @callback Event.RemoveCallback\r\n */\r\n\r\nexport default Event;\r\n","import Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\n\r\n/**\r\n * Array implementation of a heap.\r\n *\r\n * @alias Heap\r\n * @constructor\r\n * @private\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Heap.ComparatorCallback} options.comparator The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\r\n */\r\nfunction Heap(options) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"options\", options);\r\n Check.defined(\"options.comparator\", options.comparator);\r\n //>>includeEnd('debug');\r\n\r\n this._comparator = options.comparator;\r\n this._array = [];\r\n this._length = 0;\r\n this._maximumLength = undefined;\r\n}\r\n\r\nObject.defineProperties(Heap.prototype, {\r\n /**\r\n * Gets the length of the heap.\r\n *\r\n * @memberof Heap.prototype\r\n *\r\n * @type {Number}\r\n * @readonly\r\n */\r\n length: {\r\n get: function () {\r\n return this._length;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the internal array.\r\n *\r\n * @memberof Heap.prototype\r\n *\r\n * @type {Array}\r\n * @readonly\r\n */\r\n internalArray: {\r\n get: function () {\r\n return this._array;\r\n },\r\n },\r\n\r\n /**\r\n * Gets and sets the maximum length of the heap.\r\n *\r\n * @memberof Heap.prototype\r\n *\r\n * @type {Number}\r\n */\r\n maximumLength: {\r\n get: function () {\r\n return this._maximumLength;\r\n },\r\n set: function (value) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.greaterThanOrEquals(\"maximumLength\", value, 0);\r\n //>>includeEnd('debug');\r\n const originalLength = this._length;\r\n if (value < originalLength) {\r\n const array = this._array;\r\n // Remove trailing references\r\n for (let i = value; i < originalLength; ++i) {\r\n array[i] = undefined;\r\n }\r\n this._length = value;\r\n array.length = value;\r\n }\r\n this._maximumLength = value;\r\n },\r\n },\r\n\r\n /**\r\n * The comparator to use for the heap. If comparator(a, b) is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\r\n *\r\n * @memberof Heap.prototype\r\n *\r\n * @type {Heap.ComparatorCallback}\r\n */\r\n comparator: {\r\n get: function () {\r\n return this._comparator;\r\n },\r\n },\r\n});\r\n\r\nfunction swap(array, a, b) {\r\n const temp = array[a];\r\n array[a] = array[b];\r\n array[b] = temp;\r\n}\r\n\r\n/**\r\n * Resizes the internal array of the heap.\r\n *\r\n * @param {Number} [length] The length to resize internal array to. Defaults to the current length of the heap.\r\n */\r\nHeap.prototype.reserve = function (length) {\r\n length = defaultValue(length, this._length);\r\n this._array.length = length;\r\n};\r\n\r\n/**\r\n * Update the heap so that index and all descendants satisfy the heap property.\r\n *\r\n * @param {Number} [index=0] The starting index to heapify from.\r\n */\r\nHeap.prototype.heapify = function (index) {\r\n index = defaultValue(index, 0);\r\n const length = this._length;\r\n const comparator = this._comparator;\r\n const array = this._array;\r\n let candidate = -1;\r\n let inserting = true;\r\n\r\n while (inserting) {\r\n const right = 2 * (index + 1);\r\n const left = right - 1;\r\n\r\n if (left < length && comparator(array[left], array[index]) < 0) {\r\n candidate = left;\r\n } else {\r\n candidate = index;\r\n }\r\n\r\n if (right < length && comparator(array[right], array[candidate]) < 0) {\r\n candidate = right;\r\n }\r\n if (candidate !== index) {\r\n swap(array, candidate, index);\r\n index = candidate;\r\n } else {\r\n inserting = false;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Resort the heap.\r\n */\r\nHeap.prototype.resort = function () {\r\n const length = this._length;\r\n for (let i = Math.ceil(length / 2); i >= 0; --i) {\r\n this.heapify(i);\r\n }\r\n};\r\n\r\n/**\r\n * Insert an element into the heap. If the length would grow greater than maximumLength\r\n * of the heap, extra elements are removed.\r\n *\r\n * @param {*} element The element to insert\r\n *\r\n * @return {*} The element that was removed from the heap if the heap is at full capacity.\r\n */\r\nHeap.prototype.insert = function (element) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"element\", element);\r\n //>>includeEnd('debug');\r\n\r\n const array = this._array;\r\n const comparator = this._comparator;\r\n const maximumLength = this._maximumLength;\r\n\r\n let index = this._length++;\r\n if (index < array.length) {\r\n array[index] = element;\r\n } else {\r\n array.push(element);\r\n }\r\n\r\n while (index !== 0) {\r\n const parent = Math.floor((index - 1) / 2);\r\n if (comparator(array[index], array[parent]) < 0) {\r\n swap(array, index, parent);\r\n index = parent;\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n let removedElement;\r\n\r\n if (defined(maximumLength) && this._length > maximumLength) {\r\n removedElement = array[maximumLength];\r\n this._length = maximumLength;\r\n }\r\n\r\n return removedElement;\r\n};\r\n\r\n/**\r\n * Remove the element specified by index from the heap and return it.\r\n *\r\n * @param {Number} [index=0] The index to remove.\r\n * @returns {*} The specified element of the heap.\r\n */\r\nHeap.prototype.pop = function (index) {\r\n index = defaultValue(index, 0);\r\n if (this._length === 0) {\r\n return undefined;\r\n }\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number.lessThan(\"index\", index, this._length);\r\n //>>includeEnd('debug');\r\n\r\n const array = this._array;\r\n const root = array[index];\r\n swap(array, index, --this._length);\r\n this.heapify(index);\r\n array[this._length] = undefined; // Remove trailing reference\r\n return root;\r\n};\r\n\r\n/**\r\n * The comparator to use for the heap.\r\n * @callback Heap.ComparatorCallback\r\n * @param {*} a An element in the heap.\r\n * @param {*} b An element in the heap.\r\n * @returns {Number} If the result of the comparison is less than 0, sort a to a lower index than b, otherwise sort to a higher index.\r\n */\r\nexport default Heap;\r\n","import Uri from \"urijs\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defer from \"./defer.js\";\r\nimport defined from \"./defined.js\";\r\nimport Event from \"./Event.js\";\r\nimport Heap from \"./Heap.js\";\r\nimport isBlobUri from \"./isBlobUri.js\";\r\nimport isDataUri from \"./isDataUri.js\";\r\nimport RequestState from \"./RequestState.js\";\r\n\r\nfunction sortRequests(a, b) {\r\n return a.priority - b.priority;\r\n}\r\n\r\nconst statistics = {\r\n numberOfAttemptedRequests: 0,\r\n numberOfActiveRequests: 0,\r\n numberOfCancelledRequests: 0,\r\n numberOfCancelledActiveRequests: 0,\r\n numberOfFailedRequests: 0,\r\n numberOfActiveRequestsEver: 0,\r\n lastNumberOfActiveRequests: 0,\r\n};\r\n\r\nlet priorityHeapLength = 20;\r\nconst requestHeap = new Heap({\r\n comparator: sortRequests,\r\n});\r\nrequestHeap.maximumLength = priorityHeapLength;\r\nrequestHeap.reserve(priorityHeapLength);\r\n\r\nconst activeRequests = [];\r\nlet numberOfActiveRequestsByServer = {};\r\n\r\nconst pageUri =\r\n typeof document !== \"undefined\" ? new Uri(document.location.href) : new Uri();\r\n\r\nconst requestCompletedEvent = new Event();\r\n\r\n/**\r\n * The request scheduler is used to track and constrain the number of active requests in order to prioritize incoming requests. The ability\r\n * to retain control over the number of requests in CesiumJS is important because due to events such as changes in the camera position,\r\n * a lot of new requests may be generated and a lot of in-flight requests may become redundant. The request scheduler manually constrains the\r\n * number of requests so that newer requests wait in a shorter queue and don't have to compete for bandwidth with requests that have expired.\r\n *\r\n * @namespace RequestScheduler\r\n *\r\n */\r\nfunction RequestScheduler() {}\r\n\r\n/**\r\n * The maximum number of simultaneous active requests. Un-throttled requests do not observe this limit.\r\n * @type {Number}\r\n * @default 50\r\n */\r\nRequestScheduler.maximumRequests = 50;\r\n\r\n/**\r\n * The maximum number of simultaneous active requests per server. Un-throttled requests or servers specifically\r\n * listed in {@link requestsByServer} do not observe this limit.\r\n * @type {Number}\r\n * @default 6\r\n */\r\nRequestScheduler.maximumRequestsPerServer = 6;\r\n\r\n/**\r\n * A per server key list of overrides to use for throttling instead of maximumRequestsPerServer\r\n * @type {Object}\r\n *\r\n * @example\r\n * RequestScheduler.requestsByServer = {\r\n * 'api.cesium.com:443': 18,\r\n * 'assets.cesium.com:443': 18\r\n * };\r\n */\r\nRequestScheduler.requestsByServer = {\r\n \"api.cesium.com:443\": 18,\r\n \"assets.cesium.com:443\": 18,\r\n};\r\n\r\n/**\r\n * Specifies if the request scheduler should throttle incoming requests, or let the browser queue requests under its control.\r\n * @type {Boolean}\r\n * @default true\r\n */\r\nRequestScheduler.throttleRequests = true;\r\n\r\n/**\r\n * When true, log statistics to the console every frame\r\n * @type {Boolean}\r\n * @default false\r\n * @private\r\n */\r\nRequestScheduler.debugShowStatistics = false;\r\n\r\n/**\r\n * An event that's raised when a request is completed. Event handlers are passed\r\n * the error object if the request fails.\r\n *\r\n * @type {Event}\r\n * @default Event()\r\n * @private\r\n */\r\nRequestScheduler.requestCompletedEvent = requestCompletedEvent;\r\n\r\nObject.defineProperties(RequestScheduler, {\r\n /**\r\n * Returns the statistics used by the request scheduler.\r\n *\r\n * @memberof RequestScheduler\r\n *\r\n * @type Object\r\n * @readonly\r\n * @private\r\n */\r\n statistics: {\r\n get: function () {\r\n return statistics;\r\n },\r\n },\r\n\r\n /**\r\n * The maximum size of the priority heap. This limits the number of requests that are sorted by priority. Only applies to requests that are not yet active.\r\n *\r\n * @memberof RequestScheduler\r\n *\r\n * @type {Number}\r\n * @default 20\r\n * @private\r\n */\r\n priorityHeapLength: {\r\n get: function () {\r\n return priorityHeapLength;\r\n },\r\n set: function (value) {\r\n // If the new length shrinks the heap, need to cancel some of the requests.\r\n // Since this value is not intended to be tweaked regularly it is fine to just cancel the high priority requests.\r\n if (value < priorityHeapLength) {\r\n while (requestHeap.length > value) {\r\n const request = requestHeap.pop();\r\n cancelRequest(request);\r\n }\r\n }\r\n priorityHeapLength = value;\r\n requestHeap.maximumLength = value;\r\n requestHeap.reserve(value);\r\n },\r\n },\r\n});\r\n\r\nfunction updatePriority(request) {\r\n if (defined(request.priorityFunction)) {\r\n request.priority = request.priorityFunction();\r\n }\r\n}\r\n\r\n/**\r\n * Check if there are open slots for a particular server key. If desiredRequests is greater than 1, this checks if the queue has room for scheduling multiple requests.\r\n * @param {String} serverKey The server key returned by {@link RequestScheduler.getServerKey}.\r\n * @param {Number} [desiredRequests=1] How many requests the caller plans to request\r\n * @return {Boolean} True if there are enough open slots for desiredRequests more requests.\r\n * @private\r\n */\r\nRequestScheduler.serverHasOpenSlots = function (serverKey, desiredRequests) {\r\n desiredRequests = defaultValue(desiredRequests, 1);\r\n\r\n const maxRequests = defaultValue(\r\n RequestScheduler.requestsByServer[serverKey],\r\n RequestScheduler.maximumRequestsPerServer\r\n );\r\n const hasOpenSlotsServer =\r\n numberOfActiveRequestsByServer[serverKey] + desiredRequests <= maxRequests;\r\n\r\n return hasOpenSlotsServer;\r\n};\r\n\r\n/**\r\n * Check if the priority heap has open slots, regardless of which server they\r\n * are from. This is used in {@link Multiple3DTileContent} for determining when\r\n * all requests can be scheduled\r\n * @param {Number} desiredRequests The number of requests the caller intends to make\r\n * @return {Boolean} true if the heap has enough available slots to meet the desiredRequests. false otherwise.\r\n *\r\n * @private\r\n */\r\nRequestScheduler.heapHasOpenSlots = function (desiredRequests) {\r\n const hasOpenSlotsHeap =\r\n requestHeap.length + desiredRequests <= priorityHeapLength;\r\n return hasOpenSlotsHeap;\r\n};\r\n\r\nfunction issueRequest(request) {\r\n if (request.state === RequestState.UNISSUED) {\r\n request.state = RequestState.ISSUED;\r\n request.deferred = defer();\r\n }\r\n return request.deferred.promise;\r\n}\r\n\r\nfunction getRequestReceivedFunction(request) {\r\n return function (results) {\r\n if (request.state === RequestState.CANCELLED) {\r\n // If the data request comes back but the request is cancelled, ignore it.\r\n return;\r\n }\r\n // explicitly set to undefined to ensure GC of request response data. See #8843\r\n const deferred = request.deferred;\r\n\r\n --statistics.numberOfActiveRequests;\r\n --numberOfActiveRequestsByServer[request.serverKey];\r\n requestCompletedEvent.raiseEvent();\r\n request.state = RequestState.RECEIVED;\r\n request.deferred = undefined;\r\n\r\n deferred.resolve(results);\r\n };\r\n}\r\n\r\nfunction getRequestFailedFunction(request) {\r\n return function (error) {\r\n if (request.state === RequestState.CANCELLED) {\r\n // If the data request comes back but the request is cancelled, ignore it.\r\n return;\r\n }\r\n ++statistics.numberOfFailedRequests;\r\n --statistics.numberOfActiveRequests;\r\n --numberOfActiveRequestsByServer[request.serverKey];\r\n requestCompletedEvent.raiseEvent(error);\r\n request.state = RequestState.FAILED;\r\n request.deferred.reject(error);\r\n };\r\n}\r\n\r\nfunction startRequest(request) {\r\n const promise = issueRequest(request);\r\n request.state = RequestState.ACTIVE;\r\n activeRequests.push(request);\r\n ++statistics.numberOfActiveRequests;\r\n ++statistics.numberOfActiveRequestsEver;\r\n ++numberOfActiveRequestsByServer[request.serverKey];\r\n request\r\n .requestFunction()\r\n .then(getRequestReceivedFunction(request))\r\n .catch(getRequestFailedFunction(request));\r\n return promise;\r\n}\r\n\r\nfunction cancelRequest(request) {\r\n const active = request.state === RequestState.ACTIVE;\r\n request.state = RequestState.CANCELLED;\r\n ++statistics.numberOfCancelledRequests;\r\n // check that deferred has not been cleared since cancelRequest can be called\r\n // on a finished request, e.g. by clearForSpecs during tests\r\n if (defined(request.deferred)) {\r\n const deferred = request.deferred;\r\n request.deferred = undefined;\r\n deferred.reject();\r\n }\r\n\r\n if (active) {\r\n --statistics.numberOfActiveRequests;\r\n --numberOfActiveRequestsByServer[request.serverKey];\r\n ++statistics.numberOfCancelledActiveRequests;\r\n }\r\n\r\n if (defined(request.cancelFunction)) {\r\n request.cancelFunction();\r\n }\r\n}\r\n\r\n/**\r\n * Sort requests by priority and start requests.\r\n * @private\r\n */\r\nRequestScheduler.update = function () {\r\n let i;\r\n let request;\r\n\r\n // Loop over all active requests. Cancelled, failed, or received requests are removed from the array to make room for new requests.\r\n let removeCount = 0;\r\n const activeLength = activeRequests.length;\r\n for (i = 0; i < activeLength; ++i) {\r\n request = activeRequests[i];\r\n if (request.cancelled) {\r\n // Request was explicitly cancelled\r\n cancelRequest(request);\r\n }\r\n if (request.state !== RequestState.ACTIVE) {\r\n // Request is no longer active, remove from array\r\n ++removeCount;\r\n continue;\r\n }\r\n if (removeCount > 0) {\r\n // Shift back to fill in vacated slots from completed requests\r\n activeRequests[i - removeCount] = request;\r\n }\r\n }\r\n activeRequests.length -= removeCount;\r\n\r\n // Update priority of issued requests and resort the heap\r\n const issuedRequests = requestHeap.internalArray;\r\n const issuedLength = requestHeap.length;\r\n for (i = 0; i < issuedLength; ++i) {\r\n updatePriority(issuedRequests[i]);\r\n }\r\n requestHeap.resort();\r\n\r\n // Get the number of open slots and fill with the highest priority requests.\r\n // Un-throttled requests are automatically added to activeRequests, so activeRequests.length may exceed maximumRequests\r\n const openSlots = Math.max(\r\n RequestScheduler.maximumRequests - activeRequests.length,\r\n 0\r\n );\r\n let filledSlots = 0;\r\n while (filledSlots < openSlots && requestHeap.length > 0) {\r\n // Loop until all open slots are filled or the heap becomes empty\r\n request = requestHeap.pop();\r\n if (request.cancelled) {\r\n // Request was explicitly cancelled\r\n cancelRequest(request);\r\n continue;\r\n }\r\n\r\n if (\r\n request.throttleByServer &&\r\n !RequestScheduler.serverHasOpenSlots(request.serverKey)\r\n ) {\r\n // Open slots are available, but the request is throttled by its server. Cancel and try again later.\r\n cancelRequest(request);\r\n continue;\r\n }\r\n\r\n startRequest(request);\r\n ++filledSlots;\r\n }\r\n\r\n updateStatistics();\r\n};\r\n\r\n/**\r\n * Get the server key from a given url.\r\n *\r\n * @param {String} url The url.\r\n * @returns {String} The server key.\r\n * @private\r\n */\r\nRequestScheduler.getServerKey = function (url) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.string(\"url\", url);\r\n //>>includeEnd('debug');\r\n\r\n let uri = new Uri(url);\r\n if (uri.scheme() === \"\") {\r\n uri = new Uri(url).absoluteTo(pageUri);\r\n uri.normalize();\r\n }\r\n\r\n let serverKey = uri.authority();\r\n if (!/:/.test(serverKey)) {\r\n // If the authority does not contain a port number, add port 443 for https or port 80 for http\r\n serverKey = `${serverKey}:${uri.scheme() === \"https\" ? \"443\" : \"80\"}`;\r\n }\r\n\r\n const length = numberOfActiveRequestsByServer[serverKey];\r\n if (!defined(length)) {\r\n numberOfActiveRequestsByServer[serverKey] = 0;\r\n }\r\n\r\n return serverKey;\r\n};\r\n\r\n/**\r\n * Issue a request. If request.throttle is false, the request is sent immediately. Otherwise the request will be\r\n * queued and sorted by priority before being sent.\r\n *\r\n * @param {Request} request The request object.\r\n *\r\n * @returns {Promise|undefined} A Promise for the requested data, or undefined if this request does not have high enough priority to be issued.\r\n *\r\n * @private\r\n */\r\nRequestScheduler.request = function (request) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"request\", request);\r\n Check.typeOf.string(\"request.url\", request.url);\r\n Check.typeOf.func(\"request.requestFunction\", request.requestFunction);\r\n //>>includeEnd('debug');\r\n\r\n if (isDataUri(request.url) || isBlobUri(request.url)) {\r\n requestCompletedEvent.raiseEvent();\r\n request.state = RequestState.RECEIVED;\r\n return request.requestFunction();\r\n }\r\n\r\n ++statistics.numberOfAttemptedRequests;\r\n\r\n if (!defined(request.serverKey)) {\r\n request.serverKey = RequestScheduler.getServerKey(request.url);\r\n }\r\n\r\n if (\r\n RequestScheduler.throttleRequests &&\r\n request.throttleByServer &&\r\n !RequestScheduler.serverHasOpenSlots(request.serverKey)\r\n ) {\r\n // Server is saturated. Try again later.\r\n return undefined;\r\n }\r\n\r\n if (!RequestScheduler.throttleRequests || !request.throttle) {\r\n return startRequest(request);\r\n }\r\n\r\n if (activeRequests.length >= RequestScheduler.maximumRequests) {\r\n // Active requests are saturated. Try again later.\r\n return undefined;\r\n }\r\n\r\n // Insert into the priority heap and see if a request was bumped off. If this request is the lowest\r\n // priority it will be returned.\r\n updatePriority(request);\r\n const removedRequest = requestHeap.insert(request);\r\n\r\n if (defined(removedRequest)) {\r\n if (removedRequest === request) {\r\n // Request does not have high enough priority to be issued\r\n return undefined;\r\n }\r\n // A previously issued request has been bumped off the priority heap, so cancel it\r\n cancelRequest(removedRequest);\r\n }\r\n\r\n return issueRequest(request);\r\n};\r\n\r\nfunction updateStatistics() {\r\n if (!RequestScheduler.debugShowStatistics) {\r\n return;\r\n }\r\n\r\n if (\r\n statistics.numberOfActiveRequests === 0 &&\r\n statistics.lastNumberOfActiveRequests > 0\r\n ) {\r\n if (statistics.numberOfAttemptedRequests > 0) {\r\n console.log(\r\n `Number of attempted requests: ${statistics.numberOfAttemptedRequests}`\r\n );\r\n statistics.numberOfAttemptedRequests = 0;\r\n }\r\n\r\n if (statistics.numberOfCancelledRequests > 0) {\r\n console.log(\r\n `Number of cancelled requests: ${statistics.numberOfCancelledRequests}`\r\n );\r\n statistics.numberOfCancelledRequests = 0;\r\n }\r\n\r\n if (statistics.numberOfCancelledActiveRequests > 0) {\r\n console.log(\r\n `Number of cancelled active requests: ${statistics.numberOfCancelledActiveRequests}`\r\n );\r\n statistics.numberOfCancelledActiveRequests = 0;\r\n }\r\n\r\n if (statistics.numberOfFailedRequests > 0) {\r\n console.log(\r\n `Number of failed requests: ${statistics.numberOfFailedRequests}`\r\n );\r\n statistics.numberOfFailedRequests = 0;\r\n }\r\n }\r\n\r\n statistics.lastNumberOfActiveRequests = statistics.numberOfActiveRequests;\r\n}\r\n\r\n/**\r\n * For testing only. Clears any requests that may not have completed from previous tests.\r\n *\r\n * @private\r\n */\r\nRequestScheduler.clearForSpecs = function () {\r\n while (requestHeap.length > 0) {\r\n const request = requestHeap.pop();\r\n cancelRequest(request);\r\n }\r\n const length = activeRequests.length;\r\n for (let i = 0; i < length; ++i) {\r\n cancelRequest(activeRequests[i]);\r\n }\r\n activeRequests.length = 0;\r\n numberOfActiveRequestsByServer = {};\r\n\r\n // Clear stats\r\n statistics.numberOfAttemptedRequests = 0;\r\n statistics.numberOfActiveRequests = 0;\r\n statistics.numberOfCancelledRequests = 0;\r\n statistics.numberOfCancelledActiveRequests = 0;\r\n statistics.numberOfFailedRequests = 0;\r\n statistics.numberOfActiveRequestsEver = 0;\r\n statistics.lastNumberOfActiveRequests = 0;\r\n};\r\n\r\n/**\r\n * For testing only.\r\n *\r\n * @private\r\n */\r\nRequestScheduler.numberOfActiveRequestsByServer = function (serverKey) {\r\n return numberOfActiveRequestsByServer[serverKey];\r\n};\r\n\r\n/**\r\n * For testing only.\r\n *\r\n * @private\r\n */\r\nRequestScheduler.requestHeap = requestHeap;\r\nexport default RequestScheduler;\r\n","import Uri from \"urijs\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * A singleton that contains all of the servers that are trusted. Credentials will be sent with\r\n * any requests to these servers.\r\n *\r\n * @namespace TrustedServers\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n */\r\nconst TrustedServers = {};\r\nlet _servers = {};\r\n\r\n/**\r\n * Adds a trusted server to the registry\r\n *\r\n * @param {String} host The host to be added.\r\n * @param {Number} port The port used to access the host.\r\n *\r\n * @example\r\n * // Add a trusted server\r\n * TrustedServers.add('my.server.com', 80);\r\n */\r\nTrustedServers.add = function (host, port) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(host)) {\r\n throw new DeveloperError(\"host is required.\");\r\n }\r\n if (!defined(port) || port <= 0) {\r\n throw new DeveloperError(\"port is required to be greater than 0.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const authority = `${host.toLowerCase()}:${port}`;\r\n if (!defined(_servers[authority])) {\r\n _servers[authority] = true;\r\n }\r\n};\r\n\r\n/**\r\n * Removes a trusted server from the registry\r\n *\r\n * @param {String} host The host to be removed.\r\n * @param {Number} port The port used to access the host.\r\n *\r\n * @example\r\n * // Remove a trusted server\r\n * TrustedServers.remove('my.server.com', 80);\r\n */\r\nTrustedServers.remove = function (host, port) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(host)) {\r\n throw new DeveloperError(\"host is required.\");\r\n }\r\n if (!defined(port) || port <= 0) {\r\n throw new DeveloperError(\"port is required to be greater than 0.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const authority = `${host.toLowerCase()}:${port}`;\r\n if (defined(_servers[authority])) {\r\n delete _servers[authority];\r\n }\r\n};\r\n\r\nfunction getAuthority(url) {\r\n const uri = new Uri(url);\r\n uri.normalize();\r\n\r\n // Removes username:password@ so we just have host[:port]\r\n let authority = uri.authority();\r\n if (authority.length === 0) {\r\n return undefined; // Relative URL\r\n }\r\n uri.authority(authority);\r\n\r\n if (authority.indexOf(\"@\") !== -1) {\r\n const parts = authority.split(\"@\");\r\n authority = parts[1];\r\n }\r\n\r\n // If the port is missing add one based on the scheme\r\n if (authority.indexOf(\":\") === -1) {\r\n let scheme = uri.scheme();\r\n if (scheme.length === 0) {\r\n scheme = window.location.protocol;\r\n scheme = scheme.substring(0, scheme.length - 1);\r\n }\r\n if (scheme === \"http\") {\r\n authority += \":80\";\r\n } else if (scheme === \"https\") {\r\n authority += \":443\";\r\n } else {\r\n return undefined;\r\n }\r\n }\r\n\r\n return authority;\r\n}\r\n\r\n/**\r\n * Tests whether a server is trusted or not. The server must have been added with the port if it is included in the url.\r\n *\r\n * @param {String} url The url to be tested against the trusted list\r\n *\r\n * @returns {boolean} Returns true if url is trusted, false otherwise.\r\n *\r\n * @example\r\n * // Add server\r\n * TrustedServers.add('my.server.com', 81);\r\n *\r\n * // Check if server is trusted\r\n * if (TrustedServers.contains('https://my.server.com:81/path/to/file.png')) {\r\n * // my.server.com:81 is trusted\r\n * }\r\n * if (TrustedServers.contains('https://my.server.com/path/to/file.png')) {\r\n * // my.server.com isn't trusted\r\n * }\r\n */\r\nTrustedServers.contains = function (url) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(url)) {\r\n throw new DeveloperError(\"url is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n const authority = getAuthority(url);\r\n if (defined(authority) && defined(_servers[authority])) {\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Clears the registry\r\n *\r\n * @example\r\n * // Remove a trusted server\r\n * TrustedServers.clear();\r\n */\r\nTrustedServers.clear = function () {\r\n _servers = {};\r\n};\r\nexport default TrustedServers;\r\n","import Uri from \"urijs\";\r\nimport appendForwardSlash from \"./appendForwardSlash.js\";\r\nimport Check from \"./Check.js\";\r\nimport clone from \"./clone.js\";\r\nimport combine from \"./combine.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defer from \"./defer.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport getAbsoluteUri from \"./getAbsoluteUri.js\";\r\nimport getBaseUri from \"./getBaseUri.js\";\r\nimport getExtensionFromUri from \"./getExtensionFromUri.js\";\r\nimport getImagePixels from \"./getImagePixels.js\";\r\nimport isBlobUri from \"./isBlobUri.js\";\r\nimport isCrossOriginUrl from \"./isCrossOriginUrl.js\";\r\nimport isDataUri from \"./isDataUri.js\";\r\nimport loadAndExecuteScript from \"./loadAndExecuteScript.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport objectToQuery from \"./objectToQuery.js\";\r\nimport queryToObject from \"./queryToObject.js\";\r\nimport Request from \"./Request.js\";\r\nimport RequestErrorEvent from \"./RequestErrorEvent.js\";\r\nimport RequestScheduler from \"./RequestScheduler.js\";\r\nimport RequestState from \"./RequestState.js\";\r\nimport RuntimeError from \"./RuntimeError.js\";\r\nimport TrustedServers from \"./TrustedServers.js\";\r\n\r\nconst xhrBlobSupported = (function () {\r\n try {\r\n const xhr = new XMLHttpRequest();\r\n xhr.open(\"GET\", \"#\", true);\r\n xhr.responseType = \"blob\";\r\n return xhr.responseType === \"blob\";\r\n } catch (e) {\r\n return false;\r\n }\r\n})();\r\n\r\n/**\r\n * Parses a query string and returns the object equivalent.\r\n *\r\n * @param {Uri} uri The Uri with a query object.\r\n * @param {Resource} resource The Resource that will be assigned queryParameters.\r\n * @param {Boolean} merge If true, we'll merge with the resource's existing queryParameters. Otherwise they will be replaced.\r\n * @param {Boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in uri will take precedence.\r\n *\r\n * @private\r\n */\r\nfunction parseQuery(uri, resource, merge, preserveQueryParameters) {\r\n const queryString = uri.query();\r\n if (queryString.length === 0) {\r\n return {};\r\n }\r\n\r\n let query;\r\n // Special case we run into where the querystring is just a string, not key/value pairs\r\n if (queryString.indexOf(\"=\") === -1) {\r\n const result = {};\r\n result[queryString] = undefined;\r\n query = result;\r\n } else {\r\n query = queryToObject(queryString);\r\n }\r\n\r\n if (merge) {\r\n resource._queryParameters = combineQueryParameters(\r\n query,\r\n resource._queryParameters,\r\n preserveQueryParameters\r\n );\r\n } else {\r\n resource._queryParameters = query;\r\n }\r\n uri.search(\"\");\r\n}\r\n\r\n/**\r\n * Converts a query object into a string.\r\n *\r\n * @param {Uri} uri The Uri object that will have the query object set.\r\n * @param {Resource} resource The resource that has queryParameters\r\n *\r\n * @private\r\n */\r\nfunction stringifyQuery(uri, resource) {\r\n const queryObject = resource._queryParameters;\r\n\r\n const keys = Object.keys(queryObject);\r\n\r\n // We have 1 key with an undefined value, so this is just a string, not key/value pairs\r\n if (keys.length === 1 && !defined(queryObject[keys[0]])) {\r\n uri.search(keys[0]);\r\n } else {\r\n uri.search(objectToQuery(queryObject));\r\n }\r\n}\r\n\r\n/**\r\n * Clones a value if it is defined, otherwise returns the default value\r\n *\r\n * @param {*} [val] The value to clone.\r\n * @param {*} [defaultVal] The default value.\r\n *\r\n * @returns {*} A clone of val or the defaultVal.\r\n *\r\n * @private\r\n */\r\nfunction defaultClone(val, defaultVal) {\r\n if (!defined(val)) {\r\n return defaultVal;\r\n }\r\n\r\n return defined(val.clone) ? val.clone() : clone(val);\r\n}\r\n\r\n/**\r\n * Checks to make sure the Resource isn't already being requested.\r\n *\r\n * @param {Request} request The request to check.\r\n *\r\n * @private\r\n */\r\nfunction checkAndResetRequest(request) {\r\n if (\r\n request.state === RequestState.ISSUED ||\r\n request.state === RequestState.ACTIVE\r\n ) {\r\n throw new RuntimeError(\"The Resource is already being fetched.\");\r\n }\r\n\r\n request.state = RequestState.UNISSUED;\r\n request.deferred = undefined;\r\n}\r\n\r\n/**\r\n * This combines a map of query parameters.\r\n *\r\n * @param {Object} q1 The first map of query parameters. Values in this map will take precedence if preserveQueryParameters is false.\r\n * @param {Object} q2 The second map of query parameters.\r\n * @param {Boolean} preserveQueryParameters If true duplicate parameters will be concatenated into an array. If false, keys in q1 will take precedence.\r\n *\r\n * @returns {Object} The combined map of query parameters.\r\n *\r\n * @example\r\n * const q1 = {\r\n * a: 1,\r\n * b: 2\r\n * };\r\n * const q2 = {\r\n * a: 3,\r\n * c: 4\r\n * };\r\n * const q3 = {\r\n * b: [5, 6],\r\n * d: 7\r\n * }\r\n *\r\n * // Returns\r\n * // {\r\n * // a: [1, 3],\r\n * // b: 2,\r\n * // c: 4\r\n * // };\r\n * combineQueryParameters(q1, q2, true);\r\n *\r\n * // Returns\r\n * // {\r\n * // a: 1,\r\n * // b: 2,\r\n * // c: 4\r\n * // };\r\n * combineQueryParameters(q1, q2, false);\r\n *\r\n * // Returns\r\n * // {\r\n * // a: 1,\r\n * // b: [2, 5, 6],\r\n * // d: 7\r\n * // };\r\n * combineQueryParameters(q1, q3, true);\r\n *\r\n * // Returns\r\n * // {\r\n * // a: 1,\r\n * // b: 2,\r\n * // d: 7\r\n * // };\r\n * combineQueryParameters(q1, q3, false);\r\n *\r\n * @private\r\n */\r\nfunction combineQueryParameters(q1, q2, preserveQueryParameters) {\r\n if (!preserveQueryParameters) {\r\n return combine(q1, q2);\r\n }\r\n\r\n const result = clone(q1, true);\r\n for (const param in q2) {\r\n if (q2.hasOwnProperty(param)) {\r\n let value = result[param];\r\n const q2Value = q2[param];\r\n if (defined(value)) {\r\n if (!Array.isArray(value)) {\r\n value = result[param] = [value];\r\n }\r\n\r\n result[param] = value.concat(q2Value);\r\n } else {\r\n result[param] = Array.isArray(q2Value) ? q2Value.slice() : q2Value;\r\n }\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\n/**\r\n * @typedef {Object} Resource.ConstructorOptions\r\n *\r\n * Initialization options for the Resource constructor\r\n *\r\n * @property {String} url The url of the resource.\r\n * @property {Object} [queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @property {Object} [templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @property {Object} [headers={}] Additional HTTP headers that will be sent.\r\n * @property {Proxy} [proxy] A proxy to be used when loading the resource.\r\n * @property {Resource.RetryCallback} [retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @property {Number} [retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @property {Request} [request] A Request object that will be used. Intended for internal use only.\r\n */\r\n\r\n/**\r\n * A resource that includes the location and any other parameters we need to retrieve it or create derived resources. It also provides the ability to retry requests.\r\n *\r\n * @alias Resource\r\n * @constructor\r\n *\r\n * @param {String|Resource.ConstructorOptions} options A url or an object describing initialization options\r\n *\r\n * @example\r\n * function refreshTokenRetryCallback(resource, error) {\r\n * if (error.statusCode === 403) {\r\n * // 403 status code means a new token should be generated\r\n * return getNewAccessToken()\r\n * .then(function(token) {\r\n * resource.queryParameters.access_token = token;\r\n * return true;\r\n * })\r\n * .catch(function() {\r\n * return false;\r\n * });\r\n * }\r\n *\r\n * return false;\r\n * }\r\n *\r\n * const resource = new Resource({\r\n * url: 'http://server.com/path/to/resource.json',\r\n * proxy: new DefaultProxy('/proxy/'),\r\n * headers: {\r\n * 'X-My-Header': 'valueOfHeader'\r\n * },\r\n * queryParameters: {\r\n * 'access_token': '123-435-456-000'\r\n * },\r\n * retryCallback: refreshTokenRetryCallback,\r\n * retryAttempts: 1\r\n * });\r\n */\r\nfunction Resource(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n if (typeof options === \"string\") {\r\n options = {\r\n url: options,\r\n };\r\n }\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.string(\"options.url\", options.url);\r\n //>>includeEnd('debug');\r\n\r\n this._url = undefined;\r\n this._templateValues = defaultClone(options.templateValues, {});\r\n this._queryParameters = defaultClone(options.queryParameters, {});\r\n\r\n /**\r\n * Additional HTTP headers that will be sent with the request.\r\n *\r\n * @type {Object}\r\n */\r\n this.headers = defaultClone(options.headers, {});\r\n\r\n /**\r\n * A Request object that will be used. Intended for internal use only.\r\n *\r\n * @type {Request}\r\n */\r\n this.request = defaultValue(options.request, new Request());\r\n\r\n /**\r\n * A proxy to be used when loading the resource.\r\n *\r\n * @type {Proxy}\r\n */\r\n this.proxy = options.proxy;\r\n\r\n /**\r\n * Function to call when a request for this resource fails. If it returns true or a Promise that resolves to true, the request will be retried.\r\n *\r\n * @type {Function}\r\n */\r\n this.retryCallback = options.retryCallback;\r\n\r\n /**\r\n * The number of times the retryCallback should be called before giving up.\r\n *\r\n * @type {Number}\r\n */\r\n this.retryAttempts = defaultValue(options.retryAttempts, 0);\r\n this._retryCount = 0;\r\n\r\n const uri = new Uri(options.url);\r\n parseQuery(uri, this, true, true);\r\n\r\n // Remove the fragment as it's not sent with a request\r\n uri.fragment(\"\");\r\n\r\n this._url = uri.toString();\r\n}\r\n\r\n/**\r\n * A helper function to create a resource depending on whether we have a String or a Resource\r\n *\r\n * @param {Resource|String} resource A Resource or a String to use when creating a new Resource.\r\n *\r\n * @returns {Resource} If resource is a String, a Resource constructed with the url and options. Otherwise the resource parameter is returned.\r\n *\r\n * @private\r\n */\r\nResource.createIfNeeded = function (resource) {\r\n if (resource instanceof Resource) {\r\n // Keep existing request object. This function is used internally to duplicate a Resource, so that it can't\r\n // be modified outside of a class that holds it (eg. an imagery or terrain provider). Since the Request objects\r\n // are managed outside of the providers, by the tile loading code, we want to keep the request property the same so if it is changed\r\n // in the underlying tiling code the requests for this resource will use it.\r\n return resource.getDerivedResource({\r\n request: resource.request,\r\n });\r\n }\r\n\r\n if (typeof resource !== \"string\") {\r\n return resource;\r\n }\r\n\r\n return new Resource({\r\n url: resource,\r\n });\r\n};\r\n\r\nlet supportsImageBitmapOptionsPromise;\r\n/**\r\n * A helper function to check whether createImageBitmap supports passing ImageBitmapOptions.\r\n *\r\n * @returns {Promise} A promise that resolves to true if this browser supports creating an ImageBitmap with options.\r\n *\r\n * @private\r\n */\r\nResource.supportsImageBitmapOptions = function () {\r\n // Until the HTML folks figure out what to do about this, we need to actually try loading an image to\r\n // know if this browser supports passing options to the createImageBitmap function.\r\n // https://github.com/whatwg/html/pull/4248\r\n //\r\n // We also need to check whether the colorSpaceConversion option is supported.\r\n // We do this by loading a PNG with an embedded color profile, first with\r\n // colorSpaceConversion: \"none\" and then with colorSpaceConversion: \"default\".\r\n // If the pixel color is different then we know the option is working.\r\n // As of Webkit 17612.3.6.1.6 the createImageBitmap promise resolves but the\r\n // option is not actually supported.\r\n if (defined(supportsImageBitmapOptionsPromise)) {\r\n return supportsImageBitmapOptionsPromise;\r\n }\r\n\r\n if (typeof createImageBitmap !== \"function\") {\r\n supportsImageBitmapOptionsPromise = Promise.resolve(false);\r\n return supportsImageBitmapOptionsPromise;\r\n }\r\n\r\n const imageDataUri =\r\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAABGdBTUEAAE4g3rEiDgAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAADElEQVQI12Ng6GAAAAEUAIngE3ZiAAAAAElFTkSuQmCC\";\r\n\r\n supportsImageBitmapOptionsPromise = Resource.fetchBlob({\r\n url: imageDataUri,\r\n })\r\n .then(function (blob) {\r\n const imageBitmapOptions = {\r\n imageOrientation: \"flipY\", // default is \"none\"\r\n premultiplyAlpha: \"none\", // default is \"default\"\r\n colorSpaceConversion: \"none\", // default is \"default\"\r\n };\r\n return Promise.all([\r\n createImageBitmap(blob, imageBitmapOptions),\r\n createImageBitmap(blob),\r\n ]);\r\n })\r\n .then(function (imageBitmaps) {\r\n // Check whether the colorSpaceConversion option had any effect on the green channel\r\n const colorWithOptions = getImagePixels(imageBitmaps[0]);\r\n const colorWithDefaults = getImagePixels(imageBitmaps[1]);\r\n return colorWithOptions[1] !== colorWithDefaults[1];\r\n })\r\n .catch(function () {\r\n return false;\r\n });\r\n\r\n return supportsImageBitmapOptionsPromise;\r\n};\r\n\r\nObject.defineProperties(Resource, {\r\n /**\r\n * Returns true if blobs are supported.\r\n *\r\n * @memberof Resource\r\n * @type {Boolean}\r\n *\r\n * @readonly\r\n */\r\n isBlobSupported: {\r\n get: function () {\r\n return xhrBlobSupported;\r\n },\r\n },\r\n});\r\n\r\nObject.defineProperties(Resource.prototype, {\r\n /**\r\n * Query parameters appended to the url.\r\n *\r\n * @memberof Resource.prototype\r\n * @type {Object}\r\n *\r\n * @readonly\r\n */\r\n queryParameters: {\r\n get: function () {\r\n return this._queryParameters;\r\n },\r\n },\r\n\r\n /**\r\n * The key/value pairs used to replace template parameters in the url.\r\n *\r\n * @memberof Resource.prototype\r\n * @type {Object}\r\n *\r\n * @readonly\r\n */\r\n templateValues: {\r\n get: function () {\r\n return this._templateValues;\r\n },\r\n },\r\n\r\n /**\r\n * The url to the resource with template values replaced, query string appended and encoded by proxy if one was set.\r\n *\r\n * @memberof Resource.prototype\r\n * @type {String}\r\n */\r\n url: {\r\n get: function () {\r\n return this.getUrlComponent(true, true);\r\n },\r\n set: function (value) {\r\n const uri = new Uri(value);\r\n\r\n parseQuery(uri, this, false);\r\n\r\n // Remove the fragment as it's not sent with a request\r\n uri.fragment(\"\");\r\n\r\n this._url = uri.toString();\r\n },\r\n },\r\n\r\n /**\r\n * The file extension of the resource.\r\n *\r\n * @memberof Resource.prototype\r\n * @type {String}\r\n *\r\n * @readonly\r\n */\r\n extension: {\r\n get: function () {\r\n return getExtensionFromUri(this._url);\r\n },\r\n },\r\n\r\n /**\r\n * True if the Resource refers to a data URI.\r\n *\r\n * @memberof Resource.prototype\r\n * @type {Boolean}\r\n */\r\n isDataUri: {\r\n get: function () {\r\n return isDataUri(this._url);\r\n },\r\n },\r\n\r\n /**\r\n * True if the Resource refers to a blob URI.\r\n *\r\n * @memberof Resource.prototype\r\n * @type {Boolean}\r\n */\r\n isBlobUri: {\r\n get: function () {\r\n return isBlobUri(this._url);\r\n },\r\n },\r\n\r\n /**\r\n * True if the Resource refers to a cross origin URL.\r\n *\r\n * @memberof Resource.prototype\r\n * @type {Boolean}\r\n */\r\n isCrossOriginUrl: {\r\n get: function () {\r\n return isCrossOriginUrl(this._url);\r\n },\r\n },\r\n\r\n /**\r\n * True if the Resource has request headers. This is equivalent to checking if the headers property has any keys.\r\n *\r\n * @memberof Resource.prototype\r\n * @type {Boolean}\r\n */\r\n hasHeaders: {\r\n get: function () {\r\n return Object.keys(this.headers).length > 0;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Override Object#toString so that implicit string conversion gives the\r\n * complete URL represented by this Resource.\r\n *\r\n * @returns {String} The URL represented by this Resource\r\n */\r\nResource.prototype.toString = function () {\r\n return this.getUrlComponent(true, true);\r\n};\r\n\r\n/**\r\n * Returns the url, optional with the query string and processed by a proxy.\r\n *\r\n * @param {Boolean} [query=false] If true, the query string is included.\r\n * @param {Boolean} [proxy=false] If true, the url is processed by the proxy object, if defined.\r\n *\r\n * @returns {String} The url with all the requested components.\r\n */\r\nResource.prototype.getUrlComponent = function (query, proxy) {\r\n if (this.isDataUri) {\r\n return this._url;\r\n }\r\n\r\n const uri = new Uri(this._url);\r\n\r\n if (query) {\r\n stringifyQuery(uri, this);\r\n }\r\n\r\n // objectToQuery escapes the placeholders. Undo that.\r\n let url = uri.toString().replace(/%7B/g, \"{\").replace(/%7D/g, \"}\");\r\n\r\n const templateValues = this._templateValues;\r\n url = url.replace(/{(.*?)}/g, function (match, key) {\r\n const replacement = templateValues[key];\r\n if (defined(replacement)) {\r\n // use the replacement value from templateValues if there is one...\r\n return encodeURIComponent(replacement);\r\n }\r\n // otherwise leave it unchanged\r\n return match;\r\n });\r\n\r\n if (proxy && defined(this.proxy)) {\r\n url = this.proxy.getURL(url);\r\n }\r\n return url;\r\n};\r\n\r\n/**\r\n * Combines the specified object and the existing query parameters. This allows you to add many parameters at once,\r\n * as opposed to adding them one at a time to the queryParameters property. If a value is already set, it will be replaced with the new value.\r\n *\r\n * @param {Object} params The query parameters\r\n * @param {Boolean} [useAsDefault=false] If true the params will be used as the default values, so they will only be set if they are undefined.\r\n */\r\nResource.prototype.setQueryParameters = function (params, useAsDefault) {\r\n if (useAsDefault) {\r\n this._queryParameters = combineQueryParameters(\r\n this._queryParameters,\r\n params,\r\n false\r\n );\r\n } else {\r\n this._queryParameters = combineQueryParameters(\r\n params,\r\n this._queryParameters,\r\n false\r\n );\r\n }\r\n};\r\n\r\n/**\r\n * Combines the specified object and the existing query parameters. This allows you to add many parameters at once,\r\n * as opposed to adding them one at a time to the queryParameters property.\r\n *\r\n * @param {Object} params The query parameters\r\n */\r\nResource.prototype.appendQueryParameters = function (params) {\r\n this._queryParameters = combineQueryParameters(\r\n params,\r\n this._queryParameters,\r\n true\r\n );\r\n};\r\n\r\n/**\r\n * Combines the specified object and the existing template values. This allows you to add many values at once,\r\n * as opposed to adding them one at a time to the templateValues property. If a value is already set, it will become an array and the new value will be appended.\r\n *\r\n * @param {Object} template The template values\r\n * @param {Boolean} [useAsDefault=false] If true the values will be used as the default values, so they will only be set if they are undefined.\r\n */\r\nResource.prototype.setTemplateValues = function (template, useAsDefault) {\r\n if (useAsDefault) {\r\n this._templateValues = combine(this._templateValues, template);\r\n } else {\r\n this._templateValues = combine(template, this._templateValues);\r\n }\r\n};\r\n\r\n/**\r\n * Returns a resource relative to the current instance. All properties remain the same as the current instance unless overridden in options.\r\n *\r\n * @param {Object} options An object with the following properties\r\n * @param {String} [options.url] The url that will be resolved relative to the url of the current instance.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be combined with those of the current instance.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}). These will be combined with those of the current instance.\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The function to call when loading the resource fails.\r\n * @param {Number} [options.retryAttempts] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {Boolean} [options.preserveQueryParameters=false] If true, this will keep all query parameters from the current resource and derived resource. If false, derived parameters will replace those of the current resource.\r\n *\r\n * @returns {Resource} The resource derived from the current one.\r\n */\r\nResource.prototype.getDerivedResource = function (options) {\r\n const resource = this.clone();\r\n resource._retryCount = 0;\r\n\r\n if (defined(options.url)) {\r\n const uri = new Uri(options.url);\r\n\r\n const preserveQueryParameters = defaultValue(\r\n options.preserveQueryParameters,\r\n false\r\n );\r\n parseQuery(uri, resource, true, preserveQueryParameters);\r\n\r\n // Remove the fragment as it's not sent with a request\r\n uri.fragment(\"\");\r\n\r\n if (uri.scheme() !== \"\") {\r\n resource._url = uri.toString();\r\n } else {\r\n resource._url = uri\r\n .absoluteTo(new Uri(getAbsoluteUri(this._url)))\r\n .toString();\r\n }\r\n }\r\n\r\n if (defined(options.queryParameters)) {\r\n resource._queryParameters = combine(\r\n options.queryParameters,\r\n resource._queryParameters\r\n );\r\n }\r\n if (defined(options.templateValues)) {\r\n resource._templateValues = combine(\r\n options.templateValues,\r\n resource.templateValues\r\n );\r\n }\r\n if (defined(options.headers)) {\r\n resource.headers = combine(options.headers, resource.headers);\r\n }\r\n if (defined(options.proxy)) {\r\n resource.proxy = options.proxy;\r\n }\r\n if (defined(options.request)) {\r\n resource.request = options.request;\r\n }\r\n if (defined(options.retryCallback)) {\r\n resource.retryCallback = options.retryCallback;\r\n }\r\n if (defined(options.retryAttempts)) {\r\n resource.retryAttempts = options.retryAttempts;\r\n }\r\n\r\n return resource;\r\n};\r\n\r\n/**\r\n * Called when a resource fails to load. This will call the retryCallback function if defined until retryAttempts is reached.\r\n *\r\n * @param {Error} [error] The error that was encountered.\r\n *\r\n * @returns {Promise} A promise to a boolean, that if true will cause the resource request to be retried.\r\n *\r\n * @private\r\n */\r\nResource.prototype.retryOnError = function (error) {\r\n const retryCallback = this.retryCallback;\r\n if (\r\n typeof retryCallback !== \"function\" ||\r\n this._retryCount >= this.retryAttempts\r\n ) {\r\n return Promise.resolve(false);\r\n }\r\n\r\n const that = this;\r\n return Promise.resolve(retryCallback(this, error)).then(function (result) {\r\n ++that._retryCount;\r\n\r\n return result;\r\n });\r\n};\r\n\r\n/**\r\n * Duplicates a Resource instance.\r\n *\r\n * @param {Resource} [result] The object onto which to store the result.\r\n *\r\n * @returns {Resource} The modified result parameter or a new Resource instance if one was not provided.\r\n */\r\nResource.prototype.clone = function (result) {\r\n if (!defined(result)) {\r\n result = new Resource({\r\n url: this._url,\r\n });\r\n }\r\n\r\n result._url = this._url;\r\n result._queryParameters = clone(this._queryParameters);\r\n result._templateValues = clone(this._templateValues);\r\n result.headers = clone(this.headers);\r\n result.proxy = this.proxy;\r\n result.retryCallback = this.retryCallback;\r\n result.retryAttempts = this.retryAttempts;\r\n result._retryCount = 0;\r\n result.request = this.request.clone();\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns the base path of the Resource.\r\n *\r\n * @param {Boolean} [includeQuery = false] Whether or not to include the query string and fragment form the uri\r\n *\r\n * @returns {String} The base URI of the resource\r\n */\r\nResource.prototype.getBaseUri = function (includeQuery) {\r\n return getBaseUri(this.getUrlComponent(includeQuery), includeQuery);\r\n};\r\n\r\n/**\r\n * Appends a forward slash to the URL.\r\n */\r\nResource.prototype.appendForwardSlash = function () {\r\n this._url = appendForwardSlash(this._url);\r\n};\r\n\r\n/**\r\n * Asynchronously loads the resource as raw binary data. Returns a promise that will resolve to\r\n * an ArrayBuffer once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n * @example\r\n * // load a single URL asynchronously\r\n * resource.fetchArrayBuffer().then(function(arrayBuffer) {\r\n * // use the data\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.fetchArrayBuffer = function () {\r\n return this.fetch({\r\n responseType: \"arraybuffer\",\r\n });\r\n};\r\n\r\n/**\r\n * Creates a Resource and calls fetchArrayBuffer() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.fetchArrayBuffer = function (options) {\r\n const resource = new Resource(options);\r\n return resource.fetchArrayBuffer();\r\n};\r\n\r\n/**\r\n * Asynchronously loads the given resource as a blob. Returns a promise that will resolve to\r\n * a Blob once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n * @example\r\n * // load a single URL asynchronously\r\n * resource.fetchBlob().then(function(blob) {\r\n * // use the data\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.fetchBlob = function () {\r\n return this.fetch({\r\n responseType: \"blob\",\r\n });\r\n};\r\n\r\n/**\r\n * Creates a Resource and calls fetchBlob() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.fetchBlob = function (options) {\r\n const resource = new Resource(options);\r\n return resource.fetchBlob();\r\n};\r\n\r\n/**\r\n * Asynchronously loads the given image resource. Returns a promise that will resolve to\r\n * an {@link https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap|ImageBitmap} if preferImageBitmap is true and the browser supports createImageBitmap or otherwise an\r\n * {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement|Image} once loaded, or reject if the image failed to load.\r\n *\r\n * @param {Object} [options] An object with the following properties.\r\n * @param {Boolean} [options.preferBlob=false] If true, we will load the image via a blob.\r\n * @param {Boolean} [options.preferImageBitmap=false] If true, image will be decoded during fetch and an ImageBitmap is returned.\r\n * @param {Boolean} [options.flipY=false] If true, image will be vertically flipped during decode. Only applies if the browser supports createImageBitmap.\r\n * @param {Boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies if the browser supports createImageBitmap.\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * // load a single image asynchronously\r\n * resource.fetchImage().then(function(image) {\r\n * // use the loaded image\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * // load several images in parallel\r\n * Promise.all([resource1.fetchImage(), resource2.fetchImage()]).then(function(images) {\r\n * // images is an array containing all the loaded images\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.fetchImage = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const preferImageBitmap = defaultValue(options.preferImageBitmap, false);\r\n const preferBlob = defaultValue(options.preferBlob, false);\r\n const flipY = defaultValue(options.flipY, false);\r\n const skipColorSpaceConversion = defaultValue(\r\n options.skipColorSpaceConversion,\r\n false\r\n );\r\n\r\n checkAndResetRequest(this.request);\r\n // We try to load the image normally if\r\n // 1. Blobs aren't supported\r\n // 2. It's a data URI\r\n // 3. It's a blob URI\r\n // 4. It doesn't have request headers and we preferBlob is false\r\n if (\r\n !xhrBlobSupported ||\r\n this.isDataUri ||\r\n this.isBlobUri ||\r\n (!this.hasHeaders && !preferBlob)\r\n ) {\r\n return fetchImage({\r\n resource: this,\r\n flipY: flipY,\r\n skipColorSpaceConversion: skipColorSpaceConversion,\r\n preferImageBitmap: preferImageBitmap,\r\n });\r\n }\r\n\r\n const blobPromise = this.fetchBlob();\r\n if (!defined(blobPromise)) {\r\n return;\r\n }\r\n\r\n let supportsImageBitmap;\r\n let useImageBitmap;\r\n let generatedBlobResource;\r\n let generatedBlob;\r\n return Resource.supportsImageBitmapOptions()\r\n .then(function (result) {\r\n supportsImageBitmap = result;\r\n useImageBitmap = supportsImageBitmap && preferImageBitmap;\r\n return blobPromise;\r\n })\r\n .then(function (blob) {\r\n if (!defined(blob)) {\r\n return;\r\n }\r\n generatedBlob = blob;\r\n if (useImageBitmap) {\r\n return Resource.createImageBitmapFromBlob(blob, {\r\n flipY: flipY,\r\n premultiplyAlpha: false,\r\n skipColorSpaceConversion: skipColorSpaceConversion,\r\n });\r\n }\r\n const blobUrl = window.URL.createObjectURL(blob);\r\n generatedBlobResource = new Resource({\r\n url: blobUrl,\r\n });\r\n\r\n return fetchImage({\r\n resource: generatedBlobResource,\r\n flipY: flipY,\r\n skipColorSpaceConversion: skipColorSpaceConversion,\r\n preferImageBitmap: false,\r\n });\r\n })\r\n .then(function (image) {\r\n if (!defined(image)) {\r\n return;\r\n }\r\n\r\n // The blob object may be needed for use by a TileDiscardPolicy,\r\n // so attach it to the image.\r\n image.blob = generatedBlob;\r\n\r\n if (useImageBitmap) {\r\n return image;\r\n }\r\n\r\n window.URL.revokeObjectURL(generatedBlobResource.url);\r\n return image;\r\n })\r\n .catch(function (error) {\r\n if (defined(generatedBlobResource)) {\r\n window.URL.revokeObjectURL(generatedBlobResource.url);\r\n }\r\n\r\n // If the blob load succeeded but the image decode failed, attach the blob\r\n // to the error object for use by a TileDiscardPolicy.\r\n // In particular, BingMapsImageryProvider uses this to detect the\r\n // zero-length response that is returned when a tile is not available.\r\n error.blob = generatedBlob;\r\n\r\n return Promise.reject(error);\r\n });\r\n};\r\n\r\n/**\r\n * Fetches an image and returns a promise to it.\r\n *\r\n * @param {Object} [options] An object with the following properties.\r\n * @param {Resource} [options.resource] Resource object that points to an image to fetch.\r\n * @param {Boolean} [options.preferImageBitmap] If true, image will be decoded during fetch and an ImageBitmap is returned.\r\n * @param {Boolean} [options.flipY] If true, image will be vertically flipped during decode. Only applies if the browser supports createImageBitmap.\r\n * @param {Boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies if the browser supports createImageBitmap.\r\n * @private\r\n */\r\nfunction fetchImage(options) {\r\n const resource = options.resource;\r\n const flipY = options.flipY;\r\n const skipColorSpaceConversion = options.skipColorSpaceConversion;\r\n const preferImageBitmap = options.preferImageBitmap;\r\n\r\n const request = resource.request;\r\n request.url = resource.url;\r\n request.requestFunction = function () {\r\n let crossOrigin = false;\r\n\r\n // data URIs can't have crossorigin set.\r\n if (!resource.isDataUri && !resource.isBlobUri) {\r\n crossOrigin = resource.isCrossOriginUrl;\r\n }\r\n\r\n const deferred = defer();\r\n Resource._Implementations.createImage(\r\n request,\r\n crossOrigin,\r\n deferred,\r\n flipY,\r\n skipColorSpaceConversion,\r\n preferImageBitmap\r\n );\r\n\r\n return deferred.promise;\r\n };\r\n\r\n const promise = RequestScheduler.request(request);\r\n if (!defined(promise)) {\r\n return;\r\n }\r\n\r\n return promise.catch(function (e) {\r\n // Don't retry cancelled or otherwise aborted requests\r\n if (request.state !== RequestState.FAILED) {\r\n return Promise.reject(e);\r\n }\r\n return resource.retryOnError(e).then(function (retry) {\r\n if (retry) {\r\n // Reset request so it can try again\r\n request.state = RequestState.UNISSUED;\r\n request.deferred = undefined;\r\n\r\n return fetchImage({\r\n resource: resource,\r\n flipY: flipY,\r\n skipColorSpaceConversion: skipColorSpaceConversion,\r\n preferImageBitmap: preferImageBitmap,\r\n });\r\n }\r\n return Promise.reject(e);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Creates a Resource and calls fetchImage() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Boolean} [options.flipY=false] Whether to vertically flip the image during fetch and decode. Only applies when requesting an image and the browser supports createImageBitmap.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {Boolean} [options.preferBlob=false] If true, we will load the image via a blob.\r\n * @param {Boolean} [options.preferImageBitmap=false] If true, image will be decoded during fetch and an ImageBitmap is returned.\r\n * @param {Boolean} [options.skipColorSpaceConversion=false] If true, any custom gamma or color profiles in the image will be ignored. Only applies when requesting an image and the browser supports createImageBitmap.\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.fetchImage = function (options) {\r\n const resource = new Resource(options);\r\n return resource.fetchImage({\r\n flipY: options.flipY,\r\n skipColorSpaceConversion: options.skipColorSpaceConversion,\r\n preferBlob: options.preferBlob,\r\n preferImageBitmap: options.preferImageBitmap,\r\n });\r\n};\r\n\r\n/**\r\n * Asynchronously loads the given resource as text. Returns a promise that will resolve to\r\n * a String once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n * @example\r\n * // load text from a URL, setting a custom header\r\n * const resource = new Resource({\r\n * url: 'http://someUrl.com/someJson.txt',\r\n * headers: {\r\n * 'X-Custom-Header' : 'some value'\r\n * }\r\n * });\r\n * resource.fetchText().then(function(text) {\r\n * // Do something with the text\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest}\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.fetchText = function () {\r\n return this.fetch({\r\n responseType: \"text\",\r\n });\r\n};\r\n\r\n/**\r\n * Creates a Resource and calls fetchText() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.fetchText = function (options) {\r\n const resource = new Resource(options);\r\n return resource.fetchText();\r\n};\r\n\r\n// note: */* below is */* but that ends the comment block early\r\n/**\r\n * Asynchronously loads the given resource as JSON. Returns a promise that will resolve to\r\n * a JSON object once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. This function\r\n * adds 'Accept: application/json,*/*;q=0.01' to the request headers, if not\r\n * already specified.\r\n *\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * resource.fetchJson().then(function(jsonData) {\r\n * // Do something with the JSON object\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.fetchJson = function () {\r\n const promise = this.fetch({\r\n responseType: \"text\",\r\n headers: {\r\n Accept: \"application/json,*/*;q=0.01\",\r\n },\r\n });\r\n\r\n if (!defined(promise)) {\r\n return undefined;\r\n }\r\n\r\n return promise.then(function (value) {\r\n if (!defined(value)) {\r\n return;\r\n }\r\n return JSON.parse(value);\r\n });\r\n};\r\n\r\n/**\r\n * Creates a Resource and calls fetchJson() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.fetchJson = function (options) {\r\n const resource = new Resource(options);\r\n return resource.fetchJson();\r\n};\r\n\r\n/**\r\n * Asynchronously loads the given resource as XML. Returns a promise that will resolve to\r\n * an XML Document once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * // load XML from a URL, setting a custom header\r\n * Cesium.loadXML('http://someUrl.com/someXML.xml', {\r\n * 'X-Custom-Header' : 'some value'\r\n * }).then(function(document) {\r\n * // Do something with the document\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest|XMLHttpRequest}\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.fetchXML = function () {\r\n return this.fetch({\r\n responseType: \"document\",\r\n overrideMimeType: \"text/xml\",\r\n });\r\n};\r\n\r\n/**\r\n * Creates a Resource and calls fetchXML() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @returns {Promise.|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.fetchXML = function (options) {\r\n const resource = new Resource(options);\r\n return resource.fetchXML();\r\n};\r\n\r\n/**\r\n * Requests a resource using JSONP.\r\n *\r\n * @param {String} [callbackParameterName='callback'] The callback parameter name that the server expects.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * // load a data asynchronously\r\n * resource.fetchJsonp().then(function(data) {\r\n * // use the loaded data\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.fetchJsonp = function (callbackParameterName) {\r\n callbackParameterName = defaultValue(callbackParameterName, \"callback\");\r\n\r\n checkAndResetRequest(this.request);\r\n\r\n //generate a unique function name\r\n let functionName;\r\n do {\r\n functionName = `loadJsonp${CesiumMath.nextRandomNumber()\r\n .toString()\r\n .substring(2, 8)}`;\r\n } while (defined(window[functionName]));\r\n\r\n return fetchJsonp(this, callbackParameterName, functionName);\r\n};\r\n\r\nfunction fetchJsonp(resource, callbackParameterName, functionName) {\r\n const callbackQuery = {};\r\n callbackQuery[callbackParameterName] = functionName;\r\n resource.setQueryParameters(callbackQuery);\r\n\r\n const request = resource.request;\r\n request.url = resource.url;\r\n request.requestFunction = function () {\r\n const deferred = defer();\r\n\r\n //assign a function with that name in the global scope\r\n window[functionName] = function (data) {\r\n deferred.resolve(data);\r\n\r\n try {\r\n delete window[functionName];\r\n } catch (e) {\r\n window[functionName] = undefined;\r\n }\r\n };\r\n\r\n Resource._Implementations.loadAndExecuteScript(\r\n resource.url,\r\n functionName,\r\n deferred\r\n );\r\n return deferred.promise;\r\n };\r\n\r\n const promise = RequestScheduler.request(request);\r\n if (!defined(promise)) {\r\n return;\r\n }\r\n\r\n return promise.catch(function (e) {\r\n if (request.state !== RequestState.FAILED) {\r\n return Promise.reject(e);\r\n }\r\n\r\n return resource.retryOnError(e).then(function (retry) {\r\n if (retry) {\r\n // Reset request so it can try again\r\n request.state = RequestState.UNISSUED;\r\n request.deferred = undefined;\r\n\r\n return fetchJsonp(resource, callbackParameterName, functionName);\r\n }\r\n\r\n return Promise.reject(e);\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * Creates a Resource from a URL and calls fetchJsonp() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {String} [options.callbackParameterName='callback'] The callback parameter name that the server expects.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.fetchJsonp = function (options) {\r\n const resource = new Resource(options);\r\n return resource.fetchJsonp(options.callbackParameterName);\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nResource.prototype._makeRequest = function (options) {\r\n const resource = this;\r\n checkAndResetRequest(resource.request);\r\n\r\n const request = resource.request;\r\n request.url = resource.url;\r\n\r\n request.requestFunction = function () {\r\n const responseType = options.responseType;\r\n const headers = combine(options.headers, resource.headers);\r\n const overrideMimeType = options.overrideMimeType;\r\n const method = options.method;\r\n const data = options.data;\r\n const deferred = defer();\r\n const xhr = Resource._Implementations.loadWithXhr(\r\n resource.url,\r\n responseType,\r\n method,\r\n data,\r\n headers,\r\n deferred,\r\n overrideMimeType\r\n );\r\n if (defined(xhr) && defined(xhr.abort)) {\r\n request.cancelFunction = function () {\r\n xhr.abort();\r\n };\r\n }\r\n return deferred.promise;\r\n };\r\n\r\n const promise = RequestScheduler.request(request);\r\n if (!defined(promise)) {\r\n return;\r\n }\r\n\r\n return promise\r\n .then(function (data) {\r\n // explicitly set to undefined to ensure GC of request response data. See #8843\r\n request.cancelFunction = undefined;\r\n return data;\r\n })\r\n .catch(function (e) {\r\n request.cancelFunction = undefined;\r\n if (request.state !== RequestState.FAILED) {\r\n return Promise.reject(e);\r\n }\r\n\r\n return resource.retryOnError(e).then(function (retry) {\r\n if (retry) {\r\n // Reset request so it can try again\r\n request.state = RequestState.UNISSUED;\r\n request.deferred = undefined;\r\n\r\n return resource.fetch(options);\r\n }\r\n\r\n return Promise.reject(e);\r\n });\r\n });\r\n};\r\n\r\nconst dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\r\n\r\nfunction decodeDataUriText(isBase64, data) {\r\n const result = decodeURIComponent(data);\r\n if (isBase64) {\r\n return atob(result);\r\n }\r\n return result;\r\n}\r\n\r\nfunction decodeDataUriArrayBuffer(isBase64, data) {\r\n const byteString = decodeDataUriText(isBase64, data);\r\n const buffer = new ArrayBuffer(byteString.length);\r\n const view = new Uint8Array(buffer);\r\n for (let i = 0; i < byteString.length; i++) {\r\n view[i] = byteString.charCodeAt(i);\r\n }\r\n return buffer;\r\n}\r\n\r\nfunction decodeDataUri(dataUriRegexResult, responseType) {\r\n responseType = defaultValue(responseType, \"\");\r\n const mimeType = dataUriRegexResult[1];\r\n const isBase64 = !!dataUriRegexResult[2];\r\n const data = dataUriRegexResult[3];\r\n let buffer;\r\n let parser;\r\n\r\n switch (responseType) {\r\n case \"\":\r\n case \"text\":\r\n return decodeDataUriText(isBase64, data);\r\n case \"arraybuffer\":\r\n return decodeDataUriArrayBuffer(isBase64, data);\r\n case \"blob\":\r\n buffer = decodeDataUriArrayBuffer(isBase64, data);\r\n return new Blob([buffer], {\r\n type: mimeType,\r\n });\r\n case \"document\":\r\n parser = new DOMParser();\r\n return parser.parseFromString(\r\n decodeDataUriText(isBase64, data),\r\n mimeType\r\n );\r\n case \"json\":\r\n return JSON.parse(decodeDataUriText(isBase64, data));\r\n default:\r\n //>>includeStart('debug', pragmas.debug);\r\n throw new DeveloperError(`Unhandled responseType: ${responseType}`);\r\n //>>includeEnd('debug');\r\n }\r\n}\r\n\r\n/**\r\n * Asynchronously loads the given resource. Returns a promise that will resolve to\r\n * the result once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled. It's recommended that you use\r\n * the more specific functions eg. fetchJson, fetchBlob, etc.\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * resource.fetch()\r\n * .then(function(body) {\r\n * // use the data\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.fetch = function (options) {\r\n options = defaultClone(options, {});\r\n options.method = \"GET\";\r\n\r\n return this._makeRequest(options);\r\n};\r\n\r\n/**\r\n * Creates a Resource from a URL and calls fetch() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.fetch = function (options) {\r\n const resource = new Resource(options);\r\n return resource.fetch({\r\n // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\r\n responseType: options.responseType,\r\n overrideMimeType: options.overrideMimeType,\r\n });\r\n};\r\n\r\n/**\r\n * Asynchronously deletes the given resource. Returns a promise that will resolve to\r\n * the result once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * resource.delete()\r\n * .then(function(body) {\r\n * // use the data\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.delete = function (options) {\r\n options = defaultClone(options, {});\r\n options.method = \"DELETE\";\r\n\r\n return this._makeRequest(options);\r\n};\r\n\r\n/**\r\n * Creates a Resource from a URL and calls delete() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.data] Data that is posted with the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.delete = function (options) {\r\n const resource = new Resource(options);\r\n return resource.delete({\r\n // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\r\n responseType: options.responseType,\r\n overrideMimeType: options.overrideMimeType,\r\n data: options.data,\r\n });\r\n};\r\n\r\n/**\r\n * Asynchronously gets headers the given resource. Returns a promise that will resolve to\r\n * the result once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * resource.head()\r\n * .then(function(headers) {\r\n * // use the data\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.head = function (options) {\r\n options = defaultClone(options, {});\r\n options.method = \"HEAD\";\r\n\r\n return this._makeRequest(options);\r\n};\r\n\r\n/**\r\n * Creates a Resource from a URL and calls head() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.head = function (options) {\r\n const resource = new Resource(options);\r\n return resource.head({\r\n // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\r\n responseType: options.responseType,\r\n overrideMimeType: options.overrideMimeType,\r\n });\r\n};\r\n\r\n/**\r\n * Asynchronously gets options the given resource. Returns a promise that will resolve to\r\n * the result once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * resource.options()\r\n * .then(function(headers) {\r\n * // use the data\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.options = function (options) {\r\n options = defaultClone(options, {});\r\n options.method = \"OPTIONS\";\r\n\r\n return this._makeRequest(options);\r\n};\r\n\r\n/**\r\n * Creates a Resource from a URL and calls options() on it.\r\n *\r\n * @param {String|Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.options = function (options) {\r\n const resource = new Resource(options);\r\n return resource.options({\r\n // Make copy of just the needed fields because headers can be passed to both the constructor and to fetch\r\n responseType: options.responseType,\r\n overrideMimeType: options.overrideMimeType,\r\n });\r\n};\r\n\r\n/**\r\n * Asynchronously posts data to the given resource. Returns a promise that will resolve to\r\n * the result once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @param {Object} data Data that is posted with the resource.\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Object} [options.data] Data that is posted with the resource.\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * resource.post(data)\r\n * .then(function(result) {\r\n * // use the result\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.post = function (data, options) {\r\n Check.defined(\"data\", data);\r\n\r\n options = defaultClone(options, {});\r\n options.method = \"POST\";\r\n options.data = data;\r\n\r\n return this._makeRequest(options);\r\n};\r\n\r\n/**\r\n * Creates a Resource from a URL and calls post() on it.\r\n *\r\n * @param {Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} options.data Data that is posted with the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.post = function (options) {\r\n const resource = new Resource(options);\r\n return resource.post(options.data, {\r\n // Make copy of just the needed fields because headers can be passed to both the constructor and to post\r\n responseType: options.responseType,\r\n overrideMimeType: options.overrideMimeType,\r\n });\r\n};\r\n\r\n/**\r\n * Asynchronously puts data to the given resource. Returns a promise that will resolve to\r\n * the result once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @param {Object} data Data that is posted with the resource.\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * resource.put(data)\r\n * .then(function(result) {\r\n * // use the result\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.put = function (data, options) {\r\n Check.defined(\"data\", data);\r\n\r\n options = defaultClone(options, {});\r\n options.method = \"PUT\";\r\n options.data = data;\r\n\r\n return this._makeRequest(options);\r\n};\r\n\r\n/**\r\n * Creates a Resource from a URL and calls put() on it.\r\n *\r\n * @param {Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} options.data Data that is posted with the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.put = function (options) {\r\n const resource = new Resource(options);\r\n return resource.put(options.data, {\r\n // Make copy of just the needed fields because headers can be passed to both the constructor and to post\r\n responseType: options.responseType,\r\n overrideMimeType: options.overrideMimeType,\r\n });\r\n};\r\n\r\n/**\r\n * Asynchronously patches data to the given resource. Returns a promise that will resolve to\r\n * the result once loaded, or reject if the resource failed to load. The data is loaded\r\n * using XMLHttpRequest, which means that in order to make requests to another origin,\r\n * the server must have Cross-Origin Resource Sharing (CORS) headers enabled.\r\n *\r\n * @param {Object} data Data that is posted with the resource.\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {Object} [options.headers] Additional HTTP headers to send with the request, if any.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n *\r\n *\r\n * @example\r\n * resource.patch(data)\r\n * .then(function(result) {\r\n * // use the result\r\n * }).catch(function(error) {\r\n * // an error occurred\r\n * });\r\n *\r\n * @see {@link http://www.w3.org/TR/cors/|Cross-Origin Resource Sharing}\r\n * @see {@link http://wiki.commonjs.org/wiki/Promises/A|CommonJS Promises/A}\r\n */\r\nResource.prototype.patch = function (data, options) {\r\n Check.defined(\"data\", data);\r\n\r\n options = defaultClone(options, {});\r\n options.method = \"PATCH\";\r\n options.data = data;\r\n\r\n return this._makeRequest(options);\r\n};\r\n\r\n/**\r\n * Creates a Resource from a URL and calls patch() on it.\r\n *\r\n * @param {Object} options A url or an object with the following properties\r\n * @param {String} options.url The url of the resource.\r\n * @param {Object} options.data Data that is posted with the resource.\r\n * @param {Object} [options.queryParameters] An object containing query parameters that will be sent when retrieving the resource.\r\n * @param {Object} [options.templateValues] Key/Value pairs that are used to replace template values (eg. {x}).\r\n * @param {Object} [options.headers={}] Additional HTTP headers that will be sent.\r\n * @param {Proxy} [options.proxy] A proxy to be used when loading the resource.\r\n * @param {Resource.RetryCallback} [options.retryCallback] The Function to call when a request for this resource fails. If it returns true, the request will be retried.\r\n * @param {Number} [options.retryAttempts=0] The number of times the retryCallback should be called before giving up.\r\n * @param {Request} [options.request] A Request object that will be used. Intended for internal use only.\r\n * @param {String} [options.responseType] The type of response. This controls the type of item returned.\r\n * @param {String} [options.overrideMimeType] Overrides the MIME type returned by the server.\r\n * @returns {Promise.<*>|undefined} a promise that will resolve to the requested data when loaded. Returns undefined if request.throttle is true and the request does not have high enough priority.\r\n */\r\nResource.patch = function (options) {\r\n const resource = new Resource(options);\r\n return resource.patch(options.data, {\r\n // Make copy of just the needed fields because headers can be passed to both the constructor and to post\r\n responseType: options.responseType,\r\n overrideMimeType: options.overrideMimeType,\r\n });\r\n};\r\n\r\n/**\r\n * Contains implementations of functions that can be replaced for testing\r\n *\r\n * @private\r\n */\r\nResource._Implementations = {};\r\n\r\nResource._Implementations.loadImageElement = function (\r\n url,\r\n crossOrigin,\r\n deferred\r\n) {\r\n const image = new Image();\r\n\r\n image.onload = function () {\r\n // work-around a known issue with Firefox and dimensionless SVG, see:\r\n // - https://github.com/whatwg/html/issues/3510\r\n // - https://bugzilla.mozilla.org/show_bug.cgi?id=700533\r\n if (\r\n image.naturalWidth === 0 &&\r\n image.naturalHeight === 0 &&\r\n image.width === 0 &&\r\n image.height === 0\r\n ) {\r\n // these values affect rasterization and will likely mar the content\r\n // until Firefox takes a stance on the issue, marred content is better than no content\r\n // Chromium uses a more refined heuristic about its choice given nil viewBox, and a better stance and solution is\r\n // proposed later in the original issue thread:\r\n // - Chromium behavior: https://github.com/CesiumGS/cesium/issues/9188#issuecomment-704400825\r\n // - Cesium's stance/solve: https://github.com/CesiumGS/cesium/issues/9188#issuecomment-720645777\r\n image.width = 300;\r\n image.height = 150;\r\n }\r\n deferred.resolve(image);\r\n };\r\n\r\n image.onerror = function (e) {\r\n deferred.reject(e);\r\n };\r\n\r\n if (crossOrigin) {\r\n if (TrustedServers.contains(url)) {\r\n image.crossOrigin = \"use-credentials\";\r\n } else {\r\n image.crossOrigin = \"\";\r\n }\r\n }\r\n\r\n image.src = url;\r\n};\r\n\r\nResource._Implementations.createImage = function (\r\n request,\r\n crossOrigin,\r\n deferred,\r\n flipY,\r\n skipColorSpaceConversion,\r\n preferImageBitmap\r\n) {\r\n const url = request.url;\r\n // Passing an Image to createImageBitmap will force it to run on the main thread\r\n // since DOM elements don't exist on workers. We convert it to a blob so it's non-blocking.\r\n // See:\r\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1044102#c38\r\n // https://bugs.chromium.org/p/chromium/issues/detail?id=580202#c10\r\n Resource.supportsImageBitmapOptions()\r\n .then(function (supportsImageBitmap) {\r\n // We can only use ImageBitmap if we can flip on decode.\r\n // See: https://github.com/CesiumGS/cesium/pull/7579#issuecomment-466146898\r\n if (!(supportsImageBitmap && preferImageBitmap)) {\r\n Resource._Implementations.loadImageElement(url, crossOrigin, deferred);\r\n return;\r\n }\r\n const responseType = \"blob\";\r\n const method = \"GET\";\r\n const xhrDeferred = defer();\r\n const xhr = Resource._Implementations.loadWithXhr(\r\n url,\r\n responseType,\r\n method,\r\n undefined,\r\n undefined,\r\n xhrDeferred,\r\n undefined,\r\n undefined,\r\n undefined\r\n );\r\n\r\n if (defined(xhr) && defined(xhr.abort)) {\r\n request.cancelFunction = function () {\r\n xhr.abort();\r\n };\r\n }\r\n return xhrDeferred.promise\r\n .then(function (blob) {\r\n if (!defined(blob)) {\r\n deferred.reject(\r\n new RuntimeError(\r\n `Successfully retrieved ${url} but it contained no content.`\r\n )\r\n );\r\n return;\r\n }\r\n\r\n return Resource.createImageBitmapFromBlob(blob, {\r\n flipY: flipY,\r\n premultiplyAlpha: false,\r\n skipColorSpaceConversion: skipColorSpaceConversion,\r\n });\r\n })\r\n .then(function (image) {\r\n deferred.resolve(image);\r\n });\r\n })\r\n .catch(function (e) {\r\n deferred.reject(e);\r\n });\r\n};\r\n\r\n/**\r\n * Wrapper for createImageBitmap\r\n *\r\n * @private\r\n */\r\nResource.createImageBitmapFromBlob = function (blob, options) {\r\n Check.defined(\"options\", options);\r\n Check.typeOf.bool(\"options.flipY\", options.flipY);\r\n Check.typeOf.bool(\"options.premultiplyAlpha\", options.premultiplyAlpha);\r\n Check.typeOf.bool(\r\n \"options.skipColorSpaceConversion\",\r\n options.skipColorSpaceConversion\r\n );\r\n\r\n return createImageBitmap(blob, {\r\n imageOrientation: options.flipY ? \"flipY\" : \"none\",\r\n premultiplyAlpha: options.premultiplyAlpha ? \"premultiply\" : \"none\",\r\n colorSpaceConversion: options.skipColorSpaceConversion ? \"none\" : \"default\",\r\n });\r\n};\r\n\r\nfunction decodeResponse(loadWithHttpResponse, responseType) {\r\n switch (responseType) {\r\n case \"text\":\r\n return loadWithHttpResponse.toString(\"utf8\");\r\n case \"json\":\r\n return JSON.parse(loadWithHttpResponse.toString(\"utf8\"));\r\n default:\r\n return new Uint8Array(loadWithHttpResponse).buffer;\r\n }\r\n}\r\n\r\nfunction loadWithHttpRequest(\r\n url,\r\n responseType,\r\n method,\r\n data,\r\n headers,\r\n deferred,\r\n overrideMimeType\r\n) {\r\n // Note: only the 'json' and 'text' responseTypes transforms the loaded buffer\r\n let URL;\r\n let zlib;\r\n Promise.all([import(\"url\"), import(\"zlib\")])\r\n .then(([urlImport, zlibImport]) => {\r\n URL = urlImport.parse(url);\r\n zlib = zlibImport;\r\n\r\n return URL.protocol === \"https:\" ? import(\"https\") : import(\"http\");\r\n })\r\n .then((http) => {\r\n const options = {\r\n protocol: URL.protocol,\r\n hostname: URL.hostname,\r\n port: URL.port,\r\n path: URL.path,\r\n query: URL.query,\r\n method: method,\r\n headers: headers,\r\n };\r\n http\r\n .request(options)\r\n .on(\"response\", function (res) {\r\n if (res.statusCode < 200 || res.statusCode >= 300) {\r\n deferred.reject(\r\n new RequestErrorEvent(res.statusCode, res, res.headers)\r\n );\r\n return;\r\n }\r\n\r\n const chunkArray = [];\r\n res.on(\"data\", function (chunk) {\r\n chunkArray.push(chunk);\r\n });\r\n\r\n res.on(\"end\", function () {\r\n // eslint-disable-next-line no-undef\r\n const result = Buffer.concat(chunkArray);\r\n if (res.headers[\"content-encoding\"] === \"gzip\") {\r\n zlib.gunzip(result, function (error, resultUnzipped) {\r\n if (error) {\r\n deferred.reject(\r\n new RuntimeError(\"Error decompressing response.\")\r\n );\r\n } else {\r\n deferred.resolve(\r\n decodeResponse(resultUnzipped, responseType)\r\n );\r\n }\r\n });\r\n } else {\r\n deferred.resolve(decodeResponse(result, responseType));\r\n }\r\n });\r\n })\r\n .on(\"error\", function (e) {\r\n deferred.reject(new RequestErrorEvent());\r\n })\r\n .end();\r\n });\r\n}\r\n\r\nconst noXMLHttpRequest = typeof XMLHttpRequest === \"undefined\";\r\nResource._Implementations.loadWithXhr = function (\r\n url,\r\n responseType,\r\n method,\r\n data,\r\n headers,\r\n deferred,\r\n overrideMimeType\r\n) {\r\n const dataUriRegexResult = dataUriRegex.exec(url);\r\n if (dataUriRegexResult !== null) {\r\n deferred.resolve(decodeDataUri(dataUriRegexResult, responseType));\r\n return;\r\n }\r\n\r\n if (noXMLHttpRequest) {\r\n loadWithHttpRequest(\r\n url,\r\n responseType,\r\n method,\r\n data,\r\n headers,\r\n deferred,\r\n overrideMimeType\r\n );\r\n return;\r\n }\r\n\r\n const xhr = new XMLHttpRequest();\r\n\r\n if (TrustedServers.contains(url)) {\r\n xhr.withCredentials = true;\r\n }\r\n\r\n xhr.open(method, url, true);\r\n\r\n if (defined(overrideMimeType) && defined(xhr.overrideMimeType)) {\r\n xhr.overrideMimeType(overrideMimeType);\r\n }\r\n\r\n if (defined(headers)) {\r\n for (const key in headers) {\r\n if (headers.hasOwnProperty(key)) {\r\n xhr.setRequestHeader(key, headers[key]);\r\n }\r\n }\r\n }\r\n\r\n if (defined(responseType)) {\r\n xhr.responseType = responseType;\r\n }\r\n\r\n // While non-standard, file protocol always returns a status of 0 on success\r\n let localFile = false;\r\n if (typeof url === \"string\") {\r\n localFile =\r\n url.indexOf(\"file://\") === 0 ||\r\n (typeof window !== \"undefined\" && window.location.origin === \"file://\");\r\n }\r\n\r\n xhr.onload = function () {\r\n if (\r\n (xhr.status < 200 || xhr.status >= 300) &&\r\n !(localFile && xhr.status === 0)\r\n ) {\r\n deferred.reject(\r\n new RequestErrorEvent(\r\n xhr.status,\r\n xhr.response,\r\n xhr.getAllResponseHeaders()\r\n )\r\n );\r\n return;\r\n }\r\n\r\n const response = xhr.response;\r\n const browserResponseType = xhr.responseType;\r\n\r\n if (method === \"HEAD\" || method === \"OPTIONS\") {\r\n const responseHeaderString = xhr.getAllResponseHeaders();\r\n const splitHeaders = responseHeaderString.trim().split(/[\\r\\n]+/);\r\n\r\n const responseHeaders = {};\r\n splitHeaders.forEach(function (line) {\r\n const parts = line.split(\": \");\r\n const header = parts.shift();\r\n responseHeaders[header] = parts.join(\": \");\r\n });\r\n\r\n deferred.resolve(responseHeaders);\r\n return;\r\n }\r\n\r\n //All modern browsers will go into either the first or second if block or last else block.\r\n //Other code paths support older browsers that either do not support the supplied responseType\r\n //or do not support the xhr.response property.\r\n if (xhr.status === 204) {\r\n // accept no content\r\n deferred.resolve();\r\n } else if (\r\n defined(response) &&\r\n (!defined(responseType) || browserResponseType === responseType)\r\n ) {\r\n deferred.resolve(response);\r\n } else if (responseType === \"json\" && typeof response === \"string\") {\r\n try {\r\n deferred.resolve(JSON.parse(response));\r\n } catch (e) {\r\n deferred.reject(e);\r\n }\r\n } else if (\r\n (browserResponseType === \"\" || browserResponseType === \"document\") &&\r\n defined(xhr.responseXML) &&\r\n xhr.responseXML.hasChildNodes()\r\n ) {\r\n deferred.resolve(xhr.responseXML);\r\n } else if (\r\n (browserResponseType === \"\" || browserResponseType === \"text\") &&\r\n defined(xhr.responseText)\r\n ) {\r\n deferred.resolve(xhr.responseText);\r\n } else {\r\n deferred.reject(\r\n new RuntimeError(\"Invalid XMLHttpRequest response type.\")\r\n );\r\n }\r\n };\r\n\r\n xhr.onerror = function (e) {\r\n deferred.reject(new RequestErrorEvent());\r\n };\r\n\r\n xhr.send(data);\r\n\r\n return xhr;\r\n};\r\n\r\nResource._Implementations.loadAndExecuteScript = function (\r\n url,\r\n functionName,\r\n deferred\r\n) {\r\n return loadAndExecuteScript(url, functionName).catch(function (e) {\r\n deferred.reject(e);\r\n });\r\n};\r\n\r\n/**\r\n * The default implementations\r\n *\r\n * @private\r\n */\r\nResource._DefaultImplementations = {};\r\nResource._DefaultImplementations.createImage =\r\n Resource._Implementations.createImage;\r\nResource._DefaultImplementations.loadWithXhr =\r\n Resource._Implementations.loadWithXhr;\r\nResource._DefaultImplementations.loadAndExecuteScript =\r\n Resource._Implementations.loadAndExecuteScript;\r\n\r\n/**\r\n * A resource instance initialized to the current browser location\r\n *\r\n * @type {Resource}\r\n * @constant\r\n */\r\nResource.DEFAULT = Object.freeze(\r\n new Resource({\r\n url:\r\n typeof document === \"undefined\"\r\n ? \"\"\r\n : document.location.href.split(\"?\")[0],\r\n })\r\n);\r\n\r\n/**\r\n * A function that returns the value of the property.\r\n * @callback Resource.RetryCallback\r\n *\r\n * @param {Resource} [resource] The resource that failed to load.\r\n * @param {Error} [error] The error that occurred during the loading of the resource.\r\n * @returns {Boolean|Promise} If true or a promise that resolved to true, the resource will be retried. Otherwise the failure will be returned.\r\n */\r\nexport default Resource;\r\n","import binarySearch from \"./binarySearch.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport EarthOrientationParametersSample from \"./EarthOrientationParametersSample.js\";\r\nimport JulianDate from \"./JulianDate.js\";\r\nimport LeapSecond from \"./LeapSecond.js\";\r\nimport Resource from \"./Resource.js\";\r\nimport RuntimeError from \"./RuntimeError.js\";\r\nimport TimeConstants from \"./TimeConstants.js\";\r\nimport TimeStandard from \"./TimeStandard.js\";\r\n\r\n/**\r\n * Specifies Earth polar motion coordinates and the difference between UT1 and UTC.\r\n * These Earth Orientation Parameters (EOP) are primarily used in the transformation from\r\n * the International Celestial Reference Frame (ICRF) to the International Terrestrial\r\n * Reference Frame (ITRF).\r\n *\r\n * @alias EarthOrientationParameters\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Resource|String} [options.url] The URL from which to obtain EOP data. If neither this\r\n * parameter nor options.data is specified, all EOP values are assumed\r\n * to be 0.0. If options.data is specified, this parameter is\r\n * ignored.\r\n * @param {Object} [options.data] The actual EOP data. If neither this\r\n * parameter nor options.data is specified, all EOP values are assumed\r\n * to be 0.0.\r\n * @param {Boolean} [options.addNewLeapSeconds=true] True if leap seconds that\r\n * are specified in the EOP data but not in {@link JulianDate.leapSeconds}\r\n * should be added to {@link JulianDate.leapSeconds}. False if\r\n * new leap seconds should be handled correctly in the context\r\n * of the EOP data but otherwise ignored.\r\n *\r\n * @example\r\n * // An example EOP data file, EOP.json:\r\n * {\r\n * \"columnNames\" : [\"dateIso8601\",\"modifiedJulianDateUtc\",\"xPoleWanderRadians\",\"yPoleWanderRadians\",\"ut1MinusUtcSeconds\",\"lengthOfDayCorrectionSeconds\",\"xCelestialPoleOffsetRadians\",\"yCelestialPoleOffsetRadians\",\"taiMinusUtcSeconds\"],\r\n * \"samples\" : [\r\n * \"2011-07-01T00:00:00Z\",55743.0,2.117957047295119e-7,2.111518721609984e-6,-0.2908948,-2.956e-4,3.393695767766752e-11,3.3452143996557983e-10,34.0,\r\n * \"2011-07-02T00:00:00Z\",55744.0,2.193297093339541e-7,2.115460256837405e-6,-0.29065,-1.824e-4,-8.241832578862112e-11,5.623838700870617e-10,34.0,\r\n * \"2011-07-03T00:00:00Z\",55745.0,2.262286080161428e-7,2.1191157519929706e-6,-0.2905572,1.9e-6,-3.490658503988659e-10,6.981317007977318e-10,34.0\r\n * ]\r\n * }\r\n *\r\n * @example\r\n * // Loading the EOP data\r\n * const eop = new Cesium.EarthOrientationParameters({ url : 'Data/EOP.json' });\r\n * Cesium.Transforms.earthOrientationParameters = eop;\r\n *\r\n * @private\r\n */\r\nfunction EarthOrientationParameters(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n this._dates = undefined;\r\n this._samples = undefined;\r\n\r\n this._dateColumn = -1;\r\n this._xPoleWanderRadiansColumn = -1;\r\n this._yPoleWanderRadiansColumn = -1;\r\n this._ut1MinusUtcSecondsColumn = -1;\r\n this._xCelestialPoleOffsetRadiansColumn = -1;\r\n this._yCelestialPoleOffsetRadiansColumn = -1;\r\n this._taiMinusUtcSecondsColumn = -1;\r\n\r\n this._columnCount = 0;\r\n this._lastIndex = -1;\r\n\r\n this._downloadPromise = undefined;\r\n this._dataError = undefined;\r\n\r\n this._addNewLeapSeconds = defaultValue(options.addNewLeapSeconds, true);\r\n\r\n if (defined(options.data)) {\r\n // Use supplied EOP data.\r\n onDataReady(this, options.data);\r\n } else if (defined(options.url)) {\r\n const resource = Resource.createIfNeeded(options.url);\r\n\r\n // Download EOP data.\r\n const that = this;\r\n this._downloadPromise = resource\r\n .fetchJson()\r\n .then(function (eopData) {\r\n onDataReady(that, eopData);\r\n })\r\n .catch(function () {\r\n that._dataError = `An error occurred while retrieving the EOP data from the URL ${resource.url}.`;\r\n });\r\n } else {\r\n // Use all zeros for EOP data.\r\n onDataReady(this, {\r\n columnNames: [\r\n \"dateIso8601\",\r\n \"modifiedJulianDateUtc\",\r\n \"xPoleWanderRadians\",\r\n \"yPoleWanderRadians\",\r\n \"ut1MinusUtcSeconds\",\r\n \"lengthOfDayCorrectionSeconds\",\r\n \"xCelestialPoleOffsetRadians\",\r\n \"yCelestialPoleOffsetRadians\",\r\n \"taiMinusUtcSeconds\",\r\n ],\r\n samples: [],\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * A default {@link EarthOrientationParameters} instance that returns zero for all EOP values.\r\n */\r\nEarthOrientationParameters.NONE = Object.freeze({\r\n getPromiseToLoad: function () {\r\n return Promise.resolve();\r\n },\r\n compute: function (date, result) {\r\n if (!defined(result)) {\r\n result = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0);\r\n } else {\r\n result.xPoleWander = 0.0;\r\n result.yPoleWander = 0.0;\r\n result.xPoleOffset = 0.0;\r\n result.yPoleOffset = 0.0;\r\n result.ut1MinusUtc = 0.0;\r\n }\r\n return result;\r\n },\r\n});\r\n\r\n/**\r\n * Gets a promise that, when resolved, indicates that the EOP data has been loaded and is\r\n * ready to use.\r\n *\r\n * @returns {Promise} The promise.\r\n */\r\nEarthOrientationParameters.prototype.getPromiseToLoad = function () {\r\n return Promise.resolve(this._downloadPromise);\r\n};\r\n\r\n/**\r\n * Computes the Earth Orientation Parameters (EOP) for a given date by interpolating.\r\n * If the EOP data has not yet been download, this method returns undefined.\r\n *\r\n * @param {JulianDate} date The date for each to evaluate the EOP.\r\n * @param {EarthOrientationParametersSample} [result] The instance to which to copy the result.\r\n * If this parameter is undefined, a new instance is created and returned.\r\n * @returns {EarthOrientationParametersSample} The EOP evaluated at the given date, or\r\n * undefined if the data necessary to evaluate EOP at the date has not yet been\r\n * downloaded.\r\n *\r\n * @exception {RuntimeError} The loaded EOP data has an error and cannot be used.\r\n *\r\n * @see EarthOrientationParameters#getPromiseToLoad\r\n */\r\nEarthOrientationParameters.prototype.compute = function (date, result) {\r\n // We cannot compute until the samples are available.\r\n if (!defined(this._samples)) {\r\n if (defined(this._dataError)) {\r\n throw new RuntimeError(this._dataError);\r\n }\r\n\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n result = new EarthOrientationParametersSample(0.0, 0.0, 0.0, 0.0, 0.0);\r\n }\r\n\r\n if (this._samples.length === 0) {\r\n result.xPoleWander = 0.0;\r\n result.yPoleWander = 0.0;\r\n result.xPoleOffset = 0.0;\r\n result.yPoleOffset = 0.0;\r\n result.ut1MinusUtc = 0.0;\r\n return result;\r\n }\r\n\r\n const dates = this._dates;\r\n const lastIndex = this._lastIndex;\r\n\r\n let before = 0;\r\n let after = 0;\r\n if (defined(lastIndex)) {\r\n const previousIndexDate = dates[lastIndex];\r\n const nextIndexDate = dates[lastIndex + 1];\r\n const isAfterPrevious = JulianDate.lessThanOrEquals(\r\n previousIndexDate,\r\n date\r\n );\r\n const isAfterLastSample = !defined(nextIndexDate);\r\n const isBeforeNext =\r\n isAfterLastSample || JulianDate.greaterThanOrEquals(nextIndexDate, date);\r\n\r\n if (isAfterPrevious && isBeforeNext) {\r\n before = lastIndex;\r\n\r\n if (!isAfterLastSample && nextIndexDate.equals(date)) {\r\n ++before;\r\n }\r\n after = before + 1;\r\n\r\n interpolate(this, dates, this._samples, date, before, after, result);\r\n return result;\r\n }\r\n }\r\n\r\n let index = binarySearch(dates, date, JulianDate.compare, this._dateColumn);\r\n if (index >= 0) {\r\n // If the next entry is the same date, use the later entry. This way, if two entries\r\n // describe the same moment, one before a leap second and the other after, then we will use\r\n // the post-leap second data.\r\n if (index < dates.length - 1 && dates[index + 1].equals(date)) {\r\n ++index;\r\n }\r\n before = index;\r\n after = index;\r\n } else {\r\n after = ~index;\r\n before = after - 1;\r\n\r\n // Use the first entry if the date requested is before the beginning of the data.\r\n if (before < 0) {\r\n before = 0;\r\n }\r\n }\r\n\r\n this._lastIndex = before;\r\n\r\n interpolate(this, dates, this._samples, date, before, after, result);\r\n return result;\r\n};\r\n\r\nfunction compareLeapSecondDates(leapSecond, dateToFind) {\r\n return JulianDate.compare(leapSecond.julianDate, dateToFind);\r\n}\r\n\r\nfunction onDataReady(eop, eopData) {\r\n if (!defined(eopData.columnNames)) {\r\n eop._dataError =\r\n \"Error in loaded EOP data: The columnNames property is required.\";\r\n return;\r\n }\r\n\r\n if (!defined(eopData.samples)) {\r\n eop._dataError =\r\n \"Error in loaded EOP data: The samples property is required.\";\r\n return;\r\n }\r\n\r\n const dateColumn = eopData.columnNames.indexOf(\"modifiedJulianDateUtc\");\r\n const xPoleWanderRadiansColumn = eopData.columnNames.indexOf(\r\n \"xPoleWanderRadians\"\r\n );\r\n const yPoleWanderRadiansColumn = eopData.columnNames.indexOf(\r\n \"yPoleWanderRadians\"\r\n );\r\n const ut1MinusUtcSecondsColumn = eopData.columnNames.indexOf(\r\n \"ut1MinusUtcSeconds\"\r\n );\r\n const xCelestialPoleOffsetRadiansColumn = eopData.columnNames.indexOf(\r\n \"xCelestialPoleOffsetRadians\"\r\n );\r\n const yCelestialPoleOffsetRadiansColumn = eopData.columnNames.indexOf(\r\n \"yCelestialPoleOffsetRadians\"\r\n );\r\n const taiMinusUtcSecondsColumn = eopData.columnNames.indexOf(\r\n \"taiMinusUtcSeconds\"\r\n );\r\n\r\n if (\r\n dateColumn < 0 ||\r\n xPoleWanderRadiansColumn < 0 ||\r\n yPoleWanderRadiansColumn < 0 ||\r\n ut1MinusUtcSecondsColumn < 0 ||\r\n xCelestialPoleOffsetRadiansColumn < 0 ||\r\n yCelestialPoleOffsetRadiansColumn < 0 ||\r\n taiMinusUtcSecondsColumn < 0\r\n ) {\r\n eop._dataError =\r\n \"Error in loaded EOP data: The columnNames property must include modifiedJulianDateUtc, xPoleWanderRadians, yPoleWanderRadians, ut1MinusUtcSeconds, xCelestialPoleOffsetRadians, yCelestialPoleOffsetRadians, and taiMinusUtcSeconds columns\";\r\n return;\r\n }\r\n\r\n const samples = (eop._samples = eopData.samples);\r\n const dates = (eop._dates = []);\r\n\r\n eop._dateColumn = dateColumn;\r\n eop._xPoleWanderRadiansColumn = xPoleWanderRadiansColumn;\r\n eop._yPoleWanderRadiansColumn = yPoleWanderRadiansColumn;\r\n eop._ut1MinusUtcSecondsColumn = ut1MinusUtcSecondsColumn;\r\n eop._xCelestialPoleOffsetRadiansColumn = xCelestialPoleOffsetRadiansColumn;\r\n eop._yCelestialPoleOffsetRadiansColumn = yCelestialPoleOffsetRadiansColumn;\r\n eop._taiMinusUtcSecondsColumn = taiMinusUtcSecondsColumn;\r\n\r\n eop._columnCount = eopData.columnNames.length;\r\n eop._lastIndex = undefined;\r\n\r\n let lastTaiMinusUtc;\r\n\r\n const addNewLeapSeconds = eop._addNewLeapSeconds;\r\n\r\n // Convert the ISO8601 dates to JulianDates.\r\n for (let i = 0, len = samples.length; i < len; i += eop._columnCount) {\r\n const mjd = samples[i + dateColumn];\r\n const taiMinusUtc = samples[i + taiMinusUtcSecondsColumn];\r\n const day = mjd + TimeConstants.MODIFIED_JULIAN_DATE_DIFFERENCE;\r\n const date = new JulianDate(day, taiMinusUtc, TimeStandard.TAI);\r\n dates.push(date);\r\n\r\n if (addNewLeapSeconds) {\r\n if (taiMinusUtc !== lastTaiMinusUtc && defined(lastTaiMinusUtc)) {\r\n // We crossed a leap second boundary, so add the leap second\r\n // if it does not already exist.\r\n const leapSeconds = JulianDate.leapSeconds;\r\n const leapSecondIndex = binarySearch(\r\n leapSeconds,\r\n date,\r\n compareLeapSecondDates\r\n );\r\n if (leapSecondIndex < 0) {\r\n const leapSecond = new LeapSecond(date, taiMinusUtc);\r\n leapSeconds.splice(~leapSecondIndex, 0, leapSecond);\r\n }\r\n }\r\n lastTaiMinusUtc = taiMinusUtc;\r\n }\r\n }\r\n}\r\n\r\nfunction fillResultFromIndex(eop, samples, index, columnCount, result) {\r\n const start = index * columnCount;\r\n result.xPoleWander = samples[start + eop._xPoleWanderRadiansColumn];\r\n result.yPoleWander = samples[start + eop._yPoleWanderRadiansColumn];\r\n result.xPoleOffset = samples[start + eop._xCelestialPoleOffsetRadiansColumn];\r\n result.yPoleOffset = samples[start + eop._yCelestialPoleOffsetRadiansColumn];\r\n result.ut1MinusUtc = samples[start + eop._ut1MinusUtcSecondsColumn];\r\n}\r\n\r\nfunction linearInterp(dx, y1, y2) {\r\n return y1 + dx * (y2 - y1);\r\n}\r\n\r\nfunction interpolate(eop, dates, samples, date, before, after, result) {\r\n const columnCount = eop._columnCount;\r\n\r\n // First check the bounds on the EOP data\r\n // If we are after the bounds of the data, return zeros.\r\n // The 'before' index should never be less than zero.\r\n if (after > dates.length - 1) {\r\n result.xPoleWander = 0;\r\n result.yPoleWander = 0;\r\n result.xPoleOffset = 0;\r\n result.yPoleOffset = 0;\r\n result.ut1MinusUtc = 0;\r\n return result;\r\n }\r\n\r\n const beforeDate = dates[before];\r\n const afterDate = dates[after];\r\n if (beforeDate.equals(afterDate) || date.equals(beforeDate)) {\r\n fillResultFromIndex(eop, samples, before, columnCount, result);\r\n return result;\r\n } else if (date.equals(afterDate)) {\r\n fillResultFromIndex(eop, samples, after, columnCount, result);\r\n return result;\r\n }\r\n\r\n const factor =\r\n JulianDate.secondsDifference(date, beforeDate) /\r\n JulianDate.secondsDifference(afterDate, beforeDate);\r\n\r\n const startBefore = before * columnCount;\r\n const startAfter = after * columnCount;\r\n\r\n // Handle UT1 leap second edge case\r\n let beforeUt1MinusUtc = samples[startBefore + eop._ut1MinusUtcSecondsColumn];\r\n let afterUt1MinusUtc = samples[startAfter + eop._ut1MinusUtcSecondsColumn];\r\n\r\n const offsetDifference = afterUt1MinusUtc - beforeUt1MinusUtc;\r\n if (offsetDifference > 0.5 || offsetDifference < -0.5) {\r\n // The absolute difference between the values is more than 0.5, so we may have\r\n // crossed a leap second. Check if this is the case and, if so, adjust the\r\n // afterValue to account for the leap second. This way, our interpolation will\r\n // produce reasonable results.\r\n const beforeTaiMinusUtc =\r\n samples[startBefore + eop._taiMinusUtcSecondsColumn];\r\n const afterTaiMinusUtc =\r\n samples[startAfter + eop._taiMinusUtcSecondsColumn];\r\n if (beforeTaiMinusUtc !== afterTaiMinusUtc) {\r\n if (afterDate.equals(date)) {\r\n // If we are at the end of the leap second interval, take the second value\r\n // Otherwise, the interpolation below will yield the wrong side of the\r\n // discontinuity\r\n // At the end of the leap second, we need to start accounting for the jump\r\n beforeUt1MinusUtc = afterUt1MinusUtc;\r\n } else {\r\n // Otherwise, remove the leap second so that the interpolation is correct\r\n afterUt1MinusUtc -= afterTaiMinusUtc - beforeTaiMinusUtc;\r\n }\r\n }\r\n }\r\n\r\n result.xPoleWander = linearInterp(\r\n factor,\r\n samples[startBefore + eop._xPoleWanderRadiansColumn],\r\n samples[startAfter + eop._xPoleWanderRadiansColumn]\r\n );\r\n result.yPoleWander = linearInterp(\r\n factor,\r\n samples[startBefore + eop._yPoleWanderRadiansColumn],\r\n samples[startAfter + eop._yPoleWanderRadiansColumn]\r\n );\r\n result.xPoleOffset = linearInterp(\r\n factor,\r\n samples[startBefore + eop._xCelestialPoleOffsetRadiansColumn],\r\n samples[startAfter + eop._xCelestialPoleOffsetRadiansColumn]\r\n );\r\n result.yPoleOffset = linearInterp(\r\n factor,\r\n samples[startBefore + eop._yCelestialPoleOffsetRadiansColumn],\r\n samples[startAfter + eop._yCelestialPoleOffsetRadiansColumn]\r\n );\r\n result.ut1MinusUtc = linearInterp(\r\n factor,\r\n beforeUt1MinusUtc,\r\n afterUt1MinusUtc\r\n );\r\n return result;\r\n}\r\nexport default EarthOrientationParameters;\r\n","import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * A rotation expressed as a heading, pitch, and roll. Heading is the rotation about the\r\n * negative z axis. Pitch is the rotation about the negative y axis. Roll is the rotation about\r\n * the positive x axis.\r\n * @alias HeadingPitchRoll\r\n * @constructor\r\n *\r\n * @param {Number} [heading=0.0] The heading component in radians.\r\n * @param {Number} [pitch=0.0] The pitch component in radians.\r\n * @param {Number} [roll=0.0] The roll component in radians.\r\n */\r\nfunction HeadingPitchRoll(heading, pitch, roll) {\r\n /**\r\n * Gets or sets the heading.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.heading = defaultValue(heading, 0.0);\r\n /**\r\n * Gets or sets the pitch.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.pitch = defaultValue(pitch, 0.0);\r\n /**\r\n * Gets or sets the roll.\r\n * @type {Number}\r\n * @default 0.0\r\n */\r\n this.roll = defaultValue(roll, 0.0);\r\n}\r\n\r\n/**\r\n * Computes the heading, pitch and roll from a quaternion (see http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles )\r\n *\r\n * @param {Quaternion} quaternion The quaternion from which to retrieve heading, pitch, and roll, all expressed in radians.\r\n * @param {HeadingPitchRoll} [result] The object in which to store the result. If not provided, a new instance is created and returned.\r\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided.\r\n */\r\nHeadingPitchRoll.fromQuaternion = function (quaternion, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(quaternion)) {\r\n throw new DeveloperError(\"quaternion is required\");\r\n }\r\n //>>includeEnd('debug');\r\n if (!defined(result)) {\r\n result = new HeadingPitchRoll();\r\n }\r\n const test = 2 * (quaternion.w * quaternion.y - quaternion.z * quaternion.x);\r\n const denominatorRoll =\r\n 1 - 2 * (quaternion.x * quaternion.x + quaternion.y * quaternion.y);\r\n const numeratorRoll =\r\n 2 * (quaternion.w * quaternion.x + quaternion.y * quaternion.z);\r\n const denominatorHeading =\r\n 1 - 2 * (quaternion.y * quaternion.y + quaternion.z * quaternion.z);\r\n const numeratorHeading =\r\n 2 * (quaternion.w * quaternion.z + quaternion.x * quaternion.y);\r\n result.heading = -Math.atan2(numeratorHeading, denominatorHeading);\r\n result.roll = Math.atan2(numeratorRoll, denominatorRoll);\r\n result.pitch = -CesiumMath.asinClamped(test);\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns a new HeadingPitchRoll instance from angles given in degrees.\r\n *\r\n * @param {Number} heading the heading in degrees\r\n * @param {Number} pitch the pitch in degrees\r\n * @param {Number} roll the heading in degrees\r\n * @param {HeadingPitchRoll} [result] The object in which to store the result. If not provided, a new instance is created and returned.\r\n * @returns {HeadingPitchRoll} A new HeadingPitchRoll instance\r\n */\r\nHeadingPitchRoll.fromDegrees = function (heading, pitch, roll, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(heading)) {\r\n throw new DeveloperError(\"heading is required\");\r\n }\r\n if (!defined(pitch)) {\r\n throw new DeveloperError(\"pitch is required\");\r\n }\r\n if (!defined(roll)) {\r\n throw new DeveloperError(\"roll is required\");\r\n }\r\n //>>includeEnd('debug');\r\n if (!defined(result)) {\r\n result = new HeadingPitchRoll();\r\n }\r\n result.heading = heading * CesiumMath.RADIANS_PER_DEGREE;\r\n result.pitch = pitch * CesiumMath.RADIANS_PER_DEGREE;\r\n result.roll = roll * CesiumMath.RADIANS_PER_DEGREE;\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a HeadingPitchRoll instance.\r\n *\r\n * @param {HeadingPitchRoll} headingPitchRoll The HeadingPitchRoll to duplicate.\r\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\r\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided. (Returns undefined if headingPitchRoll is undefined)\r\n */\r\nHeadingPitchRoll.clone = function (headingPitchRoll, result) {\r\n if (!defined(headingPitchRoll)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n return new HeadingPitchRoll(\r\n headingPitchRoll.heading,\r\n headingPitchRoll.pitch,\r\n headingPitchRoll.roll\r\n );\r\n }\r\n result.heading = headingPitchRoll.heading;\r\n result.pitch = headingPitchRoll.pitch;\r\n result.roll = headingPitchRoll.roll;\r\n return result;\r\n};\r\n\r\n/**\r\n * Compares the provided HeadingPitchRolls componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {HeadingPitchRoll} [left] The first HeadingPitchRoll.\r\n * @param {HeadingPitchRoll} [right] The second HeadingPitchRoll.\r\n * @returns {Boolean} true if left and right are equal, false otherwise.\r\n */\r\nHeadingPitchRoll.equals = function (left, right) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n left.heading === right.heading &&\r\n left.pitch === right.pitch &&\r\n left.roll === right.roll)\r\n );\r\n};\r\n\r\n/**\r\n * Compares the provided HeadingPitchRolls componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {HeadingPitchRoll} [left] The first HeadingPitchRoll.\r\n * @param {HeadingPitchRoll} [right] The second HeadingPitchRoll.\r\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if left and right are within the provided epsilon, false otherwise.\r\n */\r\nHeadingPitchRoll.equalsEpsilon = function (\r\n left,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return (\r\n left === right ||\r\n (defined(left) &&\r\n defined(right) &&\r\n CesiumMath.equalsEpsilon(\r\n left.heading,\r\n right.heading,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n left.pitch,\r\n right.pitch,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ) &&\r\n CesiumMath.equalsEpsilon(\r\n left.roll,\r\n right.roll,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n ))\r\n );\r\n};\r\n\r\n/**\r\n * Duplicates this HeadingPitchRoll instance.\r\n *\r\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\r\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if one was not provided.\r\n */\r\nHeadingPitchRoll.prototype.clone = function (result) {\r\n return HeadingPitchRoll.clone(this, result);\r\n};\r\n\r\n/**\r\n * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns\r\n * true if they are equal, false otherwise.\r\n *\r\n * @param {HeadingPitchRoll} [right] The right hand side HeadingPitchRoll.\r\n * @returns {Boolean} true if they are equal, false otherwise.\r\n */\r\nHeadingPitchRoll.prototype.equals = function (right) {\r\n return HeadingPitchRoll.equals(this, right);\r\n};\r\n\r\n/**\r\n * Compares this HeadingPitchRoll against the provided HeadingPitchRoll componentwise and returns\r\n * true if they pass an absolute or relative tolerance test,\r\n * false otherwise.\r\n *\r\n * @param {HeadingPitchRoll} [right] The right hand side HeadingPitchRoll.\r\n * @param {Number} [relativeEpsilon=0] The relative epsilon tolerance to use for equality testing.\r\n * @param {Number} [absoluteEpsilon=relativeEpsilon] The absolute epsilon tolerance to use for equality testing.\r\n * @returns {Boolean} true if they are within the provided epsilon, false otherwise.\r\n */\r\nHeadingPitchRoll.prototype.equalsEpsilon = function (\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n) {\r\n return HeadingPitchRoll.equalsEpsilon(\r\n this,\r\n right,\r\n relativeEpsilon,\r\n absoluteEpsilon\r\n );\r\n};\r\n\r\n/**\r\n * Creates a string representing this HeadingPitchRoll in the format '(heading, pitch, roll)' in radians.\r\n *\r\n * @returns {String} A string representing the provided HeadingPitchRoll in the format '(heading, pitch, roll)'.\r\n */\r\nHeadingPitchRoll.prototype.toString = function () {\r\n return `(${this.heading}, ${this.pitch}, ${this.roll})`;\r\n};\r\nexport default HeadingPitchRoll;\r\n","import defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport getAbsoluteUri from \"./getAbsoluteUri.js\";\r\nimport Resource from \"./Resource.js\";\r\n\r\n/*global CESIUM_BASE_URL,define,require*/\r\n\r\nconst cesiumScriptRegex = /((?:.*\\/)|^)Cesium\\.js(?:\\?|\\#|$)/;\r\nfunction getBaseUrlFromCesiumScript() {\r\n const scripts = document.getElementsByTagName(\"script\");\r\n for (let i = 0, len = scripts.length; i < len; ++i) {\r\n const src = scripts[i].getAttribute(\"src\");\r\n const result = cesiumScriptRegex.exec(src);\r\n if (result !== null) {\r\n return result[1];\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nlet a;\r\nfunction tryMakeAbsolute(url) {\r\n if (typeof document === \"undefined\") {\r\n //Node.js and Web Workers. In both cases, the URL will already be absolute.\r\n return url;\r\n }\r\n\r\n if (!defined(a)) {\r\n a = document.createElement(\"a\");\r\n }\r\n a.href = url;\r\n\r\n // IE only absolutizes href on get, not set\r\n // eslint-disable-next-line no-self-assign\r\n a.href = a.href;\r\n return a.href;\r\n}\r\n\r\nlet baseResource;\r\nfunction getCesiumBaseUrl() {\r\n if (defined(baseResource)) {\r\n return baseResource;\r\n }\r\n\r\n let baseUrlString;\r\n if (typeof CESIUM_BASE_URL !== \"undefined\") {\r\n baseUrlString = CESIUM_BASE_URL;\r\n } else if (\r\n typeof define === \"object\" &&\r\n defined(define.amd) &&\r\n !define.amd.toUrlUndefined &&\r\n defined(require.toUrl)\r\n ) {\r\n baseUrlString = getAbsoluteUri(\r\n \"..\",\r\n buildModuleUrl(\"Core/buildModuleUrl.js\")\r\n );\r\n } else {\r\n baseUrlString = getBaseUrlFromCesiumScript();\r\n }\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(baseUrlString)) {\r\n throw new DeveloperError(\r\n \"Unable to determine Cesium base URL automatically, try defining a global variable called CESIUM_BASE_URL.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n baseResource = new Resource({\r\n url: tryMakeAbsolute(baseUrlString),\r\n });\r\n baseResource.appendForwardSlash();\r\n\r\n return baseResource;\r\n}\r\n\r\nfunction buildModuleUrlFromRequireToUrl(moduleID) {\r\n //moduleID will be non-relative, so require it relative to this module, in Core.\r\n return tryMakeAbsolute(require.toUrl(`../${moduleID}`));\r\n}\r\n\r\nfunction buildModuleUrlFromBaseUrl(moduleID) {\r\n const resource = getCesiumBaseUrl().getDerivedResource({\r\n url: moduleID,\r\n });\r\n return resource.url;\r\n}\r\n\r\nlet implementation;\r\n\r\n/**\r\n * Given a relative URL under the Cesium base URL, returns an absolute URL.\r\n * @function\r\n *\r\n * @param {String} relativeUrl The relative path.\r\n * @returns {String} The absolutely URL representation of the provided path.\r\n *\r\n * @example\r\n * const viewer = new Cesium.Viewer(\"cesiumContainer\", {\r\n * imageryProvider: new Cesium.TileMapServiceImageryProvider({\r\n * url: Cesium.buildModuleUrl(\"Assets/Textures/NaturalEarthII\"),\r\n * }),\r\n * baseLayerPicker: false,\r\n * });\r\n */\r\nfunction buildModuleUrl(relativeUrl) {\r\n if (!defined(implementation)) {\r\n //select implementation\r\n if (\r\n typeof define === \"object\" &&\r\n defined(define.amd) &&\r\n !define.amd.toUrlUndefined &&\r\n defined(require.toUrl)\r\n ) {\r\n implementation = buildModuleUrlFromRequireToUrl;\r\n } else {\r\n implementation = buildModuleUrlFromBaseUrl;\r\n }\r\n }\r\n\r\n const url = implementation(relativeUrl);\r\n return url;\r\n}\r\n\r\n// exposed for testing\r\nbuildModuleUrl._cesiumScriptRegex = cesiumScriptRegex;\r\nbuildModuleUrl._buildModuleUrlFromBaseUrl = buildModuleUrlFromBaseUrl;\r\nbuildModuleUrl._clearBaseResource = function () {\r\n baseResource = undefined;\r\n};\r\n\r\n/**\r\n * Sets the base URL for resolving modules.\r\n * @param {String} value The new base URL.\r\n */\r\nbuildModuleUrl.setBaseUrl = function (value) {\r\n baseResource = Resource.DEFAULT.getDerivedResource({\r\n url: value,\r\n });\r\n};\r\n\r\n/**\r\n * Gets the base URL for resolving modules.\r\n *\r\n * @function\r\n * @returns {String} The configured base URL\r\n */\r\nbuildModuleUrl.getCesiumBaseUrl = getCesiumBaseUrl;\r\n\r\nexport default buildModuleUrl;\r\n","/**\r\n * An IAU 2006 XYS value sampled at a particular time.\r\n *\r\n * @alias Iau2006XysSample\r\n * @constructor\r\n *\r\n * @param {Number} x The X value.\r\n * @param {Number} y The Y value.\r\n * @param {Number} s The S value.\r\n *\r\n * @private\r\n */\r\nfunction Iau2006XysSample(x, y, s) {\r\n /**\r\n * The X value.\r\n * @type {Number}\r\n */\r\n this.x = x;\r\n\r\n /**\r\n * The Y value.\r\n * @type {Number}\r\n */\r\n this.y = y;\r\n\r\n /**\r\n * The S value.\r\n * @type {Number}\r\n */\r\n this.s = s;\r\n}\r\nexport default Iau2006XysSample;\r\n","import buildModuleUrl from \"./buildModuleUrl.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Iau2006XysSample from \"./Iau2006XysSample.js\";\r\nimport JulianDate from \"./JulianDate.js\";\r\nimport Resource from \"./Resource.js\";\r\nimport TimeStandard from \"./TimeStandard.js\";\r\n\r\n/**\r\n * A set of IAU2006 XYS data that is used to evaluate the transformation between the International\r\n * Celestial Reference Frame (ICRF) and the International Terrestrial Reference Frame (ITRF).\r\n *\r\n * @alias Iau2006XysData\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Resource|String} [options.xysFileUrlTemplate='Assets/IAU2006_XYS/IAU2006_XYS_{0}.json'] A template URL for obtaining the XYS data. In the template,\r\n * `{0}` will be replaced with the file index.\r\n * @param {Number} [options.interpolationOrder=9] The order of interpolation to perform on the XYS data.\r\n * @param {Number} [options.sampleZeroJulianEphemerisDate=2442396.5] The Julian ephemeris date (JED) of the\r\n * first XYS sample.\r\n * @param {Number} [options.stepSizeDays=1.0] The step size, in days, between successive XYS samples.\r\n * @param {Number} [options.samplesPerXysFile=1000] The number of samples in each XYS file.\r\n * @param {Number} [options.totalSamples=27426] The total number of samples in all XYS files.\r\n *\r\n * @private\r\n */\r\nfunction Iau2006XysData(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n this._xysFileUrlTemplate = Resource.createIfNeeded(\r\n options.xysFileUrlTemplate\r\n );\r\n this._interpolationOrder = defaultValue(options.interpolationOrder, 9);\r\n this._sampleZeroJulianEphemerisDate = defaultValue(\r\n options.sampleZeroJulianEphemerisDate,\r\n 2442396.5\r\n );\r\n this._sampleZeroDateTT = new JulianDate(\r\n this._sampleZeroJulianEphemerisDate,\r\n 0.0,\r\n TimeStandard.TAI\r\n );\r\n this._stepSizeDays = defaultValue(options.stepSizeDays, 1.0);\r\n this._samplesPerXysFile = defaultValue(options.samplesPerXysFile, 1000);\r\n this._totalSamples = defaultValue(options.totalSamples, 27426);\r\n this._samples = new Array(this._totalSamples * 3);\r\n this._chunkDownloadsInProgress = [];\r\n\r\n const order = this._interpolationOrder;\r\n\r\n // Compute denominators and X values for interpolation.\r\n const denom = (this._denominators = new Array(order + 1));\r\n const xTable = (this._xTable = new Array(order + 1));\r\n\r\n const stepN = Math.pow(this._stepSizeDays, order);\r\n\r\n for (let i = 0; i <= order; ++i) {\r\n denom[i] = stepN;\r\n xTable[i] = i * this._stepSizeDays;\r\n\r\n for (let j = 0; j <= order; ++j) {\r\n if (j !== i) {\r\n denom[i] *= i - j;\r\n }\r\n }\r\n\r\n denom[i] = 1.0 / denom[i];\r\n }\r\n\r\n // Allocate scratch arrays for interpolation.\r\n this._work = new Array(order + 1);\r\n this._coef = new Array(order + 1);\r\n}\r\n\r\nconst julianDateScratch = new JulianDate(0, 0.0, TimeStandard.TAI);\r\n\r\nfunction getDaysSinceEpoch(xys, dayTT, secondTT) {\r\n const dateTT = julianDateScratch;\r\n dateTT.dayNumber = dayTT;\r\n dateTT.secondsOfDay = secondTT;\r\n return JulianDate.daysDifference(dateTT, xys._sampleZeroDateTT);\r\n}\r\n\r\n/**\r\n * Preloads XYS data for a specified date range.\r\n *\r\n * @param {Number} startDayTT The Julian day number of the beginning of the interval to preload, expressed in\r\n * the Terrestrial Time (TT) time standard.\r\n * @param {Number} startSecondTT The seconds past noon of the beginning of the interval to preload, expressed in\r\n * the Terrestrial Time (TT) time standard.\r\n * @param {Number} stopDayTT The Julian day number of the end of the interval to preload, expressed in\r\n * the Terrestrial Time (TT) time standard.\r\n * @param {Number} stopSecondTT The seconds past noon of the end of the interval to preload, expressed in\r\n * the Terrestrial Time (TT) time standard.\r\n * @returns {Promise} A promise that, when resolved, indicates that the requested interval has been\r\n * preloaded.\r\n */\r\nIau2006XysData.prototype.preload = function (\r\n startDayTT,\r\n startSecondTT,\r\n stopDayTT,\r\n stopSecondTT\r\n) {\r\n const startDaysSinceEpoch = getDaysSinceEpoch(\r\n this,\r\n startDayTT,\r\n startSecondTT\r\n );\r\n const stopDaysSinceEpoch = getDaysSinceEpoch(this, stopDayTT, stopSecondTT);\r\n\r\n let startIndex =\r\n (startDaysSinceEpoch / this._stepSizeDays - this._interpolationOrder / 2) |\r\n 0;\r\n if (startIndex < 0) {\r\n startIndex = 0;\r\n }\r\n\r\n let stopIndex =\r\n (stopDaysSinceEpoch / this._stepSizeDays - this._interpolationOrder / 2) |\r\n (0 + this._interpolationOrder);\r\n if (stopIndex >= this._totalSamples) {\r\n stopIndex = this._totalSamples - 1;\r\n }\r\n\r\n const startChunk = (startIndex / this._samplesPerXysFile) | 0;\r\n const stopChunk = (stopIndex / this._samplesPerXysFile) | 0;\r\n\r\n const promises = [];\r\n for (let i = startChunk; i <= stopChunk; ++i) {\r\n promises.push(requestXysChunk(this, i));\r\n }\r\n\r\n return Promise.all(promises);\r\n};\r\n\r\n/**\r\n * Computes the XYS values for a given date by interpolating. If the required data is not yet downloaded,\r\n * this method will return undefined.\r\n *\r\n * @param {Number} dayTT The Julian day number for which to compute the XYS value, expressed in\r\n * the Terrestrial Time (TT) time standard.\r\n * @param {Number} secondTT The seconds past noon of the date for which to compute the XYS value, expressed in\r\n * the Terrestrial Time (TT) time standard.\r\n * @param {Iau2006XysSample} [result] The instance to which to copy the interpolated result. If this parameter\r\n * is undefined, a new instance is allocated and returned.\r\n * @returns {Iau2006XysSample} The interpolated XYS values, or undefined if the required data for this\r\n * computation has not yet been downloaded.\r\n *\r\n * @see Iau2006XysData#preload\r\n */\r\nIau2006XysData.prototype.computeXysRadians = function (\r\n dayTT,\r\n secondTT,\r\n result\r\n) {\r\n const daysSinceEpoch = getDaysSinceEpoch(this, dayTT, secondTT);\r\n if (daysSinceEpoch < 0.0) {\r\n // Can't evaluate prior to the epoch of the data.\r\n return undefined;\r\n }\r\n\r\n const centerIndex = (daysSinceEpoch / this._stepSizeDays) | 0;\r\n if (centerIndex >= this._totalSamples) {\r\n // Can't evaluate after the last sample in the data.\r\n return undefined;\r\n }\r\n\r\n const degree = this._interpolationOrder;\r\n\r\n let firstIndex = centerIndex - ((degree / 2) | 0);\r\n if (firstIndex < 0) {\r\n firstIndex = 0;\r\n }\r\n let lastIndex = firstIndex + degree;\r\n if (lastIndex >= this._totalSamples) {\r\n lastIndex = this._totalSamples - 1;\r\n firstIndex = lastIndex - degree;\r\n if (firstIndex < 0) {\r\n firstIndex = 0;\r\n }\r\n }\r\n\r\n // Are all the samples we need present?\r\n // We can assume so if the first and last are present\r\n let isDataMissing = false;\r\n const samples = this._samples;\r\n if (!defined(samples[firstIndex * 3])) {\r\n requestXysChunk(this, (firstIndex / this._samplesPerXysFile) | 0);\r\n isDataMissing = true;\r\n }\r\n\r\n if (!defined(samples[lastIndex * 3])) {\r\n requestXysChunk(this, (lastIndex / this._samplesPerXysFile) | 0);\r\n isDataMissing = true;\r\n }\r\n\r\n if (isDataMissing) {\r\n return undefined;\r\n }\r\n\r\n if (!defined(result)) {\r\n result = new Iau2006XysSample(0.0, 0.0, 0.0);\r\n } else {\r\n result.x = 0.0;\r\n result.y = 0.0;\r\n result.s = 0.0;\r\n }\r\n\r\n const x = daysSinceEpoch - firstIndex * this._stepSizeDays;\r\n\r\n const work = this._work;\r\n const denom = this._denominators;\r\n const coef = this._coef;\r\n const xTable = this._xTable;\r\n\r\n let i, j;\r\n for (i = 0; i <= degree; ++i) {\r\n work[i] = x - xTable[i];\r\n }\r\n\r\n for (i = 0; i <= degree; ++i) {\r\n coef[i] = 1.0;\r\n\r\n for (j = 0; j <= degree; ++j) {\r\n if (j !== i) {\r\n coef[i] *= work[j];\r\n }\r\n }\r\n\r\n coef[i] *= denom[i];\r\n\r\n let sampleIndex = (firstIndex + i) * 3;\r\n result.x += coef[i] * samples[sampleIndex++];\r\n result.y += coef[i] * samples[sampleIndex++];\r\n result.s += coef[i] * samples[sampleIndex];\r\n }\r\n\r\n return result;\r\n};\r\n\r\nfunction requestXysChunk(xysData, chunkIndex) {\r\n if (xysData._chunkDownloadsInProgress[chunkIndex]) {\r\n // Chunk has already been requested.\r\n return xysData._chunkDownloadsInProgress[chunkIndex];\r\n }\r\n\r\n let chunkUrl;\r\n const xysFileUrlTemplate = xysData._xysFileUrlTemplate;\r\n if (defined(xysFileUrlTemplate)) {\r\n chunkUrl = xysFileUrlTemplate.getDerivedResource({\r\n templateValues: {\r\n 0: chunkIndex,\r\n },\r\n });\r\n } else {\r\n chunkUrl = new Resource({\r\n url: buildModuleUrl(`Assets/IAU2006_XYS/IAU2006_XYS_${chunkIndex}.json`),\r\n });\r\n }\r\n\r\n const promise = chunkUrl.fetchJson().then(function (chunk) {\r\n xysData._chunkDownloadsInProgress[chunkIndex] = false;\r\n\r\n const samples = xysData._samples;\r\n const newSamples = chunk.samples;\r\n const startIndex = chunkIndex * xysData._samplesPerXysFile * 3;\r\n\r\n for (let i = 0, len = newSamples.length; i < len; ++i) {\r\n samples[startIndex + i] = newSamples[i];\r\n }\r\n });\r\n xysData._chunkDownloadsInProgress[chunkIndex] = promise;\r\n\r\n return promise;\r\n}\r\nexport default Iau2006XysData;\r\n","import Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartesian4 from \"./Cartesian4.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport EarthOrientationParameters from \"./EarthOrientationParameters.js\";\r\nimport EarthOrientationParametersSample from \"./EarthOrientationParametersSample.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport HeadingPitchRoll from \"./HeadingPitchRoll.js\";\r\nimport Iau2006XysData from \"./Iau2006XysData.js\";\r\nimport Iau2006XysSample from \"./Iau2006XysSample.js\";\r\nimport JulianDate from \"./JulianDate.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport TimeConstants from \"./TimeConstants.js\";\r\n\r\n/**\r\n * Contains functions for transforming positions to various reference frames.\r\n *\r\n * @namespace Transforms\r\n */\r\nconst Transforms = {};\r\n\r\nconst vectorProductLocalFrame = {\r\n up: {\r\n south: \"east\",\r\n north: \"west\",\r\n west: \"south\",\r\n east: \"north\",\r\n },\r\n down: {\r\n south: \"west\",\r\n north: \"east\",\r\n west: \"north\",\r\n east: \"south\",\r\n },\r\n south: {\r\n up: \"west\",\r\n down: \"east\",\r\n west: \"down\",\r\n east: \"up\",\r\n },\r\n north: {\r\n up: \"east\",\r\n down: \"west\",\r\n west: \"up\",\r\n east: \"down\",\r\n },\r\n west: {\r\n up: \"north\",\r\n down: \"south\",\r\n north: \"down\",\r\n south: \"up\",\r\n },\r\n east: {\r\n up: \"south\",\r\n down: \"north\",\r\n north: \"up\",\r\n south: \"down\",\r\n },\r\n};\r\n\r\nconst degeneratePositionLocalFrame = {\r\n north: [-1, 0, 0],\r\n east: [0, 1, 0],\r\n up: [0, 0, 1],\r\n south: [1, 0, 0],\r\n west: [0, -1, 0],\r\n down: [0, 0, -1],\r\n};\r\n\r\nconst localFrameToFixedFrameCache = {};\r\n\r\nconst scratchCalculateCartesian = {\r\n east: new Cartesian3(),\r\n north: new Cartesian3(),\r\n up: new Cartesian3(),\r\n west: new Cartesian3(),\r\n south: new Cartesian3(),\r\n down: new Cartesian3(),\r\n};\r\nlet scratchFirstCartesian = new Cartesian3();\r\nlet scratchSecondCartesian = new Cartesian3();\r\nlet scratchThirdCartesian = new Cartesian3();\r\n/**\r\n * Generates a function that computes a 4x4 transformation matrix from a reference frame\r\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\r\n * @param {String} firstAxis name of the first axis of the local reference frame. Must be\r\n * 'east', 'north', 'up', 'west', 'south' or 'down'.\r\n * @param {String} secondAxis name of the second axis of the local reference frame. Must be\r\n * 'east', 'north', 'up', 'west', 'south' or 'down'.\r\n * @return {Transforms.LocalFrameToFixedFrame} The function that will computes a\r\n * 4x4 transformation matrix from a reference frame, with first axis and second axis compliant with the parameters,\r\n */\r\nTransforms.localFrameToFixedFrameGenerator = function (firstAxis, secondAxis) {\r\n if (\r\n !vectorProductLocalFrame.hasOwnProperty(firstAxis) ||\r\n !vectorProductLocalFrame[firstAxis].hasOwnProperty(secondAxis)\r\n ) {\r\n throw new DeveloperError(\r\n \"firstAxis and secondAxis must be east, north, up, west, south or down.\"\r\n );\r\n }\r\n const thirdAxis = vectorProductLocalFrame[firstAxis][secondAxis];\r\n\r\n /**\r\n * Computes a 4x4 transformation matrix from a reference frame\r\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\r\n * @callback Transforms.LocalFrameToFixedFrame\r\n * @param {Cartesian3} origin The center point of the local reference frame.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\r\n */\r\n let resultat;\r\n const hashAxis = firstAxis + secondAxis;\r\n if (defined(localFrameToFixedFrameCache[hashAxis])) {\r\n resultat = localFrameToFixedFrameCache[hashAxis];\r\n } else {\r\n resultat = function (origin, ellipsoid, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(origin)) {\r\n throw new DeveloperError(\"origin is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n if (!defined(result)) {\r\n result = new Matrix4();\r\n }\r\n if (\r\n Cartesian3.equalsEpsilon(origin, Cartesian3.ZERO, CesiumMath.EPSILON14)\r\n ) {\r\n // If x, y, and z are zero, use the degenerate local frame, which is a special case\r\n Cartesian3.unpack(\r\n degeneratePositionLocalFrame[firstAxis],\r\n 0,\r\n scratchFirstCartesian\r\n );\r\n Cartesian3.unpack(\r\n degeneratePositionLocalFrame[secondAxis],\r\n 0,\r\n scratchSecondCartesian\r\n );\r\n Cartesian3.unpack(\r\n degeneratePositionLocalFrame[thirdAxis],\r\n 0,\r\n scratchThirdCartesian\r\n );\r\n } else if (\r\n CesiumMath.equalsEpsilon(origin.x, 0.0, CesiumMath.EPSILON14) &&\r\n CesiumMath.equalsEpsilon(origin.y, 0.0, CesiumMath.EPSILON14)\r\n ) {\r\n // If x and y are zero, assume origin is at a pole, which is a special case.\r\n const sign = CesiumMath.sign(origin.z);\r\n\r\n Cartesian3.unpack(\r\n degeneratePositionLocalFrame[firstAxis],\r\n 0,\r\n scratchFirstCartesian\r\n );\r\n if (firstAxis !== \"east\" && firstAxis !== \"west\") {\r\n Cartesian3.multiplyByScalar(\r\n scratchFirstCartesian,\r\n sign,\r\n scratchFirstCartesian\r\n );\r\n }\r\n\r\n Cartesian3.unpack(\r\n degeneratePositionLocalFrame[secondAxis],\r\n 0,\r\n scratchSecondCartesian\r\n );\r\n if (secondAxis !== \"east\" && secondAxis !== \"west\") {\r\n Cartesian3.multiplyByScalar(\r\n scratchSecondCartesian,\r\n sign,\r\n scratchSecondCartesian\r\n );\r\n }\r\n\r\n Cartesian3.unpack(\r\n degeneratePositionLocalFrame[thirdAxis],\r\n 0,\r\n scratchThirdCartesian\r\n );\r\n if (thirdAxis !== \"east\" && thirdAxis !== \"west\") {\r\n Cartesian3.multiplyByScalar(\r\n scratchThirdCartesian,\r\n sign,\r\n scratchThirdCartesian\r\n );\r\n }\r\n } else {\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n ellipsoid.geodeticSurfaceNormal(origin, scratchCalculateCartesian.up);\r\n\r\n const up = scratchCalculateCartesian.up;\r\n const east = scratchCalculateCartesian.east;\r\n east.x = -origin.y;\r\n east.y = origin.x;\r\n east.z = 0.0;\r\n Cartesian3.normalize(east, scratchCalculateCartesian.east);\r\n Cartesian3.cross(up, east, scratchCalculateCartesian.north);\r\n\r\n Cartesian3.multiplyByScalar(\r\n scratchCalculateCartesian.up,\r\n -1,\r\n scratchCalculateCartesian.down\r\n );\r\n Cartesian3.multiplyByScalar(\r\n scratchCalculateCartesian.east,\r\n -1,\r\n scratchCalculateCartesian.west\r\n );\r\n Cartesian3.multiplyByScalar(\r\n scratchCalculateCartesian.north,\r\n -1,\r\n scratchCalculateCartesian.south\r\n );\r\n\r\n scratchFirstCartesian = scratchCalculateCartesian[firstAxis];\r\n scratchSecondCartesian = scratchCalculateCartesian[secondAxis];\r\n scratchThirdCartesian = scratchCalculateCartesian[thirdAxis];\r\n }\r\n result[0] = scratchFirstCartesian.x;\r\n result[1] = scratchFirstCartesian.y;\r\n result[2] = scratchFirstCartesian.z;\r\n result[3] = 0.0;\r\n result[4] = scratchSecondCartesian.x;\r\n result[5] = scratchSecondCartesian.y;\r\n result[6] = scratchSecondCartesian.z;\r\n result[7] = 0.0;\r\n result[8] = scratchThirdCartesian.x;\r\n result[9] = scratchThirdCartesian.y;\r\n result[10] = scratchThirdCartesian.z;\r\n result[11] = 0.0;\r\n result[12] = origin.x;\r\n result[13] = origin.y;\r\n result[14] = origin.z;\r\n result[15] = 1.0;\r\n return result;\r\n };\r\n localFrameToFixedFrameCache[hashAxis] = resultat;\r\n }\r\n return resultat;\r\n};\r\n\r\n/**\r\n * Computes a 4x4 transformation matrix from a reference frame with an east-north-up axes\r\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\r\n * The local axes are defined as:\r\n *
      \r\n *
    • The x axis points in the local east direction.
    • \r\n *
    • The y axis points in the local north direction.
    • \r\n *
    • The z axis points in the direction of the ellipsoid surface normal which passes through the position.
    • \r\n *
    \r\n *\r\n * @function\r\n * @param {Cartesian3} origin The center point of the local reference frame.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\r\n *\r\n * @example\r\n * // Get the transform from local east-north-up at cartographic (0.0, 0.0) to Earth's fixed frame.\r\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\r\n * const transform = Cesium.Transforms.eastNorthUpToFixedFrame(center);\r\n */\r\nTransforms.eastNorthUpToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\r\n \"east\",\r\n \"north\"\r\n);\r\n\r\n/**\r\n * Computes a 4x4 transformation matrix from a reference frame with an north-east-down axes\r\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\r\n * The local axes are defined as:\r\n *
      \r\n *
    • The x axis points in the local north direction.
    • \r\n *
    • The y axis points in the local east direction.
    • \r\n *
    • The z axis points in the opposite direction of the ellipsoid surface normal which passes through the position.
    • \r\n *
    \r\n *\r\n * @function\r\n * @param {Cartesian3} origin The center point of the local reference frame.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\r\n *\r\n * @example\r\n * // Get the transform from local north-east-down at cartographic (0.0, 0.0) to Earth's fixed frame.\r\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\r\n * const transform = Cesium.Transforms.northEastDownToFixedFrame(center);\r\n */\r\nTransforms.northEastDownToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\r\n \"north\",\r\n \"east\"\r\n);\r\n\r\n/**\r\n * Computes a 4x4 transformation matrix from a reference frame with an north-up-east axes\r\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\r\n * The local axes are defined as:\r\n *
      \r\n *
    • The x axis points in the local north direction.
    • \r\n *
    • The y axis points in the direction of the ellipsoid surface normal which passes through the position.
    • \r\n *
    • The z axis points in the local east direction.
    • \r\n *
    \r\n *\r\n * @function\r\n * @param {Cartesian3} origin The center point of the local reference frame.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\r\n *\r\n * @example\r\n * // Get the transform from local north-up-east at cartographic (0.0, 0.0) to Earth's fixed frame.\r\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\r\n * const transform = Cesium.Transforms.northUpEastToFixedFrame(center);\r\n */\r\nTransforms.northUpEastToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\r\n \"north\",\r\n \"up\"\r\n);\r\n\r\n/**\r\n * Computes a 4x4 transformation matrix from a reference frame with an north-west-up axes\r\n * centered at the provided origin to the provided ellipsoid's fixed reference frame.\r\n * The local axes are defined as:\r\n *
      \r\n *
    • The x axis points in the local north direction.
    • \r\n *
    • The y axis points in the local west direction.
    • \r\n *
    • The z axis points in the direction of the ellipsoid surface normal which passes through the position.
    • \r\n *
    \r\n *\r\n * @function\r\n * @param {Cartesian3} origin The center point of the local reference frame.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\r\n *\r\n * @example\r\n * // Get the transform from local north-West-Up at cartographic (0.0, 0.0) to Earth's fixed frame.\r\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\r\n * const transform = Cesium.Transforms.northWestUpToFixedFrame(center);\r\n */\r\nTransforms.northWestUpToFixedFrame = Transforms.localFrameToFixedFrameGenerator(\r\n \"north\",\r\n \"west\"\r\n);\r\n\r\nconst scratchHPRQuaternion = new Quaternion();\r\nconst scratchScale = new Cartesian3(1.0, 1.0, 1.0);\r\nconst scratchHPRMatrix4 = new Matrix4();\r\n\r\n/**\r\n * Computes a 4x4 transformation matrix from a reference frame with axes computed from the heading-pitch-roll angles\r\n * centered at the provided origin to the provided ellipsoid's fixed reference frame. Heading is the rotation from the local north\r\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\r\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\r\n *\r\n * @param {Cartesian3} origin The center point of the local reference frame.\r\n * @param {HeadingPitchRoll} headingPitchRoll The heading, pitch, and roll.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\r\n * matrix from a reference frame to the provided ellipsoid's fixed reference frame\r\n * @param {Matrix4} [result] The object onto which to store the result.\r\n * @returns {Matrix4} The modified result parameter or a new Matrix4 instance if none was provided.\r\n *\r\n * @example\r\n * // Get the transform from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame.\r\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\r\n * const heading = -Cesium.Math.PI_OVER_TWO;\r\n * const pitch = Cesium.Math.PI_OVER_FOUR;\r\n * const roll = 0.0;\r\n * const hpr = new Cesium.HeadingPitchRoll(heading, pitch, roll);\r\n * const transform = Cesium.Transforms.headingPitchRollToFixedFrame(center, hpr);\r\n */\r\nTransforms.headingPitchRollToFixedFrame = function (\r\n origin,\r\n headingPitchRoll,\r\n ellipsoid,\r\n fixedFrameTransform,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"HeadingPitchRoll\", headingPitchRoll);\r\n //>>includeEnd('debug');\r\n\r\n fixedFrameTransform = defaultValue(\r\n fixedFrameTransform,\r\n Transforms.eastNorthUpToFixedFrame\r\n );\r\n const hprQuaternion = Quaternion.fromHeadingPitchRoll(\r\n headingPitchRoll,\r\n scratchHPRQuaternion\r\n );\r\n const hprMatrix = Matrix4.fromTranslationQuaternionRotationScale(\r\n Cartesian3.ZERO,\r\n hprQuaternion,\r\n scratchScale,\r\n scratchHPRMatrix4\r\n );\r\n result = fixedFrameTransform(origin, ellipsoid, result);\r\n return Matrix4.multiply(result, hprMatrix, result);\r\n};\r\n\r\nconst scratchENUMatrix4 = new Matrix4();\r\nconst scratchHPRMatrix3 = new Matrix3();\r\n\r\n/**\r\n * Computes a quaternion from a reference frame with axes computed from the heading-pitch-roll angles\r\n * centered at the provided origin. Heading is the rotation from the local north\r\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\r\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\r\n *\r\n * @param {Cartesian3} origin The center point of the local reference frame.\r\n * @param {HeadingPitchRoll} headingPitchRoll The heading, pitch, and roll.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\r\n * matrix from a reference frame to the provided ellipsoid's fixed reference frame\r\n * @param {Quaternion} [result] The object onto which to store the result.\r\n * @returns {Quaternion} The modified result parameter or a new Quaternion instance if none was provided.\r\n *\r\n * @example\r\n * // Get the quaternion from local heading-pitch-roll at cartographic (0.0, 0.0) to Earth's fixed frame.\r\n * const center = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\r\n * const heading = -Cesium.Math.PI_OVER_TWO;\r\n * const pitch = Cesium.Math.PI_OVER_FOUR;\r\n * const roll = 0.0;\r\n * const hpr = new HeadingPitchRoll(heading, pitch, roll);\r\n * const quaternion = Cesium.Transforms.headingPitchRollQuaternion(center, hpr);\r\n */\r\nTransforms.headingPitchRollQuaternion = function (\r\n origin,\r\n headingPitchRoll,\r\n ellipsoid,\r\n fixedFrameTransform,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"HeadingPitchRoll\", headingPitchRoll);\r\n //>>includeEnd('debug');\r\n\r\n const transform = Transforms.headingPitchRollToFixedFrame(\r\n origin,\r\n headingPitchRoll,\r\n ellipsoid,\r\n fixedFrameTransform,\r\n scratchENUMatrix4\r\n );\r\n const rotation = Matrix4.getMatrix3(transform, scratchHPRMatrix3);\r\n return Quaternion.fromRotationMatrix(rotation, result);\r\n};\r\n\r\nconst noScale = new Cartesian3(1.0, 1.0, 1.0);\r\nconst hprCenterScratch = new Cartesian3();\r\nconst ffScratch = new Matrix4();\r\nconst hprTransformScratch = new Matrix4();\r\nconst hprRotationScratch = new Matrix3();\r\nconst hprQuaternionScratch = new Quaternion();\r\n/**\r\n * Computes heading-pitch-roll angles from a transform in a particular reference frame. Heading is the rotation from the local north\r\n * direction where a positive angle is increasing eastward. Pitch is the rotation from the local east-north plane. Positive pitch angles\r\n * are above the plane. Negative pitch angles are below the plane. Roll is the first rotation applied about the local east axis.\r\n *\r\n * @param {Matrix4} transform The transform\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Transforms.LocalFrameToFixedFrame} [fixedFrameTransform=Transforms.eastNorthUpToFixedFrame] A 4x4 transformation\r\n * matrix from a reference frame to the provided ellipsoid's fixed reference frame\r\n * @param {HeadingPitchRoll} [result] The object onto which to store the result.\r\n * @returns {HeadingPitchRoll} The modified result parameter or a new HeadingPitchRoll instance if none was provided.\r\n */\r\nTransforms.fixedFrameToHeadingPitchRoll = function (\r\n transform,\r\n ellipsoid,\r\n fixedFrameTransform,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"transform\", transform);\r\n //>>includeEnd('debug');\r\n\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n fixedFrameTransform = defaultValue(\r\n fixedFrameTransform,\r\n Transforms.eastNorthUpToFixedFrame\r\n );\r\n if (!defined(result)) {\r\n result = new HeadingPitchRoll();\r\n }\r\n\r\n const center = Matrix4.getTranslation(transform, hprCenterScratch);\r\n if (Cartesian3.equals(center, Cartesian3.ZERO)) {\r\n result.heading = 0;\r\n result.pitch = 0;\r\n result.roll = 0;\r\n return result;\r\n }\r\n let toFixedFrame = Matrix4.inverseTransformation(\r\n fixedFrameTransform(center, ellipsoid, ffScratch),\r\n ffScratch\r\n );\r\n let transformCopy = Matrix4.setScale(transform, noScale, hprTransformScratch);\r\n transformCopy = Matrix4.setTranslation(\r\n transformCopy,\r\n Cartesian3.ZERO,\r\n transformCopy\r\n );\r\n\r\n toFixedFrame = Matrix4.multiply(toFixedFrame, transformCopy, toFixedFrame);\r\n let quaternionRotation = Quaternion.fromRotationMatrix(\r\n Matrix4.getMatrix3(toFixedFrame, hprRotationScratch),\r\n hprQuaternionScratch\r\n );\r\n quaternionRotation = Quaternion.normalize(\r\n quaternionRotation,\r\n quaternionRotation\r\n );\r\n\r\n return HeadingPitchRoll.fromQuaternion(quaternionRotation, result);\r\n};\r\n\r\nconst gmstConstant0 = 6 * 3600 + 41 * 60 + 50.54841;\r\nconst gmstConstant1 = 8640184.812866;\r\nconst gmstConstant2 = 0.093104;\r\nconst gmstConstant3 = -6.2e-6;\r\nconst rateCoef = 1.1772758384668e-19;\r\nconst wgs84WRPrecessing = 7.2921158553e-5;\r\nconst twoPiOverSecondsInDay = CesiumMath.TWO_PI / 86400.0;\r\nlet dateInUtc = new JulianDate();\r\n\r\n/**\r\n * Computes a rotation matrix to transform a point or vector from True Equator Mean Equinox (TEME) axes to the\r\n * pseudo-fixed axes at a given time. This method treats the UT1 time standard as equivalent to UTC.\r\n *\r\n * @param {JulianDate} date The time at which to compute the rotation matrix.\r\n * @param {Matrix3} [result] The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided.\r\n *\r\n * @example\r\n * //Set the view to the inertial frame.\r\n * scene.postUpdate.addEventListener(function(scene, time) {\r\n * const now = Cesium.JulianDate.now();\r\n * const offset = Cesium.Matrix4.multiplyByPoint(camera.transform, camera.position, new Cesium.Cartesian3());\r\n * const transform = Cesium.Matrix4.fromRotationTranslation(Cesium.Transforms.computeTemeToPseudoFixedMatrix(now));\r\n * const inverseTransform = Cesium.Matrix4.inverseTransformation(transform, new Cesium.Matrix4());\r\n * Cesium.Matrix4.multiplyByPoint(inverseTransform, offset, offset);\r\n * camera.lookAtTransform(transform, offset);\r\n * });\r\n */\r\nTransforms.computeTemeToPseudoFixedMatrix = function (date, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(date)) {\r\n throw new DeveloperError(\"date is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n // GMST is actually computed using UT1. We're using UTC as an approximation of UT1.\r\n // We do not want to use the function like convertTaiToUtc in JulianDate because\r\n // we explicitly do not want to fail when inside the leap second.\r\n\r\n dateInUtc = JulianDate.addSeconds(\r\n date,\r\n -JulianDate.computeTaiMinusUtc(date),\r\n dateInUtc\r\n );\r\n const utcDayNumber = dateInUtc.dayNumber;\r\n const utcSecondsIntoDay = dateInUtc.secondsOfDay;\r\n\r\n let t;\r\n const diffDays = utcDayNumber - 2451545;\r\n if (utcSecondsIntoDay >= 43200.0) {\r\n t = (diffDays + 0.5) / TimeConstants.DAYS_PER_JULIAN_CENTURY;\r\n } else {\r\n t = (diffDays - 0.5) / TimeConstants.DAYS_PER_JULIAN_CENTURY;\r\n }\r\n\r\n const gmst0 =\r\n gmstConstant0 +\r\n t * (gmstConstant1 + t * (gmstConstant2 + t * gmstConstant3));\r\n const angle = (gmst0 * twoPiOverSecondsInDay) % CesiumMath.TWO_PI;\r\n const ratio = wgs84WRPrecessing + rateCoef * (utcDayNumber - 2451545.5);\r\n const secondsSinceMidnight =\r\n (utcSecondsIntoDay + TimeConstants.SECONDS_PER_DAY * 0.5) %\r\n TimeConstants.SECONDS_PER_DAY;\r\n const gha = angle + ratio * secondsSinceMidnight;\r\n const cosGha = Math.cos(gha);\r\n const sinGha = Math.sin(gha);\r\n\r\n if (!defined(result)) {\r\n return new Matrix3(\r\n cosGha,\r\n sinGha,\r\n 0.0,\r\n -sinGha,\r\n cosGha,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n );\r\n }\r\n result[0] = cosGha;\r\n result[1] = -sinGha;\r\n result[2] = 0.0;\r\n result[3] = sinGha;\r\n result[4] = cosGha;\r\n result[5] = 0.0;\r\n result[6] = 0.0;\r\n result[7] = 0.0;\r\n result[8] = 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * The source of IAU 2006 XYS data, used for computing the transformation between the\r\n * Fixed and ICRF axes.\r\n * @type {Iau2006XysData}\r\n *\r\n * @see Transforms.computeIcrfToFixedMatrix\r\n * @see Transforms.computeFixedToIcrfMatrix\r\n *\r\n * @private\r\n */\r\nTransforms.iau2006XysData = new Iau2006XysData();\r\n\r\n/**\r\n * The source of Earth Orientation Parameters (EOP) data, used for computing the transformation\r\n * between the Fixed and ICRF axes. By default, zero values are used for all EOP values,\r\n * yielding a reasonable but not completely accurate representation of the ICRF axes.\r\n * @type {EarthOrientationParameters}\r\n *\r\n * @see Transforms.computeIcrfToFixedMatrix\r\n * @see Transforms.computeFixedToIcrfMatrix\r\n *\r\n * @private\r\n */\r\nTransforms.earthOrientationParameters = EarthOrientationParameters.NONE;\r\n\r\nconst ttMinusTai = 32.184;\r\nconst j2000ttDays = 2451545.0;\r\n\r\n/**\r\n * Preloads the data necessary to transform between the ICRF and Fixed axes, in either\r\n * direction, over a given interval. This function returns a promise that, when resolved,\r\n * indicates that the preload has completed.\r\n *\r\n * @param {TimeInterval} timeInterval The interval to preload.\r\n * @returns {Promise} A promise that, when resolved, indicates that the preload has completed\r\n * and evaluation of the transformation between the fixed and ICRF axes will\r\n * no longer return undefined for a time inside the interval.\r\n *\r\n *\r\n * @example\r\n * const interval = new Cesium.TimeInterval(...);\r\n * Promise.resolve(Cesium.Transforms.preloadIcrfFixed(interval)).then(function() {\r\n * // the data is now loaded\r\n * });\r\n *\r\n * @see Transforms.computeIcrfToFixedMatrix\r\n * @see Transforms.computeFixedToIcrfMatrix\r\n */\r\nTransforms.preloadIcrfFixed = function (timeInterval) {\r\n const startDayTT = timeInterval.start.dayNumber;\r\n const startSecondTT = timeInterval.start.secondsOfDay + ttMinusTai;\r\n const stopDayTT = timeInterval.stop.dayNumber;\r\n const stopSecondTT = timeInterval.stop.secondsOfDay + ttMinusTai;\r\n\r\n const xysPromise = Transforms.iau2006XysData.preload(\r\n startDayTT,\r\n startSecondTT,\r\n stopDayTT,\r\n stopSecondTT\r\n );\r\n const eopPromise = Transforms.earthOrientationParameters.getPromiseToLoad();\r\n\r\n return Promise.all([xysPromise, eopPromise]);\r\n};\r\n\r\n/**\r\n * Computes a rotation matrix to transform a point or vector from the International Celestial\r\n * Reference Frame (GCRF/ICRF) inertial frame axes to the Earth-Fixed frame axes (ITRF)\r\n * at a given time. This function may return undefined if the data necessary to\r\n * do the transformation is not yet loaded.\r\n *\r\n * @param {JulianDate} date The time at which to compute the rotation matrix.\r\n * @param {Matrix3} [result] The object onto which to store the result. If this parameter is\r\n * not specified, a new instance is created and returned.\r\n * @returns {Matrix3} The rotation matrix, or undefined if the data necessary to do the\r\n * transformation is not yet loaded.\r\n *\r\n *\r\n * @example\r\n * scene.postUpdate.addEventListener(function(scene, time) {\r\n * // View in ICRF.\r\n * const icrfToFixed = Cesium.Transforms.computeIcrfToFixedMatrix(time);\r\n * if (Cesium.defined(icrfToFixed)) {\r\n * const offset = Cesium.Cartesian3.clone(camera.position);\r\n * const transform = Cesium.Matrix4.fromRotationTranslation(icrfToFixed);\r\n * camera.lookAtTransform(transform, offset);\r\n * }\r\n * });\r\n *\r\n * @see Transforms.preloadIcrfFixed\r\n */\r\nTransforms.computeIcrfToFixedMatrix = function (date, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(date)) {\r\n throw new DeveloperError(\"date is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n if (!defined(result)) {\r\n result = new Matrix3();\r\n }\r\n\r\n const fixedToIcrfMtx = Transforms.computeFixedToIcrfMatrix(date, result);\r\n if (!defined(fixedToIcrfMtx)) {\r\n return undefined;\r\n }\r\n\r\n return Matrix3.transpose(fixedToIcrfMtx, result);\r\n};\r\n\r\nconst xysScratch = new Iau2006XysSample(0.0, 0.0, 0.0);\r\nconst eopScratch = new EarthOrientationParametersSample(\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0\r\n);\r\nconst rotation1Scratch = new Matrix3();\r\nconst rotation2Scratch = new Matrix3();\r\n\r\n/**\r\n * Computes a rotation matrix to transform a point or vector from the Earth-Fixed frame axes (ITRF)\r\n * to the International Celestial Reference Frame (GCRF/ICRF) inertial frame axes\r\n * at a given time. This function may return undefined if the data necessary to\r\n * do the transformation is not yet loaded.\r\n *\r\n * @param {JulianDate} date The time at which to compute the rotation matrix.\r\n * @param {Matrix3} [result] The object onto which to store the result. If this parameter is\r\n * not specified, a new instance is created and returned.\r\n * @returns {Matrix3} The rotation matrix, or undefined if the data necessary to do the\r\n * transformation is not yet loaded.\r\n *\r\n *\r\n * @example\r\n * // Transform a point from the ICRF axes to the Fixed axes.\r\n * const now = Cesium.JulianDate.now();\r\n * const pointInFixed = Cesium.Cartesian3.fromDegrees(0.0, 0.0);\r\n * const fixedToIcrf = Cesium.Transforms.computeIcrfToFixedMatrix(now);\r\n * let pointInInertial = new Cesium.Cartesian3();\r\n * if (Cesium.defined(fixedToIcrf)) {\r\n * pointInInertial = Cesium.Matrix3.multiplyByVector(fixedToIcrf, pointInFixed, pointInInertial);\r\n * }\r\n *\r\n * @see Transforms.preloadIcrfFixed\r\n */\r\nTransforms.computeFixedToIcrfMatrix = function (date, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(date)) {\r\n throw new DeveloperError(\"date is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Matrix3();\r\n }\r\n\r\n // Compute pole wander\r\n const eop = Transforms.earthOrientationParameters.compute(date, eopScratch);\r\n if (!defined(eop)) {\r\n return undefined;\r\n }\r\n\r\n // There is no external conversion to Terrestrial Time (TT).\r\n // So use International Atomic Time (TAI) and convert using offsets.\r\n // Here we are assuming that dayTT and secondTT are positive\r\n const dayTT = date.dayNumber;\r\n // It's possible here that secondTT could roll over 86400\r\n // This does not seem to affect the precision (unit tests check for this)\r\n const secondTT = date.secondsOfDay + ttMinusTai;\r\n\r\n const xys = Transforms.iau2006XysData.computeXysRadians(\r\n dayTT,\r\n secondTT,\r\n xysScratch\r\n );\r\n if (!defined(xys)) {\r\n return undefined;\r\n }\r\n\r\n const x = xys.x + eop.xPoleOffset;\r\n const y = xys.y + eop.yPoleOffset;\r\n\r\n // Compute XYS rotation\r\n const a = 1.0 / (1.0 + Math.sqrt(1.0 - x * x - y * y));\r\n\r\n const rotation1 = rotation1Scratch;\r\n rotation1[0] = 1.0 - a * x * x;\r\n rotation1[3] = -a * x * y;\r\n rotation1[6] = x;\r\n rotation1[1] = -a * x * y;\r\n rotation1[4] = 1 - a * y * y;\r\n rotation1[7] = y;\r\n rotation1[2] = -x;\r\n rotation1[5] = -y;\r\n rotation1[8] = 1 - a * (x * x + y * y);\r\n\r\n const rotation2 = Matrix3.fromRotationZ(-xys.s, rotation2Scratch);\r\n const matrixQ = Matrix3.multiply(rotation1, rotation2, rotation1Scratch);\r\n\r\n // Similar to TT conversions above\r\n // It's possible here that secondTT could roll over 86400\r\n // This does not seem to affect the precision (unit tests check for this)\r\n const dateUt1day = date.dayNumber;\r\n const dateUt1sec =\r\n date.secondsOfDay - JulianDate.computeTaiMinusUtc(date) + eop.ut1MinusUtc;\r\n\r\n // Compute Earth rotation angle\r\n // The IERS standard for era is\r\n // era = 0.7790572732640 + 1.00273781191135448 * Tu\r\n // where\r\n // Tu = JulianDateInUt1 - 2451545.0\r\n // However, you get much more precision if you make the following simplification\r\n // era = a + (1 + b) * (JulianDayNumber + FractionOfDay - 2451545)\r\n // era = a + (JulianDayNumber - 2451545) + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay)\r\n // era = a + FractionOfDay + b (JulianDayNumber - 2451545 + FractionOfDay)\r\n // since (JulianDayNumber - 2451545) represents an integer number of revolutions which will be discarded anyway.\r\n const daysSinceJ2000 = dateUt1day - 2451545;\r\n const fractionOfDay = dateUt1sec / TimeConstants.SECONDS_PER_DAY;\r\n let era =\r\n 0.779057273264 +\r\n fractionOfDay +\r\n 0.00273781191135448 * (daysSinceJ2000 + fractionOfDay);\r\n era = (era % 1.0) * CesiumMath.TWO_PI;\r\n\r\n const earthRotation = Matrix3.fromRotationZ(era, rotation2Scratch);\r\n\r\n // pseudoFixed to ICRF\r\n const pfToIcrf = Matrix3.multiply(matrixQ, earthRotation, rotation1Scratch);\r\n\r\n // Compute pole wander matrix\r\n const cosxp = Math.cos(eop.xPoleWander);\r\n const cosyp = Math.cos(eop.yPoleWander);\r\n const sinxp = Math.sin(eop.xPoleWander);\r\n const sinyp = Math.sin(eop.yPoleWander);\r\n\r\n let ttt = dayTT - j2000ttDays + secondTT / TimeConstants.SECONDS_PER_DAY;\r\n ttt /= 36525.0;\r\n\r\n // approximate sp value in rad\r\n const sp = (-47.0e-6 * ttt * CesiumMath.RADIANS_PER_DEGREE) / 3600.0;\r\n const cossp = Math.cos(sp);\r\n const sinsp = Math.sin(sp);\r\n\r\n const fToPfMtx = rotation2Scratch;\r\n fToPfMtx[0] = cosxp * cossp;\r\n fToPfMtx[1] = cosxp * sinsp;\r\n fToPfMtx[2] = sinxp;\r\n fToPfMtx[3] = -cosyp * sinsp + sinyp * sinxp * cossp;\r\n fToPfMtx[4] = cosyp * cossp + sinyp * sinxp * sinsp;\r\n fToPfMtx[5] = -sinyp * cosxp;\r\n fToPfMtx[6] = -sinyp * sinsp - cosyp * sinxp * cossp;\r\n fToPfMtx[7] = sinyp * cossp - cosyp * sinxp * sinsp;\r\n fToPfMtx[8] = cosyp * cosxp;\r\n\r\n return Matrix3.multiply(pfToIcrf, fToPfMtx, result);\r\n};\r\n\r\nconst pointToWindowCoordinatesTemp = new Cartesian4();\r\n\r\n/**\r\n * Transform a point from model coordinates to window coordinates.\r\n *\r\n * @param {Matrix4} modelViewProjectionMatrix The 4x4 model-view-projection matrix.\r\n * @param {Matrix4} viewportTransformation The 4x4 viewport transformation.\r\n * @param {Cartesian3} point The point to transform.\r\n * @param {Cartesian2} [result] The object onto which to store the result.\r\n * @returns {Cartesian2} The modified result parameter or a new Cartesian2 instance if none was provided.\r\n */\r\nTransforms.pointToWindowCoordinates = function (\r\n modelViewProjectionMatrix,\r\n viewportTransformation,\r\n point,\r\n result\r\n) {\r\n result = Transforms.pointToGLWindowCoordinates(\r\n modelViewProjectionMatrix,\r\n viewportTransformation,\r\n point,\r\n result\r\n );\r\n result.y = 2.0 * viewportTransformation[5] - result.y;\r\n return result;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nTransforms.pointToGLWindowCoordinates = function (\r\n modelViewProjectionMatrix,\r\n viewportTransformation,\r\n point,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(modelViewProjectionMatrix)) {\r\n throw new DeveloperError(\"modelViewProjectionMatrix is required.\");\r\n }\r\n\r\n if (!defined(viewportTransformation)) {\r\n throw new DeveloperError(\"viewportTransformation is required.\");\r\n }\r\n\r\n if (!defined(point)) {\r\n throw new DeveloperError(\"point is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = new Cartesian2();\r\n }\r\n\r\n const tmp = pointToWindowCoordinatesTemp;\r\n\r\n Matrix4.multiplyByVector(\r\n modelViewProjectionMatrix,\r\n Cartesian4.fromElements(point.x, point.y, point.z, 1, tmp),\r\n tmp\r\n );\r\n Cartesian4.multiplyByScalar(tmp, 1.0 / tmp.w, tmp);\r\n Matrix4.multiplyByVector(viewportTransformation, tmp, tmp);\r\n return Cartesian2.fromCartesian4(tmp, result);\r\n};\r\n\r\nconst normalScratch = new Cartesian3();\r\nconst rightScratch = new Cartesian3();\r\nconst upScratch = new Cartesian3();\r\n\r\n/**\r\n * Transform a position and velocity to a rotation matrix.\r\n *\r\n * @param {Cartesian3} position The position to transform.\r\n * @param {Cartesian3} velocity The velocity vector to transform.\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid whose fixed frame is used in the transformation.\r\n * @param {Matrix3} [result] The object onto which to store the result.\r\n * @returns {Matrix3} The modified result parameter or a new Matrix3 instance if none was provided.\r\n */\r\nTransforms.rotationMatrixFromPositionVelocity = function (\r\n position,\r\n velocity,\r\n ellipsoid,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(position)) {\r\n throw new DeveloperError(\"position is required.\");\r\n }\r\n\r\n if (!defined(velocity)) {\r\n throw new DeveloperError(\"velocity is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const normal = defaultValue(ellipsoid, Ellipsoid.WGS84).geodeticSurfaceNormal(\r\n position,\r\n normalScratch\r\n );\r\n let right = Cartesian3.cross(velocity, normal, rightScratch);\r\n\r\n if (Cartesian3.equalsEpsilon(right, Cartesian3.ZERO, CesiumMath.EPSILON6)) {\r\n right = Cartesian3.clone(Cartesian3.UNIT_X, right);\r\n }\r\n\r\n const up = Cartesian3.cross(right, velocity, upScratch);\r\n Cartesian3.normalize(up, up);\r\n Cartesian3.cross(velocity, up, right);\r\n Cartesian3.negate(right, right);\r\n Cartesian3.normalize(right, right);\r\n\r\n if (!defined(result)) {\r\n result = new Matrix3();\r\n }\r\n\r\n result[0] = velocity.x;\r\n result[1] = velocity.y;\r\n result[2] = velocity.z;\r\n result[3] = right.x;\r\n result[4] = right.y;\r\n result[5] = right.z;\r\n result[6] = up.x;\r\n result[7] = up.y;\r\n result[8] = up.z;\r\n\r\n return result;\r\n};\r\n\r\nconst swizzleMatrix = new Matrix4(\r\n 0.0,\r\n 0.0,\r\n 1.0,\r\n 0.0,\r\n 1.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 0.0,\r\n 1.0\r\n);\r\n\r\nconst scratchCartographic = new Cartographic();\r\nconst scratchCartesian3Projection = new Cartesian3();\r\nconst scratchCenter = new Cartesian3();\r\nconst scratchRotation = new Matrix3();\r\nconst scratchFromENU = new Matrix4();\r\nconst scratchToENU = new Matrix4();\r\n\r\n/**\r\n * @private\r\n */\r\nTransforms.basisTo2D = function (projection, matrix, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(projection)) {\r\n throw new DeveloperError(\"projection is required.\");\r\n }\r\n if (!defined(matrix)) {\r\n throw new DeveloperError(\"matrix is required.\");\r\n }\r\n if (!defined(result)) {\r\n throw new DeveloperError(\"result is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const rtcCenter = Matrix4.getTranslation(matrix, scratchCenter);\r\n const ellipsoid = projection.ellipsoid;\r\n\r\n // Get the 2D Center\r\n const cartographic = ellipsoid.cartesianToCartographic(\r\n rtcCenter,\r\n scratchCartographic\r\n );\r\n const projectedPosition = projection.project(\r\n cartographic,\r\n scratchCartesian3Projection\r\n );\r\n Cartesian3.fromElements(\r\n projectedPosition.z,\r\n projectedPosition.x,\r\n projectedPosition.y,\r\n projectedPosition\r\n );\r\n\r\n // Assuming the instance are positioned in WGS84, invert the WGS84 transform to get the local transform and then convert to 2D\r\n const fromENU = Transforms.eastNorthUpToFixedFrame(\r\n rtcCenter,\r\n ellipsoid,\r\n scratchFromENU\r\n );\r\n const toENU = Matrix4.inverseTransformation(fromENU, scratchToENU);\r\n const rotation = Matrix4.getMatrix3(matrix, scratchRotation);\r\n const local = Matrix4.multiplyByMatrix3(toENU, rotation, result);\r\n Matrix4.multiply(swizzleMatrix, local, result); // Swap x, y, z for 2D\r\n Matrix4.setTranslation(result, projectedPosition, result); // Use the projected center\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nTransforms.wgs84To2DModelMatrix = function (projection, center, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(projection)) {\r\n throw new DeveloperError(\"projection is required.\");\r\n }\r\n if (!defined(center)) {\r\n throw new DeveloperError(\"center is required.\");\r\n }\r\n if (!defined(result)) {\r\n throw new DeveloperError(\"result is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const ellipsoid = projection.ellipsoid;\r\n\r\n const fromENU = Transforms.eastNorthUpToFixedFrame(\r\n center,\r\n ellipsoid,\r\n scratchFromENU\r\n );\r\n const toENU = Matrix4.inverseTransformation(fromENU, scratchToENU);\r\n\r\n const cartographic = ellipsoid.cartesianToCartographic(\r\n center,\r\n scratchCartographic\r\n );\r\n const projectedPosition = projection.project(\r\n cartographic,\r\n scratchCartesian3Projection\r\n );\r\n Cartesian3.fromElements(\r\n projectedPosition.z,\r\n projectedPosition.x,\r\n projectedPosition.y,\r\n projectedPosition\r\n );\r\n\r\n const translation = Matrix4.fromTranslation(\r\n projectedPosition,\r\n scratchFromENU\r\n );\r\n Matrix4.multiply(swizzleMatrix, toENU, result);\r\n Matrix4.multiply(translation, result, result);\r\n\r\n return result;\r\n};\r\nexport default Transforms;\r\n"],"names":["defaultValue","Ellipsoid","defined","Cartesian3","DeveloperError","Cartographic","CesiumMath","Rectangle","Check","Matrix3","Matrix4","Intersect","Fullscreen","scratchHPRQuaternion","FeatureDetection","compareLeapSecondDates","TimeConstants","TimeStandard","global","this","require$$0","require$$1","require$$2","a","dataUriRegex","RequestType","RequestState","RuntimeError","combine","TrustedServers","Cartesian4","Cartesian2"],"mappings":"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C;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,EAAEA,cAAY,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;CACxE,EAAE,IAAI,UAAU,CAAC,IAAI,UAA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,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;CAC5B,MAAM,MAAM,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;CACvB,MAAM,OAAO,MAAM,CAAC;CACpB,KAAK,CAAC;CACN,IAAI,2BAA2B,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;CACrD,GAAG;CACH,EAAE,OAAO,QAAQ,CAAC;CAClB,CAAC,CAAC;AACF;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,uBAAuB,GAAG,UAAU,CAAC,+BAA+B;CAC/E,EAAE,MAAM;CACR,EAAE,OAAO;CACT,CAAC,CAAC;AACF;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,yBAAyB,GAAG,UAAU,CAAC,+BAA+B;CACjF,EAAE,OAAO;CACT,EAAE,MAAM;CACR,CAAC,CAAC;AACF;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,uBAAuB,GAAG,UAAU,CAAC,+BAA+B;CAC/E,EAAE,OAAO;CACT,EAAE,IAAI;CACN,CAAC,CAAC;AACF;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,uBAAuB,GAAG,UAAU,CAAC,+BAA+B;CAC/E,EAAE,OAAO;CACT,EAAE,MAAM;CACR,CAAC,CAAC;AACF;CACA,MAAM,oBAAoB,GAAG,IAAI,UAAU,EAAE,CAAC;CAC9C,MAAM,YAAY,GAAG,IAAIA,kBAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACnD,MAAM,iBAAiB,GAAG,IAAIO,eAAO,EAAE,CAAC;AACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,4BAA4B,GAAG;CAC1C,EAAE,MAAM;CACR,EAAE,gBAAgB;CAClB,EAAE,SAAS;CACX,EAAE,mBAAmB;CACrB,EAAE,MAAM;CACR,EAAE;CACF;CACA,EAAEF,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;CAC5D;AACA;CACA,EAAE,mBAAmB,GAAGR,yBAAY;CACpC,IAAI,mBAAmB;CACvB,IAAI,UAAU,CAAC,uBAAuB;CACtC,GAAG,CAAC;CACJ,EAAE,MAAM,aAAa,GAAG,UAAU,CAAC,oBAAoB;CACvD,IAAI,gBAAgB;CACpB,IAAI,oBAAoB;CACxB,GAAG,CAAC;CACJ,EAAE,MAAM,SAAS,GAAGU,eAAO,CAAC,sCAAsC;CAClE,IAAIP,kBAAU,CAAC,IAAI;CACnB,IAAI,aAAa;CACjB,IAAI,YAAY;CAChB,IAAI,iBAAiB;CACrB,GAAG,CAAC;CACJ,EAAE,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;CAC1D,EAAE,OAAOO,eAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;CACrD,CAAC,CAAC;AACF;CACA,MAAM,iBAAiB,GAAG,IAAIA,eAAO,EAAE,CAAC;CACxC,MAAM,iBAAiB,GAAG,IAAID,eAAO,EAAE,CAAC;AACxC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,0BAA0B,GAAG;CACxC,EAAE,MAAM;CACR,EAAE,gBAAgB;CAClB,EAAE,SAAS;CACX,EAAE,mBAAmB;CACrB,EAAE,MAAM;CACR,EAAE;CACF;CACA,EAAED,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;CAC5D;AACA;CACA,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,4BAA4B;CAC3D,IAAI,MAAM;CACV,IAAI,gBAAgB;CACpB,IAAI,SAAS;CACb,IAAI,mBAAmB;CACvB,IAAI,iBAAiB;CACrB,GAAG,CAAC;CACJ,EAAE,MAAM,QAAQ,GAAGE,eAAO,CAAC,UAAU,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;CACpE,EAAE,OAAO,UAAU,CAAC,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;CACzD,CAAC,CAAC;AACF;CACA,MAAM,OAAO,GAAG,IAAIP,kBAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CAC9C,MAAM,gBAAgB,GAAG,IAAIA,kBAAU,EAAE,CAAC;CAC1C,MAAM,SAAS,GAAG,IAAIO,eAAO,EAAE,CAAC;CAChC,MAAM,mBAAmB,GAAG,IAAIA,eAAO,EAAE,CAAC;CAC1C,MAAM,kBAAkB,GAAG,IAAID,eAAO,EAAE,CAAC;CACzC,MAAM,oBAAoB,GAAG,IAAI,UAAU,EAAE,CAAC;CAC9C;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,4BAA4B,GAAG;CAC1C,EAAE,SAAS;CACX,EAAE,SAAS;CACX,EAAE,mBAAmB;CACrB,EAAE,MAAM;CACR,EAAE;CACF;CACA,EAAED,WAAK,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;CACxC;AACA;CACA,EAAE,SAAS,GAAGR,yBAAY,CAAC,SAAS,EAAEC,iBAAS,CAAC,KAAK,CAAC,CAAC;CACvD,EAAE,mBAAmB,GAAGD,yBAAY;CACpC,IAAI,mBAAmB;CACvB,IAAI,UAAU,CAAC,uBAAuB;CACtC,GAAG,CAAC;CACJ,EAAE,IAAI,CAACE,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,GAAG,IAAI,gBAAgB,EAAE,CAAC;CACpC,GAAG;AACH;CACA,EAAE,MAAM,MAAM,GAAGQ,eAAO,CAAC,cAAc,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;CACrE,EAAE,IAAIP,kBAAU,CAAC,MAAM,CAAC,MAAM,EAAEA,kBAAU,CAAC,IAAI,CAAC,EAAE;CAClD,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;CACvB,IAAI,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;CACrB,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;CACpB,IAAI,OAAO,MAAM,CAAC;CAClB,GAAG;CACH,EAAE,IAAI,YAAY,GAAGO,eAAO,CAAC,qBAAqB;CAClD,IAAI,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;CACrD,IAAI,SAAS;CACb,GAAG,CAAC;CACJ,EAAE,IAAI,aAAa,GAAGA,eAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC;CAChF,EAAE,aAAa,GAAGA,eAAO,CAAC,cAAc;CACxC,IAAI,aAAa;CACjB,IAAIP,kBAAU,CAAC,IAAI;CACnB,IAAI,aAAa;CACjB,GAAG,CAAC;AACJ;CACA,EAAE,YAAY,GAAGO,eAAO,CAAC,QAAQ,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC;CAC7E,EAAE,IAAI,kBAAkB,GAAG,UAAU,CAAC,kBAAkB;CACxD,IAAIA,eAAO,CAAC,UAAU,CAAC,YAAY,EAAE,kBAAkB,CAAC;CACxD,IAAI,oBAAoB;CACxB,GAAG,CAAC;CACJ,EAAE,kBAAkB,GAAG,UAAU,CAAC,SAAS;CAC3C,IAAI,kBAAkB;CACtB,IAAI,kBAAkB;CACtB,GAAG,CAAC;AACJ;CACA,EAAE,OAAO,gBAAgB,CAAC,cAAc,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;CACrE,CAAC,CAAC;AACF;CACA,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAC;CACpD,MAAM,aAAa,GAAG,cAAc,CAAC;CACrC,MAAM,aAAa,GAAG,QAAQ,CAAC;CAC/B,MAAM,aAAa,GAAG,CAAC,MAAM,CAAC;CAC9B,MAAM,QAAQ,GAAG,mBAAmB,CAAC;CACrC,MAAM,iBAAiB,GAAG,eAAe,CAAC;CAC1C,MAAM,qBAAqB,GAAGJ,iBAAU,CAAC,MAAM,GAAG,OAAO,CAAC;CAC1D,IAAI,SAAS,GAAG,IAAI,UAAU,EAAE,CAAC;AACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,8BAA8B,GAAG,UAAU,IAAI,EAAE,MAAM,EAAE;CACpE;CACA,EAAE,IAAI,CAACJ,oBAAO,CAAC,IAAI,CAAC,EAAE;CACtB,IAAI,MAAM,IAAIE,oBAAc,CAAC,mBAAmB,CAAC,CAAC;CAClD,GAAG;CACH;AACA;CACA;CACA;CACA;AACA;CACA,EAAE,SAAS,GAAG,UAAU,CAAC,UAAU;CACnC,IAAI,IAAI;CACR,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC;CACxC,IAAI,SAAS;CACb,GAAG,CAAC;CACJ,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC,SAAS,CAAC;CAC3C,EAAE,MAAM,iBAAiB,GAAG,SAAS,CAAC,YAAY,CAAC;AACnD;CACA,EAAE,IAAI,CAAC,CAAC;CACR,EAAE,MAAM,QAAQ,GAAG,YAAY,GAAG,OAAO,CAAC;CAC1C,EAAE,IAAI,iBAAiB,IAAI,OAAO,EAAE;CACpC,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,IAAIY,eAAa,CAAC,uBAAuB,CAAC;CACjE,GAAG,MAAM;CACT,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,GAAG,IAAIA,eAAa,CAAC,uBAAuB,CAAC;CACjE,GAAG;AACH;CACA,EAAE,MAAM,KAAK;CACb,IAAI,aAAa;CACjB,IAAI,CAAC,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;CAClE,EAAE,MAAM,KAAK,GAAG,CAAC,KAAK,GAAG,qBAAqB,IAAIV,iBAAU,CAAC,MAAM,CAAC;CACpE,EAAE,MAAM,KAAK,GAAG,iBAAiB,GAAG,QAAQ,IAAI,YAAY,GAAG,SAAS,CAAC,CAAC;CAC1E,EAAE,MAAM,oBAAoB;CAC5B,IAAI,CAAC,iBAAiB,GAAGU,eAAa,CAAC,eAAe,GAAG,GAAG;CAC5D,IAAIA,eAAa,CAAC,eAAe,CAAC;CAClC,EAAE,MAAM,GAAG,GAAG,KAAK,GAAG,KAAK,GAAG,oBAAoB,CAAC;CACnD,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC/B,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC/B;CACA,EAAE,IAAI,CAACd,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,OAAO,IAAIO,eAAO;CACtB,MAAM,MAAM;CACZ,MAAM,MAAM;CACZ,MAAM,GAAG;CACT,MAAM,CAAC,MAAM;CACb,MAAM,MAAM;CACZ,MAAM,GAAG;CACT,MAAM,GAAG;CACT,MAAM,GAAG;CACT,MAAM,GAAG;CACT,KAAK,CAAC;CACN,GAAG;CACH,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;CACrB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;CACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;CAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;CACrB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;CACrB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;CAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;CAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;CAClB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;CAClB,EAAE,OAAO,MAAM,CAAC;CAChB,CAAC,CAAC;AACF;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;AACjD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,0BAA0B,GAAG,0BAA0B,CAAC,IAAI,CAAC;AACxE;CACA,MAAM,UAAU,GAAG,MAAM,CAAC;CAC1B,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,gBAAgB,GAAG,UAAU,YAAY,EAAE;CACtD,EAAE,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;CAClD,EAAE,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,YAAY,GAAG,UAAU,CAAC;CACrE,EAAE,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC;CAChD,EAAE,MAAM,YAAY,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AACnE;CACA,EAAE,MAAM,UAAU,GAAG,UAAU,CAAC,cAAc,CAAC,OAAO;CACtD,IAAI,UAAU;CACd,IAAI,aAAa;CACjB,IAAI,SAAS;CACb,IAAI,YAAY;CAChB,GAAG,CAAC;CACJ,EAAE,MAAM,UAAU,GAAG,UAAU,CAAC,0BAA0B,CAAC,gBAAgB,EAAE,CAAC;AAC9E;CACA,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC;CAC/C,CAAC,CAAC;AACF;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,wBAAwB,GAAG,UAAU,IAAI,EAAE,MAAM,EAAE;CAC9D;CACA,EAAE,IAAI,CAACP,oBAAO,CAAC,IAAI,CAAC,EAAE;CACtB,IAAI,MAAM,IAAIE,oBAAc,CAAC,mBAAmB,CAAC,CAAC;CAClD,GAAG;CACH;CACA,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,GAAG,IAAIO,eAAO,EAAE,CAAC;CAC3B,GAAG;AACH;CACA,EAAE,MAAM,cAAc,GAAG,UAAU,CAAC,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;CAC3E,EAAE,IAAI,CAACP,oBAAO,CAAC,cAAc,CAAC,EAAE;CAChC,IAAI,OAAO,SAAS,CAAC;CACrB,GAAG;AACH;CACA,EAAE,OAAOO,eAAO,CAAC,SAAS,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;CACnD,CAAC,CAAC;AACF;CACA,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CACvD,MAAM,UAAU,GAAG,IAAI,gCAAgC;CACvD,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAEF,CAAC,CAAC;CACF,MAAM,gBAAgB,GAAG,IAAIA,eAAO,EAAE,CAAC;CACvC,MAAM,gBAAgB,GAAG,IAAIA,eAAO,EAAE,CAAC;AACvC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,wBAAwB,GAAG,UAAU,IAAI,EAAE,MAAM,EAAE;CAC9D;CACA,EAAE,IAAI,CAACP,oBAAO,CAAC,IAAI,CAAC,EAAE;CACtB,IAAI,MAAM,IAAIE,oBAAc,CAAC,mBAAmB,CAAC,CAAC;CAClD,GAAG;CACH;AACA;CACA,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,GAAG,IAAIO,eAAO,EAAE,CAAC;CAC3B,GAAG;AACH;CACA;CACA,EAAE,MAAM,GAAG,GAAG,UAAU,CAAC,0BAA0B,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;CAC9E,EAAE,IAAI,CAACP,oBAAO,CAAC,GAAG,CAAC,EAAE;CACrB,IAAI,OAAO,SAAS,CAAC;CACrB,GAAG;AACH;CACA;CACA;CACA;CACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;CAC/B;CACA;CACA,EAAE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC;AAClD;CACA,EAAE,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,iBAAiB;CACzD,IAAI,KAAK;CACT,IAAI,QAAQ;CACZ,IAAI,UAAU;CACd,GAAG,CAAC;CACJ,EAAE,IAAI,CAACA,oBAAO,CAAC,GAAG,CAAC,EAAE;CACrB,IAAI,OAAO,SAAS,CAAC;CACrB,GAAG;AACH;CACA,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;CACpC,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;AACpC;CACA;CACA,EAAE,MAAM,CAAC,GAAG,GAAG,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD;CACA,EAAE,MAAM,SAAS,GAAG,gBAAgB,CAAC;CACrC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACjC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC5B,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACnB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC5B,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CAC/B,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACnB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACpB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACpB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACzC;CACA,EAAE,MAAM,SAAS,GAAGO,eAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;CACpE,EAAE,MAAM,OAAO,GAAGA,eAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAC3E;CACA;CACA;CACA;CACA,EAAE,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;CACpC,EAAE,MAAM,UAAU;CAClB,IAAI,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,WAAW,CAAC;AAC9E;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,EAAE,MAAM,cAAc,GAAG,UAAU,GAAG,OAAO,CAAC;CAC9C,EAAE,MAAM,aAAa,GAAG,UAAU,GAAGO,eAAa,CAAC,eAAe,CAAC;CACnE,EAAE,IAAI,GAAG;CACT,IAAI,cAAc;CAClB,IAAI,aAAa;CACjB,IAAI,mBAAmB,IAAI,cAAc,GAAG,aAAa,CAAC,CAAC;CAC3D,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAIV,iBAAU,CAAC,MAAM,CAAC;AACxC;CACA,EAAE,MAAM,aAAa,GAAGG,eAAO,CAAC,aAAa,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;AACrE;CACA;CACA,EAAE,MAAM,QAAQ,GAAGA,eAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAAC;AAC9E;CACA;CACA,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;CAC1C,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;CAC1C,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;CAC1C,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AAC1C;CACA,EAAE,IAAI,GAAG,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,GAAGO,eAAa,CAAC,eAAe,CAAC;CAC3E,EAAE,GAAG,IAAI,OAAO,CAAC;AACjB;CACA;CACA,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,GAAG,GAAG,GAAGV,iBAAU,CAAC,kBAAkB,IAAI,MAAM,CAAC;CACvE,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;CAC7B,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B;CACA,EAAE,MAAM,QAAQ,GAAG,gBAAgB,CAAC;CACpC,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;CAC9B,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;CAC9B,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;CACtB,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;CACvD,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;CACtD,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;CAC/B,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;CACvD,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;CACtD,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;AAC9B;CACA,EAAE,OAAOG,eAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;CACtD,CAAC,CAAC;AACF;CACA,MAAM,4BAA4B,GAAG,IAAIqB,kBAAU,EAAE,CAAC;AACtD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,wBAAwB,GAAG;CACtC,EAAE,yBAAyB;CAC3B,EAAE,sBAAsB;CACxB,EAAE,KAAK;CACP,EAAE,MAAM;CACR,EAAE;CACF,EAAE,MAAM,GAAG,UAAU,CAAC,0BAA0B;CAChD,IAAI,yBAAyB;CAC7B,IAAI,sBAAsB;CAC1B,IAAI,KAAK;CACT,IAAI,MAAM;CACV,GAAG,CAAC;CACJ,EAAE,MAAM,CAAC,CAAC,GAAG,GAAG,GAAG,sBAAsB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;CACxD,EAAE,OAAO,MAAM,CAAC;CAChB,CAAC,CAAC;AACF;CACA;CACA;CACA;CACA,UAAU,CAAC,0BAA0B,GAAG;CACxC,EAAE,yBAAyB;CAC3B,EAAE,sBAAsB;CACxB,EAAE,KAAK;CACP,EAAE,MAAM;CACR,EAAE;CACF;CACA,EAAE,IAAI,CAAC5B,oBAAO,CAAC,yBAAyB,CAAC,EAAE;CAC3C,IAAI,MAAM,IAAIE,oBAAc,CAAC,wCAAwC,CAAC,CAAC;CACvE,GAAG;AACH;CACA,EAAE,IAAI,CAACF,oBAAO,CAAC,sBAAsB,CAAC,EAAE;CACxC,IAAI,MAAM,IAAIE,oBAAc,CAAC,qCAAqC,CAAC,CAAC;CACpE,GAAG;AACH;CACA,EAAE,IAAI,CAACF,oBAAO,CAAC,KAAK,CAAC,EAAE;CACvB,IAAI,MAAM,IAAIE,oBAAc,CAAC,oBAAoB,CAAC,CAAC;CACnD,GAAG;CACH;AACA;CACA,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,GAAG,IAAI6B,kBAAU,EAAE,CAAC;CAC9B,GAAG;AACH;CACA,EAAE,MAAM,GAAG,GAAG,4BAA4B,CAAC;AAC3C;CACA,EAAErB,eAAO,CAAC,gBAAgB;CAC1B,IAAI,yBAAyB;CAC7B,IAAIoB,kBAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;CAC9D,IAAI,GAAG;CACP,GAAG,CAAC;CACJ,EAAEA,kBAAU,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;CACrD,EAAEpB,eAAO,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;CAC7D,EAAE,OAAOqB,kBAAU,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;CAChD,CAAC,CAAC;AACF;CACA,MAAM,aAAa,GAAG,IAAI5B,kBAAU,EAAE,CAAC;CACvC,MAAM,YAAY,GAAG,IAAIA,kBAAU,EAAE,CAAC;CACtC,MAAM,SAAS,GAAG,IAAIA,kBAAU,EAAE,CAAC;AACnC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA,UAAU,CAAC,kCAAkC,GAAG;CAChD,EAAE,QAAQ;CACV,EAAE,QAAQ;CACV,EAAE,SAAS;CACX,EAAE,MAAM;CACR,EAAE;CACF;CACA,EAAE,IAAI,CAACD,oBAAO,CAAC,QAAQ,CAAC,EAAE;CAC1B,IAAI,MAAM,IAAIE,oBAAc,CAAC,uBAAuB,CAAC,CAAC;CACtD,GAAG;AACH;CACA,EAAE,IAAI,CAACF,oBAAO,CAAC,QAAQ,CAAC,EAAE;CAC1B,IAAI,MAAM,IAAIE,oBAAc,CAAC,uBAAuB,CAAC,CAAC;CACtD,GAAG;CACH;AACA;CACA,EAAE,MAAM,MAAM,GAAGJ,yBAAY,CAAC,SAAS,EAAEC,iBAAS,CAAC,KAAK,CAAC,CAAC,qBAAqB;CAC/E,IAAI,QAAQ;CACZ,IAAI,aAAa;CACjB,GAAG,CAAC;CACJ,EAAE,IAAI,KAAK,GAAGE,kBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;AAC/D;CACA,EAAE,IAAIA,kBAAU,CAAC,aAAa,CAAC,KAAK,EAAEA,kBAAU,CAAC,IAAI,EAAEG,iBAAU,CAAC,QAAQ,CAAC,EAAE;CAC7E,IAAI,KAAK,GAAGH,kBAAU,CAAC,KAAK,CAACA,kBAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;CACvD,GAAG;AACH;CACA,EAAE,MAAM,EAAE,GAAGA,kBAAU,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;CAC1D,EAAEA,kBAAU,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;CAC/B,EAAEA,kBAAU,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;CACxC,EAAEA,kBAAU,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;CAClC,EAAEA,kBAAU,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACrC;CACA,EAAE,IAAI,CAACD,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,GAAG,IAAIO,eAAO,EAAE,CAAC;CAC3B,GAAG;AACH;CACA,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;CACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;CACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;CACzB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;CACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;CACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;CACtB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;CACnB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;CACnB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACnB;CACA,EAAE,OAAO,MAAM,CAAC;CAChB,CAAC,CAAC;AACF;CACA,MAAM,aAAa,GAAG,IAAIC,eAAO;CACjC,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,EAAE,GAAG;CACL,CAAC,CAAC;AACF;CACA,MAAM,mBAAmB,GAAG,IAAIL,oBAAY,EAAE,CAAC;CAC/C,MAAM,2BAA2B,GAAG,IAAIF,kBAAU,EAAE,CAAC;CACrD,MAAM,aAAa,GAAG,IAAIA,kBAAU,EAAE,CAAC;CACvC,MAAM,eAAe,GAAG,IAAIM,eAAO,EAAE,CAAC;CACtC,MAAM,cAAc,GAAG,IAAIC,eAAO,EAAE,CAAC;CACrC,MAAM,YAAY,GAAG,IAAIA,eAAO,EAAE,CAAC;AACnC;CACA;CACA;CACA;CACA,UAAU,CAAC,SAAS,GAAG,UAAU,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;CAC7D;CACA,EAAE,IAAI,CAACR,oBAAO,CAAC,UAAU,CAAC,EAAE;CAC5B,IAAI,MAAM,IAAIE,oBAAc,CAAC,yBAAyB,CAAC,CAAC;CACxD,GAAG;CACH,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,IAAIE,oBAAc,CAAC,qBAAqB,CAAC,CAAC;CACpD,GAAG;CACH,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,IAAIE,oBAAc,CAAC,qBAAqB,CAAC,CAAC;CACpD,GAAG;CACH;AACA;CACA,EAAE,MAAM,SAAS,GAAGM,eAAO,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAClE,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;AACzC;CACA;CACA,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC,uBAAuB;CACxD,IAAI,SAAS;CACb,IAAI,mBAAmB;CACvB,GAAG,CAAC;CACJ,EAAE,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO;CAC9C,IAAI,YAAY;CAChB,IAAI,2BAA2B;CAC/B,GAAG,CAAC;CACJ,EAAEP,kBAAU,CAAC,YAAY;CACzB,IAAI,iBAAiB,CAAC,CAAC;CACvB,IAAI,iBAAiB,CAAC,CAAC;CACvB,IAAI,iBAAiB,CAAC,CAAC;CACvB,IAAI,iBAAiB;CACrB,GAAG,CAAC;AACJ;CACA;CACA,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC,uBAAuB;CACpD,IAAI,SAAS;CACb,IAAI,SAAS;CACb,IAAI,cAAc;CAClB,GAAG,CAAC;CACJ,EAAE,MAAM,KAAK,GAAGO,eAAO,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;CACrE,EAAE,MAAM,QAAQ,GAAGA,eAAO,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC/D,EAAE,MAAM,KAAK,GAAGA,eAAO,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;CACnE,EAAEA,eAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;CACjD,EAAEA,eAAO,CAAC,cAAc,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAC5D;CACA,EAAE,OAAO,MAAM,CAAC;CAChB,CAAC,CAAC;AACF;CACA;CACA;CACA;CACA,UAAU,CAAC,oBAAoB,GAAG,UAAU,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE;CACxE;CACA,EAAE,IAAI,CAACR,oBAAO,CAAC,UAAU,CAAC,EAAE;CAC5B,IAAI,MAAM,IAAIE,oBAAc,CAAC,yBAAyB,CAAC,CAAC;CACxD,GAAG;CACH,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,IAAIE,oBAAc,CAAC,qBAAqB,CAAC,CAAC;CACpD,GAAG;CACH,EAAE,IAAI,CAACF,oBAAO,CAAC,MAAM,CAAC,EAAE;CACxB,IAAI,MAAM,IAAIE,oBAAc,CAAC,qBAAqB,CAAC,CAAC;CACpD,GAAG;CACH;AACA;CACA,EAAE,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;AACzC;CACA,EAAE,MAAM,OAAO,GAAG,UAAU,CAAC,uBAAuB;CACpD,IAAI,MAAM;CACV,IAAI,SAAS;CACb,IAAI,cAAc;CAClB,GAAG,CAAC;CACJ,EAAE,MAAM,KAAK,GAAGM,eAAO,CAAC,qBAAqB,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACrE;CACA,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC,uBAAuB;CACxD,IAAI,MAAM;CACV,IAAI,mBAAmB;CACvB,GAAG,CAAC;CACJ,EAAE,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO;CAC9C,IAAI,YAAY;CAChB,IAAI,2BAA2B;CAC/B,GAAG,CAAC;CACJ,EAAEP,kBAAU,CAAC,YAAY;CACzB,IAAI,iBAAiB,CAAC,CAAC;CACvB,IAAI,iBAAiB,CAAC,CAAC;CACvB,IAAI,iBAAiB,CAAC,CAAC;CACvB,IAAI,iBAAiB;CACrB,GAAG,CAAC;AACJ;CACA,EAAE,MAAM,WAAW,GAAGO,eAAO,CAAC,eAAe;CAC7C,IAAI,iBAAiB;CACrB,IAAI,cAAc;CAClB,GAAG,CAAC;CACJ,EAAEA,eAAO,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;CACjD,EAAEA,eAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAChD;CACA,EAAE,OAAO,MAAM,CAAC;CAChB,CAAC,CAAC;AACF,oBAAe,UAAU;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/VertexFormat-f2d74c96.js b/debug/cesium/Workers/VertexFormat-f2d74c96.js deleted file mode 100644 index aaa725b..0000000 --- a/debug/cesium/Workers/VertexFormat-f2d74c96.js +++ /dev/null @@ -1,338 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './defaultValue-0ab18f7d', './Check-d10e5f2e'], (function (exports, defaultValue, Check) { 'use strict'; - - /** - * A vertex format defines what attributes make up a vertex. A VertexFormat can be provided - * to a {@link Geometry} to request that certain properties be computed, e.g., just position, - * position and normal, etc. - * - * @param {Object} [options] An object with boolean properties corresponding to VertexFormat properties as shown in the code example. - * - * @alias VertexFormat - * @constructor - * - * @example - * // Create a vertex format with position and 2D texture coordinate attributes. - * const format = new Cesium.VertexFormat({ - * position : true, - * st : true - * }); - * - * @see Geometry#attributes - * @see Packable - */ - function VertexFormat(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - /** - * When true, the vertex has a 3D position attribute. - *

    - * 64-bit floating-point (for precision). 3 components per attribute. - *

    - * - * @type Boolean - * - * @default false - */ - this.position = defaultValue.defaultValue(options.position, false); - - /** - * When true, the vertex has a normal attribute (normalized), which is commonly used for lighting. - *

    - * 32-bit floating-point. 3 components per attribute. - *

    - * - * @type Boolean - * - * @default false - */ - this.normal = defaultValue.defaultValue(options.normal, false); - - /** - * When true, the vertex has a 2D texture coordinate attribute. - *

    - * 32-bit floating-point. 2 components per attribute - *

    - * - * @type Boolean - * - * @default false - */ - this.st = defaultValue.defaultValue(options.st, false); - - /** - * When true, the vertex has a bitangent attribute (normalized), which is used for tangent-space effects like bump mapping. - *

    - * 32-bit floating-point. 3 components per attribute. - *

    - * - * @type Boolean - * - * @default false - */ - this.bitangent = defaultValue.defaultValue(options.bitangent, false); - - /** - * When true, the vertex has a tangent attribute (normalized), which is used for tangent-space effects like bump mapping. - *

    - * 32-bit floating-point. 3 components per attribute. - *

    - * - * @type Boolean - * - * @default false - */ - this.tangent = defaultValue.defaultValue(options.tangent, false); - - /** - * When true, the vertex has an RGB color attribute. - *

    - * 8-bit unsigned byte. 3 components per attribute. - *

    - * - * @type Boolean - * - * @default false - */ - this.color = defaultValue.defaultValue(options.color, false); - } - - /** - * An immutable vertex format with only a position attribute. - * - * @type {VertexFormat} - * @constant - * - * @see VertexFormat#position - */ - VertexFormat.POSITION_ONLY = Object.freeze( - new VertexFormat({ - position: true, - }) - ); - - /** - * An immutable vertex format with position and normal attributes. - * This is compatible with per-instance color appearances like {@link PerInstanceColorAppearance}. - * - * @type {VertexFormat} - * @constant - * - * @see VertexFormat#position - * @see VertexFormat#normal - */ - VertexFormat.POSITION_AND_NORMAL = Object.freeze( - new VertexFormat({ - position: true, - normal: true, - }) - ); - - /** - * An immutable vertex format with position, normal, and st attributes. - * This is compatible with {@link MaterialAppearance} when {@link MaterialAppearance#materialSupport} - * is TEXTURED/code>. - * - * @type {VertexFormat} - * @constant - * - * @see VertexFormat#position - * @see VertexFormat#normal - * @see VertexFormat#st - */ - VertexFormat.POSITION_NORMAL_AND_ST = Object.freeze( - new VertexFormat({ - position: true, - normal: true, - st: true, - }) - ); - - /** - * An immutable vertex format with position and st attributes. - * This is compatible with {@link EllipsoidSurfaceAppearance}. - * - * @type {VertexFormat} - * @constant - * - * @see VertexFormat#position - * @see VertexFormat#st - */ - VertexFormat.POSITION_AND_ST = Object.freeze( - new VertexFormat({ - position: true, - st: true, - }) - ); - - /** - * An immutable vertex format with position and color attributes. - * - * @type {VertexFormat} - * @constant - * - * @see VertexFormat#position - * @see VertexFormat#color - */ - VertexFormat.POSITION_AND_COLOR = Object.freeze( - new VertexFormat({ - position: true, - color: true, - }) - ); - - /** - * An immutable vertex format with well-known attributes: position, normal, st, tangent, and bitangent. - * - * @type {VertexFormat} - * @constant - * - * @see VertexFormat#position - * @see VertexFormat#normal - * @see VertexFormat#st - * @see VertexFormat#tangent - * @see VertexFormat#bitangent - */ - VertexFormat.ALL = Object.freeze( - new VertexFormat({ - position: true, - normal: true, - st: true, - tangent: true, - bitangent: true, - }) - ); - - /** - * An immutable vertex format with position, normal, and st attributes. - * This is compatible with most appearances and materials; however - * normal and st attributes are not always required. When this is - * known in advance, another VertexFormat should be used. - * - * @type {VertexFormat} - * @constant - * - * @see VertexFormat#position - * @see VertexFormat#normal - */ - VertexFormat.DEFAULT = VertexFormat.POSITION_NORMAL_AND_ST; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - VertexFormat.packedLength = 6; - - /** - * Stores the provided instance into the provided array. - * - * @param {VertexFormat} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - VertexFormat.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value.position ? 1.0 : 0.0; - array[startingIndex++] = value.normal ? 1.0 : 0.0; - array[startingIndex++] = value.st ? 1.0 : 0.0; - array[startingIndex++] = value.tangent ? 1.0 : 0.0; - array[startingIndex++] = value.bitangent ? 1.0 : 0.0; - array[startingIndex] = value.color ? 1.0 : 0.0; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {VertexFormat} [result] The object into which to store the result. - * @returns {VertexFormat} The modified result parameter or a new VertexFormat instance if one was not provided. - */ - VertexFormat.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - if (!defaultValue.defined(result)) { - result = new VertexFormat(); - } - - result.position = array[startingIndex++] === 1.0; - result.normal = array[startingIndex++] === 1.0; - result.st = array[startingIndex++] === 1.0; - result.tangent = array[startingIndex++] === 1.0; - result.bitangent = array[startingIndex++] === 1.0; - result.color = array[startingIndex] === 1.0; - return result; - }; - - /** - * Duplicates a VertexFormat instance. - * - * @param {VertexFormat} vertexFormat The vertex format to duplicate. - * @param {VertexFormat} [result] The object onto which to store the result. - * @returns {VertexFormat} The modified result parameter or a new VertexFormat instance if one was not provided. (Returns undefined if vertexFormat is undefined) - */ - VertexFormat.clone = function (vertexFormat, result) { - if (!defaultValue.defined(vertexFormat)) { - return undefined; - } - if (!defaultValue.defined(result)) { - result = new VertexFormat(); - } - - result.position = vertexFormat.position; - result.normal = vertexFormat.normal; - result.st = vertexFormat.st; - result.tangent = vertexFormat.tangent; - result.bitangent = vertexFormat.bitangent; - result.color = vertexFormat.color; - return result; - }; - - exports.VertexFormat = VertexFormat; - -})); -//# sourceMappingURL=VertexFormat-f2d74c96.js.map diff --git a/debug/cesium/Workers/VertexFormat-f2d74c96.js.map b/debug/cesium/Workers/VertexFormat-f2d74c96.js.map deleted file mode 100644 index 6d4f398..0000000 --- a/debug/cesium/Workers/VertexFormat-f2d74c96.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"VertexFormat-f2d74c96.js","sources":["../../../Source/Core/VertexFormat.js"],"sourcesContent":["import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * A vertex format defines what attributes make up a vertex. A VertexFormat can be provided\r\n * to a {@link Geometry} to request that certain properties be computed, e.g., just position,\r\n * position and normal, etc.\r\n *\r\n * @param {Object} [options] An object with boolean properties corresponding to VertexFormat properties as shown in the code example.\r\n *\r\n * @alias VertexFormat\r\n * @constructor\r\n *\r\n * @example\r\n * // Create a vertex format with position and 2D texture coordinate attributes.\r\n * const format = new Cesium.VertexFormat({\r\n * position : true,\r\n * st : true\r\n * });\r\n *\r\n * @see Geometry#attributes\r\n * @see Packable\r\n */\r\nfunction VertexFormat(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n /**\r\n * When true, the vertex has a 3D position attribute.\r\n *

    \r\n * 64-bit floating-point (for precision). 3 components per attribute.\r\n *

    \r\n *\r\n * @type Boolean\r\n *\r\n * @default false\r\n */\r\n this.position = defaultValue(options.position, false);\r\n\r\n /**\r\n * When true, the vertex has a normal attribute (normalized), which is commonly used for lighting.\r\n *

    \r\n * 32-bit floating-point. 3 components per attribute.\r\n *

    \r\n *\r\n * @type Boolean\r\n *\r\n * @default false\r\n */\r\n this.normal = defaultValue(options.normal, false);\r\n\r\n /**\r\n * When true, the vertex has a 2D texture coordinate attribute.\r\n *

    \r\n * 32-bit floating-point. 2 components per attribute\r\n *

    \r\n *\r\n * @type Boolean\r\n *\r\n * @default false\r\n */\r\n this.st = defaultValue(options.st, false);\r\n\r\n /**\r\n * When true, the vertex has a bitangent attribute (normalized), which is used for tangent-space effects like bump mapping.\r\n *

    \r\n * 32-bit floating-point. 3 components per attribute.\r\n *

    \r\n *\r\n * @type Boolean\r\n *\r\n * @default false\r\n */\r\n this.bitangent = defaultValue(options.bitangent, false);\r\n\r\n /**\r\n * When true, the vertex has a tangent attribute (normalized), which is used for tangent-space effects like bump mapping.\r\n *

    \r\n * 32-bit floating-point. 3 components per attribute.\r\n *

    \r\n *\r\n * @type Boolean\r\n *\r\n * @default false\r\n */\r\n this.tangent = defaultValue(options.tangent, false);\r\n\r\n /**\r\n * When true, the vertex has an RGB color attribute.\r\n *

    \r\n * 8-bit unsigned byte. 3 components per attribute.\r\n *

    \r\n *\r\n * @type Boolean\r\n *\r\n * @default false\r\n */\r\n this.color = defaultValue(options.color, false);\r\n}\r\n\r\n/**\r\n * An immutable vertex format with only a position attribute.\r\n *\r\n * @type {VertexFormat}\r\n * @constant\r\n *\r\n * @see VertexFormat#position\r\n */\r\nVertexFormat.POSITION_ONLY = Object.freeze(\r\n new VertexFormat({\r\n position: true,\r\n })\r\n);\r\n\r\n/**\r\n * An immutable vertex format with position and normal attributes.\r\n * This is compatible with per-instance color appearances like {@link PerInstanceColorAppearance}.\r\n *\r\n * @type {VertexFormat}\r\n * @constant\r\n *\r\n * @see VertexFormat#position\r\n * @see VertexFormat#normal\r\n */\r\nVertexFormat.POSITION_AND_NORMAL = Object.freeze(\r\n new VertexFormat({\r\n position: true,\r\n normal: true,\r\n })\r\n);\r\n\r\n/**\r\n * An immutable vertex format with position, normal, and st attributes.\r\n * This is compatible with {@link MaterialAppearance} when {@link MaterialAppearance#materialSupport}\r\n * is TEXTURED/code>.\r\n *\r\n * @type {VertexFormat}\r\n * @constant\r\n *\r\n * @see VertexFormat#position\r\n * @see VertexFormat#normal\r\n * @see VertexFormat#st\r\n */\r\nVertexFormat.POSITION_NORMAL_AND_ST = Object.freeze(\r\n new VertexFormat({\r\n position: true,\r\n normal: true,\r\n st: true,\r\n })\r\n);\r\n\r\n/**\r\n * An immutable vertex format with position and st attributes.\r\n * This is compatible with {@link EllipsoidSurfaceAppearance}.\r\n *\r\n * @type {VertexFormat}\r\n * @constant\r\n *\r\n * @see VertexFormat#position\r\n * @see VertexFormat#st\r\n */\r\nVertexFormat.POSITION_AND_ST = Object.freeze(\r\n new VertexFormat({\r\n position: true,\r\n st: true,\r\n })\r\n);\r\n\r\n/**\r\n * An immutable vertex format with position and color attributes.\r\n *\r\n * @type {VertexFormat}\r\n * @constant\r\n *\r\n * @see VertexFormat#position\r\n * @see VertexFormat#color\r\n */\r\nVertexFormat.POSITION_AND_COLOR = Object.freeze(\r\n new VertexFormat({\r\n position: true,\r\n color: true,\r\n })\r\n);\r\n\r\n/**\r\n * An immutable vertex format with well-known attributes: position, normal, st, tangent, and bitangent.\r\n *\r\n * @type {VertexFormat}\r\n * @constant\r\n *\r\n * @see VertexFormat#position\r\n * @see VertexFormat#normal\r\n * @see VertexFormat#st\r\n * @see VertexFormat#tangent\r\n * @see VertexFormat#bitangent\r\n */\r\nVertexFormat.ALL = Object.freeze(\r\n new VertexFormat({\r\n position: true,\r\n normal: true,\r\n st: true,\r\n tangent: true,\r\n bitangent: true,\r\n })\r\n);\r\n\r\n/**\r\n * An immutable vertex format with position, normal, and st attributes.\r\n * This is compatible with most appearances and materials; however\r\n * normal and st attributes are not always required. When this is\r\n * known in advance, another VertexFormat should be used.\r\n *\r\n * @type {VertexFormat}\r\n * @constant\r\n *\r\n * @see VertexFormat#position\r\n * @see VertexFormat#normal\r\n */\r\nVertexFormat.DEFAULT = VertexFormat.POSITION_NORMAL_AND_ST;\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nVertexFormat.packedLength = 6;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {VertexFormat} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nVertexFormat.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value.position ? 1.0 : 0.0;\r\n array[startingIndex++] = value.normal ? 1.0 : 0.0;\r\n array[startingIndex++] = value.st ? 1.0 : 0.0;\r\n array[startingIndex++] = value.tangent ? 1.0 : 0.0;\r\n array[startingIndex++] = value.bitangent ? 1.0 : 0.0;\r\n array[startingIndex] = value.color ? 1.0 : 0.0;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {VertexFormat} [result] The object into which to store the result.\r\n * @returns {VertexFormat} The modified result parameter or a new VertexFormat instance if one was not provided.\r\n */\r\nVertexFormat.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n if (!defined(result)) {\r\n result = new VertexFormat();\r\n }\r\n\r\n result.position = array[startingIndex++] === 1.0;\r\n result.normal = array[startingIndex++] === 1.0;\r\n result.st = array[startingIndex++] === 1.0;\r\n result.tangent = array[startingIndex++] === 1.0;\r\n result.bitangent = array[startingIndex++] === 1.0;\r\n result.color = array[startingIndex] === 1.0;\r\n return result;\r\n};\r\n\r\n/**\r\n * Duplicates a VertexFormat instance.\r\n *\r\n * @param {VertexFormat} vertexFormat The vertex format to duplicate.\r\n * @param {VertexFormat} [result] The object onto which to store the result.\r\n * @returns {VertexFormat} The modified result parameter or a new VertexFormat instance if one was not provided. (Returns undefined if vertexFormat is undefined)\r\n */\r\nVertexFormat.clone = function (vertexFormat, result) {\r\n if (!defined(vertexFormat)) {\r\n return undefined;\r\n }\r\n if (!defined(result)) {\r\n result = new VertexFormat();\r\n }\r\n\r\n result.position = vertexFormat.position;\r\n result.normal = vertexFormat.normal;\r\n result.st = vertexFormat.st;\r\n result.tangent = vertexFormat.tangent;\r\n result.bitangent = vertexFormat.bitangent;\r\n result.color = vertexFormat.color;\r\n return result;\r\n};\r\nexport default VertexFormat;\r\n"],"names":["defaultValue","defined","DeveloperError"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/WallGeometryLibrary-4f405b12.js b/debug/cesium/Workers/WallGeometryLibrary-4f405b12.js deleted file mode 100644 index 33bcd7d..0000000 --- a/debug/cesium/Workers/WallGeometryLibrary-4f405b12.js +++ /dev/null @@ -1,237 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './arrayRemoveDuplicates-c3526030', './Matrix3-f22b0303', './defaultValue-0ab18f7d', './Math-9be8b918', './PolylinePipeline-3c021236'], (function (exports, arrayRemoveDuplicates, Matrix3, defaultValue, Math, PolylinePipeline) { 'use strict'; - - /** - * @private - */ - const WallGeometryLibrary = {}; - - function latLonEquals(c0, c1) { - return ( - Math.CesiumMath.equalsEpsilon(c0.latitude, c1.latitude, Math.CesiumMath.EPSILON10) && - Math.CesiumMath.equalsEpsilon(c0.longitude, c1.longitude, Math.CesiumMath.EPSILON10) - ); - } - - const scratchCartographic1 = new Matrix3.Cartographic(); - const scratchCartographic2 = new Matrix3.Cartographic(); - function removeDuplicates(ellipsoid, positions, topHeights, bottomHeights) { - positions = arrayRemoveDuplicates.arrayRemoveDuplicates(positions, Matrix3.Cartesian3.equalsEpsilon); - - const length = positions.length; - if (length < 2) { - return; - } - - const hasBottomHeights = defaultValue.defined(bottomHeights); - const hasTopHeights = defaultValue.defined(topHeights); - - const cleanedPositions = new Array(length); - const cleanedTopHeights = new Array(length); - const cleanedBottomHeights = new Array(length); - - const v0 = positions[0]; - cleanedPositions[0] = v0; - - const c0 = ellipsoid.cartesianToCartographic(v0, scratchCartographic1); - if (hasTopHeights) { - c0.height = topHeights[0]; - } - - cleanedTopHeights[0] = c0.height; - - if (hasBottomHeights) { - cleanedBottomHeights[0] = bottomHeights[0]; - } else { - cleanedBottomHeights[0] = 0.0; - } - - const startTopHeight = cleanedTopHeights[0]; - const startBottomHeight = cleanedBottomHeights[0]; - let hasAllSameHeights = startTopHeight === startBottomHeight; - - let index = 1; - for (let i = 1; i < length; ++i) { - const v1 = positions[i]; - const c1 = ellipsoid.cartesianToCartographic(v1, scratchCartographic2); - if (hasTopHeights) { - c1.height = topHeights[i]; - } - hasAllSameHeights = hasAllSameHeights && c1.height === 0; - - if (!latLonEquals(c0, c1)) { - cleanedPositions[index] = v1; // Shallow copy! - cleanedTopHeights[index] = c1.height; - - if (hasBottomHeights) { - cleanedBottomHeights[index] = bottomHeights[i]; - } else { - cleanedBottomHeights[index] = 0.0; - } - hasAllSameHeights = - hasAllSameHeights && - cleanedTopHeights[index] === cleanedBottomHeights[index]; - - Matrix3.Cartographic.clone(c1, c0); - ++index; - } else if (c0.height < c1.height) { - // two adjacent positions are the same, so use whichever has the greater height - cleanedTopHeights[index - 1] = c1.height; - } - } - - if (hasAllSameHeights || index < 2) { - return; - } - - cleanedPositions.length = index; - cleanedTopHeights.length = index; - cleanedBottomHeights.length = index; - - return { - positions: cleanedPositions, - topHeights: cleanedTopHeights, - bottomHeights: cleanedBottomHeights, - }; - } - - const positionsArrayScratch = new Array(2); - const heightsArrayScratch = new Array(2); - const generateArcOptionsScratch = { - positions: undefined, - height: undefined, - granularity: undefined, - ellipsoid: undefined, - }; - - /** - * @private - */ - WallGeometryLibrary.computePositions = function ( - ellipsoid, - wallPositions, - maximumHeights, - minimumHeights, - granularity, - duplicateCorners - ) { - const o = removeDuplicates( - ellipsoid, - wallPositions, - maximumHeights, - minimumHeights - ); - - if (!defaultValue.defined(o)) { - return; - } - - wallPositions = o.positions; - maximumHeights = o.topHeights; - minimumHeights = o.bottomHeights; - - const length = wallPositions.length; - const numCorners = length - 2; - let topPositions; - let bottomPositions; - - const minDistance = Math.CesiumMath.chordLength( - granularity, - ellipsoid.maximumRadius - ); - - const generateArcOptions = generateArcOptionsScratch; - generateArcOptions.minDistance = minDistance; - generateArcOptions.ellipsoid = ellipsoid; - - if (duplicateCorners) { - let count = 0; - let i; - - for (i = 0; i < length - 1; i++) { - count += - PolylinePipeline.PolylinePipeline.numberOfPoints( - wallPositions[i], - wallPositions[i + 1], - minDistance - ) + 1; - } - - topPositions = new Float64Array(count * 3); - bottomPositions = new Float64Array(count * 3); - - const generateArcPositions = positionsArrayScratch; - const generateArcHeights = heightsArrayScratch; - generateArcOptions.positions = generateArcPositions; - generateArcOptions.height = generateArcHeights; - - let offset = 0; - for (i = 0; i < length - 1; i++) { - generateArcPositions[0] = wallPositions[i]; - generateArcPositions[1] = wallPositions[i + 1]; - - generateArcHeights[0] = maximumHeights[i]; - generateArcHeights[1] = maximumHeights[i + 1]; - - const pos = PolylinePipeline.PolylinePipeline.generateArc(generateArcOptions); - topPositions.set(pos, offset); - - generateArcHeights[0] = minimumHeights[i]; - generateArcHeights[1] = minimumHeights[i + 1]; - - bottomPositions.set( - PolylinePipeline.PolylinePipeline.generateArc(generateArcOptions), - offset - ); - - offset += pos.length; - } - } else { - generateArcOptions.positions = wallPositions; - generateArcOptions.height = maximumHeights; - topPositions = new Float64Array( - PolylinePipeline.PolylinePipeline.generateArc(generateArcOptions) - ); - - generateArcOptions.height = minimumHeights; - bottomPositions = new Float64Array( - PolylinePipeline.PolylinePipeline.generateArc(generateArcOptions) - ); - } - - return { - bottomPositions: bottomPositions, - topPositions: topPositions, - numCorners: numCorners, - }; - }; - var WallGeometryLibrary$1 = WallGeometryLibrary; - - exports.WallGeometryLibrary = WallGeometryLibrary$1; - -})); -//# sourceMappingURL=WallGeometryLibrary-4f405b12.js.map diff --git a/debug/cesium/Workers/WallGeometryLibrary-4f405b12.js.map b/debug/cesium/Workers/WallGeometryLibrary-4f405b12.js.map deleted file mode 100644 index 2adc665..0000000 --- a/debug/cesium/Workers/WallGeometryLibrary-4f405b12.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WallGeometryLibrary-4f405b12.js","sources":["../../../Source/Core/WallGeometryLibrary.js"],"sourcesContent":["import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport defined from \"./defined.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PolylinePipeline from \"./PolylinePipeline.js\";\r\n\r\n/**\r\n * @private\r\n */\r\nconst WallGeometryLibrary = {};\r\n\r\nfunction latLonEquals(c0, c1) {\r\n return (\r\n CesiumMath.equalsEpsilon(c0.latitude, c1.latitude, CesiumMath.EPSILON10) &&\r\n CesiumMath.equalsEpsilon(c0.longitude, c1.longitude, CesiumMath.EPSILON10)\r\n );\r\n}\r\n\r\nconst scratchCartographic1 = new Cartographic();\r\nconst scratchCartographic2 = new Cartographic();\r\nfunction removeDuplicates(ellipsoid, positions, topHeights, bottomHeights) {\r\n positions = arrayRemoveDuplicates(positions, Cartesian3.equalsEpsilon);\r\n\r\n const length = positions.length;\r\n if (length < 2) {\r\n return;\r\n }\r\n\r\n const hasBottomHeights = defined(bottomHeights);\r\n const hasTopHeights = defined(topHeights);\r\n\r\n const cleanedPositions = new Array(length);\r\n const cleanedTopHeights = new Array(length);\r\n const cleanedBottomHeights = new Array(length);\r\n\r\n const v0 = positions[0];\r\n cleanedPositions[0] = v0;\r\n\r\n const c0 = ellipsoid.cartesianToCartographic(v0, scratchCartographic1);\r\n if (hasTopHeights) {\r\n c0.height = topHeights[0];\r\n }\r\n\r\n cleanedTopHeights[0] = c0.height;\r\n\r\n if (hasBottomHeights) {\r\n cleanedBottomHeights[0] = bottomHeights[0];\r\n } else {\r\n cleanedBottomHeights[0] = 0.0;\r\n }\r\n\r\n const startTopHeight = cleanedTopHeights[0];\r\n const startBottomHeight = cleanedBottomHeights[0];\r\n let hasAllSameHeights = startTopHeight === startBottomHeight;\r\n\r\n let index = 1;\r\n for (let i = 1; i < length; ++i) {\r\n const v1 = positions[i];\r\n const c1 = ellipsoid.cartesianToCartographic(v1, scratchCartographic2);\r\n if (hasTopHeights) {\r\n c1.height = topHeights[i];\r\n }\r\n hasAllSameHeights = hasAllSameHeights && c1.height === 0;\r\n\r\n if (!latLonEquals(c0, c1)) {\r\n cleanedPositions[index] = v1; // Shallow copy!\r\n cleanedTopHeights[index] = c1.height;\r\n\r\n if (hasBottomHeights) {\r\n cleanedBottomHeights[index] = bottomHeights[i];\r\n } else {\r\n cleanedBottomHeights[index] = 0.0;\r\n }\r\n hasAllSameHeights =\r\n hasAllSameHeights &&\r\n cleanedTopHeights[index] === cleanedBottomHeights[index];\r\n\r\n Cartographic.clone(c1, c0);\r\n ++index;\r\n } else if (c0.height < c1.height) {\r\n // two adjacent positions are the same, so use whichever has the greater height\r\n cleanedTopHeights[index - 1] = c1.height;\r\n }\r\n }\r\n\r\n if (hasAllSameHeights || index < 2) {\r\n return;\r\n }\r\n\r\n cleanedPositions.length = index;\r\n cleanedTopHeights.length = index;\r\n cleanedBottomHeights.length = index;\r\n\r\n return {\r\n positions: cleanedPositions,\r\n topHeights: cleanedTopHeights,\r\n bottomHeights: cleanedBottomHeights,\r\n };\r\n}\r\n\r\nconst positionsArrayScratch = new Array(2);\r\nconst heightsArrayScratch = new Array(2);\r\nconst generateArcOptionsScratch = {\r\n positions: undefined,\r\n height: undefined,\r\n granularity: undefined,\r\n ellipsoid: undefined,\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nWallGeometryLibrary.computePositions = function (\r\n ellipsoid,\r\n wallPositions,\r\n maximumHeights,\r\n minimumHeights,\r\n granularity,\r\n duplicateCorners\r\n) {\r\n const o = removeDuplicates(\r\n ellipsoid,\r\n wallPositions,\r\n maximumHeights,\r\n minimumHeights\r\n );\r\n\r\n if (!defined(o)) {\r\n return;\r\n }\r\n\r\n wallPositions = o.positions;\r\n maximumHeights = o.topHeights;\r\n minimumHeights = o.bottomHeights;\r\n\r\n const length = wallPositions.length;\r\n const numCorners = length - 2;\r\n let topPositions;\r\n let bottomPositions;\r\n\r\n const minDistance = CesiumMath.chordLength(\r\n granularity,\r\n ellipsoid.maximumRadius\r\n );\r\n\r\n const generateArcOptions = generateArcOptionsScratch;\r\n generateArcOptions.minDistance = minDistance;\r\n generateArcOptions.ellipsoid = ellipsoid;\r\n\r\n if (duplicateCorners) {\r\n let count = 0;\r\n let i;\r\n\r\n for (i = 0; i < length - 1; i++) {\r\n count +=\r\n PolylinePipeline.numberOfPoints(\r\n wallPositions[i],\r\n wallPositions[i + 1],\r\n minDistance\r\n ) + 1;\r\n }\r\n\r\n topPositions = new Float64Array(count * 3);\r\n bottomPositions = new Float64Array(count * 3);\r\n\r\n const generateArcPositions = positionsArrayScratch;\r\n const generateArcHeights = heightsArrayScratch;\r\n generateArcOptions.positions = generateArcPositions;\r\n generateArcOptions.height = generateArcHeights;\r\n\r\n let offset = 0;\r\n for (i = 0; i < length - 1; i++) {\r\n generateArcPositions[0] = wallPositions[i];\r\n generateArcPositions[1] = wallPositions[i + 1];\r\n\r\n generateArcHeights[0] = maximumHeights[i];\r\n generateArcHeights[1] = maximumHeights[i + 1];\r\n\r\n const pos = PolylinePipeline.generateArc(generateArcOptions);\r\n topPositions.set(pos, offset);\r\n\r\n generateArcHeights[0] = minimumHeights[i];\r\n generateArcHeights[1] = minimumHeights[i + 1];\r\n\r\n bottomPositions.set(\r\n PolylinePipeline.generateArc(generateArcOptions),\r\n offset\r\n );\r\n\r\n offset += pos.length;\r\n }\r\n } else {\r\n generateArcOptions.positions = wallPositions;\r\n generateArcOptions.height = maximumHeights;\r\n topPositions = new Float64Array(\r\n PolylinePipeline.generateArc(generateArcOptions)\r\n );\r\n\r\n generateArcOptions.height = minimumHeights;\r\n bottomPositions = new Float64Array(\r\n PolylinePipeline.generateArc(generateArcOptions)\r\n );\r\n }\r\n\r\n return {\r\n bottomPositions: bottomPositions,\r\n topPositions: topPositions,\r\n numCorners: numCorners,\r\n };\r\n};\r\nexport default WallGeometryLibrary;\r\n"],"names":["CesiumMath","Cartographic","arrayRemoveDuplicates","Cartesian3","defined","PolylinePipeline"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/WebGLConstants-f27a5e29.js b/debug/cesium/Workers/WebGLConstants-f27a5e29.js deleted file mode 100644 index e2fa6e8..0000000 --- a/debug/cesium/Workers/WebGLConstants-f27a5e29.js +++ /dev/null @@ -1,646 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports'], (function (exports) { 'use strict'; - - /** - * Enum containing WebGL Constant values by name. - * for use without an active WebGL context, or in cases where certain constants are unavailable using the WebGL context - * (For example, in [Safari 9]{@link https://github.com/CesiumGS/cesium/issues/2989}). - * - * These match the constants from the [WebGL 1.0]{@link https://www.khronos.org/registry/webgl/specs/latest/1.0/} - * and [WebGL 2.0]{@link https://www.khronos.org/registry/webgl/specs/latest/2.0/} - * specifications. - * - * @enum {Number} - */ - const WebGLConstants = { - DEPTH_BUFFER_BIT: 0x00000100, - STENCIL_BUFFER_BIT: 0x00000400, - COLOR_BUFFER_BIT: 0x00004000, - POINTS: 0x0000, - LINES: 0x0001, - LINE_LOOP: 0x0002, - LINE_STRIP: 0x0003, - TRIANGLES: 0x0004, - TRIANGLE_STRIP: 0x0005, - TRIANGLE_FAN: 0x0006, - ZERO: 0, - ONE: 1, - SRC_COLOR: 0x0300, - ONE_MINUS_SRC_COLOR: 0x0301, - SRC_ALPHA: 0x0302, - ONE_MINUS_SRC_ALPHA: 0x0303, - DST_ALPHA: 0x0304, - ONE_MINUS_DST_ALPHA: 0x0305, - DST_COLOR: 0x0306, - ONE_MINUS_DST_COLOR: 0x0307, - SRC_ALPHA_SATURATE: 0x0308, - FUNC_ADD: 0x8006, - BLEND_EQUATION: 0x8009, - BLEND_EQUATION_RGB: 0x8009, // same as BLEND_EQUATION - BLEND_EQUATION_ALPHA: 0x883d, - FUNC_SUBTRACT: 0x800a, - FUNC_REVERSE_SUBTRACT: 0x800b, - BLEND_DST_RGB: 0x80c8, - BLEND_SRC_RGB: 0x80c9, - BLEND_DST_ALPHA: 0x80ca, - BLEND_SRC_ALPHA: 0x80cb, - CONSTANT_COLOR: 0x8001, - ONE_MINUS_CONSTANT_COLOR: 0x8002, - CONSTANT_ALPHA: 0x8003, - ONE_MINUS_CONSTANT_ALPHA: 0x8004, - BLEND_COLOR: 0x8005, - ARRAY_BUFFER: 0x8892, - ELEMENT_ARRAY_BUFFER: 0x8893, - ARRAY_BUFFER_BINDING: 0x8894, - ELEMENT_ARRAY_BUFFER_BINDING: 0x8895, - STREAM_DRAW: 0x88e0, - STATIC_DRAW: 0x88e4, - DYNAMIC_DRAW: 0x88e8, - BUFFER_SIZE: 0x8764, - BUFFER_USAGE: 0x8765, - CURRENT_VERTEX_ATTRIB: 0x8626, - FRONT: 0x0404, - BACK: 0x0405, - FRONT_AND_BACK: 0x0408, - CULL_FACE: 0x0b44, - BLEND: 0x0be2, - DITHER: 0x0bd0, - STENCIL_TEST: 0x0b90, - DEPTH_TEST: 0x0b71, - SCISSOR_TEST: 0x0c11, - POLYGON_OFFSET_FILL: 0x8037, - SAMPLE_ALPHA_TO_COVERAGE: 0x809e, - SAMPLE_COVERAGE: 0x80a0, - NO_ERROR: 0, - INVALID_ENUM: 0x0500, - INVALID_VALUE: 0x0501, - INVALID_OPERATION: 0x0502, - OUT_OF_MEMORY: 0x0505, - CW: 0x0900, - CCW: 0x0901, - LINE_WIDTH: 0x0b21, - ALIASED_POINT_SIZE_RANGE: 0x846d, - ALIASED_LINE_WIDTH_RANGE: 0x846e, - CULL_FACE_MODE: 0x0b45, - FRONT_FACE: 0x0b46, - DEPTH_RANGE: 0x0b70, - DEPTH_WRITEMASK: 0x0b72, - DEPTH_CLEAR_VALUE: 0x0b73, - DEPTH_FUNC: 0x0b74, - STENCIL_CLEAR_VALUE: 0x0b91, - STENCIL_FUNC: 0x0b92, - STENCIL_FAIL: 0x0b94, - STENCIL_PASS_DEPTH_FAIL: 0x0b95, - STENCIL_PASS_DEPTH_PASS: 0x0b96, - STENCIL_REF: 0x0b97, - STENCIL_VALUE_MASK: 0x0b93, - STENCIL_WRITEMASK: 0x0b98, - STENCIL_BACK_FUNC: 0x8800, - STENCIL_BACK_FAIL: 0x8801, - STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802, - STENCIL_BACK_PASS_DEPTH_PASS: 0x8803, - STENCIL_BACK_REF: 0x8ca3, - STENCIL_BACK_VALUE_MASK: 0x8ca4, - STENCIL_BACK_WRITEMASK: 0x8ca5, - VIEWPORT: 0x0ba2, - SCISSOR_BOX: 0x0c10, - COLOR_CLEAR_VALUE: 0x0c22, - COLOR_WRITEMASK: 0x0c23, - UNPACK_ALIGNMENT: 0x0cf5, - PACK_ALIGNMENT: 0x0d05, - MAX_TEXTURE_SIZE: 0x0d33, - MAX_VIEWPORT_DIMS: 0x0d3a, - SUBPIXEL_BITS: 0x0d50, - RED_BITS: 0x0d52, - GREEN_BITS: 0x0d53, - BLUE_BITS: 0x0d54, - ALPHA_BITS: 0x0d55, - DEPTH_BITS: 0x0d56, - STENCIL_BITS: 0x0d57, - POLYGON_OFFSET_UNITS: 0x2a00, - POLYGON_OFFSET_FACTOR: 0x8038, - TEXTURE_BINDING_2D: 0x8069, - SAMPLE_BUFFERS: 0x80a8, - SAMPLES: 0x80a9, - SAMPLE_COVERAGE_VALUE: 0x80aa, - SAMPLE_COVERAGE_INVERT: 0x80ab, - COMPRESSED_TEXTURE_FORMATS: 0x86a3, - DONT_CARE: 0x1100, - FASTEST: 0x1101, - NICEST: 0x1102, - GENERATE_MIPMAP_HINT: 0x8192, - BYTE: 0x1400, - UNSIGNED_BYTE: 0x1401, - SHORT: 0x1402, - UNSIGNED_SHORT: 0x1403, - INT: 0x1404, - UNSIGNED_INT: 0x1405, - FLOAT: 0x1406, - DEPTH_COMPONENT: 0x1902, - ALPHA: 0x1906, - RGB: 0x1907, - RGBA: 0x1908, - LUMINANCE: 0x1909, - LUMINANCE_ALPHA: 0x190a, - UNSIGNED_SHORT_4_4_4_4: 0x8033, - UNSIGNED_SHORT_5_5_5_1: 0x8034, - UNSIGNED_SHORT_5_6_5: 0x8363, - FRAGMENT_SHADER: 0x8b30, - VERTEX_SHADER: 0x8b31, - MAX_VERTEX_ATTRIBS: 0x8869, - MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb, - MAX_VARYING_VECTORS: 0x8dfc, - MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d, - MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c, - MAX_TEXTURE_IMAGE_UNITS: 0x8872, - MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd, - SHADER_TYPE: 0x8b4f, - DELETE_STATUS: 0x8b80, - LINK_STATUS: 0x8b82, - VALIDATE_STATUS: 0x8b83, - ATTACHED_SHADERS: 0x8b85, - ACTIVE_UNIFORMS: 0x8b86, - ACTIVE_ATTRIBUTES: 0x8b89, - SHADING_LANGUAGE_VERSION: 0x8b8c, - CURRENT_PROGRAM: 0x8b8d, - NEVER: 0x0200, - LESS: 0x0201, - EQUAL: 0x0202, - LEQUAL: 0x0203, - GREATER: 0x0204, - NOTEQUAL: 0x0205, - GEQUAL: 0x0206, - ALWAYS: 0x0207, - KEEP: 0x1e00, - REPLACE: 0x1e01, - INCR: 0x1e02, - DECR: 0x1e03, - INVERT: 0x150a, - INCR_WRAP: 0x8507, - DECR_WRAP: 0x8508, - VENDOR: 0x1f00, - RENDERER: 0x1f01, - VERSION: 0x1f02, - NEAREST: 0x2600, - LINEAR: 0x2601, - NEAREST_MIPMAP_NEAREST: 0x2700, - LINEAR_MIPMAP_NEAREST: 0x2701, - NEAREST_MIPMAP_LINEAR: 0x2702, - LINEAR_MIPMAP_LINEAR: 0x2703, - TEXTURE_MAG_FILTER: 0x2800, - TEXTURE_MIN_FILTER: 0x2801, - TEXTURE_WRAP_S: 0x2802, - TEXTURE_WRAP_T: 0x2803, - TEXTURE_2D: 0x0de1, - TEXTURE: 0x1702, - TEXTURE_CUBE_MAP: 0x8513, - TEXTURE_BINDING_CUBE_MAP: 0x8514, - TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515, - TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516, - TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517, - TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518, - TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519, - TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851a, - MAX_CUBE_MAP_TEXTURE_SIZE: 0x851c, - TEXTURE0: 0x84c0, - TEXTURE1: 0x84c1, - TEXTURE2: 0x84c2, - TEXTURE3: 0x84c3, - TEXTURE4: 0x84c4, - TEXTURE5: 0x84c5, - TEXTURE6: 0x84c6, - TEXTURE7: 0x84c7, - TEXTURE8: 0x84c8, - TEXTURE9: 0x84c9, - TEXTURE10: 0x84ca, - TEXTURE11: 0x84cb, - TEXTURE12: 0x84cc, - TEXTURE13: 0x84cd, - TEXTURE14: 0x84ce, - TEXTURE15: 0x84cf, - TEXTURE16: 0x84d0, - TEXTURE17: 0x84d1, - TEXTURE18: 0x84d2, - TEXTURE19: 0x84d3, - TEXTURE20: 0x84d4, - TEXTURE21: 0x84d5, - TEXTURE22: 0x84d6, - TEXTURE23: 0x84d7, - TEXTURE24: 0x84d8, - TEXTURE25: 0x84d9, - TEXTURE26: 0x84da, - TEXTURE27: 0x84db, - TEXTURE28: 0x84dc, - TEXTURE29: 0x84dd, - TEXTURE30: 0x84de, - TEXTURE31: 0x84df, - ACTIVE_TEXTURE: 0x84e0, - REPEAT: 0x2901, - CLAMP_TO_EDGE: 0x812f, - MIRRORED_REPEAT: 0x8370, - FLOAT_VEC2: 0x8b50, - FLOAT_VEC3: 0x8b51, - FLOAT_VEC4: 0x8b52, - INT_VEC2: 0x8b53, - INT_VEC3: 0x8b54, - INT_VEC4: 0x8b55, - BOOL: 0x8b56, - BOOL_VEC2: 0x8b57, - BOOL_VEC3: 0x8b58, - BOOL_VEC4: 0x8b59, - FLOAT_MAT2: 0x8b5a, - FLOAT_MAT3: 0x8b5b, - FLOAT_MAT4: 0x8b5c, - SAMPLER_2D: 0x8b5e, - SAMPLER_CUBE: 0x8b60, - VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622, - VERTEX_ATTRIB_ARRAY_SIZE: 0x8623, - VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624, - VERTEX_ATTRIB_ARRAY_TYPE: 0x8625, - VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886a, - VERTEX_ATTRIB_ARRAY_POINTER: 0x8645, - VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889f, - IMPLEMENTATION_COLOR_READ_TYPE: 0x8b9a, - IMPLEMENTATION_COLOR_READ_FORMAT: 0x8b9b, - COMPILE_STATUS: 0x8b81, - LOW_FLOAT: 0x8df0, - MEDIUM_FLOAT: 0x8df1, - HIGH_FLOAT: 0x8df2, - LOW_INT: 0x8df3, - MEDIUM_INT: 0x8df4, - HIGH_INT: 0x8df5, - FRAMEBUFFER: 0x8d40, - RENDERBUFFER: 0x8d41, - RGBA4: 0x8056, - RGB5_A1: 0x8057, - RGB565: 0x8d62, - DEPTH_COMPONENT16: 0x81a5, - STENCIL_INDEX: 0x1901, - STENCIL_INDEX8: 0x8d48, - DEPTH_STENCIL: 0x84f9, - RENDERBUFFER_WIDTH: 0x8d42, - RENDERBUFFER_HEIGHT: 0x8d43, - RENDERBUFFER_INTERNAL_FORMAT: 0x8d44, - RENDERBUFFER_RED_SIZE: 0x8d50, - RENDERBUFFER_GREEN_SIZE: 0x8d51, - RENDERBUFFER_BLUE_SIZE: 0x8d52, - RENDERBUFFER_ALPHA_SIZE: 0x8d53, - RENDERBUFFER_DEPTH_SIZE: 0x8d54, - RENDERBUFFER_STENCIL_SIZE: 0x8d55, - FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8cd0, - FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8cd1, - FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8cd2, - FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8cd3, - COLOR_ATTACHMENT0: 0x8ce0, - DEPTH_ATTACHMENT: 0x8d00, - STENCIL_ATTACHMENT: 0x8d20, - DEPTH_STENCIL_ATTACHMENT: 0x821a, - NONE: 0, - FRAMEBUFFER_COMPLETE: 0x8cd5, - FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8cd6, - FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8cd7, - FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8cd9, - FRAMEBUFFER_UNSUPPORTED: 0x8cdd, - FRAMEBUFFER_BINDING: 0x8ca6, - RENDERBUFFER_BINDING: 0x8ca7, - MAX_RENDERBUFFER_SIZE: 0x84e8, - INVALID_FRAMEBUFFER_OPERATION: 0x0506, - UNPACK_FLIP_Y_WEBGL: 0x9240, - UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241, - CONTEXT_LOST_WEBGL: 0x9242, - UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243, - BROWSER_DEFAULT_WEBGL: 0x9244, - - // WEBGL_compressed_texture_s3tc - COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0, - COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1, - COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2, - COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3, - - // WEBGL_compressed_texture_pvrtc - COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00, - COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01, - COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02, - COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03, - - // WEBGL_compressed_texture_astc - COMPRESSED_RGBA_ASTC_4x4_WEBGL: 0x93b0, - - // WEBGL_compressed_texture_etc1 - COMPRESSED_RGB_ETC1_WEBGL: 0x8d64, - - // EXT_texture_compression_bptc - COMPRESSED_RGBA_BPTC_UNORM: 0x8e8c, - - // EXT_color_buffer_half_float - HALF_FLOAT_OES: 0x8d61, - - // Desktop OpenGL - DOUBLE: 0x140a, - - // WebGL 2 - READ_BUFFER: 0x0c02, - UNPACK_ROW_LENGTH: 0x0cf2, - UNPACK_SKIP_ROWS: 0x0cf3, - UNPACK_SKIP_PIXELS: 0x0cf4, - PACK_ROW_LENGTH: 0x0d02, - PACK_SKIP_ROWS: 0x0d03, - PACK_SKIP_PIXELS: 0x0d04, - COLOR: 0x1800, - DEPTH: 0x1801, - STENCIL: 0x1802, - RED: 0x1903, - RGB8: 0x8051, - RGBA8: 0x8058, - RGB10_A2: 0x8059, - TEXTURE_BINDING_3D: 0x806a, - UNPACK_SKIP_IMAGES: 0x806d, - UNPACK_IMAGE_HEIGHT: 0x806e, - TEXTURE_3D: 0x806f, - TEXTURE_WRAP_R: 0x8072, - MAX_3D_TEXTURE_SIZE: 0x8073, - UNSIGNED_INT_2_10_10_10_REV: 0x8368, - MAX_ELEMENTS_VERTICES: 0x80e8, - MAX_ELEMENTS_INDICES: 0x80e9, - TEXTURE_MIN_LOD: 0x813a, - TEXTURE_MAX_LOD: 0x813b, - TEXTURE_BASE_LEVEL: 0x813c, - TEXTURE_MAX_LEVEL: 0x813d, - MIN: 0x8007, - MAX: 0x8008, - DEPTH_COMPONENT24: 0x81a6, - MAX_TEXTURE_LOD_BIAS: 0x84fd, - TEXTURE_COMPARE_MODE: 0x884c, - TEXTURE_COMPARE_FUNC: 0x884d, - CURRENT_QUERY: 0x8865, - QUERY_RESULT: 0x8866, - QUERY_RESULT_AVAILABLE: 0x8867, - STREAM_READ: 0x88e1, - STREAM_COPY: 0x88e2, - STATIC_READ: 0x88e5, - STATIC_COPY: 0x88e6, - DYNAMIC_READ: 0x88e9, - DYNAMIC_COPY: 0x88ea, - MAX_DRAW_BUFFERS: 0x8824, - DRAW_BUFFER0: 0x8825, - DRAW_BUFFER1: 0x8826, - DRAW_BUFFER2: 0x8827, - DRAW_BUFFER3: 0x8828, - DRAW_BUFFER4: 0x8829, - DRAW_BUFFER5: 0x882a, - DRAW_BUFFER6: 0x882b, - DRAW_BUFFER7: 0x882c, - DRAW_BUFFER8: 0x882d, - DRAW_BUFFER9: 0x882e, - DRAW_BUFFER10: 0x882f, - DRAW_BUFFER11: 0x8830, - DRAW_BUFFER12: 0x8831, - DRAW_BUFFER13: 0x8832, - DRAW_BUFFER14: 0x8833, - DRAW_BUFFER15: 0x8834, - MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8b49, - MAX_VERTEX_UNIFORM_COMPONENTS: 0x8b4a, - SAMPLER_3D: 0x8b5f, - SAMPLER_2D_SHADOW: 0x8b62, - FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b, - PIXEL_PACK_BUFFER: 0x88eb, - PIXEL_UNPACK_BUFFER: 0x88ec, - PIXEL_PACK_BUFFER_BINDING: 0x88ed, - PIXEL_UNPACK_BUFFER_BINDING: 0x88ef, - FLOAT_MAT2x3: 0x8b65, - FLOAT_MAT2x4: 0x8b66, - FLOAT_MAT3x2: 0x8b67, - FLOAT_MAT3x4: 0x8b68, - FLOAT_MAT4x2: 0x8b69, - FLOAT_MAT4x3: 0x8b6a, - SRGB: 0x8c40, - SRGB8: 0x8c41, - SRGB8_ALPHA8: 0x8c43, - COMPARE_REF_TO_TEXTURE: 0x884e, - RGBA32F: 0x8814, - RGB32F: 0x8815, - RGBA16F: 0x881a, - RGB16F: 0x881b, - VERTEX_ATTRIB_ARRAY_INTEGER: 0x88fd, - MAX_ARRAY_TEXTURE_LAYERS: 0x88ff, - MIN_PROGRAM_TEXEL_OFFSET: 0x8904, - MAX_PROGRAM_TEXEL_OFFSET: 0x8905, - MAX_VARYING_COMPONENTS: 0x8b4b, - TEXTURE_2D_ARRAY: 0x8c1a, - TEXTURE_BINDING_2D_ARRAY: 0x8c1d, - R11F_G11F_B10F: 0x8c3a, - UNSIGNED_INT_10F_11F_11F_REV: 0x8c3b, - RGB9_E5: 0x8c3d, - UNSIGNED_INT_5_9_9_9_REV: 0x8c3e, - TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8c7f, - MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8c80, - TRANSFORM_FEEDBACK_VARYINGS: 0x8c83, - TRANSFORM_FEEDBACK_BUFFER_START: 0x8c84, - TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8c85, - TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88, - RASTERIZER_DISCARD: 0x8c89, - MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8c8a, - MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8c8b, - INTERLEAVED_ATTRIBS: 0x8c8c, - SEPARATE_ATTRIBS: 0x8c8d, - TRANSFORM_FEEDBACK_BUFFER: 0x8c8e, - TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f, - RGBA32UI: 0x8d70, - RGB32UI: 0x8d71, - RGBA16UI: 0x8d76, - RGB16UI: 0x8d77, - RGBA8UI: 0x8d7c, - RGB8UI: 0x8d7d, - RGBA32I: 0x8d82, - RGB32I: 0x8d83, - RGBA16I: 0x8d88, - RGB16I: 0x8d89, - RGBA8I: 0x8d8e, - RGB8I: 0x8d8f, - RED_INTEGER: 0x8d94, - RGB_INTEGER: 0x8d98, - RGBA_INTEGER: 0x8d99, - SAMPLER_2D_ARRAY: 0x8dc1, - SAMPLER_2D_ARRAY_SHADOW: 0x8dc4, - SAMPLER_CUBE_SHADOW: 0x8dc5, - UNSIGNED_INT_VEC2: 0x8dc6, - UNSIGNED_INT_VEC3: 0x8dc7, - UNSIGNED_INT_VEC4: 0x8dc8, - INT_SAMPLER_2D: 0x8dca, - INT_SAMPLER_3D: 0x8dcb, - INT_SAMPLER_CUBE: 0x8dcc, - INT_SAMPLER_2D_ARRAY: 0x8dcf, - UNSIGNED_INT_SAMPLER_2D: 0x8dd2, - UNSIGNED_INT_SAMPLER_3D: 0x8dd3, - UNSIGNED_INT_SAMPLER_CUBE: 0x8dd4, - UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8dd7, - DEPTH_COMPONENT32F: 0x8cac, - DEPTH32F_STENCIL8: 0x8cad, - FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8dad, - FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210, - FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211, - FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212, - FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213, - FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214, - FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215, - FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216, - FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217, - FRAMEBUFFER_DEFAULT: 0x8218, - UNSIGNED_INT_24_8: 0x84fa, - DEPTH24_STENCIL8: 0x88f0, - UNSIGNED_NORMALIZED: 0x8c17, - DRAW_FRAMEBUFFER_BINDING: 0x8ca6, // Same as FRAMEBUFFER_BINDING - READ_FRAMEBUFFER: 0x8ca8, - DRAW_FRAMEBUFFER: 0x8ca9, - READ_FRAMEBUFFER_BINDING: 0x8caa, - RENDERBUFFER_SAMPLES: 0x8cab, - FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8cd4, - MAX_COLOR_ATTACHMENTS: 0x8cdf, - COLOR_ATTACHMENT1: 0x8ce1, - COLOR_ATTACHMENT2: 0x8ce2, - COLOR_ATTACHMENT3: 0x8ce3, - COLOR_ATTACHMENT4: 0x8ce4, - COLOR_ATTACHMENT5: 0x8ce5, - COLOR_ATTACHMENT6: 0x8ce6, - COLOR_ATTACHMENT7: 0x8ce7, - COLOR_ATTACHMENT8: 0x8ce8, - COLOR_ATTACHMENT9: 0x8ce9, - COLOR_ATTACHMENT10: 0x8cea, - COLOR_ATTACHMENT11: 0x8ceb, - COLOR_ATTACHMENT12: 0x8cec, - COLOR_ATTACHMENT13: 0x8ced, - COLOR_ATTACHMENT14: 0x8cee, - COLOR_ATTACHMENT15: 0x8cef, - FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8d56, - MAX_SAMPLES: 0x8d57, - HALF_FLOAT: 0x140b, - RG: 0x8227, - RG_INTEGER: 0x8228, - R8: 0x8229, - RG8: 0x822b, - R16F: 0x822d, - R32F: 0x822e, - RG16F: 0x822f, - RG32F: 0x8230, - R8I: 0x8231, - R8UI: 0x8232, - R16I: 0x8233, - R16UI: 0x8234, - R32I: 0x8235, - R32UI: 0x8236, - RG8I: 0x8237, - RG8UI: 0x8238, - RG16I: 0x8239, - RG16UI: 0x823a, - RG32I: 0x823b, - RG32UI: 0x823c, - VERTEX_ARRAY_BINDING: 0x85b5, - R8_SNORM: 0x8f94, - RG8_SNORM: 0x8f95, - RGB8_SNORM: 0x8f96, - RGBA8_SNORM: 0x8f97, - SIGNED_NORMALIZED: 0x8f9c, - COPY_READ_BUFFER: 0x8f36, - COPY_WRITE_BUFFER: 0x8f37, - COPY_READ_BUFFER_BINDING: 0x8f36, // Same as COPY_READ_BUFFER - COPY_WRITE_BUFFER_BINDING: 0x8f37, // Same as COPY_WRITE_BUFFER - UNIFORM_BUFFER: 0x8a11, - UNIFORM_BUFFER_BINDING: 0x8a28, - UNIFORM_BUFFER_START: 0x8a29, - UNIFORM_BUFFER_SIZE: 0x8a2a, - MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b, - MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d, - MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e, - MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f, - MAX_UNIFORM_BLOCK_SIZE: 0x8a30, - MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8a31, - MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8a33, - UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34, - ACTIVE_UNIFORM_BLOCKS: 0x8a36, - UNIFORM_TYPE: 0x8a37, - UNIFORM_SIZE: 0x8a38, - UNIFORM_BLOCK_INDEX: 0x8a3a, - UNIFORM_OFFSET: 0x8a3b, - UNIFORM_ARRAY_STRIDE: 0x8a3c, - UNIFORM_MATRIX_STRIDE: 0x8a3d, - UNIFORM_IS_ROW_MAJOR: 0x8a3e, - UNIFORM_BLOCK_BINDING: 0x8a3f, - UNIFORM_BLOCK_DATA_SIZE: 0x8a40, - UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8a42, - UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8a43, - UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8a44, - UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8a46, - INVALID_INDEX: 0xffffffff, - MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122, - MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125, - MAX_SERVER_WAIT_TIMEOUT: 0x9111, - OBJECT_TYPE: 0x9112, - SYNC_CONDITION: 0x9113, - SYNC_STATUS: 0x9114, - SYNC_FLAGS: 0x9115, - SYNC_FENCE: 0x9116, - SYNC_GPU_COMMANDS_COMPLETE: 0x9117, - UNSIGNALED: 0x9118, - SIGNALED: 0x9119, - ALREADY_SIGNALED: 0x911a, - TIMEOUT_EXPIRED: 0x911b, - CONDITION_SATISFIED: 0x911c, - WAIT_FAILED: 0x911d, - SYNC_FLUSH_COMMANDS_BIT: 0x00000001, - VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe, - ANY_SAMPLES_PASSED: 0x8c2f, - ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a, - SAMPLER_BINDING: 0x8919, - RGB10_A2UI: 0x906f, - INT_2_10_10_10_REV: 0x8d9f, - TRANSFORM_FEEDBACK: 0x8e22, - TRANSFORM_FEEDBACK_PAUSED: 0x8e23, - TRANSFORM_FEEDBACK_ACTIVE: 0x8e24, - TRANSFORM_FEEDBACK_BINDING: 0x8e25, - COMPRESSED_R11_EAC: 0x9270, - COMPRESSED_SIGNED_R11_EAC: 0x9271, - COMPRESSED_RG11_EAC: 0x9272, - COMPRESSED_SIGNED_RG11_EAC: 0x9273, - COMPRESSED_RGB8_ETC2: 0x9274, - COMPRESSED_SRGB8_ETC2: 0x9275, - COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9276, - COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9277, - COMPRESSED_RGBA8_ETC2_EAC: 0x9278, - COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9279, - TEXTURE_IMMUTABLE_FORMAT: 0x912f, - MAX_ELEMENT_INDEX: 0x8d6b, - TEXTURE_IMMUTABLE_LEVELS: 0x82df, - - // Extensions - MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84ff, - }; - var WebGLConstants$1 = Object.freeze(WebGLConstants); - - exports.WebGLConstants = WebGLConstants$1; - -})); -//# sourceMappingURL=WebGLConstants-f27a5e29.js.map diff --git a/debug/cesium/Workers/WebGLConstants-f27a5e29.js.map b/debug/cesium/Workers/WebGLConstants-f27a5e29.js.map deleted file mode 100644 index c769158..0000000 --- a/debug/cesium/Workers/WebGLConstants-f27a5e29.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WebGLConstants-f27a5e29.js","sources":["../../../Source/Core/WebGLConstants.js"],"sourcesContent":["/**\r\n * Enum containing WebGL Constant values by name.\r\n * for use without an active WebGL context, or in cases where certain constants are unavailable using the WebGL context\r\n * (For example, in [Safari 9]{@link https://github.com/CesiumGS/cesium/issues/2989}).\r\n *\r\n * These match the constants from the [WebGL 1.0]{@link https://www.khronos.org/registry/webgl/specs/latest/1.0/}\r\n * and [WebGL 2.0]{@link https://www.khronos.org/registry/webgl/specs/latest/2.0/}\r\n * specifications.\r\n *\r\n * @enum {Number}\r\n */\r\nconst WebGLConstants = {\r\n DEPTH_BUFFER_BIT: 0x00000100,\r\n STENCIL_BUFFER_BIT: 0x00000400,\r\n COLOR_BUFFER_BIT: 0x00004000,\r\n POINTS: 0x0000,\r\n LINES: 0x0001,\r\n LINE_LOOP: 0x0002,\r\n LINE_STRIP: 0x0003,\r\n TRIANGLES: 0x0004,\r\n TRIANGLE_STRIP: 0x0005,\r\n TRIANGLE_FAN: 0x0006,\r\n ZERO: 0,\r\n ONE: 1,\r\n SRC_COLOR: 0x0300,\r\n ONE_MINUS_SRC_COLOR: 0x0301,\r\n SRC_ALPHA: 0x0302,\r\n ONE_MINUS_SRC_ALPHA: 0x0303,\r\n DST_ALPHA: 0x0304,\r\n ONE_MINUS_DST_ALPHA: 0x0305,\r\n DST_COLOR: 0x0306,\r\n ONE_MINUS_DST_COLOR: 0x0307,\r\n SRC_ALPHA_SATURATE: 0x0308,\r\n FUNC_ADD: 0x8006,\r\n BLEND_EQUATION: 0x8009,\r\n BLEND_EQUATION_RGB: 0x8009, // same as BLEND_EQUATION\r\n BLEND_EQUATION_ALPHA: 0x883d,\r\n FUNC_SUBTRACT: 0x800a,\r\n FUNC_REVERSE_SUBTRACT: 0x800b,\r\n BLEND_DST_RGB: 0x80c8,\r\n BLEND_SRC_RGB: 0x80c9,\r\n BLEND_DST_ALPHA: 0x80ca,\r\n BLEND_SRC_ALPHA: 0x80cb,\r\n CONSTANT_COLOR: 0x8001,\r\n ONE_MINUS_CONSTANT_COLOR: 0x8002,\r\n CONSTANT_ALPHA: 0x8003,\r\n ONE_MINUS_CONSTANT_ALPHA: 0x8004,\r\n BLEND_COLOR: 0x8005,\r\n ARRAY_BUFFER: 0x8892,\r\n ELEMENT_ARRAY_BUFFER: 0x8893,\r\n ARRAY_BUFFER_BINDING: 0x8894,\r\n ELEMENT_ARRAY_BUFFER_BINDING: 0x8895,\r\n STREAM_DRAW: 0x88e0,\r\n STATIC_DRAW: 0x88e4,\r\n DYNAMIC_DRAW: 0x88e8,\r\n BUFFER_SIZE: 0x8764,\r\n BUFFER_USAGE: 0x8765,\r\n CURRENT_VERTEX_ATTRIB: 0x8626,\r\n FRONT: 0x0404,\r\n BACK: 0x0405,\r\n FRONT_AND_BACK: 0x0408,\r\n CULL_FACE: 0x0b44,\r\n BLEND: 0x0be2,\r\n DITHER: 0x0bd0,\r\n STENCIL_TEST: 0x0b90,\r\n DEPTH_TEST: 0x0b71,\r\n SCISSOR_TEST: 0x0c11,\r\n POLYGON_OFFSET_FILL: 0x8037,\r\n SAMPLE_ALPHA_TO_COVERAGE: 0x809e,\r\n SAMPLE_COVERAGE: 0x80a0,\r\n NO_ERROR: 0,\r\n INVALID_ENUM: 0x0500,\r\n INVALID_VALUE: 0x0501,\r\n INVALID_OPERATION: 0x0502,\r\n OUT_OF_MEMORY: 0x0505,\r\n CW: 0x0900,\r\n CCW: 0x0901,\r\n LINE_WIDTH: 0x0b21,\r\n ALIASED_POINT_SIZE_RANGE: 0x846d,\r\n ALIASED_LINE_WIDTH_RANGE: 0x846e,\r\n CULL_FACE_MODE: 0x0b45,\r\n FRONT_FACE: 0x0b46,\r\n DEPTH_RANGE: 0x0b70,\r\n DEPTH_WRITEMASK: 0x0b72,\r\n DEPTH_CLEAR_VALUE: 0x0b73,\r\n DEPTH_FUNC: 0x0b74,\r\n STENCIL_CLEAR_VALUE: 0x0b91,\r\n STENCIL_FUNC: 0x0b92,\r\n STENCIL_FAIL: 0x0b94,\r\n STENCIL_PASS_DEPTH_FAIL: 0x0b95,\r\n STENCIL_PASS_DEPTH_PASS: 0x0b96,\r\n STENCIL_REF: 0x0b97,\r\n STENCIL_VALUE_MASK: 0x0b93,\r\n STENCIL_WRITEMASK: 0x0b98,\r\n STENCIL_BACK_FUNC: 0x8800,\r\n STENCIL_BACK_FAIL: 0x8801,\r\n STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802,\r\n STENCIL_BACK_PASS_DEPTH_PASS: 0x8803,\r\n STENCIL_BACK_REF: 0x8ca3,\r\n STENCIL_BACK_VALUE_MASK: 0x8ca4,\r\n STENCIL_BACK_WRITEMASK: 0x8ca5,\r\n VIEWPORT: 0x0ba2,\r\n SCISSOR_BOX: 0x0c10,\r\n COLOR_CLEAR_VALUE: 0x0c22,\r\n COLOR_WRITEMASK: 0x0c23,\r\n UNPACK_ALIGNMENT: 0x0cf5,\r\n PACK_ALIGNMENT: 0x0d05,\r\n MAX_TEXTURE_SIZE: 0x0d33,\r\n MAX_VIEWPORT_DIMS: 0x0d3a,\r\n SUBPIXEL_BITS: 0x0d50,\r\n RED_BITS: 0x0d52,\r\n GREEN_BITS: 0x0d53,\r\n BLUE_BITS: 0x0d54,\r\n ALPHA_BITS: 0x0d55,\r\n DEPTH_BITS: 0x0d56,\r\n STENCIL_BITS: 0x0d57,\r\n POLYGON_OFFSET_UNITS: 0x2a00,\r\n POLYGON_OFFSET_FACTOR: 0x8038,\r\n TEXTURE_BINDING_2D: 0x8069,\r\n SAMPLE_BUFFERS: 0x80a8,\r\n SAMPLES: 0x80a9,\r\n SAMPLE_COVERAGE_VALUE: 0x80aa,\r\n SAMPLE_COVERAGE_INVERT: 0x80ab,\r\n COMPRESSED_TEXTURE_FORMATS: 0x86a3,\r\n DONT_CARE: 0x1100,\r\n FASTEST: 0x1101,\r\n NICEST: 0x1102,\r\n GENERATE_MIPMAP_HINT: 0x8192,\r\n BYTE: 0x1400,\r\n UNSIGNED_BYTE: 0x1401,\r\n SHORT: 0x1402,\r\n UNSIGNED_SHORT: 0x1403,\r\n INT: 0x1404,\r\n UNSIGNED_INT: 0x1405,\r\n FLOAT: 0x1406,\r\n DEPTH_COMPONENT: 0x1902,\r\n ALPHA: 0x1906,\r\n RGB: 0x1907,\r\n RGBA: 0x1908,\r\n LUMINANCE: 0x1909,\r\n LUMINANCE_ALPHA: 0x190a,\r\n UNSIGNED_SHORT_4_4_4_4: 0x8033,\r\n UNSIGNED_SHORT_5_5_5_1: 0x8034,\r\n UNSIGNED_SHORT_5_6_5: 0x8363,\r\n FRAGMENT_SHADER: 0x8b30,\r\n VERTEX_SHADER: 0x8b31,\r\n MAX_VERTEX_ATTRIBS: 0x8869,\r\n MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,\r\n MAX_VARYING_VECTORS: 0x8dfc,\r\n MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,\r\n MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,\r\n MAX_TEXTURE_IMAGE_UNITS: 0x8872,\r\n MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,\r\n SHADER_TYPE: 0x8b4f,\r\n DELETE_STATUS: 0x8b80,\r\n LINK_STATUS: 0x8b82,\r\n VALIDATE_STATUS: 0x8b83,\r\n ATTACHED_SHADERS: 0x8b85,\r\n ACTIVE_UNIFORMS: 0x8b86,\r\n ACTIVE_ATTRIBUTES: 0x8b89,\r\n SHADING_LANGUAGE_VERSION: 0x8b8c,\r\n CURRENT_PROGRAM: 0x8b8d,\r\n NEVER: 0x0200,\r\n LESS: 0x0201,\r\n EQUAL: 0x0202,\r\n LEQUAL: 0x0203,\r\n GREATER: 0x0204,\r\n NOTEQUAL: 0x0205,\r\n GEQUAL: 0x0206,\r\n ALWAYS: 0x0207,\r\n KEEP: 0x1e00,\r\n REPLACE: 0x1e01,\r\n INCR: 0x1e02,\r\n DECR: 0x1e03,\r\n INVERT: 0x150a,\r\n INCR_WRAP: 0x8507,\r\n DECR_WRAP: 0x8508,\r\n VENDOR: 0x1f00,\r\n RENDERER: 0x1f01,\r\n VERSION: 0x1f02,\r\n NEAREST: 0x2600,\r\n LINEAR: 0x2601,\r\n NEAREST_MIPMAP_NEAREST: 0x2700,\r\n LINEAR_MIPMAP_NEAREST: 0x2701,\r\n NEAREST_MIPMAP_LINEAR: 0x2702,\r\n LINEAR_MIPMAP_LINEAR: 0x2703,\r\n TEXTURE_MAG_FILTER: 0x2800,\r\n TEXTURE_MIN_FILTER: 0x2801,\r\n TEXTURE_WRAP_S: 0x2802,\r\n TEXTURE_WRAP_T: 0x2803,\r\n TEXTURE_2D: 0x0de1,\r\n TEXTURE: 0x1702,\r\n TEXTURE_CUBE_MAP: 0x8513,\r\n TEXTURE_BINDING_CUBE_MAP: 0x8514,\r\n TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515,\r\n TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516,\r\n TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517,\r\n TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518,\r\n TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519,\r\n TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851a,\r\n MAX_CUBE_MAP_TEXTURE_SIZE: 0x851c,\r\n TEXTURE0: 0x84c0,\r\n TEXTURE1: 0x84c1,\r\n TEXTURE2: 0x84c2,\r\n TEXTURE3: 0x84c3,\r\n TEXTURE4: 0x84c4,\r\n TEXTURE5: 0x84c5,\r\n TEXTURE6: 0x84c6,\r\n TEXTURE7: 0x84c7,\r\n TEXTURE8: 0x84c8,\r\n TEXTURE9: 0x84c9,\r\n TEXTURE10: 0x84ca,\r\n TEXTURE11: 0x84cb,\r\n TEXTURE12: 0x84cc,\r\n TEXTURE13: 0x84cd,\r\n TEXTURE14: 0x84ce,\r\n TEXTURE15: 0x84cf,\r\n TEXTURE16: 0x84d0,\r\n TEXTURE17: 0x84d1,\r\n TEXTURE18: 0x84d2,\r\n TEXTURE19: 0x84d3,\r\n TEXTURE20: 0x84d4,\r\n TEXTURE21: 0x84d5,\r\n TEXTURE22: 0x84d6,\r\n TEXTURE23: 0x84d7,\r\n TEXTURE24: 0x84d8,\r\n TEXTURE25: 0x84d9,\r\n TEXTURE26: 0x84da,\r\n TEXTURE27: 0x84db,\r\n TEXTURE28: 0x84dc,\r\n TEXTURE29: 0x84dd,\r\n TEXTURE30: 0x84de,\r\n TEXTURE31: 0x84df,\r\n ACTIVE_TEXTURE: 0x84e0,\r\n REPEAT: 0x2901,\r\n CLAMP_TO_EDGE: 0x812f,\r\n MIRRORED_REPEAT: 0x8370,\r\n FLOAT_VEC2: 0x8b50,\r\n FLOAT_VEC3: 0x8b51,\r\n FLOAT_VEC4: 0x8b52,\r\n INT_VEC2: 0x8b53,\r\n INT_VEC3: 0x8b54,\r\n INT_VEC4: 0x8b55,\r\n BOOL: 0x8b56,\r\n BOOL_VEC2: 0x8b57,\r\n BOOL_VEC3: 0x8b58,\r\n BOOL_VEC4: 0x8b59,\r\n FLOAT_MAT2: 0x8b5a,\r\n FLOAT_MAT3: 0x8b5b,\r\n FLOAT_MAT4: 0x8b5c,\r\n SAMPLER_2D: 0x8b5e,\r\n SAMPLER_CUBE: 0x8b60,\r\n VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622,\r\n VERTEX_ATTRIB_ARRAY_SIZE: 0x8623,\r\n VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624,\r\n VERTEX_ATTRIB_ARRAY_TYPE: 0x8625,\r\n VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886a,\r\n VERTEX_ATTRIB_ARRAY_POINTER: 0x8645,\r\n VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889f,\r\n IMPLEMENTATION_COLOR_READ_TYPE: 0x8b9a,\r\n IMPLEMENTATION_COLOR_READ_FORMAT: 0x8b9b,\r\n COMPILE_STATUS: 0x8b81,\r\n LOW_FLOAT: 0x8df0,\r\n MEDIUM_FLOAT: 0x8df1,\r\n HIGH_FLOAT: 0x8df2,\r\n LOW_INT: 0x8df3,\r\n MEDIUM_INT: 0x8df4,\r\n HIGH_INT: 0x8df5,\r\n FRAMEBUFFER: 0x8d40,\r\n RENDERBUFFER: 0x8d41,\r\n RGBA4: 0x8056,\r\n RGB5_A1: 0x8057,\r\n RGB565: 0x8d62,\r\n DEPTH_COMPONENT16: 0x81a5,\r\n STENCIL_INDEX: 0x1901,\r\n STENCIL_INDEX8: 0x8d48,\r\n DEPTH_STENCIL: 0x84f9,\r\n RENDERBUFFER_WIDTH: 0x8d42,\r\n RENDERBUFFER_HEIGHT: 0x8d43,\r\n RENDERBUFFER_INTERNAL_FORMAT: 0x8d44,\r\n RENDERBUFFER_RED_SIZE: 0x8d50,\r\n RENDERBUFFER_GREEN_SIZE: 0x8d51,\r\n RENDERBUFFER_BLUE_SIZE: 0x8d52,\r\n RENDERBUFFER_ALPHA_SIZE: 0x8d53,\r\n RENDERBUFFER_DEPTH_SIZE: 0x8d54,\r\n RENDERBUFFER_STENCIL_SIZE: 0x8d55,\r\n FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8cd0,\r\n FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8cd1,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8cd2,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8cd3,\r\n COLOR_ATTACHMENT0: 0x8ce0,\r\n DEPTH_ATTACHMENT: 0x8d00,\r\n STENCIL_ATTACHMENT: 0x8d20,\r\n DEPTH_STENCIL_ATTACHMENT: 0x821a,\r\n NONE: 0,\r\n FRAMEBUFFER_COMPLETE: 0x8cd5,\r\n FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8cd6,\r\n FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8cd7,\r\n FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8cd9,\r\n FRAMEBUFFER_UNSUPPORTED: 0x8cdd,\r\n FRAMEBUFFER_BINDING: 0x8ca6,\r\n RENDERBUFFER_BINDING: 0x8ca7,\r\n MAX_RENDERBUFFER_SIZE: 0x84e8,\r\n INVALID_FRAMEBUFFER_OPERATION: 0x0506,\r\n UNPACK_FLIP_Y_WEBGL: 0x9240,\r\n UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,\r\n CONTEXT_LOST_WEBGL: 0x9242,\r\n UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243,\r\n BROWSER_DEFAULT_WEBGL: 0x9244,\r\n\r\n // WEBGL_compressed_texture_s3tc\r\n COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,\r\n COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,\r\n COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,\r\n COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,\r\n\r\n // WEBGL_compressed_texture_pvrtc\r\n COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,\r\n COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,\r\n COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,\r\n COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,\r\n\r\n // WEBGL_compressed_texture_astc\r\n COMPRESSED_RGBA_ASTC_4x4_WEBGL: 0x93b0,\r\n\r\n // WEBGL_compressed_texture_etc1\r\n COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,\r\n\r\n // EXT_texture_compression_bptc\r\n COMPRESSED_RGBA_BPTC_UNORM: 0x8e8c,\r\n\r\n // EXT_color_buffer_half_float\r\n HALF_FLOAT_OES: 0x8d61,\r\n\r\n // Desktop OpenGL\r\n DOUBLE: 0x140a,\r\n\r\n // WebGL 2\r\n READ_BUFFER: 0x0c02,\r\n UNPACK_ROW_LENGTH: 0x0cf2,\r\n UNPACK_SKIP_ROWS: 0x0cf3,\r\n UNPACK_SKIP_PIXELS: 0x0cf4,\r\n PACK_ROW_LENGTH: 0x0d02,\r\n PACK_SKIP_ROWS: 0x0d03,\r\n PACK_SKIP_PIXELS: 0x0d04,\r\n COLOR: 0x1800,\r\n DEPTH: 0x1801,\r\n STENCIL: 0x1802,\r\n RED: 0x1903,\r\n RGB8: 0x8051,\r\n RGBA8: 0x8058,\r\n RGB10_A2: 0x8059,\r\n TEXTURE_BINDING_3D: 0x806a,\r\n UNPACK_SKIP_IMAGES: 0x806d,\r\n UNPACK_IMAGE_HEIGHT: 0x806e,\r\n TEXTURE_3D: 0x806f,\r\n TEXTURE_WRAP_R: 0x8072,\r\n MAX_3D_TEXTURE_SIZE: 0x8073,\r\n UNSIGNED_INT_2_10_10_10_REV: 0x8368,\r\n MAX_ELEMENTS_VERTICES: 0x80e8,\r\n MAX_ELEMENTS_INDICES: 0x80e9,\r\n TEXTURE_MIN_LOD: 0x813a,\r\n TEXTURE_MAX_LOD: 0x813b,\r\n TEXTURE_BASE_LEVEL: 0x813c,\r\n TEXTURE_MAX_LEVEL: 0x813d,\r\n MIN: 0x8007,\r\n MAX: 0x8008,\r\n DEPTH_COMPONENT24: 0x81a6,\r\n MAX_TEXTURE_LOD_BIAS: 0x84fd,\r\n TEXTURE_COMPARE_MODE: 0x884c,\r\n TEXTURE_COMPARE_FUNC: 0x884d,\r\n CURRENT_QUERY: 0x8865,\r\n QUERY_RESULT: 0x8866,\r\n QUERY_RESULT_AVAILABLE: 0x8867,\r\n STREAM_READ: 0x88e1,\r\n STREAM_COPY: 0x88e2,\r\n STATIC_READ: 0x88e5,\r\n STATIC_COPY: 0x88e6,\r\n DYNAMIC_READ: 0x88e9,\r\n DYNAMIC_COPY: 0x88ea,\r\n MAX_DRAW_BUFFERS: 0x8824,\r\n DRAW_BUFFER0: 0x8825,\r\n DRAW_BUFFER1: 0x8826,\r\n DRAW_BUFFER2: 0x8827,\r\n DRAW_BUFFER3: 0x8828,\r\n DRAW_BUFFER4: 0x8829,\r\n DRAW_BUFFER5: 0x882a,\r\n DRAW_BUFFER6: 0x882b,\r\n DRAW_BUFFER7: 0x882c,\r\n DRAW_BUFFER8: 0x882d,\r\n DRAW_BUFFER9: 0x882e,\r\n DRAW_BUFFER10: 0x882f,\r\n DRAW_BUFFER11: 0x8830,\r\n DRAW_BUFFER12: 0x8831,\r\n DRAW_BUFFER13: 0x8832,\r\n DRAW_BUFFER14: 0x8833,\r\n DRAW_BUFFER15: 0x8834,\r\n MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8b49,\r\n MAX_VERTEX_UNIFORM_COMPONENTS: 0x8b4a,\r\n SAMPLER_3D: 0x8b5f,\r\n SAMPLER_2D_SHADOW: 0x8b62,\r\n FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b,\r\n PIXEL_PACK_BUFFER: 0x88eb,\r\n PIXEL_UNPACK_BUFFER: 0x88ec,\r\n PIXEL_PACK_BUFFER_BINDING: 0x88ed,\r\n PIXEL_UNPACK_BUFFER_BINDING: 0x88ef,\r\n FLOAT_MAT2x3: 0x8b65,\r\n FLOAT_MAT2x4: 0x8b66,\r\n FLOAT_MAT3x2: 0x8b67,\r\n FLOAT_MAT3x4: 0x8b68,\r\n FLOAT_MAT4x2: 0x8b69,\r\n FLOAT_MAT4x3: 0x8b6a,\r\n SRGB: 0x8c40,\r\n SRGB8: 0x8c41,\r\n SRGB8_ALPHA8: 0x8c43,\r\n COMPARE_REF_TO_TEXTURE: 0x884e,\r\n RGBA32F: 0x8814,\r\n RGB32F: 0x8815,\r\n RGBA16F: 0x881a,\r\n RGB16F: 0x881b,\r\n VERTEX_ATTRIB_ARRAY_INTEGER: 0x88fd,\r\n MAX_ARRAY_TEXTURE_LAYERS: 0x88ff,\r\n MIN_PROGRAM_TEXEL_OFFSET: 0x8904,\r\n MAX_PROGRAM_TEXEL_OFFSET: 0x8905,\r\n MAX_VARYING_COMPONENTS: 0x8b4b,\r\n TEXTURE_2D_ARRAY: 0x8c1a,\r\n TEXTURE_BINDING_2D_ARRAY: 0x8c1d,\r\n R11F_G11F_B10F: 0x8c3a,\r\n UNSIGNED_INT_10F_11F_11F_REV: 0x8c3b,\r\n RGB9_E5: 0x8c3d,\r\n UNSIGNED_INT_5_9_9_9_REV: 0x8c3e,\r\n TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8c7f,\r\n MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8c80,\r\n TRANSFORM_FEEDBACK_VARYINGS: 0x8c83,\r\n TRANSFORM_FEEDBACK_BUFFER_START: 0x8c84,\r\n TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8c85,\r\n TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88,\r\n RASTERIZER_DISCARD: 0x8c89,\r\n MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8c8a,\r\n MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8c8b,\r\n INTERLEAVED_ATTRIBS: 0x8c8c,\r\n SEPARATE_ATTRIBS: 0x8c8d,\r\n TRANSFORM_FEEDBACK_BUFFER: 0x8c8e,\r\n TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f,\r\n RGBA32UI: 0x8d70,\r\n RGB32UI: 0x8d71,\r\n RGBA16UI: 0x8d76,\r\n RGB16UI: 0x8d77,\r\n RGBA8UI: 0x8d7c,\r\n RGB8UI: 0x8d7d,\r\n RGBA32I: 0x8d82,\r\n RGB32I: 0x8d83,\r\n RGBA16I: 0x8d88,\r\n RGB16I: 0x8d89,\r\n RGBA8I: 0x8d8e,\r\n RGB8I: 0x8d8f,\r\n RED_INTEGER: 0x8d94,\r\n RGB_INTEGER: 0x8d98,\r\n RGBA_INTEGER: 0x8d99,\r\n SAMPLER_2D_ARRAY: 0x8dc1,\r\n SAMPLER_2D_ARRAY_SHADOW: 0x8dc4,\r\n SAMPLER_CUBE_SHADOW: 0x8dc5,\r\n UNSIGNED_INT_VEC2: 0x8dc6,\r\n UNSIGNED_INT_VEC3: 0x8dc7,\r\n UNSIGNED_INT_VEC4: 0x8dc8,\r\n INT_SAMPLER_2D: 0x8dca,\r\n INT_SAMPLER_3D: 0x8dcb,\r\n INT_SAMPLER_CUBE: 0x8dcc,\r\n INT_SAMPLER_2D_ARRAY: 0x8dcf,\r\n UNSIGNED_INT_SAMPLER_2D: 0x8dd2,\r\n UNSIGNED_INT_SAMPLER_3D: 0x8dd3,\r\n UNSIGNED_INT_SAMPLER_CUBE: 0x8dd4,\r\n UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8dd7,\r\n DEPTH_COMPONENT32F: 0x8cac,\r\n DEPTH32F_STENCIL8: 0x8cad,\r\n FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8dad,\r\n FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210,\r\n FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211,\r\n FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212,\r\n FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213,\r\n FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214,\r\n FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215,\r\n FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216,\r\n FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217,\r\n FRAMEBUFFER_DEFAULT: 0x8218,\r\n UNSIGNED_INT_24_8: 0x84fa,\r\n DEPTH24_STENCIL8: 0x88f0,\r\n UNSIGNED_NORMALIZED: 0x8c17,\r\n DRAW_FRAMEBUFFER_BINDING: 0x8ca6, // Same as FRAMEBUFFER_BINDING\r\n READ_FRAMEBUFFER: 0x8ca8,\r\n DRAW_FRAMEBUFFER: 0x8ca9,\r\n READ_FRAMEBUFFER_BINDING: 0x8caa,\r\n RENDERBUFFER_SAMPLES: 0x8cab,\r\n FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8cd4,\r\n MAX_COLOR_ATTACHMENTS: 0x8cdf,\r\n COLOR_ATTACHMENT1: 0x8ce1,\r\n COLOR_ATTACHMENT2: 0x8ce2,\r\n COLOR_ATTACHMENT3: 0x8ce3,\r\n COLOR_ATTACHMENT4: 0x8ce4,\r\n COLOR_ATTACHMENT5: 0x8ce5,\r\n COLOR_ATTACHMENT6: 0x8ce6,\r\n COLOR_ATTACHMENT7: 0x8ce7,\r\n COLOR_ATTACHMENT8: 0x8ce8,\r\n COLOR_ATTACHMENT9: 0x8ce9,\r\n COLOR_ATTACHMENT10: 0x8cea,\r\n COLOR_ATTACHMENT11: 0x8ceb,\r\n COLOR_ATTACHMENT12: 0x8cec,\r\n COLOR_ATTACHMENT13: 0x8ced,\r\n COLOR_ATTACHMENT14: 0x8cee,\r\n COLOR_ATTACHMENT15: 0x8cef,\r\n FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8d56,\r\n MAX_SAMPLES: 0x8d57,\r\n HALF_FLOAT: 0x140b,\r\n RG: 0x8227,\r\n RG_INTEGER: 0x8228,\r\n R8: 0x8229,\r\n RG8: 0x822b,\r\n R16F: 0x822d,\r\n R32F: 0x822e,\r\n RG16F: 0x822f,\r\n RG32F: 0x8230,\r\n R8I: 0x8231,\r\n R8UI: 0x8232,\r\n R16I: 0x8233,\r\n R16UI: 0x8234,\r\n R32I: 0x8235,\r\n R32UI: 0x8236,\r\n RG8I: 0x8237,\r\n RG8UI: 0x8238,\r\n RG16I: 0x8239,\r\n RG16UI: 0x823a,\r\n RG32I: 0x823b,\r\n RG32UI: 0x823c,\r\n VERTEX_ARRAY_BINDING: 0x85b5,\r\n R8_SNORM: 0x8f94,\r\n RG8_SNORM: 0x8f95,\r\n RGB8_SNORM: 0x8f96,\r\n RGBA8_SNORM: 0x8f97,\r\n SIGNED_NORMALIZED: 0x8f9c,\r\n COPY_READ_BUFFER: 0x8f36,\r\n COPY_WRITE_BUFFER: 0x8f37,\r\n COPY_READ_BUFFER_BINDING: 0x8f36, // Same as COPY_READ_BUFFER\r\n COPY_WRITE_BUFFER_BINDING: 0x8f37, // Same as COPY_WRITE_BUFFER\r\n UNIFORM_BUFFER: 0x8a11,\r\n UNIFORM_BUFFER_BINDING: 0x8a28,\r\n UNIFORM_BUFFER_START: 0x8a29,\r\n UNIFORM_BUFFER_SIZE: 0x8a2a,\r\n MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b,\r\n MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d,\r\n MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e,\r\n MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f,\r\n MAX_UNIFORM_BLOCK_SIZE: 0x8a30,\r\n MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8a31,\r\n MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8a33,\r\n UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34,\r\n ACTIVE_UNIFORM_BLOCKS: 0x8a36,\r\n UNIFORM_TYPE: 0x8a37,\r\n UNIFORM_SIZE: 0x8a38,\r\n UNIFORM_BLOCK_INDEX: 0x8a3a,\r\n UNIFORM_OFFSET: 0x8a3b,\r\n UNIFORM_ARRAY_STRIDE: 0x8a3c,\r\n UNIFORM_MATRIX_STRIDE: 0x8a3d,\r\n UNIFORM_IS_ROW_MAJOR: 0x8a3e,\r\n UNIFORM_BLOCK_BINDING: 0x8a3f,\r\n UNIFORM_BLOCK_DATA_SIZE: 0x8a40,\r\n UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8a42,\r\n UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8a43,\r\n UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8a44,\r\n UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8a46,\r\n INVALID_INDEX: 0xffffffff,\r\n MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122,\r\n MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125,\r\n MAX_SERVER_WAIT_TIMEOUT: 0x9111,\r\n OBJECT_TYPE: 0x9112,\r\n SYNC_CONDITION: 0x9113,\r\n SYNC_STATUS: 0x9114,\r\n SYNC_FLAGS: 0x9115,\r\n SYNC_FENCE: 0x9116,\r\n SYNC_GPU_COMMANDS_COMPLETE: 0x9117,\r\n UNSIGNALED: 0x9118,\r\n SIGNALED: 0x9119,\r\n ALREADY_SIGNALED: 0x911a,\r\n TIMEOUT_EXPIRED: 0x911b,\r\n CONDITION_SATISFIED: 0x911c,\r\n WAIT_FAILED: 0x911d,\r\n SYNC_FLUSH_COMMANDS_BIT: 0x00000001,\r\n VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe,\r\n ANY_SAMPLES_PASSED: 0x8c2f,\r\n ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a,\r\n SAMPLER_BINDING: 0x8919,\r\n RGB10_A2UI: 0x906f,\r\n INT_2_10_10_10_REV: 0x8d9f,\r\n TRANSFORM_FEEDBACK: 0x8e22,\r\n TRANSFORM_FEEDBACK_PAUSED: 0x8e23,\r\n TRANSFORM_FEEDBACK_ACTIVE: 0x8e24,\r\n TRANSFORM_FEEDBACK_BINDING: 0x8e25,\r\n COMPRESSED_R11_EAC: 0x9270,\r\n COMPRESSED_SIGNED_R11_EAC: 0x9271,\r\n COMPRESSED_RG11_EAC: 0x9272,\r\n COMPRESSED_SIGNED_RG11_EAC: 0x9273,\r\n COMPRESSED_RGB8_ETC2: 0x9274,\r\n COMPRESSED_SRGB8_ETC2: 0x9275,\r\n COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9276,\r\n COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9277,\r\n COMPRESSED_RGBA8_ETC2_EAC: 0x9278,\r\n COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9279,\r\n TEXTURE_IMMUTABLE_FORMAT: 0x912f,\r\n MAX_ELEMENT_INDEX: 0x8d6b,\r\n TEXTURE_IMMUTABLE_LEVELS: 0x82df,\r\n\r\n // Extensions\r\n MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84ff,\r\n};\r\nexport default Object.freeze(WebGLConstants);\r\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/WebMercatorProjection-306f7acc.js b/debug/cesium/Workers/WebMercatorProjection-306f7acc.js deleted file mode 100644 index 158322b..0000000 --- a/debug/cesium/Workers/WebMercatorProjection-306f7acc.js +++ /dev/null @@ -1,177 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Matrix3-f22b0303', './defaultValue-0ab18f7d', './Check-d10e5f2e', './Math-9be8b918'], (function (exports, Matrix3, defaultValue, Check, Math$1) { 'use strict'; - - /** - * The map projection used by Google Maps, Bing Maps, and most of ArcGIS Online, EPSG:3857. This - * projection use longitude and latitude expressed with the WGS84 and transforms them to Mercator using - * the spherical (rather than ellipsoidal) equations. - * - * @alias WebMercatorProjection - * @constructor - * - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid. - * - * @see GeographicProjection - */ - function WebMercatorProjection(ellipsoid) { - this._ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - this._semimajorAxis = this._ellipsoid.maximumRadius; - this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis; - } - - Object.defineProperties(WebMercatorProjection.prototype, { - /** - * Gets the {@link Ellipsoid}. - * - * @memberof WebMercatorProjection.prototype - * - * @type {Ellipsoid} - * @readonly - */ - ellipsoid: { - get: function () { - return this._ellipsoid; - }, - }, - }); - - /** - * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude - * in the range -PI/2 to PI/2. - * - * @param {Number} mercatorAngle The angle to convert. - * @returns {Number} The geodetic latitude in radians. - */ - WebMercatorProjection.mercatorAngleToGeodeticLatitude = function ( - mercatorAngle - ) { - return Math$1.CesiumMath.PI_OVER_TWO - 2.0 * Math.atan(Math.exp(-mercatorAngle)); - }; - - /** - * Converts a geodetic latitude in radians, in the range -PI/2 to PI/2, to a Mercator - * angle in the range -PI to PI. - * - * @param {Number} latitude The geodetic latitude in radians. - * @returns {Number} The Mercator angle. - */ - WebMercatorProjection.geodeticLatitudeToMercatorAngle = function (latitude) { - // Clamp the latitude coordinate to the valid Mercator bounds. - if (latitude > WebMercatorProjection.MaximumLatitude) { - latitude = WebMercatorProjection.MaximumLatitude; - } else if (latitude < -WebMercatorProjection.MaximumLatitude) { - latitude = -WebMercatorProjection.MaximumLatitude; - } - const sinLatitude = Math.sin(latitude); - return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude)); - }; - - /** - * The maximum latitude (both North and South) supported by a Web Mercator - * (EPSG:3857) projection. Technically, the Mercator projection is defined - * for any latitude up to (but not including) 90 degrees, but it makes sense - * to cut it off sooner because it grows exponentially with increasing latitude. - * The logic behind this particular cutoff value, which is the one used by - * Google Maps, Bing Maps, and Esri, is that it makes the projection - * square. That is, the rectangle is equal in the X and Y directions. - * - * The constant value is computed by calling: - * WebMercatorProjection.mercatorAngleToGeodeticLatitude(Math.PI) - * - * @type {Number} - */ - WebMercatorProjection.MaximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude( - Math.PI - ); - - /** - * Converts geodetic ellipsoid coordinates, in radians, to the equivalent Web Mercator - * X, Y, Z coordinates expressed in meters and returned in a {@link Cartesian3}. The height - * is copied unmodified to the Z coordinate. - * - * @param {Cartographic} cartographic The cartographic coordinates in radians. - * @param {Cartesian3} [result] The instance to which to copy the result, or undefined if a - * new instance should be created. - * @returns {Cartesian3} The equivalent web mercator X, Y, Z coordinates, in meters. - */ - WebMercatorProjection.prototype.project = function (cartographic, result) { - const semimajorAxis = this._semimajorAxis; - const x = cartographic.longitude * semimajorAxis; - const y = - WebMercatorProjection.geodeticLatitudeToMercatorAngle( - cartographic.latitude - ) * semimajorAxis; - const z = cartographic.height; - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartesian3(x, y, z); - } - - result.x = x; - result.y = y; - result.z = z; - return result; - }; - - /** - * Converts Web Mercator X, Y coordinates, expressed in meters, to a {@link Cartographic} - * containing geodetic ellipsoid coordinates. The Z coordinate is copied unmodified to the - * height. - * - * @param {Cartesian3} cartesian The web mercator Cartesian position to unrproject with height (z) in meters. - * @param {Cartographic} [result] The instance to which to copy the result, or undefined if a - * new instance should be created. - * @returns {Cartographic} The equivalent cartographic coordinates. - */ - WebMercatorProjection.prototype.unproject = function (cartesian, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(cartesian)) { - throw new Check.DeveloperError("cartesian is required"); - } - //>>includeEnd('debug'); - - const oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis; - const longitude = cartesian.x * oneOverEarthSemimajorAxis; - const latitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude( - cartesian.y * oneOverEarthSemimajorAxis - ); - const height = cartesian.z; - - if (!defaultValue.defined(result)) { - return new Matrix3.Cartographic(longitude, latitude, height); - } - - result.longitude = longitude; - result.latitude = latitude; - result.height = height; - return result; - }; - - exports.WebMercatorProjection = WebMercatorProjection; - -})); -//# sourceMappingURL=WebMercatorProjection-306f7acc.js.map diff --git a/debug/cesium/Workers/WebMercatorProjection-306f7acc.js.map b/debug/cesium/Workers/WebMercatorProjection-306f7acc.js.map deleted file mode 100644 index eb06b30..0000000 --- a/debug/cesium/Workers/WebMercatorProjection-306f7acc.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"WebMercatorProjection-306f7acc.js","sources":["../../../Source/Core/WebMercatorProjection.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * The map projection used by Google Maps, Bing Maps, and most of ArcGIS Online, EPSG:3857. This\r\n * projection use longitude and latitude expressed with the WGS84 and transforms them to Mercator using\r\n * the spherical (rather than ellipsoidal) equations.\r\n *\r\n * @alias WebMercatorProjection\r\n * @constructor\r\n *\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid.\r\n *\r\n * @see GeographicProjection\r\n */\r\nfunction WebMercatorProjection(ellipsoid) {\r\n this._ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n this._semimajorAxis = this._ellipsoid.maximumRadius;\r\n this._oneOverSemimajorAxis = 1.0 / this._semimajorAxis;\r\n}\r\n\r\nObject.defineProperties(WebMercatorProjection.prototype, {\r\n /**\r\n * Gets the {@link Ellipsoid}.\r\n *\r\n * @memberof WebMercatorProjection.prototype\r\n *\r\n * @type {Ellipsoid}\r\n * @readonly\r\n */\r\n ellipsoid: {\r\n get: function () {\r\n return this._ellipsoid;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Converts a Mercator angle, in the range -PI to PI, to a geodetic latitude\r\n * in the range -PI/2 to PI/2.\r\n *\r\n * @param {Number} mercatorAngle The angle to convert.\r\n * @returns {Number} The geodetic latitude in radians.\r\n */\r\nWebMercatorProjection.mercatorAngleToGeodeticLatitude = function (\r\n mercatorAngle\r\n) {\r\n return CesiumMath.PI_OVER_TWO - 2.0 * Math.atan(Math.exp(-mercatorAngle));\r\n};\r\n\r\n/**\r\n * Converts a geodetic latitude in radians, in the range -PI/2 to PI/2, to a Mercator\r\n * angle in the range -PI to PI.\r\n *\r\n * @param {Number} latitude The geodetic latitude in radians.\r\n * @returns {Number} The Mercator angle.\r\n */\r\nWebMercatorProjection.geodeticLatitudeToMercatorAngle = function (latitude) {\r\n // Clamp the latitude coordinate to the valid Mercator bounds.\r\n if (latitude > WebMercatorProjection.MaximumLatitude) {\r\n latitude = WebMercatorProjection.MaximumLatitude;\r\n } else if (latitude < -WebMercatorProjection.MaximumLatitude) {\r\n latitude = -WebMercatorProjection.MaximumLatitude;\r\n }\r\n const sinLatitude = Math.sin(latitude);\r\n return 0.5 * Math.log((1.0 + sinLatitude) / (1.0 - sinLatitude));\r\n};\r\n\r\n/**\r\n * The maximum latitude (both North and South) supported by a Web Mercator\r\n * (EPSG:3857) projection. Technically, the Mercator projection is defined\r\n * for any latitude up to (but not including) 90 degrees, but it makes sense\r\n * to cut it off sooner because it grows exponentially with increasing latitude.\r\n * The logic behind this particular cutoff value, which is the one used by\r\n * Google Maps, Bing Maps, and Esri, is that it makes the projection\r\n * square. That is, the rectangle is equal in the X and Y directions.\r\n *\r\n * The constant value is computed by calling:\r\n * WebMercatorProjection.mercatorAngleToGeodeticLatitude(Math.PI)\r\n *\r\n * @type {Number}\r\n */\r\nWebMercatorProjection.MaximumLatitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(\r\n Math.PI\r\n);\r\n\r\n/**\r\n * Converts geodetic ellipsoid coordinates, in radians, to the equivalent Web Mercator\r\n * X, Y, Z coordinates expressed in meters and returned in a {@link Cartesian3}. The height\r\n * is copied unmodified to the Z coordinate.\r\n *\r\n * @param {Cartographic} cartographic The cartographic coordinates in radians.\r\n * @param {Cartesian3} [result] The instance to which to copy the result, or undefined if a\r\n * new instance should be created.\r\n * @returns {Cartesian3} The equivalent web mercator X, Y, Z coordinates, in meters.\r\n */\r\nWebMercatorProjection.prototype.project = function (cartographic, result) {\r\n const semimajorAxis = this._semimajorAxis;\r\n const x = cartographic.longitude * semimajorAxis;\r\n const y =\r\n WebMercatorProjection.geodeticLatitudeToMercatorAngle(\r\n cartographic.latitude\r\n ) * semimajorAxis;\r\n const z = cartographic.height;\r\n\r\n if (!defined(result)) {\r\n return new Cartesian3(x, y, z);\r\n }\r\n\r\n result.x = x;\r\n result.y = y;\r\n result.z = z;\r\n return result;\r\n};\r\n\r\n/**\r\n * Converts Web Mercator X, Y coordinates, expressed in meters, to a {@link Cartographic}\r\n * containing geodetic ellipsoid coordinates. The Z coordinate is copied unmodified to the\r\n * height.\r\n *\r\n * @param {Cartesian3} cartesian The web mercator Cartesian position to unrproject with height (z) in meters.\r\n * @param {Cartographic} [result] The instance to which to copy the result, or undefined if a\r\n * new instance should be created.\r\n * @returns {Cartographic} The equivalent cartographic coordinates.\r\n */\r\nWebMercatorProjection.prototype.unproject = function (cartesian, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(cartesian)) {\r\n throw new DeveloperError(\"cartesian is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const oneOverEarthSemimajorAxis = this._oneOverSemimajorAxis;\r\n const longitude = cartesian.x * oneOverEarthSemimajorAxis;\r\n const latitude = WebMercatorProjection.mercatorAngleToGeodeticLatitude(\r\n cartesian.y * oneOverEarthSemimajorAxis\r\n );\r\n const height = cartesian.z;\r\n\r\n if (!defined(result)) {\r\n return new Cartographic(longitude, latitude, height);\r\n }\r\n\r\n result.longitude = longitude;\r\n result.latitude = latitude;\r\n result.height = height;\r\n return result;\r\n};\r\nexport default WebMercatorProjection;\r\n"],"names":["defaultValue","Ellipsoid","CesiumMath","defined","Cartesian3","DeveloperError","Cartographic"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/arrayRemoveDuplicates-c3526030.js b/debug/cesium/Workers/arrayRemoveDuplicates-c3526030.js deleted file mode 100644 index 14326ed..0000000 --- a/debug/cesium/Workers/arrayRemoveDuplicates-c3526030.js +++ /dev/null @@ -1,155 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918'], (function (exports, Check, defaultValue, Math) { 'use strict'; - - const removeDuplicatesEpsilon = Math.CesiumMath.EPSILON10; - - /** - * Removes adjacent duplicate values in an array of values. - * - * @param {Array.<*>} [values] The array of values. - * @param {Function} equalsEpsilon Function to compare values with an epsilon. Boolean equalsEpsilon(left, right, epsilon). - * @param {Boolean} [wrapAround=false] Compare the last value in the array against the first value. If they are equal, the last value is removed. - * @param {Array.} [removedIndices=undefined] Store the indices that correspond to the duplicate items removed from the array, if there were any. - * @returns {Array.<*>|undefined} A new array of values with no adjacent duplicate values or the input array if no duplicates were found. - * - * @example - * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0), (1.0, 1.0, 1.0)] - * const values = [ - * new Cesium.Cartesian3(1.0, 1.0, 1.0), - * new Cesium.Cartesian3(1.0, 1.0, 1.0), - * new Cesium.Cartesian3(2.0, 2.0, 2.0), - * new Cesium.Cartesian3(3.0, 3.0, 3.0), - * new Cesium.Cartesian3(1.0, 1.0, 1.0)]; - * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon); - * - * @example - * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0)] - * const values = [ - * new Cesium.Cartesian3(1.0, 1.0, 1.0), - * new Cesium.Cartesian3(1.0, 1.0, 1.0), - * new Cesium.Cartesian3(2.0, 2.0, 2.0), - * new Cesium.Cartesian3(3.0, 3.0, 3.0), - * new Cesium.Cartesian3(1.0, 1.0, 1.0)]; - * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon, true); - * - * @example - * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0)] - * // removedIndices will be equal to [1, 3, 5] - * const values = [ - * new Cesium.Cartesian3(1.0, 1.0, 1.0), - * new Cesium.Cartesian3(1.0, 1.0, 1.0), - * new Cesium.Cartesian3(2.0, 2.0, 2.0), - * new Cesium.Cartesian3(2.0, 2.0, 2.0), - * new Cesium.Cartesian3(3.0, 3.0, 3.0), - * new Cesium.Cartesian3(1.0, 1.0, 1.0)]; - * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon, true); - * @private - */ - function arrayRemoveDuplicates( - values, - equalsEpsilon, - wrapAround, - removedIndices - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("equalsEpsilon", equalsEpsilon); - //>>includeEnd('debug'); - - if (!defaultValue.defined(values)) { - return undefined; - } - - wrapAround = defaultValue.defaultValue(wrapAround, false); - const storeRemovedIndices = defaultValue.defined(removedIndices); - - const length = values.length; - if (length < 2) { - return values; - } - - let i; - let v0 = values[0]; - let v1; - - // We only want to create a new array if there are duplicates in the array. - // As such, cleanedValues is undefined until it encounters the first duplicate, if it exists. - let cleanedValues; - let lastCleanIndex = 0; - - // removedIndexLCI keeps track of where lastCleanIndex would be if it were sorted into the removedIndices array. - // In case of arrays such as [A, B, C, ..., A, A, A], removedIndices will not be sorted properly without this. - let removedIndexLCI = -1; - - for (i = 1; i < length; ++i) { - v1 = values[i]; - if (equalsEpsilon(v0, v1, removeDuplicatesEpsilon)) { - if (!defaultValue.defined(cleanedValues)) { - cleanedValues = values.slice(0, i); - lastCleanIndex = i - 1; - removedIndexLCI = 0; - } - if (storeRemovedIndices) { - removedIndices.push(i); - } - } else { - if (defaultValue.defined(cleanedValues)) { - cleanedValues.push(v1); - lastCleanIndex = i; - if (storeRemovedIndices) { - removedIndexLCI = removedIndices.length; - } - } - v0 = v1; - } - } - - if ( - wrapAround && - equalsEpsilon(values[0], values[length - 1], removeDuplicatesEpsilon) - ) { - if (storeRemovedIndices) { - if (defaultValue.defined(cleanedValues)) { - removedIndices.splice(removedIndexLCI, 0, lastCleanIndex); - } else { - removedIndices.push(length - 1); - } - } - - if (defaultValue.defined(cleanedValues)) { - cleanedValues.length -= 1; - } else { - cleanedValues = values.slice(0, -1); - } - } - - return defaultValue.defined(cleanedValues) ? cleanedValues : values; - } - - exports.arrayRemoveDuplicates = arrayRemoveDuplicates; - -})); -//# sourceMappingURL=arrayRemoveDuplicates-c3526030.js.map diff --git a/debug/cesium/Workers/arrayRemoveDuplicates-c3526030.js.map b/debug/cesium/Workers/arrayRemoveDuplicates-c3526030.js.map deleted file mode 100644 index 8161fbb..0000000 --- a/debug/cesium/Workers/arrayRemoveDuplicates-c3526030.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"arrayRemoveDuplicates-c3526030.js","sources":["../../../Source/Core/arrayRemoveDuplicates.js"],"sourcesContent":["import Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\nconst removeDuplicatesEpsilon = CesiumMath.EPSILON10;\r\n\r\n/**\r\n * Removes adjacent duplicate values in an array of values.\r\n *\r\n * @param {Array.<*>} [values] The array of values.\r\n * @param {Function} equalsEpsilon Function to compare values with an epsilon. Boolean equalsEpsilon(left, right, epsilon).\r\n * @param {Boolean} [wrapAround=false] Compare the last value in the array against the first value. If they are equal, the last value is removed.\r\n * @param {Array.} [removedIndices=undefined] Store the indices that correspond to the duplicate items removed from the array, if there were any.\r\n * @returns {Array.<*>|undefined} A new array of values with no adjacent duplicate values or the input array if no duplicates were found.\r\n *\r\n * @example\r\n * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0), (1.0, 1.0, 1.0)]\r\n * const values = [\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\r\n * new Cesium.Cartesian3(2.0, 2.0, 2.0),\r\n * new Cesium.Cartesian3(3.0, 3.0, 3.0),\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0)];\r\n * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon);\r\n *\r\n * @example\r\n * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0)]\r\n * const values = [\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\r\n * new Cesium.Cartesian3(2.0, 2.0, 2.0),\r\n * new Cesium.Cartesian3(3.0, 3.0, 3.0),\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0)];\r\n * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon, true);\r\n *\r\n * @example\r\n * // Returns [(1.0, 1.0, 1.0), (2.0, 2.0, 2.0), (3.0, 3.0, 3.0)]\r\n * // removedIndices will be equal to [1, 3, 5]\r\n * const values = [\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0),\r\n * new Cesium.Cartesian3(2.0, 2.0, 2.0),\r\n * new Cesium.Cartesian3(2.0, 2.0, 2.0),\r\n * new Cesium.Cartesian3(3.0, 3.0, 3.0),\r\n * new Cesium.Cartesian3(1.0, 1.0, 1.0)];\r\n * const nonDuplicatevalues = Cesium.PolylinePipeline.removeDuplicates(values, Cartesian3.equalsEpsilon, true);\r\n * @private\r\n */\r\nfunction arrayRemoveDuplicates(\r\n values,\r\n equalsEpsilon,\r\n wrapAround,\r\n removedIndices\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"equalsEpsilon\", equalsEpsilon);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(values)) {\r\n return undefined;\r\n }\r\n\r\n wrapAround = defaultValue(wrapAround, false);\r\n const storeRemovedIndices = defined(removedIndices);\r\n\r\n const length = values.length;\r\n if (length < 2) {\r\n return values;\r\n }\r\n\r\n let i;\r\n let v0 = values[0];\r\n let v1;\r\n\r\n // We only want to create a new array if there are duplicates in the array.\r\n // As such, cleanedValues is undefined until it encounters the first duplicate, if it exists.\r\n let cleanedValues;\r\n let lastCleanIndex = 0;\r\n\r\n // removedIndexLCI keeps track of where lastCleanIndex would be if it were sorted into the removedIndices array.\r\n // In case of arrays such as [A, B, C, ..., A, A, A], removedIndices will not be sorted properly without this.\r\n let removedIndexLCI = -1;\r\n\r\n for (i = 1; i < length; ++i) {\r\n v1 = values[i];\r\n if (equalsEpsilon(v0, v1, removeDuplicatesEpsilon)) {\r\n if (!defined(cleanedValues)) {\r\n cleanedValues = values.slice(0, i);\r\n lastCleanIndex = i - 1;\r\n removedIndexLCI = 0;\r\n }\r\n if (storeRemovedIndices) {\r\n removedIndices.push(i);\r\n }\r\n } else {\r\n if (defined(cleanedValues)) {\r\n cleanedValues.push(v1);\r\n lastCleanIndex = i;\r\n if (storeRemovedIndices) {\r\n removedIndexLCI = removedIndices.length;\r\n }\r\n }\r\n v0 = v1;\r\n }\r\n }\r\n\r\n if (\r\n wrapAround &&\r\n equalsEpsilon(values[0], values[length - 1], removeDuplicatesEpsilon)\r\n ) {\r\n if (storeRemovedIndices) {\r\n if (defined(cleanedValues)) {\r\n removedIndices.splice(removedIndexLCI, 0, lastCleanIndex);\r\n } else {\r\n removedIndices.push(length - 1);\r\n }\r\n }\r\n\r\n if (defined(cleanedValues)) {\r\n cleanedValues.length -= 1;\r\n } else {\r\n cleanedValues = values.slice(0, -1);\r\n }\r\n }\r\n\r\n return defined(cleanedValues) ? cleanedValues : values;\r\n}\r\n\r\nexport default arrayRemoveDuplicates;\r\n"],"names":["CesiumMath","Check","defined","defaultValue"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/cesiumWorkerBootstrapper.js b/debug/cesium/Workers/cesiumWorkerBootstrapper.js deleted file mode 100644 index 0bf17f5..0000000 --- a/debug/cesium/Workers/cesiumWorkerBootstrapper.js +++ /dev/null @@ -1,1297 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -if (typeof self === "undefined") { - self = {}; -} -self.onmessage = function(event) { - var data = event.data; - require(data.loaderConfig, [data.workerModule], function(workerModule) { - self.onmessage = workerModule; - self.CESIUM_BASE_URL = data.loaderConfig.baseUrl; - }); -}; -function setTimeout(fn) { - fn(); -} -/** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 2.1.20 Copyright (c) 2010-2015, The Dojo Foundation All Rights Reserved. - * Available via the MIT or new BSD license. - * see: http://github.com/jrburke/requirejs for details - */ -var requirejs, require, define; -(function(global) { - var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, version = "2.1.20", commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/gm, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, currDirRegExp = /^\.\//, op = Object.prototype, ostring = op.toString, hasOwn = op.hasOwnProperty, ap = Array.prototype, isBrowser = !!(typeof window !== "undefined" && typeof navigator !== "undefined" && window.document), isWebWorker = !isBrowser && typeof importScripts !== "undefined", readyRegExp = isBrowser && navigator.platform === "PLAYSTATION 3" ? /^complete$/ : /^(complete|loaded)$/, defContextName = "_", isOpera = typeof opera !== "undefined" && opera.toString() === "[object Opera]", contexts = {}, cfg = {}, globalDefQueue = [], useInteractive = false; - function isFunction(it) { - return ostring.call(it) === "[object Function]"; - } - function isArray(it) { - return ostring.call(it) === "[object Array]"; - } - function each(ary, func) { - if (ary) { - var i; - for (i = 0; i < ary.length; i += 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - function eachReverse(ary, func) { - if (ary) { - var i; - for (i = ary.length - 1; i > -1; i -= 1) { - if (ary[i] && func(ary[i], i, ary)) { - break; - } - } - } - } - function hasProp(obj, prop) { - return hasOwn.call(obj, prop); - } - function getOwn(obj, prop) { - return hasProp(obj, prop) && obj[prop]; - } - function eachProp(obj, func) { - var prop; - for (prop in obj) { - if (hasProp(obj, prop)) { - if (func(obj[prop], prop)) { - break; - } - } - } - } - function mixin(target, source, force, deepStringMixin) { - if (source) { - eachProp(source, function(value, prop) { - if (force || !hasProp(target, prop)) { - if (deepStringMixin && typeof value === "object" && value && !isArray(value) && !isFunction(value) && !(value instanceof RegExp)) { - if (!target[prop]) { - target[prop] = {}; - } - mixin(target[prop], value, force, deepStringMixin); - } else { - target[prop] = value; - } - } - }); - } - return target; - } - function bind(obj, fn) { - return function() { - return fn.apply(obj, arguments); - }; - } - function scripts() { - return document.getElementsByTagName("script"); - } - function defaultOnError(err) { - throw err; - } - function getGlobal(value) { - if (!value) { - return value; - } - var g = global; - each(value.split("."), function(part) { - g = g[part]; - }); - return g; - } - function makeError(id, msg, err, requireModules) { - var e = new Error(msg + "\nhttp://requirejs.org/docs/errors.html#" + id); - e.requireType = id; - e.requireModules = requireModules; - if (err) { - e.originalError = err; - } - return e; - } - if (typeof define !== "undefined") { - return; - } - if (typeof requirejs !== "undefined") { - if (isFunction(requirejs)) { - return; - } - cfg = requirejs; - requirejs = void 0; - } - if (typeof require !== "undefined" && !isFunction(require)) { - cfg = require; - require = void 0; - } - function newContext(contextName) { - var inCheckLoaded, Module, context, handlers, checkLoadedTimeoutId, config = { - waitSeconds: 7, - baseUrl: "./", - paths: {}, - bundles: {}, - pkgs: {}, - shim: {}, - config: {} - }, registry = {}, enabledRegistry = {}, undefEvents = {}, defQueue = [], defined = {}, urlFetched = {}, bundlesMap = {}, requireCounter = 1, unnormalizedCounter = 1; - function trimDots(ary) { - var i, part; - for (i = 0; i < ary.length; i++) { - part = ary[i]; - if (part === ".") { - ary.splice(i, 1); - i -= 1; - } else if (part === "..") { - if (i === 0 || i === 1 && ary[2] === ".." || ary[i - 1] === "..") { - continue; - } else if (i > 0) { - ary.splice(i - 1, 2); - i -= 2; - } - } - } - } - function normalize(name, baseName, applyMap) { - var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex, foundMap, foundI, foundStarMap, starI, normalizedBaseParts, baseParts = baseName && baseName.split("/"), map = config.map, starMap = map && map["*"]; - if (name) { - name = name.split("/"); - lastIndex = name.length - 1; - if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) { - name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, ""); - } - if (name[0].charAt(0) === "." && baseParts) { - normalizedBaseParts = baseParts.slice(0, baseParts.length - 1); - name = normalizedBaseParts.concat(name); - } - trimDots(name); - name = name.join("/"); - } - if (applyMap && map && (baseParts || starMap)) { - nameParts = name.split("/"); - outerLoop: - for (i = nameParts.length; i > 0; i -= 1) { - nameSegment = nameParts.slice(0, i).join("/"); - if (baseParts) { - for (j = baseParts.length; j > 0; j -= 1) { - mapValue = getOwn(map, baseParts.slice(0, j).join("/")); - if (mapValue) { - mapValue = getOwn(mapValue, nameSegment); - if (mapValue) { - foundMap = mapValue; - foundI = i; - break outerLoop; - } - } - } - } - if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) { - foundStarMap = getOwn(starMap, nameSegment); - starI = i; - } - } - if (!foundMap && foundStarMap) { - foundMap = foundStarMap; - foundI = starI; - } - if (foundMap) { - nameParts.splice(0, foundI, foundMap); - name = nameParts.join("/"); - } - } - pkgMain = getOwn(config.pkgs, name); - return pkgMain ? pkgMain : name; - } - function removeScript(name) { - if (isBrowser) { - each(scripts(), function(scriptNode) { - if (scriptNode.getAttribute("data-requiremodule") === name && scriptNode.getAttribute("data-requirecontext") === context.contextName) { - scriptNode.parentNode.removeChild(scriptNode); - return true; - } - }); - } - } - function hasPathFallback(id) { - var pathConfig = getOwn(config.paths, id); - if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) { - pathConfig.shift(); - context.require.undef(id); - context.makeRequire(null, { - skipMap: true - })([id]); - return true; - } - } - function splitPrefix(name) { - var prefix, index = name ? name.indexOf("!") : -1; - if (index > -1) { - prefix = name.substring(0, index); - name = name.substring(index + 1, name.length); - } - return [prefix, name]; - } - function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) { - var url, pluginModule, suffix, nameParts, prefix = null, parentName = parentModuleMap ? parentModuleMap.name : null, originalName = name, isDefine = true, normalizedName = ""; - if (!name) { - isDefine = false; - name = "_@r" + (requireCounter += 1); - } - nameParts = splitPrefix(name); - prefix = nameParts[0]; - name = nameParts[1]; - if (prefix) { - prefix = normalize(prefix, parentName, applyMap); - pluginModule = getOwn(defined, prefix); - } - if (name) { - if (prefix) { - if (pluginModule && pluginModule.normalize) { - normalizedName = pluginModule.normalize(name, function(name2) { - return normalize(name2, parentName, applyMap); - }); - } else { - normalizedName = name.indexOf("!") === -1 ? normalize(name, parentName, applyMap) : name; - } - } else { - normalizedName = normalize(name, parentName, applyMap); - nameParts = splitPrefix(normalizedName); - prefix = nameParts[0]; - normalizedName = nameParts[1]; - isNormalized = true; - url = context.nameToUrl(normalizedName); - } - } - suffix = prefix && !pluginModule && !isNormalized ? "_unnormalized" + (unnormalizedCounter += 1) : ""; - return { - prefix, - name: normalizedName, - parentMap: parentModuleMap, - unnormalized: !!suffix, - url, - originalName, - isDefine, - id: (prefix ? prefix + "!" + normalizedName : normalizedName) + suffix - }; - } - function getModule(depMap) { - var id = depMap.id, mod = getOwn(registry, id); - if (!mod) { - mod = registry[id] = new context.Module(depMap); - } - return mod; - } - function on(depMap, name, fn) { - var id = depMap.id, mod = getOwn(registry, id); - if (hasProp(defined, id) && (!mod || mod.defineEmitComplete)) { - if (name === "defined") { - fn(defined[id]); - } - } else { - mod = getModule(depMap); - if (mod.error && name === "error") { - fn(mod.error); - } else { - mod.on(name, fn); - } - } - } - function onError(err, errback) { - var ids = err.requireModules, notified = false; - if (errback) { - errback(err); - } else { - each(ids, function(id) { - var mod = getOwn(registry, id); - if (mod) { - mod.error = err; - if (mod.events.error) { - notified = true; - mod.emit("error", err); - } - } - }); - if (!notified) { - req.onError(err); - } - } - } - function takeGlobalQueue() { - if (globalDefQueue.length) { - each(globalDefQueue, function(queueItem) { - var id = queueItem[0]; - if (typeof id === "string") { - context.defQueueMap[id] = true; - } - defQueue.push(queueItem); - }); - globalDefQueue = []; - } - } - handlers = { - require: function(mod) { - if (mod.require) { - return mod.require; - } else { - return mod.require = context.makeRequire(mod.map); - } - }, - exports: function(mod) { - mod.usingExports = true; - if (mod.map.isDefine) { - if (mod.exports) { - return defined[mod.map.id] = mod.exports; - } else { - return mod.exports = defined[mod.map.id] = {}; - } - } - }, - module: function(mod) { - if (mod.module) { - return mod.module; - } else { - return mod.module = { - id: mod.map.id, - uri: mod.map.url, - config: function() { - return getOwn(config.config, mod.map.id) || {}; - }, - exports: mod.exports || (mod.exports = {}) - }; - } - } - }; - function cleanRegistry(id) { - delete registry[id]; - delete enabledRegistry[id]; - } - function breakCycle(mod, traced, processed) { - var id = mod.map.id; - if (mod.error) { - mod.emit("error", mod.error); - } else { - traced[id] = true; - each(mod.depMaps, function(depMap, i) { - var depId = depMap.id, dep = getOwn(registry, depId); - if (dep && !mod.depMatched[i] && !processed[depId]) { - if (getOwn(traced, depId)) { - mod.defineDep(i, defined[depId]); - mod.check(); - } else { - breakCycle(dep, traced, processed); - } - } - }); - processed[id] = true; - } - } - function checkLoaded() { - var err, usingPathFallback, waitInterval = config.waitSeconds * 1e3, expired = waitInterval && context.startTime + waitInterval < new Date().getTime(), noLoads = [], reqCalls = [], stillLoading = false, needCycleCheck = true; - if (inCheckLoaded) { - return; - } - inCheckLoaded = true; - eachProp(enabledRegistry, function(mod) { - var map = mod.map, modId = map.id; - if (!mod.enabled) { - return; - } - if (!map.isDefine) { - reqCalls.push(mod); - } - if (!mod.error) { - if (!mod.inited && expired) { - if (hasPathFallback(modId)) { - usingPathFallback = true; - stillLoading = true; - } else { - noLoads.push(modId); - removeScript(modId); - } - } else if (!mod.inited && mod.fetched && map.isDefine) { - stillLoading = true; - if (!map.prefix) { - return needCycleCheck = false; - } - } - } - }); - if (expired && noLoads.length) { - err = makeError( - "timeout", - "Load timeout for modules: " + noLoads, - null, - noLoads - ); - err.contextName = context.contextName; - return onError(err); - } - if (needCycleCheck) { - each(reqCalls, function(mod) { - breakCycle(mod, {}, {}); - }); - } - if ((!expired || usingPathFallback) && stillLoading) { - if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) { - checkLoadedTimeoutId = setTimeout(function() { - checkLoadedTimeoutId = 0; - checkLoaded(); - }, 50); - } - } - inCheckLoaded = false; - } - Module = function(map) { - this.events = getOwn(undefEvents, map.id) || {}; - this.map = map; - this.shim = getOwn(config.shim, map.id); - this.depExports = []; - this.depMaps = []; - this.depMatched = []; - this.pluginMaps = {}; - this.depCount = 0; - }; - Module.prototype = { - init: function(depMaps, factory, errback, options) { - options = options || {}; - if (this.inited) { - return; - } - this.factory = factory; - if (errback) { - this.on("error", errback); - } else if (this.events.error) { - errback = bind(this, function(err) { - this.emit("error", err); - }); - } - this.depMaps = depMaps && depMaps.slice(0); - this.errback = errback; - this.inited = true; - this.ignore = options.ignore; - if (options.enabled || this.enabled) { - this.enable(); - } else { - this.check(); - } - }, - defineDep: function(i, depExports) { - if (!this.depMatched[i]) { - this.depMatched[i] = true; - this.depCount -= 1; - this.depExports[i] = depExports; - } - }, - fetch: function() { - if (this.fetched) { - return; - } - this.fetched = true; - context.startTime = new Date().getTime(); - var map = this.map; - if (this.shim) { - context.makeRequire(this.map, { - enableBuildCallback: true - })( - this.shim.deps || [], - bind(this, function() { - return map.prefix ? this.callPlugin() : this.load(); - }) - ); - } else { - return map.prefix ? this.callPlugin() : this.load(); - } - }, - load: function() { - var url = this.map.url; - if (!urlFetched[url]) { - urlFetched[url] = true; - context.load(this.map.id, url); - } - }, - check: function() { - if (!this.enabled || this.enabling) { - return; - } - var err, cjsModule, id = this.map.id, depExports = this.depExports, exports = this.exports, factory = this.factory; - if (!this.inited) { - if (!hasProp(context.defQueueMap, id)) { - this.fetch(); - } - } else if (this.error) { - this.emit("error", this.error); - } else if (!this.defining) { - this.defining = true; - if (this.depCount < 1 && !this.defined) { - if (isFunction(factory)) { - if (this.events.error && this.map.isDefine || req.onError !== defaultOnError) { - try { - exports = context.execCb(id, factory, depExports, exports); - } catch (e) { - err = e; - } - } else { - exports = context.execCb(id, factory, depExports, exports); - } - if (this.map.isDefine && exports === void 0) { - cjsModule = this.module; - if (cjsModule) { - exports = cjsModule.exports; - } else if (this.usingExports) { - exports = this.exports; - } - } - if (err) { - err.requireMap = this.map; - err.requireModules = this.map.isDefine ? [this.map.id] : null; - err.requireType = this.map.isDefine ? "define" : "require"; - return onError(this.error = err); - } - } else { - exports = factory; - } - this.exports = exports; - if (this.map.isDefine && !this.ignore) { - defined[id] = exports; - if (req.onResourceLoad) { - req.onResourceLoad(context, this.map, this.depMaps); - } - } - cleanRegistry(id); - this.defined = true; - } - this.defining = false; - if (this.defined && !this.defineEmitted) { - this.defineEmitted = true; - this.emit("defined", this.exports); - this.defineEmitComplete = true; - } - } - }, - callPlugin: function() { - var map = this.map, id = map.id, pluginMap = makeModuleMap(map.prefix); - this.depMaps.push(pluginMap); - on( - pluginMap, - "defined", - bind(this, function(plugin) { - var load, normalizedMap, normalizedMod, bundleId = getOwn(bundlesMap, this.map.id), name = this.map.name, parentName = this.map.parentMap ? this.map.parentMap.name : null, localRequire = context.makeRequire(map.parentMap, { - enableBuildCallback: true - }); - if (this.map.unnormalized) { - if (plugin.normalize) { - name = plugin.normalize(name, function(name2) { - return normalize(name2, parentName, true); - }) || ""; - } - normalizedMap = makeModuleMap( - map.prefix + "!" + name, - this.map.parentMap - ); - on( - normalizedMap, - "defined", - bind(this, function(value) { - this.init( - [], - function() { - return value; - }, - null, - { - enabled: true, - ignore: true - } - ); - }) - ); - normalizedMod = getOwn(registry, normalizedMap.id); - if (normalizedMod) { - this.depMaps.push(normalizedMap); - if (this.events.error) { - normalizedMod.on( - "error", - bind(this, function(err) { - this.emit("error", err); - }) - ); - } - normalizedMod.enable(); - } - return; - } - if (bundleId) { - this.map.url = context.nameToUrl(bundleId); - this.load(); - return; - } - load = bind(this, function(value) { - this.init( - [], - function() { - return value; - }, - null, - { - enabled: true - } - ); - }); - load.error = bind(this, function(err) { - this.inited = true; - this.error = err; - err.requireModules = [id]; - eachProp(registry, function(mod) { - if (mod.map.id.indexOf(id + "_unnormalized") === 0) { - cleanRegistry(mod.map.id); - } - }); - onError(err); - }); - load.fromText = bind(this, function(text2, textAlt) { - var moduleName = map.name, moduleMap = makeModuleMap(moduleName), hasInteractive = useInteractive; - if (textAlt) { - text2 = textAlt; - } - if (hasInteractive) { - useInteractive = false; - } - getModule(moduleMap); - if (hasProp(config.config, id)) { - config.config[moduleName] = config.config[id]; - } - try { - req.exec(text2); - } catch (e) { - return onError( - makeError( - "fromtexteval", - "fromText eval for " + id + " failed: " + e, - e, - [id] - ) - ); - } - if (hasInteractive) { - useInteractive = true; - } - this.depMaps.push(moduleMap); - context.completeLoad(moduleName); - localRequire([moduleName], load); - }); - plugin.load(map.name, localRequire, load, config); - }) - ); - context.enable(pluginMap, this); - this.pluginMaps[pluginMap.id] = pluginMap; - }, - enable: function() { - enabledRegistry[this.map.id] = this; - this.enabled = true; - this.enabling = true; - each( - this.depMaps, - bind(this, function(depMap, i) { - var id, mod, handler; - if (typeof depMap === "string") { - depMap = makeModuleMap( - depMap, - this.map.isDefine ? this.map : this.map.parentMap, - false, - !this.skipMap - ); - this.depMaps[i] = depMap; - handler = getOwn(handlers, depMap.id); - if (handler) { - this.depExports[i] = handler(this); - return; - } - this.depCount += 1; - on( - depMap, - "defined", - bind(this, function(depExports) { - if (this.undefed) { - return; - } - this.defineDep(i, depExports); - this.check(); - }) - ); - if (this.errback) { - on(depMap, "error", bind(this, this.errback)); - } else if (this.events.error) { - on( - depMap, - "error", - bind(this, function(err) { - this.emit("error", err); - }) - ); - } - } - id = depMap.id; - mod = registry[id]; - if (!hasProp(handlers, id) && mod && !mod.enabled) { - context.enable(depMap, this); - } - }) - ); - eachProp( - this.pluginMaps, - bind(this, function(pluginMap) { - var mod = getOwn(registry, pluginMap.id); - if (mod && !mod.enabled) { - context.enable(pluginMap, this); - } - }) - ); - this.enabling = false; - this.check(); - }, - on: function(name, cb) { - var cbs = this.events[name]; - if (!cbs) { - cbs = this.events[name] = []; - } - cbs.push(cb); - }, - emit: function(name, evt) { - each(this.events[name], function(cb) { - cb(evt); - }); - if (name === "error") { - delete this.events[name]; - } - } - }; - function callGetModule(args) { - if (!hasProp(defined, args[0])) { - getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]); - } - } - function removeListener(node, func, name, ieName) { - if (node.detachEvent && !isOpera) { - if (ieName) { - node.detachEvent(ieName, func); - } - } else { - node.removeEventListener(name, func, false); - } - } - function getScriptData(evt) { - var node = evt.currentTarget || evt.srcElement; - removeListener(node, context.onScriptLoad, "load", "onreadystatechange"); - removeListener(node, context.onScriptError, "error"); - return { - node, - id: node && node.getAttribute("data-requiremodule") - }; - } - function intakeDefines() { - var args; - takeGlobalQueue(); - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - return onError( - makeError( - "mismatch", - "Mismatched anonymous define() module: " + args[args.length - 1] - ) - ); - } else { - callGetModule(args); - } - } - context.defQueueMap = {}; - } - context = { - config, - contextName, - registry, - defined, - urlFetched, - defQueue, - defQueueMap: {}, - Module, - makeModuleMap, - nextTick: req.nextTick, - onError, - configure: function(cfg2) { - if (cfg2.baseUrl) { - if (cfg2.baseUrl.charAt(cfg2.baseUrl.length - 1) !== "/") { - cfg2.baseUrl += "/"; - } - } - var shim = config.shim, objs = { - paths: true, - bundles: true, - config: true, - map: true - }; - eachProp(cfg2, function(value, prop) { - if (objs[prop]) { - if (!config[prop]) { - config[prop] = {}; - } - mixin(config[prop], value, true, true); - } else { - config[prop] = value; - } - }); - if (cfg2.bundles) { - eachProp(cfg2.bundles, function(value, prop) { - each(value, function(v) { - if (v !== prop) { - bundlesMap[v] = prop; - } - }); - }); - } - if (cfg2.shim) { - eachProp(cfg2.shim, function(value, id) { - if (isArray(value)) { - value = { - deps: value - }; - } - if ((value.exports || value.init) && !value.exportsFn) { - value.exportsFn = context.makeShimExports(value); - } - shim[id] = value; - }); - config.shim = shim; - } - if (cfg2.packages) { - each(cfg2.packages, function(pkgObj) { - var location, name; - pkgObj = typeof pkgObj === "string" ? { name: pkgObj } : pkgObj; - name = pkgObj.name; - location = pkgObj.location; - if (location) { - config.paths[name] = pkgObj.location; - } - config.pkgs[name] = pkgObj.name + "/" + (pkgObj.main || "main").replace(currDirRegExp, "").replace(jsSuffixRegExp, ""); - }); - } - eachProp(registry, function(mod, id) { - if (!mod.inited && !mod.map.unnormalized) { - mod.map = makeModuleMap(id, null, true); - } - }); - if (cfg2.deps || cfg2.callback) { - context.require(cfg2.deps || [], cfg2.callback); - } - }, - makeShimExports: function(value) { - function fn() { - var ret; - if (value.init) { - ret = value.init.apply(global, arguments); - } - return ret || value.exports && getGlobal(value.exports); - } - return fn; - }, - makeRequire: function(relMap, options) { - options = options || {}; - function localRequire(deps, callback, errback) { - var id, map, requireMod; - if (options.enableBuildCallback && callback && isFunction(callback)) { - callback.__requireJsBuild = true; - } - if (typeof deps === "string") { - if (isFunction(callback)) { - return onError( - makeError("requireargs", "Invalid require call"), - errback - ); - } - if (relMap && hasProp(handlers, deps)) { - return handlers[deps](registry[relMap.id]); - } - if (req.get) { - return req.get(context, deps, relMap, localRequire); - } - map = makeModuleMap(deps, relMap, false, true); - id = map.id; - if (!hasProp(defined, id)) { - return onError( - makeError( - "notloaded", - 'Module name "' + id + '" has not been loaded yet for context: ' + contextName + (relMap ? "" : ". Use require([])") - ) - ); - } - return defined[id]; - } - intakeDefines(); - context.nextTick(function() { - intakeDefines(); - requireMod = getModule(makeModuleMap(null, relMap)); - requireMod.skipMap = options.skipMap; - requireMod.init(deps, callback, errback, { - enabled: true - }); - checkLoaded(); - }); - return localRequire; - } - mixin(localRequire, { - isBrowser, - toUrl: function(moduleNamePlusExt) { - var ext, index = moduleNamePlusExt.lastIndexOf("."), segment = moduleNamePlusExt.split("/")[0], isRelative = segment === "." || segment === ".."; - if (index !== -1 && (!isRelative || index > 1)) { - ext = moduleNamePlusExt.substring( - index, - moduleNamePlusExt.length - ); - moduleNamePlusExt = moduleNamePlusExt.substring(0, index); - } - return context.nameToUrl( - normalize(moduleNamePlusExt, relMap && relMap.id, true), - ext, - true - ); - }, - defined: function(id) { - return hasProp(defined, makeModuleMap(id, relMap, false, true).id); - }, - specified: function(id) { - id = makeModuleMap(id, relMap, false, true).id; - return hasProp(defined, id) || hasProp(registry, id); - } - }); - if (!relMap) { - localRequire.undef = function(id) { - takeGlobalQueue(); - var map = makeModuleMap(id, relMap, true), mod = getOwn(registry, id); - mod.undefed = true; - removeScript(id); - delete defined[id]; - delete urlFetched[map.url]; - delete undefEvents[id]; - eachReverse(defQueue, function(args, i) { - if (args[0] === id) { - defQueue.splice(i, 1); - } - }); - delete context.defQueueMap[id]; - if (mod) { - if (mod.events.defined) { - undefEvents[id] = mod.events; - } - cleanRegistry(id); - } - }; - } - return localRequire; - }, - enable: function(depMap) { - var mod = getOwn(registry, depMap.id); - if (mod) { - getModule(depMap).enable(); - } - }, - completeLoad: function(moduleName) { - var found, args, mod, shim = getOwn(config.shim, moduleName) || {}, shExports = shim.exports; - takeGlobalQueue(); - while (defQueue.length) { - args = defQueue.shift(); - if (args[0] === null) { - args[0] = moduleName; - if (found) { - break; - } - found = true; - } else if (args[0] === moduleName) { - found = true; - } - callGetModule(args); - } - context.defQueueMap = {}; - mod = getOwn(registry, moduleName); - if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) { - if (config.enforceDefine && (!shExports || !getGlobal(shExports))) { - if (hasPathFallback(moduleName)) { - return; - } else { - return onError( - makeError( - "nodefine", - "No define call for " + moduleName, - null, - [moduleName] - ) - ); - } - } else { - callGetModule([moduleName, shim.deps || [], shim.exportsFn]); - } - } - checkLoaded(); - }, - nameToUrl: function(moduleName, ext, skipExt) { - var paths, syms, i, parentModule, url, parentPath, bundleId, pkgMain = getOwn(config.pkgs, moduleName); - if (pkgMain) { - moduleName = pkgMain; - } - bundleId = getOwn(bundlesMap, moduleName); - if (bundleId) { - return context.nameToUrl(bundleId, ext, skipExt); - } - if (req.jsExtRegExp.test(moduleName)) { - url = moduleName + (ext || ""); - } else { - paths = config.paths; - syms = moduleName.split("/"); - for (i = syms.length; i > 0; i -= 1) { - parentModule = syms.slice(0, i).join("/"); - parentPath = getOwn(paths, parentModule); - if (parentPath) { - if (isArray(parentPath)) { - parentPath = parentPath[0]; - } - syms.splice(0, i, parentPath); - break; - } - } - url = syms.join("/"); - url += ext || (/^data\:|\?/.test(url) || skipExt ? "" : ".js"); - url = (url.charAt(0) === "/" || url.match(/^[\w\+\.\-]+:/) ? "" : config.baseUrl) + url; - } - return config.urlArgs ? url + ((url.indexOf("?") === -1 ? "?" : "&") + config.urlArgs) : url; - }, - load: function(id, url) { - req.load(context, id, url); - }, - execCb: function(name, callback, args, exports) { - return callback.apply(exports, args); - }, - onScriptLoad: function(evt) { - if (evt.type === "load" || readyRegExp.test((evt.currentTarget || evt.srcElement).readyState)) { - interactiveScript = null; - var data = getScriptData(evt); - context.completeLoad(data.id); - } - }, - onScriptError: function(evt) { - var data = getScriptData(evt); - if (!hasPathFallback(data.id)) { - return onError( - makeError("scripterror", "Script error for: " + data.id, evt, [ - data.id - ]) - ); - } - } - }; - context.require = context.makeRequire(); - return context; - } - req = requirejs = function(deps, callback, errback, optional) { - var context, config, contextName = defContextName; - if (!isArray(deps) && typeof deps !== "string") { - config = deps; - if (isArray(callback)) { - deps = callback; - callback = errback; - errback = optional; - } else { - deps = []; - } - } - if (config && config.context) { - contextName = config.context; - } - context = getOwn(contexts, contextName); - if (!context) { - context = contexts[contextName] = req.s.newContext(contextName); - } - if (config) { - context.configure(config); - } - return context.require(deps, callback, errback); - }; - req.config = function(config) { - return req(config); - }; - req.nextTick = typeof setTimeout !== "undefined" ? function(fn) { - setTimeout(fn, 4); - } : function(fn) { - fn(); - }; - if (!require) { - require = req; - } - req.version = version; - req.jsExtRegExp = /^\/|:|\?|\.js$/; - req.isBrowser = isBrowser; - s = req.s = { - contexts, - newContext - }; - req({}); - each(["toUrl", "undef", "defined", "specified"], function(prop) { - req[prop] = function() { - var ctx = contexts[defContextName]; - return ctx.require[prop].apply(ctx, arguments); - }; - }); - if (isBrowser) { - head = s.head = document.getElementsByTagName("head")[0]; - baseElement = document.getElementsByTagName("base")[0]; - if (baseElement) { - head = s.head = baseElement.parentNode; - } - } - req.onError = defaultOnError; - req.createNode = function(config, moduleName, url) { - var node = config.xhtml ? document.createElementNS("http://www.w3.org/1999/xhtml", "html:script") : document.createElement("script"); - node.type = config.scriptType || "text/javascript"; - node.charset = "utf-8"; - node.async = true; - return node; - }; - req.load = function(context, moduleName, url) { - var config = context && context.config || {}, node; - if (isBrowser) { - node = req.createNode(config, moduleName, url); - if (config.onNodeCreated) { - config.onNodeCreated(node, config, moduleName, url); - } - node.setAttribute("data-requirecontext", context.contextName); - node.setAttribute("data-requiremodule", moduleName); - if (node.attachEvent && !(node.attachEvent.toString && node.attachEvent.toString().indexOf("[native code") < 0) && !isOpera) { - useInteractive = true; - node.attachEvent("onreadystatechange", context.onScriptLoad); - } else { - node.addEventListener("load", context.onScriptLoad, false); - node.addEventListener("error", context.onScriptError, false); - } - node.src = url; - currentlyAddingScript = node; - if (baseElement) { - head.insertBefore(node, baseElement); - } else { - head.appendChild(node); - } - currentlyAddingScript = null; - return node; - } else if (isWebWorker) { - try { - importScripts(url); - context.completeLoad(moduleName); - } catch (e) { - context.onError( - makeError( - "importscripts", - "importScripts failed for " + moduleName + " at " + url, - e, - [moduleName] - ) - ); - } - } - }; - function getInteractiveScript() { - if (interactiveScript && interactiveScript.readyState === "interactive") { - return interactiveScript; - } - eachReverse(scripts(), function(script) { - if (script.readyState === "interactive") { - return interactiveScript = script; - } - }); - return interactiveScript; - } - if (isBrowser && !cfg.skipDataMain) { - eachReverse(scripts(), function(script) { - if (!head) { - head = script.parentNode; - } - dataMain = script.getAttribute("data-main"); - if (dataMain) { - mainScript = dataMain; - if (!cfg.baseUrl) { - src = mainScript.split("/"); - mainScript = src.pop(); - subPath = src.length ? src.join("/") + "/" : "./"; - cfg.baseUrl = subPath; - } - mainScript = mainScript.replace(jsSuffixRegExp, ""); - if (req.jsExtRegExp.test(mainScript)) { - mainScript = dataMain; - } - cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript]; - return true; - } - }); - } - define = function(name, deps, callback) { - var node, context; - if (typeof name !== "string") { - callback = deps; - deps = name; - name = null; - } - if (!isArray(deps)) { - callback = deps; - deps = null; - } - if (!deps && isFunction(callback)) { - deps = []; - if (callback.length) { - callback.toString().replace(commentRegExp, "").replace(cjsRequireRegExp, function(match, dep) { - deps.push(dep); - }); - deps = (callback.length === 1 ? ["require"] : ["require", "exports", "module"]).concat(deps); - } - } - if (useInteractive) { - node = currentlyAddingScript || getInteractiveScript(); - if (node) { - if (!name) { - name = node.getAttribute("data-requiremodule"); - } - context = contexts[node.getAttribute("data-requirecontext")]; - } - } - if (context) { - context.defQueue.push([name, deps, callback]); - context.defQueueMap[name] = true; - } else { - globalDefQueue.push([name, deps, callback]); - } - }; - define.amd = { - jQuery: true - }; - req.exec = function(text) { - return eval(text); - }; - req(cfg); -})(this); diff --git a/debug/cesium/Workers/combine-4598d225.js b/debug/cesium/Workers/combine-4598d225.js deleted file mode 100644 index 478cd8e..0000000 --- a/debug/cesium/Workers/combine-4598d225.js +++ /dev/null @@ -1,108 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports', './defaultValue-0ab18f7d'], (function (exports, defaultValue) { 'use strict'; - - /** - * Merges two objects, copying their properties onto a new combined object. When two objects have the same - * property, the value of the property on the first object is used. If either object is undefined, - * it will be treated as an empty object. - * - * @example - * const object1 = { - * propOne : 1, - * propTwo : { - * value1 : 10 - * } - * } - * const object2 = { - * propTwo : 2 - * } - * const final = Cesium.combine(object1, object2); - * - * // final === { - * // propOne : 1, - * // propTwo : { - * // value1 : 10 - * // } - * // } - * - * @param {Object} [object1] The first object to merge. - * @param {Object} [object2] The second object to merge. - * @param {Boolean} [deep=false] Perform a recursive merge. - * @returns {Object} The combined object containing all properties from both objects. - * - * @function - */ - function combine(object1, object2, deep) { - deep = defaultValue.defaultValue(deep, false); - - const result = {}; - - const object1Defined = defaultValue.defined(object1); - const object2Defined = defaultValue.defined(object2); - let property; - let object1Value; - let object2Value; - if (object1Defined) { - for (property in object1) { - if (object1.hasOwnProperty(property)) { - object1Value = object1[property]; - if ( - object2Defined && - deep && - typeof object1Value === "object" && - object2.hasOwnProperty(property) - ) { - object2Value = object2[property]; - if (typeof object2Value === "object") { - result[property] = combine(object1Value, object2Value, deep); - } else { - result[property] = object1Value; - } - } else { - result[property] = object1Value; - } - } - } - } - if (object2Defined) { - for (property in object2) { - if ( - object2.hasOwnProperty(property) && - !result.hasOwnProperty(property) - ) { - object2Value = object2[property]; - result[property] = object2Value; - } - } - } - return result; - } - - exports.combine = combine; - -})); -//# sourceMappingURL=combine-4598d225.js.map diff --git a/debug/cesium/Workers/combine-4598d225.js.map b/debug/cesium/Workers/combine-4598d225.js.map deleted file mode 100644 index 86b9668..0000000 --- a/debug/cesium/Workers/combine-4598d225.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"combine-4598d225.js","sources":["../../../Source/Core/combine.js"],"sourcesContent":["import defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\n\r\n/**\r\n * Merges two objects, copying their properties onto a new combined object. When two objects have the same\r\n * property, the value of the property on the first object is used. If either object is undefined,\r\n * it will be treated as an empty object.\r\n *\r\n * @example\r\n * const object1 = {\r\n * propOne : 1,\r\n * propTwo : {\r\n * value1 : 10\r\n * }\r\n * }\r\n * const object2 = {\r\n * propTwo : 2\r\n * }\r\n * const final = Cesium.combine(object1, object2);\r\n *\r\n * // final === {\r\n * // propOne : 1,\r\n * // propTwo : {\r\n * // value1 : 10\r\n * // }\r\n * // }\r\n *\r\n * @param {Object} [object1] The first object to merge.\r\n * @param {Object} [object2] The second object to merge.\r\n * @param {Boolean} [deep=false] Perform a recursive merge.\r\n * @returns {Object} The combined object containing all properties from both objects.\r\n *\r\n * @function\r\n */\r\nfunction combine(object1, object2, deep) {\r\n deep = defaultValue(deep, false);\r\n\r\n const result = {};\r\n\r\n const object1Defined = defined(object1);\r\n const object2Defined = defined(object2);\r\n let property;\r\n let object1Value;\r\n let object2Value;\r\n if (object1Defined) {\r\n for (property in object1) {\r\n if (object1.hasOwnProperty(property)) {\r\n object1Value = object1[property];\r\n if (\r\n object2Defined &&\r\n deep &&\r\n typeof object1Value === \"object\" &&\r\n object2.hasOwnProperty(property)\r\n ) {\r\n object2Value = object2[property];\r\n if (typeof object2Value === \"object\") {\r\n result[property] = combine(object1Value, object2Value, deep);\r\n } else {\r\n result[property] = object1Value;\r\n }\r\n } else {\r\n result[property] = object1Value;\r\n }\r\n }\r\n }\r\n }\r\n if (object2Defined) {\r\n for (property in object2) {\r\n if (\r\n object2.hasOwnProperty(property) &&\r\n !result.hasOwnProperty(property)\r\n ) {\r\n object2Value = object2[property];\r\n result[property] = object2Value;\r\n }\r\n }\r\n }\r\n return result;\r\n}\r\nexport default combine;\r\n"],"names":["defaultValue","defined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;EACzC,EAAE,IAAI,GAAGA,yBAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACnC;EACA,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB;EACA,EAAE,MAAM,cAAc,GAAGC,oBAAO,CAAC,OAAO,CAAC,CAAC;EAC1C,EAAE,MAAM,cAAc,GAAGA,oBAAO,CAAC,OAAO,CAAC,CAAC;EAC1C,EAAE,IAAI,QAAQ,CAAC;EACf,EAAE,IAAI,YAAY,CAAC;EACnB,EAAE,IAAI,YAAY,CAAC;EACnB,EAAE,IAAI,cAAc,EAAE;EACtB,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE;EAC9B,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;EAC5C,QAAQ,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;EACzC,QAAQ;EACR,UAAU,cAAc;EACxB,UAAU,IAAI;EACd,UAAU,OAAO,YAAY,KAAK,QAAQ;EAC1C,UAAU,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC;EAC1C,UAAU;EACV,UAAU,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;EAC3C,UAAU,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;EAChD,YAAY,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;EACzE,WAAW,MAAM;EACjB,YAAY,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;EAC5C,WAAW;EACX,SAAS,MAAM;EACf,UAAU,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;EAC1C,SAAS;EACT,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,IAAI,cAAc,EAAE;EACtB,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE;EAC9B,MAAM;EACN,QAAQ,OAAO,CAAC,cAAc,CAAC,QAAQ,CAAC;EACxC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC;EACxC,QAAQ;EACR,QAAQ,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;EACzC,QAAQ,MAAM,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;EACxC,OAAO;EACP,KAAK;EACL,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/combineGeometry.js b/debug/cesium/Workers/combineGeometry.js deleted file mode 100644 index e032c6e..0000000 --- a/debug/cesium/Workers/combineGeometry.js +++ /dev/null @@ -1,43 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./PrimitivePipeline-f6d2b3b0', './createTaskProcessorWorker', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryPipeline-f28890f4', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './IndexDatatype-b4e5cf89', './IntersectionTests-2c7928de', './Plane-c9f1487d', './WebMercatorProjection-306f7acc'], (function (PrimitivePipeline, createTaskProcessorWorker, Transforms, Matrix3, Check, defaultValue, Math, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, GeometryPipeline, AttributeCompression, EncodedCartesian3, IndexDatatype, IntersectionTests, Plane, WebMercatorProjection) { 'use strict'; - - function combineGeometry(packedParameters, transferableObjects) { - const parameters = PrimitivePipeline.PrimitivePipeline.unpackCombineGeometryParameters( - packedParameters - ); - const results = PrimitivePipeline.PrimitivePipeline.combineGeometry(parameters); - return PrimitivePipeline.PrimitivePipeline.packCombineGeometryResults( - results, - transferableObjects - ); - } - var combineGeometry$1 = createTaskProcessorWorker(combineGeometry); - - return combineGeometry$1; - -})); -//# sourceMappingURL=combineGeometry.js.map diff --git a/debug/cesium/Workers/combineGeometry.js.map b/debug/cesium/Workers/combineGeometry.js.map deleted file mode 100644 index 18f73cc..0000000 --- a/debug/cesium/Workers/combineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"combineGeometry.js","sources":["../../../Source/WorkersES6/combineGeometry.js"],"sourcesContent":["import PrimitivePipeline from \"../Scene/PrimitivePipeline.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nfunction combineGeometry(packedParameters, transferableObjects) {\r\n const parameters = PrimitivePipeline.unpackCombineGeometryParameters(\r\n packedParameters\r\n );\r\n const results = PrimitivePipeline.combineGeometry(parameters);\r\n return PrimitivePipeline.packCombineGeometryResults(\r\n results,\r\n transferableObjects\r\n );\r\n}\r\nexport default createTaskProcessorWorker(combineGeometry);\r\n"],"names":["PrimitivePipeline"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAGA,SAAS,eAAe,CAAC,gBAAgB,EAAE,mBAAmB,EAAE;EAChE,EAAE,MAAM,UAAU,GAAGA,mCAAiB,CAAC,+BAA+B;EACtE,IAAI,gBAAgB;EACpB,GAAG,CAAC;EACJ,EAAE,MAAM,OAAO,GAAGA,mCAAiB,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;EAChE,EAAE,OAAOA,mCAAiB,CAAC,0BAA0B;EACrD,IAAI,OAAO;EACX,IAAI,mBAAmB;EACvB,GAAG,CAAC;EACJ,CAAC;AACD,0BAAe,yBAAyB,CAAC,eAAe,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createBoxGeometry.js b/debug/cesium/Workers/createBoxGeometry.js deleted file mode 100644 index 4f0c99f..0000000 --- a/debug/cesium/Workers/createBoxGeometry.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./BoxGeometry-2c7f2d2d', './defaultValue-0ab18f7d', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './VertexFormat-f2d74c96'], (function (BoxGeometry, defaultValue, Transforms, Matrix3, Check, Math, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, VertexFormat) { 'use strict'; - - function createBoxGeometry(boxGeometry, offset) { - if (defaultValue.defined(offset)) { - boxGeometry = BoxGeometry.BoxGeometry.unpack(boxGeometry, offset); - } - return BoxGeometry.BoxGeometry.createGeometry(boxGeometry); - } - - return createBoxGeometry; - -})); -//# sourceMappingURL=createBoxGeometry.js.map diff --git a/debug/cesium/Workers/createBoxGeometry.js.map b/debug/cesium/Workers/createBoxGeometry.js.map deleted file mode 100644 index 0c7d199..0000000 --- a/debug/cesium/Workers/createBoxGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createBoxGeometry.js","sources":["../../../Source/WorkersES6/createBoxGeometry.js"],"sourcesContent":["import BoxGeometry from \"../Core/BoxGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\n\r\nfunction createBoxGeometry(boxGeometry, offset) {\r\n if (defined(offset)) {\r\n boxGeometry = BoxGeometry.unpack(boxGeometry, offset);\r\n }\r\n return BoxGeometry.createGeometry(boxGeometry);\r\n}\r\nexport default createBoxGeometry;\r\n"],"names":["defined","BoxGeometry"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAGA,SAAS,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE;EAChD,EAAE,IAAIA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,WAAW,GAAGC,uBAAW,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;EAC1D,GAAG;EACH,EAAE,OAAOA,uBAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;EACjD;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createBoxOutlineGeometry.js b/debug/cesium/Workers/createBoxOutlineGeometry.js deleted file mode 100644 index e3cf5f1..0000000 --- a/debug/cesium/Workers/createBoxOutlineGeometry.js +++ /dev/null @@ -1,339 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29'], (function (Transforms, Matrix3, Check, ComponentDatatype, defaultValue, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, Math, Matrix2, RuntimeError, combine, WebGLConstants) { 'use strict'; - - const diffScratch = new Matrix3.Cartesian3(); - - /** - * A description of the outline of a cube centered at the origin. - * - * @alias BoxOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.minimum The minimum x, y, and z coordinates of the box. - * @param {Cartesian3} options.maximum The maximum x, y, and z coordinates of the box. - * - * @see BoxOutlineGeometry.fromDimensions - * @see BoxOutlineGeometry.createGeometry - * @see Packable - * - * @example - * const box = new Cesium.BoxOutlineGeometry({ - * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0), - * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0) - * }); - * const geometry = Cesium.BoxOutlineGeometry.createGeometry(box); - */ - function BoxOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const min = options.minimum; - const max = options.maximum; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("min", min); - Check.Check.typeOf.object("max", max); - if ( - defaultValue.defined(options.offsetAttribute) && - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP - ) { - throw new Check.DeveloperError( - "GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry." - ); - } - //>>includeEnd('debug'); - - this._min = Matrix3.Cartesian3.clone(min); - this._max = Matrix3.Cartesian3.clone(max); - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createBoxOutlineGeometry"; - } - - /** - * Creates an outline of a cube centered at the origin given its dimensions. - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.dimensions The width, depth, and height of the box stored in the x, y, and z coordinates of the Cartesian3, respectively. - * @returns {BoxOutlineGeometry} - * - * @exception {DeveloperError} All dimensions components must be greater than or equal to zero. - * - * - * @example - * const box = Cesium.BoxOutlineGeometry.fromDimensions({ - * dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0) - * }); - * const geometry = Cesium.BoxOutlineGeometry.createGeometry(box); - * - * @see BoxOutlineGeometry.createGeometry - */ - BoxOutlineGeometry.fromDimensions = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const dimensions = options.dimensions; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("dimensions", dimensions); - Check.Check.typeOf.number.greaterThanOrEquals("dimensions.x", dimensions.x, 0); - Check.Check.typeOf.number.greaterThanOrEquals("dimensions.y", dimensions.y, 0); - Check.Check.typeOf.number.greaterThanOrEquals("dimensions.z", dimensions.z, 0); - //>>includeEnd('debug'); - - const corner = Matrix3.Cartesian3.multiplyByScalar(dimensions, 0.5, new Matrix3.Cartesian3()); - - return new BoxOutlineGeometry({ - minimum: Matrix3.Cartesian3.negate(corner, new Matrix3.Cartesian3()), - maximum: corner, - offsetAttribute: options.offsetAttribute, - }); - }; - - /** - * Creates an outline of a cube from the dimensions of an AxisAlignedBoundingBox. - * - * @param {AxisAlignedBoundingBox} boundingBox A description of the AxisAlignedBoundingBox. - * @returns {BoxOutlineGeometry} - * - * - * - * @example - * const aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ])); - * const box = Cesium.BoxOutlineGeometry.fromAxisAlignedBoundingBox(aabb); - * - * @see BoxOutlineGeometry.createGeometry - */ - BoxOutlineGeometry.fromAxisAlignedBoundingBox = function (boundingBox) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("boundindBox", boundingBox); - //>>includeEnd('debug'); - - return new BoxOutlineGeometry({ - minimum: boundingBox.minimum, - maximum: boundingBox.maximum, - }); - }; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - BoxOutlineGeometry.packedLength = 2 * Matrix3.Cartesian3.packedLength + 1; - - /** - * Stores the provided instance into the provided array. - * - * @param {BoxOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - BoxOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix3.Cartesian3.pack(value._min, array, startingIndex); - Matrix3.Cartesian3.pack(value._max, array, startingIndex + Matrix3.Cartesian3.packedLength); - array[startingIndex + Matrix3.Cartesian3.packedLength * 2] = defaultValue.defaultValue( - value._offsetAttribute, - -1 - ); - - return array; - }; - - const scratchMin = new Matrix3.Cartesian3(); - const scratchMax = new Matrix3.Cartesian3(); - const scratchOptions = { - minimum: scratchMin, - maximum: scratchMax, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {BoxOutlineGeometry} [result] The object into which to store the result. - * @returns {BoxOutlineGeometry} The modified result parameter or a new BoxOutlineGeometry instance if one was not provided. - */ - BoxOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const min = Matrix3.Cartesian3.unpack(array, startingIndex, scratchMin); - const max = Matrix3.Cartesian3.unpack( - array, - startingIndex + Matrix3.Cartesian3.packedLength, - scratchMax - ); - const offsetAttribute = array[startingIndex + Matrix3.Cartesian3.packedLength * 2]; - - if (!defaultValue.defined(result)) { - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - return new BoxOutlineGeometry(scratchOptions); - } - - result._min = Matrix3.Cartesian3.clone(min, result._min); - result._max = Matrix3.Cartesian3.clone(max, result._max); - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the geometric representation of an outline of a box, including its vertices, indices, and a bounding sphere. - * - * @param {BoxOutlineGeometry} boxGeometry A description of the box outline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - BoxOutlineGeometry.createGeometry = function (boxGeometry) { - const min = boxGeometry._min; - const max = boxGeometry._max; - - if (Matrix3.Cartesian3.equals(min, max)) { - return; - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - const indices = new Uint16Array(12 * 2); - const positions = new Float64Array(8 * 3); - - positions[0] = min.x; - positions[1] = min.y; - positions[2] = min.z; - positions[3] = max.x; - positions[4] = min.y; - positions[5] = min.z; - positions[6] = max.x; - positions[7] = max.y; - positions[8] = min.z; - positions[9] = min.x; - positions[10] = max.y; - positions[11] = min.z; - - positions[12] = min.x; - positions[13] = min.y; - positions[14] = max.z; - positions[15] = max.x; - positions[16] = min.y; - positions[17] = max.z; - positions[18] = max.x; - positions[19] = max.y; - positions[20] = max.z; - positions[21] = min.x; - positions[22] = max.y; - positions[23] = max.z; - - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - - // top - indices[0] = 4; - indices[1] = 5; - indices[2] = 5; - indices[3] = 6; - indices[4] = 6; - indices[5] = 7; - indices[6] = 7; - indices[7] = 4; - - // bottom - indices[8] = 0; - indices[9] = 1; - indices[10] = 1; - indices[11] = 2; - indices[12] = 2; - indices[13] = 3; - indices[14] = 3; - indices[15] = 0; - - // left - indices[16] = 0; - indices[17] = 4; - indices[18] = 1; - indices[19] = 5; - - //right - indices[20] = 2; - indices[21] = 6; - indices[22] = 3; - indices[23] = 7; - - const diff = Matrix3.Cartesian3.subtract(max, min, diffScratch); - const radius = Matrix3.Cartesian3.magnitude(diff) * 0.5; - - if (defaultValue.defined(boxGeometry._offsetAttribute)) { - const length = positions.length; - const offsetValue = - boxGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: new Transforms.BoundingSphere(Matrix3.Cartesian3.ZERO, radius), - offsetAttribute: boxGeometry._offsetAttribute, - }); - }; - - function createBoxOutlineGeometry(boxGeometry, offset) { - if (defaultValue.defined(offset)) { - boxGeometry = BoxOutlineGeometry.unpack(boxGeometry, offset); - } - return BoxOutlineGeometry.createGeometry(boxGeometry); - } - - return createBoxOutlineGeometry; - -})); -//# sourceMappingURL=createBoxOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createBoxOutlineGeometry.js.map b/debug/cesium/Workers/createBoxOutlineGeometry.js.map deleted file mode 100644 index 146b99f..0000000 --- a/debug/cesium/Workers/createBoxOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createBoxOutlineGeometry.js","sources":["../../../Source/Core/BoxOutlineGeometry.js","../../../Source/WorkersES6/createBoxOutlineGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\n\r\nconst diffScratch = new Cartesian3();\r\n\r\n/**\r\n * A description of the outline of a cube centered at the origin.\r\n *\r\n * @alias BoxOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.minimum The minimum x, y, and z coordinates of the box.\r\n * @param {Cartesian3} options.maximum The maximum x, y, and z coordinates of the box.\r\n *\r\n * @see BoxOutlineGeometry.fromDimensions\r\n * @see BoxOutlineGeometry.createGeometry\r\n * @see Packable\r\n *\r\n * @example\r\n * const box = new Cesium.BoxOutlineGeometry({\r\n * maximum : new Cesium.Cartesian3(250000.0, 250000.0, 250000.0),\r\n * minimum : new Cesium.Cartesian3(-250000.0, -250000.0, -250000.0)\r\n * });\r\n * const geometry = Cesium.BoxOutlineGeometry.createGeometry(box);\r\n */\r\nfunction BoxOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const min = options.minimum;\r\n const max = options.maximum;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"min\", min);\r\n Check.typeOf.object(\"max\", max);\r\n if (\r\n defined(options.offsetAttribute) &&\r\n options.offsetAttribute === GeometryOffsetAttribute.TOP\r\n ) {\r\n throw new DeveloperError(\r\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._min = Cartesian3.clone(min);\r\n this._max = Cartesian3.clone(max);\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createBoxOutlineGeometry\";\r\n}\r\n\r\n/**\r\n * Creates an outline of a cube centered at the origin given its dimensions.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.dimensions The width, depth, and height of the box stored in the x, y, and z coordinates of the Cartesian3, respectively.\r\n * @returns {BoxOutlineGeometry}\r\n *\r\n * @exception {DeveloperError} All dimensions components must be greater than or equal to zero.\r\n *\r\n *\r\n * @example\r\n * const box = Cesium.BoxOutlineGeometry.fromDimensions({\r\n * dimensions : new Cesium.Cartesian3(500000.0, 500000.0, 500000.0)\r\n * });\r\n * const geometry = Cesium.BoxOutlineGeometry.createGeometry(box);\r\n *\r\n * @see BoxOutlineGeometry.createGeometry\r\n */\r\nBoxOutlineGeometry.fromDimensions = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const dimensions = options.dimensions;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"dimensions\", dimensions);\r\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.x\", dimensions.x, 0);\r\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.y\", dimensions.y, 0);\r\n Check.typeOf.number.greaterThanOrEquals(\"dimensions.z\", dimensions.z, 0);\r\n //>>includeEnd('debug');\r\n\r\n const corner = Cartesian3.multiplyByScalar(dimensions, 0.5, new Cartesian3());\r\n\r\n return new BoxOutlineGeometry({\r\n minimum: Cartesian3.negate(corner, new Cartesian3()),\r\n maximum: corner,\r\n offsetAttribute: options.offsetAttribute,\r\n });\r\n};\r\n\r\n/**\r\n * Creates an outline of a cube from the dimensions of an AxisAlignedBoundingBox.\r\n *\r\n * @param {AxisAlignedBoundingBox} boundingBox A description of the AxisAlignedBoundingBox.\r\n * @returns {BoxOutlineGeometry}\r\n *\r\n *\r\n *\r\n * @example\r\n * const aabb = Cesium.AxisAlignedBoundingBox.fromPoints(Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ]));\r\n * const box = Cesium.BoxOutlineGeometry.fromAxisAlignedBoundingBox(aabb);\r\n *\r\n * @see BoxOutlineGeometry.createGeometry\r\n */\r\nBoxOutlineGeometry.fromAxisAlignedBoundingBox = function (boundingBox) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"boundindBox\", boundingBox);\r\n //>>includeEnd('debug');\r\n\r\n return new BoxOutlineGeometry({\r\n minimum: boundingBox.minimum,\r\n maximum: boundingBox.maximum,\r\n });\r\n};\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nBoxOutlineGeometry.packedLength = 2 * Cartesian3.packedLength + 1;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {BoxOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nBoxOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Cartesian3.pack(value._min, array, startingIndex);\r\n Cartesian3.pack(value._max, array, startingIndex + Cartesian3.packedLength);\r\n array[startingIndex + Cartesian3.packedLength * 2] = defaultValue(\r\n value._offsetAttribute,\r\n -1\r\n );\r\n\r\n return array;\r\n};\r\n\r\nconst scratchMin = new Cartesian3();\r\nconst scratchMax = new Cartesian3();\r\nconst scratchOptions = {\r\n minimum: scratchMin,\r\n maximum: scratchMax,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {BoxOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {BoxOutlineGeometry} The modified result parameter or a new BoxOutlineGeometry instance if one was not provided.\r\n */\r\nBoxOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const min = Cartesian3.unpack(array, startingIndex, scratchMin);\r\n const max = Cartesian3.unpack(\r\n array,\r\n startingIndex + Cartesian3.packedLength,\r\n scratchMax\r\n );\r\n const offsetAttribute = array[startingIndex + Cartesian3.packedLength * 2];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n return new BoxOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._min = Cartesian3.clone(min, result._min);\r\n result._max = Cartesian3.clone(max, result._max);\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an outline of a box, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {BoxOutlineGeometry} boxGeometry A description of the box outline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nBoxOutlineGeometry.createGeometry = function (boxGeometry) {\r\n const min = boxGeometry._min;\r\n const max = boxGeometry._max;\r\n\r\n if (Cartesian3.equals(min, max)) {\r\n return;\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n const indices = new Uint16Array(12 * 2);\r\n const positions = new Float64Array(8 * 3);\r\n\r\n positions[0] = min.x;\r\n positions[1] = min.y;\r\n positions[2] = min.z;\r\n positions[3] = max.x;\r\n positions[4] = min.y;\r\n positions[5] = min.z;\r\n positions[6] = max.x;\r\n positions[7] = max.y;\r\n positions[8] = min.z;\r\n positions[9] = min.x;\r\n positions[10] = max.y;\r\n positions[11] = min.z;\r\n\r\n positions[12] = min.x;\r\n positions[13] = min.y;\r\n positions[14] = max.z;\r\n positions[15] = max.x;\r\n positions[16] = min.y;\r\n positions[17] = max.z;\r\n positions[18] = max.x;\r\n positions[19] = max.y;\r\n positions[20] = max.z;\r\n positions[21] = min.x;\r\n positions[22] = max.y;\r\n positions[23] = max.z;\r\n\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n\r\n // top\r\n indices[0] = 4;\r\n indices[1] = 5;\r\n indices[2] = 5;\r\n indices[3] = 6;\r\n indices[4] = 6;\r\n indices[5] = 7;\r\n indices[6] = 7;\r\n indices[7] = 4;\r\n\r\n // bottom\r\n indices[8] = 0;\r\n indices[9] = 1;\r\n indices[10] = 1;\r\n indices[11] = 2;\r\n indices[12] = 2;\r\n indices[13] = 3;\r\n indices[14] = 3;\r\n indices[15] = 0;\r\n\r\n // left\r\n indices[16] = 0;\r\n indices[17] = 4;\r\n indices[18] = 1;\r\n indices[19] = 5;\r\n\r\n //right\r\n indices[20] = 2;\r\n indices[21] = 6;\r\n indices[22] = 3;\r\n indices[23] = 7;\r\n\r\n const diff = Cartesian3.subtract(max, min, diffScratch);\r\n const radius = Cartesian3.magnitude(diff) * 0.5;\r\n\r\n if (defined(boxGeometry._offsetAttribute)) {\r\n const length = positions.length;\r\n const offsetValue =\r\n boxGeometry._offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: new BoundingSphere(Cartesian3.ZERO, radius),\r\n offsetAttribute: boxGeometry._offsetAttribute,\r\n });\r\n};\r\nexport default BoxOutlineGeometry;\r\n","import BoxOutlineGeometry from \"../Core/BoxOutlineGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\n\r\nfunction createBoxOutlineGeometry(boxGeometry, offset) {\r\n if (defined(offset)) {\r\n boxGeometry = BoxOutlineGeometry.unpack(boxGeometry, offset);\r\n }\r\n return BoxOutlineGeometry.createGeometry(boxGeometry);\r\n}\r\nexport default createBoxOutlineGeometry;\r\n"],"names":["Cartesian3","defaultValue","Check","defined","GeometryOffsetAttribute","DeveloperError","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACvB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACxB;EACA,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACxB,EAAE,SAAS,CAA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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createCircleGeometry.js b/debug/cesium/Workers/createCircleGeometry.js deleted file mode 100644 index e5adf7a..0000000 --- a/debug/cesium/Workers/createCircleGeometry.js +++ /dev/null @@ -1,239 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './EllipseGeometry-6f0c1448', './VertexFormat-f2d74c96', './Math-9be8b918', './Transforms-11fb6b0a', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './EllipseGeometryLibrary-d3f88cc2', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryInstance-b2be3e5a', './GeometryOffsetAttribute-cc320d7d', './GeometryPipeline-f28890f4', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './IndexDatatype-b4e5cf89', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (Matrix3, Check, defaultValue, EllipseGeometry, VertexFormat, Math, Transforms, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, EllipseGeometryLibrary, GeometryAttribute, GeometryAttributes, GeometryInstance, GeometryOffsetAttribute, GeometryPipeline, AttributeCompression, EncodedCartesian3, IndexDatatype, IntersectionTests, Plane) { 'use strict'; - - /** - * A description of a circle on the ellipsoid. Circle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. - * - * @alias CircleGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.center The circle's center point in the fixed frame. - * @param {Number} options.radius The radius in meters. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the circle will be on. - * @param {Number} [options.height=0.0] The distance in meters between the circle and the ellipsoid surface. - * @param {Number} [options.granularity=0.02] The angular distance between points on the circle in radians. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {Number} [options.extrudedHeight=0.0] The distance in meters between the circle's extruded face and the ellipsoid surface. - * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. - * - * @exception {DeveloperError} radius must be greater than zero. - * @exception {DeveloperError} granularity must be greater than zero. - * - * @see CircleGeometry.createGeometry - * @see Packable - * - * @example - * // Create a circle. - * const circle = new Cesium.CircleGeometry({ - * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), - * radius : 100000.0 - * }); - * const geometry = Cesium.CircleGeometry.createGeometry(circle); - */ - function CircleGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const radius = options.radius; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("radius", radius); - //>>includeEnd('debug'); - - const ellipseGeometryOptions = { - center: options.center, - semiMajorAxis: radius, - semiMinorAxis: radius, - ellipsoid: options.ellipsoid, - height: options.height, - extrudedHeight: options.extrudedHeight, - granularity: options.granularity, - vertexFormat: options.vertexFormat, - stRotation: options.stRotation, - shadowVolume: options.shadowVolume, - }; - this._ellipseGeometry = new EllipseGeometry.EllipseGeometry(ellipseGeometryOptions); - this._workerName = "createCircleGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - CircleGeometry.packedLength = EllipseGeometry.EllipseGeometry.packedLength; - - /** - * Stores the provided instance into the provided array. - * - * @param {CircleGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - CircleGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - //>>includeEnd('debug'); - return EllipseGeometry.EllipseGeometry.pack(value._ellipseGeometry, array, startingIndex); - }; - - const scratchEllipseGeometry = new EllipseGeometry.EllipseGeometry({ - center: new Matrix3.Cartesian3(), - semiMajorAxis: 1.0, - semiMinorAxis: 1.0, - }); - const scratchOptions = { - center: new Matrix3.Cartesian3(), - radius: undefined, - ellipsoid: Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE), - height: undefined, - extrudedHeight: undefined, - granularity: undefined, - vertexFormat: new VertexFormat.VertexFormat(), - stRotation: undefined, - semiMajorAxis: undefined, - semiMinorAxis: undefined, - shadowVolume: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {CircleGeometry} [result] The object into which to store the result. - * @returns {CircleGeometry} The modified result parameter or a new CircleGeometry instance if one was not provided. - */ - CircleGeometry.unpack = function (array, startingIndex, result) { - const ellipseGeometry = EllipseGeometry.EllipseGeometry.unpack( - array, - startingIndex, - scratchEllipseGeometry - ); - scratchOptions.center = Matrix3.Cartesian3.clone( - ellipseGeometry._center, - scratchOptions.center - ); - scratchOptions.ellipsoid = Matrix3.Ellipsoid.clone( - ellipseGeometry._ellipsoid, - scratchOptions.ellipsoid - ); - scratchOptions.height = ellipseGeometry._height; - scratchOptions.extrudedHeight = ellipseGeometry._extrudedHeight; - scratchOptions.granularity = ellipseGeometry._granularity; - scratchOptions.vertexFormat = VertexFormat.VertexFormat.clone( - ellipseGeometry._vertexFormat, - scratchOptions.vertexFormat - ); - scratchOptions.stRotation = ellipseGeometry._stRotation; - scratchOptions.shadowVolume = ellipseGeometry._shadowVolume; - - if (!defaultValue.defined(result)) { - scratchOptions.radius = ellipseGeometry._semiMajorAxis; - return new CircleGeometry(scratchOptions); - } - - scratchOptions.semiMajorAxis = ellipseGeometry._semiMajorAxis; - scratchOptions.semiMinorAxis = ellipseGeometry._semiMinorAxis; - result._ellipseGeometry = new EllipseGeometry.EllipseGeometry(scratchOptions); - return result; - }; - - /** - * Computes the geometric representation of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere. - * - * @param {CircleGeometry} circleGeometry A description of the circle. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - CircleGeometry.createGeometry = function (circleGeometry) { - return EllipseGeometry.EllipseGeometry.createGeometry(circleGeometry._ellipseGeometry); - }; - - /** - * @private - */ - CircleGeometry.createShadowVolume = function ( - circleGeometry, - minHeightFunc, - maxHeightFunc - ) { - const granularity = circleGeometry._ellipseGeometry._granularity; - const ellipsoid = circleGeometry._ellipseGeometry._ellipsoid; - - const minHeight = minHeightFunc(granularity, ellipsoid); - const maxHeight = maxHeightFunc(granularity, ellipsoid); - - return new CircleGeometry({ - center: circleGeometry._ellipseGeometry._center, - radius: circleGeometry._ellipseGeometry._semiMajorAxis, - ellipsoid: ellipsoid, - stRotation: circleGeometry._ellipseGeometry._stRotation, - granularity: granularity, - extrudedHeight: minHeight, - height: maxHeight, - vertexFormat: VertexFormat.VertexFormat.POSITION_ONLY, - shadowVolume: true, - }); - }; - - Object.defineProperties(CircleGeometry.prototype, { - /** - * @private - */ - rectangle: { - get: function () { - return this._ellipseGeometry.rectangle; - }, - }, - /** - * For remapping texture coordinates when rendering CircleGeometries as GroundPrimitives. - * @private - */ - textureCoordinateRotationPoints: { - get: function () { - return this._ellipseGeometry.textureCoordinateRotationPoints; - }, - }, - }); - - function createCircleGeometry(circleGeometry, offset) { - if (defaultValue.defined(offset)) { - circleGeometry = CircleGeometry.unpack(circleGeometry, offset); - } - circleGeometry._ellipseGeometry._center = Matrix3.Cartesian3.clone( - circleGeometry._ellipseGeometry._center - ); - circleGeometry._ellipseGeometry._ellipsoid = Matrix3.Ellipsoid.clone( - circleGeometry._ellipseGeometry._ellipsoid - ); - return CircleGeometry.createGeometry(circleGeometry); - } - - return createCircleGeometry; - -})); -//# sourceMappingURL=createCircleGeometry.js.map diff --git a/debug/cesium/Workers/createCircleGeometry.js.map b/debug/cesium/Workers/createCircleGeometry.js.map deleted file mode 100644 index 4c21c95..0000000 --- a/debug/cesium/Workers/createCircleGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createCircleGeometry.js","sources":["../../../Source/Core/CircleGeometry.js","../../../Source/WorkersES6/createCircleGeometry.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport EllipseGeometry from \"./EllipseGeometry.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\n/**\r\n * A description of a circle on the ellipsoid. Circle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\r\n *\r\n * @alias CircleGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.center The circle's center point in the fixed frame.\r\n * @param {Number} options.radius The radius in meters.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the circle will be on.\r\n * @param {Number} [options.height=0.0] The distance in meters between the circle and the ellipsoid surface.\r\n * @param {Number} [options.granularity=0.02] The angular distance between points on the circle in radians.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {Number} [options.extrudedHeight=0.0] The distance in meters between the circle's extruded face and the ellipsoid surface.\r\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\r\n *\r\n * @exception {DeveloperError} radius must be greater than zero.\r\n * @exception {DeveloperError} granularity must be greater than zero.\r\n *\r\n * @see CircleGeometry.createGeometry\r\n * @see Packable\r\n *\r\n * @example\r\n * // Create a circle.\r\n * const circle = new Cesium.CircleGeometry({\r\n * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\r\n * radius : 100000.0\r\n * });\r\n * const geometry = Cesium.CircleGeometry.createGeometry(circle);\r\n */\r\nfunction CircleGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const radius = options.radius;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"radius\", radius);\r\n //>>includeEnd('debug');\r\n\r\n const ellipseGeometryOptions = {\r\n center: options.center,\r\n semiMajorAxis: radius,\r\n semiMinorAxis: radius,\r\n ellipsoid: options.ellipsoid,\r\n height: options.height,\r\n extrudedHeight: options.extrudedHeight,\r\n granularity: options.granularity,\r\n vertexFormat: options.vertexFormat,\r\n stRotation: options.stRotation,\r\n shadowVolume: options.shadowVolume,\r\n };\r\n this._ellipseGeometry = new EllipseGeometry(ellipseGeometryOptions);\r\n this._workerName = \"createCircleGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nCircleGeometry.packedLength = EllipseGeometry.packedLength;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {CircleGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCircleGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n //>>includeEnd('debug');\r\n return EllipseGeometry.pack(value._ellipseGeometry, array, startingIndex);\r\n};\r\n\r\nconst scratchEllipseGeometry = new EllipseGeometry({\r\n center: new Cartesian3(),\r\n semiMajorAxis: 1.0,\r\n semiMinorAxis: 1.0,\r\n});\r\nconst scratchOptions = {\r\n center: new Cartesian3(),\r\n radius: undefined,\r\n ellipsoid: Ellipsoid.clone(Ellipsoid.UNIT_SPHERE),\r\n height: undefined,\r\n extrudedHeight: undefined,\r\n granularity: undefined,\r\n vertexFormat: new VertexFormat(),\r\n stRotation: undefined,\r\n semiMajorAxis: undefined,\r\n semiMinorAxis: undefined,\r\n shadowVolume: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {CircleGeometry} [result] The object into which to store the result.\r\n * @returns {CircleGeometry} The modified result parameter or a new CircleGeometry instance if one was not provided.\r\n */\r\nCircleGeometry.unpack = function (array, startingIndex, result) {\r\n const ellipseGeometry = EllipseGeometry.unpack(\r\n array,\r\n startingIndex,\r\n scratchEllipseGeometry\r\n );\r\n scratchOptions.center = Cartesian3.clone(\r\n ellipseGeometry._center,\r\n scratchOptions.center\r\n );\r\n scratchOptions.ellipsoid = Ellipsoid.clone(\r\n ellipseGeometry._ellipsoid,\r\n scratchOptions.ellipsoid\r\n );\r\n scratchOptions.height = ellipseGeometry._height;\r\n scratchOptions.extrudedHeight = ellipseGeometry._extrudedHeight;\r\n scratchOptions.granularity = ellipseGeometry._granularity;\r\n scratchOptions.vertexFormat = VertexFormat.clone(\r\n ellipseGeometry._vertexFormat,\r\n scratchOptions.vertexFormat\r\n );\r\n scratchOptions.stRotation = ellipseGeometry._stRotation;\r\n scratchOptions.shadowVolume = ellipseGeometry._shadowVolume;\r\n\r\n if (!defined(result)) {\r\n scratchOptions.radius = ellipseGeometry._semiMajorAxis;\r\n return new CircleGeometry(scratchOptions);\r\n }\r\n\r\n scratchOptions.semiMajorAxis = ellipseGeometry._semiMajorAxis;\r\n scratchOptions.semiMinorAxis = ellipseGeometry._semiMinorAxis;\r\n result._ellipseGeometry = new EllipseGeometry(scratchOptions);\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {CircleGeometry} circleGeometry A description of the circle.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nCircleGeometry.createGeometry = function (circleGeometry) {\r\n return EllipseGeometry.createGeometry(circleGeometry._ellipseGeometry);\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nCircleGeometry.createShadowVolume = function (\r\n circleGeometry,\r\n minHeightFunc,\r\n maxHeightFunc\r\n) {\r\n const granularity = circleGeometry._ellipseGeometry._granularity;\r\n const ellipsoid = circleGeometry._ellipseGeometry._ellipsoid;\r\n\r\n const minHeight = minHeightFunc(granularity, ellipsoid);\r\n const maxHeight = maxHeightFunc(granularity, ellipsoid);\r\n\r\n return new CircleGeometry({\r\n center: circleGeometry._ellipseGeometry._center,\r\n radius: circleGeometry._ellipseGeometry._semiMajorAxis,\r\n ellipsoid: ellipsoid,\r\n stRotation: circleGeometry._ellipseGeometry._stRotation,\r\n granularity: granularity,\r\n extrudedHeight: minHeight,\r\n height: maxHeight,\r\n vertexFormat: VertexFormat.POSITION_ONLY,\r\n shadowVolume: true,\r\n });\r\n};\r\n\r\nObject.defineProperties(CircleGeometry.prototype, {\r\n /**\r\n * @private\r\n */\r\n rectangle: {\r\n get: function () {\r\n return this._ellipseGeometry.rectangle;\r\n },\r\n },\r\n /**\r\n * For remapping texture coordinates when rendering CircleGeometries as GroundPrimitives.\r\n * @private\r\n */\r\n textureCoordinateRotationPoints: {\r\n get: function () {\r\n return this._ellipseGeometry.textureCoordinateRotationPoints;\r\n },\r\n },\r\n});\r\nexport default CircleGeometry;\r\n","import Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport CircleGeometry from \"../Core/CircleGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\n\r\nfunction createCircleGeometry(circleGeometry, offset) {\r\n if (defined(offset)) {\r\n circleGeometry = CircleGeometry.unpack(circleGeometry, offset);\r\n }\r\n circleGeometry._ellipseGeometry._center = Cartesian3.clone(\r\n circleGeometry._ellipseGeometry._center\r\n );\r\n circleGeometry._ellipseGeometry._ellipsoid = Ellipsoid.clone(\r\n circleGeometry._ellipseGeometry._ellipsoid\r\n );\r\n return CircleGeometry.createGeometry(circleGeometry);\r\n}\r\nexport default createCircleGeometry;\r\n"],"names":["defaultValue","Check","EllipseGeometry","Cartesian3","Ellipsoid","VertexFormat","defined"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createCircleOutlineGeometry.js b/debug/cesium/Workers/createCircleOutlineGeometry.js deleted file mode 100644 index 8e372bc..0000000 --- a/debug/cesium/Workers/createCircleOutlineGeometry.js +++ /dev/null @@ -1,186 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './EllipseOutlineGeometry-ea3faee0', './Math-9be8b918', './Transforms-11fb6b0a', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './EllipseGeometryLibrary-d3f88cc2', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89'], (function (Matrix3, Check, defaultValue, EllipseOutlineGeometry, Math, Transforms, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, EllipseGeometryLibrary, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype) { 'use strict'; - - /** - * A description of the outline of a circle on the ellipsoid. - * - * @alias CircleOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3} options.center The circle's center point in the fixed frame. - * @param {Number} options.radius The radius in meters. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the circle will be on. - * @param {Number} [options.height=0.0] The distance in meters between the circle and the ellipsoid surface. - * @param {Number} [options.granularity=0.02] The angular distance between points on the circle in radians. - * @param {Number} [options.extrudedHeight=0.0] The distance in meters between the circle's extruded face and the ellipsoid surface. - * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom of an extruded circle. - * - * @exception {DeveloperError} radius must be greater than zero. - * @exception {DeveloperError} granularity must be greater than zero. - * - * @see CircleOutlineGeometry.createGeometry - * @see Packable - * - * @example - * // Create a circle. - * const circle = new Cesium.CircleOutlineGeometry({ - * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883), - * radius : 100000.0 - * }); - * const geometry = Cesium.CircleOutlineGeometry.createGeometry(circle); - */ - function CircleOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const radius = options.radius; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("radius", radius); - //>>includeEnd('debug'); - - const ellipseGeometryOptions = { - center: options.center, - semiMajorAxis: radius, - semiMinorAxis: radius, - ellipsoid: options.ellipsoid, - height: options.height, - extrudedHeight: options.extrudedHeight, - granularity: options.granularity, - numberOfVerticalLines: options.numberOfVerticalLines, - }; - this._ellipseGeometry = new EllipseOutlineGeometry.EllipseOutlineGeometry(ellipseGeometryOptions); - this._workerName = "createCircleOutlineGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - CircleOutlineGeometry.packedLength = EllipseOutlineGeometry.EllipseOutlineGeometry.packedLength; - - /** - * Stores the provided instance into the provided array. - * - * @param {CircleOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - CircleOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - //>>includeEnd('debug'); - return EllipseOutlineGeometry.EllipseOutlineGeometry.pack( - value._ellipseGeometry, - array, - startingIndex - ); - }; - - const scratchEllipseGeometry = new EllipseOutlineGeometry.EllipseOutlineGeometry({ - center: new Matrix3.Cartesian3(), - semiMajorAxis: 1.0, - semiMinorAxis: 1.0, - }); - const scratchOptions = { - center: new Matrix3.Cartesian3(), - radius: undefined, - ellipsoid: Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE), - height: undefined, - extrudedHeight: undefined, - granularity: undefined, - numberOfVerticalLines: undefined, - semiMajorAxis: undefined, - semiMinorAxis: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {CircleOutlineGeometry} [result] The object into which to store the result. - * @returns {CircleOutlineGeometry} The modified result parameter or a new CircleOutlineGeometry instance if one was not provided. - */ - CircleOutlineGeometry.unpack = function (array, startingIndex, result) { - const ellipseGeometry = EllipseOutlineGeometry.EllipseOutlineGeometry.unpack( - array, - startingIndex, - scratchEllipseGeometry - ); - scratchOptions.center = Matrix3.Cartesian3.clone( - ellipseGeometry._center, - scratchOptions.center - ); - scratchOptions.ellipsoid = Matrix3.Ellipsoid.clone( - ellipseGeometry._ellipsoid, - scratchOptions.ellipsoid - ); - scratchOptions.height = ellipseGeometry._height; - scratchOptions.extrudedHeight = ellipseGeometry._extrudedHeight; - scratchOptions.granularity = ellipseGeometry._granularity; - scratchOptions.numberOfVerticalLines = ellipseGeometry._numberOfVerticalLines; - - if (!defaultValue.defined(result)) { - scratchOptions.radius = ellipseGeometry._semiMajorAxis; - return new CircleOutlineGeometry(scratchOptions); - } - - scratchOptions.semiMajorAxis = ellipseGeometry._semiMajorAxis; - scratchOptions.semiMinorAxis = ellipseGeometry._semiMinorAxis; - result._ellipseGeometry = new EllipseOutlineGeometry.EllipseOutlineGeometry(scratchOptions); - return result; - }; - - /** - * Computes the geometric representation of an outline of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere. - * - * @param {CircleOutlineGeometry} circleGeometry A description of the circle. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - CircleOutlineGeometry.createGeometry = function (circleGeometry) { - return EllipseOutlineGeometry.EllipseOutlineGeometry.createGeometry(circleGeometry._ellipseGeometry); - }; - - function createCircleOutlineGeometry(circleGeometry, offset) { - if (defaultValue.defined(offset)) { - circleGeometry = CircleOutlineGeometry.unpack(circleGeometry, offset); - } - circleGeometry._ellipseGeometry._center = Matrix3.Cartesian3.clone( - circleGeometry._ellipseGeometry._center - ); - circleGeometry._ellipseGeometry._ellipsoid = Matrix3.Ellipsoid.clone( - circleGeometry._ellipseGeometry._ellipsoid - ); - return CircleOutlineGeometry.createGeometry(circleGeometry); - } - - return createCircleOutlineGeometry; - -})); -//# sourceMappingURL=createCircleOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createCircleOutlineGeometry.js.map b/debug/cesium/Workers/createCircleOutlineGeometry.js.map deleted file mode 100644 index 2e27efb..0000000 --- a/debug/cesium/Workers/createCircleOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createCircleOutlineGeometry.js","sources":["../../../Source/Core/CircleOutlineGeometry.js","../../../Source/WorkersES6/createCircleOutlineGeometry.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport EllipseOutlineGeometry from \"./EllipseOutlineGeometry.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\n\r\n/**\r\n * A description of the outline of a circle on the ellipsoid.\r\n *\r\n * @alias CircleOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3} options.center The circle's center point in the fixed frame.\r\n * @param {Number} options.radius The radius in meters.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid the circle will be on.\r\n * @param {Number} [options.height=0.0] The distance in meters between the circle and the ellipsoid surface.\r\n * @param {Number} [options.granularity=0.02] The angular distance between points on the circle in radians.\r\n * @param {Number} [options.extrudedHeight=0.0] The distance in meters between the circle's extruded face and the ellipsoid surface.\r\n * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom of an extruded circle.\r\n *\r\n * @exception {DeveloperError} radius must be greater than zero.\r\n * @exception {DeveloperError} granularity must be greater than zero.\r\n *\r\n * @see CircleOutlineGeometry.createGeometry\r\n * @see Packable\r\n *\r\n * @example\r\n * // Create a circle.\r\n * const circle = new Cesium.CircleOutlineGeometry({\r\n * center : Cesium.Cartesian3.fromDegrees(-75.59777, 40.03883),\r\n * radius : 100000.0\r\n * });\r\n * const geometry = Cesium.CircleOutlineGeometry.createGeometry(circle);\r\n */\r\nfunction CircleOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const radius = options.radius;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"radius\", radius);\r\n //>>includeEnd('debug');\r\n\r\n const ellipseGeometryOptions = {\r\n center: options.center,\r\n semiMajorAxis: radius,\r\n semiMinorAxis: radius,\r\n ellipsoid: options.ellipsoid,\r\n height: options.height,\r\n extrudedHeight: options.extrudedHeight,\r\n granularity: options.granularity,\r\n numberOfVerticalLines: options.numberOfVerticalLines,\r\n };\r\n this._ellipseGeometry = new EllipseOutlineGeometry(ellipseGeometryOptions);\r\n this._workerName = \"createCircleOutlineGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nCircleOutlineGeometry.packedLength = EllipseOutlineGeometry.packedLength;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {CircleOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCircleOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n //>>includeEnd('debug');\r\n return EllipseOutlineGeometry.pack(\r\n value._ellipseGeometry,\r\n array,\r\n startingIndex\r\n );\r\n};\r\n\r\nconst scratchEllipseGeometry = new EllipseOutlineGeometry({\r\n center: new Cartesian3(),\r\n semiMajorAxis: 1.0,\r\n semiMinorAxis: 1.0,\r\n});\r\nconst scratchOptions = {\r\n center: new Cartesian3(),\r\n radius: undefined,\r\n ellipsoid: Ellipsoid.clone(Ellipsoid.UNIT_SPHERE),\r\n height: undefined,\r\n extrudedHeight: undefined,\r\n granularity: undefined,\r\n numberOfVerticalLines: undefined,\r\n semiMajorAxis: undefined,\r\n semiMinorAxis: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {CircleOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {CircleOutlineGeometry} The modified result parameter or a new CircleOutlineGeometry instance if one was not provided.\r\n */\r\nCircleOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n const ellipseGeometry = EllipseOutlineGeometry.unpack(\r\n array,\r\n startingIndex,\r\n scratchEllipseGeometry\r\n );\r\n scratchOptions.center = Cartesian3.clone(\r\n ellipseGeometry._center,\r\n scratchOptions.center\r\n );\r\n scratchOptions.ellipsoid = Ellipsoid.clone(\r\n ellipseGeometry._ellipsoid,\r\n scratchOptions.ellipsoid\r\n );\r\n scratchOptions.height = ellipseGeometry._height;\r\n scratchOptions.extrudedHeight = ellipseGeometry._extrudedHeight;\r\n scratchOptions.granularity = ellipseGeometry._granularity;\r\n scratchOptions.numberOfVerticalLines = ellipseGeometry._numberOfVerticalLines;\r\n\r\n if (!defined(result)) {\r\n scratchOptions.radius = ellipseGeometry._semiMajorAxis;\r\n return new CircleOutlineGeometry(scratchOptions);\r\n }\r\n\r\n scratchOptions.semiMajorAxis = ellipseGeometry._semiMajorAxis;\r\n scratchOptions.semiMinorAxis = ellipseGeometry._semiMinorAxis;\r\n result._ellipseGeometry = new EllipseOutlineGeometry(scratchOptions);\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an outline of a circle on an ellipsoid, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {CircleOutlineGeometry} circleGeometry A description of the circle.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nCircleOutlineGeometry.createGeometry = function (circleGeometry) {\r\n return EllipseOutlineGeometry.createGeometry(circleGeometry._ellipseGeometry);\r\n};\r\nexport default CircleOutlineGeometry;\r\n","import Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport CircleOutlineGeometry from \"../Core/CircleOutlineGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\n\r\nfunction createCircleOutlineGeometry(circleGeometry, offset) {\r\n if (defined(offset)) {\r\n circleGeometry = CircleOutlineGeometry.unpack(circleGeometry, offset);\r\n }\r\n circleGeometry._ellipseGeometry._center = Cartesian3.clone(\r\n circleGeometry._ellipseGeometry._center\r\n );\r\n circleGeometry._ellipseGeometry._ellipsoid = Ellipsoid.clone(\r\n circleGeometry._ellipseGeometry._ellipsoid\r\n );\r\n return CircleOutlineGeometry.createGeometry(circleGeometry);\r\n}\r\nexport default createCircleOutlineGeometry;\r\n"],"names":["defaultValue","Check","EllipseOutlineGeometry","Cartesian3","Ellipsoid","defined"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createCoplanarPolygonGeometry.js b/debug/cesium/Workers/createCoplanarPolygonGeometry.js deleted file mode 100644 index c7a5581..0000000 --- a/debug/cesium/Workers/createCoplanarPolygonGeometry.js +++ /dev/null @@ -1,612 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./arrayRemoveDuplicates-c3526030', './BoundingRectangle-6617ed83', './Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './CoplanarPolygonGeometryLibrary-dfba6465', './defaultValue-0ab18f7d', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryInstance-b2be3e5a', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonGeometryLibrary-62266ab5', './PolygonPipeline-313487c3', './VertexFormat-f2d74c96', './combine-4598d225', './RuntimeError-e5c6a8b9', './WebGLConstants-f27a5e29', './OrientedBoundingBox-7e2eebab', './EllipsoidTangentPlane-c421b2cb', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './ArcType-d608b872', './EllipsoidRhumbLine-48b4507b'], (function (arrayRemoveDuplicates, BoundingRectangle, Transforms, Matrix2, Matrix3, Check, ComponentDatatype, CoplanarPolygonGeometryLibrary, defaultValue, GeometryAttribute, GeometryAttributes, GeometryInstance, GeometryPipeline, IndexDatatype, Math, PolygonGeometryLibrary, PolygonPipeline, VertexFormat, combine, RuntimeError, WebGLConstants, OrientedBoundingBox, EllipsoidTangentPlane, AxisAlignedBoundingBox, IntersectionTests, Plane, AttributeCompression, EncodedCartesian3, ArcType, EllipsoidRhumbLine) { 'use strict'; - - const scratchPosition = new Matrix3.Cartesian3(); - const scratchBR = new BoundingRectangle.BoundingRectangle(); - const stScratch = new Matrix2.Cartesian2(); - const textureCoordinatesOrigin = new Matrix2.Cartesian2(); - const scratchNormal = new Matrix3.Cartesian3(); - const scratchTangent = new Matrix3.Cartesian3(); - const scratchBitangent = new Matrix3.Cartesian3(); - const centerScratch = new Matrix3.Cartesian3(); - const axis1Scratch = new Matrix3.Cartesian3(); - const axis2Scratch = new Matrix3.Cartesian3(); - const quaternionScratch = new Transforms.Quaternion(); - const textureMatrixScratch = new Matrix3.Matrix3(); - const tangentRotationScratch = new Matrix3.Matrix3(); - const surfaceNormalScratch = new Matrix3.Cartesian3(); - - function createGeometryFromPolygon( - polygon, - vertexFormat, - boundingRectangle, - stRotation, - hardcodedTextureCoordinates, - projectPointTo2D, - normal, - tangent, - bitangent - ) { - const positions = polygon.positions; - let indices = PolygonPipeline.PolygonPipeline.triangulate(polygon.positions2D, polygon.holes); - - /* If polygon is completely unrenderable, just use the first three vertices */ - if (indices.length < 3) { - indices = [0, 1, 2]; - } - - const newIndices = IndexDatatype.IndexDatatype.createTypedArray( - positions.length, - indices.length - ); - newIndices.set(indices); - - let textureMatrix = textureMatrixScratch; - if (stRotation !== 0.0) { - let rotation = Transforms.Quaternion.fromAxisAngle( - normal, - stRotation, - quaternionScratch - ); - textureMatrix = Matrix3.Matrix3.fromQuaternion(rotation, textureMatrix); - - if (vertexFormat.tangent || vertexFormat.bitangent) { - rotation = Transforms.Quaternion.fromAxisAngle( - normal, - -stRotation, - quaternionScratch - ); - const tangentRotation = Matrix3.Matrix3.fromQuaternion( - rotation, - tangentRotationScratch - ); - - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Matrix3.multiplyByVector(tangentRotation, tangent, tangent), - tangent - ); - if (vertexFormat.bitangent) { - bitangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(normal, tangent, bitangent), - bitangent - ); - } - } - } else { - textureMatrix = Matrix3.Matrix3.clone(Matrix3.Matrix3.IDENTITY, textureMatrix); - } - - const stOrigin = textureCoordinatesOrigin; - if (vertexFormat.st) { - stOrigin.x = boundingRectangle.x; - stOrigin.y = boundingRectangle.y; - } - - const length = positions.length; - const size = length * 3; - const flatPositions = new Float64Array(size); - const normals = vertexFormat.normal ? new Float32Array(size) : undefined; - const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(size) - : undefined; - const textureCoordinates = vertexFormat.st - ? new Float32Array(length * 2) - : undefined; - - let positionIndex = 0; - let normalIndex = 0; - let bitangentIndex = 0; - let tangentIndex = 0; - let stIndex = 0; - - for (let i = 0; i < length; i++) { - const position = positions[i]; - flatPositions[positionIndex++] = position.x; - flatPositions[positionIndex++] = position.y; - flatPositions[positionIndex++] = position.z; - - if (vertexFormat.st) { - if ( - defaultValue.defined(hardcodedTextureCoordinates) && - hardcodedTextureCoordinates.positions.length === length - ) { - textureCoordinates[stIndex++] = - hardcodedTextureCoordinates.positions[i].x; - textureCoordinates[stIndex++] = - hardcodedTextureCoordinates.positions[i].y; - } else { - const p = Matrix3.Matrix3.multiplyByVector( - textureMatrix, - position, - scratchPosition - ); - const st = projectPointTo2D(p, stScratch); - Matrix2.Cartesian2.subtract(st, stOrigin, st); - - const stx = Math.CesiumMath.clamp(st.x / boundingRectangle.width, 0, 1); - const sty = Math.CesiumMath.clamp(st.y / boundingRectangle.height, 0, 1); - textureCoordinates[stIndex++] = stx; - textureCoordinates[stIndex++] = sty; - } - } - - if (vertexFormat.normal) { - normals[normalIndex++] = normal.x; - normals[normalIndex++] = normal.y; - normals[normalIndex++] = normal.z; - } - - if (vertexFormat.tangent) { - tangents[tangentIndex++] = tangent.x; - tangents[tangentIndex++] = tangent.y; - tangents[tangentIndex++] = tangent.z; - } - - if (vertexFormat.bitangent) { - bitangents[bitangentIndex++] = bitangent.x; - bitangents[bitangentIndex++] = bitangent.y; - bitangents[bitangentIndex++] = bitangent.z; - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - - if (vertexFormat.position) { - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: flatPositions, - }); - } - - if (vertexFormat.normal) { - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.tangent) { - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - - if (vertexFormat.st) { - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: textureCoordinates, - }); - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: newIndices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }); - } - - /** - * A description of a polygon composed of arbitrary coplanar positions. - * - * @alias CoplanarPolygonGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes. - * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. - * - * @example - * const polygonGeometry = new Cesium.CoplanarPolygonGeometry({ - * polygonHierarchy: new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArrayHeights([ - * -90.0, 30.0, 0.0, - * -90.0, 30.0, 300000.0, - * -80.0, 30.0, 300000.0, - * -80.0, 30.0, 0.0 - * ])) - * }); - * - */ - function CoplanarPolygonGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const polygonHierarchy = options.polygonHierarchy; - const textureCoordinates = options.textureCoordinates; - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.polygonHierarchy", polygonHierarchy); - //>>includeEnd('debug'); - - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - this._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat); - this._polygonHierarchy = polygonHierarchy; - this._stRotation = defaultValue.defaultValue(options.stRotation, 0.0); - this._ellipsoid = Matrix3.Ellipsoid.clone( - defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84) - ); - this._workerName = "createCoplanarPolygonGeometry"; - this._textureCoordinates = textureCoordinates; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - PolygonGeometryLibrary.PolygonGeometryLibrary.computeHierarchyPackedLength( - polygonHierarchy, - Matrix3.Cartesian3 - ) + - VertexFormat.VertexFormat.packedLength + - Matrix3.Ellipsoid.packedLength + - (defaultValue.defined(textureCoordinates) - ? PolygonGeometryLibrary.PolygonGeometryLibrary.computeHierarchyPackedLength( - textureCoordinates, - Matrix2.Cartesian2 - ) - : 1) + - 2; - } - - /** - * A description of a coplanar polygon from an array of positions. - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. - * @returns {CoplanarPolygonGeometry} - * - * @example - * // create a polygon from points - * const polygon = Cesium.CoplanarPolygonGeometry.fromPositions({ - * positions : Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ]) - * }); - * const geometry = Cesium.PolygonGeometry.createGeometry(polygon); - * - * @see PolygonGeometry#createGeometry - */ - CoplanarPolygonGeometry.fromPositions = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.positions", options.positions); - //>>includeEnd('debug'); - - const newOptions = { - polygonHierarchy: { - positions: options.positions, - }, - vertexFormat: options.vertexFormat, - stRotation: options.stRotation, - ellipsoid: options.ellipsoid, - textureCoordinates: options.textureCoordinates, - }; - return new CoplanarPolygonGeometry(newOptions); - }; - - /** - * Stores the provided instance into the provided array. - * - * @param {CoplanarPolygonGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - CoplanarPolygonGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - startingIndex = PolygonGeometryLibrary.PolygonGeometryLibrary.packPolygonHierarchy( - value._polygonHierarchy, - array, - startingIndex, - Matrix3.Cartesian3 - ); - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._stRotation; - if (defaultValue.defined(value._textureCoordinates)) { - startingIndex = PolygonGeometryLibrary.PolygonGeometryLibrary.packPolygonHierarchy( - value._textureCoordinates, - array, - startingIndex, - Matrix2.Cartesian2 - ); - } else { - array[startingIndex++] = -1.0; - } - array[startingIndex++] = value.packedLength; - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - polygonHierarchy: {}, - }; - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {CoplanarPolygonGeometry} [result] The object into which to store the result. - * @returns {CoplanarPolygonGeometry} The modified result parameter or a new CoplanarPolygonGeometry instance if one was not provided. - */ - CoplanarPolygonGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const polygonHierarchy = PolygonGeometryLibrary.PolygonGeometryLibrary.unpackPolygonHierarchy( - array, - startingIndex, - Matrix3.Cartesian3 - ); - startingIndex = polygonHierarchy.startingIndex; - delete polygonHierarchy.startingIndex; - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const stRotation = array[startingIndex++]; - const textureCoordinates = - array[startingIndex] === -1.0 - ? undefined - : PolygonGeometryLibrary.PolygonGeometryLibrary.unpackPolygonHierarchy( - array, - startingIndex, - Matrix2.Cartesian2 - ); - if (defaultValue.defined(textureCoordinates)) { - startingIndex = textureCoordinates.startingIndex; - delete textureCoordinates.startingIndex; - } else { - startingIndex++; - } - const packedLength = array[startingIndex++]; - - if (!defaultValue.defined(result)) { - result = new CoplanarPolygonGeometry(scratchOptions); - } - - result._polygonHierarchy = polygonHierarchy; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._stRotation = stRotation; - result._textureCoordinates = textureCoordinates; - result.packedLength = packedLength; - - return result; - }; - - /** - * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere. - * - * @param {CoplanarPolygonGeometry} polygonGeometry A description of the polygon. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - CoplanarPolygonGeometry.createGeometry = function (polygonGeometry) { - const vertexFormat = polygonGeometry._vertexFormat; - const polygonHierarchy = polygonGeometry._polygonHierarchy; - const stRotation = polygonGeometry._stRotation; - const textureCoordinates = polygonGeometry._textureCoordinates; - const hasTextureCoordinates = defaultValue.defined(textureCoordinates); - - let outerPositions = polygonHierarchy.positions; - outerPositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - outerPositions, - Matrix3.Cartesian3.equalsEpsilon, - true - ); - if (outerPositions.length < 3) { - return; - } - - let normal = scratchNormal; - let tangent = scratchTangent; - let bitangent = scratchBitangent; - let axis1 = axis1Scratch; - const axis2 = axis2Scratch; - - const validGeometry = CoplanarPolygonGeometryLibrary.CoplanarPolygonGeometryLibrary.computeProjectTo2DArguments( - outerPositions, - centerScratch, - axis1, - axis2 - ); - if (!validGeometry) { - return undefined; - } - - normal = Matrix3.Cartesian3.cross(axis1, axis2, normal); - normal = Matrix3.Cartesian3.normalize(normal, normal); - - if ( - !Matrix3.Cartesian3.equalsEpsilon( - centerScratch, - Matrix3.Cartesian3.ZERO, - Math.CesiumMath.EPSILON6 - ) - ) { - const surfaceNormal = polygonGeometry._ellipsoid.geodeticSurfaceNormal( - centerScratch, - surfaceNormalScratch - ); - if (Matrix3.Cartesian3.dot(normal, surfaceNormal) < 0) { - normal = Matrix3.Cartesian3.negate(normal, normal); - axis1 = Matrix3.Cartesian3.negate(axis1, axis1); - } - } - - const projectPoints = CoplanarPolygonGeometryLibrary.CoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction( - centerScratch, - axis1, - axis2 - ); - const projectPoint = CoplanarPolygonGeometryLibrary.CoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction( - centerScratch, - axis1, - axis2 - ); - - if (vertexFormat.tangent) { - tangent = Matrix3.Cartesian3.clone(axis1, tangent); - } - if (vertexFormat.bitangent) { - bitangent = Matrix3.Cartesian3.clone(axis2, bitangent); - } - - const results = PolygonGeometryLibrary.PolygonGeometryLibrary.polygonsFromHierarchy( - polygonHierarchy, - hasTextureCoordinates, - projectPoints, - false - ); - const hierarchy = results.hierarchy; - const polygons = results.polygons; - - const dummyFunction = function (identity) { - return identity; - }; - - const textureCoordinatePolygons = hasTextureCoordinates - ? PolygonGeometryLibrary.PolygonGeometryLibrary.polygonsFromHierarchy( - textureCoordinates, - true, - dummyFunction, - false - ).polygons - : undefined; - - if (hierarchy.length === 0) { - return; - } - outerPositions = hierarchy[0].outerRing; - - const boundingSphere = Transforms.BoundingSphere.fromPoints(outerPositions); - const boundingRectangle = PolygonGeometryLibrary.PolygonGeometryLibrary.computeBoundingRectangle( - normal, - projectPoint, - outerPositions, - stRotation, - scratchBR - ); - - const geometries = []; - for (let i = 0; i < polygons.length; i++) { - const geometryInstance = new GeometryInstance.GeometryInstance({ - geometry: createGeometryFromPolygon( - polygons[i], - vertexFormat, - boundingRectangle, - stRotation, - hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined, - projectPoint, - normal, - tangent, - bitangent - ), - }); - - geometries.push(geometryInstance); - } - - const geometry = GeometryPipeline.GeometryPipeline.combineInstances(geometries)[0]; - geometry.attributes.position.values = new Float64Array( - geometry.attributes.position.values - ); - geometry.indices = IndexDatatype.IndexDatatype.createTypedArray( - geometry.attributes.position.values.length / 3, - geometry.indices - ); - - const attributes = geometry.attributes; - if (!vertexFormat.position) { - delete attributes.position; - } - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: geometry.indices, - primitiveType: geometry.primitiveType, - boundingSphere: boundingSphere, - }); - }; - - function createCoplanarPolygonGeometry(polygonGeometry, offset) { - if (defaultValue.defined(offset)) { - polygonGeometry = CoplanarPolygonGeometry.unpack(polygonGeometry, offset); - } - return CoplanarPolygonGeometry.createGeometry(polygonGeometry); - } - - return createCoplanarPolygonGeometry; - -})); -//# sourceMappingURL=createCoplanarPolygonGeometry.js.map diff --git a/debug/cesium/Workers/createCoplanarPolygonGeometry.js.map b/debug/cesium/Workers/createCoplanarPolygonGeometry.js.map deleted file mode 100644 index 745c696..0000000 --- a/debug/cesium/Workers/createCoplanarPolygonGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createCoplanarPolygonGeometry.js","sources":["../../../Source/Core/CoplanarPolygonGeometry.js","../../../Source/WorkersES6/createCoplanarPolygonGeometry.js"],"sourcesContent":["import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport BoundingRectangle from \"./BoundingRectangle.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport CoplanarPolygonGeometryLibrary from \"./CoplanarPolygonGeometryLibrary.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryInstance from \"./GeometryInstance.js\";\r\nimport GeometryPipeline from \"./GeometryPipeline.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst scratchPosition = new Cartesian3();\r\nconst scratchBR = new BoundingRectangle();\r\nconst stScratch = new Cartesian2();\r\nconst textureCoordinatesOrigin = new Cartesian2();\r\nconst scratchNormal = new Cartesian3();\r\nconst scratchTangent = new Cartesian3();\r\nconst scratchBitangent = new Cartesian3();\r\nconst centerScratch = new Cartesian3();\r\nconst axis1Scratch = new Cartesian3();\r\nconst axis2Scratch = new Cartesian3();\r\nconst quaternionScratch = new Quaternion();\r\nconst textureMatrixScratch = new Matrix3();\r\nconst tangentRotationScratch = new Matrix3();\r\nconst surfaceNormalScratch = new Cartesian3();\r\n\r\nfunction createGeometryFromPolygon(\r\n polygon,\r\n vertexFormat,\r\n boundingRectangle,\r\n stRotation,\r\n hardcodedTextureCoordinates,\r\n projectPointTo2D,\r\n normal,\r\n tangent,\r\n bitangent\r\n) {\r\n const positions = polygon.positions;\r\n let indices = PolygonPipeline.triangulate(polygon.positions2D, polygon.holes);\r\n\r\n /* If polygon is completely unrenderable, just use the first three vertices */\r\n if (indices.length < 3) {\r\n indices = [0, 1, 2];\r\n }\r\n\r\n const newIndices = IndexDatatype.createTypedArray(\r\n positions.length,\r\n indices.length\r\n );\r\n newIndices.set(indices);\r\n\r\n let textureMatrix = textureMatrixScratch;\r\n if (stRotation !== 0.0) {\r\n let rotation = Quaternion.fromAxisAngle(\r\n normal,\r\n stRotation,\r\n quaternionScratch\r\n );\r\n textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\r\n\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n rotation = Quaternion.fromAxisAngle(\r\n normal,\r\n -stRotation,\r\n quaternionScratch\r\n );\r\n const tangentRotation = Matrix3.fromQuaternion(\r\n rotation,\r\n tangentRotationScratch\r\n );\r\n\r\n tangent = Cartesian3.normalize(\r\n Matrix3.multiplyByVector(tangentRotation, tangent, tangent),\r\n tangent\r\n );\r\n if (vertexFormat.bitangent) {\r\n bitangent = Cartesian3.normalize(\r\n Cartesian3.cross(normal, tangent, bitangent),\r\n bitangent\r\n );\r\n }\r\n }\r\n } else {\r\n textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\r\n }\r\n\r\n const stOrigin = textureCoordinatesOrigin;\r\n if (vertexFormat.st) {\r\n stOrigin.x = boundingRectangle.x;\r\n stOrigin.y = boundingRectangle.y;\r\n }\r\n\r\n const length = positions.length;\r\n const size = length * 3;\r\n const flatPositions = new Float64Array(size);\r\n const normals = vertexFormat.normal ? new Float32Array(size) : undefined;\r\n const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(size)\r\n : undefined;\r\n const textureCoordinates = vertexFormat.st\r\n ? new Float32Array(length * 2)\r\n : undefined;\r\n\r\n let positionIndex = 0;\r\n let normalIndex = 0;\r\n let bitangentIndex = 0;\r\n let tangentIndex = 0;\r\n let stIndex = 0;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const position = positions[i];\r\n flatPositions[positionIndex++] = position.x;\r\n flatPositions[positionIndex++] = position.y;\r\n flatPositions[positionIndex++] = position.z;\r\n\r\n if (vertexFormat.st) {\r\n if (\r\n defined(hardcodedTextureCoordinates) &&\r\n hardcodedTextureCoordinates.positions.length === length\r\n ) {\r\n textureCoordinates[stIndex++] =\r\n hardcodedTextureCoordinates.positions[i].x;\r\n textureCoordinates[stIndex++] =\r\n hardcodedTextureCoordinates.positions[i].y;\r\n } else {\r\n const p = Matrix3.multiplyByVector(\r\n textureMatrix,\r\n position,\r\n scratchPosition\r\n );\r\n const st = projectPointTo2D(p, stScratch);\r\n Cartesian2.subtract(st, stOrigin, st);\r\n\r\n const stx = CesiumMath.clamp(st.x / boundingRectangle.width, 0, 1);\r\n const sty = CesiumMath.clamp(st.y / boundingRectangle.height, 0, 1);\r\n textureCoordinates[stIndex++] = stx;\r\n textureCoordinates[stIndex++] = sty;\r\n }\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n normals[normalIndex++] = normal.x;\r\n normals[normalIndex++] = normal.y;\r\n normals[normalIndex++] = normal.z;\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n tangents[tangentIndex++] = tangent.x;\r\n tangents[tangentIndex++] = tangent.y;\r\n tangents[tangentIndex++] = tangent.z;\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n bitangents[bitangentIndex++] = bitangent.x;\r\n bitangents[bitangentIndex++] = bitangent.y;\r\n bitangents[bitangentIndex++] = bitangent.z;\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n\r\n if (vertexFormat.position) {\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: flatPositions,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.st) {\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: textureCoordinates,\r\n });\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: newIndices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n });\r\n}\r\n\r\n/**\r\n * A description of a polygon composed of arbitrary coplanar positions.\r\n *\r\n * @alias CoplanarPolygonGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\r\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points.\r\n *\r\n * @example\r\n * const polygonGeometry = new Cesium.CoplanarPolygonGeometry({\r\n * polygonHierarchy: new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArrayHeights([\r\n * -90.0, 30.0, 0.0,\r\n * -90.0, 30.0, 300000.0,\r\n * -80.0, 30.0, 300000.0,\r\n * -80.0, 30.0, 0.0\r\n * ]))\r\n * });\r\n *\r\n */\r\nfunction CoplanarPolygonGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const polygonHierarchy = options.polygonHierarchy;\r\n const textureCoordinates = options.textureCoordinates;\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.polygonHierarchy\", polygonHierarchy);\r\n //>>includeEnd('debug');\r\n\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n this._vertexFormat = VertexFormat.clone(vertexFormat);\r\n this._polygonHierarchy = polygonHierarchy;\r\n this._stRotation = defaultValue(options.stRotation, 0.0);\r\n this._ellipsoid = Ellipsoid.clone(\r\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\r\n );\r\n this._workerName = \"createCoplanarPolygonGeometry\";\r\n this._textureCoordinates = textureCoordinates;\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n PolygonGeometryLibrary.computeHierarchyPackedLength(\r\n polygonHierarchy,\r\n Cartesian3\r\n ) +\r\n VertexFormat.packedLength +\r\n Ellipsoid.packedLength +\r\n (defined(textureCoordinates)\r\n ? PolygonGeometryLibrary.computeHierarchyPackedLength(\r\n textureCoordinates,\r\n Cartesian2\r\n )\r\n : 1) +\r\n 2;\r\n}\r\n\r\n/**\r\n * A description of a coplanar polygon from an array of positions.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points.\r\n * @returns {CoplanarPolygonGeometry}\r\n *\r\n * @example\r\n * // create a polygon from points\r\n * const polygon = Cesium.CoplanarPolygonGeometry.fromPositions({\r\n * positions : Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ])\r\n * });\r\n * const geometry = Cesium.PolygonGeometry.createGeometry(polygon);\r\n *\r\n * @see PolygonGeometry#createGeometry\r\n */\r\nCoplanarPolygonGeometry.fromPositions = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.positions\", options.positions);\r\n //>>includeEnd('debug');\r\n\r\n const newOptions = {\r\n polygonHierarchy: {\r\n positions: options.positions,\r\n },\r\n vertexFormat: options.vertexFormat,\r\n stRotation: options.stRotation,\r\n ellipsoid: options.ellipsoid,\r\n textureCoordinates: options.textureCoordinates,\r\n };\r\n return new CoplanarPolygonGeometry(newOptions);\r\n};\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {CoplanarPolygonGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCoplanarPolygonGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\r\n value._polygonHierarchy,\r\n array,\r\n startingIndex,\r\n Cartesian3\r\n );\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._stRotation;\r\n if (defined(value._textureCoordinates)) {\r\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\r\n value._textureCoordinates,\r\n array,\r\n startingIndex,\r\n Cartesian2\r\n );\r\n } else {\r\n array[startingIndex++] = -1.0;\r\n }\r\n array[startingIndex++] = value.packedLength;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n polygonHierarchy: {},\r\n};\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {CoplanarPolygonGeometry} [result] The object into which to store the result.\r\n * @returns {CoplanarPolygonGeometry} The modified result parameter or a new CoplanarPolygonGeometry instance if one was not provided.\r\n */\r\nCoplanarPolygonGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\r\n array,\r\n startingIndex,\r\n Cartesian3\r\n );\r\n startingIndex = polygonHierarchy.startingIndex;\r\n delete polygonHierarchy.startingIndex;\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const stRotation = array[startingIndex++];\r\n const textureCoordinates =\r\n array[startingIndex] === -1.0\r\n ? undefined\r\n : PolygonGeometryLibrary.unpackPolygonHierarchy(\r\n array,\r\n startingIndex,\r\n Cartesian2\r\n );\r\n if (defined(textureCoordinates)) {\r\n startingIndex = textureCoordinates.startingIndex;\r\n delete textureCoordinates.startingIndex;\r\n } else {\r\n startingIndex++;\r\n }\r\n const packedLength = array[startingIndex++];\r\n\r\n if (!defined(result)) {\r\n result = new CoplanarPolygonGeometry(scratchOptions);\r\n }\r\n\r\n result._polygonHierarchy = polygonHierarchy;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._stRotation = stRotation;\r\n result._textureCoordinates = textureCoordinates;\r\n result.packedLength = packedLength;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {CoplanarPolygonGeometry} polygonGeometry A description of the polygon.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nCoplanarPolygonGeometry.createGeometry = function (polygonGeometry) {\r\n const vertexFormat = polygonGeometry._vertexFormat;\r\n const polygonHierarchy = polygonGeometry._polygonHierarchy;\r\n const stRotation = polygonGeometry._stRotation;\r\n const textureCoordinates = polygonGeometry._textureCoordinates;\r\n const hasTextureCoordinates = defined(textureCoordinates);\r\n\r\n let outerPositions = polygonHierarchy.positions;\r\n outerPositions = arrayRemoveDuplicates(\r\n outerPositions,\r\n Cartesian3.equalsEpsilon,\r\n true\r\n );\r\n if (outerPositions.length < 3) {\r\n return;\r\n }\r\n\r\n let normal = scratchNormal;\r\n let tangent = scratchTangent;\r\n let bitangent = scratchBitangent;\r\n let axis1 = axis1Scratch;\r\n const axis2 = axis2Scratch;\r\n\r\n const validGeometry = CoplanarPolygonGeometryLibrary.computeProjectTo2DArguments(\r\n outerPositions,\r\n centerScratch,\r\n axis1,\r\n axis2\r\n );\r\n if (!validGeometry) {\r\n return undefined;\r\n }\r\n\r\n normal = Cartesian3.cross(axis1, axis2, normal);\r\n normal = Cartesian3.normalize(normal, normal);\r\n\r\n if (\r\n !Cartesian3.equalsEpsilon(\r\n centerScratch,\r\n Cartesian3.ZERO,\r\n CesiumMath.EPSILON6\r\n )\r\n ) {\r\n const surfaceNormal = polygonGeometry._ellipsoid.geodeticSurfaceNormal(\r\n centerScratch,\r\n surfaceNormalScratch\r\n );\r\n if (Cartesian3.dot(normal, surfaceNormal) < 0) {\r\n normal = Cartesian3.negate(normal, normal);\r\n axis1 = Cartesian3.negate(axis1, axis1);\r\n }\r\n }\r\n\r\n const projectPoints = CoplanarPolygonGeometryLibrary.createProjectPointsTo2DFunction(\r\n centerScratch,\r\n axis1,\r\n axis2\r\n );\r\n const projectPoint = CoplanarPolygonGeometryLibrary.createProjectPointTo2DFunction(\r\n centerScratch,\r\n axis1,\r\n axis2\r\n );\r\n\r\n if (vertexFormat.tangent) {\r\n tangent = Cartesian3.clone(axis1, tangent);\r\n }\r\n if (vertexFormat.bitangent) {\r\n bitangent = Cartesian3.clone(axis2, bitangent);\r\n }\r\n\r\n const results = PolygonGeometryLibrary.polygonsFromHierarchy(\r\n polygonHierarchy,\r\n hasTextureCoordinates,\r\n projectPoints,\r\n false\r\n );\r\n const hierarchy = results.hierarchy;\r\n const polygons = results.polygons;\r\n\r\n const dummyFunction = function (identity) {\r\n return identity;\r\n };\r\n\r\n const textureCoordinatePolygons = hasTextureCoordinates\r\n ? PolygonGeometryLibrary.polygonsFromHierarchy(\r\n textureCoordinates,\r\n true,\r\n dummyFunction,\r\n false\r\n ).polygons\r\n : undefined;\r\n\r\n if (hierarchy.length === 0) {\r\n return;\r\n }\r\n outerPositions = hierarchy[0].outerRing;\r\n\r\n const boundingSphere = BoundingSphere.fromPoints(outerPositions);\r\n const boundingRectangle = PolygonGeometryLibrary.computeBoundingRectangle(\r\n normal,\r\n projectPoint,\r\n outerPositions,\r\n stRotation,\r\n scratchBR\r\n );\r\n\r\n const geometries = [];\r\n for (let i = 0; i < polygons.length; i++) {\r\n const geometryInstance = new GeometryInstance({\r\n geometry: createGeometryFromPolygon(\r\n polygons[i],\r\n vertexFormat,\r\n boundingRectangle,\r\n stRotation,\r\n hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined,\r\n projectPoint,\r\n normal,\r\n tangent,\r\n bitangent\r\n ),\r\n });\r\n\r\n geometries.push(geometryInstance);\r\n }\r\n\r\n const geometry = GeometryPipeline.combineInstances(geometries)[0];\r\n geometry.attributes.position.values = new Float64Array(\r\n geometry.attributes.position.values\r\n );\r\n geometry.indices = IndexDatatype.createTypedArray(\r\n geometry.attributes.position.values.length / 3,\r\n geometry.indices\r\n );\r\n\r\n const attributes = geometry.attributes;\r\n if (!vertexFormat.position) {\r\n delete attributes.position;\r\n }\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: geometry.indices,\r\n primitiveType: geometry.primitiveType,\r\n boundingSphere: boundingSphere,\r\n });\r\n};\r\nexport default CoplanarPolygonGeometry;\r\n","import CoplanarPolygonGeometry from \"../Core/CoplanarPolygonGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\n\r\nfunction createCoplanarPolygonGeometry(polygonGeometry, offset) {\r\n if (defined(offset)) {\r\n polygonGeometry = CoplanarPolygonGeometry.unpack(polygonGeometry, offset);\r\n }\r\n return CoplanarPolygonGeometry.createGeometry(polygonGeometry);\r\n}\r\nexport default createCoplanarPolygonGeometry;\r\n"],"names":["Cartesian3","BoundingRectangle","Cartesian2","Quaternion","Matrix3","PolygonPipeline","IndexDatatype","defined","CesiumMath","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","defaultValue","Check","VertexFormat","Ellipsoid","PolygonGeometryLibrary","arrayRemoveDuplicates","CoplanarPolygonGeometryLibrary","BoundingSphere","GeometryInstance","GeometryPipeline"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createCoplanarPolygonOutlineGeometry.js b/debug/cesium/Workers/createCoplanarPolygonOutlineGeometry.js deleted file mode 100644 index 5d4c5db..0000000 --- a/debug/cesium/Workers/createCoplanarPolygonOutlineGeometry.js +++ /dev/null @@ -1,262 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./arrayRemoveDuplicates-c3526030', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './CoplanarPolygonGeometryLibrary-dfba6465', './defaultValue-0ab18f7d', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryInstance-b2be3e5a', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './PolygonGeometryLibrary-62266ab5', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './OrientedBoundingBox-7e2eebab', './EllipsoidTangentPlane-c421b2cb', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './ArcType-d608b872', './EllipsoidRhumbLine-48b4507b', './PolygonPipeline-313487c3'], (function (arrayRemoveDuplicates, Transforms, Matrix3, Check, ComponentDatatype, CoplanarPolygonGeometryLibrary, defaultValue, GeometryAttribute, GeometryAttributes, GeometryInstance, GeometryPipeline, IndexDatatype, PolygonGeometryLibrary, Math, Matrix2, RuntimeError, combine, WebGLConstants, OrientedBoundingBox, EllipsoidTangentPlane, AxisAlignedBoundingBox, IntersectionTests, Plane, AttributeCompression, EncodedCartesian3, ArcType, EllipsoidRhumbLine, PolygonPipeline) { 'use strict'; - - function createGeometryFromPositions(positions) { - const length = positions.length; - const flatPositions = new Float64Array(length * 3); - const indices = IndexDatatype.IndexDatatype.createTypedArray(length, length * 2); - - let positionIndex = 0; - let index = 0; - - for (let i = 0; i < length; i++) { - const position = positions[i]; - flatPositions[positionIndex++] = position.x; - flatPositions[positionIndex++] = position.y; - flatPositions[positionIndex++] = position.z; - - indices[index++] = i; - indices[index++] = (i + 1) % length; - } - - const attributes = new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: flatPositions, - }), - }); - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - }); - } - - /** - * A description of the outline of a polygon composed of arbitrary coplanar positions. - * - * @alias CoplanarPolygonOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes. - * - * @see CoplanarPolygonOutlineGeometry.createGeometry - * - * @example - * const polygonOutline = new Cesium.CoplanarPolygonOutlineGeometry({ - * positions : Cesium.Cartesian3.fromDegreesArrayHeights([ - * -90.0, 30.0, 0.0, - * -90.0, 30.0, 1000.0, - * -80.0, 30.0, 1000.0, - * -80.0, 30.0, 0.0 - * ]) - * }); - * const geometry = Cesium.CoplanarPolygonOutlineGeometry.createGeometry(polygonOutline); - */ - function CoplanarPolygonOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const polygonHierarchy = options.polygonHierarchy; - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.polygonHierarchy", polygonHierarchy); - //>>includeEnd('debug'); - - this._polygonHierarchy = polygonHierarchy; - this._workerName = "createCoplanarPolygonOutlineGeometry"; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - PolygonGeometryLibrary.PolygonGeometryLibrary.computeHierarchyPackedLength( - polygonHierarchy, - Matrix3.Cartesian3 - ) + 1; - } - - /** - * A description of a coplanar polygon outline from an array of positions. - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon. - * @returns {CoplanarPolygonOutlineGeometry} - */ - CoplanarPolygonOutlineGeometry.fromPositions = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.positions", options.positions); - //>>includeEnd('debug'); - - const newOptions = { - polygonHierarchy: { - positions: options.positions, - }, - }; - return new CoplanarPolygonOutlineGeometry(newOptions); - }; - - /** - * Stores the provided instance into the provided array. - * - * @param {CoplanarPolygonOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - CoplanarPolygonOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - startingIndex = PolygonGeometryLibrary.PolygonGeometryLibrary.packPolygonHierarchy( - value._polygonHierarchy, - array, - startingIndex, - Matrix3.Cartesian3 - ); - - array[startingIndex] = value.packedLength; - - return array; - }; - - const scratchOptions = { - polygonHierarchy: {}, - }; - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {CoplanarPolygonOutlineGeometry} [result] The object into which to store the result. - * @returns {CoplanarPolygonOutlineGeometry} The modified result parameter or a new CoplanarPolygonOutlineGeometry instance if one was not provided. - */ - CoplanarPolygonOutlineGeometry.unpack = function ( - array, - startingIndex, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const polygonHierarchy = PolygonGeometryLibrary.PolygonGeometryLibrary.unpackPolygonHierarchy( - array, - startingIndex, - Matrix3.Cartesian3 - ); - startingIndex = polygonHierarchy.startingIndex; - delete polygonHierarchy.startingIndex; - const packedLength = array[startingIndex]; - - if (!defaultValue.defined(result)) { - result = new CoplanarPolygonOutlineGeometry(scratchOptions); - } - - result._polygonHierarchy = polygonHierarchy; - result.packedLength = packedLength; - - return result; - }; - - /** - * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere. - * - * @param {CoplanarPolygonOutlineGeometry} polygonGeometry A description of the polygon. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - CoplanarPolygonOutlineGeometry.createGeometry = function (polygonGeometry) { - const polygonHierarchy = polygonGeometry._polygonHierarchy; - - let outerPositions = polygonHierarchy.positions; - outerPositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - outerPositions, - Matrix3.Cartesian3.equalsEpsilon, - true - ); - if (outerPositions.length < 3) { - return; - } - const isValid = CoplanarPolygonGeometryLibrary.CoplanarPolygonGeometryLibrary.validOutline(outerPositions); - if (!isValid) { - return undefined; - } - - const polygons = PolygonGeometryLibrary.PolygonGeometryLibrary.polygonOutlinesFromHierarchy( - polygonHierarchy, - false - ); - - if (polygons.length === 0) { - return undefined; - } - - const geometries = []; - - for (let i = 0; i < polygons.length; i++) { - const geometryInstance = new GeometryInstance.GeometryInstance({ - geometry: createGeometryFromPositions(polygons[i]), - }); - geometries.push(geometryInstance); - } - - const geometry = GeometryPipeline.GeometryPipeline.combineInstances(geometries)[0]; - const boundingSphere = Transforms.BoundingSphere.fromPoints(polygonHierarchy.positions); - - return new GeometryAttribute.Geometry({ - attributes: geometry.attributes, - indices: geometry.indices, - primitiveType: geometry.primitiveType, - boundingSphere: boundingSphere, - }); - }; - - function createCoplanarPolygonOutlineGeometry(polygonGeometry, offset) { - if (defaultValue.defined(offset)) { - polygonGeometry = CoplanarPolygonOutlineGeometry.unpack( - polygonGeometry, - offset - ); - } - polygonGeometry._ellipsoid = Matrix3.Ellipsoid.clone(polygonGeometry._ellipsoid); - return CoplanarPolygonOutlineGeometry.createGeometry(polygonGeometry); - } - - return createCoplanarPolygonOutlineGeometry; - -})); -//# sourceMappingURL=createCoplanarPolygonOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createCoplanarPolygonOutlineGeometry.js.map b/debug/cesium/Workers/createCoplanarPolygonOutlineGeometry.js.map deleted file mode 100644 index 74c1789..0000000 --- a/debug/cesium/Workers/createCoplanarPolygonOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createCoplanarPolygonOutlineGeometry.js","sources":["../../../Source/Core/CoplanarPolygonOutlineGeometry.js","../../../Source/WorkersES6/createCoplanarPolygonOutlineGeometry.js"],"sourcesContent":["import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport CoplanarPolygonGeometryLibrary from \"./CoplanarPolygonGeometryLibrary.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryInstance from \"./GeometryInstance.js\";\r\nimport GeometryPipeline from \"./GeometryPipeline.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\n\r\nfunction createGeometryFromPositions(positions) {\r\n const length = positions.length;\r\n const flatPositions = new Float64Array(length * 3);\r\n const indices = IndexDatatype.createTypedArray(length, length * 2);\r\n\r\n let positionIndex = 0;\r\n let index = 0;\r\n\r\n for (let i = 0; i < length; i++) {\r\n const position = positions[i];\r\n flatPositions[positionIndex++] = position.x;\r\n flatPositions[positionIndex++] = position.y;\r\n flatPositions[positionIndex++] = position.z;\r\n\r\n indices[index++] = i;\r\n indices[index++] = (i + 1) % length;\r\n }\r\n\r\n const attributes = new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: flatPositions,\r\n }),\r\n });\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n });\r\n}\r\n\r\n/**\r\n * A description of the outline of a polygon composed of arbitrary coplanar positions.\r\n *\r\n * @alias CoplanarPolygonOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\r\n *\r\n * @see CoplanarPolygonOutlineGeometry.createGeometry\r\n *\r\n * @example\r\n * const polygonOutline = new Cesium.CoplanarPolygonOutlineGeometry({\r\n * positions : Cesium.Cartesian3.fromDegreesArrayHeights([\r\n * -90.0, 30.0, 0.0,\r\n * -90.0, 30.0, 1000.0,\r\n * -80.0, 30.0, 1000.0,\r\n * -80.0, 30.0, 0.0\r\n * ])\r\n * });\r\n * const geometry = Cesium.CoplanarPolygonOutlineGeometry.createGeometry(polygonOutline);\r\n */\r\nfunction CoplanarPolygonOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const polygonHierarchy = options.polygonHierarchy;\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.polygonHierarchy\", polygonHierarchy);\r\n //>>includeEnd('debug');\r\n\r\n this._polygonHierarchy = polygonHierarchy;\r\n this._workerName = \"createCoplanarPolygonOutlineGeometry\";\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n PolygonGeometryLibrary.computeHierarchyPackedLength(\r\n polygonHierarchy,\r\n Cartesian3\r\n ) + 1;\r\n}\r\n\r\n/**\r\n * A description of a coplanar polygon outline from an array of positions.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\r\n * @returns {CoplanarPolygonOutlineGeometry}\r\n */\r\nCoplanarPolygonOutlineGeometry.fromPositions = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.positions\", options.positions);\r\n //>>includeEnd('debug');\r\n\r\n const newOptions = {\r\n polygonHierarchy: {\r\n positions: options.positions,\r\n },\r\n };\r\n return new CoplanarPolygonOutlineGeometry(newOptions);\r\n};\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {CoplanarPolygonOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCoplanarPolygonOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\r\n value._polygonHierarchy,\r\n array,\r\n startingIndex,\r\n Cartesian3\r\n );\r\n\r\n array[startingIndex] = value.packedLength;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchOptions = {\r\n polygonHierarchy: {},\r\n};\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {CoplanarPolygonOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {CoplanarPolygonOutlineGeometry} The modified result parameter or a new CoplanarPolygonOutlineGeometry instance if one was not provided.\r\n */\r\nCoplanarPolygonOutlineGeometry.unpack = function (\r\n array,\r\n startingIndex,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\r\n array,\r\n startingIndex,\r\n Cartesian3\r\n );\r\n startingIndex = polygonHierarchy.startingIndex;\r\n delete polygonHierarchy.startingIndex;\r\n const packedLength = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n result = new CoplanarPolygonOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._polygonHierarchy = polygonHierarchy;\r\n result.packedLength = packedLength;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an arbitrary coplanar polygon, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {CoplanarPolygonOutlineGeometry} polygonGeometry A description of the polygon.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nCoplanarPolygonOutlineGeometry.createGeometry = function (polygonGeometry) {\r\n const polygonHierarchy = polygonGeometry._polygonHierarchy;\r\n\r\n let outerPositions = polygonHierarchy.positions;\r\n outerPositions = arrayRemoveDuplicates(\r\n outerPositions,\r\n Cartesian3.equalsEpsilon,\r\n true\r\n );\r\n if (outerPositions.length < 3) {\r\n return;\r\n }\r\n const isValid = CoplanarPolygonGeometryLibrary.validOutline(outerPositions);\r\n if (!isValid) {\r\n return undefined;\r\n }\r\n\r\n const polygons = PolygonGeometryLibrary.polygonOutlinesFromHierarchy(\r\n polygonHierarchy,\r\n false\r\n );\r\n\r\n if (polygons.length === 0) {\r\n return undefined;\r\n }\r\n\r\n const geometries = [];\r\n\r\n for (let i = 0; i < polygons.length; i++) {\r\n const geometryInstance = new GeometryInstance({\r\n geometry: createGeometryFromPositions(polygons[i]),\r\n });\r\n geometries.push(geometryInstance);\r\n }\r\n\r\n const geometry = GeometryPipeline.combineInstances(geometries)[0];\r\n const boundingSphere = BoundingSphere.fromPoints(polygonHierarchy.positions);\r\n\r\n return new Geometry({\r\n attributes: geometry.attributes,\r\n indices: geometry.indices,\r\n primitiveType: geometry.primitiveType,\r\n boundingSphere: boundingSphere,\r\n });\r\n};\r\nexport default CoplanarPolygonOutlineGeometry;\r\n","import CoplanarPolygonOutlineGeometry from \"../Core/CoplanarPolygonOutlineGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\n\r\nfunction createCoplanarPolygonOutlineGeometry(polygonGeometry, offset) {\r\n if (defined(offset)) {\r\n polygonGeometry = CoplanarPolygonOutlineGeometry.unpack(\r\n polygonGeometry,\r\n offset\r\n );\r\n }\r\n polygonGeometry._ellipsoid = Ellipsoid.clone(polygonGeometry._ellipsoid);\r\n return CoplanarPolygonOutlineGeometry.createGeometry(polygonGeometry);\r\n}\r\nexport default createCoplanarPolygonOutlineGeometry;\r\n"],"names":["IndexDatatype","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","defaultValue","Check","PolygonGeometryLibrary","Cartesian3","defined","arrayRemoveDuplicates","CoplanarPolygonGeometryLibrary","GeometryInstance","GeometryPipeline","BoundingSphere","Ellipsoid"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createCorridorGeometry.js b/debug/cesium/Workers/createCorridorGeometry.js deleted file mode 100644 index ee1dbb0..0000000 --- a/debug/cesium/Workers/createCorridorGeometry.js +++ /dev/null @@ -1,1433 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./arrayRemoveDuplicates-c3526030', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './PolylineVolumeGeometryLibrary-eed2bdf7', './CorridorGeometryLibrary-152d0356', './defaultValue-0ab18f7d', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonPipeline-313487c3', './Matrix2-036c77dd', './VertexFormat-f2d74c96', './combine-4598d225', './RuntimeError-e5c6a8b9', './WebGLConstants-f27a5e29', './EllipsoidTangentPlane-c421b2cb', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d', './PolylinePipeline-3c021236', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b'], (function (arrayRemoveDuplicates, Transforms, Matrix3, Check, ComponentDatatype, PolylineVolumeGeometryLibrary, CorridorGeometryLibrary, defaultValue, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, Math$1, PolygonPipeline, Matrix2, VertexFormat, combine$1, RuntimeError, WebGLConstants, EllipsoidTangentPlane, AxisAlignedBoundingBox, IntersectionTests, Plane, PolylinePipeline, EllipsoidGeodesic, EllipsoidRhumbLine) { 'use strict'; - - const cartesian1 = new Matrix3.Cartesian3(); - const cartesian2 = new Matrix3.Cartesian3(); - const cartesian3 = new Matrix3.Cartesian3(); - const cartesian4 = new Matrix3.Cartesian3(); - const cartesian5 = new Matrix3.Cartesian3(); - const cartesian6 = new Matrix3.Cartesian3(); - - const scratch1 = new Matrix3.Cartesian3(); - const scratch2 = new Matrix3.Cartesian3(); - - function scaleToSurface(positions, ellipsoid) { - for (let i = 0; i < positions.length; i++) { - positions[i] = ellipsoid.scaleToGeodeticSurface(positions[i], positions[i]); - } - return positions; - } - - function addNormals(attr, normal, left, front, back, vertexFormat) { - const normals = attr.normals; - const tangents = attr.tangents; - const bitangents = attr.bitangents; - const forward = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(left, normal, scratch1), - scratch1 - ); - if (vertexFormat.normal) { - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(normals, normal, front, back); - } - if (vertexFormat.tangent) { - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(tangents, forward, front, back); - } - if (vertexFormat.bitangent) { - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(bitangents, left, front, back); - } - } - - function combine(computedPositions, vertexFormat, ellipsoid) { - const positions = computedPositions.positions; - const corners = computedPositions.corners; - const endPositions = computedPositions.endPositions; - const computedLefts = computedPositions.lefts; - const computedNormals = computedPositions.normals; - const attributes = new GeometryAttributes.GeometryAttributes(); - let corner; - let leftCount = 0; - let rightCount = 0; - let i; - let indicesLength = 0; - let length; - for (i = 0; i < positions.length; i += 2) { - length = positions[i].length - 3; - leftCount += length; //subtracting 3 to account for duplicate points at corners - indicesLength += length * 2; - rightCount += positions[i + 1].length - 3; - } - leftCount += 3; //add back count for end positions - rightCount += 3; - for (i = 0; i < corners.length; i++) { - corner = corners[i]; - const leftSide = corners[i].leftPositions; - if (defaultValue.defined(leftSide)) { - length = leftSide.length; - leftCount += length; - indicesLength += length; - } else { - length = corners[i].rightPositions.length; - rightCount += length; - indicesLength += length; - } - } - - const addEndPositions = defaultValue.defined(endPositions); - let endPositionLength; - if (addEndPositions) { - endPositionLength = endPositions[0].length - 3; - leftCount += endPositionLength; - rightCount += endPositionLength; - endPositionLength /= 3; - indicesLength += endPositionLength * 6; - } - const size = leftCount + rightCount; - const finalPositions = new Float64Array(size); - const normals = vertexFormat.normal ? new Float32Array(size) : undefined; - const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(size) - : undefined; - const attr = { - normals: normals, - tangents: tangents, - bitangents: bitangents, - }; - let front = 0; - let back = size - 1; - let UL, LL, UR, LR; - let normal = cartesian1; - let left = cartesian2; - let rightPos, leftPos; - const halfLength = endPositionLength / 2; - - const indices = IndexDatatype.IndexDatatype.createTypedArray(size / 3, indicesLength); - let index = 0; - if (addEndPositions) { - // add rounded end - leftPos = cartesian3; - rightPos = cartesian4; - const firstEndPositions = endPositions[0]; - normal = Matrix3.Cartesian3.fromArray(computedNormals, 0, normal); - left = Matrix3.Cartesian3.fromArray(computedLefts, 0, left); - for (i = 0; i < halfLength; i++) { - leftPos = Matrix3.Cartesian3.fromArray( - firstEndPositions, - (halfLength - 1 - i) * 3, - leftPos - ); - rightPos = Matrix3.Cartesian3.fromArray( - firstEndPositions, - (halfLength + i) * 3, - rightPos - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - finalPositions, - leftPos, - undefined, - back - ); - addNormals(attr, normal, left, front, back, vertexFormat); - - LL = front / 3; - LR = LL + 1; - UL = (back - 2) / 3; - UR = UL - 1; - indices[index++] = UL; - indices[index++] = LL; - indices[index++] = UR; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - - front += 3; - back -= 3; - } - } - - let posIndex = 0; - let compIndex = 0; - let rightEdge = positions[posIndex++]; //add first two edges - let leftEdge = positions[posIndex++]; - finalPositions.set(rightEdge, front); - finalPositions.set(leftEdge, back - leftEdge.length + 1); - - left = Matrix3.Cartesian3.fromArray(computedLefts, compIndex, left); - let rightNormal; - let leftNormal; - length = leftEdge.length - 3; - for (i = 0; i < length; i += 3) { - rightNormal = ellipsoid.geodeticSurfaceNormal( - Matrix3.Cartesian3.fromArray(rightEdge, i, scratch1), - scratch1 - ); - leftNormal = ellipsoid.geodeticSurfaceNormal( - Matrix3.Cartesian3.fromArray(leftEdge, length - i, scratch2), - scratch2 - ); - normal = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.add(rightNormal, leftNormal, normal), - normal - ); - addNormals(attr, normal, left, front, back, vertexFormat); - - LL = front / 3; - LR = LL + 1; - UL = (back - 2) / 3; - UR = UL - 1; - indices[index++] = UL; - indices[index++] = LL; - indices[index++] = UR; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - - front += 3; - back -= 3; - } - - rightNormal = ellipsoid.geodeticSurfaceNormal( - Matrix3.Cartesian3.fromArray(rightEdge, length, scratch1), - scratch1 - ); - leftNormal = ellipsoid.geodeticSurfaceNormal( - Matrix3.Cartesian3.fromArray(leftEdge, length, scratch2), - scratch2 - ); - normal = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.add(rightNormal, leftNormal, normal), - normal - ); - compIndex += 3; - for (i = 0; i < corners.length; i++) { - let j; - corner = corners[i]; - const l = corner.leftPositions; - const r = corner.rightPositions; - let pivot; - let start; - let outsidePoint = cartesian6; - let previousPoint = cartesian3; - let nextPoint = cartesian4; - normal = Matrix3.Cartesian3.fromArray(computedNormals, compIndex, normal); - if (defaultValue.defined(l)) { - addNormals(attr, normal, left, undefined, back, vertexFormat); - back -= 3; - pivot = LR; - start = UR; - for (j = 0; j < l.length / 3; j++) { - outsidePoint = Matrix3.Cartesian3.fromArray(l, j * 3, outsidePoint); - indices[index++] = pivot; - indices[index++] = start - j - 1; - indices[index++] = start - j; - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - finalPositions, - outsidePoint, - undefined, - back - ); - previousPoint = Matrix3.Cartesian3.fromArray( - finalPositions, - (start - j - 1) * 3, - previousPoint - ); - nextPoint = Matrix3.Cartesian3.fromArray(finalPositions, pivot * 3, nextPoint); - left = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.subtract(previousPoint, nextPoint, left), - left - ); - addNormals(attr, normal, left, undefined, back, vertexFormat); - back -= 3; - } - outsidePoint = Matrix3.Cartesian3.fromArray( - finalPositions, - pivot * 3, - outsidePoint - ); - previousPoint = Matrix3.Cartesian3.subtract( - Matrix3.Cartesian3.fromArray(finalPositions, start * 3, previousPoint), - outsidePoint, - previousPoint - ); - nextPoint = Matrix3.Cartesian3.subtract( - Matrix3.Cartesian3.fromArray(finalPositions, (start - j) * 3, nextPoint), - outsidePoint, - nextPoint - ); - left = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.add(previousPoint, nextPoint, left), - left - ); - addNormals(attr, normal, left, front, undefined, vertexFormat); - front += 3; - } else { - addNormals(attr, normal, left, front, undefined, vertexFormat); - front += 3; - pivot = UR; - start = LR; - for (j = 0; j < r.length / 3; j++) { - outsidePoint = Matrix3.Cartesian3.fromArray(r, j * 3, outsidePoint); - indices[index++] = pivot; - indices[index++] = start + j; - indices[index++] = start + j + 1; - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - finalPositions, - outsidePoint, - front - ); - previousPoint = Matrix3.Cartesian3.fromArray( - finalPositions, - pivot * 3, - previousPoint - ); - nextPoint = Matrix3.Cartesian3.fromArray( - finalPositions, - (start + j) * 3, - nextPoint - ); - left = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.subtract(previousPoint, nextPoint, left), - left - ); - addNormals(attr, normal, left, front, undefined, vertexFormat); - front += 3; - } - outsidePoint = Matrix3.Cartesian3.fromArray( - finalPositions, - pivot * 3, - outsidePoint - ); - previousPoint = Matrix3.Cartesian3.subtract( - Matrix3.Cartesian3.fromArray(finalPositions, (start + j) * 3, previousPoint), - outsidePoint, - previousPoint - ); - nextPoint = Matrix3.Cartesian3.subtract( - Matrix3.Cartesian3.fromArray(finalPositions, start * 3, nextPoint), - outsidePoint, - nextPoint - ); - left = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.negate(Matrix3.Cartesian3.add(nextPoint, previousPoint, left), left), - left - ); - addNormals(attr, normal, left, undefined, back, vertexFormat); - back -= 3; - } - rightEdge = positions[posIndex++]; - leftEdge = positions[posIndex++]; - rightEdge.splice(0, 3); //remove duplicate points added by corner - leftEdge.splice(leftEdge.length - 3, 3); - finalPositions.set(rightEdge, front); - finalPositions.set(leftEdge, back - leftEdge.length + 1); - length = leftEdge.length - 3; - - compIndex += 3; - left = Matrix3.Cartesian3.fromArray(computedLefts, compIndex, left); - for (j = 0; j < leftEdge.length; j += 3) { - rightNormal = ellipsoid.geodeticSurfaceNormal( - Matrix3.Cartesian3.fromArray(rightEdge, j, scratch1), - scratch1 - ); - leftNormal = ellipsoid.geodeticSurfaceNormal( - Matrix3.Cartesian3.fromArray(leftEdge, length - j, scratch2), - scratch2 - ); - normal = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.add(rightNormal, leftNormal, normal), - normal - ); - addNormals(attr, normal, left, front, back, vertexFormat); - - LR = front / 3; - LL = LR - 1; - UR = (back - 2) / 3; - UL = UR + 1; - indices[index++] = UL; - indices[index++] = LL; - indices[index++] = UR; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - - front += 3; - back -= 3; - } - front -= 3; - back += 3; - } - normal = Matrix3.Cartesian3.fromArray( - computedNormals, - computedNormals.length - 3, - normal - ); - addNormals(attr, normal, left, front, back, vertexFormat); - - if (addEndPositions) { - // add rounded end - front += 3; - back -= 3; - leftPos = cartesian3; - rightPos = cartesian4; - const lastEndPositions = endPositions[1]; - for (i = 0; i < halfLength; i++) { - leftPos = Matrix3.Cartesian3.fromArray( - lastEndPositions, - (endPositionLength - i - 1) * 3, - leftPos - ); - rightPos = Matrix3.Cartesian3.fromArray(lastEndPositions, i * 3, rightPos); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - finalPositions, - leftPos, - undefined, - back - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front); - addNormals(attr, normal, left, front, back, vertexFormat); - - LR = front / 3; - LL = LR - 1; - UR = (back - 2) / 3; - UL = UR + 1; - indices[index++] = UL; - indices[index++] = LL; - indices[index++] = UR; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - - front += 3; - back -= 3; - } - } - - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: finalPositions, - }); - - if (vertexFormat.st) { - const st = new Float32Array((size / 3) * 2); - let rightSt; - let leftSt; - let stIndex = 0; - if (addEndPositions) { - leftCount /= 3; - rightCount /= 3; - const theta = Math.PI / (endPositionLength + 1); - leftSt = 1 / (leftCount - endPositionLength + 1); - rightSt = 1 / (rightCount - endPositionLength + 1); - let a; - const halfEndPos = endPositionLength / 2; - for (i = halfEndPos + 1; i < endPositionLength + 1; i++) { - // lower left rounded end - a = Math$1.CesiumMath.PI_OVER_TWO + theta * i; - st[stIndex++] = rightSt * (1 + Math.cos(a)); - st[stIndex++] = 0.5 * (1 + Math.sin(a)); - } - for (i = 1; i < rightCount - endPositionLength + 1; i++) { - // bottom edge - st[stIndex++] = i * rightSt; - st[stIndex++] = 0; - } - for (i = endPositionLength; i > halfEndPos; i--) { - // lower right rounded end - a = Math$1.CesiumMath.PI_OVER_TWO - i * theta; - st[stIndex++] = 1 - rightSt * (1 + Math.cos(a)); - st[stIndex++] = 0.5 * (1 + Math.sin(a)); - } - for (i = halfEndPos; i > 0; i--) { - // upper right rounded end - a = Math$1.CesiumMath.PI_OVER_TWO - theta * i; - st[stIndex++] = 1 - leftSt * (1 + Math.cos(a)); - st[stIndex++] = 0.5 * (1 + Math.sin(a)); - } - for (i = leftCount - endPositionLength; i > 0; i--) { - // top edge - st[stIndex++] = i * leftSt; - st[stIndex++] = 1; - } - for (i = 1; i < halfEndPos + 1; i++) { - // upper left rounded end - a = Math$1.CesiumMath.PI_OVER_TWO + theta * i; - st[stIndex++] = leftSt * (1 + Math.cos(a)); - st[stIndex++] = 0.5 * (1 + Math.sin(a)); - } - } else { - leftCount /= 3; - rightCount /= 3; - leftSt = 1 / (leftCount - 1); - rightSt = 1 / (rightCount - 1); - for (i = 0; i < rightCount; i++) { - // bottom edge - st[stIndex++] = i * rightSt; - st[stIndex++] = 0; - } - for (i = leftCount; i > 0; i--) { - // top edge - st[stIndex++] = (i - 1) * leftSt; - st[stIndex++] = 1; - } - } - - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: st, - }); - } - - if (vertexFormat.normal) { - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: attr.normals, - }); - } - - if (vertexFormat.tangent) { - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: attr.tangents, - }); - } - - if (vertexFormat.bitangent) { - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: attr.bitangents, - }); - } - - return { - attributes: attributes, - indices: indices, - }; - } - - function extrudedAttributes(attributes, vertexFormat) { - if ( - !vertexFormat.normal && - !vertexFormat.tangent && - !vertexFormat.bitangent && - !vertexFormat.st - ) { - return attributes; - } - const positions = attributes.position.values; - let topNormals; - let topBitangents; - if (vertexFormat.normal || vertexFormat.bitangent) { - topNormals = attributes.normal.values; - topBitangents = attributes.bitangent.values; - } - const size = attributes.position.values.length / 18; - const threeSize = size * 3; - const twoSize = size * 2; - const sixSize = threeSize * 2; - let i; - if (vertexFormat.normal || vertexFormat.bitangent || vertexFormat.tangent) { - const normals = vertexFormat.normal - ? new Float32Array(threeSize * 6) - : undefined; - const tangents = vertexFormat.tangent - ? new Float32Array(threeSize * 6) - : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(threeSize * 6) - : undefined; - let topPosition = cartesian1; - let bottomPosition = cartesian2; - let previousPosition = cartesian3; - let normal = cartesian4; - let tangent = cartesian5; - let bitangent = cartesian6; - let attrIndex = sixSize; - for (i = 0; i < threeSize; i += 3) { - const attrIndexOffset = attrIndex + sixSize; - topPosition = Matrix3.Cartesian3.fromArray(positions, i, topPosition); - bottomPosition = Matrix3.Cartesian3.fromArray( - positions, - i + threeSize, - bottomPosition - ); - previousPosition = Matrix3.Cartesian3.fromArray( - positions, - (i + 3) % threeSize, - previousPosition - ); - bottomPosition = Matrix3.Cartesian3.subtract( - bottomPosition, - topPosition, - bottomPosition - ); - previousPosition = Matrix3.Cartesian3.subtract( - previousPosition, - topPosition, - previousPosition - ); - normal = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(bottomPosition, previousPosition, normal), - normal - ); - if (vertexFormat.normal) { - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(normals, normal, attrIndexOffset); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - normals, - normal, - attrIndexOffset + 3 - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(normals, normal, attrIndex); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(normals, normal, attrIndex + 3); - } - if (vertexFormat.tangent || vertexFormat.bitangent) { - bitangent = Matrix3.Cartesian3.fromArray(topNormals, i, bitangent); - if (vertexFormat.bitangent) { - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - bitangents, - bitangent, - attrIndexOffset - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - bitangents, - bitangent, - attrIndexOffset + 3 - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - bitangents, - bitangent, - attrIndex - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - bitangents, - bitangent, - attrIndex + 3 - ); - } - - if (vertexFormat.tangent) { - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(bitangent, normal, tangent), - tangent - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - tangents, - tangent, - attrIndexOffset - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - tangents, - tangent, - attrIndexOffset + 3 - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(tangents, tangent, attrIndex); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - tangents, - tangent, - attrIndex + 3 - ); - } - } - attrIndex += 6; - } - - if (vertexFormat.normal) { - normals.set(topNormals); //top - for (i = 0; i < threeSize; i += 3) { - //bottom normals - normals[i + threeSize] = -topNormals[i]; - normals[i + threeSize + 1] = -topNormals[i + 1]; - normals[i + threeSize + 2] = -topNormals[i + 2]; - } - attributes.normal.values = normals; - } else { - attributes.normal = undefined; - } - - if (vertexFormat.bitangent) { - bitangents.set(topBitangents); //top - bitangents.set(topBitangents, threeSize); //bottom - attributes.bitangent.values = bitangents; - } else { - attributes.bitangent = undefined; - } - - if (vertexFormat.tangent) { - const topTangents = attributes.tangent.values; - tangents.set(topTangents); //top - tangents.set(topTangents, threeSize); //bottom - attributes.tangent.values = tangents; - } - } - if (vertexFormat.st) { - const topSt = attributes.st.values; - const st = new Float32Array(twoSize * 6); - st.set(topSt); //top - st.set(topSt, twoSize); //bottom - let index = twoSize * 2; - - for (let j = 0; j < 2; j++) { - st[index++] = topSt[0]; - st[index++] = topSt[1]; - for (i = 2; i < twoSize; i += 2) { - const s = topSt[i]; - const t = topSt[i + 1]; - st[index++] = s; - st[index++] = t; - st[index++] = s; - st[index++] = t; - } - st[index++] = topSt[0]; - st[index++] = topSt[1]; - } - attributes.st.values = st; - } - - return attributes; - } - - function addWallPositions(positions, index, wallPositions) { - wallPositions[index++] = positions[0]; - wallPositions[index++] = positions[1]; - wallPositions[index++] = positions[2]; - for (let i = 3; i < positions.length; i += 3) { - const x = positions[i]; - const y = positions[i + 1]; - const z = positions[i + 2]; - wallPositions[index++] = x; - wallPositions[index++] = y; - wallPositions[index++] = z; - wallPositions[index++] = x; - wallPositions[index++] = y; - wallPositions[index++] = z; - } - wallPositions[index++] = positions[0]; - wallPositions[index++] = positions[1]; - wallPositions[index++] = positions[2]; - - return wallPositions; - } - - function computePositionsExtruded(params, vertexFormat) { - const topVertexFormat = new VertexFormat.VertexFormat({ - position: vertexFormat.position, - normal: - vertexFormat.normal || vertexFormat.bitangent || params.shadowVolume, - tangent: vertexFormat.tangent, - bitangent: vertexFormat.normal || vertexFormat.bitangent, - st: vertexFormat.st, - }); - const ellipsoid = params.ellipsoid; - const computedPositions = CorridorGeometryLibrary.CorridorGeometryLibrary.computePositions(params); - const attr = combine(computedPositions, topVertexFormat, ellipsoid); - const height = params.height; - const extrudedHeight = params.extrudedHeight; - let attributes = attr.attributes; - const indices = attr.indices; - let positions = attributes.position.values; - let length = positions.length; - const newPositions = new Float64Array(length * 6); - let extrudedPositions = new Float64Array(length); - extrudedPositions.set(positions); - let wallPositions = new Float64Array(length * 4); - - positions = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - positions, - height, - ellipsoid - ); - wallPositions = addWallPositions(positions, 0, wallPositions); - extrudedPositions = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - extrudedPositions, - extrudedHeight, - ellipsoid - ); - wallPositions = addWallPositions( - extrudedPositions, - length * 2, - wallPositions - ); - newPositions.set(positions); - newPositions.set(extrudedPositions, length); - newPositions.set(wallPositions, length * 2); - attributes.position.values = newPositions; - - attributes = extrudedAttributes(attributes, vertexFormat); - let i; - const size = length / 3; - if (params.shadowVolume) { - const topNormals = attributes.normal.values; - length = topNormals.length; - - let extrudeNormals = new Float32Array(length * 6); - for (i = 0; i < length; i++) { - topNormals[i] = -topNormals[i]; - } - //only get normals for bottom layer that's going to be pushed down - extrudeNormals.set(topNormals, length); //bottom face - extrudeNormals = addWallPositions(topNormals, length * 4, extrudeNormals); //bottom wall - attributes.extrudeDirection = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: extrudeNormals, - }); - if (!vertexFormat.normal) { - attributes.normal = undefined; - } - } - if (defaultValue.defined(params.offsetAttribute)) { - let applyOffset = new Uint8Array(size * 6); - if (params.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - applyOffset = applyOffset - .fill(1, 0, size) // top face - .fill(1, size * 2, size * 4); // top wall - } else { - const applyOffsetValue = - params.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - applyOffset = applyOffset.fill(applyOffsetValue); - } - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - const iLength = indices.length; - const twoSize = size + size; - const newIndices = IndexDatatype.IndexDatatype.createTypedArray( - newPositions.length / 3, - iLength * 2 + twoSize * 3 - ); - newIndices.set(indices); - let index = iLength; - for (i = 0; i < iLength; i += 3) { - // bottom indices - const v0 = indices[i]; - const v1 = indices[i + 1]; - const v2 = indices[i + 2]; - newIndices[index++] = v2 + size; - newIndices[index++] = v1 + size; - newIndices[index++] = v0 + size; - } - - let UL, LL, UR, LR; - - for (i = 0; i < twoSize; i += 2) { - //wall indices - UL = i + twoSize; - LL = UL + twoSize; - UR = UL + 1; - LR = LL + 1; - newIndices[index++] = UL; - newIndices[index++] = LL; - newIndices[index++] = UR; - newIndices[index++] = UR; - newIndices[index++] = LL; - newIndices[index++] = LR; - } - - return { - attributes: attributes, - indices: newIndices, - }; - } - - const scratchCartesian1 = new Matrix3.Cartesian3(); - const scratchCartesian2 = new Matrix3.Cartesian3(); - const scratchCartographic = new Matrix3.Cartographic(); - - function computeOffsetPoints( - position1, - position2, - ellipsoid, - halfWidth, - min, - max - ) { - // Compute direction of offset the point - const direction = Matrix3.Cartesian3.subtract( - position2, - position1, - scratchCartesian1 - ); - Matrix3.Cartesian3.normalize(direction, direction); - const normal = ellipsoid.geodeticSurfaceNormal(position1, scratchCartesian2); - const offsetDirection = Matrix3.Cartesian3.cross( - direction, - normal, - scratchCartesian1 - ); - Matrix3.Cartesian3.multiplyByScalar(offsetDirection, halfWidth, offsetDirection); - - let minLat = min.latitude; - let minLon = min.longitude; - let maxLat = max.latitude; - let maxLon = max.longitude; - - // Compute 2 offset points - Matrix3.Cartesian3.add(position1, offsetDirection, scratchCartesian2); - ellipsoid.cartesianToCartographic(scratchCartesian2, scratchCartographic); - - let lat = scratchCartographic.latitude; - let lon = scratchCartographic.longitude; - minLat = Math.min(minLat, lat); - minLon = Math.min(minLon, lon); - maxLat = Math.max(maxLat, lat); - maxLon = Math.max(maxLon, lon); - - Matrix3.Cartesian3.subtract(position1, offsetDirection, scratchCartesian2); - ellipsoid.cartesianToCartographic(scratchCartesian2, scratchCartographic); - - lat = scratchCartographic.latitude; - lon = scratchCartographic.longitude; - minLat = Math.min(minLat, lat); - minLon = Math.min(minLon, lon); - maxLat = Math.max(maxLat, lat); - maxLon = Math.max(maxLon, lon); - - min.latitude = minLat; - min.longitude = minLon; - max.latitude = maxLat; - max.longitude = maxLon; - } - - const scratchCartesianOffset = new Matrix3.Cartesian3(); - const scratchCartesianEnds = new Matrix3.Cartesian3(); - const scratchCartographicMin = new Matrix3.Cartographic(); - const scratchCartographicMax = new Matrix3.Cartographic(); - - function computeRectangle(positions, ellipsoid, width, cornerType, result) { - positions = scaleToSurface(positions, ellipsoid); - const cleanPositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - positions, - Matrix3.Cartesian3.equalsEpsilon - ); - const length = cleanPositions.length; - if (length < 2 || width <= 0) { - return new Matrix2.Rectangle(); - } - const halfWidth = width * 0.5; - - scratchCartographicMin.latitude = Number.POSITIVE_INFINITY; - scratchCartographicMin.longitude = Number.POSITIVE_INFINITY; - scratchCartographicMax.latitude = Number.NEGATIVE_INFINITY; - scratchCartographicMax.longitude = Number.NEGATIVE_INFINITY; - - let lat, lon; - if (cornerType === PolylineVolumeGeometryLibrary.CornerType.ROUNDED) { - // Compute start cap - const first = cleanPositions[0]; - Matrix3.Cartesian3.subtract(first, cleanPositions[1], scratchCartesianOffset); - Matrix3.Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset); - Matrix3.Cartesian3.multiplyByScalar( - scratchCartesianOffset, - halfWidth, - scratchCartesianOffset - ); - Matrix3.Cartesian3.add(first, scratchCartesianOffset, scratchCartesianEnds); - - ellipsoid.cartesianToCartographic( - scratchCartesianEnds, - scratchCartographic - ); - lat = scratchCartographic.latitude; - lon = scratchCartographic.longitude; - scratchCartographicMin.latitude = Math.min( - scratchCartographicMin.latitude, - lat - ); - scratchCartographicMin.longitude = Math.min( - scratchCartographicMin.longitude, - lon - ); - scratchCartographicMax.latitude = Math.max( - scratchCartographicMax.latitude, - lat - ); - scratchCartographicMax.longitude = Math.max( - scratchCartographicMax.longitude, - lon - ); - } - - // Compute the rest - for (let i = 0; i < length - 1; ++i) { - computeOffsetPoints( - cleanPositions[i], - cleanPositions[i + 1], - ellipsoid, - halfWidth, - scratchCartographicMin, - scratchCartographicMax - ); - } - - // Compute ending point - const last = cleanPositions[length - 1]; - Matrix3.Cartesian3.subtract(last, cleanPositions[length - 2], scratchCartesianOffset); - Matrix3.Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset); - Matrix3.Cartesian3.multiplyByScalar( - scratchCartesianOffset, - halfWidth, - scratchCartesianOffset - ); - Matrix3.Cartesian3.add(last, scratchCartesianOffset, scratchCartesianEnds); - computeOffsetPoints( - last, - scratchCartesianEnds, - ellipsoid, - halfWidth, - scratchCartographicMin, - scratchCartographicMax - ); - - if (cornerType === PolylineVolumeGeometryLibrary.CornerType.ROUNDED) { - // Compute end cap - ellipsoid.cartesianToCartographic( - scratchCartesianEnds, - scratchCartographic - ); - lat = scratchCartographic.latitude; - lon = scratchCartographic.longitude; - scratchCartographicMin.latitude = Math.min( - scratchCartographicMin.latitude, - lat - ); - scratchCartographicMin.longitude = Math.min( - scratchCartographicMin.longitude, - lon - ); - scratchCartographicMax.latitude = Math.max( - scratchCartographicMax.latitude, - lat - ); - scratchCartographicMax.longitude = Math.max( - scratchCartographicMax.longitude, - lon - ); - } - - const rectangle = defaultValue.defined(result) ? result : new Matrix2.Rectangle(); - rectangle.north = scratchCartographicMax.latitude; - rectangle.south = scratchCartographicMin.latitude; - rectangle.east = scratchCartographicMax.longitude; - rectangle.west = scratchCartographicMin.longitude; - - return rectangle; - } - - /** - * A description of a corridor. Corridor geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. - * - * @alias CorridorGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor. - * @param {Number} options.width The distance between the edges of the corridor in meters. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Number} [options.height=0] The distance in meters between the ellipsoid surface and the positions. - * @param {Number} [options.extrudedHeight] The distance in meters between the ellipsoid surface and the extruded face. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners. - * - * @see CorridorGeometry.createGeometry - * @see Packable - * - * @demo {@link https://sandcastle.cesium.com/index.html?src=Corridor.html|Cesium Sandcastle Corridor Demo} - * - * @example - * const corridor = new Cesium.CorridorGeometry({ - * vertexFormat : Cesium.VertexFormat.POSITION_ONLY, - * positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]), - * width : 100000 - * }); - */ - function CorridorGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.positions; - const width = options.width; - - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.positions", positions); - Check.Check.defined("options.width", width); - //>>includeEnd('debug'); - - const height = defaultValue.defaultValue(options.height, 0.0); - const extrudedHeight = defaultValue.defaultValue(options.extrudedHeight, height); - - this._positions = positions; - this._ellipsoid = Matrix3.Ellipsoid.clone( - defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84) - ); - this._vertexFormat = VertexFormat.VertexFormat.clone( - defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT) - ); - this._width = width; - this._height = Math.max(height, extrudedHeight); - this._extrudedHeight = Math.min(height, extrudedHeight); - this._cornerType = defaultValue.defaultValue(options.cornerType, PolylineVolumeGeometryLibrary.CornerType.ROUNDED); - this._granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - this._shadowVolume = defaultValue.defaultValue(options.shadowVolume, false); - this._workerName = "createCorridorGeometry"; - this._offsetAttribute = options.offsetAttribute; - this._rectangle = undefined; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - 1 + - positions.length * Matrix3.Cartesian3.packedLength + - Matrix3.Ellipsoid.packedLength + - VertexFormat.VertexFormat.packedLength + - 7; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {CorridorGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - CorridorGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const positions = value._positions; - const length = positions.length; - array[startingIndex++] = length; - - for (let i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - Matrix3.Cartesian3.pack(positions[i], array, startingIndex); - } - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._width; - array[startingIndex++] = value._height; - array[startingIndex++] = value._extrudedHeight; - array[startingIndex++] = value._cornerType; - array[startingIndex++] = value._granularity; - array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - positions: undefined, - ellipsoid: scratchEllipsoid, - vertexFormat: scratchVertexFormat, - width: undefined, - height: undefined, - extrudedHeight: undefined, - cornerType: undefined, - granularity: undefined, - shadowVolume: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {CorridorGeometry} [result] The object into which to store the result. - * @returns {CorridorGeometry} The modified result parameter or a new CorridorGeometry instance if one was not provided. - */ - CorridorGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const length = array[startingIndex++]; - const positions = new Array(length); - - for (let i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - positions[i] = Matrix3.Cartesian3.unpack(array, startingIndex); - } - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const width = array[startingIndex++]; - const height = array[startingIndex++]; - const extrudedHeight = array[startingIndex++]; - const cornerType = array[startingIndex++]; - const granularity = array[startingIndex++]; - const shadowVolume = array[startingIndex++] === 1.0; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.positions = positions; - scratchOptions.width = width; - scratchOptions.height = height; - scratchOptions.extrudedHeight = extrudedHeight; - scratchOptions.cornerType = cornerType; - scratchOptions.granularity = granularity; - scratchOptions.shadowVolume = shadowVolume; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return new CorridorGeometry(scratchOptions); - } - - result._positions = positions; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._width = width; - result._height = height; - result._extrudedHeight = extrudedHeight; - result._cornerType = cornerType; - result._granularity = granularity; - result._shadowVolume = shadowVolume; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the bounding rectangle given the provided options - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor. - * @param {Number} options.width The distance between the edges of the corridor in meters. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners. - * @param {Rectangle} [result] An object in which to store the result. - * - * @returns {Rectangle} The result rectangle. - */ - CorridorGeometry.computeRectangle = function (options, result) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.positions; - const width = options.width; - - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.positions", positions); - Check.Check.defined("options.width", width); - //>>includeEnd('debug'); - - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - const cornerType = defaultValue.defaultValue(options.cornerType, PolylineVolumeGeometryLibrary.CornerType.ROUNDED); - - return computeRectangle(positions, ellipsoid, width, cornerType, result); - }; - - /** - * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere. - * - * @param {CorridorGeometry} corridorGeometry A description of the corridor. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - CorridorGeometry.createGeometry = function (corridorGeometry) { - let positions = corridorGeometry._positions; - const width = corridorGeometry._width; - const ellipsoid = corridorGeometry._ellipsoid; - - positions = scaleToSurface(positions, ellipsoid); - const cleanPositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - positions, - Matrix3.Cartesian3.equalsEpsilon - ); - - if (cleanPositions.length < 2 || width <= 0) { - return; - } - - const height = corridorGeometry._height; - const extrudedHeight = corridorGeometry._extrudedHeight; - const extrude = !Math$1.CesiumMath.equalsEpsilon( - height, - extrudedHeight, - 0, - Math$1.CesiumMath.EPSILON2 - ); - - const vertexFormat = corridorGeometry._vertexFormat; - const params = { - ellipsoid: ellipsoid, - positions: cleanPositions, - width: width, - cornerType: corridorGeometry._cornerType, - granularity: corridorGeometry._granularity, - saveAttributes: true, - }; - let attr; - if (extrude) { - params.height = height; - params.extrudedHeight = extrudedHeight; - params.shadowVolume = corridorGeometry._shadowVolume; - params.offsetAttribute = corridorGeometry._offsetAttribute; - attr = computePositionsExtruded(params, vertexFormat); - } else { - const computedPositions = CorridorGeometryLibrary.CorridorGeometryLibrary.computePositions(params); - attr = combine(computedPositions, vertexFormat, ellipsoid); - attr.attributes.position.values = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - attr.attributes.position.values, - height, - ellipsoid - ); - - if (defaultValue.defined(corridorGeometry._offsetAttribute)) { - const applyOffsetValue = - corridorGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const length = attr.attributes.position.values.length; - const applyOffset = new Uint8Array(length / 3).fill(applyOffsetValue); - attr.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - } - const attributes = attr.attributes; - const boundingSphere = Transforms.BoundingSphere.fromVertices( - attributes.position.values, - undefined, - 3 - ); - if (!vertexFormat.position) { - attr.attributes.position.values = undefined; - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: attr.indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: boundingSphere, - offsetAttribute: corridorGeometry._offsetAttribute, - }); - }; - - /** - * @private - */ - CorridorGeometry.createShadowVolume = function ( - corridorGeometry, - minHeightFunc, - maxHeightFunc - ) { - const granularity = corridorGeometry._granularity; - const ellipsoid = corridorGeometry._ellipsoid; - - const minHeight = minHeightFunc(granularity, ellipsoid); - const maxHeight = maxHeightFunc(granularity, ellipsoid); - - return new CorridorGeometry({ - positions: corridorGeometry._positions, - width: corridorGeometry._width, - cornerType: corridorGeometry._cornerType, - ellipsoid: ellipsoid, - granularity: granularity, - extrudedHeight: minHeight, - height: maxHeight, - vertexFormat: VertexFormat.VertexFormat.POSITION_ONLY, - shadowVolume: true, - }); - }; - - Object.defineProperties(CorridorGeometry.prototype, { - /** - * @private - */ - rectangle: { - get: function () { - if (!defaultValue.defined(this._rectangle)) { - this._rectangle = computeRectangle( - this._positions, - this._ellipsoid, - this._width, - this._cornerType - ); - } - return this._rectangle; - }, - }, - /** - * For remapping texture coordinates when rendering CorridorGeometries as GroundPrimitives. - * - * Corridors don't support stRotation, - * so just return the corners of the original system. - * @private - */ - textureCoordinateRotationPoints: { - get: function () { - return [0, 0, 0, 1, 1, 0]; - }, - }, - }); - - function createCorridorGeometry(corridorGeometry, offset) { - if (defaultValue.defined(offset)) { - corridorGeometry = CorridorGeometry.unpack(corridorGeometry, offset); - } - corridorGeometry._ellipsoid = Matrix3.Ellipsoid.clone(corridorGeometry._ellipsoid); - return CorridorGeometry.createGeometry(corridorGeometry); - } - - return createCorridorGeometry; - -})); -//# sourceMappingURL=createCorridorGeometry.js.map diff --git a/debug/cesium/Workers/createCorridorGeometry.js.map b/debug/cesium/Workers/createCorridorGeometry.js.map deleted file mode 100644 index a09cf03..0000000 --- a/debug/cesium/Workers/createCorridorGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createCorridorGeometry.js","sources":["../../../Source/Core/CorridorGeometry.js","../../../Source/WorkersES6/createCorridorGeometry.js"],"sourcesContent":["import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport CornerType from \"./CornerType.js\";\r\nimport CorridorGeometryLibrary from \"./CorridorGeometryLibrary.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst cartesian1 = new Cartesian3();\r\nconst cartesian2 = new Cartesian3();\r\nconst cartesian3 = new Cartesian3();\r\nconst cartesian4 = new Cartesian3();\r\nconst cartesian5 = new Cartesian3();\r\nconst cartesian6 = new Cartesian3();\r\n\r\nconst scratch1 = new Cartesian3();\r\nconst scratch2 = new Cartesian3();\r\n\r\nfunction scaleToSurface(positions, ellipsoid) {\r\n for (let i = 0; i < positions.length; i++) {\r\n positions[i] = ellipsoid.scaleToGeodeticSurface(positions[i], positions[i]);\r\n }\r\n return positions;\r\n}\r\n\r\nfunction addNormals(attr, normal, left, front, back, vertexFormat) {\r\n const normals = attr.normals;\r\n const tangents = attr.tangents;\r\n const bitangents = attr.bitangents;\r\n const forward = Cartesian3.normalize(\r\n Cartesian3.cross(left, normal, scratch1),\r\n scratch1\r\n );\r\n if (vertexFormat.normal) {\r\n CorridorGeometryLibrary.addAttribute(normals, normal, front, back);\r\n }\r\n if (vertexFormat.tangent) {\r\n CorridorGeometryLibrary.addAttribute(tangents, forward, front, back);\r\n }\r\n if (vertexFormat.bitangent) {\r\n CorridorGeometryLibrary.addAttribute(bitangents, left, front, back);\r\n }\r\n}\r\n\r\nfunction combine(computedPositions, vertexFormat, ellipsoid) {\r\n const positions = computedPositions.positions;\r\n const corners = computedPositions.corners;\r\n const endPositions = computedPositions.endPositions;\r\n const computedLefts = computedPositions.lefts;\r\n const computedNormals = computedPositions.normals;\r\n const attributes = new GeometryAttributes();\r\n let corner;\r\n let leftCount = 0;\r\n let rightCount = 0;\r\n let i;\r\n let indicesLength = 0;\r\n let length;\r\n for (i = 0; i < positions.length; i += 2) {\r\n length = positions[i].length - 3;\r\n leftCount += length; //subtracting 3 to account for duplicate points at corners\r\n indicesLength += length * 2;\r\n rightCount += positions[i + 1].length - 3;\r\n }\r\n leftCount += 3; //add back count for end positions\r\n rightCount += 3;\r\n for (i = 0; i < corners.length; i++) {\r\n corner = corners[i];\r\n const leftSide = corners[i].leftPositions;\r\n if (defined(leftSide)) {\r\n length = leftSide.length;\r\n leftCount += length;\r\n indicesLength += length;\r\n } else {\r\n length = corners[i].rightPositions.length;\r\n rightCount += length;\r\n indicesLength += length;\r\n }\r\n }\r\n\r\n const addEndPositions = defined(endPositions);\r\n let endPositionLength;\r\n if (addEndPositions) {\r\n endPositionLength = endPositions[0].length - 3;\r\n leftCount += endPositionLength;\r\n rightCount += endPositionLength;\r\n endPositionLength /= 3;\r\n indicesLength += endPositionLength * 6;\r\n }\r\n const size = leftCount + rightCount;\r\n const finalPositions = new Float64Array(size);\r\n const normals = vertexFormat.normal ? new Float32Array(size) : undefined;\r\n const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(size)\r\n : undefined;\r\n const attr = {\r\n normals: normals,\r\n tangents: tangents,\r\n bitangents: bitangents,\r\n };\r\n let front = 0;\r\n let back = size - 1;\r\n let UL, LL, UR, LR;\r\n let normal = cartesian1;\r\n let left = cartesian2;\r\n let rightPos, leftPos;\r\n const halfLength = endPositionLength / 2;\r\n\r\n const indices = IndexDatatype.createTypedArray(size / 3, indicesLength);\r\n let index = 0;\r\n if (addEndPositions) {\r\n // add rounded end\r\n leftPos = cartesian3;\r\n rightPos = cartesian4;\r\n const firstEndPositions = endPositions[0];\r\n normal = Cartesian3.fromArray(computedNormals, 0, normal);\r\n left = Cartesian3.fromArray(computedLefts, 0, left);\r\n for (i = 0; i < halfLength; i++) {\r\n leftPos = Cartesian3.fromArray(\r\n firstEndPositions,\r\n (halfLength - 1 - i) * 3,\r\n leftPos\r\n );\r\n rightPos = Cartesian3.fromArray(\r\n firstEndPositions,\r\n (halfLength + i) * 3,\r\n rightPos\r\n );\r\n CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\r\n CorridorGeometryLibrary.addAttribute(\r\n finalPositions,\r\n leftPos,\r\n undefined,\r\n back\r\n );\r\n addNormals(attr, normal, left, front, back, vertexFormat);\r\n\r\n LL = front / 3;\r\n LR = LL + 1;\r\n UL = (back - 2) / 3;\r\n UR = UL - 1;\r\n indices[index++] = UL;\r\n indices[index++] = LL;\r\n indices[index++] = UR;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n\r\n front += 3;\r\n back -= 3;\r\n }\r\n }\r\n\r\n let posIndex = 0;\r\n let compIndex = 0;\r\n let rightEdge = positions[posIndex++]; //add first two edges\r\n let leftEdge = positions[posIndex++];\r\n finalPositions.set(rightEdge, front);\r\n finalPositions.set(leftEdge, back - leftEdge.length + 1);\r\n\r\n left = Cartesian3.fromArray(computedLefts, compIndex, left);\r\n let rightNormal;\r\n let leftNormal;\r\n length = leftEdge.length - 3;\r\n for (i = 0; i < length; i += 3) {\r\n rightNormal = ellipsoid.geodeticSurfaceNormal(\r\n Cartesian3.fromArray(rightEdge, i, scratch1),\r\n scratch1\r\n );\r\n leftNormal = ellipsoid.geodeticSurfaceNormal(\r\n Cartesian3.fromArray(leftEdge, length - i, scratch2),\r\n scratch2\r\n );\r\n normal = Cartesian3.normalize(\r\n Cartesian3.add(rightNormal, leftNormal, normal),\r\n normal\r\n );\r\n addNormals(attr, normal, left, front, back, vertexFormat);\r\n\r\n LL = front / 3;\r\n LR = LL + 1;\r\n UL = (back - 2) / 3;\r\n UR = UL - 1;\r\n indices[index++] = UL;\r\n indices[index++] = LL;\r\n indices[index++] = UR;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n\r\n front += 3;\r\n back -= 3;\r\n }\r\n\r\n rightNormal = ellipsoid.geodeticSurfaceNormal(\r\n Cartesian3.fromArray(rightEdge, length, scratch1),\r\n scratch1\r\n );\r\n leftNormal = ellipsoid.geodeticSurfaceNormal(\r\n Cartesian3.fromArray(leftEdge, length, scratch2),\r\n scratch2\r\n );\r\n normal = Cartesian3.normalize(\r\n Cartesian3.add(rightNormal, leftNormal, normal),\r\n normal\r\n );\r\n compIndex += 3;\r\n for (i = 0; i < corners.length; i++) {\r\n let j;\r\n corner = corners[i];\r\n const l = corner.leftPositions;\r\n const r = corner.rightPositions;\r\n let pivot;\r\n let start;\r\n let outsidePoint = cartesian6;\r\n let previousPoint = cartesian3;\r\n let nextPoint = cartesian4;\r\n normal = Cartesian3.fromArray(computedNormals, compIndex, normal);\r\n if (defined(l)) {\r\n addNormals(attr, normal, left, undefined, back, vertexFormat);\r\n back -= 3;\r\n pivot = LR;\r\n start = UR;\r\n for (j = 0; j < l.length / 3; j++) {\r\n outsidePoint = Cartesian3.fromArray(l, j * 3, outsidePoint);\r\n indices[index++] = pivot;\r\n indices[index++] = start - j - 1;\r\n indices[index++] = start - j;\r\n CorridorGeometryLibrary.addAttribute(\r\n finalPositions,\r\n outsidePoint,\r\n undefined,\r\n back\r\n );\r\n previousPoint = Cartesian3.fromArray(\r\n finalPositions,\r\n (start - j - 1) * 3,\r\n previousPoint\r\n );\r\n nextPoint = Cartesian3.fromArray(finalPositions, pivot * 3, nextPoint);\r\n left = Cartesian3.normalize(\r\n Cartesian3.subtract(previousPoint, nextPoint, left),\r\n left\r\n );\r\n addNormals(attr, normal, left, undefined, back, vertexFormat);\r\n back -= 3;\r\n }\r\n outsidePoint = Cartesian3.fromArray(\r\n finalPositions,\r\n pivot * 3,\r\n outsidePoint\r\n );\r\n previousPoint = Cartesian3.subtract(\r\n Cartesian3.fromArray(finalPositions, start * 3, previousPoint),\r\n outsidePoint,\r\n previousPoint\r\n );\r\n nextPoint = Cartesian3.subtract(\r\n Cartesian3.fromArray(finalPositions, (start - j) * 3, nextPoint),\r\n outsidePoint,\r\n nextPoint\r\n );\r\n left = Cartesian3.normalize(\r\n Cartesian3.add(previousPoint, nextPoint, left),\r\n left\r\n );\r\n addNormals(attr, normal, left, front, undefined, vertexFormat);\r\n front += 3;\r\n } else {\r\n addNormals(attr, normal, left, front, undefined, vertexFormat);\r\n front += 3;\r\n pivot = UR;\r\n start = LR;\r\n for (j = 0; j < r.length / 3; j++) {\r\n outsidePoint = Cartesian3.fromArray(r, j * 3, outsidePoint);\r\n indices[index++] = pivot;\r\n indices[index++] = start + j;\r\n indices[index++] = start + j + 1;\r\n CorridorGeometryLibrary.addAttribute(\r\n finalPositions,\r\n outsidePoint,\r\n front\r\n );\r\n previousPoint = Cartesian3.fromArray(\r\n finalPositions,\r\n pivot * 3,\r\n previousPoint\r\n );\r\n nextPoint = Cartesian3.fromArray(\r\n finalPositions,\r\n (start + j) * 3,\r\n nextPoint\r\n );\r\n left = Cartesian3.normalize(\r\n Cartesian3.subtract(previousPoint, nextPoint, left),\r\n left\r\n );\r\n addNormals(attr, normal, left, front, undefined, vertexFormat);\r\n front += 3;\r\n }\r\n outsidePoint = Cartesian3.fromArray(\r\n finalPositions,\r\n pivot * 3,\r\n outsidePoint\r\n );\r\n previousPoint = Cartesian3.subtract(\r\n Cartesian3.fromArray(finalPositions, (start + j) * 3, previousPoint),\r\n outsidePoint,\r\n previousPoint\r\n );\r\n nextPoint = Cartesian3.subtract(\r\n Cartesian3.fromArray(finalPositions, start * 3, nextPoint),\r\n outsidePoint,\r\n nextPoint\r\n );\r\n left = Cartesian3.normalize(\r\n Cartesian3.negate(Cartesian3.add(nextPoint, previousPoint, left), left),\r\n left\r\n );\r\n addNormals(attr, normal, left, undefined, back, vertexFormat);\r\n back -= 3;\r\n }\r\n rightEdge = positions[posIndex++];\r\n leftEdge = positions[posIndex++];\r\n rightEdge.splice(0, 3); //remove duplicate points added by corner\r\n leftEdge.splice(leftEdge.length - 3, 3);\r\n finalPositions.set(rightEdge, front);\r\n finalPositions.set(leftEdge, back - leftEdge.length + 1);\r\n length = leftEdge.length - 3;\r\n\r\n compIndex += 3;\r\n left = Cartesian3.fromArray(computedLefts, compIndex, left);\r\n for (j = 0; j < leftEdge.length; j += 3) {\r\n rightNormal = ellipsoid.geodeticSurfaceNormal(\r\n Cartesian3.fromArray(rightEdge, j, scratch1),\r\n scratch1\r\n );\r\n leftNormal = ellipsoid.geodeticSurfaceNormal(\r\n Cartesian3.fromArray(leftEdge, length - j, scratch2),\r\n scratch2\r\n );\r\n normal = Cartesian3.normalize(\r\n Cartesian3.add(rightNormal, leftNormal, normal),\r\n normal\r\n );\r\n addNormals(attr, normal, left, front, back, vertexFormat);\r\n\r\n LR = front / 3;\r\n LL = LR - 1;\r\n UR = (back - 2) / 3;\r\n UL = UR + 1;\r\n indices[index++] = UL;\r\n indices[index++] = LL;\r\n indices[index++] = UR;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n\r\n front += 3;\r\n back -= 3;\r\n }\r\n front -= 3;\r\n back += 3;\r\n }\r\n normal = Cartesian3.fromArray(\r\n computedNormals,\r\n computedNormals.length - 3,\r\n normal\r\n );\r\n addNormals(attr, normal, left, front, back, vertexFormat);\r\n\r\n if (addEndPositions) {\r\n // add rounded end\r\n front += 3;\r\n back -= 3;\r\n leftPos = cartesian3;\r\n rightPos = cartesian4;\r\n const lastEndPositions = endPositions[1];\r\n for (i = 0; i < halfLength; i++) {\r\n leftPos = Cartesian3.fromArray(\r\n lastEndPositions,\r\n (endPositionLength - i - 1) * 3,\r\n leftPos\r\n );\r\n rightPos = Cartesian3.fromArray(lastEndPositions, i * 3, rightPos);\r\n CorridorGeometryLibrary.addAttribute(\r\n finalPositions,\r\n leftPos,\r\n undefined,\r\n back\r\n );\r\n CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\r\n addNormals(attr, normal, left, front, back, vertexFormat);\r\n\r\n LR = front / 3;\r\n LL = LR - 1;\r\n UR = (back - 2) / 3;\r\n UL = UR + 1;\r\n indices[index++] = UL;\r\n indices[index++] = LL;\r\n indices[index++] = UR;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n\r\n front += 3;\r\n back -= 3;\r\n }\r\n }\r\n\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: finalPositions,\r\n });\r\n\r\n if (vertexFormat.st) {\r\n const st = new Float32Array((size / 3) * 2);\r\n let rightSt;\r\n let leftSt;\r\n let stIndex = 0;\r\n if (addEndPositions) {\r\n leftCount /= 3;\r\n rightCount /= 3;\r\n const theta = Math.PI / (endPositionLength + 1);\r\n leftSt = 1 / (leftCount - endPositionLength + 1);\r\n rightSt = 1 / (rightCount - endPositionLength + 1);\r\n let a;\r\n const halfEndPos = endPositionLength / 2;\r\n for (i = halfEndPos + 1; i < endPositionLength + 1; i++) {\r\n // lower left rounded end\r\n a = CesiumMath.PI_OVER_TWO + theta * i;\r\n st[stIndex++] = rightSt * (1 + Math.cos(a));\r\n st[stIndex++] = 0.5 * (1 + Math.sin(a));\r\n }\r\n for (i = 1; i < rightCount - endPositionLength + 1; i++) {\r\n // bottom edge\r\n st[stIndex++] = i * rightSt;\r\n st[stIndex++] = 0;\r\n }\r\n for (i = endPositionLength; i > halfEndPos; i--) {\r\n // lower right rounded end\r\n a = CesiumMath.PI_OVER_TWO - i * theta;\r\n st[stIndex++] = 1 - rightSt * (1 + Math.cos(a));\r\n st[stIndex++] = 0.5 * (1 + Math.sin(a));\r\n }\r\n for (i = halfEndPos; i > 0; i--) {\r\n // upper right rounded end\r\n a = CesiumMath.PI_OVER_TWO - theta * i;\r\n st[stIndex++] = 1 - leftSt * (1 + Math.cos(a));\r\n st[stIndex++] = 0.5 * (1 + Math.sin(a));\r\n }\r\n for (i = leftCount - endPositionLength; i > 0; i--) {\r\n // top edge\r\n st[stIndex++] = i * leftSt;\r\n st[stIndex++] = 1;\r\n }\r\n for (i = 1; i < halfEndPos + 1; i++) {\r\n // upper left rounded end\r\n a = CesiumMath.PI_OVER_TWO + theta * i;\r\n st[stIndex++] = leftSt * (1 + Math.cos(a));\r\n st[stIndex++] = 0.5 * (1 + Math.sin(a));\r\n }\r\n } else {\r\n leftCount /= 3;\r\n rightCount /= 3;\r\n leftSt = 1 / (leftCount - 1);\r\n rightSt = 1 / (rightCount - 1);\r\n for (i = 0; i < rightCount; i++) {\r\n // bottom edge\r\n st[stIndex++] = i * rightSt;\r\n st[stIndex++] = 0;\r\n }\r\n for (i = leftCount; i > 0; i--) {\r\n // top edge\r\n st[stIndex++] = (i - 1) * leftSt;\r\n st[stIndex++] = 1;\r\n }\r\n }\r\n\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: st,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: attr.normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: attr.tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: attr.bitangents,\r\n });\r\n }\r\n\r\n return {\r\n attributes: attributes,\r\n indices: indices,\r\n };\r\n}\r\n\r\nfunction extrudedAttributes(attributes, vertexFormat) {\r\n if (\r\n !vertexFormat.normal &&\r\n !vertexFormat.tangent &&\r\n !vertexFormat.bitangent &&\r\n !vertexFormat.st\r\n ) {\r\n return attributes;\r\n }\r\n const positions = attributes.position.values;\r\n let topNormals;\r\n let topBitangents;\r\n if (vertexFormat.normal || vertexFormat.bitangent) {\r\n topNormals = attributes.normal.values;\r\n topBitangents = attributes.bitangent.values;\r\n }\r\n const size = attributes.position.values.length / 18;\r\n const threeSize = size * 3;\r\n const twoSize = size * 2;\r\n const sixSize = threeSize * 2;\r\n let i;\r\n if (vertexFormat.normal || vertexFormat.bitangent || vertexFormat.tangent) {\r\n const normals = vertexFormat.normal\r\n ? new Float32Array(threeSize * 6)\r\n : undefined;\r\n const tangents = vertexFormat.tangent\r\n ? new Float32Array(threeSize * 6)\r\n : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(threeSize * 6)\r\n : undefined;\r\n let topPosition = cartesian1;\r\n let bottomPosition = cartesian2;\r\n let previousPosition = cartesian3;\r\n let normal = cartesian4;\r\n let tangent = cartesian5;\r\n let bitangent = cartesian6;\r\n let attrIndex = sixSize;\r\n for (i = 0; i < threeSize; i += 3) {\r\n const attrIndexOffset = attrIndex + sixSize;\r\n topPosition = Cartesian3.fromArray(positions, i, topPosition);\r\n bottomPosition = Cartesian3.fromArray(\r\n positions,\r\n i + threeSize,\r\n bottomPosition\r\n );\r\n previousPosition = Cartesian3.fromArray(\r\n positions,\r\n (i + 3) % threeSize,\r\n previousPosition\r\n );\r\n bottomPosition = Cartesian3.subtract(\r\n bottomPosition,\r\n topPosition,\r\n bottomPosition\r\n );\r\n previousPosition = Cartesian3.subtract(\r\n previousPosition,\r\n topPosition,\r\n previousPosition\r\n );\r\n normal = Cartesian3.normalize(\r\n Cartesian3.cross(bottomPosition, previousPosition, normal),\r\n normal\r\n );\r\n if (vertexFormat.normal) {\r\n CorridorGeometryLibrary.addAttribute(normals, normal, attrIndexOffset);\r\n CorridorGeometryLibrary.addAttribute(\r\n normals,\r\n normal,\r\n attrIndexOffset + 3\r\n );\r\n CorridorGeometryLibrary.addAttribute(normals, normal, attrIndex);\r\n CorridorGeometryLibrary.addAttribute(normals, normal, attrIndex + 3);\r\n }\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n bitangent = Cartesian3.fromArray(topNormals, i, bitangent);\r\n if (vertexFormat.bitangent) {\r\n CorridorGeometryLibrary.addAttribute(\r\n bitangents,\r\n bitangent,\r\n attrIndexOffset\r\n );\r\n CorridorGeometryLibrary.addAttribute(\r\n bitangents,\r\n bitangent,\r\n attrIndexOffset + 3\r\n );\r\n CorridorGeometryLibrary.addAttribute(\r\n bitangents,\r\n bitangent,\r\n attrIndex\r\n );\r\n CorridorGeometryLibrary.addAttribute(\r\n bitangents,\r\n bitangent,\r\n attrIndex + 3\r\n );\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n tangent = Cartesian3.normalize(\r\n Cartesian3.cross(bitangent, normal, tangent),\r\n tangent\r\n );\r\n CorridorGeometryLibrary.addAttribute(\r\n tangents,\r\n tangent,\r\n attrIndexOffset\r\n );\r\n CorridorGeometryLibrary.addAttribute(\r\n tangents,\r\n tangent,\r\n attrIndexOffset + 3\r\n );\r\n CorridorGeometryLibrary.addAttribute(tangents, tangent, attrIndex);\r\n CorridorGeometryLibrary.addAttribute(\r\n tangents,\r\n tangent,\r\n attrIndex + 3\r\n );\r\n }\r\n }\r\n attrIndex += 6;\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n normals.set(topNormals); //top\r\n for (i = 0; i < threeSize; i += 3) {\r\n //bottom normals\r\n normals[i + threeSize] = -topNormals[i];\r\n normals[i + threeSize + 1] = -topNormals[i + 1];\r\n normals[i + threeSize + 2] = -topNormals[i + 2];\r\n }\r\n attributes.normal.values = normals;\r\n } else {\r\n attributes.normal = undefined;\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n bitangents.set(topBitangents); //top\r\n bitangents.set(topBitangents, threeSize); //bottom\r\n attributes.bitangent.values = bitangents;\r\n } else {\r\n attributes.bitangent = undefined;\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n const topTangents = attributes.tangent.values;\r\n tangents.set(topTangents); //top\r\n tangents.set(topTangents, threeSize); //bottom\r\n attributes.tangent.values = tangents;\r\n }\r\n }\r\n if (vertexFormat.st) {\r\n const topSt = attributes.st.values;\r\n const st = new Float32Array(twoSize * 6);\r\n st.set(topSt); //top\r\n st.set(topSt, twoSize); //bottom\r\n let index = twoSize * 2;\r\n\r\n for (let j = 0; j < 2; j++) {\r\n st[index++] = topSt[0];\r\n st[index++] = topSt[1];\r\n for (i = 2; i < twoSize; i += 2) {\r\n const s = topSt[i];\r\n const t = topSt[i + 1];\r\n st[index++] = s;\r\n st[index++] = t;\r\n st[index++] = s;\r\n st[index++] = t;\r\n }\r\n st[index++] = topSt[0];\r\n st[index++] = topSt[1];\r\n }\r\n attributes.st.values = st;\r\n }\r\n\r\n return attributes;\r\n}\r\n\r\nfunction addWallPositions(positions, index, wallPositions) {\r\n wallPositions[index++] = positions[0];\r\n wallPositions[index++] = positions[1];\r\n wallPositions[index++] = positions[2];\r\n for (let i = 3; i < positions.length; i += 3) {\r\n const x = positions[i];\r\n const y = positions[i + 1];\r\n const z = positions[i + 2];\r\n wallPositions[index++] = x;\r\n wallPositions[index++] = y;\r\n wallPositions[index++] = z;\r\n wallPositions[index++] = x;\r\n wallPositions[index++] = y;\r\n wallPositions[index++] = z;\r\n }\r\n wallPositions[index++] = positions[0];\r\n wallPositions[index++] = positions[1];\r\n wallPositions[index++] = positions[2];\r\n\r\n return wallPositions;\r\n}\r\n\r\nfunction computePositionsExtruded(params, vertexFormat) {\r\n const topVertexFormat = new VertexFormat({\r\n position: vertexFormat.position,\r\n normal:\r\n vertexFormat.normal || vertexFormat.bitangent || params.shadowVolume,\r\n tangent: vertexFormat.tangent,\r\n bitangent: vertexFormat.normal || vertexFormat.bitangent,\r\n st: vertexFormat.st,\r\n });\r\n const ellipsoid = params.ellipsoid;\r\n const computedPositions = CorridorGeometryLibrary.computePositions(params);\r\n const attr = combine(computedPositions, topVertexFormat, ellipsoid);\r\n const height = params.height;\r\n const extrudedHeight = params.extrudedHeight;\r\n let attributes = attr.attributes;\r\n const indices = attr.indices;\r\n let positions = attributes.position.values;\r\n let length = positions.length;\r\n const newPositions = new Float64Array(length * 6);\r\n let extrudedPositions = new Float64Array(length);\r\n extrudedPositions.set(positions);\r\n let wallPositions = new Float64Array(length * 4);\r\n\r\n positions = PolygonPipeline.scaleToGeodeticHeight(\r\n positions,\r\n height,\r\n ellipsoid\r\n );\r\n wallPositions = addWallPositions(positions, 0, wallPositions);\r\n extrudedPositions = PolygonPipeline.scaleToGeodeticHeight(\r\n extrudedPositions,\r\n extrudedHeight,\r\n ellipsoid\r\n );\r\n wallPositions = addWallPositions(\r\n extrudedPositions,\r\n length * 2,\r\n wallPositions\r\n );\r\n newPositions.set(positions);\r\n newPositions.set(extrudedPositions, length);\r\n newPositions.set(wallPositions, length * 2);\r\n attributes.position.values = newPositions;\r\n\r\n attributes = extrudedAttributes(attributes, vertexFormat);\r\n let i;\r\n const size = length / 3;\r\n if (params.shadowVolume) {\r\n const topNormals = attributes.normal.values;\r\n length = topNormals.length;\r\n\r\n let extrudeNormals = new Float32Array(length * 6);\r\n for (i = 0; i < length; i++) {\r\n topNormals[i] = -topNormals[i];\r\n }\r\n //only get normals for bottom layer that's going to be pushed down\r\n extrudeNormals.set(topNormals, length); //bottom face\r\n extrudeNormals = addWallPositions(topNormals, length * 4, extrudeNormals); //bottom wall\r\n attributes.extrudeDirection = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: extrudeNormals,\r\n });\r\n if (!vertexFormat.normal) {\r\n attributes.normal = undefined;\r\n }\r\n }\r\n if (defined(params.offsetAttribute)) {\r\n let applyOffset = new Uint8Array(size * 6);\r\n if (params.offsetAttribute === GeometryOffsetAttribute.TOP) {\r\n applyOffset = applyOffset\r\n .fill(1, 0, size) // top face\r\n .fill(1, size * 2, size * 4); // top wall\r\n } else {\r\n const applyOffsetValue =\r\n params.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n applyOffset = applyOffset.fill(applyOffsetValue);\r\n }\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n const iLength = indices.length;\r\n const twoSize = size + size;\r\n const newIndices = IndexDatatype.createTypedArray(\r\n newPositions.length / 3,\r\n iLength * 2 + twoSize * 3\r\n );\r\n newIndices.set(indices);\r\n let index = iLength;\r\n for (i = 0; i < iLength; i += 3) {\r\n // bottom indices\r\n const v0 = indices[i];\r\n const v1 = indices[i + 1];\r\n const v2 = indices[i + 2];\r\n newIndices[index++] = v2 + size;\r\n newIndices[index++] = v1 + size;\r\n newIndices[index++] = v0 + size;\r\n }\r\n\r\n let UL, LL, UR, LR;\r\n\r\n for (i = 0; i < twoSize; i += 2) {\r\n //wall indices\r\n UL = i + twoSize;\r\n LL = UL + twoSize;\r\n UR = UL + 1;\r\n LR = LL + 1;\r\n newIndices[index++] = UL;\r\n newIndices[index++] = LL;\r\n newIndices[index++] = UR;\r\n newIndices[index++] = UR;\r\n newIndices[index++] = LL;\r\n newIndices[index++] = LR;\r\n }\r\n\r\n return {\r\n attributes: attributes,\r\n indices: newIndices,\r\n };\r\n}\r\n\r\nconst scratchCartesian1 = new Cartesian3();\r\nconst scratchCartesian2 = new Cartesian3();\r\nconst scratchCartographic = new Cartographic();\r\n\r\nfunction computeOffsetPoints(\r\n position1,\r\n position2,\r\n ellipsoid,\r\n halfWidth,\r\n min,\r\n max\r\n) {\r\n // Compute direction of offset the point\r\n const direction = Cartesian3.subtract(\r\n position2,\r\n position1,\r\n scratchCartesian1\r\n );\r\n Cartesian3.normalize(direction, direction);\r\n const normal = ellipsoid.geodeticSurfaceNormal(position1, scratchCartesian2);\r\n const offsetDirection = Cartesian3.cross(\r\n direction,\r\n normal,\r\n scratchCartesian1\r\n );\r\n Cartesian3.multiplyByScalar(offsetDirection, halfWidth, offsetDirection);\r\n\r\n let minLat = min.latitude;\r\n let minLon = min.longitude;\r\n let maxLat = max.latitude;\r\n let maxLon = max.longitude;\r\n\r\n // Compute 2 offset points\r\n Cartesian3.add(position1, offsetDirection, scratchCartesian2);\r\n ellipsoid.cartesianToCartographic(scratchCartesian2, scratchCartographic);\r\n\r\n let lat = scratchCartographic.latitude;\r\n let lon = scratchCartographic.longitude;\r\n minLat = Math.min(minLat, lat);\r\n minLon = Math.min(minLon, lon);\r\n maxLat = Math.max(maxLat, lat);\r\n maxLon = Math.max(maxLon, lon);\r\n\r\n Cartesian3.subtract(position1, offsetDirection, scratchCartesian2);\r\n ellipsoid.cartesianToCartographic(scratchCartesian2, scratchCartographic);\r\n\r\n lat = scratchCartographic.latitude;\r\n lon = scratchCartographic.longitude;\r\n minLat = Math.min(minLat, lat);\r\n minLon = Math.min(minLon, lon);\r\n maxLat = Math.max(maxLat, lat);\r\n maxLon = Math.max(maxLon, lon);\r\n\r\n min.latitude = minLat;\r\n min.longitude = minLon;\r\n max.latitude = maxLat;\r\n max.longitude = maxLon;\r\n}\r\n\r\nconst scratchCartesianOffset = new Cartesian3();\r\nconst scratchCartesianEnds = new Cartesian3();\r\nconst scratchCartographicMin = new Cartographic();\r\nconst scratchCartographicMax = new Cartographic();\r\n\r\nfunction computeRectangle(positions, ellipsoid, width, cornerType, result) {\r\n positions = scaleToSurface(positions, ellipsoid);\r\n const cleanPositions = arrayRemoveDuplicates(\r\n positions,\r\n Cartesian3.equalsEpsilon\r\n );\r\n const length = cleanPositions.length;\r\n if (length < 2 || width <= 0) {\r\n return new Rectangle();\r\n }\r\n const halfWidth = width * 0.5;\r\n\r\n scratchCartographicMin.latitude = Number.POSITIVE_INFINITY;\r\n scratchCartographicMin.longitude = Number.POSITIVE_INFINITY;\r\n scratchCartographicMax.latitude = Number.NEGATIVE_INFINITY;\r\n scratchCartographicMax.longitude = Number.NEGATIVE_INFINITY;\r\n\r\n let lat, lon;\r\n if (cornerType === CornerType.ROUNDED) {\r\n // Compute start cap\r\n const first = cleanPositions[0];\r\n Cartesian3.subtract(first, cleanPositions[1], scratchCartesianOffset);\r\n Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset);\r\n Cartesian3.multiplyByScalar(\r\n scratchCartesianOffset,\r\n halfWidth,\r\n scratchCartesianOffset\r\n );\r\n Cartesian3.add(first, scratchCartesianOffset, scratchCartesianEnds);\r\n\r\n ellipsoid.cartesianToCartographic(\r\n scratchCartesianEnds,\r\n scratchCartographic\r\n );\r\n lat = scratchCartographic.latitude;\r\n lon = scratchCartographic.longitude;\r\n scratchCartographicMin.latitude = Math.min(\r\n scratchCartographicMin.latitude,\r\n lat\r\n );\r\n scratchCartographicMin.longitude = Math.min(\r\n scratchCartographicMin.longitude,\r\n lon\r\n );\r\n scratchCartographicMax.latitude = Math.max(\r\n scratchCartographicMax.latitude,\r\n lat\r\n );\r\n scratchCartographicMax.longitude = Math.max(\r\n scratchCartographicMax.longitude,\r\n lon\r\n );\r\n }\r\n\r\n // Compute the rest\r\n for (let i = 0; i < length - 1; ++i) {\r\n computeOffsetPoints(\r\n cleanPositions[i],\r\n cleanPositions[i + 1],\r\n ellipsoid,\r\n halfWidth,\r\n scratchCartographicMin,\r\n scratchCartographicMax\r\n );\r\n }\r\n\r\n // Compute ending point\r\n const last = cleanPositions[length - 1];\r\n Cartesian3.subtract(last, cleanPositions[length - 2], scratchCartesianOffset);\r\n Cartesian3.normalize(scratchCartesianOffset, scratchCartesianOffset);\r\n Cartesian3.multiplyByScalar(\r\n scratchCartesianOffset,\r\n halfWidth,\r\n scratchCartesianOffset\r\n );\r\n Cartesian3.add(last, scratchCartesianOffset, scratchCartesianEnds);\r\n computeOffsetPoints(\r\n last,\r\n scratchCartesianEnds,\r\n ellipsoid,\r\n halfWidth,\r\n scratchCartographicMin,\r\n scratchCartographicMax\r\n );\r\n\r\n if (cornerType === CornerType.ROUNDED) {\r\n // Compute end cap\r\n ellipsoid.cartesianToCartographic(\r\n scratchCartesianEnds,\r\n scratchCartographic\r\n );\r\n lat = scratchCartographic.latitude;\r\n lon = scratchCartographic.longitude;\r\n scratchCartographicMin.latitude = Math.min(\r\n scratchCartographicMin.latitude,\r\n lat\r\n );\r\n scratchCartographicMin.longitude = Math.min(\r\n scratchCartographicMin.longitude,\r\n lon\r\n );\r\n scratchCartographicMax.latitude = Math.max(\r\n scratchCartographicMax.latitude,\r\n lat\r\n );\r\n scratchCartographicMax.longitude = Math.max(\r\n scratchCartographicMax.longitude,\r\n lon\r\n );\r\n }\r\n\r\n const rectangle = defined(result) ? result : new Rectangle();\r\n rectangle.north = scratchCartographicMax.latitude;\r\n rectangle.south = scratchCartographicMin.latitude;\r\n rectangle.east = scratchCartographicMax.longitude;\r\n rectangle.west = scratchCartographicMin.longitude;\r\n\r\n return rectangle;\r\n}\r\n\r\n/**\r\n * A description of a corridor. Corridor geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\r\n *\r\n * @alias CorridorGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor.\r\n * @param {Number} options.width The distance between the edges of the corridor in meters.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Number} [options.height=0] The distance in meters between the ellipsoid surface and the positions.\r\n * @param {Number} [options.extrudedHeight] The distance in meters between the ellipsoid surface and the extruded face.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\r\n *\r\n * @see CorridorGeometry.createGeometry\r\n * @see Packable\r\n *\r\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Corridor.html|Cesium Sandcastle Corridor Demo}\r\n *\r\n * @example\r\n * const corridor = new Cesium.CorridorGeometry({\r\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\r\n * positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]),\r\n * width : 100000\r\n * });\r\n */\r\nfunction CorridorGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.positions;\r\n const width = options.width;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.positions\", positions);\r\n Check.defined(\"options.width\", width);\r\n //>>includeEnd('debug');\r\n\r\n const height = defaultValue(options.height, 0.0);\r\n const extrudedHeight = defaultValue(options.extrudedHeight, height);\r\n\r\n this._positions = positions;\r\n this._ellipsoid = Ellipsoid.clone(\r\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\r\n );\r\n this._vertexFormat = VertexFormat.clone(\r\n defaultValue(options.vertexFormat, VertexFormat.DEFAULT)\r\n );\r\n this._width = width;\r\n this._height = Math.max(height, extrudedHeight);\r\n this._extrudedHeight = Math.min(height, extrudedHeight);\r\n this._cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\r\n this._granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n this._shadowVolume = defaultValue(options.shadowVolume, false);\r\n this._workerName = \"createCorridorGeometry\";\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._rectangle = undefined;\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n 1 +\r\n positions.length * Cartesian3.packedLength +\r\n Ellipsoid.packedLength +\r\n VertexFormat.packedLength +\r\n 7;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {CorridorGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCorridorGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const positions = value._positions;\r\n const length = positions.length;\r\n array[startingIndex++] = length;\r\n\r\n for (let i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n Cartesian3.pack(positions[i], array, startingIndex);\r\n }\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._width;\r\n array[startingIndex++] = value._height;\r\n array[startingIndex++] = value._extrudedHeight;\r\n array[startingIndex++] = value._cornerType;\r\n array[startingIndex++] = value._granularity;\r\n array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n positions: undefined,\r\n ellipsoid: scratchEllipsoid,\r\n vertexFormat: scratchVertexFormat,\r\n width: undefined,\r\n height: undefined,\r\n extrudedHeight: undefined,\r\n cornerType: undefined,\r\n granularity: undefined,\r\n shadowVolume: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {CorridorGeometry} [result] The object into which to store the result.\r\n * @returns {CorridorGeometry} The modified result parameter or a new CorridorGeometry instance if one was not provided.\r\n */\r\nCorridorGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const length = array[startingIndex++];\r\n const positions = new Array(length);\r\n\r\n for (let i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n positions[i] = Cartesian3.unpack(array, startingIndex);\r\n }\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const width = array[startingIndex++];\r\n const height = array[startingIndex++];\r\n const extrudedHeight = array[startingIndex++];\r\n const cornerType = array[startingIndex++];\r\n const granularity = array[startingIndex++];\r\n const shadowVolume = array[startingIndex++] === 1.0;\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.positions = positions;\r\n scratchOptions.width = width;\r\n scratchOptions.height = height;\r\n scratchOptions.extrudedHeight = extrudedHeight;\r\n scratchOptions.cornerType = cornerType;\r\n scratchOptions.granularity = granularity;\r\n scratchOptions.shadowVolume = shadowVolume;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return new CorridorGeometry(scratchOptions);\r\n }\r\n\r\n result._positions = positions;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._width = width;\r\n result._height = height;\r\n result._extrudedHeight = extrudedHeight;\r\n result._cornerType = cornerType;\r\n result._granularity = granularity;\r\n result._shadowVolume = shadowVolume;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the bounding rectangle given the provided options\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor.\r\n * @param {Number} options.width The distance between the edges of the corridor in meters.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\r\n * @param {Rectangle} [result] An object in which to store the result.\r\n *\r\n * @returns {Rectangle} The result rectangle.\r\n */\r\nCorridorGeometry.computeRectangle = function (options, result) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.positions;\r\n const width = options.width;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.positions\", positions);\r\n Check.defined(\"options.width\", width);\r\n //>>includeEnd('debug');\r\n\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n const cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\r\n\r\n return computeRectangle(positions, ellipsoid, width, cornerType, result);\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {CorridorGeometry} corridorGeometry A description of the corridor.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nCorridorGeometry.createGeometry = function (corridorGeometry) {\r\n let positions = corridorGeometry._positions;\r\n const width = corridorGeometry._width;\r\n const ellipsoid = corridorGeometry._ellipsoid;\r\n\r\n positions = scaleToSurface(positions, ellipsoid);\r\n const cleanPositions = arrayRemoveDuplicates(\r\n positions,\r\n Cartesian3.equalsEpsilon\r\n );\r\n\r\n if (cleanPositions.length < 2 || width <= 0) {\r\n return;\r\n }\r\n\r\n const height = corridorGeometry._height;\r\n const extrudedHeight = corridorGeometry._extrudedHeight;\r\n const extrude = !CesiumMath.equalsEpsilon(\r\n height,\r\n extrudedHeight,\r\n 0,\r\n CesiumMath.EPSILON2\r\n );\r\n\r\n const vertexFormat = corridorGeometry._vertexFormat;\r\n const params = {\r\n ellipsoid: ellipsoid,\r\n positions: cleanPositions,\r\n width: width,\r\n cornerType: corridorGeometry._cornerType,\r\n granularity: corridorGeometry._granularity,\r\n saveAttributes: true,\r\n };\r\n let attr;\r\n if (extrude) {\r\n params.height = height;\r\n params.extrudedHeight = extrudedHeight;\r\n params.shadowVolume = corridorGeometry._shadowVolume;\r\n params.offsetAttribute = corridorGeometry._offsetAttribute;\r\n attr = computePositionsExtruded(params, vertexFormat);\r\n } else {\r\n const computedPositions = CorridorGeometryLibrary.computePositions(params);\r\n attr = combine(computedPositions, vertexFormat, ellipsoid);\r\n attr.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\r\n attr.attributes.position.values,\r\n height,\r\n ellipsoid\r\n );\r\n\r\n if (defined(corridorGeometry._offsetAttribute)) {\r\n const applyOffsetValue =\r\n corridorGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const length = attr.attributes.position.values.length;\r\n const applyOffset = new Uint8Array(length / 3).fill(applyOffsetValue);\r\n attr.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n }\r\n const attributes = attr.attributes;\r\n const boundingSphere = BoundingSphere.fromVertices(\r\n attributes.position.values,\r\n undefined,\r\n 3\r\n );\r\n if (!vertexFormat.position) {\r\n attr.attributes.position.values = undefined;\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: attr.indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: boundingSphere,\r\n offsetAttribute: corridorGeometry._offsetAttribute,\r\n });\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nCorridorGeometry.createShadowVolume = function (\r\n corridorGeometry,\r\n minHeightFunc,\r\n maxHeightFunc\r\n) {\r\n const granularity = corridorGeometry._granularity;\r\n const ellipsoid = corridorGeometry._ellipsoid;\r\n\r\n const minHeight = minHeightFunc(granularity, ellipsoid);\r\n const maxHeight = maxHeightFunc(granularity, ellipsoid);\r\n\r\n return new CorridorGeometry({\r\n positions: corridorGeometry._positions,\r\n width: corridorGeometry._width,\r\n cornerType: corridorGeometry._cornerType,\r\n ellipsoid: ellipsoid,\r\n granularity: granularity,\r\n extrudedHeight: minHeight,\r\n height: maxHeight,\r\n vertexFormat: VertexFormat.POSITION_ONLY,\r\n shadowVolume: true,\r\n });\r\n};\r\n\r\nObject.defineProperties(CorridorGeometry.prototype, {\r\n /**\r\n * @private\r\n */\r\n rectangle: {\r\n get: function () {\r\n if (!defined(this._rectangle)) {\r\n this._rectangle = computeRectangle(\r\n this._positions,\r\n this._ellipsoid,\r\n this._width,\r\n this._cornerType\r\n );\r\n }\r\n return this._rectangle;\r\n },\r\n },\r\n /**\r\n * For remapping texture coordinates when rendering CorridorGeometries as GroundPrimitives.\r\n *\r\n * Corridors don't support stRotation,\r\n * so just return the corners of the original system.\r\n * @private\r\n */\r\n textureCoordinateRotationPoints: {\r\n get: function () {\r\n return [0, 0, 0, 1, 1, 0];\r\n },\r\n },\r\n});\r\nexport default CorridorGeometry;\r\n","import CorridorGeometry from \"../Core/CorridorGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\n\r\nfunction createCorridorGeometry(corridorGeometry, offset) {\r\n if (defined(offset)) {\r\n corridorGeometry = CorridorGeometry.unpack(corridorGeometry, offset);\r\n }\r\n corridorGeometry._ellipsoid = Ellipsoid.clone(corridorGeometry._ellipsoid);\r\n return CorridorGeometry.createGeometry(corridorGeometry);\r\n}\r\nexport default createCorridorGeometry;\r\n"],"names":["Cartesian3","CorridorGeometryLibrary","GeometryAttributes","defined","IndexDatatype","GeometryAttribute","ComponentDatatype","CesiumMath","VertexFormat","PolygonPipeline","GeometryOffsetAttribute","Cartographic","arrayRemoveDuplicates","Rectangle","CornerType","defaultValue","Check","Ellipsoid","BoundingSphere","Geometry","PrimitiveType"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createCorridorOutlineGeometry.js b/debug/cesium/Workers/createCorridorOutlineGeometry.js deleted file mode 100644 index b6fecf5..0000000 --- a/debug/cesium/Workers/createCorridorOutlineGeometry.js +++ /dev/null @@ -1,629 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./arrayRemoveDuplicates-c3526030', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './PolylineVolumeGeometryLibrary-eed2bdf7', './CorridorGeometryLibrary-152d0356', './defaultValue-0ab18f7d', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonPipeline-313487c3', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './EllipsoidTangentPlane-c421b2cb', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d', './PolylinePipeline-3c021236', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b'], (function (arrayRemoveDuplicates, Transforms, Matrix3, Check, ComponentDatatype, PolylineVolumeGeometryLibrary, CorridorGeometryLibrary, defaultValue, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, Math$1, PolygonPipeline, Matrix2, RuntimeError, combine$1, WebGLConstants, EllipsoidTangentPlane, AxisAlignedBoundingBox, IntersectionTests, Plane, PolylinePipeline, EllipsoidGeodesic, EllipsoidRhumbLine) { 'use strict'; - - const cartesian1 = new Matrix3.Cartesian3(); - const cartesian2 = new Matrix3.Cartesian3(); - const cartesian3 = new Matrix3.Cartesian3(); - - function scaleToSurface(positions, ellipsoid) { - for (let i = 0; i < positions.length; i++) { - positions[i] = ellipsoid.scaleToGeodeticSurface(positions[i], positions[i]); - } - return positions; - } - - function combine(computedPositions, cornerType) { - const wallIndices = []; - const positions = computedPositions.positions; - const corners = computedPositions.corners; - const endPositions = computedPositions.endPositions; - const attributes = new GeometryAttributes.GeometryAttributes(); - let corner; - let leftCount = 0; - let rightCount = 0; - let i; - let indicesLength = 0; - let length; - for (i = 0; i < positions.length; i += 2) { - length = positions[i].length - 3; - leftCount += length; //subtracting 3 to account for duplicate points at corners - indicesLength += (length / 3) * 4; - rightCount += positions[i + 1].length - 3; - } - leftCount += 3; //add back count for end positions - rightCount += 3; - for (i = 0; i < corners.length; i++) { - corner = corners[i]; - const leftSide = corners[i].leftPositions; - if (defaultValue.defined(leftSide)) { - length = leftSide.length; - leftCount += length; - indicesLength += (length / 3) * 2; - } else { - length = corners[i].rightPositions.length; - rightCount += length; - indicesLength += (length / 3) * 2; - } - } - - const addEndPositions = defaultValue.defined(endPositions); - let endPositionLength; - if (addEndPositions) { - endPositionLength = endPositions[0].length - 3; - leftCount += endPositionLength; - rightCount += endPositionLength; - endPositionLength /= 3; - indicesLength += endPositionLength * 4; - } - const size = leftCount + rightCount; - const finalPositions = new Float64Array(size); - let front = 0; - let back = size - 1; - let UL, LL, UR, LR; - let rightPos, leftPos; - const halfLength = endPositionLength / 2; - - const indices = IndexDatatype.IndexDatatype.createTypedArray(size / 3, indicesLength + 4); - let index = 0; - - indices[index++] = front / 3; - indices[index++] = (back - 2) / 3; - if (addEndPositions) { - // add rounded end - wallIndices.push(front / 3); - leftPos = cartesian1; - rightPos = cartesian2; - const firstEndPositions = endPositions[0]; - for (i = 0; i < halfLength; i++) { - leftPos = Matrix3.Cartesian3.fromArray( - firstEndPositions, - (halfLength - 1 - i) * 3, - leftPos - ); - rightPos = Matrix3.Cartesian3.fromArray( - firstEndPositions, - (halfLength + i) * 3, - rightPos - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - finalPositions, - leftPos, - undefined, - back - ); - - LL = front / 3; - LR = LL + 1; - UL = (back - 2) / 3; - UR = UL - 1; - indices[index++] = UL; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - - front += 3; - back -= 3; - } - } - - let posIndex = 0; - let rightEdge = positions[posIndex++]; //add first two edges - let leftEdge = positions[posIndex++]; - finalPositions.set(rightEdge, front); - finalPositions.set(leftEdge, back - leftEdge.length + 1); - - length = leftEdge.length - 3; - wallIndices.push(front / 3, (back - 2) / 3); - for (i = 0; i < length; i += 3) { - LL = front / 3; - LR = LL + 1; - UL = (back - 2) / 3; - UR = UL - 1; - indices[index++] = UL; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - - front += 3; - back -= 3; - } - - for (i = 0; i < corners.length; i++) { - let j; - corner = corners[i]; - const l = corner.leftPositions; - const r = corner.rightPositions; - let start; - let outsidePoint = cartesian3; - if (defaultValue.defined(l)) { - back -= 3; - start = UR; - wallIndices.push(LR); - for (j = 0; j < l.length / 3; j++) { - outsidePoint = Matrix3.Cartesian3.fromArray(l, j * 3, outsidePoint); - indices[index++] = start - j - 1; - indices[index++] = start - j; - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - finalPositions, - outsidePoint, - undefined, - back - ); - back -= 3; - } - wallIndices.push(start - Math.floor(l.length / 6)); - if (cornerType === PolylineVolumeGeometryLibrary.CornerType.BEVELED) { - wallIndices.push((back - 2) / 3 + 1); - } - front += 3; - } else { - front += 3; - start = LR; - wallIndices.push(UR); - for (j = 0; j < r.length / 3; j++) { - outsidePoint = Matrix3.Cartesian3.fromArray(r, j * 3, outsidePoint); - indices[index++] = start + j; - indices[index++] = start + j + 1; - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - finalPositions, - outsidePoint, - front - ); - front += 3; - } - wallIndices.push(start + Math.floor(r.length / 6)); - if (cornerType === PolylineVolumeGeometryLibrary.CornerType.BEVELED) { - wallIndices.push(front / 3 - 1); - } - back -= 3; - } - rightEdge = positions[posIndex++]; - leftEdge = positions[posIndex++]; - rightEdge.splice(0, 3); //remove duplicate points added by corner - leftEdge.splice(leftEdge.length - 3, 3); - finalPositions.set(rightEdge, front); - finalPositions.set(leftEdge, back - leftEdge.length + 1); - length = leftEdge.length - 3; - - for (j = 0; j < leftEdge.length; j += 3) { - LR = front / 3; - LL = LR - 1; - UR = (back - 2) / 3; - UL = UR + 1; - indices[index++] = UL; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - front += 3; - back -= 3; - } - front -= 3; - back += 3; - wallIndices.push(front / 3, (back - 2) / 3); - } - - if (addEndPositions) { - // add rounded end - front += 3; - back -= 3; - leftPos = cartesian1; - rightPos = cartesian2; - const lastEndPositions = endPositions[1]; - for (i = 0; i < halfLength; i++) { - leftPos = Matrix3.Cartesian3.fromArray( - lastEndPositions, - (endPositionLength - i - 1) * 3, - leftPos - ); - rightPos = Matrix3.Cartesian3.fromArray(lastEndPositions, i * 3, rightPos); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute( - finalPositions, - leftPos, - undefined, - back - ); - CorridorGeometryLibrary.CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front); - - LR = front / 3; - LL = LR - 1; - UR = (back - 2) / 3; - UL = UR + 1; - indices[index++] = UL; - indices[index++] = UR; - indices[index++] = LL; - indices[index++] = LR; - - front += 3; - back -= 3; - } - - wallIndices.push(front / 3); - } else { - wallIndices.push(front / 3, (back - 2) / 3); - } - indices[index++] = front / 3; - indices[index++] = (back - 2) / 3; - - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: finalPositions, - }); - - return { - attributes: attributes, - indices: indices, - wallIndices: wallIndices, - }; - } - - function computePositionsExtruded(params) { - const ellipsoid = params.ellipsoid; - const computedPositions = CorridorGeometryLibrary.CorridorGeometryLibrary.computePositions(params); - const attr = combine(computedPositions, params.cornerType); - const wallIndices = attr.wallIndices; - const height = params.height; - const extrudedHeight = params.extrudedHeight; - const attributes = attr.attributes; - const indices = attr.indices; - let positions = attributes.position.values; - let length = positions.length; - let extrudedPositions = new Float64Array(length); - extrudedPositions.set(positions); - const newPositions = new Float64Array(length * 2); - - positions = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - positions, - height, - ellipsoid - ); - extrudedPositions = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - extrudedPositions, - extrudedHeight, - ellipsoid - ); - newPositions.set(positions); - newPositions.set(extrudedPositions, length); - attributes.position.values = newPositions; - - length /= 3; - if (defaultValue.defined(params.offsetAttribute)) { - let applyOffset = new Uint8Array(length * 2); - if (params.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - applyOffset = applyOffset.fill(1, 0, length); - } else { - const applyOffsetValue = - params.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - applyOffset = applyOffset.fill(applyOffsetValue); - } - - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - let i; - const iLength = indices.length; - const newIndices = IndexDatatype.IndexDatatype.createTypedArray( - newPositions.length / 3, - (iLength + wallIndices.length) * 2 - ); - newIndices.set(indices); - let index = iLength; - for (i = 0; i < iLength; i += 2) { - // bottom indices - const v0 = indices[i]; - const v1 = indices[i + 1]; - newIndices[index++] = v0 + length; - newIndices[index++] = v1 + length; - } - - let UL, LL; - for (i = 0; i < wallIndices.length; i++) { - //wall indices - UL = wallIndices[i]; - LL = UL + length; - newIndices[index++] = UL; - newIndices[index++] = LL; - } - - return { - attributes: attributes, - indices: newIndices, - }; - } - - /** - * A description of a corridor outline. - * - * @alias CorridorOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor outline. - * @param {Number} options.width The distance between the edges of the corridor outline. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Number} [options.height=0] The distance in meters between the positions and the ellipsoid surface. - * @param {Number} [options.extrudedHeight] The distance in meters between the extruded face and the ellipsoid surface. - * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners. - * - * @see CorridorOutlineGeometry.createGeometry - * - * @example - * const corridor = new Cesium.CorridorOutlineGeometry({ - * positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]), - * width : 100000 - * }); - */ - function CorridorOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.positions; - const width = options.width; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("options.positions", positions); - Check.Check.typeOf.number("options.width", width); - //>>includeEnd('debug'); - - const height = defaultValue.defaultValue(options.height, 0.0); - const extrudedHeight = defaultValue.defaultValue(options.extrudedHeight, height); - - this._positions = positions; - this._ellipsoid = Matrix3.Ellipsoid.clone( - defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84) - ); - this._width = width; - this._height = Math.max(height, extrudedHeight); - this._extrudedHeight = Math.min(height, extrudedHeight); - this._cornerType = defaultValue.defaultValue(options.cornerType, PolylineVolumeGeometryLibrary.CornerType.ROUNDED); - this._granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createCorridorOutlineGeometry"; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - 1 + positions.length * Matrix3.Cartesian3.packedLength + Matrix3.Ellipsoid.packedLength + 6; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {CorridorOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - CorridorOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.typeOf.object("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const positions = value._positions; - const length = positions.length; - array[startingIndex++] = length; - - for (let i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - Matrix3.Cartesian3.pack(positions[i], array, startingIndex); - } - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - array[startingIndex++] = value._width; - array[startingIndex++] = value._height; - array[startingIndex++] = value._extrudedHeight; - array[startingIndex++] = value._cornerType; - array[startingIndex++] = value._granularity; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchOptions = { - positions: undefined, - ellipsoid: scratchEllipsoid, - width: undefined, - height: undefined, - extrudedHeight: undefined, - cornerType: undefined, - granularity: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {CorridorOutlineGeometry} [result] The object into which to store the result. - * @returns {CorridorOutlineGeometry} The modified result parameter or a new CorridorOutlineGeometry instance if one was not provided. - */ - CorridorOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const length = array[startingIndex++]; - const positions = new Array(length); - - for (let i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - positions[i] = Matrix3.Cartesian3.unpack(array, startingIndex); - } - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const width = array[startingIndex++]; - const height = array[startingIndex++]; - const extrudedHeight = array[startingIndex++]; - const cornerType = array[startingIndex++]; - const granularity = array[startingIndex++]; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.positions = positions; - scratchOptions.width = width; - scratchOptions.height = height; - scratchOptions.extrudedHeight = extrudedHeight; - scratchOptions.cornerType = cornerType; - scratchOptions.granularity = granularity; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - return new CorridorOutlineGeometry(scratchOptions); - } - - result._positions = positions; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._width = width; - result._height = height; - result._extrudedHeight = extrudedHeight; - result._cornerType = cornerType; - result._granularity = granularity; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere. - * - * @param {CorridorOutlineGeometry} corridorOutlineGeometry A description of the corridor. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - CorridorOutlineGeometry.createGeometry = function (corridorOutlineGeometry) { - let positions = corridorOutlineGeometry._positions; - const width = corridorOutlineGeometry._width; - const ellipsoid = corridorOutlineGeometry._ellipsoid; - - positions = scaleToSurface(positions, ellipsoid); - const cleanPositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - positions, - Matrix3.Cartesian3.equalsEpsilon - ); - - if (cleanPositions.length < 2 || width <= 0) { - return; - } - - const height = corridorOutlineGeometry._height; - const extrudedHeight = corridorOutlineGeometry._extrudedHeight; - const extrude = !Math$1.CesiumMath.equalsEpsilon( - height, - extrudedHeight, - 0, - Math$1.CesiumMath.EPSILON2 - ); - - const params = { - ellipsoid: ellipsoid, - positions: cleanPositions, - width: width, - cornerType: corridorOutlineGeometry._cornerType, - granularity: corridorOutlineGeometry._granularity, - saveAttributes: false, - }; - let attr; - if (extrude) { - params.height = height; - params.extrudedHeight = extrudedHeight; - params.offsetAttribute = corridorOutlineGeometry._offsetAttribute; - attr = computePositionsExtruded(params); - } else { - const computedPositions = CorridorGeometryLibrary.CorridorGeometryLibrary.computePositions(params); - attr = combine(computedPositions, params.cornerType); - attr.attributes.position.values = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - attr.attributes.position.values, - height, - ellipsoid - ); - - if (defaultValue.defined(corridorOutlineGeometry._offsetAttribute)) { - const length = attr.attributes.position.values.length; - const offsetValue = - corridorOutlineGeometry._offsetAttribute === - GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - attr.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - } - const attributes = attr.attributes; - const boundingSphere = Transforms.BoundingSphere.fromVertices( - attributes.position.values, - undefined, - 3 - ); - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: attr.indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: boundingSphere, - offsetAttribute: corridorOutlineGeometry._offsetAttribute, - }); - }; - - function createCorridorOutlineGeometry(corridorOutlineGeometry, offset) { - if (defaultValue.defined(offset)) { - corridorOutlineGeometry = CorridorOutlineGeometry.unpack( - corridorOutlineGeometry, - offset - ); - } - corridorOutlineGeometry._ellipsoid = Matrix3.Ellipsoid.clone( - corridorOutlineGeometry._ellipsoid - ); - return CorridorOutlineGeometry.createGeometry(corridorOutlineGeometry); - } - - return createCorridorOutlineGeometry; - -})); -//# sourceMappingURL=createCorridorOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createCorridorOutlineGeometry.js.map b/debug/cesium/Workers/createCorridorOutlineGeometry.js.map deleted file mode 100644 index 5456931..0000000 --- a/debug/cesium/Workers/createCorridorOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createCorridorOutlineGeometry.js","sources":["../../../Source/Core/CorridorOutlineGeometry.js","../../../Source/WorkersES6/createCorridorOutlineGeometry.js"],"sourcesContent":["import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport CornerType from \"./CornerType.js\";\r\nimport CorridorGeometryLibrary from \"./CorridorGeometryLibrary.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\n\r\nconst cartesian1 = new Cartesian3();\r\nconst cartesian2 = new Cartesian3();\r\nconst cartesian3 = new Cartesian3();\r\n\r\nfunction scaleToSurface(positions, ellipsoid) {\r\n for (let i = 0; i < positions.length; i++) {\r\n positions[i] = ellipsoid.scaleToGeodeticSurface(positions[i], positions[i]);\r\n }\r\n return positions;\r\n}\r\n\r\nfunction combine(computedPositions, cornerType) {\r\n const wallIndices = [];\r\n const positions = computedPositions.positions;\r\n const corners = computedPositions.corners;\r\n const endPositions = computedPositions.endPositions;\r\n const attributes = new GeometryAttributes();\r\n let corner;\r\n let leftCount = 0;\r\n let rightCount = 0;\r\n let i;\r\n let indicesLength = 0;\r\n let length;\r\n for (i = 0; i < positions.length; i += 2) {\r\n length = positions[i].length - 3;\r\n leftCount += length; //subtracting 3 to account for duplicate points at corners\r\n indicesLength += (length / 3) * 4;\r\n rightCount += positions[i + 1].length - 3;\r\n }\r\n leftCount += 3; //add back count for end positions\r\n rightCount += 3;\r\n for (i = 0; i < corners.length; i++) {\r\n corner = corners[i];\r\n const leftSide = corners[i].leftPositions;\r\n if (defined(leftSide)) {\r\n length = leftSide.length;\r\n leftCount += length;\r\n indicesLength += (length / 3) * 2;\r\n } else {\r\n length = corners[i].rightPositions.length;\r\n rightCount += length;\r\n indicesLength += (length / 3) * 2;\r\n }\r\n }\r\n\r\n const addEndPositions = defined(endPositions);\r\n let endPositionLength;\r\n if (addEndPositions) {\r\n endPositionLength = endPositions[0].length - 3;\r\n leftCount += endPositionLength;\r\n rightCount += endPositionLength;\r\n endPositionLength /= 3;\r\n indicesLength += endPositionLength * 4;\r\n }\r\n const size = leftCount + rightCount;\r\n const finalPositions = new Float64Array(size);\r\n let front = 0;\r\n let back = size - 1;\r\n let UL, LL, UR, LR;\r\n let rightPos, leftPos;\r\n const halfLength = endPositionLength / 2;\r\n\r\n const indices = IndexDatatype.createTypedArray(size / 3, indicesLength + 4);\r\n let index = 0;\r\n\r\n indices[index++] = front / 3;\r\n indices[index++] = (back - 2) / 3;\r\n if (addEndPositions) {\r\n // add rounded end\r\n wallIndices.push(front / 3);\r\n leftPos = cartesian1;\r\n rightPos = cartesian2;\r\n const firstEndPositions = endPositions[0];\r\n for (i = 0; i < halfLength; i++) {\r\n leftPos = Cartesian3.fromArray(\r\n firstEndPositions,\r\n (halfLength - 1 - i) * 3,\r\n leftPos\r\n );\r\n rightPos = Cartesian3.fromArray(\r\n firstEndPositions,\r\n (halfLength + i) * 3,\r\n rightPos\r\n );\r\n CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\r\n CorridorGeometryLibrary.addAttribute(\r\n finalPositions,\r\n leftPos,\r\n undefined,\r\n back\r\n );\r\n\r\n LL = front / 3;\r\n LR = LL + 1;\r\n UL = (back - 2) / 3;\r\n UR = UL - 1;\r\n indices[index++] = UL;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n\r\n front += 3;\r\n back -= 3;\r\n }\r\n }\r\n\r\n let posIndex = 0;\r\n let rightEdge = positions[posIndex++]; //add first two edges\r\n let leftEdge = positions[posIndex++];\r\n finalPositions.set(rightEdge, front);\r\n finalPositions.set(leftEdge, back - leftEdge.length + 1);\r\n\r\n length = leftEdge.length - 3;\r\n wallIndices.push(front / 3, (back - 2) / 3);\r\n for (i = 0; i < length; i += 3) {\r\n LL = front / 3;\r\n LR = LL + 1;\r\n UL = (back - 2) / 3;\r\n UR = UL - 1;\r\n indices[index++] = UL;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n\r\n front += 3;\r\n back -= 3;\r\n }\r\n\r\n for (i = 0; i < corners.length; i++) {\r\n let j;\r\n corner = corners[i];\r\n const l = corner.leftPositions;\r\n const r = corner.rightPositions;\r\n let start;\r\n let outsidePoint = cartesian3;\r\n if (defined(l)) {\r\n back -= 3;\r\n start = UR;\r\n wallIndices.push(LR);\r\n for (j = 0; j < l.length / 3; j++) {\r\n outsidePoint = Cartesian3.fromArray(l, j * 3, outsidePoint);\r\n indices[index++] = start - j - 1;\r\n indices[index++] = start - j;\r\n CorridorGeometryLibrary.addAttribute(\r\n finalPositions,\r\n outsidePoint,\r\n undefined,\r\n back\r\n );\r\n back -= 3;\r\n }\r\n wallIndices.push(start - Math.floor(l.length / 6));\r\n if (cornerType === CornerType.BEVELED) {\r\n wallIndices.push((back - 2) / 3 + 1);\r\n }\r\n front += 3;\r\n } else {\r\n front += 3;\r\n start = LR;\r\n wallIndices.push(UR);\r\n for (j = 0; j < r.length / 3; j++) {\r\n outsidePoint = Cartesian3.fromArray(r, j * 3, outsidePoint);\r\n indices[index++] = start + j;\r\n indices[index++] = start + j + 1;\r\n CorridorGeometryLibrary.addAttribute(\r\n finalPositions,\r\n outsidePoint,\r\n front\r\n );\r\n front += 3;\r\n }\r\n wallIndices.push(start + Math.floor(r.length / 6));\r\n if (cornerType === CornerType.BEVELED) {\r\n wallIndices.push(front / 3 - 1);\r\n }\r\n back -= 3;\r\n }\r\n rightEdge = positions[posIndex++];\r\n leftEdge = positions[posIndex++];\r\n rightEdge.splice(0, 3); //remove duplicate points added by corner\r\n leftEdge.splice(leftEdge.length - 3, 3);\r\n finalPositions.set(rightEdge, front);\r\n finalPositions.set(leftEdge, back - leftEdge.length + 1);\r\n length = leftEdge.length - 3;\r\n\r\n for (j = 0; j < leftEdge.length; j += 3) {\r\n LR = front / 3;\r\n LL = LR - 1;\r\n UR = (back - 2) / 3;\r\n UL = UR + 1;\r\n indices[index++] = UL;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n front += 3;\r\n back -= 3;\r\n }\r\n front -= 3;\r\n back += 3;\r\n wallIndices.push(front / 3, (back - 2) / 3);\r\n }\r\n\r\n if (addEndPositions) {\r\n // add rounded end\r\n front += 3;\r\n back -= 3;\r\n leftPos = cartesian1;\r\n rightPos = cartesian2;\r\n const lastEndPositions = endPositions[1];\r\n for (i = 0; i < halfLength; i++) {\r\n leftPos = Cartesian3.fromArray(\r\n lastEndPositions,\r\n (endPositionLength - i - 1) * 3,\r\n leftPos\r\n );\r\n rightPos = Cartesian3.fromArray(lastEndPositions, i * 3, rightPos);\r\n CorridorGeometryLibrary.addAttribute(\r\n finalPositions,\r\n leftPos,\r\n undefined,\r\n back\r\n );\r\n CorridorGeometryLibrary.addAttribute(finalPositions, rightPos, front);\r\n\r\n LR = front / 3;\r\n LL = LR - 1;\r\n UR = (back - 2) / 3;\r\n UL = UR + 1;\r\n indices[index++] = UL;\r\n indices[index++] = UR;\r\n indices[index++] = LL;\r\n indices[index++] = LR;\r\n\r\n front += 3;\r\n back -= 3;\r\n }\r\n\r\n wallIndices.push(front / 3);\r\n } else {\r\n wallIndices.push(front / 3, (back - 2) / 3);\r\n }\r\n indices[index++] = front / 3;\r\n indices[index++] = (back - 2) / 3;\r\n\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: finalPositions,\r\n });\r\n\r\n return {\r\n attributes: attributes,\r\n indices: indices,\r\n wallIndices: wallIndices,\r\n };\r\n}\r\n\r\nfunction computePositionsExtruded(params) {\r\n const ellipsoid = params.ellipsoid;\r\n const computedPositions = CorridorGeometryLibrary.computePositions(params);\r\n const attr = combine(computedPositions, params.cornerType);\r\n const wallIndices = attr.wallIndices;\r\n const height = params.height;\r\n const extrudedHeight = params.extrudedHeight;\r\n const attributes = attr.attributes;\r\n const indices = attr.indices;\r\n let positions = attributes.position.values;\r\n let length = positions.length;\r\n let extrudedPositions = new Float64Array(length);\r\n extrudedPositions.set(positions);\r\n const newPositions = new Float64Array(length * 2);\r\n\r\n positions = PolygonPipeline.scaleToGeodeticHeight(\r\n positions,\r\n height,\r\n ellipsoid\r\n );\r\n extrudedPositions = PolygonPipeline.scaleToGeodeticHeight(\r\n extrudedPositions,\r\n extrudedHeight,\r\n ellipsoid\r\n );\r\n newPositions.set(positions);\r\n newPositions.set(extrudedPositions, length);\r\n attributes.position.values = newPositions;\r\n\r\n length /= 3;\r\n if (defined(params.offsetAttribute)) {\r\n let applyOffset = new Uint8Array(length * 2);\r\n if (params.offsetAttribute === GeometryOffsetAttribute.TOP) {\r\n applyOffset = applyOffset.fill(1, 0, length);\r\n } else {\r\n const applyOffsetValue =\r\n params.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n applyOffset = applyOffset.fill(applyOffsetValue);\r\n }\r\n\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n let i;\r\n const iLength = indices.length;\r\n const newIndices = IndexDatatype.createTypedArray(\r\n newPositions.length / 3,\r\n (iLength + wallIndices.length) * 2\r\n );\r\n newIndices.set(indices);\r\n let index = iLength;\r\n for (i = 0; i < iLength; i += 2) {\r\n // bottom indices\r\n const v0 = indices[i];\r\n const v1 = indices[i + 1];\r\n newIndices[index++] = v0 + length;\r\n newIndices[index++] = v1 + length;\r\n }\r\n\r\n let UL, LL;\r\n for (i = 0; i < wallIndices.length; i++) {\r\n //wall indices\r\n UL = wallIndices[i];\r\n LL = UL + length;\r\n newIndices[index++] = UL;\r\n newIndices[index++] = LL;\r\n }\r\n\r\n return {\r\n attributes: attributes,\r\n indices: newIndices,\r\n };\r\n}\r\n\r\n/**\r\n * A description of a corridor outline.\r\n *\r\n * @alias CorridorOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of positions that define the center of the corridor outline.\r\n * @param {Number} options.width The distance between the edges of the corridor outline.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Number} [options.height=0] The distance in meters between the positions and the ellipsoid surface.\r\n * @param {Number} [options.extrudedHeight] The distance in meters between the extruded face and the ellipsoid surface.\r\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\r\n *\r\n * @see CorridorOutlineGeometry.createGeometry\r\n *\r\n * @example\r\n * const corridor = new Cesium.CorridorOutlineGeometry({\r\n * positions : Cesium.Cartesian3.fromDegreesArray([-72.0, 40.0, -70.0, 35.0]),\r\n * width : 100000\r\n * });\r\n */\r\nfunction CorridorOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.positions;\r\n const width = options.width;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"options.positions\", positions);\r\n Check.typeOf.number(\"options.width\", width);\r\n //>>includeEnd('debug');\r\n\r\n const height = defaultValue(options.height, 0.0);\r\n const extrudedHeight = defaultValue(options.extrudedHeight, height);\r\n\r\n this._positions = positions;\r\n this._ellipsoid = Ellipsoid.clone(\r\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\r\n );\r\n this._width = width;\r\n this._height = Math.max(height, extrudedHeight);\r\n this._extrudedHeight = Math.min(height, extrudedHeight);\r\n this._cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\r\n this._granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createCorridorOutlineGeometry\";\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n 1 + positions.length * Cartesian3.packedLength + Ellipsoid.packedLength + 6;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {CorridorOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCorridorOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.typeOf.object(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const positions = value._positions;\r\n const length = positions.length;\r\n array[startingIndex++] = length;\r\n\r\n for (let i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n Cartesian3.pack(positions[i], array, startingIndex);\r\n }\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n array[startingIndex++] = value._width;\r\n array[startingIndex++] = value._height;\r\n array[startingIndex++] = value._extrudedHeight;\r\n array[startingIndex++] = value._cornerType;\r\n array[startingIndex++] = value._granularity;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchOptions = {\r\n positions: undefined,\r\n ellipsoid: scratchEllipsoid,\r\n width: undefined,\r\n height: undefined,\r\n extrudedHeight: undefined,\r\n cornerType: undefined,\r\n granularity: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {CorridorOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {CorridorOutlineGeometry} The modified result parameter or a new CorridorOutlineGeometry instance if one was not provided.\r\n */\r\nCorridorOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const length = array[startingIndex++];\r\n const positions = new Array(length);\r\n\r\n for (let i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n positions[i] = Cartesian3.unpack(array, startingIndex);\r\n }\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const width = array[startingIndex++];\r\n const height = array[startingIndex++];\r\n const extrudedHeight = array[startingIndex++];\r\n const cornerType = array[startingIndex++];\r\n const granularity = array[startingIndex++];\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.positions = positions;\r\n scratchOptions.width = width;\r\n scratchOptions.height = height;\r\n scratchOptions.extrudedHeight = extrudedHeight;\r\n scratchOptions.cornerType = cornerType;\r\n scratchOptions.granularity = granularity;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n return new CorridorOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._positions = positions;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._width = width;\r\n result._height = height;\r\n result._extrudedHeight = extrudedHeight;\r\n result._cornerType = cornerType;\r\n result._granularity = granularity;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a corridor, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {CorridorOutlineGeometry} corridorOutlineGeometry A description of the corridor.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nCorridorOutlineGeometry.createGeometry = function (corridorOutlineGeometry) {\r\n let positions = corridorOutlineGeometry._positions;\r\n const width = corridorOutlineGeometry._width;\r\n const ellipsoid = corridorOutlineGeometry._ellipsoid;\r\n\r\n positions = scaleToSurface(positions, ellipsoid);\r\n const cleanPositions = arrayRemoveDuplicates(\r\n positions,\r\n Cartesian3.equalsEpsilon\r\n );\r\n\r\n if (cleanPositions.length < 2 || width <= 0) {\r\n return;\r\n }\r\n\r\n const height = corridorOutlineGeometry._height;\r\n const extrudedHeight = corridorOutlineGeometry._extrudedHeight;\r\n const extrude = !CesiumMath.equalsEpsilon(\r\n height,\r\n extrudedHeight,\r\n 0,\r\n CesiumMath.EPSILON2\r\n );\r\n\r\n const params = {\r\n ellipsoid: ellipsoid,\r\n positions: cleanPositions,\r\n width: width,\r\n cornerType: corridorOutlineGeometry._cornerType,\r\n granularity: corridorOutlineGeometry._granularity,\r\n saveAttributes: false,\r\n };\r\n let attr;\r\n if (extrude) {\r\n params.height = height;\r\n params.extrudedHeight = extrudedHeight;\r\n params.offsetAttribute = corridorOutlineGeometry._offsetAttribute;\r\n attr = computePositionsExtruded(params);\r\n } else {\r\n const computedPositions = CorridorGeometryLibrary.computePositions(params);\r\n attr = combine(computedPositions, params.cornerType);\r\n attr.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\r\n attr.attributes.position.values,\r\n height,\r\n ellipsoid\r\n );\r\n\r\n if (defined(corridorOutlineGeometry._offsetAttribute)) {\r\n const length = attr.attributes.position.values.length;\r\n const offsetValue =\r\n corridorOutlineGeometry._offsetAttribute ===\r\n GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n attr.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n }\r\n const attributes = attr.attributes;\r\n const boundingSphere = BoundingSphere.fromVertices(\r\n attributes.position.values,\r\n undefined,\r\n 3\r\n );\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: attr.indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: boundingSphere,\r\n offsetAttribute: corridorOutlineGeometry._offsetAttribute,\r\n });\r\n};\r\nexport default CorridorOutlineGeometry;\r\n","import CorridorOutlineGeometry from \"../Core/CorridorOutlineGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\n\r\nfunction createCorridorOutlineGeometry(corridorOutlineGeometry, offset) {\r\n if (defined(offset)) {\r\n corridorOutlineGeometry = CorridorOutlineGeometry.unpack(\r\n corridorOutlineGeometry,\r\n offset\r\n );\r\n }\r\n corridorOutlineGeometry._ellipsoid = Ellipsoid.clone(\r\n corridorOutlineGeometry._ellipsoid\r\n );\r\n return CorridorOutlineGeometry.createGeometry(corridorOutlineGeometry);\r\n}\r\nexport default createCorridorOutlineGeometry;\r\n"],"names":["Cartesian3","GeometryAttributes","defined","IndexDatatype","CorridorGeometryLibrary","CornerType","GeometryAttribute","ComponentDatatype","PolygonPipeline","GeometryOffsetAttribute","defaultValue","Check","Ellipsoid","CesiumMath","arrayRemoveDuplicates","BoundingSphere","Geometry","PrimitiveType"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createCylinderGeometry.js b/debug/cesium/Workers/createCylinderGeometry.js deleted file mode 100644 index 5f40e78..0000000 --- a/debug/cesium/Workers/createCylinderGeometry.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./CylinderGeometry-2b94e575', './defaultValue-0ab18f7d', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './CylinderGeometryLibrary-d951e1d0', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './VertexFormat-f2d74c96'], (function (CylinderGeometry, defaultValue, Transforms, Matrix3, Check, Math, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, CylinderGeometryLibrary, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, VertexFormat) { 'use strict'; - - function createCylinderGeometry(cylinderGeometry, offset) { - if (defaultValue.defined(offset)) { - cylinderGeometry = CylinderGeometry.CylinderGeometry.unpack(cylinderGeometry, offset); - } - return CylinderGeometry.CylinderGeometry.createGeometry(cylinderGeometry); - } - - return createCylinderGeometry; - -})); -//# sourceMappingURL=createCylinderGeometry.js.map diff --git a/debug/cesium/Workers/createCylinderGeometry.js.map b/debug/cesium/Workers/createCylinderGeometry.js.map deleted file mode 100644 index 49d49c4..0000000 --- a/debug/cesium/Workers/createCylinderGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createCylinderGeometry.js","sources":["../../../Source/WorkersES6/createCylinderGeometry.js"],"sourcesContent":["import CylinderGeometry from \"../Core/CylinderGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\n\r\nfunction createCylinderGeometry(cylinderGeometry, offset) {\r\n if (defined(offset)) {\r\n cylinderGeometry = CylinderGeometry.unpack(cylinderGeometry, offset);\r\n }\r\n return CylinderGeometry.createGeometry(cylinderGeometry);\r\n}\r\nexport default createCylinderGeometry;\r\n"],"names":["defined","CylinderGeometry"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAGA,SAAS,sBAAsB,CAAC,gBAAgB,EAAE,MAAM,EAAE;EAC1D,EAAE,IAAIA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,gBAAgB,GAAGC,iCAAgB,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;EACzE,GAAG;EACH,EAAE,OAAOA,iCAAgB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;EAC3D;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createCylinderOutlineGeometry.js b/debug/cesium/Workers/createCylinderOutlineGeometry.js deleted file mode 100644 index f4cfe53..0000000 --- a/debug/cesium/Workers/createCylinderOutlineGeometry.js +++ /dev/null @@ -1,291 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './CylinderGeometryLibrary-d951e1d0', './defaultValue-0ab18f7d', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './Math-9be8b918', './combine-4598d225', './RuntimeError-e5c6a8b9', './WebGLConstants-f27a5e29'], (function (Transforms, Matrix2, Matrix3, Check, ComponentDatatype, CylinderGeometryLibrary, defaultValue, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, Math$1, combine, RuntimeError, WebGLConstants) { 'use strict'; - - const radiusScratch = new Matrix2.Cartesian2(); - - /** - * A description of the outline of a cylinder. - * - * @alias CylinderOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Number} options.length The length of the cylinder. - * @param {Number} options.topRadius The radius of the top of the cylinder. - * @param {Number} options.bottomRadius The radius of the bottom of the cylinder. - * @param {Number} [options.slices=128] The number of edges around the perimeter of the cylinder. - * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surfaces of the cylinder. - * - * @exception {DeveloperError} options.length must be greater than 0. - * @exception {DeveloperError} options.topRadius must be greater than 0. - * @exception {DeveloperError} options.bottomRadius must be greater than 0. - * @exception {DeveloperError} bottomRadius and topRadius cannot both equal 0. - * @exception {DeveloperError} options.slices must be greater than or equal to 3. - * - * @see CylinderOutlineGeometry.createGeometry - * - * @example - * // create cylinder geometry - * const cylinder = new Cesium.CylinderOutlineGeometry({ - * length: 200000, - * topRadius: 80000, - * bottomRadius: 200000, - * }); - * const geometry = Cesium.CylinderOutlineGeometry.createGeometry(cylinder); - */ - function CylinderOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const length = options.length; - const topRadius = options.topRadius; - const bottomRadius = options.bottomRadius; - const slices = defaultValue.defaultValue(options.slices, 128); - const numberOfVerticalLines = Math.max( - defaultValue.defaultValue(options.numberOfVerticalLines, 16), - 0 - ); - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("options.positions", length); - Check.Check.typeOf.number("options.topRadius", topRadius); - Check.Check.typeOf.number("options.bottomRadius", bottomRadius); - Check.Check.typeOf.number.greaterThanOrEquals("options.slices", slices, 3); - if ( - defaultValue.defined(options.offsetAttribute) && - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP - ) { - throw new Check.DeveloperError( - "GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry." - ); - } - //>>includeEnd('debug'); - - this._length = length; - this._topRadius = topRadius; - this._bottomRadius = bottomRadius; - this._slices = slices; - this._numberOfVerticalLines = numberOfVerticalLines; - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createCylinderOutlineGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - CylinderOutlineGeometry.packedLength = 6; - - /** - * Stores the provided instance into the provided array. - * - * @param {CylinderOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - CylinderOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - array[startingIndex++] = value._length; - array[startingIndex++] = value._topRadius; - array[startingIndex++] = value._bottomRadius; - array[startingIndex++] = value._slices; - array[startingIndex++] = value._numberOfVerticalLines; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchOptions = { - length: undefined, - topRadius: undefined, - bottomRadius: undefined, - slices: undefined, - numberOfVerticalLines: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {CylinderOutlineGeometry} [result] The object into which to store the result. - * @returns {CylinderOutlineGeometry} The modified result parameter or a new CylinderOutlineGeometry instance if one was not provided. - */ - CylinderOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const length = array[startingIndex++]; - const topRadius = array[startingIndex++]; - const bottomRadius = array[startingIndex++]; - const slices = array[startingIndex++]; - const numberOfVerticalLines = array[startingIndex++]; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.length = length; - scratchOptions.topRadius = topRadius; - scratchOptions.bottomRadius = bottomRadius; - scratchOptions.slices = slices; - scratchOptions.numberOfVerticalLines = numberOfVerticalLines; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - return new CylinderOutlineGeometry(scratchOptions); - } - - result._length = length; - result._topRadius = topRadius; - result._bottomRadius = bottomRadius; - result._slices = slices; - result._numberOfVerticalLines = numberOfVerticalLines; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the geometric representation of an outline of a cylinder, including its vertices, indices, and a bounding sphere. - * - * @param {CylinderOutlineGeometry} cylinderGeometry A description of the cylinder outline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - CylinderOutlineGeometry.createGeometry = function (cylinderGeometry) { - let length = cylinderGeometry._length; - const topRadius = cylinderGeometry._topRadius; - const bottomRadius = cylinderGeometry._bottomRadius; - const slices = cylinderGeometry._slices; - const numberOfVerticalLines = cylinderGeometry._numberOfVerticalLines; - - if ( - length <= 0 || - topRadius < 0 || - bottomRadius < 0 || - (topRadius === 0 && bottomRadius === 0) - ) { - return; - } - - const numVertices = slices * 2; - - const positions = CylinderGeometryLibrary.CylinderGeometryLibrary.computePositions( - length, - topRadius, - bottomRadius, - slices, - false - ); - let numIndices = slices * 2; - let numSide; - if (numberOfVerticalLines > 0) { - const numSideLines = Math.min(numberOfVerticalLines, slices); - numSide = Math.round(slices / numSideLines); - numIndices += numSideLines; - } - - const indices = IndexDatatype.IndexDatatype.createTypedArray(numVertices, numIndices * 2); - let index = 0; - let i; - for (i = 0; i < slices - 1; i++) { - indices[index++] = i; - indices[index++] = i + 1; - indices[index++] = i + slices; - indices[index++] = i + 1 + slices; - } - - indices[index++] = slices - 1; - indices[index++] = 0; - indices[index++] = slices + slices - 1; - indices[index++] = slices; - - if (numberOfVerticalLines > 0) { - for (i = 0; i < slices; i += numSide) { - indices[index++] = i; - indices[index++] = i + slices; - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - - radiusScratch.x = length * 0.5; - radiusScratch.y = Math.max(bottomRadius, topRadius); - - const boundingSphere = new Transforms.BoundingSphere( - Matrix3.Cartesian3.ZERO, - Matrix2.Cartesian2.magnitude(radiusScratch) - ); - - if (defaultValue.defined(cylinderGeometry._offsetAttribute)) { - length = positions.length; - const offsetValue = - cylinderGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: boundingSphere, - offsetAttribute: cylinderGeometry._offsetAttribute, - }); - }; - - function createCylinderOutlineGeometry(cylinderGeometry, offset) { - if (defaultValue.defined(offset)) { - cylinderGeometry = CylinderOutlineGeometry.unpack(cylinderGeometry, offset); - } - return CylinderOutlineGeometry.createGeometry(cylinderGeometry); - } - - return createCylinderOutlineGeometry; - -})); -//# sourceMappingURL=createCylinderOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createCylinderOutlineGeometry.js.map b/debug/cesium/Workers/createCylinderOutlineGeometry.js.map deleted file mode 100644 index 64bfca3..0000000 --- a/debug/cesium/Workers/createCylinderOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createCylinderOutlineGeometry.js","sources":["../../../Source/Core/CylinderOutlineGeometry.js","../../../Source/WorkersES6/createCylinderOutlineGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport CylinderGeometryLibrary from \"./CylinderGeometryLibrary.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\n\r\nconst radiusScratch = new Cartesian2();\r\n\r\n/**\r\n * A description of the outline of a cylinder.\r\n *\r\n * @alias CylinderOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Number} options.length The length of the cylinder.\r\n * @param {Number} options.topRadius The radius of the top of the cylinder.\r\n * @param {Number} options.bottomRadius The radius of the bottom of the cylinder.\r\n * @param {Number} [options.slices=128] The number of edges around the perimeter of the cylinder.\r\n * @param {Number} [options.numberOfVerticalLines=16] Number of lines to draw between the top and bottom surfaces of the cylinder.\r\n *\r\n * @exception {DeveloperError} options.length must be greater than 0.\r\n * @exception {DeveloperError} options.topRadius must be greater than 0.\r\n * @exception {DeveloperError} options.bottomRadius must be greater than 0.\r\n * @exception {DeveloperError} bottomRadius and topRadius cannot both equal 0.\r\n * @exception {DeveloperError} options.slices must be greater than or equal to 3.\r\n *\r\n * @see CylinderOutlineGeometry.createGeometry\r\n *\r\n * @example\r\n * // create cylinder geometry\r\n * const cylinder = new Cesium.CylinderOutlineGeometry({\r\n * length: 200000,\r\n * topRadius: 80000,\r\n * bottomRadius: 200000,\r\n * });\r\n * const geometry = Cesium.CylinderOutlineGeometry.createGeometry(cylinder);\r\n */\r\nfunction CylinderOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const length = options.length;\r\n const topRadius = options.topRadius;\r\n const bottomRadius = options.bottomRadius;\r\n const slices = defaultValue(options.slices, 128);\r\n const numberOfVerticalLines = Math.max(\r\n defaultValue(options.numberOfVerticalLines, 16),\r\n 0\r\n );\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"options.positions\", length);\r\n Check.typeOf.number(\"options.topRadius\", topRadius);\r\n Check.typeOf.number(\"options.bottomRadius\", bottomRadius);\r\n Check.typeOf.number.greaterThanOrEquals(\"options.slices\", slices, 3);\r\n if (\r\n defined(options.offsetAttribute) &&\r\n options.offsetAttribute === GeometryOffsetAttribute.TOP\r\n ) {\r\n throw new DeveloperError(\r\n \"GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._length = length;\r\n this._topRadius = topRadius;\r\n this._bottomRadius = bottomRadius;\r\n this._slices = slices;\r\n this._numberOfVerticalLines = numberOfVerticalLines;\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createCylinderOutlineGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nCylinderOutlineGeometry.packedLength = 6;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {CylinderOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nCylinderOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n array[startingIndex++] = value._length;\r\n array[startingIndex++] = value._topRadius;\r\n array[startingIndex++] = value._bottomRadius;\r\n array[startingIndex++] = value._slices;\r\n array[startingIndex++] = value._numberOfVerticalLines;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchOptions = {\r\n length: undefined,\r\n topRadius: undefined,\r\n bottomRadius: undefined,\r\n slices: undefined,\r\n numberOfVerticalLines: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {CylinderOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {CylinderOutlineGeometry} The modified result parameter or a new CylinderOutlineGeometry instance if one was not provided.\r\n */\r\nCylinderOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const length = array[startingIndex++];\r\n const topRadius = array[startingIndex++];\r\n const bottomRadius = array[startingIndex++];\r\n const slices = array[startingIndex++];\r\n const numberOfVerticalLines = array[startingIndex++];\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.length = length;\r\n scratchOptions.topRadius = topRadius;\r\n scratchOptions.bottomRadius = bottomRadius;\r\n scratchOptions.slices = slices;\r\n scratchOptions.numberOfVerticalLines = numberOfVerticalLines;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n return new CylinderOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._length = length;\r\n result._topRadius = topRadius;\r\n result._bottomRadius = bottomRadius;\r\n result._slices = slices;\r\n result._numberOfVerticalLines = numberOfVerticalLines;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an outline of a cylinder, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {CylinderOutlineGeometry} cylinderGeometry A description of the cylinder outline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nCylinderOutlineGeometry.createGeometry = function (cylinderGeometry) {\r\n let length = cylinderGeometry._length;\r\n const topRadius = cylinderGeometry._topRadius;\r\n const bottomRadius = cylinderGeometry._bottomRadius;\r\n const slices = cylinderGeometry._slices;\r\n const numberOfVerticalLines = cylinderGeometry._numberOfVerticalLines;\r\n\r\n if (\r\n length <= 0 ||\r\n topRadius < 0 ||\r\n bottomRadius < 0 ||\r\n (topRadius === 0 && bottomRadius === 0)\r\n ) {\r\n return;\r\n }\r\n\r\n const numVertices = slices * 2;\r\n\r\n const positions = CylinderGeometryLibrary.computePositions(\r\n length,\r\n topRadius,\r\n bottomRadius,\r\n slices,\r\n false\r\n );\r\n let numIndices = slices * 2;\r\n let numSide;\r\n if (numberOfVerticalLines > 0) {\r\n const numSideLines = Math.min(numberOfVerticalLines, slices);\r\n numSide = Math.round(slices / numSideLines);\r\n numIndices += numSideLines;\r\n }\r\n\r\n const indices = IndexDatatype.createTypedArray(numVertices, numIndices * 2);\r\n let index = 0;\r\n let i;\r\n for (i = 0; i < slices - 1; i++) {\r\n indices[index++] = i;\r\n indices[index++] = i + 1;\r\n indices[index++] = i + slices;\r\n indices[index++] = i + 1 + slices;\r\n }\r\n\r\n indices[index++] = slices - 1;\r\n indices[index++] = 0;\r\n indices[index++] = slices + slices - 1;\r\n indices[index++] = slices;\r\n\r\n if (numberOfVerticalLines > 0) {\r\n for (i = 0; i < slices; i += numSide) {\r\n indices[index++] = i;\r\n indices[index++] = i + slices;\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n\r\n radiusScratch.x = length * 0.5;\r\n radiusScratch.y = Math.max(bottomRadius, topRadius);\r\n\r\n const boundingSphere = new BoundingSphere(\r\n Cartesian3.ZERO,\r\n Cartesian2.magnitude(radiusScratch)\r\n );\r\n\r\n if (defined(cylinderGeometry._offsetAttribute)) {\r\n length = positions.length;\r\n const offsetValue =\r\n cylinderGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: boundingSphere,\r\n offsetAttribute: cylinderGeometry._offsetAttribute,\r\n });\r\n};\r\nexport default CylinderOutlineGeometry;\r\n","import CylinderOutlineGeometry from \"../Core/CylinderOutlineGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\n\r\nfunction createCylinderOutlineGeometry(cylinderGeometry, offset) {\r\n if (defined(offset)) {\r\n cylinderGeometry = CylinderOutlineGeometry.unpack(cylinderGeometry, offset);\r\n }\r\n return CylinderOutlineGeometry.createGeometry(cylinderGeometry);\r\n}\r\nexport default createCylinderOutlineGeometry;\r\n"],"names":["Cartesian2","defaultValue","Check","defined","GeometryOffsetAttribute","DeveloperError","CylinderGeometryLibrary","IndexDatatype","GeometryAttributes","GeometryAttribute","ComponentDatatype","BoundingSphere","Cartesian3","Geometry","PrimitiveType"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createEllipseGeometry.js b/debug/cesium/Workers/createEllipseGeometry.js deleted file mode 100644 index 2bafa44..0000000 --- a/debug/cesium/Workers/createEllipseGeometry.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Matrix3-f22b0303', './defaultValue-0ab18f7d', './EllipseGeometry-6f0c1448', './Check-d10e5f2e', './Math-9be8b918', './Transforms-11fb6b0a', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './EllipseGeometryLibrary-d3f88cc2', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryInstance-b2be3e5a', './GeometryOffsetAttribute-cc320d7d', './GeometryPipeline-f28890f4', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './IndexDatatype-b4e5cf89', './IntersectionTests-2c7928de', './Plane-c9f1487d', './VertexFormat-f2d74c96'], (function (Matrix3, defaultValue, EllipseGeometry, Check, Math, Transforms, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, EllipseGeometryLibrary, GeometryAttribute, GeometryAttributes, GeometryInstance, GeometryOffsetAttribute, GeometryPipeline, AttributeCompression, EncodedCartesian3, IndexDatatype, IntersectionTests, Plane, VertexFormat) { 'use strict'; - - function createEllipseGeometry(ellipseGeometry, offset) { - if (defaultValue.defined(offset)) { - ellipseGeometry = EllipseGeometry.EllipseGeometry.unpack(ellipseGeometry, offset); - } - ellipseGeometry._center = Matrix3.Cartesian3.clone(ellipseGeometry._center); - ellipseGeometry._ellipsoid = Matrix3.Ellipsoid.clone(ellipseGeometry._ellipsoid); - return EllipseGeometry.EllipseGeometry.createGeometry(ellipseGeometry); - } - - return createEllipseGeometry; - -})); -//# sourceMappingURL=createEllipseGeometry.js.map diff --git a/debug/cesium/Workers/createEllipseGeometry.js.map b/debug/cesium/Workers/createEllipseGeometry.js.map deleted file mode 100644 index 6bc7ae4..0000000 --- a/debug/cesium/Workers/createEllipseGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createEllipseGeometry.js","sources":["../../../Source/WorkersES6/createEllipseGeometry.js"],"sourcesContent":["import Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport EllipseGeometry from \"../Core/EllipseGeometry.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\n\r\nfunction createEllipseGeometry(ellipseGeometry, offset) {\r\n if (defined(offset)) {\r\n ellipseGeometry = EllipseGeometry.unpack(ellipseGeometry, offset);\r\n }\r\n ellipseGeometry._center = Cartesian3.clone(ellipseGeometry._center);\r\n ellipseGeometry._ellipsoid = Ellipsoid.clone(ellipseGeometry._ellipsoid);\r\n return EllipseGeometry.createGeometry(ellipseGeometry);\r\n}\r\nexport default createEllipseGeometry;\r\n"],"names":["defined","EllipseGeometry","Cartesian3","Ellipsoid"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAKA,SAAS,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE;EACxD,EAAE,IAAIA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,eAAe,GAAGC,+BAAe,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;EACtE,GAAG;EACH,EAAE,eAAe,CAAC,OAAO,GAAGC,kBAAU,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;EACtE,EAAE,eAAe,CAAC,UAAU,GAAGC,iBAAS,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;EAC3E,EAAE,OAAOF,+BAAe,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;EACzD;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createEllipseOutlineGeometry.js b/debug/cesium/Workers/createEllipseOutlineGeometry.js deleted file mode 100644 index 765ce75..0000000 --- a/debug/cesium/Workers/createEllipseOutlineGeometry.js +++ /dev/null @@ -1,40 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Matrix3-f22b0303', './defaultValue-0ab18f7d', './EllipseOutlineGeometry-ea3faee0', './Check-d10e5f2e', './Math-9be8b918', './Transforms-11fb6b0a', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './EllipseGeometryLibrary-d3f88cc2', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89'], (function (Matrix3, defaultValue, EllipseOutlineGeometry, Check, Math, Transforms, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, EllipseGeometryLibrary, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype) { 'use strict'; - - function createEllipseOutlineGeometry(ellipseGeometry, offset) { - if (defaultValue.defined(offset)) { - ellipseGeometry = EllipseOutlineGeometry.EllipseOutlineGeometry.unpack(ellipseGeometry, offset); - } - ellipseGeometry._center = Matrix3.Cartesian3.clone(ellipseGeometry._center); - ellipseGeometry._ellipsoid = Matrix3.Ellipsoid.clone(ellipseGeometry._ellipsoid); - return EllipseOutlineGeometry.EllipseOutlineGeometry.createGeometry(ellipseGeometry); - } - - return createEllipseOutlineGeometry; - -})); -//# sourceMappingURL=createEllipseOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createEllipseOutlineGeometry.js.map b/debug/cesium/Workers/createEllipseOutlineGeometry.js.map deleted file mode 100644 index 56a9dda..0000000 --- a/debug/cesium/Workers/createEllipseOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createEllipseOutlineGeometry.js","sources":["../../../Source/WorkersES6/createEllipseOutlineGeometry.js"],"sourcesContent":["import Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport EllipseOutlineGeometry from \"../Core/EllipseOutlineGeometry.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\n\r\nfunction createEllipseOutlineGeometry(ellipseGeometry, offset) {\r\n if (defined(offset)) {\r\n ellipseGeometry = EllipseOutlineGeometry.unpack(ellipseGeometry, offset);\r\n }\r\n ellipseGeometry._center = Cartesian3.clone(ellipseGeometry._center);\r\n ellipseGeometry._ellipsoid = Ellipsoid.clone(ellipseGeometry._ellipsoid);\r\n return EllipseOutlineGeometry.createGeometry(ellipseGeometry);\r\n}\r\nexport default createEllipseOutlineGeometry;\r\n"],"names":["defined","EllipseOutlineGeometry","Cartesian3","Ellipsoid"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAKA,SAAS,4BAA4B,CAAC,eAAe,EAAE,MAAM,EAAE;EAC/D,EAAE,IAAIA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,eAAe,GAAGC,6CAAsB,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;EAC7E,GAAG;EACH,EAAE,eAAe,CAAC,OAAO,GAAGC,kBAAU,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;EACtE,EAAE,eAAe,CAAC,UAAU,GAAGC,iBAAS,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;EAC3E,EAAE,OAAOF,6CAAsB,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;EAChE;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createEllipsoidGeometry.js b/debug/cesium/Workers/createEllipsoidGeometry.js deleted file mode 100644 index 552d04b..0000000 --- a/debug/cesium/Workers/createEllipsoidGeometry.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './EllipsoidGeometry-66510462', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './VertexFormat-f2d74c96'], (function (defaultValue, EllipsoidGeometry, Transforms, Matrix3, Check, Math, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, VertexFormat) { 'use strict'; - - function createEllipsoidGeometry(ellipsoidGeometry, offset) { - if (defaultValue.defined(offset)) { - ellipsoidGeometry = EllipsoidGeometry.EllipsoidGeometry.unpack(ellipsoidGeometry, offset); - } - return EllipsoidGeometry.EllipsoidGeometry.createGeometry(ellipsoidGeometry); - } - - return createEllipsoidGeometry; - -})); -//# sourceMappingURL=createEllipsoidGeometry.js.map diff --git a/debug/cesium/Workers/createEllipsoidGeometry.js.map b/debug/cesium/Workers/createEllipsoidGeometry.js.map deleted file mode 100644 index 7b239bb..0000000 --- a/debug/cesium/Workers/createEllipsoidGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createEllipsoidGeometry.js","sources":["../../../Source/WorkersES6/createEllipsoidGeometry.js"],"sourcesContent":["import defined from \"../Core/defined.js\";\r\nimport EllipsoidGeometry from \"../Core/EllipsoidGeometry.js\";\r\n\r\nfunction createEllipsoidGeometry(ellipsoidGeometry, offset) {\r\n if (defined(offset)) {\r\n ellipsoidGeometry = EllipsoidGeometry.unpack(ellipsoidGeometry, offset);\r\n }\r\n return EllipsoidGeometry.createGeometry(ellipsoidGeometry);\r\n}\r\nexport default createEllipsoidGeometry;\r\n"],"names":["defined","EllipsoidGeometry"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAGA,SAAS,uBAAuB,CAAC,iBAAiB,EAAE,MAAM,EAAE;EAC5D,EAAE,IAAIA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,iBAAiB,GAAGC,mCAAiB,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;EAC5E,GAAG;EACH,EAAE,OAAOA,mCAAiB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;EAC7D;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createEllipsoidOutlineGeometry.js b/debug/cesium/Workers/createEllipsoidOutlineGeometry.js deleted file mode 100644 index 04c7ea3..0000000 --- a/debug/cesium/Workers/createEllipsoidOutlineGeometry.js +++ /dev/null @@ -1,41 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './EllipsoidOutlineGeometry-c18e3c42', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89'], (function (defaultValue, EllipsoidOutlineGeometry, Transforms, Matrix3, Check, Math, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype) { 'use strict'; - - function createEllipsoidOutlineGeometry(ellipsoidGeometry, offset) { - if (defaultValue.defined(ellipsoidGeometry.buffer)) { - ellipsoidGeometry = EllipsoidOutlineGeometry.EllipsoidOutlineGeometry.unpack( - ellipsoidGeometry, - offset - ); - } - return EllipsoidOutlineGeometry.EllipsoidOutlineGeometry.createGeometry(ellipsoidGeometry); - } - - return createEllipsoidOutlineGeometry; - -})); -//# sourceMappingURL=createEllipsoidOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createEllipsoidOutlineGeometry.js.map b/debug/cesium/Workers/createEllipsoidOutlineGeometry.js.map deleted file mode 100644 index 98c90a7..0000000 --- a/debug/cesium/Workers/createEllipsoidOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createEllipsoidOutlineGeometry.js","sources":["../../../Source/WorkersES6/createEllipsoidOutlineGeometry.js"],"sourcesContent":["import defined from \"../Core/defined.js\";\r\nimport EllipsoidOutlineGeometry from \"../Core/EllipsoidOutlineGeometry.js\";\r\n\r\nfunction createEllipsoidOutlineGeometry(ellipsoidGeometry, offset) {\r\n if (defined(ellipsoidGeometry.buffer, offset)) {\r\n ellipsoidGeometry = EllipsoidOutlineGeometry.unpack(\r\n ellipsoidGeometry,\r\n offset\r\n );\r\n }\r\n return EllipsoidOutlineGeometry.createGeometry(ellipsoidGeometry);\r\n}\r\nexport default createEllipsoidOutlineGeometry;\r\n"],"names":["defined","EllipsoidOutlineGeometry"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAGA,SAAS,8BAA8B,CAAC,iBAAiB,EAAE,MAAM,EAAE;EACnE,EAAE,IAAIA,oBAAO,CAAC,iBAAiB,CAAC,MAAc,CAAC,EAAE;EACjD,IAAI,iBAAiB,GAAGC,iDAAwB,CAAC,MAAM;EACvD,MAAM,iBAAiB;EACvB,MAAM,MAAM;EACZ,KAAK,CAAC;EACN,GAAG;EACH,EAAE,OAAOA,iDAAwB,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC;EACpE;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createFrustumGeometry.js b/debug/cesium/Workers/createFrustumGeometry.js deleted file mode 100644 index 9b6ba79..0000000 --- a/debug/cesium/Workers/createFrustumGeometry.js +++ /dev/null @@ -1,38 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './FrustumGeometry-f3f058a2', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './Plane-c9f1487d', './VertexFormat-f2d74c96'], (function (defaultValue, FrustumGeometry, Transforms, Matrix3, Check, Math, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, Plane, VertexFormat) { 'use strict'; - - function createFrustumGeometry(frustumGeometry, offset) { - if (defaultValue.defined(offset)) { - frustumGeometry = FrustumGeometry.FrustumGeometry.unpack(frustumGeometry, offset); - } - return FrustumGeometry.FrustumGeometry.createGeometry(frustumGeometry); - } - - return createFrustumGeometry; - -})); -//# sourceMappingURL=createFrustumGeometry.js.map diff --git a/debug/cesium/Workers/createFrustumGeometry.js.map b/debug/cesium/Workers/createFrustumGeometry.js.map deleted file mode 100644 index 574112f..0000000 --- a/debug/cesium/Workers/createFrustumGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createFrustumGeometry.js","sources":["../../../Source/WorkersES6/createFrustumGeometry.js"],"sourcesContent":["import defined from \"../Core/defined.js\";\r\nimport FrustumGeometry from \"../Core/FrustumGeometry.js\";\r\n\r\nfunction createFrustumGeometry(frustumGeometry, offset) {\r\n if (defined(offset)) {\r\n frustumGeometry = FrustumGeometry.unpack(frustumGeometry, offset);\r\n }\r\n return FrustumGeometry.createGeometry(frustumGeometry);\r\n}\r\nexport default createFrustumGeometry;\r\n"],"names":["defined","FrustumGeometry"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAGA,SAAS,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE;EACxD,EAAE,IAAIA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,eAAe,GAAGC,+BAAe,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;EACtE,GAAG;EACH,EAAE,OAAOA,+BAAe,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;EACzD;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createFrustumOutlineGeometry.js b/debug/cesium/Workers/createFrustumOutlineGeometry.js deleted file mode 100644 index d323d71..0000000 --- a/debug/cesium/Workers/createFrustumOutlineGeometry.js +++ /dev/null @@ -1,277 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './FrustumGeometry-f3f058a2', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './Plane-c9f1487d', './VertexFormat-f2d74c96'], (function (defaultValue, Transforms, Matrix3, Check, ComponentDatatype, FrustumGeometry, GeometryAttribute, GeometryAttributes, Math, Matrix2, RuntimeError, combine, WebGLConstants, Plane, VertexFormat) { 'use strict'; - - const PERSPECTIVE = 0; - const ORTHOGRAPHIC = 1; - - /** - * A description of the outline of a frustum with the given the origin and orientation. - * - * @alias FrustumOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum. - * @param {Cartesian3} options.origin The origin of the frustum. - * @param {Quaternion} options.orientation The orientation of the frustum. - */ - function FrustumOutlineGeometry(options) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("options", options); - Check.Check.typeOf.object("options.frustum", options.frustum); - Check.Check.typeOf.object("options.origin", options.origin); - Check.Check.typeOf.object("options.orientation", options.orientation); - //>>includeEnd('debug'); - - const frustum = options.frustum; - const orientation = options.orientation; - const origin = options.origin; - - // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by - // creating multiple FrustumOutlineGeometrys. This way the near plane of one frustum doesn't overlap - // the far plane of another. - const drawNearPlane = defaultValue.defaultValue(options._drawNearPlane, true); - - let frustumType; - let frustumPackedLength; - if (frustum instanceof FrustumGeometry.PerspectiveFrustum) { - frustumType = PERSPECTIVE; - frustumPackedLength = FrustumGeometry.PerspectiveFrustum.packedLength; - } else if (frustum instanceof FrustumGeometry.OrthographicFrustum) { - frustumType = ORTHOGRAPHIC; - frustumPackedLength = FrustumGeometry.OrthographicFrustum.packedLength; - } - - this._frustumType = frustumType; - this._frustum = frustum.clone(); - this._origin = Matrix3.Cartesian3.clone(origin); - this._orientation = Transforms.Quaternion.clone(orientation); - this._drawNearPlane = drawNearPlane; - this._workerName = "createFrustumOutlineGeometry"; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - 2 + frustumPackedLength + Matrix3.Cartesian3.packedLength + Transforms.Quaternion.packedLength; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {FrustumOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - FrustumOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const frustumType = value._frustumType; - const frustum = value._frustum; - - array[startingIndex++] = frustumType; - - if (frustumType === PERSPECTIVE) { - FrustumGeometry.PerspectiveFrustum.pack(frustum, array, startingIndex); - startingIndex += FrustumGeometry.PerspectiveFrustum.packedLength; - } else { - FrustumGeometry.OrthographicFrustum.pack(frustum, array, startingIndex); - startingIndex += FrustumGeometry.OrthographicFrustum.packedLength; - } - - Matrix3.Cartesian3.pack(value._origin, array, startingIndex); - startingIndex += Matrix3.Cartesian3.packedLength; - Transforms.Quaternion.pack(value._orientation, array, startingIndex); - startingIndex += Transforms.Quaternion.packedLength; - array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0; - - return array; - }; - - const scratchPackPerspective = new FrustumGeometry.PerspectiveFrustum(); - const scratchPackOrthographic = new FrustumGeometry.OrthographicFrustum(); - const scratchPackQuaternion = new Transforms.Quaternion(); - const scratchPackorigin = new Matrix3.Cartesian3(); - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {FrustumOutlineGeometry} [result] The object into which to store the result. - */ - FrustumOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const frustumType = array[startingIndex++]; - - let frustum; - if (frustumType === PERSPECTIVE) { - frustum = FrustumGeometry.PerspectiveFrustum.unpack( - array, - startingIndex, - scratchPackPerspective - ); - startingIndex += FrustumGeometry.PerspectiveFrustum.packedLength; - } else { - frustum = FrustumGeometry.OrthographicFrustum.unpack( - array, - startingIndex, - scratchPackOrthographic - ); - startingIndex += FrustumGeometry.OrthographicFrustum.packedLength; - } - - const origin = Matrix3.Cartesian3.unpack(array, startingIndex, scratchPackorigin); - startingIndex += Matrix3.Cartesian3.packedLength; - const orientation = Transforms.Quaternion.unpack( - array, - startingIndex, - scratchPackQuaternion - ); - startingIndex += Transforms.Quaternion.packedLength; - const drawNearPlane = array[startingIndex] === 1.0; - - if (!defaultValue.defined(result)) { - return new FrustumOutlineGeometry({ - frustum: frustum, - origin: origin, - orientation: orientation, - _drawNearPlane: drawNearPlane, - }); - } - - const frustumResult = - frustumType === result._frustumType ? result._frustum : undefined; - result._frustum = frustum.clone(frustumResult); - - result._frustumType = frustumType; - result._origin = Matrix3.Cartesian3.clone(origin, result._origin); - result._orientation = Transforms.Quaternion.clone(orientation, result._orientation); - result._drawNearPlane = drawNearPlane; - - return result; - }; - - /** - * Computes the geometric representation of a frustum outline, including its vertices, indices, and a bounding sphere. - * - * @param {FrustumOutlineGeometry} frustumGeometry A description of the frustum. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - FrustumOutlineGeometry.createGeometry = function (frustumGeometry) { - const frustumType = frustumGeometry._frustumType; - const frustum = frustumGeometry._frustum; - const origin = frustumGeometry._origin; - const orientation = frustumGeometry._orientation; - const drawNearPlane = frustumGeometry._drawNearPlane; - - const positions = new Float64Array(3 * 4 * 2); - FrustumGeometry.FrustumGeometry._computeNearFarPlanes( - origin, - orientation, - frustumType, - frustum, - positions - ); - - const attributes = new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }), - }); - - let offset; - let index; - - const numberOfPlanes = drawNearPlane ? 2 : 1; - const indices = new Uint16Array(8 * (numberOfPlanes + 1)); - - // Build the near/far planes - let i = drawNearPlane ? 0 : 1; - for (; i < 2; ++i) { - offset = drawNearPlane ? i * 8 : 0; - index = i * 4; - - indices[offset] = index; - indices[offset + 1] = index + 1; - indices[offset + 2] = index + 1; - indices[offset + 3] = index + 2; - indices[offset + 4] = index + 2; - indices[offset + 5] = index + 3; - indices[offset + 6] = index + 3; - indices[offset + 7] = index; - } - - // Build the sides of the frustums - for (i = 0; i < 2; ++i) { - offset = (numberOfPlanes + i) * 8; - index = i * 4; - - indices[offset] = index; - indices[offset + 1] = index + 4; - indices[offset + 2] = index + 1; - indices[offset + 3] = index + 5; - indices[offset + 4] = index + 2; - indices[offset + 5] = index + 6; - indices[offset + 6] = index + 3; - indices[offset + 7] = index + 7; - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: Transforms.BoundingSphere.fromVertices(positions), - }); - }; - - function createFrustumOutlineGeometry(frustumGeometry, offset) { - if (defaultValue.defined(offset)) { - frustumGeometry = FrustumOutlineGeometry.unpack(frustumGeometry, offset); - } - return FrustumOutlineGeometry.createGeometry(frustumGeometry); - } - - return createFrustumOutlineGeometry; - -})); -//# sourceMappingURL=createFrustumOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createFrustumOutlineGeometry.js.map b/debug/cesium/Workers/createFrustumOutlineGeometry.js.map deleted file mode 100644 index ae29413..0000000 --- a/debug/cesium/Workers/createFrustumOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createFrustumOutlineGeometry.js","sources":["../../../Source/Core/FrustumOutlineGeometry.js","../../../Source/WorkersES6/createFrustumOutlineGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport FrustumGeometry from \"./FrustumGeometry.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport OrthographicFrustum from \"./OrthographicFrustum.js\";\r\nimport PerspectiveFrustum from \"./PerspectiveFrustum.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\n\r\nconst PERSPECTIVE = 0;\r\nconst ORTHOGRAPHIC = 1;\r\n\r\n/**\r\n * A description of the outline of a frustum with the given the origin and orientation.\r\n *\r\n * @alias FrustumOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {PerspectiveFrustum|OrthographicFrustum} options.frustum The frustum.\r\n * @param {Cartesian3} options.origin The origin of the frustum.\r\n * @param {Quaternion} options.orientation The orientation of the frustum.\r\n */\r\nfunction FrustumOutlineGeometry(options) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"options\", options);\r\n Check.typeOf.object(\"options.frustum\", options.frustum);\r\n Check.typeOf.object(\"options.origin\", options.origin);\r\n Check.typeOf.object(\"options.orientation\", options.orientation);\r\n //>>includeEnd('debug');\r\n\r\n const frustum = options.frustum;\r\n const orientation = options.orientation;\r\n const origin = options.origin;\r\n\r\n // This is private because it is used by DebugCameraPrimitive to draw a multi-frustum by\r\n // creating multiple FrustumOutlineGeometrys. This way the near plane of one frustum doesn't overlap\r\n // the far plane of another.\r\n const drawNearPlane = defaultValue(options._drawNearPlane, true);\r\n\r\n let frustumType;\r\n let frustumPackedLength;\r\n if (frustum instanceof PerspectiveFrustum) {\r\n frustumType = PERSPECTIVE;\r\n frustumPackedLength = PerspectiveFrustum.packedLength;\r\n } else if (frustum instanceof OrthographicFrustum) {\r\n frustumType = ORTHOGRAPHIC;\r\n frustumPackedLength = OrthographicFrustum.packedLength;\r\n }\r\n\r\n this._frustumType = frustumType;\r\n this._frustum = frustum.clone();\r\n this._origin = Cartesian3.clone(origin);\r\n this._orientation = Quaternion.clone(orientation);\r\n this._drawNearPlane = drawNearPlane;\r\n this._workerName = \"createFrustumOutlineGeometry\";\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n 2 + frustumPackedLength + Cartesian3.packedLength + Quaternion.packedLength;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {FrustumOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nFrustumOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const frustumType = value._frustumType;\r\n const frustum = value._frustum;\r\n\r\n array[startingIndex++] = frustumType;\r\n\r\n if (frustumType === PERSPECTIVE) {\r\n PerspectiveFrustum.pack(frustum, array, startingIndex);\r\n startingIndex += PerspectiveFrustum.packedLength;\r\n } else {\r\n OrthographicFrustum.pack(frustum, array, startingIndex);\r\n startingIndex += OrthographicFrustum.packedLength;\r\n }\r\n\r\n Cartesian3.pack(value._origin, array, startingIndex);\r\n startingIndex += Cartesian3.packedLength;\r\n Quaternion.pack(value._orientation, array, startingIndex);\r\n startingIndex += Quaternion.packedLength;\r\n array[startingIndex] = value._drawNearPlane ? 1.0 : 0.0;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchPackPerspective = new PerspectiveFrustum();\r\nconst scratchPackOrthographic = new OrthographicFrustum();\r\nconst scratchPackQuaternion = new Quaternion();\r\nconst scratchPackorigin = new Cartesian3();\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {FrustumOutlineGeometry} [result] The object into which to store the result.\r\n */\r\nFrustumOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const frustumType = array[startingIndex++];\r\n\r\n let frustum;\r\n if (frustumType === PERSPECTIVE) {\r\n frustum = PerspectiveFrustum.unpack(\r\n array,\r\n startingIndex,\r\n scratchPackPerspective\r\n );\r\n startingIndex += PerspectiveFrustum.packedLength;\r\n } else {\r\n frustum = OrthographicFrustum.unpack(\r\n array,\r\n startingIndex,\r\n scratchPackOrthographic\r\n );\r\n startingIndex += OrthographicFrustum.packedLength;\r\n }\r\n\r\n const origin = Cartesian3.unpack(array, startingIndex, scratchPackorigin);\r\n startingIndex += Cartesian3.packedLength;\r\n const orientation = Quaternion.unpack(\r\n array,\r\n startingIndex,\r\n scratchPackQuaternion\r\n );\r\n startingIndex += Quaternion.packedLength;\r\n const drawNearPlane = array[startingIndex] === 1.0;\r\n\r\n if (!defined(result)) {\r\n return new FrustumOutlineGeometry({\r\n frustum: frustum,\r\n origin: origin,\r\n orientation: orientation,\r\n _drawNearPlane: drawNearPlane,\r\n });\r\n }\r\n\r\n const frustumResult =\r\n frustumType === result._frustumType ? result._frustum : undefined;\r\n result._frustum = frustum.clone(frustumResult);\r\n\r\n result._frustumType = frustumType;\r\n result._origin = Cartesian3.clone(origin, result._origin);\r\n result._orientation = Quaternion.clone(orientation, result._orientation);\r\n result._drawNearPlane = drawNearPlane;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a frustum outline, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {FrustumOutlineGeometry} frustumGeometry A description of the frustum.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nFrustumOutlineGeometry.createGeometry = function (frustumGeometry) {\r\n const frustumType = frustumGeometry._frustumType;\r\n const frustum = frustumGeometry._frustum;\r\n const origin = frustumGeometry._origin;\r\n const orientation = frustumGeometry._orientation;\r\n const drawNearPlane = frustumGeometry._drawNearPlane;\r\n\r\n const positions = new Float64Array(3 * 4 * 2);\r\n FrustumGeometry._computeNearFarPlanes(\r\n origin,\r\n orientation,\r\n frustumType,\r\n frustum,\r\n positions\r\n );\r\n\r\n const attributes = new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n }),\r\n });\r\n\r\n let offset;\r\n let index;\r\n\r\n const numberOfPlanes = drawNearPlane ? 2 : 1;\r\n const indices = new Uint16Array(8 * (numberOfPlanes + 1));\r\n\r\n // Build the near/far planes\r\n let i = drawNearPlane ? 0 : 1;\r\n for (; i < 2; ++i) {\r\n offset = drawNearPlane ? i * 8 : 0;\r\n index = i * 4;\r\n\r\n indices[offset] = index;\r\n indices[offset + 1] = index + 1;\r\n indices[offset + 2] = index + 1;\r\n indices[offset + 3] = index + 2;\r\n indices[offset + 4] = index + 2;\r\n indices[offset + 5] = index + 3;\r\n indices[offset + 6] = index + 3;\r\n indices[offset + 7] = index;\r\n }\r\n\r\n // Build the sides of the frustums\r\n for (i = 0; i < 2; ++i) {\r\n offset = (numberOfPlanes + i) * 8;\r\n index = i * 4;\r\n\r\n indices[offset] = index;\r\n indices[offset + 1] = index + 4;\r\n indices[offset + 2] = index + 1;\r\n indices[offset + 3] = index + 5;\r\n indices[offset + 4] = index + 2;\r\n indices[offset + 5] = index + 6;\r\n indices[offset + 6] = index + 3;\r\n indices[offset + 7] = index + 7;\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: BoundingSphere.fromVertices(positions),\r\n });\r\n};\r\nexport default FrustumOutlineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport FrustumOutlineGeometry from \"../Core/FrustumOutlineGeometry.js\";\r\n\r\nfunction createFrustumOutlineGeometry(frustumGeometry, offset) {\r\n if (defined(offset)) {\r\n frustumGeometry = FrustumOutlineGeometry.unpack(frustumGeometry, offset);\r\n }\r\n return FrustumOutlineGeometry.createGeometry(frustumGeometry);\r\n}\r\nexport default createFrustumOutlineGeometry;\r\n"],"names":["Check","defaultValue","PerspectiveFrustum","OrthographicFrustum","Cartesian3","Quaternion","defined","FrustumGeometry","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createGeometry.js b/debug/cesium/Workers/createGeometry.js deleted file mode 100644 index fe6827b..0000000 --- a/debug/cesium/Workers/createGeometry.js +++ /dev/null @@ -1,81 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './PrimitivePipeline-f6d2b3b0', './createTaskProcessorWorker', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryPipeline-f28890f4', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './IndexDatatype-b4e5cf89', './IntersectionTests-2c7928de', './Plane-c9f1487d', './WebMercatorProjection-306f7acc'], (function (defaultValue, PrimitivePipeline, createTaskProcessorWorker, Transforms, Matrix3, Check, Math, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, GeometryPipeline, AttributeCompression, EncodedCartesian3, IndexDatatype, IntersectionTests, Plane, WebMercatorProjection) { 'use strict'; - - /* global require */ - - const moduleCache = {}; - - function getModule(moduleName) { - let module = moduleCache[moduleName]; - if (!defaultValue.defined(module)) { - if (typeof exports === "object") { - // Use CommonJS-style require. - moduleCache[module] = module = require(`Workers/${moduleName}`); - } else { - // Use AMD-style require. - // in web workers, require is synchronous - require([`Workers/${moduleName}`], function (f) { - module = f; - moduleCache[module] = f; - }); - } - } - return module; - } - - function createGeometry(parameters, transferableObjects) { - const subTasks = parameters.subTasks; - const length = subTasks.length; - const resultsOrPromises = new Array(length); - - for (let i = 0; i < length; i++) { - const task = subTasks[i]; - const geometry = task.geometry; - const moduleName = task.moduleName; - - if (defaultValue.defined(moduleName)) { - const createFunction = getModule(moduleName); - resultsOrPromises[i] = createFunction(geometry, task.offset); - } else { - //Already created geometry - resultsOrPromises[i] = geometry; - } - } - - return Promise.all(resultsOrPromises).then(function (results) { - return PrimitivePipeline.PrimitivePipeline.packCreateGeometryResults( - results, - transferableObjects - ); - }); - } - var createGeometry$1 = createTaskProcessorWorker(createGeometry); - - return createGeometry$1; - -})); -//# sourceMappingURL=createGeometry.js.map diff --git a/debug/cesium/Workers/createGeometry.js.map b/debug/cesium/Workers/createGeometry.js.map deleted file mode 100644 index 37aec37..0000000 --- a/debug/cesium/Workers/createGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createGeometry.js","sources":["../../../Source/WorkersES6/createGeometry.js"],"sourcesContent":["/* global require */\r\nimport defined from \"../Core/defined.js\";\r\nimport PrimitivePipeline from \"../Scene/PrimitivePipeline.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst moduleCache = {};\r\n\r\nfunction getModule(moduleName) {\r\n let module = moduleCache[moduleName];\r\n if (!defined(module)) {\r\n if (typeof exports === \"object\") {\r\n // Use CommonJS-style require.\r\n moduleCache[module] = module = require(`Workers/${moduleName}`);\r\n } else {\r\n // Use AMD-style require.\r\n // in web workers, require is synchronous\r\n require([`Workers/${moduleName}`], function (f) {\r\n module = f;\r\n moduleCache[module] = f;\r\n });\r\n }\r\n }\r\n return module;\r\n}\r\n\r\nfunction createGeometry(parameters, transferableObjects) {\r\n const subTasks = parameters.subTasks;\r\n const length = subTasks.length;\r\n const resultsOrPromises = new Array(length);\r\n\r\n for (let i = 0; i < length; i++) {\r\n const task = subTasks[i];\r\n const geometry = task.geometry;\r\n const moduleName = task.moduleName;\r\n\r\n if (defined(moduleName)) {\r\n const createFunction = getModule(moduleName);\r\n resultsOrPromises[i] = createFunction(geometry, task.offset);\r\n } else {\r\n //Already created geometry\r\n resultsOrPromises[i] = geometry;\r\n }\r\n }\r\n\r\n return Promise.all(resultsOrPromises).then(function (results) {\r\n return PrimitivePipeline.packCreateGeometryResults(\r\n results,\r\n transferableObjects\r\n );\r\n });\r\n}\r\nexport default createTaskProcessorWorker(createGeometry);\r\n"],"names":["defined","PrimitivePipeline"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;AAIA;EACA,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB;EACA,SAAS,SAAS,CAAC,UAAU,EAAE;EAC/B,EAAE,IAAI,MAAM,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;EACvC,EAAE,IAAI,CAACA,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;EACrC;EACA,MAAM,WAAW,CAAC,MAAM,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;EACtE,KAAK,MAAM;EACX;EACA;EACA,MAAM,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE;EACtD,QAAQ,MAAM,GAAG,CAAC,CAAC;EACnB,QAAQ,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;EAChC,OAAO,CAAC,CAAC;EACT,KAAK;EACL,GAAG;EACH,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC;AACD;EACA,SAAS,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE;EACzD,EAAE,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;EACvC,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;EACjC,EAAE,MAAM,iBAAiB,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AAC9C;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;EACnC,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC7B,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;EACnC,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AACvC;EACA,IAAI,IAAIA,oBAAO,CAAC,UAAU,CAAC,EAAE;EAC7B,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;EACnD,MAAM,iBAAiB,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;EACnE,KAAK,MAAM;EACX;EACA,MAAM,iBAAiB,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;EACtC,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,UAAU,OAAO,EAAE;EAChE,IAAI,OAAOC,mCAAiB,CAAC,yBAAyB;EACtD,MAAM,OAAO;EACb,MAAM,mBAAmB;EACzB,KAAK,CAAC;EACN,GAAG,CAAC,CAAC;EACL,CAAC;AACD,yBAAe,yBAAyB,CAAC,cAAc,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createGroundPolylineGeometry.js b/debug/cesium/Workers/createGroundPolylineGeometry.js deleted file mode 100644 index e65c221..0000000 --- a/debug/cesium/Workers/createGroundPolylineGeometry.js +++ /dev/null @@ -1,2161 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './Check-d10e5f2e', './defaultValue-0ab18f7d', './Math-9be8b918', './ArcType-d608b872', './arrayRemoveDuplicates-c3526030', './ComponentDatatype-13a5630b', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b', './EncodedCartesian3-38e2691f', './GeometryAttribute-f2746b95', './IntersectionTests-2c7928de', './Plane-c9f1487d', './WebMercatorProjection-306f7acc', './combine-4598d225', './RuntimeError-e5c6a8b9', './WebGLConstants-f27a5e29'], (function (Transforms, Matrix2, Matrix3, Check, defaultValue, Math$1, ArcType, arrayRemoveDuplicates, ComponentDatatype, EllipsoidGeodesic, EllipsoidRhumbLine, EncodedCartesian3, GeometryAttribute, IntersectionTests, Plane, WebMercatorProjection, combine, RuntimeError, WebGLConstants) { 'use strict'; - - /** - * A tiling scheme for geometry referenced to a simple {@link GeographicProjection} where - * longitude and latitude are directly mapped to X and Y. This projection is commonly - * known as geographic, equirectangular, equidistant cylindrical, or plate carrée. - * - * @alias GeographicTilingScheme - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid whose surface is being tiled. Defaults to - * the WGS84 ellipsoid. - * @param {Rectangle} [options.rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the tiling scheme. - * @param {Number} [options.numberOfLevelZeroTilesX=2] The number of tiles in the X direction at level zero of - * the tile tree. - * @param {Number} [options.numberOfLevelZeroTilesY=1] The number of tiles in the Y direction at level zero of - * the tile tree. - */ - function GeographicTilingScheme(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - this._ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - this._rectangle = defaultValue.defaultValue(options.rectangle, Matrix2.Rectangle.MAX_VALUE); - this._projection = new Transforms.GeographicProjection(this._ellipsoid); - this._numberOfLevelZeroTilesX = defaultValue.defaultValue( - options.numberOfLevelZeroTilesX, - 2 - ); - this._numberOfLevelZeroTilesY = defaultValue.defaultValue( - options.numberOfLevelZeroTilesY, - 1 - ); - } - - Object.defineProperties(GeographicTilingScheme.prototype, { - /** - * Gets the ellipsoid that is tiled by this tiling scheme. - * @memberof GeographicTilingScheme.prototype - * @type {Ellipsoid} - */ - ellipsoid: { - get: function () { - return this._ellipsoid; - }, - }, - - /** - * Gets the rectangle, in radians, covered by this tiling scheme. - * @memberof GeographicTilingScheme.prototype - * @type {Rectangle} - */ - rectangle: { - get: function () { - return this._rectangle; - }, - }, - - /** - * Gets the map projection used by this tiling scheme. - * @memberof GeographicTilingScheme.prototype - * @type {MapProjection} - */ - projection: { - get: function () { - return this._projection; - }, - }, - }); - - /** - * Gets the total number of tiles in the X direction at a specified level-of-detail. - * - * @param {Number} level The level-of-detail. - * @returns {Number} The number of tiles in the X direction at the given level. - */ - GeographicTilingScheme.prototype.getNumberOfXTilesAtLevel = function (level) { - return this._numberOfLevelZeroTilesX << level; - }; - - /** - * Gets the total number of tiles in the Y direction at a specified level-of-detail. - * - * @param {Number} level The level-of-detail. - * @returns {Number} The number of tiles in the Y direction at the given level. - */ - GeographicTilingScheme.prototype.getNumberOfYTilesAtLevel = function (level) { - return this._numberOfLevelZeroTilesY << level; - }; - - /** - * Transforms a rectangle specified in geodetic radians to the native coordinate system - * of this tiling scheme. - * - * @param {Rectangle} rectangle The rectangle to transform. - * @param {Rectangle} [result] The instance to which to copy the result, or undefined if a new instance - * should be created. - * @returns {Rectangle} The specified 'result', or a new object containing the native rectangle if 'result' - * is undefined. - */ - GeographicTilingScheme.prototype.rectangleToNativeRectangle = function ( - rectangle, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("rectangle", rectangle); - //>>includeEnd('debug'); - - const west = Math$1.CesiumMath.toDegrees(rectangle.west); - const south = Math$1.CesiumMath.toDegrees(rectangle.south); - const east = Math$1.CesiumMath.toDegrees(rectangle.east); - const north = Math$1.CesiumMath.toDegrees(rectangle.north); - - if (!defaultValue.defined(result)) { - return new Matrix2.Rectangle(west, south, east, north); - } - - result.west = west; - result.south = south; - result.east = east; - result.north = north; - return result; - }; - - /** - * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates - * of the tiling scheme. - * - * @param {Number} x The integer x coordinate of the tile. - * @param {Number} y The integer y coordinate of the tile. - * @param {Number} level The tile level-of-detail. Zero is the least detailed. - * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance - * should be created. - * @returns {Rectangle} The specified 'result', or a new object containing the rectangle - * if 'result' is undefined. - */ - GeographicTilingScheme.prototype.tileXYToNativeRectangle = function ( - x, - y, - level, - result - ) { - const rectangleRadians = this.tileXYToRectangle(x, y, level, result); - rectangleRadians.west = Math$1.CesiumMath.toDegrees(rectangleRadians.west); - rectangleRadians.south = Math$1.CesiumMath.toDegrees(rectangleRadians.south); - rectangleRadians.east = Math$1.CesiumMath.toDegrees(rectangleRadians.east); - rectangleRadians.north = Math$1.CesiumMath.toDegrees(rectangleRadians.north); - return rectangleRadians; - }; - - /** - * Converts tile x, y coordinates and level to a cartographic rectangle in radians. - * - * @param {Number} x The integer x coordinate of the tile. - * @param {Number} y The integer y coordinate of the tile. - * @param {Number} level The tile level-of-detail. Zero is the least detailed. - * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance - * should be created. - * @returns {Rectangle} The specified 'result', or a new object containing the rectangle - * if 'result' is undefined. - */ - GeographicTilingScheme.prototype.tileXYToRectangle = function ( - x, - y, - level, - result - ) { - const rectangle = this._rectangle; - - const xTiles = this.getNumberOfXTilesAtLevel(level); - const yTiles = this.getNumberOfYTilesAtLevel(level); - - const xTileWidth = rectangle.width / xTiles; - const west = x * xTileWidth + rectangle.west; - const east = (x + 1) * xTileWidth + rectangle.west; - - const yTileHeight = rectangle.height / yTiles; - const north = rectangle.north - y * yTileHeight; - const south = rectangle.north - (y + 1) * yTileHeight; - - if (!defaultValue.defined(result)) { - result = new Matrix2.Rectangle(west, south, east, north); - } - - result.west = west; - result.south = south; - result.east = east; - result.north = north; - return result; - }; - - /** - * Calculates the tile x, y coordinates of the tile containing - * a given cartographic position. - * - * @param {Cartographic} position The position. - * @param {Number} level The tile level-of-detail. Zero is the least detailed. - * @param {Cartesian2} [result] The instance to which to copy the result, or undefined if a new instance - * should be created. - * @returns {Cartesian2} The specified 'result', or a new object containing the tile x, y coordinates - * if 'result' is undefined. - */ - GeographicTilingScheme.prototype.positionToTileXY = function ( - position, - level, - result - ) { - const rectangle = this._rectangle; - if (!Matrix2.Rectangle.contains(rectangle, position)) { - // outside the bounds of the tiling scheme - return undefined; - } - - const xTiles = this.getNumberOfXTilesAtLevel(level); - const yTiles = this.getNumberOfYTilesAtLevel(level); - - const xTileWidth = rectangle.width / xTiles; - const yTileHeight = rectangle.height / yTiles; - - let longitude = position.longitude; - if (rectangle.east < rectangle.west) { - longitude += Math$1.CesiumMath.TWO_PI; - } - - let xTileCoordinate = ((longitude - rectangle.west) / xTileWidth) | 0; - if (xTileCoordinate >= xTiles) { - xTileCoordinate = xTiles - 1; - } - - let yTileCoordinate = - ((rectangle.north - position.latitude) / yTileHeight) | 0; - if (yTileCoordinate >= yTiles) { - yTileCoordinate = yTiles - 1; - } - - if (!defaultValue.defined(result)) { - return new Matrix2.Cartesian2(xTileCoordinate, yTileCoordinate); - } - - result.x = xTileCoordinate; - result.y = yTileCoordinate; - return result; - }; - - const scratchDiagonalCartesianNE = new Matrix3.Cartesian3(); - const scratchDiagonalCartesianSW = new Matrix3.Cartesian3(); - const scratchDiagonalCartographic = new Matrix3.Cartographic(); - const scratchCenterCartesian = new Matrix3.Cartesian3(); - const scratchSurfaceCartesian = new Matrix3.Cartesian3(); - - const scratchBoundingSphere = new Transforms.BoundingSphere(); - const tilingScheme = new GeographicTilingScheme(); - const scratchCorners = [ - new Matrix3.Cartographic(), - new Matrix3.Cartographic(), - new Matrix3.Cartographic(), - new Matrix3.Cartographic(), - ]; - const scratchTileXY = new Matrix2.Cartesian2(); - - /** - * A collection of functions for approximating terrain height - * @private - */ - const ApproximateTerrainHeights = {}; - - /** - * Initializes the minimum and maximum terrain heights - * @return {Promise.} - */ - ApproximateTerrainHeights.initialize = function () { - let initPromise = ApproximateTerrainHeights._initPromise; - if (defaultValue.defined(initPromise)) { - return initPromise; - } - - initPromise = Transforms.Resource.fetchJson( - Transforms.buildModuleUrl("Assets/approximateTerrainHeights.json") - ).then(function (json) { - ApproximateTerrainHeights._terrainHeights = json; - }); - ApproximateTerrainHeights._initPromise = initPromise; - - return initPromise; - }; - - /** - * Computes the minimum and maximum terrain heights for a given rectangle - * @param {Rectangle} rectangle The bounding rectangle - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid - * @return {{minimumTerrainHeight: Number, maximumTerrainHeight: Number}} - */ - ApproximateTerrainHeights.getMinimumMaximumHeights = function ( - rectangle, - ellipsoid - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("rectangle", rectangle); - if (!defaultValue.defined(ApproximateTerrainHeights._terrainHeights)) { - throw new Check.DeveloperError( - "You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function" - ); - } - //>>includeEnd('debug'); - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - - const xyLevel = getTileXYLevel(rectangle); - - // Get the terrain min/max for that tile - let minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight; - let maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight; - if (defaultValue.defined(xyLevel)) { - const key = `${xyLevel.level}-${xyLevel.x}-${xyLevel.y}`; - const heights = ApproximateTerrainHeights._terrainHeights[key]; - if (defaultValue.defined(heights)) { - minTerrainHeight = heights[0]; - maxTerrainHeight = heights[1]; - } - - // Compute min by taking the center of the NE->SW diagonal and finding distance to the surface - ellipsoid.cartographicToCartesian( - Matrix2.Rectangle.northeast(rectangle, scratchDiagonalCartographic), - scratchDiagonalCartesianNE - ); - ellipsoid.cartographicToCartesian( - Matrix2.Rectangle.southwest(rectangle, scratchDiagonalCartographic), - scratchDiagonalCartesianSW - ); - - Matrix3.Cartesian3.midpoint( - scratchDiagonalCartesianSW, - scratchDiagonalCartesianNE, - scratchCenterCartesian - ); - const surfacePosition = ellipsoid.scaleToGeodeticSurface( - scratchCenterCartesian, - scratchSurfaceCartesian - ); - if (defaultValue.defined(surfacePosition)) { - const distance = Matrix3.Cartesian3.distance( - scratchCenterCartesian, - surfacePosition - ); - minTerrainHeight = Math.min(minTerrainHeight, -distance); - } else { - minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight; - } - } - - minTerrainHeight = Math.max( - ApproximateTerrainHeights._defaultMinTerrainHeight, - minTerrainHeight - ); - - return { - minimumTerrainHeight: minTerrainHeight, - maximumTerrainHeight: maxTerrainHeight, - }; - }; - - /** - * Computes the bounding sphere based on the tile heights in the rectangle - * @param {Rectangle} rectangle The bounding rectangle - * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid - * @return {BoundingSphere} The result bounding sphere - */ - ApproximateTerrainHeights.getBoundingSphere = function (rectangle, ellipsoid) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("rectangle", rectangle); - if (!defaultValue.defined(ApproximateTerrainHeights._terrainHeights)) { - throw new Check.DeveloperError( - "You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function" - ); - } - //>>includeEnd('debug'); - ellipsoid = defaultValue.defaultValue(ellipsoid, Matrix3.Ellipsoid.WGS84); - - const xyLevel = getTileXYLevel(rectangle); - - // Get the terrain max for that tile - let maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight; - if (defaultValue.defined(xyLevel)) { - const key = `${xyLevel.level}-${xyLevel.x}-${xyLevel.y}`; - const heights = ApproximateTerrainHeights._terrainHeights[key]; - if (defaultValue.defined(heights)) { - maxTerrainHeight = heights[1]; - } - } - - const result = Transforms.BoundingSphere.fromRectangle3D(rectangle, ellipsoid, 0.0); - Transforms.BoundingSphere.fromRectangle3D( - rectangle, - ellipsoid, - maxTerrainHeight, - scratchBoundingSphere - ); - - return Transforms.BoundingSphere.union(result, scratchBoundingSphere, result); - }; - - function getTileXYLevel(rectangle) { - Matrix3.Cartographic.fromRadians( - rectangle.east, - rectangle.north, - 0.0, - scratchCorners[0] - ); - Matrix3.Cartographic.fromRadians( - rectangle.west, - rectangle.north, - 0.0, - scratchCorners[1] - ); - Matrix3.Cartographic.fromRadians( - rectangle.east, - rectangle.south, - 0.0, - scratchCorners[2] - ); - Matrix3.Cartographic.fromRadians( - rectangle.west, - rectangle.south, - 0.0, - scratchCorners[3] - ); - - // Determine which tile the bounding rectangle is in - let lastLevelX = 0, - lastLevelY = 0; - let currentX = 0, - currentY = 0; - const maxLevel = ApproximateTerrainHeights._terrainHeightsMaxLevel; - let i; - for (i = 0; i <= maxLevel; ++i) { - let failed = false; - for (let j = 0; j < 4; ++j) { - const corner = scratchCorners[j]; - tilingScheme.positionToTileXY(corner, i, scratchTileXY); - if (j === 0) { - currentX = scratchTileXY.x; - currentY = scratchTileXY.y; - } else if (currentX !== scratchTileXY.x || currentY !== scratchTileXY.y) { - failed = true; - break; - } - } - - if (failed) { - break; - } - - lastLevelX = currentX; - lastLevelY = currentY; - } - - if (i === 0) { - return undefined; - } - - return { - x: lastLevelX, - y: lastLevelY, - level: i > maxLevel ? maxLevel : i - 1, - }; - } - - ApproximateTerrainHeights._terrainHeightsMaxLevel = 6; - ApproximateTerrainHeights._defaultMaxTerrainHeight = 9000.0; - ApproximateTerrainHeights._defaultMinTerrainHeight = -100000.0; - ApproximateTerrainHeights._terrainHeights = undefined; - ApproximateTerrainHeights._initPromise = undefined; - - Object.defineProperties(ApproximateTerrainHeights, { - /** - * Determines if the terrain heights are initialized and ready to use. To initialize the terrain heights, - * call {@link ApproximateTerrainHeights#initialize} and wait for the returned promise to resolve. - * @type {Boolean} - * @readonly - * @memberof ApproximateTerrainHeights - */ - initialized: { - get: function () { - return defaultValue.defined(ApproximateTerrainHeights._terrainHeights); - }, - }, - }); - var ApproximateTerrainHeights$1 = ApproximateTerrainHeights; - - const PROJECTIONS = [Transforms.GeographicProjection, WebMercatorProjection.WebMercatorProjection]; - const PROJECTION_COUNT = PROJECTIONS.length; - - const MITER_BREAK_SMALL = Math.cos(Math$1.CesiumMath.toRadians(30.0)); - const MITER_BREAK_LARGE = Math.cos(Math$1.CesiumMath.toRadians(150.0)); - - // Initial heights for constructing the wall. - // Keeping WALL_INITIAL_MIN_HEIGHT near the ellipsoid surface helps - // prevent precision problems with planes in the shader. - // Putting the start point of a plane at ApproximateTerrainHeights._defaultMinTerrainHeight, - // which is a highly conservative bound, usually puts the plane origin several thousands - // of meters away from the actual terrain, causing floating point problems when checking - // fragments on terrain against the plane. - // Ellipsoid height is generally much closer. - // The initial max height is arbitrary. - // Both heights are corrected using ApproximateTerrainHeights for computing the actual volume geometry. - const WALL_INITIAL_MIN_HEIGHT = 0.0; - const WALL_INITIAL_MAX_HEIGHT = 1000.0; - - /** - * A description of a polyline on terrain or 3D Tiles. Only to be used with {@link GroundPolylinePrimitive}. - * - * @alias GroundPolylineGeometry - * @constructor - * - * @param {Object} options Options with the following properties: - * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the polyline's points. Heights above the ellipsoid will be ignored. - * @param {Number} [options.width=1.0] The screen space width in pixels. - * @param {Number} [options.granularity=9999.0] The distance interval in meters used for interpolating options.points. Defaults to 9999.0 meters. Zero indicates no interpolation. - * @param {Boolean} [options.loop=false] Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop. - * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. - * - * @exception {DeveloperError} At least two positions are required. - * - * @see GroundPolylinePrimitive - * - * @example - * const positions = Cesium.Cartesian3.fromDegreesArray([ - * -112.1340164450331, 36.05494287836128, - * -112.08821010582645, 36.097804071380715, - * -112.13296079730024, 36.168769146801104 - * ]); - * - * const geometry = new Cesium.GroundPolylineGeometry({ - * positions : positions - * }); - */ - function GroundPolylineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.positions; - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions) || positions.length < 2) { - throw new Check.DeveloperError("At least two positions are required."); - } - if ( - defaultValue.defined(options.arcType) && - options.arcType !== ArcType.ArcType.GEODESIC && - options.arcType !== ArcType.ArcType.RHUMB - ) { - throw new Check.DeveloperError( - "Valid options for arcType are ArcType.GEODESIC and ArcType.RHUMB." - ); - } - //>>includeEnd('debug'); - - /** - * The screen space width in pixels. - * @type {Number} - */ - this.width = defaultValue.defaultValue(options.width, 1.0); // Doesn't get packed, not necessary for computing geometry. - - this._positions = positions; - - /** - * The distance interval used for interpolating options.points. Zero indicates no interpolation. - * Default of 9999.0 allows centimeter accuracy with 32 bit floating point. - * @type {Boolean} - * @default 9999.0 - */ - this.granularity = defaultValue.defaultValue(options.granularity, 9999.0); - - /** - * Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop. - * If the geometry has two positions this parameter will be ignored. - * @type {Boolean} - * @default false - */ - this.loop = defaultValue.defaultValue(options.loop, false); - - /** - * The type of path the polyline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. - * @type {ArcType} - * @default ArcType.GEODESIC - */ - this.arcType = defaultValue.defaultValue(options.arcType, ArcType.ArcType.GEODESIC); - - this._ellipsoid = Matrix3.Ellipsoid.WGS84; - - // MapProjections can't be packed, so store the index to a known MapProjection. - this._projectionIndex = 0; - this._workerName = "createGroundPolylineGeometry"; - - // Used by GroundPolylinePrimitive to signal worker that scenemode is 3D only. - this._scene3DOnly = false; - } - - Object.defineProperties(GroundPolylineGeometry.prototype, { - /** - * The number of elements used to pack the object into an array. - * @memberof GroundPolylineGeometry.prototype - * @type {Number} - * @readonly - * @private - */ - packedLength: { - get: function () { - return ( - 1.0 + - this._positions.length * 3 + - 1.0 + - 1.0 + - 1.0 + - Matrix3.Ellipsoid.packedLength + - 1.0 + - 1.0 - ); - }, - }, - }); - - /** - * Set the GroundPolylineGeometry's projection and ellipsoid. - * Used by GroundPolylinePrimitive to signal scene information to the geometry for generating 2D attributes. - * - * @param {GroundPolylineGeometry} groundPolylineGeometry GroundPolylinGeometry describing a polyline on terrain or 3D Tiles. - * @param {Projection} mapProjection A MapProjection used for projecting cartographic coordinates to 2D. - * @private - */ - GroundPolylineGeometry.setProjectionAndEllipsoid = function ( - groundPolylineGeometry, - mapProjection - ) { - let projectionIndex = 0; - for (let i = 0; i < PROJECTION_COUNT; i++) { - if (mapProjection instanceof PROJECTIONS[i]) { - projectionIndex = i; - break; - } - } - - groundPolylineGeometry._projectionIndex = projectionIndex; - groundPolylineGeometry._ellipsoid = mapProjection.ellipsoid; - }; - - const cart3Scratch1 = new Matrix3.Cartesian3(); - const cart3Scratch2 = new Matrix3.Cartesian3(); - const cart3Scratch3 = new Matrix3.Cartesian3(); - function computeRightNormal(start, end, maxHeight, ellipsoid, result) { - const startBottom = getPosition(ellipsoid, start, 0.0, cart3Scratch1); - const startTop = getPosition(ellipsoid, start, maxHeight, cart3Scratch2); - const endBottom = getPosition(ellipsoid, end, 0.0, cart3Scratch3); - - const up = direction(startTop, startBottom, cart3Scratch2); - const forward = direction(endBottom, startBottom, cart3Scratch3); - - Matrix3.Cartesian3.cross(forward, up, result); - return Matrix3.Cartesian3.normalize(result, result); - } - - const interpolatedCartographicScratch = new Matrix3.Cartographic(); - const interpolatedBottomScratch = new Matrix3.Cartesian3(); - const interpolatedTopScratch = new Matrix3.Cartesian3(); - const interpolatedNormalScratch = new Matrix3.Cartesian3(); - function interpolateSegment( - start, - end, - minHeight, - maxHeight, - granularity, - arcType, - ellipsoid, - normalsArray, - bottomPositionsArray, - topPositionsArray, - cartographicsArray - ) { - if (granularity === 0.0) { - return; - } - - let ellipsoidLine; - if (arcType === ArcType.ArcType.GEODESIC) { - ellipsoidLine = new EllipsoidGeodesic.EllipsoidGeodesic(start, end, ellipsoid); - } else if (arcType === ArcType.ArcType.RHUMB) { - ellipsoidLine = new EllipsoidRhumbLine.EllipsoidRhumbLine(start, end, ellipsoid); - } - - const surfaceDistance = ellipsoidLine.surfaceDistance; - if (surfaceDistance < granularity) { - return; - } - - // Compute rightwards normal applicable at all interpolated points - const interpolatedNormal = computeRightNormal( - start, - end, - maxHeight, - ellipsoid, - interpolatedNormalScratch - ); - - const segments = Math.ceil(surfaceDistance / granularity); - const interpointDistance = surfaceDistance / segments; - let distanceFromStart = interpointDistance; - const pointsToAdd = segments - 1; - let packIndex = normalsArray.length; - for (let i = 0; i < pointsToAdd; i++) { - const interpolatedCartographic = ellipsoidLine.interpolateUsingSurfaceDistance( - distanceFromStart, - interpolatedCartographicScratch - ); - const interpolatedBottom = getPosition( - ellipsoid, - interpolatedCartographic, - minHeight, - interpolatedBottomScratch - ); - const interpolatedTop = getPosition( - ellipsoid, - interpolatedCartographic, - maxHeight, - interpolatedTopScratch - ); - - Matrix3.Cartesian3.pack(interpolatedNormal, normalsArray, packIndex); - Matrix3.Cartesian3.pack(interpolatedBottom, bottomPositionsArray, packIndex); - Matrix3.Cartesian3.pack(interpolatedTop, topPositionsArray, packIndex); - cartographicsArray.push(interpolatedCartographic.latitude); - cartographicsArray.push(interpolatedCartographic.longitude); - - packIndex += 3; - distanceFromStart += interpointDistance; - } - } - - const heightlessCartographicScratch = new Matrix3.Cartographic(); - function getPosition(ellipsoid, cartographic, height, result) { - Matrix3.Cartographic.clone(cartographic, heightlessCartographicScratch); - heightlessCartographicScratch.height = height; - return Matrix3.Cartographic.toCartesian( - heightlessCartographicScratch, - ellipsoid, - result - ); - } - - /** - * Stores the provided instance into the provided array. - * - * @param {PolygonGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - GroundPolylineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - let index = defaultValue.defaultValue(startingIndex, 0); - - const positions = value._positions; - const positionsLength = positions.length; - - array[index++] = positionsLength; - - for (let i = 0; i < positionsLength; ++i) { - const cartesian = positions[i]; - Matrix3.Cartesian3.pack(cartesian, array, index); - index += 3; - } - - array[index++] = value.granularity; - array[index++] = value.loop ? 1.0 : 0.0; - array[index++] = value.arcType; - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, index); - index += Matrix3.Ellipsoid.packedLength; - - array[index++] = value._projectionIndex; - array[index++] = value._scene3DOnly ? 1.0 : 0.0; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PolygonGeometry} [result] The object into which to store the result. - */ - GroundPolylineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - let index = defaultValue.defaultValue(startingIndex, 0); - const positionsLength = array[index++]; - const positions = new Array(positionsLength); - - for (let i = 0; i < positionsLength; i++) { - positions[i] = Matrix3.Cartesian3.unpack(array, index); - index += 3; - } - - const granularity = array[index++]; - const loop = array[index++] === 1.0; - const arcType = array[index++]; - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, index); - index += Matrix3.Ellipsoid.packedLength; - - const projectionIndex = array[index++]; - const scene3DOnly = array[index++] === 1.0; - - if (!defaultValue.defined(result)) { - result = new GroundPolylineGeometry({ - positions: positions, - }); - } - - result._positions = positions; - result.granularity = granularity; - result.loop = loop; - result.arcType = arcType; - result._ellipsoid = ellipsoid; - result._projectionIndex = projectionIndex; - result._scene3DOnly = scene3DOnly; - - return result; - }; - - function direction(target, origin, result) { - Matrix3.Cartesian3.subtract(target, origin, result); - Matrix3.Cartesian3.normalize(result, result); - return result; - } - - function tangentDirection(target, origin, up, result) { - result = direction(target, origin, result); - - // orthogonalize - result = Matrix3.Cartesian3.cross(result, up, result); - result = Matrix3.Cartesian3.normalize(result, result); - result = Matrix3.Cartesian3.cross(up, result, result); - return result; - } - - const toPreviousScratch = new Matrix3.Cartesian3(); - const toNextScratch = new Matrix3.Cartesian3(); - const forwardScratch = new Matrix3.Cartesian3(); - const vertexUpScratch = new Matrix3.Cartesian3(); - const cosine90 = 0.0; - const cosine180 = -1.0; - function computeVertexMiterNormal( - previousBottom, - vertexBottom, - vertexTop, - nextBottom, - result - ) { - const up = direction(vertexTop, vertexBottom, vertexUpScratch); - - // Compute vectors pointing towards neighboring points but tangent to this point on the ellipsoid - const toPrevious = tangentDirection( - previousBottom, - vertexBottom, - up, - toPreviousScratch - ); - const toNext = tangentDirection(nextBottom, vertexBottom, up, toNextScratch); - - // Check if tangents are almost opposite - if so, no need to miter. - if ( - Math$1.CesiumMath.equalsEpsilon( - Matrix3.Cartesian3.dot(toPrevious, toNext), - cosine180, - Math$1.CesiumMath.EPSILON5 - ) - ) { - result = Matrix3.Cartesian3.cross(up, toPrevious, result); - result = Matrix3.Cartesian3.normalize(result, result); - return result; - } - - // Average directions to previous and to next in the plane of Up - result = Matrix3.Cartesian3.add(toNext, toPrevious, result); - result = Matrix3.Cartesian3.normalize(result, result); - - // Flip the normal if it isn't pointing roughly bound right (aka if forward is pointing more "backwards") - const forward = Matrix3.Cartesian3.cross(up, result, forwardScratch); - if (Matrix3.Cartesian3.dot(toNext, forward) < cosine90) { - result = Matrix3.Cartesian3.negate(result, result); - } - - return result; - } - - const XZ_PLANE = Plane.Plane.fromPointNormal(Matrix3.Cartesian3.ZERO, Matrix3.Cartesian3.UNIT_Y); - - const previousBottomScratch = new Matrix3.Cartesian3(); - const vertexBottomScratch = new Matrix3.Cartesian3(); - const vertexTopScratch = new Matrix3.Cartesian3(); - const nextBottomScratch = new Matrix3.Cartesian3(); - const vertexNormalScratch = new Matrix3.Cartesian3(); - const intersectionScratch = new Matrix3.Cartesian3(); - const cartographicScratch0 = new Matrix3.Cartographic(); - const cartographicScratch1 = new Matrix3.Cartographic(); - const cartographicIntersectionScratch = new Matrix3.Cartographic(); - /** - * Computes shadow volumes for the ground polyline, consisting of its vertices, indices, and a bounding sphere. - * Vertices are "fat," packing all the data needed in each volume to describe a line on terrain or 3D Tiles. - * Should not be called independent of {@link GroundPolylinePrimitive}. - * - * @param {GroundPolylineGeometry} groundPolylineGeometry - * @private - */ - GroundPolylineGeometry.createGeometry = function (groundPolylineGeometry) { - const compute2dAttributes = !groundPolylineGeometry._scene3DOnly; - let loop = groundPolylineGeometry.loop; - const ellipsoid = groundPolylineGeometry._ellipsoid; - const granularity = groundPolylineGeometry.granularity; - const arcType = groundPolylineGeometry.arcType; - const projection = new PROJECTIONS[groundPolylineGeometry._projectionIndex]( - ellipsoid - ); - - const minHeight = WALL_INITIAL_MIN_HEIGHT; - const maxHeight = WALL_INITIAL_MAX_HEIGHT; - - let index; - let i; - - const positions = groundPolylineGeometry._positions; - const positionsLength = positions.length; - - if (positionsLength === 2) { - loop = false; - } - - // Split positions across the IDL and the Prime Meridian as well. - // Split across prime meridian because very large geometries crossing the Prime Meridian but not the IDL - // may get split by the plane of IDL + Prime Meridian. - let p0; - let p1; - let c0; - let c1; - const rhumbLine = new EllipsoidRhumbLine.EllipsoidRhumbLine(undefined, undefined, ellipsoid); - let intersection; - let intersectionCartographic; - let intersectionLongitude; - const splitPositions = [positions[0]]; - for (i = 0; i < positionsLength - 1; i++) { - p0 = positions[i]; - p1 = positions[i + 1]; - intersection = IntersectionTests.IntersectionTests.lineSegmentPlane( - p0, - p1, - XZ_PLANE, - intersectionScratch - ); - if ( - defaultValue.defined(intersection) && - !Matrix3.Cartesian3.equalsEpsilon(intersection, p0, Math$1.CesiumMath.EPSILON7) && - !Matrix3.Cartesian3.equalsEpsilon(intersection, p1, Math$1.CesiumMath.EPSILON7) - ) { - if (groundPolylineGeometry.arcType === ArcType.ArcType.GEODESIC) { - splitPositions.push(Matrix3.Cartesian3.clone(intersection)); - } else if (groundPolylineGeometry.arcType === ArcType.ArcType.RHUMB) { - intersectionLongitude = ellipsoid.cartesianToCartographic( - intersection, - cartographicScratch0 - ).longitude; - c0 = ellipsoid.cartesianToCartographic(p0, cartographicScratch0); - c1 = ellipsoid.cartesianToCartographic(p1, cartographicScratch1); - rhumbLine.setEndPoints(c0, c1); - intersectionCartographic = rhumbLine.findIntersectionWithLongitude( - intersectionLongitude, - cartographicIntersectionScratch - ); - intersection = ellipsoid.cartographicToCartesian( - intersectionCartographic, - intersectionScratch - ); - if ( - defaultValue.defined(intersection) && - !Matrix3.Cartesian3.equalsEpsilon(intersection, p0, Math$1.CesiumMath.EPSILON7) && - !Matrix3.Cartesian3.equalsEpsilon(intersection, p1, Math$1.CesiumMath.EPSILON7) - ) { - splitPositions.push(Matrix3.Cartesian3.clone(intersection)); - } - } - } - splitPositions.push(p1); - } - - if (loop) { - p0 = positions[positionsLength - 1]; - p1 = positions[0]; - intersection = IntersectionTests.IntersectionTests.lineSegmentPlane( - p0, - p1, - XZ_PLANE, - intersectionScratch - ); - if ( - defaultValue.defined(intersection) && - !Matrix3.Cartesian3.equalsEpsilon(intersection, p0, Math$1.CesiumMath.EPSILON7) && - !Matrix3.Cartesian3.equalsEpsilon(intersection, p1, Math$1.CesiumMath.EPSILON7) - ) { - if (groundPolylineGeometry.arcType === ArcType.ArcType.GEODESIC) { - splitPositions.push(Matrix3.Cartesian3.clone(intersection)); - } else if (groundPolylineGeometry.arcType === ArcType.ArcType.RHUMB) { - intersectionLongitude = ellipsoid.cartesianToCartographic( - intersection, - cartographicScratch0 - ).longitude; - c0 = ellipsoid.cartesianToCartographic(p0, cartographicScratch0); - c1 = ellipsoid.cartesianToCartographic(p1, cartographicScratch1); - rhumbLine.setEndPoints(c0, c1); - intersectionCartographic = rhumbLine.findIntersectionWithLongitude( - intersectionLongitude, - cartographicIntersectionScratch - ); - intersection = ellipsoid.cartographicToCartesian( - intersectionCartographic, - intersectionScratch - ); - if ( - defaultValue.defined(intersection) && - !Matrix3.Cartesian3.equalsEpsilon(intersection, p0, Math$1.CesiumMath.EPSILON7) && - !Matrix3.Cartesian3.equalsEpsilon(intersection, p1, Math$1.CesiumMath.EPSILON7) - ) { - splitPositions.push(Matrix3.Cartesian3.clone(intersection)); - } - } - } - } - let cartographicsLength = splitPositions.length; - - let cartographics = new Array(cartographicsLength); - for (i = 0; i < cartographicsLength; i++) { - const cartographic = Matrix3.Cartographic.fromCartesian( - splitPositions[i], - ellipsoid - ); - cartographic.height = 0.0; - cartographics[i] = cartographic; - } - - cartographics = arrayRemoveDuplicates.arrayRemoveDuplicates( - cartographics, - Matrix3.Cartographic.equalsEpsilon - ); - cartographicsLength = cartographics.length; - - if (cartographicsLength < 2) { - return undefined; - } - - /**** Build heap-side arrays for positions, interpolated cartographics, and normals from which to compute vertices ****/ - // We build a "wall" and then decompose it into separately connected component "volumes" because we need a lot - // of information about the wall. Also, this simplifies interpolation. - // Convention: "next" and "end" are locally forward to each segment of the wall, - // and we are computing normals pointing towards the local right side of the vertices in each segment. - const cartographicsArray = []; - const normalsArray = []; - const bottomPositionsArray = []; - const topPositionsArray = []; - - let previousBottom = previousBottomScratch; - let vertexBottom = vertexBottomScratch; - let vertexTop = vertexTopScratch; - let nextBottom = nextBottomScratch; - let vertexNormal = vertexNormalScratch; - - // First point - either loop or attach a "perpendicular" normal - const startCartographic = cartographics[0]; - const nextCartographic = cartographics[1]; - - const prestartCartographic = cartographics[cartographicsLength - 1]; - previousBottom = getPosition( - ellipsoid, - prestartCartographic, - minHeight, - previousBottom - ); - nextBottom = getPosition(ellipsoid, nextCartographic, minHeight, nextBottom); - vertexBottom = getPosition( - ellipsoid, - startCartographic, - minHeight, - vertexBottom - ); - vertexTop = getPosition(ellipsoid, startCartographic, maxHeight, vertexTop); - - if (loop) { - vertexNormal = computeVertexMiterNormal( - previousBottom, - vertexBottom, - vertexTop, - nextBottom, - vertexNormal - ); - } else { - vertexNormal = computeRightNormal( - startCartographic, - nextCartographic, - maxHeight, - ellipsoid, - vertexNormal - ); - } - - Matrix3.Cartesian3.pack(vertexNormal, normalsArray, 0); - Matrix3.Cartesian3.pack(vertexBottom, bottomPositionsArray, 0); - Matrix3.Cartesian3.pack(vertexTop, topPositionsArray, 0); - cartographicsArray.push(startCartographic.latitude); - cartographicsArray.push(startCartographic.longitude); - - interpolateSegment( - startCartographic, - nextCartographic, - minHeight, - maxHeight, - granularity, - arcType, - ellipsoid, - normalsArray, - bottomPositionsArray, - topPositionsArray, - cartographicsArray - ); - - // All inbetween points - for (i = 1; i < cartographicsLength - 1; ++i) { - previousBottom = Matrix3.Cartesian3.clone(vertexBottom, previousBottom); - vertexBottom = Matrix3.Cartesian3.clone(nextBottom, vertexBottom); - const vertexCartographic = cartographics[i]; - getPosition(ellipsoid, vertexCartographic, maxHeight, vertexTop); - getPosition(ellipsoid, cartographics[i + 1], minHeight, nextBottom); - - computeVertexMiterNormal( - previousBottom, - vertexBottom, - vertexTop, - nextBottom, - vertexNormal - ); - - index = normalsArray.length; - Matrix3.Cartesian3.pack(vertexNormal, normalsArray, index); - Matrix3.Cartesian3.pack(vertexBottom, bottomPositionsArray, index); - Matrix3.Cartesian3.pack(vertexTop, topPositionsArray, index); - cartographicsArray.push(vertexCartographic.latitude); - cartographicsArray.push(vertexCartographic.longitude); - - interpolateSegment( - cartographics[i], - cartographics[i + 1], - minHeight, - maxHeight, - granularity, - arcType, - ellipsoid, - normalsArray, - bottomPositionsArray, - topPositionsArray, - cartographicsArray - ); - } - - // Last point - either loop or attach a normal "perpendicular" to the wall. - const endCartographic = cartographics[cartographicsLength - 1]; - const preEndCartographic = cartographics[cartographicsLength - 2]; - - vertexBottom = getPosition( - ellipsoid, - endCartographic, - minHeight, - vertexBottom - ); - vertexTop = getPosition(ellipsoid, endCartographic, maxHeight, vertexTop); - - if (loop) { - const postEndCartographic = cartographics[0]; - previousBottom = getPosition( - ellipsoid, - preEndCartographic, - minHeight, - previousBottom - ); - nextBottom = getPosition( - ellipsoid, - postEndCartographic, - minHeight, - nextBottom - ); - - vertexNormal = computeVertexMiterNormal( - previousBottom, - vertexBottom, - vertexTop, - nextBottom, - vertexNormal - ); - } else { - vertexNormal = computeRightNormal( - preEndCartographic, - endCartographic, - maxHeight, - ellipsoid, - vertexNormal - ); - } - - index = normalsArray.length; - Matrix3.Cartesian3.pack(vertexNormal, normalsArray, index); - Matrix3.Cartesian3.pack(vertexBottom, bottomPositionsArray, index); - Matrix3.Cartesian3.pack(vertexTop, topPositionsArray, index); - cartographicsArray.push(endCartographic.latitude); - cartographicsArray.push(endCartographic.longitude); - - if (loop) { - interpolateSegment( - endCartographic, - startCartographic, - minHeight, - maxHeight, - granularity, - arcType, - ellipsoid, - normalsArray, - bottomPositionsArray, - topPositionsArray, - cartographicsArray - ); - index = normalsArray.length; - for (i = 0; i < 3; ++i) { - normalsArray[index + i] = normalsArray[i]; - bottomPositionsArray[index + i] = bottomPositionsArray[i]; - topPositionsArray[index + i] = topPositionsArray[i]; - } - cartographicsArray.push(startCartographic.latitude); - cartographicsArray.push(startCartographic.longitude); - } - - return generateGeometryAttributes( - loop, - projection, - bottomPositionsArray, - topPositionsArray, - normalsArray, - cartographicsArray, - compute2dAttributes - ); - }; - - // If the end normal angle is too steep compared to the direction of the line segment, - // "break" the miter by rotating the normal 90 degrees around the "up" direction at the point - // For ultra precision we would want to project into a plane, but in practice this is sufficient. - const lineDirectionScratch = new Matrix3.Cartesian3(); - const matrix3Scratch = new Matrix3.Matrix3(); - const quaternionScratch = new Transforms.Quaternion(); - function breakMiter(endGeometryNormal, startBottom, endBottom, endTop) { - const lineDirection = direction(endBottom, startBottom, lineDirectionScratch); - - const dot = Matrix3.Cartesian3.dot(lineDirection, endGeometryNormal); - if (dot > MITER_BREAK_SMALL || dot < MITER_BREAK_LARGE) { - const vertexUp = direction(endTop, endBottom, vertexUpScratch); - const angle = - dot < MITER_BREAK_LARGE - ? Math$1.CesiumMath.PI_OVER_TWO - : -Math$1.CesiumMath.PI_OVER_TWO; - const quaternion = Transforms.Quaternion.fromAxisAngle( - vertexUp, - angle, - quaternionScratch - ); - const rotationMatrix = Matrix3.Matrix3.fromQuaternion(quaternion, matrix3Scratch); - Matrix3.Matrix3.multiplyByVector( - rotationMatrix, - endGeometryNormal, - endGeometryNormal - ); - return true; - } - return false; - } - - const endPosCartographicScratch = new Matrix3.Cartographic(); - const normalStartpointScratch = new Matrix3.Cartesian3(); - const normalEndpointScratch = new Matrix3.Cartesian3(); - function projectNormal( - projection, - cartographic, - normal, - projectedPosition, - result - ) { - const position = Matrix3.Cartographic.toCartesian( - cartographic, - projection._ellipsoid, - normalStartpointScratch - ); - let normalEndpoint = Matrix3.Cartesian3.add(position, normal, normalEndpointScratch); - let flipNormal = false; - - const ellipsoid = projection._ellipsoid; - let normalEndpointCartographic = ellipsoid.cartesianToCartographic( - normalEndpoint, - endPosCartographicScratch - ); - // If normal crosses the IDL, go the other way and flip the result. - // In practice this almost never happens because the cartographic start - // and end points of each segment are "nudged" to be on the same side - // of the IDL and slightly away from the IDL. - if ( - Math.abs(cartographic.longitude - normalEndpointCartographic.longitude) > - Math$1.CesiumMath.PI_OVER_TWO - ) { - flipNormal = true; - normalEndpoint = Matrix3.Cartesian3.subtract( - position, - normal, - normalEndpointScratch - ); - normalEndpointCartographic = ellipsoid.cartesianToCartographic( - normalEndpoint, - endPosCartographicScratch - ); - } - - normalEndpointCartographic.height = 0.0; - const normalEndpointProjected = projection.project( - normalEndpointCartographic, - result - ); - result = Matrix3.Cartesian3.subtract( - normalEndpointProjected, - projectedPosition, - result - ); - result.z = 0.0; - result = Matrix3.Cartesian3.normalize(result, result); - if (flipNormal) { - Matrix3.Cartesian3.negate(result, result); - } - return result; - } - - const adjustHeightNormalScratch = new Matrix3.Cartesian3(); - const adjustHeightOffsetScratch = new Matrix3.Cartesian3(); - function adjustHeights( - bottom, - top, - minHeight, - maxHeight, - adjustHeightBottom, - adjustHeightTop - ) { - // bottom and top should be at WALL_INITIAL_MIN_HEIGHT and WALL_INITIAL_MAX_HEIGHT, respectively - const adjustHeightNormal = Matrix3.Cartesian3.subtract( - top, - bottom, - adjustHeightNormalScratch - ); - Matrix3.Cartesian3.normalize(adjustHeightNormal, adjustHeightNormal); - - const distanceForBottom = minHeight - WALL_INITIAL_MIN_HEIGHT; - let adjustHeightOffset = Matrix3.Cartesian3.multiplyByScalar( - adjustHeightNormal, - distanceForBottom, - adjustHeightOffsetScratch - ); - Matrix3.Cartesian3.add(bottom, adjustHeightOffset, adjustHeightBottom); - - const distanceForTop = maxHeight - WALL_INITIAL_MAX_HEIGHT; - adjustHeightOffset = Matrix3.Cartesian3.multiplyByScalar( - adjustHeightNormal, - distanceForTop, - adjustHeightOffsetScratch - ); - Matrix3.Cartesian3.add(top, adjustHeightOffset, adjustHeightTop); - } - - const nudgeDirectionScratch = new Matrix3.Cartesian3(); - function nudgeXZ(start, end) { - const startToXZdistance = Plane.Plane.getPointDistance(XZ_PLANE, start); - const endToXZdistance = Plane.Plane.getPointDistance(XZ_PLANE, end); - let offset = nudgeDirectionScratch; - // Larger epsilon than what's used in GeometryPipeline, a centimeter in world space - if (Math$1.CesiumMath.equalsEpsilon(startToXZdistance, 0.0, Math$1.CesiumMath.EPSILON2)) { - offset = direction(end, start, offset); - Matrix3.Cartesian3.multiplyByScalar(offset, Math$1.CesiumMath.EPSILON2, offset); - Matrix3.Cartesian3.add(start, offset, start); - } else if ( - Math$1.CesiumMath.equalsEpsilon(endToXZdistance, 0.0, Math$1.CesiumMath.EPSILON2) - ) { - offset = direction(start, end, offset); - Matrix3.Cartesian3.multiplyByScalar(offset, Math$1.CesiumMath.EPSILON2, offset); - Matrix3.Cartesian3.add(end, offset, end); - } - } - - // "Nudge" cartographic coordinates so start and end are on the same side of the IDL. - // Nudge amounts are tiny, basically just an IDL flip. - // Only used for 2D/CV. - function nudgeCartographic(start, end) { - const absStartLon = Math.abs(start.longitude); - const absEndLon = Math.abs(end.longitude); - if ( - Math$1.CesiumMath.equalsEpsilon(absStartLon, Math$1.CesiumMath.PI, Math$1.CesiumMath.EPSILON11) - ) { - const endSign = Math$1.CesiumMath.sign(end.longitude); - start.longitude = endSign * (absStartLon - Math$1.CesiumMath.EPSILON11); - return 1; - } else if ( - Math$1.CesiumMath.equalsEpsilon(absEndLon, Math$1.CesiumMath.PI, Math$1.CesiumMath.EPSILON11) - ) { - const startSign = Math$1.CesiumMath.sign(start.longitude); - end.longitude = startSign * (absEndLon - Math$1.CesiumMath.EPSILON11); - return 2; - } - return 0; - } - - const startCartographicScratch = new Matrix3.Cartographic(); - const endCartographicScratch = new Matrix3.Cartographic(); - - const segmentStartTopScratch = new Matrix3.Cartesian3(); - const segmentEndTopScratch = new Matrix3.Cartesian3(); - const segmentStartBottomScratch = new Matrix3.Cartesian3(); - const segmentEndBottomScratch = new Matrix3.Cartesian3(); - const segmentStartNormalScratch = new Matrix3.Cartesian3(); - const segmentEndNormalScratch = new Matrix3.Cartesian3(); - - const getHeightCartographics = [ - startCartographicScratch, - endCartographicScratch, - ]; - const getHeightRectangleScratch = new Matrix2.Rectangle(); - - const adjustHeightStartTopScratch = new Matrix3.Cartesian3(); - const adjustHeightEndTopScratch = new Matrix3.Cartesian3(); - const adjustHeightStartBottomScratch = new Matrix3.Cartesian3(); - const adjustHeightEndBottomScratch = new Matrix3.Cartesian3(); - - const segmentStart2DScratch = new Matrix3.Cartesian3(); - const segmentEnd2DScratch = new Matrix3.Cartesian3(); - const segmentStartNormal2DScratch = new Matrix3.Cartesian3(); - const segmentEndNormal2DScratch = new Matrix3.Cartesian3(); - - const offsetScratch = new Matrix3.Cartesian3(); - const startUpScratch = new Matrix3.Cartesian3(); - const endUpScratch = new Matrix3.Cartesian3(); - const rightScratch = new Matrix3.Cartesian3(); - const startPlaneNormalScratch = new Matrix3.Cartesian3(); - const endPlaneNormalScratch = new Matrix3.Cartesian3(); - const encodeScratch = new EncodedCartesian3.EncodedCartesian3(); - - const encodeScratch2D = new EncodedCartesian3.EncodedCartesian3(); - const forwardOffset2DScratch = new Matrix3.Cartesian3(); - const right2DScratch = new Matrix3.Cartesian3(); - - const normalNudgeScratch = new Matrix3.Cartesian3(); - - const scratchBoundingSpheres = [new Transforms.BoundingSphere(), new Transforms.BoundingSphere()]; - - // Winding order is reversed so each segment's volume is inside-out - const REFERENCE_INDICES = [ - 0, - 2, - 1, - 0, - 3, - 2, // right - 0, - 7, - 3, - 0, - 4, - 7, // start - 0, - 5, - 4, - 0, - 1, - 5, // bottom - 5, - 7, - 4, - 5, - 6, - 7, // left - 5, - 2, - 6, - 5, - 1, - 2, // end - 3, - 6, - 2, - 3, - 7, - 6, // top - ]; - const REFERENCE_INDICES_LENGTH = REFERENCE_INDICES.length; - - // Decompose the "wall" into a series of shadow volumes. - // Each shadow volume's vertices encode a description of the line it contains, - // including mitering planes at the end points, a plane along the line itself, - // and attributes for computing length-wise texture coordinates. - function generateGeometryAttributes( - loop, - projection, - bottomPositionsArray, - topPositionsArray, - normalsArray, - cartographicsArray, - compute2dAttributes - ) { - let i; - let index; - const ellipsoid = projection._ellipsoid; - - // Each segment will have 8 vertices - const segmentCount = bottomPositionsArray.length / 3 - 1; - const vertexCount = segmentCount * 8; - const arraySizeVec4 = vertexCount * 4; - const indexCount = segmentCount * 36; - - const indices = - vertexCount > 65535 - ? new Uint32Array(indexCount) - : new Uint16Array(indexCount); - const positionsArray = new Float64Array(vertexCount * 3); - - const startHiAndForwardOffsetX = new Float32Array(arraySizeVec4); - const startLoAndForwardOffsetY = new Float32Array(arraySizeVec4); - const startNormalAndForwardOffsetZ = new Float32Array(arraySizeVec4); - const endNormalAndTextureCoordinateNormalizationX = new Float32Array( - arraySizeVec4 - ); - const rightNormalAndTextureCoordinateNormalizationY = new Float32Array( - arraySizeVec4 - ); - - let startHiLo2D; - let offsetAndRight2D; - let startEndNormals2D; - let texcoordNormalization2D; - - if (compute2dAttributes) { - startHiLo2D = new Float32Array(arraySizeVec4); - offsetAndRight2D = new Float32Array(arraySizeVec4); - startEndNormals2D = new Float32Array(arraySizeVec4); - texcoordNormalization2D = new Float32Array(vertexCount * 2); - } - - /*** Compute total lengths for texture coordinate normalization ***/ - // 2D - const cartographicsLength = cartographicsArray.length / 2; - let length2D = 0.0; - - const startCartographic = startCartographicScratch; - startCartographic.height = 0.0; - const endCartographic = endCartographicScratch; - endCartographic.height = 0.0; - - let segmentStartCartesian = segmentStartTopScratch; - let segmentEndCartesian = segmentEndTopScratch; - - if (compute2dAttributes) { - index = 0; - for (i = 1; i < cartographicsLength; i++) { - // Don't clone anything from previous segment b/c possible IDL touch - startCartographic.latitude = cartographicsArray[index]; - startCartographic.longitude = cartographicsArray[index + 1]; - endCartographic.latitude = cartographicsArray[index + 2]; - endCartographic.longitude = cartographicsArray[index + 3]; - - segmentStartCartesian = projection.project( - startCartographic, - segmentStartCartesian - ); - segmentEndCartesian = projection.project( - endCartographic, - segmentEndCartesian - ); - length2D += Matrix3.Cartesian3.distance( - segmentStartCartesian, - segmentEndCartesian - ); - index += 2; - } - } - - // 3D - const positionsLength = topPositionsArray.length / 3; - segmentEndCartesian = Matrix3.Cartesian3.unpack( - topPositionsArray, - 0, - segmentEndCartesian - ); - let length3D = 0.0; - - index = 3; - for (i = 1; i < positionsLength; i++) { - segmentStartCartesian = Matrix3.Cartesian3.clone( - segmentEndCartesian, - segmentStartCartesian - ); - segmentEndCartesian = Matrix3.Cartesian3.unpack( - topPositionsArray, - index, - segmentEndCartesian - ); - length3D += Matrix3.Cartesian3.distance(segmentStartCartesian, segmentEndCartesian); - index += 3; - } - - /*** Generate segments ***/ - let j; - index = 3; - let cartographicsIndex = 0; - let vec2sWriteIndex = 0; - let vec3sWriteIndex = 0; - let vec4sWriteIndex = 0; - let miterBroken = false; - - let endBottom = Matrix3.Cartesian3.unpack( - bottomPositionsArray, - 0, - segmentEndBottomScratch - ); - let endTop = Matrix3.Cartesian3.unpack(topPositionsArray, 0, segmentEndTopScratch); - let endGeometryNormal = Matrix3.Cartesian3.unpack( - normalsArray, - 0, - segmentEndNormalScratch - ); - - if (loop) { - const preEndBottom = Matrix3.Cartesian3.unpack( - bottomPositionsArray, - bottomPositionsArray.length - 6, - segmentStartBottomScratch - ); - if (breakMiter(endGeometryNormal, preEndBottom, endBottom, endTop)) { - // Miter broken as if for the last point in the loop, needs to be inverted for first point (clone of endBottom) - endGeometryNormal = Matrix3.Cartesian3.negate( - endGeometryNormal, - endGeometryNormal - ); - } - } - - let lengthSoFar3D = 0.0; - let lengthSoFar2D = 0.0; - - // For translating bounding volume - let sumHeights = 0.0; - - for (i = 0; i < segmentCount; i++) { - const startBottom = Matrix3.Cartesian3.clone(endBottom, segmentStartBottomScratch); - const startTop = Matrix3.Cartesian3.clone(endTop, segmentStartTopScratch); - let startGeometryNormal = Matrix3.Cartesian3.clone( - endGeometryNormal, - segmentStartNormalScratch - ); - - if (miterBroken) { - startGeometryNormal = Matrix3.Cartesian3.negate( - startGeometryNormal, - startGeometryNormal - ); - } - - endBottom = Matrix3.Cartesian3.unpack( - bottomPositionsArray, - index, - segmentEndBottomScratch - ); - endTop = Matrix3.Cartesian3.unpack(topPositionsArray, index, segmentEndTopScratch); - endGeometryNormal = Matrix3.Cartesian3.unpack( - normalsArray, - index, - segmentEndNormalScratch - ); - - miterBroken = breakMiter(endGeometryNormal, startBottom, endBottom, endTop); - - // 2D - don't clone anything from previous segment b/c possible IDL touch - startCartographic.latitude = cartographicsArray[cartographicsIndex]; - startCartographic.longitude = cartographicsArray[cartographicsIndex + 1]; - endCartographic.latitude = cartographicsArray[cartographicsIndex + 2]; - endCartographic.longitude = cartographicsArray[cartographicsIndex + 3]; - let start2D; - let end2D; - let startGeometryNormal2D; - let endGeometryNormal2D; - - if (compute2dAttributes) { - const nudgeResult = nudgeCartographic(startCartographic, endCartographic); - start2D = projection.project(startCartographic, segmentStart2DScratch); - end2D = projection.project(endCartographic, segmentEnd2DScratch); - const direction2D = direction(end2D, start2D, forwardOffset2DScratch); - direction2D.y = Math.abs(direction2D.y); - - startGeometryNormal2D = segmentStartNormal2DScratch; - endGeometryNormal2D = segmentEndNormal2DScratch; - if ( - nudgeResult === 0 || - Matrix3.Cartesian3.dot(direction2D, Matrix3.Cartesian3.UNIT_Y) > MITER_BREAK_SMALL - ) { - // No nudge - project the original normal - // Or, if the line's angle relative to the IDL is very acute, - // in which case snapping will produce oddly shaped volumes. - startGeometryNormal2D = projectNormal( - projection, - startCartographic, - startGeometryNormal, - start2D, - segmentStartNormal2DScratch - ); - endGeometryNormal2D = projectNormal( - projection, - endCartographic, - endGeometryNormal, - end2D, - segmentEndNormal2DScratch - ); - } else if (nudgeResult === 1) { - // Start is close to IDL - snap start normal to align with IDL - endGeometryNormal2D = projectNormal( - projection, - endCartographic, - endGeometryNormal, - end2D, - segmentEndNormal2DScratch - ); - startGeometryNormal2D.x = 0.0; - // If start longitude is negative and end longitude is less negative, relative right is unit -Y - // If start longitude is positive and end longitude is less positive, relative right is unit +Y - startGeometryNormal2D.y = Math$1.CesiumMath.sign( - startCartographic.longitude - Math.abs(endCartographic.longitude) - ); - startGeometryNormal2D.z = 0.0; - } else { - // End is close to IDL - snap end normal to align with IDL - startGeometryNormal2D = projectNormal( - projection, - startCartographic, - startGeometryNormal, - start2D, - segmentStartNormal2DScratch - ); - endGeometryNormal2D.x = 0.0; - // If end longitude is negative and start longitude is less negative, relative right is unit Y - // If end longitude is positive and start longitude is less positive, relative right is unit -Y - endGeometryNormal2D.y = Math$1.CesiumMath.sign( - startCartographic.longitude - endCartographic.longitude - ); - endGeometryNormal2D.z = 0.0; - } - } - - /**************************************** - * Geometry descriptors of a "line on terrain," - * as opposed to the "shadow volume used to draw - * the line on terrain": - * - position of start + offset to end - * - start, end, and right-facing planes - * - encoded texture coordinate offsets - ****************************************/ - - /* 3D */ - const segmentLength3D = Matrix3.Cartesian3.distance(startTop, endTop); - - const encodedStart = EncodedCartesian3.EncodedCartesian3.fromCartesian( - startBottom, - encodeScratch - ); - const forwardOffset = Matrix3.Cartesian3.subtract( - endBottom, - startBottom, - offsetScratch - ); - const forward = Matrix3.Cartesian3.normalize(forwardOffset, rightScratch); - - let startUp = Matrix3.Cartesian3.subtract(startTop, startBottom, startUpScratch); - startUp = Matrix3.Cartesian3.normalize(startUp, startUp); - let rightNormal = Matrix3.Cartesian3.cross(forward, startUp, rightScratch); - rightNormal = Matrix3.Cartesian3.normalize(rightNormal, rightNormal); - - let startPlaneNormal = Matrix3.Cartesian3.cross( - startUp, - startGeometryNormal, - startPlaneNormalScratch - ); - startPlaneNormal = Matrix3.Cartesian3.normalize(startPlaneNormal, startPlaneNormal); - - let endUp = Matrix3.Cartesian3.subtract(endTop, endBottom, endUpScratch); - endUp = Matrix3.Cartesian3.normalize(endUp, endUp); - let endPlaneNormal = Matrix3.Cartesian3.cross( - endGeometryNormal, - endUp, - endPlaneNormalScratch - ); - endPlaneNormal = Matrix3.Cartesian3.normalize(endPlaneNormal, endPlaneNormal); - - const texcoordNormalization3DX = segmentLength3D / length3D; - const texcoordNormalization3DY = lengthSoFar3D / length3D; - - /* 2D */ - let segmentLength2D = 0.0; - let encodedStart2D; - let forwardOffset2D; - let right2D; - let texcoordNormalization2DX = 0.0; - let texcoordNormalization2DY = 0.0; - if (compute2dAttributes) { - segmentLength2D = Matrix3.Cartesian3.distance(start2D, end2D); - - encodedStart2D = EncodedCartesian3.EncodedCartesian3.fromCartesian( - start2D, - encodeScratch2D - ); - forwardOffset2D = Matrix3.Cartesian3.subtract( - end2D, - start2D, - forwardOffset2DScratch - ); - - // Right direction is just forward direction rotated by -90 degrees around Z - // Similarly with plane normals - right2D = Matrix3.Cartesian3.normalize(forwardOffset2D, right2DScratch); - const swap = right2D.x; - right2D.x = right2D.y; - right2D.y = -swap; - - texcoordNormalization2DX = segmentLength2D / length2D; - texcoordNormalization2DY = lengthSoFar2D / length2D; - } - /** Pack **/ - for (j = 0; j < 8; j++) { - const vec4Index = vec4sWriteIndex + j * 4; - const vec2Index = vec2sWriteIndex + j * 2; - const wIndex = vec4Index + 3; - - // Encode sidedness of vertex relative to right plane in texture coordinate normalization X, - // whether vertex is top or bottom of volume in sign/magnitude of normalization Y. - const rightPlaneSide = j < 4 ? 1.0 : -1.0; - const topBottomSide = - j === 2 || j === 3 || j === 6 || j === 7 ? 1.0 : -1.0; - - // 3D - Matrix3.Cartesian3.pack(encodedStart.high, startHiAndForwardOffsetX, vec4Index); - startHiAndForwardOffsetX[wIndex] = forwardOffset.x; - - Matrix3.Cartesian3.pack(encodedStart.low, startLoAndForwardOffsetY, vec4Index); - startLoAndForwardOffsetY[wIndex] = forwardOffset.y; - - Matrix3.Cartesian3.pack( - startPlaneNormal, - startNormalAndForwardOffsetZ, - vec4Index - ); - startNormalAndForwardOffsetZ[wIndex] = forwardOffset.z; - - Matrix3.Cartesian3.pack( - endPlaneNormal, - endNormalAndTextureCoordinateNormalizationX, - vec4Index - ); - endNormalAndTextureCoordinateNormalizationX[wIndex] = - texcoordNormalization3DX * rightPlaneSide; - - Matrix3.Cartesian3.pack( - rightNormal, - rightNormalAndTextureCoordinateNormalizationY, - vec4Index - ); - - let texcoordNormalization = texcoordNormalization3DY * topBottomSide; - if (texcoordNormalization === 0.0 && topBottomSide < 0.0) { - texcoordNormalization = 9.0; // some value greater than 1.0 - } - rightNormalAndTextureCoordinateNormalizationY[ - wIndex - ] = texcoordNormalization; - - // 2D - if (compute2dAttributes) { - startHiLo2D[vec4Index] = encodedStart2D.high.x; - startHiLo2D[vec4Index + 1] = encodedStart2D.high.y; - startHiLo2D[vec4Index + 2] = encodedStart2D.low.x; - startHiLo2D[vec4Index + 3] = encodedStart2D.low.y; - - startEndNormals2D[vec4Index] = -startGeometryNormal2D.y; - startEndNormals2D[vec4Index + 1] = startGeometryNormal2D.x; - startEndNormals2D[vec4Index + 2] = endGeometryNormal2D.y; - startEndNormals2D[vec4Index + 3] = -endGeometryNormal2D.x; - - offsetAndRight2D[vec4Index] = forwardOffset2D.x; - offsetAndRight2D[vec4Index + 1] = forwardOffset2D.y; - offsetAndRight2D[vec4Index + 2] = right2D.x; - offsetAndRight2D[vec4Index + 3] = right2D.y; - - texcoordNormalization2D[vec2Index] = - texcoordNormalization2DX * rightPlaneSide; - - texcoordNormalization = texcoordNormalization2DY * topBottomSide; - if (texcoordNormalization === 0.0 && topBottomSide < 0.0) { - texcoordNormalization = 9.0; // some value greater than 1.0 - } - texcoordNormalization2D[vec2Index + 1] = texcoordNormalization; - } - } - - // Adjust height of volume in 3D - const adjustHeightStartBottom = adjustHeightStartBottomScratch; - const adjustHeightEndBottom = adjustHeightEndBottomScratch; - const adjustHeightStartTop = adjustHeightStartTopScratch; - const adjustHeightEndTop = adjustHeightEndTopScratch; - - const getHeightsRectangle = Matrix2.Rectangle.fromCartographicArray( - getHeightCartographics, - getHeightRectangleScratch - ); - const minMaxHeights = ApproximateTerrainHeights$1.getMinimumMaximumHeights( - getHeightsRectangle, - ellipsoid - ); - const minHeight = minMaxHeights.minimumTerrainHeight; - const maxHeight = minMaxHeights.maximumTerrainHeight; - - sumHeights += minHeight; - sumHeights += maxHeight; - - adjustHeights( - startBottom, - startTop, - minHeight, - maxHeight, - adjustHeightStartBottom, - adjustHeightStartTop - ); - adjustHeights( - endBottom, - endTop, - minHeight, - maxHeight, - adjustHeightEndBottom, - adjustHeightEndTop - ); - - // Nudge the positions away from the "polyline" a little bit to prevent errors in GeometryPipeline - let normalNudge = Matrix3.Cartesian3.multiplyByScalar( - rightNormal, - Math$1.CesiumMath.EPSILON5, - normalNudgeScratch - ); - Matrix3.Cartesian3.add( - adjustHeightStartBottom, - normalNudge, - adjustHeightStartBottom - ); - Matrix3.Cartesian3.add(adjustHeightEndBottom, normalNudge, adjustHeightEndBottom); - Matrix3.Cartesian3.add(adjustHeightStartTop, normalNudge, adjustHeightStartTop); - Matrix3.Cartesian3.add(adjustHeightEndTop, normalNudge, adjustHeightEndTop); - - // If the segment is very close to the XZ plane, nudge the vertices slightly to avoid touching it. - nudgeXZ(adjustHeightStartBottom, adjustHeightEndBottom); - nudgeXZ(adjustHeightStartTop, adjustHeightEndTop); - - Matrix3.Cartesian3.pack(adjustHeightStartBottom, positionsArray, vec3sWriteIndex); - Matrix3.Cartesian3.pack(adjustHeightEndBottom, positionsArray, vec3sWriteIndex + 3); - Matrix3.Cartesian3.pack(adjustHeightEndTop, positionsArray, vec3sWriteIndex + 6); - Matrix3.Cartesian3.pack(adjustHeightStartTop, positionsArray, vec3sWriteIndex + 9); - - normalNudge = Matrix3.Cartesian3.multiplyByScalar( - rightNormal, - -2.0 * Math$1.CesiumMath.EPSILON5, - normalNudgeScratch - ); - Matrix3.Cartesian3.add( - adjustHeightStartBottom, - normalNudge, - adjustHeightStartBottom - ); - Matrix3.Cartesian3.add(adjustHeightEndBottom, normalNudge, adjustHeightEndBottom); - Matrix3.Cartesian3.add(adjustHeightStartTop, normalNudge, adjustHeightStartTop); - Matrix3.Cartesian3.add(adjustHeightEndTop, normalNudge, adjustHeightEndTop); - - nudgeXZ(adjustHeightStartBottom, adjustHeightEndBottom); - nudgeXZ(adjustHeightStartTop, adjustHeightEndTop); - - Matrix3.Cartesian3.pack( - adjustHeightStartBottom, - positionsArray, - vec3sWriteIndex + 12 - ); - Matrix3.Cartesian3.pack( - adjustHeightEndBottom, - positionsArray, - vec3sWriteIndex + 15 - ); - Matrix3.Cartesian3.pack(adjustHeightEndTop, positionsArray, vec3sWriteIndex + 18); - Matrix3.Cartesian3.pack(adjustHeightStartTop, positionsArray, vec3sWriteIndex + 21); - - cartographicsIndex += 2; - index += 3; - - vec2sWriteIndex += 16; - vec3sWriteIndex += 24; - vec4sWriteIndex += 32; - - lengthSoFar3D += segmentLength3D; - lengthSoFar2D += segmentLength2D; - } - - index = 0; - let indexOffset = 0; - for (i = 0; i < segmentCount; i++) { - for (j = 0; j < REFERENCE_INDICES_LENGTH; j++) { - indices[index + j] = REFERENCE_INDICES[j] + indexOffset; - } - indexOffset += 8; - index += REFERENCE_INDICES_LENGTH; - } - - const boundingSpheres = scratchBoundingSpheres; - Transforms.BoundingSphere.fromVertices( - bottomPositionsArray, - Matrix3.Cartesian3.ZERO, - 3, - boundingSpheres[0] - ); - Transforms.BoundingSphere.fromVertices( - topPositionsArray, - Matrix3.Cartesian3.ZERO, - 3, - boundingSpheres[1] - ); - const boundingSphere = Transforms.BoundingSphere.fromBoundingSpheres(boundingSpheres); - - // Adjust bounding sphere height and radius to cover more of the volume - boundingSphere.radius += sumHeights / (segmentCount * 2.0); - - const attributes = { - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - normalize: false, - values: positionsArray, - }), - startHiAndForwardOffsetX: getVec4GeometryAttribute( - startHiAndForwardOffsetX - ), - startLoAndForwardOffsetY: getVec4GeometryAttribute( - startLoAndForwardOffsetY - ), - startNormalAndForwardOffsetZ: getVec4GeometryAttribute( - startNormalAndForwardOffsetZ - ), - endNormalAndTextureCoordinateNormalizationX: getVec4GeometryAttribute( - endNormalAndTextureCoordinateNormalizationX - ), - rightNormalAndTextureCoordinateNormalizationY: getVec4GeometryAttribute( - rightNormalAndTextureCoordinateNormalizationY - ), - }; - - if (compute2dAttributes) { - attributes.startHiLo2D = getVec4GeometryAttribute(startHiLo2D); - attributes.offsetAndRight2D = getVec4GeometryAttribute(offsetAndRight2D); - attributes.startEndNormals2D = getVec4GeometryAttribute(startEndNormals2D); - attributes.texcoordNormalization2D = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - normalize: false, - values: texcoordNormalization2D, - }); - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - boundingSphere: boundingSphere, - }); - } - - function getVec4GeometryAttribute(typedArray) { - return new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 4, - normalize: false, - values: typedArray, - }); - } - - /** - * Approximates an ellipsoid-tangent vector in 2D by projecting the end point into 2D. - * Exposed for testing. - * - * @param {MapProjection} projection Map Projection for projecting coordinates to 2D. - * @param {Cartographic} cartographic The cartographic origin point of the normal. - * Used to check if the normal crosses the IDL during projection. - * @param {Cartesian3} normal The normal in 3D. - * @param {Cartesian3} projectedPosition The projected origin point of the normal in 2D. - * @param {Cartesian3} result Result parameter on which to store the projected normal. - * @private - */ - GroundPolylineGeometry._projectNormal = projectNormal; - - function createGroundPolylineGeometry(groundPolylineGeometry, offset) { - return ApproximateTerrainHeights$1.initialize().then(function () { - if (defaultValue.defined(offset)) { - groundPolylineGeometry = GroundPolylineGeometry.unpack( - groundPolylineGeometry, - offset - ); - } - return GroundPolylineGeometry.createGeometry(groundPolylineGeometry); - }); - } - - return createGroundPolylineGeometry; - -})); -//# sourceMappingURL=createGroundPolylineGeometry.js.map diff --git a/debug/cesium/Workers/createGroundPolylineGeometry.js.map b/debug/cesium/Workers/createGroundPolylineGeometry.js.map deleted file mode 100644 index 7a3e1de..0000000 --- a/debug/cesium/Workers/createGroundPolylineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createGroundPolylineGeometry.js","sources":["../../../Source/Core/GeographicTilingScheme.js","../../../Source/Core/ApproximateTerrainHeights.js","../../../Source/Core/GroundPolylineGeometry.js","../../../Source/WorkersES6/createGroundPolylineGeometry.js"],"sourcesContent":["import Cartesian2 from \"./Cartesian2.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport GeographicProjection from \"./GeographicProjection.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\n\r\n/**\r\n * A tiling scheme for geometry referenced to a simple {@link GeographicProjection} where\r\n * longitude and latitude are directly mapped to X and Y. This projection is commonly\r\n * known as geographic, equirectangular, equidistant cylindrical, or plate carrée.\r\n *\r\n * @alias GeographicTilingScheme\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid whose surface is being tiled. Defaults to\r\n * the WGS84 ellipsoid.\r\n * @param {Rectangle} [options.rectangle=Rectangle.MAX_VALUE] The rectangle, in radians, covered by the tiling scheme.\r\n * @param {Number} [options.numberOfLevelZeroTilesX=2] The number of tiles in the X direction at level zero of\r\n * the tile tree.\r\n * @param {Number} [options.numberOfLevelZeroTilesY=1] The number of tiles in the Y direction at level zero of\r\n * the tile tree.\r\n */\r\nfunction GeographicTilingScheme(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n this._rectangle = defaultValue(options.rectangle, Rectangle.MAX_VALUE);\r\n this._projection = new GeographicProjection(this._ellipsoid);\r\n this._numberOfLevelZeroTilesX = defaultValue(\r\n options.numberOfLevelZeroTilesX,\r\n 2\r\n );\r\n this._numberOfLevelZeroTilesY = defaultValue(\r\n options.numberOfLevelZeroTilesY,\r\n 1\r\n );\r\n}\r\n\r\nObject.defineProperties(GeographicTilingScheme.prototype, {\r\n /**\r\n * Gets the ellipsoid that is tiled by this tiling scheme.\r\n * @memberof GeographicTilingScheme.prototype\r\n * @type {Ellipsoid}\r\n */\r\n ellipsoid: {\r\n get: function () {\r\n return this._ellipsoid;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the rectangle, in radians, covered by this tiling scheme.\r\n * @memberof GeographicTilingScheme.prototype\r\n * @type {Rectangle}\r\n */\r\n rectangle: {\r\n get: function () {\r\n return this._rectangle;\r\n },\r\n },\r\n\r\n /**\r\n * Gets the map projection used by this tiling scheme.\r\n * @memberof GeographicTilingScheme.prototype\r\n * @type {MapProjection}\r\n */\r\n projection: {\r\n get: function () {\r\n return this._projection;\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Gets the total number of tiles in the X direction at a specified level-of-detail.\r\n *\r\n * @param {Number} level The level-of-detail.\r\n * @returns {Number} The number of tiles in the X direction at the given level.\r\n */\r\nGeographicTilingScheme.prototype.getNumberOfXTilesAtLevel = function (level) {\r\n return this._numberOfLevelZeroTilesX << level;\r\n};\r\n\r\n/**\r\n * Gets the total number of tiles in the Y direction at a specified level-of-detail.\r\n *\r\n * @param {Number} level The level-of-detail.\r\n * @returns {Number} The number of tiles in the Y direction at the given level.\r\n */\r\nGeographicTilingScheme.prototype.getNumberOfYTilesAtLevel = function (level) {\r\n return this._numberOfLevelZeroTilesY << level;\r\n};\r\n\r\n/**\r\n * Transforms a rectangle specified in geodetic radians to the native coordinate system\r\n * of this tiling scheme.\r\n *\r\n * @param {Rectangle} rectangle The rectangle to transform.\r\n * @param {Rectangle} [result] The instance to which to copy the result, or undefined if a new instance\r\n * should be created.\r\n * @returns {Rectangle} The specified 'result', or a new object containing the native rectangle if 'result'\r\n * is undefined.\r\n */\r\nGeographicTilingScheme.prototype.rectangleToNativeRectangle = function (\r\n rectangle,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"rectangle\", rectangle);\r\n //>>includeEnd('debug');\r\n\r\n const west = CesiumMath.toDegrees(rectangle.west);\r\n const south = CesiumMath.toDegrees(rectangle.south);\r\n const east = CesiumMath.toDegrees(rectangle.east);\r\n const north = CesiumMath.toDegrees(rectangle.north);\r\n\r\n if (!defined(result)) {\r\n return new Rectangle(west, south, east, north);\r\n }\r\n\r\n result.west = west;\r\n result.south = south;\r\n result.east = east;\r\n result.north = north;\r\n return result;\r\n};\r\n\r\n/**\r\n * Converts tile x, y coordinates and level to a rectangle expressed in the native coordinates\r\n * of the tiling scheme.\r\n *\r\n * @param {Number} x The integer x coordinate of the tile.\r\n * @param {Number} y The integer y coordinate of the tile.\r\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\r\n * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance\r\n * should be created.\r\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\r\n * if 'result' is undefined.\r\n */\r\nGeographicTilingScheme.prototype.tileXYToNativeRectangle = function (\r\n x,\r\n y,\r\n level,\r\n result\r\n) {\r\n const rectangleRadians = this.tileXYToRectangle(x, y, level, result);\r\n rectangleRadians.west = CesiumMath.toDegrees(rectangleRadians.west);\r\n rectangleRadians.south = CesiumMath.toDegrees(rectangleRadians.south);\r\n rectangleRadians.east = CesiumMath.toDegrees(rectangleRadians.east);\r\n rectangleRadians.north = CesiumMath.toDegrees(rectangleRadians.north);\r\n return rectangleRadians;\r\n};\r\n\r\n/**\r\n * Converts tile x, y coordinates and level to a cartographic rectangle in radians.\r\n *\r\n * @param {Number} x The integer x coordinate of the tile.\r\n * @param {Number} y The integer y coordinate of the tile.\r\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\r\n * @param {Object} [result] The instance to which to copy the result, or undefined if a new instance\r\n * should be created.\r\n * @returns {Rectangle} The specified 'result', or a new object containing the rectangle\r\n * if 'result' is undefined.\r\n */\r\nGeographicTilingScheme.prototype.tileXYToRectangle = function (\r\n x,\r\n y,\r\n level,\r\n result\r\n) {\r\n const rectangle = this._rectangle;\r\n\r\n const xTiles = this.getNumberOfXTilesAtLevel(level);\r\n const yTiles = this.getNumberOfYTilesAtLevel(level);\r\n\r\n const xTileWidth = rectangle.width / xTiles;\r\n const west = x * xTileWidth + rectangle.west;\r\n const east = (x + 1) * xTileWidth + rectangle.west;\r\n\r\n const yTileHeight = rectangle.height / yTiles;\r\n const north = rectangle.north - y * yTileHeight;\r\n const south = rectangle.north - (y + 1) * yTileHeight;\r\n\r\n if (!defined(result)) {\r\n result = new Rectangle(west, south, east, north);\r\n }\r\n\r\n result.west = west;\r\n result.south = south;\r\n result.east = east;\r\n result.north = north;\r\n return result;\r\n};\r\n\r\n/**\r\n * Calculates the tile x, y coordinates of the tile containing\r\n * a given cartographic position.\r\n *\r\n * @param {Cartographic} position The position.\r\n * @param {Number} level The tile level-of-detail. Zero is the least detailed.\r\n * @param {Cartesian2} [result] The instance to which to copy the result, or undefined if a new instance\r\n * should be created.\r\n * @returns {Cartesian2} The specified 'result', or a new object containing the tile x, y coordinates\r\n * if 'result' is undefined.\r\n */\r\nGeographicTilingScheme.prototype.positionToTileXY = function (\r\n position,\r\n level,\r\n result\r\n) {\r\n const rectangle = this._rectangle;\r\n if (!Rectangle.contains(rectangle, position)) {\r\n // outside the bounds of the tiling scheme\r\n return undefined;\r\n }\r\n\r\n const xTiles = this.getNumberOfXTilesAtLevel(level);\r\n const yTiles = this.getNumberOfYTilesAtLevel(level);\r\n\r\n const xTileWidth = rectangle.width / xTiles;\r\n const yTileHeight = rectangle.height / yTiles;\r\n\r\n let longitude = position.longitude;\r\n if (rectangle.east < rectangle.west) {\r\n longitude += CesiumMath.TWO_PI;\r\n }\r\n\r\n let xTileCoordinate = ((longitude - rectangle.west) / xTileWidth) | 0;\r\n if (xTileCoordinate >= xTiles) {\r\n xTileCoordinate = xTiles - 1;\r\n }\r\n\r\n let yTileCoordinate =\r\n ((rectangle.north - position.latitude) / yTileHeight) | 0;\r\n if (yTileCoordinate >= yTiles) {\r\n yTileCoordinate = yTiles - 1;\r\n }\r\n\r\n if (!defined(result)) {\r\n return new Cartesian2(xTileCoordinate, yTileCoordinate);\r\n }\r\n\r\n result.x = xTileCoordinate;\r\n result.y = yTileCoordinate;\r\n return result;\r\n};\r\nexport default GeographicTilingScheme;\r\n","import BoundingSphere from \"./BoundingSphere.js\";\r\nimport buildModuleUrl from \"./buildModuleUrl.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport GeographicTilingScheme from \"./GeographicTilingScheme.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport Resource from \"./Resource.js\";\r\n\r\nconst scratchDiagonalCartesianNE = new Cartesian3();\r\nconst scratchDiagonalCartesianSW = new Cartesian3();\r\nconst scratchDiagonalCartographic = new Cartographic();\r\nconst scratchCenterCartesian = new Cartesian3();\r\nconst scratchSurfaceCartesian = new Cartesian3();\r\n\r\nconst scratchBoundingSphere = new BoundingSphere();\r\nconst tilingScheme = new GeographicTilingScheme();\r\nconst scratchCorners = [\r\n new Cartographic(),\r\n new Cartographic(),\r\n new Cartographic(),\r\n new Cartographic(),\r\n];\r\nconst scratchTileXY = new Cartesian2();\r\n\r\n/**\r\n * A collection of functions for approximating terrain height\r\n * @private\r\n */\r\nconst ApproximateTerrainHeights = {};\r\n\r\n/**\r\n * Initializes the minimum and maximum terrain heights\r\n * @return {Promise.}\r\n */\r\nApproximateTerrainHeights.initialize = function () {\r\n let initPromise = ApproximateTerrainHeights._initPromise;\r\n if (defined(initPromise)) {\r\n return initPromise;\r\n }\r\n\r\n initPromise = Resource.fetchJson(\r\n buildModuleUrl(\"Assets/approximateTerrainHeights.json\")\r\n ).then(function (json) {\r\n ApproximateTerrainHeights._terrainHeights = json;\r\n });\r\n ApproximateTerrainHeights._initPromise = initPromise;\r\n\r\n return initPromise;\r\n};\r\n\r\n/**\r\n * Computes the minimum and maximum terrain heights for a given rectangle\r\n * @param {Rectangle} rectangle The bounding rectangle\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid\r\n * @return {{minimumTerrainHeight: Number, maximumTerrainHeight: Number}}\r\n */\r\nApproximateTerrainHeights.getMinimumMaximumHeights = function (\r\n rectangle,\r\n ellipsoid\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"rectangle\", rectangle);\r\n if (!defined(ApproximateTerrainHeights._terrainHeights)) {\r\n throw new DeveloperError(\r\n \"You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n\r\n const xyLevel = getTileXYLevel(rectangle);\r\n\r\n // Get the terrain min/max for that tile\r\n let minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight;\r\n let maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight;\r\n if (defined(xyLevel)) {\r\n const key = `${xyLevel.level}-${xyLevel.x}-${xyLevel.y}`;\r\n const heights = ApproximateTerrainHeights._terrainHeights[key];\r\n if (defined(heights)) {\r\n minTerrainHeight = heights[0];\r\n maxTerrainHeight = heights[1];\r\n }\r\n\r\n // Compute min by taking the center of the NE->SW diagonal and finding distance to the surface\r\n ellipsoid.cartographicToCartesian(\r\n Rectangle.northeast(rectangle, scratchDiagonalCartographic),\r\n scratchDiagonalCartesianNE\r\n );\r\n ellipsoid.cartographicToCartesian(\r\n Rectangle.southwest(rectangle, scratchDiagonalCartographic),\r\n scratchDiagonalCartesianSW\r\n );\r\n\r\n Cartesian3.midpoint(\r\n scratchDiagonalCartesianSW,\r\n scratchDiagonalCartesianNE,\r\n scratchCenterCartesian\r\n );\r\n const surfacePosition = ellipsoid.scaleToGeodeticSurface(\r\n scratchCenterCartesian,\r\n scratchSurfaceCartesian\r\n );\r\n if (defined(surfacePosition)) {\r\n const distance = Cartesian3.distance(\r\n scratchCenterCartesian,\r\n surfacePosition\r\n );\r\n minTerrainHeight = Math.min(minTerrainHeight, -distance);\r\n } else {\r\n minTerrainHeight = ApproximateTerrainHeights._defaultMinTerrainHeight;\r\n }\r\n }\r\n\r\n minTerrainHeight = Math.max(\r\n ApproximateTerrainHeights._defaultMinTerrainHeight,\r\n minTerrainHeight\r\n );\r\n\r\n return {\r\n minimumTerrainHeight: minTerrainHeight,\r\n maximumTerrainHeight: maxTerrainHeight,\r\n };\r\n};\r\n\r\n/**\r\n * Computes the bounding sphere based on the tile heights in the rectangle\r\n * @param {Rectangle} rectangle The bounding rectangle\r\n * @param {Ellipsoid} [ellipsoid=Ellipsoid.WGS84] The ellipsoid\r\n * @return {BoundingSphere} The result bounding sphere\r\n */\r\nApproximateTerrainHeights.getBoundingSphere = function (rectangle, ellipsoid) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"rectangle\", rectangle);\r\n if (!defined(ApproximateTerrainHeights._terrainHeights)) {\r\n throw new DeveloperError(\r\n \"You must call ApproximateTerrainHeights.initialize and wait for the promise to resolve before using this function\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n ellipsoid = defaultValue(ellipsoid, Ellipsoid.WGS84);\r\n\r\n const xyLevel = getTileXYLevel(rectangle);\r\n\r\n // Get the terrain max for that tile\r\n let maxTerrainHeight = ApproximateTerrainHeights._defaultMaxTerrainHeight;\r\n if (defined(xyLevel)) {\r\n const key = `${xyLevel.level}-${xyLevel.x}-${xyLevel.y}`;\r\n const heights = ApproximateTerrainHeights._terrainHeights[key];\r\n if (defined(heights)) {\r\n maxTerrainHeight = heights[1];\r\n }\r\n }\r\n\r\n const result = BoundingSphere.fromRectangle3D(rectangle, ellipsoid, 0.0);\r\n BoundingSphere.fromRectangle3D(\r\n rectangle,\r\n ellipsoid,\r\n maxTerrainHeight,\r\n scratchBoundingSphere\r\n );\r\n\r\n return BoundingSphere.union(result, scratchBoundingSphere, result);\r\n};\r\n\r\nfunction getTileXYLevel(rectangle) {\r\n Cartographic.fromRadians(\r\n rectangle.east,\r\n rectangle.north,\r\n 0.0,\r\n scratchCorners[0]\r\n );\r\n Cartographic.fromRadians(\r\n rectangle.west,\r\n rectangle.north,\r\n 0.0,\r\n scratchCorners[1]\r\n );\r\n Cartographic.fromRadians(\r\n rectangle.east,\r\n rectangle.south,\r\n 0.0,\r\n scratchCorners[2]\r\n );\r\n Cartographic.fromRadians(\r\n rectangle.west,\r\n rectangle.south,\r\n 0.0,\r\n scratchCorners[3]\r\n );\r\n\r\n // Determine which tile the bounding rectangle is in\r\n let lastLevelX = 0,\r\n lastLevelY = 0;\r\n let currentX = 0,\r\n currentY = 0;\r\n const maxLevel = ApproximateTerrainHeights._terrainHeightsMaxLevel;\r\n let i;\r\n for (i = 0; i <= maxLevel; ++i) {\r\n let failed = false;\r\n for (let j = 0; j < 4; ++j) {\r\n const corner = scratchCorners[j];\r\n tilingScheme.positionToTileXY(corner, i, scratchTileXY);\r\n if (j === 0) {\r\n currentX = scratchTileXY.x;\r\n currentY = scratchTileXY.y;\r\n } else if (currentX !== scratchTileXY.x || currentY !== scratchTileXY.y) {\r\n failed = true;\r\n break;\r\n }\r\n }\r\n\r\n if (failed) {\r\n break;\r\n }\r\n\r\n lastLevelX = currentX;\r\n lastLevelY = currentY;\r\n }\r\n\r\n if (i === 0) {\r\n return undefined;\r\n }\r\n\r\n return {\r\n x: lastLevelX,\r\n y: lastLevelY,\r\n level: i > maxLevel ? maxLevel : i - 1,\r\n };\r\n}\r\n\r\nApproximateTerrainHeights._terrainHeightsMaxLevel = 6;\r\nApproximateTerrainHeights._defaultMaxTerrainHeight = 9000.0;\r\nApproximateTerrainHeights._defaultMinTerrainHeight = -100000.0;\r\nApproximateTerrainHeights._terrainHeights = undefined;\r\nApproximateTerrainHeights._initPromise = undefined;\r\n\r\nObject.defineProperties(ApproximateTerrainHeights, {\r\n /**\r\n * Determines if the terrain heights are initialized and ready to use. To initialize the terrain heights,\r\n * call {@link ApproximateTerrainHeights#initialize} and wait for the returned promise to resolve.\r\n * @type {Boolean}\r\n * @readonly\r\n * @memberof ApproximateTerrainHeights\r\n */\r\n initialized: {\r\n get: function () {\r\n return defined(ApproximateTerrainHeights._terrainHeights);\r\n },\r\n },\r\n});\r\nexport default ApproximateTerrainHeights;\r\n","import ApproximateTerrainHeights from \"./ApproximateTerrainHeights.js\";\r\nimport ArcType from \"./ArcType.js\";\r\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport EllipsoidGeodesic from \"./EllipsoidGeodesic.js\";\r\nimport EllipsoidRhumbLine from \"./EllipsoidRhumbLine.js\";\r\nimport EncodedCartesian3 from \"./EncodedCartesian3.js\";\r\nimport GeographicProjection from \"./GeographicProjection.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport IntersectionTests from \"./IntersectionTests.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport Plane from \"./Plane.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\r\n\r\nconst PROJECTIONS = [GeographicProjection, WebMercatorProjection];\r\nconst PROJECTION_COUNT = PROJECTIONS.length;\r\n\r\nconst MITER_BREAK_SMALL = Math.cos(CesiumMath.toRadians(30.0));\r\nconst MITER_BREAK_LARGE = Math.cos(CesiumMath.toRadians(150.0));\r\n\r\n// Initial heights for constructing the wall.\r\n// Keeping WALL_INITIAL_MIN_HEIGHT near the ellipsoid surface helps\r\n// prevent precision problems with planes in the shader.\r\n// Putting the start point of a plane at ApproximateTerrainHeights._defaultMinTerrainHeight,\r\n// which is a highly conservative bound, usually puts the plane origin several thousands\r\n// of meters away from the actual terrain, causing floating point problems when checking\r\n// fragments on terrain against the plane.\r\n// Ellipsoid height is generally much closer.\r\n// The initial max height is arbitrary.\r\n// Both heights are corrected using ApproximateTerrainHeights for computing the actual volume geometry.\r\nconst WALL_INITIAL_MIN_HEIGHT = 0.0;\r\nconst WALL_INITIAL_MAX_HEIGHT = 1000.0;\r\n\r\n/**\r\n * A description of a polyline on terrain or 3D Tiles. Only to be used with {@link GroundPolylinePrimitive}.\r\n *\r\n * @alias GroundPolylineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Options with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the polyline's points. Heights above the ellipsoid will be ignored.\r\n * @param {Number} [options.width=1.0] The screen space width in pixels.\r\n * @param {Number} [options.granularity=9999.0] The distance interval in meters used for interpolating options.points. Defaults to 9999.0 meters. Zero indicates no interpolation.\r\n * @param {Boolean} [options.loop=false] Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop.\r\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\r\n *\r\n * @exception {DeveloperError} At least two positions are required.\r\n *\r\n * @see GroundPolylinePrimitive\r\n *\r\n * @example\r\n * const positions = Cesium.Cartesian3.fromDegreesArray([\r\n * -112.1340164450331, 36.05494287836128,\r\n * -112.08821010582645, 36.097804071380715,\r\n * -112.13296079730024, 36.168769146801104\r\n * ]);\r\n *\r\n * const geometry = new Cesium.GroundPolylineGeometry({\r\n * positions : positions\r\n * });\r\n */\r\nfunction GroundPolylineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.positions;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions) || positions.length < 2) {\r\n throw new DeveloperError(\"At least two positions are required.\");\r\n }\r\n if (\r\n defined(options.arcType) &&\r\n options.arcType !== ArcType.GEODESIC &&\r\n options.arcType !== ArcType.RHUMB\r\n ) {\r\n throw new DeveloperError(\r\n \"Valid options for arcType are ArcType.GEODESIC and ArcType.RHUMB.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n /**\r\n * The screen space width in pixels.\r\n * @type {Number}\r\n */\r\n this.width = defaultValue(options.width, 1.0); // Doesn't get packed, not necessary for computing geometry.\r\n\r\n this._positions = positions;\r\n\r\n /**\r\n * The distance interval used for interpolating options.points. Zero indicates no interpolation.\r\n * Default of 9999.0 allows centimeter accuracy with 32 bit floating point.\r\n * @type {Boolean}\r\n * @default 9999.0\r\n */\r\n this.granularity = defaultValue(options.granularity, 9999.0);\r\n\r\n /**\r\n * Whether during geometry creation a line segment will be added between the last and first line positions to make this Polyline a loop.\r\n * If the geometry has two positions this parameter will be ignored.\r\n * @type {Boolean}\r\n * @default false\r\n */\r\n this.loop = defaultValue(options.loop, false);\r\n\r\n /**\r\n * The type of path the polyline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\r\n * @type {ArcType}\r\n * @default ArcType.GEODESIC\r\n */\r\n this.arcType = defaultValue(options.arcType, ArcType.GEODESIC);\r\n\r\n this._ellipsoid = Ellipsoid.WGS84;\r\n\r\n // MapProjections can't be packed, so store the index to a known MapProjection.\r\n this._projectionIndex = 0;\r\n this._workerName = \"createGroundPolylineGeometry\";\r\n\r\n // Used by GroundPolylinePrimitive to signal worker that scenemode is 3D only.\r\n this._scene3DOnly = false;\r\n}\r\n\r\nObject.defineProperties(GroundPolylineGeometry.prototype, {\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @memberof GroundPolylineGeometry.prototype\r\n * @type {Number}\r\n * @readonly\r\n * @private\r\n */\r\n packedLength: {\r\n get: function () {\r\n return (\r\n 1.0 +\r\n this._positions.length * 3 +\r\n 1.0 +\r\n 1.0 +\r\n 1.0 +\r\n Ellipsoid.packedLength +\r\n 1.0 +\r\n 1.0\r\n );\r\n },\r\n },\r\n});\r\n\r\n/**\r\n * Set the GroundPolylineGeometry's projection and ellipsoid.\r\n * Used by GroundPolylinePrimitive to signal scene information to the geometry for generating 2D attributes.\r\n *\r\n * @param {GroundPolylineGeometry} groundPolylineGeometry GroundPolylinGeometry describing a polyline on terrain or 3D Tiles.\r\n * @param {Projection} mapProjection A MapProjection used for projecting cartographic coordinates to 2D.\r\n * @private\r\n */\r\nGroundPolylineGeometry.setProjectionAndEllipsoid = function (\r\n groundPolylineGeometry,\r\n mapProjection\r\n) {\r\n let projectionIndex = 0;\r\n for (let i = 0; i < PROJECTION_COUNT; i++) {\r\n if (mapProjection instanceof PROJECTIONS[i]) {\r\n projectionIndex = i;\r\n break;\r\n }\r\n }\r\n\r\n groundPolylineGeometry._projectionIndex = projectionIndex;\r\n groundPolylineGeometry._ellipsoid = mapProjection.ellipsoid;\r\n};\r\n\r\nconst cart3Scratch1 = new Cartesian3();\r\nconst cart3Scratch2 = new Cartesian3();\r\nconst cart3Scratch3 = new Cartesian3();\r\nfunction computeRightNormal(start, end, maxHeight, ellipsoid, result) {\r\n const startBottom = getPosition(ellipsoid, start, 0.0, cart3Scratch1);\r\n const startTop = getPosition(ellipsoid, start, maxHeight, cart3Scratch2);\r\n const endBottom = getPosition(ellipsoid, end, 0.0, cart3Scratch3);\r\n\r\n const up = direction(startTop, startBottom, cart3Scratch2);\r\n const forward = direction(endBottom, startBottom, cart3Scratch3);\r\n\r\n Cartesian3.cross(forward, up, result);\r\n return Cartesian3.normalize(result, result);\r\n}\r\n\r\nconst interpolatedCartographicScratch = new Cartographic();\r\nconst interpolatedBottomScratch = new Cartesian3();\r\nconst interpolatedTopScratch = new Cartesian3();\r\nconst interpolatedNormalScratch = new Cartesian3();\r\nfunction interpolateSegment(\r\n start,\r\n end,\r\n minHeight,\r\n maxHeight,\r\n granularity,\r\n arcType,\r\n ellipsoid,\r\n normalsArray,\r\n bottomPositionsArray,\r\n topPositionsArray,\r\n cartographicsArray\r\n) {\r\n if (granularity === 0.0) {\r\n return;\r\n }\r\n\r\n let ellipsoidLine;\r\n if (arcType === ArcType.GEODESIC) {\r\n ellipsoidLine = new EllipsoidGeodesic(start, end, ellipsoid);\r\n } else if (arcType === ArcType.RHUMB) {\r\n ellipsoidLine = new EllipsoidRhumbLine(start, end, ellipsoid);\r\n }\r\n\r\n const surfaceDistance = ellipsoidLine.surfaceDistance;\r\n if (surfaceDistance < granularity) {\r\n return;\r\n }\r\n\r\n // Compute rightwards normal applicable at all interpolated points\r\n const interpolatedNormal = computeRightNormal(\r\n start,\r\n end,\r\n maxHeight,\r\n ellipsoid,\r\n interpolatedNormalScratch\r\n );\r\n\r\n const segments = Math.ceil(surfaceDistance / granularity);\r\n const interpointDistance = surfaceDistance / segments;\r\n let distanceFromStart = interpointDistance;\r\n const pointsToAdd = segments - 1;\r\n let packIndex = normalsArray.length;\r\n for (let i = 0; i < pointsToAdd; i++) {\r\n const interpolatedCartographic = ellipsoidLine.interpolateUsingSurfaceDistance(\r\n distanceFromStart,\r\n interpolatedCartographicScratch\r\n );\r\n const interpolatedBottom = getPosition(\r\n ellipsoid,\r\n interpolatedCartographic,\r\n minHeight,\r\n interpolatedBottomScratch\r\n );\r\n const interpolatedTop = getPosition(\r\n ellipsoid,\r\n interpolatedCartographic,\r\n maxHeight,\r\n interpolatedTopScratch\r\n );\r\n\r\n Cartesian3.pack(interpolatedNormal, normalsArray, packIndex);\r\n Cartesian3.pack(interpolatedBottom, bottomPositionsArray, packIndex);\r\n Cartesian3.pack(interpolatedTop, topPositionsArray, packIndex);\r\n cartographicsArray.push(interpolatedCartographic.latitude);\r\n cartographicsArray.push(interpolatedCartographic.longitude);\r\n\r\n packIndex += 3;\r\n distanceFromStart += interpointDistance;\r\n }\r\n}\r\n\r\nconst heightlessCartographicScratch = new Cartographic();\r\nfunction getPosition(ellipsoid, cartographic, height, result) {\r\n Cartographic.clone(cartographic, heightlessCartographicScratch);\r\n heightlessCartographicScratch.height = height;\r\n return Cartographic.toCartesian(\r\n heightlessCartographicScratch,\r\n ellipsoid,\r\n result\r\n );\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PolygonGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nGroundPolylineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n let index = defaultValue(startingIndex, 0);\r\n\r\n const positions = value._positions;\r\n const positionsLength = positions.length;\r\n\r\n array[index++] = positionsLength;\r\n\r\n for (let i = 0; i < positionsLength; ++i) {\r\n const cartesian = positions[i];\r\n Cartesian3.pack(cartesian, array, index);\r\n index += 3;\r\n }\r\n\r\n array[index++] = value.granularity;\r\n array[index++] = value.loop ? 1.0 : 0.0;\r\n array[index++] = value.arcType;\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, index);\r\n index += Ellipsoid.packedLength;\r\n\r\n array[index++] = value._projectionIndex;\r\n array[index++] = value._scene3DOnly ? 1.0 : 0.0;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PolygonGeometry} [result] The object into which to store the result.\r\n */\r\nGroundPolylineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n let index = defaultValue(startingIndex, 0);\r\n const positionsLength = array[index++];\r\n const positions = new Array(positionsLength);\r\n\r\n for (let i = 0; i < positionsLength; i++) {\r\n positions[i] = Cartesian3.unpack(array, index);\r\n index += 3;\r\n }\r\n\r\n const granularity = array[index++];\r\n const loop = array[index++] === 1.0;\r\n const arcType = array[index++];\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, index);\r\n index += Ellipsoid.packedLength;\r\n\r\n const projectionIndex = array[index++];\r\n const scene3DOnly = array[index++] === 1.0;\r\n\r\n if (!defined(result)) {\r\n result = new GroundPolylineGeometry({\r\n positions: positions,\r\n });\r\n }\r\n\r\n result._positions = positions;\r\n result.granularity = granularity;\r\n result.loop = loop;\r\n result.arcType = arcType;\r\n result._ellipsoid = ellipsoid;\r\n result._projectionIndex = projectionIndex;\r\n result._scene3DOnly = scene3DOnly;\r\n\r\n return result;\r\n};\r\n\r\nfunction direction(target, origin, result) {\r\n Cartesian3.subtract(target, origin, result);\r\n Cartesian3.normalize(result, result);\r\n return result;\r\n}\r\n\r\nfunction tangentDirection(target, origin, up, result) {\r\n result = direction(target, origin, result);\r\n\r\n // orthogonalize\r\n result = Cartesian3.cross(result, up, result);\r\n result = Cartesian3.normalize(result, result);\r\n result = Cartesian3.cross(up, result, result);\r\n return result;\r\n}\r\n\r\nconst toPreviousScratch = new Cartesian3();\r\nconst toNextScratch = new Cartesian3();\r\nconst forwardScratch = new Cartesian3();\r\nconst vertexUpScratch = new Cartesian3();\r\nconst cosine90 = 0.0;\r\nconst cosine180 = -1.0;\r\nfunction computeVertexMiterNormal(\r\n previousBottom,\r\n vertexBottom,\r\n vertexTop,\r\n nextBottom,\r\n result\r\n) {\r\n const up = direction(vertexTop, vertexBottom, vertexUpScratch);\r\n\r\n // Compute vectors pointing towards neighboring points but tangent to this point on the ellipsoid\r\n const toPrevious = tangentDirection(\r\n previousBottom,\r\n vertexBottom,\r\n up,\r\n toPreviousScratch\r\n );\r\n const toNext = tangentDirection(nextBottom, vertexBottom, up, toNextScratch);\r\n\r\n // Check if tangents are almost opposite - if so, no need to miter.\r\n if (\r\n CesiumMath.equalsEpsilon(\r\n Cartesian3.dot(toPrevious, toNext),\r\n cosine180,\r\n CesiumMath.EPSILON5\r\n )\r\n ) {\r\n result = Cartesian3.cross(up, toPrevious, result);\r\n result = Cartesian3.normalize(result, result);\r\n return result;\r\n }\r\n\r\n // Average directions to previous and to next in the plane of Up\r\n result = Cartesian3.add(toNext, toPrevious, result);\r\n result = Cartesian3.normalize(result, result);\r\n\r\n // Flip the normal if it isn't pointing roughly bound right (aka if forward is pointing more \"backwards\")\r\n const forward = Cartesian3.cross(up, result, forwardScratch);\r\n if (Cartesian3.dot(toNext, forward) < cosine90) {\r\n result = Cartesian3.negate(result, result);\r\n }\r\n\r\n return result;\r\n}\r\n\r\nconst XZ_PLANE = Plane.fromPointNormal(Cartesian3.ZERO, Cartesian3.UNIT_Y);\r\n\r\nconst previousBottomScratch = new Cartesian3();\r\nconst vertexBottomScratch = new Cartesian3();\r\nconst vertexTopScratch = new Cartesian3();\r\nconst nextBottomScratch = new Cartesian3();\r\nconst vertexNormalScratch = new Cartesian3();\r\nconst intersectionScratch = new Cartesian3();\r\nconst cartographicScratch0 = new Cartographic();\r\nconst cartographicScratch1 = new Cartographic();\r\nconst cartographicIntersectionScratch = new Cartographic();\r\n/**\r\n * Computes shadow volumes for the ground polyline, consisting of its vertices, indices, and a bounding sphere.\r\n * Vertices are \"fat,\" packing all the data needed in each volume to describe a line on terrain or 3D Tiles.\r\n * Should not be called independent of {@link GroundPolylinePrimitive}.\r\n *\r\n * @param {GroundPolylineGeometry} groundPolylineGeometry\r\n * @private\r\n */\r\nGroundPolylineGeometry.createGeometry = function (groundPolylineGeometry) {\r\n const compute2dAttributes = !groundPolylineGeometry._scene3DOnly;\r\n let loop = groundPolylineGeometry.loop;\r\n const ellipsoid = groundPolylineGeometry._ellipsoid;\r\n const granularity = groundPolylineGeometry.granularity;\r\n const arcType = groundPolylineGeometry.arcType;\r\n const projection = new PROJECTIONS[groundPolylineGeometry._projectionIndex](\r\n ellipsoid\r\n );\r\n\r\n const minHeight = WALL_INITIAL_MIN_HEIGHT;\r\n const maxHeight = WALL_INITIAL_MAX_HEIGHT;\r\n\r\n let index;\r\n let i;\r\n\r\n const positions = groundPolylineGeometry._positions;\r\n const positionsLength = positions.length;\r\n\r\n if (positionsLength === 2) {\r\n loop = false;\r\n }\r\n\r\n // Split positions across the IDL and the Prime Meridian as well.\r\n // Split across prime meridian because very large geometries crossing the Prime Meridian but not the IDL\r\n // may get split by the plane of IDL + Prime Meridian.\r\n let p0;\r\n let p1;\r\n let c0;\r\n let c1;\r\n const rhumbLine = new EllipsoidRhumbLine(undefined, undefined, ellipsoid);\r\n let intersection;\r\n let intersectionCartographic;\r\n let intersectionLongitude;\r\n const splitPositions = [positions[0]];\r\n for (i = 0; i < positionsLength - 1; i++) {\r\n p0 = positions[i];\r\n p1 = positions[i + 1];\r\n intersection = IntersectionTests.lineSegmentPlane(\r\n p0,\r\n p1,\r\n XZ_PLANE,\r\n intersectionScratch\r\n );\r\n if (\r\n defined(intersection) &&\r\n !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\r\n !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\r\n ) {\r\n if (groundPolylineGeometry.arcType === ArcType.GEODESIC) {\r\n splitPositions.push(Cartesian3.clone(intersection));\r\n } else if (groundPolylineGeometry.arcType === ArcType.RHUMB) {\r\n intersectionLongitude = ellipsoid.cartesianToCartographic(\r\n intersection,\r\n cartographicScratch0\r\n ).longitude;\r\n c0 = ellipsoid.cartesianToCartographic(p0, cartographicScratch0);\r\n c1 = ellipsoid.cartesianToCartographic(p1, cartographicScratch1);\r\n rhumbLine.setEndPoints(c0, c1);\r\n intersectionCartographic = rhumbLine.findIntersectionWithLongitude(\r\n intersectionLongitude,\r\n cartographicIntersectionScratch\r\n );\r\n intersection = ellipsoid.cartographicToCartesian(\r\n intersectionCartographic,\r\n intersectionScratch\r\n );\r\n if (\r\n defined(intersection) &&\r\n !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\r\n !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\r\n ) {\r\n splitPositions.push(Cartesian3.clone(intersection));\r\n }\r\n }\r\n }\r\n splitPositions.push(p1);\r\n }\r\n\r\n if (loop) {\r\n p0 = positions[positionsLength - 1];\r\n p1 = positions[0];\r\n intersection = IntersectionTests.lineSegmentPlane(\r\n p0,\r\n p1,\r\n XZ_PLANE,\r\n intersectionScratch\r\n );\r\n if (\r\n defined(intersection) &&\r\n !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\r\n !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\r\n ) {\r\n if (groundPolylineGeometry.arcType === ArcType.GEODESIC) {\r\n splitPositions.push(Cartesian3.clone(intersection));\r\n } else if (groundPolylineGeometry.arcType === ArcType.RHUMB) {\r\n intersectionLongitude = ellipsoid.cartesianToCartographic(\r\n intersection,\r\n cartographicScratch0\r\n ).longitude;\r\n c0 = ellipsoid.cartesianToCartographic(p0, cartographicScratch0);\r\n c1 = ellipsoid.cartesianToCartographic(p1, cartographicScratch1);\r\n rhumbLine.setEndPoints(c0, c1);\r\n intersectionCartographic = rhumbLine.findIntersectionWithLongitude(\r\n intersectionLongitude,\r\n cartographicIntersectionScratch\r\n );\r\n intersection = ellipsoid.cartographicToCartesian(\r\n intersectionCartographic,\r\n intersectionScratch\r\n );\r\n if (\r\n defined(intersection) &&\r\n !Cartesian3.equalsEpsilon(intersection, p0, CesiumMath.EPSILON7) &&\r\n !Cartesian3.equalsEpsilon(intersection, p1, CesiumMath.EPSILON7)\r\n ) {\r\n splitPositions.push(Cartesian3.clone(intersection));\r\n }\r\n }\r\n }\r\n }\r\n let cartographicsLength = splitPositions.length;\r\n\r\n let cartographics = new Array(cartographicsLength);\r\n for (i = 0; i < cartographicsLength; i++) {\r\n const cartographic = Cartographic.fromCartesian(\r\n splitPositions[i],\r\n ellipsoid\r\n );\r\n cartographic.height = 0.0;\r\n cartographics[i] = cartographic;\r\n }\r\n\r\n cartographics = arrayRemoveDuplicates(\r\n cartographics,\r\n Cartographic.equalsEpsilon\r\n );\r\n cartographicsLength = cartographics.length;\r\n\r\n if (cartographicsLength < 2) {\r\n return undefined;\r\n }\r\n\r\n /**** Build heap-side arrays for positions, interpolated cartographics, and normals from which to compute vertices ****/\r\n // We build a \"wall\" and then decompose it into separately connected component \"volumes\" because we need a lot\r\n // of information about the wall. Also, this simplifies interpolation.\r\n // Convention: \"next\" and \"end\" are locally forward to each segment of the wall,\r\n // and we are computing normals pointing towards the local right side of the vertices in each segment.\r\n const cartographicsArray = [];\r\n const normalsArray = [];\r\n const bottomPositionsArray = [];\r\n const topPositionsArray = [];\r\n\r\n let previousBottom = previousBottomScratch;\r\n let vertexBottom = vertexBottomScratch;\r\n let vertexTop = vertexTopScratch;\r\n let nextBottom = nextBottomScratch;\r\n let vertexNormal = vertexNormalScratch;\r\n\r\n // First point - either loop or attach a \"perpendicular\" normal\r\n const startCartographic = cartographics[0];\r\n const nextCartographic = cartographics[1];\r\n\r\n const prestartCartographic = cartographics[cartographicsLength - 1];\r\n previousBottom = getPosition(\r\n ellipsoid,\r\n prestartCartographic,\r\n minHeight,\r\n previousBottom\r\n );\r\n nextBottom = getPosition(ellipsoid, nextCartographic, minHeight, nextBottom);\r\n vertexBottom = getPosition(\r\n ellipsoid,\r\n startCartographic,\r\n minHeight,\r\n vertexBottom\r\n );\r\n vertexTop = getPosition(ellipsoid, startCartographic, maxHeight, vertexTop);\r\n\r\n if (loop) {\r\n vertexNormal = computeVertexMiterNormal(\r\n previousBottom,\r\n vertexBottom,\r\n vertexTop,\r\n nextBottom,\r\n vertexNormal\r\n );\r\n } else {\r\n vertexNormal = computeRightNormal(\r\n startCartographic,\r\n nextCartographic,\r\n maxHeight,\r\n ellipsoid,\r\n vertexNormal\r\n );\r\n }\r\n\r\n Cartesian3.pack(vertexNormal, normalsArray, 0);\r\n Cartesian3.pack(vertexBottom, bottomPositionsArray, 0);\r\n Cartesian3.pack(vertexTop, topPositionsArray, 0);\r\n cartographicsArray.push(startCartographic.latitude);\r\n cartographicsArray.push(startCartographic.longitude);\r\n\r\n interpolateSegment(\r\n startCartographic,\r\n nextCartographic,\r\n minHeight,\r\n maxHeight,\r\n granularity,\r\n arcType,\r\n ellipsoid,\r\n normalsArray,\r\n bottomPositionsArray,\r\n topPositionsArray,\r\n cartographicsArray\r\n );\r\n\r\n // All inbetween points\r\n for (i = 1; i < cartographicsLength - 1; ++i) {\r\n previousBottom = Cartesian3.clone(vertexBottom, previousBottom);\r\n vertexBottom = Cartesian3.clone(nextBottom, vertexBottom);\r\n const vertexCartographic = cartographics[i];\r\n getPosition(ellipsoid, vertexCartographic, maxHeight, vertexTop);\r\n getPosition(ellipsoid, cartographics[i + 1], minHeight, nextBottom);\r\n\r\n computeVertexMiterNormal(\r\n previousBottom,\r\n vertexBottom,\r\n vertexTop,\r\n nextBottom,\r\n vertexNormal\r\n );\r\n\r\n index = normalsArray.length;\r\n Cartesian3.pack(vertexNormal, normalsArray, index);\r\n Cartesian3.pack(vertexBottom, bottomPositionsArray, index);\r\n Cartesian3.pack(vertexTop, topPositionsArray, index);\r\n cartographicsArray.push(vertexCartographic.latitude);\r\n cartographicsArray.push(vertexCartographic.longitude);\r\n\r\n interpolateSegment(\r\n cartographics[i],\r\n cartographics[i + 1],\r\n minHeight,\r\n maxHeight,\r\n granularity,\r\n arcType,\r\n ellipsoid,\r\n normalsArray,\r\n bottomPositionsArray,\r\n topPositionsArray,\r\n cartographicsArray\r\n );\r\n }\r\n\r\n // Last point - either loop or attach a normal \"perpendicular\" to the wall.\r\n const endCartographic = cartographics[cartographicsLength - 1];\r\n const preEndCartographic = cartographics[cartographicsLength - 2];\r\n\r\n vertexBottom = getPosition(\r\n ellipsoid,\r\n endCartographic,\r\n minHeight,\r\n vertexBottom\r\n );\r\n vertexTop = getPosition(ellipsoid, endCartographic, maxHeight, vertexTop);\r\n\r\n if (loop) {\r\n const postEndCartographic = cartographics[0];\r\n previousBottom = getPosition(\r\n ellipsoid,\r\n preEndCartographic,\r\n minHeight,\r\n previousBottom\r\n );\r\n nextBottom = getPosition(\r\n ellipsoid,\r\n postEndCartographic,\r\n minHeight,\r\n nextBottom\r\n );\r\n\r\n vertexNormal = computeVertexMiterNormal(\r\n previousBottom,\r\n vertexBottom,\r\n vertexTop,\r\n nextBottom,\r\n vertexNormal\r\n );\r\n } else {\r\n vertexNormal = computeRightNormal(\r\n preEndCartographic,\r\n endCartographic,\r\n maxHeight,\r\n ellipsoid,\r\n vertexNormal\r\n );\r\n }\r\n\r\n index = normalsArray.length;\r\n Cartesian3.pack(vertexNormal, normalsArray, index);\r\n Cartesian3.pack(vertexBottom, bottomPositionsArray, index);\r\n Cartesian3.pack(vertexTop, topPositionsArray, index);\r\n cartographicsArray.push(endCartographic.latitude);\r\n cartographicsArray.push(endCartographic.longitude);\r\n\r\n if (loop) {\r\n interpolateSegment(\r\n endCartographic,\r\n startCartographic,\r\n minHeight,\r\n maxHeight,\r\n granularity,\r\n arcType,\r\n ellipsoid,\r\n normalsArray,\r\n bottomPositionsArray,\r\n topPositionsArray,\r\n cartographicsArray\r\n );\r\n index = normalsArray.length;\r\n for (i = 0; i < 3; ++i) {\r\n normalsArray[index + i] = normalsArray[i];\r\n bottomPositionsArray[index + i] = bottomPositionsArray[i];\r\n topPositionsArray[index + i] = topPositionsArray[i];\r\n }\r\n cartographicsArray.push(startCartographic.latitude);\r\n cartographicsArray.push(startCartographic.longitude);\r\n }\r\n\r\n return generateGeometryAttributes(\r\n loop,\r\n projection,\r\n bottomPositionsArray,\r\n topPositionsArray,\r\n normalsArray,\r\n cartographicsArray,\r\n compute2dAttributes\r\n );\r\n};\r\n\r\n// If the end normal angle is too steep compared to the direction of the line segment,\r\n// \"break\" the miter by rotating the normal 90 degrees around the \"up\" direction at the point\r\n// For ultra precision we would want to project into a plane, but in practice this is sufficient.\r\nconst lineDirectionScratch = new Cartesian3();\r\nconst matrix3Scratch = new Matrix3();\r\nconst quaternionScratch = new Quaternion();\r\nfunction breakMiter(endGeometryNormal, startBottom, endBottom, endTop) {\r\n const lineDirection = direction(endBottom, startBottom, lineDirectionScratch);\r\n\r\n const dot = Cartesian3.dot(lineDirection, endGeometryNormal);\r\n if (dot > MITER_BREAK_SMALL || dot < MITER_BREAK_LARGE) {\r\n const vertexUp = direction(endTop, endBottom, vertexUpScratch);\r\n const angle =\r\n dot < MITER_BREAK_LARGE\r\n ? CesiumMath.PI_OVER_TWO\r\n : -CesiumMath.PI_OVER_TWO;\r\n const quaternion = Quaternion.fromAxisAngle(\r\n vertexUp,\r\n angle,\r\n quaternionScratch\r\n );\r\n const rotationMatrix = Matrix3.fromQuaternion(quaternion, matrix3Scratch);\r\n Matrix3.multiplyByVector(\r\n rotationMatrix,\r\n endGeometryNormal,\r\n endGeometryNormal\r\n );\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nconst endPosCartographicScratch = new Cartographic();\r\nconst normalStartpointScratch = new Cartesian3();\r\nconst normalEndpointScratch = new Cartesian3();\r\nfunction projectNormal(\r\n projection,\r\n cartographic,\r\n normal,\r\n projectedPosition,\r\n result\r\n) {\r\n const position = Cartographic.toCartesian(\r\n cartographic,\r\n projection._ellipsoid,\r\n normalStartpointScratch\r\n );\r\n let normalEndpoint = Cartesian3.add(position, normal, normalEndpointScratch);\r\n let flipNormal = false;\r\n\r\n const ellipsoid = projection._ellipsoid;\r\n let normalEndpointCartographic = ellipsoid.cartesianToCartographic(\r\n normalEndpoint,\r\n endPosCartographicScratch\r\n );\r\n // If normal crosses the IDL, go the other way and flip the result.\r\n // In practice this almost never happens because the cartographic start\r\n // and end points of each segment are \"nudged\" to be on the same side\r\n // of the IDL and slightly away from the IDL.\r\n if (\r\n Math.abs(cartographic.longitude - normalEndpointCartographic.longitude) >\r\n CesiumMath.PI_OVER_TWO\r\n ) {\r\n flipNormal = true;\r\n normalEndpoint = Cartesian3.subtract(\r\n position,\r\n normal,\r\n normalEndpointScratch\r\n );\r\n normalEndpointCartographic = ellipsoid.cartesianToCartographic(\r\n normalEndpoint,\r\n endPosCartographicScratch\r\n );\r\n }\r\n\r\n normalEndpointCartographic.height = 0.0;\r\n const normalEndpointProjected = projection.project(\r\n normalEndpointCartographic,\r\n result\r\n );\r\n result = Cartesian3.subtract(\r\n normalEndpointProjected,\r\n projectedPosition,\r\n result\r\n );\r\n result.z = 0.0;\r\n result = Cartesian3.normalize(result, result);\r\n if (flipNormal) {\r\n Cartesian3.negate(result, result);\r\n }\r\n return result;\r\n}\r\n\r\nconst adjustHeightNormalScratch = new Cartesian3();\r\nconst adjustHeightOffsetScratch = new Cartesian3();\r\nfunction adjustHeights(\r\n bottom,\r\n top,\r\n minHeight,\r\n maxHeight,\r\n adjustHeightBottom,\r\n adjustHeightTop\r\n) {\r\n // bottom and top should be at WALL_INITIAL_MIN_HEIGHT and WALL_INITIAL_MAX_HEIGHT, respectively\r\n const adjustHeightNormal = Cartesian3.subtract(\r\n top,\r\n bottom,\r\n adjustHeightNormalScratch\r\n );\r\n Cartesian3.normalize(adjustHeightNormal, adjustHeightNormal);\r\n\r\n const distanceForBottom = minHeight - WALL_INITIAL_MIN_HEIGHT;\r\n let adjustHeightOffset = Cartesian3.multiplyByScalar(\r\n adjustHeightNormal,\r\n distanceForBottom,\r\n adjustHeightOffsetScratch\r\n );\r\n Cartesian3.add(bottom, adjustHeightOffset, adjustHeightBottom);\r\n\r\n const distanceForTop = maxHeight - WALL_INITIAL_MAX_HEIGHT;\r\n adjustHeightOffset = Cartesian3.multiplyByScalar(\r\n adjustHeightNormal,\r\n distanceForTop,\r\n adjustHeightOffsetScratch\r\n );\r\n Cartesian3.add(top, adjustHeightOffset, adjustHeightTop);\r\n}\r\n\r\nconst nudgeDirectionScratch = new Cartesian3();\r\nfunction nudgeXZ(start, end) {\r\n const startToXZdistance = Plane.getPointDistance(XZ_PLANE, start);\r\n const endToXZdistance = Plane.getPointDistance(XZ_PLANE, end);\r\n let offset = nudgeDirectionScratch;\r\n // Larger epsilon than what's used in GeometryPipeline, a centimeter in world space\r\n if (CesiumMath.equalsEpsilon(startToXZdistance, 0.0, CesiumMath.EPSILON2)) {\r\n offset = direction(end, start, offset);\r\n Cartesian3.multiplyByScalar(offset, CesiumMath.EPSILON2, offset);\r\n Cartesian3.add(start, offset, start);\r\n } else if (\r\n CesiumMath.equalsEpsilon(endToXZdistance, 0.0, CesiumMath.EPSILON2)\r\n ) {\r\n offset = direction(start, end, offset);\r\n Cartesian3.multiplyByScalar(offset, CesiumMath.EPSILON2, offset);\r\n Cartesian3.add(end, offset, end);\r\n }\r\n}\r\n\r\n// \"Nudge\" cartographic coordinates so start and end are on the same side of the IDL.\r\n// Nudge amounts are tiny, basically just an IDL flip.\r\n// Only used for 2D/CV.\r\nfunction nudgeCartographic(start, end) {\r\n const absStartLon = Math.abs(start.longitude);\r\n const absEndLon = Math.abs(end.longitude);\r\n if (\r\n CesiumMath.equalsEpsilon(absStartLon, CesiumMath.PI, CesiumMath.EPSILON11)\r\n ) {\r\n const endSign = CesiumMath.sign(end.longitude);\r\n start.longitude = endSign * (absStartLon - CesiumMath.EPSILON11);\r\n return 1;\r\n } else if (\r\n CesiumMath.equalsEpsilon(absEndLon, CesiumMath.PI, CesiumMath.EPSILON11)\r\n ) {\r\n const startSign = CesiumMath.sign(start.longitude);\r\n end.longitude = startSign * (absEndLon - CesiumMath.EPSILON11);\r\n return 2;\r\n }\r\n return 0;\r\n}\r\n\r\nconst startCartographicScratch = new Cartographic();\r\nconst endCartographicScratch = new Cartographic();\r\n\r\nconst segmentStartTopScratch = new Cartesian3();\r\nconst segmentEndTopScratch = new Cartesian3();\r\nconst segmentStartBottomScratch = new Cartesian3();\r\nconst segmentEndBottomScratch = new Cartesian3();\r\nconst segmentStartNormalScratch = new Cartesian3();\r\nconst segmentEndNormalScratch = new Cartesian3();\r\n\r\nconst getHeightCartographics = [\r\n startCartographicScratch,\r\n endCartographicScratch,\r\n];\r\nconst getHeightRectangleScratch = new Rectangle();\r\n\r\nconst adjustHeightStartTopScratch = new Cartesian3();\r\nconst adjustHeightEndTopScratch = new Cartesian3();\r\nconst adjustHeightStartBottomScratch = new Cartesian3();\r\nconst adjustHeightEndBottomScratch = new Cartesian3();\r\n\r\nconst segmentStart2DScratch = new Cartesian3();\r\nconst segmentEnd2DScratch = new Cartesian3();\r\nconst segmentStartNormal2DScratch = new Cartesian3();\r\nconst segmentEndNormal2DScratch = new Cartesian3();\r\n\r\nconst offsetScratch = new Cartesian3();\r\nconst startUpScratch = new Cartesian3();\r\nconst endUpScratch = new Cartesian3();\r\nconst rightScratch = new Cartesian3();\r\nconst startPlaneNormalScratch = new Cartesian3();\r\nconst endPlaneNormalScratch = new Cartesian3();\r\nconst encodeScratch = new EncodedCartesian3();\r\n\r\nconst encodeScratch2D = new EncodedCartesian3();\r\nconst forwardOffset2DScratch = new Cartesian3();\r\nconst right2DScratch = new Cartesian3();\r\n\r\nconst normalNudgeScratch = new Cartesian3();\r\n\r\nconst scratchBoundingSpheres = [new BoundingSphere(), new BoundingSphere()];\r\n\r\n// Winding order is reversed so each segment's volume is inside-out\r\nconst REFERENCE_INDICES = [\r\n 0,\r\n 2,\r\n 1,\r\n 0,\r\n 3,\r\n 2, // right\r\n 0,\r\n 7,\r\n 3,\r\n 0,\r\n 4,\r\n 7, // start\r\n 0,\r\n 5,\r\n 4,\r\n 0,\r\n 1,\r\n 5, // bottom\r\n 5,\r\n 7,\r\n 4,\r\n 5,\r\n 6,\r\n 7, // left\r\n 5,\r\n 2,\r\n 6,\r\n 5,\r\n 1,\r\n 2, // end\r\n 3,\r\n 6,\r\n 2,\r\n 3,\r\n 7,\r\n 6, // top\r\n];\r\nconst REFERENCE_INDICES_LENGTH = REFERENCE_INDICES.length;\r\n\r\n// Decompose the \"wall\" into a series of shadow volumes.\r\n// Each shadow volume's vertices encode a description of the line it contains,\r\n// including mitering planes at the end points, a plane along the line itself,\r\n// and attributes for computing length-wise texture coordinates.\r\nfunction generateGeometryAttributes(\r\n loop,\r\n projection,\r\n bottomPositionsArray,\r\n topPositionsArray,\r\n normalsArray,\r\n cartographicsArray,\r\n compute2dAttributes\r\n) {\r\n let i;\r\n let index;\r\n const ellipsoid = projection._ellipsoid;\r\n\r\n // Each segment will have 8 vertices\r\n const segmentCount = bottomPositionsArray.length / 3 - 1;\r\n const vertexCount = segmentCount * 8;\r\n const arraySizeVec4 = vertexCount * 4;\r\n const indexCount = segmentCount * 36;\r\n\r\n const indices =\r\n vertexCount > 65535\r\n ? new Uint32Array(indexCount)\r\n : new Uint16Array(indexCount);\r\n const positionsArray = new Float64Array(vertexCount * 3);\r\n\r\n const startHiAndForwardOffsetX = new Float32Array(arraySizeVec4);\r\n const startLoAndForwardOffsetY = new Float32Array(arraySizeVec4);\r\n const startNormalAndForwardOffsetZ = new Float32Array(arraySizeVec4);\r\n const endNormalAndTextureCoordinateNormalizationX = new Float32Array(\r\n arraySizeVec4\r\n );\r\n const rightNormalAndTextureCoordinateNormalizationY = new Float32Array(\r\n arraySizeVec4\r\n );\r\n\r\n let startHiLo2D;\r\n let offsetAndRight2D;\r\n let startEndNormals2D;\r\n let texcoordNormalization2D;\r\n\r\n if (compute2dAttributes) {\r\n startHiLo2D = new Float32Array(arraySizeVec4);\r\n offsetAndRight2D = new Float32Array(arraySizeVec4);\r\n startEndNormals2D = new Float32Array(arraySizeVec4);\r\n texcoordNormalization2D = new Float32Array(vertexCount * 2);\r\n }\r\n\r\n /*** Compute total lengths for texture coordinate normalization ***/\r\n // 2D\r\n const cartographicsLength = cartographicsArray.length / 2;\r\n let length2D = 0.0;\r\n\r\n const startCartographic = startCartographicScratch;\r\n startCartographic.height = 0.0;\r\n const endCartographic = endCartographicScratch;\r\n endCartographic.height = 0.0;\r\n\r\n let segmentStartCartesian = segmentStartTopScratch;\r\n let segmentEndCartesian = segmentEndTopScratch;\r\n\r\n if (compute2dAttributes) {\r\n index = 0;\r\n for (i = 1; i < cartographicsLength; i++) {\r\n // Don't clone anything from previous segment b/c possible IDL touch\r\n startCartographic.latitude = cartographicsArray[index];\r\n startCartographic.longitude = cartographicsArray[index + 1];\r\n endCartographic.latitude = cartographicsArray[index + 2];\r\n endCartographic.longitude = cartographicsArray[index + 3];\r\n\r\n segmentStartCartesian = projection.project(\r\n startCartographic,\r\n segmentStartCartesian\r\n );\r\n segmentEndCartesian = projection.project(\r\n endCartographic,\r\n segmentEndCartesian\r\n );\r\n length2D += Cartesian3.distance(\r\n segmentStartCartesian,\r\n segmentEndCartesian\r\n );\r\n index += 2;\r\n }\r\n }\r\n\r\n // 3D\r\n const positionsLength = topPositionsArray.length / 3;\r\n segmentEndCartesian = Cartesian3.unpack(\r\n topPositionsArray,\r\n 0,\r\n segmentEndCartesian\r\n );\r\n let length3D = 0.0;\r\n\r\n index = 3;\r\n for (i = 1; i < positionsLength; i++) {\r\n segmentStartCartesian = Cartesian3.clone(\r\n segmentEndCartesian,\r\n segmentStartCartesian\r\n );\r\n segmentEndCartesian = Cartesian3.unpack(\r\n topPositionsArray,\r\n index,\r\n segmentEndCartesian\r\n );\r\n length3D += Cartesian3.distance(segmentStartCartesian, segmentEndCartesian);\r\n index += 3;\r\n }\r\n\r\n /*** Generate segments ***/\r\n let j;\r\n index = 3;\r\n let cartographicsIndex = 0;\r\n let vec2sWriteIndex = 0;\r\n let vec3sWriteIndex = 0;\r\n let vec4sWriteIndex = 0;\r\n let miterBroken = false;\r\n\r\n let endBottom = Cartesian3.unpack(\r\n bottomPositionsArray,\r\n 0,\r\n segmentEndBottomScratch\r\n );\r\n let endTop = Cartesian3.unpack(topPositionsArray, 0, segmentEndTopScratch);\r\n let endGeometryNormal = Cartesian3.unpack(\r\n normalsArray,\r\n 0,\r\n segmentEndNormalScratch\r\n );\r\n\r\n if (loop) {\r\n const preEndBottom = Cartesian3.unpack(\r\n bottomPositionsArray,\r\n bottomPositionsArray.length - 6,\r\n segmentStartBottomScratch\r\n );\r\n if (breakMiter(endGeometryNormal, preEndBottom, endBottom, endTop)) {\r\n // Miter broken as if for the last point in the loop, needs to be inverted for first point (clone of endBottom)\r\n endGeometryNormal = Cartesian3.negate(\r\n endGeometryNormal,\r\n endGeometryNormal\r\n );\r\n }\r\n }\r\n\r\n let lengthSoFar3D = 0.0;\r\n let lengthSoFar2D = 0.0;\r\n\r\n // For translating bounding volume\r\n let sumHeights = 0.0;\r\n\r\n for (i = 0; i < segmentCount; i++) {\r\n const startBottom = Cartesian3.clone(endBottom, segmentStartBottomScratch);\r\n const startTop = Cartesian3.clone(endTop, segmentStartTopScratch);\r\n let startGeometryNormal = Cartesian3.clone(\r\n endGeometryNormal,\r\n segmentStartNormalScratch\r\n );\r\n\r\n if (miterBroken) {\r\n startGeometryNormal = Cartesian3.negate(\r\n startGeometryNormal,\r\n startGeometryNormal\r\n );\r\n }\r\n\r\n endBottom = Cartesian3.unpack(\r\n bottomPositionsArray,\r\n index,\r\n segmentEndBottomScratch\r\n );\r\n endTop = Cartesian3.unpack(topPositionsArray, index, segmentEndTopScratch);\r\n endGeometryNormal = Cartesian3.unpack(\r\n normalsArray,\r\n index,\r\n segmentEndNormalScratch\r\n );\r\n\r\n miterBroken = breakMiter(endGeometryNormal, startBottom, endBottom, endTop);\r\n\r\n // 2D - don't clone anything from previous segment b/c possible IDL touch\r\n startCartographic.latitude = cartographicsArray[cartographicsIndex];\r\n startCartographic.longitude = cartographicsArray[cartographicsIndex + 1];\r\n endCartographic.latitude = cartographicsArray[cartographicsIndex + 2];\r\n endCartographic.longitude = cartographicsArray[cartographicsIndex + 3];\r\n let start2D;\r\n let end2D;\r\n let startGeometryNormal2D;\r\n let endGeometryNormal2D;\r\n\r\n if (compute2dAttributes) {\r\n const nudgeResult = nudgeCartographic(startCartographic, endCartographic);\r\n start2D = projection.project(startCartographic, segmentStart2DScratch);\r\n end2D = projection.project(endCartographic, segmentEnd2DScratch);\r\n const direction2D = direction(end2D, start2D, forwardOffset2DScratch);\r\n direction2D.y = Math.abs(direction2D.y);\r\n\r\n startGeometryNormal2D = segmentStartNormal2DScratch;\r\n endGeometryNormal2D = segmentEndNormal2DScratch;\r\n if (\r\n nudgeResult === 0 ||\r\n Cartesian3.dot(direction2D, Cartesian3.UNIT_Y) > MITER_BREAK_SMALL\r\n ) {\r\n // No nudge - project the original normal\r\n // Or, if the line's angle relative to the IDL is very acute,\r\n // in which case snapping will produce oddly shaped volumes.\r\n startGeometryNormal2D = projectNormal(\r\n projection,\r\n startCartographic,\r\n startGeometryNormal,\r\n start2D,\r\n segmentStartNormal2DScratch\r\n );\r\n endGeometryNormal2D = projectNormal(\r\n projection,\r\n endCartographic,\r\n endGeometryNormal,\r\n end2D,\r\n segmentEndNormal2DScratch\r\n );\r\n } else if (nudgeResult === 1) {\r\n // Start is close to IDL - snap start normal to align with IDL\r\n endGeometryNormal2D = projectNormal(\r\n projection,\r\n endCartographic,\r\n endGeometryNormal,\r\n end2D,\r\n segmentEndNormal2DScratch\r\n );\r\n startGeometryNormal2D.x = 0.0;\r\n // If start longitude is negative and end longitude is less negative, relative right is unit -Y\r\n // If start longitude is positive and end longitude is less positive, relative right is unit +Y\r\n startGeometryNormal2D.y = CesiumMath.sign(\r\n startCartographic.longitude - Math.abs(endCartographic.longitude)\r\n );\r\n startGeometryNormal2D.z = 0.0;\r\n } else {\r\n // End is close to IDL - snap end normal to align with IDL\r\n startGeometryNormal2D = projectNormal(\r\n projection,\r\n startCartographic,\r\n startGeometryNormal,\r\n start2D,\r\n segmentStartNormal2DScratch\r\n );\r\n endGeometryNormal2D.x = 0.0;\r\n // If end longitude is negative and start longitude is less negative, relative right is unit Y\r\n // If end longitude is positive and start longitude is less positive, relative right is unit -Y\r\n endGeometryNormal2D.y = CesiumMath.sign(\r\n startCartographic.longitude - endCartographic.longitude\r\n );\r\n endGeometryNormal2D.z = 0.0;\r\n }\r\n }\r\n\r\n /****************************************\r\n * Geometry descriptors of a \"line on terrain,\"\r\n * as opposed to the \"shadow volume used to draw\r\n * the line on terrain\":\r\n * - position of start + offset to end\r\n * - start, end, and right-facing planes\r\n * - encoded texture coordinate offsets\r\n ****************************************/\r\n\r\n /* 3D */\r\n const segmentLength3D = Cartesian3.distance(startTop, endTop);\r\n\r\n const encodedStart = EncodedCartesian3.fromCartesian(\r\n startBottom,\r\n encodeScratch\r\n );\r\n const forwardOffset = Cartesian3.subtract(\r\n endBottom,\r\n startBottom,\r\n offsetScratch\r\n );\r\n const forward = Cartesian3.normalize(forwardOffset, rightScratch);\r\n\r\n let startUp = Cartesian3.subtract(startTop, startBottom, startUpScratch);\r\n startUp = Cartesian3.normalize(startUp, startUp);\r\n let rightNormal = Cartesian3.cross(forward, startUp, rightScratch);\r\n rightNormal = Cartesian3.normalize(rightNormal, rightNormal);\r\n\r\n let startPlaneNormal = Cartesian3.cross(\r\n startUp,\r\n startGeometryNormal,\r\n startPlaneNormalScratch\r\n );\r\n startPlaneNormal = Cartesian3.normalize(startPlaneNormal, startPlaneNormal);\r\n\r\n let endUp = Cartesian3.subtract(endTop, endBottom, endUpScratch);\r\n endUp = Cartesian3.normalize(endUp, endUp);\r\n let endPlaneNormal = Cartesian3.cross(\r\n endGeometryNormal,\r\n endUp,\r\n endPlaneNormalScratch\r\n );\r\n endPlaneNormal = Cartesian3.normalize(endPlaneNormal, endPlaneNormal);\r\n\r\n const texcoordNormalization3DX = segmentLength3D / length3D;\r\n const texcoordNormalization3DY = lengthSoFar3D / length3D;\r\n\r\n /* 2D */\r\n let segmentLength2D = 0.0;\r\n let encodedStart2D;\r\n let forwardOffset2D;\r\n let right2D;\r\n let texcoordNormalization2DX = 0.0;\r\n let texcoordNormalization2DY = 0.0;\r\n if (compute2dAttributes) {\r\n segmentLength2D = Cartesian3.distance(start2D, end2D);\r\n\r\n encodedStart2D = EncodedCartesian3.fromCartesian(\r\n start2D,\r\n encodeScratch2D\r\n );\r\n forwardOffset2D = Cartesian3.subtract(\r\n end2D,\r\n start2D,\r\n forwardOffset2DScratch\r\n );\r\n\r\n // Right direction is just forward direction rotated by -90 degrees around Z\r\n // Similarly with plane normals\r\n right2D = Cartesian3.normalize(forwardOffset2D, right2DScratch);\r\n const swap = right2D.x;\r\n right2D.x = right2D.y;\r\n right2D.y = -swap;\r\n\r\n texcoordNormalization2DX = segmentLength2D / length2D;\r\n texcoordNormalization2DY = lengthSoFar2D / length2D;\r\n }\r\n /** Pack **/\r\n for (j = 0; j < 8; j++) {\r\n const vec4Index = vec4sWriteIndex + j * 4;\r\n const vec2Index = vec2sWriteIndex + j * 2;\r\n const wIndex = vec4Index + 3;\r\n\r\n // Encode sidedness of vertex relative to right plane in texture coordinate normalization X,\r\n // whether vertex is top or bottom of volume in sign/magnitude of normalization Y.\r\n const rightPlaneSide = j < 4 ? 1.0 : -1.0;\r\n const topBottomSide =\r\n j === 2 || j === 3 || j === 6 || j === 7 ? 1.0 : -1.0;\r\n\r\n // 3D\r\n Cartesian3.pack(encodedStart.high, startHiAndForwardOffsetX, vec4Index);\r\n startHiAndForwardOffsetX[wIndex] = forwardOffset.x;\r\n\r\n Cartesian3.pack(encodedStart.low, startLoAndForwardOffsetY, vec4Index);\r\n startLoAndForwardOffsetY[wIndex] = forwardOffset.y;\r\n\r\n Cartesian3.pack(\r\n startPlaneNormal,\r\n startNormalAndForwardOffsetZ,\r\n vec4Index\r\n );\r\n startNormalAndForwardOffsetZ[wIndex] = forwardOffset.z;\r\n\r\n Cartesian3.pack(\r\n endPlaneNormal,\r\n endNormalAndTextureCoordinateNormalizationX,\r\n vec4Index\r\n );\r\n endNormalAndTextureCoordinateNormalizationX[wIndex] =\r\n texcoordNormalization3DX * rightPlaneSide;\r\n\r\n Cartesian3.pack(\r\n rightNormal,\r\n rightNormalAndTextureCoordinateNormalizationY,\r\n vec4Index\r\n );\r\n\r\n let texcoordNormalization = texcoordNormalization3DY * topBottomSide;\r\n if (texcoordNormalization === 0.0 && topBottomSide < 0.0) {\r\n texcoordNormalization = 9.0; // some value greater than 1.0\r\n }\r\n rightNormalAndTextureCoordinateNormalizationY[\r\n wIndex\r\n ] = texcoordNormalization;\r\n\r\n // 2D\r\n if (compute2dAttributes) {\r\n startHiLo2D[vec4Index] = encodedStart2D.high.x;\r\n startHiLo2D[vec4Index + 1] = encodedStart2D.high.y;\r\n startHiLo2D[vec4Index + 2] = encodedStart2D.low.x;\r\n startHiLo2D[vec4Index + 3] = encodedStart2D.low.y;\r\n\r\n startEndNormals2D[vec4Index] = -startGeometryNormal2D.y;\r\n startEndNormals2D[vec4Index + 1] = startGeometryNormal2D.x;\r\n startEndNormals2D[vec4Index + 2] = endGeometryNormal2D.y;\r\n startEndNormals2D[vec4Index + 3] = -endGeometryNormal2D.x;\r\n\r\n offsetAndRight2D[vec4Index] = forwardOffset2D.x;\r\n offsetAndRight2D[vec4Index + 1] = forwardOffset2D.y;\r\n offsetAndRight2D[vec4Index + 2] = right2D.x;\r\n offsetAndRight2D[vec4Index + 3] = right2D.y;\r\n\r\n texcoordNormalization2D[vec2Index] =\r\n texcoordNormalization2DX * rightPlaneSide;\r\n\r\n texcoordNormalization = texcoordNormalization2DY * topBottomSide;\r\n if (texcoordNormalization === 0.0 && topBottomSide < 0.0) {\r\n texcoordNormalization = 9.0; // some value greater than 1.0\r\n }\r\n texcoordNormalization2D[vec2Index + 1] = texcoordNormalization;\r\n }\r\n }\r\n\r\n // Adjust height of volume in 3D\r\n const adjustHeightStartBottom = adjustHeightStartBottomScratch;\r\n const adjustHeightEndBottom = adjustHeightEndBottomScratch;\r\n const adjustHeightStartTop = adjustHeightStartTopScratch;\r\n const adjustHeightEndTop = adjustHeightEndTopScratch;\r\n\r\n const getHeightsRectangle = Rectangle.fromCartographicArray(\r\n getHeightCartographics,\r\n getHeightRectangleScratch\r\n );\r\n const minMaxHeights = ApproximateTerrainHeights.getMinimumMaximumHeights(\r\n getHeightsRectangle,\r\n ellipsoid\r\n );\r\n const minHeight = minMaxHeights.minimumTerrainHeight;\r\n const maxHeight = minMaxHeights.maximumTerrainHeight;\r\n\r\n sumHeights += minHeight;\r\n sumHeights += maxHeight;\r\n\r\n adjustHeights(\r\n startBottom,\r\n startTop,\r\n minHeight,\r\n maxHeight,\r\n adjustHeightStartBottom,\r\n adjustHeightStartTop\r\n );\r\n adjustHeights(\r\n endBottom,\r\n endTop,\r\n minHeight,\r\n maxHeight,\r\n adjustHeightEndBottom,\r\n adjustHeightEndTop\r\n );\r\n\r\n // Nudge the positions away from the \"polyline\" a little bit to prevent errors in GeometryPipeline\r\n let normalNudge = Cartesian3.multiplyByScalar(\r\n rightNormal,\r\n CesiumMath.EPSILON5,\r\n normalNudgeScratch\r\n );\r\n Cartesian3.add(\r\n adjustHeightStartBottom,\r\n normalNudge,\r\n adjustHeightStartBottom\r\n );\r\n Cartesian3.add(adjustHeightEndBottom, normalNudge, adjustHeightEndBottom);\r\n Cartesian3.add(adjustHeightStartTop, normalNudge, adjustHeightStartTop);\r\n Cartesian3.add(adjustHeightEndTop, normalNudge, adjustHeightEndTop);\r\n\r\n // If the segment is very close to the XZ plane, nudge the vertices slightly to avoid touching it.\r\n nudgeXZ(adjustHeightStartBottom, adjustHeightEndBottom);\r\n nudgeXZ(adjustHeightStartTop, adjustHeightEndTop);\r\n\r\n Cartesian3.pack(adjustHeightStartBottom, positionsArray, vec3sWriteIndex);\r\n Cartesian3.pack(adjustHeightEndBottom, positionsArray, vec3sWriteIndex + 3);\r\n Cartesian3.pack(adjustHeightEndTop, positionsArray, vec3sWriteIndex + 6);\r\n Cartesian3.pack(adjustHeightStartTop, positionsArray, vec3sWriteIndex + 9);\r\n\r\n normalNudge = Cartesian3.multiplyByScalar(\r\n rightNormal,\r\n -2.0 * CesiumMath.EPSILON5,\r\n normalNudgeScratch\r\n );\r\n Cartesian3.add(\r\n adjustHeightStartBottom,\r\n normalNudge,\r\n adjustHeightStartBottom\r\n );\r\n Cartesian3.add(adjustHeightEndBottom, normalNudge, adjustHeightEndBottom);\r\n Cartesian3.add(adjustHeightStartTop, normalNudge, adjustHeightStartTop);\r\n Cartesian3.add(adjustHeightEndTop, normalNudge, adjustHeightEndTop);\r\n\r\n nudgeXZ(adjustHeightStartBottom, adjustHeightEndBottom);\r\n nudgeXZ(adjustHeightStartTop, adjustHeightEndTop);\r\n\r\n Cartesian3.pack(\r\n adjustHeightStartBottom,\r\n positionsArray,\r\n vec3sWriteIndex + 12\r\n );\r\n Cartesian3.pack(\r\n adjustHeightEndBottom,\r\n positionsArray,\r\n vec3sWriteIndex + 15\r\n );\r\n Cartesian3.pack(adjustHeightEndTop, positionsArray, vec3sWriteIndex + 18);\r\n Cartesian3.pack(adjustHeightStartTop, positionsArray, vec3sWriteIndex + 21);\r\n\r\n cartographicsIndex += 2;\r\n index += 3;\r\n\r\n vec2sWriteIndex += 16;\r\n vec3sWriteIndex += 24;\r\n vec4sWriteIndex += 32;\r\n\r\n lengthSoFar3D += segmentLength3D;\r\n lengthSoFar2D += segmentLength2D;\r\n }\r\n\r\n index = 0;\r\n let indexOffset = 0;\r\n for (i = 0; i < segmentCount; i++) {\r\n for (j = 0; j < REFERENCE_INDICES_LENGTH; j++) {\r\n indices[index + j] = REFERENCE_INDICES[j] + indexOffset;\r\n }\r\n indexOffset += 8;\r\n index += REFERENCE_INDICES_LENGTH;\r\n }\r\n\r\n const boundingSpheres = scratchBoundingSpheres;\r\n BoundingSphere.fromVertices(\r\n bottomPositionsArray,\r\n Cartesian3.ZERO,\r\n 3,\r\n boundingSpheres[0]\r\n );\r\n BoundingSphere.fromVertices(\r\n topPositionsArray,\r\n Cartesian3.ZERO,\r\n 3,\r\n boundingSpheres[1]\r\n );\r\n const boundingSphere = BoundingSphere.fromBoundingSpheres(boundingSpheres);\r\n\r\n // Adjust bounding sphere height and radius to cover more of the volume\r\n boundingSphere.radius += sumHeights / (segmentCount * 2.0);\r\n\r\n const attributes = {\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n normalize: false,\r\n values: positionsArray,\r\n }),\r\n startHiAndForwardOffsetX: getVec4GeometryAttribute(\r\n startHiAndForwardOffsetX\r\n ),\r\n startLoAndForwardOffsetY: getVec4GeometryAttribute(\r\n startLoAndForwardOffsetY\r\n ),\r\n startNormalAndForwardOffsetZ: getVec4GeometryAttribute(\r\n startNormalAndForwardOffsetZ\r\n ),\r\n endNormalAndTextureCoordinateNormalizationX: getVec4GeometryAttribute(\r\n endNormalAndTextureCoordinateNormalizationX\r\n ),\r\n rightNormalAndTextureCoordinateNormalizationY: getVec4GeometryAttribute(\r\n rightNormalAndTextureCoordinateNormalizationY\r\n ),\r\n };\r\n\r\n if (compute2dAttributes) {\r\n attributes.startHiLo2D = getVec4GeometryAttribute(startHiLo2D);\r\n attributes.offsetAndRight2D = getVec4GeometryAttribute(offsetAndRight2D);\r\n attributes.startEndNormals2D = getVec4GeometryAttribute(startEndNormals2D);\r\n attributes.texcoordNormalization2D = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n normalize: false,\r\n values: texcoordNormalization2D,\r\n });\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n boundingSphere: boundingSphere,\r\n });\r\n}\r\n\r\nfunction getVec4GeometryAttribute(typedArray) {\r\n return new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 4,\r\n normalize: false,\r\n values: typedArray,\r\n });\r\n}\r\n\r\n/**\r\n * Approximates an ellipsoid-tangent vector in 2D by projecting the end point into 2D.\r\n * Exposed for testing.\r\n *\r\n * @param {MapProjection} projection Map Projection for projecting coordinates to 2D.\r\n * @param {Cartographic} cartographic The cartographic origin point of the normal.\r\n * Used to check if the normal crosses the IDL during projection.\r\n * @param {Cartesian3} normal The normal in 3D.\r\n * @param {Cartesian3} projectedPosition The projected origin point of the normal in 2D.\r\n * @param {Cartesian3} result Result parameter on which to store the projected normal.\r\n * @private\r\n */\r\nGroundPolylineGeometry._projectNormal = projectNormal;\r\nexport default GroundPolylineGeometry;\r\n","import ApproximateTerrainHeights from \"../Core/ApproximateTerrainHeights.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport GroundPolylineGeometry from \"../Core/GroundPolylineGeometry.js\";\r\n\r\nfunction createGroundPolylineGeometry(groundPolylineGeometry, offset) {\r\n return ApproximateTerrainHeights.initialize().then(function () {\r\n if (defined(offset)) {\r\n groundPolylineGeometry = GroundPolylineGeometry.unpack(\r\n groundPolylineGeometry,\r\n offset\r\n );\r\n }\r\n return GroundPolylineGeometry.createGeometry(groundPolylineGeometry);\r\n });\r\n}\r\nexport default createGroundPolylineGeometry;\r\n"],"names":["defaultValue","Ellipsoid","Rectangle","GeographicProjection","Check","CesiumMath","defined","Cartesian2","Cartesian3","Cartographic","BoundingSphere","Resource","buildModuleUrl","DeveloperError","WebMercatorProjection","ArcType","EllipsoidGeodesic","EllipsoidRhumbLine","Plane","IntersectionTests","arrayRemoveDuplicates","Matrix3","Quaternion","EncodedCartesian3","ApproximateTerrainHeights","GeometryAttribute","ComponentDatatype","Geometry"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createPlaneGeometry.js b/debug/cesium/Workers/createPlaneGeometry.js deleted file mode 100644 index eda36e7..0000000 --- a/debug/cesium/Workers/createPlaneGeometry.js +++ /dev/null @@ -1,276 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './VertexFormat-f2d74c96', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29'], (function (defaultValue, Transforms, Matrix3, Check, ComponentDatatype, GeometryAttribute, GeometryAttributes, VertexFormat, Math$1, Matrix2, RuntimeError, combine, WebGLConstants) { 'use strict'; - - /** - * Describes geometry representing a plane centered at the origin, with a unit width and length. - * - * @alias PlaneGeometry - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * - * @example - * const planeGeometry = new Cesium.PlaneGeometry({ - * vertexFormat : Cesium.VertexFormat.POSITION_ONLY - * }); - */ - function PlaneGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - - this._vertexFormat = vertexFormat; - this._workerName = "createPlaneGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - PlaneGeometry.packedLength = VertexFormat.VertexFormat.packedLength; - - /** - * Stores the provided instance into the provided array. - * - * @param {PlaneGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - PlaneGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - - return array; - }; - - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - vertexFormat: scratchVertexFormat, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PlaneGeometry} [result] The object into which to store the result. - * @returns {PlaneGeometry} The modified result parameter or a new PlaneGeometry instance if one was not provided. - */ - PlaneGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - - if (!defaultValue.defined(result)) { - return new PlaneGeometry(scratchOptions); - } - - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - - return result; - }; - - const min = new Matrix3.Cartesian3(-0.5, -0.5, 0.0); - const max = new Matrix3.Cartesian3(0.5, 0.5, 0.0); - - /** - * Computes the geometric representation of a plane, including its vertices, indices, and a bounding sphere. - * - * @param {PlaneGeometry} planeGeometry A description of the plane. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - PlaneGeometry.createGeometry = function (planeGeometry) { - const vertexFormat = planeGeometry._vertexFormat; - - const attributes = new GeometryAttributes.GeometryAttributes(); - let indices; - let positions; - - if (vertexFormat.position) { - // 4 corner points. Duplicated 3 times each for each incident edge/face. - positions = new Float64Array(4 * 3); - - // +z face - positions[0] = min.x; - positions[1] = min.y; - positions[2] = 0.0; - positions[3] = max.x; - positions[4] = min.y; - positions[5] = 0.0; - positions[6] = max.x; - positions[7] = max.y; - positions[8] = 0.0; - positions[9] = min.x; - positions[10] = max.y; - positions[11] = 0.0; - - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - - if (vertexFormat.normal) { - const normals = new Float32Array(4 * 3); - - // +z face - normals[0] = 0.0; - normals[1] = 0.0; - normals[2] = 1.0; - normals[3] = 0.0; - normals[4] = 0.0; - normals[5] = 1.0; - normals[6] = 0.0; - normals[7] = 0.0; - normals[8] = 1.0; - normals[9] = 0.0; - normals[10] = 0.0; - normals[11] = 1.0; - - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.st) { - const texCoords = new Float32Array(4 * 2); - - // +z face - texCoords[0] = 0.0; - texCoords[1] = 0.0; - texCoords[2] = 1.0; - texCoords[3] = 0.0; - texCoords[4] = 1.0; - texCoords[5] = 1.0; - texCoords[6] = 0.0; - texCoords[7] = 1.0; - - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: texCoords, - }); - } - - if (vertexFormat.tangent) { - const tangents = new Float32Array(4 * 3); - - // +z face - tangents[0] = 1.0; - tangents[1] = 0.0; - tangents[2] = 0.0; - tangents[3] = 1.0; - tangents[4] = 0.0; - tangents[5] = 0.0; - tangents[6] = 1.0; - tangents[7] = 0.0; - tangents[8] = 0.0; - tangents[9] = 1.0; - tangents[10] = 0.0; - tangents[11] = 0.0; - - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - const bitangents = new Float32Array(4 * 3); - - // +z face - bitangents[0] = 0.0; - bitangents[1] = 1.0; - bitangents[2] = 0.0; - bitangents[3] = 0.0; - bitangents[4] = 1.0; - bitangents[5] = 0.0; - bitangents[6] = 0.0; - bitangents[7] = 1.0; - bitangents[8] = 0.0; - bitangents[9] = 0.0; - bitangents[10] = 1.0; - bitangents[11] = 0.0; - - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - - // 2 triangles - indices = new Uint16Array(2 * 3); - - // +z face - indices[0] = 0; - indices[1] = 1; - indices[2] = 2; - indices[3] = 0; - indices[4] = 2; - indices[5] = 3; - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: new Transforms.BoundingSphere(Matrix3.Cartesian3.ZERO, Math.sqrt(2.0)), - }); - }; - - function createPlaneGeometry(planeGeometry, offset) { - if (defaultValue.defined(offset)) { - planeGeometry = PlaneGeometry.unpack(planeGeometry, offset); - } - return PlaneGeometry.createGeometry(planeGeometry); - } - - return createPlaneGeometry; - -})); -//# sourceMappingURL=createPlaneGeometry.js.map diff --git a/debug/cesium/Workers/createPlaneGeometry.js.map b/debug/cesium/Workers/createPlaneGeometry.js.map deleted file mode 100644 index 6523dbd..0000000 --- a/debug/cesium/Workers/createPlaneGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createPlaneGeometry.js","sources":["../../../Source/Core/PlaneGeometry.js","../../../Source/WorkersES6/createPlaneGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\n/**\r\n * Describes geometry representing a plane centered at the origin, with a unit width and length.\r\n *\r\n * @alias PlaneGeometry\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n *\r\n * @example\r\n * const planeGeometry = new Cesium.PlaneGeometry({\r\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY\r\n * });\r\n */\r\nfunction PlaneGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n\r\n this._vertexFormat = vertexFormat;\r\n this._workerName = \"createPlaneGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nPlaneGeometry.packedLength = VertexFormat.packedLength;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PlaneGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nPlaneGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n vertexFormat: scratchVertexFormat,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PlaneGeometry} [result] The object into which to store the result.\r\n * @returns {PlaneGeometry} The modified result parameter or a new PlaneGeometry instance if one was not provided.\r\n */\r\nPlaneGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n\r\n if (!defined(result)) {\r\n return new PlaneGeometry(scratchOptions);\r\n }\r\n\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n\r\n return result;\r\n};\r\n\r\nconst min = new Cartesian3(-0.5, -0.5, 0.0);\r\nconst max = new Cartesian3(0.5, 0.5, 0.0);\r\n\r\n/**\r\n * Computes the geometric representation of a plane, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {PlaneGeometry} planeGeometry A description of the plane.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nPlaneGeometry.createGeometry = function (planeGeometry) {\r\n const vertexFormat = planeGeometry._vertexFormat;\r\n\r\n const attributes = new GeometryAttributes();\r\n let indices;\r\n let positions;\r\n\r\n if (vertexFormat.position) {\r\n // 4 corner points. Duplicated 3 times each for each incident edge/face.\r\n positions = new Float64Array(4 * 3);\r\n\r\n // +z face\r\n positions[0] = min.x;\r\n positions[1] = min.y;\r\n positions[2] = 0.0;\r\n positions[3] = max.x;\r\n positions[4] = min.y;\r\n positions[5] = 0.0;\r\n positions[6] = max.x;\r\n positions[7] = max.y;\r\n positions[8] = 0.0;\r\n positions[9] = min.x;\r\n positions[10] = max.y;\r\n positions[11] = 0.0;\r\n\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n\r\n if (vertexFormat.normal) {\r\n const normals = new Float32Array(4 * 3);\r\n\r\n // +z face\r\n normals[0] = 0.0;\r\n normals[1] = 0.0;\r\n normals[2] = 1.0;\r\n normals[3] = 0.0;\r\n normals[4] = 0.0;\r\n normals[5] = 1.0;\r\n normals[6] = 0.0;\r\n normals[7] = 0.0;\r\n normals[8] = 1.0;\r\n normals[9] = 0.0;\r\n normals[10] = 0.0;\r\n normals[11] = 1.0;\r\n\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.st) {\r\n const texCoords = new Float32Array(4 * 2);\r\n\r\n // +z face\r\n texCoords[0] = 0.0;\r\n texCoords[1] = 0.0;\r\n texCoords[2] = 1.0;\r\n texCoords[3] = 0.0;\r\n texCoords[4] = 1.0;\r\n texCoords[5] = 1.0;\r\n texCoords[6] = 0.0;\r\n texCoords[7] = 1.0;\r\n\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: texCoords,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n const tangents = new Float32Array(4 * 3);\r\n\r\n // +z face\r\n tangents[0] = 1.0;\r\n tangents[1] = 0.0;\r\n tangents[2] = 0.0;\r\n tangents[3] = 1.0;\r\n tangents[4] = 0.0;\r\n tangents[5] = 0.0;\r\n tangents[6] = 1.0;\r\n tangents[7] = 0.0;\r\n tangents[8] = 0.0;\r\n tangents[9] = 1.0;\r\n tangents[10] = 0.0;\r\n tangents[11] = 0.0;\r\n\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n const bitangents = new Float32Array(4 * 3);\r\n\r\n // +z face\r\n bitangents[0] = 0.0;\r\n bitangents[1] = 1.0;\r\n bitangents[2] = 0.0;\r\n bitangents[3] = 0.0;\r\n bitangents[4] = 1.0;\r\n bitangents[5] = 0.0;\r\n bitangents[6] = 0.0;\r\n bitangents[7] = 1.0;\r\n bitangents[8] = 0.0;\r\n bitangents[9] = 0.0;\r\n bitangents[10] = 1.0;\r\n bitangents[11] = 0.0;\r\n\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n\r\n // 2 triangles\r\n indices = new Uint16Array(2 * 3);\r\n\r\n // +z face\r\n indices[0] = 0;\r\n indices[1] = 1;\r\n indices[2] = 2;\r\n indices[3] = 0;\r\n indices[4] = 2;\r\n indices[5] = 3;\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: new BoundingSphere(Cartesian3.ZERO, Math.sqrt(2.0)),\r\n });\r\n};\r\nexport default PlaneGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport PlaneGeometry from \"../Core/PlaneGeometry.js\";\r\n\r\nfunction createPlaneGeometry(planeGeometry, offset) {\r\n if (defined(offset)) {\r\n planeGeometry = PlaneGeometry.unpack(planeGeometry, offset);\r\n }\r\n return PlaneGeometry.createGeometry(planeGeometry);\r\n}\r\nexport default createPlaneGeometry;\r\n"],"names":["defaultValue","VertexFormat","Check","defined","Cartesian3","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAYA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,aAAa,CAAC,OAAO,EAAE;EAChC,EAAE,OAAO,GAAGA,yBAAY,CAAC,OAAO,EAAEA,yBAAY,CAAC,YAAY,CAAC,CAAC;AAC7D;EACA,EAAE,MAAM,YAAY,GAAGA,yBAAY,CAAC,OAAO,CAAC,YAAY,EAAEC,yBAAY,CAAC,OAAO,CAAC,CAAC;AAChF;EACA,EAAE,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;EACpC,EAAE,IAAI,CAAC,WAAW,GAAG,qBAAqB,CAAC;EAC3C,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,aAAa,CAAC,YAAY,GAAGA,yBAAY,CAAC,YAAY,CAAC;AACvD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;EAC5D;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC,EAAEA,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC;AACA;EACA,EAAE,aAAa,GAAGF,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAEC,yBAAY,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;AAC/D;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC,CAAC;AACF;EACA,MAAM,mBAAmB,GAAG,IAAIA,yBAAY,EAAE,CAAC;EAC/C,MAAM,cAAc,GAAG;EACvB,EAAE,YAAY,EAAE,mBAAmB;EACnC,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;EAC/D;EACA,EAAEC,WAAK,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EAChC;AACA;EACA,EAAE,aAAa,GAAGF,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAE,MAAM,YAAY,GAAGC,yBAAY,CAAC,MAAM;EAC1C,IAAI,KAAK;EACT,IAAI,aAAa;EACjB,IAAI,mBAAmB;EACvB,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAACE,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,aAAa,CAAC,cAAc,CAAC,CAAC;EAC7C,GAAG;AACH;EACA,EAAE,MAAM,CAAC,aAAa,GAAGF,yBAAY,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;AAChF;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAM,GAAG,GAAG,IAAIG,kBAAU,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;EAC5C,MAAM,GAAG,GAAG,IAAIA,kBAAU,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC1C;EACA;EACA;EACA;EACA;EACA;EACA;EACA,aAAa,CAAC,cAAc,GAAG,UAAU,aAAa,EAAE;EACxD,EAAE,MAAM,YAAY,GAAG,aAAa,CAAC,aAAa,CAAC;AACnD;EACA,EAAE,MAAM,UAAU,GAAG,IAAIC,qCAAkB,EAAE,CAAC;EAC9C,EAAE,IAAI,OAAO,CAAC;EACd,EAAE,IAAI,SAAS,CAAC;AAChB;EACA,EAAE,IAAI,YAAY,CAAC,QAAQ,EAAE;EAC7B;EACA,IAAI,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC;EACA;EACA,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACzB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACzB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACzB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACzB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACzB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACzB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EACzB,IAAI,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;EAC1B,IAAI,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACxB;EACA,IAAI,UAAU,CAAC,QAAQ,GAAG,IAAIC,mCAAiB,CAAC;EAChD,MAAM,iBAAiB,EAAEC,mCAAiB,CAAC,MAAM;EACjD,MAAM,sBAAsB,EAAE,CAAC;EAC/B,MAAM,MAAM,EAAE,SAAS;EACvB,KAAK,CAAC,CAAC;AACP;EACA,IAAI,IAAI,YAAY,CAAC,MAAM,EAAE;EAC7B,MAAM,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C;EACA;EACA,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACvB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,OAAO,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACxB;EACA,MAAM,UAAU,CAAC,MAAM,GAAG,IAAID,mCAAiB,CAAC;EAChD,QAAQ,iBAAiB,EAAEC,mCAAiB,CAAC,KAAK;EAClD,QAAQ,sBAAsB,EAAE,CAAC;EACjC,QAAQ,MAAM,EAAE,OAAO;EACvB,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,EAAE,EAAE;EACzB,MAAM,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD;EACA;EACA,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AACzB;EACA,MAAM,UAAU,CAAC,EAAE,GAAG,IAAID,mCAAiB,CAAC;EAC5C,QAAQ,iBAAiB,EAAEC,mCAAiB,CAAC,KAAK;EAClD,QAAQ,sBAAsB,EAAE,CAAC;EACjC,QAAQ,MAAM,EAAE,SAAS;EACzB,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,OAAO,EAAE;EAC9B,MAAM,MAAM,QAAQ,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C;EACA;EACA,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EACxB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AACzB;EACA,MAAM,UAAU,CAAC,OAAO,GAAG,IAAID,mCAAiB,CAAC;EACjD,QAAQ,iBAAiB,EAAEC,mCAAiB,CAAC,KAAK;EAClD,QAAQ,sBAAsB,EAAE,CAAC;EACjC,QAAQ,MAAM,EAAE,QAAQ;EACxB,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA,IAAI,IAAI,YAAY,CAAC,SAAS,EAAE;EAChC,MAAM,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACjD;EACA;EACA,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;EAC1B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;EAC3B,MAAM,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;AAC3B;EACA,MAAM,UAAU,CAAC,SAAS,GAAG,IAAID,mCAAiB,CAAC;EACnD,QAAQ,iBAAiB,EAAEC,mCAAiB,CAAC,KAAK;EAClD,QAAQ,sBAAsB,EAAE,CAAC;EACjC,QAAQ,MAAM,EAAE,UAAU;EAC1B,OAAO,CAAC,CAAC;EACT,KAAK;AACL;EACA;EACA,IAAI,OAAO,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC;EACA;EACA,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACnB,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACnB,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACnB,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACnB,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACnB,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;EACnB,GAAG;AACH;EACA,EAAE,OAAO,IAAIC,0BAAQ,CAAC;EACtB,IAAI,UAAU,EAAE,UAAU;EAC1B,IAAI,OAAO,EAAE,OAAO;EACpB,IAAI,aAAa,EAAEC,+BAAa,CAAC,SAAS;EAC1C,IAAI,cAAc,EAAE,IAAIC,yBAAc,CAACN,kBAAU,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;EACvE,GAAG,CAAC,CAAC;EACL,CAAC;;ECrPD,SAAS,mBAAmB,CAAC,aAAa,EAAE,MAAM,EAAE;EACpD,EAAE,IAAID,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;EAChE,GAAG;EACH,EAAE,OAAO,aAAa,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;EACrD;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createPlaneOutlineGeometry.js b/debug/cesium/Workers/createPlaneOutlineGeometry.js deleted file mode 100644 index 9eb19e4..0000000 --- a/debug/cesium/Workers/createPlaneOutlineGeometry.js +++ /dev/null @@ -1,141 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Transforms-11fb6b0a', './Matrix3-f22b0303', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './Math-9be8b918', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29'], (function (defaultValue, Transforms, Matrix3, Check, ComponentDatatype, GeometryAttribute, GeometryAttributes, Math$1, Matrix2, RuntimeError, combine, WebGLConstants) { 'use strict'; - - /** - * Describes geometry representing the outline of a plane centered at the origin, with a unit width and length. - * - * @alias PlaneOutlineGeometry - * @constructor - * - */ - function PlaneOutlineGeometry() { - this._workerName = "createPlaneOutlineGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - PlaneOutlineGeometry.packedLength = 0; - - /** - * Stores the provided instance into the provided array. - * - * @param {PlaneOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * - * @returns {Number[]} The array that was packed into - */ - PlaneOutlineGeometry.pack = function (value, array) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PlaneOutlineGeometry} [result] The object into which to store the result. - * @returns {PlaneOutlineGeometry} The modified result parameter or a new PlaneOutlineGeometry instance if one was not provided. - */ - PlaneOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - return new PlaneOutlineGeometry(); - } - - return result; - }; - - const min = new Matrix3.Cartesian3(-0.5, -0.5, 0.0); - const max = new Matrix3.Cartesian3(0.5, 0.5, 0.0); - - /** - * Computes the geometric representation of an outline of a plane, including its vertices, indices, and a bounding sphere. - * - * @returns {Geometry|undefined} The computed vertices and indices. - */ - PlaneOutlineGeometry.createGeometry = function () { - const attributes = new GeometryAttributes.GeometryAttributes(); - const indices = new Uint16Array(4 * 2); - const positions = new Float64Array(4 * 3); - - positions[0] = min.x; - positions[1] = min.y; - positions[2] = min.z; - positions[3] = max.x; - positions[4] = min.y; - positions[5] = min.z; - positions[6] = max.x; - positions[7] = max.y; - positions[8] = min.z; - positions[9] = min.x; - positions[10] = max.y; - positions[11] = min.z; - - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - - indices[0] = 0; - indices[1] = 1; - indices[2] = 1; - indices[3] = 2; - indices[4] = 2; - indices[5] = 3; - indices[6] = 3; - indices[7] = 0; - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: new Transforms.BoundingSphere(Matrix3.Cartesian3.ZERO, Math.sqrt(2.0)), - }); - }; - - function createPlaneOutlineGeometry(planeGeometry, offset) { - if (defaultValue.defined(offset)) { - planeGeometry = PlaneOutlineGeometry.unpack(planeGeometry, offset); - } - return PlaneOutlineGeometry.createGeometry(planeGeometry); - } - - return createPlaneOutlineGeometry; - -})); -//# sourceMappingURL=createPlaneOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createPlaneOutlineGeometry.js.map b/debug/cesium/Workers/createPlaneOutlineGeometry.js.map deleted file mode 100644 index 88b5a1d..0000000 --- a/debug/cesium/Workers/createPlaneOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createPlaneOutlineGeometry.js","sources":["../../../Source/Core/PlaneOutlineGeometry.js","../../../Source/WorkersES6/createPlaneOutlineGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defined from \"./defined.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\n\r\n/**\r\n * Describes geometry representing the outline of a plane centered at the origin, with a unit width and length.\r\n *\r\n * @alias PlaneOutlineGeometry\r\n * @constructor\r\n *\r\n */\r\nfunction PlaneOutlineGeometry() {\r\n this._workerName = \"createPlaneOutlineGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nPlaneOutlineGeometry.packedLength = 0;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PlaneOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nPlaneOutlineGeometry.pack = function (value, array) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PlaneOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {PlaneOutlineGeometry} The modified result parameter or a new PlaneOutlineGeometry instance if one was not provided.\r\n */\r\nPlaneOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n return new PlaneOutlineGeometry();\r\n }\r\n\r\n return result;\r\n};\r\n\r\nconst min = new Cartesian3(-0.5, -0.5, 0.0);\r\nconst max = new Cartesian3(0.5, 0.5, 0.0);\r\n\r\n/**\r\n * Computes the geometric representation of an outline of a plane, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nPlaneOutlineGeometry.createGeometry = function () {\r\n const attributes = new GeometryAttributes();\r\n const indices = new Uint16Array(4 * 2);\r\n const positions = new Float64Array(4 * 3);\r\n\r\n positions[0] = min.x;\r\n positions[1] = min.y;\r\n positions[2] = min.z;\r\n positions[3] = max.x;\r\n positions[4] = min.y;\r\n positions[5] = min.z;\r\n positions[6] = max.x;\r\n positions[7] = max.y;\r\n positions[8] = min.z;\r\n positions[9] = min.x;\r\n positions[10] = max.y;\r\n positions[11] = min.z;\r\n\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n\r\n indices[0] = 0;\r\n indices[1] = 1;\r\n indices[2] = 1;\r\n indices[3] = 2;\r\n indices[4] = 2;\r\n indices[5] = 3;\r\n indices[6] = 3;\r\n indices[7] = 0;\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: new BoundingSphere(Cartesian3.ZERO, Math.sqrt(2.0)),\r\n });\r\n};\r\nexport default PlaneOutlineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport PlaneOutlineGeometry from \"../Core/PlaneOutlineGeometry.js\";\r\n\r\nfunction createPlaneOutlineGeometry(planeGeometry, offset) {\r\n if (defined(offset)) {\r\n planeGeometry = PlaneOutlineGeometry.unpack(planeGeometry, offset);\r\n }\r\n return PlaneOutlineGeometry.createGeometry(planeGeometry);\r\n}\r\nexport default createPlaneOutlineGeometry;\r\n"],"names":["Check","defined","Cartesian3","GeometryAttributes","GeometryAttribute","ComponentDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createPolygonGeometry.js b/debug/cesium/Workers/createPolygonGeometry.js deleted file mode 100644 index 002e113..0000000 --- a/debug/cesium/Workers/createPolygonGeometry.js +++ /dev/null @@ -1,1446 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './ArcType-d608b872', './BoundingRectangle-6617ed83', './Transforms-11fb6b0a', './Matrix2-036c77dd', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './EllipsoidGeodesic-38d0ed4a', './EllipsoidTangentPlane-c421b2cb', './GeometryAttribute-f2746b95', './GeometryInstance-b2be3e5a', './GeometryOffsetAttribute-cc320d7d', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonGeometryLibrary-62266ab5', './PolygonPipeline-313487c3', './VertexFormat-f2d74c96', './combine-4598d225', './RuntimeError-e5c6a8b9', './WebGLConstants-f27a5e29', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './arrayRemoveDuplicates-c3526030', './EllipsoidRhumbLine-48b4507b', './GeometryAttributes-eb2609b7'], (function (defaultValue, Matrix3, ArcType, BoundingRectangle, Transforms, Matrix2, Check, ComponentDatatype, EllipsoidGeodesic, EllipsoidTangentPlane, GeometryAttribute, GeometryInstance, GeometryOffsetAttribute, GeometryPipeline, IndexDatatype, Math$1, PolygonGeometryLibrary, PolygonPipeline, VertexFormat, combine, RuntimeError, WebGLConstants, AxisAlignedBoundingBox, IntersectionTests, Plane, AttributeCompression, EncodedCartesian3, arrayRemoveDuplicates, EllipsoidRhumbLine, GeometryAttributes) { 'use strict'; - - const scratchCarto1 = new Matrix3.Cartographic(); - const scratchCarto2 = new Matrix3.Cartographic(); - function adjustPosHeightsForNormal(position, p1, p2, ellipsoid) { - const carto1 = ellipsoid.cartesianToCartographic(position, scratchCarto1); - const height = carto1.height; - const p1Carto = ellipsoid.cartesianToCartographic(p1, scratchCarto2); - p1Carto.height = height; - ellipsoid.cartographicToCartesian(p1Carto, p1); - - const p2Carto = ellipsoid.cartesianToCartographic(p2, scratchCarto2); - p2Carto.height = height - 100; - ellipsoid.cartographicToCartesian(p2Carto, p2); - } - - const scratchBoundingRectangle = new BoundingRectangle.BoundingRectangle(); - const scratchPosition = new Matrix3.Cartesian3(); - const scratchNormal = new Matrix3.Cartesian3(); - const scratchTangent = new Matrix3.Cartesian3(); - const scratchBitangent = new Matrix3.Cartesian3(); - const p1Scratch = new Matrix3.Cartesian3(); - const p2Scratch = new Matrix3.Cartesian3(); - let scratchPerPosNormal = new Matrix3.Cartesian3(); - let scratchPerPosTangent = new Matrix3.Cartesian3(); - let scratchPerPosBitangent = new Matrix3.Cartesian3(); - - const appendTextureCoordinatesOrigin = new Matrix2.Cartesian2(); - const appendTextureCoordinatesCartesian2 = new Matrix2.Cartesian2(); - const appendTextureCoordinatesCartesian3 = new Matrix3.Cartesian3(); - const appendTextureCoordinatesQuaternion = new Transforms.Quaternion(); - const appendTextureCoordinatesMatrix3 = new Matrix3.Matrix3(); - const tangentMatrixScratch = new Matrix3.Matrix3(); - - function computeAttributes(options) { - const vertexFormat = options.vertexFormat; - const geometry = options.geometry; - const shadowVolume = options.shadowVolume; - const flatPositions = geometry.attributes.position.values; - const flatTexcoords = defaultValue.defined(geometry.attributes.st) - ? geometry.attributes.st.values - : undefined; - - let length = flatPositions.length; - const wall = options.wall; - const top = options.top || wall; - const bottom = options.bottom || wall; - if ( - vertexFormat.st || - vertexFormat.normal || - vertexFormat.tangent || - vertexFormat.bitangent || - shadowVolume - ) { - // PERFORMANCE_IDEA: Compute before subdivision, then just interpolate during subdivision. - // PERFORMANCE_IDEA: Compute with createGeometryFromPositions() for fast path when there's no holes. - const boundingRectangle = options.boundingRectangle; - const tangentPlane = options.tangentPlane; - const ellipsoid = options.ellipsoid; - const stRotation = options.stRotation; - const perPositionHeight = options.perPositionHeight; - - const origin = appendTextureCoordinatesOrigin; - origin.x = boundingRectangle.x; - origin.y = boundingRectangle.y; - - const textureCoordinates = vertexFormat.st - ? new Float32Array(2 * (length / 3)) - : undefined; - let normals; - if (vertexFormat.normal) { - if (perPositionHeight && top && !wall) { - normals = geometry.attributes.normal.values; - } else { - normals = new Float32Array(length); - } - } - const tangents = vertexFormat.tangent - ? new Float32Array(length) - : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(length) - : undefined; - const extrudeNormals = shadowVolume ? new Float32Array(length) : undefined; - - let textureCoordIndex = 0; - let attrIndex = 0; - - let normal = scratchNormal; - let tangent = scratchTangent; - let bitangent = scratchBitangent; - let recomputeNormal = true; - - let textureMatrix = appendTextureCoordinatesMatrix3; - let tangentRotationMatrix = tangentMatrixScratch; - if (stRotation !== 0.0) { - let rotation = Transforms.Quaternion.fromAxisAngle( - tangentPlane._plane.normal, - stRotation, - appendTextureCoordinatesQuaternion - ); - textureMatrix = Matrix3.Matrix3.fromQuaternion(rotation, textureMatrix); - - rotation = Transforms.Quaternion.fromAxisAngle( - tangentPlane._plane.normal, - -stRotation, - appendTextureCoordinatesQuaternion - ); - tangentRotationMatrix = Matrix3.Matrix3.fromQuaternion( - rotation, - tangentRotationMatrix - ); - } else { - textureMatrix = Matrix3.Matrix3.clone(Matrix3.Matrix3.IDENTITY, textureMatrix); - tangentRotationMatrix = Matrix3.Matrix3.clone( - Matrix3.Matrix3.IDENTITY, - tangentRotationMatrix - ); - } - - let bottomOffset = 0; - let bottomOffset2 = 0; - - if (top && bottom) { - bottomOffset = length / 2; - bottomOffset2 = length / 3; - - length /= 2; - } - - for (let i = 0; i < length; i += 3) { - const position = Matrix3.Cartesian3.fromArray( - flatPositions, - i, - appendTextureCoordinatesCartesian3 - ); - - if (vertexFormat.st) { - if (!defaultValue.defined(flatTexcoords)) { - let p = Matrix3.Matrix3.multiplyByVector( - textureMatrix, - position, - scratchPosition - ); - p = ellipsoid.scaleToGeodeticSurface(p, p); - const st = tangentPlane.projectPointOntoPlane( - p, - appendTextureCoordinatesCartesian2 - ); - Matrix2.Cartesian2.subtract(st, origin, st); - - const stx = Math$1.CesiumMath.clamp(st.x / boundingRectangle.width, 0, 1); - const sty = Math$1.CesiumMath.clamp(st.y / boundingRectangle.height, 0, 1); - if (bottom) { - textureCoordinates[textureCoordIndex + bottomOffset2] = stx; - textureCoordinates[textureCoordIndex + 1 + bottomOffset2] = sty; - } - if (top) { - textureCoordinates[textureCoordIndex] = stx; - textureCoordinates[textureCoordIndex + 1] = sty; - } - - textureCoordIndex += 2; - } - } - - if ( - vertexFormat.normal || - vertexFormat.tangent || - vertexFormat.bitangent || - shadowVolume - ) { - const attrIndex1 = attrIndex + 1; - const attrIndex2 = attrIndex + 2; - - if (wall) { - if (i + 3 < length) { - const p1 = Matrix3.Cartesian3.fromArray(flatPositions, i + 3, p1Scratch); - - if (recomputeNormal) { - const p2 = Matrix3.Cartesian3.fromArray( - flatPositions, - i + length, - p2Scratch - ); - if (perPositionHeight) { - adjustPosHeightsForNormal(position, p1, p2, ellipsoid); - } - Matrix3.Cartesian3.subtract(p1, position, p1); - Matrix3.Cartesian3.subtract(p2, position, p2); - normal = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(p2, p1, normal), - normal - ); - recomputeNormal = false; - } - - if (Matrix3.Cartesian3.equalsEpsilon(p1, position, Math$1.CesiumMath.EPSILON10)) { - // if we've reached a corner - recomputeNormal = true; - } - } - - if (vertexFormat.tangent || vertexFormat.bitangent) { - bitangent = ellipsoid.geodeticSurfaceNormal(position, bitangent); - if (vertexFormat.tangent) { - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(bitangent, normal, tangent), - tangent - ); - } - } - } else { - normal = ellipsoid.geodeticSurfaceNormal(position, normal); - if (vertexFormat.tangent || vertexFormat.bitangent) { - if (perPositionHeight) { - scratchPerPosNormal = Matrix3.Cartesian3.fromArray( - normals, - attrIndex, - scratchPerPosNormal - ); - scratchPerPosTangent = Matrix3.Cartesian3.cross( - Matrix3.Cartesian3.UNIT_Z, - scratchPerPosNormal, - scratchPerPosTangent - ); - scratchPerPosTangent = Matrix3.Cartesian3.normalize( - Matrix3.Matrix3.multiplyByVector( - tangentRotationMatrix, - scratchPerPosTangent, - scratchPerPosTangent - ), - scratchPerPosTangent - ); - if (vertexFormat.bitangent) { - scratchPerPosBitangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross( - scratchPerPosNormal, - scratchPerPosTangent, - scratchPerPosBitangent - ), - scratchPerPosBitangent - ); - } - } - - tangent = Matrix3.Cartesian3.cross(Matrix3.Cartesian3.UNIT_Z, normal, tangent); - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Matrix3.multiplyByVector(tangentRotationMatrix, tangent, tangent), - tangent - ); - if (vertexFormat.bitangent) { - bitangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(normal, tangent, bitangent), - bitangent - ); - } - } - } - - if (vertexFormat.normal) { - if (options.wall) { - normals[attrIndex + bottomOffset] = normal.x; - normals[attrIndex1 + bottomOffset] = normal.y; - normals[attrIndex2 + bottomOffset] = normal.z; - } else if (bottom) { - normals[attrIndex + bottomOffset] = -normal.x; - normals[attrIndex1 + bottomOffset] = -normal.y; - normals[attrIndex2 + bottomOffset] = -normal.z; - } - - if ((top && !perPositionHeight) || wall) { - normals[attrIndex] = normal.x; - normals[attrIndex1] = normal.y; - normals[attrIndex2] = normal.z; - } - } - - if (shadowVolume) { - if (wall) { - normal = ellipsoid.geodeticSurfaceNormal(position, normal); - } - extrudeNormals[attrIndex + bottomOffset] = -normal.x; - extrudeNormals[attrIndex1 + bottomOffset] = -normal.y; - extrudeNormals[attrIndex2 + bottomOffset] = -normal.z; - } - - if (vertexFormat.tangent) { - if (options.wall) { - tangents[attrIndex + bottomOffset] = tangent.x; - tangents[attrIndex1 + bottomOffset] = tangent.y; - tangents[attrIndex2 + bottomOffset] = tangent.z; - } else if (bottom) { - tangents[attrIndex + bottomOffset] = -tangent.x; - tangents[attrIndex1 + bottomOffset] = -tangent.y; - tangents[attrIndex2 + bottomOffset] = -tangent.z; - } - - if (top) { - if (perPositionHeight) { - tangents[attrIndex] = scratchPerPosTangent.x; - tangents[attrIndex1] = scratchPerPosTangent.y; - tangents[attrIndex2] = scratchPerPosTangent.z; - } else { - tangents[attrIndex] = tangent.x; - tangents[attrIndex1] = tangent.y; - tangents[attrIndex2] = tangent.z; - } - } - } - - if (vertexFormat.bitangent) { - if (bottom) { - bitangents[attrIndex + bottomOffset] = bitangent.x; - bitangents[attrIndex1 + bottomOffset] = bitangent.y; - bitangents[attrIndex2 + bottomOffset] = bitangent.z; - } - if (top) { - if (perPositionHeight) { - bitangents[attrIndex] = scratchPerPosBitangent.x; - bitangents[attrIndex1] = scratchPerPosBitangent.y; - bitangents[attrIndex2] = scratchPerPosBitangent.z; - } else { - bitangents[attrIndex] = bitangent.x; - bitangents[attrIndex1] = bitangent.y; - bitangents[attrIndex2] = bitangent.z; - } - } - } - attrIndex += 3; - } - } - - if (vertexFormat.st && !defaultValue.defined(flatTexcoords)) { - geometry.attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: textureCoordinates, - }); - } - - if (vertexFormat.normal) { - geometry.attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.tangent) { - geometry.attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - geometry.attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - - if (shadowVolume) { - geometry.attributes.extrudeDirection = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: extrudeNormals, - }); - } - } - - if (options.extrude && defaultValue.defined(options.offsetAttribute)) { - const size = flatPositions.length / 3; - let offsetAttribute = new Uint8Array(size); - - if (options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - if ((top && bottom) || wall) { - offsetAttribute = offsetAttribute.fill(1, 0, size / 2); - } else if (top) { - offsetAttribute = offsetAttribute.fill(1); - } - } else { - const offsetValue = - options.offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - offsetAttribute = offsetAttribute.fill(offsetValue); - } - - geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: offsetAttribute, - }); - } - - return geometry; - } - - const startCartographicScratch = new Matrix3.Cartographic(); - const endCartographicScratch = new Matrix3.Cartographic(); - const idlCross = { - westOverIDL: 0.0, - eastOverIDL: 0.0, - }; - let ellipsoidGeodesic = new EllipsoidGeodesic.EllipsoidGeodesic(); - function computeRectangle(positions, ellipsoid, arcType, granularity, result) { - result = defaultValue.defaultValue(result, new Matrix2.Rectangle()); - if (!defaultValue.defined(positions) || positions.length < 3) { - result.west = 0.0; - result.north = 0.0; - result.south = 0.0; - result.east = 0.0; - return result; - } - - if (arcType === ArcType.ArcType.RHUMB) { - return Matrix2.Rectangle.fromCartesianArray(positions, ellipsoid, result); - } - - if (!ellipsoidGeodesic.ellipsoid.equals(ellipsoid)) { - ellipsoidGeodesic = new EllipsoidGeodesic.EllipsoidGeodesic(undefined, undefined, ellipsoid); - } - - result.west = Number.POSITIVE_INFINITY; - result.east = Number.NEGATIVE_INFINITY; - result.south = Number.POSITIVE_INFINITY; - result.north = Number.NEGATIVE_INFINITY; - - idlCross.westOverIDL = Number.POSITIVE_INFINITY; - idlCross.eastOverIDL = Number.NEGATIVE_INFINITY; - - const inverseChordLength = - 1.0 / Math$1.CesiumMath.chordLength(granularity, ellipsoid.maximumRadius); - const positionsLength = positions.length; - let endCartographic = ellipsoid.cartesianToCartographic( - positions[0], - endCartographicScratch - ); - let startCartographic = startCartographicScratch; - let swap; - - for (let i = 1; i < positionsLength; i++) { - swap = startCartographic; - startCartographic = endCartographic; - endCartographic = ellipsoid.cartesianToCartographic(positions[i], swap); - ellipsoidGeodesic.setEndPoints(startCartographic, endCartographic); - interpolateAndGrowRectangle( - ellipsoidGeodesic, - inverseChordLength, - result, - idlCross - ); - } - - swap = startCartographic; - startCartographic = endCartographic; - endCartographic = ellipsoid.cartesianToCartographic(positions[0], swap); - ellipsoidGeodesic.setEndPoints(startCartographic, endCartographic); - interpolateAndGrowRectangle( - ellipsoidGeodesic, - inverseChordLength, - result, - idlCross - ); - - if (result.east - result.west > idlCross.eastOverIDL - idlCross.westOverIDL) { - result.west = idlCross.westOverIDL; - result.east = idlCross.eastOverIDL; - - if (result.east > Math$1.CesiumMath.PI) { - result.east = result.east - Math$1.CesiumMath.TWO_PI; - } - if (result.west > Math$1.CesiumMath.PI) { - result.west = result.west - Math$1.CesiumMath.TWO_PI; - } - } - - return result; - } - - const interpolatedCartographicScratch = new Matrix3.Cartographic(); - function interpolateAndGrowRectangle( - ellipsoidGeodesic, - inverseChordLength, - result, - idlCross - ) { - const segmentLength = ellipsoidGeodesic.surfaceDistance; - - const numPoints = Math.ceil(segmentLength * inverseChordLength); - const subsegmentDistance = - numPoints > 0 ? segmentLength / (numPoints - 1) : Number.POSITIVE_INFINITY; - let interpolationDistance = 0.0; - - for (let i = 0; i < numPoints; i++) { - const interpolatedCartographic = ellipsoidGeodesic.interpolateUsingSurfaceDistance( - interpolationDistance, - interpolatedCartographicScratch - ); - interpolationDistance += subsegmentDistance; - const longitude = interpolatedCartographic.longitude; - const latitude = interpolatedCartographic.latitude; - - result.west = Math.min(result.west, longitude); - result.east = Math.max(result.east, longitude); - result.south = Math.min(result.south, latitude); - result.north = Math.max(result.north, latitude); - - const lonAdjusted = - longitude >= 0 ? longitude : longitude + Math$1.CesiumMath.TWO_PI; - idlCross.westOverIDL = Math.min(idlCross.westOverIDL, lonAdjusted); - idlCross.eastOverIDL = Math.max(idlCross.eastOverIDL, lonAdjusted); - } - } - - const createGeometryFromPositionsExtrudedPositions = []; - - function createGeometryFromPositionsExtruded( - ellipsoid, - polygon, - textureCoordinates, - granularity, - hierarchy, - perPositionHeight, - closeTop, - closeBottom, - vertexFormat, - arcType - ) { - const geos = { - walls: [], - }; - let i; - - if (closeTop || closeBottom) { - const topGeo = PolygonGeometryLibrary.PolygonGeometryLibrary.createGeometryFromPositions( - ellipsoid, - polygon, - textureCoordinates, - granularity, - perPositionHeight, - vertexFormat, - arcType - ); - - const edgePoints = topGeo.attributes.position.values; - const indices = topGeo.indices; - let numPositions; - let newIndices; - - if (closeTop && closeBottom) { - const topBottomPositions = edgePoints.concat(edgePoints); - - numPositions = topBottomPositions.length / 3; - - newIndices = IndexDatatype.IndexDatatype.createTypedArray( - numPositions, - indices.length * 2 - ); - newIndices.set(indices); - const ilength = indices.length; - - const length = numPositions / 2; - - for (i = 0; i < ilength; i += 3) { - const i0 = newIndices[i] + length; - const i1 = newIndices[i + 1] + length; - const i2 = newIndices[i + 2] + length; - - newIndices[i + ilength] = i2; - newIndices[i + 1 + ilength] = i1; - newIndices[i + 2 + ilength] = i0; - } - - topGeo.attributes.position.values = topBottomPositions; - if (perPositionHeight && vertexFormat.normal) { - const normals = topGeo.attributes.normal.values; - topGeo.attributes.normal.values = new Float32Array( - topBottomPositions.length - ); - topGeo.attributes.normal.values.set(normals); - } - - if (vertexFormat.st && defaultValue.defined(textureCoordinates)) { - const texcoords = topGeo.attributes.st.values; - topGeo.attributes.st.values = new Float32Array(numPositions * 2); - topGeo.attributes.st.values = texcoords.concat(texcoords); - } - - topGeo.indices = newIndices; - } else if (closeBottom) { - numPositions = edgePoints.length / 3; - newIndices = IndexDatatype.IndexDatatype.createTypedArray(numPositions, indices.length); - - for (i = 0; i < indices.length; i += 3) { - newIndices[i] = indices[i + 2]; - newIndices[i + 1] = indices[i + 1]; - newIndices[i + 2] = indices[i]; - } - - topGeo.indices = newIndices; - } - - geos.topAndBottom = new GeometryInstance.GeometryInstance({ - geometry: topGeo, - }); - } - - let outerRing = hierarchy.outerRing; - let tangentPlane = EllipsoidTangentPlane.EllipsoidTangentPlane.fromPoints(outerRing, ellipsoid); - let positions2D = tangentPlane.projectPointsOntoPlane( - outerRing, - createGeometryFromPositionsExtrudedPositions - ); - - let windingOrder = PolygonPipeline.PolygonPipeline.computeWindingOrder2D(positions2D); - if (windingOrder === PolygonPipeline.WindingOrder.CLOCKWISE) { - outerRing = outerRing.slice().reverse(); - } - - let wallGeo = PolygonGeometryLibrary.PolygonGeometryLibrary.computeWallGeometry( - outerRing, - textureCoordinates, - ellipsoid, - granularity, - perPositionHeight, - arcType - ); - geos.walls.push( - new GeometryInstance.GeometryInstance({ - geometry: wallGeo, - }) - ); - - const holes = hierarchy.holes; - for (i = 0; i < holes.length; i++) { - let hole = holes[i]; - - tangentPlane = EllipsoidTangentPlane.EllipsoidTangentPlane.fromPoints(hole, ellipsoid); - positions2D = tangentPlane.projectPointsOntoPlane( - hole, - createGeometryFromPositionsExtrudedPositions - ); - - windingOrder = PolygonPipeline.PolygonPipeline.computeWindingOrder2D(positions2D); - if (windingOrder === PolygonPipeline.WindingOrder.COUNTER_CLOCKWISE) { - hole = hole.slice().reverse(); - } - - wallGeo = PolygonGeometryLibrary.PolygonGeometryLibrary.computeWallGeometry( - hole, - textureCoordinates, - ellipsoid, - granularity, - perPositionHeight, - arcType - ); - geos.walls.push( - new GeometryInstance.GeometryInstance({ - geometry: wallGeo, - }) - ); - } - - return geos; - } - - /** - * A description of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. - * - * @alias PolygonGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes. - * @param {Number} [options.height=0.0] The distance in meters between the polygon and the ellipsoid surface. - * @param {Number} [options.extrudedHeight] The distance in meters between the polygon's extruded face and the ellipsoid surface. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height. - * @param {Boolean} [options.closeTop=true] When false, leaves off the top of an extruded polygon open. - * @param {Boolean} [options.closeBottom=true] When false, leaves off the bottom of an extruded polygon open. - * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. - * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. Has no effect for ground primitives. - * - * @see PolygonGeometry#createGeometry - * @see PolygonGeometry#fromPositions - * - * @demo {@link https://sandcastle.cesium.com/index.html?src=Polygon.html|Cesium Sandcastle Polygon Demo} - * - * @example - * // 1. create a polygon from points - * const polygon = new Cesium.PolygonGeometry({ - * polygonHierarchy : new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ]) - * ) - * }); - * const geometry = Cesium.PolygonGeometry.createGeometry(polygon); - * - * // 2. create a nested polygon with holes - * const polygonWithHole = new Cesium.PolygonGeometry({ - * polygonHierarchy : new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -109.0, 30.0, - * -95.0, 30.0, - * -95.0, 40.0, - * -109.0, 40.0 - * ]), - * [new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -107.0, 31.0, - * -107.0, 39.0, - * -97.0, 39.0, - * -97.0, 31.0 - * ]), - * [new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -105.0, 33.0, - * -99.0, 33.0, - * -99.0, 37.0, - * -105.0, 37.0 - * ]), - * [new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -103.0, 34.0, - * -101.0, 34.0, - * -101.0, 36.0, - * -103.0, 36.0 - * ]) - * )] - * )] - * )] - * ) - * }); - * const geometry = Cesium.PolygonGeometry.createGeometry(polygonWithHole); - * - * // 3. create extruded polygon - * const extrudedPolygon = new Cesium.PolygonGeometry({ - * polygonHierarchy : new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ]) - * ), - * extrudedHeight: 300000 - * }); - * const geometry = Cesium.PolygonGeometry.createGeometry(extrudedPolygon); - */ - function PolygonGeometry(options) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("options", options); - Check.Check.typeOf.object("options.polygonHierarchy", options.polygonHierarchy); - if ( - defaultValue.defined(options.perPositionHeight) && - options.perPositionHeight && - defaultValue.defined(options.height) - ) { - throw new Check.DeveloperError( - "Cannot use both options.perPositionHeight and options.height" - ); - } - if ( - defaultValue.defined(options.arcType) && - options.arcType !== ArcType.ArcType.GEODESIC && - options.arcType !== ArcType.ArcType.RHUMB - ) { - throw new Check.DeveloperError( - "Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB." - ); - } - //>>includeEnd('debug'); - - const polygonHierarchy = options.polygonHierarchy; - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - const stRotation = defaultValue.defaultValue(options.stRotation, 0.0); - const textureCoordinates = options.textureCoordinates; - const perPositionHeight = defaultValue.defaultValue(options.perPositionHeight, false); - const perPositionHeightExtrude = - perPositionHeight && defaultValue.defined(options.extrudedHeight); - let height = defaultValue.defaultValue(options.height, 0.0); - let extrudedHeight = defaultValue.defaultValue(options.extrudedHeight, height); - - if (!perPositionHeightExtrude) { - const h = Math.max(height, extrudedHeight); - extrudedHeight = Math.min(height, extrudedHeight); - height = h; - } - - this._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat); - this._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid); - this._granularity = granularity; - this._stRotation = stRotation; - this._height = height; - this._extrudedHeight = extrudedHeight; - this._closeTop = defaultValue.defaultValue(options.closeTop, true); - this._closeBottom = defaultValue.defaultValue(options.closeBottom, true); - this._polygonHierarchy = polygonHierarchy; - this._perPositionHeight = perPositionHeight; - this._perPositionHeightExtrude = perPositionHeightExtrude; - this._shadowVolume = defaultValue.defaultValue(options.shadowVolume, false); - this._workerName = "createPolygonGeometry"; - this._offsetAttribute = options.offsetAttribute; - this._arcType = defaultValue.defaultValue(options.arcType, ArcType.ArcType.GEODESIC); - - this._rectangle = undefined; - this._textureCoordinateRotationPoints = undefined; - this._textureCoordinates = textureCoordinates; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - PolygonGeometryLibrary.PolygonGeometryLibrary.computeHierarchyPackedLength( - polygonHierarchy, - Matrix3.Cartesian3 - ) + - Matrix3.Ellipsoid.packedLength + - VertexFormat.VertexFormat.packedLength + - (textureCoordinates - ? PolygonGeometryLibrary.PolygonGeometryLibrary.computeHierarchyPackedLength( - textureCoordinates, - Matrix2.Cartesian2 - ) - : 1) + - 12; - } - - /** - * A description of a polygon from an array of positions. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon. - * @param {Number} [options.height=0.0] The height of the polygon. - * @param {Number} [options.extrudedHeight] The height of the polygon extrusion. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height. - * @param {Boolean} [options.closeTop=true] When false, leaves off the top of an extruded polygon open. - * @param {Boolean} [options.closeBottom=true] When false, leaves off the bottom of an extruded polygon open. - * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. - * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. Has no effect for ground primitives. - * @returns {PolygonGeometry} - * - * @example - * // create a polygon from points - * const polygon = Cesium.PolygonGeometry.fromPositions({ - * positions : Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ]) - * }); - * const geometry = Cesium.PolygonGeometry.createGeometry(polygon); - * - * @see PolygonGeometry#createGeometry - */ - PolygonGeometry.fromPositions = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.positions", options.positions); - //>>includeEnd('debug'); - - const newOptions = { - polygonHierarchy: { - positions: options.positions, - }, - height: options.height, - extrudedHeight: options.extrudedHeight, - vertexFormat: options.vertexFormat, - stRotation: options.stRotation, - ellipsoid: options.ellipsoid, - granularity: options.granularity, - perPositionHeight: options.perPositionHeight, - closeTop: options.closeTop, - closeBottom: options.closeBottom, - offsetAttribute: options.offsetAttribute, - arcType: options.arcType, - textureCoordinates: options.textureCoordinates, - }; - return new PolygonGeometry(newOptions); - }; - - /** - * Stores the provided instance into the provided array. - * - * @param {PolygonGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - PolygonGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - startingIndex = PolygonGeometryLibrary.PolygonGeometryLibrary.packPolygonHierarchy( - value._polygonHierarchy, - array, - startingIndex, - Matrix3.Cartesian3 - ); - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._height; - array[startingIndex++] = value._extrudedHeight; - array[startingIndex++] = value._granularity; - array[startingIndex++] = value._stRotation; - array[startingIndex++] = value._perPositionHeightExtrude ? 1.0 : 0.0; - array[startingIndex++] = value._perPositionHeight ? 1.0 : 0.0; - array[startingIndex++] = value._closeTop ? 1.0 : 0.0; - array[startingIndex++] = value._closeBottom ? 1.0 : 0.0; - array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0; - array[startingIndex++] = defaultValue.defaultValue(value._offsetAttribute, -1); - array[startingIndex++] = value._arcType; - if (defaultValue.defined(value._textureCoordinates)) { - startingIndex = PolygonGeometryLibrary.PolygonGeometryLibrary.packPolygonHierarchy( - value._textureCoordinates, - array, - startingIndex, - Matrix2.Cartesian2 - ); - } else { - array[startingIndex++] = -1.0; - } - array[startingIndex++] = value.packedLength; - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - - //Only used to avoid inability to default construct. - const dummyOptions = { - polygonHierarchy: {}, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PolygonGeometry} [result] The object into which to store the result. - */ - PolygonGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const polygonHierarchy = PolygonGeometryLibrary.PolygonGeometryLibrary.unpackPolygonHierarchy( - array, - startingIndex, - Matrix3.Cartesian3 - ); - startingIndex = polygonHierarchy.startingIndex; - delete polygonHierarchy.startingIndex; - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const height = array[startingIndex++]; - const extrudedHeight = array[startingIndex++]; - const granularity = array[startingIndex++]; - const stRotation = array[startingIndex++]; - const perPositionHeightExtrude = array[startingIndex++] === 1.0; - const perPositionHeight = array[startingIndex++] === 1.0; - const closeTop = array[startingIndex++] === 1.0; - const closeBottom = array[startingIndex++] === 1.0; - const shadowVolume = array[startingIndex++] === 1.0; - const offsetAttribute = array[startingIndex++]; - const arcType = array[startingIndex++]; - const textureCoordinates = - array[startingIndex] === -1.0 - ? undefined - : PolygonGeometryLibrary.PolygonGeometryLibrary.unpackPolygonHierarchy( - array, - startingIndex, - Matrix2.Cartesian2 - ); - if (defaultValue.defined(textureCoordinates)) { - startingIndex = textureCoordinates.startingIndex; - delete textureCoordinates.startingIndex; - } else { - startingIndex++; - } - const packedLength = array[startingIndex++]; - - if (!defaultValue.defined(result)) { - result = new PolygonGeometry(dummyOptions); - } - - result._polygonHierarchy = polygonHierarchy; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._height = height; - result._extrudedHeight = extrudedHeight; - result._granularity = granularity; - result._stRotation = stRotation; - result._perPositionHeightExtrude = perPositionHeightExtrude; - result._perPositionHeight = perPositionHeight; - result._closeTop = closeTop; - result._closeBottom = closeBottom; - result._shadowVolume = shadowVolume; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - result._arcType = arcType; - result._textureCoordinates = textureCoordinates; - result.packedLength = packedLength; - - return result; - }; - - /** - * Returns the bounding rectangle given the provided options - * - * @param {Object} options Object with the following properties: - * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions sampled. - * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Rectangle} [result] An object in which to store the result. - * - * @returns {Rectangle} The result rectangle - */ - PolygonGeometry.computeRectangle = function (options, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("options", options); - Check.Check.typeOf.object("options.polygonHierarchy", options.polygonHierarchy); - //>>includeEnd('debug'); - - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - const arcType = defaultValue.defaultValue(options.arcType, ArcType.ArcType.GEODESIC); - //>>includeStart('debug', pragmas.debug); - if (arcType !== ArcType.ArcType.GEODESIC && arcType !== ArcType.ArcType.RHUMB) { - throw new Check.DeveloperError( - "Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB." - ); - } - //>>includeEnd('debug'); - - const polygonHierarchy = options.polygonHierarchy; - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - - return computeRectangle( - polygonHierarchy.positions, - ellipsoid, - arcType, - granularity, - result - ); - }; - - /** - * Computes the geometric representation of a polygon, including its vertices, indices, and a bounding sphere. - * - * @param {PolygonGeometry} polygonGeometry A description of the polygon. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - PolygonGeometry.createGeometry = function (polygonGeometry) { - const vertexFormat = polygonGeometry._vertexFormat; - const ellipsoid = polygonGeometry._ellipsoid; - const granularity = polygonGeometry._granularity; - const stRotation = polygonGeometry._stRotation; - const polygonHierarchy = polygonGeometry._polygonHierarchy; - const perPositionHeight = polygonGeometry._perPositionHeight; - const closeTop = polygonGeometry._closeTop; - const closeBottom = polygonGeometry._closeBottom; - const arcType = polygonGeometry._arcType; - const textureCoordinates = polygonGeometry._textureCoordinates; - - const hasTextureCoordinates = defaultValue.defined(textureCoordinates); - - let outerPositions = polygonHierarchy.positions; - if (outerPositions.length < 3) { - return; - } - - const tangentPlane = EllipsoidTangentPlane.EllipsoidTangentPlane.fromPoints( - outerPositions, - ellipsoid - ); - - const results = PolygonGeometryLibrary.PolygonGeometryLibrary.polygonsFromHierarchy( - polygonHierarchy, - hasTextureCoordinates, - tangentPlane.projectPointsOntoPlane.bind(tangentPlane), - !perPositionHeight, - ellipsoid - ); - - const hierarchy = results.hierarchy; - const polygons = results.polygons; - - const dummyFunction = function (identity) { - return identity; - }; - - const textureCoordinatePolygons = hasTextureCoordinates - ? PolygonGeometryLibrary.PolygonGeometryLibrary.polygonsFromHierarchy( - textureCoordinates, - true, - dummyFunction, - false - ).polygons - : undefined; - - if (hierarchy.length === 0) { - return; - } - - outerPositions = hierarchy[0].outerRing; - const boundingRectangle = PolygonGeometryLibrary.PolygonGeometryLibrary.computeBoundingRectangle( - tangentPlane.plane.normal, - tangentPlane.projectPointOntoPlane.bind(tangentPlane), - outerPositions, - stRotation, - scratchBoundingRectangle - ); - - const geometries = []; - - const height = polygonGeometry._height; - const extrudedHeight = polygonGeometry._extrudedHeight; - const extrude = - polygonGeometry._perPositionHeightExtrude || - !Math$1.CesiumMath.equalsEpsilon(height, extrudedHeight, 0, Math$1.CesiumMath.EPSILON2); - - const options = { - perPositionHeight: perPositionHeight, - vertexFormat: vertexFormat, - geometry: undefined, - tangentPlane: tangentPlane, - boundingRectangle: boundingRectangle, - ellipsoid: ellipsoid, - stRotation: stRotation, - textureCoordinates: undefined, - bottom: false, - top: true, - wall: false, - extrude: false, - arcType: arcType, - }; - - let i; - - if (extrude) { - options.extrude = true; - options.top = closeTop; - options.bottom = closeBottom; - options.shadowVolume = polygonGeometry._shadowVolume; - options.offsetAttribute = polygonGeometry._offsetAttribute; - for (i = 0; i < polygons.length; i++) { - const splitGeometry = createGeometryFromPositionsExtruded( - ellipsoid, - polygons[i], - hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined, - granularity, - hierarchy[i], - perPositionHeight, - closeTop, - closeBottom, - vertexFormat, - arcType - ); - - let topAndBottom; - if (closeTop && closeBottom) { - topAndBottom = splitGeometry.topAndBottom; - options.geometry = PolygonGeometryLibrary.PolygonGeometryLibrary.scaleToGeodeticHeightExtruded( - topAndBottom.geometry, - height, - extrudedHeight, - ellipsoid, - perPositionHeight - ); - } else if (closeTop) { - topAndBottom = splitGeometry.topAndBottom; - topAndBottom.geometry.attributes.position.values = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - topAndBottom.geometry.attributes.position.values, - height, - ellipsoid, - !perPositionHeight - ); - options.geometry = topAndBottom.geometry; - } else if (closeBottom) { - topAndBottom = splitGeometry.topAndBottom; - topAndBottom.geometry.attributes.position.values = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - topAndBottom.geometry.attributes.position.values, - extrudedHeight, - ellipsoid, - true - ); - options.geometry = topAndBottom.geometry; - } - if (closeTop || closeBottom) { - options.wall = false; - topAndBottom.geometry = computeAttributes(options); - geometries.push(topAndBottom); - } - - const walls = splitGeometry.walls; - options.wall = true; - for (let k = 0; k < walls.length; k++) { - const wall = walls[k]; - options.geometry = PolygonGeometryLibrary.PolygonGeometryLibrary.scaleToGeodeticHeightExtruded( - wall.geometry, - height, - extrudedHeight, - ellipsoid, - perPositionHeight - ); - wall.geometry = computeAttributes(options); - geometries.push(wall); - } - } - } else { - for (i = 0; i < polygons.length; i++) { - const geometryInstance = new GeometryInstance.GeometryInstance({ - geometry: PolygonGeometryLibrary.PolygonGeometryLibrary.createGeometryFromPositions( - ellipsoid, - polygons[i], - hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined, - granularity, - perPositionHeight, - vertexFormat, - arcType - ), - }); - geometryInstance.geometry.attributes.position.values = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - geometryInstance.geometry.attributes.position.values, - height, - ellipsoid, - !perPositionHeight - ); - options.geometry = geometryInstance.geometry; - - geometryInstance.geometry = computeAttributes(options); - - if (defaultValue.defined(polygonGeometry._offsetAttribute)) { - const length = - geometryInstance.geometry.attributes.position.values.length; - const offsetValue = - polygonGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute( - { - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - } - ); - } - - geometries.push(geometryInstance); - } - } - - const geometry = GeometryPipeline.GeometryPipeline.combineInstances(geometries)[0]; - geometry.attributes.position.values = new Float64Array( - geometry.attributes.position.values - ); - geometry.indices = IndexDatatype.IndexDatatype.createTypedArray( - geometry.attributes.position.values.length / 3, - geometry.indices - ); - - const attributes = geometry.attributes; - const boundingSphere = Transforms.BoundingSphere.fromVertices( - attributes.position.values - ); - - if (!vertexFormat.position) { - delete attributes.position; - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: geometry.indices, - primitiveType: geometry.primitiveType, - boundingSphere: boundingSphere, - offsetAttribute: polygonGeometry._offsetAttribute, - }); - }; - - /** - * @private - */ - PolygonGeometry.createShadowVolume = function ( - polygonGeometry, - minHeightFunc, - maxHeightFunc - ) { - const granularity = polygonGeometry._granularity; - const ellipsoid = polygonGeometry._ellipsoid; - - const minHeight = minHeightFunc(granularity, ellipsoid); - const maxHeight = maxHeightFunc(granularity, ellipsoid); - - return new PolygonGeometry({ - polygonHierarchy: polygonGeometry._polygonHierarchy, - ellipsoid: ellipsoid, - stRotation: polygonGeometry._stRotation, - granularity: granularity, - perPositionHeight: false, - extrudedHeight: minHeight, - height: maxHeight, - vertexFormat: VertexFormat.VertexFormat.POSITION_ONLY, - shadowVolume: true, - arcType: polygonGeometry._arcType, - }); - }; - - function textureCoordinateRotationPoints(polygonGeometry) { - const stRotation = -polygonGeometry._stRotation; - if (stRotation === 0.0) { - return [0, 0, 0, 1, 1, 0]; - } - const ellipsoid = polygonGeometry._ellipsoid; - const positions = polygonGeometry._polygonHierarchy.positions; - const boundingRectangle = polygonGeometry.rectangle; - return GeometryAttribute.Geometry._textureCoordinateRotationPoints( - positions, - stRotation, - ellipsoid, - boundingRectangle - ); - } - - Object.defineProperties(PolygonGeometry.prototype, { - /** - * @private - */ - rectangle: { - get: function () { - if (!defaultValue.defined(this._rectangle)) { - const positions = this._polygonHierarchy.positions; - this._rectangle = computeRectangle( - positions, - this._ellipsoid, - this._arcType, - this._granularity - ); - } - - return this._rectangle; - }, - }, - /** - * For remapping texture coordinates when rendering PolygonGeometries as GroundPrimitives. - * @private - */ - textureCoordinateRotationPoints: { - get: function () { - if (!defaultValue.defined(this._textureCoordinateRotationPoints)) { - this._textureCoordinateRotationPoints = textureCoordinateRotationPoints( - this - ); - } - return this._textureCoordinateRotationPoints; - }, - }, - }); - - function createPolygonGeometry(polygonGeometry, offset) { - if (defaultValue.defined(offset)) { - polygonGeometry = PolygonGeometry.unpack(polygonGeometry, offset); - } - polygonGeometry._ellipsoid = Matrix3.Ellipsoid.clone(polygonGeometry._ellipsoid); - return PolygonGeometry.createGeometry(polygonGeometry); - } - - return createPolygonGeometry; - -})); -//# sourceMappingURL=createPolygonGeometry.js.map diff --git a/debug/cesium/Workers/createPolygonGeometry.js.map b/debug/cesium/Workers/createPolygonGeometry.js.map deleted file mode 100644 index 206cbfd..0000000 --- a/debug/cesium/Workers/createPolygonGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createPolygonGeometry.js","sources":["../../../Source/Core/PolygonGeometry.js","../../../Source/WorkersES6/createPolygonGeometry.js"],"sourcesContent":["import ArcType from \"./ArcType.js\";\r\nimport BoundingRectangle from \"./BoundingRectangle.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport EllipsoidGeodesic from \"./EllipsoidGeodesic.js\";\r\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryInstance from \"./GeometryInstance.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport GeometryPipeline from \"./GeometryPipeline.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\nimport WindingOrder from \"./WindingOrder.js\";\r\n\r\nconst scratchCarto1 = new Cartographic();\r\nconst scratchCarto2 = new Cartographic();\r\nfunction adjustPosHeightsForNormal(position, p1, p2, ellipsoid) {\r\n const carto1 = ellipsoid.cartesianToCartographic(position, scratchCarto1);\r\n const height = carto1.height;\r\n const p1Carto = ellipsoid.cartesianToCartographic(p1, scratchCarto2);\r\n p1Carto.height = height;\r\n ellipsoid.cartographicToCartesian(p1Carto, p1);\r\n\r\n const p2Carto = ellipsoid.cartesianToCartographic(p2, scratchCarto2);\r\n p2Carto.height = height - 100;\r\n ellipsoid.cartographicToCartesian(p2Carto, p2);\r\n}\r\n\r\nconst scratchBoundingRectangle = new BoundingRectangle();\r\nconst scratchPosition = new Cartesian3();\r\nconst scratchNormal = new Cartesian3();\r\nconst scratchTangent = new Cartesian3();\r\nconst scratchBitangent = new Cartesian3();\r\nconst p1Scratch = new Cartesian3();\r\nconst p2Scratch = new Cartesian3();\r\nlet scratchPerPosNormal = new Cartesian3();\r\nlet scratchPerPosTangent = new Cartesian3();\r\nlet scratchPerPosBitangent = new Cartesian3();\r\n\r\nconst appendTextureCoordinatesOrigin = new Cartesian2();\r\nconst appendTextureCoordinatesCartesian2 = new Cartesian2();\r\nconst appendTextureCoordinatesCartesian3 = new Cartesian3();\r\nconst appendTextureCoordinatesQuaternion = new Quaternion();\r\nconst appendTextureCoordinatesMatrix3 = new Matrix3();\r\nconst tangentMatrixScratch = new Matrix3();\r\n\r\nfunction computeAttributes(options) {\r\n const vertexFormat = options.vertexFormat;\r\n const geometry = options.geometry;\r\n const shadowVolume = options.shadowVolume;\r\n const flatPositions = geometry.attributes.position.values;\r\n const flatTexcoords = defined(geometry.attributes.st)\r\n ? geometry.attributes.st.values\r\n : undefined;\r\n\r\n let length = flatPositions.length;\r\n const wall = options.wall;\r\n const top = options.top || wall;\r\n const bottom = options.bottom || wall;\r\n if (\r\n vertexFormat.st ||\r\n vertexFormat.normal ||\r\n vertexFormat.tangent ||\r\n vertexFormat.bitangent ||\r\n shadowVolume\r\n ) {\r\n // PERFORMANCE_IDEA: Compute before subdivision, then just interpolate during subdivision.\r\n // PERFORMANCE_IDEA: Compute with createGeometryFromPositions() for fast path when there's no holes.\r\n const boundingRectangle = options.boundingRectangle;\r\n const tangentPlane = options.tangentPlane;\r\n const ellipsoid = options.ellipsoid;\r\n const stRotation = options.stRotation;\r\n const perPositionHeight = options.perPositionHeight;\r\n\r\n const origin = appendTextureCoordinatesOrigin;\r\n origin.x = boundingRectangle.x;\r\n origin.y = boundingRectangle.y;\r\n\r\n const textureCoordinates = vertexFormat.st\r\n ? new Float32Array(2 * (length / 3))\r\n : undefined;\r\n let normals;\r\n if (vertexFormat.normal) {\r\n if (perPositionHeight && top && !wall) {\r\n normals = geometry.attributes.normal.values;\r\n } else {\r\n normals = new Float32Array(length);\r\n }\r\n }\r\n const tangents = vertexFormat.tangent\r\n ? new Float32Array(length)\r\n : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(length)\r\n : undefined;\r\n const extrudeNormals = shadowVolume ? new Float32Array(length) : undefined;\r\n\r\n let textureCoordIndex = 0;\r\n let attrIndex = 0;\r\n\r\n let normal = scratchNormal;\r\n let tangent = scratchTangent;\r\n let bitangent = scratchBitangent;\r\n let recomputeNormal = true;\r\n\r\n let textureMatrix = appendTextureCoordinatesMatrix3;\r\n let tangentRotationMatrix = tangentMatrixScratch;\r\n if (stRotation !== 0.0) {\r\n let rotation = Quaternion.fromAxisAngle(\r\n tangentPlane._plane.normal,\r\n stRotation,\r\n appendTextureCoordinatesQuaternion\r\n );\r\n textureMatrix = Matrix3.fromQuaternion(rotation, textureMatrix);\r\n\r\n rotation = Quaternion.fromAxisAngle(\r\n tangentPlane._plane.normal,\r\n -stRotation,\r\n appendTextureCoordinatesQuaternion\r\n );\r\n tangentRotationMatrix = Matrix3.fromQuaternion(\r\n rotation,\r\n tangentRotationMatrix\r\n );\r\n } else {\r\n textureMatrix = Matrix3.clone(Matrix3.IDENTITY, textureMatrix);\r\n tangentRotationMatrix = Matrix3.clone(\r\n Matrix3.IDENTITY,\r\n tangentRotationMatrix\r\n );\r\n }\r\n\r\n let bottomOffset = 0;\r\n let bottomOffset2 = 0;\r\n\r\n if (top && bottom) {\r\n bottomOffset = length / 2;\r\n bottomOffset2 = length / 3;\r\n\r\n length /= 2;\r\n }\r\n\r\n for (let i = 0; i < length; i += 3) {\r\n const position = Cartesian3.fromArray(\r\n flatPositions,\r\n i,\r\n appendTextureCoordinatesCartesian3\r\n );\r\n\r\n if (vertexFormat.st) {\r\n if (!defined(flatTexcoords)) {\r\n let p = Matrix3.multiplyByVector(\r\n textureMatrix,\r\n position,\r\n scratchPosition\r\n );\r\n p = ellipsoid.scaleToGeodeticSurface(p, p);\r\n const st = tangentPlane.projectPointOntoPlane(\r\n p,\r\n appendTextureCoordinatesCartesian2\r\n );\r\n Cartesian2.subtract(st, origin, st);\r\n\r\n const stx = CesiumMath.clamp(st.x / boundingRectangle.width, 0, 1);\r\n const sty = CesiumMath.clamp(st.y / boundingRectangle.height, 0, 1);\r\n if (bottom) {\r\n textureCoordinates[textureCoordIndex + bottomOffset2] = stx;\r\n textureCoordinates[textureCoordIndex + 1 + bottomOffset2] = sty;\r\n }\r\n if (top) {\r\n textureCoordinates[textureCoordIndex] = stx;\r\n textureCoordinates[textureCoordIndex + 1] = sty;\r\n }\r\n\r\n textureCoordIndex += 2;\r\n }\r\n }\r\n\r\n if (\r\n vertexFormat.normal ||\r\n vertexFormat.tangent ||\r\n vertexFormat.bitangent ||\r\n shadowVolume\r\n ) {\r\n const attrIndex1 = attrIndex + 1;\r\n const attrIndex2 = attrIndex + 2;\r\n\r\n if (wall) {\r\n if (i + 3 < length) {\r\n const p1 = Cartesian3.fromArray(flatPositions, i + 3, p1Scratch);\r\n\r\n if (recomputeNormal) {\r\n const p2 = Cartesian3.fromArray(\r\n flatPositions,\r\n i + length,\r\n p2Scratch\r\n );\r\n if (perPositionHeight) {\r\n adjustPosHeightsForNormal(position, p1, p2, ellipsoid);\r\n }\r\n Cartesian3.subtract(p1, position, p1);\r\n Cartesian3.subtract(p2, position, p2);\r\n normal = Cartesian3.normalize(\r\n Cartesian3.cross(p2, p1, normal),\r\n normal\r\n );\r\n recomputeNormal = false;\r\n }\r\n\r\n if (Cartesian3.equalsEpsilon(p1, position, CesiumMath.EPSILON10)) {\r\n // if we've reached a corner\r\n recomputeNormal = true;\r\n }\r\n }\r\n\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n bitangent = ellipsoid.geodeticSurfaceNormal(position, bitangent);\r\n if (vertexFormat.tangent) {\r\n tangent = Cartesian3.normalize(\r\n Cartesian3.cross(bitangent, normal, tangent),\r\n tangent\r\n );\r\n }\r\n }\r\n } else {\r\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n if (perPositionHeight) {\r\n scratchPerPosNormal = Cartesian3.fromArray(\r\n normals,\r\n attrIndex,\r\n scratchPerPosNormal\r\n );\r\n scratchPerPosTangent = Cartesian3.cross(\r\n Cartesian3.UNIT_Z,\r\n scratchPerPosNormal,\r\n scratchPerPosTangent\r\n );\r\n scratchPerPosTangent = Cartesian3.normalize(\r\n Matrix3.multiplyByVector(\r\n tangentRotationMatrix,\r\n scratchPerPosTangent,\r\n scratchPerPosTangent\r\n ),\r\n scratchPerPosTangent\r\n );\r\n if (vertexFormat.bitangent) {\r\n scratchPerPosBitangent = Cartesian3.normalize(\r\n Cartesian3.cross(\r\n scratchPerPosNormal,\r\n scratchPerPosTangent,\r\n scratchPerPosBitangent\r\n ),\r\n scratchPerPosBitangent\r\n );\r\n }\r\n }\r\n\r\n tangent = Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent);\r\n tangent = Cartesian3.normalize(\r\n Matrix3.multiplyByVector(tangentRotationMatrix, tangent, tangent),\r\n tangent\r\n );\r\n if (vertexFormat.bitangent) {\r\n bitangent = Cartesian3.normalize(\r\n Cartesian3.cross(normal, tangent, bitangent),\r\n bitangent\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n if (options.wall) {\r\n normals[attrIndex + bottomOffset] = normal.x;\r\n normals[attrIndex1 + bottomOffset] = normal.y;\r\n normals[attrIndex2 + bottomOffset] = normal.z;\r\n } else if (bottom) {\r\n normals[attrIndex + bottomOffset] = -normal.x;\r\n normals[attrIndex1 + bottomOffset] = -normal.y;\r\n normals[attrIndex2 + bottomOffset] = -normal.z;\r\n }\r\n\r\n if ((top && !perPositionHeight) || wall) {\r\n normals[attrIndex] = normal.x;\r\n normals[attrIndex1] = normal.y;\r\n normals[attrIndex2] = normal.z;\r\n }\r\n }\r\n\r\n if (shadowVolume) {\r\n if (wall) {\r\n normal = ellipsoid.geodeticSurfaceNormal(position, normal);\r\n }\r\n extrudeNormals[attrIndex + bottomOffset] = -normal.x;\r\n extrudeNormals[attrIndex1 + bottomOffset] = -normal.y;\r\n extrudeNormals[attrIndex2 + bottomOffset] = -normal.z;\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n if (options.wall) {\r\n tangents[attrIndex + bottomOffset] = tangent.x;\r\n tangents[attrIndex1 + bottomOffset] = tangent.y;\r\n tangents[attrIndex2 + bottomOffset] = tangent.z;\r\n } else if (bottom) {\r\n tangents[attrIndex + bottomOffset] = -tangent.x;\r\n tangents[attrIndex1 + bottomOffset] = -tangent.y;\r\n tangents[attrIndex2 + bottomOffset] = -tangent.z;\r\n }\r\n\r\n if (top) {\r\n if (perPositionHeight) {\r\n tangents[attrIndex] = scratchPerPosTangent.x;\r\n tangents[attrIndex1] = scratchPerPosTangent.y;\r\n tangents[attrIndex2] = scratchPerPosTangent.z;\r\n } else {\r\n tangents[attrIndex] = tangent.x;\r\n tangents[attrIndex1] = tangent.y;\r\n tangents[attrIndex2] = tangent.z;\r\n }\r\n }\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n if (bottom) {\r\n bitangents[attrIndex + bottomOffset] = bitangent.x;\r\n bitangents[attrIndex1 + bottomOffset] = bitangent.y;\r\n bitangents[attrIndex2 + bottomOffset] = bitangent.z;\r\n }\r\n if (top) {\r\n if (perPositionHeight) {\r\n bitangents[attrIndex] = scratchPerPosBitangent.x;\r\n bitangents[attrIndex1] = scratchPerPosBitangent.y;\r\n bitangents[attrIndex2] = scratchPerPosBitangent.z;\r\n } else {\r\n bitangents[attrIndex] = bitangent.x;\r\n bitangents[attrIndex1] = bitangent.y;\r\n bitangents[attrIndex2] = bitangent.z;\r\n }\r\n }\r\n }\r\n attrIndex += 3;\r\n }\r\n }\r\n\r\n if (vertexFormat.st && !defined(flatTexcoords)) {\r\n geometry.attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: textureCoordinates,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n geometry.attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n geometry.attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n geometry.attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n\r\n if (shadowVolume) {\r\n geometry.attributes.extrudeDirection = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: extrudeNormals,\r\n });\r\n }\r\n }\r\n\r\n if (options.extrude && defined(options.offsetAttribute)) {\r\n const size = flatPositions.length / 3;\r\n let offsetAttribute = new Uint8Array(size);\r\n\r\n if (options.offsetAttribute === GeometryOffsetAttribute.TOP) {\r\n if ((top && bottom) || wall) {\r\n offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\r\n } else if (top) {\r\n offsetAttribute = offsetAttribute.fill(1);\r\n }\r\n } else {\r\n const offsetValue =\r\n options.offsetAttribute === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n offsetAttribute = offsetAttribute.fill(offsetValue);\r\n }\r\n\r\n geometry.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: offsetAttribute,\r\n });\r\n }\r\n\r\n return geometry;\r\n}\r\n\r\nconst startCartographicScratch = new Cartographic();\r\nconst endCartographicScratch = new Cartographic();\r\nconst idlCross = {\r\n westOverIDL: 0.0,\r\n eastOverIDL: 0.0,\r\n};\r\nlet ellipsoidGeodesic = new EllipsoidGeodesic();\r\nfunction computeRectangle(positions, ellipsoid, arcType, granularity, result) {\r\n result = defaultValue(result, new Rectangle());\r\n if (!defined(positions) || positions.length < 3) {\r\n result.west = 0.0;\r\n result.north = 0.0;\r\n result.south = 0.0;\r\n result.east = 0.0;\r\n return result;\r\n }\r\n\r\n if (arcType === ArcType.RHUMB) {\r\n return Rectangle.fromCartesianArray(positions, ellipsoid, result);\r\n }\r\n\r\n if (!ellipsoidGeodesic.ellipsoid.equals(ellipsoid)) {\r\n ellipsoidGeodesic = new EllipsoidGeodesic(undefined, undefined, ellipsoid);\r\n }\r\n\r\n result.west = Number.POSITIVE_INFINITY;\r\n result.east = Number.NEGATIVE_INFINITY;\r\n result.south = Number.POSITIVE_INFINITY;\r\n result.north = Number.NEGATIVE_INFINITY;\r\n\r\n idlCross.westOverIDL = Number.POSITIVE_INFINITY;\r\n idlCross.eastOverIDL = Number.NEGATIVE_INFINITY;\r\n\r\n const inverseChordLength =\r\n 1.0 / CesiumMath.chordLength(granularity, ellipsoid.maximumRadius);\r\n const positionsLength = positions.length;\r\n let endCartographic = ellipsoid.cartesianToCartographic(\r\n positions[0],\r\n endCartographicScratch\r\n );\r\n let startCartographic = startCartographicScratch;\r\n let swap;\r\n\r\n for (let i = 1; i < positionsLength; i++) {\r\n swap = startCartographic;\r\n startCartographic = endCartographic;\r\n endCartographic = ellipsoid.cartesianToCartographic(positions[i], swap);\r\n ellipsoidGeodesic.setEndPoints(startCartographic, endCartographic);\r\n interpolateAndGrowRectangle(\r\n ellipsoidGeodesic,\r\n inverseChordLength,\r\n result,\r\n idlCross\r\n );\r\n }\r\n\r\n swap = startCartographic;\r\n startCartographic = endCartographic;\r\n endCartographic = ellipsoid.cartesianToCartographic(positions[0], swap);\r\n ellipsoidGeodesic.setEndPoints(startCartographic, endCartographic);\r\n interpolateAndGrowRectangle(\r\n ellipsoidGeodesic,\r\n inverseChordLength,\r\n result,\r\n idlCross\r\n );\r\n\r\n if (result.east - result.west > idlCross.eastOverIDL - idlCross.westOverIDL) {\r\n result.west = idlCross.westOverIDL;\r\n result.east = idlCross.eastOverIDL;\r\n\r\n if (result.east > CesiumMath.PI) {\r\n result.east = result.east - CesiumMath.TWO_PI;\r\n }\r\n if (result.west > CesiumMath.PI) {\r\n result.west = result.west - CesiumMath.TWO_PI;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nconst interpolatedCartographicScratch = new Cartographic();\r\nfunction interpolateAndGrowRectangle(\r\n ellipsoidGeodesic,\r\n inverseChordLength,\r\n result,\r\n idlCross\r\n) {\r\n const segmentLength = ellipsoidGeodesic.surfaceDistance;\r\n\r\n const numPoints = Math.ceil(segmentLength * inverseChordLength);\r\n const subsegmentDistance =\r\n numPoints > 0 ? segmentLength / (numPoints - 1) : Number.POSITIVE_INFINITY;\r\n let interpolationDistance = 0.0;\r\n\r\n for (let i = 0; i < numPoints; i++) {\r\n const interpolatedCartographic = ellipsoidGeodesic.interpolateUsingSurfaceDistance(\r\n interpolationDistance,\r\n interpolatedCartographicScratch\r\n );\r\n interpolationDistance += subsegmentDistance;\r\n const longitude = interpolatedCartographic.longitude;\r\n const latitude = interpolatedCartographic.latitude;\r\n\r\n result.west = Math.min(result.west, longitude);\r\n result.east = Math.max(result.east, longitude);\r\n result.south = Math.min(result.south, latitude);\r\n result.north = Math.max(result.north, latitude);\r\n\r\n const lonAdjusted =\r\n longitude >= 0 ? longitude : longitude + CesiumMath.TWO_PI;\r\n idlCross.westOverIDL = Math.min(idlCross.westOverIDL, lonAdjusted);\r\n idlCross.eastOverIDL = Math.max(idlCross.eastOverIDL, lonAdjusted);\r\n }\r\n}\r\n\r\nconst createGeometryFromPositionsExtrudedPositions = [];\r\n\r\nfunction createGeometryFromPositionsExtruded(\r\n ellipsoid,\r\n polygon,\r\n textureCoordinates,\r\n granularity,\r\n hierarchy,\r\n perPositionHeight,\r\n closeTop,\r\n closeBottom,\r\n vertexFormat,\r\n arcType\r\n) {\r\n const geos = {\r\n walls: [],\r\n };\r\n let i;\r\n\r\n if (closeTop || closeBottom) {\r\n const topGeo = PolygonGeometryLibrary.createGeometryFromPositions(\r\n ellipsoid,\r\n polygon,\r\n textureCoordinates,\r\n granularity,\r\n perPositionHeight,\r\n vertexFormat,\r\n arcType\r\n );\r\n\r\n const edgePoints = topGeo.attributes.position.values;\r\n const indices = topGeo.indices;\r\n let numPositions;\r\n let newIndices;\r\n\r\n if (closeTop && closeBottom) {\r\n const topBottomPositions = edgePoints.concat(edgePoints);\r\n\r\n numPositions = topBottomPositions.length / 3;\r\n\r\n newIndices = IndexDatatype.createTypedArray(\r\n numPositions,\r\n indices.length * 2\r\n );\r\n newIndices.set(indices);\r\n const ilength = indices.length;\r\n\r\n const length = numPositions / 2;\r\n\r\n for (i = 0; i < ilength; i += 3) {\r\n const i0 = newIndices[i] + length;\r\n const i1 = newIndices[i + 1] + length;\r\n const i2 = newIndices[i + 2] + length;\r\n\r\n newIndices[i + ilength] = i2;\r\n newIndices[i + 1 + ilength] = i1;\r\n newIndices[i + 2 + ilength] = i0;\r\n }\r\n\r\n topGeo.attributes.position.values = topBottomPositions;\r\n if (perPositionHeight && vertexFormat.normal) {\r\n const normals = topGeo.attributes.normal.values;\r\n topGeo.attributes.normal.values = new Float32Array(\r\n topBottomPositions.length\r\n );\r\n topGeo.attributes.normal.values.set(normals);\r\n }\r\n\r\n if (vertexFormat.st && defined(textureCoordinates)) {\r\n const texcoords = topGeo.attributes.st.values;\r\n topGeo.attributes.st.values = new Float32Array(numPositions * 2);\r\n topGeo.attributes.st.values = texcoords.concat(texcoords);\r\n }\r\n\r\n topGeo.indices = newIndices;\r\n } else if (closeBottom) {\r\n numPositions = edgePoints.length / 3;\r\n newIndices = IndexDatatype.createTypedArray(numPositions, indices.length);\r\n\r\n for (i = 0; i < indices.length; i += 3) {\r\n newIndices[i] = indices[i + 2];\r\n newIndices[i + 1] = indices[i + 1];\r\n newIndices[i + 2] = indices[i];\r\n }\r\n\r\n topGeo.indices = newIndices;\r\n }\r\n\r\n geos.topAndBottom = new GeometryInstance({\r\n geometry: topGeo,\r\n });\r\n }\r\n\r\n let outerRing = hierarchy.outerRing;\r\n let tangentPlane = EllipsoidTangentPlane.fromPoints(outerRing, ellipsoid);\r\n let positions2D = tangentPlane.projectPointsOntoPlane(\r\n outerRing,\r\n createGeometryFromPositionsExtrudedPositions\r\n );\r\n\r\n let windingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);\r\n if (windingOrder === WindingOrder.CLOCKWISE) {\r\n outerRing = outerRing.slice().reverse();\r\n }\r\n\r\n let wallGeo = PolygonGeometryLibrary.computeWallGeometry(\r\n outerRing,\r\n textureCoordinates,\r\n ellipsoid,\r\n granularity,\r\n perPositionHeight,\r\n arcType\r\n );\r\n geos.walls.push(\r\n new GeometryInstance({\r\n geometry: wallGeo,\r\n })\r\n );\r\n\r\n const holes = hierarchy.holes;\r\n for (i = 0; i < holes.length; i++) {\r\n let hole = holes[i];\r\n\r\n tangentPlane = EllipsoidTangentPlane.fromPoints(hole, ellipsoid);\r\n positions2D = tangentPlane.projectPointsOntoPlane(\r\n hole,\r\n createGeometryFromPositionsExtrudedPositions\r\n );\r\n\r\n windingOrder = PolygonPipeline.computeWindingOrder2D(positions2D);\r\n if (windingOrder === WindingOrder.COUNTER_CLOCKWISE) {\r\n hole = hole.slice().reverse();\r\n }\r\n\r\n wallGeo = PolygonGeometryLibrary.computeWallGeometry(\r\n hole,\r\n textureCoordinates,\r\n ellipsoid,\r\n granularity,\r\n perPositionHeight,\r\n arcType\r\n );\r\n geos.walls.push(\r\n new GeometryInstance({\r\n geometry: wallGeo,\r\n })\r\n );\r\n }\r\n\r\n return geos;\r\n}\r\n\r\n/**\r\n * A description of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\r\n *\r\n * @alias PolygonGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\r\n * @param {Number} [options.height=0.0] The distance in meters between the polygon and the ellipsoid surface.\r\n * @param {Number} [options.extrudedHeight] The distance in meters between the polygon's extruded face and the ellipsoid surface.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\r\n * @param {Boolean} [options.closeTop=true] When false, leaves off the top of an extruded polygon open.\r\n * @param {Boolean} [options.closeBottom=true] When false, leaves off the bottom of an extruded polygon open.\r\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\r\n * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. Has no effect for ground primitives.\r\n *\r\n * @see PolygonGeometry#createGeometry\r\n * @see PolygonGeometry#fromPositions\r\n *\r\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polygon.html|Cesium Sandcastle Polygon Demo}\r\n *\r\n * @example\r\n * // 1. create a polygon from points\r\n * const polygon = new Cesium.PolygonGeometry({\r\n * polygonHierarchy : new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ])\r\n * )\r\n * });\r\n * const geometry = Cesium.PolygonGeometry.createGeometry(polygon);\r\n *\r\n * // 2. create a nested polygon with holes\r\n * const polygonWithHole = new Cesium.PolygonGeometry({\r\n * polygonHierarchy : new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -109.0, 30.0,\r\n * -95.0, 30.0,\r\n * -95.0, 40.0,\r\n * -109.0, 40.0\r\n * ]),\r\n * [new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -107.0, 31.0,\r\n * -107.0, 39.0,\r\n * -97.0, 39.0,\r\n * -97.0, 31.0\r\n * ]),\r\n * [new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -105.0, 33.0,\r\n * -99.0, 33.0,\r\n * -99.0, 37.0,\r\n * -105.0, 37.0\r\n * ]),\r\n * [new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -103.0, 34.0,\r\n * -101.0, 34.0,\r\n * -101.0, 36.0,\r\n * -103.0, 36.0\r\n * ])\r\n * )]\r\n * )]\r\n * )]\r\n * )\r\n * });\r\n * const geometry = Cesium.PolygonGeometry.createGeometry(polygonWithHole);\r\n *\r\n * // 3. create extruded polygon\r\n * const extrudedPolygon = new Cesium.PolygonGeometry({\r\n * polygonHierarchy : new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ])\r\n * ),\r\n * extrudedHeight: 300000\r\n * });\r\n * const geometry = Cesium.PolygonGeometry.createGeometry(extrudedPolygon);\r\n */\r\nfunction PolygonGeometry(options) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"options\", options);\r\n Check.typeOf.object(\"options.polygonHierarchy\", options.polygonHierarchy);\r\n if (\r\n defined(options.perPositionHeight) &&\r\n options.perPositionHeight &&\r\n defined(options.height)\r\n ) {\r\n throw new DeveloperError(\r\n \"Cannot use both options.perPositionHeight and options.height\"\r\n );\r\n }\r\n if (\r\n defined(options.arcType) &&\r\n options.arcType !== ArcType.GEODESIC &&\r\n options.arcType !== ArcType.RHUMB\r\n ) {\r\n throw new DeveloperError(\r\n \"Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const polygonHierarchy = options.polygonHierarchy;\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const stRotation = defaultValue(options.stRotation, 0.0);\r\n const textureCoordinates = options.textureCoordinates;\r\n const perPositionHeight = defaultValue(options.perPositionHeight, false);\r\n const perPositionHeightExtrude =\r\n perPositionHeight && defined(options.extrudedHeight);\r\n let height = defaultValue(options.height, 0.0);\r\n let extrudedHeight = defaultValue(options.extrudedHeight, height);\r\n\r\n if (!perPositionHeightExtrude) {\r\n const h = Math.max(height, extrudedHeight);\r\n extrudedHeight = Math.min(height, extrudedHeight);\r\n height = h;\r\n }\r\n\r\n this._vertexFormat = VertexFormat.clone(vertexFormat);\r\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\r\n this._granularity = granularity;\r\n this._stRotation = stRotation;\r\n this._height = height;\r\n this._extrudedHeight = extrudedHeight;\r\n this._closeTop = defaultValue(options.closeTop, true);\r\n this._closeBottom = defaultValue(options.closeBottom, true);\r\n this._polygonHierarchy = polygonHierarchy;\r\n this._perPositionHeight = perPositionHeight;\r\n this._perPositionHeightExtrude = perPositionHeightExtrude;\r\n this._shadowVolume = defaultValue(options.shadowVolume, false);\r\n this._workerName = \"createPolygonGeometry\";\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._arcType = defaultValue(options.arcType, ArcType.GEODESIC);\r\n\r\n this._rectangle = undefined;\r\n this._textureCoordinateRotationPoints = undefined;\r\n this._textureCoordinates = textureCoordinates;\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n PolygonGeometryLibrary.computeHierarchyPackedLength(\r\n polygonHierarchy,\r\n Cartesian3\r\n ) +\r\n Ellipsoid.packedLength +\r\n VertexFormat.packedLength +\r\n (textureCoordinates\r\n ? PolygonGeometryLibrary.computeHierarchyPackedLength(\r\n textureCoordinates,\r\n Cartesian2\r\n )\r\n : 1) +\r\n 12;\r\n}\r\n\r\n/**\r\n * A description of a polygon from an array of positions. Polygon geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\r\n * @param {Number} [options.height=0.0] The height of the polygon.\r\n * @param {Number} [options.extrudedHeight] The height of the polygon extrusion.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\r\n * @param {Boolean} [options.closeTop=true] When false, leaves off the top of an extruded polygon open.\r\n * @param {Boolean} [options.closeBottom=true] When false, leaves off the bottom of an extruded polygon open.\r\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\r\n * @param {PolygonHierarchy} [options.textureCoordinates] Texture coordinates as a {@link PolygonHierarchy} of {@link Cartesian2} points. Has no effect for ground primitives.\r\n * @returns {PolygonGeometry}\r\n *\r\n * @example\r\n * // create a polygon from points\r\n * const polygon = Cesium.PolygonGeometry.fromPositions({\r\n * positions : Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ])\r\n * });\r\n * const geometry = Cesium.PolygonGeometry.createGeometry(polygon);\r\n *\r\n * @see PolygonGeometry#createGeometry\r\n */\r\nPolygonGeometry.fromPositions = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.positions\", options.positions);\r\n //>>includeEnd('debug');\r\n\r\n const newOptions = {\r\n polygonHierarchy: {\r\n positions: options.positions,\r\n },\r\n height: options.height,\r\n extrudedHeight: options.extrudedHeight,\r\n vertexFormat: options.vertexFormat,\r\n stRotation: options.stRotation,\r\n ellipsoid: options.ellipsoid,\r\n granularity: options.granularity,\r\n perPositionHeight: options.perPositionHeight,\r\n closeTop: options.closeTop,\r\n closeBottom: options.closeBottom,\r\n offsetAttribute: options.offsetAttribute,\r\n arcType: options.arcType,\r\n textureCoordinates: options.textureCoordinates,\r\n };\r\n return new PolygonGeometry(newOptions);\r\n};\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PolygonGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nPolygonGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\r\n value._polygonHierarchy,\r\n array,\r\n startingIndex,\r\n Cartesian3\r\n );\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._height;\r\n array[startingIndex++] = value._extrudedHeight;\r\n array[startingIndex++] = value._granularity;\r\n array[startingIndex++] = value._stRotation;\r\n array[startingIndex++] = value._perPositionHeightExtrude ? 1.0 : 0.0;\r\n array[startingIndex++] = value._perPositionHeight ? 1.0 : 0.0;\r\n array[startingIndex++] = value._closeTop ? 1.0 : 0.0;\r\n array[startingIndex++] = value._closeBottom ? 1.0 : 0.0;\r\n array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\r\n array[startingIndex++] = defaultValue(value._offsetAttribute, -1);\r\n array[startingIndex++] = value._arcType;\r\n if (defined(value._textureCoordinates)) {\r\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\r\n value._textureCoordinates,\r\n array,\r\n startingIndex,\r\n Cartesian2\r\n );\r\n } else {\r\n array[startingIndex++] = -1.0;\r\n }\r\n array[startingIndex++] = value.packedLength;\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchVertexFormat = new VertexFormat();\r\n\r\n//Only used to avoid inability to default construct.\r\nconst dummyOptions = {\r\n polygonHierarchy: {},\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PolygonGeometry} [result] The object into which to store the result.\r\n */\r\nPolygonGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\r\n array,\r\n startingIndex,\r\n Cartesian3\r\n );\r\n startingIndex = polygonHierarchy.startingIndex;\r\n delete polygonHierarchy.startingIndex;\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const height = array[startingIndex++];\r\n const extrudedHeight = array[startingIndex++];\r\n const granularity = array[startingIndex++];\r\n const stRotation = array[startingIndex++];\r\n const perPositionHeightExtrude = array[startingIndex++] === 1.0;\r\n const perPositionHeight = array[startingIndex++] === 1.0;\r\n const closeTop = array[startingIndex++] === 1.0;\r\n const closeBottom = array[startingIndex++] === 1.0;\r\n const shadowVolume = array[startingIndex++] === 1.0;\r\n const offsetAttribute = array[startingIndex++];\r\n const arcType = array[startingIndex++];\r\n const textureCoordinates =\r\n array[startingIndex] === -1.0\r\n ? undefined\r\n : PolygonGeometryLibrary.unpackPolygonHierarchy(\r\n array,\r\n startingIndex,\r\n Cartesian2\r\n );\r\n if (defined(textureCoordinates)) {\r\n startingIndex = textureCoordinates.startingIndex;\r\n delete textureCoordinates.startingIndex;\r\n } else {\r\n startingIndex++;\r\n }\r\n const packedLength = array[startingIndex++];\r\n\r\n if (!defined(result)) {\r\n result = new PolygonGeometry(dummyOptions);\r\n }\r\n\r\n result._polygonHierarchy = polygonHierarchy;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._height = height;\r\n result._extrudedHeight = extrudedHeight;\r\n result._granularity = granularity;\r\n result._stRotation = stRotation;\r\n result._perPositionHeightExtrude = perPositionHeightExtrude;\r\n result._perPositionHeight = perPositionHeight;\r\n result._closeTop = closeTop;\r\n result._closeBottom = closeBottom;\r\n result._shadowVolume = shadowVolume;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n result._arcType = arcType;\r\n result._textureCoordinates = textureCoordinates;\r\n result.packedLength = packedLength;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Returns the bounding rectangle given the provided options\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions sampled.\r\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polygon edges must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Rectangle} [result] An object in which to store the result.\r\n *\r\n * @returns {Rectangle} The result rectangle\r\n */\r\nPolygonGeometry.computeRectangle = function (options, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"options\", options);\r\n Check.typeOf.object(\"options.polygonHierarchy\", options.polygonHierarchy);\r\n //>>includeEnd('debug');\r\n\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const arcType = defaultValue(options.arcType, ArcType.GEODESIC);\r\n //>>includeStart('debug', pragmas.debug);\r\n if (arcType !== ArcType.GEODESIC && arcType !== ArcType.RHUMB) {\r\n throw new DeveloperError(\r\n \"Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const polygonHierarchy = options.polygonHierarchy;\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n\r\n return computeRectangle(\r\n polygonHierarchy.positions,\r\n ellipsoid,\r\n arcType,\r\n granularity,\r\n result\r\n );\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a polygon, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {PolygonGeometry} polygonGeometry A description of the polygon.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nPolygonGeometry.createGeometry = function (polygonGeometry) {\r\n const vertexFormat = polygonGeometry._vertexFormat;\r\n const ellipsoid = polygonGeometry._ellipsoid;\r\n const granularity = polygonGeometry._granularity;\r\n const stRotation = polygonGeometry._stRotation;\r\n const polygonHierarchy = polygonGeometry._polygonHierarchy;\r\n const perPositionHeight = polygonGeometry._perPositionHeight;\r\n const closeTop = polygonGeometry._closeTop;\r\n const closeBottom = polygonGeometry._closeBottom;\r\n const arcType = polygonGeometry._arcType;\r\n const textureCoordinates = polygonGeometry._textureCoordinates;\r\n\r\n const hasTextureCoordinates = defined(textureCoordinates);\r\n\r\n let outerPositions = polygonHierarchy.positions;\r\n if (outerPositions.length < 3) {\r\n return;\r\n }\r\n\r\n const tangentPlane = EllipsoidTangentPlane.fromPoints(\r\n outerPositions,\r\n ellipsoid\r\n );\r\n\r\n const results = PolygonGeometryLibrary.polygonsFromHierarchy(\r\n polygonHierarchy,\r\n hasTextureCoordinates,\r\n tangentPlane.projectPointsOntoPlane.bind(tangentPlane),\r\n !perPositionHeight,\r\n ellipsoid\r\n );\r\n\r\n const hierarchy = results.hierarchy;\r\n const polygons = results.polygons;\r\n\r\n const dummyFunction = function (identity) {\r\n return identity;\r\n };\r\n\r\n const textureCoordinatePolygons = hasTextureCoordinates\r\n ? PolygonGeometryLibrary.polygonsFromHierarchy(\r\n textureCoordinates,\r\n true,\r\n dummyFunction,\r\n false\r\n ).polygons\r\n : undefined;\r\n\r\n if (hierarchy.length === 0) {\r\n return;\r\n }\r\n\r\n outerPositions = hierarchy[0].outerRing;\r\n const boundingRectangle = PolygonGeometryLibrary.computeBoundingRectangle(\r\n tangentPlane.plane.normal,\r\n tangentPlane.projectPointOntoPlane.bind(tangentPlane),\r\n outerPositions,\r\n stRotation,\r\n scratchBoundingRectangle\r\n );\r\n\r\n const geometries = [];\r\n\r\n const height = polygonGeometry._height;\r\n const extrudedHeight = polygonGeometry._extrudedHeight;\r\n const extrude =\r\n polygonGeometry._perPositionHeightExtrude ||\r\n !CesiumMath.equalsEpsilon(height, extrudedHeight, 0, CesiumMath.EPSILON2);\r\n\r\n const options = {\r\n perPositionHeight: perPositionHeight,\r\n vertexFormat: vertexFormat,\r\n geometry: undefined,\r\n tangentPlane: tangentPlane,\r\n boundingRectangle: boundingRectangle,\r\n ellipsoid: ellipsoid,\r\n stRotation: stRotation,\r\n textureCoordinates: undefined,\r\n bottom: false,\r\n top: true,\r\n wall: false,\r\n extrude: false,\r\n arcType: arcType,\r\n };\r\n\r\n let i;\r\n\r\n if (extrude) {\r\n options.extrude = true;\r\n options.top = closeTop;\r\n options.bottom = closeBottom;\r\n options.shadowVolume = polygonGeometry._shadowVolume;\r\n options.offsetAttribute = polygonGeometry._offsetAttribute;\r\n for (i = 0; i < polygons.length; i++) {\r\n const splitGeometry = createGeometryFromPositionsExtruded(\r\n ellipsoid,\r\n polygons[i],\r\n hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined,\r\n granularity,\r\n hierarchy[i],\r\n perPositionHeight,\r\n closeTop,\r\n closeBottom,\r\n vertexFormat,\r\n arcType\r\n );\r\n\r\n let topAndBottom;\r\n if (closeTop && closeBottom) {\r\n topAndBottom = splitGeometry.topAndBottom;\r\n options.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\r\n topAndBottom.geometry,\r\n height,\r\n extrudedHeight,\r\n ellipsoid,\r\n perPositionHeight\r\n );\r\n } else if (closeTop) {\r\n topAndBottom = splitGeometry.topAndBottom;\r\n topAndBottom.geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\r\n topAndBottom.geometry.attributes.position.values,\r\n height,\r\n ellipsoid,\r\n !perPositionHeight\r\n );\r\n options.geometry = topAndBottom.geometry;\r\n } else if (closeBottom) {\r\n topAndBottom = splitGeometry.topAndBottom;\r\n topAndBottom.geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\r\n topAndBottom.geometry.attributes.position.values,\r\n extrudedHeight,\r\n ellipsoid,\r\n true\r\n );\r\n options.geometry = topAndBottom.geometry;\r\n }\r\n if (closeTop || closeBottom) {\r\n options.wall = false;\r\n topAndBottom.geometry = computeAttributes(options);\r\n geometries.push(topAndBottom);\r\n }\r\n\r\n const walls = splitGeometry.walls;\r\n options.wall = true;\r\n for (let k = 0; k < walls.length; k++) {\r\n const wall = walls[k];\r\n options.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\r\n wall.geometry,\r\n height,\r\n extrudedHeight,\r\n ellipsoid,\r\n perPositionHeight\r\n );\r\n wall.geometry = computeAttributes(options);\r\n geometries.push(wall);\r\n }\r\n }\r\n } else {\r\n for (i = 0; i < polygons.length; i++) {\r\n const geometryInstance = new GeometryInstance({\r\n geometry: PolygonGeometryLibrary.createGeometryFromPositions(\r\n ellipsoid,\r\n polygons[i],\r\n hasTextureCoordinates ? textureCoordinatePolygons[i] : undefined,\r\n granularity,\r\n perPositionHeight,\r\n vertexFormat,\r\n arcType\r\n ),\r\n });\r\n geometryInstance.geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\r\n geometryInstance.geometry.attributes.position.values,\r\n height,\r\n ellipsoid,\r\n !perPositionHeight\r\n );\r\n options.geometry = geometryInstance.geometry;\r\n\r\n geometryInstance.geometry = computeAttributes(options);\r\n\r\n if (defined(polygonGeometry._offsetAttribute)) {\r\n const length =\r\n geometryInstance.geometry.attributes.position.values.length;\r\n const offsetValue =\r\n polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute(\r\n {\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n }\r\n );\r\n }\r\n\r\n geometries.push(geometryInstance);\r\n }\r\n }\r\n\r\n const geometry = GeometryPipeline.combineInstances(geometries)[0];\r\n geometry.attributes.position.values = new Float64Array(\r\n geometry.attributes.position.values\r\n );\r\n geometry.indices = IndexDatatype.createTypedArray(\r\n geometry.attributes.position.values.length / 3,\r\n geometry.indices\r\n );\r\n\r\n const attributes = geometry.attributes;\r\n const boundingSphere = BoundingSphere.fromVertices(\r\n attributes.position.values\r\n );\r\n\r\n if (!vertexFormat.position) {\r\n delete attributes.position;\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: geometry.indices,\r\n primitiveType: geometry.primitiveType,\r\n boundingSphere: boundingSphere,\r\n offsetAttribute: polygonGeometry._offsetAttribute,\r\n });\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPolygonGeometry.createShadowVolume = function (\r\n polygonGeometry,\r\n minHeightFunc,\r\n maxHeightFunc\r\n) {\r\n const granularity = polygonGeometry._granularity;\r\n const ellipsoid = polygonGeometry._ellipsoid;\r\n\r\n const minHeight = minHeightFunc(granularity, ellipsoid);\r\n const maxHeight = maxHeightFunc(granularity, ellipsoid);\r\n\r\n return new PolygonGeometry({\r\n polygonHierarchy: polygonGeometry._polygonHierarchy,\r\n ellipsoid: ellipsoid,\r\n stRotation: polygonGeometry._stRotation,\r\n granularity: granularity,\r\n perPositionHeight: false,\r\n extrudedHeight: minHeight,\r\n height: maxHeight,\r\n vertexFormat: VertexFormat.POSITION_ONLY,\r\n shadowVolume: true,\r\n arcType: polygonGeometry._arcType,\r\n });\r\n};\r\n\r\nfunction textureCoordinateRotationPoints(polygonGeometry) {\r\n const stRotation = -polygonGeometry._stRotation;\r\n if (stRotation === 0.0) {\r\n return [0, 0, 0, 1, 1, 0];\r\n }\r\n const ellipsoid = polygonGeometry._ellipsoid;\r\n const positions = polygonGeometry._polygonHierarchy.positions;\r\n const boundingRectangle = polygonGeometry.rectangle;\r\n return Geometry._textureCoordinateRotationPoints(\r\n positions,\r\n stRotation,\r\n ellipsoid,\r\n boundingRectangle\r\n );\r\n}\r\n\r\nObject.defineProperties(PolygonGeometry.prototype, {\r\n /**\r\n * @private\r\n */\r\n rectangle: {\r\n get: function () {\r\n if (!defined(this._rectangle)) {\r\n const positions = this._polygonHierarchy.positions;\r\n this._rectangle = computeRectangle(\r\n positions,\r\n this._ellipsoid,\r\n this._arcType,\r\n this._granularity\r\n );\r\n }\r\n\r\n return this._rectangle;\r\n },\r\n },\r\n /**\r\n * For remapping texture coordinates when rendering PolygonGeometries as GroundPrimitives.\r\n * @private\r\n */\r\n textureCoordinateRotationPoints: {\r\n get: function () {\r\n if (!defined(this._textureCoordinateRotationPoints)) {\r\n this._textureCoordinateRotationPoints = textureCoordinateRotationPoints(\r\n this\r\n );\r\n }\r\n return this._textureCoordinateRotationPoints;\r\n },\r\n },\r\n});\r\nexport default PolygonGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport PolygonGeometry from \"../Core/PolygonGeometry.js\";\r\n\r\nfunction createPolygonGeometry(polygonGeometry, offset) {\r\n if (defined(offset)) {\r\n polygonGeometry = PolygonGeometry.unpack(polygonGeometry, offset);\r\n }\r\n polygonGeometry._ellipsoid = Ellipsoid.clone(polygonGeometry._ellipsoid);\r\n return PolygonGeometry.createGeometry(polygonGeometry);\r\n}\r\nexport default createPolygonGeometry;\r\n"],"names":["Cartographic","BoundingRectangle","Cartesian3","Cartesian2","Quaternion","Matrix3","defined","CesiumMath","GeometryAttribute","ComponentDatatype","GeometryOffsetAttribute","EllipsoidGeodesic","defaultValue","Rectangle","ArcType","PolygonGeometryLibrary","IndexDatatype","GeometryInstance","EllipsoidTangentPlane","PolygonPipeline","WindingOrder","Check","DeveloperError","VertexFormat","Ellipsoid","GeometryPipeline","BoundingSphere","Geometry"],"mappings":"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AI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,CAAC;EACpC,KAAK;AACL;EACA,IAAI,OAAO,GAAGL,6CAAsB,CAAC,mBAAmB;EACxD,MAAM,IAAI;EACV,MAAM,kBAAkB;EACxB,MAAM,SAAS;EACf,MAAM,WAAW;EACjB,MAAM,iBAAiB;EACvB,MAAM,OAAO;EACb,KAAK,CAAC;EACN,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI;EACnB,MAAM,IAAIE,iCAAgB,CAAC;EAC3B,QAAQ,QAAQ,EAAE,OAAO;EACzB,OAAO,CAAC;EACR,KAAK,CAAC;EACN,GAAG;AACH;EACA,EAAE,OAAO,IAAI,CAAC;EACd,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,eAAe,CAAC,OAAO,EAAE;EAClC;EACA,EAAEI,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;EAC1C,EAAEA,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;EAC5E,EAAE;EACF,IAAIf,oBAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC;EACtC,IAAI,OAAO,CAAC,iBAAiB;EAC7B,IAAIA,oBAAO,CAAC,OAAO,CAAC,MAAM,CAAC;EAC3B,IAAI;EACJ,IAAI,MAAM,IAAIgB,oBAAc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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createPolygonOutlineGeometry.js b/debug/cesium/Workers/createPolygonOutlineGeometry.js deleted file mode 100644 index 78aa525..0000000 --- a/debug/cesium/Workers/createPolygonOutlineGeometry.js +++ /dev/null @@ -1,709 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './ArcType-d608b872', './Transforms-11fb6b0a', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './EllipsoidTangentPlane-c421b2cb', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryInstance-b2be3e5a', './GeometryOffsetAttribute-cc320d7d', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonGeometryLibrary-62266ab5', './PolygonPipeline-313487c3', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './arrayRemoveDuplicates-c3526030', './EllipsoidRhumbLine-48b4507b'], (function (defaultValue, Matrix3, ArcType, Transforms, Check, ComponentDatatype, EllipsoidTangentPlane, GeometryAttribute, GeometryAttributes, GeometryInstance, GeometryOffsetAttribute, GeometryPipeline, IndexDatatype, Math$1, PolygonGeometryLibrary, PolygonPipeline, Matrix2, RuntimeError, combine, WebGLConstants, AxisAlignedBoundingBox, IntersectionTests, Plane, AttributeCompression, EncodedCartesian3, arrayRemoveDuplicates, EllipsoidRhumbLine) { 'use strict'; - - const createGeometryFromPositionsPositions = []; - const createGeometryFromPositionsSubdivided = []; - - function createGeometryFromPositions( - ellipsoid, - positions, - minDistance, - perPositionHeight, - arcType - ) { - const tangentPlane = EllipsoidTangentPlane.EllipsoidTangentPlane.fromPoints(positions, ellipsoid); - const positions2D = tangentPlane.projectPointsOntoPlane( - positions, - createGeometryFromPositionsPositions - ); - - const originalWindingOrder = PolygonPipeline.PolygonPipeline.computeWindingOrder2D( - positions2D - ); - if (originalWindingOrder === PolygonPipeline.WindingOrder.CLOCKWISE) { - positions2D.reverse(); - positions = positions.slice().reverse(); - } - - let subdividedPositions; - let i; - - let length = positions.length; - let index = 0; - - if (!perPositionHeight) { - let numVertices = 0; - if (arcType === ArcType.ArcType.GEODESIC) { - for (i = 0; i < length; i++) { - numVertices += PolygonGeometryLibrary.PolygonGeometryLibrary.subdivideLineCount( - positions[i], - positions[(i + 1) % length], - minDistance - ); - } - } else if (arcType === ArcType.ArcType.RHUMB) { - for (i = 0; i < length; i++) { - numVertices += PolygonGeometryLibrary.PolygonGeometryLibrary.subdivideRhumbLineCount( - ellipsoid, - positions[i], - positions[(i + 1) % length], - minDistance - ); - } - } - subdividedPositions = new Float64Array(numVertices * 3); - for (i = 0; i < length; i++) { - let tempPositions; - if (arcType === ArcType.ArcType.GEODESIC) { - tempPositions = PolygonGeometryLibrary.PolygonGeometryLibrary.subdivideLine( - positions[i], - positions[(i + 1) % length], - minDistance, - createGeometryFromPositionsSubdivided - ); - } else if (arcType === ArcType.ArcType.RHUMB) { - tempPositions = PolygonGeometryLibrary.PolygonGeometryLibrary.subdivideRhumbLine( - ellipsoid, - positions[i], - positions[(i + 1) % length], - minDistance, - createGeometryFromPositionsSubdivided - ); - } - const tempPositionsLength = tempPositions.length; - for (let j = 0; j < tempPositionsLength; ++j) { - subdividedPositions[index++] = tempPositions[j]; - } - } - } else { - subdividedPositions = new Float64Array(length * 2 * 3); - for (i = 0; i < length; i++) { - const p0 = positions[i]; - const p1 = positions[(i + 1) % length]; - subdividedPositions[index++] = p0.x; - subdividedPositions[index++] = p0.y; - subdividedPositions[index++] = p0.z; - subdividedPositions[index++] = p1.x; - subdividedPositions[index++] = p1.y; - subdividedPositions[index++] = p1.z; - } - } - - length = subdividedPositions.length / 3; - const indicesSize = length * 2; - const indices = IndexDatatype.IndexDatatype.createTypedArray(length, indicesSize); - index = 0; - for (i = 0; i < length - 1; i++) { - indices[index++] = i; - indices[index++] = i + 1; - } - indices[index++] = length - 1; - indices[index++] = 0; - - return new GeometryInstance.GeometryInstance({ - geometry: new GeometryAttribute.Geometry({ - attributes: new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: subdividedPositions, - }), - }), - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - }), - }); - } - - function createGeometryFromPositionsExtruded( - ellipsoid, - positions, - minDistance, - perPositionHeight, - arcType - ) { - const tangentPlane = EllipsoidTangentPlane.EllipsoidTangentPlane.fromPoints(positions, ellipsoid); - const positions2D = tangentPlane.projectPointsOntoPlane( - positions, - createGeometryFromPositionsPositions - ); - - const originalWindingOrder = PolygonPipeline.PolygonPipeline.computeWindingOrder2D( - positions2D - ); - if (originalWindingOrder === PolygonPipeline.WindingOrder.CLOCKWISE) { - positions2D.reverse(); - positions = positions.slice().reverse(); - } - - let subdividedPositions; - let i; - - let length = positions.length; - const corners = new Array(length); - let index = 0; - - if (!perPositionHeight) { - let numVertices = 0; - if (arcType === ArcType.ArcType.GEODESIC) { - for (i = 0; i < length; i++) { - numVertices += PolygonGeometryLibrary.PolygonGeometryLibrary.subdivideLineCount( - positions[i], - positions[(i + 1) % length], - minDistance - ); - } - } else if (arcType === ArcType.ArcType.RHUMB) { - for (i = 0; i < length; i++) { - numVertices += PolygonGeometryLibrary.PolygonGeometryLibrary.subdivideRhumbLineCount( - ellipsoid, - positions[i], - positions[(i + 1) % length], - minDistance - ); - } - } - - subdividedPositions = new Float64Array(numVertices * 3 * 2); - for (i = 0; i < length; ++i) { - corners[i] = index / 3; - let tempPositions; - if (arcType === ArcType.ArcType.GEODESIC) { - tempPositions = PolygonGeometryLibrary.PolygonGeometryLibrary.subdivideLine( - positions[i], - positions[(i + 1) % length], - minDistance, - createGeometryFromPositionsSubdivided - ); - } else if (arcType === ArcType.ArcType.RHUMB) { - tempPositions = PolygonGeometryLibrary.PolygonGeometryLibrary.subdivideRhumbLine( - ellipsoid, - positions[i], - positions[(i + 1) % length], - minDistance, - createGeometryFromPositionsSubdivided - ); - } - const tempPositionsLength = tempPositions.length; - for (let j = 0; j < tempPositionsLength; ++j) { - subdividedPositions[index++] = tempPositions[j]; - } - } - } else { - subdividedPositions = new Float64Array(length * 2 * 3 * 2); - for (i = 0; i < length; ++i) { - corners[i] = index / 3; - const p0 = positions[i]; - const p1 = positions[(i + 1) % length]; - - subdividedPositions[index++] = p0.x; - subdividedPositions[index++] = p0.y; - subdividedPositions[index++] = p0.z; - subdividedPositions[index++] = p1.x; - subdividedPositions[index++] = p1.y; - subdividedPositions[index++] = p1.z; - } - } - - length = subdividedPositions.length / (3 * 2); - const cornersLength = corners.length; - - const indicesSize = (length * 2 + cornersLength) * 2; - const indices = IndexDatatype.IndexDatatype.createTypedArray( - length + cornersLength, - indicesSize - ); - - index = 0; - for (i = 0; i < length; ++i) { - indices[index++] = i; - indices[index++] = (i + 1) % length; - indices[index++] = i + length; - indices[index++] = ((i + 1) % length) + length; - } - - for (i = 0; i < cornersLength; i++) { - const corner = corners[i]; - indices[index++] = corner; - indices[index++] = corner + length; - } - - return new GeometryInstance.GeometryInstance({ - geometry: new GeometryAttribute.Geometry({ - attributes: new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: subdividedPositions, - }), - }), - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - }), - }); - } - - /** - * A description of the outline of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy. - * - * @alias PolygonOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes. - * @param {Number} [options.height=0.0] The distance in meters between the polygon and the ellipsoid surface. - * @param {Number} [options.extrudedHeight] The distance in meters between the polygon's extruded face and the ellipsoid surface. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height. - * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of path the outline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}. - * - * @see PolygonOutlineGeometry#createGeometry - * @see PolygonOutlineGeometry#fromPositions - * - * @example - * // 1. create a polygon outline from points - * const polygon = new Cesium.PolygonOutlineGeometry({ - * polygonHierarchy : new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ]) - * ) - * }); - * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon); - * - * // 2. create a nested polygon with holes outline - * const polygonWithHole = new Cesium.PolygonOutlineGeometry({ - * polygonHierarchy : new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -109.0, 30.0, - * -95.0, 30.0, - * -95.0, 40.0, - * -109.0, 40.0 - * ]), - * [new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -107.0, 31.0, - * -107.0, 39.0, - * -97.0, 39.0, - * -97.0, 31.0 - * ]), - * [new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -105.0, 33.0, - * -99.0, 33.0, - * -99.0, 37.0, - * -105.0, 37.0 - * ]), - * [new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -103.0, 34.0, - * -101.0, 34.0, - * -101.0, 36.0, - * -103.0, 36.0 - * ]) - * )] - * )] - * )] - * ) - * }); - * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygonWithHole); - * - * // 3. create extruded polygon outline - * const extrudedPolygon = new Cesium.PolygonOutlineGeometry({ - * polygonHierarchy : new Cesium.PolygonHierarchy( - * Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ]) - * ), - * extrudedHeight: 300000 - * }); - * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(extrudedPolygon); - */ - function PolygonOutlineGeometry(options) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("options", options); - Check.Check.typeOf.object("options.polygonHierarchy", options.polygonHierarchy); - - if (options.perPositionHeight && defaultValue.defined(options.height)) { - throw new Check.DeveloperError( - "Cannot use both options.perPositionHeight and options.height" - ); - } - if ( - defaultValue.defined(options.arcType) && - options.arcType !== ArcType.ArcType.GEODESIC && - options.arcType !== ArcType.ArcType.RHUMB - ) { - throw new Check.DeveloperError( - "Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB." - ); - } - //>>includeEnd('debug'); - - const polygonHierarchy = options.polygonHierarchy; - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - const perPositionHeight = defaultValue.defaultValue(options.perPositionHeight, false); - const perPositionHeightExtrude = - perPositionHeight && defaultValue.defined(options.extrudedHeight); - const arcType = defaultValue.defaultValue(options.arcType, ArcType.ArcType.GEODESIC); - - let height = defaultValue.defaultValue(options.height, 0.0); - let extrudedHeight = defaultValue.defaultValue(options.extrudedHeight, height); - - if (!perPositionHeightExtrude) { - const h = Math.max(height, extrudedHeight); - extrudedHeight = Math.min(height, extrudedHeight); - height = h; - } - - this._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid); - this._granularity = granularity; - this._height = height; - this._extrudedHeight = extrudedHeight; - this._arcType = arcType; - this._polygonHierarchy = polygonHierarchy; - this._perPositionHeight = perPositionHeight; - this._perPositionHeightExtrude = perPositionHeightExtrude; - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createPolygonOutlineGeometry"; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - PolygonGeometryLibrary.PolygonGeometryLibrary.computeHierarchyPackedLength( - polygonHierarchy, - Matrix3.Cartesian3 - ) + - Matrix3.Ellipsoid.packedLength + - 8; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {PolygonOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - PolygonOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - startingIndex = PolygonGeometryLibrary.PolygonGeometryLibrary.packPolygonHierarchy( - value._polygonHierarchy, - array, - startingIndex, - Matrix3.Cartesian3 - ); - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - array[startingIndex++] = value._height; - array[startingIndex++] = value._extrudedHeight; - array[startingIndex++] = value._granularity; - array[startingIndex++] = value._perPositionHeightExtrude ? 1.0 : 0.0; - array[startingIndex++] = value._perPositionHeight ? 1.0 : 0.0; - array[startingIndex++] = value._arcType; - array[startingIndex++] = defaultValue.defaultValue(value._offsetAttribute, -1); - array[startingIndex] = value.packedLength; - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const dummyOptions = { - polygonHierarchy: {}, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PolygonOutlineGeometry} [result] The object into which to store the result. - * @returns {PolygonOutlineGeometry} The modified result parameter or a new PolygonOutlineGeometry instance if one was not provided. - */ - PolygonOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const polygonHierarchy = PolygonGeometryLibrary.PolygonGeometryLibrary.unpackPolygonHierarchy( - array, - startingIndex, - Matrix3.Cartesian3 - ); - startingIndex = polygonHierarchy.startingIndex; - delete polygonHierarchy.startingIndex; - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const height = array[startingIndex++]; - const extrudedHeight = array[startingIndex++]; - const granularity = array[startingIndex++]; - const perPositionHeightExtrude = array[startingIndex++] === 1.0; - const perPositionHeight = array[startingIndex++] === 1.0; - const arcType = array[startingIndex++]; - const offsetAttribute = array[startingIndex++]; - const packedLength = array[startingIndex]; - - if (!defaultValue.defined(result)) { - result = new PolygonOutlineGeometry(dummyOptions); - } - - result._polygonHierarchy = polygonHierarchy; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._height = height; - result._extrudedHeight = extrudedHeight; - result._granularity = granularity; - result._perPositionHeight = perPositionHeight; - result._perPositionHeightExtrude = perPositionHeightExtrude; - result._arcType = arcType; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - result.packedLength = packedLength; - - return result; - }; - - /** - * A description of a polygon outline from an array of positions. - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon. - * @param {Number} [options.height=0.0] The height of the polygon. - * @param {Number} [options.extrudedHeight] The height of the polygon extrusion. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height. - * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of path the outline must follow. Valid options are {@link LinkType.GEODESIC} and {@link ArcType.RHUMB}. - * @returns {PolygonOutlineGeometry} - * - * - * @example - * // create a polygon from points - * const polygon = Cesium.PolygonOutlineGeometry.fromPositions({ - * positions : Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0, - * -75.0, 30.0, - * -70.0, 30.0, - * -68.0, 40.0 - * ]) - * }); - * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon); - * - * @see PolygonOutlineGeometry#createGeometry - */ - PolygonOutlineGeometry.fromPositions = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("options.positions", options.positions); - //>>includeEnd('debug'); - - const newOptions = { - polygonHierarchy: { - positions: options.positions, - }, - height: options.height, - extrudedHeight: options.extrudedHeight, - ellipsoid: options.ellipsoid, - granularity: options.granularity, - perPositionHeight: options.perPositionHeight, - arcType: options.arcType, - offsetAttribute: options.offsetAttribute, - }; - return new PolygonOutlineGeometry(newOptions); - }; - - /** - * Computes the geometric representation of a polygon outline, including its vertices, indices, and a bounding sphere. - * - * @param {PolygonOutlineGeometry} polygonGeometry A description of the polygon outline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - PolygonOutlineGeometry.createGeometry = function (polygonGeometry) { - const ellipsoid = polygonGeometry._ellipsoid; - const granularity = polygonGeometry._granularity; - const polygonHierarchy = polygonGeometry._polygonHierarchy; - const perPositionHeight = polygonGeometry._perPositionHeight; - const arcType = polygonGeometry._arcType; - - const polygons = PolygonGeometryLibrary.PolygonGeometryLibrary.polygonOutlinesFromHierarchy( - polygonHierarchy, - !perPositionHeight, - ellipsoid - ); - - if (polygons.length === 0) { - return undefined; - } - - let geometryInstance; - const geometries = []; - const minDistance = Math$1.CesiumMath.chordLength( - granularity, - ellipsoid.maximumRadius - ); - - const height = polygonGeometry._height; - const extrudedHeight = polygonGeometry._extrudedHeight; - const extrude = - polygonGeometry._perPositionHeightExtrude || - !Math$1.CesiumMath.equalsEpsilon(height, extrudedHeight, 0, Math$1.CesiumMath.EPSILON2); - let offsetValue; - let i; - if (extrude) { - for (i = 0; i < polygons.length; i++) { - geometryInstance = createGeometryFromPositionsExtruded( - ellipsoid, - polygons[i], - minDistance, - perPositionHeight, - arcType - ); - geometryInstance.geometry = PolygonGeometryLibrary.PolygonGeometryLibrary.scaleToGeodeticHeightExtruded( - geometryInstance.geometry, - height, - extrudedHeight, - ellipsoid, - perPositionHeight - ); - if (defaultValue.defined(polygonGeometry._offsetAttribute)) { - const size = - geometryInstance.geometry.attributes.position.values.length / 3; - let offsetAttribute = new Uint8Array(size); - if (polygonGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - offsetAttribute = offsetAttribute.fill(1, 0, size / 2); - } else { - offsetValue = - polygonGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - offsetAttribute = offsetAttribute.fill(offsetValue); - } - - geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute( - { - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: offsetAttribute, - } - ); - } - geometries.push(geometryInstance); - } - } else { - for (i = 0; i < polygons.length; i++) { - geometryInstance = createGeometryFromPositions( - ellipsoid, - polygons[i], - minDistance, - perPositionHeight, - arcType - ); - geometryInstance.geometry.attributes.position.values = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - geometryInstance.geometry.attributes.position.values, - height, - ellipsoid, - !perPositionHeight - ); - - if (defaultValue.defined(polygonGeometry._offsetAttribute)) { - const length = - geometryInstance.geometry.attributes.position.values.length; - offsetValue = - polygonGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute( - { - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - } - ); - } - - geometries.push(geometryInstance); - } - } - - const geometry = GeometryPipeline.GeometryPipeline.combineInstances(geometries)[0]; - const boundingSphere = Transforms.BoundingSphere.fromVertices( - geometry.attributes.position.values - ); - - return new GeometryAttribute.Geometry({ - attributes: geometry.attributes, - indices: geometry.indices, - primitiveType: geometry.primitiveType, - boundingSphere: boundingSphere, - offsetAttribute: polygonGeometry._offsetAttribute, - }); - }; - - function createPolygonOutlineGeometry(polygonGeometry, offset) { - if (defaultValue.defined(offset)) { - polygonGeometry = PolygonOutlineGeometry.unpack(polygonGeometry, offset); - } - polygonGeometry._ellipsoid = Matrix3.Ellipsoid.clone(polygonGeometry._ellipsoid); - return PolygonOutlineGeometry.createGeometry(polygonGeometry); - } - - return createPolygonOutlineGeometry; - -})); -//# sourceMappingURL=createPolygonOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createPolygonOutlineGeometry.js.map b/debug/cesium/Workers/createPolygonOutlineGeometry.js.map deleted file mode 100644 index d03bba2..0000000 --- a/debug/cesium/Workers/createPolygonOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createPolygonOutlineGeometry.js","sources":["../../../Source/Core/PolygonOutlineGeometry.js","../../../Source/WorkersES6/createPolygonOutlineGeometry.js"],"sourcesContent":["import ArcType from \"./ArcType.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport EllipsoidTangentPlane from \"./EllipsoidTangentPlane.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryInstance from \"./GeometryInstance.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport GeometryPipeline from \"./GeometryPipeline.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PolygonGeometryLibrary from \"./PolygonGeometryLibrary.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport WindingOrder from \"./WindingOrder.js\";\r\nconst createGeometryFromPositionsPositions = [];\r\nconst createGeometryFromPositionsSubdivided = [];\r\n\r\nfunction createGeometryFromPositions(\r\n ellipsoid,\r\n positions,\r\n minDistance,\r\n perPositionHeight,\r\n arcType\r\n) {\r\n const tangentPlane = EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\r\n const positions2D = tangentPlane.projectPointsOntoPlane(\r\n positions,\r\n createGeometryFromPositionsPositions\r\n );\r\n\r\n const originalWindingOrder = PolygonPipeline.computeWindingOrder2D(\r\n positions2D\r\n );\r\n if (originalWindingOrder === WindingOrder.CLOCKWISE) {\r\n positions2D.reverse();\r\n positions = positions.slice().reverse();\r\n }\r\n\r\n let subdividedPositions;\r\n let i;\r\n\r\n let length = positions.length;\r\n let index = 0;\r\n\r\n if (!perPositionHeight) {\r\n let numVertices = 0;\r\n if (arcType === ArcType.GEODESIC) {\r\n for (i = 0; i < length; i++) {\r\n numVertices += PolygonGeometryLibrary.subdivideLineCount(\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance\r\n );\r\n }\r\n } else if (arcType === ArcType.RHUMB) {\r\n for (i = 0; i < length; i++) {\r\n numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\r\n ellipsoid,\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance\r\n );\r\n }\r\n }\r\n subdividedPositions = new Float64Array(numVertices * 3);\r\n for (i = 0; i < length; i++) {\r\n let tempPositions;\r\n if (arcType === ArcType.GEODESIC) {\r\n tempPositions = PolygonGeometryLibrary.subdivideLine(\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance,\r\n createGeometryFromPositionsSubdivided\r\n );\r\n } else if (arcType === ArcType.RHUMB) {\r\n tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\r\n ellipsoid,\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance,\r\n createGeometryFromPositionsSubdivided\r\n );\r\n }\r\n const tempPositionsLength = tempPositions.length;\r\n for (let j = 0; j < tempPositionsLength; ++j) {\r\n subdividedPositions[index++] = tempPositions[j];\r\n }\r\n }\r\n } else {\r\n subdividedPositions = new Float64Array(length * 2 * 3);\r\n for (i = 0; i < length; i++) {\r\n const p0 = positions[i];\r\n const p1 = positions[(i + 1) % length];\r\n subdividedPositions[index++] = p0.x;\r\n subdividedPositions[index++] = p0.y;\r\n subdividedPositions[index++] = p0.z;\r\n subdividedPositions[index++] = p1.x;\r\n subdividedPositions[index++] = p1.y;\r\n subdividedPositions[index++] = p1.z;\r\n }\r\n }\r\n\r\n length = subdividedPositions.length / 3;\r\n const indicesSize = length * 2;\r\n const indices = IndexDatatype.createTypedArray(length, indicesSize);\r\n index = 0;\r\n for (i = 0; i < length - 1; i++) {\r\n indices[index++] = i;\r\n indices[index++] = i + 1;\r\n }\r\n indices[index++] = length - 1;\r\n indices[index++] = 0;\r\n\r\n return new GeometryInstance({\r\n geometry: new Geometry({\r\n attributes: new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: subdividedPositions,\r\n }),\r\n }),\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n }),\r\n });\r\n}\r\n\r\nfunction createGeometryFromPositionsExtruded(\r\n ellipsoid,\r\n positions,\r\n minDistance,\r\n perPositionHeight,\r\n arcType\r\n) {\r\n const tangentPlane = EllipsoidTangentPlane.fromPoints(positions, ellipsoid);\r\n const positions2D = tangentPlane.projectPointsOntoPlane(\r\n positions,\r\n createGeometryFromPositionsPositions\r\n );\r\n\r\n const originalWindingOrder = PolygonPipeline.computeWindingOrder2D(\r\n positions2D\r\n );\r\n if (originalWindingOrder === WindingOrder.CLOCKWISE) {\r\n positions2D.reverse();\r\n positions = positions.slice().reverse();\r\n }\r\n\r\n let subdividedPositions;\r\n let i;\r\n\r\n let length = positions.length;\r\n const corners = new Array(length);\r\n let index = 0;\r\n\r\n if (!perPositionHeight) {\r\n let numVertices = 0;\r\n if (arcType === ArcType.GEODESIC) {\r\n for (i = 0; i < length; i++) {\r\n numVertices += PolygonGeometryLibrary.subdivideLineCount(\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance\r\n );\r\n }\r\n } else if (arcType === ArcType.RHUMB) {\r\n for (i = 0; i < length; i++) {\r\n numVertices += PolygonGeometryLibrary.subdivideRhumbLineCount(\r\n ellipsoid,\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance\r\n );\r\n }\r\n }\r\n\r\n subdividedPositions = new Float64Array(numVertices * 3 * 2);\r\n for (i = 0; i < length; ++i) {\r\n corners[i] = index / 3;\r\n let tempPositions;\r\n if (arcType === ArcType.GEODESIC) {\r\n tempPositions = PolygonGeometryLibrary.subdivideLine(\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance,\r\n createGeometryFromPositionsSubdivided\r\n );\r\n } else if (arcType === ArcType.RHUMB) {\r\n tempPositions = PolygonGeometryLibrary.subdivideRhumbLine(\r\n ellipsoid,\r\n positions[i],\r\n positions[(i + 1) % length],\r\n minDistance,\r\n createGeometryFromPositionsSubdivided\r\n );\r\n }\r\n const tempPositionsLength = tempPositions.length;\r\n for (let j = 0; j < tempPositionsLength; ++j) {\r\n subdividedPositions[index++] = tempPositions[j];\r\n }\r\n }\r\n } else {\r\n subdividedPositions = new Float64Array(length * 2 * 3 * 2);\r\n for (i = 0; i < length; ++i) {\r\n corners[i] = index / 3;\r\n const p0 = positions[i];\r\n const p1 = positions[(i + 1) % length];\r\n\r\n subdividedPositions[index++] = p0.x;\r\n subdividedPositions[index++] = p0.y;\r\n subdividedPositions[index++] = p0.z;\r\n subdividedPositions[index++] = p1.x;\r\n subdividedPositions[index++] = p1.y;\r\n subdividedPositions[index++] = p1.z;\r\n }\r\n }\r\n\r\n length = subdividedPositions.length / (3 * 2);\r\n const cornersLength = corners.length;\r\n\r\n const indicesSize = (length * 2 + cornersLength) * 2;\r\n const indices = IndexDatatype.createTypedArray(\r\n length + cornersLength,\r\n indicesSize\r\n );\r\n\r\n index = 0;\r\n for (i = 0; i < length; ++i) {\r\n indices[index++] = i;\r\n indices[index++] = (i + 1) % length;\r\n indices[index++] = i + length;\r\n indices[index++] = ((i + 1) % length) + length;\r\n }\r\n\r\n for (i = 0; i < cornersLength; i++) {\r\n const corner = corners[i];\r\n indices[index++] = corner;\r\n indices[index++] = corner + length;\r\n }\r\n\r\n return new GeometryInstance({\r\n geometry: new Geometry({\r\n attributes: new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: subdividedPositions,\r\n }),\r\n }),\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n }),\r\n });\r\n}\r\n\r\n/**\r\n * A description of the outline of a polygon on the ellipsoid. The polygon is defined by a polygon hierarchy.\r\n *\r\n * @alias PolygonOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {PolygonHierarchy} options.polygonHierarchy A polygon hierarchy that can include holes.\r\n * @param {Number} [options.height=0.0] The distance in meters between the polygon and the ellipsoid surface.\r\n * @param {Number} [options.extrudedHeight] The distance in meters between the polygon's extruded face and the ellipsoid surface.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\r\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of path the outline must follow. Valid options are {@link ArcType.GEODESIC} and {@link ArcType.RHUMB}.\r\n *\r\n * @see PolygonOutlineGeometry#createGeometry\r\n * @see PolygonOutlineGeometry#fromPositions\r\n *\r\n * @example\r\n * // 1. create a polygon outline from points\r\n * const polygon = new Cesium.PolygonOutlineGeometry({\r\n * polygonHierarchy : new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ])\r\n * )\r\n * });\r\n * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon);\r\n *\r\n * // 2. create a nested polygon with holes outline\r\n * const polygonWithHole = new Cesium.PolygonOutlineGeometry({\r\n * polygonHierarchy : new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -109.0, 30.0,\r\n * -95.0, 30.0,\r\n * -95.0, 40.0,\r\n * -109.0, 40.0\r\n * ]),\r\n * [new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -107.0, 31.0,\r\n * -107.0, 39.0,\r\n * -97.0, 39.0,\r\n * -97.0, 31.0\r\n * ]),\r\n * [new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -105.0, 33.0,\r\n * -99.0, 33.0,\r\n * -99.0, 37.0,\r\n * -105.0, 37.0\r\n * ]),\r\n * [new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -103.0, 34.0,\r\n * -101.0, 34.0,\r\n * -101.0, 36.0,\r\n * -103.0, 36.0\r\n * ])\r\n * )]\r\n * )]\r\n * )]\r\n * )\r\n * });\r\n * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygonWithHole);\r\n *\r\n * // 3. create extruded polygon outline\r\n * const extrudedPolygon = new Cesium.PolygonOutlineGeometry({\r\n * polygonHierarchy : new Cesium.PolygonHierarchy(\r\n * Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ])\r\n * ),\r\n * extrudedHeight: 300000\r\n * });\r\n * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(extrudedPolygon);\r\n */\r\nfunction PolygonOutlineGeometry(options) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"options\", options);\r\n Check.typeOf.object(\"options.polygonHierarchy\", options.polygonHierarchy);\r\n\r\n if (options.perPositionHeight && defined(options.height)) {\r\n throw new DeveloperError(\r\n \"Cannot use both options.perPositionHeight and options.height\"\r\n );\r\n }\r\n if (\r\n defined(options.arcType) &&\r\n options.arcType !== ArcType.GEODESIC &&\r\n options.arcType !== ArcType.RHUMB\r\n ) {\r\n throw new DeveloperError(\r\n \"Invalid arcType. Valid options are ArcType.GEODESIC and ArcType.RHUMB.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const polygonHierarchy = options.polygonHierarchy;\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const perPositionHeight = defaultValue(options.perPositionHeight, false);\r\n const perPositionHeightExtrude =\r\n perPositionHeight && defined(options.extrudedHeight);\r\n const arcType = defaultValue(options.arcType, ArcType.GEODESIC);\r\n\r\n let height = defaultValue(options.height, 0.0);\r\n let extrudedHeight = defaultValue(options.extrudedHeight, height);\r\n\r\n if (!perPositionHeightExtrude) {\r\n const h = Math.max(height, extrudedHeight);\r\n extrudedHeight = Math.min(height, extrudedHeight);\r\n height = h;\r\n }\r\n\r\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\r\n this._granularity = granularity;\r\n this._height = height;\r\n this._extrudedHeight = extrudedHeight;\r\n this._arcType = arcType;\r\n this._polygonHierarchy = polygonHierarchy;\r\n this._perPositionHeight = perPositionHeight;\r\n this._perPositionHeightExtrude = perPositionHeightExtrude;\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createPolygonOutlineGeometry\";\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n PolygonGeometryLibrary.computeHierarchyPackedLength(\r\n polygonHierarchy,\r\n Cartesian3\r\n ) +\r\n Ellipsoid.packedLength +\r\n 8;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PolygonOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nPolygonOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n startingIndex = PolygonGeometryLibrary.packPolygonHierarchy(\r\n value._polygonHierarchy,\r\n array,\r\n startingIndex,\r\n Cartesian3\r\n );\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n array[startingIndex++] = value._height;\r\n array[startingIndex++] = value._extrudedHeight;\r\n array[startingIndex++] = value._granularity;\r\n array[startingIndex++] = value._perPositionHeightExtrude ? 1.0 : 0.0;\r\n array[startingIndex++] = value._perPositionHeight ? 1.0 : 0.0;\r\n array[startingIndex++] = value._arcType;\r\n array[startingIndex++] = defaultValue(value._offsetAttribute, -1);\r\n array[startingIndex] = value.packedLength;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst dummyOptions = {\r\n polygonHierarchy: {},\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PolygonOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {PolygonOutlineGeometry} The modified result parameter or a new PolygonOutlineGeometry instance if one was not provided.\r\n */\r\nPolygonOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const polygonHierarchy = PolygonGeometryLibrary.unpackPolygonHierarchy(\r\n array,\r\n startingIndex,\r\n Cartesian3\r\n );\r\n startingIndex = polygonHierarchy.startingIndex;\r\n delete polygonHierarchy.startingIndex;\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const height = array[startingIndex++];\r\n const extrudedHeight = array[startingIndex++];\r\n const granularity = array[startingIndex++];\r\n const perPositionHeightExtrude = array[startingIndex++] === 1.0;\r\n const perPositionHeight = array[startingIndex++] === 1.0;\r\n const arcType = array[startingIndex++];\r\n const offsetAttribute = array[startingIndex++];\r\n const packedLength = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n result = new PolygonOutlineGeometry(dummyOptions);\r\n }\r\n\r\n result._polygonHierarchy = polygonHierarchy;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._height = height;\r\n result._extrudedHeight = extrudedHeight;\r\n result._granularity = granularity;\r\n result._perPositionHeight = perPositionHeight;\r\n result._perPositionHeightExtrude = perPositionHeightExtrude;\r\n result._arcType = arcType;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n result.packedLength = packedLength;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * A description of a polygon outline from an array of positions.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of positions that defined the corner points of the polygon.\r\n * @param {Number} [options.height=0.0] The height of the polygon.\r\n * @param {Number} [options.extrudedHeight] The height of the polygon extrusion.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Boolean} [options.perPositionHeight=false] Use the height of options.positions for each position instead of using options.height to determine the height.\r\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of path the outline must follow. Valid options are {@link LinkType.GEODESIC} and {@link ArcType.RHUMB}.\r\n * @returns {PolygonOutlineGeometry}\r\n *\r\n *\r\n * @example\r\n * // create a polygon from points\r\n * const polygon = Cesium.PolygonOutlineGeometry.fromPositions({\r\n * positions : Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0,\r\n * -75.0, 30.0,\r\n * -70.0, 30.0,\r\n * -68.0, 40.0\r\n * ])\r\n * });\r\n * const geometry = Cesium.PolygonOutlineGeometry.createGeometry(polygon);\r\n *\r\n * @see PolygonOutlineGeometry#createGeometry\r\n */\r\nPolygonOutlineGeometry.fromPositions = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"options.positions\", options.positions);\r\n //>>includeEnd('debug');\r\n\r\n const newOptions = {\r\n polygonHierarchy: {\r\n positions: options.positions,\r\n },\r\n height: options.height,\r\n extrudedHeight: options.extrudedHeight,\r\n ellipsoid: options.ellipsoid,\r\n granularity: options.granularity,\r\n perPositionHeight: options.perPositionHeight,\r\n arcType: options.arcType,\r\n offsetAttribute: options.offsetAttribute,\r\n };\r\n return new PolygonOutlineGeometry(newOptions);\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a polygon outline, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {PolygonOutlineGeometry} polygonGeometry A description of the polygon outline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nPolygonOutlineGeometry.createGeometry = function (polygonGeometry) {\r\n const ellipsoid = polygonGeometry._ellipsoid;\r\n const granularity = polygonGeometry._granularity;\r\n const polygonHierarchy = polygonGeometry._polygonHierarchy;\r\n const perPositionHeight = polygonGeometry._perPositionHeight;\r\n const arcType = polygonGeometry._arcType;\r\n\r\n const polygons = PolygonGeometryLibrary.polygonOutlinesFromHierarchy(\r\n polygonHierarchy,\r\n !perPositionHeight,\r\n ellipsoid\r\n );\r\n\r\n if (polygons.length === 0) {\r\n return undefined;\r\n }\r\n\r\n let geometryInstance;\r\n const geometries = [];\r\n const minDistance = CesiumMath.chordLength(\r\n granularity,\r\n ellipsoid.maximumRadius\r\n );\r\n\r\n const height = polygonGeometry._height;\r\n const extrudedHeight = polygonGeometry._extrudedHeight;\r\n const extrude =\r\n polygonGeometry._perPositionHeightExtrude ||\r\n !CesiumMath.equalsEpsilon(height, extrudedHeight, 0, CesiumMath.EPSILON2);\r\n let offsetValue;\r\n let i;\r\n if (extrude) {\r\n for (i = 0; i < polygons.length; i++) {\r\n geometryInstance = createGeometryFromPositionsExtruded(\r\n ellipsoid,\r\n polygons[i],\r\n minDistance,\r\n perPositionHeight,\r\n arcType\r\n );\r\n geometryInstance.geometry = PolygonGeometryLibrary.scaleToGeodeticHeightExtruded(\r\n geometryInstance.geometry,\r\n height,\r\n extrudedHeight,\r\n ellipsoid,\r\n perPositionHeight\r\n );\r\n if (defined(polygonGeometry._offsetAttribute)) {\r\n const size =\r\n geometryInstance.geometry.attributes.position.values.length / 3;\r\n let offsetAttribute = new Uint8Array(size);\r\n if (polygonGeometry._offsetAttribute === GeometryOffsetAttribute.TOP) {\r\n offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\r\n } else {\r\n offsetValue =\r\n polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n offsetAttribute = offsetAttribute.fill(offsetValue);\r\n }\r\n\r\n geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute(\r\n {\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: offsetAttribute,\r\n }\r\n );\r\n }\r\n geometries.push(geometryInstance);\r\n }\r\n } else {\r\n for (i = 0; i < polygons.length; i++) {\r\n geometryInstance = createGeometryFromPositions(\r\n ellipsoid,\r\n polygons[i],\r\n minDistance,\r\n perPositionHeight,\r\n arcType\r\n );\r\n geometryInstance.geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\r\n geometryInstance.geometry.attributes.position.values,\r\n height,\r\n ellipsoid,\r\n !perPositionHeight\r\n );\r\n\r\n if (defined(polygonGeometry._offsetAttribute)) {\r\n const length =\r\n geometryInstance.geometry.attributes.position.values.length;\r\n offsetValue =\r\n polygonGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n geometryInstance.geometry.attributes.applyOffset = new GeometryAttribute(\r\n {\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n }\r\n );\r\n }\r\n\r\n geometries.push(geometryInstance);\r\n }\r\n }\r\n\r\n const geometry = GeometryPipeline.combineInstances(geometries)[0];\r\n const boundingSphere = BoundingSphere.fromVertices(\r\n geometry.attributes.position.values\r\n );\r\n\r\n return new Geometry({\r\n attributes: geometry.attributes,\r\n indices: geometry.indices,\r\n primitiveType: geometry.primitiveType,\r\n boundingSphere: boundingSphere,\r\n offsetAttribute: polygonGeometry._offsetAttribute,\r\n });\r\n};\r\nexport default PolygonOutlineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport PolygonOutlineGeometry from \"../Core/PolygonOutlineGeometry.js\";\r\n\r\nfunction createPolygonOutlineGeometry(polygonGeometry, offset) {\r\n if (defined(offset)) {\r\n polygonGeometry = PolygonOutlineGeometry.unpack(polygonGeometry, offset);\r\n }\r\n polygonGeometry._ellipsoid = Ellipsoid.clone(polygonGeometry._ellipsoid);\r\n return PolygonOutlineGeometry.createGeometry(polygonGeometry);\r\n}\r\nexport default createPolygonOutlineGeometry;\r\n"],"names":["EllipsoidTangentPlane","PolygonPipeline","WindingOrder","ArcType","PolygonGeometryLibrary","IndexDatatype","GeometryInstance","Geometry","GeometryAttributes","GeometryAttribute","ComponentDatatype","PrimitiveType","Check","defined","DeveloperError","defaultValue","Ellipsoid","CesiumMath","Cartesian3","GeometryOffsetAttribute","GeometryPipeline","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createPolylineGeometry.js b/debug/cesium/Workers/createPolylineGeometry.js deleted file mode 100644 index bd27a03..0000000 --- a/debug/cesium/Workers/createPolylineGeometry.js +++ /dev/null @@ -1,597 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './ArcType-d608b872', './arrayRemoveDuplicates-c3526030', './Transforms-11fb6b0a', './Color-c019c34b', './ComponentDatatype-13a5630b', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolylinePipeline-3c021236', './VertexFormat-f2d74c96', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (defaultValue, Matrix3, ArcType, arrayRemoveDuplicates, Transforms, Color, ComponentDatatype, Check, GeometryAttribute, GeometryAttributes, IndexDatatype, Math$1, PolylinePipeline, VertexFormat, Matrix2, RuntimeError, combine, WebGLConstants, EllipsoidGeodesic, EllipsoidRhumbLine, IntersectionTests, Plane) { 'use strict'; - - const scratchInterpolateColorsArray = []; - - function interpolateColors(p0, p1, color0, color1, numPoints) { - const colors = scratchInterpolateColorsArray; - colors.length = numPoints; - let i; - - const r0 = color0.red; - const g0 = color0.green; - const b0 = color0.blue; - const a0 = color0.alpha; - - const r1 = color1.red; - const g1 = color1.green; - const b1 = color1.blue; - const a1 = color1.alpha; - - if (Color.Color.equals(color0, color1)) { - for (i = 0; i < numPoints; i++) { - colors[i] = Color.Color.clone(color0); - } - return colors; - } - - const redPerVertex = (r1 - r0) / numPoints; - const greenPerVertex = (g1 - g0) / numPoints; - const bluePerVertex = (b1 - b0) / numPoints; - const alphaPerVertex = (a1 - a0) / numPoints; - - for (i = 0; i < numPoints; i++) { - colors[i] = new Color.Color( - r0 + i * redPerVertex, - g0 + i * greenPerVertex, - b0 + i * bluePerVertex, - a0 + i * alphaPerVertex - ); - } - - return colors; - } - - /** - * A description of a polyline modeled as a line strip; the first two positions define a line segment, - * and each additional position defines a line segment from the previous position. The polyline is capable of - * displaying with a material. - * - * @alias PolylineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the positions in the polyline as a line strip. - * @param {Number} [options.width=1.0] The width in pixels. - * @param {Color[]} [options.colors] An Array of {@link Color} defining the per vertex or per segment colors. - * @param {Boolean} [options.colorsPerVertex=false] A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices. - * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * - * @exception {DeveloperError} At least two positions are required. - * @exception {DeveloperError} width must be greater than or equal to one. - * @exception {DeveloperError} colors has an invalid length. - * - * @see PolylineGeometry#createGeometry - * - * @demo {@link https://sandcastle.cesium.com/index.html?src=Polyline.html|Cesium Sandcastle Polyline Demo} - * - * @example - * // A polyline with two connected line segments - * const polyline = new Cesium.PolylineGeometry({ - * positions : Cesium.Cartesian3.fromDegreesArray([ - * 0.0, 0.0, - * 5.0, 0.0, - * 5.0, 5.0 - * ]), - * width : 10.0 - * }); - * const geometry = Cesium.PolylineGeometry.createGeometry(polyline); - */ - function PolylineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.positions; - const colors = options.colors; - const width = defaultValue.defaultValue(options.width, 1.0); - const colorsPerVertex = defaultValue.defaultValue(options.colorsPerVertex, false); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions) || positions.length < 2) { - throw new Check.DeveloperError("At least two positions are required."); - } - if (typeof width !== "number") { - throw new Check.DeveloperError("width must be a number"); - } - if ( - defaultValue.defined(colors) && - ((colorsPerVertex && colors.length < positions.length) || - (!colorsPerVertex && colors.length < positions.length - 1)) - ) { - throw new Check.DeveloperError("colors has an invalid length."); - } - //>>includeEnd('debug'); - - this._positions = positions; - this._colors = colors; - this._width = width; - this._colorsPerVertex = colorsPerVertex; - this._vertexFormat = VertexFormat.VertexFormat.clone( - defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT) - ); - - this._arcType = defaultValue.defaultValue(options.arcType, ArcType.ArcType.GEODESIC); - this._granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - this._ellipsoid = Matrix3.Ellipsoid.clone( - defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84) - ); - this._workerName = "createPolylineGeometry"; - - let numComponents = 1 + positions.length * Matrix3.Cartesian3.packedLength; - numComponents += defaultValue.defined(colors) ? 1 + colors.length * Color.Color.packedLength : 1; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - numComponents + Matrix3.Ellipsoid.packedLength + VertexFormat.VertexFormat.packedLength + 4; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {PolylineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - PolylineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - const positions = value._positions; - let length = positions.length; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - Matrix3.Cartesian3.pack(positions[i], array, startingIndex); - } - - const colors = value._colors; - length = defaultValue.defined(colors) ? colors.length : 0.0; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Color.Color.packedLength) { - Color.Color.pack(colors[i], array, startingIndex); - } - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._width; - array[startingIndex++] = value._colorsPerVertex ? 1.0 : 0.0; - array[startingIndex++] = value._arcType; - array[startingIndex] = value._granularity; - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - positions: undefined, - colors: undefined, - ellipsoid: scratchEllipsoid, - vertexFormat: scratchVertexFormat, - width: undefined, - colorsPerVertex: undefined, - arcType: undefined, - granularity: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PolylineGeometry} [result] The object into which to store the result. - * @returns {PolylineGeometry} The modified result parameter or a new PolylineGeometry instance if one was not provided. - */ - PolylineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - let length = array[startingIndex++]; - const positions = new Array(length); - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - positions[i] = Matrix3.Cartesian3.unpack(array, startingIndex); - } - - length = array[startingIndex++]; - const colors = length > 0 ? new Array(length) : undefined; - - for (i = 0; i < length; ++i, startingIndex += Color.Color.packedLength) { - colors[i] = Color.Color.unpack(array, startingIndex); - } - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const width = array[startingIndex++]; - const colorsPerVertex = array[startingIndex++] === 1.0; - const arcType = array[startingIndex++]; - const granularity = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.positions = positions; - scratchOptions.colors = colors; - scratchOptions.width = width; - scratchOptions.colorsPerVertex = colorsPerVertex; - scratchOptions.arcType = arcType; - scratchOptions.granularity = granularity; - return new PolylineGeometry(scratchOptions); - } - - result._positions = positions; - result._colors = colors; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._width = width; - result._colorsPerVertex = colorsPerVertex; - result._arcType = arcType; - result._granularity = granularity; - - return result; - }; - - const scratchCartesian3 = new Matrix3.Cartesian3(); - const scratchPosition = new Matrix3.Cartesian3(); - const scratchPrevPosition = new Matrix3.Cartesian3(); - const scratchNextPosition = new Matrix3.Cartesian3(); - - /** - * Computes the geometric representation of a polyline, including its vertices, indices, and a bounding sphere. - * - * @param {PolylineGeometry} polylineGeometry A description of the polyline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - PolylineGeometry.createGeometry = function (polylineGeometry) { - const width = polylineGeometry._width; - const vertexFormat = polylineGeometry._vertexFormat; - let colors = polylineGeometry._colors; - const colorsPerVertex = polylineGeometry._colorsPerVertex; - const arcType = polylineGeometry._arcType; - const granularity = polylineGeometry._granularity; - const ellipsoid = polylineGeometry._ellipsoid; - - let i; - let j; - let k; - - const removedIndices = []; - let positions = arrayRemoveDuplicates.arrayRemoveDuplicates( - polylineGeometry._positions, - Matrix3.Cartesian3.equalsEpsilon, - false, - removedIndices - ); - - if (defaultValue.defined(colors) && removedIndices.length > 0) { - let removedArrayIndex = 0; - let nextRemovedIndex = removedIndices[0]; - colors = colors.filter(function (color, index) { - let remove = false; - if (colorsPerVertex) { - remove = - index === nextRemovedIndex || (index === 0 && nextRemovedIndex === 1); - } else { - remove = index + 1 === nextRemovedIndex; - } - - if (remove) { - removedArrayIndex++; - nextRemovedIndex = removedIndices[removedArrayIndex]; - return false; - } - return true; - }); - } - - let positionsLength = positions.length; - - // A width of a pixel or less is not a valid geometry, but in order to support external data - // that may have errors we treat this as an empty geometry. - if (positionsLength < 2 || width <= 0.0) { - return undefined; - } - - if (arcType === ArcType.ArcType.GEODESIC || arcType === ArcType.ArcType.RHUMB) { - let subdivisionSize; - let numberOfPointsFunction; - if (arcType === ArcType.ArcType.GEODESIC) { - subdivisionSize = Math$1.CesiumMath.chordLength( - granularity, - ellipsoid.maximumRadius - ); - numberOfPointsFunction = PolylinePipeline.PolylinePipeline.numberOfPoints; - } else { - subdivisionSize = granularity; - numberOfPointsFunction = PolylinePipeline.PolylinePipeline.numberOfPointsRhumbLine; - } - - const heights = PolylinePipeline.PolylinePipeline.extractHeights(positions, ellipsoid); - - if (defaultValue.defined(colors)) { - let colorLength = 1; - for (i = 0; i < positionsLength - 1; ++i) { - colorLength += numberOfPointsFunction( - positions[i], - positions[i + 1], - subdivisionSize - ); - } - - const newColors = new Array(colorLength); - let newColorIndex = 0; - - for (i = 0; i < positionsLength - 1; ++i) { - const p0 = positions[i]; - const p1 = positions[i + 1]; - const c0 = colors[i]; - - const numColors = numberOfPointsFunction(p0, p1, subdivisionSize); - if (colorsPerVertex && i < colorLength) { - const c1 = colors[i + 1]; - const interpolatedColors = interpolateColors( - p0, - p1, - c0, - c1, - numColors - ); - const interpolatedColorsLength = interpolatedColors.length; - for (j = 0; j < interpolatedColorsLength; ++j) { - newColors[newColorIndex++] = interpolatedColors[j]; - } - } else { - for (j = 0; j < numColors; ++j) { - newColors[newColorIndex++] = Color.Color.clone(c0); - } - } - } - - newColors[newColorIndex] = Color.Color.clone(colors[colors.length - 1]); - colors = newColors; - - scratchInterpolateColorsArray.length = 0; - } - - if (arcType === ArcType.ArcType.GEODESIC) { - positions = PolylinePipeline.PolylinePipeline.generateCartesianArc({ - positions: positions, - minDistance: subdivisionSize, - ellipsoid: ellipsoid, - height: heights, - }); - } else { - positions = PolylinePipeline.PolylinePipeline.generateCartesianRhumbArc({ - positions: positions, - granularity: subdivisionSize, - ellipsoid: ellipsoid, - height: heights, - }); - } - } - - positionsLength = positions.length; - const size = positionsLength * 4.0 - 4.0; - - const finalPositions = new Float64Array(size * 3); - const prevPositions = new Float64Array(size * 3); - const nextPositions = new Float64Array(size * 3); - const expandAndWidth = new Float32Array(size * 2); - const st = vertexFormat.st ? new Float32Array(size * 2) : undefined; - const finalColors = defaultValue.defined(colors) ? new Uint8Array(size * 4) : undefined; - - let positionIndex = 0; - let expandAndWidthIndex = 0; - let stIndex = 0; - let colorIndex = 0; - let position; - - for (j = 0; j < positionsLength; ++j) { - if (j === 0) { - position = scratchCartesian3; - Matrix3.Cartesian3.subtract(positions[0], positions[1], position); - Matrix3.Cartesian3.add(positions[0], position, position); - } else { - position = positions[j - 1]; - } - - Matrix3.Cartesian3.clone(position, scratchPrevPosition); - Matrix3.Cartesian3.clone(positions[j], scratchPosition); - - if (j === positionsLength - 1) { - position = scratchCartesian3; - Matrix3.Cartesian3.subtract( - positions[positionsLength - 1], - positions[positionsLength - 2], - position - ); - Matrix3.Cartesian3.add(positions[positionsLength - 1], position, position); - } else { - position = positions[j + 1]; - } - - Matrix3.Cartesian3.clone(position, scratchNextPosition); - - let color0, color1; - if (defaultValue.defined(finalColors)) { - if (j !== 0 && !colorsPerVertex) { - color0 = colors[j - 1]; - } else { - color0 = colors[j]; - } - - if (j !== positionsLength - 1) { - color1 = colors[j]; - } - } - - const startK = j === 0 ? 2 : 0; - const endK = j === positionsLength - 1 ? 2 : 4; - - for (k = startK; k < endK; ++k) { - Matrix3.Cartesian3.pack(scratchPosition, finalPositions, positionIndex); - Matrix3.Cartesian3.pack(scratchPrevPosition, prevPositions, positionIndex); - Matrix3.Cartesian3.pack(scratchNextPosition, nextPositions, positionIndex); - positionIndex += 3; - - const direction = k - 2 < 0 ? -1.0 : 1.0; - expandAndWidth[expandAndWidthIndex++] = 2 * (k % 2) - 1; // expand direction - expandAndWidth[expandAndWidthIndex++] = direction * width; - - if (vertexFormat.st) { - st[stIndex++] = j / (positionsLength - 1); - st[stIndex++] = Math.max(expandAndWidth[expandAndWidthIndex - 2], 0.0); - } - - if (defaultValue.defined(finalColors)) { - const color = k < 2 ? color0 : color1; - - finalColors[colorIndex++] = Color.Color.floatToByte(color.red); - finalColors[colorIndex++] = Color.Color.floatToByte(color.green); - finalColors[colorIndex++] = Color.Color.floatToByte(color.blue); - finalColors[colorIndex++] = Color.Color.floatToByte(color.alpha); - } - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: finalPositions, - }); - - attributes.prevPosition = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: prevPositions, - }); - - attributes.nextPosition = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: nextPositions, - }); - - attributes.expandAndWidth = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: expandAndWidth, - }); - - if (vertexFormat.st) { - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: st, - }); - } - - if (defaultValue.defined(finalColors)) { - attributes.color = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 4, - values: finalColors, - normalize: true, - }); - } - - const indices = IndexDatatype.IndexDatatype.createTypedArray(size, positionsLength * 6 - 6); - let index = 0; - let indicesIndex = 0; - const length = positionsLength - 1.0; - for (j = 0; j < length; ++j) { - indices[indicesIndex++] = index; - indices[indicesIndex++] = index + 2; - indices[indicesIndex++] = index + 1; - - indices[indicesIndex++] = index + 1; - indices[indicesIndex++] = index + 2; - indices[indicesIndex++] = index + 3; - - index += 4; - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: Transforms.BoundingSphere.fromPoints(positions), - geometryType: GeometryAttribute.GeometryType.POLYLINES, - }); - }; - - function createPolylineGeometry(polylineGeometry, offset) { - if (defaultValue.defined(offset)) { - polylineGeometry = PolylineGeometry.unpack(polylineGeometry, offset); - } - polylineGeometry._ellipsoid = Matrix3.Ellipsoid.clone(polylineGeometry._ellipsoid); - return PolylineGeometry.createGeometry(polylineGeometry); - } - - return createPolylineGeometry; - -})); -//# sourceMappingURL=createPolylineGeometry.js.map diff --git a/debug/cesium/Workers/createPolylineGeometry.js.map b/debug/cesium/Workers/createPolylineGeometry.js.map deleted file mode 100644 index 57b0f72..0000000 --- a/debug/cesium/Workers/createPolylineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createPolylineGeometry.js","sources":["../../../Source/Core/PolylineGeometry.js","../../../Source/WorkersES6/createPolylineGeometry.js"],"sourcesContent":["import ArcType from \"./ArcType.js\";\r\nimport arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Color from \"./Color.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryType from \"./GeometryType.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PolylinePipeline from \"./PolylinePipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst scratchInterpolateColorsArray = [];\r\n\r\nfunction interpolateColors(p0, p1, color0, color1, numPoints) {\r\n const colors = scratchInterpolateColorsArray;\r\n colors.length = numPoints;\r\n let i;\r\n\r\n const r0 = color0.red;\r\n const g0 = color0.green;\r\n const b0 = color0.blue;\r\n const a0 = color0.alpha;\r\n\r\n const r1 = color1.red;\r\n const g1 = color1.green;\r\n const b1 = color1.blue;\r\n const a1 = color1.alpha;\r\n\r\n if (Color.equals(color0, color1)) {\r\n for (i = 0; i < numPoints; i++) {\r\n colors[i] = Color.clone(color0);\r\n }\r\n return colors;\r\n }\r\n\r\n const redPerVertex = (r1 - r0) / numPoints;\r\n const greenPerVertex = (g1 - g0) / numPoints;\r\n const bluePerVertex = (b1 - b0) / numPoints;\r\n const alphaPerVertex = (a1 - a0) / numPoints;\r\n\r\n for (i = 0; i < numPoints; i++) {\r\n colors[i] = new Color(\r\n r0 + i * redPerVertex,\r\n g0 + i * greenPerVertex,\r\n b0 + i * bluePerVertex,\r\n a0 + i * alphaPerVertex\r\n );\r\n }\r\n\r\n return colors;\r\n}\r\n\r\n/**\r\n * A description of a polyline modeled as a line strip; the first two positions define a line segment,\r\n * and each additional position defines a line segment from the previous position. The polyline is capable of\r\n * displaying with a material.\r\n *\r\n * @alias PolylineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the positions in the polyline as a line strip.\r\n * @param {Number} [options.width=1.0] The width in pixels.\r\n * @param {Color[]} [options.colors] An Array of {@link Color} defining the per vertex or per segment colors.\r\n * @param {Boolean} [options.colorsPerVertex=false] A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices.\r\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n *\r\n * @exception {DeveloperError} At least two positions are required.\r\n * @exception {DeveloperError} width must be greater than or equal to one.\r\n * @exception {DeveloperError} colors has an invalid length.\r\n *\r\n * @see PolylineGeometry#createGeometry\r\n *\r\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polyline.html|Cesium Sandcastle Polyline Demo}\r\n *\r\n * @example\r\n * // A polyline with two connected line segments\r\n * const polyline = new Cesium.PolylineGeometry({\r\n * positions : Cesium.Cartesian3.fromDegreesArray([\r\n * 0.0, 0.0,\r\n * 5.0, 0.0,\r\n * 5.0, 5.0\r\n * ]),\r\n * width : 10.0\r\n * });\r\n * const geometry = Cesium.PolylineGeometry.createGeometry(polyline);\r\n */\r\nfunction PolylineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.positions;\r\n const colors = options.colors;\r\n const width = defaultValue(options.width, 1.0);\r\n const colorsPerVertex = defaultValue(options.colorsPerVertex, false);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions) || positions.length < 2) {\r\n throw new DeveloperError(\"At least two positions are required.\");\r\n }\r\n if (typeof width !== \"number\") {\r\n throw new DeveloperError(\"width must be a number\");\r\n }\r\n if (\r\n defined(colors) &&\r\n ((colorsPerVertex && colors.length < positions.length) ||\r\n (!colorsPerVertex && colors.length < positions.length - 1))\r\n ) {\r\n throw new DeveloperError(\"colors has an invalid length.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._positions = positions;\r\n this._colors = colors;\r\n this._width = width;\r\n this._colorsPerVertex = colorsPerVertex;\r\n this._vertexFormat = VertexFormat.clone(\r\n defaultValue(options.vertexFormat, VertexFormat.DEFAULT)\r\n );\r\n\r\n this._arcType = defaultValue(options.arcType, ArcType.GEODESIC);\r\n this._granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n this._ellipsoid = Ellipsoid.clone(\r\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\r\n );\r\n this._workerName = \"createPolylineGeometry\";\r\n\r\n let numComponents = 1 + positions.length * Cartesian3.packedLength;\r\n numComponents += defined(colors) ? 1 + colors.length * Color.packedLength : 1;\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 4;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PolylineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nPolylineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n const positions = value._positions;\r\n let length = positions.length;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n Cartesian3.pack(positions[i], array, startingIndex);\r\n }\r\n\r\n const colors = value._colors;\r\n length = defined(colors) ? colors.length : 0.0;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\r\n Color.pack(colors[i], array, startingIndex);\r\n }\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._width;\r\n array[startingIndex++] = value._colorsPerVertex ? 1.0 : 0.0;\r\n array[startingIndex++] = value._arcType;\r\n array[startingIndex] = value._granularity;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n positions: undefined,\r\n colors: undefined,\r\n ellipsoid: scratchEllipsoid,\r\n vertexFormat: scratchVertexFormat,\r\n width: undefined,\r\n colorsPerVertex: undefined,\r\n arcType: undefined,\r\n granularity: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PolylineGeometry} [result] The object into which to store the result.\r\n * @returns {PolylineGeometry} The modified result parameter or a new PolylineGeometry instance if one was not provided.\r\n */\r\nPolylineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n let length = array[startingIndex++];\r\n const positions = new Array(length);\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n positions[i] = Cartesian3.unpack(array, startingIndex);\r\n }\r\n\r\n length = array[startingIndex++];\r\n const colors = length > 0 ? new Array(length) : undefined;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\r\n colors[i] = Color.unpack(array, startingIndex);\r\n }\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const width = array[startingIndex++];\r\n const colorsPerVertex = array[startingIndex++] === 1.0;\r\n const arcType = array[startingIndex++];\r\n const granularity = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.positions = positions;\r\n scratchOptions.colors = colors;\r\n scratchOptions.width = width;\r\n scratchOptions.colorsPerVertex = colorsPerVertex;\r\n scratchOptions.arcType = arcType;\r\n scratchOptions.granularity = granularity;\r\n return new PolylineGeometry(scratchOptions);\r\n }\r\n\r\n result._positions = positions;\r\n result._colors = colors;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._width = width;\r\n result._colorsPerVertex = colorsPerVertex;\r\n result._arcType = arcType;\r\n result._granularity = granularity;\r\n\r\n return result;\r\n};\r\n\r\nconst scratchCartesian3 = new Cartesian3();\r\nconst scratchPosition = new Cartesian3();\r\nconst scratchPrevPosition = new Cartesian3();\r\nconst scratchNextPosition = new Cartesian3();\r\n\r\n/**\r\n * Computes the geometric representation of a polyline, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {PolylineGeometry} polylineGeometry A description of the polyline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nPolylineGeometry.createGeometry = function (polylineGeometry) {\r\n const width = polylineGeometry._width;\r\n const vertexFormat = polylineGeometry._vertexFormat;\r\n let colors = polylineGeometry._colors;\r\n const colorsPerVertex = polylineGeometry._colorsPerVertex;\r\n const arcType = polylineGeometry._arcType;\r\n const granularity = polylineGeometry._granularity;\r\n const ellipsoid = polylineGeometry._ellipsoid;\r\n\r\n let i;\r\n let j;\r\n let k;\r\n\r\n const removedIndices = [];\r\n let positions = arrayRemoveDuplicates(\r\n polylineGeometry._positions,\r\n Cartesian3.equalsEpsilon,\r\n false,\r\n removedIndices\r\n );\r\n\r\n if (defined(colors) && removedIndices.length > 0) {\r\n let removedArrayIndex = 0;\r\n let nextRemovedIndex = removedIndices[0];\r\n colors = colors.filter(function (color, index) {\r\n let remove = false;\r\n if (colorsPerVertex) {\r\n remove =\r\n index === nextRemovedIndex || (index === 0 && nextRemovedIndex === 1);\r\n } else {\r\n remove = index + 1 === nextRemovedIndex;\r\n }\r\n\r\n if (remove) {\r\n removedArrayIndex++;\r\n nextRemovedIndex = removedIndices[removedArrayIndex];\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n\r\n let positionsLength = positions.length;\r\n\r\n // A width of a pixel or less is not a valid geometry, but in order to support external data\r\n // that may have errors we treat this as an empty geometry.\r\n if (positionsLength < 2 || width <= 0.0) {\r\n return undefined;\r\n }\r\n\r\n if (arcType === ArcType.GEODESIC || arcType === ArcType.RHUMB) {\r\n let subdivisionSize;\r\n let numberOfPointsFunction;\r\n if (arcType === ArcType.GEODESIC) {\r\n subdivisionSize = CesiumMath.chordLength(\r\n granularity,\r\n ellipsoid.maximumRadius\r\n );\r\n numberOfPointsFunction = PolylinePipeline.numberOfPoints;\r\n } else {\r\n subdivisionSize = granularity;\r\n numberOfPointsFunction = PolylinePipeline.numberOfPointsRhumbLine;\r\n }\r\n\r\n const heights = PolylinePipeline.extractHeights(positions, ellipsoid);\r\n\r\n if (defined(colors)) {\r\n let colorLength = 1;\r\n for (i = 0; i < positionsLength - 1; ++i) {\r\n colorLength += numberOfPointsFunction(\r\n positions[i],\r\n positions[i + 1],\r\n subdivisionSize\r\n );\r\n }\r\n\r\n const newColors = new Array(colorLength);\r\n let newColorIndex = 0;\r\n\r\n for (i = 0; i < positionsLength - 1; ++i) {\r\n const p0 = positions[i];\r\n const p1 = positions[i + 1];\r\n const c0 = colors[i];\r\n\r\n const numColors = numberOfPointsFunction(p0, p1, subdivisionSize);\r\n if (colorsPerVertex && i < colorLength) {\r\n const c1 = colors[i + 1];\r\n const interpolatedColors = interpolateColors(\r\n p0,\r\n p1,\r\n c0,\r\n c1,\r\n numColors\r\n );\r\n const interpolatedColorsLength = interpolatedColors.length;\r\n for (j = 0; j < interpolatedColorsLength; ++j) {\r\n newColors[newColorIndex++] = interpolatedColors[j];\r\n }\r\n } else {\r\n for (j = 0; j < numColors; ++j) {\r\n newColors[newColorIndex++] = Color.clone(c0);\r\n }\r\n }\r\n }\r\n\r\n newColors[newColorIndex] = Color.clone(colors[colors.length - 1]);\r\n colors = newColors;\r\n\r\n scratchInterpolateColorsArray.length = 0;\r\n }\r\n\r\n if (arcType === ArcType.GEODESIC) {\r\n positions = PolylinePipeline.generateCartesianArc({\r\n positions: positions,\r\n minDistance: subdivisionSize,\r\n ellipsoid: ellipsoid,\r\n height: heights,\r\n });\r\n } else {\r\n positions = PolylinePipeline.generateCartesianRhumbArc({\r\n positions: positions,\r\n granularity: subdivisionSize,\r\n ellipsoid: ellipsoid,\r\n height: heights,\r\n });\r\n }\r\n }\r\n\r\n positionsLength = positions.length;\r\n const size = positionsLength * 4.0 - 4.0;\r\n\r\n const finalPositions = new Float64Array(size * 3);\r\n const prevPositions = new Float64Array(size * 3);\r\n const nextPositions = new Float64Array(size * 3);\r\n const expandAndWidth = new Float32Array(size * 2);\r\n const st = vertexFormat.st ? new Float32Array(size * 2) : undefined;\r\n const finalColors = defined(colors) ? new Uint8Array(size * 4) : undefined;\r\n\r\n let positionIndex = 0;\r\n let expandAndWidthIndex = 0;\r\n let stIndex = 0;\r\n let colorIndex = 0;\r\n let position;\r\n\r\n for (j = 0; j < positionsLength; ++j) {\r\n if (j === 0) {\r\n position = scratchCartesian3;\r\n Cartesian3.subtract(positions[0], positions[1], position);\r\n Cartesian3.add(positions[0], position, position);\r\n } else {\r\n position = positions[j - 1];\r\n }\r\n\r\n Cartesian3.clone(position, scratchPrevPosition);\r\n Cartesian3.clone(positions[j], scratchPosition);\r\n\r\n if (j === positionsLength - 1) {\r\n position = scratchCartesian3;\r\n Cartesian3.subtract(\r\n positions[positionsLength - 1],\r\n positions[positionsLength - 2],\r\n position\r\n );\r\n Cartesian3.add(positions[positionsLength - 1], position, position);\r\n } else {\r\n position = positions[j + 1];\r\n }\r\n\r\n Cartesian3.clone(position, scratchNextPosition);\r\n\r\n let color0, color1;\r\n if (defined(finalColors)) {\r\n if (j !== 0 && !colorsPerVertex) {\r\n color0 = colors[j - 1];\r\n } else {\r\n color0 = colors[j];\r\n }\r\n\r\n if (j !== positionsLength - 1) {\r\n color1 = colors[j];\r\n }\r\n }\r\n\r\n const startK = j === 0 ? 2 : 0;\r\n const endK = j === positionsLength - 1 ? 2 : 4;\r\n\r\n for (k = startK; k < endK; ++k) {\r\n Cartesian3.pack(scratchPosition, finalPositions, positionIndex);\r\n Cartesian3.pack(scratchPrevPosition, prevPositions, positionIndex);\r\n Cartesian3.pack(scratchNextPosition, nextPositions, positionIndex);\r\n positionIndex += 3;\r\n\r\n const direction = k - 2 < 0 ? -1.0 : 1.0;\r\n expandAndWidth[expandAndWidthIndex++] = 2 * (k % 2) - 1; // expand direction\r\n expandAndWidth[expandAndWidthIndex++] = direction * width;\r\n\r\n if (vertexFormat.st) {\r\n st[stIndex++] = j / (positionsLength - 1);\r\n st[stIndex++] = Math.max(expandAndWidth[expandAndWidthIndex - 2], 0.0);\r\n }\r\n\r\n if (defined(finalColors)) {\r\n const color = k < 2 ? color0 : color1;\r\n\r\n finalColors[colorIndex++] = Color.floatToByte(color.red);\r\n finalColors[colorIndex++] = Color.floatToByte(color.green);\r\n finalColors[colorIndex++] = Color.floatToByte(color.blue);\r\n finalColors[colorIndex++] = Color.floatToByte(color.alpha);\r\n }\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: finalPositions,\r\n });\r\n\r\n attributes.prevPosition = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: prevPositions,\r\n });\r\n\r\n attributes.nextPosition = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: nextPositions,\r\n });\r\n\r\n attributes.expandAndWidth = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: expandAndWidth,\r\n });\r\n\r\n if (vertexFormat.st) {\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: st,\r\n });\r\n }\r\n\r\n if (defined(finalColors)) {\r\n attributes.color = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 4,\r\n values: finalColors,\r\n normalize: true,\r\n });\r\n }\r\n\r\n const indices = IndexDatatype.createTypedArray(size, positionsLength * 6 - 6);\r\n let index = 0;\r\n let indicesIndex = 0;\r\n const length = positionsLength - 1.0;\r\n for (j = 0; j < length; ++j) {\r\n indices[indicesIndex++] = index;\r\n indices[indicesIndex++] = index + 2;\r\n indices[indicesIndex++] = index + 1;\r\n\r\n indices[indicesIndex++] = index + 1;\r\n indices[indicesIndex++] = index + 2;\r\n indices[indicesIndex++] = index + 3;\r\n\r\n index += 4;\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: BoundingSphere.fromPoints(positions),\r\n geometryType: GeometryType.POLYLINES,\r\n });\r\n};\r\nexport default PolylineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport PolylineGeometry from \"../Core/PolylineGeometry.js\";\r\n\r\nfunction createPolylineGeometry(polylineGeometry, offset) {\r\n if (defined(offset)) {\r\n polylineGeometry = PolylineGeometry.unpack(polylineGeometry, offset);\r\n }\r\n polylineGeometry._ellipsoid = Ellipsoid.clone(polylineGeometry._ellipsoid);\r\n return PolylineGeometry.createGeometry(polylineGeometry);\r\n}\r\nexport default createPolylineGeometry;\r\n"],"names":["Color","defaultValue","defined","DeveloperError","VertexFormat","ArcType","CesiumMath","Ellipsoid","Cartesian3","arrayRemoveDuplicates","PolylinePipeline","GeometryAttributes","GeometryAttribute","ComponentDatatype","IndexDatatype","Geometry","PrimitiveType","BoundingSphere","GeometryType"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createPolylineVolumeGeometry.js b/debug/cesium/Workers/createPolylineVolumeGeometry.js deleted file mode 100644 index d41d5e8..0000000 --- a/debug/cesium/Workers/createPolylineVolumeGeometry.js +++ /dev/null @@ -1,437 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './arrayRemoveDuplicates-c3526030', './BoundingRectangle-6617ed83', './Transforms-11fb6b0a', './Matrix2-036c77dd', './ComponentDatatype-13a5630b', './PolylineVolumeGeometryLibrary-eed2bdf7', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonPipeline-313487c3', './VertexFormat-f2d74c96', './combine-4598d225', './RuntimeError-e5c6a8b9', './WebGLConstants-f27a5e29', './EllipsoidTangentPlane-c421b2cb', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d', './PolylinePipeline-3c021236', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f'], (function (defaultValue, Matrix3, arrayRemoveDuplicates, BoundingRectangle, Transforms, Matrix2, ComponentDatatype, PolylineVolumeGeometryLibrary, Check, GeometryAttribute, GeometryAttributes, GeometryPipeline, IndexDatatype, Math, PolygonPipeline, VertexFormat, combine, RuntimeError, WebGLConstants, EllipsoidTangentPlane, AxisAlignedBoundingBox, IntersectionTests, Plane, PolylinePipeline, EllipsoidGeodesic, EllipsoidRhumbLine, AttributeCompression, EncodedCartesian3) { 'use strict'; - - function computeAttributes( - combinedPositions, - shape, - boundingRectangle, - vertexFormat - ) { - const attributes = new GeometryAttributes.GeometryAttributes(); - if (vertexFormat.position) { - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: combinedPositions, - }); - } - const shapeLength = shape.length; - const vertexCount = combinedPositions.length / 3; - const length = (vertexCount - shapeLength * 2) / (shapeLength * 2); - const firstEndIndices = PolygonPipeline.PolygonPipeline.triangulate(shape); - - const indicesCount = - (length - 1) * shapeLength * 6 + firstEndIndices.length * 2; - const indices = IndexDatatype.IndexDatatype.createTypedArray(vertexCount, indicesCount); - let i, j; - let ll, ul, ur, lr; - const offset = shapeLength * 2; - let index = 0; - for (i = 0; i < length - 1; i++) { - for (j = 0; j < shapeLength - 1; j++) { - ll = j * 2 + i * shapeLength * 2; - lr = ll + offset; - ul = ll + 1; - ur = ul + offset; - - indices[index++] = ul; - indices[index++] = ll; - indices[index++] = ur; - indices[index++] = ur; - indices[index++] = ll; - indices[index++] = lr; - } - ll = shapeLength * 2 - 2 + i * shapeLength * 2; - ul = ll + 1; - ur = ul + offset; - lr = ll + offset; - - indices[index++] = ul; - indices[index++] = ll; - indices[index++] = ur; - indices[index++] = ur; - indices[index++] = ll; - indices[index++] = lr; - } - - if (vertexFormat.st || vertexFormat.tangent || vertexFormat.bitangent) { - // st required for tangent/bitangent calculation - const st = new Float32Array(vertexCount * 2); - const lengthSt = 1 / (length - 1); - const heightSt = 1 / boundingRectangle.height; - const heightOffset = boundingRectangle.height / 2; - let s, t; - let stindex = 0; - for (i = 0; i < length; i++) { - s = i * lengthSt; - t = heightSt * (shape[0].y + heightOffset); - st[stindex++] = s; - st[stindex++] = t; - for (j = 1; j < shapeLength; j++) { - t = heightSt * (shape[j].y + heightOffset); - st[stindex++] = s; - st[stindex++] = t; - st[stindex++] = s; - st[stindex++] = t; - } - t = heightSt * (shape[0].y + heightOffset); - st[stindex++] = s; - st[stindex++] = t; - } - for (j = 0; j < shapeLength; j++) { - s = 0; - t = heightSt * (shape[j].y + heightOffset); - st[stindex++] = s; - st[stindex++] = t; - } - for (j = 0; j < shapeLength; j++) { - s = (length - 1) * lengthSt; - t = heightSt * (shape[j].y + heightOffset); - st[stindex++] = s; - st[stindex++] = t; - } - - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: new Float32Array(st), - }); - } - - const endOffset = vertexCount - shapeLength * 2; - for (i = 0; i < firstEndIndices.length; i += 3) { - const v0 = firstEndIndices[i] + endOffset; - const v1 = firstEndIndices[i + 1] + endOffset; - const v2 = firstEndIndices[i + 2] + endOffset; - - indices[index++] = v0; - indices[index++] = v1; - indices[index++] = v2; - indices[index++] = v2 + shapeLength; - indices[index++] = v1 + shapeLength; - indices[index++] = v0 + shapeLength; - } - - let geometry = new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - boundingSphere: Transforms.BoundingSphere.fromVertices(combinedPositions), - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }); - - if (vertexFormat.normal) { - geometry = GeometryPipeline.GeometryPipeline.computeNormal(geometry); - } - - if (vertexFormat.tangent || vertexFormat.bitangent) { - try { - geometry = GeometryPipeline.GeometryPipeline.computeTangentAndBitangent(geometry); - } catch (e) { - PolylineVolumeGeometryLibrary.oneTimeWarning( - "polyline-volume-tangent-bitangent", - "Unable to compute tangents and bitangents for polyline volume geometry" - ); - //TODO https://github.com/CesiumGS/cesium/issues/3609 - } - - if (!vertexFormat.tangent) { - geometry.attributes.tangent = undefined; - } - if (!vertexFormat.bitangent) { - geometry.attributes.bitangent = undefined; - } - if (!vertexFormat.st) { - geometry.attributes.st = undefined; - } - } - - return geometry; - } - - /** - * A description of a polyline with a volume (a 2D shape extruded along a polyline). - * - * @alias PolylineVolumeGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.polylinePositions An array of {@link Cartesian3} positions that define the center of the polyline volume. - * @param {Cartesian2[]} options.shapePositions An array of {@link Cartesian2} positions that define the shape to be extruded along the polyline - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners. - * - * @see PolylineVolumeGeometry#createGeometry - * - * @demo {@link https://sandcastle.cesium.com/index.html?src=Polyline%20Volume.html|Cesium Sandcastle Polyline Volume Demo} - * - * @example - * function computeCircle(radius) { - * const positions = []; - * for (let i = 0; i < 360; i++) { - * const radians = Cesium.Math.toRadians(i); - * positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians))); - * } - * return positions; - * } - * - * const volume = new Cesium.PolylineVolumeGeometry({ - * vertexFormat : Cesium.VertexFormat.POSITION_ONLY, - * polylinePositions : Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0 - * ]), - * shapePositions : computeCircle(100000.0) - * }); - */ - function PolylineVolumeGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.polylinePositions; - const shape = options.shapePositions; - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions)) { - throw new Check.DeveloperError("options.polylinePositions is required."); - } - if (!defaultValue.defined(shape)) { - throw new Check.DeveloperError("options.shapePositions is required."); - } - //>>includeEnd('debug'); - - this._positions = positions; - this._shape = shape; - this._ellipsoid = Matrix3.Ellipsoid.clone( - defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84) - ); - this._cornerType = defaultValue.defaultValue(options.cornerType, PolylineVolumeGeometryLibrary.CornerType.ROUNDED); - this._vertexFormat = VertexFormat.VertexFormat.clone( - defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT) - ); - this._granularity = defaultValue.defaultValue( - options.granularity, - Math.CesiumMath.RADIANS_PER_DEGREE - ); - this._workerName = "createPolylineVolumeGeometry"; - - let numComponents = 1 + positions.length * Matrix3.Cartesian3.packedLength; - numComponents += 1 + shape.length * Matrix2.Cartesian2.packedLength; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - numComponents + Matrix3.Ellipsoid.packedLength + VertexFormat.VertexFormat.packedLength + 2; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {PolylineVolumeGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - PolylineVolumeGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - const positions = value._positions; - let length = positions.length; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - Matrix3.Cartesian3.pack(positions[i], array, startingIndex); - } - - const shape = value._shape; - length = shape.length; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Matrix2.Cartesian2.packedLength) { - Matrix2.Cartesian2.pack(shape[i], array, startingIndex); - } - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._cornerType; - array[startingIndex] = value._granularity; - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - polylinePositions: undefined, - shapePositions: undefined, - ellipsoid: scratchEllipsoid, - vertexFormat: scratchVertexFormat, - cornerType: undefined, - granularity: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PolylineVolumeGeometry} [result] The object into which to store the result. - * @returns {PolylineVolumeGeometry} The modified result parameter or a new PolylineVolumeGeometry instance if one was not provided. - */ - PolylineVolumeGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - let length = array[startingIndex++]; - const positions = new Array(length); - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - positions[i] = Matrix3.Cartesian3.unpack(array, startingIndex); - } - - length = array[startingIndex++]; - const shape = new Array(length); - - for (i = 0; i < length; ++i, startingIndex += Matrix2.Cartesian2.packedLength) { - shape[i] = Matrix2.Cartesian2.unpack(array, startingIndex); - } - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const cornerType = array[startingIndex++]; - const granularity = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.polylinePositions = positions; - scratchOptions.shapePositions = shape; - scratchOptions.cornerType = cornerType; - scratchOptions.granularity = granularity; - return new PolylineVolumeGeometry(scratchOptions); - } - - result._positions = positions; - result._shape = shape; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._cornerType = cornerType; - result._granularity = granularity; - - return result; - }; - - const brScratch = new BoundingRectangle.BoundingRectangle(); - - /** - * Computes the geometric representation of a polyline with a volume, including its vertices, indices, and a bounding sphere. - * - * @param {PolylineVolumeGeometry} polylineVolumeGeometry A description of the polyline volume. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - PolylineVolumeGeometry.createGeometry = function (polylineVolumeGeometry) { - const positions = polylineVolumeGeometry._positions; - const cleanPositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - positions, - Matrix3.Cartesian3.equalsEpsilon - ); - let shape2D = polylineVolumeGeometry._shape; - shape2D = PolylineVolumeGeometryLibrary.PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(shape2D); - - if (cleanPositions.length < 2 || shape2D.length < 3) { - return undefined; - } - - if ( - PolygonPipeline.PolygonPipeline.computeWindingOrder2D(shape2D) === PolygonPipeline.WindingOrder.CLOCKWISE - ) { - shape2D.reverse(); - } - const boundingRectangle = BoundingRectangle.BoundingRectangle.fromPoints(shape2D, brScratch); - - const computedPositions = PolylineVolumeGeometryLibrary.PolylineVolumeGeometryLibrary.computePositions( - cleanPositions, - shape2D, - boundingRectangle, - polylineVolumeGeometry, - true - ); - return computeAttributes( - computedPositions, - shape2D, - boundingRectangle, - polylineVolumeGeometry._vertexFormat - ); - }; - - function createPolylineVolumeGeometry(polylineVolumeGeometry, offset) { - if (defaultValue.defined(offset)) { - polylineVolumeGeometry = PolylineVolumeGeometry.unpack( - polylineVolumeGeometry, - offset - ); - } - polylineVolumeGeometry._ellipsoid = Matrix3.Ellipsoid.clone( - polylineVolumeGeometry._ellipsoid - ); - return PolylineVolumeGeometry.createGeometry(polylineVolumeGeometry); - } - - return createPolylineVolumeGeometry; - -})); -//# sourceMappingURL=createPolylineVolumeGeometry.js.map diff --git a/debug/cesium/Workers/createPolylineVolumeGeometry.js.map b/debug/cesium/Workers/createPolylineVolumeGeometry.js.map deleted file mode 100644 index 4a975c9..0000000 --- a/debug/cesium/Workers/createPolylineVolumeGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createPolylineVolumeGeometry.js","sources":["../../../Source/Core/PolylineVolumeGeometry.js","../../../Source/WorkersES6/createPolylineVolumeGeometry.js"],"sourcesContent":["import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport BoundingRectangle from \"./BoundingRectangle.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport CornerType from \"./CornerType.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryPipeline from \"./GeometryPipeline.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport oneTimeWarning from \"./oneTimeWarning.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\nimport WindingOrder from \"./WindingOrder.js\";\r\n\r\nfunction computeAttributes(\r\n combinedPositions,\r\n shape,\r\n boundingRectangle,\r\n vertexFormat\r\n) {\r\n const attributes = new GeometryAttributes();\r\n if (vertexFormat.position) {\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: combinedPositions,\r\n });\r\n }\r\n const shapeLength = shape.length;\r\n const vertexCount = combinedPositions.length / 3;\r\n const length = (vertexCount - shapeLength * 2) / (shapeLength * 2);\r\n const firstEndIndices = PolygonPipeline.triangulate(shape);\r\n\r\n const indicesCount =\r\n (length - 1) * shapeLength * 6 + firstEndIndices.length * 2;\r\n const indices = IndexDatatype.createTypedArray(vertexCount, indicesCount);\r\n let i, j;\r\n let ll, ul, ur, lr;\r\n const offset = shapeLength * 2;\r\n let index = 0;\r\n for (i = 0; i < length - 1; i++) {\r\n for (j = 0; j < shapeLength - 1; j++) {\r\n ll = j * 2 + i * shapeLength * 2;\r\n lr = ll + offset;\r\n ul = ll + 1;\r\n ur = ul + offset;\r\n\r\n indices[index++] = ul;\r\n indices[index++] = ll;\r\n indices[index++] = ur;\r\n indices[index++] = ur;\r\n indices[index++] = ll;\r\n indices[index++] = lr;\r\n }\r\n ll = shapeLength * 2 - 2 + i * shapeLength * 2;\r\n ul = ll + 1;\r\n ur = ul + offset;\r\n lr = ll + offset;\r\n\r\n indices[index++] = ul;\r\n indices[index++] = ll;\r\n indices[index++] = ur;\r\n indices[index++] = ur;\r\n indices[index++] = ll;\r\n indices[index++] = lr;\r\n }\r\n\r\n if (vertexFormat.st || vertexFormat.tangent || vertexFormat.bitangent) {\r\n // st required for tangent/bitangent calculation\r\n const st = new Float32Array(vertexCount * 2);\r\n const lengthSt = 1 / (length - 1);\r\n const heightSt = 1 / boundingRectangle.height;\r\n const heightOffset = boundingRectangle.height / 2;\r\n let s, t;\r\n let stindex = 0;\r\n for (i = 0; i < length; i++) {\r\n s = i * lengthSt;\r\n t = heightSt * (shape[0].y + heightOffset);\r\n st[stindex++] = s;\r\n st[stindex++] = t;\r\n for (j = 1; j < shapeLength; j++) {\r\n t = heightSt * (shape[j].y + heightOffset);\r\n st[stindex++] = s;\r\n st[stindex++] = t;\r\n st[stindex++] = s;\r\n st[stindex++] = t;\r\n }\r\n t = heightSt * (shape[0].y + heightOffset);\r\n st[stindex++] = s;\r\n st[stindex++] = t;\r\n }\r\n for (j = 0; j < shapeLength; j++) {\r\n s = 0;\r\n t = heightSt * (shape[j].y + heightOffset);\r\n st[stindex++] = s;\r\n st[stindex++] = t;\r\n }\r\n for (j = 0; j < shapeLength; j++) {\r\n s = (length - 1) * lengthSt;\r\n t = heightSt * (shape[j].y + heightOffset);\r\n st[stindex++] = s;\r\n st[stindex++] = t;\r\n }\r\n\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: new Float32Array(st),\r\n });\r\n }\r\n\r\n const endOffset = vertexCount - shapeLength * 2;\r\n for (i = 0; i < firstEndIndices.length; i += 3) {\r\n const v0 = firstEndIndices[i] + endOffset;\r\n const v1 = firstEndIndices[i + 1] + endOffset;\r\n const v2 = firstEndIndices[i + 2] + endOffset;\r\n\r\n indices[index++] = v0;\r\n indices[index++] = v1;\r\n indices[index++] = v2;\r\n indices[index++] = v2 + shapeLength;\r\n indices[index++] = v1 + shapeLength;\r\n indices[index++] = v0 + shapeLength;\r\n }\r\n\r\n let geometry = new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n boundingSphere: BoundingSphere.fromVertices(combinedPositions),\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n });\r\n\r\n if (vertexFormat.normal) {\r\n geometry = GeometryPipeline.computeNormal(geometry);\r\n }\r\n\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n try {\r\n geometry = GeometryPipeline.computeTangentAndBitangent(geometry);\r\n } catch (e) {\r\n oneTimeWarning(\r\n \"polyline-volume-tangent-bitangent\",\r\n \"Unable to compute tangents and bitangents for polyline volume geometry\"\r\n );\r\n //TODO https://github.com/CesiumGS/cesium/issues/3609\r\n }\r\n\r\n if (!vertexFormat.tangent) {\r\n geometry.attributes.tangent = undefined;\r\n }\r\n if (!vertexFormat.bitangent) {\r\n geometry.attributes.bitangent = undefined;\r\n }\r\n if (!vertexFormat.st) {\r\n geometry.attributes.st = undefined;\r\n }\r\n }\r\n\r\n return geometry;\r\n}\r\n\r\n/**\r\n * A description of a polyline with a volume (a 2D shape extruded along a polyline).\r\n *\r\n * @alias PolylineVolumeGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.polylinePositions An array of {@link Cartesian3} positions that define the center of the polyline volume.\r\n * @param {Cartesian2[]} options.shapePositions An array of {@link Cartesian2} positions that define the shape to be extruded along the polyline\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\r\n *\r\n * @see PolylineVolumeGeometry#createGeometry\r\n *\r\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Polyline%20Volume.html|Cesium Sandcastle Polyline Volume Demo}\r\n *\r\n * @example\r\n * function computeCircle(radius) {\r\n * const positions = [];\r\n * for (let i = 0; i < 360; i++) {\r\n * const radians = Cesium.Math.toRadians(i);\r\n * positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));\r\n * }\r\n * return positions;\r\n * }\r\n *\r\n * const volume = new Cesium.PolylineVolumeGeometry({\r\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY,\r\n * polylinePositions : Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0\r\n * ]),\r\n * shapePositions : computeCircle(100000.0)\r\n * });\r\n */\r\nfunction PolylineVolumeGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.polylinePositions;\r\n const shape = options.shapePositions;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions)) {\r\n throw new DeveloperError(\"options.polylinePositions is required.\");\r\n }\r\n if (!defined(shape)) {\r\n throw new DeveloperError(\"options.shapePositions is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._positions = positions;\r\n this._shape = shape;\r\n this._ellipsoid = Ellipsoid.clone(\r\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\r\n );\r\n this._cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\r\n this._vertexFormat = VertexFormat.clone(\r\n defaultValue(options.vertexFormat, VertexFormat.DEFAULT)\r\n );\r\n this._granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n this._workerName = \"createPolylineVolumeGeometry\";\r\n\r\n let numComponents = 1 + positions.length * Cartesian3.packedLength;\r\n numComponents += 1 + shape.length * Cartesian2.packedLength;\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 2;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PolylineVolumeGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nPolylineVolumeGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n const positions = value._positions;\r\n let length = positions.length;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n Cartesian3.pack(positions[i], array, startingIndex);\r\n }\r\n\r\n const shape = value._shape;\r\n length = shape.length;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\r\n Cartesian2.pack(shape[i], array, startingIndex);\r\n }\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._cornerType;\r\n array[startingIndex] = value._granularity;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n polylinePositions: undefined,\r\n shapePositions: undefined,\r\n ellipsoid: scratchEllipsoid,\r\n vertexFormat: scratchVertexFormat,\r\n cornerType: undefined,\r\n granularity: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PolylineVolumeGeometry} [result] The object into which to store the result.\r\n * @returns {PolylineVolumeGeometry} The modified result parameter or a new PolylineVolumeGeometry instance if one was not provided.\r\n */\r\nPolylineVolumeGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n let length = array[startingIndex++];\r\n const positions = new Array(length);\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n positions[i] = Cartesian3.unpack(array, startingIndex);\r\n }\r\n\r\n length = array[startingIndex++];\r\n const shape = new Array(length);\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\r\n shape[i] = Cartesian2.unpack(array, startingIndex);\r\n }\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const cornerType = array[startingIndex++];\r\n const granularity = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.polylinePositions = positions;\r\n scratchOptions.shapePositions = shape;\r\n scratchOptions.cornerType = cornerType;\r\n scratchOptions.granularity = granularity;\r\n return new PolylineVolumeGeometry(scratchOptions);\r\n }\r\n\r\n result._positions = positions;\r\n result._shape = shape;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._cornerType = cornerType;\r\n result._granularity = granularity;\r\n\r\n return result;\r\n};\r\n\r\nconst brScratch = new BoundingRectangle();\r\n\r\n/**\r\n * Computes the geometric representation of a polyline with a volume, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {PolylineVolumeGeometry} polylineVolumeGeometry A description of the polyline volume.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nPolylineVolumeGeometry.createGeometry = function (polylineVolumeGeometry) {\r\n const positions = polylineVolumeGeometry._positions;\r\n const cleanPositions = arrayRemoveDuplicates(\r\n positions,\r\n Cartesian3.equalsEpsilon\r\n );\r\n let shape2D = polylineVolumeGeometry._shape;\r\n shape2D = PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(shape2D);\r\n\r\n if (cleanPositions.length < 2 || shape2D.length < 3) {\r\n return undefined;\r\n }\r\n\r\n if (\r\n PolygonPipeline.computeWindingOrder2D(shape2D) === WindingOrder.CLOCKWISE\r\n ) {\r\n shape2D.reverse();\r\n }\r\n const boundingRectangle = BoundingRectangle.fromPoints(shape2D, brScratch);\r\n\r\n const computedPositions = PolylineVolumeGeometryLibrary.computePositions(\r\n cleanPositions,\r\n shape2D,\r\n boundingRectangle,\r\n polylineVolumeGeometry,\r\n true\r\n );\r\n return computeAttributes(\r\n computedPositions,\r\n shape2D,\r\n boundingRectangle,\r\n polylineVolumeGeometry._vertexFormat\r\n );\r\n};\r\nexport default PolylineVolumeGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport PolylineVolumeGeometry from \"../Core/PolylineVolumeGeometry.js\";\r\n\r\nfunction createPolylineVolumeGeometry(polylineVolumeGeometry, offset) {\r\n if (defined(offset)) {\r\n polylineVolumeGeometry = PolylineVolumeGeometry.unpack(\r\n polylineVolumeGeometry,\r\n offset\r\n );\r\n }\r\n polylineVolumeGeometry._ellipsoid = Ellipsoid.clone(\r\n polylineVolumeGeometry._ellipsoid\r\n );\r\n return PolylineVolumeGeometry.createGeometry(polylineVolumeGeometry);\r\n}\r\nexport default createPolylineVolumeGeometry;\r\n"],"names":["GeometryAttributes","GeometryAttribute","ComponentDatatype","PolygonPipeline","IndexDatatype","Geometry","BoundingSphere","PrimitiveType","GeometryPipeline","oneTimeWarning","defaultValue","defined","DeveloperError","Ellipsoid","CornerType","VertexFormat","CesiumMath","Cartesian3","Cartesian2","BoundingRectangle","arrayRemoveDuplicates","PolylineVolumeGeometryLibrary","WindingOrder"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createPolylineVolumeOutlineGeometry.js b/debug/cesium/Workers/createPolylineVolumeOutlineGeometry.js deleted file mode 100644 index 23bf419..0000000 --- a/debug/cesium/Workers/createPolylineVolumeOutlineGeometry.js +++ /dev/null @@ -1,327 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './arrayRemoveDuplicates-c3526030', './BoundingRectangle-6617ed83', './Transforms-11fb6b0a', './Matrix2-036c77dd', './ComponentDatatype-13a5630b', './PolylineVolumeGeometryLibrary-eed2bdf7', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonPipeline-313487c3', './combine-4598d225', './RuntimeError-e5c6a8b9', './WebGLConstants-f27a5e29', './EllipsoidTangentPlane-c421b2cb', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d', './PolylinePipeline-3c021236', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b'], (function (defaultValue, Matrix3, arrayRemoveDuplicates, BoundingRectangle, Transforms, Matrix2, ComponentDatatype, PolylineVolumeGeometryLibrary, Check, GeometryAttribute, GeometryAttributes, IndexDatatype, Math, PolygonPipeline, combine, RuntimeError, WebGLConstants, EllipsoidTangentPlane, AxisAlignedBoundingBox, IntersectionTests, Plane, PolylinePipeline, EllipsoidGeodesic, EllipsoidRhumbLine) { 'use strict'; - - function computeAttributes(positions, shape) { - const attributes = new GeometryAttributes.GeometryAttributes(); - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - - const shapeLength = shape.length; - const vertexCount = attributes.position.values.length / 3; - const positionLength = positions.length / 3; - const shapeCount = positionLength / shapeLength; - const indices = IndexDatatype.IndexDatatype.createTypedArray( - vertexCount, - 2 * shapeLength * (shapeCount + 1) - ); - let i, j; - let index = 0; - i = 0; - let offset = i * shapeLength; - for (j = 0; j < shapeLength - 1; j++) { - indices[index++] = j + offset; - indices[index++] = j + offset + 1; - } - indices[index++] = shapeLength - 1 + offset; - indices[index++] = offset; - - i = shapeCount - 1; - offset = i * shapeLength; - for (j = 0; j < shapeLength - 1; j++) { - indices[index++] = j + offset; - indices[index++] = j + offset + 1; - } - indices[index++] = shapeLength - 1 + offset; - indices[index++] = offset; - - for (i = 0; i < shapeCount - 1; i++) { - const firstOffset = shapeLength * i; - const secondOffset = firstOffset + shapeLength; - for (j = 0; j < shapeLength; j++) { - indices[index++] = j + firstOffset; - indices[index++] = j + secondOffset; - } - } - - const geometry = new GeometryAttribute.Geometry({ - attributes: attributes, - indices: IndexDatatype.IndexDatatype.createTypedArray(vertexCount, indices), - boundingSphere: Transforms.BoundingSphere.fromVertices(positions), - primitiveType: GeometryAttribute.PrimitiveType.LINES, - }); - - return geometry; - } - - /** - * A description of a polyline with a volume (a 2D shape extruded along a polyline). - * - * @alias PolylineVolumeOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.polylinePositions An array of positions that define the center of the polyline volume. - * @param {Cartesian2[]} options.shapePositions An array of positions that define the shape to be extruded along the polyline - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners. - * - * @see PolylineVolumeOutlineGeometry#createGeometry - * - * @example - * function computeCircle(radius) { - * const positions = []; - * for (let i = 0; i < 360; i++) { - * const radians = Cesium.Math.toRadians(i); - * positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians))); - * } - * return positions; - * } - * - * const volumeOutline = new Cesium.PolylineVolumeOutlineGeometry({ - * polylinePositions : Cesium.Cartesian3.fromDegreesArray([ - * -72.0, 40.0, - * -70.0, 35.0 - * ]), - * shapePositions : computeCircle(100000.0) - * }); - */ - function PolylineVolumeOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.polylinePositions; - const shape = options.shapePositions; - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions)) { - throw new Check.DeveloperError("options.polylinePositions is required."); - } - if (!defaultValue.defined(shape)) { - throw new Check.DeveloperError("options.shapePositions is required."); - } - //>>includeEnd('debug'); - - this._positions = positions; - this._shape = shape; - this._ellipsoid = Matrix3.Ellipsoid.clone( - defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84) - ); - this._cornerType = defaultValue.defaultValue(options.cornerType, PolylineVolumeGeometryLibrary.CornerType.ROUNDED); - this._granularity = defaultValue.defaultValue( - options.granularity, - Math.CesiumMath.RADIANS_PER_DEGREE - ); - this._workerName = "createPolylineVolumeOutlineGeometry"; - - let numComponents = 1 + positions.length * Matrix3.Cartesian3.packedLength; - numComponents += 1 + shape.length * Matrix2.Cartesian2.packedLength; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = numComponents + Matrix3.Ellipsoid.packedLength + 2; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {PolylineVolumeOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - PolylineVolumeOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - const positions = value._positions; - let length = positions.length; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - Matrix3.Cartesian3.pack(positions[i], array, startingIndex); - } - - const shape = value._shape; - length = shape.length; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Matrix2.Cartesian2.packedLength) { - Matrix2.Cartesian2.pack(shape[i], array, startingIndex); - } - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - array[startingIndex++] = value._cornerType; - array[startingIndex] = value._granularity; - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchOptions = { - polylinePositions: undefined, - shapePositions: undefined, - ellipsoid: scratchEllipsoid, - height: undefined, - cornerType: undefined, - granularity: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {PolylineVolumeOutlineGeometry} [result] The object into which to store the result. - * @returns {PolylineVolumeOutlineGeometry} The modified result parameter or a new PolylineVolumeOutlineGeometry instance if one was not provided. - */ - PolylineVolumeOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - let length = array[startingIndex++]; - const positions = new Array(length); - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - positions[i] = Matrix3.Cartesian3.unpack(array, startingIndex); - } - - length = array[startingIndex++]; - const shape = new Array(length); - - for (i = 0; i < length; ++i, startingIndex += Matrix2.Cartesian2.packedLength) { - shape[i] = Matrix2.Cartesian2.unpack(array, startingIndex); - } - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const cornerType = array[startingIndex++]; - const granularity = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.polylinePositions = positions; - scratchOptions.shapePositions = shape; - scratchOptions.cornerType = cornerType; - scratchOptions.granularity = granularity; - return new PolylineVolumeOutlineGeometry(scratchOptions); - } - - result._positions = positions; - result._shape = shape; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._cornerType = cornerType; - result._granularity = granularity; - - return result; - }; - - const brScratch = new BoundingRectangle.BoundingRectangle(); - - /** - * Computes the geometric representation of the outline of a polyline with a volume, including its vertices, indices, and a bounding sphere. - * - * @param {PolylineVolumeOutlineGeometry} polylineVolumeOutlineGeometry A description of the polyline volume outline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - PolylineVolumeOutlineGeometry.createGeometry = function ( - polylineVolumeOutlineGeometry - ) { - const positions = polylineVolumeOutlineGeometry._positions; - const cleanPositions = arrayRemoveDuplicates.arrayRemoveDuplicates( - positions, - Matrix3.Cartesian3.equalsEpsilon - ); - let shape2D = polylineVolumeOutlineGeometry._shape; - shape2D = PolylineVolumeGeometryLibrary.PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(shape2D); - - if (cleanPositions.length < 2 || shape2D.length < 3) { - return undefined; - } - - if ( - PolygonPipeline.PolygonPipeline.computeWindingOrder2D(shape2D) === PolygonPipeline.WindingOrder.CLOCKWISE - ) { - shape2D.reverse(); - } - const boundingRectangle = BoundingRectangle.BoundingRectangle.fromPoints(shape2D, brScratch); - - const computedPositions = PolylineVolumeGeometryLibrary.PolylineVolumeGeometryLibrary.computePositions( - cleanPositions, - shape2D, - boundingRectangle, - polylineVolumeOutlineGeometry, - false - ); - return computeAttributes(computedPositions, shape2D); - }; - - function createPolylineVolumeOutlineGeometry( - polylineVolumeOutlineGeometry, - offset - ) { - if (defaultValue.defined(offset)) { - polylineVolumeOutlineGeometry = PolylineVolumeOutlineGeometry.unpack( - polylineVolumeOutlineGeometry, - offset - ); - } - polylineVolumeOutlineGeometry._ellipsoid = Matrix3.Ellipsoid.clone( - polylineVolumeOutlineGeometry._ellipsoid - ); - return PolylineVolumeOutlineGeometry.createGeometry( - polylineVolumeOutlineGeometry - ); - } - - return createPolylineVolumeOutlineGeometry; - -})); -//# sourceMappingURL=createPolylineVolumeOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createPolylineVolumeOutlineGeometry.js.map b/debug/cesium/Workers/createPolylineVolumeOutlineGeometry.js.map deleted file mode 100644 index 219bd0f..0000000 --- a/debug/cesium/Workers/createPolylineVolumeOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createPolylineVolumeOutlineGeometry.js","sources":["../../../Source/Core/PolylineVolumeOutlineGeometry.js","../../../Source/WorkersES6/createPolylineVolumeOutlineGeometry.js"],"sourcesContent":["import arrayRemoveDuplicates from \"./arrayRemoveDuplicates.js\";\r\nimport BoundingRectangle from \"./BoundingRectangle.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport CornerType from \"./CornerType.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PolylineVolumeGeometryLibrary from \"./PolylineVolumeGeometryLibrary.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport WindingOrder from \"./WindingOrder.js\";\r\n\r\nfunction computeAttributes(positions, shape) {\r\n const attributes = new GeometryAttributes();\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n\r\n const shapeLength = shape.length;\r\n const vertexCount = attributes.position.values.length / 3;\r\n const positionLength = positions.length / 3;\r\n const shapeCount = positionLength / shapeLength;\r\n const indices = IndexDatatype.createTypedArray(\r\n vertexCount,\r\n 2 * shapeLength * (shapeCount + 1)\r\n );\r\n let i, j;\r\n let index = 0;\r\n i = 0;\r\n let offset = i * shapeLength;\r\n for (j = 0; j < shapeLength - 1; j++) {\r\n indices[index++] = j + offset;\r\n indices[index++] = j + offset + 1;\r\n }\r\n indices[index++] = shapeLength - 1 + offset;\r\n indices[index++] = offset;\r\n\r\n i = shapeCount - 1;\r\n offset = i * shapeLength;\r\n for (j = 0; j < shapeLength - 1; j++) {\r\n indices[index++] = j + offset;\r\n indices[index++] = j + offset + 1;\r\n }\r\n indices[index++] = shapeLength - 1 + offset;\r\n indices[index++] = offset;\r\n\r\n for (i = 0; i < shapeCount - 1; i++) {\r\n const firstOffset = shapeLength * i;\r\n const secondOffset = firstOffset + shapeLength;\r\n for (j = 0; j < shapeLength; j++) {\r\n indices[index++] = j + firstOffset;\r\n indices[index++] = j + secondOffset;\r\n }\r\n }\r\n\r\n const geometry = new Geometry({\r\n attributes: attributes,\r\n indices: IndexDatatype.createTypedArray(vertexCount, indices),\r\n boundingSphere: BoundingSphere.fromVertices(positions),\r\n primitiveType: PrimitiveType.LINES,\r\n });\r\n\r\n return geometry;\r\n}\r\n\r\n/**\r\n * A description of a polyline with a volume (a 2D shape extruded along a polyline).\r\n *\r\n * @alias PolylineVolumeOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.polylinePositions An array of positions that define the center of the polyline volume.\r\n * @param {Cartesian2[]} options.shapePositions An array of positions that define the shape to be extruded along the polyline\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {CornerType} [options.cornerType=CornerType.ROUNDED] Determines the style of the corners.\r\n *\r\n * @see PolylineVolumeOutlineGeometry#createGeometry\r\n *\r\n * @example\r\n * function computeCircle(radius) {\r\n * const positions = [];\r\n * for (let i = 0; i < 360; i++) {\r\n * const radians = Cesium.Math.toRadians(i);\r\n * positions.push(new Cesium.Cartesian2(radius * Math.cos(radians), radius * Math.sin(radians)));\r\n * }\r\n * return positions;\r\n * }\r\n *\r\n * const volumeOutline = new Cesium.PolylineVolumeOutlineGeometry({\r\n * polylinePositions : Cesium.Cartesian3.fromDegreesArray([\r\n * -72.0, 40.0,\r\n * -70.0, 35.0\r\n * ]),\r\n * shapePositions : computeCircle(100000.0)\r\n * });\r\n */\r\nfunction PolylineVolumeOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.polylinePositions;\r\n const shape = options.shapePositions;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions)) {\r\n throw new DeveloperError(\"options.polylinePositions is required.\");\r\n }\r\n if (!defined(shape)) {\r\n throw new DeveloperError(\"options.shapePositions is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._positions = positions;\r\n this._shape = shape;\r\n this._ellipsoid = Ellipsoid.clone(\r\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\r\n );\r\n this._cornerType = defaultValue(options.cornerType, CornerType.ROUNDED);\r\n this._granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n this._workerName = \"createPolylineVolumeOutlineGeometry\";\r\n\r\n let numComponents = 1 + positions.length * Cartesian3.packedLength;\r\n numComponents += 1 + shape.length * Cartesian2.packedLength;\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength = numComponents + Ellipsoid.packedLength + 2;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {PolylineVolumeOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nPolylineVolumeOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n const positions = value._positions;\r\n let length = positions.length;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n Cartesian3.pack(positions[i], array, startingIndex);\r\n }\r\n\r\n const shape = value._shape;\r\n length = shape.length;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\r\n Cartesian2.pack(shape[i], array, startingIndex);\r\n }\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n array[startingIndex++] = value._cornerType;\r\n array[startingIndex] = value._granularity;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchOptions = {\r\n polylinePositions: undefined,\r\n shapePositions: undefined,\r\n ellipsoid: scratchEllipsoid,\r\n height: undefined,\r\n cornerType: undefined,\r\n granularity: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {PolylineVolumeOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {PolylineVolumeOutlineGeometry} The modified result parameter or a new PolylineVolumeOutlineGeometry instance if one was not provided.\r\n */\r\nPolylineVolumeOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n let length = array[startingIndex++];\r\n const positions = new Array(length);\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n positions[i] = Cartesian3.unpack(array, startingIndex);\r\n }\r\n\r\n length = array[startingIndex++];\r\n const shape = new Array(length);\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian2.packedLength) {\r\n shape[i] = Cartesian2.unpack(array, startingIndex);\r\n }\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const cornerType = array[startingIndex++];\r\n const granularity = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.polylinePositions = positions;\r\n scratchOptions.shapePositions = shape;\r\n scratchOptions.cornerType = cornerType;\r\n scratchOptions.granularity = granularity;\r\n return new PolylineVolumeOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._positions = positions;\r\n result._shape = shape;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._cornerType = cornerType;\r\n result._granularity = granularity;\r\n\r\n return result;\r\n};\r\n\r\nconst brScratch = new BoundingRectangle();\r\n\r\n/**\r\n * Computes the geometric representation of the outline of a polyline with a volume, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {PolylineVolumeOutlineGeometry} polylineVolumeOutlineGeometry A description of the polyline volume outline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nPolylineVolumeOutlineGeometry.createGeometry = function (\r\n polylineVolumeOutlineGeometry\r\n) {\r\n const positions = polylineVolumeOutlineGeometry._positions;\r\n const cleanPositions = arrayRemoveDuplicates(\r\n positions,\r\n Cartesian3.equalsEpsilon\r\n );\r\n let shape2D = polylineVolumeOutlineGeometry._shape;\r\n shape2D = PolylineVolumeGeometryLibrary.removeDuplicatesFromShape(shape2D);\r\n\r\n if (cleanPositions.length < 2 || shape2D.length < 3) {\r\n return undefined;\r\n }\r\n\r\n if (\r\n PolygonPipeline.computeWindingOrder2D(shape2D) === WindingOrder.CLOCKWISE\r\n ) {\r\n shape2D.reverse();\r\n }\r\n const boundingRectangle = BoundingRectangle.fromPoints(shape2D, brScratch);\r\n\r\n const computedPositions = PolylineVolumeGeometryLibrary.computePositions(\r\n cleanPositions,\r\n shape2D,\r\n boundingRectangle,\r\n polylineVolumeOutlineGeometry,\r\n false\r\n );\r\n return computeAttributes(computedPositions, shape2D);\r\n};\r\nexport default PolylineVolumeOutlineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport PolylineVolumeOutlineGeometry from \"../Core/PolylineVolumeOutlineGeometry.js\";\r\n\r\nfunction createPolylineVolumeOutlineGeometry(\r\n polylineVolumeOutlineGeometry,\r\n offset\r\n) {\r\n if (defined(offset)) {\r\n polylineVolumeOutlineGeometry = PolylineVolumeOutlineGeometry.unpack(\r\n polylineVolumeOutlineGeometry,\r\n offset\r\n );\r\n }\r\n polylineVolumeOutlineGeometry._ellipsoid = Ellipsoid.clone(\r\n polylineVolumeOutlineGeometry._ellipsoid\r\n );\r\n return PolylineVolumeOutlineGeometry.createGeometry(\r\n polylineVolumeOutlineGeometry\r\n );\r\n}\r\nexport default createPolylineVolumeOutlineGeometry;\r\n"],"names":["GeometryAttributes","GeometryAttribute","ComponentDatatype","IndexDatatype","Geometry","BoundingSphere","PrimitiveType","defaultValue","defined","DeveloperError","Ellipsoid","CornerType","CesiumMath","Cartesian3","Cartesian2","BoundingRectangle","arrayRemoveDuplicates","PolylineVolumeGeometryLibrary","PolygonPipeline","WindingOrder"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createRectangleGeometry.js b/debug/cesium/Workers/createRectangleGeometry.js deleted file mode 100644 index c8d3af4..0000000 --- a/debug/cesium/Workers/createRectangleGeometry.js +++ /dev/null @@ -1,1502 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './Matrix2-036c77dd', './Transforms-11fb6b0a', './Check-d10e5f2e', './ComponentDatatype-13a5630b', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryInstance-b2be3e5a', './GeometryOffsetAttribute-cc320d7d', './GeometryPipeline-f28890f4', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonPipeline-313487c3', './RectangleGeometryLibrary-94f83a5a', './VertexFormat-f2d74c96', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './AttributeCompression-e9888cb8', './EncodedCartesian3-38e2691f', './IntersectionTests-2c7928de', './Plane-c9f1487d', './EllipsoidRhumbLine-48b4507b'], (function (defaultValue, Matrix3, Matrix2, Transforms, Check, ComponentDatatype, GeometryAttribute, GeometryAttributes, GeometryInstance, GeometryOffsetAttribute, GeometryPipeline, IndexDatatype, Math$1, PolygonPipeline, RectangleGeometryLibrary, VertexFormat, RuntimeError, combine, WebGLConstants, AttributeCompression, EncodedCartesian3, IntersectionTests, Plane, EllipsoidRhumbLine) { 'use strict'; - - const positionScratch = new Matrix3.Cartesian3(); - const normalScratch = new Matrix3.Cartesian3(); - const tangentScratch = new Matrix3.Cartesian3(); - const bitangentScratch = new Matrix3.Cartesian3(); - const rectangleScratch = new Matrix2.Rectangle(); - const stScratch = new Matrix2.Cartesian2(); - const bottomBoundingSphere = new Transforms.BoundingSphere(); - const topBoundingSphere = new Transforms.BoundingSphere(); - - function createAttributes(vertexFormat, attributes) { - const geo = new GeometryAttribute.Geometry({ - attributes: new GeometryAttributes.GeometryAttributes(), - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - }); - - geo.attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: attributes.positions, - }); - if (vertexFormat.normal) { - geo.attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: attributes.normals, - }); - } - if (vertexFormat.tangent) { - geo.attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: attributes.tangents, - }); - } - if (vertexFormat.bitangent) { - geo.attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: attributes.bitangents, - }); - } - return geo; - } - - function calculateAttributes( - positions, - vertexFormat, - ellipsoid, - tangentRotationMatrix - ) { - const length = positions.length; - - const normals = vertexFormat.normal ? new Float32Array(length) : undefined; - const tangents = vertexFormat.tangent ? new Float32Array(length) : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(length) - : undefined; - - let attrIndex = 0; - const bitangent = bitangentScratch; - const tangent = tangentScratch; - let normal = normalScratch; - if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) { - for (let i = 0; i < length; i += 3) { - const p = Matrix3.Cartesian3.fromArray(positions, i, positionScratch); - const attrIndex1 = attrIndex + 1; - const attrIndex2 = attrIndex + 2; - - normal = ellipsoid.geodeticSurfaceNormal(p, normal); - if (vertexFormat.tangent || vertexFormat.bitangent) { - Matrix3.Cartesian3.cross(Matrix3.Cartesian3.UNIT_Z, normal, tangent); - Matrix3.Matrix3.multiplyByVector(tangentRotationMatrix, tangent, tangent); - Matrix3.Cartesian3.normalize(tangent, tangent); - - if (vertexFormat.bitangent) { - Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(normal, tangent, bitangent), - bitangent - ); - } - } - - if (vertexFormat.normal) { - normals[attrIndex] = normal.x; - normals[attrIndex1] = normal.y; - normals[attrIndex2] = normal.z; - } - if (vertexFormat.tangent) { - tangents[attrIndex] = tangent.x; - tangents[attrIndex1] = tangent.y; - tangents[attrIndex2] = tangent.z; - } - if (vertexFormat.bitangent) { - bitangents[attrIndex] = bitangent.x; - bitangents[attrIndex1] = bitangent.y; - bitangents[attrIndex2] = bitangent.z; - } - attrIndex += 3; - } - } - return createAttributes(vertexFormat, { - positions: positions, - normals: normals, - tangents: tangents, - bitangents: bitangents, - }); - } - - const v1Scratch = new Matrix3.Cartesian3(); - const v2Scratch = new Matrix3.Cartesian3(); - - function calculateAttributesWall(positions, vertexFormat, ellipsoid) { - const length = positions.length; - - const normals = vertexFormat.normal ? new Float32Array(length) : undefined; - const tangents = vertexFormat.tangent ? new Float32Array(length) : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(length) - : undefined; - - let normalIndex = 0; - let tangentIndex = 0; - let bitangentIndex = 0; - let recomputeNormal = true; - - let bitangent = bitangentScratch; - let tangent = tangentScratch; - let normal = normalScratch; - if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) { - for (let i = 0; i < length; i += 6) { - const p = Matrix3.Cartesian3.fromArray(positions, i, positionScratch); - const p1 = Matrix3.Cartesian3.fromArray(positions, (i + 6) % length, v1Scratch); - if (recomputeNormal) { - const p2 = Matrix3.Cartesian3.fromArray(positions, (i + 3) % length, v2Scratch); - Matrix3.Cartesian3.subtract(p1, p, p1); - Matrix3.Cartesian3.subtract(p2, p, p2); - normal = Matrix3.Cartesian3.normalize(Matrix3.Cartesian3.cross(p2, p1, normal), normal); - recomputeNormal = false; - } - - if (Matrix3.Cartesian3.equalsEpsilon(p1, p, Math$1.CesiumMath.EPSILON10)) { - // if we've reached a corner - recomputeNormal = true; - } - - if (vertexFormat.tangent || vertexFormat.bitangent) { - bitangent = ellipsoid.geodeticSurfaceNormal(p, bitangent); - if (vertexFormat.tangent) { - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(bitangent, normal, tangent), - tangent - ); - } - } - - if (vertexFormat.normal) { - normals[normalIndex++] = normal.x; - normals[normalIndex++] = normal.y; - normals[normalIndex++] = normal.z; - normals[normalIndex++] = normal.x; - normals[normalIndex++] = normal.y; - normals[normalIndex++] = normal.z; - } - - if (vertexFormat.tangent) { - tangents[tangentIndex++] = tangent.x; - tangents[tangentIndex++] = tangent.y; - tangents[tangentIndex++] = tangent.z; - tangents[tangentIndex++] = tangent.x; - tangents[tangentIndex++] = tangent.y; - tangents[tangentIndex++] = tangent.z; - } - - if (vertexFormat.bitangent) { - bitangents[bitangentIndex++] = bitangent.x; - bitangents[bitangentIndex++] = bitangent.y; - bitangents[bitangentIndex++] = bitangent.z; - bitangents[bitangentIndex++] = bitangent.x; - bitangents[bitangentIndex++] = bitangent.y; - bitangents[bitangentIndex++] = bitangent.z; - } - } - } - - return createAttributes(vertexFormat, { - positions: positions, - normals: normals, - tangents: tangents, - bitangents: bitangents, - }); - } - - function constructRectangle(rectangleGeometry, computedOptions) { - const vertexFormat = rectangleGeometry._vertexFormat; - const ellipsoid = rectangleGeometry._ellipsoid; - const height = computedOptions.height; - const width = computedOptions.width; - const northCap = computedOptions.northCap; - const southCap = computedOptions.southCap; - - let rowStart = 0; - let rowEnd = height; - let rowHeight = height; - let size = 0; - if (northCap) { - rowStart = 1; - rowHeight -= 1; - size += 1; - } - if (southCap) { - rowEnd -= 1; - rowHeight -= 1; - size += 1; - } - size += width * rowHeight; - - const positions = vertexFormat.position - ? new Float64Array(size * 3) - : undefined; - const textureCoordinates = vertexFormat.st - ? new Float32Array(size * 2) - : undefined; - - let posIndex = 0; - let stIndex = 0; - - const position = positionScratch; - const st = stScratch; - - let minX = Number.MAX_VALUE; - let minY = Number.MAX_VALUE; - let maxX = -Number.MAX_VALUE; - let maxY = -Number.MAX_VALUE; - - for (let row = rowStart; row < rowEnd; ++row) { - for (let col = 0; col < width; ++col) { - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - vertexFormat.st, - row, - col, - position, - st - ); - - positions[posIndex++] = position.x; - positions[posIndex++] = position.y; - positions[posIndex++] = position.z; - - if (vertexFormat.st) { - textureCoordinates[stIndex++] = st.x; - textureCoordinates[stIndex++] = st.y; - - minX = Math.min(minX, st.x); - minY = Math.min(minY, st.y); - maxX = Math.max(maxX, st.x); - maxY = Math.max(maxY, st.y); - } - } - } - if (northCap) { - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - vertexFormat.st, - 0, - 0, - position, - st - ); - - positions[posIndex++] = position.x; - positions[posIndex++] = position.y; - positions[posIndex++] = position.z; - - if (vertexFormat.st) { - textureCoordinates[stIndex++] = st.x; - textureCoordinates[stIndex++] = st.y; - - minX = st.x; - minY = st.y; - maxX = st.x; - maxY = st.y; - } - } - if (southCap) { - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - vertexFormat.st, - height - 1, - 0, - position, - st - ); - - positions[posIndex++] = position.x; - positions[posIndex++] = position.y; - positions[posIndex] = position.z; - - if (vertexFormat.st) { - textureCoordinates[stIndex++] = st.x; - textureCoordinates[stIndex] = st.y; - - minX = Math.min(minX, st.x); - minY = Math.min(minY, st.y); - maxX = Math.max(maxX, st.x); - maxY = Math.max(maxY, st.y); - } - } - - if ( - vertexFormat.st && - (minX < 0.0 || minY < 0.0 || maxX > 1.0 || maxY > 1.0) - ) { - for (let k = 0; k < textureCoordinates.length; k += 2) { - textureCoordinates[k] = (textureCoordinates[k] - minX) / (maxX - minX); - textureCoordinates[k + 1] = - (textureCoordinates[k + 1] - minY) / (maxY - minY); - } - } - - const geo = calculateAttributes( - positions, - vertexFormat, - ellipsoid, - computedOptions.tangentRotationMatrix - ); - - let indicesSize = 6 * (width - 1) * (rowHeight - 1); - if (northCap) { - indicesSize += 3 * (width - 1); - } - if (southCap) { - indicesSize += 3 * (width - 1); - } - const indices = IndexDatatype.IndexDatatype.createTypedArray(size, indicesSize); - let index = 0; - let indicesIndex = 0; - let i; - for (i = 0; i < rowHeight - 1; ++i) { - for (let j = 0; j < width - 1; ++j) { - const upperLeft = index; - const lowerLeft = upperLeft + width; - const lowerRight = lowerLeft + 1; - const upperRight = upperLeft + 1; - indices[indicesIndex++] = upperLeft; - indices[indicesIndex++] = lowerLeft; - indices[indicesIndex++] = upperRight; - indices[indicesIndex++] = upperRight; - indices[indicesIndex++] = lowerLeft; - indices[indicesIndex++] = lowerRight; - ++index; - } - ++index; - } - if (northCap || southCap) { - let northIndex = size - 1; - const southIndex = size - 1; - if (northCap && southCap) { - northIndex = size - 2; - } - - let p1; - let p2; - index = 0; - - if (northCap) { - for (i = 0; i < width - 1; i++) { - p1 = index; - p2 = p1 + 1; - indices[indicesIndex++] = northIndex; - indices[indicesIndex++] = p1; - indices[indicesIndex++] = p2; - ++index; - } - } - if (southCap) { - index = (rowHeight - 1) * width; - for (i = 0; i < width - 1; i++) { - p1 = index; - p2 = p1 + 1; - indices[indicesIndex++] = p1; - indices[indicesIndex++] = southIndex; - indices[indicesIndex++] = p2; - ++index; - } - } - } - - geo.indices = indices; - if (vertexFormat.st) { - geo.attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: textureCoordinates, - }); - } - - return geo; - } - - function addWallPositions( - wallPositions, - posIndex, - i, - topPositions, - bottomPositions - ) { - wallPositions[posIndex++] = topPositions[i]; - wallPositions[posIndex++] = topPositions[i + 1]; - wallPositions[posIndex++] = topPositions[i + 2]; - wallPositions[posIndex++] = bottomPositions[i]; - wallPositions[posIndex++] = bottomPositions[i + 1]; - wallPositions[posIndex] = bottomPositions[i + 2]; - return wallPositions; - } - - function addWallTextureCoordinates(wallTextures, stIndex, i, st) { - wallTextures[stIndex++] = st[i]; - wallTextures[stIndex++] = st[i + 1]; - wallTextures[stIndex++] = st[i]; - wallTextures[stIndex] = st[i + 1]; - return wallTextures; - } - - const scratchVertexFormat = new VertexFormat.VertexFormat(); - - function constructExtrudedRectangle(rectangleGeometry, computedOptions) { - const shadowVolume = rectangleGeometry._shadowVolume; - const offsetAttributeValue = rectangleGeometry._offsetAttribute; - const vertexFormat = rectangleGeometry._vertexFormat; - const minHeight = rectangleGeometry._extrudedHeight; - const maxHeight = rectangleGeometry._surfaceHeight; - const ellipsoid = rectangleGeometry._ellipsoid; - - const height = computedOptions.height; - const width = computedOptions.width; - - let i; - - if (shadowVolume) { - const newVertexFormat = VertexFormat.VertexFormat.clone( - vertexFormat, - scratchVertexFormat - ); - newVertexFormat.normal = true; - rectangleGeometry._vertexFormat = newVertexFormat; - } - - const topBottomGeo = constructRectangle(rectangleGeometry, computedOptions); - - if (shadowVolume) { - rectangleGeometry._vertexFormat = vertexFormat; - } - - let topPositions = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - topBottomGeo.attributes.position.values, - maxHeight, - ellipsoid, - false - ); - topPositions = new Float64Array(topPositions); - let length = topPositions.length; - const newLength = length * 2; - const positions = new Float64Array(newLength); - positions.set(topPositions); - const bottomPositions = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - topBottomGeo.attributes.position.values, - minHeight, - ellipsoid - ); - positions.set(bottomPositions, length); - topBottomGeo.attributes.position.values = positions; - - const normals = vertexFormat.normal ? new Float32Array(newLength) : undefined; - const tangents = vertexFormat.tangent - ? new Float32Array(newLength) - : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(newLength) - : undefined; - const textures = vertexFormat.st - ? new Float32Array((newLength / 3) * 2) - : undefined; - let topSt; - let topNormals; - if (vertexFormat.normal) { - topNormals = topBottomGeo.attributes.normal.values; - normals.set(topNormals); - for (i = 0; i < length; i++) { - topNormals[i] = -topNormals[i]; - } - normals.set(topNormals, length); - topBottomGeo.attributes.normal.values = normals; - } - if (shadowVolume) { - topNormals = topBottomGeo.attributes.normal.values; - if (!vertexFormat.normal) { - topBottomGeo.attributes.normal = undefined; - } - const extrudeNormals = new Float32Array(newLength); - for (i = 0; i < length; i++) { - topNormals[i] = -topNormals[i]; - } - extrudeNormals.set(topNormals, length); //only get normals for bottom layer that's going to be pushed down - topBottomGeo.attributes.extrudeDirection = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: extrudeNormals, - }); - } - - let offsetValue; - const hasOffsets = defaultValue.defined(offsetAttributeValue); - if (hasOffsets) { - const size = (length / 3) * 2; - let offsetAttribute = new Uint8Array(size); - if (offsetAttributeValue === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - offsetAttribute = offsetAttribute.fill(1, 0, size / 2); - } else { - offsetValue = - offsetAttributeValue === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE ? 0 : 1; - offsetAttribute = offsetAttribute.fill(offsetValue); - } - - topBottomGeo.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: offsetAttribute, - }); - } - - if (vertexFormat.tangent) { - const topTangents = topBottomGeo.attributes.tangent.values; - tangents.set(topTangents); - for (i = 0; i < length; i++) { - topTangents[i] = -topTangents[i]; - } - tangents.set(topTangents, length); - topBottomGeo.attributes.tangent.values = tangents; - } - if (vertexFormat.bitangent) { - const topBitangents = topBottomGeo.attributes.bitangent.values; - bitangents.set(topBitangents); - bitangents.set(topBitangents, length); - topBottomGeo.attributes.bitangent.values = bitangents; - } - if (vertexFormat.st) { - topSt = topBottomGeo.attributes.st.values; - textures.set(topSt); - textures.set(topSt, (length / 3) * 2); - topBottomGeo.attributes.st.values = textures; - } - - const indices = topBottomGeo.indices; - const indicesLength = indices.length; - const posLength = length / 3; - const newIndices = IndexDatatype.IndexDatatype.createTypedArray( - newLength / 3, - indicesLength * 2 - ); - newIndices.set(indices); - for (i = 0; i < indicesLength; i += 3) { - newIndices[i + indicesLength] = indices[i + 2] + posLength; - newIndices[i + 1 + indicesLength] = indices[i + 1] + posLength; - newIndices[i + 2 + indicesLength] = indices[i] + posLength; - } - topBottomGeo.indices = newIndices; - - const northCap = computedOptions.northCap; - const southCap = computedOptions.southCap; - - let rowHeight = height; - let widthMultiplier = 2; - let perimeterPositions = 0; - let corners = 4; - let dupliateCorners = 4; - if (northCap) { - widthMultiplier -= 1; - rowHeight -= 1; - perimeterPositions += 1; - corners -= 2; - dupliateCorners -= 1; - } - if (southCap) { - widthMultiplier -= 1; - rowHeight -= 1; - perimeterPositions += 1; - corners -= 2; - dupliateCorners -= 1; - } - perimeterPositions += widthMultiplier * width + 2 * rowHeight - corners; - - const wallCount = (perimeterPositions + dupliateCorners) * 2; - - let wallPositions = new Float64Array(wallCount * 3); - const wallExtrudeNormals = shadowVolume - ? new Float32Array(wallCount * 3) - : undefined; - let wallOffsetAttribute = hasOffsets ? new Uint8Array(wallCount) : undefined; - let wallTextures = vertexFormat.st - ? new Float32Array(wallCount * 2) - : undefined; - - const computeTopOffsets = - offsetAttributeValue === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP; - if (hasOffsets && !computeTopOffsets) { - offsetValue = offsetAttributeValue === GeometryOffsetAttribute.GeometryOffsetAttribute.ALL ? 1 : 0; - wallOffsetAttribute = wallOffsetAttribute.fill(offsetValue); - } - - let posIndex = 0; - let stIndex = 0; - let extrudeNormalIndex = 0; - let wallOffsetIndex = 0; - const area = width * rowHeight; - let threeI; - for (i = 0; i < area; i += width) { - threeI = i * 3; - wallPositions = addWallPositions( - wallPositions, - posIndex, - threeI, - topPositions, - bottomPositions - ); - posIndex += 6; - if (vertexFormat.st) { - wallTextures = addWallTextureCoordinates( - wallTextures, - stIndex, - i * 2, - topSt - ); - stIndex += 4; - } - if (shadowVolume) { - extrudeNormalIndex += 3; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2]; - } - if (computeTopOffsets) { - wallOffsetAttribute[wallOffsetIndex++] = 1; - wallOffsetIndex += 1; - } - } - - if (!southCap) { - for (i = area - width; i < area; i++) { - threeI = i * 3; - wallPositions = addWallPositions( - wallPositions, - posIndex, - threeI, - topPositions, - bottomPositions - ); - posIndex += 6; - if (vertexFormat.st) { - wallTextures = addWallTextureCoordinates( - wallTextures, - stIndex, - i * 2, - topSt - ); - stIndex += 4; - } - if (shadowVolume) { - extrudeNormalIndex += 3; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2]; - } - if (computeTopOffsets) { - wallOffsetAttribute[wallOffsetIndex++] = 1; - wallOffsetIndex += 1; - } - } - } else { - const southIndex = northCap ? area + 1 : area; - threeI = southIndex * 3; - - for (i = 0; i < 2; i++) { - // duplicate corner points - wallPositions = addWallPositions( - wallPositions, - posIndex, - threeI, - topPositions, - bottomPositions - ); - posIndex += 6; - if (vertexFormat.st) { - wallTextures = addWallTextureCoordinates( - wallTextures, - stIndex, - southIndex * 2, - topSt - ); - stIndex += 4; - } - if (shadowVolume) { - extrudeNormalIndex += 3; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2]; - } - if (computeTopOffsets) { - wallOffsetAttribute[wallOffsetIndex++] = 1; - wallOffsetIndex += 1; - } - } - } - - for (i = area - 1; i > 0; i -= width) { - threeI = i * 3; - wallPositions = addWallPositions( - wallPositions, - posIndex, - threeI, - topPositions, - bottomPositions - ); - posIndex += 6; - if (vertexFormat.st) { - wallTextures = addWallTextureCoordinates( - wallTextures, - stIndex, - i * 2, - topSt - ); - stIndex += 4; - } - if (shadowVolume) { - extrudeNormalIndex += 3; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2]; - } - if (computeTopOffsets) { - wallOffsetAttribute[wallOffsetIndex++] = 1; - wallOffsetIndex += 1; - } - } - - if (!northCap) { - for (i = width - 1; i >= 0; i--) { - threeI = i * 3; - wallPositions = addWallPositions( - wallPositions, - posIndex, - threeI, - topPositions, - bottomPositions - ); - posIndex += 6; - if (vertexFormat.st) { - wallTextures = addWallTextureCoordinates( - wallTextures, - stIndex, - i * 2, - topSt - ); - stIndex += 4; - } - if (shadowVolume) { - extrudeNormalIndex += 3; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2]; - } - if (computeTopOffsets) { - wallOffsetAttribute[wallOffsetIndex++] = 1; - wallOffsetIndex += 1; - } - } - } else { - const northIndex = area; - threeI = northIndex * 3; - - for (i = 0; i < 2; i++) { - // duplicate corner points - wallPositions = addWallPositions( - wallPositions, - posIndex, - threeI, - topPositions, - bottomPositions - ); - posIndex += 6; - if (vertexFormat.st) { - wallTextures = addWallTextureCoordinates( - wallTextures, - stIndex, - northIndex * 2, - topSt - ); - stIndex += 4; - } - if (shadowVolume) { - extrudeNormalIndex += 3; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1]; - wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2]; - } - if (computeTopOffsets) { - wallOffsetAttribute[wallOffsetIndex++] = 1; - wallOffsetIndex += 1; - } - } - } - - let geo = calculateAttributesWall(wallPositions, vertexFormat, ellipsoid); - - if (vertexFormat.st) { - geo.attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: wallTextures, - }); - } - if (shadowVolume) { - geo.attributes.extrudeDirection = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: wallExtrudeNormals, - }); - } - if (hasOffsets) { - geo.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: wallOffsetAttribute, - }); - } - - const wallIndices = IndexDatatype.IndexDatatype.createTypedArray( - wallCount, - perimeterPositions * 6 - ); - - let upperLeft; - let lowerLeft; - let lowerRight; - let upperRight; - length = wallPositions.length / 3; - let index = 0; - for (i = 0; i < length - 1; i += 2) { - upperLeft = i; - upperRight = (upperLeft + 2) % length; - const p1 = Matrix3.Cartesian3.fromArray(wallPositions, upperLeft * 3, v1Scratch); - const p2 = Matrix3.Cartesian3.fromArray(wallPositions, upperRight * 3, v2Scratch); - if (Matrix3.Cartesian3.equalsEpsilon(p1, p2, Math$1.CesiumMath.EPSILON10)) { - continue; - } - lowerLeft = (upperLeft + 1) % length; - lowerRight = (lowerLeft + 2) % length; - wallIndices[index++] = upperLeft; - wallIndices[index++] = lowerLeft; - wallIndices[index++] = upperRight; - wallIndices[index++] = upperRight; - wallIndices[index++] = lowerLeft; - wallIndices[index++] = lowerRight; - } - - geo.indices = wallIndices; - - geo = GeometryPipeline.GeometryPipeline.combineInstances([ - new GeometryInstance.GeometryInstance({ - geometry: topBottomGeo, - }), - new GeometryInstance.GeometryInstance({ - geometry: geo, - }), - ]); - - return geo[0]; - } - - const scratchRectanglePoints = [ - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - new Matrix3.Cartesian3(), - ]; - const nwScratch = new Matrix3.Cartographic(); - const stNwScratch = new Matrix3.Cartographic(); - function computeRectangle(rectangle, granularity, rotation, ellipsoid, result) { - if (rotation === 0.0) { - return Matrix2.Rectangle.clone(rectangle, result); - } - - const computedOptions = RectangleGeometryLibrary.RectangleGeometryLibrary.computeOptions( - rectangle, - granularity, - rotation, - 0, - rectangleScratch, - nwScratch - ); - - const height = computedOptions.height; - const width = computedOptions.width; - - const positions = scratchRectanglePoints; - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - 0, - 0, - positions[0] - ); - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - 0, - width - 1, - positions[1] - ); - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - height - 1, - 0, - positions[2] - ); - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - height - 1, - width - 1, - positions[3] - ); - - return Matrix2.Rectangle.fromCartesianArray(positions, ellipsoid, result); - } - - /** - * A description of a cartographic rectangle on an ellipsoid centered at the origin. Rectangle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}. - * - * @alias RectangleGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Number} [options.height=0.0] The distance in meters between the rectangle and the ellipsoid surface. - * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise. - * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise. - * @param {Number} [options.extrudedHeight] The distance in meters between the rectangle's extruded face and the ellipsoid surface. - * - * @exception {DeveloperError} options.rectangle.north must be in the interval [-Pi/2, Pi/2]. - * @exception {DeveloperError} options.rectangle.south must be in the interval [-Pi/2, Pi/2]. - * @exception {DeveloperError} options.rectangle.east must be in the interval [-Pi, Pi]. - * @exception {DeveloperError} options.rectangle.west must be in the interval [-Pi, Pi]. - * @exception {DeveloperError} options.rectangle.north must be greater than options.rectangle.south. - * - * @see RectangleGeometry#createGeometry - * - * @demo {@link https://sandcastle.cesium.com/index.html?src=Rectangle.html|Cesium Sandcastle Rectangle Demo} - * - * @example - * // 1. create a rectangle - * const rectangle = new Cesium.RectangleGeometry({ - * ellipsoid : Cesium.Ellipsoid.WGS84, - * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0), - * height : 10000.0 - * }); - * const geometry = Cesium.RectangleGeometry.createGeometry(rectangle); - * - * // 2. create an extruded rectangle without a top - * const rectangle = new Cesium.RectangleGeometry({ - * ellipsoid : Cesium.Ellipsoid.WGS84, - * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0), - * height : 10000.0, - * extrudedHeight: 300000 - * }); - * const geometry = Cesium.RectangleGeometry.createGeometry(rectangle); - */ - function RectangleGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const rectangle = options.rectangle; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Matrix2.Rectangle.validate(rectangle); - if (rectangle.north < rectangle.south) { - throw new Check.DeveloperError( - "options.rectangle.north must be greater than or equal to options.rectangle.south" - ); - } - //>>includeEnd('debug'); - - const height = defaultValue.defaultValue(options.height, 0.0); - const extrudedHeight = defaultValue.defaultValue(options.extrudedHeight, height); - - this._rectangle = Matrix2.Rectangle.clone(rectangle); - this._granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - this._ellipsoid = Matrix3.Ellipsoid.clone( - defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84) - ); - this._surfaceHeight = Math.max(height, extrudedHeight); - this._rotation = defaultValue.defaultValue(options.rotation, 0.0); - this._stRotation = defaultValue.defaultValue(options.stRotation, 0.0); - this._vertexFormat = VertexFormat.VertexFormat.clone( - defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT) - ); - this._extrudedHeight = Math.min(height, extrudedHeight); - this._shadowVolume = defaultValue.defaultValue(options.shadowVolume, false); - this._workerName = "createRectangleGeometry"; - this._offsetAttribute = options.offsetAttribute; - this._rotatedRectangle = undefined; - - this._textureCoordinateRotationPoints = undefined; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - RectangleGeometry.packedLength = - Matrix2.Rectangle.packedLength + - Matrix3.Ellipsoid.packedLength + - VertexFormat.VertexFormat.packedLength + - 7; - - /** - * Stores the provided instance into the provided array. - * - * @param {RectangleGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - RectangleGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix2.Rectangle.pack(value._rectangle, array, startingIndex); - startingIndex += Matrix2.Rectangle.packedLength; - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex++] = value._granularity; - array[startingIndex++] = value._surfaceHeight; - array[startingIndex++] = value._rotation; - array[startingIndex++] = value._stRotation; - array[startingIndex++] = value._extrudedHeight; - array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchRectangle = new Matrix2.Rectangle(); - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchOptions = { - rectangle: scratchRectangle, - ellipsoid: scratchEllipsoid, - vertexFormat: scratchVertexFormat, - granularity: undefined, - height: undefined, - rotation: undefined, - stRotation: undefined, - extrudedHeight: undefined, - shadowVolume: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {RectangleGeometry} [result] The object into which to store the result. - * @returns {RectangleGeometry} The modified result parameter or a new RectangleGeometry instance if one was not provided. - */ - RectangleGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - Check.Check.defined("array", array); - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const rectangle = Matrix2.Rectangle.unpack(array, startingIndex, scratchRectangle); - startingIndex += Matrix2.Rectangle.packedLength; - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const granularity = array[startingIndex++]; - const surfaceHeight = array[startingIndex++]; - const rotation = array[startingIndex++]; - const stRotation = array[startingIndex++]; - const extrudedHeight = array[startingIndex++]; - const shadowVolume = array[startingIndex++] === 1.0; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.granularity = granularity; - scratchOptions.height = surfaceHeight; - scratchOptions.rotation = rotation; - scratchOptions.stRotation = stRotation; - scratchOptions.extrudedHeight = extrudedHeight; - scratchOptions.shadowVolume = shadowVolume; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return new RectangleGeometry(scratchOptions); - } - - result._rectangle = Matrix2.Rectangle.clone(rectangle, result._rectangle); - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._granularity = granularity; - result._surfaceHeight = surfaceHeight; - result._rotation = rotation; - result._stRotation = stRotation; - result._extrudedHeight = extrudedHeight; - result._shadowVolume = shadowVolume; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - /** - * Computes the bounding rectangle based on the provided options - * - * @param {Object} options Object with the following properties: - * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise. - * @param {Rectangle} [result] An object in which to store the result. - * - * @returns {Rectangle} The result rectangle - */ - RectangleGeometry.computeRectangle = function (options, result) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const rectangle = options.rectangle; - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("rectangle", rectangle); - Matrix2.Rectangle.validate(rectangle); - if (rectangle.north < rectangle.south) { - throw new Check.DeveloperError( - "options.rectangle.north must be greater than or equal to options.rectangle.south" - ); - } - //>>includeEnd('debug'); - - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - const rotation = defaultValue.defaultValue(options.rotation, 0.0); - - return computeRectangle(rectangle, granularity, rotation, ellipsoid, result); - }; - - const tangentRotationMatrixScratch = new Matrix3.Matrix3(); - const quaternionScratch = new Transforms.Quaternion(); - const centerScratch = new Matrix3.Cartographic(); - /** - * Computes the geometric representation of a rectangle, including its vertices, indices, and a bounding sphere. - * - * @param {RectangleGeometry} rectangleGeometry A description of the rectangle. - * @returns {Geometry|undefined} The computed vertices and indices. - * - * @exception {DeveloperError} Rotated rectangle is invalid. - */ - RectangleGeometry.createGeometry = function (rectangleGeometry) { - if ( - Math$1.CesiumMath.equalsEpsilon( - rectangleGeometry._rectangle.north, - rectangleGeometry._rectangle.south, - Math$1.CesiumMath.EPSILON10 - ) || - Math$1.CesiumMath.equalsEpsilon( - rectangleGeometry._rectangle.east, - rectangleGeometry._rectangle.west, - Math$1.CesiumMath.EPSILON10 - ) - ) { - return undefined; - } - - let rectangle = rectangleGeometry._rectangle; - const ellipsoid = rectangleGeometry._ellipsoid; - const rotation = rectangleGeometry._rotation; - const stRotation = rectangleGeometry._stRotation; - const vertexFormat = rectangleGeometry._vertexFormat; - - const computedOptions = RectangleGeometryLibrary.RectangleGeometryLibrary.computeOptions( - rectangle, - rectangleGeometry._granularity, - rotation, - stRotation, - rectangleScratch, - nwScratch, - stNwScratch - ); - - const tangentRotationMatrix = tangentRotationMatrixScratch; - if (stRotation !== 0 || rotation !== 0) { - const center = Matrix2.Rectangle.center(rectangle, centerScratch); - const axis = ellipsoid.geodeticSurfaceNormalCartographic(center, v1Scratch); - Transforms.Quaternion.fromAxisAngle(axis, -stRotation, quaternionScratch); - Matrix3.Matrix3.fromQuaternion(quaternionScratch, tangentRotationMatrix); - } else { - Matrix3.Matrix3.clone(Matrix3.Matrix3.IDENTITY, tangentRotationMatrix); - } - - const surfaceHeight = rectangleGeometry._surfaceHeight; - const extrudedHeight = rectangleGeometry._extrudedHeight; - const extrude = !Math$1.CesiumMath.equalsEpsilon( - surfaceHeight, - extrudedHeight, - 0, - Math$1.CesiumMath.EPSILON2 - ); - - computedOptions.lonScalar = 1.0 / rectangleGeometry._rectangle.width; - computedOptions.latScalar = 1.0 / rectangleGeometry._rectangle.height; - computedOptions.tangentRotationMatrix = tangentRotationMatrix; - - let geometry; - let boundingSphere; - rectangle = rectangleGeometry._rectangle; - if (extrude) { - geometry = constructExtrudedRectangle(rectangleGeometry, computedOptions); - const topBS = Transforms.BoundingSphere.fromRectangle3D( - rectangle, - ellipsoid, - surfaceHeight, - topBoundingSphere - ); - const bottomBS = Transforms.BoundingSphere.fromRectangle3D( - rectangle, - ellipsoid, - extrudedHeight, - bottomBoundingSphere - ); - boundingSphere = Transforms.BoundingSphere.union(topBS, bottomBS); - } else { - geometry = constructRectangle(rectangleGeometry, computedOptions); - geometry.attributes.position.values = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - geometry.attributes.position.values, - surfaceHeight, - ellipsoid, - false - ); - - if (defaultValue.defined(rectangleGeometry._offsetAttribute)) { - const length = geometry.attributes.position.values.length; - const offsetValue = - rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - boundingSphere = Transforms.BoundingSphere.fromRectangle3D( - rectangle, - ellipsoid, - surfaceHeight - ); - } - - if (!vertexFormat.position) { - delete geometry.attributes.position; - } - - return new GeometryAttribute.Geometry({ - attributes: geometry.attributes, - indices: geometry.indices, - primitiveType: geometry.primitiveType, - boundingSphere: boundingSphere, - offsetAttribute: rectangleGeometry._offsetAttribute, - }); - }; - - /** - * @private - */ - RectangleGeometry.createShadowVolume = function ( - rectangleGeometry, - minHeightFunc, - maxHeightFunc - ) { - const granularity = rectangleGeometry._granularity; - const ellipsoid = rectangleGeometry._ellipsoid; - - const minHeight = minHeightFunc(granularity, ellipsoid); - const maxHeight = maxHeightFunc(granularity, ellipsoid); - - return new RectangleGeometry({ - rectangle: rectangleGeometry._rectangle, - rotation: rectangleGeometry._rotation, - ellipsoid: ellipsoid, - stRotation: rectangleGeometry._stRotation, - granularity: granularity, - extrudedHeight: maxHeight, - height: minHeight, - vertexFormat: VertexFormat.VertexFormat.POSITION_ONLY, - shadowVolume: true, - }); - }; - - const unrotatedTextureRectangleScratch = new Matrix2.Rectangle(); - const points2DScratch = [new Matrix2.Cartesian2(), new Matrix2.Cartesian2(), new Matrix2.Cartesian2()]; - const rotation2DScratch = new Matrix2.Matrix2(); - const rectangleCenterScratch = new Matrix3.Cartographic(); - - function textureCoordinateRotationPoints(rectangleGeometry) { - if (rectangleGeometry._stRotation === 0.0) { - return [0, 0, 0, 1, 1, 0]; - } - - const rectangle = Matrix2.Rectangle.clone( - rectangleGeometry._rectangle, - unrotatedTextureRectangleScratch - ); - const granularity = rectangleGeometry._granularity; - const ellipsoid = rectangleGeometry._ellipsoid; - - // Rotate to align the texture coordinates with ENU - const rotation = rectangleGeometry._rotation - rectangleGeometry._stRotation; - - const unrotatedTextureRectangle = computeRectangle( - rectangle, - granularity, - rotation, - ellipsoid, - unrotatedTextureRectangleScratch - ); - - // Assume a computed "east-north" texture coordinate system based on spherical or planar tricks, bounded by `boundingRectangle`. - // The "desired" texture coordinate system forms an oriented rectangle (un-oriented computed) around the geometry that completely and tightly bounds it. - // We want to map from the "east-north" texture coordinate system into the "desired" system using a pair of lines (analagous planes in 2D) - // Compute 3 corners of the "desired" texture coordinate system in "east-north" texture space by the following in cartographic space: - // - rotate 3 of the corners in unrotatedTextureRectangle by stRotation around the center of the bounding rectangle - // - apply the "east-north" system's normalization formula to the rotated cartographics, even though this is likely to produce values outside [0-1]. - // This gives us a set of points in the "east-north" texture coordinate system that can be used to map "east-north" texture coordinates to "desired." - - const points2D = points2DScratch; - points2D[0].x = unrotatedTextureRectangle.west; - points2D[0].y = unrotatedTextureRectangle.south; - - points2D[1].x = unrotatedTextureRectangle.west; - points2D[1].y = unrotatedTextureRectangle.north; - - points2D[2].x = unrotatedTextureRectangle.east; - points2D[2].y = unrotatedTextureRectangle.south; - - const boundingRectangle = rectangleGeometry.rectangle; - const toDesiredInComputed = Matrix2.Matrix2.fromRotation( - rectangleGeometry._stRotation, - rotation2DScratch - ); - const boundingRectangleCenter = Matrix2.Rectangle.center( - boundingRectangle, - rectangleCenterScratch - ); - - for (let i = 0; i < 3; ++i) { - const point2D = points2D[i]; - point2D.x -= boundingRectangleCenter.longitude; - point2D.y -= boundingRectangleCenter.latitude; - Matrix2.Matrix2.multiplyByVector(toDesiredInComputed, point2D, point2D); - point2D.x += boundingRectangleCenter.longitude; - point2D.y += boundingRectangleCenter.latitude; - - // Convert point into east-north texture coordinate space - point2D.x = (point2D.x - boundingRectangle.west) / boundingRectangle.width; - point2D.y = - (point2D.y - boundingRectangle.south) / boundingRectangle.height; - } - - const minXYCorner = points2D[0]; - const maxYCorner = points2D[1]; - const maxXCorner = points2D[2]; - const result = new Array(6); - Matrix2.Cartesian2.pack(minXYCorner, result); - Matrix2.Cartesian2.pack(maxYCorner, result, 2); - Matrix2.Cartesian2.pack(maxXCorner, result, 4); - return result; - } - - Object.defineProperties(RectangleGeometry.prototype, { - /** - * @private - */ - rectangle: { - get: function () { - if (!defaultValue.defined(this._rotatedRectangle)) { - this._rotatedRectangle = computeRectangle( - this._rectangle, - this._granularity, - this._rotation, - this._ellipsoid - ); - } - return this._rotatedRectangle; - }, - }, - /** - * For remapping texture coordinates when rendering RectangleGeometries as GroundPrimitives. - * This version permits skew in textures by computing offsets directly in cartographic space and - * more accurately approximates rendering RectangleGeometries with height as standard Primitives. - * @see Geometry#_textureCoordinateRotationPoints - * @private - */ - textureCoordinateRotationPoints: { - get: function () { - if (!defaultValue.defined(this._textureCoordinateRotationPoints)) { - this._textureCoordinateRotationPoints = textureCoordinateRotationPoints( - this - ); - } - return this._textureCoordinateRotationPoints; - }, - }, - }); - - function createRectangleGeometry(rectangleGeometry, offset) { - if (defaultValue.defined(offset)) { - rectangleGeometry = RectangleGeometry.unpack(rectangleGeometry, offset); - } - rectangleGeometry._ellipsoid = Matrix3.Ellipsoid.clone(rectangleGeometry._ellipsoid); - rectangleGeometry._rectangle = Matrix2.Rectangle.clone(rectangleGeometry._rectangle); - return RectangleGeometry.createGeometry(rectangleGeometry); - } - - return createRectangleGeometry; - -})); -//# sourceMappingURL=createRectangleGeometry.js.map diff --git a/debug/cesium/Workers/createRectangleGeometry.js.map b/debug/cesium/Workers/createRectangleGeometry.js.map deleted file mode 100644 index 0d6b7c4..0000000 --- a/debug/cesium/Workers/createRectangleGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createRectangleGeometry.js","sources":["../../../Source/Core/RectangleGeometry.js","../../../Source/WorkersES6/createRectangleGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport Check from \"./Check.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryInstance from \"./GeometryInstance.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport GeometryPipeline from \"./GeometryPipeline.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix2 from \"./Matrix2.js\";\r\nimport Matrix3 from \"./Matrix3.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Quaternion from \"./Quaternion.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport RectangleGeometryLibrary from \"./RectangleGeometryLibrary.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\nconst positionScratch = new Cartesian3();\r\nconst normalScratch = new Cartesian3();\r\nconst tangentScratch = new Cartesian3();\r\nconst bitangentScratch = new Cartesian3();\r\nconst rectangleScratch = new Rectangle();\r\nconst stScratch = new Cartesian2();\r\nconst bottomBoundingSphere = new BoundingSphere();\r\nconst topBoundingSphere = new BoundingSphere();\r\n\r\nfunction createAttributes(vertexFormat, attributes) {\r\n const geo = new Geometry({\r\n attributes: new GeometryAttributes(),\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n });\r\n\r\n geo.attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: attributes.positions,\r\n });\r\n if (vertexFormat.normal) {\r\n geo.attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: attributes.normals,\r\n });\r\n }\r\n if (vertexFormat.tangent) {\r\n geo.attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: attributes.tangents,\r\n });\r\n }\r\n if (vertexFormat.bitangent) {\r\n geo.attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: attributes.bitangents,\r\n });\r\n }\r\n return geo;\r\n}\r\n\r\nfunction calculateAttributes(\r\n positions,\r\n vertexFormat,\r\n ellipsoid,\r\n tangentRotationMatrix\r\n) {\r\n const length = positions.length;\r\n\r\n const normals = vertexFormat.normal ? new Float32Array(length) : undefined;\r\n const tangents = vertexFormat.tangent ? new Float32Array(length) : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(length)\r\n : undefined;\r\n\r\n let attrIndex = 0;\r\n const bitangent = bitangentScratch;\r\n const tangent = tangentScratch;\r\n let normal = normalScratch;\r\n if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\r\n for (let i = 0; i < length; i += 3) {\r\n const p = Cartesian3.fromArray(positions, i, positionScratch);\r\n const attrIndex1 = attrIndex + 1;\r\n const attrIndex2 = attrIndex + 2;\r\n\r\n normal = ellipsoid.geodeticSurfaceNormal(p, normal);\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n Cartesian3.cross(Cartesian3.UNIT_Z, normal, tangent);\r\n Matrix3.multiplyByVector(tangentRotationMatrix, tangent, tangent);\r\n Cartesian3.normalize(tangent, tangent);\r\n\r\n if (vertexFormat.bitangent) {\r\n Cartesian3.normalize(\r\n Cartesian3.cross(normal, tangent, bitangent),\r\n bitangent\r\n );\r\n }\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n normals[attrIndex] = normal.x;\r\n normals[attrIndex1] = normal.y;\r\n normals[attrIndex2] = normal.z;\r\n }\r\n if (vertexFormat.tangent) {\r\n tangents[attrIndex] = tangent.x;\r\n tangents[attrIndex1] = tangent.y;\r\n tangents[attrIndex2] = tangent.z;\r\n }\r\n if (vertexFormat.bitangent) {\r\n bitangents[attrIndex] = bitangent.x;\r\n bitangents[attrIndex1] = bitangent.y;\r\n bitangents[attrIndex2] = bitangent.z;\r\n }\r\n attrIndex += 3;\r\n }\r\n }\r\n return createAttributes(vertexFormat, {\r\n positions: positions,\r\n normals: normals,\r\n tangents: tangents,\r\n bitangents: bitangents,\r\n });\r\n}\r\n\r\nconst v1Scratch = new Cartesian3();\r\nconst v2Scratch = new Cartesian3();\r\n\r\nfunction calculateAttributesWall(positions, vertexFormat, ellipsoid) {\r\n const length = positions.length;\r\n\r\n const normals = vertexFormat.normal ? new Float32Array(length) : undefined;\r\n const tangents = vertexFormat.tangent ? new Float32Array(length) : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(length)\r\n : undefined;\r\n\r\n let normalIndex = 0;\r\n let tangentIndex = 0;\r\n let bitangentIndex = 0;\r\n let recomputeNormal = true;\r\n\r\n let bitangent = bitangentScratch;\r\n let tangent = tangentScratch;\r\n let normal = normalScratch;\r\n if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\r\n for (let i = 0; i < length; i += 6) {\r\n const p = Cartesian3.fromArray(positions, i, positionScratch);\r\n const p1 = Cartesian3.fromArray(positions, (i + 6) % length, v1Scratch);\r\n if (recomputeNormal) {\r\n const p2 = Cartesian3.fromArray(positions, (i + 3) % length, v2Scratch);\r\n Cartesian3.subtract(p1, p, p1);\r\n Cartesian3.subtract(p2, p, p2);\r\n normal = Cartesian3.normalize(Cartesian3.cross(p2, p1, normal), normal);\r\n recomputeNormal = false;\r\n }\r\n\r\n if (Cartesian3.equalsEpsilon(p1, p, CesiumMath.EPSILON10)) {\r\n // if we've reached a corner\r\n recomputeNormal = true;\r\n }\r\n\r\n if (vertexFormat.tangent || vertexFormat.bitangent) {\r\n bitangent = ellipsoid.geodeticSurfaceNormal(p, bitangent);\r\n if (vertexFormat.tangent) {\r\n tangent = Cartesian3.normalize(\r\n Cartesian3.cross(bitangent, normal, tangent),\r\n tangent\r\n );\r\n }\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n normals[normalIndex++] = normal.x;\r\n normals[normalIndex++] = normal.y;\r\n normals[normalIndex++] = normal.z;\r\n normals[normalIndex++] = normal.x;\r\n normals[normalIndex++] = normal.y;\r\n normals[normalIndex++] = normal.z;\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n tangents[tangentIndex++] = tangent.x;\r\n tangents[tangentIndex++] = tangent.y;\r\n tangents[tangentIndex++] = tangent.z;\r\n tangents[tangentIndex++] = tangent.x;\r\n tangents[tangentIndex++] = tangent.y;\r\n tangents[tangentIndex++] = tangent.z;\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n bitangents[bitangentIndex++] = bitangent.x;\r\n bitangents[bitangentIndex++] = bitangent.y;\r\n bitangents[bitangentIndex++] = bitangent.z;\r\n bitangents[bitangentIndex++] = bitangent.x;\r\n bitangents[bitangentIndex++] = bitangent.y;\r\n bitangents[bitangentIndex++] = bitangent.z;\r\n }\r\n }\r\n }\r\n\r\n return createAttributes(vertexFormat, {\r\n positions: positions,\r\n normals: normals,\r\n tangents: tangents,\r\n bitangents: bitangents,\r\n });\r\n}\r\n\r\nfunction constructRectangle(rectangleGeometry, computedOptions) {\r\n const vertexFormat = rectangleGeometry._vertexFormat;\r\n const ellipsoid = rectangleGeometry._ellipsoid;\r\n const height = computedOptions.height;\r\n const width = computedOptions.width;\r\n const northCap = computedOptions.northCap;\r\n const southCap = computedOptions.southCap;\r\n\r\n let rowStart = 0;\r\n let rowEnd = height;\r\n let rowHeight = height;\r\n let size = 0;\r\n if (northCap) {\r\n rowStart = 1;\r\n rowHeight -= 1;\r\n size += 1;\r\n }\r\n if (southCap) {\r\n rowEnd -= 1;\r\n rowHeight -= 1;\r\n size += 1;\r\n }\r\n size += width * rowHeight;\r\n\r\n const positions = vertexFormat.position\r\n ? new Float64Array(size * 3)\r\n : undefined;\r\n const textureCoordinates = vertexFormat.st\r\n ? new Float32Array(size * 2)\r\n : undefined;\r\n\r\n let posIndex = 0;\r\n let stIndex = 0;\r\n\r\n const position = positionScratch;\r\n const st = stScratch;\r\n\r\n let minX = Number.MAX_VALUE;\r\n let minY = Number.MAX_VALUE;\r\n let maxX = -Number.MAX_VALUE;\r\n let maxY = -Number.MAX_VALUE;\r\n\r\n for (let row = rowStart; row < rowEnd; ++row) {\r\n for (let col = 0; col < width; ++col) {\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n vertexFormat.st,\r\n row,\r\n col,\r\n position,\r\n st\r\n );\r\n\r\n positions[posIndex++] = position.x;\r\n positions[posIndex++] = position.y;\r\n positions[posIndex++] = position.z;\r\n\r\n if (vertexFormat.st) {\r\n textureCoordinates[stIndex++] = st.x;\r\n textureCoordinates[stIndex++] = st.y;\r\n\r\n minX = Math.min(minX, st.x);\r\n minY = Math.min(minY, st.y);\r\n maxX = Math.max(maxX, st.x);\r\n maxY = Math.max(maxY, st.y);\r\n }\r\n }\r\n }\r\n if (northCap) {\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n vertexFormat.st,\r\n 0,\r\n 0,\r\n position,\r\n st\r\n );\r\n\r\n positions[posIndex++] = position.x;\r\n positions[posIndex++] = position.y;\r\n positions[posIndex++] = position.z;\r\n\r\n if (vertexFormat.st) {\r\n textureCoordinates[stIndex++] = st.x;\r\n textureCoordinates[stIndex++] = st.y;\r\n\r\n minX = st.x;\r\n minY = st.y;\r\n maxX = st.x;\r\n maxY = st.y;\r\n }\r\n }\r\n if (southCap) {\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n vertexFormat.st,\r\n height - 1,\r\n 0,\r\n position,\r\n st\r\n );\r\n\r\n positions[posIndex++] = position.x;\r\n positions[posIndex++] = position.y;\r\n positions[posIndex] = position.z;\r\n\r\n if (vertexFormat.st) {\r\n textureCoordinates[stIndex++] = st.x;\r\n textureCoordinates[stIndex] = st.y;\r\n\r\n minX = Math.min(minX, st.x);\r\n minY = Math.min(minY, st.y);\r\n maxX = Math.max(maxX, st.x);\r\n maxY = Math.max(maxY, st.y);\r\n }\r\n }\r\n\r\n if (\r\n vertexFormat.st &&\r\n (minX < 0.0 || minY < 0.0 || maxX > 1.0 || maxY > 1.0)\r\n ) {\r\n for (let k = 0; k < textureCoordinates.length; k += 2) {\r\n textureCoordinates[k] = (textureCoordinates[k] - minX) / (maxX - minX);\r\n textureCoordinates[k + 1] =\r\n (textureCoordinates[k + 1] - minY) / (maxY - minY);\r\n }\r\n }\r\n\r\n const geo = calculateAttributes(\r\n positions,\r\n vertexFormat,\r\n ellipsoid,\r\n computedOptions.tangentRotationMatrix\r\n );\r\n\r\n let indicesSize = 6 * (width - 1) * (rowHeight - 1);\r\n if (northCap) {\r\n indicesSize += 3 * (width - 1);\r\n }\r\n if (southCap) {\r\n indicesSize += 3 * (width - 1);\r\n }\r\n const indices = IndexDatatype.createTypedArray(size, indicesSize);\r\n let index = 0;\r\n let indicesIndex = 0;\r\n let i;\r\n for (i = 0; i < rowHeight - 1; ++i) {\r\n for (let j = 0; j < width - 1; ++j) {\r\n const upperLeft = index;\r\n const lowerLeft = upperLeft + width;\r\n const lowerRight = lowerLeft + 1;\r\n const upperRight = upperLeft + 1;\r\n indices[indicesIndex++] = upperLeft;\r\n indices[indicesIndex++] = lowerLeft;\r\n indices[indicesIndex++] = upperRight;\r\n indices[indicesIndex++] = upperRight;\r\n indices[indicesIndex++] = lowerLeft;\r\n indices[indicesIndex++] = lowerRight;\r\n ++index;\r\n }\r\n ++index;\r\n }\r\n if (northCap || southCap) {\r\n let northIndex = size - 1;\r\n const southIndex = size - 1;\r\n if (northCap && southCap) {\r\n northIndex = size - 2;\r\n }\r\n\r\n let p1;\r\n let p2;\r\n index = 0;\r\n\r\n if (northCap) {\r\n for (i = 0; i < width - 1; i++) {\r\n p1 = index;\r\n p2 = p1 + 1;\r\n indices[indicesIndex++] = northIndex;\r\n indices[indicesIndex++] = p1;\r\n indices[indicesIndex++] = p2;\r\n ++index;\r\n }\r\n }\r\n if (southCap) {\r\n index = (rowHeight - 1) * width;\r\n for (i = 0; i < width - 1; i++) {\r\n p1 = index;\r\n p2 = p1 + 1;\r\n indices[indicesIndex++] = p1;\r\n indices[indicesIndex++] = southIndex;\r\n indices[indicesIndex++] = p2;\r\n ++index;\r\n }\r\n }\r\n }\r\n\r\n geo.indices = indices;\r\n if (vertexFormat.st) {\r\n geo.attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: textureCoordinates,\r\n });\r\n }\r\n\r\n return geo;\r\n}\r\n\r\nfunction addWallPositions(\r\n wallPositions,\r\n posIndex,\r\n i,\r\n topPositions,\r\n bottomPositions\r\n) {\r\n wallPositions[posIndex++] = topPositions[i];\r\n wallPositions[posIndex++] = topPositions[i + 1];\r\n wallPositions[posIndex++] = topPositions[i + 2];\r\n wallPositions[posIndex++] = bottomPositions[i];\r\n wallPositions[posIndex++] = bottomPositions[i + 1];\r\n wallPositions[posIndex] = bottomPositions[i + 2];\r\n return wallPositions;\r\n}\r\n\r\nfunction addWallTextureCoordinates(wallTextures, stIndex, i, st) {\r\n wallTextures[stIndex++] = st[i];\r\n wallTextures[stIndex++] = st[i + 1];\r\n wallTextures[stIndex++] = st[i];\r\n wallTextures[stIndex] = st[i + 1];\r\n return wallTextures;\r\n}\r\n\r\nconst scratchVertexFormat = new VertexFormat();\r\n\r\nfunction constructExtrudedRectangle(rectangleGeometry, computedOptions) {\r\n const shadowVolume = rectangleGeometry._shadowVolume;\r\n const offsetAttributeValue = rectangleGeometry._offsetAttribute;\r\n const vertexFormat = rectangleGeometry._vertexFormat;\r\n const minHeight = rectangleGeometry._extrudedHeight;\r\n const maxHeight = rectangleGeometry._surfaceHeight;\r\n const ellipsoid = rectangleGeometry._ellipsoid;\r\n\r\n const height = computedOptions.height;\r\n const width = computedOptions.width;\r\n\r\n let i;\r\n\r\n if (shadowVolume) {\r\n const newVertexFormat = VertexFormat.clone(\r\n vertexFormat,\r\n scratchVertexFormat\r\n );\r\n newVertexFormat.normal = true;\r\n rectangleGeometry._vertexFormat = newVertexFormat;\r\n }\r\n\r\n const topBottomGeo = constructRectangle(rectangleGeometry, computedOptions);\r\n\r\n if (shadowVolume) {\r\n rectangleGeometry._vertexFormat = vertexFormat;\r\n }\r\n\r\n let topPositions = PolygonPipeline.scaleToGeodeticHeight(\r\n topBottomGeo.attributes.position.values,\r\n maxHeight,\r\n ellipsoid,\r\n false\r\n );\r\n topPositions = new Float64Array(topPositions);\r\n let length = topPositions.length;\r\n const newLength = length * 2;\r\n const positions = new Float64Array(newLength);\r\n positions.set(topPositions);\r\n const bottomPositions = PolygonPipeline.scaleToGeodeticHeight(\r\n topBottomGeo.attributes.position.values,\r\n minHeight,\r\n ellipsoid\r\n );\r\n positions.set(bottomPositions, length);\r\n topBottomGeo.attributes.position.values = positions;\r\n\r\n const normals = vertexFormat.normal ? new Float32Array(newLength) : undefined;\r\n const tangents = vertexFormat.tangent\r\n ? new Float32Array(newLength)\r\n : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(newLength)\r\n : undefined;\r\n const textures = vertexFormat.st\r\n ? new Float32Array((newLength / 3) * 2)\r\n : undefined;\r\n let topSt;\r\n let topNormals;\r\n if (vertexFormat.normal) {\r\n topNormals = topBottomGeo.attributes.normal.values;\r\n normals.set(topNormals);\r\n for (i = 0; i < length; i++) {\r\n topNormals[i] = -topNormals[i];\r\n }\r\n normals.set(topNormals, length);\r\n topBottomGeo.attributes.normal.values = normals;\r\n }\r\n if (shadowVolume) {\r\n topNormals = topBottomGeo.attributes.normal.values;\r\n if (!vertexFormat.normal) {\r\n topBottomGeo.attributes.normal = undefined;\r\n }\r\n const extrudeNormals = new Float32Array(newLength);\r\n for (i = 0; i < length; i++) {\r\n topNormals[i] = -topNormals[i];\r\n }\r\n extrudeNormals.set(topNormals, length); //only get normals for bottom layer that's going to be pushed down\r\n topBottomGeo.attributes.extrudeDirection = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: extrudeNormals,\r\n });\r\n }\r\n\r\n let offsetValue;\r\n const hasOffsets = defined(offsetAttributeValue);\r\n if (hasOffsets) {\r\n const size = (length / 3) * 2;\r\n let offsetAttribute = new Uint8Array(size);\r\n if (offsetAttributeValue === GeometryOffsetAttribute.TOP) {\r\n offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\r\n } else {\r\n offsetValue =\r\n offsetAttributeValue === GeometryOffsetAttribute.NONE ? 0 : 1;\r\n offsetAttribute = offsetAttribute.fill(offsetValue);\r\n }\r\n\r\n topBottomGeo.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: offsetAttribute,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n const topTangents = topBottomGeo.attributes.tangent.values;\r\n tangents.set(topTangents);\r\n for (i = 0; i < length; i++) {\r\n topTangents[i] = -topTangents[i];\r\n }\r\n tangents.set(topTangents, length);\r\n topBottomGeo.attributes.tangent.values = tangents;\r\n }\r\n if (vertexFormat.bitangent) {\r\n const topBitangents = topBottomGeo.attributes.bitangent.values;\r\n bitangents.set(topBitangents);\r\n bitangents.set(topBitangents, length);\r\n topBottomGeo.attributes.bitangent.values = bitangents;\r\n }\r\n if (vertexFormat.st) {\r\n topSt = topBottomGeo.attributes.st.values;\r\n textures.set(topSt);\r\n textures.set(topSt, (length / 3) * 2);\r\n topBottomGeo.attributes.st.values = textures;\r\n }\r\n\r\n const indices = topBottomGeo.indices;\r\n const indicesLength = indices.length;\r\n const posLength = length / 3;\r\n const newIndices = IndexDatatype.createTypedArray(\r\n newLength / 3,\r\n indicesLength * 2\r\n );\r\n newIndices.set(indices);\r\n for (i = 0; i < indicesLength; i += 3) {\r\n newIndices[i + indicesLength] = indices[i + 2] + posLength;\r\n newIndices[i + 1 + indicesLength] = indices[i + 1] + posLength;\r\n newIndices[i + 2 + indicesLength] = indices[i] + posLength;\r\n }\r\n topBottomGeo.indices = newIndices;\r\n\r\n const northCap = computedOptions.northCap;\r\n const southCap = computedOptions.southCap;\r\n\r\n let rowHeight = height;\r\n let widthMultiplier = 2;\r\n let perimeterPositions = 0;\r\n let corners = 4;\r\n let dupliateCorners = 4;\r\n if (northCap) {\r\n widthMultiplier -= 1;\r\n rowHeight -= 1;\r\n perimeterPositions += 1;\r\n corners -= 2;\r\n dupliateCorners -= 1;\r\n }\r\n if (southCap) {\r\n widthMultiplier -= 1;\r\n rowHeight -= 1;\r\n perimeterPositions += 1;\r\n corners -= 2;\r\n dupliateCorners -= 1;\r\n }\r\n perimeterPositions += widthMultiplier * width + 2 * rowHeight - corners;\r\n\r\n const wallCount = (perimeterPositions + dupliateCorners) * 2;\r\n\r\n let wallPositions = new Float64Array(wallCount * 3);\r\n const wallExtrudeNormals = shadowVolume\r\n ? new Float32Array(wallCount * 3)\r\n : undefined;\r\n let wallOffsetAttribute = hasOffsets ? new Uint8Array(wallCount) : undefined;\r\n let wallTextures = vertexFormat.st\r\n ? new Float32Array(wallCount * 2)\r\n : undefined;\r\n\r\n const computeTopOffsets =\r\n offsetAttributeValue === GeometryOffsetAttribute.TOP;\r\n if (hasOffsets && !computeTopOffsets) {\r\n offsetValue = offsetAttributeValue === GeometryOffsetAttribute.ALL ? 1 : 0;\r\n wallOffsetAttribute = wallOffsetAttribute.fill(offsetValue);\r\n }\r\n\r\n let posIndex = 0;\r\n let stIndex = 0;\r\n let extrudeNormalIndex = 0;\r\n let wallOffsetIndex = 0;\r\n const area = width * rowHeight;\r\n let threeI;\r\n for (i = 0; i < area; i += width) {\r\n threeI = i * 3;\r\n wallPositions = addWallPositions(\r\n wallPositions,\r\n posIndex,\r\n threeI,\r\n topPositions,\r\n bottomPositions\r\n );\r\n posIndex += 6;\r\n if (vertexFormat.st) {\r\n wallTextures = addWallTextureCoordinates(\r\n wallTextures,\r\n stIndex,\r\n i * 2,\r\n topSt\r\n );\r\n stIndex += 4;\r\n }\r\n if (shadowVolume) {\r\n extrudeNormalIndex += 3;\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\r\n }\r\n if (computeTopOffsets) {\r\n wallOffsetAttribute[wallOffsetIndex++] = 1;\r\n wallOffsetIndex += 1;\r\n }\r\n }\r\n\r\n if (!southCap) {\r\n for (i = area - width; i < area; i++) {\r\n threeI = i * 3;\r\n wallPositions = addWallPositions(\r\n wallPositions,\r\n posIndex,\r\n threeI,\r\n topPositions,\r\n bottomPositions\r\n );\r\n posIndex += 6;\r\n if (vertexFormat.st) {\r\n wallTextures = addWallTextureCoordinates(\r\n wallTextures,\r\n stIndex,\r\n i * 2,\r\n topSt\r\n );\r\n stIndex += 4;\r\n }\r\n if (shadowVolume) {\r\n extrudeNormalIndex += 3;\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\r\n }\r\n if (computeTopOffsets) {\r\n wallOffsetAttribute[wallOffsetIndex++] = 1;\r\n wallOffsetIndex += 1;\r\n }\r\n }\r\n } else {\r\n const southIndex = northCap ? area + 1 : area;\r\n threeI = southIndex * 3;\r\n\r\n for (i = 0; i < 2; i++) {\r\n // duplicate corner points\r\n wallPositions = addWallPositions(\r\n wallPositions,\r\n posIndex,\r\n threeI,\r\n topPositions,\r\n bottomPositions\r\n );\r\n posIndex += 6;\r\n if (vertexFormat.st) {\r\n wallTextures = addWallTextureCoordinates(\r\n wallTextures,\r\n stIndex,\r\n southIndex * 2,\r\n topSt\r\n );\r\n stIndex += 4;\r\n }\r\n if (shadowVolume) {\r\n extrudeNormalIndex += 3;\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\r\n }\r\n if (computeTopOffsets) {\r\n wallOffsetAttribute[wallOffsetIndex++] = 1;\r\n wallOffsetIndex += 1;\r\n }\r\n }\r\n }\r\n\r\n for (i = area - 1; i > 0; i -= width) {\r\n threeI = i * 3;\r\n wallPositions = addWallPositions(\r\n wallPositions,\r\n posIndex,\r\n threeI,\r\n topPositions,\r\n bottomPositions\r\n );\r\n posIndex += 6;\r\n if (vertexFormat.st) {\r\n wallTextures = addWallTextureCoordinates(\r\n wallTextures,\r\n stIndex,\r\n i * 2,\r\n topSt\r\n );\r\n stIndex += 4;\r\n }\r\n if (shadowVolume) {\r\n extrudeNormalIndex += 3;\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\r\n }\r\n if (computeTopOffsets) {\r\n wallOffsetAttribute[wallOffsetIndex++] = 1;\r\n wallOffsetIndex += 1;\r\n }\r\n }\r\n\r\n if (!northCap) {\r\n for (i = width - 1; i >= 0; i--) {\r\n threeI = i * 3;\r\n wallPositions = addWallPositions(\r\n wallPositions,\r\n posIndex,\r\n threeI,\r\n topPositions,\r\n bottomPositions\r\n );\r\n posIndex += 6;\r\n if (vertexFormat.st) {\r\n wallTextures = addWallTextureCoordinates(\r\n wallTextures,\r\n stIndex,\r\n i * 2,\r\n topSt\r\n );\r\n stIndex += 4;\r\n }\r\n if (shadowVolume) {\r\n extrudeNormalIndex += 3;\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\r\n }\r\n if (computeTopOffsets) {\r\n wallOffsetAttribute[wallOffsetIndex++] = 1;\r\n wallOffsetIndex += 1;\r\n }\r\n }\r\n } else {\r\n const northIndex = area;\r\n threeI = northIndex * 3;\r\n\r\n for (i = 0; i < 2; i++) {\r\n // duplicate corner points\r\n wallPositions = addWallPositions(\r\n wallPositions,\r\n posIndex,\r\n threeI,\r\n topPositions,\r\n bottomPositions\r\n );\r\n posIndex += 6;\r\n if (vertexFormat.st) {\r\n wallTextures = addWallTextureCoordinates(\r\n wallTextures,\r\n stIndex,\r\n northIndex * 2,\r\n topSt\r\n );\r\n stIndex += 4;\r\n }\r\n if (shadowVolume) {\r\n extrudeNormalIndex += 3;\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 1];\r\n wallExtrudeNormals[extrudeNormalIndex++] = topNormals[threeI + 2];\r\n }\r\n if (computeTopOffsets) {\r\n wallOffsetAttribute[wallOffsetIndex++] = 1;\r\n wallOffsetIndex += 1;\r\n }\r\n }\r\n }\r\n\r\n let geo = calculateAttributesWall(wallPositions, vertexFormat, ellipsoid);\r\n\r\n if (vertexFormat.st) {\r\n geo.attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: wallTextures,\r\n });\r\n }\r\n if (shadowVolume) {\r\n geo.attributes.extrudeDirection = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: wallExtrudeNormals,\r\n });\r\n }\r\n if (hasOffsets) {\r\n geo.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: wallOffsetAttribute,\r\n });\r\n }\r\n\r\n const wallIndices = IndexDatatype.createTypedArray(\r\n wallCount,\r\n perimeterPositions * 6\r\n );\r\n\r\n let upperLeft;\r\n let lowerLeft;\r\n let lowerRight;\r\n let upperRight;\r\n length = wallPositions.length / 3;\r\n let index = 0;\r\n for (i = 0; i < length - 1; i += 2) {\r\n upperLeft = i;\r\n upperRight = (upperLeft + 2) % length;\r\n const p1 = Cartesian3.fromArray(wallPositions, upperLeft * 3, v1Scratch);\r\n const p2 = Cartesian3.fromArray(wallPositions, upperRight * 3, v2Scratch);\r\n if (Cartesian3.equalsEpsilon(p1, p2, CesiumMath.EPSILON10)) {\r\n continue;\r\n }\r\n lowerLeft = (upperLeft + 1) % length;\r\n lowerRight = (lowerLeft + 2) % length;\r\n wallIndices[index++] = upperLeft;\r\n wallIndices[index++] = lowerLeft;\r\n wallIndices[index++] = upperRight;\r\n wallIndices[index++] = upperRight;\r\n wallIndices[index++] = lowerLeft;\r\n wallIndices[index++] = lowerRight;\r\n }\r\n\r\n geo.indices = wallIndices;\r\n\r\n geo = GeometryPipeline.combineInstances([\r\n new GeometryInstance({\r\n geometry: topBottomGeo,\r\n }),\r\n new GeometryInstance({\r\n geometry: geo,\r\n }),\r\n ]);\r\n\r\n return geo[0];\r\n}\r\n\r\nconst scratchRectanglePoints = [\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n new Cartesian3(),\r\n];\r\nconst nwScratch = new Cartographic();\r\nconst stNwScratch = new Cartographic();\r\nfunction computeRectangle(rectangle, granularity, rotation, ellipsoid, result) {\r\n if (rotation === 0.0) {\r\n return Rectangle.clone(rectangle, result);\r\n }\r\n\r\n const computedOptions = RectangleGeometryLibrary.computeOptions(\r\n rectangle,\r\n granularity,\r\n rotation,\r\n 0,\r\n rectangleScratch,\r\n nwScratch\r\n );\r\n\r\n const height = computedOptions.height;\r\n const width = computedOptions.width;\r\n\r\n const positions = scratchRectanglePoints;\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n 0,\r\n 0,\r\n positions[0]\r\n );\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n 0,\r\n width - 1,\r\n positions[1]\r\n );\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n height - 1,\r\n 0,\r\n positions[2]\r\n );\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n height - 1,\r\n width - 1,\r\n positions[3]\r\n );\r\n\r\n return Rectangle.fromCartesianArray(positions, ellipsoid, result);\r\n}\r\n\r\n/**\r\n * A description of a cartographic rectangle on an ellipsoid centered at the origin. Rectangle geometry can be rendered with both {@link Primitive} and {@link GroundPrimitive}.\r\n *\r\n * @alias RectangleGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Number} [options.height=0.0] The distance in meters between the rectangle and the ellipsoid surface.\r\n * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\r\n * @param {Number} [options.stRotation=0.0] The rotation of the texture coordinates, in radians. A positive rotation is counter-clockwise.\r\n * @param {Number} [options.extrudedHeight] The distance in meters between the rectangle's extruded face and the ellipsoid surface.\r\n *\r\n * @exception {DeveloperError} options.rectangle.north must be in the interval [-Pi/2, Pi/2].\r\n * @exception {DeveloperError} options.rectangle.south must be in the interval [-Pi/2, Pi/2].\r\n * @exception {DeveloperError} options.rectangle.east must be in the interval [-Pi, Pi].\r\n * @exception {DeveloperError} options.rectangle.west must be in the interval [-Pi, Pi].\r\n * @exception {DeveloperError} options.rectangle.north must be greater than options.rectangle.south.\r\n *\r\n * @see RectangleGeometry#createGeometry\r\n *\r\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Rectangle.html|Cesium Sandcastle Rectangle Demo}\r\n *\r\n * @example\r\n * // 1. create a rectangle\r\n * const rectangle = new Cesium.RectangleGeometry({\r\n * ellipsoid : Cesium.Ellipsoid.WGS84,\r\n * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\r\n * height : 10000.0\r\n * });\r\n * const geometry = Cesium.RectangleGeometry.createGeometry(rectangle);\r\n *\r\n * // 2. create an extruded rectangle without a top\r\n * const rectangle = new Cesium.RectangleGeometry({\r\n * ellipsoid : Cesium.Ellipsoid.WGS84,\r\n * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\r\n * height : 10000.0,\r\n * extrudedHeight: 300000\r\n * });\r\n * const geometry = Cesium.RectangleGeometry.createGeometry(rectangle);\r\n */\r\nfunction RectangleGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const rectangle = options.rectangle;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Rectangle.validate(rectangle);\r\n if (rectangle.north < rectangle.south) {\r\n throw new DeveloperError(\r\n \"options.rectangle.north must be greater than or equal to options.rectangle.south\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const height = defaultValue(options.height, 0.0);\r\n const extrudedHeight = defaultValue(options.extrudedHeight, height);\r\n\r\n this._rectangle = Rectangle.clone(rectangle);\r\n this._granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n this._ellipsoid = Ellipsoid.clone(\r\n defaultValue(options.ellipsoid, Ellipsoid.WGS84)\r\n );\r\n this._surfaceHeight = Math.max(height, extrudedHeight);\r\n this._rotation = defaultValue(options.rotation, 0.0);\r\n this._stRotation = defaultValue(options.stRotation, 0.0);\r\n this._vertexFormat = VertexFormat.clone(\r\n defaultValue(options.vertexFormat, VertexFormat.DEFAULT)\r\n );\r\n this._extrudedHeight = Math.min(height, extrudedHeight);\r\n this._shadowVolume = defaultValue(options.shadowVolume, false);\r\n this._workerName = \"createRectangleGeometry\";\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._rotatedRectangle = undefined;\r\n\r\n this._textureCoordinateRotationPoints = undefined;\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nRectangleGeometry.packedLength =\r\n Rectangle.packedLength +\r\n Ellipsoid.packedLength +\r\n VertexFormat.packedLength +\r\n 7;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {RectangleGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nRectangleGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Rectangle.pack(value._rectangle, array, startingIndex);\r\n startingIndex += Rectangle.packedLength;\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex++] = value._granularity;\r\n array[startingIndex++] = value._surfaceHeight;\r\n array[startingIndex++] = value._rotation;\r\n array[startingIndex++] = value._stRotation;\r\n array[startingIndex++] = value._extrudedHeight;\r\n array[startingIndex++] = value._shadowVolume ? 1.0 : 0.0;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchRectangle = new Rectangle();\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchOptions = {\r\n rectangle: scratchRectangle,\r\n ellipsoid: scratchEllipsoid,\r\n vertexFormat: scratchVertexFormat,\r\n granularity: undefined,\r\n height: undefined,\r\n rotation: undefined,\r\n stRotation: undefined,\r\n extrudedHeight: undefined,\r\n shadowVolume: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {RectangleGeometry} [result] The object into which to store the result.\r\n * @returns {RectangleGeometry} The modified result parameter or a new RectangleGeometry instance if one was not provided.\r\n */\r\nRectangleGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.defined(\"array\", array);\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const rectangle = Rectangle.unpack(array, startingIndex, scratchRectangle);\r\n startingIndex += Rectangle.packedLength;\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const granularity = array[startingIndex++];\r\n const surfaceHeight = array[startingIndex++];\r\n const rotation = array[startingIndex++];\r\n const stRotation = array[startingIndex++];\r\n const extrudedHeight = array[startingIndex++];\r\n const shadowVolume = array[startingIndex++] === 1.0;\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.granularity = granularity;\r\n scratchOptions.height = surfaceHeight;\r\n scratchOptions.rotation = rotation;\r\n scratchOptions.stRotation = stRotation;\r\n scratchOptions.extrudedHeight = extrudedHeight;\r\n scratchOptions.shadowVolume = shadowVolume;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return new RectangleGeometry(scratchOptions);\r\n }\r\n\r\n result._rectangle = Rectangle.clone(rectangle, result._rectangle);\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._granularity = granularity;\r\n result._surfaceHeight = surfaceHeight;\r\n result._rotation = rotation;\r\n result._stRotation = stRotation;\r\n result._extrudedHeight = extrudedHeight;\r\n result._shadowVolume = shadowVolume;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the bounding rectangle based on the provided options\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\r\n * @param {Rectangle} [result] An object in which to store the result.\r\n *\r\n * @returns {Rectangle} The result rectangle\r\n */\r\nRectangleGeometry.computeRectangle = function (options, result) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const rectangle = options.rectangle;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"rectangle\", rectangle);\r\n Rectangle.validate(rectangle);\r\n if (rectangle.north < rectangle.south) {\r\n throw new DeveloperError(\r\n \"options.rectangle.north must be greater than or equal to options.rectangle.south\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n const rotation = defaultValue(options.rotation, 0.0);\r\n\r\n return computeRectangle(rectangle, granularity, rotation, ellipsoid, result);\r\n};\r\n\r\nconst tangentRotationMatrixScratch = new Matrix3();\r\nconst quaternionScratch = new Quaternion();\r\nconst centerScratch = new Cartographic();\r\n/**\r\n * Computes the geometric representation of a rectangle, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {RectangleGeometry} rectangleGeometry A description of the rectangle.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n *\r\n * @exception {DeveloperError} Rotated rectangle is invalid.\r\n */\r\nRectangleGeometry.createGeometry = function (rectangleGeometry) {\r\n if (\r\n CesiumMath.equalsEpsilon(\r\n rectangleGeometry._rectangle.north,\r\n rectangleGeometry._rectangle.south,\r\n CesiumMath.EPSILON10\r\n ) ||\r\n CesiumMath.equalsEpsilon(\r\n rectangleGeometry._rectangle.east,\r\n rectangleGeometry._rectangle.west,\r\n CesiumMath.EPSILON10\r\n )\r\n ) {\r\n return undefined;\r\n }\r\n\r\n let rectangle = rectangleGeometry._rectangle;\r\n const ellipsoid = rectangleGeometry._ellipsoid;\r\n const rotation = rectangleGeometry._rotation;\r\n const stRotation = rectangleGeometry._stRotation;\r\n const vertexFormat = rectangleGeometry._vertexFormat;\r\n\r\n const computedOptions = RectangleGeometryLibrary.computeOptions(\r\n rectangle,\r\n rectangleGeometry._granularity,\r\n rotation,\r\n stRotation,\r\n rectangleScratch,\r\n nwScratch,\r\n stNwScratch\r\n );\r\n\r\n const tangentRotationMatrix = tangentRotationMatrixScratch;\r\n if (stRotation !== 0 || rotation !== 0) {\r\n const center = Rectangle.center(rectangle, centerScratch);\r\n const axis = ellipsoid.geodeticSurfaceNormalCartographic(center, v1Scratch);\r\n Quaternion.fromAxisAngle(axis, -stRotation, quaternionScratch);\r\n Matrix3.fromQuaternion(quaternionScratch, tangentRotationMatrix);\r\n } else {\r\n Matrix3.clone(Matrix3.IDENTITY, tangentRotationMatrix);\r\n }\r\n\r\n const surfaceHeight = rectangleGeometry._surfaceHeight;\r\n const extrudedHeight = rectangleGeometry._extrudedHeight;\r\n const extrude = !CesiumMath.equalsEpsilon(\r\n surfaceHeight,\r\n extrudedHeight,\r\n 0,\r\n CesiumMath.EPSILON2\r\n );\r\n\r\n computedOptions.lonScalar = 1.0 / rectangleGeometry._rectangle.width;\r\n computedOptions.latScalar = 1.0 / rectangleGeometry._rectangle.height;\r\n computedOptions.tangentRotationMatrix = tangentRotationMatrix;\r\n\r\n let geometry;\r\n let boundingSphere;\r\n rectangle = rectangleGeometry._rectangle;\r\n if (extrude) {\r\n geometry = constructExtrudedRectangle(rectangleGeometry, computedOptions);\r\n const topBS = BoundingSphere.fromRectangle3D(\r\n rectangle,\r\n ellipsoid,\r\n surfaceHeight,\r\n topBoundingSphere\r\n );\r\n const bottomBS = BoundingSphere.fromRectangle3D(\r\n rectangle,\r\n ellipsoid,\r\n extrudedHeight,\r\n bottomBoundingSphere\r\n );\r\n boundingSphere = BoundingSphere.union(topBS, bottomBS);\r\n } else {\r\n geometry = constructRectangle(rectangleGeometry, computedOptions);\r\n geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\r\n geometry.attributes.position.values,\r\n surfaceHeight,\r\n ellipsoid,\r\n false\r\n );\r\n\r\n if (defined(rectangleGeometry._offsetAttribute)) {\r\n const length = geometry.attributes.position.values.length;\r\n const offsetValue =\r\n rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n geometry.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n boundingSphere = BoundingSphere.fromRectangle3D(\r\n rectangle,\r\n ellipsoid,\r\n surfaceHeight\r\n );\r\n }\r\n\r\n if (!vertexFormat.position) {\r\n delete geometry.attributes.position;\r\n }\r\n\r\n return new Geometry({\r\n attributes: geometry.attributes,\r\n indices: geometry.indices,\r\n primitiveType: geometry.primitiveType,\r\n boundingSphere: boundingSphere,\r\n offsetAttribute: rectangleGeometry._offsetAttribute,\r\n });\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nRectangleGeometry.createShadowVolume = function (\r\n rectangleGeometry,\r\n minHeightFunc,\r\n maxHeightFunc\r\n) {\r\n const granularity = rectangleGeometry._granularity;\r\n const ellipsoid = rectangleGeometry._ellipsoid;\r\n\r\n const minHeight = minHeightFunc(granularity, ellipsoid);\r\n const maxHeight = maxHeightFunc(granularity, ellipsoid);\r\n\r\n return new RectangleGeometry({\r\n rectangle: rectangleGeometry._rectangle,\r\n rotation: rectangleGeometry._rotation,\r\n ellipsoid: ellipsoid,\r\n stRotation: rectangleGeometry._stRotation,\r\n granularity: granularity,\r\n extrudedHeight: maxHeight,\r\n height: minHeight,\r\n vertexFormat: VertexFormat.POSITION_ONLY,\r\n shadowVolume: true,\r\n });\r\n};\r\n\r\nconst unrotatedTextureRectangleScratch = new Rectangle();\r\nconst points2DScratch = [new Cartesian2(), new Cartesian2(), new Cartesian2()];\r\nconst rotation2DScratch = new Matrix2();\r\nconst rectangleCenterScratch = new Cartographic();\r\n\r\nfunction textureCoordinateRotationPoints(rectangleGeometry) {\r\n if (rectangleGeometry._stRotation === 0.0) {\r\n return [0, 0, 0, 1, 1, 0];\r\n }\r\n\r\n const rectangle = Rectangle.clone(\r\n rectangleGeometry._rectangle,\r\n unrotatedTextureRectangleScratch\r\n );\r\n const granularity = rectangleGeometry._granularity;\r\n const ellipsoid = rectangleGeometry._ellipsoid;\r\n\r\n // Rotate to align the texture coordinates with ENU\r\n const rotation = rectangleGeometry._rotation - rectangleGeometry._stRotation;\r\n\r\n const unrotatedTextureRectangle = computeRectangle(\r\n rectangle,\r\n granularity,\r\n rotation,\r\n ellipsoid,\r\n unrotatedTextureRectangleScratch\r\n );\r\n\r\n // Assume a computed \"east-north\" texture coordinate system based on spherical or planar tricks, bounded by `boundingRectangle`.\r\n // The \"desired\" texture coordinate system forms an oriented rectangle (un-oriented computed) around the geometry that completely and tightly bounds it.\r\n // We want to map from the \"east-north\" texture coordinate system into the \"desired\" system using a pair of lines (analagous planes in 2D)\r\n // Compute 3 corners of the \"desired\" texture coordinate system in \"east-north\" texture space by the following in cartographic space:\r\n // - rotate 3 of the corners in unrotatedTextureRectangle by stRotation around the center of the bounding rectangle\r\n // - apply the \"east-north\" system's normalization formula to the rotated cartographics, even though this is likely to produce values outside [0-1].\r\n // This gives us a set of points in the \"east-north\" texture coordinate system that can be used to map \"east-north\" texture coordinates to \"desired.\"\r\n\r\n const points2D = points2DScratch;\r\n points2D[0].x = unrotatedTextureRectangle.west;\r\n points2D[0].y = unrotatedTextureRectangle.south;\r\n\r\n points2D[1].x = unrotatedTextureRectangle.west;\r\n points2D[1].y = unrotatedTextureRectangle.north;\r\n\r\n points2D[2].x = unrotatedTextureRectangle.east;\r\n points2D[2].y = unrotatedTextureRectangle.south;\r\n\r\n const boundingRectangle = rectangleGeometry.rectangle;\r\n const toDesiredInComputed = Matrix2.fromRotation(\r\n rectangleGeometry._stRotation,\r\n rotation2DScratch\r\n );\r\n const boundingRectangleCenter = Rectangle.center(\r\n boundingRectangle,\r\n rectangleCenterScratch\r\n );\r\n\r\n for (let i = 0; i < 3; ++i) {\r\n const point2D = points2D[i];\r\n point2D.x -= boundingRectangleCenter.longitude;\r\n point2D.y -= boundingRectangleCenter.latitude;\r\n Matrix2.multiplyByVector(toDesiredInComputed, point2D, point2D);\r\n point2D.x += boundingRectangleCenter.longitude;\r\n point2D.y += boundingRectangleCenter.latitude;\r\n\r\n // Convert point into east-north texture coordinate space\r\n point2D.x = (point2D.x - boundingRectangle.west) / boundingRectangle.width;\r\n point2D.y =\r\n (point2D.y - boundingRectangle.south) / boundingRectangle.height;\r\n }\r\n\r\n const minXYCorner = points2D[0];\r\n const maxYCorner = points2D[1];\r\n const maxXCorner = points2D[2];\r\n const result = new Array(6);\r\n Cartesian2.pack(minXYCorner, result);\r\n Cartesian2.pack(maxYCorner, result, 2);\r\n Cartesian2.pack(maxXCorner, result, 4);\r\n return result;\r\n}\r\n\r\nObject.defineProperties(RectangleGeometry.prototype, {\r\n /**\r\n * @private\r\n */\r\n rectangle: {\r\n get: function () {\r\n if (!defined(this._rotatedRectangle)) {\r\n this._rotatedRectangle = computeRectangle(\r\n this._rectangle,\r\n this._granularity,\r\n this._rotation,\r\n this._ellipsoid\r\n );\r\n }\r\n return this._rotatedRectangle;\r\n },\r\n },\r\n /**\r\n * For remapping texture coordinates when rendering RectangleGeometries as GroundPrimitives.\r\n * This version permits skew in textures by computing offsets directly in cartographic space and\r\n * more accurately approximates rendering RectangleGeometries with height as standard Primitives.\r\n * @see Geometry#_textureCoordinateRotationPoints\r\n * @private\r\n */\r\n textureCoordinateRotationPoints: {\r\n get: function () {\r\n if (!defined(this._textureCoordinateRotationPoints)) {\r\n this._textureCoordinateRotationPoints = textureCoordinateRotationPoints(\r\n this\r\n );\r\n }\r\n return this._textureCoordinateRotationPoints;\r\n },\r\n },\r\n});\r\nexport default RectangleGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport RectangleGeometry from \"../Core/RectangleGeometry.js\";\r\n\r\nfunction createRectangleGeometry(rectangleGeometry, offset) {\r\n if (defined(offset)) {\r\n rectangleGeometry = RectangleGeometry.unpack(rectangleGeometry, offset);\r\n }\r\n rectangleGeometry._ellipsoid = Ellipsoid.clone(rectangleGeometry._ellipsoid);\r\n rectangleGeometry._rectangle = Rectangle.clone(rectangleGeometry._rectangle);\r\n return RectangleGeometry.createGeometry(rectangleGeometry);\r\n}\r\nexport default createRectangleGeometry;\r\n"],"names":["Cartesian3","Rectangle","Cartesian2","BoundingSphere","Geometry","GeometryAttributes","PrimitiveType","GeometryAttribute","ComponentDatatype","Matrix3","CesiumMath","RectangleGeometryLibrary","IndexDatatype","VertexFormat","PolygonPipeline","defined","GeometryOffsetAttribute","GeometryPipeline","GeometryInstance","Cartographic","defaultValue","Check","DeveloperError","Ellipsoid","Quaternion","Matrix2"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createRectangleOutlineGeometry.js b/debug/cesium/Workers/createRectangleOutlineGeometry.js deleted file mode 100644 index 07ab242..0000000 --- a/debug/cesium/Workers/createRectangleOutlineGeometry.js +++ /dev/null @@ -1,561 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './Matrix2-036c77dd', './Transforms-11fb6b0a', './ComponentDatatype-13a5630b', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolygonPipeline-313487c3', './RectangleGeometryLibrary-94f83a5a', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './EllipsoidRhumbLine-48b4507b'], (function (defaultValue, Matrix3, Matrix2, Transforms, ComponentDatatype, Check, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype, Math$1, PolygonPipeline, RectangleGeometryLibrary, RuntimeError, combine, WebGLConstants, EllipsoidRhumbLine) { 'use strict'; - - const bottomBoundingSphere = new Transforms.BoundingSphere(); - const topBoundingSphere = new Transforms.BoundingSphere(); - const positionScratch = new Matrix3.Cartesian3(); - const rectangleScratch = new Matrix2.Rectangle(); - - function constructRectangle(geometry, computedOptions) { - const ellipsoid = geometry._ellipsoid; - const height = computedOptions.height; - const width = computedOptions.width; - const northCap = computedOptions.northCap; - const southCap = computedOptions.southCap; - - let rowHeight = height; - let widthMultiplier = 2; - let size = 0; - let corners = 4; - if (northCap) { - widthMultiplier -= 1; - rowHeight -= 1; - size += 1; - corners -= 2; - } - if (southCap) { - widthMultiplier -= 1; - rowHeight -= 1; - size += 1; - corners -= 2; - } - size += widthMultiplier * width + 2 * rowHeight - corners; - - const positions = new Float64Array(size * 3); - - let posIndex = 0; - let row = 0; - let col; - const position = positionScratch; - if (northCap) { - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - row, - 0, - position - ); - positions[posIndex++] = position.x; - positions[posIndex++] = position.y; - positions[posIndex++] = position.z; - } else { - for (col = 0; col < width; col++) { - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - row, - col, - position - ); - positions[posIndex++] = position.x; - positions[posIndex++] = position.y; - positions[posIndex++] = position.z; - } - } - - col = width - 1; - for (row = 1; row < height; row++) { - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - row, - col, - position - ); - positions[posIndex++] = position.x; - positions[posIndex++] = position.y; - positions[posIndex++] = position.z; - } - - row = height - 1; - if (!southCap) { - // if southCap is true, we dont need to add any more points because the south pole point was added by the iteration above - for (col = width - 2; col >= 0; col--) { - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - row, - col, - position - ); - positions[posIndex++] = position.x; - positions[posIndex++] = position.y; - positions[posIndex++] = position.z; - } - } - - col = 0; - for (row = height - 2; row > 0; row--) { - RectangleGeometryLibrary.RectangleGeometryLibrary.computePosition( - computedOptions, - ellipsoid, - false, - row, - col, - position - ); - positions[posIndex++] = position.x; - positions[posIndex++] = position.y; - positions[posIndex++] = position.z; - } - - const indicesSize = (positions.length / 3) * 2; - const indices = IndexDatatype.IndexDatatype.createTypedArray( - positions.length / 3, - indicesSize - ); - - let index = 0; - for (let i = 0; i < positions.length / 3 - 1; i++) { - indices[index++] = i; - indices[index++] = i + 1; - } - indices[index++] = positions.length / 3 - 1; - indices[index++] = 0; - - const geo = new GeometryAttribute.Geometry({ - attributes: new GeometryAttributes.GeometryAttributes(), - primitiveType: GeometryAttribute.PrimitiveType.LINES, - }); - - geo.attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - geo.indices = indices; - - return geo; - } - - function constructExtrudedRectangle(rectangleGeometry, computedOptions) { - const surfaceHeight = rectangleGeometry._surfaceHeight; - const extrudedHeight = rectangleGeometry._extrudedHeight; - const ellipsoid = rectangleGeometry._ellipsoid; - const minHeight = extrudedHeight; - const maxHeight = surfaceHeight; - const geo = constructRectangle(rectangleGeometry, computedOptions); - - const height = computedOptions.height; - const width = computedOptions.width; - - const topPositions = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - geo.attributes.position.values, - maxHeight, - ellipsoid, - false - ); - let length = topPositions.length; - const positions = new Float64Array(length * 2); - positions.set(topPositions); - const bottomPositions = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - geo.attributes.position.values, - minHeight, - ellipsoid - ); - positions.set(bottomPositions, length); - geo.attributes.position.values = positions; - - const northCap = computedOptions.northCap; - const southCap = computedOptions.southCap; - let corners = 4; - if (northCap) { - corners -= 1; - } - if (southCap) { - corners -= 1; - } - - const indicesSize = (positions.length / 3 + corners) * 2; - const indices = IndexDatatype.IndexDatatype.createTypedArray( - positions.length / 3, - indicesSize - ); - length = positions.length / 6; - let index = 0; - for (let i = 0; i < length - 1; i++) { - indices[index++] = i; - indices[index++] = i + 1; - indices[index++] = i + length; - indices[index++] = i + length + 1; - } - indices[index++] = length - 1; - indices[index++] = 0; - indices[index++] = length + length - 1; - indices[index++] = length; - - indices[index++] = 0; - indices[index++] = length; - - let bottomCorner; - if (northCap) { - bottomCorner = height - 1; - } else { - const topRightCorner = width - 1; - indices[index++] = topRightCorner; - indices[index++] = topRightCorner + length; - bottomCorner = width + height - 2; - } - - indices[index++] = bottomCorner; - indices[index++] = bottomCorner + length; - - if (!southCap) { - const bottomLeftCorner = width + bottomCorner - 1; - indices[index++] = bottomLeftCorner; - indices[index] = bottomLeftCorner + length; - } - - geo.indices = indices; - - return geo; - } - - /** - * A description of the outline of a a cartographic rectangle on an ellipsoid centered at the origin. - * - * @alias RectangleOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Number} [options.height=0.0] The distance in meters between the rectangle and the ellipsoid surface. - * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise. - * @param {Number} [options.extrudedHeight] The distance in meters between the rectangle's extruded face and the ellipsoid surface. - * - * @exception {DeveloperError} options.rectangle.north must be in the interval [-Pi/2, Pi/2]. - * @exception {DeveloperError} options.rectangle.south must be in the interval [-Pi/2, Pi/2]. - * @exception {DeveloperError} options.rectangle.east must be in the interval [-Pi, Pi]. - * @exception {DeveloperError} options.rectangle.west must be in the interval [-Pi, Pi]. - * @exception {DeveloperError} options.rectangle.north must be greater than rectangle.south. - * - * @see RectangleOutlineGeometry#createGeometry - * - * @example - * const rectangle = new Cesium.RectangleOutlineGeometry({ - * ellipsoid : Cesium.Ellipsoid.WGS84, - * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0), - * height : 10000.0 - * }); - * const geometry = Cesium.RectangleOutlineGeometry.createGeometry(rectangle); - */ - function RectangleOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const rectangle = options.rectangle; - const granularity = defaultValue.defaultValue( - options.granularity, - Math$1.CesiumMath.RADIANS_PER_DEGREE - ); - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - const rotation = defaultValue.defaultValue(options.rotation, 0.0); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(rectangle)) { - throw new Check.DeveloperError("rectangle is required."); - } - Matrix2.Rectangle.validate(rectangle); - if (rectangle.north < rectangle.south) { - throw new Check.DeveloperError( - "options.rectangle.north must be greater than options.rectangle.south" - ); - } - //>>includeEnd('debug'); - - const height = defaultValue.defaultValue(options.height, 0.0); - const extrudedHeight = defaultValue.defaultValue(options.extrudedHeight, height); - - this._rectangle = Matrix2.Rectangle.clone(rectangle); - this._granularity = granularity; - this._ellipsoid = ellipsoid; - this._surfaceHeight = Math.max(height, extrudedHeight); - this._rotation = rotation; - this._extrudedHeight = Math.min(height, extrudedHeight); - this._offsetAttribute = options.offsetAttribute; - this._workerName = "createRectangleOutlineGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - RectangleOutlineGeometry.packedLength = - Matrix2.Rectangle.packedLength + Matrix3.Ellipsoid.packedLength + 5; - - /** - * Stores the provided instance into the provided array. - * - * @param {RectangleOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - RectangleOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - Matrix2.Rectangle.pack(value._rectangle, array, startingIndex); - startingIndex += Matrix2.Rectangle.packedLength; - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - array[startingIndex++] = value._granularity; - array[startingIndex++] = value._surfaceHeight; - array[startingIndex++] = value._rotation; - array[startingIndex++] = value._extrudedHeight; - array[startingIndex] = defaultValue.defaultValue(value._offsetAttribute, -1); - - return array; - }; - - const scratchRectangle = new Matrix2.Rectangle(); - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchOptions = { - rectangle: scratchRectangle, - ellipsoid: scratchEllipsoid, - granularity: undefined, - height: undefined, - rotation: undefined, - extrudedHeight: undefined, - offsetAttribute: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {RectangleOutlineGeometry} [result] The object into which to store the result. - * @returns {RectangleOutlineGeometry} The modified result parameter or a new Quaternion instance if one was not provided. - */ - RectangleOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - const rectangle = Matrix2.Rectangle.unpack(array, startingIndex, scratchRectangle); - startingIndex += Matrix2.Rectangle.packedLength; - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const granularity = array[startingIndex++]; - const height = array[startingIndex++]; - const rotation = array[startingIndex++]; - const extrudedHeight = array[startingIndex++]; - const offsetAttribute = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.granularity = granularity; - scratchOptions.height = height; - scratchOptions.rotation = rotation; - scratchOptions.extrudedHeight = extrudedHeight; - scratchOptions.offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return new RectangleOutlineGeometry(scratchOptions); - } - - result._rectangle = Matrix2.Rectangle.clone(rectangle, result._rectangle); - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._surfaceHeight = height; - result._rotation = rotation; - result._extrudedHeight = extrudedHeight; - result._offsetAttribute = - offsetAttribute === -1 ? undefined : offsetAttribute; - - return result; - }; - - const nwScratch = new Matrix3.Cartographic(); - /** - * Computes the geometric representation of an outline of a rectangle, including its vertices, indices, and a bounding sphere. - * - * @param {RectangleOutlineGeometry} rectangleGeometry A description of the rectangle outline. - * @returns {Geometry|undefined} The computed vertices and indices. - * - * @exception {DeveloperError} Rotated rectangle is invalid. - */ - RectangleOutlineGeometry.createGeometry = function (rectangleGeometry) { - const rectangle = rectangleGeometry._rectangle; - const ellipsoid = rectangleGeometry._ellipsoid; - const computedOptions = RectangleGeometryLibrary.RectangleGeometryLibrary.computeOptions( - rectangle, - rectangleGeometry._granularity, - rectangleGeometry._rotation, - 0, - rectangleScratch, - nwScratch - ); - - let geometry; - let boundingSphere; - - if ( - Math$1.CesiumMath.equalsEpsilon( - rectangle.north, - rectangle.south, - Math$1.CesiumMath.EPSILON10 - ) || - Math$1.CesiumMath.equalsEpsilon( - rectangle.east, - rectangle.west, - Math$1.CesiumMath.EPSILON10 - ) - ) { - return undefined; - } - - const surfaceHeight = rectangleGeometry._surfaceHeight; - const extrudedHeight = rectangleGeometry._extrudedHeight; - const extrude = !Math$1.CesiumMath.equalsEpsilon( - surfaceHeight, - extrudedHeight, - 0, - Math$1.CesiumMath.EPSILON2 - ); - let offsetValue; - if (extrude) { - geometry = constructExtrudedRectangle(rectangleGeometry, computedOptions); - if (defaultValue.defined(rectangleGeometry._offsetAttribute)) { - const size = geometry.attributes.position.values.length / 3; - let offsetAttribute = new Uint8Array(size); - if (rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.TOP) { - offsetAttribute = offsetAttribute.fill(1, 0, size / 2); - } else { - offsetValue = - rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - offsetAttribute = offsetAttribute.fill(offsetValue); - } - - geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: offsetAttribute, - }); - } - const topBS = Transforms.BoundingSphere.fromRectangle3D( - rectangle, - ellipsoid, - surfaceHeight, - topBoundingSphere - ); - const bottomBS = Transforms.BoundingSphere.fromRectangle3D( - rectangle, - ellipsoid, - extrudedHeight, - bottomBoundingSphere - ); - boundingSphere = Transforms.BoundingSphere.union(topBS, bottomBS); - } else { - geometry = constructRectangle(rectangleGeometry, computedOptions); - geometry.attributes.position.values = PolygonPipeline.PolygonPipeline.scaleToGeodeticHeight( - geometry.attributes.position.values, - surfaceHeight, - ellipsoid, - false - ); - - if (defaultValue.defined(rectangleGeometry._offsetAttribute)) { - const length = geometry.attributes.position.values.length; - offsetValue = - rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.GeometryOffsetAttribute.NONE - ? 0 - : 1; - const applyOffset = new Uint8Array(length / 3).fill(offsetValue); - geometry.attributes.applyOffset = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 1, - values: applyOffset, - }); - } - - boundingSphere = Transforms.BoundingSphere.fromRectangle3D( - rectangle, - ellipsoid, - surfaceHeight - ); - } - - return new GeometryAttribute.Geometry({ - attributes: geometry.attributes, - indices: geometry.indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: boundingSphere, - offsetAttribute: rectangleGeometry._offsetAttribute, - }); - }; - - function createRectangleOutlineGeometry(rectangleGeometry, offset) { - if (defaultValue.defined(offset)) { - rectangleGeometry = RectangleOutlineGeometry.unpack( - rectangleGeometry, - offset - ); - } - rectangleGeometry._ellipsoid = Matrix3.Ellipsoid.clone(rectangleGeometry._ellipsoid); - rectangleGeometry._rectangle = Matrix2.Rectangle.clone(rectangleGeometry._rectangle); - return RectangleOutlineGeometry.createGeometry(rectangleGeometry); - } - - return createRectangleOutlineGeometry; - -})); -//# sourceMappingURL=createRectangleOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createRectangleOutlineGeometry.js.map b/debug/cesium/Workers/createRectangleOutlineGeometry.js.map deleted file mode 100644 index 62c37e4..0000000 --- a/debug/cesium/Workers/createRectangleOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createRectangleOutlineGeometry.js","sources":["../../../Source/Core/RectangleOutlineGeometry.js","../../../Source/WorkersES6/createRectangleOutlineGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport GeometryOffsetAttribute from \"./GeometryOffsetAttribute.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PolygonPipeline from \"./PolygonPipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport RectangleGeometryLibrary from \"./RectangleGeometryLibrary.js\";\r\n\r\nconst bottomBoundingSphere = new BoundingSphere();\r\nconst topBoundingSphere = new BoundingSphere();\r\nconst positionScratch = new Cartesian3();\r\nconst rectangleScratch = new Rectangle();\r\n\r\nfunction constructRectangle(geometry, computedOptions) {\r\n const ellipsoid = geometry._ellipsoid;\r\n const height = computedOptions.height;\r\n const width = computedOptions.width;\r\n const northCap = computedOptions.northCap;\r\n const southCap = computedOptions.southCap;\r\n\r\n let rowHeight = height;\r\n let widthMultiplier = 2;\r\n let size = 0;\r\n let corners = 4;\r\n if (northCap) {\r\n widthMultiplier -= 1;\r\n rowHeight -= 1;\r\n size += 1;\r\n corners -= 2;\r\n }\r\n if (southCap) {\r\n widthMultiplier -= 1;\r\n rowHeight -= 1;\r\n size += 1;\r\n corners -= 2;\r\n }\r\n size += widthMultiplier * width + 2 * rowHeight - corners;\r\n\r\n const positions = new Float64Array(size * 3);\r\n\r\n let posIndex = 0;\r\n let row = 0;\r\n let col;\r\n const position = positionScratch;\r\n if (northCap) {\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n row,\r\n 0,\r\n position\r\n );\r\n positions[posIndex++] = position.x;\r\n positions[posIndex++] = position.y;\r\n positions[posIndex++] = position.z;\r\n } else {\r\n for (col = 0; col < width; col++) {\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n row,\r\n col,\r\n position\r\n );\r\n positions[posIndex++] = position.x;\r\n positions[posIndex++] = position.y;\r\n positions[posIndex++] = position.z;\r\n }\r\n }\r\n\r\n col = width - 1;\r\n for (row = 1; row < height; row++) {\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n row,\r\n col,\r\n position\r\n );\r\n positions[posIndex++] = position.x;\r\n positions[posIndex++] = position.y;\r\n positions[posIndex++] = position.z;\r\n }\r\n\r\n row = height - 1;\r\n if (!southCap) {\r\n // if southCap is true, we dont need to add any more points because the south pole point was added by the iteration above\r\n for (col = width - 2; col >= 0; col--) {\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n row,\r\n col,\r\n position\r\n );\r\n positions[posIndex++] = position.x;\r\n positions[posIndex++] = position.y;\r\n positions[posIndex++] = position.z;\r\n }\r\n }\r\n\r\n col = 0;\r\n for (row = height - 2; row > 0; row--) {\r\n RectangleGeometryLibrary.computePosition(\r\n computedOptions,\r\n ellipsoid,\r\n false,\r\n row,\r\n col,\r\n position\r\n );\r\n positions[posIndex++] = position.x;\r\n positions[posIndex++] = position.y;\r\n positions[posIndex++] = position.z;\r\n }\r\n\r\n const indicesSize = (positions.length / 3) * 2;\r\n const indices = IndexDatatype.createTypedArray(\r\n positions.length / 3,\r\n indicesSize\r\n );\r\n\r\n let index = 0;\r\n for (let i = 0; i < positions.length / 3 - 1; i++) {\r\n indices[index++] = i;\r\n indices[index++] = i + 1;\r\n }\r\n indices[index++] = positions.length / 3 - 1;\r\n indices[index++] = 0;\r\n\r\n const geo = new Geometry({\r\n attributes: new GeometryAttributes(),\r\n primitiveType: PrimitiveType.LINES,\r\n });\r\n\r\n geo.attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n geo.indices = indices;\r\n\r\n return geo;\r\n}\r\n\r\nfunction constructExtrudedRectangle(rectangleGeometry, computedOptions) {\r\n const surfaceHeight = rectangleGeometry._surfaceHeight;\r\n const extrudedHeight = rectangleGeometry._extrudedHeight;\r\n const ellipsoid = rectangleGeometry._ellipsoid;\r\n const minHeight = extrudedHeight;\r\n const maxHeight = surfaceHeight;\r\n const geo = constructRectangle(rectangleGeometry, computedOptions);\r\n\r\n const height = computedOptions.height;\r\n const width = computedOptions.width;\r\n\r\n const topPositions = PolygonPipeline.scaleToGeodeticHeight(\r\n geo.attributes.position.values,\r\n maxHeight,\r\n ellipsoid,\r\n false\r\n );\r\n let length = topPositions.length;\r\n const positions = new Float64Array(length * 2);\r\n positions.set(topPositions);\r\n const bottomPositions = PolygonPipeline.scaleToGeodeticHeight(\r\n geo.attributes.position.values,\r\n minHeight,\r\n ellipsoid\r\n );\r\n positions.set(bottomPositions, length);\r\n geo.attributes.position.values = positions;\r\n\r\n const northCap = computedOptions.northCap;\r\n const southCap = computedOptions.southCap;\r\n let corners = 4;\r\n if (northCap) {\r\n corners -= 1;\r\n }\r\n if (southCap) {\r\n corners -= 1;\r\n }\r\n\r\n const indicesSize = (positions.length / 3 + corners) * 2;\r\n const indices = IndexDatatype.createTypedArray(\r\n positions.length / 3,\r\n indicesSize\r\n );\r\n length = positions.length / 6;\r\n let index = 0;\r\n for (let i = 0; i < length - 1; i++) {\r\n indices[index++] = i;\r\n indices[index++] = i + 1;\r\n indices[index++] = i + length;\r\n indices[index++] = i + length + 1;\r\n }\r\n indices[index++] = length - 1;\r\n indices[index++] = 0;\r\n indices[index++] = length + length - 1;\r\n indices[index++] = length;\r\n\r\n indices[index++] = 0;\r\n indices[index++] = length;\r\n\r\n let bottomCorner;\r\n if (northCap) {\r\n bottomCorner = height - 1;\r\n } else {\r\n const topRightCorner = width - 1;\r\n indices[index++] = topRightCorner;\r\n indices[index++] = topRightCorner + length;\r\n bottomCorner = width + height - 2;\r\n }\r\n\r\n indices[index++] = bottomCorner;\r\n indices[index++] = bottomCorner + length;\r\n\r\n if (!southCap) {\r\n const bottomLeftCorner = width + bottomCorner - 1;\r\n indices[index++] = bottomLeftCorner;\r\n indices[index] = bottomLeftCorner + length;\r\n }\r\n\r\n geo.indices = indices;\r\n\r\n return geo;\r\n}\r\n\r\n/**\r\n * A description of the outline of a a cartographic rectangle on an ellipsoid centered at the origin.\r\n *\r\n * @alias RectangleOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Rectangle} options.rectangle A cartographic rectangle with north, south, east and west properties in radians.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid on which the rectangle lies.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Number} [options.height=0.0] The distance in meters between the rectangle and the ellipsoid surface.\r\n * @param {Number} [options.rotation=0.0] The rotation of the rectangle, in radians. A positive rotation is counter-clockwise.\r\n * @param {Number} [options.extrudedHeight] The distance in meters between the rectangle's extruded face and the ellipsoid surface.\r\n *\r\n * @exception {DeveloperError} options.rectangle.north must be in the interval [-Pi/2, Pi/2].\r\n * @exception {DeveloperError} options.rectangle.south must be in the interval [-Pi/2, Pi/2].\r\n * @exception {DeveloperError} options.rectangle.east must be in the interval [-Pi, Pi].\r\n * @exception {DeveloperError} options.rectangle.west must be in the interval [-Pi, Pi].\r\n * @exception {DeveloperError} options.rectangle.north must be greater than rectangle.south.\r\n *\r\n * @see RectangleOutlineGeometry#createGeometry\r\n *\r\n * @example\r\n * const rectangle = new Cesium.RectangleOutlineGeometry({\r\n * ellipsoid : Cesium.Ellipsoid.WGS84,\r\n * rectangle : Cesium.Rectangle.fromDegrees(-80.0, 39.0, -74.0, 42.0),\r\n * height : 10000.0\r\n * });\r\n * const geometry = Cesium.RectangleOutlineGeometry.createGeometry(rectangle);\r\n */\r\nfunction RectangleOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const rectangle = options.rectangle;\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n const rotation = defaultValue(options.rotation, 0.0);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(rectangle)) {\r\n throw new DeveloperError(\"rectangle is required.\");\r\n }\r\n Rectangle.validate(rectangle);\r\n if (rectangle.north < rectangle.south) {\r\n throw new DeveloperError(\r\n \"options.rectangle.north must be greater than options.rectangle.south\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const height = defaultValue(options.height, 0.0);\r\n const extrudedHeight = defaultValue(options.extrudedHeight, height);\r\n\r\n this._rectangle = Rectangle.clone(rectangle);\r\n this._granularity = granularity;\r\n this._ellipsoid = ellipsoid;\r\n this._surfaceHeight = Math.max(height, extrudedHeight);\r\n this._rotation = rotation;\r\n this._extrudedHeight = Math.min(height, extrudedHeight);\r\n this._offsetAttribute = options.offsetAttribute;\r\n this._workerName = \"createRectangleOutlineGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nRectangleOutlineGeometry.packedLength =\r\n Rectangle.packedLength + Ellipsoid.packedLength + 5;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {RectangleOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nRectangleOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n Rectangle.pack(value._rectangle, array, startingIndex);\r\n startingIndex += Rectangle.packedLength;\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n array[startingIndex++] = value._granularity;\r\n array[startingIndex++] = value._surfaceHeight;\r\n array[startingIndex++] = value._rotation;\r\n array[startingIndex++] = value._extrudedHeight;\r\n array[startingIndex] = defaultValue(value._offsetAttribute, -1);\r\n\r\n return array;\r\n};\r\n\r\nconst scratchRectangle = new Rectangle();\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchOptions = {\r\n rectangle: scratchRectangle,\r\n ellipsoid: scratchEllipsoid,\r\n granularity: undefined,\r\n height: undefined,\r\n rotation: undefined,\r\n extrudedHeight: undefined,\r\n offsetAttribute: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {RectangleOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {RectangleOutlineGeometry} The modified result parameter or a new Quaternion instance if one was not provided.\r\n */\r\nRectangleOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n const rectangle = Rectangle.unpack(array, startingIndex, scratchRectangle);\r\n startingIndex += Rectangle.packedLength;\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const granularity = array[startingIndex++];\r\n const height = array[startingIndex++];\r\n const rotation = array[startingIndex++];\r\n const extrudedHeight = array[startingIndex++];\r\n const offsetAttribute = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.granularity = granularity;\r\n scratchOptions.height = height;\r\n scratchOptions.rotation = rotation;\r\n scratchOptions.extrudedHeight = extrudedHeight;\r\n scratchOptions.offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return new RectangleOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._rectangle = Rectangle.clone(rectangle, result._rectangle);\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._surfaceHeight = height;\r\n result._rotation = rotation;\r\n result._extrudedHeight = extrudedHeight;\r\n result._offsetAttribute =\r\n offsetAttribute === -1 ? undefined : offsetAttribute;\r\n\r\n return result;\r\n};\r\n\r\nconst nwScratch = new Cartographic();\r\n/**\r\n * Computes the geometric representation of an outline of a rectangle, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {RectangleOutlineGeometry} rectangleGeometry A description of the rectangle outline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n *\r\n * @exception {DeveloperError} Rotated rectangle is invalid.\r\n */\r\nRectangleOutlineGeometry.createGeometry = function (rectangleGeometry) {\r\n const rectangle = rectangleGeometry._rectangle;\r\n const ellipsoid = rectangleGeometry._ellipsoid;\r\n const computedOptions = RectangleGeometryLibrary.computeOptions(\r\n rectangle,\r\n rectangleGeometry._granularity,\r\n rectangleGeometry._rotation,\r\n 0,\r\n rectangleScratch,\r\n nwScratch\r\n );\r\n\r\n let geometry;\r\n let boundingSphere;\r\n\r\n if (\r\n CesiumMath.equalsEpsilon(\r\n rectangle.north,\r\n rectangle.south,\r\n CesiumMath.EPSILON10\r\n ) ||\r\n CesiumMath.equalsEpsilon(\r\n rectangle.east,\r\n rectangle.west,\r\n CesiumMath.EPSILON10\r\n )\r\n ) {\r\n return undefined;\r\n }\r\n\r\n const surfaceHeight = rectangleGeometry._surfaceHeight;\r\n const extrudedHeight = rectangleGeometry._extrudedHeight;\r\n const extrude = !CesiumMath.equalsEpsilon(\r\n surfaceHeight,\r\n extrudedHeight,\r\n 0,\r\n CesiumMath.EPSILON2\r\n );\r\n let offsetValue;\r\n if (extrude) {\r\n geometry = constructExtrudedRectangle(rectangleGeometry, computedOptions);\r\n if (defined(rectangleGeometry._offsetAttribute)) {\r\n const size = geometry.attributes.position.values.length / 3;\r\n let offsetAttribute = new Uint8Array(size);\r\n if (rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.TOP) {\r\n offsetAttribute = offsetAttribute.fill(1, 0, size / 2);\r\n } else {\r\n offsetValue =\r\n rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n offsetAttribute = offsetAttribute.fill(offsetValue);\r\n }\r\n\r\n geometry.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: offsetAttribute,\r\n });\r\n }\r\n const topBS = BoundingSphere.fromRectangle3D(\r\n rectangle,\r\n ellipsoid,\r\n surfaceHeight,\r\n topBoundingSphere\r\n );\r\n const bottomBS = BoundingSphere.fromRectangle3D(\r\n rectangle,\r\n ellipsoid,\r\n extrudedHeight,\r\n bottomBoundingSphere\r\n );\r\n boundingSphere = BoundingSphere.union(topBS, bottomBS);\r\n } else {\r\n geometry = constructRectangle(rectangleGeometry, computedOptions);\r\n geometry.attributes.position.values = PolygonPipeline.scaleToGeodeticHeight(\r\n geometry.attributes.position.values,\r\n surfaceHeight,\r\n ellipsoid,\r\n false\r\n );\r\n\r\n if (defined(rectangleGeometry._offsetAttribute)) {\r\n const length = geometry.attributes.position.values.length;\r\n offsetValue =\r\n rectangleGeometry._offsetAttribute === GeometryOffsetAttribute.NONE\r\n ? 0\r\n : 1;\r\n const applyOffset = new Uint8Array(length / 3).fill(offsetValue);\r\n geometry.attributes.applyOffset = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 1,\r\n values: applyOffset,\r\n });\r\n }\r\n\r\n boundingSphere = BoundingSphere.fromRectangle3D(\r\n rectangle,\r\n ellipsoid,\r\n surfaceHeight\r\n );\r\n }\r\n\r\n return new Geometry({\r\n attributes: geometry.attributes,\r\n indices: geometry.indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: boundingSphere,\r\n offsetAttribute: rectangleGeometry._offsetAttribute,\r\n });\r\n};\r\nexport default RectangleOutlineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport RectangleOutlineGeometry from \"../Core/RectangleOutlineGeometry.js\";\r\n\r\nfunction createRectangleOutlineGeometry(rectangleGeometry, offset) {\r\n if (defined(offset)) {\r\n rectangleGeometry = RectangleOutlineGeometry.unpack(\r\n rectangleGeometry,\r\n offset\r\n );\r\n }\r\n rectangleGeometry._ellipsoid = Ellipsoid.clone(rectangleGeometry._ellipsoid);\r\n rectangleGeometry._rectangle = Rectangle.clone(rectangleGeometry._rectangle);\r\n return RectangleOutlineGeometry.createGeometry(rectangleGeometry);\r\n}\r\nexport default createRectangleOutlineGeometry;\r\n"],"names":["BoundingSphere","Cartesian3","Rectangle","RectangleGeometryLibrary","IndexDatatype","Geometry","GeometryAttributes","PrimitiveType","GeometryAttribute","ComponentDatatype","PolygonPipeline","defaultValue","CesiumMath","Ellipsoid","defined","DeveloperError","Cartographic","GeometryOffsetAttribute"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createSimplePolylineGeometry.js b/debug/cesium/Workers/createSimplePolylineGeometry.js deleted file mode 100644 index 3c5c6f7..0000000 --- a/debug/cesium/Workers/createSimplePolylineGeometry.js +++ /dev/null @@ -1,484 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './ArcType-d608b872', './Transforms-11fb6b0a', './Color-c019c34b', './ComponentDatatype-13a5630b', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './IndexDatatype-b4e5cf89', './Math-9be8b918', './PolylinePipeline-3c021236', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (defaultValue, Matrix3, ArcType, Transforms, Color, ComponentDatatype, Check, GeometryAttribute, GeometryAttributes, IndexDatatype, Math, PolylinePipeline, Matrix2, RuntimeError, combine, WebGLConstants, EllipsoidGeodesic, EllipsoidRhumbLine, IntersectionTests, Plane) { 'use strict'; - - function interpolateColors(p0, p1, color0, color1, minDistance, array, offset) { - const numPoints = PolylinePipeline.PolylinePipeline.numberOfPoints(p0, p1, minDistance); - let i; - - const r0 = color0.red; - const g0 = color0.green; - const b0 = color0.blue; - const a0 = color0.alpha; - - const r1 = color1.red; - const g1 = color1.green; - const b1 = color1.blue; - const a1 = color1.alpha; - - if (Color.Color.equals(color0, color1)) { - for (i = 0; i < numPoints; i++) { - array[offset++] = Color.Color.floatToByte(r0); - array[offset++] = Color.Color.floatToByte(g0); - array[offset++] = Color.Color.floatToByte(b0); - array[offset++] = Color.Color.floatToByte(a0); - } - return offset; - } - - const redPerVertex = (r1 - r0) / numPoints; - const greenPerVertex = (g1 - g0) / numPoints; - const bluePerVertex = (b1 - b0) / numPoints; - const alphaPerVertex = (a1 - a0) / numPoints; - - let index = offset; - for (i = 0; i < numPoints; i++) { - array[index++] = Color.Color.floatToByte(r0 + i * redPerVertex); - array[index++] = Color.Color.floatToByte(g0 + i * greenPerVertex); - array[index++] = Color.Color.floatToByte(b0 + i * bluePerVertex); - array[index++] = Color.Color.floatToByte(a0 + i * alphaPerVertex); - } - - return index; - } - - /** - * A description of a polyline modeled as a line strip; the first two positions define a line segment, - * and each additional position defines a line segment from the previous position. - * - * @alias SimplePolylineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the positions in the polyline as a line strip. - * @param {Color[]} [options.colors] An Array of {@link Color} defining the per vertex or per segment colors. - * @param {Boolean} [options.colorsPerVertex=false] A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices. - * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference. - * - * @exception {DeveloperError} At least two positions are required. - * @exception {DeveloperError} colors has an invalid length. - * - * @see SimplePolylineGeometry#createGeometry - * - * @example - * // A polyline with two connected line segments - * const polyline = new Cesium.SimplePolylineGeometry({ - * positions : Cesium.Cartesian3.fromDegreesArray([ - * 0.0, 0.0, - * 5.0, 0.0, - * 5.0, 5.0 - * ]) - * }); - * const geometry = Cesium.SimplePolylineGeometry.createGeometry(polyline); - */ - function SimplePolylineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.positions; - const colors = options.colors; - const colorsPerVertex = defaultValue.defaultValue(options.colorsPerVertex, false); - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions) || positions.length < 2) { - throw new Check.DeveloperError("At least two positions are required."); - } - if ( - defaultValue.defined(colors) && - ((colorsPerVertex && colors.length < positions.length) || - (!colorsPerVertex && colors.length < positions.length - 1)) - ) { - throw new Check.DeveloperError("colors has an invalid length."); - } - //>>includeEnd('debug'); - - this._positions = positions; - this._colors = colors; - this._colorsPerVertex = colorsPerVertex; - - this._arcType = defaultValue.defaultValue(options.arcType, ArcType.ArcType.GEODESIC); - this._granularity = defaultValue.defaultValue( - options.granularity, - Math.CesiumMath.RADIANS_PER_DEGREE - ); - this._ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - this._workerName = "createSimplePolylineGeometry"; - - let numComponents = 1 + positions.length * Matrix3.Cartesian3.packedLength; - numComponents += defaultValue.defined(colors) ? 1 + colors.length * Color.Color.packedLength : 1; - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = numComponents + Matrix3.Ellipsoid.packedLength + 3; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {SimplePolylineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - SimplePolylineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - const positions = value._positions; - let length = positions.length; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - Matrix3.Cartesian3.pack(positions[i], array, startingIndex); - } - - const colors = value._colors; - length = defaultValue.defined(colors) ? colors.length : 0.0; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Color.Color.packedLength) { - Color.Color.pack(colors[i], array, startingIndex); - } - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - array[startingIndex++] = value._colorsPerVertex ? 1.0 : 0.0; - array[startingIndex++] = value._arcType; - array[startingIndex] = value._granularity; - - return array; - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {SimplePolylineGeometry} [result] The object into which to store the result. - * @returns {SimplePolylineGeometry} The modified result parameter or a new SimplePolylineGeometry instance if one was not provided. - */ - SimplePolylineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - let length = array[startingIndex++]; - const positions = new Array(length); - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - positions[i] = Matrix3.Cartesian3.unpack(array, startingIndex); - } - - length = array[startingIndex++]; - const colors = length > 0 ? new Array(length) : undefined; - - for (i = 0; i < length; ++i, startingIndex += Color.Color.packedLength) { - colors[i] = Color.Color.unpack(array, startingIndex); - } - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const colorsPerVertex = array[startingIndex++] === 1.0; - const arcType = array[startingIndex++]; - const granularity = array[startingIndex]; - - if (!defaultValue.defined(result)) { - return new SimplePolylineGeometry({ - positions: positions, - colors: colors, - ellipsoid: ellipsoid, - colorsPerVertex: colorsPerVertex, - arcType: arcType, - granularity: granularity, - }); - } - - result._positions = positions; - result._colors = colors; - result._ellipsoid = ellipsoid; - result._colorsPerVertex = colorsPerVertex; - result._arcType = arcType; - result._granularity = granularity; - - return result; - }; - - const scratchArray1 = new Array(2); - const scratchArray2 = new Array(2); - const generateArcOptionsScratch = { - positions: scratchArray1, - height: scratchArray2, - ellipsoid: undefined, - minDistance: undefined, - granularity: undefined, - }; - - /** - * Computes the geometric representation of a simple polyline, including its vertices, indices, and a bounding sphere. - * - * @param {SimplePolylineGeometry} simplePolylineGeometry A description of the polyline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - SimplePolylineGeometry.createGeometry = function (simplePolylineGeometry) { - const positions = simplePolylineGeometry._positions; - const colors = simplePolylineGeometry._colors; - const colorsPerVertex = simplePolylineGeometry._colorsPerVertex; - const arcType = simplePolylineGeometry._arcType; - const granularity = simplePolylineGeometry._granularity; - const ellipsoid = simplePolylineGeometry._ellipsoid; - - const minDistance = Math.CesiumMath.chordLength( - granularity, - ellipsoid.maximumRadius - ); - const perSegmentColors = defaultValue.defined(colors) && !colorsPerVertex; - - let i; - const length = positions.length; - - let positionValues; - let numberOfPositions; - let colorValues; - let color; - let offset = 0; - - if (arcType === ArcType.ArcType.GEODESIC || arcType === ArcType.ArcType.RHUMB) { - let subdivisionSize; - let numberOfPointsFunction; - let generateArcFunction; - if (arcType === ArcType.ArcType.GEODESIC) { - subdivisionSize = Math.CesiumMath.chordLength( - granularity, - ellipsoid.maximumRadius - ); - numberOfPointsFunction = PolylinePipeline.PolylinePipeline.numberOfPoints; - generateArcFunction = PolylinePipeline.PolylinePipeline.generateArc; - } else { - subdivisionSize = granularity; - numberOfPointsFunction = PolylinePipeline.PolylinePipeline.numberOfPointsRhumbLine; - generateArcFunction = PolylinePipeline.PolylinePipeline.generateRhumbArc; - } - - const heights = PolylinePipeline.PolylinePipeline.extractHeights(positions, ellipsoid); - - const generateArcOptions = generateArcOptionsScratch; - if (arcType === ArcType.ArcType.GEODESIC) { - generateArcOptions.minDistance = minDistance; - } else { - generateArcOptions.granularity = granularity; - } - generateArcOptions.ellipsoid = ellipsoid; - - if (perSegmentColors) { - let positionCount = 0; - for (i = 0; i < length - 1; i++) { - positionCount += - numberOfPointsFunction( - positions[i], - positions[i + 1], - subdivisionSize - ) + 1; - } - - positionValues = new Float64Array(positionCount * 3); - colorValues = new Uint8Array(positionCount * 4); - - generateArcOptions.positions = scratchArray1; - generateArcOptions.height = scratchArray2; - - let ci = 0; - for (i = 0; i < length - 1; ++i) { - scratchArray1[0] = positions[i]; - scratchArray1[1] = positions[i + 1]; - - scratchArray2[0] = heights[i]; - scratchArray2[1] = heights[i + 1]; - - const pos = generateArcFunction(generateArcOptions); - - if (defaultValue.defined(colors)) { - const segLen = pos.length / 3; - color = colors[i]; - for (let k = 0; k < segLen; ++k) { - colorValues[ci++] = Color.Color.floatToByte(color.red); - colorValues[ci++] = Color.Color.floatToByte(color.green); - colorValues[ci++] = Color.Color.floatToByte(color.blue); - colorValues[ci++] = Color.Color.floatToByte(color.alpha); - } - } - - positionValues.set(pos, offset); - offset += pos.length; - } - } else { - generateArcOptions.positions = positions; - generateArcOptions.height = heights; - positionValues = new Float64Array( - generateArcFunction(generateArcOptions) - ); - - if (defaultValue.defined(colors)) { - colorValues = new Uint8Array((positionValues.length / 3) * 4); - - for (i = 0; i < length - 1; ++i) { - const p0 = positions[i]; - const p1 = positions[i + 1]; - const c0 = colors[i]; - const c1 = colors[i + 1]; - offset = interpolateColors( - p0, - p1, - c0, - c1, - minDistance, - colorValues, - offset - ); - } - - const lastColor = colors[length - 1]; - colorValues[offset++] = Color.Color.floatToByte(lastColor.red); - colorValues[offset++] = Color.Color.floatToByte(lastColor.green); - colorValues[offset++] = Color.Color.floatToByte(lastColor.blue); - colorValues[offset++] = Color.Color.floatToByte(lastColor.alpha); - } - } - } else { - numberOfPositions = perSegmentColors ? length * 2 - 2 : length; - positionValues = new Float64Array(numberOfPositions * 3); - colorValues = defaultValue.defined(colors) - ? new Uint8Array(numberOfPositions * 4) - : undefined; - - let positionIndex = 0; - let colorIndex = 0; - - for (i = 0; i < length; ++i) { - const p = positions[i]; - - if (perSegmentColors && i > 0) { - Matrix3.Cartesian3.pack(p, positionValues, positionIndex); - positionIndex += 3; - - color = colors[i - 1]; - colorValues[colorIndex++] = Color.Color.floatToByte(color.red); - colorValues[colorIndex++] = Color.Color.floatToByte(color.green); - colorValues[colorIndex++] = Color.Color.floatToByte(color.blue); - colorValues[colorIndex++] = Color.Color.floatToByte(color.alpha); - } - - if (perSegmentColors && i === length - 1) { - break; - } - - Matrix3.Cartesian3.pack(p, positionValues, positionIndex); - positionIndex += 3; - - if (defaultValue.defined(colors)) { - color = colors[i]; - colorValues[colorIndex++] = Color.Color.floatToByte(color.red); - colorValues[colorIndex++] = Color.Color.floatToByte(color.green); - colorValues[colorIndex++] = Color.Color.floatToByte(color.blue); - colorValues[colorIndex++] = Color.Color.floatToByte(color.alpha); - } - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positionValues, - }); - - if (defaultValue.defined(colors)) { - attributes.color = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.UNSIGNED_BYTE, - componentsPerAttribute: 4, - values: colorValues, - normalize: true, - }); - } - - numberOfPositions = positionValues.length / 3; - const numberOfIndices = (numberOfPositions - 1) * 2; - const indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfPositions, - numberOfIndices - ); - - let index = 0; - for (i = 0; i < numberOfPositions - 1; ++i) { - indices[index++] = i; - indices[index++] = i + 1; - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: Transforms.BoundingSphere.fromPoints(positions), - }); - }; - - function createSimplePolylineGeometry(simplePolylineGeometry, offset) { - if (defaultValue.defined(offset)) { - simplePolylineGeometry = SimplePolylineGeometry.unpack( - simplePolylineGeometry, - offset - ); - } - simplePolylineGeometry._ellipsoid = Matrix3.Ellipsoid.clone( - simplePolylineGeometry._ellipsoid - ); - return SimplePolylineGeometry.createGeometry(simplePolylineGeometry); - } - - return createSimplePolylineGeometry; - -})); -//# sourceMappingURL=createSimplePolylineGeometry.js.map diff --git a/debug/cesium/Workers/createSimplePolylineGeometry.js.map b/debug/cesium/Workers/createSimplePolylineGeometry.js.map deleted file mode 100644 index 2bed378..0000000 --- a/debug/cesium/Workers/createSimplePolylineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createSimplePolylineGeometry.js","sources":["../../../Source/Core/SimplePolylineGeometry.js","../../../Source/WorkersES6/createSimplePolylineGeometry.js"],"sourcesContent":["import ArcType from \"./ArcType.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Color from \"./Color.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PolylinePipeline from \"./PolylinePipeline.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\n\r\nfunction interpolateColors(p0, p1, color0, color1, minDistance, array, offset) {\r\n const numPoints = PolylinePipeline.numberOfPoints(p0, p1, minDistance);\r\n let i;\r\n\r\n const r0 = color0.red;\r\n const g0 = color0.green;\r\n const b0 = color0.blue;\r\n const a0 = color0.alpha;\r\n\r\n const r1 = color1.red;\r\n const g1 = color1.green;\r\n const b1 = color1.blue;\r\n const a1 = color1.alpha;\r\n\r\n if (Color.equals(color0, color1)) {\r\n for (i = 0; i < numPoints; i++) {\r\n array[offset++] = Color.floatToByte(r0);\r\n array[offset++] = Color.floatToByte(g0);\r\n array[offset++] = Color.floatToByte(b0);\r\n array[offset++] = Color.floatToByte(a0);\r\n }\r\n return offset;\r\n }\r\n\r\n const redPerVertex = (r1 - r0) / numPoints;\r\n const greenPerVertex = (g1 - g0) / numPoints;\r\n const bluePerVertex = (b1 - b0) / numPoints;\r\n const alphaPerVertex = (a1 - a0) / numPoints;\r\n\r\n let index = offset;\r\n for (i = 0; i < numPoints; i++) {\r\n array[index++] = Color.floatToByte(r0 + i * redPerVertex);\r\n array[index++] = Color.floatToByte(g0 + i * greenPerVertex);\r\n array[index++] = Color.floatToByte(b0 + i * bluePerVertex);\r\n array[index++] = Color.floatToByte(a0 + i * alphaPerVertex);\r\n }\r\n\r\n return index;\r\n}\r\n\r\n/**\r\n * A description of a polyline modeled as a line strip; the first two positions define a line segment,\r\n * and each additional position defines a line segment from the previous position.\r\n *\r\n * @alias SimplePolylineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of {@link Cartesian3} defining the positions in the polyline as a line strip.\r\n * @param {Color[]} [options.colors] An Array of {@link Color} defining the per vertex or per segment colors.\r\n * @param {Boolean} [options.colorsPerVertex=false] A boolean that determines whether the colors will be flat across each segment of the line or interpolated across the vertices.\r\n * @param {ArcType} [options.arcType=ArcType.GEODESIC] The type of line the polyline segments must follow.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude if options.arcType is not ArcType.NONE. Determines the number of positions in the buffer.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to be used as a reference.\r\n *\r\n * @exception {DeveloperError} At least two positions are required.\r\n * @exception {DeveloperError} colors has an invalid length.\r\n *\r\n * @see SimplePolylineGeometry#createGeometry\r\n *\r\n * @example\r\n * // A polyline with two connected line segments\r\n * const polyline = new Cesium.SimplePolylineGeometry({\r\n * positions : Cesium.Cartesian3.fromDegreesArray([\r\n * 0.0, 0.0,\r\n * 5.0, 0.0,\r\n * 5.0, 5.0\r\n * ])\r\n * });\r\n * const geometry = Cesium.SimplePolylineGeometry.createGeometry(polyline);\r\n */\r\nfunction SimplePolylineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.positions;\r\n const colors = options.colors;\r\n const colorsPerVertex = defaultValue(options.colorsPerVertex, false);\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions) || positions.length < 2) {\r\n throw new DeveloperError(\"At least two positions are required.\");\r\n }\r\n if (\r\n defined(colors) &&\r\n ((colorsPerVertex && colors.length < positions.length) ||\r\n (!colorsPerVertex && colors.length < positions.length - 1))\r\n ) {\r\n throw new DeveloperError(\"colors has an invalid length.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n this._positions = positions;\r\n this._colors = colors;\r\n this._colorsPerVertex = colorsPerVertex;\r\n\r\n this._arcType = defaultValue(options.arcType, ArcType.GEODESIC);\r\n this._granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n this._ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n this._workerName = \"createSimplePolylineGeometry\";\r\n\r\n let numComponents = 1 + positions.length * Cartesian3.packedLength;\r\n numComponents += defined(colors) ? 1 + colors.length * Color.packedLength : 1;\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength = numComponents + Ellipsoid.packedLength + 3;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {SimplePolylineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nSimplePolylineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n const positions = value._positions;\r\n let length = positions.length;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n Cartesian3.pack(positions[i], array, startingIndex);\r\n }\r\n\r\n const colors = value._colors;\r\n length = defined(colors) ? colors.length : 0.0;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\r\n Color.pack(colors[i], array, startingIndex);\r\n }\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n array[startingIndex++] = value._colorsPerVertex ? 1.0 : 0.0;\r\n array[startingIndex++] = value._arcType;\r\n array[startingIndex] = value._granularity;\r\n\r\n return array;\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {SimplePolylineGeometry} [result] The object into which to store the result.\r\n * @returns {SimplePolylineGeometry} The modified result parameter or a new SimplePolylineGeometry instance if one was not provided.\r\n */\r\nSimplePolylineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n let length = array[startingIndex++];\r\n const positions = new Array(length);\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n positions[i] = Cartesian3.unpack(array, startingIndex);\r\n }\r\n\r\n length = array[startingIndex++];\r\n const colors = length > 0 ? new Array(length) : undefined;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Color.packedLength) {\r\n colors[i] = Color.unpack(array, startingIndex);\r\n }\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const colorsPerVertex = array[startingIndex++] === 1.0;\r\n const arcType = array[startingIndex++];\r\n const granularity = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n return new SimplePolylineGeometry({\r\n positions: positions,\r\n colors: colors,\r\n ellipsoid: ellipsoid,\r\n colorsPerVertex: colorsPerVertex,\r\n arcType: arcType,\r\n granularity: granularity,\r\n });\r\n }\r\n\r\n result._positions = positions;\r\n result._colors = colors;\r\n result._ellipsoid = ellipsoid;\r\n result._colorsPerVertex = colorsPerVertex;\r\n result._arcType = arcType;\r\n result._granularity = granularity;\r\n\r\n return result;\r\n};\r\n\r\nconst scratchArray1 = new Array(2);\r\nconst scratchArray2 = new Array(2);\r\nconst generateArcOptionsScratch = {\r\n positions: scratchArray1,\r\n height: scratchArray2,\r\n ellipsoid: undefined,\r\n minDistance: undefined,\r\n granularity: undefined,\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a simple polyline, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {SimplePolylineGeometry} simplePolylineGeometry A description of the polyline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nSimplePolylineGeometry.createGeometry = function (simplePolylineGeometry) {\r\n const positions = simplePolylineGeometry._positions;\r\n const colors = simplePolylineGeometry._colors;\r\n const colorsPerVertex = simplePolylineGeometry._colorsPerVertex;\r\n const arcType = simplePolylineGeometry._arcType;\r\n const granularity = simplePolylineGeometry._granularity;\r\n const ellipsoid = simplePolylineGeometry._ellipsoid;\r\n\r\n const minDistance = CesiumMath.chordLength(\r\n granularity,\r\n ellipsoid.maximumRadius\r\n );\r\n const perSegmentColors = defined(colors) && !colorsPerVertex;\r\n\r\n let i;\r\n const length = positions.length;\r\n\r\n let positionValues;\r\n let numberOfPositions;\r\n let colorValues;\r\n let color;\r\n let offset = 0;\r\n\r\n if (arcType === ArcType.GEODESIC || arcType === ArcType.RHUMB) {\r\n let subdivisionSize;\r\n let numberOfPointsFunction;\r\n let generateArcFunction;\r\n if (arcType === ArcType.GEODESIC) {\r\n subdivisionSize = CesiumMath.chordLength(\r\n granularity,\r\n ellipsoid.maximumRadius\r\n );\r\n numberOfPointsFunction = PolylinePipeline.numberOfPoints;\r\n generateArcFunction = PolylinePipeline.generateArc;\r\n } else {\r\n subdivisionSize = granularity;\r\n numberOfPointsFunction = PolylinePipeline.numberOfPointsRhumbLine;\r\n generateArcFunction = PolylinePipeline.generateRhumbArc;\r\n }\r\n\r\n const heights = PolylinePipeline.extractHeights(positions, ellipsoid);\r\n\r\n const generateArcOptions = generateArcOptionsScratch;\r\n if (arcType === ArcType.GEODESIC) {\r\n generateArcOptions.minDistance = minDistance;\r\n } else {\r\n generateArcOptions.granularity = granularity;\r\n }\r\n generateArcOptions.ellipsoid = ellipsoid;\r\n\r\n if (perSegmentColors) {\r\n let positionCount = 0;\r\n for (i = 0; i < length - 1; i++) {\r\n positionCount +=\r\n numberOfPointsFunction(\r\n positions[i],\r\n positions[i + 1],\r\n subdivisionSize\r\n ) + 1;\r\n }\r\n\r\n positionValues = new Float64Array(positionCount * 3);\r\n colorValues = new Uint8Array(positionCount * 4);\r\n\r\n generateArcOptions.positions = scratchArray1;\r\n generateArcOptions.height = scratchArray2;\r\n\r\n let ci = 0;\r\n for (i = 0; i < length - 1; ++i) {\r\n scratchArray1[0] = positions[i];\r\n scratchArray1[1] = positions[i + 1];\r\n\r\n scratchArray2[0] = heights[i];\r\n scratchArray2[1] = heights[i + 1];\r\n\r\n const pos = generateArcFunction(generateArcOptions);\r\n\r\n if (defined(colors)) {\r\n const segLen = pos.length / 3;\r\n color = colors[i];\r\n for (let k = 0; k < segLen; ++k) {\r\n colorValues[ci++] = Color.floatToByte(color.red);\r\n colorValues[ci++] = Color.floatToByte(color.green);\r\n colorValues[ci++] = Color.floatToByte(color.blue);\r\n colorValues[ci++] = Color.floatToByte(color.alpha);\r\n }\r\n }\r\n\r\n positionValues.set(pos, offset);\r\n offset += pos.length;\r\n }\r\n } else {\r\n generateArcOptions.positions = positions;\r\n generateArcOptions.height = heights;\r\n positionValues = new Float64Array(\r\n generateArcFunction(generateArcOptions)\r\n );\r\n\r\n if (defined(colors)) {\r\n colorValues = new Uint8Array((positionValues.length / 3) * 4);\r\n\r\n for (i = 0; i < length - 1; ++i) {\r\n const p0 = positions[i];\r\n const p1 = positions[i + 1];\r\n const c0 = colors[i];\r\n const c1 = colors[i + 1];\r\n offset = interpolateColors(\r\n p0,\r\n p1,\r\n c0,\r\n c1,\r\n minDistance,\r\n colorValues,\r\n offset\r\n );\r\n }\r\n\r\n const lastColor = colors[length - 1];\r\n colorValues[offset++] = Color.floatToByte(lastColor.red);\r\n colorValues[offset++] = Color.floatToByte(lastColor.green);\r\n colorValues[offset++] = Color.floatToByte(lastColor.blue);\r\n colorValues[offset++] = Color.floatToByte(lastColor.alpha);\r\n }\r\n }\r\n } else {\r\n numberOfPositions = perSegmentColors ? length * 2 - 2 : length;\r\n positionValues = new Float64Array(numberOfPositions * 3);\r\n colorValues = defined(colors)\r\n ? new Uint8Array(numberOfPositions * 4)\r\n : undefined;\r\n\r\n let positionIndex = 0;\r\n let colorIndex = 0;\r\n\r\n for (i = 0; i < length; ++i) {\r\n const p = positions[i];\r\n\r\n if (perSegmentColors && i > 0) {\r\n Cartesian3.pack(p, positionValues, positionIndex);\r\n positionIndex += 3;\r\n\r\n color = colors[i - 1];\r\n colorValues[colorIndex++] = Color.floatToByte(color.red);\r\n colorValues[colorIndex++] = Color.floatToByte(color.green);\r\n colorValues[colorIndex++] = Color.floatToByte(color.blue);\r\n colorValues[colorIndex++] = Color.floatToByte(color.alpha);\r\n }\r\n\r\n if (perSegmentColors && i === length - 1) {\r\n break;\r\n }\r\n\r\n Cartesian3.pack(p, positionValues, positionIndex);\r\n positionIndex += 3;\r\n\r\n if (defined(colors)) {\r\n color = colors[i];\r\n colorValues[colorIndex++] = Color.floatToByte(color.red);\r\n colorValues[colorIndex++] = Color.floatToByte(color.green);\r\n colorValues[colorIndex++] = Color.floatToByte(color.blue);\r\n colorValues[colorIndex++] = Color.floatToByte(color.alpha);\r\n }\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positionValues,\r\n });\r\n\r\n if (defined(colors)) {\r\n attributes.color = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.UNSIGNED_BYTE,\r\n componentsPerAttribute: 4,\r\n values: colorValues,\r\n normalize: true,\r\n });\r\n }\r\n\r\n numberOfPositions = positionValues.length / 3;\r\n const numberOfIndices = (numberOfPositions - 1) * 2;\r\n const indices = IndexDatatype.createTypedArray(\r\n numberOfPositions,\r\n numberOfIndices\r\n );\r\n\r\n let index = 0;\r\n for (i = 0; i < numberOfPositions - 1; ++i) {\r\n indices[index++] = i;\r\n indices[index++] = i + 1;\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: BoundingSphere.fromPoints(positions),\r\n });\r\n};\r\nexport default SimplePolylineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport SimplePolylineGeometry from \"../Core/SimplePolylineGeometry.js\";\r\n\r\nfunction createSimplePolylineGeometry(simplePolylineGeometry, offset) {\r\n if (defined(offset)) {\r\n simplePolylineGeometry = SimplePolylineGeometry.unpack(\r\n simplePolylineGeometry,\r\n offset\r\n );\r\n }\r\n simplePolylineGeometry._ellipsoid = Ellipsoid.clone(\r\n simplePolylineGeometry._ellipsoid\r\n );\r\n return SimplePolylineGeometry.createGeometry(simplePolylineGeometry);\r\n}\r\nexport default createSimplePolylineGeometry;\r\n"],"names":["PolylinePipeline","Color","defaultValue","defined","DeveloperError","ArcType","CesiumMath","Ellipsoid","Cartesian3","GeometryAttributes","GeometryAttribute","ComponentDatatype","IndexDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBA,SAAS,iBAAiB,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE;EAC/E,EAAE,MAAM,SAAS,GAAGA,iCAAgB,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,CAAC,CAAC;EACzE,EAAE,IAAI,CAAC,CAAC;AACR;EACA,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;EACxB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;EAC1B,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B;EACA,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC;EACxB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;EAC1B,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;EACzB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1B;EACA,EAAE,IAAIC,WAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;EACpC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;EACpC,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;EAC9C,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;EAC9C,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;EAC9C,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;EAC9C,KAAK;EACL,IAAI,OAAO,MAAM,CAAC;EAClB,GAAG;AACH;EACA,EAAE,MAAM,YAAY,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,SAAS,CAAC;EAC7C,EAAE,MAAM,cAAc,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,SAAS,CAAC;EAC/C,EAAE,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,SAAS,CAAC;EAC9C,EAAE,MAAM,cAAc,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,SAAS,CAAC;AAC/C;EACA,EAAE,IAAI,KAAK,GAAG,MAAM,CAAC;EACrB,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;EAClC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;EAC9D,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;EAChE,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;EAC/D,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;EAChE,GAAG;AACH;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,sBAAsB,CAAC,OAAO,EAAE;EACzC,EAAE,OAAO,GAAGC,yBAAY,CAAC,OAAO,EAAEA,yBAAY,CAAC,YAAY,CAAC,CAAC;EAC7D,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;EACtC,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;EAChC,EAAE,MAAM,eAAe,GAAGA,yBAAY,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AACvE;EACA;EACA,EAAE,IAAI,CAACC,oBAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;EACnD,IAAI,MAAM,IAAIC,oBAAc,CAAC,sCAAsC,CAAC,CAAC;EACrE,GAAG;EACH,EAAE;EACF,IAAID,oBAAO,CAAC,MAAM,CAAC;EACnB,KAAK,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM;EACzD,OAAO,CAAC,eAAe,IAAI,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EACjE,IAAI;EACJ,IAAI,MAAM,IAAIC,oBAAc,CAAC,+BAA+B,CAAC,CAAC;EAC9D,GAAG;EACH;AACA;EACA,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;EAC9B,EAAE,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;EACxB,EAAE,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAC;AAC1C;EACA,EAAE,IAAI,CAAC,QAAQ,GAAGF,yBAAY,CAAC,OAAO,CAAC,OAAO,EAAEG,eAAO,CAAC,QAAQ,CAAC,CAAC;EAClE,EAAE,IAAI,CAAC,YAAY,GAAGH,yBAAY;EAClC,IAAI,OAAO,CAAC,WAAW;EACvB,IAAII,eAAU,CAAC,kBAAkB;EACjC,GAAG,CAAC;EACJ,EAAE,IAAI,CAAC,UAAU,GAAGJ,yBAAY,CAAC,OAAO,CAAC,SAAS,EAAEK,iBAAS,CAAC,KAAK,CAAC,CAAC;EACrE,EAAE,IAAI,CAAC,WAAW,GAAG,8BAA8B,CAAC;AACpD;EACA,EAAE,IAAI,aAAa,GAAG,CAAC,GAAG,SAAS,CAAC,MAAM,GAAGC,kBAAU,CAAC,YAAY,CAAC;EACrE,EAAE,aAAa,IAAIL,oBAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,GAAGF,WAAK,CAAC,YAAY,GAAG,CAAC,CAAC;AAChF;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,YAAY,GAAG,aAAa,GAAGM,iBAAS,CAAC,YAAY,GAAG,CAAC,CAAC;EACjE,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,sBAAsB,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;EACrE;EACA,EAAE,IAAI,CAACJ,oBAAO,CAAC,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAIC,oBAAc,CAAC,mBAAmB,CAAC,CAAC;EAClD,GAAG;EACH,EAAE,IAAI,CAACD,oBAAO,CAAC,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAIC,oBAAc,CAAC,mBAAmB,CAAC,CAAC;EAClD,GAAG;EACH;AACA;EACA,EAAE,aAAa,GAAGF,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAE,IAAI,CAAC,CAAC;AACR;EACA,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC;EACrC,EAAE,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;EAChC,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,MAAM,CAAC;AAClC;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa,IAAIM,kBAAU,CAAC,YAAY,EAAE;EACzE,IAAIA,kBAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;EACxD,GAAG;AACH;EACA,EAAE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC;EAC/B,EAAE,MAAM,GAAGL,oBAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC;EACjD,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,MAAM,CAAC;AAClC;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa,IAAIF,WAAK,CAAC,YAAY,EAAE;EACpE,IAAIA,WAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;EAChD,GAAG;AACH;EACA,EAAEM,iBAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;EACzD,EAAE,aAAa,IAAIA,iBAAS,CAAC,YAAY,CAAC;AAC1C;EACA,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,gBAAgB,GAAG,GAAG,GAAG,GAAG,CAAC;EAC9D,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;EAC1C,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC;AAC5C;EACA,EAAE,OAAO,KAAK,CAAC;EACf,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,sBAAsB,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;EACxE;EACA,EAAE,IAAI,CAACJ,oBAAO,CAAC,KAAK,CAAC,EAAE;EACvB,IAAI,MAAM,IAAIC,oBAAc,CAAC,mBAAmB,CAAC,CAAC;EAClD,GAAG;EACH;AACA;EACA,EAAE,aAAa,GAAGF,yBAAY,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;AACjD;EACA,EAAE,IAAI,CAAC,CAAC;AACR;EACA,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACtC,EAAE,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;AACtC;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa,IAAIM,kBAAU,CAAC,YAAY,EAAE;EACzE,IAAI,SAAS,CAAC,CAAC,CAAC,GAAGA,kBAAU,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;EAC3D,GAAG;AACH;EACA,EAAE,MAAM,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EAClC,EAAE,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC;AAC5D;EACA,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,aAAa,IAAIP,WAAK,CAAC,YAAY,EAAE;EACpE,IAAI,MAAM,CAAC,CAAC,CAAC,GAAGA,WAAK,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;EACnD,GAAG;AACH;EACA,EAAE,MAAM,SAAS,GAAGM,iBAAS,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;EAC3D,EAAE,aAAa,IAAIA,iBAAS,CAAC,YAAY,CAAC;AAC1C;EACA,EAAE,MAAM,eAAe,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,KAAK,GAAG,CAAC;EACzD,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;EACzC,EAAE,MAAM,WAAW,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC;AAC3C;EACA,EAAE,IAAI,CAACJ,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,OAAO,IAAI,sBAAsB,CAAC;EACtC,MAAM,SAAS,EAAE,SAAS;EAC1B,MAAM,MAAM,EAAE,MAAM;EACpB,MAAM,SAAS,EAAE,SAAS;EAC1B,MAAM,eAAe,EAAE,eAAe;EACtC,MAAM,OAAO,EAAE,OAAO;EACtB,MAAM,WAAW,EAAE,WAAW;EAC9B,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;EAChC,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC;EAC1B,EAAE,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;EAChC,EAAE,MAAM,CAAC,gBAAgB,GAAG,eAAe,CAAC;EAC5C,EAAE,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;EAC5B,EAAE,MAAM,CAAC,YAAY,GAAG,WAAW,CAAC;AACpC;EACA,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;EACnC,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;EACnC,MAAM,yBAAyB,GAAG;EAClC,EAAE,SAAS,EAAE,aAAa;EAC1B,EAAE,MAAM,EAAE,aAAa;EACvB,EAAE,SAAS,EAAE,SAAS;EACtB,EAAE,WAAW,EAAE,SAAS;EACxB,EAAE,WAAW,EAAE,SAAS;EACxB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,sBAAsB,CAAC,cAAc,GAAG,UAAU,sBAAsB,EAAE;EAC1E,EAAE,MAAM,SAAS,GAAG,sBAAsB,CAAC,UAAU,CAAC;EACtD,EAAE,MAAM,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC;EAChD,EAAE,MAAM,eAAe,GAAG,sBAAsB,CAAC,gBAAgB,CAAC;EAClE,EAAE,MAAM,OAAO,GAAG,sBAAsB,CAAC,QAAQ,CAAC;EAClD,EAAE,MAAM,WAAW,GAAG,sBAAsB,CAAC,YAAY,CAAC;EAC1D,EAAE,MAAM,SAAS,GAAG,sBAAsB,CAAC,UAAU,CAAC;AACtD;EACA,EAAE,MAAM,WAAW,GAAGG,eAAU,CAAC,WAAW;EAC5C,IAAI,WAAW;EACf,IAAI,SAAS,CAAC,aAAa;EAC3B,GAAG,CAAC;EACJ,EAAE,MAAM,gBAAgB,GAAGH,oBAAO,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;AAC/D;EACA,EAAE,IAAI,CAAC,CAAC;EACR,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;AAClC;EACA,EAAE,IAAI,cAAc,CAAC;EACrB,EAAE,IAAI,iBAAiB,CAAC;EACxB,EAAE,IAAI,WAAW,CAAC;EAClB,EAAE,IAAI,KAAK,CAAC;EACZ,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;AACjB;EACA,EAAE,IAAI,OAAO,KAAKE,eAAO,CAAC,QAAQ,IAAI,OAAO,KAAKA,eAAO,CAAC,KAAK,EAAE;EACjE,IAAI,IAAI,eAAe,CAAC;EACxB,IAAI,IAAI,sBAAsB,CAAC;EAC/B,IAAI,IAAI,mBAAmB,CAAC;EAC5B,IAAI,IAAI,OAAO,KAAKA,eAAO,CAAC,QAAQ,EAAE;EACtC,MAAM,eAAe,GAAGC,eAAU,CAAC,WAAW;EAC9C,QAAQ,WAAW;EACnB,QAAQ,SAAS,CAAC,aAAa;EAC/B,OAAO,CAAC;EACR,MAAM,sBAAsB,GAAGN,iCAAgB,CAAC,cAAc,CAAC;EAC/D,MAAM,mBAAmB,GAAGA,iCAAgB,CAAC,WAAW,CAAC;EACzD,KAAK,MAAM;EACX,MAAM,eAAe,GAAG,WAAW,CAAC;EACpC,MAAM,sBAAsB,GAAGA,iCAAgB,CAAC,uBAAuB,CAAC;EACxE,MAAM,mBAAmB,GAAGA,iCAAgB,CAAC,gBAAgB,CAAC;EAC9D,KAAK;AACL;EACA,IAAI,MAAM,OAAO,GAAGA,iCAAgB,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AAC1E;EACA,IAAI,MAAM,kBAAkB,GAAG,yBAAyB,CAAC;EACzD,IAAI,IAAI,OAAO,KAAKK,eAAO,CAAC,QAAQ,EAAE;EACtC,MAAM,kBAAkB,CAAC,WAAW,GAAG,WAAW,CAAC;EACnD,KAAK,MAAM;EACX,MAAM,kBAAkB,CAAC,WAAW,GAAG,WAAW,CAAC;EACnD,KAAK;EACL,IAAI,kBAAkB,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7C;EACA,IAAI,IAAI,gBAAgB,EAAE;EAC1B,MAAM,IAAI,aAAa,GAAG,CAAC,CAAC;EAC5B,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;EACvC,QAAQ,aAAa;EACrB,UAAU,sBAAsB;EAChC,YAAY,SAAS,CAAC,CAAC,CAAC;EACxB,YAAY,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;EAC5B,YAAY,eAAe;EAC3B,WAAW,GAAG,CAAC,CAAC;EAChB,OAAO;AACP;EACA,MAAM,cAAc,GAAG,IAAI,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;EAC3D,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;AACtD;EACA,MAAM,kBAAkB,CAAC,SAAS,GAAG,aAAa,CAAC;EACnD,MAAM,kBAAkB,CAAC,MAAM,GAAG,aAAa,CAAC;AAChD;EACA,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC;EACjB,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;EACvC,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EACxC,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C;EACA,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;EACtC,QAAQ,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1C;EACA,QAAQ,MAAM,GAAG,GAAG,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;AAC5D;EACA,QAAQ,IAAIF,oBAAO,CAAC,MAAM,CAAC,EAAE;EAC7B,UAAU,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;EACxC,UAAU,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC5B,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EAC3C,YAAY,WAAW,CAAC,EAAE,EAAE,CAAC,GAAGF,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EAC7D,YAAY,WAAW,CAAC,EAAE,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC/D,YAAY,WAAW,CAAC,EAAE,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;EAC9D,YAAY,WAAW,CAAC,EAAE,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EAC/D,WAAW;EACX,SAAS;AACT;EACA,QAAQ,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;EACxC,QAAQ,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC;EAC7B,OAAO;EACP,KAAK,MAAM;EACX,MAAM,kBAAkB,CAAC,SAAS,GAAG,SAAS,CAAC;EAC/C,MAAM,kBAAkB,CAAC,MAAM,GAAG,OAAO,CAAC;EAC1C,MAAM,cAAc,GAAG,IAAI,YAAY;EACvC,QAAQ,mBAAmB,CAAC,kBAAkB,CAAC;EAC/C,OAAO,CAAC;AACR;EACA,MAAM,IAAIE,oBAAO,CAAC,MAAM,CAAC,EAAE;EAC3B,QAAQ,WAAW,GAAG,IAAI,UAAU,CAAC,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AACtE;EACA,QAAQ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;EACzC,UAAU,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;EAClC,UAAU,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACtC,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC/B,UAAU,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EACnC,UAAU,MAAM,GAAG,iBAAiB;EACpC,YAAY,EAAE;EACd,YAAY,EAAE;EACd,YAAY,EAAE;EACd,YAAY,EAAE;EACd,YAAY,WAAW;EACvB,YAAY,WAAW;EACvB,YAAY,MAAM;EAClB,WAAW,CAAC;EACZ,SAAS;AACT;EACA,QAAQ,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EAC7C,QAAQ,WAAW,CAAC,MAAM,EAAE,CAAC,GAAGF,WAAK,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;EACjE,QAAQ,WAAW,CAAC,MAAM,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;EACnE,QAAQ,WAAW,CAAC,MAAM,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;EAClE,QAAQ,WAAW,CAAC,MAAM,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;EACnE,OAAO;EACP,KAAK;EACL,GAAG,MAAM;EACT,IAAI,iBAAiB,GAAG,gBAAgB,GAAG,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;EACnE,IAAI,cAAc,GAAG,IAAI,YAAY,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;EAC7D,IAAI,WAAW,GAAGE,oBAAO,CAAC,MAAM,CAAC;EACjC,QAAQ,IAAI,UAAU,CAAC,iBAAiB,GAAG,CAAC,CAAC;EAC7C,QAAQ,SAAS,CAAC;AAClB;EACA,IAAI,IAAI,aAAa,GAAG,CAAC,CAAC;EAC1B,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC;AACvB;EACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EACjC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAC7B;EACA,MAAM,IAAI,gBAAgB,IAAI,CAAC,GAAG,CAAC,EAAE;EACrC,QAAQK,kBAAU,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;EAC1D,QAAQ,aAAa,IAAI,CAAC,CAAC;AAC3B;EACA,QAAQ,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;EAC9B,QAAQ,WAAW,CAAC,UAAU,EAAE,CAAC,GAAGP,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EACjE,QAAQ,WAAW,CAAC,UAAU,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACnE,QAAQ,WAAW,CAAC,UAAU,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;EAClE,QAAQ,WAAW,CAAC,UAAU,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACnE,OAAO;AACP;EACA,MAAM,IAAI,gBAAgB,IAAI,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE;EAChD,QAAQ,MAAM;EACd,OAAO;AACP;EACA,MAAMO,kBAAU,CAAC,IAAI,CAAC,CAAC,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;EACxD,MAAM,aAAa,IAAI,CAAC,CAAC;AACzB;EACA,MAAM,IAAIL,oBAAO,CAAC,MAAM,CAAC,EAAE;EAC3B,QAAQ,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;EAC1B,QAAQ,WAAW,CAAC,UAAU,EAAE,CAAC,GAAGF,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;EACjE,QAAQ,WAAW,CAAC,UAAU,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACnE,QAAQ,WAAW,CAAC,UAAU,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;EAClE,QAAQ,WAAW,CAAC,UAAU,EAAE,CAAC,GAAGA,WAAK,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;EACnE,OAAO;EACP,KAAK;EACL,GAAG;AACH;EACA,EAAE,MAAM,UAAU,GAAG,IAAIQ,qCAAkB,EAAE,CAAC;EAC9C,EAAE,UAAU,CAAC,QAAQ,GAAG,IAAIC,mCAAiB,CAAC;EAC9C,IAAI,iBAAiB,EAAEC,mCAAiB,CAAC,MAAM;EAC/C,IAAI,sBAAsB,EAAE,CAAC;EAC7B,IAAI,MAAM,EAAE,cAAc;EAC1B,GAAG,CAAC,CAAC;AACL;EACA,EAAE,IAAIR,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,UAAU,CAAC,KAAK,GAAG,IAAIO,mCAAiB,CAAC;EAC7C,MAAM,iBAAiB,EAAEC,mCAAiB,CAAC,aAAa;EACxD,MAAM,sBAAsB,EAAE,CAAC;EAC/B,MAAM,MAAM,EAAE,WAAW;EACzB,MAAM,SAAS,EAAE,IAAI;EACrB,KAAK,CAAC,CAAC;EACP,GAAG;AACH;EACA,EAAE,iBAAiB,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;EAChD,EAAE,MAAM,eAAe,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,CAAC,CAAC;EACtD,EAAE,MAAM,OAAO,GAAGC,2BAAa,CAAC,gBAAgB;EAChD,IAAI,iBAAiB;EACrB,IAAI,eAAe;EACnB,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;EAC9C,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;EACzB,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;EAC7B,GAAG;AACH;EACA,EAAE,OAAO,IAAIC,0BAAQ,CAAC;EACtB,IAAI,UAAU,EAAE,UAAU;EAC1B,IAAI,OAAO,EAAE,OAAO;EACpB,IAAI,aAAa,EAAEC,+BAAa,CAAC,KAAK;EACtC,IAAI,cAAc,EAAEC,yBAAc,CAAC,UAAU,CAAC,SAAS,CAAC;EACxD,GAAG,CAAC,CAAC;EACL,CAAC;;ECncD,SAAS,4BAA4B,CAAC,sBAAsB,EAAE,MAAM,EAAE;EACtE,EAAE,IAAIZ,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,sBAAsB,GAAG,sBAAsB,CAAC,MAAM;EAC1D,MAAM,sBAAsB;EAC5B,MAAM,MAAM;EACZ,KAAK,CAAC;EACN,GAAG;EACH,EAAE,sBAAsB,CAAC,UAAU,GAAGI,iBAAS,CAAC,KAAK;EACrD,IAAI,sBAAsB,CAAC,UAAU;EACrC,GAAG,CAAC;EACJ,EAAE,OAAO,sBAAsB,CAAC,cAAc,CAAC,sBAAsB,CAAC,CAAC;EACvE;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createSphereGeometry.js b/debug/cesium/Workers/createSphereGeometry.js deleted file mode 100644 index 56313e1..0000000 --- a/debug/cesium/Workers/createSphereGeometry.js +++ /dev/null @@ -1,149 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './Check-d10e5f2e', './EllipsoidGeometry-66510462', './VertexFormat-f2d74c96', './Math-9be8b918', './Transforms-11fb6b0a', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89'], (function (defaultValue, Matrix3, Check, EllipsoidGeometry, VertexFormat, Math, Transforms, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype) { 'use strict'; - - /** - * A description of a sphere centered at the origin. - * - * @alias SphereGeometry - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {Number} [options.radius=1.0] The radius of the sphere. - * @param {Number} [options.stackPartitions=64] The number of times to partition the ellipsoid into stacks. - * @param {Number} [options.slicePartitions=64] The number of times to partition the ellipsoid into radial slices. - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * - * @exception {DeveloperError} options.slicePartitions cannot be less than three. - * @exception {DeveloperError} options.stackPartitions cannot be less than three. - * - * @see SphereGeometry#createGeometry - * - * @example - * const sphere = new Cesium.SphereGeometry({ - * radius : 100.0, - * vertexFormat : Cesium.VertexFormat.POSITION_ONLY - * }); - * const geometry = Cesium.SphereGeometry.createGeometry(sphere); - */ - function SphereGeometry(options) { - const radius = defaultValue.defaultValue(options.radius, 1.0); - const radii = new Matrix3.Cartesian3(radius, radius, radius); - const ellipsoidOptions = { - radii: radii, - stackPartitions: options.stackPartitions, - slicePartitions: options.slicePartitions, - vertexFormat: options.vertexFormat, - }; - - this._ellipsoidGeometry = new EllipsoidGeometry.EllipsoidGeometry(ellipsoidOptions); - this._workerName = "createSphereGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - SphereGeometry.packedLength = EllipsoidGeometry.EllipsoidGeometry.packedLength; - - /** - * Stores the provided instance into the provided array. - * - * @param {SphereGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - SphereGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - //>>includeEnd('debug'); - - return EllipsoidGeometry.EllipsoidGeometry.pack(value._ellipsoidGeometry, array, startingIndex); - }; - - const scratchEllipsoidGeometry = new EllipsoidGeometry.EllipsoidGeometry(); - const scratchOptions = { - radius: undefined, - radii: new Matrix3.Cartesian3(), - vertexFormat: new VertexFormat.VertexFormat(), - stackPartitions: undefined, - slicePartitions: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {SphereGeometry} [result] The object into which to store the result. - * @returns {SphereGeometry} The modified result parameter or a new SphereGeometry instance if one was not provided. - */ - SphereGeometry.unpack = function (array, startingIndex, result) { - const ellipsoidGeometry = EllipsoidGeometry.EllipsoidGeometry.unpack( - array, - startingIndex, - scratchEllipsoidGeometry - ); - scratchOptions.vertexFormat = VertexFormat.VertexFormat.clone( - ellipsoidGeometry._vertexFormat, - scratchOptions.vertexFormat - ); - scratchOptions.stackPartitions = ellipsoidGeometry._stackPartitions; - scratchOptions.slicePartitions = ellipsoidGeometry._slicePartitions; - - if (!defaultValue.defined(result)) { - scratchOptions.radius = ellipsoidGeometry._radii.x; - return new SphereGeometry(scratchOptions); - } - - Matrix3.Cartesian3.clone(ellipsoidGeometry._radii, scratchOptions.radii); - result._ellipsoidGeometry = new EllipsoidGeometry.EllipsoidGeometry(scratchOptions); - return result; - }; - - /** - * Computes the geometric representation of a sphere, including its vertices, indices, and a bounding sphere. - * - * @param {SphereGeometry} sphereGeometry A description of the sphere. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - SphereGeometry.createGeometry = function (sphereGeometry) { - return EllipsoidGeometry.EllipsoidGeometry.createGeometry(sphereGeometry._ellipsoidGeometry); - }; - - function createSphereGeometry(sphereGeometry, offset) { - if (defaultValue.defined(offset)) { - sphereGeometry = SphereGeometry.unpack(sphereGeometry, offset); - } - return SphereGeometry.createGeometry(sphereGeometry); - } - - return createSphereGeometry; - -})); -//# sourceMappingURL=createSphereGeometry.js.map diff --git a/debug/cesium/Workers/createSphereGeometry.js.map b/debug/cesium/Workers/createSphereGeometry.js.map deleted file mode 100644 index cd69945..0000000 --- a/debug/cesium/Workers/createSphereGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createSphereGeometry.js","sources":["../../../Source/Core/SphereGeometry.js","../../../Source/WorkersES6/createSphereGeometry.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport EllipsoidGeometry from \"./EllipsoidGeometry.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\n\r\n/**\r\n * A description of a sphere centered at the origin.\r\n *\r\n * @alias SphereGeometry\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Number} [options.radius=1.0] The radius of the sphere.\r\n * @param {Number} [options.stackPartitions=64] The number of times to partition the ellipsoid into stacks.\r\n * @param {Number} [options.slicePartitions=64] The number of times to partition the ellipsoid into radial slices.\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n *\r\n * @exception {DeveloperError} options.slicePartitions cannot be less than three.\r\n * @exception {DeveloperError} options.stackPartitions cannot be less than three.\r\n *\r\n * @see SphereGeometry#createGeometry\r\n *\r\n * @example\r\n * const sphere = new Cesium.SphereGeometry({\r\n * radius : 100.0,\r\n * vertexFormat : Cesium.VertexFormat.POSITION_ONLY\r\n * });\r\n * const geometry = Cesium.SphereGeometry.createGeometry(sphere);\r\n */\r\nfunction SphereGeometry(options) {\r\n const radius = defaultValue(options.radius, 1.0);\r\n const radii = new Cartesian3(radius, radius, radius);\r\n const ellipsoidOptions = {\r\n radii: radii,\r\n stackPartitions: options.stackPartitions,\r\n slicePartitions: options.slicePartitions,\r\n vertexFormat: options.vertexFormat,\r\n };\r\n\r\n this._ellipsoidGeometry = new EllipsoidGeometry(ellipsoidOptions);\r\n this._workerName = \"createSphereGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nSphereGeometry.packedLength = EllipsoidGeometry.packedLength;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {SphereGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nSphereGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n //>>includeEnd('debug');\r\n\r\n return EllipsoidGeometry.pack(value._ellipsoidGeometry, array, startingIndex);\r\n};\r\n\r\nconst scratchEllipsoidGeometry = new EllipsoidGeometry();\r\nconst scratchOptions = {\r\n radius: undefined,\r\n radii: new Cartesian3(),\r\n vertexFormat: new VertexFormat(),\r\n stackPartitions: undefined,\r\n slicePartitions: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {SphereGeometry} [result] The object into which to store the result.\r\n * @returns {SphereGeometry} The modified result parameter or a new SphereGeometry instance if one was not provided.\r\n */\r\nSphereGeometry.unpack = function (array, startingIndex, result) {\r\n const ellipsoidGeometry = EllipsoidGeometry.unpack(\r\n array,\r\n startingIndex,\r\n scratchEllipsoidGeometry\r\n );\r\n scratchOptions.vertexFormat = VertexFormat.clone(\r\n ellipsoidGeometry._vertexFormat,\r\n scratchOptions.vertexFormat\r\n );\r\n scratchOptions.stackPartitions = ellipsoidGeometry._stackPartitions;\r\n scratchOptions.slicePartitions = ellipsoidGeometry._slicePartitions;\r\n\r\n if (!defined(result)) {\r\n scratchOptions.radius = ellipsoidGeometry._radii.x;\r\n return new SphereGeometry(scratchOptions);\r\n }\r\n\r\n Cartesian3.clone(ellipsoidGeometry._radii, scratchOptions.radii);\r\n result._ellipsoidGeometry = new EllipsoidGeometry(scratchOptions);\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a sphere, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {SphereGeometry} sphereGeometry A description of the sphere.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nSphereGeometry.createGeometry = function (sphereGeometry) {\r\n return EllipsoidGeometry.createGeometry(sphereGeometry._ellipsoidGeometry);\r\n};\r\nexport default SphereGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport SphereGeometry from \"../Core/SphereGeometry.js\";\r\n\r\nfunction createSphereGeometry(sphereGeometry, offset) {\r\n if (defined(offset)) {\r\n sphereGeometry = SphereGeometry.unpack(sphereGeometry, offset);\r\n }\r\n return SphereGeometry.createGeometry(sphereGeometry);\r\n}\r\nexport default createSphereGeometry;\r\n"],"names":["defaultValue","Cartesian3","EllipsoidGeometry","Check","VertexFormat","defined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAOA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,cAAc,CAAC,OAAO,EAAE;EACjC,EAAE,MAAM,MAAM,GAAGA,yBAAY,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;EACnD,EAAE,MAAM,KAAK,GAAG,IAAIC,kBAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;EACvD,EAAE,MAAM,gBAAgB,GAAG;EAC3B,IAAI,KAAK,EAAE,KAAK;EAChB,IAAI,eAAe,EAAE,OAAO,CAAC,eAAe;EAC5C,IAAI,eAAe,EAAE,OAAO,CAAC,eAAe;EAC5C,IAAI,YAAY,EAAE,OAAO,CAAC,YAAY;EACtC,GAAG,CAAC;AACJ;EACA,EAAE,IAAI,CAAC,kBAAkB,GAAG,IAAIC,mCAAiB,CAAC,gBAAgB,CAAC,CAAC;EACpE,EAAE,IAAI,CAAC,WAAW,GAAG,sBAAsB,CAAC;EAC5C,CAAC;AACD;EACA;EACA;EACA;EACA;EACA,cAAc,CAAC,YAAY,GAAGA,mCAAiB,CAAC,YAAY,CAAC;AAC7D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE;EAC7D;EACA,EAAEC,WAAK,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;EACtC;AACA;EACA,EAAE,OAAOD,mCAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;EAChF,CAAC,CAAC;AACF;EACA,MAAM,wBAAwB,GAAG,IAAIA,mCAAiB,EAAE,CAAC;EACzD,MAAM,cAAc,GAAG;EACvB,EAAE,MAAM,EAAE,SAAS;EACnB,EAAE,KAAK,EAAE,IAAID,kBAAU,EAAE;EACzB,EAAE,YAAY,EAAE,IAAIG,yBAAY,EAAE;EAClC,EAAE,eAAe,EAAE,SAAS;EAC5B,EAAE,eAAe,EAAE,SAAS;EAC5B,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc,CAAC,MAAM,GAAG,UAAU,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE;EAChE,EAAE,MAAM,iBAAiB,GAAGF,mCAAiB,CAAC,MAAM;EACpD,IAAI,KAAK;EACT,IAAI,aAAa;EACjB,IAAI,wBAAwB;EAC5B,GAAG,CAAC;EACJ,EAAE,cAAc,CAAC,YAAY,GAAGE,yBAAY,CAAC,KAAK;EAClD,IAAI,iBAAiB,CAAC,aAAa;EACnC,IAAI,cAAc,CAAC,YAAY;EAC/B,GAAG,CAAC;EACJ,EAAE,cAAc,CAAC,eAAe,GAAG,iBAAiB,CAAC,gBAAgB,CAAC;EACtE,EAAE,cAAc,CAAC,eAAe,GAAG,iBAAiB,CAAC,gBAAgB,CAAC;AACtE;EACA,EAAE,IAAI,CAACC,oBAAO,CAAC,MAAM,CAAC,EAAE;EACxB,IAAI,cAAc,CAAC,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;EACvD,IAAI,OAAO,IAAI,cAAc,CAAC,cAAc,CAAC,CAAC;EAC9C,GAAG;AACH;EACA,EAAEJ,kBAAU,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC;EACnE,EAAE,MAAM,CAAC,kBAAkB,GAAG,IAAIC,mCAAiB,CAAC,cAAc,CAAC,CAAC;EACpE,EAAE,OAAO,MAAM,CAAC;EAChB,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA,cAAc,CAAC,cAAc,GAAG,UAAU,cAAc,EAAE;EAC1D,EAAE,OAAOA,mCAAiB,CAAC,cAAc,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;EAC7E,CAAC;;ECjHD,SAAS,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE;EACtD,EAAE,IAAIG,oBAAO,CAAC,MAAM,CAAC,EAAE;EACvB,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;EACnE,GAAG;EACH,EAAE,OAAO,cAAc,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;EACvD;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createSphereOutlineGeometry.js b/debug/cesium/Workers/createSphereOutlineGeometry.js deleted file mode 100644 index cd1e58b..0000000 --- a/debug/cesium/Workers/createSphereOutlineGeometry.js +++ /dev/null @@ -1,152 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './Check-d10e5f2e', './EllipsoidOutlineGeometry-c18e3c42', './Math-9be8b918', './Transforms-11fb6b0a', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './IndexDatatype-b4e5cf89'], (function (defaultValue, Matrix3, Check, EllipsoidOutlineGeometry, Math, Transforms, Matrix2, RuntimeError, combine, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, IndexDatatype) { 'use strict'; - - /** - * A description of the outline of a sphere. - * - * @alias SphereOutlineGeometry - * @constructor - * - * @param {Object} [options] Object with the following properties: - * @param {Number} [options.radius=1.0] The radius of the sphere. - * @param {Number} [options.stackPartitions=10] The count of stacks for the sphere (1 greater than the number of parallel lines). - * @param {Number} [options.slicePartitions=8] The count of slices for the sphere (Equal to the number of radial lines). - * @param {Number} [options.subdivisions=200] The number of points per line, determining the granularity of the curvature . - * - * @exception {DeveloperError} options.stackPartitions must be greater than or equal to one. - * @exception {DeveloperError} options.slicePartitions must be greater than or equal to zero. - * @exception {DeveloperError} options.subdivisions must be greater than or equal to zero. - * - * @example - * const sphere = new Cesium.SphereOutlineGeometry({ - * radius : 100.0, - * stackPartitions : 6, - * slicePartitions: 5 - * }); - * const geometry = Cesium.SphereOutlineGeometry.createGeometry(sphere); - */ - function SphereOutlineGeometry(options) { - const radius = defaultValue.defaultValue(options.radius, 1.0); - const radii = new Matrix3.Cartesian3(radius, radius, radius); - const ellipsoidOptions = { - radii: radii, - stackPartitions: options.stackPartitions, - slicePartitions: options.slicePartitions, - subdivisions: options.subdivisions, - }; - - this._ellipsoidGeometry = new EllipsoidOutlineGeometry.EllipsoidOutlineGeometry(ellipsoidOptions); - this._workerName = "createSphereOutlineGeometry"; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - SphereOutlineGeometry.packedLength = EllipsoidOutlineGeometry.EllipsoidOutlineGeometry.packedLength; - - /** - * Stores the provided instance into the provided array. - * - * @param {SphereOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - SphereOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("value", value); - //>>includeEnd('debug'); - - return EllipsoidOutlineGeometry.EllipsoidOutlineGeometry.pack( - value._ellipsoidGeometry, - array, - startingIndex - ); - }; - - const scratchEllipsoidGeometry = new EllipsoidOutlineGeometry.EllipsoidOutlineGeometry(); - const scratchOptions = { - radius: undefined, - radii: new Matrix3.Cartesian3(), - stackPartitions: undefined, - slicePartitions: undefined, - subdivisions: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {SphereOutlineGeometry} [result] The object into which to store the result. - * @returns {SphereOutlineGeometry} The modified result parameter or a new SphereOutlineGeometry instance if one was not provided. - */ - SphereOutlineGeometry.unpack = function (array, startingIndex, result) { - const ellipsoidGeometry = EllipsoidOutlineGeometry.EllipsoidOutlineGeometry.unpack( - array, - startingIndex, - scratchEllipsoidGeometry - ); - scratchOptions.stackPartitions = ellipsoidGeometry._stackPartitions; - scratchOptions.slicePartitions = ellipsoidGeometry._slicePartitions; - scratchOptions.subdivisions = ellipsoidGeometry._subdivisions; - - if (!defaultValue.defined(result)) { - scratchOptions.radius = ellipsoidGeometry._radii.x; - return new SphereOutlineGeometry(scratchOptions); - } - - Matrix3.Cartesian3.clone(ellipsoidGeometry._radii, scratchOptions.radii); - result._ellipsoidGeometry = new EllipsoidOutlineGeometry.EllipsoidOutlineGeometry(scratchOptions); - return result; - }; - - /** - * Computes the geometric representation of an outline of a sphere, including its vertices, indices, and a bounding sphere. - * - * @param {SphereOutlineGeometry} sphereGeometry A description of the sphere outline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - SphereOutlineGeometry.createGeometry = function (sphereGeometry) { - return EllipsoidOutlineGeometry.EllipsoidOutlineGeometry.createGeometry( - sphereGeometry._ellipsoidGeometry - ); - }; - - function createSphereOutlineGeometry(sphereGeometry, offset) { - if (defaultValue.defined(offset)) { - sphereGeometry = SphereOutlineGeometry.unpack(sphereGeometry, offset); - } - return SphereOutlineGeometry.createGeometry(sphereGeometry); - } - - return createSphereOutlineGeometry; - -})); -//# sourceMappingURL=createSphereOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createSphereOutlineGeometry.js.map b/debug/cesium/Workers/createSphereOutlineGeometry.js.map deleted file mode 100644 index 9abf635..0000000 --- a/debug/cesium/Workers/createSphereOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createSphereOutlineGeometry.js","sources":["../../../Source/Core/SphereOutlineGeometry.js","../../../Source/WorkersES6/createSphereOutlineGeometry.js"],"sourcesContent":["import Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport EllipsoidOutlineGeometry from \"./EllipsoidOutlineGeometry.js\";\r\n\r\n/**\r\n * A description of the outline of a sphere.\r\n *\r\n * @alias SphereOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} [options] Object with the following properties:\r\n * @param {Number} [options.radius=1.0] The radius of the sphere.\r\n * @param {Number} [options.stackPartitions=10] The count of stacks for the sphere (1 greater than the number of parallel lines).\r\n * @param {Number} [options.slicePartitions=8] The count of slices for the sphere (Equal to the number of radial lines).\r\n * @param {Number} [options.subdivisions=200] The number of points per line, determining the granularity of the curvature .\r\n *\r\n * @exception {DeveloperError} options.stackPartitions must be greater than or equal to one.\r\n * @exception {DeveloperError} options.slicePartitions must be greater than or equal to zero.\r\n * @exception {DeveloperError} options.subdivisions must be greater than or equal to zero.\r\n *\r\n * @example\r\n * const sphere = new Cesium.SphereOutlineGeometry({\r\n * radius : 100.0,\r\n * stackPartitions : 6,\r\n * slicePartitions: 5\r\n * });\r\n * const geometry = Cesium.SphereOutlineGeometry.createGeometry(sphere);\r\n */\r\nfunction SphereOutlineGeometry(options) {\r\n const radius = defaultValue(options.radius, 1.0);\r\n const radii = new Cartesian3(radius, radius, radius);\r\n const ellipsoidOptions = {\r\n radii: radii,\r\n stackPartitions: options.stackPartitions,\r\n slicePartitions: options.slicePartitions,\r\n subdivisions: options.subdivisions,\r\n };\r\n\r\n this._ellipsoidGeometry = new EllipsoidOutlineGeometry(ellipsoidOptions);\r\n this._workerName = \"createSphereOutlineGeometry\";\r\n}\r\n\r\n/**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\nSphereOutlineGeometry.packedLength = EllipsoidOutlineGeometry.packedLength;\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {SphereOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nSphereOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"value\", value);\r\n //>>includeEnd('debug');\r\n\r\n return EllipsoidOutlineGeometry.pack(\r\n value._ellipsoidGeometry,\r\n array,\r\n startingIndex\r\n );\r\n};\r\n\r\nconst scratchEllipsoidGeometry = new EllipsoidOutlineGeometry();\r\nconst scratchOptions = {\r\n radius: undefined,\r\n radii: new Cartesian3(),\r\n stackPartitions: undefined,\r\n slicePartitions: undefined,\r\n subdivisions: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {SphereOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {SphereOutlineGeometry} The modified result parameter or a new SphereOutlineGeometry instance if one was not provided.\r\n */\r\nSphereOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n const ellipsoidGeometry = EllipsoidOutlineGeometry.unpack(\r\n array,\r\n startingIndex,\r\n scratchEllipsoidGeometry\r\n );\r\n scratchOptions.stackPartitions = ellipsoidGeometry._stackPartitions;\r\n scratchOptions.slicePartitions = ellipsoidGeometry._slicePartitions;\r\n scratchOptions.subdivisions = ellipsoidGeometry._subdivisions;\r\n\r\n if (!defined(result)) {\r\n scratchOptions.radius = ellipsoidGeometry._radii.x;\r\n return new SphereOutlineGeometry(scratchOptions);\r\n }\r\n\r\n Cartesian3.clone(ellipsoidGeometry._radii, scratchOptions.radii);\r\n result._ellipsoidGeometry = new EllipsoidOutlineGeometry(scratchOptions);\r\n return result;\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of an outline of a sphere, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {SphereOutlineGeometry} sphereGeometry A description of the sphere outline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nSphereOutlineGeometry.createGeometry = function (sphereGeometry) {\r\n return EllipsoidOutlineGeometry.createGeometry(\r\n sphereGeometry._ellipsoidGeometry\r\n );\r\n};\r\nexport default SphereOutlineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport SphereOutlineGeometry from \"../Core/SphereOutlineGeometry.js\";\r\n\r\nfunction createSphereOutlineGeometry(sphereGeometry, offset) {\r\n if (defined(offset)) {\r\n sphereGeometry = SphereOutlineGeometry.unpack(sphereGeometry, offset);\r\n }\r\n return SphereOutlineGeometry.createGeometry(sphereGeometry);\r\n}\r\nexport default createSphereOutlineGeometry;\r\n"],"names":["defaultValue","Cartesian3","EllipsoidOutlineGeometry","Check","defined"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createTaskProcessorWorker.js b/debug/cesium/Workers/createTaskProcessorWorker.js deleted file mode 100644 index a10e059..0000000 --- a/debug/cesium/Workers/createTaskProcessorWorker.js +++ /dev/null @@ -1,153 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d'], (function (defaultValue) { 'use strict'; - - /** - * Formats an error object into a String. If available, uses name, message, and stack - * properties, otherwise, falls back on toString(). - * - * @function - * - * @param {*} object The item to find in the array. - * @returns {String} A string containing the formatted error. - */ - function formatError(object) { - let result; - - const name = object.name; - const message = object.message; - if (defaultValue.defined(name) && defaultValue.defined(message)) { - result = `${name}: ${message}`; - } else { - result = object.toString(); - } - - const stack = object.stack; - if (defaultValue.defined(stack)) { - result += `\n${stack}`; - } - - return result; - } - - // createXXXGeometry functions may return Geometry or a Promise that resolves to Geometry - // if the function requires access to ApproximateTerrainHeights. - // For fully synchronous functions, just wrapping the function call in a Promise doesn't - // handle errors correctly, hence try-catch - function callAndWrap(workerFunction, parameters, transferableObjects) { - let resultOrPromise; - try { - resultOrPromise = workerFunction(parameters, transferableObjects); - return resultOrPromise; // errors handled by Promise - } catch (e) { - return Promise.reject(e); - } - } - - /** - * Creates an adapter function to allow a calculation function to operate as a Web Worker, - * paired with TaskProcessor, to receive tasks and return results. - * - * @function createTaskProcessorWorker - * - * @param {createTaskProcessorWorker.WorkerFunction} workerFunction The calculation function, - * which takes parameters and returns a result. - * @returns {createTaskProcessorWorker.TaskProcessorWorkerFunction} A function that adapts the - * calculation function to work as a Web Worker onmessage listener with TaskProcessor. - * - * - * @example - * function doCalculation(parameters, transferableObjects) { - * // calculate some result using the inputs in parameters - * return result; - * } - * - * return Cesium.createTaskProcessorWorker(doCalculation); - * // the resulting function is compatible with TaskProcessor - * - * @see TaskProcessor - * @see {@link http://www.w3.org/TR/workers/|Web Workers} - * @see {@link http://www.w3.org/TR/html5/common-dom-interfaces.html#transferable-objects|Transferable objects} - */ - function createTaskProcessorWorker(workerFunction) { - let postMessage; - - return function (event) { - const data = event.data; - - const transferableObjects = []; - const responseMessage = { - id: data.id, - result: undefined, - error: undefined, - }; - - return Promise.resolve( - callAndWrap(workerFunction, data.parameters, transferableObjects) - ) - .then(function (result) { - responseMessage.result = result; - }) - .catch(function (e) { - if (e instanceof Error) { - // Errors can't be posted in a message, copy the properties - responseMessage.error = { - name: e.name, - message: e.message, - stack: e.stack, - }; - } else { - responseMessage.error = e; - } - }) - .finally(function () { - if (!defaultValue.defined(postMessage)) { - postMessage = defaultValue.defaultValue(self.webkitPostMessage, self.postMessage); - } - - if (!data.canTransferArrayBuffer) { - transferableObjects.length = 0; - } - - try { - postMessage(responseMessage, transferableObjects); - } catch (e) { - // something went wrong trying to post the message, post a simpler - // error that we can be sure will be cloneable - responseMessage.result = undefined; - responseMessage.error = `postMessage failed with error: ${formatError( - e - )}\n with responseMessage: ${JSON.stringify(responseMessage)}`; - postMessage(responseMessage); - } - }); - }; - } - - return createTaskProcessorWorker; - -})); -//# sourceMappingURL=createTaskProcessorWorker.js.map diff --git a/debug/cesium/Workers/createTaskProcessorWorker.js.map b/debug/cesium/Workers/createTaskProcessorWorker.js.map deleted file mode 100644 index 2c6109f..0000000 --- a/debug/cesium/Workers/createTaskProcessorWorker.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createTaskProcessorWorker.js","sources":["../../../Source/Core/formatError.js","../../../Source/WorkersES6/createTaskProcessorWorker.js"],"sourcesContent":["import defined from \"./defined.js\";\r\n\r\n/**\r\n * Formats an error object into a String. If available, uses name, message, and stack\r\n * properties, otherwise, falls back on toString().\r\n *\r\n * @function\r\n *\r\n * @param {*} object The item to find in the array.\r\n * @returns {String} A string containing the formatted error.\r\n */\r\nfunction formatError(object) {\r\n let result;\r\n\r\n const name = object.name;\r\n const message = object.message;\r\n if (defined(name) && defined(message)) {\r\n result = `${name}: ${message}`;\r\n } else {\r\n result = object.toString();\r\n }\r\n\r\n const stack = object.stack;\r\n if (defined(stack)) {\r\n result += `\\n${stack}`;\r\n }\r\n\r\n return result;\r\n}\r\nexport default formatError;\r\n","import defaultValue from \"../Core/defaultValue.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport formatError from \"../Core/formatError.js\";\r\n\r\n// createXXXGeometry functions may return Geometry or a Promise that resolves to Geometry\r\n// if the function requires access to ApproximateTerrainHeights.\r\n// For fully synchronous functions, just wrapping the function call in a Promise doesn't\r\n// handle errors correctly, hence try-catch\r\nfunction callAndWrap(workerFunction, parameters, transferableObjects) {\r\n let resultOrPromise;\r\n try {\r\n resultOrPromise = workerFunction(parameters, transferableObjects);\r\n return resultOrPromise; // errors handled by Promise\r\n } catch (e) {\r\n return Promise.reject(e);\r\n }\r\n}\r\n\r\n/**\r\n * Creates an adapter function to allow a calculation function to operate as a Web Worker,\r\n * paired with TaskProcessor, to receive tasks and return results.\r\n *\r\n * @function createTaskProcessorWorker\r\n *\r\n * @param {createTaskProcessorWorker.WorkerFunction} workerFunction The calculation function,\r\n * which takes parameters and returns a result.\r\n * @returns {createTaskProcessorWorker.TaskProcessorWorkerFunction} A function that adapts the\r\n * calculation function to work as a Web Worker onmessage listener with TaskProcessor.\r\n *\r\n *\r\n * @example\r\n * function doCalculation(parameters, transferableObjects) {\r\n * // calculate some result using the inputs in parameters\r\n * return result;\r\n * }\r\n *\r\n * return Cesium.createTaskProcessorWorker(doCalculation);\r\n * // the resulting function is compatible with TaskProcessor\r\n *\r\n * @see TaskProcessor\r\n * @see {@link http://www.w3.org/TR/workers/|Web Workers}\r\n * @see {@link http://www.w3.org/TR/html5/common-dom-interfaces.html#transferable-objects|Transferable objects}\r\n */\r\nfunction createTaskProcessorWorker(workerFunction) {\r\n let postMessage;\r\n\r\n return function (event) {\r\n const data = event.data;\r\n\r\n const transferableObjects = [];\r\n const responseMessage = {\r\n id: data.id,\r\n result: undefined,\r\n error: undefined,\r\n };\r\n\r\n return Promise.resolve(\r\n callAndWrap(workerFunction, data.parameters, transferableObjects)\r\n )\r\n .then(function (result) {\r\n responseMessage.result = result;\r\n })\r\n .catch(function (e) {\r\n if (e instanceof Error) {\r\n // Errors can't be posted in a message, copy the properties\r\n responseMessage.error = {\r\n name: e.name,\r\n message: e.message,\r\n stack: e.stack,\r\n };\r\n } else {\r\n responseMessage.error = e;\r\n }\r\n })\r\n .finally(function () {\r\n if (!defined(postMessage)) {\r\n postMessage = defaultValue(self.webkitPostMessage, self.postMessage);\r\n }\r\n\r\n if (!data.canTransferArrayBuffer) {\r\n transferableObjects.length = 0;\r\n }\r\n\r\n try {\r\n postMessage(responseMessage, transferableObjects);\r\n } catch (e) {\r\n // something went wrong trying to post the message, post a simpler\r\n // error that we can be sure will be cloneable\r\n responseMessage.result = undefined;\r\n responseMessage.error = `postMessage failed with error: ${formatError(\r\n e\r\n )}\\n with responseMessage: ${JSON.stringify(responseMessage)}`;\r\n postMessage(responseMessage);\r\n }\r\n });\r\n };\r\n}\r\n\r\n/**\r\n * A function that performs a calculation in a Web Worker.\r\n * @callback createTaskProcessorWorker.WorkerFunction\r\n *\r\n * @param {Object} parameters Parameters to the calculation.\r\n * @param {Array} transferableObjects An array that should be filled with references to objects inside\r\n * the result that should be transferred back to the main document instead of copied.\r\n * @returns {Object} The result of the calculation.\r\n *\r\n * @example\r\n * function calculate(parameters, transferableObjects) {\r\n * // perform whatever calculation is necessary.\r\n * const typedArray = new Float32Array(0);\r\n *\r\n * // typed arrays are transferable\r\n * transferableObjects.push(typedArray)\r\n *\r\n * return {\r\n * typedArray : typedArray\r\n * };\r\n * }\r\n */\r\n\r\n/**\r\n * A Web Worker message event handler function that handles the interaction with TaskProcessor,\r\n * specifically, task ID management and posting a response message containing the result.\r\n * @callback createTaskProcessorWorker.TaskProcessorWorkerFunction\r\n *\r\n * @param {Object} event The onmessage event object.\r\n */\r\nexport default createTaskProcessorWorker;\r\n"],"names":["defined","defaultValue"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createVectorTileClampedPolylines.js b/debug/cesium/Workers/createVectorTileClampedPolylines.js deleted file mode 100644 index 46b1c33..0000000 --- a/debug/cesium/Workers/createVectorTileClampedPolylines.js +++ /dev/null @@ -1,561 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./AttributeCompression-e9888cb8', './Matrix3-f22b0303', './combine-4598d225', './IndexDatatype-b4e5cf89', './Math-9be8b918', './Matrix2-036c77dd', './createTaskProcessorWorker', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './Check-d10e5f2e', './WebGLConstants-f27a5e29', './RuntimeError-e5c6a8b9'], (function (AttributeCompression, Matrix3, combine, IndexDatatype, Math$1, Matrix2, createTaskProcessorWorker, ComponentDatatype, defaultValue, Check, WebGLConstants, RuntimeError) { 'use strict'; - - const MAX_SHORT = 32767; - const MITER_BREAK = Math.cos(Math$1.CesiumMath.toRadians(150.0)); - - const scratchBVCartographic = new Matrix3.Cartographic(); - const scratchEncodedPosition = new Matrix3.Cartesian3(); - - function decodePositions( - uBuffer, - vBuffer, - heightBuffer, - rectangle, - minimumHeight, - maximumHeight, - ellipsoid - ) { - const positionsLength = uBuffer.length; - const decodedPositions = new Float64Array(positionsLength * 3); - for (let i = 0; i < positionsLength; ++i) { - const u = uBuffer[i]; - const v = vBuffer[i]; - const h = heightBuffer[i]; - - const lon = Math$1.CesiumMath.lerp(rectangle.west, rectangle.east, u / MAX_SHORT); - const lat = Math$1.CesiumMath.lerp( - rectangle.south, - rectangle.north, - v / MAX_SHORT - ); - const alt = Math$1.CesiumMath.lerp(minimumHeight, maximumHeight, h / MAX_SHORT); - - const cartographic = Matrix3.Cartographic.fromRadians( - lon, - lat, - alt, - scratchBVCartographic - ); - const decodedPosition = ellipsoid.cartographicToCartesian( - cartographic, - scratchEncodedPosition - ); - Matrix3.Cartesian3.pack(decodedPosition, decodedPositions, i * 3); - } - return decodedPositions; - } - - function getPositionOffsets(counts) { - const countsLength = counts.length; - const positionOffsets = new Uint32Array(countsLength + 1); - let offset = 0; - for (let i = 0; i < countsLength; ++i) { - positionOffsets[i] = offset; - offset += counts[i]; - } - positionOffsets[countsLength] = offset; - return positionOffsets; - } - - const previousCompressedCartographicScratch = new Matrix3.Cartographic(); - const currentCompressedCartographicScratch = new Matrix3.Cartographic(); - function removeDuplicates(uBuffer, vBuffer, heightBuffer, counts) { - const countsLength = counts.length; - const positionsLength = uBuffer.length; - const markRemoval = new Uint8Array(positionsLength); - const previous = previousCompressedCartographicScratch; - const current = currentCompressedCartographicScratch; - let offset = 0; - for (let i = 0; i < countsLength; i++) { - const count = counts[i]; - let updatedCount = count; - for (let j = 1; j < count; j++) { - const index = offset + j; - const previousIndex = index - 1; - current.longitude = uBuffer[index]; - current.latitude = vBuffer[index]; - previous.longitude = uBuffer[previousIndex]; - previous.latitude = vBuffer[previousIndex]; - - if (Matrix3.Cartographic.equals(current, previous)) { - updatedCount--; - markRemoval[previousIndex] = 1; - } - } - counts[i] = updatedCount; - offset += count; - } - - let nextAvailableIndex = 0; - for (let k = 0; k < positionsLength; k++) { - if (markRemoval[k] !== 1) { - uBuffer[nextAvailableIndex] = uBuffer[k]; - vBuffer[nextAvailableIndex] = vBuffer[k]; - heightBuffer[nextAvailableIndex] = heightBuffer[k]; - nextAvailableIndex++; - } - } - } - - function VertexAttributesAndIndices(volumesCount) { - const vertexCount = volumesCount * 8; - const vec3Floats = vertexCount * 3; - const vec4Floats = vertexCount * 4; - this.startEllipsoidNormals = new Float32Array(vec3Floats); - this.endEllipsoidNormals = new Float32Array(vec3Floats); - this.startPositionAndHeights = new Float32Array(vec4Floats); - this.startFaceNormalAndVertexCornerIds = new Float32Array(vec4Floats); - this.endPositionAndHeights = new Float32Array(vec4Floats); - this.endFaceNormalAndHalfWidths = new Float32Array(vec4Floats); - this.vertexBatchIds = new Uint16Array(vertexCount); - - this.indices = IndexDatatype.IndexDatatype.createTypedArray(vertexCount, 36 * volumesCount); - - this.vec3Offset = 0; - this.vec4Offset = 0; - this.batchIdOffset = 0; - this.indexOffset = 0; - - this.volumeStartIndex = 0; - } - - const towardCurrScratch = new Matrix3.Cartesian3(); - const towardNextScratch = new Matrix3.Cartesian3(); - function computeMiteredNormal( - previousPosition, - position, - nextPosition, - ellipsoidSurfaceNormal, - result - ) { - const towardNext = Matrix3.Cartesian3.subtract( - nextPosition, - position, - towardNextScratch - ); - let towardCurr = Matrix3.Cartesian3.subtract( - position, - previousPosition, - towardCurrScratch - ); - Matrix3.Cartesian3.normalize(towardNext, towardNext); - Matrix3.Cartesian3.normalize(towardCurr, towardCurr); - - if (Matrix3.Cartesian3.dot(towardNext, towardCurr) < MITER_BREAK) { - towardCurr = Matrix3.Cartesian3.multiplyByScalar( - towardCurr, - -1.0, - towardCurrScratch - ); - } - - Matrix3.Cartesian3.add(towardNext, towardCurr, result); - if (Matrix3.Cartesian3.equals(result, Matrix3.Cartesian3.ZERO)) { - result = Matrix3.Cartesian3.subtract(previousPosition, position); - } - - // Make sure the normal is orthogonal to the ellipsoid surface normal - Matrix3.Cartesian3.cross(result, ellipsoidSurfaceNormal, result); - Matrix3.Cartesian3.cross(ellipsoidSurfaceNormal, result, result); - Matrix3.Cartesian3.normalize(result, result); - return result; - } - - // Winding order is reversed so each segment's volume is inside-out - // 3-----------7 - // /| left /| - // / | 1 / | - // 2-----------6 5 end - // | / | / - // start |/ right |/ - // 0-----------4 - // - const REFERENCE_INDICES = [ - 0, - 2, - 6, - 0, - 6, - 4, // right - 0, - 1, - 3, - 0, - 3, - 2, // start face - 0, - 4, - 5, - 0, - 5, - 1, // bottom - 5, - 3, - 1, - 5, - 7, - 3, // left - 7, - 5, - 4, - 7, - 4, - 6, // end face - 7, - 6, - 2, - 7, - 2, - 3, // top - ]; - const REFERENCE_INDICES_LENGTH = REFERENCE_INDICES.length; - - const positionScratch = new Matrix3.Cartesian3(); - const scratchStartEllipsoidNormal = new Matrix3.Cartesian3(); - const scratchStartFaceNormal = new Matrix3.Cartesian3(); - const scratchEndEllipsoidNormal = new Matrix3.Cartesian3(); - const scratchEndFaceNormal = new Matrix3.Cartesian3(); - VertexAttributesAndIndices.prototype.addVolume = function ( - preStartRTC, - startRTC, - endRTC, - postEndRTC, - startHeight, - endHeight, - halfWidth, - batchId, - center, - ellipsoid - ) { - let position = Matrix3.Cartesian3.add(startRTC, center, positionScratch); - const startEllipsoidNormal = ellipsoid.geodeticSurfaceNormal( - position, - scratchStartEllipsoidNormal - ); - position = Matrix3.Cartesian3.add(endRTC, center, positionScratch); - const endEllipsoidNormal = ellipsoid.geodeticSurfaceNormal( - position, - scratchEndEllipsoidNormal - ); - - const startFaceNormal = computeMiteredNormal( - preStartRTC, - startRTC, - endRTC, - startEllipsoidNormal, - scratchStartFaceNormal - ); - const endFaceNormal = computeMiteredNormal( - postEndRTC, - endRTC, - startRTC, - endEllipsoidNormal, - scratchEndFaceNormal - ); - - const startEllipsoidNormals = this.startEllipsoidNormals; - const endEllipsoidNormals = this.endEllipsoidNormals; - const startPositionAndHeights = this.startPositionAndHeights; - const startFaceNormalAndVertexCornerIds = this - .startFaceNormalAndVertexCornerIds; - const endPositionAndHeights = this.endPositionAndHeights; - const endFaceNormalAndHalfWidths = this.endFaceNormalAndHalfWidths; - const vertexBatchIds = this.vertexBatchIds; - - let batchIdOffset = this.batchIdOffset; - let vec3Offset = this.vec3Offset; - let vec4Offset = this.vec4Offset; - - let i; - for (i = 0; i < 8; i++) { - Matrix3.Cartesian3.pack(startEllipsoidNormal, startEllipsoidNormals, vec3Offset); - Matrix3.Cartesian3.pack(endEllipsoidNormal, endEllipsoidNormals, vec3Offset); - - Matrix3.Cartesian3.pack(startRTC, startPositionAndHeights, vec4Offset); - startPositionAndHeights[vec4Offset + 3] = startHeight; - - Matrix3.Cartesian3.pack(endRTC, endPositionAndHeights, vec4Offset); - endPositionAndHeights[vec4Offset + 3] = endHeight; - - Matrix3.Cartesian3.pack( - startFaceNormal, - startFaceNormalAndVertexCornerIds, - vec4Offset - ); - startFaceNormalAndVertexCornerIds[vec4Offset + 3] = i; - - Matrix3.Cartesian3.pack(endFaceNormal, endFaceNormalAndHalfWidths, vec4Offset); - endFaceNormalAndHalfWidths[vec4Offset + 3] = halfWidth; - - vertexBatchIds[batchIdOffset++] = batchId; - - vec3Offset += 3; - vec4Offset += 4; - } - - this.batchIdOffset = batchIdOffset; - this.vec3Offset = vec3Offset; - this.vec4Offset = vec4Offset; - const indices = this.indices; - const volumeStartIndex = this.volumeStartIndex; - - const indexOffset = this.indexOffset; - for (i = 0; i < REFERENCE_INDICES_LENGTH; i++) { - indices[indexOffset + i] = REFERENCE_INDICES[i] + volumeStartIndex; - } - - this.volumeStartIndex += 8; - this.indexOffset += REFERENCE_INDICES_LENGTH; - }; - - const scratchRectangle = new Matrix2.Rectangle(); - const scratchEllipsoid = new Matrix3.Ellipsoid(); - const scratchCenter = new Matrix3.Cartesian3(); - - const scratchPrev = new Matrix3.Cartesian3(); - const scratchP0 = new Matrix3.Cartesian3(); - const scratchP1 = new Matrix3.Cartesian3(); - const scratchNext = new Matrix3.Cartesian3(); - function createVectorTileClampedPolylines(parameters, transferableObjects) { - const encodedPositions = new Uint16Array(parameters.positions); - const widths = new Uint16Array(parameters.widths); - const counts = new Uint32Array(parameters.counts); - const batchIds = new Uint16Array(parameters.batchIds); - - // Unpack tile decoding parameters - const rectangle = scratchRectangle; - const ellipsoid = scratchEllipsoid; - const center = scratchCenter; - const packedBuffer = new Float64Array(parameters.packedBuffer); - - let offset = 0; - const minimumHeight = packedBuffer[offset++]; - const maximumHeight = packedBuffer[offset++]; - - Matrix2.Rectangle.unpack(packedBuffer, offset, rectangle); - offset += Matrix2.Rectangle.packedLength; - - Matrix3.Ellipsoid.unpack(packedBuffer, offset, ellipsoid); - offset += Matrix3.Ellipsoid.packedLength; - - Matrix3.Cartesian3.unpack(packedBuffer, offset, center); - - let i; - - // Unpack positions and generate volumes - let positionsLength = encodedPositions.length / 3; - const uBuffer = encodedPositions.subarray(0, positionsLength); - const vBuffer = encodedPositions.subarray( - positionsLength, - 2 * positionsLength - ); - const heightBuffer = encodedPositions.subarray( - 2 * positionsLength, - 3 * positionsLength - ); - AttributeCompression.AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer); - - removeDuplicates(uBuffer, vBuffer, heightBuffer, counts); - - // Figure out how many volumes and how many vertices there will be. - const countsLength = counts.length; - let volumesCount = 0; - for (i = 0; i < countsLength; i++) { - const polylinePositionCount = counts[i]; - volumesCount += polylinePositionCount - 1; - } - - const attribsAndIndices = new VertexAttributesAndIndices(volumesCount); - - const positions = decodePositions( - uBuffer, - vBuffer, - heightBuffer, - rectangle, - minimumHeight, - maximumHeight, - ellipsoid); - - positionsLength = uBuffer.length; - const positionsRTC = new Float32Array(positionsLength * 3); - for (i = 0; i < positionsLength; ++i) { - positionsRTC[i * 3] = positions[i * 3] - center.x; - positionsRTC[i * 3 + 1] = positions[i * 3 + 1] - center.y; - positionsRTC[i * 3 + 2] = positions[i * 3 + 2] - center.z; - } - - let currentPositionIndex = 0; - let currentHeightIndex = 0; - for (i = 0; i < countsLength; i++) { - const polylineVolumeCount = counts[i] - 1; - const halfWidth = widths[i] * 0.5; - const batchId = batchIds[i]; - const volumeFirstPositionIndex = currentPositionIndex; - for (let j = 0; j < polylineVolumeCount; j++) { - const volumeStart = Matrix3.Cartesian3.unpack( - positionsRTC, - currentPositionIndex, - scratchP0 - ); - const volumeEnd = Matrix3.Cartesian3.unpack( - positionsRTC, - currentPositionIndex + 3, - scratchP1 - ); - - let startHeight = heightBuffer[currentHeightIndex]; - let endHeight = heightBuffer[currentHeightIndex + 1]; - startHeight = Math$1.CesiumMath.lerp( - minimumHeight, - maximumHeight, - startHeight / MAX_SHORT - ); - endHeight = Math$1.CesiumMath.lerp( - minimumHeight, - maximumHeight, - endHeight / MAX_SHORT - ); - - currentHeightIndex++; - - let preStart = scratchPrev; - let postEnd = scratchNext; - if (j === 0) { - // Check if this volume is like a loop - const finalPositionIndex = - volumeFirstPositionIndex + polylineVolumeCount * 3; - const finalPosition = Matrix3.Cartesian3.unpack( - positionsRTC, - finalPositionIndex, - scratchPrev - ); - if (Matrix3.Cartesian3.equals(finalPosition, volumeStart)) { - Matrix3.Cartesian3.unpack(positionsRTC, finalPositionIndex - 3, preStart); - } else { - const offsetPastStart = Matrix3.Cartesian3.subtract( - volumeStart, - volumeEnd, - scratchPrev - ); - preStart = Matrix3.Cartesian3.add(offsetPastStart, volumeStart, scratchPrev); - } - } else { - Matrix3.Cartesian3.unpack(positionsRTC, currentPositionIndex - 3, preStart); - } - - if (j === polylineVolumeCount - 1) { - // Check if this volume is like a loop - const firstPosition = Matrix3.Cartesian3.unpack( - positionsRTC, - volumeFirstPositionIndex, - scratchNext - ); - if (Matrix3.Cartesian3.equals(firstPosition, volumeEnd)) { - Matrix3.Cartesian3.unpack( - positionsRTC, - volumeFirstPositionIndex + 3, - postEnd - ); - } else { - const offsetPastEnd = Matrix3.Cartesian3.subtract( - volumeEnd, - volumeStart, - scratchNext - ); - postEnd = Matrix3.Cartesian3.add(offsetPastEnd, volumeEnd, scratchNext); - } - } else { - Matrix3.Cartesian3.unpack(positionsRTC, currentPositionIndex + 6, postEnd); - } - - attribsAndIndices.addVolume( - preStart, - volumeStart, - volumeEnd, - postEnd, - startHeight, - endHeight, - halfWidth, - batchId, - center, - ellipsoid - ); - - currentPositionIndex += 3; - } - currentPositionIndex += 3; - currentHeightIndex++; - } - - const indices = attribsAndIndices.indices; - - transferableObjects.push(attribsAndIndices.startEllipsoidNormals.buffer); - transferableObjects.push(attribsAndIndices.endEllipsoidNormals.buffer); - transferableObjects.push(attribsAndIndices.startPositionAndHeights.buffer); - transferableObjects.push( - attribsAndIndices.startFaceNormalAndVertexCornerIds.buffer - ); - transferableObjects.push(attribsAndIndices.endPositionAndHeights.buffer); - transferableObjects.push(attribsAndIndices.endFaceNormalAndHalfWidths.buffer); - transferableObjects.push(attribsAndIndices.vertexBatchIds.buffer); - transferableObjects.push(indices.buffer); - - let results = { - indexDatatype: - indices.BYTES_PER_ELEMENT === 2 - ? IndexDatatype.IndexDatatype.UNSIGNED_SHORT - : IndexDatatype.IndexDatatype.UNSIGNED_INT, - startEllipsoidNormals: attribsAndIndices.startEllipsoidNormals.buffer, - endEllipsoidNormals: attribsAndIndices.endEllipsoidNormals.buffer, - startPositionAndHeights: attribsAndIndices.startPositionAndHeights.buffer, - startFaceNormalAndVertexCornerIds: - attribsAndIndices.startFaceNormalAndVertexCornerIds.buffer, - endPositionAndHeights: attribsAndIndices.endPositionAndHeights.buffer, - endFaceNormalAndHalfWidths: - attribsAndIndices.endFaceNormalAndHalfWidths.buffer, - vertexBatchIds: attribsAndIndices.vertexBatchIds.buffer, - indices: indices.buffer, - }; - - if (parameters.keepDecodedPositions) { - const positionOffsets = getPositionOffsets(counts); - transferableObjects.push(positions.buffer, positionOffsets.buffer); - results = combine.combine(results, { - decodedPositions: positions.buffer, - decodedPositionOffsets: positionOffsets.buffer, - }); - } - - return results; - } - var createVectorTileClampedPolylines$1 = createTaskProcessorWorker(createVectorTileClampedPolylines); - - return createVectorTileClampedPolylines$1; - -})); -//# sourceMappingURL=createVectorTileClampedPolylines.js.map diff --git a/debug/cesium/Workers/createVectorTileClampedPolylines.js.map b/debug/cesium/Workers/createVectorTileClampedPolylines.js.map deleted file mode 100644 index a8b2cea..0000000 --- a/debug/cesium/Workers/createVectorTileClampedPolylines.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createVectorTileClampedPolylines.js","sources":["../../../Source/WorkersES6/createVectorTileClampedPolylines.js"],"sourcesContent":["import AttributeCompression from \"../Core/AttributeCompression.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Cartographic from \"../Core/Cartographic.js\";\r\nimport combine from \"../Core/combine.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\r\nimport CesiumMath from \"../Core/Math.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst MAX_SHORT = 32767;\r\nconst MITER_BREAK = Math.cos(CesiumMath.toRadians(150.0));\r\n\r\nconst scratchBVCartographic = new Cartographic();\r\nconst scratchEncodedPosition = new Cartesian3();\r\n\r\nfunction decodePositions(\r\n uBuffer,\r\n vBuffer,\r\n heightBuffer,\r\n rectangle,\r\n minimumHeight,\r\n maximumHeight,\r\n ellipsoid\r\n) {\r\n const positionsLength = uBuffer.length;\r\n const decodedPositions = new Float64Array(positionsLength * 3);\r\n for (let i = 0; i < positionsLength; ++i) {\r\n const u = uBuffer[i];\r\n const v = vBuffer[i];\r\n const h = heightBuffer[i];\r\n\r\n const lon = CesiumMath.lerp(rectangle.west, rectangle.east, u / MAX_SHORT);\r\n const lat = CesiumMath.lerp(\r\n rectangle.south,\r\n rectangle.north,\r\n v / MAX_SHORT\r\n );\r\n const alt = CesiumMath.lerp(minimumHeight, maximumHeight, h / MAX_SHORT);\r\n\r\n const cartographic = Cartographic.fromRadians(\r\n lon,\r\n lat,\r\n alt,\r\n scratchBVCartographic\r\n );\r\n const decodedPosition = ellipsoid.cartographicToCartesian(\r\n cartographic,\r\n scratchEncodedPosition\r\n );\r\n Cartesian3.pack(decodedPosition, decodedPositions, i * 3);\r\n }\r\n return decodedPositions;\r\n}\r\n\r\nfunction getPositionOffsets(counts) {\r\n const countsLength = counts.length;\r\n const positionOffsets = new Uint32Array(countsLength + 1);\r\n let offset = 0;\r\n for (let i = 0; i < countsLength; ++i) {\r\n positionOffsets[i] = offset;\r\n offset += counts[i];\r\n }\r\n positionOffsets[countsLength] = offset;\r\n return positionOffsets;\r\n}\r\n\r\nconst previousCompressedCartographicScratch = new Cartographic();\r\nconst currentCompressedCartographicScratch = new Cartographic();\r\nfunction removeDuplicates(uBuffer, vBuffer, heightBuffer, counts) {\r\n const countsLength = counts.length;\r\n const positionsLength = uBuffer.length;\r\n const markRemoval = new Uint8Array(positionsLength);\r\n const previous = previousCompressedCartographicScratch;\r\n const current = currentCompressedCartographicScratch;\r\n let offset = 0;\r\n for (let i = 0; i < countsLength; i++) {\r\n const count = counts[i];\r\n let updatedCount = count;\r\n for (let j = 1; j < count; j++) {\r\n const index = offset + j;\r\n const previousIndex = index - 1;\r\n current.longitude = uBuffer[index];\r\n current.latitude = vBuffer[index];\r\n previous.longitude = uBuffer[previousIndex];\r\n previous.latitude = vBuffer[previousIndex];\r\n\r\n if (Cartographic.equals(current, previous)) {\r\n updatedCount--;\r\n markRemoval[previousIndex] = 1;\r\n }\r\n }\r\n counts[i] = updatedCount;\r\n offset += count;\r\n }\r\n\r\n let nextAvailableIndex = 0;\r\n for (let k = 0; k < positionsLength; k++) {\r\n if (markRemoval[k] !== 1) {\r\n uBuffer[nextAvailableIndex] = uBuffer[k];\r\n vBuffer[nextAvailableIndex] = vBuffer[k];\r\n heightBuffer[nextAvailableIndex] = heightBuffer[k];\r\n nextAvailableIndex++;\r\n }\r\n }\r\n}\r\n\r\nfunction VertexAttributesAndIndices(volumesCount) {\r\n const vertexCount = volumesCount * 8;\r\n const vec3Floats = vertexCount * 3;\r\n const vec4Floats = vertexCount * 4;\r\n this.startEllipsoidNormals = new Float32Array(vec3Floats);\r\n this.endEllipsoidNormals = new Float32Array(vec3Floats);\r\n this.startPositionAndHeights = new Float32Array(vec4Floats);\r\n this.startFaceNormalAndVertexCornerIds = new Float32Array(vec4Floats);\r\n this.endPositionAndHeights = new Float32Array(vec4Floats);\r\n this.endFaceNormalAndHalfWidths = new Float32Array(vec4Floats);\r\n this.vertexBatchIds = new Uint16Array(vertexCount);\r\n\r\n this.indices = IndexDatatype.createTypedArray(vertexCount, 36 * volumesCount);\r\n\r\n this.vec3Offset = 0;\r\n this.vec4Offset = 0;\r\n this.batchIdOffset = 0;\r\n this.indexOffset = 0;\r\n\r\n this.volumeStartIndex = 0;\r\n}\r\n\r\nconst towardCurrScratch = new Cartesian3();\r\nconst towardNextScratch = new Cartesian3();\r\nfunction computeMiteredNormal(\r\n previousPosition,\r\n position,\r\n nextPosition,\r\n ellipsoidSurfaceNormal,\r\n result\r\n) {\r\n const towardNext = Cartesian3.subtract(\r\n nextPosition,\r\n position,\r\n towardNextScratch\r\n );\r\n let towardCurr = Cartesian3.subtract(\r\n position,\r\n previousPosition,\r\n towardCurrScratch\r\n );\r\n Cartesian3.normalize(towardNext, towardNext);\r\n Cartesian3.normalize(towardCurr, towardCurr);\r\n\r\n if (Cartesian3.dot(towardNext, towardCurr) < MITER_BREAK) {\r\n towardCurr = Cartesian3.multiplyByScalar(\r\n towardCurr,\r\n -1.0,\r\n towardCurrScratch\r\n );\r\n }\r\n\r\n Cartesian3.add(towardNext, towardCurr, result);\r\n if (Cartesian3.equals(result, Cartesian3.ZERO)) {\r\n result = Cartesian3.subtract(previousPosition, position);\r\n }\r\n\r\n // Make sure the normal is orthogonal to the ellipsoid surface normal\r\n Cartesian3.cross(result, ellipsoidSurfaceNormal, result);\r\n Cartesian3.cross(ellipsoidSurfaceNormal, result, result);\r\n Cartesian3.normalize(result, result);\r\n return result;\r\n}\r\n\r\n// Winding order is reversed so each segment's volume is inside-out\r\n// 3-----------7\r\n// /| left /|\r\n// / | 1 / |\r\n// 2-----------6 5 end\r\n// | / | /\r\n// start |/ right |/\r\n// 0-----------4\r\n//\r\nconst REFERENCE_INDICES = [\r\n 0,\r\n 2,\r\n 6,\r\n 0,\r\n 6,\r\n 4, // right\r\n 0,\r\n 1,\r\n 3,\r\n 0,\r\n 3,\r\n 2, // start face\r\n 0,\r\n 4,\r\n 5,\r\n 0,\r\n 5,\r\n 1, // bottom\r\n 5,\r\n 3,\r\n 1,\r\n 5,\r\n 7,\r\n 3, // left\r\n 7,\r\n 5,\r\n 4,\r\n 7,\r\n 4,\r\n 6, // end face\r\n 7,\r\n 6,\r\n 2,\r\n 7,\r\n 2,\r\n 3, // top\r\n];\r\nconst REFERENCE_INDICES_LENGTH = REFERENCE_INDICES.length;\r\n\r\nconst positionScratch = new Cartesian3();\r\nconst scratchStartEllipsoidNormal = new Cartesian3();\r\nconst scratchStartFaceNormal = new Cartesian3();\r\nconst scratchEndEllipsoidNormal = new Cartesian3();\r\nconst scratchEndFaceNormal = new Cartesian3();\r\nVertexAttributesAndIndices.prototype.addVolume = function (\r\n preStartRTC,\r\n startRTC,\r\n endRTC,\r\n postEndRTC,\r\n startHeight,\r\n endHeight,\r\n halfWidth,\r\n batchId,\r\n center,\r\n ellipsoid\r\n) {\r\n let position = Cartesian3.add(startRTC, center, positionScratch);\r\n const startEllipsoidNormal = ellipsoid.geodeticSurfaceNormal(\r\n position,\r\n scratchStartEllipsoidNormal\r\n );\r\n position = Cartesian3.add(endRTC, center, positionScratch);\r\n const endEllipsoidNormal = ellipsoid.geodeticSurfaceNormal(\r\n position,\r\n scratchEndEllipsoidNormal\r\n );\r\n\r\n const startFaceNormal = computeMiteredNormal(\r\n preStartRTC,\r\n startRTC,\r\n endRTC,\r\n startEllipsoidNormal,\r\n scratchStartFaceNormal\r\n );\r\n const endFaceNormal = computeMiteredNormal(\r\n postEndRTC,\r\n endRTC,\r\n startRTC,\r\n endEllipsoidNormal,\r\n scratchEndFaceNormal\r\n );\r\n\r\n const startEllipsoidNormals = this.startEllipsoidNormals;\r\n const endEllipsoidNormals = this.endEllipsoidNormals;\r\n const startPositionAndHeights = this.startPositionAndHeights;\r\n const startFaceNormalAndVertexCornerIds = this\r\n .startFaceNormalAndVertexCornerIds;\r\n const endPositionAndHeights = this.endPositionAndHeights;\r\n const endFaceNormalAndHalfWidths = this.endFaceNormalAndHalfWidths;\r\n const vertexBatchIds = this.vertexBatchIds;\r\n\r\n let batchIdOffset = this.batchIdOffset;\r\n let vec3Offset = this.vec3Offset;\r\n let vec4Offset = this.vec4Offset;\r\n\r\n let i;\r\n for (i = 0; i < 8; i++) {\r\n Cartesian3.pack(startEllipsoidNormal, startEllipsoidNormals, vec3Offset);\r\n Cartesian3.pack(endEllipsoidNormal, endEllipsoidNormals, vec3Offset);\r\n\r\n Cartesian3.pack(startRTC, startPositionAndHeights, vec4Offset);\r\n startPositionAndHeights[vec4Offset + 3] = startHeight;\r\n\r\n Cartesian3.pack(endRTC, endPositionAndHeights, vec4Offset);\r\n endPositionAndHeights[vec4Offset + 3] = endHeight;\r\n\r\n Cartesian3.pack(\r\n startFaceNormal,\r\n startFaceNormalAndVertexCornerIds,\r\n vec4Offset\r\n );\r\n startFaceNormalAndVertexCornerIds[vec4Offset + 3] = i;\r\n\r\n Cartesian3.pack(endFaceNormal, endFaceNormalAndHalfWidths, vec4Offset);\r\n endFaceNormalAndHalfWidths[vec4Offset + 3] = halfWidth;\r\n\r\n vertexBatchIds[batchIdOffset++] = batchId;\r\n\r\n vec3Offset += 3;\r\n vec4Offset += 4;\r\n }\r\n\r\n this.batchIdOffset = batchIdOffset;\r\n this.vec3Offset = vec3Offset;\r\n this.vec4Offset = vec4Offset;\r\n const indices = this.indices;\r\n const volumeStartIndex = this.volumeStartIndex;\r\n\r\n const indexOffset = this.indexOffset;\r\n for (i = 0; i < REFERENCE_INDICES_LENGTH; i++) {\r\n indices[indexOffset + i] = REFERENCE_INDICES[i] + volumeStartIndex;\r\n }\r\n\r\n this.volumeStartIndex += 8;\r\n this.indexOffset += REFERENCE_INDICES_LENGTH;\r\n};\r\n\r\nconst scratchRectangle = new Rectangle();\r\nconst scratchEllipsoid = new Ellipsoid();\r\nconst scratchCenter = new Cartesian3();\r\n\r\nconst scratchPrev = new Cartesian3();\r\nconst scratchP0 = new Cartesian3();\r\nconst scratchP1 = new Cartesian3();\r\nconst scratchNext = new Cartesian3();\r\nfunction createVectorTileClampedPolylines(parameters, transferableObjects) {\r\n const encodedPositions = new Uint16Array(parameters.positions);\r\n const widths = new Uint16Array(parameters.widths);\r\n const counts = new Uint32Array(parameters.counts);\r\n const batchIds = new Uint16Array(parameters.batchIds);\r\n\r\n // Unpack tile decoding parameters\r\n const rectangle = scratchRectangle;\r\n const ellipsoid = scratchEllipsoid;\r\n const center = scratchCenter;\r\n const packedBuffer = new Float64Array(parameters.packedBuffer);\r\n\r\n let offset = 0;\r\n const minimumHeight = packedBuffer[offset++];\r\n const maximumHeight = packedBuffer[offset++];\r\n\r\n Rectangle.unpack(packedBuffer, offset, rectangle);\r\n offset += Rectangle.packedLength;\r\n\r\n Ellipsoid.unpack(packedBuffer, offset, ellipsoid);\r\n offset += Ellipsoid.packedLength;\r\n\r\n Cartesian3.unpack(packedBuffer, offset, center);\r\n\r\n let i;\r\n\r\n // Unpack positions and generate volumes\r\n let positionsLength = encodedPositions.length / 3;\r\n const uBuffer = encodedPositions.subarray(0, positionsLength);\r\n const vBuffer = encodedPositions.subarray(\r\n positionsLength,\r\n 2 * positionsLength\r\n );\r\n const heightBuffer = encodedPositions.subarray(\r\n 2 * positionsLength,\r\n 3 * positionsLength\r\n );\r\n AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\r\n\r\n removeDuplicates(uBuffer, vBuffer, heightBuffer, counts);\r\n\r\n // Figure out how many volumes and how many vertices there will be.\r\n const countsLength = counts.length;\r\n let volumesCount = 0;\r\n for (i = 0; i < countsLength; i++) {\r\n const polylinePositionCount = counts[i];\r\n volumesCount += polylinePositionCount - 1;\r\n }\r\n\r\n const attribsAndIndices = new VertexAttributesAndIndices(volumesCount);\r\n\r\n const positions = decodePositions(\r\n uBuffer,\r\n vBuffer,\r\n heightBuffer,\r\n rectangle,\r\n minimumHeight,\r\n maximumHeight,\r\n ellipsoid,\r\n center\r\n );\r\n\r\n positionsLength = uBuffer.length;\r\n const positionsRTC = new Float32Array(positionsLength * 3);\r\n for (i = 0; i < positionsLength; ++i) {\r\n positionsRTC[i * 3] = positions[i * 3] - center.x;\r\n positionsRTC[i * 3 + 1] = positions[i * 3 + 1] - center.y;\r\n positionsRTC[i * 3 + 2] = positions[i * 3 + 2] - center.z;\r\n }\r\n\r\n let currentPositionIndex = 0;\r\n let currentHeightIndex = 0;\r\n for (i = 0; i < countsLength; i++) {\r\n const polylineVolumeCount = counts[i] - 1;\r\n const halfWidth = widths[i] * 0.5;\r\n const batchId = batchIds[i];\r\n const volumeFirstPositionIndex = currentPositionIndex;\r\n for (let j = 0; j < polylineVolumeCount; j++) {\r\n const volumeStart = Cartesian3.unpack(\r\n positionsRTC,\r\n currentPositionIndex,\r\n scratchP0\r\n );\r\n const volumeEnd = Cartesian3.unpack(\r\n positionsRTC,\r\n currentPositionIndex + 3,\r\n scratchP1\r\n );\r\n\r\n let startHeight = heightBuffer[currentHeightIndex];\r\n let endHeight = heightBuffer[currentHeightIndex + 1];\r\n startHeight = CesiumMath.lerp(\r\n minimumHeight,\r\n maximumHeight,\r\n startHeight / MAX_SHORT\r\n );\r\n endHeight = CesiumMath.lerp(\r\n minimumHeight,\r\n maximumHeight,\r\n endHeight / MAX_SHORT\r\n );\r\n\r\n currentHeightIndex++;\r\n\r\n let preStart = scratchPrev;\r\n let postEnd = scratchNext;\r\n if (j === 0) {\r\n // Check if this volume is like a loop\r\n const finalPositionIndex =\r\n volumeFirstPositionIndex + polylineVolumeCount * 3;\r\n const finalPosition = Cartesian3.unpack(\r\n positionsRTC,\r\n finalPositionIndex,\r\n scratchPrev\r\n );\r\n if (Cartesian3.equals(finalPosition, volumeStart)) {\r\n Cartesian3.unpack(positionsRTC, finalPositionIndex - 3, preStart);\r\n } else {\r\n const offsetPastStart = Cartesian3.subtract(\r\n volumeStart,\r\n volumeEnd,\r\n scratchPrev\r\n );\r\n preStart = Cartesian3.add(offsetPastStart, volumeStart, scratchPrev);\r\n }\r\n } else {\r\n Cartesian3.unpack(positionsRTC, currentPositionIndex - 3, preStart);\r\n }\r\n\r\n if (j === polylineVolumeCount - 1) {\r\n // Check if this volume is like a loop\r\n const firstPosition = Cartesian3.unpack(\r\n positionsRTC,\r\n volumeFirstPositionIndex,\r\n scratchNext\r\n );\r\n if (Cartesian3.equals(firstPosition, volumeEnd)) {\r\n Cartesian3.unpack(\r\n positionsRTC,\r\n volumeFirstPositionIndex + 3,\r\n postEnd\r\n );\r\n } else {\r\n const offsetPastEnd = Cartesian3.subtract(\r\n volumeEnd,\r\n volumeStart,\r\n scratchNext\r\n );\r\n postEnd = Cartesian3.add(offsetPastEnd, volumeEnd, scratchNext);\r\n }\r\n } else {\r\n Cartesian3.unpack(positionsRTC, currentPositionIndex + 6, postEnd);\r\n }\r\n\r\n attribsAndIndices.addVolume(\r\n preStart,\r\n volumeStart,\r\n volumeEnd,\r\n postEnd,\r\n startHeight,\r\n endHeight,\r\n halfWidth,\r\n batchId,\r\n center,\r\n ellipsoid\r\n );\r\n\r\n currentPositionIndex += 3;\r\n }\r\n currentPositionIndex += 3;\r\n currentHeightIndex++;\r\n }\r\n\r\n const indices = attribsAndIndices.indices;\r\n\r\n transferableObjects.push(attribsAndIndices.startEllipsoidNormals.buffer);\r\n transferableObjects.push(attribsAndIndices.endEllipsoidNormals.buffer);\r\n transferableObjects.push(attribsAndIndices.startPositionAndHeights.buffer);\r\n transferableObjects.push(\r\n attribsAndIndices.startFaceNormalAndVertexCornerIds.buffer\r\n );\r\n transferableObjects.push(attribsAndIndices.endPositionAndHeights.buffer);\r\n transferableObjects.push(attribsAndIndices.endFaceNormalAndHalfWidths.buffer);\r\n transferableObjects.push(attribsAndIndices.vertexBatchIds.buffer);\r\n transferableObjects.push(indices.buffer);\r\n\r\n let results = {\r\n indexDatatype:\r\n indices.BYTES_PER_ELEMENT === 2\r\n ? IndexDatatype.UNSIGNED_SHORT\r\n : IndexDatatype.UNSIGNED_INT,\r\n startEllipsoidNormals: attribsAndIndices.startEllipsoidNormals.buffer,\r\n endEllipsoidNormals: attribsAndIndices.endEllipsoidNormals.buffer,\r\n startPositionAndHeights: attribsAndIndices.startPositionAndHeights.buffer,\r\n startFaceNormalAndVertexCornerIds:\r\n attribsAndIndices.startFaceNormalAndVertexCornerIds.buffer,\r\n endPositionAndHeights: attribsAndIndices.endPositionAndHeights.buffer,\r\n endFaceNormalAndHalfWidths:\r\n attribsAndIndices.endFaceNormalAndHalfWidths.buffer,\r\n vertexBatchIds: attribsAndIndices.vertexBatchIds.buffer,\r\n indices: indices.buffer,\r\n };\r\n\r\n if (parameters.keepDecodedPositions) {\r\n const positionOffsets = getPositionOffsets(counts);\r\n transferableObjects.push(positions.buffer, positionOffsets.buffer);\r\n results = combine(results, {\r\n decodedPositions: positions.buffer,\r\n decodedPositionOffsets: positionOffsets.buffer,\r\n });\r\n }\r\n\r\n return results;\r\n}\r\nexport default createTaskProcessorWorker(createVectorTileClampedPolylines);\r\n"],"names":["CesiumMath","Cartographic","Cartesian3","IndexDatatype","Rectangle","Ellipsoid","AttributeCompression","combine"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createVectorTileGeometries.js b/debug/cesium/Workers/createVectorTileGeometries.js deleted file mode 100644 index cc3437c..0000000 --- a/debug/cesium/Workers/createVectorTileGeometries.js +++ /dev/null @@ -1,471 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Transforms-11fb6b0a', './BoxGeometry-2c7f2d2d', './Matrix3-f22b0303', './Color-c019c34b', './CylinderGeometry-2b94e575', './defaultValue-0ab18f7d', './EllipsoidGeometry-66510462', './IndexDatatype-b4e5cf89', './Matrix2-036c77dd', './createTaskProcessorWorker', './Check-d10e5f2e', './Math-9be8b918', './combine-4598d225', './RuntimeError-e5c6a8b9', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './GeometryOffsetAttribute-cc320d7d', './VertexFormat-f2d74c96', './CylinderGeometryLibrary-d951e1d0'], (function (Transforms, BoxGeometry, Matrix3, Color, CylinderGeometry, defaultValue, EllipsoidGeometry, IndexDatatype, Matrix2, createTaskProcessorWorker, Check, Math$1, combine, RuntimeError, ComponentDatatype, WebGLConstants, GeometryAttribute, GeometryAttributes, GeometryOffsetAttribute, VertexFormat, CylinderGeometryLibrary) { 'use strict'; - - /** - * Describes a renderable batch of geometry. - * - * @alias Vector3DTileBatch - * @constructor - * - * @param {Object} options An object with the following properties: - * @param {Number} options.offset The offset of the batch into the indices buffer. - * @param {Number} options.count The number of indices in the batch. - * @param {Color} options.color The color of the geometry in the batch. - * @param {Number[]} options.batchIds An array where each element is the batch id of the geometry in the batch. - * - * @private - */ - function Vector3DTileBatch(options) { - /** - * The offset of the batch into the indices buffer. - * @type {Number} - */ - this.offset = options.offset; - /** - * The number of indices in the batch. - * @type {Number} - */ - this.count = options.count; - /** - * The color of the geometry in the batch. - * @type {Color} - */ - this.color = options.color; - /** - * An array where each element is the batch id of the geometry in the batch. - * @type {Number[]} - */ - this.batchIds = options.batchIds; - } - - const scratchCartesian = new Matrix3.Cartesian3(); - - const packedBoxLength = Matrix2.Matrix4.packedLength + Matrix3.Cartesian3.packedLength; - const packedCylinderLength = Matrix2.Matrix4.packedLength + 2; - const packedEllipsoidLength = Matrix2.Matrix4.packedLength + Matrix3.Cartesian3.packedLength; - const packedSphereLength = Matrix3.Cartesian3.packedLength + 1; - - const scratchModelMatrixAndBV = { - modelMatrix: new Matrix2.Matrix4(), - boundingVolume: new Transforms.BoundingSphere(), - }; - - function boxModelMatrixAndBoundingVolume(boxes, index) { - let boxIndex = index * packedBoxLength; - - const dimensions = Matrix3.Cartesian3.unpack(boxes, boxIndex, scratchCartesian); - boxIndex += Matrix3.Cartesian3.packedLength; - - const boxModelMatrix = Matrix2.Matrix4.unpack( - boxes, - boxIndex, - scratchModelMatrixAndBV.modelMatrix - ); - Matrix2.Matrix4.multiplyByScale(boxModelMatrix, dimensions, boxModelMatrix); - - const boundingVolume = scratchModelMatrixAndBV.boundingVolume; - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, boundingVolume.center); - boundingVolume.radius = Math.sqrt(3.0); - - return scratchModelMatrixAndBV; - } - - function cylinderModelMatrixAndBoundingVolume(cylinders, index) { - let cylinderIndex = index * packedCylinderLength; - - const cylinderRadius = cylinders[cylinderIndex++]; - const length = cylinders[cylinderIndex++]; - const scale = Matrix3.Cartesian3.fromElements( - cylinderRadius, - cylinderRadius, - length, - scratchCartesian - ); - - const cylinderModelMatrix = Matrix2.Matrix4.unpack( - cylinders, - cylinderIndex, - scratchModelMatrixAndBV.modelMatrix - ); - Matrix2.Matrix4.multiplyByScale(cylinderModelMatrix, scale, cylinderModelMatrix); - - const boundingVolume = scratchModelMatrixAndBV.boundingVolume; - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, boundingVolume.center); - boundingVolume.radius = Math.sqrt(2.0); - - return scratchModelMatrixAndBV; - } - - function ellipsoidModelMatrixAndBoundingVolume(ellipsoids, index) { - let ellipsoidIndex = index * packedEllipsoidLength; - - const radii = Matrix3.Cartesian3.unpack(ellipsoids, ellipsoidIndex, scratchCartesian); - ellipsoidIndex += Matrix3.Cartesian3.packedLength; - - const ellipsoidModelMatrix = Matrix2.Matrix4.unpack( - ellipsoids, - ellipsoidIndex, - scratchModelMatrixAndBV.modelMatrix - ); - Matrix2.Matrix4.multiplyByScale(ellipsoidModelMatrix, radii, ellipsoidModelMatrix); - - const boundingVolume = scratchModelMatrixAndBV.boundingVolume; - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, boundingVolume.center); - boundingVolume.radius = 1.0; - - return scratchModelMatrixAndBV; - } - - function sphereModelMatrixAndBoundingVolume(spheres, index) { - let sphereIndex = index * packedSphereLength; - - const sphereRadius = spheres[sphereIndex++]; - - const sphereTranslation = Matrix3.Cartesian3.unpack( - spheres, - sphereIndex, - scratchCartesian - ); - const sphereModelMatrix = Matrix2.Matrix4.fromTranslation( - sphereTranslation, - scratchModelMatrixAndBV.modelMatrix - ); - Matrix2.Matrix4.multiplyByUniformScale( - sphereModelMatrix, - sphereRadius, - sphereModelMatrix - ); - - const boundingVolume = scratchModelMatrixAndBV.boundingVolume; - Matrix3.Cartesian3.clone(Matrix3.Cartesian3.ZERO, boundingVolume.center); - boundingVolume.radius = 1.0; - - return scratchModelMatrixAndBV; - } - - const scratchPosition = new Matrix3.Cartesian3(); - - function createPrimitive( - options, - primitive, - primitiveBatchIds, - geometry, - getModelMatrixAndBoundingVolume - ) { - if (!defaultValue.defined(primitive)) { - return; - } - - const numberOfPrimitives = primitiveBatchIds.length; - const geometryPositions = geometry.attributes.position.values; - const geometryIndices = geometry.indices; - - const positions = options.positions; - const vertexBatchIds = options.vertexBatchIds; - const indices = options.indices; - - const batchIds = options.batchIds; - const batchTableColors = options.batchTableColors; - const batchedIndices = options.batchedIndices; - const indexOffsets = options.indexOffsets; - const indexCounts = options.indexCounts; - const boundingVolumes = options.boundingVolumes; - - const modelMatrix = options.modelMatrix; - const center = options.center; - - let positionOffset = options.positionOffset; - let batchIdIndex = options.batchIdIndex; - let indexOffset = options.indexOffset; - const batchedIndicesOffset = options.batchedIndicesOffset; - - for (let i = 0; i < numberOfPrimitives; ++i) { - const primitiveModelMatrixAndBV = getModelMatrixAndBoundingVolume( - primitive, - i - ); - const primitiveModelMatrix = primitiveModelMatrixAndBV.modelMatrix; - Matrix2.Matrix4.multiply(modelMatrix, primitiveModelMatrix, primitiveModelMatrix); - - const batchId = primitiveBatchIds[i]; - - const positionsLength = geometryPositions.length; - for (let j = 0; j < positionsLength; j += 3) { - const position = Matrix3.Cartesian3.unpack(geometryPositions, j, scratchPosition); - Matrix2.Matrix4.multiplyByPoint(primitiveModelMatrix, position, position); - Matrix3.Cartesian3.subtract(position, center, position); - - Matrix3.Cartesian3.pack(position, positions, positionOffset * 3 + j); - vertexBatchIds[batchIdIndex++] = batchId; - } - - const indicesLength = geometryIndices.length; - for (let k = 0; k < indicesLength; ++k) { - indices[indexOffset + k] = geometryIndices[k] + positionOffset; - } - - const offset = i + batchedIndicesOffset; - batchedIndices[offset] = new Vector3DTileBatch({ - offset: indexOffset, - count: indicesLength, - color: Color.Color.fromRgba(batchTableColors[batchId]), - batchIds: [batchId], - }); - batchIds[offset] = batchId; - indexOffsets[offset] = indexOffset; - indexCounts[offset] = indicesLength; - boundingVolumes[offset] = Transforms.BoundingSphere.transform( - primitiveModelMatrixAndBV.boundingVolume, - primitiveModelMatrix - ); - - positionOffset += positionsLength / 3; - indexOffset += indicesLength; - } - - options.positionOffset = positionOffset; - options.batchIdIndex = batchIdIndex; - options.indexOffset = indexOffset; - options.batchedIndicesOffset += numberOfPrimitives; - } - - const scratchCenter = new Matrix3.Cartesian3(); - const scratchMatrix4 = new Matrix2.Matrix4(); - - function unpackBuffer(buffer) { - const packedBuffer = new Float64Array(buffer); - - let offset = 0; - Matrix3.Cartesian3.unpack(packedBuffer, offset, scratchCenter); - offset += Matrix3.Cartesian3.packedLength; - - Matrix2.Matrix4.unpack(packedBuffer, offset, scratchMatrix4); - } - - function packedBatchedIndicesLength(batchedIndices) { - const length = batchedIndices.length; - let count = 0; - for (let i = 0; i < length; ++i) { - count += Color.Color.packedLength + 3 + batchedIndices[i].batchIds.length; - } - return count; - } - - function packBuffer(indicesBytesPerElement, batchedIndices, boundingVolumes) { - const numBVs = boundingVolumes.length; - const length = - 1 + - 1 + - numBVs * Transforms.BoundingSphere.packedLength + - 1 + - packedBatchedIndicesLength(batchedIndices); - - const packedBuffer = new Float64Array(length); - - let offset = 0; - packedBuffer[offset++] = indicesBytesPerElement; - packedBuffer[offset++] = numBVs; - - for (let i = 0; i < numBVs; ++i) { - Transforms.BoundingSphere.pack(boundingVolumes[i], packedBuffer, offset); - offset += Transforms.BoundingSphere.packedLength; - } - - const indicesLength = batchedIndices.length; - packedBuffer[offset++] = indicesLength; - - for (let j = 0; j < indicesLength; ++j) { - const batchedIndex = batchedIndices[j]; - - Color.Color.pack(batchedIndex.color, packedBuffer, offset); - offset += Color.Color.packedLength; - - packedBuffer[offset++] = batchedIndex.offset; - packedBuffer[offset++] = batchedIndex.count; - - const batchIds = batchedIndex.batchIds; - const batchIdsLength = batchIds.length; - packedBuffer[offset++] = batchIdsLength; - - for (let k = 0; k < batchIdsLength; ++k) { - packedBuffer[offset++] = batchIds[k]; - } - } - - return packedBuffer; - } - - function createVectorTileGeometries(parameters, transferableObjects) { - const boxes = defaultValue.defined(parameters.boxes) - ? new Float32Array(parameters.boxes) - : undefined; - const boxBatchIds = defaultValue.defined(parameters.boxBatchIds) - ? new Uint16Array(parameters.boxBatchIds) - : undefined; - const cylinders = defaultValue.defined(parameters.cylinders) - ? new Float32Array(parameters.cylinders) - : undefined; - const cylinderBatchIds = defaultValue.defined(parameters.cylinderBatchIds) - ? new Uint16Array(parameters.cylinderBatchIds) - : undefined; - const ellipsoids = defaultValue.defined(parameters.ellipsoids) - ? new Float32Array(parameters.ellipsoids) - : undefined; - const ellipsoidBatchIds = defaultValue.defined(parameters.ellipsoidBatchIds) - ? new Uint16Array(parameters.ellipsoidBatchIds) - : undefined; - const spheres = defaultValue.defined(parameters.spheres) - ? new Float32Array(parameters.spheres) - : undefined; - const sphereBatchIds = defaultValue.defined(parameters.sphereBatchIds) - ? new Uint16Array(parameters.sphereBatchIds) - : undefined; - - const numberOfBoxes = defaultValue.defined(boxes) ? boxBatchIds.length : 0; - const numberOfCylinders = defaultValue.defined(cylinders) ? cylinderBatchIds.length : 0; - const numberOfEllipsoids = defaultValue.defined(ellipsoids) ? ellipsoidBatchIds.length : 0; - const numberOfSpheres = defaultValue.defined(spheres) ? sphereBatchIds.length : 0; - - const boxGeometry = BoxGeometry.BoxGeometry.getUnitBox(); - const cylinderGeometry = CylinderGeometry.CylinderGeometry.getUnitCylinder(); - const ellipsoidGeometry = EllipsoidGeometry.EllipsoidGeometry.getUnitEllipsoid(); - - const boxPositions = boxGeometry.attributes.position.values; - const cylinderPositions = cylinderGeometry.attributes.position.values; - const ellipsoidPositions = ellipsoidGeometry.attributes.position.values; - - let numberOfPositions = boxPositions.length * numberOfBoxes; - numberOfPositions += cylinderPositions.length * numberOfCylinders; - numberOfPositions += - ellipsoidPositions.length * (numberOfEllipsoids + numberOfSpheres); - - const boxIndices = boxGeometry.indices; - const cylinderIndices = cylinderGeometry.indices; - const ellipsoidIndices = ellipsoidGeometry.indices; - - let numberOfIndices = boxIndices.length * numberOfBoxes; - numberOfIndices += cylinderIndices.length * numberOfCylinders; - numberOfIndices += - ellipsoidIndices.length * (numberOfEllipsoids + numberOfSpheres); - - const positions = new Float32Array(numberOfPositions); - const vertexBatchIds = new Uint16Array(numberOfPositions / 3); - const indices = IndexDatatype.IndexDatatype.createTypedArray( - numberOfPositions / 3, - numberOfIndices - ); - - const numberOfGeometries = - numberOfBoxes + numberOfCylinders + numberOfEllipsoids + numberOfSpheres; - const batchIds = new Uint16Array(numberOfGeometries); - const batchedIndices = new Array(numberOfGeometries); - const indexOffsets = new Uint32Array(numberOfGeometries); - const indexCounts = new Uint32Array(numberOfGeometries); - const boundingVolumes = new Array(numberOfGeometries); - - unpackBuffer(parameters.packedBuffer); - - const options = { - batchTableColors: new Uint32Array(parameters.batchTableColors), - positions: positions, - vertexBatchIds: vertexBatchIds, - indices: indices, - batchIds: batchIds, - batchedIndices: batchedIndices, - indexOffsets: indexOffsets, - indexCounts: indexCounts, - boundingVolumes: boundingVolumes, - positionOffset: 0, - batchIdIndex: 0, - indexOffset: 0, - batchedIndicesOffset: 0, - modelMatrix: scratchMatrix4, - center: scratchCenter, - }; - - createPrimitive( - options, - boxes, - boxBatchIds, - boxGeometry, - boxModelMatrixAndBoundingVolume - ); - createPrimitive( - options, - cylinders, - cylinderBatchIds, - cylinderGeometry, - cylinderModelMatrixAndBoundingVolume - ); - createPrimitive( - options, - ellipsoids, - ellipsoidBatchIds, - ellipsoidGeometry, - ellipsoidModelMatrixAndBoundingVolume - ); - createPrimitive( - options, - spheres, - sphereBatchIds, - ellipsoidGeometry, - sphereModelMatrixAndBoundingVolume - ); - - const packedBuffer = packBuffer( - indices.BYTES_PER_ELEMENT, - batchedIndices, - boundingVolumes - ); - transferableObjects.push( - positions.buffer, - vertexBatchIds.buffer, - indices.buffer - ); - transferableObjects.push( - batchIds.buffer, - indexOffsets.buffer, - indexCounts.buffer - ); - transferableObjects.push(packedBuffer.buffer); - - return { - positions: positions.buffer, - vertexBatchIds: vertexBatchIds.buffer, - indices: indices.buffer, - indexOffsets: indexOffsets.buffer, - indexCounts: indexCounts.buffer, - batchIds: batchIds.buffer, - packedBuffer: packedBuffer.buffer, - }; - } - var createVectorTileGeometries$1 = createTaskProcessorWorker(createVectorTileGeometries); - - return createVectorTileGeometries$1; - -})); -//# sourceMappingURL=createVectorTileGeometries.js.map diff --git a/debug/cesium/Workers/createVectorTileGeometries.js.map b/debug/cesium/Workers/createVectorTileGeometries.js.map deleted file mode 100644 index 763db89..0000000 --- a/debug/cesium/Workers/createVectorTileGeometries.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createVectorTileGeometries.js","sources":["../../../Source/Scene/Vector3DTileBatch.js","../../../Source/WorkersES6/createVectorTileGeometries.js"],"sourcesContent":["/**\r\n * Describes a renderable batch of geometry.\r\n *\r\n * @alias Vector3DTileBatch\r\n * @constructor\r\n *\r\n * @param {Object} options An object with the following properties:\r\n * @param {Number} options.offset The offset of the batch into the indices buffer.\r\n * @param {Number} options.count The number of indices in the batch.\r\n * @param {Color} options.color The color of the geometry in the batch.\r\n * @param {Number[]} options.batchIds An array where each element is the batch id of the geometry in the batch.\r\n *\r\n * @private\r\n */\r\nfunction Vector3DTileBatch(options) {\r\n /**\r\n * The offset of the batch into the indices buffer.\r\n * @type {Number}\r\n */\r\n this.offset = options.offset;\r\n /**\r\n * The number of indices in the batch.\r\n * @type {Number}\r\n */\r\n this.count = options.count;\r\n /**\r\n * The color of the geometry in the batch.\r\n * @type {Color}\r\n */\r\n this.color = options.color;\r\n /**\r\n * An array where each element is the batch id of the geometry in the batch.\r\n * @type {Number[]}\r\n */\r\n this.batchIds = options.batchIds;\r\n}\r\nexport default Vector3DTileBatch;\r\n","import BoundingSphere from \"../Core/BoundingSphere.js\";\r\nimport BoxGeometry from \"../Core/BoxGeometry.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Color from \"../Core/Color.js\";\r\nimport CylinderGeometry from \"../Core/CylinderGeometry.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport EllipsoidGeometry from \"../Core/EllipsoidGeometry.js\";\r\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\r\nimport Matrix4 from \"../Core/Matrix4.js\";\r\nimport Vector3DTileBatch from \"../Scene/Vector3DTileBatch.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst scratchCartesian = new Cartesian3();\r\n\r\nconst packedBoxLength = Matrix4.packedLength + Cartesian3.packedLength;\r\nconst packedCylinderLength = Matrix4.packedLength + 2;\r\nconst packedEllipsoidLength = Matrix4.packedLength + Cartesian3.packedLength;\r\nconst packedSphereLength = Cartesian3.packedLength + 1;\r\n\r\nconst scratchModelMatrixAndBV = {\r\n modelMatrix: new Matrix4(),\r\n boundingVolume: new BoundingSphere(),\r\n};\r\n\r\nfunction boxModelMatrixAndBoundingVolume(boxes, index) {\r\n let boxIndex = index * packedBoxLength;\r\n\r\n const dimensions = Cartesian3.unpack(boxes, boxIndex, scratchCartesian);\r\n boxIndex += Cartesian3.packedLength;\r\n\r\n const boxModelMatrix = Matrix4.unpack(\r\n boxes,\r\n boxIndex,\r\n scratchModelMatrixAndBV.modelMatrix\r\n );\r\n Matrix4.multiplyByScale(boxModelMatrix, dimensions, boxModelMatrix);\r\n\r\n const boundingVolume = scratchModelMatrixAndBV.boundingVolume;\r\n Cartesian3.clone(Cartesian3.ZERO, boundingVolume.center);\r\n boundingVolume.radius = Math.sqrt(3.0);\r\n\r\n return scratchModelMatrixAndBV;\r\n}\r\n\r\nfunction cylinderModelMatrixAndBoundingVolume(cylinders, index) {\r\n let cylinderIndex = index * packedCylinderLength;\r\n\r\n const cylinderRadius = cylinders[cylinderIndex++];\r\n const length = cylinders[cylinderIndex++];\r\n const scale = Cartesian3.fromElements(\r\n cylinderRadius,\r\n cylinderRadius,\r\n length,\r\n scratchCartesian\r\n );\r\n\r\n const cylinderModelMatrix = Matrix4.unpack(\r\n cylinders,\r\n cylinderIndex,\r\n scratchModelMatrixAndBV.modelMatrix\r\n );\r\n Matrix4.multiplyByScale(cylinderModelMatrix, scale, cylinderModelMatrix);\r\n\r\n const boundingVolume = scratchModelMatrixAndBV.boundingVolume;\r\n Cartesian3.clone(Cartesian3.ZERO, boundingVolume.center);\r\n boundingVolume.radius = Math.sqrt(2.0);\r\n\r\n return scratchModelMatrixAndBV;\r\n}\r\n\r\nfunction ellipsoidModelMatrixAndBoundingVolume(ellipsoids, index) {\r\n let ellipsoidIndex = index * packedEllipsoidLength;\r\n\r\n const radii = Cartesian3.unpack(ellipsoids, ellipsoidIndex, scratchCartesian);\r\n ellipsoidIndex += Cartesian3.packedLength;\r\n\r\n const ellipsoidModelMatrix = Matrix4.unpack(\r\n ellipsoids,\r\n ellipsoidIndex,\r\n scratchModelMatrixAndBV.modelMatrix\r\n );\r\n Matrix4.multiplyByScale(ellipsoidModelMatrix, radii, ellipsoidModelMatrix);\r\n\r\n const boundingVolume = scratchModelMatrixAndBV.boundingVolume;\r\n Cartesian3.clone(Cartesian3.ZERO, boundingVolume.center);\r\n boundingVolume.radius = 1.0;\r\n\r\n return scratchModelMatrixAndBV;\r\n}\r\n\r\nfunction sphereModelMatrixAndBoundingVolume(spheres, index) {\r\n let sphereIndex = index * packedSphereLength;\r\n\r\n const sphereRadius = spheres[sphereIndex++];\r\n\r\n const sphereTranslation = Cartesian3.unpack(\r\n spheres,\r\n sphereIndex,\r\n scratchCartesian\r\n );\r\n const sphereModelMatrix = Matrix4.fromTranslation(\r\n sphereTranslation,\r\n scratchModelMatrixAndBV.modelMatrix\r\n );\r\n Matrix4.multiplyByUniformScale(\r\n sphereModelMatrix,\r\n sphereRadius,\r\n sphereModelMatrix\r\n );\r\n\r\n const boundingVolume = scratchModelMatrixAndBV.boundingVolume;\r\n Cartesian3.clone(Cartesian3.ZERO, boundingVolume.center);\r\n boundingVolume.radius = 1.0;\r\n\r\n return scratchModelMatrixAndBV;\r\n}\r\n\r\nconst scratchPosition = new Cartesian3();\r\n\r\nfunction createPrimitive(\r\n options,\r\n primitive,\r\n primitiveBatchIds,\r\n geometry,\r\n getModelMatrixAndBoundingVolume\r\n) {\r\n if (!defined(primitive)) {\r\n return;\r\n }\r\n\r\n const numberOfPrimitives = primitiveBatchIds.length;\r\n const geometryPositions = geometry.attributes.position.values;\r\n const geometryIndices = geometry.indices;\r\n\r\n const positions = options.positions;\r\n const vertexBatchIds = options.vertexBatchIds;\r\n const indices = options.indices;\r\n\r\n const batchIds = options.batchIds;\r\n const batchTableColors = options.batchTableColors;\r\n const batchedIndices = options.batchedIndices;\r\n const indexOffsets = options.indexOffsets;\r\n const indexCounts = options.indexCounts;\r\n const boundingVolumes = options.boundingVolumes;\r\n\r\n const modelMatrix = options.modelMatrix;\r\n const center = options.center;\r\n\r\n let positionOffset = options.positionOffset;\r\n let batchIdIndex = options.batchIdIndex;\r\n let indexOffset = options.indexOffset;\r\n const batchedIndicesOffset = options.batchedIndicesOffset;\r\n\r\n for (let i = 0; i < numberOfPrimitives; ++i) {\r\n const primitiveModelMatrixAndBV = getModelMatrixAndBoundingVolume(\r\n primitive,\r\n i\r\n );\r\n const primitiveModelMatrix = primitiveModelMatrixAndBV.modelMatrix;\r\n Matrix4.multiply(modelMatrix, primitiveModelMatrix, primitiveModelMatrix);\r\n\r\n const batchId = primitiveBatchIds[i];\r\n\r\n const positionsLength = geometryPositions.length;\r\n for (let j = 0; j < positionsLength; j += 3) {\r\n const position = Cartesian3.unpack(geometryPositions, j, scratchPosition);\r\n Matrix4.multiplyByPoint(primitiveModelMatrix, position, position);\r\n Cartesian3.subtract(position, center, position);\r\n\r\n Cartesian3.pack(position, positions, positionOffset * 3 + j);\r\n vertexBatchIds[batchIdIndex++] = batchId;\r\n }\r\n\r\n const indicesLength = geometryIndices.length;\r\n for (let k = 0; k < indicesLength; ++k) {\r\n indices[indexOffset + k] = geometryIndices[k] + positionOffset;\r\n }\r\n\r\n const offset = i + batchedIndicesOffset;\r\n batchedIndices[offset] = new Vector3DTileBatch({\r\n offset: indexOffset,\r\n count: indicesLength,\r\n color: Color.fromRgba(batchTableColors[batchId]),\r\n batchIds: [batchId],\r\n });\r\n batchIds[offset] = batchId;\r\n indexOffsets[offset] = indexOffset;\r\n indexCounts[offset] = indicesLength;\r\n boundingVolumes[offset] = BoundingSphere.transform(\r\n primitiveModelMatrixAndBV.boundingVolume,\r\n primitiveModelMatrix\r\n );\r\n\r\n positionOffset += positionsLength / 3;\r\n indexOffset += indicesLength;\r\n }\r\n\r\n options.positionOffset = positionOffset;\r\n options.batchIdIndex = batchIdIndex;\r\n options.indexOffset = indexOffset;\r\n options.batchedIndicesOffset += numberOfPrimitives;\r\n}\r\n\r\nconst scratchCenter = new Cartesian3();\r\nconst scratchMatrix4 = new Matrix4();\r\n\r\nfunction unpackBuffer(buffer) {\r\n const packedBuffer = new Float64Array(buffer);\r\n\r\n let offset = 0;\r\n Cartesian3.unpack(packedBuffer, offset, scratchCenter);\r\n offset += Cartesian3.packedLength;\r\n\r\n Matrix4.unpack(packedBuffer, offset, scratchMatrix4);\r\n}\r\n\r\nfunction packedBatchedIndicesLength(batchedIndices) {\r\n const length = batchedIndices.length;\r\n let count = 0;\r\n for (let i = 0; i < length; ++i) {\r\n count += Color.packedLength + 3 + batchedIndices[i].batchIds.length;\r\n }\r\n return count;\r\n}\r\n\r\nfunction packBuffer(indicesBytesPerElement, batchedIndices, boundingVolumes) {\r\n const numBVs = boundingVolumes.length;\r\n const length =\r\n 1 +\r\n 1 +\r\n numBVs * BoundingSphere.packedLength +\r\n 1 +\r\n packedBatchedIndicesLength(batchedIndices);\r\n\r\n const packedBuffer = new Float64Array(length);\r\n\r\n let offset = 0;\r\n packedBuffer[offset++] = indicesBytesPerElement;\r\n packedBuffer[offset++] = numBVs;\r\n\r\n for (let i = 0; i < numBVs; ++i) {\r\n BoundingSphere.pack(boundingVolumes[i], packedBuffer, offset);\r\n offset += BoundingSphere.packedLength;\r\n }\r\n\r\n const indicesLength = batchedIndices.length;\r\n packedBuffer[offset++] = indicesLength;\r\n\r\n for (let j = 0; j < indicesLength; ++j) {\r\n const batchedIndex = batchedIndices[j];\r\n\r\n Color.pack(batchedIndex.color, packedBuffer, offset);\r\n offset += Color.packedLength;\r\n\r\n packedBuffer[offset++] = batchedIndex.offset;\r\n packedBuffer[offset++] = batchedIndex.count;\r\n\r\n const batchIds = batchedIndex.batchIds;\r\n const batchIdsLength = batchIds.length;\r\n packedBuffer[offset++] = batchIdsLength;\r\n\r\n for (let k = 0; k < batchIdsLength; ++k) {\r\n packedBuffer[offset++] = batchIds[k];\r\n }\r\n }\r\n\r\n return packedBuffer;\r\n}\r\n\r\nfunction createVectorTileGeometries(parameters, transferableObjects) {\r\n const boxes = defined(parameters.boxes)\r\n ? new Float32Array(parameters.boxes)\r\n : undefined;\r\n const boxBatchIds = defined(parameters.boxBatchIds)\r\n ? new Uint16Array(parameters.boxBatchIds)\r\n : undefined;\r\n const cylinders = defined(parameters.cylinders)\r\n ? new Float32Array(parameters.cylinders)\r\n : undefined;\r\n const cylinderBatchIds = defined(parameters.cylinderBatchIds)\r\n ? new Uint16Array(parameters.cylinderBatchIds)\r\n : undefined;\r\n const ellipsoids = defined(parameters.ellipsoids)\r\n ? new Float32Array(parameters.ellipsoids)\r\n : undefined;\r\n const ellipsoidBatchIds = defined(parameters.ellipsoidBatchIds)\r\n ? new Uint16Array(parameters.ellipsoidBatchIds)\r\n : undefined;\r\n const spheres = defined(parameters.spheres)\r\n ? new Float32Array(parameters.spheres)\r\n : undefined;\r\n const sphereBatchIds = defined(parameters.sphereBatchIds)\r\n ? new Uint16Array(parameters.sphereBatchIds)\r\n : undefined;\r\n\r\n const numberOfBoxes = defined(boxes) ? boxBatchIds.length : 0;\r\n const numberOfCylinders = defined(cylinders) ? cylinderBatchIds.length : 0;\r\n const numberOfEllipsoids = defined(ellipsoids) ? ellipsoidBatchIds.length : 0;\r\n const numberOfSpheres = defined(spheres) ? sphereBatchIds.length : 0;\r\n\r\n const boxGeometry = BoxGeometry.getUnitBox();\r\n const cylinderGeometry = CylinderGeometry.getUnitCylinder();\r\n const ellipsoidGeometry = EllipsoidGeometry.getUnitEllipsoid();\r\n\r\n const boxPositions = boxGeometry.attributes.position.values;\r\n const cylinderPositions = cylinderGeometry.attributes.position.values;\r\n const ellipsoidPositions = ellipsoidGeometry.attributes.position.values;\r\n\r\n let numberOfPositions = boxPositions.length * numberOfBoxes;\r\n numberOfPositions += cylinderPositions.length * numberOfCylinders;\r\n numberOfPositions +=\r\n ellipsoidPositions.length * (numberOfEllipsoids + numberOfSpheres);\r\n\r\n const boxIndices = boxGeometry.indices;\r\n const cylinderIndices = cylinderGeometry.indices;\r\n const ellipsoidIndices = ellipsoidGeometry.indices;\r\n\r\n let numberOfIndices = boxIndices.length * numberOfBoxes;\r\n numberOfIndices += cylinderIndices.length * numberOfCylinders;\r\n numberOfIndices +=\r\n ellipsoidIndices.length * (numberOfEllipsoids + numberOfSpheres);\r\n\r\n const positions = new Float32Array(numberOfPositions);\r\n const vertexBatchIds = new Uint16Array(numberOfPositions / 3);\r\n const indices = IndexDatatype.createTypedArray(\r\n numberOfPositions / 3,\r\n numberOfIndices\r\n );\r\n\r\n const numberOfGeometries =\r\n numberOfBoxes + numberOfCylinders + numberOfEllipsoids + numberOfSpheres;\r\n const batchIds = new Uint16Array(numberOfGeometries);\r\n const batchedIndices = new Array(numberOfGeometries);\r\n const indexOffsets = new Uint32Array(numberOfGeometries);\r\n const indexCounts = new Uint32Array(numberOfGeometries);\r\n const boundingVolumes = new Array(numberOfGeometries);\r\n\r\n unpackBuffer(parameters.packedBuffer);\r\n\r\n const options = {\r\n batchTableColors: new Uint32Array(parameters.batchTableColors),\r\n positions: positions,\r\n vertexBatchIds: vertexBatchIds,\r\n indices: indices,\r\n batchIds: batchIds,\r\n batchedIndices: batchedIndices,\r\n indexOffsets: indexOffsets,\r\n indexCounts: indexCounts,\r\n boundingVolumes: boundingVolumes,\r\n positionOffset: 0,\r\n batchIdIndex: 0,\r\n indexOffset: 0,\r\n batchedIndicesOffset: 0,\r\n modelMatrix: scratchMatrix4,\r\n center: scratchCenter,\r\n };\r\n\r\n createPrimitive(\r\n options,\r\n boxes,\r\n boxBatchIds,\r\n boxGeometry,\r\n boxModelMatrixAndBoundingVolume\r\n );\r\n createPrimitive(\r\n options,\r\n cylinders,\r\n cylinderBatchIds,\r\n cylinderGeometry,\r\n cylinderModelMatrixAndBoundingVolume\r\n );\r\n createPrimitive(\r\n options,\r\n ellipsoids,\r\n ellipsoidBatchIds,\r\n ellipsoidGeometry,\r\n ellipsoidModelMatrixAndBoundingVolume\r\n );\r\n createPrimitive(\r\n options,\r\n spheres,\r\n sphereBatchIds,\r\n ellipsoidGeometry,\r\n sphereModelMatrixAndBoundingVolume\r\n );\r\n\r\n const packedBuffer = packBuffer(\r\n indices.BYTES_PER_ELEMENT,\r\n batchedIndices,\r\n boundingVolumes\r\n );\r\n transferableObjects.push(\r\n positions.buffer,\r\n vertexBatchIds.buffer,\r\n indices.buffer\r\n );\r\n transferableObjects.push(\r\n batchIds.buffer,\r\n indexOffsets.buffer,\r\n indexCounts.buffer\r\n );\r\n transferableObjects.push(packedBuffer.buffer);\r\n\r\n return {\r\n positions: positions.buffer,\r\n vertexBatchIds: vertexBatchIds.buffer,\r\n indices: indices.buffer,\r\n indexOffsets: indexOffsets.buffer,\r\n indexCounts: indexCounts.buffer,\r\n batchIds: batchIds.buffer,\r\n packedBuffer: packedBuffer.buffer,\r\n };\r\n}\r\nexport default createTaskProcessorWorker(createVectorTileGeometries);\r\n"],"names":["Cartesian3","Matrix4","BoundingSphere","defined","Color","BoxGeometry","CylinderGeometry","EllipsoidGeometry","IndexDatatype"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,iBAAiB,CAAC,OAAO,EAAE;EACpC;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;EAC/B;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;EAC7B;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;EAC7B;EACA;EACA;EACA;EACA,EAAE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;EACnC;;ECvBA,MAAM,gBAAgB,GAAG,IAAIA,kBAAU,EAAE,CAAC;AAC1C;EACA,MAAM,eAAe,GAAGC,eAAO,CAAC,YAAY,GAAGD,kBAAU,CAAC,YAAY,CAAC;EACvE,MAAM,oBAAoB,GAAGC,eAAO,CAAC,YAAY,GAAG,CAAC,CAAC;EACtD,MAAM,qBAAqB,GAAGA,eAAO,CAAC,YAAY,GAAGD,kBAAU,CAAC,YAAY,CAAC;EAC7E,MAAM,kBAAkB,GAAGA,kBAAU,CAAC,YAAY,GAAG,CAAC,CAAC;AACvD;EACA,MAAM,uBAAuB,GAAG;EAChC,EAAE,WAAW,EAAE,IAAIC,eAAO,EAAE;EAC5B,EAAE,cAAc,EAAE,IAAIC,yBAAc,EAAE;EACtC,CAAC,CAAC;AACF;EACA,SAAS,+BAA+B,CAAC,KAAK,EAAE,KAAK,EAAE;EACvD,EAAE,IAAI,QAAQ,GAAG,KAAK,GAAG,eAAe,CAAC;AACzC;EACA,EAAE,MAAM,UAAU,GAAGF,kBAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC;EAC1E,EAAE,QAAQ,IAAIA,kBAAU,CAAC,YAAY,CAAC;AACtC;EACA,EAAE,MAAM,cAAc,GAAGC,eAAO,CAAC,MAAM;EACvC,IAAI,KAAK;EACT,IAAI,QAAQ;EACZ,IAAI,uBAAuB,CAAC,WAAW;EACvC,GAAG,CAAC;EACJ,EAAEA,eAAO,CAAC,eAAe,CAAC,cAAc,EAAE,UAAU,EAAE,cAAc,CAAC,CAAC;AACtE;EACA,EAAE,MAAM,cAAc,GAAG,uBAAuB,CAAC,cAAc,CAAC;EAChE,EAAED,kBAAU,CAAC,KAAK,CAACA,kBAAU,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;EAC3D,EAAE,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC;EACA,EAAE,OAAO,uBAAuB,CAAC;EACjC,CAAC;AACD;EACA,SAAS,oCAAoC,CAAC,SAAS,EAAE,KAAK,EAAE;EAChE,EAAE,IAAI,aAAa,GAAG,KAAK,GAAG,oBAAoB,CAAC;AACnD;EACA,EAAE,MAAM,cAAc,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;EACpD,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,CAAC;EAC5C,EAAE,MAAM,KAAK,GAAGA,kBAAU,CAAC,YAAY;EACvC,IAAI,cAAc;EAClB,IAAI,cAAc;EAClB,IAAI,MAAM;EACV,IAAI,gBAAgB;EACpB,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,mBAAmB,GAAGC,eAAO,CAAC,MAAM;EAC5C,IAAI,SAAS;EACb,IAAI,aAAa;EACjB,IAAI,uBAAuB,CAAC,WAAW;EACvC,GAAG,CAAC;EACJ,EAAEA,eAAO,CAAC,eAAe,CAAC,mBAAmB,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;AAC3E;EACA,EAAE,MAAM,cAAc,GAAG,uBAAuB,CAAC,cAAc,CAAC;EAChE,EAAED,kBAAU,CAAC,KAAK,CAACA,kBAAU,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;EAC3D,EAAE,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzC;EACA,EAAE,OAAO,uBAAuB,CAAC;EACjC,CAAC;AACD;EACA,SAAS,qCAAqC,CAAC,UAAU,EAAE,KAAK,EAAE;EAClE,EAAE,IAAI,cAAc,GAAG,KAAK,GAAG,qBAAqB,CAAC;AACrD;EACA,EAAE,MAAM,KAAK,GAAGA,kBAAU,CAAC,MAAM,CAAC,UAAU,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;EAChF,EAAE,cAAc,IAAIA,kBAAU,CAAC,YAAY,CAAC;AAC5C;EACA,EAAE,MAAM,oBAAoB,GAAGC,eAAO,CAAC,MAAM;EAC7C,IAAI,UAAU;EACd,IAAI,cAAc;EAClB,IAAI,uBAAuB,CAAC,WAAW;EACvC,GAAG,CAAC;EACJ,EAAEA,eAAO,CAAC,eAAe,CAAC,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,CAAC,CAAC;AAC7E;EACA,EAAE,MAAM,cAAc,GAAG,uBAAuB,CAAC,cAAc,CAAC;EAChE,EAAED,kBAAU,CAAC,KAAK,CAACA,kBAAU,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;EAC3D,EAAE,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC;AAC9B;EACA,EAAE,OAAO,uBAAuB,CAAC;EACjC,CAAC;AACD;EACA,SAAS,kCAAkC,CAAC,OAAO,EAAE,KAAK,EAAE;EAC5D,EAAE,IAAI,WAAW,GAAG,KAAK,GAAG,kBAAkB,CAAC;AAC/C;EACA,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9C;EACA,EAAE,MAAM,iBAAiB,GAAGA,kBAAU,CAAC,MAAM;EAC7C,IAAI,OAAO;EACX,IAAI,WAAW;EACf,IAAI,gBAAgB;EACpB,GAAG,CAAC;EACJ,EAAE,MAAM,iBAAiB,GAAGC,eAAO,CAAC,eAAe;EACnD,IAAI,iBAAiB;EACrB,IAAI,uBAAuB,CAAC,WAAW;EACvC,GAAG,CAAC;EACJ,EAAEA,eAAO,CAAC,sBAAsB;EAChC,IAAI,iBAAiB;EACrB,IAAI,YAAY;EAChB,IAAI,iBAAiB;EACrB,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,cAAc,GAAG,uBAAuB,CAAC,cAAc,CAAC;EAChE,EAAED,kBAAU,CAAC,KAAK,CAACA,kBAAU,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;EAC3D,EAAE,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC;AAC9B;EACA,EAAE,OAAO,uBAAuB,CAAC;EACjC,CAAC;AACD;EACA,MAAM,eAAe,GAAG,IAAIA,kBAAU,EAAE,CAAC;AACzC;EACA,SAAS,eAAe;EACxB,EAAE,OAAO;EACT,EAAE,SAAS;EACX,EAAE,iBAAiB;EACnB,EAAE,QAAQ;EACV,EAAE,+BAA+B;EACjC,EAAE;EACF,EAAE,IAAI,CAACG,oBAAO,CAAC,SAAS,CAAC,EAAE;EAC3B,IAAI,OAAO;EACX,GAAG;AACH;EACA,EAAE,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,MAAM,CAAC;EACtD,EAAE,MAAM,iBAAiB,GAAG,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;EAChE,EAAE,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC;AAC3C;EACA,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;EACtC,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;EAChD,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AAClC;EACA,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;EACpC,EAAE,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC;EACpD,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;EAChD,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;EAC5C,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;EAC1C,EAAE,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC;AAClD;EACA,EAAE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;EAC1C,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AAChC;EACA,EAAE,IAAI,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;EAC9C,EAAE,IAAI,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;EAC1C,EAAE,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;EACxC,EAAE,MAAM,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC;AAC5D;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,kBAAkB,EAAE,EAAE,CAAC,EAAE;EAC/C,IAAI,MAAM,yBAAyB,GAAG,+BAA+B;EACrE,MAAM,SAAS;EACf,MAAM,CAAC;EACP,KAAK,CAAC;EACN,IAAI,MAAM,oBAAoB,GAAG,yBAAyB,CAAC,WAAW,CAAC;EACvE,IAAIF,eAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,CAAC;AAC9E;EACA,IAAI,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;AACzC;EACA,IAAI,MAAM,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC;EACrD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE;EACjD,MAAM,MAAM,QAAQ,GAAGD,kBAAU,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;EAChF,MAAMC,eAAO,CAAC,eAAe,CAAC,oBAAoB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;EACxE,MAAMD,kBAAU,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AACtD;EACA,MAAMA,kBAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,cAAc,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EACnE,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC;EAC/C,KAAK;AACL;EACA,IAAI,MAAM,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC;EACjD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,EAAE,CAAC,EAAE;EAC5C,MAAM,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;EACrE,KAAK;AACL;EACA,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,oBAAoB,CAAC;EAC5C,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,IAAI,iBAAiB,CAAC;EACnD,MAAM,MAAM,EAAE,WAAW;EACzB,MAAM,KAAK,EAAE,aAAa;EAC1B,MAAM,KAAK,EAAEI,WAAK,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;EACtD,MAAM,QAAQ,EAAE,CAAC,OAAO,CAAC;EACzB,KAAK,CAAC,CAAC;EACP,IAAI,QAAQ,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC;EAC/B,IAAI,YAAY,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;EACvC,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;EACxC,IAAI,eAAe,CAAC,MAAM,CAAC,GAAGF,yBAAc,CAAC,SAAS;EACtD,MAAM,yBAAyB,CAAC,cAAc;EAC9C,MAAM,oBAAoB;EAC1B,KAAK,CAAC;AACN;EACA,IAAI,cAAc,IAAI,eAAe,GAAG,CAAC,CAAC;EAC1C,IAAI,WAAW,IAAI,aAAa,CAAC;EACjC,GAAG;AACH;EACA,EAAE,OAAO,CAAC,cAAc,GAAG,cAAc,CAAC;EAC1C,EAAE,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;EACtC,EAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;EACpC,EAAE,OAAO,CAAC,oBAAoB,IAAI,kBAAkB,CAAC;EACrD,CAAC;AACD;EACA,MAAM,aAAa,GAAG,IAAIF,kBAAU,EAAE,CAAC;EACvC,MAAM,cAAc,GAAG,IAAIC,eAAO,EAAE,CAAC;AACrC;EACA,SAAS,YAAY,CAAC,MAAM,EAAE;EAC9B,EAAE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AAChD;EACA,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;EACjB,EAAED,kBAAU,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;EACzD,EAAE,MAAM,IAAIA,kBAAU,CAAC,YAAY,CAAC;AACpC;EACA,EAAEC,eAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;EACvD,CAAC;AACD;EACA,SAAS,0BAA0B,CAAC,cAAc,EAAE;EACpD,EAAE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;EACvC,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;EAChB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EACnC,IAAI,KAAK,IAAIG,WAAK,CAAC,YAAY,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;EACxE,GAAG;EACH,EAAE,OAAO,KAAK,CAAC;EACf,CAAC;AACD;EACA,SAAS,UAAU,CAAC,sBAAsB,EAAE,cAAc,EAAE,eAAe,EAAE;EAC7E,EAAE,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC;EACxC,EAAE,MAAM,MAAM;EACd,IAAI,CAAC;EACL,IAAI,CAAC;EACL,IAAI,MAAM,GAAGF,yBAAc,CAAC,YAAY;EACxC,IAAI,CAAC;EACL,IAAI,0BAA0B,CAAC,cAAc,CAAC,CAAC;AAC/C;EACA,EAAE,MAAM,YAAY,GAAG,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;AAChD;EACA,EAAE,IAAI,MAAM,GAAG,CAAC,CAAC;EACjB,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,sBAAsB,CAAC;EAClD,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC;AAClC;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;EACnC,IAAIA,yBAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;EAClE,IAAI,MAAM,IAAIA,yBAAc,CAAC,YAAY,CAAC;EAC1C,GAAG;AACH;EACA,EAAE,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC;EAC9C,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,aAAa,CAAC;AACzC;EACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,EAAE,EAAE,CAAC,EAAE;EAC1C,IAAI,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AAC3C;EACA,IAAIE,WAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;EACzD,IAAI,MAAM,IAAIA,WAAK,CAAC,YAAY,CAAC;AACjC;EACA,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;EACjD,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;AAChD;EACA,IAAI,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;EAC3C,IAAI,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC;EAC3C,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,cAAc,CAAC;AAC5C;EACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,EAAE,EAAE,CAAC,EAAE;EAC7C,MAAM,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;EAC3C,KAAK;EACL,GAAG;AACH;EACA,EAAE,OAAO,YAAY,CAAC;EACtB,CAAC;AACD;EACA,SAAS,0BAA0B,CAAC,UAAU,EAAE,mBAAmB,EAAE;EACrE,EAAE,MAAM,KAAK,GAAGD,oBAAO,CAAC,UAAU,CAAC,KAAK,CAAC;EACzC,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;EACxC,MAAM,SAAS,CAAC;EAChB,EAAE,MAAM,WAAW,GAAGA,oBAAO,CAAC,UAAU,CAAC,WAAW,CAAC;EACrD,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,WAAW,CAAC;EAC7C,MAAM,SAAS,CAAC;EAChB,EAAE,MAAM,SAAS,GAAGA,oBAAO,CAAC,UAAU,CAAC,SAAS,CAAC;EACjD,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC;EAC5C,MAAM,SAAS,CAAC;EAChB,EAAE,MAAM,gBAAgB,GAAGA,oBAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC;EAC/D,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC;EAClD,MAAM,SAAS,CAAC;EAChB,EAAE,MAAM,UAAU,GAAGA,oBAAO,CAAC,UAAU,CAAC,UAAU,CAAC;EACnD,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC;EAC7C,MAAM,SAAS,CAAC;EAChB,EAAE,MAAM,iBAAiB,GAAGA,oBAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC;EACjE,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,iBAAiB,CAAC;EACnD,MAAM,SAAS,CAAC;EAChB,EAAE,MAAM,OAAO,GAAGA,oBAAO,CAAC,UAAU,CAAC,OAAO,CAAC;EAC7C,MAAM,IAAI,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;EAC1C,MAAM,SAAS,CAAC;EAChB,EAAE,MAAM,cAAc,GAAGA,oBAAO,CAAC,UAAU,CAAC,cAAc,CAAC;EAC3D,MAAM,IAAI,WAAW,CAAC,UAAU,CAAC,cAAc,CAAC;EAChD,MAAM,SAAS,CAAC;AAChB;EACA,EAAE,MAAM,aAAa,GAAGA,oBAAO,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;EAChE,EAAE,MAAM,iBAAiB,GAAGA,oBAAO,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC;EAC7E,EAAE,MAAM,kBAAkB,GAAGA,oBAAO,CAAC,UAAU,CAAC,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC;EAChF,EAAE,MAAM,eAAe,GAAGA,oBAAO,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AACvE;EACA,EAAE,MAAM,WAAW,GAAGE,uBAAW,CAAC,UAAU,EAAE,CAAC;EAC/C,EAAE,MAAM,gBAAgB,GAAGC,iCAAgB,CAAC,eAAe,EAAE,CAAC;EAC9D,EAAE,MAAM,iBAAiB,GAAGC,mCAAiB,CAAC,gBAAgB,EAAE,CAAC;AACjE;EACA,EAAE,MAAM,YAAY,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;EAC9D,EAAE,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;EACxE,EAAE,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1E;EACA,EAAE,IAAI,iBAAiB,GAAG,YAAY,CAAC,MAAM,GAAG,aAAa,CAAC;EAC9D,EAAE,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,iBAAiB,CAAC;EACpE,EAAE,iBAAiB;EACnB,IAAI,kBAAkB,CAAC,MAAM,IAAI,kBAAkB,GAAG,eAAe,CAAC,CAAC;AACvE;EACA,EAAE,MAAM,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC;EACzC,EAAE,MAAM,eAAe,GAAG,gBAAgB,CAAC,OAAO,CAAC;EACnD,EAAE,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACrD;EACA,EAAE,IAAI,eAAe,GAAG,UAAU,CAAC,MAAM,GAAG,aAAa,CAAC;EAC1D,EAAE,eAAe,IAAI,eAAe,CAAC,MAAM,GAAG,iBAAiB,CAAC;EAChE,EAAE,eAAe;EACjB,IAAI,gBAAgB,CAAC,MAAM,IAAI,kBAAkB,GAAG,eAAe,CAAC,CAAC;AACrE;EACA,EAAE,MAAM,SAAS,GAAG,IAAI,YAAY,CAAC,iBAAiB,CAAC,CAAC;EACxD,EAAE,MAAM,cAAc,GAAG,IAAI,WAAW,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;EAChE,EAAE,MAAM,OAAO,GAAGC,2BAAa,CAAC,gBAAgB;EAChD,IAAI,iBAAiB,GAAG,CAAC;EACzB,IAAI,eAAe;EACnB,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,kBAAkB;EAC1B,IAAI,aAAa,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,eAAe,CAAC;EAC7E,EAAE,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC;EACvD,EAAE,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;EACvD,EAAE,MAAM,YAAY,GAAG,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC;EAC3D,EAAE,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,kBAAkB,CAAC,CAAC;EAC1D,EAAE,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACxD;EACA,EAAE,YAAY,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACxC;EACA,EAAE,MAAM,OAAO,GAAG;EAClB,IAAI,gBAAgB,EAAE,IAAI,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC;EAClE,IAAI,SAAS,EAAE,SAAS;EACxB,IAAI,cAAc,EAAE,cAAc;EAClC,IAAI,OAAO,EAAE,OAAO;EACpB,IAAI,QAAQ,EAAE,QAAQ;EACtB,IAAI,cAAc,EAAE,cAAc;EAClC,IAAI,YAAY,EAAE,YAAY;EAC9B,IAAI,WAAW,EAAE,WAAW;EAC5B,IAAI,eAAe,EAAE,eAAe;EACpC,IAAI,cAAc,EAAE,CAAC;EACrB,IAAI,YAAY,EAAE,CAAC;EACnB,IAAI,WAAW,EAAE,CAAC;EAClB,IAAI,oBAAoB,EAAE,CAAC;EAC3B,IAAI,WAAW,EAAE,cAAc;EAC/B,IAAI,MAAM,EAAE,aAAa;EACzB,GAAG,CAAC;AACJ;EACA,EAAE,eAAe;EACjB,IAAI,OAAO;EACX,IAAI,KAAK;EACT,IAAI,WAAW;EACf,IAAI,WAAW;EACf,IAAI,+BAA+B;EACnC,GAAG,CAAC;EACJ,EAAE,eAAe;EACjB,IAAI,OAAO;EACX,IAAI,SAAS;EACb,IAAI,gBAAgB;EACpB,IAAI,gBAAgB;EACpB,IAAI,oCAAoC;EACxC,GAAG,CAAC;EACJ,EAAE,eAAe;EACjB,IAAI,OAAO;EACX,IAAI,UAAU;EACd,IAAI,iBAAiB;EACrB,IAAI,iBAAiB;EACrB,IAAI,qCAAqC;EACzC,GAAG,CAAC;EACJ,EAAE,eAAe;EACjB,IAAI,OAAO;EACX,IAAI,OAAO;EACX,IAAI,cAAc;EAClB,IAAI,iBAAiB;EACrB,IAAI,kCAAkC;EACtC,GAAG,CAAC;AACJ;EACA,EAAE,MAAM,YAAY,GAAG,UAAU;EACjC,IAAI,OAAO,CAAC,iBAAiB;EAC7B,IAAI,cAAc;EAClB,IAAI,eAAe;EACnB,GAAG,CAAC;EACJ,EAAE,mBAAmB,CAAC,IAAI;EAC1B,IAAI,SAAS,CAAC,MAAM;EACpB,IAAI,cAAc,CAAC,MAAM;EACzB,IAAI,OAAO,CAAC,MAAM;EAClB,GAAG,CAAC;EACJ,EAAE,mBAAmB,CAAC,IAAI;EAC1B,IAAI,QAAQ,CAAC,MAAM;EACnB,IAAI,YAAY,CAAC,MAAM;EACvB,IAAI,WAAW,CAAC,MAAM;EACtB,GAAG,CAAC;EACJ,EAAE,mBAAmB,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;AAChD;EACA,EAAE,OAAO;EACT,IAAI,SAAS,EAAE,SAAS,CAAC,MAAM;EAC/B,IAAI,cAAc,EAAE,cAAc,CAAC,MAAM;EACzC,IAAI,OAAO,EAAE,OAAO,CAAC,MAAM;EAC3B,IAAI,YAAY,EAAE,YAAY,CAAC,MAAM;EACrC,IAAI,WAAW,EAAE,WAAW,CAAC,MAAM;EACnC,IAAI,QAAQ,EAAE,QAAQ,CAAC,MAAM;EAC7B,IAAI,YAAY,EAAE,YAAY,CAAC,MAAM;EACrC,GAAG,CAAC;EACJ,CAAC;AACD,qCAAe,yBAAyB,CAAC,0BAA0B,CAAC;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/createVectorTilePoints.js b/debug/cesium/Workers/createVectorTilePoints.js deleted file mode 100644 index e71d613..0000000 --- a/debug/cesium/Workers/createVectorTilePoints.js +++ /dev/null @@ -1,105 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./AttributeCompression-e9888cb8', './Matrix3-f22b0303', './Math-9be8b918', './Matrix2-036c77dd', './createTaskProcessorWorker', './ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './Check-d10e5f2e', './WebGLConstants-f27a5e29', './RuntimeError-e5c6a8b9'], (function (AttributeCompression, Matrix3, Math, Matrix2, createTaskProcessorWorker, ComponentDatatype, defaultValue, Check, WebGLConstants, RuntimeError) { 'use strict'; - - const maxShort = 32767; - - const scratchBVCartographic = new Matrix3.Cartographic(); - const scratchEncodedPosition = new Matrix3.Cartesian3(); - - const scratchRectangle = new Matrix2.Rectangle(); - const scratchEllipsoid = new Matrix3.Ellipsoid(); - const scratchMinMaxHeights = { - min: undefined, - max: undefined, - }; - - function unpackBuffer(packedBuffer) { - packedBuffer = new Float64Array(packedBuffer); - - let offset = 0; - scratchMinMaxHeights.min = packedBuffer[offset++]; - scratchMinMaxHeights.max = packedBuffer[offset++]; - - Matrix2.Rectangle.unpack(packedBuffer, offset, scratchRectangle); - offset += Matrix2.Rectangle.packedLength; - - Matrix3.Ellipsoid.unpack(packedBuffer, offset, scratchEllipsoid); - } - - function createVectorTilePoints(parameters, transferableObjects) { - const positions = new Uint16Array(parameters.positions); - - unpackBuffer(parameters.packedBuffer); - const rectangle = scratchRectangle; - const ellipsoid = scratchEllipsoid; - const minimumHeight = scratchMinMaxHeights.min; - const maximumHeight = scratchMinMaxHeights.max; - - const positionsLength = positions.length / 3; - const uBuffer = positions.subarray(0, positionsLength); - const vBuffer = positions.subarray(positionsLength, 2 * positionsLength); - const heightBuffer = positions.subarray( - 2 * positionsLength, - 3 * positionsLength - ); - AttributeCompression.AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer); - - const decoded = new Float64Array(positions.length); - for (let i = 0; i < positionsLength; ++i) { - const u = uBuffer[i]; - const v = vBuffer[i]; - const h = heightBuffer[i]; - - const lon = Math.CesiumMath.lerp(rectangle.west, rectangle.east, u / maxShort); - const lat = Math.CesiumMath.lerp(rectangle.south, rectangle.north, v / maxShort); - const alt = Math.CesiumMath.lerp(minimumHeight, maximumHeight, h / maxShort); - - const cartographic = Matrix3.Cartographic.fromRadians( - lon, - lat, - alt, - scratchBVCartographic - ); - const decodedPosition = ellipsoid.cartographicToCartesian( - cartographic, - scratchEncodedPosition - ); - Matrix3.Cartesian3.pack(decodedPosition, decoded, i * 3); - } - - transferableObjects.push(decoded.buffer); - - return { - positions: decoded.buffer, - }; - } - var createVectorTilePoints$1 = createTaskProcessorWorker(createVectorTilePoints); - - return createVectorTilePoints$1; - -})); -//# sourceMappingURL=createVectorTilePoints.js.map diff --git a/debug/cesium/Workers/createVectorTilePoints.js.map b/debug/cesium/Workers/createVectorTilePoints.js.map deleted file mode 100644 index c4618b0..0000000 --- a/debug/cesium/Workers/createVectorTilePoints.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createVectorTilePoints.js","sources":["../../../Source/WorkersES6/createVectorTilePoints.js"],"sourcesContent":["import AttributeCompression from \"../Core/AttributeCompression.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Cartographic from \"../Core/Cartographic.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport CesiumMath from \"../Core/Math.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst maxShort = 32767;\r\n\r\nconst scratchBVCartographic = new Cartographic();\r\nconst scratchEncodedPosition = new Cartesian3();\r\n\r\nconst scratchRectangle = new Rectangle();\r\nconst scratchEllipsoid = new Ellipsoid();\r\nconst scratchMinMaxHeights = {\r\n min: undefined,\r\n max: undefined,\r\n};\r\n\r\nfunction unpackBuffer(packedBuffer) {\r\n packedBuffer = new Float64Array(packedBuffer);\r\n\r\n let offset = 0;\r\n scratchMinMaxHeights.min = packedBuffer[offset++];\r\n scratchMinMaxHeights.max = packedBuffer[offset++];\r\n\r\n Rectangle.unpack(packedBuffer, offset, scratchRectangle);\r\n offset += Rectangle.packedLength;\r\n\r\n Ellipsoid.unpack(packedBuffer, offset, scratchEllipsoid);\r\n}\r\n\r\nfunction createVectorTilePoints(parameters, transferableObjects) {\r\n const positions = new Uint16Array(parameters.positions);\r\n\r\n unpackBuffer(parameters.packedBuffer);\r\n const rectangle = scratchRectangle;\r\n const ellipsoid = scratchEllipsoid;\r\n const minimumHeight = scratchMinMaxHeights.min;\r\n const maximumHeight = scratchMinMaxHeights.max;\r\n\r\n const positionsLength = positions.length / 3;\r\n const uBuffer = positions.subarray(0, positionsLength);\r\n const vBuffer = positions.subarray(positionsLength, 2 * positionsLength);\r\n const heightBuffer = positions.subarray(\r\n 2 * positionsLength,\r\n 3 * positionsLength\r\n );\r\n AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\r\n\r\n const decoded = new Float64Array(positions.length);\r\n for (let i = 0; i < positionsLength; ++i) {\r\n const u = uBuffer[i];\r\n const v = vBuffer[i];\r\n const h = heightBuffer[i];\r\n\r\n const lon = CesiumMath.lerp(rectangle.west, rectangle.east, u / maxShort);\r\n const lat = CesiumMath.lerp(rectangle.south, rectangle.north, v / maxShort);\r\n const alt = CesiumMath.lerp(minimumHeight, maximumHeight, h / maxShort);\r\n\r\n const cartographic = Cartographic.fromRadians(\r\n lon,\r\n lat,\r\n alt,\r\n scratchBVCartographic\r\n );\r\n const decodedPosition = ellipsoid.cartographicToCartesian(\r\n cartographic,\r\n scratchEncodedPosition\r\n );\r\n Cartesian3.pack(decodedPosition, decoded, i * 3);\r\n }\r\n\r\n transferableObjects.push(decoded.buffer);\r\n\r\n return {\r\n positions: decoded.buffer,\r\n };\r\n}\r\nexport default createTaskProcessorWorker(createVectorTilePoints);\r\n"],"names":["Cartographic","Cartesian3","Rectangle","Ellipsoid","AttributeCompression","CesiumMath"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createVectorTilePolygons.js b/debug/cesium/Workers/createVectorTilePolygons.js deleted file mode 100644 index a5eea92..0000000 --- a/debug/cesium/Workers/createVectorTilePolygons.js +++ /dev/null @@ -1,432 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./AttributeCompression-e9888cb8', './Matrix3-f22b0303', './Color-c019c34b', './defaultValue-0ab18f7d', './IndexDatatype-b4e5cf89', './Math-9be8b918', './OrientedBoundingBox-7e2eebab', './Matrix2-036c77dd', './createTaskProcessorWorker', './ComponentDatatype-13a5630b', './Check-d10e5f2e', './WebGLConstants-f27a5e29', './Transforms-11fb6b0a', './combine-4598d225', './RuntimeError-e5c6a8b9', './EllipsoidTangentPlane-c421b2cb', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (AttributeCompression, Matrix3, Color, defaultValue, IndexDatatype, Math$1, OrientedBoundingBox, Matrix2, createTaskProcessorWorker, ComponentDatatype, Check, WebGLConstants, Transforms, combine, RuntimeError, EllipsoidTangentPlane, AxisAlignedBoundingBox, IntersectionTests, Plane) { 'use strict'; - - const scratchCenter = new Matrix3.Cartesian3(); - const scratchEllipsoid = new Matrix3.Ellipsoid(); - const scratchRectangle = new Matrix2.Rectangle(); - const scratchScalars = { - min: undefined, - max: undefined, - indexBytesPerElement: undefined, - }; - - function unpackBuffer(buffer) { - const packedBuffer = new Float64Array(buffer); - - let offset = 0; - scratchScalars.indexBytesPerElement = packedBuffer[offset++]; - - scratchScalars.min = packedBuffer[offset++]; - scratchScalars.max = packedBuffer[offset++]; - - Matrix3.Cartesian3.unpack(packedBuffer, offset, scratchCenter); - offset += Matrix3.Cartesian3.packedLength; - - Matrix3.Ellipsoid.unpack(packedBuffer, offset, scratchEllipsoid); - offset += Matrix3.Ellipsoid.packedLength; - - Matrix2.Rectangle.unpack(packedBuffer, offset, scratchRectangle); - } - - function packedBatchedIndicesLength(batchedIndices) { - const length = batchedIndices.length; - let count = 0; - for (let i = 0; i < length; ++i) { - count += Color.Color.packedLength + 3 + batchedIndices[i].batchIds.length; - } - return count; - } - - function packBuffer(indexDatatype, boundingVolumes, batchedIndices) { - const numBVs = boundingVolumes.length; - const length = - 1 + - 1 + - numBVs * OrientedBoundingBox.OrientedBoundingBox.packedLength + - 1 + - packedBatchedIndicesLength(batchedIndices); - - const packedBuffer = new Float64Array(length); - - let offset = 0; - packedBuffer[offset++] = indexDatatype; - packedBuffer[offset++] = numBVs; - - for (let i = 0; i < numBVs; ++i) { - OrientedBoundingBox.OrientedBoundingBox.pack(boundingVolumes[i], packedBuffer, offset); - offset += OrientedBoundingBox.OrientedBoundingBox.packedLength; - } - - const indicesLength = batchedIndices.length; - packedBuffer[offset++] = indicesLength; - - for (let j = 0; j < indicesLength; ++j) { - const batchedIndex = batchedIndices[j]; - - Color.Color.pack(batchedIndex.color, packedBuffer, offset); - offset += Color.Color.packedLength; - - packedBuffer[offset++] = batchedIndex.offset; - packedBuffer[offset++] = batchedIndex.count; - - const batchIds = batchedIndex.batchIds; - const batchIdsLength = batchIds.length; - packedBuffer[offset++] = batchIdsLength; - - for (let k = 0; k < batchIdsLength; ++k) { - packedBuffer[offset++] = batchIds[k]; - } - } - - return packedBuffer; - } - - const maxShort = 32767; - - const scratchEncodedPosition = new Matrix3.Cartesian3(); - const scratchNormal = new Matrix3.Cartesian3(); - const scratchScaledNormal = new Matrix3.Cartesian3(); - const scratchMinHeightPosition = new Matrix3.Cartesian3(); - const scratchMaxHeightPosition = new Matrix3.Cartesian3(); - const scratchBVCartographic = new Matrix3.Cartographic(); - const scratchBVRectangle = new Matrix2.Rectangle(); - - function createVectorTilePolygons(parameters, transferableObjects) { - unpackBuffer(parameters.packedBuffer); - - let indices; - const indexBytesPerElement = scratchScalars.indexBytesPerElement; - if (indexBytesPerElement === 2) { - indices = new Uint16Array(parameters.indices); - } else { - indices = new Uint32Array(parameters.indices); - } - - const positions = new Uint16Array(parameters.positions); - const counts = new Uint32Array(parameters.counts); - const indexCounts = new Uint32Array(parameters.indexCounts); - const batchIds = new Uint32Array(parameters.batchIds); - const batchTableColors = new Uint32Array(parameters.batchTableColors); - - const boundingVolumes = new Array(counts.length); - - const center = scratchCenter; - const ellipsoid = scratchEllipsoid; - let rectangle = scratchRectangle; - const minHeight = scratchScalars.min; - const maxHeight = scratchScalars.max; - - let minimumHeights = parameters.minimumHeights; - let maximumHeights = parameters.maximumHeights; - if (defaultValue.defined(minimumHeights) && defaultValue.defined(maximumHeights)) { - minimumHeights = new Float32Array(minimumHeights); - maximumHeights = new Float32Array(maximumHeights); - } - - let i; - let j; - let rgba; - - const positionsLength = positions.length / 2; - const uBuffer = positions.subarray(0, positionsLength); - const vBuffer = positions.subarray(positionsLength, 2 * positionsLength); - AttributeCompression.AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer); - - const decodedPositions = new Float64Array(positionsLength * 3); - for (i = 0; i < positionsLength; ++i) { - const u = uBuffer[i]; - const v = vBuffer[i]; - - const x = Math$1.CesiumMath.lerp(rectangle.west, rectangle.east, u / maxShort); - const y = Math$1.CesiumMath.lerp(rectangle.south, rectangle.north, v / maxShort); - - const cart = Matrix3.Cartographic.fromRadians(x, y, 0.0, scratchBVCartographic); - const decodedPosition = ellipsoid.cartographicToCartesian( - cart, - scratchEncodedPosition - ); - Matrix3.Cartesian3.pack(decodedPosition, decodedPositions, i * 3); - } - - const countsLength = counts.length; - const offsets = new Array(countsLength); - const indexOffsets = new Array(countsLength); - let currentOffset = 0; - let currentIndexOffset = 0; - for (i = 0; i < countsLength; ++i) { - offsets[i] = currentOffset; - indexOffsets[i] = currentIndexOffset; - - currentOffset += counts[i]; - currentIndexOffset += indexCounts[i]; - } - - const batchedPositions = new Float32Array(positionsLength * 3 * 2); - const batchedIds = new Uint16Array(positionsLength * 2); - const batchedIndexOffsets = new Uint32Array(indexOffsets.length); - const batchedIndexCounts = new Uint32Array(indexCounts.length); - let batchedIndices = []; - - const colorToBuffers = {}; - for (i = 0; i < countsLength; ++i) { - rgba = batchTableColors[i]; - if (!defaultValue.defined(colorToBuffers[rgba])) { - colorToBuffers[rgba] = { - positionLength: counts[i], - indexLength: indexCounts[i], - offset: 0, - indexOffset: 0, - batchIds: [i], - }; - } else { - colorToBuffers[rgba].positionLength += counts[i]; - colorToBuffers[rgba].indexLength += indexCounts[i]; - colorToBuffers[rgba].batchIds.push(i); - } - } - - // get the offsets and counts for the positions and indices of each primitive - let buffer; - let byColorPositionOffset = 0; - let byColorIndexOffset = 0; - for (rgba in colorToBuffers) { - if (colorToBuffers.hasOwnProperty(rgba)) { - buffer = colorToBuffers[rgba]; - buffer.offset = byColorPositionOffset; - buffer.indexOffset = byColorIndexOffset; - - const positionLength = buffer.positionLength * 2; - const indexLength = buffer.indexLength * 2 + buffer.positionLength * 6; - - byColorPositionOffset += positionLength; - byColorIndexOffset += indexLength; - - buffer.indexLength = indexLength; - } - } - - const batchedDrawCalls = []; - - for (rgba in colorToBuffers) { - if (colorToBuffers.hasOwnProperty(rgba)) { - buffer = colorToBuffers[rgba]; - - batchedDrawCalls.push({ - color: Color.Color.fromRgba(parseInt(rgba)), - offset: buffer.indexOffset, - count: buffer.indexLength, - batchIds: buffer.batchIds, - }); - } - } - - for (i = 0; i < countsLength; ++i) { - rgba = batchTableColors[i]; - - buffer = colorToBuffers[rgba]; - const positionOffset = buffer.offset; - let positionIndex = positionOffset * 3; - let batchIdIndex = positionOffset; - - const polygonOffset = offsets[i]; - const polygonCount = counts[i]; - const batchId = batchIds[i]; - - let polygonMinimumHeight = minHeight; - let polygonMaximumHeight = maxHeight; - if (defaultValue.defined(minimumHeights) && defaultValue.defined(maximumHeights)) { - polygonMinimumHeight = minimumHeights[i]; - polygonMaximumHeight = maximumHeights[i]; - } - - let minLat = Number.POSITIVE_INFINITY; - let maxLat = Number.NEGATIVE_INFINITY; - let minLon = Number.POSITIVE_INFINITY; - let maxLon = Number.NEGATIVE_INFINITY; - - for (j = 0; j < polygonCount; ++j) { - const position = Matrix3.Cartesian3.unpack( - decodedPositions, - polygonOffset * 3 + j * 3, - scratchEncodedPosition - ); - ellipsoid.scaleToGeodeticSurface(position, position); - - const carto = ellipsoid.cartesianToCartographic( - position, - scratchBVCartographic - ); - const lat = carto.latitude; - const lon = carto.longitude; - - minLat = Math.min(lat, minLat); - maxLat = Math.max(lat, maxLat); - minLon = Math.min(lon, minLon); - maxLon = Math.max(lon, maxLon); - - const normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal); - let scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - normal, - polygonMinimumHeight, - scratchScaledNormal - ); - const minHeightPosition = Matrix3.Cartesian3.add( - position, - scaledNormal, - scratchMinHeightPosition - ); - - scaledNormal = Matrix3.Cartesian3.multiplyByScalar( - normal, - polygonMaximumHeight, - scaledNormal - ); - const maxHeightPosition = Matrix3.Cartesian3.add( - position, - scaledNormal, - scratchMaxHeightPosition - ); - - Matrix3.Cartesian3.subtract(maxHeightPosition, center, maxHeightPosition); - Matrix3.Cartesian3.subtract(minHeightPosition, center, minHeightPosition); - - Matrix3.Cartesian3.pack(maxHeightPosition, batchedPositions, positionIndex); - Matrix3.Cartesian3.pack(minHeightPosition, batchedPositions, positionIndex + 3); - - batchedIds[batchIdIndex] = batchId; - batchedIds[batchIdIndex + 1] = batchId; - - positionIndex += 6; - batchIdIndex += 2; - } - - rectangle = scratchBVRectangle; - rectangle.west = minLon; - rectangle.east = maxLon; - rectangle.south = minLat; - rectangle.north = maxLat; - - boundingVolumes[i] = OrientedBoundingBox.OrientedBoundingBox.fromRectangle( - rectangle, - minHeight, - maxHeight, - ellipsoid - ); - - let indicesIndex = buffer.indexOffset; - - const indexOffset = indexOffsets[i]; - const indexCount = indexCounts[i]; - - batchedIndexOffsets[i] = indicesIndex; - - for (j = 0; j < indexCount; j += 3) { - const i0 = indices[indexOffset + j] - polygonOffset; - const i1 = indices[indexOffset + j + 1] - polygonOffset; - const i2 = indices[indexOffset + j + 2] - polygonOffset; - - // triangle on the top of the extruded polygon - batchedIndices[indicesIndex++] = i0 * 2 + positionOffset; - batchedIndices[indicesIndex++] = i1 * 2 + positionOffset; - batchedIndices[indicesIndex++] = i2 * 2 + positionOffset; - - // triangle on the bottom of the extruded polygon - batchedIndices[indicesIndex++] = i2 * 2 + 1 + positionOffset; - batchedIndices[indicesIndex++] = i1 * 2 + 1 + positionOffset; - batchedIndices[indicesIndex++] = i0 * 2 + 1 + positionOffset; - } - - // indices for the walls of the extruded polygon - for (j = 0; j < polygonCount; ++j) { - const v0 = j; - const v1 = (j + 1) % polygonCount; - - batchedIndices[indicesIndex++] = v0 * 2 + 1 + positionOffset; - batchedIndices[indicesIndex++] = v1 * 2 + positionOffset; - batchedIndices[indicesIndex++] = v0 * 2 + positionOffset; - - batchedIndices[indicesIndex++] = v0 * 2 + 1 + positionOffset; - batchedIndices[indicesIndex++] = v1 * 2 + 1 + positionOffset; - batchedIndices[indicesIndex++] = v1 * 2 + positionOffset; - } - - buffer.offset += polygonCount * 2; - buffer.indexOffset = indicesIndex; - - batchedIndexCounts[i] = indicesIndex - batchedIndexOffsets[i]; - } - - batchedIndices = IndexDatatype.IndexDatatype.createTypedArray( - batchedPositions.length / 3, - batchedIndices - ); - - const batchedIndicesLength = batchedDrawCalls.length; - for (let m = 0; m < batchedIndicesLength; ++m) { - const tempIds = batchedDrawCalls[m].batchIds; - let count = 0; - const tempIdsLength = tempIds.length; - for (let n = 0; n < tempIdsLength; ++n) { - count += batchedIndexCounts[tempIds[n]]; - } - batchedDrawCalls[m].count = count; - } - - const indexDatatype = - batchedIndices.BYTES_PER_ELEMENT === 2 - ? IndexDatatype.IndexDatatype.UNSIGNED_SHORT - : IndexDatatype.IndexDatatype.UNSIGNED_INT; - const packedBuffer = packBuffer( - indexDatatype, - boundingVolumes, - batchedDrawCalls - ); - - transferableObjects.push( - batchedPositions.buffer, - batchedIndices.buffer, - batchedIndexOffsets.buffer, - batchedIndexCounts.buffer, - batchedIds.buffer, - packedBuffer.buffer - ); - - return { - positions: batchedPositions.buffer, - indices: batchedIndices.buffer, - indexOffsets: batchedIndexOffsets.buffer, - indexCounts: batchedIndexCounts.buffer, - batchIds: batchedIds.buffer, - packedBuffer: packedBuffer.buffer, - }; - } - var createVectorTilePolygons$1 = createTaskProcessorWorker(createVectorTilePolygons); - - return createVectorTilePolygons$1; - -})); -//# sourceMappingURL=createVectorTilePolygons.js.map diff --git a/debug/cesium/Workers/createVectorTilePolygons.js.map b/debug/cesium/Workers/createVectorTilePolygons.js.map deleted file mode 100644 index a389b09..0000000 --- a/debug/cesium/Workers/createVectorTilePolygons.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createVectorTilePolygons.js","sources":["../../../Source/WorkersES6/createVectorTilePolygons.js"],"sourcesContent":["import AttributeCompression from \"../Core/AttributeCompression.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Cartographic from \"../Core/Cartographic.js\";\r\nimport Color from \"../Core/Color.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\r\nimport CesiumMath from \"../Core/Math.js\";\r\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst scratchCenter = new Cartesian3();\r\nconst scratchEllipsoid = new Ellipsoid();\r\nconst scratchRectangle = new Rectangle();\r\nconst scratchScalars = {\r\n min: undefined,\r\n max: undefined,\r\n indexBytesPerElement: undefined,\r\n};\r\n\r\nfunction unpackBuffer(buffer) {\r\n const packedBuffer = new Float64Array(buffer);\r\n\r\n let offset = 0;\r\n scratchScalars.indexBytesPerElement = packedBuffer[offset++];\r\n\r\n scratchScalars.min = packedBuffer[offset++];\r\n scratchScalars.max = packedBuffer[offset++];\r\n\r\n Cartesian3.unpack(packedBuffer, offset, scratchCenter);\r\n offset += Cartesian3.packedLength;\r\n\r\n Ellipsoid.unpack(packedBuffer, offset, scratchEllipsoid);\r\n offset += Ellipsoid.packedLength;\r\n\r\n Rectangle.unpack(packedBuffer, offset, scratchRectangle);\r\n}\r\n\r\nfunction packedBatchedIndicesLength(batchedIndices) {\r\n const length = batchedIndices.length;\r\n let count = 0;\r\n for (let i = 0; i < length; ++i) {\r\n count += Color.packedLength + 3 + batchedIndices[i].batchIds.length;\r\n }\r\n return count;\r\n}\r\n\r\nfunction packBuffer(indexDatatype, boundingVolumes, batchedIndices) {\r\n const numBVs = boundingVolumes.length;\r\n const length =\r\n 1 +\r\n 1 +\r\n numBVs * OrientedBoundingBox.packedLength +\r\n 1 +\r\n packedBatchedIndicesLength(batchedIndices);\r\n\r\n const packedBuffer = new Float64Array(length);\r\n\r\n let offset = 0;\r\n packedBuffer[offset++] = indexDatatype;\r\n packedBuffer[offset++] = numBVs;\r\n\r\n for (let i = 0; i < numBVs; ++i) {\r\n OrientedBoundingBox.pack(boundingVolumes[i], packedBuffer, offset);\r\n offset += OrientedBoundingBox.packedLength;\r\n }\r\n\r\n const indicesLength = batchedIndices.length;\r\n packedBuffer[offset++] = indicesLength;\r\n\r\n for (let j = 0; j < indicesLength; ++j) {\r\n const batchedIndex = batchedIndices[j];\r\n\r\n Color.pack(batchedIndex.color, packedBuffer, offset);\r\n offset += Color.packedLength;\r\n\r\n packedBuffer[offset++] = batchedIndex.offset;\r\n packedBuffer[offset++] = batchedIndex.count;\r\n\r\n const batchIds = batchedIndex.batchIds;\r\n const batchIdsLength = batchIds.length;\r\n packedBuffer[offset++] = batchIdsLength;\r\n\r\n for (let k = 0; k < batchIdsLength; ++k) {\r\n packedBuffer[offset++] = batchIds[k];\r\n }\r\n }\r\n\r\n return packedBuffer;\r\n}\r\n\r\nconst maxShort = 32767;\r\n\r\nconst scratchEncodedPosition = new Cartesian3();\r\nconst scratchNormal = new Cartesian3();\r\nconst scratchScaledNormal = new Cartesian3();\r\nconst scratchMinHeightPosition = new Cartesian3();\r\nconst scratchMaxHeightPosition = new Cartesian3();\r\nconst scratchBVCartographic = new Cartographic();\r\nconst scratchBVRectangle = new Rectangle();\r\n\r\nfunction createVectorTilePolygons(parameters, transferableObjects) {\r\n unpackBuffer(parameters.packedBuffer);\r\n\r\n let indices;\r\n const indexBytesPerElement = scratchScalars.indexBytesPerElement;\r\n if (indexBytesPerElement === 2) {\r\n indices = new Uint16Array(parameters.indices);\r\n } else {\r\n indices = new Uint32Array(parameters.indices);\r\n }\r\n\r\n const positions = new Uint16Array(parameters.positions);\r\n const counts = new Uint32Array(parameters.counts);\r\n const indexCounts = new Uint32Array(parameters.indexCounts);\r\n const batchIds = new Uint32Array(parameters.batchIds);\r\n const batchTableColors = new Uint32Array(parameters.batchTableColors);\r\n\r\n const boundingVolumes = new Array(counts.length);\r\n\r\n const center = scratchCenter;\r\n const ellipsoid = scratchEllipsoid;\r\n let rectangle = scratchRectangle;\r\n const minHeight = scratchScalars.min;\r\n const maxHeight = scratchScalars.max;\r\n\r\n let minimumHeights = parameters.minimumHeights;\r\n let maximumHeights = parameters.maximumHeights;\r\n if (defined(minimumHeights) && defined(maximumHeights)) {\r\n minimumHeights = new Float32Array(minimumHeights);\r\n maximumHeights = new Float32Array(maximumHeights);\r\n }\r\n\r\n let i;\r\n let j;\r\n let rgba;\r\n\r\n const positionsLength = positions.length / 2;\r\n const uBuffer = positions.subarray(0, positionsLength);\r\n const vBuffer = positions.subarray(positionsLength, 2 * positionsLength);\r\n AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer);\r\n\r\n const decodedPositions = new Float64Array(positionsLength * 3);\r\n for (i = 0; i < positionsLength; ++i) {\r\n const u = uBuffer[i];\r\n const v = vBuffer[i];\r\n\r\n const x = CesiumMath.lerp(rectangle.west, rectangle.east, u / maxShort);\r\n const y = CesiumMath.lerp(rectangle.south, rectangle.north, v / maxShort);\r\n\r\n const cart = Cartographic.fromRadians(x, y, 0.0, scratchBVCartographic);\r\n const decodedPosition = ellipsoid.cartographicToCartesian(\r\n cart,\r\n scratchEncodedPosition\r\n );\r\n Cartesian3.pack(decodedPosition, decodedPositions, i * 3);\r\n }\r\n\r\n const countsLength = counts.length;\r\n const offsets = new Array(countsLength);\r\n const indexOffsets = new Array(countsLength);\r\n let currentOffset = 0;\r\n let currentIndexOffset = 0;\r\n for (i = 0; i < countsLength; ++i) {\r\n offsets[i] = currentOffset;\r\n indexOffsets[i] = currentIndexOffset;\r\n\r\n currentOffset += counts[i];\r\n currentIndexOffset += indexCounts[i];\r\n }\r\n\r\n const batchedPositions = new Float32Array(positionsLength * 3 * 2);\r\n const batchedIds = new Uint16Array(positionsLength * 2);\r\n const batchedIndexOffsets = new Uint32Array(indexOffsets.length);\r\n const batchedIndexCounts = new Uint32Array(indexCounts.length);\r\n let batchedIndices = [];\r\n\r\n const colorToBuffers = {};\r\n for (i = 0; i < countsLength; ++i) {\r\n rgba = batchTableColors[i];\r\n if (!defined(colorToBuffers[rgba])) {\r\n colorToBuffers[rgba] = {\r\n positionLength: counts[i],\r\n indexLength: indexCounts[i],\r\n offset: 0,\r\n indexOffset: 0,\r\n batchIds: [i],\r\n };\r\n } else {\r\n colorToBuffers[rgba].positionLength += counts[i];\r\n colorToBuffers[rgba].indexLength += indexCounts[i];\r\n colorToBuffers[rgba].batchIds.push(i);\r\n }\r\n }\r\n\r\n // get the offsets and counts for the positions and indices of each primitive\r\n let buffer;\r\n let byColorPositionOffset = 0;\r\n let byColorIndexOffset = 0;\r\n for (rgba in colorToBuffers) {\r\n if (colorToBuffers.hasOwnProperty(rgba)) {\r\n buffer = colorToBuffers[rgba];\r\n buffer.offset = byColorPositionOffset;\r\n buffer.indexOffset = byColorIndexOffset;\r\n\r\n const positionLength = buffer.positionLength * 2;\r\n const indexLength = buffer.indexLength * 2 + buffer.positionLength * 6;\r\n\r\n byColorPositionOffset += positionLength;\r\n byColorIndexOffset += indexLength;\r\n\r\n buffer.indexLength = indexLength;\r\n }\r\n }\r\n\r\n const batchedDrawCalls = [];\r\n\r\n for (rgba in colorToBuffers) {\r\n if (colorToBuffers.hasOwnProperty(rgba)) {\r\n buffer = colorToBuffers[rgba];\r\n\r\n batchedDrawCalls.push({\r\n color: Color.fromRgba(parseInt(rgba)),\r\n offset: buffer.indexOffset,\r\n count: buffer.indexLength,\r\n batchIds: buffer.batchIds,\r\n });\r\n }\r\n }\r\n\r\n for (i = 0; i < countsLength; ++i) {\r\n rgba = batchTableColors[i];\r\n\r\n buffer = colorToBuffers[rgba];\r\n const positionOffset = buffer.offset;\r\n let positionIndex = positionOffset * 3;\r\n let batchIdIndex = positionOffset;\r\n\r\n const polygonOffset = offsets[i];\r\n const polygonCount = counts[i];\r\n const batchId = batchIds[i];\r\n\r\n let polygonMinimumHeight = minHeight;\r\n let polygonMaximumHeight = maxHeight;\r\n if (defined(minimumHeights) && defined(maximumHeights)) {\r\n polygonMinimumHeight = minimumHeights[i];\r\n polygonMaximumHeight = maximumHeights[i];\r\n }\r\n\r\n let minLat = Number.POSITIVE_INFINITY;\r\n let maxLat = Number.NEGATIVE_INFINITY;\r\n let minLon = Number.POSITIVE_INFINITY;\r\n let maxLon = Number.NEGATIVE_INFINITY;\r\n\r\n for (j = 0; j < polygonCount; ++j) {\r\n const position = Cartesian3.unpack(\r\n decodedPositions,\r\n polygonOffset * 3 + j * 3,\r\n scratchEncodedPosition\r\n );\r\n ellipsoid.scaleToGeodeticSurface(position, position);\r\n\r\n const carto = ellipsoid.cartesianToCartographic(\r\n position,\r\n scratchBVCartographic\r\n );\r\n const lat = carto.latitude;\r\n const lon = carto.longitude;\r\n\r\n minLat = Math.min(lat, minLat);\r\n maxLat = Math.max(lat, maxLat);\r\n minLon = Math.min(lon, minLon);\r\n maxLon = Math.max(lon, maxLon);\r\n\r\n const normal = ellipsoid.geodeticSurfaceNormal(position, scratchNormal);\r\n let scaledNormal = Cartesian3.multiplyByScalar(\r\n normal,\r\n polygonMinimumHeight,\r\n scratchScaledNormal\r\n );\r\n const minHeightPosition = Cartesian3.add(\r\n position,\r\n scaledNormal,\r\n scratchMinHeightPosition\r\n );\r\n\r\n scaledNormal = Cartesian3.multiplyByScalar(\r\n normal,\r\n polygonMaximumHeight,\r\n scaledNormal\r\n );\r\n const maxHeightPosition = Cartesian3.add(\r\n position,\r\n scaledNormal,\r\n scratchMaxHeightPosition\r\n );\r\n\r\n Cartesian3.subtract(maxHeightPosition, center, maxHeightPosition);\r\n Cartesian3.subtract(minHeightPosition, center, minHeightPosition);\r\n\r\n Cartesian3.pack(maxHeightPosition, batchedPositions, positionIndex);\r\n Cartesian3.pack(minHeightPosition, batchedPositions, positionIndex + 3);\r\n\r\n batchedIds[batchIdIndex] = batchId;\r\n batchedIds[batchIdIndex + 1] = batchId;\r\n\r\n positionIndex += 6;\r\n batchIdIndex += 2;\r\n }\r\n\r\n rectangle = scratchBVRectangle;\r\n rectangle.west = minLon;\r\n rectangle.east = maxLon;\r\n rectangle.south = minLat;\r\n rectangle.north = maxLat;\r\n\r\n boundingVolumes[i] = OrientedBoundingBox.fromRectangle(\r\n rectangle,\r\n minHeight,\r\n maxHeight,\r\n ellipsoid\r\n );\r\n\r\n let indicesIndex = buffer.indexOffset;\r\n\r\n const indexOffset = indexOffsets[i];\r\n const indexCount = indexCounts[i];\r\n\r\n batchedIndexOffsets[i] = indicesIndex;\r\n\r\n for (j = 0; j < indexCount; j += 3) {\r\n const i0 = indices[indexOffset + j] - polygonOffset;\r\n const i1 = indices[indexOffset + j + 1] - polygonOffset;\r\n const i2 = indices[indexOffset + j + 2] - polygonOffset;\r\n\r\n // triangle on the top of the extruded polygon\r\n batchedIndices[indicesIndex++] = i0 * 2 + positionOffset;\r\n batchedIndices[indicesIndex++] = i1 * 2 + positionOffset;\r\n batchedIndices[indicesIndex++] = i2 * 2 + positionOffset;\r\n\r\n // triangle on the bottom of the extruded polygon\r\n batchedIndices[indicesIndex++] = i2 * 2 + 1 + positionOffset;\r\n batchedIndices[indicesIndex++] = i1 * 2 + 1 + positionOffset;\r\n batchedIndices[indicesIndex++] = i0 * 2 + 1 + positionOffset;\r\n }\r\n\r\n // indices for the walls of the extruded polygon\r\n for (j = 0; j < polygonCount; ++j) {\r\n const v0 = j;\r\n const v1 = (j + 1) % polygonCount;\r\n\r\n batchedIndices[indicesIndex++] = v0 * 2 + 1 + positionOffset;\r\n batchedIndices[indicesIndex++] = v1 * 2 + positionOffset;\r\n batchedIndices[indicesIndex++] = v0 * 2 + positionOffset;\r\n\r\n batchedIndices[indicesIndex++] = v0 * 2 + 1 + positionOffset;\r\n batchedIndices[indicesIndex++] = v1 * 2 + 1 + positionOffset;\r\n batchedIndices[indicesIndex++] = v1 * 2 + positionOffset;\r\n }\r\n\r\n buffer.offset += polygonCount * 2;\r\n buffer.indexOffset = indicesIndex;\r\n\r\n batchedIndexCounts[i] = indicesIndex - batchedIndexOffsets[i];\r\n }\r\n\r\n batchedIndices = IndexDatatype.createTypedArray(\r\n batchedPositions.length / 3,\r\n batchedIndices\r\n );\r\n\r\n const batchedIndicesLength = batchedDrawCalls.length;\r\n for (let m = 0; m < batchedIndicesLength; ++m) {\r\n const tempIds = batchedDrawCalls[m].batchIds;\r\n let count = 0;\r\n const tempIdsLength = tempIds.length;\r\n for (let n = 0; n < tempIdsLength; ++n) {\r\n count += batchedIndexCounts[tempIds[n]];\r\n }\r\n batchedDrawCalls[m].count = count;\r\n }\r\n\r\n const indexDatatype =\r\n batchedIndices.BYTES_PER_ELEMENT === 2\r\n ? IndexDatatype.UNSIGNED_SHORT\r\n : IndexDatatype.UNSIGNED_INT;\r\n const packedBuffer = packBuffer(\r\n indexDatatype,\r\n boundingVolumes,\r\n batchedDrawCalls\r\n );\r\n\r\n transferableObjects.push(\r\n batchedPositions.buffer,\r\n batchedIndices.buffer,\r\n batchedIndexOffsets.buffer,\r\n batchedIndexCounts.buffer,\r\n batchedIds.buffer,\r\n packedBuffer.buffer\r\n );\r\n\r\n return {\r\n positions: batchedPositions.buffer,\r\n indices: batchedIndices.buffer,\r\n indexOffsets: batchedIndexOffsets.buffer,\r\n indexCounts: batchedIndexCounts.buffer,\r\n batchIds: batchedIds.buffer,\r\n packedBuffer: packedBuffer.buffer,\r\n };\r\n}\r\nexport default createTaskProcessorWorker(createVectorTilePolygons);\r\n"],"names":["Cartesian3","Ellipsoid","Rectangle","Color","OrientedBoundingBox","Cartographic","defined","AttributeCompression","CesiumMath","IndexDatatype"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createVectorTilePolylines.js b/debug/cesium/Workers/createVectorTilePolylines.js deleted file mode 100644 index 4c83126..0000000 --- a/debug/cesium/Workers/createVectorTilePolylines.js +++ /dev/null @@ -1,280 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Matrix3-f22b0303', './combine-4598d225', './AttributeCompression-e9888cb8', './Math-9be8b918', './IndexDatatype-b4e5cf89', './Matrix2-036c77dd', './createTaskProcessorWorker', './Check-d10e5f2e', './defaultValue-0ab18f7d', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './RuntimeError-e5c6a8b9'], (function (Matrix3, combine, AttributeCompression, Math, IndexDatatype, Matrix2, createTaskProcessorWorker, Check, defaultValue, ComponentDatatype, WebGLConstants, RuntimeError) { 'use strict'; - - const maxShort = 32767; - - const scratchBVCartographic = new Matrix3.Cartographic(); - const scratchEncodedPosition = new Matrix3.Cartesian3(); - - function decodeVectorPolylinePositions( - positions, - rectangle, - minimumHeight, - maximumHeight, - ellipsoid - ) { - const positionsLength = positions.length / 3; - const uBuffer = positions.subarray(0, positionsLength); - const vBuffer = positions.subarray(positionsLength, 2 * positionsLength); - const heightBuffer = positions.subarray( - 2 * positionsLength, - 3 * positionsLength - ); - AttributeCompression.AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer); - - const decoded = new Float64Array(positions.length); - for (let i = 0; i < positionsLength; ++i) { - const u = uBuffer[i]; - const v = vBuffer[i]; - const h = heightBuffer[i]; - - const lon = Math.CesiumMath.lerp(rectangle.west, rectangle.east, u / maxShort); - const lat = Math.CesiumMath.lerp(rectangle.south, rectangle.north, v / maxShort); - const alt = Math.CesiumMath.lerp(minimumHeight, maximumHeight, h / maxShort); - - const cartographic = Matrix3.Cartographic.fromRadians( - lon, - lat, - alt, - scratchBVCartographic - ); - const decodedPosition = ellipsoid.cartographicToCartesian( - cartographic, - scratchEncodedPosition - ); - Matrix3.Cartesian3.pack(decodedPosition, decoded, i * 3); - } - return decoded; - } - - const scratchRectangle = new Matrix2.Rectangle(); - const scratchEllipsoid = new Matrix3.Ellipsoid(); - const scratchCenter = new Matrix3.Cartesian3(); - const scratchMinMaxHeights = { - min: undefined, - max: undefined, - }; - - function unpackBuffer(packedBuffer) { - packedBuffer = new Float64Array(packedBuffer); - - let offset = 0; - scratchMinMaxHeights.min = packedBuffer[offset++]; - scratchMinMaxHeights.max = packedBuffer[offset++]; - - Matrix2.Rectangle.unpack(packedBuffer, offset, scratchRectangle); - offset += Matrix2.Rectangle.packedLength; - - Matrix3.Ellipsoid.unpack(packedBuffer, offset, scratchEllipsoid); - offset += Matrix3.Ellipsoid.packedLength; - - Matrix3.Cartesian3.unpack(packedBuffer, offset, scratchCenter); - } - - function getPositionOffsets(counts) { - const countsLength = counts.length; - const positionOffsets = new Uint32Array(countsLength + 1); - let offset = 0; - for (let i = 0; i < countsLength; ++i) { - positionOffsets[i] = offset; - offset += counts[i]; - } - positionOffsets[countsLength] = offset; - return positionOffsets; - } - - const scratchP0 = new Matrix3.Cartesian3(); - const scratchP1 = new Matrix3.Cartesian3(); - const scratchPrev = new Matrix3.Cartesian3(); - const scratchCur = new Matrix3.Cartesian3(); - const scratchNext = new Matrix3.Cartesian3(); - - function createVectorTilePolylines(parameters, transferableObjects) { - const encodedPositions = new Uint16Array(parameters.positions); - const widths = new Uint16Array(parameters.widths); - const counts = new Uint32Array(parameters.counts); - const batchIds = new Uint16Array(parameters.batchIds); - - unpackBuffer(parameters.packedBuffer); - const rectangle = scratchRectangle; - const ellipsoid = scratchEllipsoid; - const center = scratchCenter; - const minimumHeight = scratchMinMaxHeights.min; - const maximumHeight = scratchMinMaxHeights.max; - - const positions = decodeVectorPolylinePositions( - encodedPositions, - rectangle, - minimumHeight, - maximumHeight, - ellipsoid - ); - - const positionsLength = positions.length / 3; - const size = positionsLength * 4 - 4; - - const curPositions = new Float32Array(size * 3); - const prevPositions = new Float32Array(size * 3); - const nextPositions = new Float32Array(size * 3); - const expandAndWidth = new Float32Array(size * 2); - const vertexBatchIds = new Uint16Array(size); - - let positionIndex = 0; - let expandAndWidthIndex = 0; - let batchIdIndex = 0; - - let i; - let offset = 0; - let length = counts.length; - - for (i = 0; i < length; ++i) { - const count = counts[i]; - const width = widths[i]; - const batchId = batchIds[i]; - - for (let j = 0; j < count; ++j) { - let previous; - if (j === 0) { - const p0 = Matrix3.Cartesian3.unpack(positions, offset * 3, scratchP0); - const p1 = Matrix3.Cartesian3.unpack(positions, (offset + 1) * 3, scratchP1); - - previous = Matrix3.Cartesian3.subtract(p0, p1, scratchPrev); - Matrix3.Cartesian3.add(p0, previous, previous); - } else { - previous = Matrix3.Cartesian3.unpack( - positions, - (offset + j - 1) * 3, - scratchPrev - ); - } - - const current = Matrix3.Cartesian3.unpack( - positions, - (offset + j) * 3, - scratchCur - ); - - let next; - if (j === count - 1) { - const p2 = Matrix3.Cartesian3.unpack( - positions, - (offset + count - 1) * 3, - scratchP0 - ); - const p3 = Matrix3.Cartesian3.unpack( - positions, - (offset + count - 2) * 3, - scratchP1 - ); - - next = Matrix3.Cartesian3.subtract(p2, p3, scratchNext); - Matrix3.Cartesian3.add(p2, next, next); - } else { - next = Matrix3.Cartesian3.unpack(positions, (offset + j + 1) * 3, scratchNext); - } - - Matrix3.Cartesian3.subtract(previous, center, previous); - Matrix3.Cartesian3.subtract(current, center, current); - Matrix3.Cartesian3.subtract(next, center, next); - - const startK = j === 0 ? 2 : 0; - const endK = j === count - 1 ? 2 : 4; - - for (let k = startK; k < endK; ++k) { - Matrix3.Cartesian3.pack(current, curPositions, positionIndex); - Matrix3.Cartesian3.pack(previous, prevPositions, positionIndex); - Matrix3.Cartesian3.pack(next, nextPositions, positionIndex); - positionIndex += 3; - - const direction = k - 2 < 0 ? -1.0 : 1.0; - expandAndWidth[expandAndWidthIndex++] = 2 * (k % 2) - 1; - expandAndWidth[expandAndWidthIndex++] = direction * width; - - vertexBatchIds[batchIdIndex++] = batchId; - } - } - - offset += count; - } - - const indices = IndexDatatype.IndexDatatype.createTypedArray(size, positionsLength * 6 - 6); - let index = 0; - let indicesIndex = 0; - length = positionsLength - 1; - for (i = 0; i < length; ++i) { - indices[indicesIndex++] = index; - indices[indicesIndex++] = index + 2; - indices[indicesIndex++] = index + 1; - - indices[indicesIndex++] = index + 1; - indices[indicesIndex++] = index + 2; - indices[indicesIndex++] = index + 3; - - index += 4; - } - - transferableObjects.push( - curPositions.buffer, - prevPositions.buffer, - nextPositions.buffer - ); - transferableObjects.push( - expandAndWidth.buffer, - vertexBatchIds.buffer, - indices.buffer - ); - - let results = { - indexDatatype: - indices.BYTES_PER_ELEMENT === 2 - ? IndexDatatype.IndexDatatype.UNSIGNED_SHORT - : IndexDatatype.IndexDatatype.UNSIGNED_INT, - currentPositions: curPositions.buffer, - previousPositions: prevPositions.buffer, - nextPositions: nextPositions.buffer, - expandAndWidth: expandAndWidth.buffer, - batchIds: vertexBatchIds.buffer, - indices: indices.buffer, - }; - - if (parameters.keepDecodedPositions) { - const positionOffsets = getPositionOffsets(counts); - transferableObjects.push(positions.buffer, positionOffsets.buffer); - results = combine.combine(results, { - decodedPositions: positions.buffer, - decodedPositionOffsets: positionOffsets.buffer, - }); - } - - return results; - } - var createVectorTilePolylines$1 = createTaskProcessorWorker(createVectorTilePolylines); - - return createVectorTilePolylines$1; - -})); -//# sourceMappingURL=createVectorTilePolylines.js.map diff --git a/debug/cesium/Workers/createVectorTilePolylines.js.map b/debug/cesium/Workers/createVectorTilePolylines.js.map deleted file mode 100644 index 26840a1..0000000 --- a/debug/cesium/Workers/createVectorTilePolylines.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createVectorTilePolylines.js","sources":["../../../Source/Core/decodeVectorPolylinePositions.js","../../../Source/WorkersES6/createVectorTilePolylines.js"],"sourcesContent":["import AttributeCompression from \"./AttributeCompression.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Cartographic from \"./Cartographic.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\nconst maxShort = 32767;\r\n\r\nconst scratchBVCartographic = new Cartographic();\r\nconst scratchEncodedPosition = new Cartesian3();\r\n\r\nfunction decodeVectorPolylinePositions(\r\n positions,\r\n rectangle,\r\n minimumHeight,\r\n maximumHeight,\r\n ellipsoid\r\n) {\r\n const positionsLength = positions.length / 3;\r\n const uBuffer = positions.subarray(0, positionsLength);\r\n const vBuffer = positions.subarray(positionsLength, 2 * positionsLength);\r\n const heightBuffer = positions.subarray(\r\n 2 * positionsLength,\r\n 3 * positionsLength\r\n );\r\n AttributeCompression.zigZagDeltaDecode(uBuffer, vBuffer, heightBuffer);\r\n\r\n const decoded = new Float64Array(positions.length);\r\n for (let i = 0; i < positionsLength; ++i) {\r\n const u = uBuffer[i];\r\n const v = vBuffer[i];\r\n const h = heightBuffer[i];\r\n\r\n const lon = CesiumMath.lerp(rectangle.west, rectangle.east, u / maxShort);\r\n const lat = CesiumMath.lerp(rectangle.south, rectangle.north, v / maxShort);\r\n const alt = CesiumMath.lerp(minimumHeight, maximumHeight, h / maxShort);\r\n\r\n const cartographic = Cartographic.fromRadians(\r\n lon,\r\n lat,\r\n alt,\r\n scratchBVCartographic\r\n );\r\n const decodedPosition = ellipsoid.cartographicToCartesian(\r\n cartographic,\r\n scratchEncodedPosition\r\n );\r\n Cartesian3.pack(decodedPosition, decoded, i * 3);\r\n }\r\n return decoded;\r\n}\r\nexport default decodeVectorPolylinePositions;\r\n","import Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport combine from \"../Core/combine.js\";\r\nimport decodeVectorPolylinePositions from \"../Core/decodeVectorPolylinePositions.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst scratchRectangle = new Rectangle();\r\nconst scratchEllipsoid = new Ellipsoid();\r\nconst scratchCenter = new Cartesian3();\r\nconst scratchMinMaxHeights = {\r\n min: undefined,\r\n max: undefined,\r\n};\r\n\r\nfunction unpackBuffer(packedBuffer) {\r\n packedBuffer = new Float64Array(packedBuffer);\r\n\r\n let offset = 0;\r\n scratchMinMaxHeights.min = packedBuffer[offset++];\r\n scratchMinMaxHeights.max = packedBuffer[offset++];\r\n\r\n Rectangle.unpack(packedBuffer, offset, scratchRectangle);\r\n offset += Rectangle.packedLength;\r\n\r\n Ellipsoid.unpack(packedBuffer, offset, scratchEllipsoid);\r\n offset += Ellipsoid.packedLength;\r\n\r\n Cartesian3.unpack(packedBuffer, offset, scratchCenter);\r\n}\r\n\r\nfunction getPositionOffsets(counts) {\r\n const countsLength = counts.length;\r\n const positionOffsets = new Uint32Array(countsLength + 1);\r\n let offset = 0;\r\n for (let i = 0; i < countsLength; ++i) {\r\n positionOffsets[i] = offset;\r\n offset += counts[i];\r\n }\r\n positionOffsets[countsLength] = offset;\r\n return positionOffsets;\r\n}\r\n\r\nconst scratchP0 = new Cartesian3();\r\nconst scratchP1 = new Cartesian3();\r\nconst scratchPrev = new Cartesian3();\r\nconst scratchCur = new Cartesian3();\r\nconst scratchNext = new Cartesian3();\r\n\r\nfunction createVectorTilePolylines(parameters, transferableObjects) {\r\n const encodedPositions = new Uint16Array(parameters.positions);\r\n const widths = new Uint16Array(parameters.widths);\r\n const counts = new Uint32Array(parameters.counts);\r\n const batchIds = new Uint16Array(parameters.batchIds);\r\n\r\n unpackBuffer(parameters.packedBuffer);\r\n const rectangle = scratchRectangle;\r\n const ellipsoid = scratchEllipsoid;\r\n const center = scratchCenter;\r\n const minimumHeight = scratchMinMaxHeights.min;\r\n const maximumHeight = scratchMinMaxHeights.max;\r\n\r\n const positions = decodeVectorPolylinePositions(\r\n encodedPositions,\r\n rectangle,\r\n minimumHeight,\r\n maximumHeight,\r\n ellipsoid\r\n );\r\n\r\n const positionsLength = positions.length / 3;\r\n const size = positionsLength * 4 - 4;\r\n\r\n const curPositions = new Float32Array(size * 3);\r\n const prevPositions = new Float32Array(size * 3);\r\n const nextPositions = new Float32Array(size * 3);\r\n const expandAndWidth = new Float32Array(size * 2);\r\n const vertexBatchIds = new Uint16Array(size);\r\n\r\n let positionIndex = 0;\r\n let expandAndWidthIndex = 0;\r\n let batchIdIndex = 0;\r\n\r\n let i;\r\n let offset = 0;\r\n let length = counts.length;\r\n\r\n for (i = 0; i < length; ++i) {\r\n const count = counts[i];\r\n const width = widths[i];\r\n const batchId = batchIds[i];\r\n\r\n for (let j = 0; j < count; ++j) {\r\n let previous;\r\n if (j === 0) {\r\n const p0 = Cartesian3.unpack(positions, offset * 3, scratchP0);\r\n const p1 = Cartesian3.unpack(positions, (offset + 1) * 3, scratchP1);\r\n\r\n previous = Cartesian3.subtract(p0, p1, scratchPrev);\r\n Cartesian3.add(p0, previous, previous);\r\n } else {\r\n previous = Cartesian3.unpack(\r\n positions,\r\n (offset + j - 1) * 3,\r\n scratchPrev\r\n );\r\n }\r\n\r\n const current = Cartesian3.unpack(\r\n positions,\r\n (offset + j) * 3,\r\n scratchCur\r\n );\r\n\r\n let next;\r\n if (j === count - 1) {\r\n const p2 = Cartesian3.unpack(\r\n positions,\r\n (offset + count - 1) * 3,\r\n scratchP0\r\n );\r\n const p3 = Cartesian3.unpack(\r\n positions,\r\n (offset + count - 2) * 3,\r\n scratchP1\r\n );\r\n\r\n next = Cartesian3.subtract(p2, p3, scratchNext);\r\n Cartesian3.add(p2, next, next);\r\n } else {\r\n next = Cartesian3.unpack(positions, (offset + j + 1) * 3, scratchNext);\r\n }\r\n\r\n Cartesian3.subtract(previous, center, previous);\r\n Cartesian3.subtract(current, center, current);\r\n Cartesian3.subtract(next, center, next);\r\n\r\n const startK = j === 0 ? 2 : 0;\r\n const endK = j === count - 1 ? 2 : 4;\r\n\r\n for (let k = startK; k < endK; ++k) {\r\n Cartesian3.pack(current, curPositions, positionIndex);\r\n Cartesian3.pack(previous, prevPositions, positionIndex);\r\n Cartesian3.pack(next, nextPositions, positionIndex);\r\n positionIndex += 3;\r\n\r\n const direction = k - 2 < 0 ? -1.0 : 1.0;\r\n expandAndWidth[expandAndWidthIndex++] = 2 * (k % 2) - 1;\r\n expandAndWidth[expandAndWidthIndex++] = direction * width;\r\n\r\n vertexBatchIds[batchIdIndex++] = batchId;\r\n }\r\n }\r\n\r\n offset += count;\r\n }\r\n\r\n const indices = IndexDatatype.createTypedArray(size, positionsLength * 6 - 6);\r\n let index = 0;\r\n let indicesIndex = 0;\r\n length = positionsLength - 1;\r\n for (i = 0; i < length; ++i) {\r\n indices[indicesIndex++] = index;\r\n indices[indicesIndex++] = index + 2;\r\n indices[indicesIndex++] = index + 1;\r\n\r\n indices[indicesIndex++] = index + 1;\r\n indices[indicesIndex++] = index + 2;\r\n indices[indicesIndex++] = index + 3;\r\n\r\n index += 4;\r\n }\r\n\r\n transferableObjects.push(\r\n curPositions.buffer,\r\n prevPositions.buffer,\r\n nextPositions.buffer\r\n );\r\n transferableObjects.push(\r\n expandAndWidth.buffer,\r\n vertexBatchIds.buffer,\r\n indices.buffer\r\n );\r\n\r\n let results = {\r\n indexDatatype:\r\n indices.BYTES_PER_ELEMENT === 2\r\n ? IndexDatatype.UNSIGNED_SHORT\r\n : IndexDatatype.UNSIGNED_INT,\r\n currentPositions: curPositions.buffer,\r\n previousPositions: prevPositions.buffer,\r\n nextPositions: nextPositions.buffer,\r\n expandAndWidth: expandAndWidth.buffer,\r\n batchIds: vertexBatchIds.buffer,\r\n indices: indices.buffer,\r\n };\r\n\r\n if (parameters.keepDecodedPositions) {\r\n const positionOffsets = getPositionOffsets(counts);\r\n transferableObjects.push(positions.buffer, positionOffsets.buffer);\r\n results = combine(results, {\r\n decodedPositions: positions.buffer,\r\n decodedPositionOffsets: positionOffsets.buffer,\r\n });\r\n }\r\n\r\n return results;\r\n}\r\nexport default createTaskProcessorWorker(createVectorTilePolylines);\r\n"],"names":["Cartographic","Cartesian3","AttributeCompression","CesiumMath","Rectangle","Ellipsoid","IndexDatatype","combine"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js b/debug/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js deleted file mode 100644 index 7d4576b..0000000 --- a/debug/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +++ /dev/null @@ -1,666 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./AxisAlignedBoundingBox-50342d27', './Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './defaultValue-0ab18f7d', './TerrainEncoding-c7d764e4', './Math-9be8b918', './OrientedBoundingBox-7e2eebab', './RuntimeError-e5c6a8b9', './WebMercatorProjection-306f7acc', './createTaskProcessorWorker', './Check-d10e5f2e', './combine-4598d225', './AttributeCompression-e9888cb8', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './EllipsoidTangentPlane-c421b2cb', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (AxisAlignedBoundingBox, Transforms, Matrix2, Matrix3, defaultValue, TerrainEncoding, Math$1, OrientedBoundingBox, RuntimeError, WebMercatorProjection, createTaskProcessorWorker, Check, combine, AttributeCompression, ComponentDatatype, WebGLConstants, EllipsoidTangentPlane, IntersectionTests, Plane) { 'use strict'; - - const sizeOfUint16 = Uint16Array.BYTES_PER_ELEMENT; - const sizeOfInt32 = Int32Array.BYTES_PER_ELEMENT; - const sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT; - const sizeOfFloat = Float32Array.BYTES_PER_ELEMENT; - const sizeOfDouble = Float64Array.BYTES_PER_ELEMENT; - - function indexOfEpsilon(arr, elem, elemType) { - elemType = defaultValue.defaultValue(elemType, Math$1.CesiumMath); - const count = arr.length; - for (let i = 0; i < count; ++i) { - if (elemType.equalsEpsilon(arr[i], elem, Math$1.CesiumMath.EPSILON12)) { - return i; - } - } - - return -1; - } - - function createVerticesFromGoogleEarthEnterpriseBuffer( - parameters, - transferableObjects - ) { - parameters.ellipsoid = Matrix3.Ellipsoid.clone(parameters.ellipsoid); - parameters.rectangle = Matrix2.Rectangle.clone(parameters.rectangle); - - const statistics = processBuffer( - parameters.buffer, - parameters.relativeToCenter, - parameters.ellipsoid, - parameters.rectangle, - parameters.nativeRectangle, - parameters.exaggeration, - parameters.exaggerationRelativeHeight, - parameters.skirtHeight, - parameters.includeWebMercatorT, - parameters.negativeAltitudeExponentBias, - parameters.negativeElevationThreshold - ); - const vertices = statistics.vertices; - transferableObjects.push(vertices.buffer); - const indices = statistics.indices; - transferableObjects.push(indices.buffer); - - return { - vertices: vertices.buffer, - indices: indices.buffer, - numberOfAttributes: statistics.encoding.stride, - minimumHeight: statistics.minimumHeight, - maximumHeight: statistics.maximumHeight, - boundingSphere3D: statistics.boundingSphere3D, - orientedBoundingBox: statistics.orientedBoundingBox, - occludeePointInScaledSpace: statistics.occludeePointInScaledSpace, - encoding: statistics.encoding, - vertexCountWithoutSkirts: statistics.vertexCountWithoutSkirts, - indexCountWithoutSkirts: statistics.indexCountWithoutSkirts, - westIndicesSouthToNorth: statistics.westIndicesSouthToNorth, - southIndicesEastToWest: statistics.southIndicesEastToWest, - eastIndicesNorthToSouth: statistics.eastIndicesNorthToSouth, - northIndicesWestToEast: statistics.northIndicesWestToEast, - }; - } - - const scratchCartographic = new Matrix3.Cartographic(); - const scratchCartesian = new Matrix3.Cartesian3(); - const minimumScratch = new Matrix3.Cartesian3(); - const maximumScratch = new Matrix3.Cartesian3(); - const matrix4Scratch = new Matrix2.Matrix4(); - - function processBuffer( - buffer, - relativeToCenter, - ellipsoid, - rectangle, - nativeRectangle, - exaggeration, - exaggerationRelativeHeight, - skirtHeight, - includeWebMercatorT, - negativeAltitudeExponentBias, - negativeElevationThreshold - ) { - let geographicWest; - let geographicSouth; - let geographicEast; - let geographicNorth; - let rectangleWidth, rectangleHeight; - - if (!defaultValue.defined(rectangle)) { - geographicWest = Math$1.CesiumMath.toRadians(nativeRectangle.west); - geographicSouth = Math$1.CesiumMath.toRadians(nativeRectangle.south); - geographicEast = Math$1.CesiumMath.toRadians(nativeRectangle.east); - geographicNorth = Math$1.CesiumMath.toRadians(nativeRectangle.north); - rectangleWidth = Math$1.CesiumMath.toRadians(rectangle.width); - rectangleHeight = Math$1.CesiumMath.toRadians(rectangle.height); - } else { - geographicWest = rectangle.west; - geographicSouth = rectangle.south; - geographicEast = rectangle.east; - geographicNorth = rectangle.north; - rectangleWidth = rectangle.width; - rectangleHeight = rectangle.height; - } - - // Keep track of quad borders so we can remove duplicates around the borders - const quadBorderLatitudes = [geographicSouth, geographicNorth]; - const quadBorderLongitudes = [geographicWest, geographicEast]; - - const fromENU = Transforms.Transforms.eastNorthUpToFixedFrame( - relativeToCenter, - ellipsoid - ); - const toENU = Matrix2.Matrix4.inverseTransformation(fromENU, matrix4Scratch); - - let southMercatorY; - let oneOverMercatorHeight; - if (includeWebMercatorT) { - southMercatorY = WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle( - geographicSouth - ); - oneOverMercatorHeight = - 1.0 / - (WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle(geographicNorth) - - southMercatorY); - } - - const hasExaggeration = exaggeration !== 1.0; - const includeGeodeticSurfaceNormals = hasExaggeration; - - const dv = new DataView(buffer); - - let minHeight = Number.POSITIVE_INFINITY; - let maxHeight = Number.NEGATIVE_INFINITY; - - const minimum = minimumScratch; - minimum.x = Number.POSITIVE_INFINITY; - minimum.y = Number.POSITIVE_INFINITY; - minimum.z = Number.POSITIVE_INFINITY; - - const maximum = maximumScratch; - maximum.x = Number.NEGATIVE_INFINITY; - maximum.y = Number.NEGATIVE_INFINITY; - maximum.z = Number.NEGATIVE_INFINITY; - - // Compute sizes - let offset = 0; - let size = 0; - let indicesSize = 0; - let quadSize; - let quad; - for (quad = 0; quad < 4; ++quad) { - let o = offset; - quadSize = dv.getUint32(o, true); - o += sizeOfUint32; - - const x = Math$1.CesiumMath.toRadians(dv.getFloat64(o, true) * 180.0); - o += sizeOfDouble; - if (indexOfEpsilon(quadBorderLongitudes, x) === -1) { - quadBorderLongitudes.push(x); - } - - const y = Math$1.CesiumMath.toRadians(dv.getFloat64(o, true) * 180.0); - o += sizeOfDouble; - if (indexOfEpsilon(quadBorderLatitudes, y) === -1) { - quadBorderLatitudes.push(y); - } - - o += 2 * sizeOfDouble; // stepX + stepY - - let c = dv.getInt32(o, true); // Read point count - o += sizeOfInt32; - size += c; - - c = dv.getInt32(o, true); // Read index count - indicesSize += c * 3; - - offset += quadSize + sizeOfUint32; // Jump to next quad - } - - // Quad Border points to remove duplicates - const quadBorderPoints = []; - const quadBorderIndices = []; - - // Create arrays - const positions = new Array(size); - const uvs = new Array(size); - const heights = new Array(size); - const webMercatorTs = includeWebMercatorT ? new Array(size) : []; - const geodeticSurfaceNormals = includeGeodeticSurfaceNormals - ? new Array(size) - : []; - const indices = new Array(indicesSize); - - // Points are laid out in rows starting at SW, so storing border points as we - // come across them all points will be adjacent. - const westBorder = []; - const southBorder = []; - const eastBorder = []; - const northBorder = []; - - // Each tile is split into 4 parts - let pointOffset = 0; - let indicesOffset = 0; - offset = 0; - for (quad = 0; quad < 4; ++quad) { - quadSize = dv.getUint32(offset, true); - offset += sizeOfUint32; - const startQuad = offset; - - const originX = Math$1.CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0); - offset += sizeOfDouble; - - const originY = Math$1.CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0); - offset += sizeOfDouble; - - const stepX = Math$1.CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0); - const halfStepX = stepX * 0.5; - offset += sizeOfDouble; - - const stepY = Math$1.CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0); - const halfStepY = stepY * 0.5; - offset += sizeOfDouble; - - const numPoints = dv.getInt32(offset, true); - offset += sizeOfInt32; - - const numFaces = dv.getInt32(offset, true); - offset += sizeOfInt32; - - //const level = dv.getInt32(offset, true); - offset += sizeOfInt32; - - // Keep track of quad indices to overall tile indices - const indicesMapping = new Array(numPoints); - for (let i = 0; i < numPoints; ++i) { - const longitude = originX + dv.getUint8(offset++) * stepX; - scratchCartographic.longitude = longitude; - const latitude = originY + dv.getUint8(offset++) * stepY; - scratchCartographic.latitude = latitude; - - let height = dv.getFloat32(offset, true); - offset += sizeOfFloat; - - // In order to support old clients, negative altitude values are stored as - // height/-2^32. Old clients see the value as really close to 0 but new clients multiply - // by -2^32 to get the real negative altitude value. - if (height !== 0 && height < negativeElevationThreshold) { - height *= -Math.pow(2, negativeAltitudeExponentBias); - } - - // Height is stored in units of (1/EarthRadius) or (1/6371010.0) - height *= 6371010.0; - - scratchCartographic.height = height; - - // Is it along a quad border - if so check if already exists and use that index - if ( - indexOfEpsilon(quadBorderLongitudes, longitude) !== -1 || - indexOfEpsilon(quadBorderLatitudes, latitude) !== -1 - ) { - const index = indexOfEpsilon( - quadBorderPoints, - scratchCartographic, - Matrix3.Cartographic - ); - if (index === -1) { - quadBorderPoints.push(Matrix3.Cartographic.clone(scratchCartographic)); - quadBorderIndices.push(pointOffset); - } else { - indicesMapping[i] = quadBorderIndices[index]; - continue; - } - } - indicesMapping[i] = pointOffset; - - if (Math.abs(longitude - geographicWest) < halfStepX) { - westBorder.push({ - index: pointOffset, - cartographic: Matrix3.Cartographic.clone(scratchCartographic), - }); - } else if (Math.abs(longitude - geographicEast) < halfStepX) { - eastBorder.push({ - index: pointOffset, - cartographic: Matrix3.Cartographic.clone(scratchCartographic), - }); - } else if (Math.abs(latitude - geographicSouth) < halfStepY) { - southBorder.push({ - index: pointOffset, - cartographic: Matrix3.Cartographic.clone(scratchCartographic), - }); - } else if (Math.abs(latitude - geographicNorth) < halfStepY) { - northBorder.push({ - index: pointOffset, - cartographic: Matrix3.Cartographic.clone(scratchCartographic), - }); - } - - minHeight = Math.min(height, minHeight); - maxHeight = Math.max(height, maxHeight); - heights[pointOffset] = height; - - const pos = ellipsoid.cartographicToCartesian(scratchCartographic); - positions[pointOffset] = pos; - - if (includeWebMercatorT) { - webMercatorTs[pointOffset] = - (WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) - - southMercatorY) * - oneOverMercatorHeight; - } - - if (includeGeodeticSurfaceNormals) { - const normal = ellipsoid.geodeticSurfaceNormal(pos); - geodeticSurfaceNormals[pointOffset] = normal; - } - - Matrix2.Matrix4.multiplyByPoint(toENU, pos, scratchCartesian); - - Matrix3.Cartesian3.minimumByComponent(scratchCartesian, minimum, minimum); - Matrix3.Cartesian3.maximumByComponent(scratchCartesian, maximum, maximum); - - let u = (longitude - geographicWest) / (geographicEast - geographicWest); - u = Math$1.CesiumMath.clamp(u, 0.0, 1.0); - let v = - (latitude - geographicSouth) / (geographicNorth - geographicSouth); - v = Math$1.CesiumMath.clamp(v, 0.0, 1.0); - - uvs[pointOffset] = new Matrix2.Cartesian2(u, v); - ++pointOffset; - } - - const facesElementCount = numFaces * 3; - for (let j = 0; j < facesElementCount; ++j, ++indicesOffset) { - indices[indicesOffset] = indicesMapping[dv.getUint16(offset, true)]; - offset += sizeOfUint16; - } - - if (quadSize !== offset - startQuad) { - throw new RuntimeError.RuntimeError("Invalid terrain tile."); - } - } - - positions.length = pointOffset; - uvs.length = pointOffset; - heights.length = pointOffset; - if (includeWebMercatorT) { - webMercatorTs.length = pointOffset; - } - if (includeGeodeticSurfaceNormals) { - geodeticSurfaceNormals.length = pointOffset; - } - - const vertexCountWithoutSkirts = pointOffset; - const indexCountWithoutSkirts = indicesOffset; - - // Add skirt points - const skirtOptions = { - hMin: minHeight, - lastBorderPoint: undefined, - skirtHeight: skirtHeight, - toENU: toENU, - ellipsoid: ellipsoid, - minimum: minimum, - maximum: maximum, - }; - - // Sort counter clockwise from NW corner - // Corner points are in the east/west arrays - westBorder.sort(function (a, b) { - return b.cartographic.latitude - a.cartographic.latitude; - }); - southBorder.sort(function (a, b) { - return a.cartographic.longitude - b.cartographic.longitude; - }); - eastBorder.sort(function (a, b) { - return a.cartographic.latitude - b.cartographic.latitude; - }); - northBorder.sort(function (a, b) { - return b.cartographic.longitude - a.cartographic.longitude; - }); - - const percentage = 0.00001; - addSkirt( - positions, - heights, - uvs, - webMercatorTs, - geodeticSurfaceNormals, - indices, - skirtOptions, - westBorder, - -percentage * rectangleWidth, - true, - -percentage * rectangleHeight - ); - addSkirt( - positions, - heights, - uvs, - webMercatorTs, - geodeticSurfaceNormals, - indices, - skirtOptions, - southBorder, - -percentage * rectangleHeight, - false - ); - addSkirt( - positions, - heights, - uvs, - webMercatorTs, - geodeticSurfaceNormals, - indices, - skirtOptions, - eastBorder, - percentage * rectangleWidth, - true, - percentage * rectangleHeight - ); - addSkirt( - positions, - heights, - uvs, - webMercatorTs, - geodeticSurfaceNormals, - indices, - skirtOptions, - northBorder, - percentage * rectangleHeight, - false - ); - - // Since the corner between the north and west sides is in the west array, generate the last - // two triangles between the last north vertex and the first west vertex - if (westBorder.length > 0 && northBorder.length > 0) { - const firstBorderIndex = westBorder[0].index; - const firstSkirtIndex = vertexCountWithoutSkirts; - const lastBorderIndex = northBorder[northBorder.length - 1].index; - const lastSkirtIndex = positions.length - 1; - - indices.push( - lastBorderIndex, - lastSkirtIndex, - firstSkirtIndex, - firstSkirtIndex, - firstBorderIndex, - lastBorderIndex - ); - } - - size = positions.length; // Get new size with skirt vertices - - const boundingSphere3D = Transforms.BoundingSphere.fromPoints(positions); - let orientedBoundingBox; - if (defaultValue.defined(rectangle)) { - orientedBoundingBox = OrientedBoundingBox.OrientedBoundingBox.fromRectangle( - rectangle, - minHeight, - maxHeight, - ellipsoid - ); - } - - const occluder = new TerrainEncoding.EllipsoidalOccluder(ellipsoid); - const occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid( - relativeToCenter, - positions, - minHeight - ); - - const aaBox = new AxisAlignedBoundingBox.AxisAlignedBoundingBox(minimum, maximum, relativeToCenter); - const encoding = new TerrainEncoding.TerrainEncoding( - relativeToCenter, - aaBox, - skirtOptions.hMin, - maxHeight, - fromENU, - false, - includeWebMercatorT, - includeGeodeticSurfaceNormals, - exaggeration, - exaggerationRelativeHeight - ); - const vertices = new Float32Array(size * encoding.stride); - - let bufferIndex = 0; - for (let k = 0; k < size; ++k) { - bufferIndex = encoding.encode( - vertices, - bufferIndex, - positions[k], - uvs[k], - heights[k], - undefined, - webMercatorTs[k], - geodeticSurfaceNormals[k] - ); - } - - const westIndicesSouthToNorth = westBorder - .map(function (vertex) { - return vertex.index; - }) - .reverse(); - const southIndicesEastToWest = southBorder - .map(function (vertex) { - return vertex.index; - }) - .reverse(); - const eastIndicesNorthToSouth = eastBorder - .map(function (vertex) { - return vertex.index; - }) - .reverse(); - const northIndicesWestToEast = northBorder - .map(function (vertex) { - return vertex.index; - }) - .reverse(); - - southIndicesEastToWest.unshift( - eastIndicesNorthToSouth[eastIndicesNorthToSouth.length - 1] - ); - southIndicesEastToWest.push(westIndicesSouthToNorth[0]); - - northIndicesWestToEast.unshift( - westIndicesSouthToNorth[westIndicesSouthToNorth.length - 1] - ); - northIndicesWestToEast.push(eastIndicesNorthToSouth[0]); - - return { - vertices: vertices, - indices: new Uint16Array(indices), - maximumHeight: maxHeight, - minimumHeight: minHeight, - encoding: encoding, - boundingSphere3D: boundingSphere3D, - orientedBoundingBox: orientedBoundingBox, - occludeePointInScaledSpace: occludeePointInScaledSpace, - vertexCountWithoutSkirts: vertexCountWithoutSkirts, - indexCountWithoutSkirts: indexCountWithoutSkirts, - westIndicesSouthToNorth: westIndicesSouthToNorth, - southIndicesEastToWest: southIndicesEastToWest, - eastIndicesNorthToSouth: eastIndicesNorthToSouth, - northIndicesWestToEast: northIndicesWestToEast, - }; - } - - function addSkirt( - positions, - heights, - uvs, - webMercatorTs, - geodeticSurfaceNormals, - indices, - skirtOptions, - borderPoints, - fudgeFactor, - eastOrWest, - cornerFudge - ) { - const count = borderPoints.length; - for (let j = 0; j < count; ++j) { - const borderPoint = borderPoints[j]; - const borderCartographic = borderPoint.cartographic; - const borderIndex = borderPoint.index; - const currentIndex = positions.length; - - const longitude = borderCartographic.longitude; - let latitude = borderCartographic.latitude; - latitude = Math$1.CesiumMath.clamp( - latitude, - -Math$1.CesiumMath.PI_OVER_TWO, - Math$1.CesiumMath.PI_OVER_TWO - ); // Don't go over the poles - const height = borderCartographic.height - skirtOptions.skirtHeight; - skirtOptions.hMin = Math.min(skirtOptions.hMin, height); - - Matrix3.Cartographic.fromRadians(longitude, latitude, height, scratchCartographic); - - // Adjust sides to angle out - if (eastOrWest) { - scratchCartographic.longitude += fudgeFactor; - } - - // Adjust top or bottom to angle out - // Since corners are in the east/west arrays angle the first and last points as well - if (!eastOrWest) { - scratchCartographic.latitude += fudgeFactor; - } else if (j === count - 1) { - scratchCartographic.latitude += cornerFudge; - } else if (j === 0) { - scratchCartographic.latitude -= cornerFudge; - } - - const pos = skirtOptions.ellipsoid.cartographicToCartesian( - scratchCartographic - ); - positions.push(pos); - heights.push(height); - uvs.push(Matrix2.Cartesian2.clone(uvs[borderIndex])); // Copy UVs from border point - if (webMercatorTs.length > 0) { - webMercatorTs.push(webMercatorTs[borderIndex]); - } - if (geodeticSurfaceNormals.length > 0) { - geodeticSurfaceNormals.push(geodeticSurfaceNormals[borderIndex]); - } - - Matrix2.Matrix4.multiplyByPoint(skirtOptions.toENU, pos, scratchCartesian); - - const minimum = skirtOptions.minimum; - const maximum = skirtOptions.maximum; - Matrix3.Cartesian3.minimumByComponent(scratchCartesian, minimum, minimum); - Matrix3.Cartesian3.maximumByComponent(scratchCartesian, maximum, maximum); - - const lastBorderPoint = skirtOptions.lastBorderPoint; - if (defaultValue.defined(lastBorderPoint)) { - const lastBorderIndex = lastBorderPoint.index; - indices.push( - lastBorderIndex, - currentIndex - 1, - currentIndex, - currentIndex, - borderIndex, - lastBorderIndex - ); - } - - skirtOptions.lastBorderPoint = borderPoint; - } - } - var createVerticesFromGoogleEarthEnterpriseBuffer$1 = createTaskProcessorWorker( - createVerticesFromGoogleEarthEnterpriseBuffer - ); - - return createVerticesFromGoogleEarthEnterpriseBuffer$1; - -})); -//# sourceMappingURL=createVerticesFromGoogleEarthEnterpriseBuffer.js.map diff --git a/debug/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js.map b/debug/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js.map deleted file mode 100644 index 6a0edb6..0000000 --- a/debug/cesium/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createVerticesFromGoogleEarthEnterpriseBuffer.js","sources":["../../../Source/WorkersES6/createVerticesFromGoogleEarthEnterpriseBuffer.js"],"sourcesContent":["import AxisAlignedBoundingBox from \"../Core/AxisAlignedBoundingBox.js\";\r\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\r\nimport Cartesian2 from \"../Core/Cartesian2.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Cartographic from \"../Core/Cartographic.js\";\r\nimport defaultValue from \"../Core/defaultValue.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\r\nimport CesiumMath from \"../Core/Math.js\";\r\nimport Matrix4 from \"../Core/Matrix4.js\";\r\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport RuntimeError from \"../Core/RuntimeError.js\";\r\nimport TerrainEncoding from \"../Core/TerrainEncoding.js\";\r\nimport Transforms from \"../Core/Transforms.js\";\r\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst sizeOfUint16 = Uint16Array.BYTES_PER_ELEMENT;\r\nconst sizeOfInt32 = Int32Array.BYTES_PER_ELEMENT;\r\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\r\nconst sizeOfFloat = Float32Array.BYTES_PER_ELEMENT;\r\nconst sizeOfDouble = Float64Array.BYTES_PER_ELEMENT;\r\n\r\nfunction indexOfEpsilon(arr, elem, elemType) {\r\n elemType = defaultValue(elemType, CesiumMath);\r\n const count = arr.length;\r\n for (let i = 0; i < count; ++i) {\r\n if (elemType.equalsEpsilon(arr[i], elem, CesiumMath.EPSILON12)) {\r\n return i;\r\n }\r\n }\r\n\r\n return -1;\r\n}\r\n\r\nfunction createVerticesFromGoogleEarthEnterpriseBuffer(\r\n parameters,\r\n transferableObjects\r\n) {\r\n parameters.ellipsoid = Ellipsoid.clone(parameters.ellipsoid);\r\n parameters.rectangle = Rectangle.clone(parameters.rectangle);\r\n\r\n const statistics = processBuffer(\r\n parameters.buffer,\r\n parameters.relativeToCenter,\r\n parameters.ellipsoid,\r\n parameters.rectangle,\r\n parameters.nativeRectangle,\r\n parameters.exaggeration,\r\n parameters.exaggerationRelativeHeight,\r\n parameters.skirtHeight,\r\n parameters.includeWebMercatorT,\r\n parameters.negativeAltitudeExponentBias,\r\n parameters.negativeElevationThreshold\r\n );\r\n const vertices = statistics.vertices;\r\n transferableObjects.push(vertices.buffer);\r\n const indices = statistics.indices;\r\n transferableObjects.push(indices.buffer);\r\n\r\n return {\r\n vertices: vertices.buffer,\r\n indices: indices.buffer,\r\n numberOfAttributes: statistics.encoding.stride,\r\n minimumHeight: statistics.minimumHeight,\r\n maximumHeight: statistics.maximumHeight,\r\n boundingSphere3D: statistics.boundingSphere3D,\r\n orientedBoundingBox: statistics.orientedBoundingBox,\r\n occludeePointInScaledSpace: statistics.occludeePointInScaledSpace,\r\n encoding: statistics.encoding,\r\n vertexCountWithoutSkirts: statistics.vertexCountWithoutSkirts,\r\n indexCountWithoutSkirts: statistics.indexCountWithoutSkirts,\r\n westIndicesSouthToNorth: statistics.westIndicesSouthToNorth,\r\n southIndicesEastToWest: statistics.southIndicesEastToWest,\r\n eastIndicesNorthToSouth: statistics.eastIndicesNorthToSouth,\r\n northIndicesWestToEast: statistics.northIndicesWestToEast,\r\n };\r\n}\r\n\r\nconst scratchCartographic = new Cartographic();\r\nconst scratchCartesian = new Cartesian3();\r\nconst minimumScratch = new Cartesian3();\r\nconst maximumScratch = new Cartesian3();\r\nconst matrix4Scratch = new Matrix4();\r\n\r\nfunction processBuffer(\r\n buffer,\r\n relativeToCenter,\r\n ellipsoid,\r\n rectangle,\r\n nativeRectangle,\r\n exaggeration,\r\n exaggerationRelativeHeight,\r\n skirtHeight,\r\n includeWebMercatorT,\r\n negativeAltitudeExponentBias,\r\n negativeElevationThreshold\r\n) {\r\n let geographicWest;\r\n let geographicSouth;\r\n let geographicEast;\r\n let geographicNorth;\r\n let rectangleWidth, rectangleHeight;\r\n\r\n if (!defined(rectangle)) {\r\n geographicWest = CesiumMath.toRadians(nativeRectangle.west);\r\n geographicSouth = CesiumMath.toRadians(nativeRectangle.south);\r\n geographicEast = CesiumMath.toRadians(nativeRectangle.east);\r\n geographicNorth = CesiumMath.toRadians(nativeRectangle.north);\r\n rectangleWidth = CesiumMath.toRadians(rectangle.width);\r\n rectangleHeight = CesiumMath.toRadians(rectangle.height);\r\n } else {\r\n geographicWest = rectangle.west;\r\n geographicSouth = rectangle.south;\r\n geographicEast = rectangle.east;\r\n geographicNorth = rectangle.north;\r\n rectangleWidth = rectangle.width;\r\n rectangleHeight = rectangle.height;\r\n }\r\n\r\n // Keep track of quad borders so we can remove duplicates around the borders\r\n const quadBorderLatitudes = [geographicSouth, geographicNorth];\r\n const quadBorderLongitudes = [geographicWest, geographicEast];\r\n\r\n const fromENU = Transforms.eastNorthUpToFixedFrame(\r\n relativeToCenter,\r\n ellipsoid\r\n );\r\n const toENU = Matrix4.inverseTransformation(fromENU, matrix4Scratch);\r\n\r\n let southMercatorY;\r\n let oneOverMercatorHeight;\r\n if (includeWebMercatorT) {\r\n southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\r\n geographicSouth\r\n );\r\n oneOverMercatorHeight =\r\n 1.0 /\r\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(geographicNorth) -\r\n southMercatorY);\r\n }\r\n\r\n const hasExaggeration = exaggeration !== 1.0;\r\n const includeGeodeticSurfaceNormals = hasExaggeration;\r\n\r\n const dv = new DataView(buffer);\r\n\r\n let minHeight = Number.POSITIVE_INFINITY;\r\n let maxHeight = Number.NEGATIVE_INFINITY;\r\n\r\n const minimum = minimumScratch;\r\n minimum.x = Number.POSITIVE_INFINITY;\r\n minimum.y = Number.POSITIVE_INFINITY;\r\n minimum.z = Number.POSITIVE_INFINITY;\r\n\r\n const maximum = maximumScratch;\r\n maximum.x = Number.NEGATIVE_INFINITY;\r\n maximum.y = Number.NEGATIVE_INFINITY;\r\n maximum.z = Number.NEGATIVE_INFINITY;\r\n\r\n // Compute sizes\r\n let offset = 0;\r\n let size = 0;\r\n let indicesSize = 0;\r\n let quadSize;\r\n let quad;\r\n for (quad = 0; quad < 4; ++quad) {\r\n let o = offset;\r\n quadSize = dv.getUint32(o, true);\r\n o += sizeOfUint32;\r\n\r\n const x = CesiumMath.toRadians(dv.getFloat64(o, true) * 180.0);\r\n o += sizeOfDouble;\r\n if (indexOfEpsilon(quadBorderLongitudes, x) === -1) {\r\n quadBorderLongitudes.push(x);\r\n }\r\n\r\n const y = CesiumMath.toRadians(dv.getFloat64(o, true) * 180.0);\r\n o += sizeOfDouble;\r\n if (indexOfEpsilon(quadBorderLatitudes, y) === -1) {\r\n quadBorderLatitudes.push(y);\r\n }\r\n\r\n o += 2 * sizeOfDouble; // stepX + stepY\r\n\r\n let c = dv.getInt32(o, true); // Read point count\r\n o += sizeOfInt32;\r\n size += c;\r\n\r\n c = dv.getInt32(o, true); // Read index count\r\n indicesSize += c * 3;\r\n\r\n offset += quadSize + sizeOfUint32; // Jump to next quad\r\n }\r\n\r\n // Quad Border points to remove duplicates\r\n const quadBorderPoints = [];\r\n const quadBorderIndices = [];\r\n\r\n // Create arrays\r\n const positions = new Array(size);\r\n const uvs = new Array(size);\r\n const heights = new Array(size);\r\n const webMercatorTs = includeWebMercatorT ? new Array(size) : [];\r\n const geodeticSurfaceNormals = includeGeodeticSurfaceNormals\r\n ? new Array(size)\r\n : [];\r\n const indices = new Array(indicesSize);\r\n\r\n // Points are laid out in rows starting at SW, so storing border points as we\r\n // come across them all points will be adjacent.\r\n const westBorder = [];\r\n const southBorder = [];\r\n const eastBorder = [];\r\n const northBorder = [];\r\n\r\n // Each tile is split into 4 parts\r\n let pointOffset = 0;\r\n let indicesOffset = 0;\r\n offset = 0;\r\n for (quad = 0; quad < 4; ++quad) {\r\n quadSize = dv.getUint32(offset, true);\r\n offset += sizeOfUint32;\r\n const startQuad = offset;\r\n\r\n const originX = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\r\n offset += sizeOfDouble;\r\n\r\n const originY = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\r\n offset += sizeOfDouble;\r\n\r\n const stepX = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\r\n const halfStepX = stepX * 0.5;\r\n offset += sizeOfDouble;\r\n\r\n const stepY = CesiumMath.toRadians(dv.getFloat64(offset, true) * 180.0);\r\n const halfStepY = stepY * 0.5;\r\n offset += sizeOfDouble;\r\n\r\n const numPoints = dv.getInt32(offset, true);\r\n offset += sizeOfInt32;\r\n\r\n const numFaces = dv.getInt32(offset, true);\r\n offset += sizeOfInt32;\r\n\r\n //const level = dv.getInt32(offset, true);\r\n offset += sizeOfInt32;\r\n\r\n // Keep track of quad indices to overall tile indices\r\n const indicesMapping = new Array(numPoints);\r\n for (let i = 0; i < numPoints; ++i) {\r\n const longitude = originX + dv.getUint8(offset++) * stepX;\r\n scratchCartographic.longitude = longitude;\r\n const latitude = originY + dv.getUint8(offset++) * stepY;\r\n scratchCartographic.latitude = latitude;\r\n\r\n let height = dv.getFloat32(offset, true);\r\n offset += sizeOfFloat;\r\n\r\n // In order to support old clients, negative altitude values are stored as\r\n // height/-2^32. Old clients see the value as really close to 0 but new clients multiply\r\n // by -2^32 to get the real negative altitude value.\r\n if (height !== 0 && height < negativeElevationThreshold) {\r\n height *= -Math.pow(2, negativeAltitudeExponentBias);\r\n }\r\n\r\n // Height is stored in units of (1/EarthRadius) or (1/6371010.0)\r\n height *= 6371010.0;\r\n\r\n scratchCartographic.height = height;\r\n\r\n // Is it along a quad border - if so check if already exists and use that index\r\n if (\r\n indexOfEpsilon(quadBorderLongitudes, longitude) !== -1 ||\r\n indexOfEpsilon(quadBorderLatitudes, latitude) !== -1\r\n ) {\r\n const index = indexOfEpsilon(\r\n quadBorderPoints,\r\n scratchCartographic,\r\n Cartographic\r\n );\r\n if (index === -1) {\r\n quadBorderPoints.push(Cartographic.clone(scratchCartographic));\r\n quadBorderIndices.push(pointOffset);\r\n } else {\r\n indicesMapping[i] = quadBorderIndices[index];\r\n continue;\r\n }\r\n }\r\n indicesMapping[i] = pointOffset;\r\n\r\n if (Math.abs(longitude - geographicWest) < halfStepX) {\r\n westBorder.push({\r\n index: pointOffset,\r\n cartographic: Cartographic.clone(scratchCartographic),\r\n });\r\n } else if (Math.abs(longitude - geographicEast) < halfStepX) {\r\n eastBorder.push({\r\n index: pointOffset,\r\n cartographic: Cartographic.clone(scratchCartographic),\r\n });\r\n } else if (Math.abs(latitude - geographicSouth) < halfStepY) {\r\n southBorder.push({\r\n index: pointOffset,\r\n cartographic: Cartographic.clone(scratchCartographic),\r\n });\r\n } else if (Math.abs(latitude - geographicNorth) < halfStepY) {\r\n northBorder.push({\r\n index: pointOffset,\r\n cartographic: Cartographic.clone(scratchCartographic),\r\n });\r\n }\r\n\r\n minHeight = Math.min(height, minHeight);\r\n maxHeight = Math.max(height, maxHeight);\r\n heights[pointOffset] = height;\r\n\r\n const pos = ellipsoid.cartographicToCartesian(scratchCartographic);\r\n positions[pointOffset] = pos;\r\n\r\n if (includeWebMercatorT) {\r\n webMercatorTs[pointOffset] =\r\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) -\r\n southMercatorY) *\r\n oneOverMercatorHeight;\r\n }\r\n\r\n if (includeGeodeticSurfaceNormals) {\r\n const normal = ellipsoid.geodeticSurfaceNormal(pos);\r\n geodeticSurfaceNormals[pointOffset] = normal;\r\n }\r\n\r\n Matrix4.multiplyByPoint(toENU, pos, scratchCartesian);\r\n\r\n Cartesian3.minimumByComponent(scratchCartesian, minimum, minimum);\r\n Cartesian3.maximumByComponent(scratchCartesian, maximum, maximum);\r\n\r\n let u = (longitude - geographicWest) / (geographicEast - geographicWest);\r\n u = CesiumMath.clamp(u, 0.0, 1.0);\r\n let v =\r\n (latitude - geographicSouth) / (geographicNorth - geographicSouth);\r\n v = CesiumMath.clamp(v, 0.0, 1.0);\r\n\r\n uvs[pointOffset] = new Cartesian2(u, v);\r\n ++pointOffset;\r\n }\r\n\r\n const facesElementCount = numFaces * 3;\r\n for (let j = 0; j < facesElementCount; ++j, ++indicesOffset) {\r\n indices[indicesOffset] = indicesMapping[dv.getUint16(offset, true)];\r\n offset += sizeOfUint16;\r\n }\r\n\r\n if (quadSize !== offset - startQuad) {\r\n throw new RuntimeError(\"Invalid terrain tile.\");\r\n }\r\n }\r\n\r\n positions.length = pointOffset;\r\n uvs.length = pointOffset;\r\n heights.length = pointOffset;\r\n if (includeWebMercatorT) {\r\n webMercatorTs.length = pointOffset;\r\n }\r\n if (includeGeodeticSurfaceNormals) {\r\n geodeticSurfaceNormals.length = pointOffset;\r\n }\r\n\r\n const vertexCountWithoutSkirts = pointOffset;\r\n const indexCountWithoutSkirts = indicesOffset;\r\n\r\n // Add skirt points\r\n const skirtOptions = {\r\n hMin: minHeight,\r\n lastBorderPoint: undefined,\r\n skirtHeight: skirtHeight,\r\n toENU: toENU,\r\n ellipsoid: ellipsoid,\r\n minimum: minimum,\r\n maximum: maximum,\r\n };\r\n\r\n // Sort counter clockwise from NW corner\r\n // Corner points are in the east/west arrays\r\n westBorder.sort(function (a, b) {\r\n return b.cartographic.latitude - a.cartographic.latitude;\r\n });\r\n southBorder.sort(function (a, b) {\r\n return a.cartographic.longitude - b.cartographic.longitude;\r\n });\r\n eastBorder.sort(function (a, b) {\r\n return a.cartographic.latitude - b.cartographic.latitude;\r\n });\r\n northBorder.sort(function (a, b) {\r\n return b.cartographic.longitude - a.cartographic.longitude;\r\n });\r\n\r\n const percentage = 0.00001;\r\n addSkirt(\r\n positions,\r\n heights,\r\n uvs,\r\n webMercatorTs,\r\n geodeticSurfaceNormals,\r\n indices,\r\n skirtOptions,\r\n westBorder,\r\n -percentage * rectangleWidth,\r\n true,\r\n -percentage * rectangleHeight\r\n );\r\n addSkirt(\r\n positions,\r\n heights,\r\n uvs,\r\n webMercatorTs,\r\n geodeticSurfaceNormals,\r\n indices,\r\n skirtOptions,\r\n southBorder,\r\n -percentage * rectangleHeight,\r\n false\r\n );\r\n addSkirt(\r\n positions,\r\n heights,\r\n uvs,\r\n webMercatorTs,\r\n geodeticSurfaceNormals,\r\n indices,\r\n skirtOptions,\r\n eastBorder,\r\n percentage * rectangleWidth,\r\n true,\r\n percentage * rectangleHeight\r\n );\r\n addSkirt(\r\n positions,\r\n heights,\r\n uvs,\r\n webMercatorTs,\r\n geodeticSurfaceNormals,\r\n indices,\r\n skirtOptions,\r\n northBorder,\r\n percentage * rectangleHeight,\r\n false\r\n );\r\n\r\n // Since the corner between the north and west sides is in the west array, generate the last\r\n // two triangles between the last north vertex and the first west vertex\r\n if (westBorder.length > 0 && northBorder.length > 0) {\r\n const firstBorderIndex = westBorder[0].index;\r\n const firstSkirtIndex = vertexCountWithoutSkirts;\r\n const lastBorderIndex = northBorder[northBorder.length - 1].index;\r\n const lastSkirtIndex = positions.length - 1;\r\n\r\n indices.push(\r\n lastBorderIndex,\r\n lastSkirtIndex,\r\n firstSkirtIndex,\r\n firstSkirtIndex,\r\n firstBorderIndex,\r\n lastBorderIndex\r\n );\r\n }\r\n\r\n size = positions.length; // Get new size with skirt vertices\r\n\r\n const boundingSphere3D = BoundingSphere.fromPoints(positions);\r\n let orientedBoundingBox;\r\n if (defined(rectangle)) {\r\n orientedBoundingBox = OrientedBoundingBox.fromRectangle(\r\n rectangle,\r\n minHeight,\r\n maxHeight,\r\n ellipsoid\r\n );\r\n }\r\n\r\n const occluder = new EllipsoidalOccluder(ellipsoid);\r\n const occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\r\n relativeToCenter,\r\n positions,\r\n minHeight\r\n );\r\n\r\n const aaBox = new AxisAlignedBoundingBox(minimum, maximum, relativeToCenter);\r\n const encoding = new TerrainEncoding(\r\n relativeToCenter,\r\n aaBox,\r\n skirtOptions.hMin,\r\n maxHeight,\r\n fromENU,\r\n false,\r\n includeWebMercatorT,\r\n includeGeodeticSurfaceNormals,\r\n exaggeration,\r\n exaggerationRelativeHeight\r\n );\r\n const vertices = new Float32Array(size * encoding.stride);\r\n\r\n let bufferIndex = 0;\r\n for (let k = 0; k < size; ++k) {\r\n bufferIndex = encoding.encode(\r\n vertices,\r\n bufferIndex,\r\n positions[k],\r\n uvs[k],\r\n heights[k],\r\n undefined,\r\n webMercatorTs[k],\r\n geodeticSurfaceNormals[k]\r\n );\r\n }\r\n\r\n const westIndicesSouthToNorth = westBorder\r\n .map(function (vertex) {\r\n return vertex.index;\r\n })\r\n .reverse();\r\n const southIndicesEastToWest = southBorder\r\n .map(function (vertex) {\r\n return vertex.index;\r\n })\r\n .reverse();\r\n const eastIndicesNorthToSouth = eastBorder\r\n .map(function (vertex) {\r\n return vertex.index;\r\n })\r\n .reverse();\r\n const northIndicesWestToEast = northBorder\r\n .map(function (vertex) {\r\n return vertex.index;\r\n })\r\n .reverse();\r\n\r\n southIndicesEastToWest.unshift(\r\n eastIndicesNorthToSouth[eastIndicesNorthToSouth.length - 1]\r\n );\r\n southIndicesEastToWest.push(westIndicesSouthToNorth[0]);\r\n\r\n northIndicesWestToEast.unshift(\r\n westIndicesSouthToNorth[westIndicesSouthToNorth.length - 1]\r\n );\r\n northIndicesWestToEast.push(eastIndicesNorthToSouth[0]);\r\n\r\n return {\r\n vertices: vertices,\r\n indices: new Uint16Array(indices),\r\n maximumHeight: maxHeight,\r\n minimumHeight: minHeight,\r\n encoding: encoding,\r\n boundingSphere3D: boundingSphere3D,\r\n orientedBoundingBox: orientedBoundingBox,\r\n occludeePointInScaledSpace: occludeePointInScaledSpace,\r\n vertexCountWithoutSkirts: vertexCountWithoutSkirts,\r\n indexCountWithoutSkirts: indexCountWithoutSkirts,\r\n westIndicesSouthToNorth: westIndicesSouthToNorth,\r\n southIndicesEastToWest: southIndicesEastToWest,\r\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\r\n northIndicesWestToEast: northIndicesWestToEast,\r\n };\r\n}\r\n\r\nfunction addSkirt(\r\n positions,\r\n heights,\r\n uvs,\r\n webMercatorTs,\r\n geodeticSurfaceNormals,\r\n indices,\r\n skirtOptions,\r\n borderPoints,\r\n fudgeFactor,\r\n eastOrWest,\r\n cornerFudge\r\n) {\r\n const count = borderPoints.length;\r\n for (let j = 0; j < count; ++j) {\r\n const borderPoint = borderPoints[j];\r\n const borderCartographic = borderPoint.cartographic;\r\n const borderIndex = borderPoint.index;\r\n const currentIndex = positions.length;\r\n\r\n const longitude = borderCartographic.longitude;\r\n let latitude = borderCartographic.latitude;\r\n latitude = CesiumMath.clamp(\r\n latitude,\r\n -CesiumMath.PI_OVER_TWO,\r\n CesiumMath.PI_OVER_TWO\r\n ); // Don't go over the poles\r\n const height = borderCartographic.height - skirtOptions.skirtHeight;\r\n skirtOptions.hMin = Math.min(skirtOptions.hMin, height);\r\n\r\n Cartographic.fromRadians(longitude, latitude, height, scratchCartographic);\r\n\r\n // Adjust sides to angle out\r\n if (eastOrWest) {\r\n scratchCartographic.longitude += fudgeFactor;\r\n }\r\n\r\n // Adjust top or bottom to angle out\r\n // Since corners are in the east/west arrays angle the first and last points as well\r\n if (!eastOrWest) {\r\n scratchCartographic.latitude += fudgeFactor;\r\n } else if (j === count - 1) {\r\n scratchCartographic.latitude += cornerFudge;\r\n } else if (j === 0) {\r\n scratchCartographic.latitude -= cornerFudge;\r\n }\r\n\r\n const pos = skirtOptions.ellipsoid.cartographicToCartesian(\r\n scratchCartographic\r\n );\r\n positions.push(pos);\r\n heights.push(height);\r\n uvs.push(Cartesian2.clone(uvs[borderIndex])); // Copy UVs from border point\r\n if (webMercatorTs.length > 0) {\r\n webMercatorTs.push(webMercatorTs[borderIndex]);\r\n }\r\n if (geodeticSurfaceNormals.length > 0) {\r\n geodeticSurfaceNormals.push(geodeticSurfaceNormals[borderIndex]);\r\n }\r\n\r\n Matrix4.multiplyByPoint(skirtOptions.toENU, pos, scratchCartesian);\r\n\r\n const minimum = skirtOptions.minimum;\r\n const maximum = skirtOptions.maximum;\r\n Cartesian3.minimumByComponent(scratchCartesian, minimum, minimum);\r\n Cartesian3.maximumByComponent(scratchCartesian, maximum, maximum);\r\n\r\n const lastBorderPoint = skirtOptions.lastBorderPoint;\r\n if (defined(lastBorderPoint)) {\r\n const lastBorderIndex = lastBorderPoint.index;\r\n indices.push(\r\n lastBorderIndex,\r\n currentIndex - 1,\r\n currentIndex,\r\n currentIndex,\r\n borderIndex,\r\n lastBorderIndex\r\n );\r\n }\r\n\r\n skirtOptions.lastBorderPoint = borderPoint;\r\n }\r\n}\r\nexport default createTaskProcessorWorker(\r\n createVerticesFromGoogleEarthEnterpriseBuffer\r\n);\r\n"],"names":["defaultValue","CesiumMath","Ellipsoid","Rectangle","Cartographic","Cartesian3","Matrix4","defined","Transforms","WebMercatorProjection","Cartesian2","RuntimeError","BoundingSphere","OrientedBoundingBox","EllipsoidalOccluder","AxisAlignedBoundingBox","TerrainEncoding"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createVerticesFromHeightmap.js b/debug/cesium/Workers/createVerticesFromHeightmap.js deleted file mode 100644 index f0213d7..0000000 --- a/debug/cesium/Workers/createVerticesFromHeightmap.js +++ /dev/null @@ -1,2733 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Matrix3-f22b0303', './AxisAlignedBoundingBox-50342d27', './Transforms-11fb6b0a', './Matrix2-036c77dd', './defaultValue-0ab18f7d', './Check-d10e5f2e', './TerrainEncoding-c7d764e4', './Math-9be8b918', './OrientedBoundingBox-7e2eebab', './WebMercatorProjection-306f7acc', './RuntimeError-e5c6a8b9', './createTaskProcessorWorker', './combine-4598d225', './AttributeCompression-e9888cb8', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './EllipsoidTangentPlane-c421b2cb', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (Matrix3, AxisAlignedBoundingBox, Transforms, Matrix2, defaultValue, Check, TerrainEncoding, Math$1, OrientedBoundingBox, WebMercatorProjection, RuntimeError, createTaskProcessorWorker, combine, AttributeCompression, ComponentDatatype, WebGLConstants, EllipsoidTangentPlane, IntersectionTests, Plane) { 'use strict'; - - /** - * The encoding that is used for a heightmap - * - * @enum {Number} - */ - const HeightmapEncoding = { - /** - * No encoding - * - * @type {Number} - * @constant - */ - NONE: 0, - - /** - * LERC encoding - * - * @type {Number} - * @constant - * - * @see {@link https://github.com/Esri/lerc|The LERC specification} - */ - LERC: 1, - }; - var HeightmapEncoding$1 = Object.freeze(HeightmapEncoding); - - /** - * Contains functions to create a mesh from a heightmap image. - * - * @namespace HeightmapTessellator - * - * @private - */ - const HeightmapTessellator = {}; - - /** - * The default structure of a heightmap, as given to {@link HeightmapTessellator.computeVertices}. - * - * @constant - */ - HeightmapTessellator.DEFAULT_STRUCTURE = Object.freeze({ - heightScale: 1.0, - heightOffset: 0.0, - elementsPerHeight: 1, - stride: 1, - elementMultiplier: 256.0, - isBigEndian: false, - }); - - const cartesian3Scratch = new Matrix3.Cartesian3(); - const matrix4Scratch = new Matrix2.Matrix4(); - const minimumScratch = new Matrix3.Cartesian3(); - const maximumScratch = new Matrix3.Cartesian3(); - - /** - * Fills an array of vertices from a heightmap image. - * - * @param {Object} options Object with the following properties: - * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} options.heightmap The heightmap to tessellate. - * @param {Number} options.width The width of the heightmap, in height samples. - * @param {Number} options.height The height of the heightmap, in height samples. - * @param {Number} options.skirtHeight The height of skirts to drape at the edges of the heightmap. - * @param {Rectangle} options.nativeRectangle A rectangle in the native coordinates of the heightmap's projection. For - * a heightmap with a geographic projection, this is degrees. For the web mercator - * projection, this is meters. - * @param {Number} [options.exaggeration=1.0] The scale used to exaggerate the terrain. - * @param {Number} [options.exaggerationRelativeHeight=0.0] The height from which terrain is exaggerated. - * @param {Rectangle} [options.rectangle] The rectangle covered by the heightmap, in geodetic coordinates with north, south, east and - * west properties in radians. Either rectangle or nativeRectangle must be provided. If both - * are provided, they're assumed to be consistent. - * @param {Boolean} [options.isGeographic=true] True if the heightmap uses a {@link GeographicProjection}, or false if it uses - * a {@link WebMercatorProjection}. - * @param {Cartesian3} [options.relativeToCenter=Cartesian3.ZERO] The positions will be computed as Cartesian3.subtract(worldPosition, relativeToCenter). - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to which the heightmap applies. - * @param {Object} [options.structure] An object describing the structure of the height data. - * @param {Number} [options.structure.heightScale=1.0] The factor by which to multiply height samples in order to obtain - * the height above the heightOffset, in meters. The heightOffset is added to the resulting - * height after multiplying by the scale. - * @param {Number} [options.structure.heightOffset=0.0] The offset to add to the scaled height to obtain the final - * height in meters. The offset is added after the height sample is multiplied by the - * heightScale. - * @param {Number} [options.structure.elementsPerHeight=1] The number of elements in the buffer that make up a single height - * sample. This is usually 1, indicating that each element is a separate height sample. If - * it is greater than 1, that number of elements together form the height sample, which is - * computed according to the structure.elementMultiplier and structure.isBigEndian properties. - * @param {Number} [options.structure.stride=1] The number of elements to skip to get from the first element of - * one height to the first element of the next height. - * @param {Number} [options.structure.elementMultiplier=256.0] The multiplier used to compute the height value when the - * stride property is greater than 1. For example, if the stride is 4 and the strideMultiplier - * is 256, the height is computed as follows: - * `height = buffer[index] + buffer[index + 1] * 256 + buffer[index + 2] * 256 * 256 + buffer[index + 3] * 256 * 256 * 256` - * This is assuming that the isBigEndian property is false. If it is true, the order of the - * elements is reversed. - * @param {Number} [options.structure.lowestEncodedHeight] The lowest value that can be stored in the height buffer. Any heights that are lower - * than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height - * buffer is a `Uint16Array`, this value should be 0 because a `Uint16Array` cannot store negative numbers. If this parameter is - * not specified, no minimum value is enforced. - * @param {Number} [options.structure.highestEncodedHeight] The highest value that can be stored in the height buffer. Any heights that are higher - * than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height - * buffer is a `Uint16Array`, this value should be `256 * 256 - 1` or 65535 because a `Uint16Array` cannot store numbers larger - * than 65535. If this parameter is not specified, no maximum value is enforced. - * @param {Boolean} [options.structure.isBigEndian=false] Indicates endianness of the elements in the buffer when the - * stride property is greater than 1. If this property is false, the first element is the - * low-order element. If it is true, the first element is the high-order element. - * - * @example - * const width = 5; - * const height = 5; - * const statistics = Cesium.HeightmapTessellator.computeVertices({ - * heightmap : [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0], - * width : width, - * height : height, - * skirtHeight : 0.0, - * nativeRectangle : { - * west : 10.0, - * east : 20.0, - * south : 30.0, - * north : 40.0 - * } - * }); - * - * const encoding = statistics.encoding; - * const position = encoding.decodePosition(statistics.vertices, index); - */ - HeightmapTessellator.computeVertices = function (options) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(options) || !defaultValue.defined(options.heightmap)) { - throw new Check.DeveloperError("options.heightmap is required."); - } - if (!defaultValue.defined(options.width) || !defaultValue.defined(options.height)) { - throw new Check.DeveloperError("options.width and options.height are required."); - } - if (!defaultValue.defined(options.nativeRectangle)) { - throw new Check.DeveloperError("options.nativeRectangle is required."); - } - if (!defaultValue.defined(options.skirtHeight)) { - throw new Check.DeveloperError("options.skirtHeight is required."); - } - //>>includeEnd('debug'); - - // This function tends to be a performance hotspot for terrain rendering, - // so it employs a lot of inlining and unrolling as an optimization. - // In particular, the functionality of Ellipsoid.cartographicToCartesian - // is inlined. - - const cos = Math.cos; - const sin = Math.sin; - const sqrt = Math.sqrt; - const atan = Math.atan; - const exp = Math.exp; - const piOverTwo = Math$1.CesiumMath.PI_OVER_TWO; - const toRadians = Math$1.CesiumMath.toRadians; - - const heightmap = options.heightmap; - const width = options.width; - const height = options.height; - const skirtHeight = options.skirtHeight; - const hasSkirts = skirtHeight > 0.0; - - const isGeographic = defaultValue.defaultValue(options.isGeographic, true); - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - - const oneOverGlobeSemimajorAxis = 1.0 / ellipsoid.maximumRadius; - - const nativeRectangle = Matrix2.Rectangle.clone(options.nativeRectangle); - const rectangle = Matrix2.Rectangle.clone(options.rectangle); - - let geographicWest; - let geographicSouth; - let geographicEast; - let geographicNorth; - - if (!defaultValue.defined(rectangle)) { - if (isGeographic) { - geographicWest = toRadians(nativeRectangle.west); - geographicSouth = toRadians(nativeRectangle.south); - geographicEast = toRadians(nativeRectangle.east); - geographicNorth = toRadians(nativeRectangle.north); - } else { - geographicWest = nativeRectangle.west * oneOverGlobeSemimajorAxis; - geographicSouth = - piOverTwo - - 2.0 * atan(exp(-nativeRectangle.south * oneOverGlobeSemimajorAxis)); - geographicEast = nativeRectangle.east * oneOverGlobeSemimajorAxis; - geographicNorth = - piOverTwo - - 2.0 * atan(exp(-nativeRectangle.north * oneOverGlobeSemimajorAxis)); - } - } else { - geographicWest = rectangle.west; - geographicSouth = rectangle.south; - geographicEast = rectangle.east; - geographicNorth = rectangle.north; - } - - let relativeToCenter = options.relativeToCenter; - const hasRelativeToCenter = defaultValue.defined(relativeToCenter); - relativeToCenter = hasRelativeToCenter ? relativeToCenter : Matrix3.Cartesian3.ZERO; - const includeWebMercatorT = defaultValue.defaultValue(options.includeWebMercatorT, false); - - const exaggeration = defaultValue.defaultValue(options.exaggeration, 1.0); - const exaggerationRelativeHeight = defaultValue.defaultValue( - options.exaggerationRelativeHeight, - 0.0 - ); - const hasExaggeration = exaggeration !== 1.0; - const includeGeodeticSurfaceNormals = hasExaggeration; - - const structure = defaultValue.defaultValue( - options.structure, - HeightmapTessellator.DEFAULT_STRUCTURE - ); - const heightScale = defaultValue.defaultValue( - structure.heightScale, - HeightmapTessellator.DEFAULT_STRUCTURE.heightScale - ); - const heightOffset = defaultValue.defaultValue( - structure.heightOffset, - HeightmapTessellator.DEFAULT_STRUCTURE.heightOffset - ); - const elementsPerHeight = defaultValue.defaultValue( - structure.elementsPerHeight, - HeightmapTessellator.DEFAULT_STRUCTURE.elementsPerHeight - ); - const stride = defaultValue.defaultValue( - structure.stride, - HeightmapTessellator.DEFAULT_STRUCTURE.stride - ); - const elementMultiplier = defaultValue.defaultValue( - structure.elementMultiplier, - HeightmapTessellator.DEFAULT_STRUCTURE.elementMultiplier - ); - const isBigEndian = defaultValue.defaultValue( - structure.isBigEndian, - HeightmapTessellator.DEFAULT_STRUCTURE.isBigEndian - ); - - let rectangleWidth = Matrix2.Rectangle.computeWidth(nativeRectangle); - let rectangleHeight = Matrix2.Rectangle.computeHeight(nativeRectangle); - - const granularityX = rectangleWidth / (width - 1); - const granularityY = rectangleHeight / (height - 1); - - if (!isGeographic) { - rectangleWidth *= oneOverGlobeSemimajorAxis; - rectangleHeight *= oneOverGlobeSemimajorAxis; - } - - const radiiSquared = ellipsoid.radiiSquared; - const radiiSquaredX = radiiSquared.x; - const radiiSquaredY = radiiSquared.y; - const radiiSquaredZ = radiiSquared.z; - - let minimumHeight = 65536.0; - let maximumHeight = -65536.0; - - const fromENU = Transforms.Transforms.eastNorthUpToFixedFrame( - relativeToCenter, - ellipsoid - ); - const toENU = Matrix2.Matrix4.inverseTransformation(fromENU, matrix4Scratch); - - let southMercatorY; - let oneOverMercatorHeight; - if (includeWebMercatorT) { - southMercatorY = WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle( - geographicSouth - ); - oneOverMercatorHeight = - 1.0 / - (WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle(geographicNorth) - - southMercatorY); - } - - const minimum = minimumScratch; - minimum.x = Number.POSITIVE_INFINITY; - minimum.y = Number.POSITIVE_INFINITY; - minimum.z = Number.POSITIVE_INFINITY; - - const maximum = maximumScratch; - maximum.x = Number.NEGATIVE_INFINITY; - maximum.y = Number.NEGATIVE_INFINITY; - maximum.z = Number.NEGATIVE_INFINITY; - - let hMin = Number.POSITIVE_INFINITY; - - const gridVertexCount = width * height; - const edgeVertexCount = skirtHeight > 0.0 ? width * 2 + height * 2 : 0; - const vertexCount = gridVertexCount + edgeVertexCount; - - const positions = new Array(vertexCount); - const heights = new Array(vertexCount); - const uvs = new Array(vertexCount); - const webMercatorTs = includeWebMercatorT ? new Array(vertexCount) : []; - const geodeticSurfaceNormals = includeGeodeticSurfaceNormals - ? new Array(vertexCount) - : []; - - let startRow = 0; - let endRow = height; - let startCol = 0; - let endCol = width; - - if (hasSkirts) { - --startRow; - ++endRow; - --startCol; - ++endCol; - } - - const skirtOffsetPercentage = 0.00001; - - for (let rowIndex = startRow; rowIndex < endRow; ++rowIndex) { - let row = rowIndex; - if (row < 0) { - row = 0; - } - if (row >= height) { - row = height - 1; - } - - let latitude = nativeRectangle.north - granularityY * row; - - if (!isGeographic) { - latitude = - piOverTwo - 2.0 * atan(exp(-latitude * oneOverGlobeSemimajorAxis)); - } else { - latitude = toRadians(latitude); - } - - let v = (latitude - geographicSouth) / (geographicNorth - geographicSouth); - v = Math$1.CesiumMath.clamp(v, 0.0, 1.0); - - const isNorthEdge = rowIndex === startRow; - const isSouthEdge = rowIndex === endRow - 1; - if (skirtHeight > 0.0) { - if (isNorthEdge) { - latitude += skirtOffsetPercentage * rectangleHeight; - } else if (isSouthEdge) { - latitude -= skirtOffsetPercentage * rectangleHeight; - } - } - - const cosLatitude = cos(latitude); - const nZ = sin(latitude); - const kZ = radiiSquaredZ * nZ; - - let webMercatorT; - if (includeWebMercatorT) { - webMercatorT = - (WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) - - southMercatorY) * - oneOverMercatorHeight; - } - - for (let colIndex = startCol; colIndex < endCol; ++colIndex) { - let col = colIndex; - if (col < 0) { - col = 0; - } - if (col >= width) { - col = width - 1; - } - - const terrainOffset = row * (width * stride) + col * stride; - - let heightSample; - if (elementsPerHeight === 1) { - heightSample = heightmap[terrainOffset]; - } else { - heightSample = 0; - - let elementOffset; - if (isBigEndian) { - for ( - elementOffset = 0; - elementOffset < elementsPerHeight; - ++elementOffset - ) { - heightSample = - heightSample * elementMultiplier + - heightmap[terrainOffset + elementOffset]; - } - } else { - for ( - elementOffset = elementsPerHeight - 1; - elementOffset >= 0; - --elementOffset - ) { - heightSample = - heightSample * elementMultiplier + - heightmap[terrainOffset + elementOffset]; - } - } - } - - heightSample = heightSample * heightScale + heightOffset; - - maximumHeight = Math.max(maximumHeight, heightSample); - minimumHeight = Math.min(minimumHeight, heightSample); - - let longitude = nativeRectangle.west + granularityX * col; - - if (!isGeographic) { - longitude = longitude * oneOverGlobeSemimajorAxis; - } else { - longitude = toRadians(longitude); - } - - let u = (longitude - geographicWest) / (geographicEast - geographicWest); - u = Math$1.CesiumMath.clamp(u, 0.0, 1.0); - - let index = row * width + col; - - if (skirtHeight > 0.0) { - const isWestEdge = colIndex === startCol; - const isEastEdge = colIndex === endCol - 1; - const isEdge = isNorthEdge || isSouthEdge || isWestEdge || isEastEdge; - const isCorner = - (isNorthEdge || isSouthEdge) && (isWestEdge || isEastEdge); - if (isCorner) { - // Don't generate skirts on the corners. - continue; - } else if (isEdge) { - heightSample -= skirtHeight; - - if (isWestEdge) { - // The outer loop iterates north to south but the indices are ordered south to north, hence the index flip below - index = gridVertexCount + (height - row - 1); - longitude -= skirtOffsetPercentage * rectangleWidth; - } else if (isSouthEdge) { - // Add after west indices. South indices are ordered east to west. - index = gridVertexCount + height + (width - col - 1); - } else if (isEastEdge) { - // Add after west and south indices. East indices are ordered north to south. The index is flipped like above. - index = gridVertexCount + height + width + row; - longitude += skirtOffsetPercentage * rectangleWidth; - } else if (isNorthEdge) { - // Add after west, south, and east indices. North indices are ordered west to east. - index = gridVertexCount + height + width + height + col; - } - } - } - - const nX = cosLatitude * cos(longitude); - const nY = cosLatitude * sin(longitude); - - const kX = radiiSquaredX * nX; - const kY = radiiSquaredY * nY; - - const gamma = sqrt(kX * nX + kY * nY + kZ * nZ); - const oneOverGamma = 1.0 / gamma; - - const rSurfaceX = kX * oneOverGamma; - const rSurfaceY = kY * oneOverGamma; - const rSurfaceZ = kZ * oneOverGamma; - - const position = new Matrix3.Cartesian3(); - position.x = rSurfaceX + nX * heightSample; - position.y = rSurfaceY + nY * heightSample; - position.z = rSurfaceZ + nZ * heightSample; - - Matrix2.Matrix4.multiplyByPoint(toENU, position, cartesian3Scratch); - Matrix3.Cartesian3.minimumByComponent(cartesian3Scratch, minimum, minimum); - Matrix3.Cartesian3.maximumByComponent(cartesian3Scratch, maximum, maximum); - hMin = Math.min(hMin, heightSample); - - positions[index] = position; - uvs[index] = new Matrix2.Cartesian2(u, v); - heights[index] = heightSample; - - if (includeWebMercatorT) { - webMercatorTs[index] = webMercatorT; - } - - if (includeGeodeticSurfaceNormals) { - geodeticSurfaceNormals[index] = ellipsoid.geodeticSurfaceNormal( - position - ); - } - } - } - - const boundingSphere3D = Transforms.BoundingSphere.fromPoints(positions); - let orientedBoundingBox; - if (defaultValue.defined(rectangle)) { - orientedBoundingBox = OrientedBoundingBox.OrientedBoundingBox.fromRectangle( - rectangle, - minimumHeight, - maximumHeight, - ellipsoid - ); - } - - let occludeePointInScaledSpace; - if (hasRelativeToCenter) { - const occluder = new TerrainEncoding.EllipsoidalOccluder(ellipsoid); - occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid( - relativeToCenter, - positions, - minimumHeight - ); - } - - const aaBox = new AxisAlignedBoundingBox.AxisAlignedBoundingBox(minimum, maximum, relativeToCenter); - const encoding = new TerrainEncoding.TerrainEncoding( - relativeToCenter, - aaBox, - hMin, - maximumHeight, - fromENU, - false, - includeWebMercatorT, - includeGeodeticSurfaceNormals, - exaggeration, - exaggerationRelativeHeight - ); - const vertices = new Float32Array(vertexCount * encoding.stride); - - let bufferIndex = 0; - for (let j = 0; j < vertexCount; ++j) { - bufferIndex = encoding.encode( - vertices, - bufferIndex, - positions[j], - uvs[j], - heights[j], - undefined, - webMercatorTs[j], - geodeticSurfaceNormals[j] - ); - } - - return { - vertices: vertices, - maximumHeight: maximumHeight, - minimumHeight: minimumHeight, - encoding: encoding, - boundingSphere3D: boundingSphere3D, - orientedBoundingBox: orientedBoundingBox, - occludeePointInScaledSpace: occludeePointInScaledSpace, - }; - }; - var HeightmapTessellator$1 = HeightmapTessellator; - - var LercDecode = {exports: {}}; - - /* jshint forin: false, bitwise: false */ - - (function (module) { - /* - Copyright 2015-2018 Esri - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - - A copy of the license and additional notices are located with the - source distribution at: - - http://github.com/Esri/lerc/ - - Contributors: Johannes Schmid, (LERC v1) - Chayanika Khatua, (LERC v1) - Wenxue Ju (LERC v1, v2.x) - */ - - /* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */ - - /** - * a module for decoding LERC blobs - * @module Lerc - */ - (function() { - //the original LercDecode for Version 1 - var LercDecode = (function() { - - // WARNING: This decoder version can only read old version 1 Lerc blobs. Use with caution. - - // Note: currently, this module only has an implementation for decoding LERC data, not encoding. The name of - // the class was chosen to be future proof. - - var CntZImage = {}; - - CntZImage.defaultNoDataValue = -3.4027999387901484e+38; // smallest Float32 value - - /** - * Decode a LERC byte stream and return an object containing the pixel data and some required and optional - * information about it, such as the image's width and height. - * - * @param {ArrayBuffer} input The LERC input byte stream - * @param {object} [options] Decoding options, containing any of the following properties: - * @config {number} [inputOffset = 0] - * Skip the first inputOffset bytes of the input byte stream. A valid LERC file is expected at that position. - * @config {Uint8Array} [encodedMask = null] - * If specified, the decoder will not read mask information from the input and use the specified encoded - * mask data instead. Mask header/data must not be present in the LERC byte stream in this case. - * @config {number} [noDataValue = LercCode.defaultNoDataValue] - * Pixel value to use for masked pixels. - * @config {ArrayBufferView|Array} [pixelType = Float32Array] - * The desired type of the pixelData array in the return value. Note that it is the caller's responsibility to - * provide an appropriate noDataValue if the default pixelType is overridden. - * @config {boolean} [returnMask = false] - * If true, the return value will contain a maskData property of type Uint8Array which has one element per - * pixel, the value of which is 1 or 0 depending on whether that pixel's data is present or masked. If the - * input LERC data does not contain a mask, maskData will not be returned. - * @config {boolean} [returnEncodedMask = false] - * If true, the return value will contain a encodedMaskData property, which can be passed into encode() as - * encodedMask. - * @config {boolean} [returnFileInfo = false] - * If true, the return value will have a fileInfo property that contains metadata obtained from the - * LERC headers and the decoding process. - * @config {boolean} [computeUsedBitDepths = false] - * If true, the fileInfo property in the return value will contain the set of all block bit depths - * encountered during decoding. Will only have an effect if returnFileInfo option is true. - * @returns {{width, height, pixelData, minValue, maxValue, noDataValue, maskData, encodedMaskData, fileInfo}} - */ - CntZImage.decode = function(input, options) { - options = options || {}; - - var skipMask = options.encodedMaskData || (options.encodedMaskData === null); - var parsedData = parse(input, options.inputOffset || 0, skipMask); - - var noDataValue = (options.noDataValue !== null) ? options.noDataValue : CntZImage.defaultNoDataValue; - - var uncompressedData = uncompressPixelValues(parsedData, options.pixelType || Float32Array, - options.encodedMaskData, noDataValue, options.returnMask); - - var result = { - width: parsedData.width, - height: parsedData.height, - pixelData: uncompressedData.resultPixels, - minValue: uncompressedData.minValue, - maxValue: parsedData.pixels.maxValue, - noDataValue: noDataValue - }; - - if (uncompressedData.resultMask) { - result.maskData = uncompressedData.resultMask; - } - - if (options.returnEncodedMask && parsedData.mask) { - result.encodedMaskData = parsedData.mask.bitset ? parsedData.mask.bitset : null; - } - - if (options.returnFileInfo) { - result.fileInfo = formatFileInfo(parsedData); - if (options.computeUsedBitDepths) { - result.fileInfo.bitDepths = computeUsedBitDepths(parsedData); - } - } - - return result; - }; - - var uncompressPixelValues = function(data, TypedArrayClass, maskBitset, noDataValue, storeDecodedMask) { - var blockIdx = 0; - var numX = data.pixels.numBlocksX; - var numY = data.pixels.numBlocksY; - var blockWidth = Math.floor(data.width / numX); - var blockHeight = Math.floor(data.height / numY); - var scale = 2 * data.maxZError; - var minValue = Number.MAX_VALUE, currentValue; - maskBitset = maskBitset || ((data.mask) ? data.mask.bitset : null); - - var resultPixels, resultMask; - resultPixels = new TypedArrayClass(data.width * data.height); - if (storeDecodedMask && maskBitset) { - resultMask = new Uint8Array(data.width * data.height); - } - var blockDataBuffer = new Float32Array(blockWidth * blockHeight); - - var xx, yy; - for (var y = 0; y <= numY; y++) { - var thisBlockHeight = (y !== numY) ? blockHeight : (data.height % numY); - if (thisBlockHeight === 0) { - continue; - } - for (var x = 0; x <= numX; x++) { - var thisBlockWidth = (x !== numX) ? blockWidth : (data.width % numX); - if (thisBlockWidth === 0) { - continue; - } - - var outPtr = y * data.width * blockHeight + x * blockWidth; - var outStride = data.width - thisBlockWidth; - - var block = data.pixels.blocks[blockIdx]; - - var blockData, blockPtr, constValue; - if (block.encoding < 2) { - // block is either uncompressed or bit-stuffed (encodings 0 and 1) - if (block.encoding === 0) { - // block is uncompressed - blockData = block.rawData; - } else { - // block is bit-stuffed - unstuff(block.stuffedData, block.bitsPerPixel, block.numValidPixels, block.offset, scale, blockDataBuffer, data.pixels.maxValue); - blockData = blockDataBuffer; - } - blockPtr = 0; - } - else if (block.encoding === 2) { - // block is all 0 - constValue = 0; - } - else { - // block has constant value (encoding === 3) - constValue = block.offset; - } - - var maskByte; - if (maskBitset) { - for (yy = 0; yy < thisBlockHeight; yy++) { - if (outPtr & 7) { - // - maskByte = maskBitset[outPtr >> 3]; - maskByte <<= outPtr & 7; - } - for (xx = 0; xx < thisBlockWidth; xx++) { - if (!(outPtr & 7)) { - // read next byte from mask - maskByte = maskBitset[outPtr >> 3]; - } - if (maskByte & 128) { - // pixel data present - if (resultMask) { - resultMask[outPtr] = 1; - } - currentValue = (block.encoding < 2) ? blockData[blockPtr++] : constValue; - minValue = minValue > currentValue ? currentValue : minValue; - resultPixels[outPtr++] = currentValue; - } else { - // pixel data not present - if (resultMask) { - resultMask[outPtr] = 0; - } - resultPixels[outPtr++] = noDataValue; - } - maskByte <<= 1; - } - outPtr += outStride; - } - } else { - // mask not present, simply copy block over - if (block.encoding < 2) { - // duplicating this code block for performance reasons - // blockData case: - for (yy = 0; yy < thisBlockHeight; yy++) { - for (xx = 0; xx < thisBlockWidth; xx++) { - currentValue = blockData[blockPtr++]; - minValue = minValue > currentValue ? currentValue : minValue; - resultPixels[outPtr++] = currentValue; - } - outPtr += outStride; - } - } - else { - // constValue case: - minValue = minValue > constValue ? constValue : minValue; - for (yy = 0; yy < thisBlockHeight; yy++) { - for (xx = 0; xx < thisBlockWidth; xx++) { - resultPixels[outPtr++] = constValue; - } - outPtr += outStride; - } - } - } - if ((block.encoding === 1) && (blockPtr !== block.numValidPixels)) { - throw "Block and Mask do not match"; - } - blockIdx++; - } - } - - return { - resultPixels: resultPixels, - resultMask: resultMask, - minValue: minValue - }; - }; - - var formatFileInfo = function(data) { - return { - "fileIdentifierString": data.fileIdentifierString, - "fileVersion": data.fileVersion, - "imageType": data.imageType, - "height": data.height, - "width": data.width, - "maxZError": data.maxZError, - "eofOffset": data.eofOffset, - "mask": data.mask ? { - "numBlocksX": data.mask.numBlocksX, - "numBlocksY": data.mask.numBlocksY, - "numBytes": data.mask.numBytes, - "maxValue": data.mask.maxValue - } : null, - "pixels": { - "numBlocksX": data.pixels.numBlocksX, - "numBlocksY": data.pixels.numBlocksY, - "numBytes": data.pixels.numBytes, - "maxValue": data.pixels.maxValue, - "noDataValue": data.noDataValue - } - }; - }; - - var computeUsedBitDepths = function(data) { - var numBlocks = data.pixels.numBlocksX * data.pixels.numBlocksY; - var bitDepths = {}; - for (var i = 0; i < numBlocks; i++) { - var block = data.pixels.blocks[i]; - if (block.encoding === 0) { - bitDepths.float32 = true; - } else if (block.encoding === 1) { - bitDepths[block.bitsPerPixel] = true; - } else { - bitDepths[0] = true; - } - } - - return Object.keys(bitDepths); - }; - - var parse = function(input, fp, skipMask) { - var data = {}; - - // File header - var fileIdView = new Uint8Array(input, fp, 10); - data.fileIdentifierString = String.fromCharCode.apply(null, fileIdView); - if (data.fileIdentifierString.trim() !== "CntZImage") { - throw "Unexpected file identifier string: " + data.fileIdentifierString; - } - fp += 10; - var view = new DataView(input, fp, 24); - data.fileVersion = view.getInt32(0, true); - data.imageType = view.getInt32(4, true); - data.height = view.getUint32(8, true); - data.width = view.getUint32(12, true); - data.maxZError = view.getFloat64(16, true); - fp += 24; - - // Mask Header - if (!skipMask) { - view = new DataView(input, fp, 16); - data.mask = {}; - data.mask.numBlocksY = view.getUint32(0, true); - data.mask.numBlocksX = view.getUint32(4, true); - data.mask.numBytes = view.getUint32(8, true); - data.mask.maxValue = view.getFloat32(12, true); - fp += 16; - - // Mask Data - if (data.mask.numBytes > 0) { - var bitset = new Uint8Array(Math.ceil(data.width * data.height / 8)); - view = new DataView(input, fp, data.mask.numBytes); - var cnt = view.getInt16(0, true); - var ip = 2, op = 0; - do { - if (cnt > 0) { - while (cnt--) { bitset[op++] = view.getUint8(ip++); } - } else { - var val = view.getUint8(ip++); - cnt = -cnt; - while (cnt--) { bitset[op++] = val; } - } - cnt = view.getInt16(ip, true); - ip += 2; - } while (ip < data.mask.numBytes); - if ((cnt !== -32768) || (op < bitset.length)) { - throw "Unexpected end of mask RLE encoding"; - } - data.mask.bitset = bitset; - fp += data.mask.numBytes; - } - else if ((data.mask.numBytes | data.mask.numBlocksY | data.mask.maxValue) === 0) { // Special case, all nodata - data.mask.bitset = new Uint8Array(Math.ceil(data.width * data.height / 8)); - } - } - - // Pixel Header - view = new DataView(input, fp, 16); - data.pixels = {}; - data.pixels.numBlocksY = view.getUint32(0, true); - data.pixels.numBlocksX = view.getUint32(4, true); - data.pixels.numBytes = view.getUint32(8, true); - data.pixels.maxValue = view.getFloat32(12, true); - fp += 16; - - var numBlocksX = data.pixels.numBlocksX; - var numBlocksY = data.pixels.numBlocksY; - // the number of blocks specified in the header does not take into account the blocks at the end of - // each row/column with a special width/height that make the image complete in case the width is not - // evenly divisible by the number of blocks. - var actualNumBlocksX = numBlocksX + ((data.width % numBlocksX) > 0 ? 1 : 0); - var actualNumBlocksY = numBlocksY + ((data.height % numBlocksY) > 0 ? 1 : 0); - data.pixels.blocks = new Array(actualNumBlocksX * actualNumBlocksY); - var blockI = 0; - for (var blockY = 0; blockY < actualNumBlocksY; blockY++) { - for (var blockX = 0; blockX < actualNumBlocksX; blockX++) { - - // Block - var size = 0; - var bytesLeft = input.byteLength - fp; - view = new DataView(input, fp, Math.min(10, bytesLeft)); - var block = {}; - data.pixels.blocks[blockI++] = block; - var headerByte = view.getUint8(0); size++; - block.encoding = headerByte & 63; - if (block.encoding > 3) { - throw "Invalid block encoding (" + block.encoding + ")"; - } - if (block.encoding === 2) { - fp++; - continue; - } - if ((headerByte !== 0) && (headerByte !== 2)) { - headerByte >>= 6; - block.offsetType = headerByte; - if (headerByte === 2) { - block.offset = view.getInt8(1); size++; - } else if (headerByte === 1) { - block.offset = view.getInt16(1, true); size += 2; - } else if (headerByte === 0) { - block.offset = view.getFloat32(1, true); size += 4; - } else { - throw "Invalid block offset type"; - } - - if (block.encoding === 1) { - headerByte = view.getUint8(size); size++; - block.bitsPerPixel = headerByte & 63; - headerByte >>= 6; - block.numValidPixelsType = headerByte; - if (headerByte === 2) { - block.numValidPixels = view.getUint8(size); size++; - } else if (headerByte === 1) { - block.numValidPixels = view.getUint16(size, true); size += 2; - } else if (headerByte === 0) { - block.numValidPixels = view.getUint32(size, true); size += 4; - } else { - throw "Invalid valid pixel count type"; - } - } - } - fp += size; - - if (block.encoding === 3) { - continue; - } - - var arrayBuf, store8; - if (block.encoding === 0) { - var numPixels = (data.pixels.numBytes - 1) / 4; - if (numPixels !== Math.floor(numPixels)) { - throw "uncompressed block has invalid length"; - } - arrayBuf = new ArrayBuffer(numPixels * 4); - store8 = new Uint8Array(arrayBuf); - store8.set(new Uint8Array(input, fp, numPixels * 4)); - var rawData = new Float32Array(arrayBuf); - block.rawData = rawData; - fp += numPixels * 4; - } else if (block.encoding === 1) { - var dataBytes = Math.ceil(block.numValidPixels * block.bitsPerPixel / 8); - var dataWords = Math.ceil(dataBytes / 4); - arrayBuf = new ArrayBuffer(dataWords * 4); - store8 = new Uint8Array(arrayBuf); - store8.set(new Uint8Array(input, fp, dataBytes)); - block.stuffedData = new Uint32Array(arrayBuf); - fp += dataBytes; - } - } - } - data.eofOffset = fp; - return data; - }; - - var unstuff = function(src, bitsPerPixel, numPixels, offset, scale, dest, maxValue) { - var bitMask = (1 << bitsPerPixel) - 1; - var i = 0, o; - var bitsLeft = 0; - var n, buffer; - var nmax = Math.ceil((maxValue - offset) / scale); - // get rid of trailing bytes that are already part of next block - var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8); - src[src.length - 1] <<= 8 * numInvalidTailBytes; - - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - } - if (bitsLeft >= bitsPerPixel) { - n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask; - bitsLeft -= bitsPerPixel; - } else { - var missingBits = (bitsPerPixel - bitsLeft); - n = ((buffer & bitMask) << missingBits) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n += (buffer >>> bitsLeft); - } - //pixel values may exceed max due to quantization - dest[o] = n < nmax ? offset + n * scale : maxValue; - } - return dest; - }; - - return CntZImage; - })(); - - //version 2. Supports 2.1, 2.2, 2.3 - var Lerc2Decode = (function() { - // Note: currently, this module only has an implementation for decoding LERC data, not encoding. The name of - // the class was chosen to be future proof, following LercDecode. - - /***************************************** - * private static class bitsutffer used by Lerc2Decode - *******************************************/ - var BitStuffer = { - //methods ending with 2 are for the new byte order used by Lerc2.3 and above. - //originalUnstuff is used to unpack Huffman code table. code is duplicated to unstuffx for performance reasons. - unstuff: function(src, dest, bitsPerPixel, numPixels, lutArr, offset, scale, maxValue) { - var bitMask = (1 << bitsPerPixel) - 1; - var i = 0, o; - var bitsLeft = 0; - var n, buffer, missingBits, nmax; - - // get rid of trailing bytes that are already part of next block - var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8); - src[src.length - 1] <<= 8 * numInvalidTailBytes; - if (lutArr) { - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - } - if (bitsLeft >= bitsPerPixel) { - n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask; - bitsLeft -= bitsPerPixel; - } - else { - missingBits = (bitsPerPixel - bitsLeft); - n = ((buffer & bitMask) << missingBits) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n += (buffer >>> bitsLeft); - } - dest[o] = lutArr[n];//offset + lutArr[n] * scale; - } - } - else { - nmax = Math.ceil((maxValue - offset) / scale); - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - } - if (bitsLeft >= bitsPerPixel) { - n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask; - bitsLeft -= bitsPerPixel; - } - else { - missingBits = (bitsPerPixel - bitsLeft); - n = ((buffer & bitMask) << missingBits) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n += (buffer >>> bitsLeft); - } - //pixel values may exceed max due to quantization - dest[o] = n < nmax ? offset + n * scale : maxValue; - } - } - }, - - unstuffLUT: function(src, bitsPerPixel, numPixels, offset, scale, maxValue) { - var bitMask = (1 << bitsPerPixel) - 1; - var i = 0, o = 0, missingBits = 0, bitsLeft = 0, n = 0; - var buffer; - var dest = []; - - // get rid of trailing bytes that are already part of next block - var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8); - src[src.length - 1] <<= 8 * numInvalidTailBytes; - - var nmax = Math.ceil((maxValue - offset) / scale); - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - } - if (bitsLeft >= bitsPerPixel) { - n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask; - bitsLeft -= bitsPerPixel; - } else { - missingBits = (bitsPerPixel - bitsLeft); - n = ((buffer & bitMask) << missingBits) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n += (buffer >>> bitsLeft); - } - //dest.push(n); - dest[o] = n < nmax ? offset + n * scale : maxValue; - } - dest.unshift(offset);//1st one - return dest; - }, - - unstuff2: function(src, dest, bitsPerPixel, numPixels, lutArr, offset, scale, maxValue) { - var bitMask = (1 << bitsPerPixel) - 1; - var i = 0, o; - var bitsLeft = 0, bitPos = 0; - var n, buffer, missingBits; - if (lutArr) { - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - bitPos = 0; - } - if (bitsLeft >= bitsPerPixel) { - n = ((buffer >>> bitPos) & bitMask); - bitsLeft -= bitsPerPixel; - bitPos += bitsPerPixel; - } else { - missingBits = (bitsPerPixel - bitsLeft); - n = (buffer >>> bitPos) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits); - bitPos = missingBits; - } - dest[o] = lutArr[n]; - } - } - else { - var nmax = Math.ceil((maxValue - offset) / scale); - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - bitPos = 0; - } - if (bitsLeft >= bitsPerPixel) { - //no unsigned left shift - n = ((buffer >>> bitPos) & bitMask); - bitsLeft -= bitsPerPixel; - bitPos += bitsPerPixel; - } else { - missingBits = (bitsPerPixel - bitsLeft); - n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits); - bitPos = missingBits; - } - //pixel values may exceed max due to quantization - dest[o] = n < nmax ? offset + n * scale : maxValue; - } - } - return dest; - }, - - unstuffLUT2: function(src, bitsPerPixel, numPixels, offset, scale, maxValue) { - var bitMask = (1 << bitsPerPixel) - 1; - var i = 0, o = 0, missingBits = 0, bitsLeft = 0, n = 0, bitPos = 0; - var buffer; - var dest = []; - var nmax = Math.ceil((maxValue - offset) / scale); - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - bitPos = 0; - } - if (bitsLeft >= bitsPerPixel) { - //no unsigned left shift - n = ((buffer >>> bitPos) & bitMask); - bitsLeft -= bitsPerPixel; - bitPos += bitsPerPixel; - } else { - missingBits = (bitsPerPixel - bitsLeft); - n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits); - bitPos = missingBits; - } - //dest.push(n); - dest[o] = n < nmax ? offset + n * scale : maxValue; - } - dest.unshift(offset); - return dest; - }, - - originalUnstuff: function(src, dest, bitsPerPixel, numPixels) { - var bitMask = (1 << bitsPerPixel) - 1; - var i = 0, o; - var bitsLeft = 0; - var n, buffer, missingBits; - - // get rid of trailing bytes that are already part of next block - var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8); - src[src.length - 1] <<= 8 * numInvalidTailBytes; - - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - } - if (bitsLeft >= bitsPerPixel) { - n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask; - bitsLeft -= bitsPerPixel; - } - else { - missingBits = (bitsPerPixel - bitsLeft); - n = ((buffer & bitMask) << missingBits) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n += (buffer >>> bitsLeft); - } - dest[o] = n; - } - return dest; - }, - - originalUnstuff2: function(src, dest, bitsPerPixel, numPixels) { - var bitMask = (1 << bitsPerPixel) - 1; - var i = 0, o; - var bitsLeft = 0, bitPos = 0; - var n, buffer, missingBits; - //micro-optimizations - for (o = 0; o < numPixels; o++) { - if (bitsLeft === 0) { - buffer = src[i++]; - bitsLeft = 32; - bitPos = 0; - } - if (bitsLeft >= bitsPerPixel) { - //no unsigned left shift - n = ((buffer >>> bitPos) & bitMask); - bitsLeft -= bitsPerPixel; - bitPos += bitsPerPixel; - } else { - missingBits = (bitsPerPixel - bitsLeft); - n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask; - buffer = src[i++]; - bitsLeft = 32 - missingBits; - n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits); - bitPos = missingBits; - } - dest[o] = n; - } - return dest; - } - }; - - /***************************************** - *private static class used by Lerc2Decode - ******************************************/ - var Lerc2Helpers = { - HUFFMAN_LUT_BITS_MAX: 12, //use 2^12 lut, treat it like constant - computeChecksumFletcher32: function(input) { - - var sum1 = 0xffff, sum2 = 0xffff; - var len = input.length; - var words = Math.floor(len / 2); - var i = 0; - while (words) { - var tlen = (words >= 359) ? 359 : words; - words -= tlen; - do { - sum1 += (input[i++] << 8); - sum2 += sum1 += input[i++]; - } while (--tlen); - - sum1 = (sum1 & 0xffff) + (sum1 >>> 16); - sum2 = (sum2 & 0xffff) + (sum2 >>> 16); - } - - // add the straggler byte if it exists - if (len & 1) { - sum2 += sum1 += (input[i] << 8); - } - // second reduction step to reduce sums to 16 bits - sum1 = (sum1 & 0xffff) + (sum1 >>> 16); - sum2 = (sum2 & 0xffff) + (sum2 >>> 16); - - return (sum2 << 16 | sum1) >>> 0; - }, - - readHeaderInfo: function(input, data) { - var ptr = data.ptr; - var fileIdView = new Uint8Array(input, ptr, 6); - var headerInfo = {}; - headerInfo.fileIdentifierString = String.fromCharCode.apply(null, fileIdView); - if (headerInfo.fileIdentifierString.lastIndexOf("Lerc2", 0) !== 0) { - throw "Unexpected file identifier string (expect Lerc2 ): " + headerInfo.fileIdentifierString; - } - ptr += 6; - var view = new DataView(input, ptr, 8); - var fileVersion = view.getInt32(0, true); - headerInfo.fileVersion = fileVersion; - ptr += 4; - if (fileVersion >= 3) { - headerInfo.checksum = view.getUint32(4, true); //nrows - ptr += 4; - } - - //keys start from here - view = new DataView(input, ptr, 12); - headerInfo.height = view.getUint32(0, true); //nrows - headerInfo.width = view.getUint32(4, true); //ncols - ptr += 8; - if (fileVersion >= 4) { - headerInfo.numDims = view.getUint32(8, true); - ptr += 4; - } - else { - headerInfo.numDims = 1; - } - - view = new DataView(input, ptr, 40); - headerInfo.numValidPixel = view.getUint32(0, true); - headerInfo.microBlockSize = view.getInt32(4, true); - headerInfo.blobSize = view.getInt32(8, true); - headerInfo.imageType = view.getInt32(12, true); - - headerInfo.maxZError = view.getFloat64(16, true); - headerInfo.zMin = view.getFloat64(24, true); - headerInfo.zMax = view.getFloat64(32, true); - ptr += 40; - data.headerInfo = headerInfo; - data.ptr = ptr; - - var checksum, keyLength; - if (fileVersion >= 3) { - keyLength = fileVersion >= 4 ? 52 : 48; - checksum = this.computeChecksumFletcher32(new Uint8Array(input, ptr - keyLength, headerInfo.blobSize - 14)); - if (checksum !== headerInfo.checksum) { - throw "Checksum failed."; - } - } - return true; - }, - - checkMinMaxRanges: function(input, data) { - var headerInfo = data.headerInfo; - var OutPixelTypeArray = this.getDataTypeArray(headerInfo.imageType); - var rangeBytes = headerInfo.numDims * this.getDataTypeSize(headerInfo.imageType); - var minValues = this.readSubArray(input, data.ptr, OutPixelTypeArray, rangeBytes); - var maxValues = this.readSubArray(input, data.ptr + rangeBytes, OutPixelTypeArray, rangeBytes); - data.ptr += (2 * rangeBytes); - var i, equal = true; - for (i = 0; i < headerInfo.numDims; i++) { - if (minValues[i] !== maxValues[i]) { - equal = false; - break; - } - } - headerInfo.minValues = minValues; - headerInfo.maxValues = maxValues; - return equal; - }, - - readSubArray: function(input, ptr, OutPixelTypeArray, numBytes) { - var rawData; - if (OutPixelTypeArray === Uint8Array) { - rawData = new Uint8Array(input, ptr, numBytes); - } - else { - var arrayBuf = new ArrayBuffer(numBytes); - var store8 = new Uint8Array(arrayBuf); - store8.set(new Uint8Array(input, ptr, numBytes)); - rawData = new OutPixelTypeArray(arrayBuf); - } - return rawData; - }, - - readMask: function(input, data) { - var ptr = data.ptr; - var headerInfo = data.headerInfo; - var numPixels = headerInfo.width * headerInfo.height; - var numValidPixel = headerInfo.numValidPixel; - - var view = new DataView(input, ptr, 4); - var mask = {}; - mask.numBytes = view.getUint32(0, true); - ptr += 4; - - // Mask Data - if ((0 === numValidPixel || numPixels === numValidPixel) && 0 !== mask.numBytes) { - throw ("invalid mask"); - } - var bitset, resultMask; - if (numValidPixel === 0) { - bitset = new Uint8Array(Math.ceil(numPixels / 8)); - mask.bitset = bitset; - resultMask = new Uint8Array(numPixels); - data.pixels.resultMask = resultMask; - ptr += mask.numBytes; - }// ????? else if (data.mask.numBytes > 0 && data.mask.numBytes< data.numValidPixel) { - else if (mask.numBytes > 0) { - bitset = new Uint8Array(Math.ceil(numPixels / 8)); - view = new DataView(input, ptr, mask.numBytes); - var cnt = view.getInt16(0, true); - var ip = 2, op = 0, val = 0; - do { - if (cnt > 0) { - while (cnt--) { bitset[op++] = view.getUint8(ip++); } - } else { - val = view.getUint8(ip++); - cnt = -cnt; - while (cnt--) { bitset[op++] = val; } - } - cnt = view.getInt16(ip, true); - ip += 2; - } while (ip < mask.numBytes); - if ((cnt !== -32768) || (op < bitset.length)) { - throw "Unexpected end of mask RLE encoding"; - } - - resultMask = new Uint8Array(numPixels); - var mb = 0, k = 0; - - for (k = 0; k < numPixels; k++) { - if (k & 7) { - mb = bitset[k >> 3]; - mb <<= k & 7; - } - else { - mb = bitset[k >> 3]; - } - if (mb & 128) { - resultMask[k] = 1; - } - } - data.pixels.resultMask = resultMask; - - mask.bitset = bitset; - ptr += mask.numBytes; - } - data.ptr = ptr; - data.mask = mask; - return true; - }, - - readDataOneSweep: function(input, data, OutPixelTypeArray) { - var ptr = data.ptr; - var headerInfo = data.headerInfo; - var numDims = headerInfo.numDims; - var numPixels = headerInfo.width * headerInfo.height; - var imageType = headerInfo.imageType; - var numBytes = headerInfo.numValidPixel * Lerc2Helpers.getDataTypeSize(imageType) * numDims; - //data.pixels.numBytes = numBytes; - var rawData; - var mask = data.pixels.resultMask; - if (OutPixelTypeArray === Uint8Array) { - rawData = new Uint8Array(input, ptr, numBytes); - } - else { - var arrayBuf = new ArrayBuffer(numBytes); - var store8 = new Uint8Array(arrayBuf); - store8.set(new Uint8Array(input, ptr, numBytes)); - rawData = new OutPixelTypeArray(arrayBuf); - } - if (rawData.length === numPixels * numDims) { - data.pixels.resultPixels = rawData; - } - else //mask - { - data.pixels.resultPixels = new OutPixelTypeArray(numPixels * numDims); - var z = 0, k = 0, i = 0, nStart = 0; - if (numDims > 1) { - for (i=0; i < numDims; i++) { - nStart = i * numPixels; - for (k = 0; k < numPixels; k++) { - if (mask[k]) { - data.pixels.resultPixels[nStart + k] = rawData[z++]; - } - } - } - } - else { - for (k = 0; k < numPixels; k++) { - if (mask[k]) { - data.pixels.resultPixels[k] = rawData[z++]; - } - } - } - } - ptr += numBytes; - data.ptr = ptr; //return data; - return true; - }, - - readHuffmanTree: function(input, data) { - var BITS_MAX = this.HUFFMAN_LUT_BITS_MAX; //8 is slow for the large test image - //var size_max = 1 << BITS_MAX; - /* ************************ - * reading code table - *************************/ - var view = new DataView(input, data.ptr, 16); - data.ptr += 16; - var version = view.getInt32(0, true); - if (version < 2) { - throw "unsupported Huffman version"; - } - var size = view.getInt32(4, true); - var i0 = view.getInt32(8, true); - var i1 = view.getInt32(12, true); - if (i0 >= i1) { - return false; - } - var blockDataBuffer = new Uint32Array(i1 - i0); - Lerc2Helpers.decodeBits(input, data, blockDataBuffer); - var codeTable = []; //size - var i, j, k, len; - - for (i = i0; i < i1; i++) { - j = i - (i < size ? 0 : size);//wrap around - codeTable[j] = { first: blockDataBuffer[i - i0], second: null }; - } - - var dataBytes = input.byteLength - data.ptr; - var dataWords = Math.ceil(dataBytes / 4); - var arrayBuf = new ArrayBuffer(dataWords * 4); - var store8 = new Uint8Array(arrayBuf); - store8.set(new Uint8Array(input, data.ptr, dataBytes)); - var stuffedData = new Uint32Array(arrayBuf); //must start from x*4 - var bitPos = 0, word, srcPtr = 0; - word = stuffedData[0]; - for (i = i0; i < i1; i++) { - j = i - (i < size ? 0 : size);//wrap around - len = codeTable[j].first; - if (len > 0) { - codeTable[j].second = (word << bitPos) >>> (32 - len); - - if (32 - bitPos >= len) { - bitPos += len; - if (bitPos === 32) { - bitPos = 0; - srcPtr++; - word = stuffedData[srcPtr]; - } - } - else { - bitPos += len - 32; - srcPtr++; - word = stuffedData[srcPtr]; - codeTable[j].second |= word >>> (32 - bitPos); - } - } - } - - //finished reading code table - - /* ************************ - * building lut - *************************/ - var numBitsLUT = 0, numBitsLUTQick = 0; - var tree = new TreeNode(); - for (i = 0; i < codeTable.length; i++) { - if (codeTable[i] !== undefined) { - numBitsLUT = Math.max(numBitsLUT, codeTable[i].first); - } - } - if (numBitsLUT >= BITS_MAX) { - numBitsLUTQick = BITS_MAX; - } - else { - numBitsLUTQick = numBitsLUT; - } - if (numBitsLUT >= 30) { - console.log("WARning, large NUM LUT BITS IS " + numBitsLUT); - } - var decodeLut = [], entry, code, numEntries, jj, currentBit, node; - for (i = i0; i < i1; i++) { - j = i - (i < size ? 0 : size);//wrap around - len = codeTable[j].first; - if (len > 0) { - entry = [len, j]; - if (len <= numBitsLUTQick) { - code = codeTable[j].second << (numBitsLUTQick - len); - numEntries = 1 << (numBitsLUTQick - len); - for (k = 0; k < numEntries; k++) { - decodeLut[code | k] = entry; - } - } - else { - //build tree - code = codeTable[j].second; - node = tree; - for (jj = len - 1; jj >= 0; jj--) { - currentBit = code >>> jj & 1; //no left shift as length could be 30,31 - if (currentBit) { - if (!node.right) { - node.right = new TreeNode(); - } - node = node.right; - } - else { - if (!node.left) { - node.left = new TreeNode(); - } - node = node.left; - } - if (jj === 0 && !node.val) { - node.val = entry[1]; - } - } - } - } - } - return { - decodeLut: decodeLut, - numBitsLUTQick: numBitsLUTQick, - numBitsLUT: numBitsLUT, - tree: tree, - stuffedData: stuffedData, - srcPtr: srcPtr, - bitPos: bitPos - }; - }, - - readHuffman: function(input, data, OutPixelTypeArray) { - var headerInfo = data.headerInfo; - var numDims = headerInfo.numDims; - var height = data.headerInfo.height; - var width = data.headerInfo.width; - var numPixels = width * height; - //var size_max = 1 << BITS_MAX; - /* ************************ - * reading huffman structure info - *************************/ - var huffmanInfo = this.readHuffmanTree(input, data); - var decodeLut = huffmanInfo.decodeLut; - var tree = huffmanInfo.tree; - //stuffedData includes huffman headers - var stuffedData = huffmanInfo.stuffedData; - var srcPtr = huffmanInfo.srcPtr; - var bitPos = huffmanInfo.bitPos; - var numBitsLUTQick = huffmanInfo.numBitsLUTQick; - var numBitsLUT = huffmanInfo.numBitsLUT; - var offset = data.headerInfo.imageType === 0 ? 128 : 0; - /************************* - * decode - ***************************/ - var node, val, delta, mask = data.pixels.resultMask, valTmp, valTmpQuick, currentBit; - var i, j, k, ii; - var prevVal = 0; - if (bitPos > 0) { - srcPtr++; - bitPos = 0; - } - var word = stuffedData[srcPtr]; - var deltaEncode = data.encodeMode === 1; - var resultPixelsAllDim = new OutPixelTypeArray(numPixels * numDims); - var resultPixels = resultPixelsAllDim; - var iDim; - for (iDim = 0; iDim < headerInfo.numDims; iDim++) { - if (numDims > 1) { - //get the mem block of current dimension - resultPixels = new OutPixelTypeArray(resultPixelsAllDim.buffer, numPixels * iDim, numPixels); - prevVal = 0; - } - if (data.headerInfo.numValidPixel === width * height) { //all valid - for (k = 0, i = 0; i < height; i++) { - for (j = 0; j < width; j++, k++) { - val = 0; - valTmp = (word << bitPos) >>> (32 - numBitsLUTQick); - valTmpQuick = valTmp;// >>> deltaBits; - if (32 - bitPos < numBitsLUTQick) { - valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUTQick)); - valTmpQuick = valTmp;// >>> deltaBits; - } - if (decodeLut[valTmpQuick]) // if there, move the correct number of bits and done - { - val = decodeLut[valTmpQuick][1]; - bitPos += decodeLut[valTmpQuick][0]; - } - else { - valTmp = (word << bitPos) >>> (32 - numBitsLUT); - valTmpQuick = valTmp;// >>> deltaBits; - if (32 - bitPos < numBitsLUT) { - valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUT)); - valTmpQuick = valTmp;// >>> deltaBits; - } - node = tree; - for (ii = 0; ii < numBitsLUT; ii++) { - currentBit = valTmp >>> (numBitsLUT - ii - 1) & 1; - node = currentBit ? node.right : node.left; - if (!(node.left || node.right)) { - val = node.val; - bitPos = bitPos + ii + 1; - break; - } - } - } - - if (bitPos >= 32) { - bitPos -= 32; - srcPtr++; - word = stuffedData[srcPtr]; - } - - delta = val - offset; - if (deltaEncode) { - if (j > 0) { - delta += prevVal; // use overflow - } - else if (i > 0) { - delta += resultPixels[k - width]; - } - else { - delta += prevVal; - } - delta &= 0xFF; //overflow - resultPixels[k] = delta;//overflow - prevVal = delta; - } - else { - resultPixels[k] = delta; - } - } - } - } - else { //not all valid, use mask - for (k = 0, i = 0; i < height; i++) { - for (j = 0; j < width; j++, k++) { - if (mask[k]) { - val = 0; - valTmp = (word << bitPos) >>> (32 - numBitsLUTQick); - valTmpQuick = valTmp;// >>> deltaBits; - if (32 - bitPos < numBitsLUTQick) { - valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUTQick)); - valTmpQuick = valTmp;// >>> deltaBits; - } - if (decodeLut[valTmpQuick]) // if there, move the correct number of bits and done - { - val = decodeLut[valTmpQuick][1]; - bitPos += decodeLut[valTmpQuick][0]; - } - else { - valTmp = (word << bitPos) >>> (32 - numBitsLUT); - valTmpQuick = valTmp;// >>> deltaBits; - if (32 - bitPos < numBitsLUT) { - valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUT)); - valTmpQuick = valTmp;// >>> deltaBits; - } - node = tree; - for (ii = 0; ii < numBitsLUT; ii++) { - currentBit = valTmp >>> (numBitsLUT - ii - 1) & 1; - node = currentBit ? node.right : node.left; - if (!(node.left || node.right)) { - val = node.val; - bitPos = bitPos + ii + 1; - break; - } - } - } - - if (bitPos >= 32) { - bitPos -= 32; - srcPtr++; - word = stuffedData[srcPtr]; - } - - delta = val - offset; - if (deltaEncode) { - if (j > 0 && mask[k - 1]) { - delta += prevVal; // use overflow - } - else if (i > 0 && mask[k - width]) { - delta += resultPixels[k - width]; - } - else { - delta += prevVal; - } - - delta &= 0xFF; //overflow - resultPixels[k] = delta;//overflow - prevVal = delta; - } - else { - resultPixels[k] = delta; - } - } - } - } - } - data.ptr = data.ptr + (srcPtr + 1) * 4 + (bitPos > 0 ? 4 : 0); - } - data.pixels.resultPixels = resultPixelsAllDim; - }, - - decodeBits: function(input, data, blockDataBuffer, offset, iDim) { - { - //bitstuff encoding is 3 - var headerInfo = data.headerInfo; - var fileVersion = headerInfo.fileVersion; - //var block = {}; - var blockPtr = 0; - var view = new DataView(input, data.ptr, 5);//to do - var headerByte = view.getUint8(0); - blockPtr++; - var bits67 = headerByte >> 6; - var n = (bits67 === 0) ? 4 : 3 - bits67; - var doLut = (headerByte & 32) > 0 ? true : false;//5th bit - var numBits = headerByte & 31; - var numElements = 0; - if (n === 1) { - numElements = view.getUint8(blockPtr); blockPtr++; - } else if (n === 2) { - numElements = view.getUint16(blockPtr, true); blockPtr += 2; - } else if (n === 4) { - numElements = view.getUint32(blockPtr, true); blockPtr += 4; - } else { - throw "Invalid valid pixel count type"; - } - //fix: huffman codes are bit stuffed, but not bound by data's max value, so need to use originalUnstuff - //offset = offset || 0; - var scale = 2 * headerInfo.maxZError; - var stuffedData, arrayBuf, store8, dataBytes, dataWords; - var lutArr, lutData, lutBytes, bitsPerPixel; - var zMax = headerInfo.numDims > 1 ? headerInfo.maxValues[iDim] : headerInfo.zMax; - if (doLut) { - data.counter.lut++; - lutBytes = view.getUint8(blockPtr); - blockPtr++; - dataBytes = Math.ceil((lutBytes - 1) * numBits / 8); - dataWords = Math.ceil(dataBytes / 4); - arrayBuf = new ArrayBuffer(dataWords * 4); - store8 = new Uint8Array(arrayBuf); - - data.ptr += blockPtr; - store8.set(new Uint8Array(input, data.ptr, dataBytes)); - - lutData = new Uint32Array(arrayBuf); - data.ptr += dataBytes; - - bitsPerPixel = 0; - while ((lutBytes - 1) >>> bitsPerPixel) { - bitsPerPixel++; - } - dataBytes = Math.ceil(numElements * bitsPerPixel / 8); - dataWords = Math.ceil(dataBytes / 4); - arrayBuf = new ArrayBuffer(dataWords * 4); - store8 = new Uint8Array(arrayBuf); - store8.set(new Uint8Array(input, data.ptr, dataBytes)); - stuffedData = new Uint32Array(arrayBuf); - data.ptr += dataBytes; - if (fileVersion >= 3) { - lutArr = BitStuffer.unstuffLUT2(lutData, numBits, lutBytes - 1, offset, scale, zMax); - } - else { - lutArr = BitStuffer.unstuffLUT(lutData, numBits, lutBytes - 1, offset, scale, zMax); - } - //lutArr.unshift(0); - if (fileVersion >= 3) { - //BitStuffer.unstuff2(block, blockDataBuffer, headerInfo.zMax); - BitStuffer.unstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements, lutArr); - } - else { - BitStuffer.unstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements, lutArr); - } - } - else { - //console.debug("bitstuffer"); - data.counter.bitstuffer++; - bitsPerPixel = numBits; - data.ptr += blockPtr; - if (bitsPerPixel > 0) { - dataBytes = Math.ceil(numElements * bitsPerPixel / 8); - dataWords = Math.ceil(dataBytes / 4); - arrayBuf = new ArrayBuffer(dataWords * 4); - store8 = new Uint8Array(arrayBuf); - store8.set(new Uint8Array(input, data.ptr, dataBytes)); - stuffedData = new Uint32Array(arrayBuf); - data.ptr += dataBytes; - if (fileVersion >= 3) { - if (offset == null) { - BitStuffer.originalUnstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements); - } - else { - BitStuffer.unstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements, false, offset, scale, zMax); - } - } - else { - if (offset == null) { - BitStuffer.originalUnstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements); - } - else { - BitStuffer.unstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements, false, offset, scale, zMax); - } - } - } - } - } - - }, - - readTiles: function(input, data, OutPixelTypeArray) { - var headerInfo = data.headerInfo; - var width = headerInfo.width; - var height = headerInfo.height; - var microBlockSize = headerInfo.microBlockSize; - var imageType = headerInfo.imageType; - var dataTypeSize = Lerc2Helpers.getDataTypeSize(imageType); - var numBlocksX = Math.ceil(width / microBlockSize); - var numBlocksY = Math.ceil(height / microBlockSize); - data.pixels.numBlocksY = numBlocksY; - data.pixels.numBlocksX = numBlocksX; - data.pixels.ptr = 0; - var row = 0, col = 0, blockY = 0, blockX = 0, thisBlockHeight = 0, thisBlockWidth = 0, bytesLeft = 0, headerByte = 0, bits67 = 0, testCode = 0, outPtr = 0, outStride = 0, numBytes = 0, bytesleft = 0, z = 0, blockPtr = 0; - var view, block, arrayBuf, store8, rawData; - var blockEncoding; - var blockDataBuffer = new OutPixelTypeArray(microBlockSize * microBlockSize); - var lastBlockHeight = (height % microBlockSize) || microBlockSize; - var lastBlockWidth = (width % microBlockSize) || microBlockSize; - var offsetType, offset; - var numDims = headerInfo.numDims, iDim; - var mask = data.pixels.resultMask; - var resultPixels = data.pixels.resultPixels; - for (blockY = 0; blockY < numBlocksY; blockY++) { - thisBlockHeight = (blockY !== numBlocksY - 1) ? microBlockSize : lastBlockHeight; - for (blockX = 0; blockX < numBlocksX; blockX++) { - //console.debug("y" + blockY + " x" + blockX); - thisBlockWidth = (blockX !== numBlocksX - 1) ? microBlockSize : lastBlockWidth; - - outPtr = blockY * width * microBlockSize + blockX * microBlockSize; - outStride = width - thisBlockWidth; - - - for (iDim = 0; iDim < numDims; iDim++) { - if (numDims > 1) { - resultPixels = new OutPixelTypeArray(data.pixels.resultPixels.buffer, width * height * iDim * dataTypeSize, width * height); - } - bytesLeft = input.byteLength - data.ptr; - view = new DataView(input, data.ptr, Math.min(10, bytesLeft)); - block = {}; - blockPtr = 0; - headerByte = view.getUint8(0); - blockPtr++; - bits67 = (headerByte >> 6) & 0xFF; - testCode = (headerByte >> 2) & 15; // use bits 2345 for integrity check - if (testCode !== (((blockX * microBlockSize) >> 3) & 15)) { - throw "integrity issue"; - //return false; - } - - blockEncoding = headerByte & 3; - if (blockEncoding > 3) { - data.ptr += blockPtr; - throw "Invalid block encoding (" + blockEncoding + ")"; - } - else if (blockEncoding === 2) { //constant 0 - data.counter.constant++; - data.ptr += blockPtr; - continue; - } - else if (blockEncoding === 0) { //uncompressed - data.counter.uncompressed++; - data.ptr += blockPtr; - numBytes = thisBlockHeight * thisBlockWidth * dataTypeSize; - bytesleft = input.byteLength - data.ptr; - numBytes = numBytes < bytesleft ? numBytes : bytesleft; - //bit alignment - arrayBuf = new ArrayBuffer((numBytes % dataTypeSize) === 0 ? numBytes : (numBytes + dataTypeSize - numBytes % dataTypeSize)); - store8 = new Uint8Array(arrayBuf); - store8.set(new Uint8Array(input, data.ptr, numBytes)); - rawData = new OutPixelTypeArray(arrayBuf); - z = 0; - if (mask) { - for (row = 0; row < thisBlockHeight; row++) { - for (col = 0; col < thisBlockWidth; col++) { - if (mask[outPtr]) { - resultPixels[outPtr] = rawData[z++]; - } - outPtr++; - } - outPtr += outStride; - } - } - else {//all valid - for (row = 0; row < thisBlockHeight; row++) { - for (col = 0; col < thisBlockWidth; col++) { - resultPixels[outPtr++] = rawData[z++]; - } - outPtr += outStride; - } - } - data.ptr += z * dataTypeSize; - } - else { //1 or 3 - offsetType = Lerc2Helpers.getDataTypeUsed(imageType, bits67); - offset = Lerc2Helpers.getOnePixel(block, blockPtr, offsetType, view); - blockPtr += Lerc2Helpers.getDataTypeSize(offsetType); - if (blockEncoding === 3) //constant offset value - { - data.ptr += blockPtr; - data.counter.constantoffset++; - //you can delete the following resultMask case in favor of performance because val is constant and users use nodata mask, otherwise nodatavalue post processing handles it too. - //while the above statement is true, we're not doing it as we want to keep invalid pixel value at 0 rather than arbitrary values - if (mask) { - for (row = 0; row < thisBlockHeight; row++) { - for (col = 0; col < thisBlockWidth; col++) { - if (mask[outPtr]) { - resultPixels[outPtr] = offset; - } - outPtr++; - } - outPtr += outStride; - } - } - else { - for (row = 0; row < thisBlockHeight; row++) { - for (col = 0; col < thisBlockWidth; col++) { - resultPixels[outPtr++] = offset; - } - outPtr += outStride; - } - } - } - else { //bitstuff encoding is 3 - data.ptr += blockPtr; - //heavy lifting - Lerc2Helpers.decodeBits(input, data, blockDataBuffer, offset, iDim); - blockPtr = 0; - if (mask) { - for (row = 0; row < thisBlockHeight; row++) { - for (col = 0; col < thisBlockWidth; col++) { - if (mask[outPtr]) { - resultPixels[outPtr] = blockDataBuffer[blockPtr++]; - } - outPtr++; - } - outPtr += outStride; - } - } - else { - for (row = 0; row < thisBlockHeight; row++) { - for (col = 0; col < thisBlockWidth; col++) { - resultPixels[outPtr++] = blockDataBuffer[blockPtr++]; - } - outPtr += outStride; - } - } - } - } - } - } - } - }, - - /***************** - * private methods (helper methods) - *****************/ - - formatFileInfo: function(data) { - return { - "fileIdentifierString": data.headerInfo.fileIdentifierString, - "fileVersion": data.headerInfo.fileVersion, - "imageType": data.headerInfo.imageType, - "height": data.headerInfo.height, - "width": data.headerInfo.width, - "numValidPixel": data.headerInfo.numValidPixel, - "microBlockSize": data.headerInfo.microBlockSize, - "blobSize": data.headerInfo.blobSize, - "maxZError": data.headerInfo.maxZError, - "pixelType": Lerc2Helpers.getPixelType(data.headerInfo.imageType), - "eofOffset": data.eofOffset, - "mask": data.mask ? { - "numBytes": data.mask.numBytes - } : null, - "pixels": { - "numBlocksX": data.pixels.numBlocksX, - "numBlocksY": data.pixels.numBlocksY, - //"numBytes": data.pixels.numBytes, - "maxValue": data.headerInfo.zMax, - "minValue": data.headerInfo.zMin, - "noDataValue": data.noDataValue - } - }; - }, - - constructConstantSurface: function(data) { - var val = data.headerInfo.zMax; - var numDims = data.headerInfo.numDims; - var numPixels = data.headerInfo.height * data.headerInfo.width; - var numPixelAllDims = numPixels * numDims; - var i=0, k = 0, nStart=0; - var mask = data.pixels.resultMask; - if (mask) { - if (numDims > 1) { - for (i=0; i < numDims; i++) { - nStart = i * numPixels; - for (k = 0; k < numPixels; k++) { - if (mask[k]) { - data.pixels.resultPixels[nStart + k] = val; - } - } - } - } - else { - for (k = 0; k < numPixels; k++) { - if (mask[k]) { - data.pixels.resultPixels[k] = val; - } - } - } - } - else { - if (data.pixels.resultPixels.fill) { - data.pixels.resultPixels.fill(val); - } - else { - for (k = 0; k < numPixelAllDims; k++) { - data.pixels.resultPixels[k] = val; - } - } - } - return; - }, - - getDataTypeArray: function(t) { - var tp; - switch (t) { - case 0: //char - tp = Int8Array; - break; - case 1: //byte - tp = Uint8Array; - break; - case 2: //short - tp = Int16Array; - break; - case 3: //ushort - tp = Uint16Array; - break; - case 4: - tp = Int32Array; - break; - case 5: - tp = Uint32Array; - break; - case 6: - tp = Float32Array; - break; - case 7: - tp = Float64Array; - break; - default: - tp = Float32Array; - } - return tp; - }, - - getPixelType: function(t) { - var tp; - switch (t) { - case 0: //char - tp = "S8"; - break; - case 1: //byte - tp = "U8"; - break; - case 2: //short - tp = "S16"; - break; - case 3: //ushort - tp = "U16"; - break; - case 4: - tp = "S32"; - break; - case 5: - tp = "U32"; - break; - case 6: - tp = "F32"; - break; - case 7: - tp = "F64"; //not supported - break; - default: - tp = "F32"; - } - return tp; - }, - - isValidPixelValue: function(t, val) { - if (val == null) { - return false; - } - var isValid; - switch (t) { - case 0: //char - isValid = val >= -128 && val <= 127; - break; - case 1: //byte (unsigned char) - isValid = val >= 0 && val <= 255; - break; - case 2: //short - isValid = val >= -32768 && val <= 32767; - break; - case 3: //ushort - isValid = val >= 0 && val <= 65536; - break; - case 4: //int 32 - isValid = val >= -2147483648 && val <= 2147483647; - break; - case 5: //uinit 32 - isValid = val >= 0 && val <= 4294967296; - break; - case 6: - isValid = val >= -3.4027999387901484e+38 && val <= 3.4027999387901484e+38; - break; - case 7: - isValid = val >= 5e-324 && val <= 1.7976931348623157e+308; - break; - default: - isValid = false; - } - return isValid; - }, - - getDataTypeSize: function(t) { - var s = 0; - switch (t) { - case 0: //ubyte - case 1: //byte - s = 1; - break; - case 2: //short - case 3: //ushort - s = 2; - break; - case 4: - case 5: - case 6: - s = 4; - break; - case 7: - s = 8; - break; - default: - s = t; - } - return s; - }, - - getDataTypeUsed: function(dt, tc) { - var t = dt; - switch (dt) { - case 2: //short - case 4: //long - t = dt - tc; - break; - case 3: //ushort - case 5: //ulong - t = dt - 2 * tc; - break; - case 6: //float - if (0 === tc) { - t = dt; - } - else if (1 === tc) { - t = 2; - } - else { - t = 1;//byte - } - break; - case 7: //double - if (0 === tc) { - t = dt; - } - else { - t = dt - 2 * tc + 1; - } - break; - default: - t = dt; - break; - } - return t; - }, - - getOnePixel: function(block, blockPtr, offsetType, view) { - var temp = 0; - switch (offsetType) { - case 0: //char - temp = view.getInt8(blockPtr); - break; - case 1: //byte - temp = view.getUint8(blockPtr); - break; - case 2: - temp = view.getInt16(blockPtr, true); - break; - case 3: - temp = view.getUint16(blockPtr, true); - break; - case 4: - temp = view.getInt32(blockPtr, true); - break; - case 5: - temp = view.getUInt32(blockPtr, true); - break; - case 6: - temp = view.getFloat32(blockPtr, true); - break; - case 7: - //temp = view.getFloat64(blockPtr, true); - //blockPtr += 8; - //lerc2 encoding doesnt handle float 64, force to float32??? - temp = view.getFloat64(blockPtr, true); - break; - default: - throw ("the decoder does not understand this pixel type"); - } - return temp; - } - }; - - /*************************************************** - *private class for a tree node. Huffman code is in Lerc2Helpers - ****************************************************/ - var TreeNode = function(val, left, right) { - this.val = val; - this.left = left; - this.right = right; - }; - - var Lerc2Decode = { - /* - * ********removed options compared to LERC1. We can bring some of them back if needed. - * removed pixel type. LERC2 is typed and doesn't require user to give pixel type - * changed encodedMaskData to maskData. LERC2 's js version make it faster to use maskData directly. - * removed returnMask. mask is used by LERC2 internally and is cost free. In case of user input mask, it's returned as well and has neglible cost. - * removed nodatavalue. Because LERC2 pixels are typed, nodatavalue will sacrify a useful value for many types (8bit, 16bit) etc, - * user has to be knowledgable enough about raster and their data to avoid usability issues. so nodata value is simply removed now. - * We can add it back later if their's a clear requirement. - * removed encodedMask. This option was not implemented in LercDecode. It can be done after decoding (less efficient) - * removed computeUsedBitDepths. - * - * - * response changes compared to LERC1 - * 1. encodedMaskData is not available - * 2. noDataValue is optional (returns only if user's noDataValue is with in the valid data type range) - * 3. maskData is always available - */ - /***************** - * public properties - ******************/ - //HUFFMAN_LUT_BITS_MAX: 12, //use 2^12 lut, not configurable - - /***************** - * public methods - *****************/ - - /** - * Decode a LERC2 byte stream and return an object containing the pixel data and optional metadata. - * - * @param {ArrayBuffer} input The LERC input byte stream - * @param {object} [options] options Decoding options - * @param {number} [options.inputOffset] The number of bytes to skip in the input byte stream. A valid LERC file is expected at that position - * @param {boolean} [options.returnFileInfo] If true, the return value will have a fileInfo property that contains metadata obtained from the LERC headers and the decoding process - */ - decode: function(/*byte array*/ input, /*object*/ options) { - //currently there's a bug in the sparse array, so please do not set to false - options = options || {}; - var noDataValue = options.noDataValue; - - //initialize - var i = 0, data = {}; - data.ptr = options.inputOffset || 0; - data.pixels = {}; - - // File header - if (!Lerc2Helpers.readHeaderInfo(input, data)) ; - var headerInfo = data.headerInfo; - var fileVersion = headerInfo.fileVersion; - var OutPixelTypeArray = Lerc2Helpers.getDataTypeArray(headerInfo.imageType); - - // Mask Header - Lerc2Helpers.readMask(input, data); - if (headerInfo.numValidPixel !== headerInfo.width * headerInfo.height && !data.pixels.resultMask) { - data.pixels.resultMask = options.maskData; - } - - var numPixels = headerInfo.width * headerInfo.height; - data.pixels.resultPixels = new OutPixelTypeArray(numPixels * headerInfo.numDims); - - data.counter = { - onesweep: 0, - uncompressed: 0, - lut: 0, - bitstuffer: 0, - constant: 0, - constantoffset: 0 - }; - if (headerInfo.numValidPixel !== 0) { - //not tested - if (headerInfo.zMax === headerInfo.zMin) //constant surface - { - Lerc2Helpers.constructConstantSurface(data); - } - else if (fileVersion >= 4 && Lerc2Helpers.checkMinMaxRanges(input, data)) { - Lerc2Helpers.constructConstantSurface(data); - } - else { - var view = new DataView(input, data.ptr, 2); - var bReadDataOneSweep = view.getUint8(0); - data.ptr++; - if (bReadDataOneSweep) { - //console.debug("OneSweep"); - Lerc2Helpers.readDataOneSweep(input, data, OutPixelTypeArray); - } - else { - //lerc2.1: //bitstuffing + lut - //lerc2.2: //bitstuffing + lut + huffman - //lerc2.3: new bitstuffer - if (fileVersion > 1 && headerInfo.imageType <= 1 && Math.abs(headerInfo.maxZError - 0.5) < 0.00001) { - //this is 2.x plus 8 bit (unsigned and signed) data, possiblity of Huffman - var flagHuffman = view.getUint8(1); - data.ptr++; - data.encodeMode = flagHuffman; - if (flagHuffman > 2 || (fileVersion < 4 && flagHuffman > 1)) { - throw "Invalid Huffman flag " + flagHuffman; - } - if (flagHuffman) {//1 - delta Huffman, 2 - Huffman - //console.log("Huffman"); - Lerc2Helpers.readHuffman(input, data, OutPixelTypeArray); - } - else { - //console.log("Tiles"); - Lerc2Helpers.readTiles(input, data, OutPixelTypeArray); - } - } - else { //lerc2.x non-8 bit data - //console.log("Tiles"); - Lerc2Helpers.readTiles(input, data, OutPixelTypeArray); - } - } - } - } - - data.eofOffset = data.ptr; - var diff; - if (options.inputOffset) { - diff = data.headerInfo.blobSize + options.inputOffset - data.ptr; - if (Math.abs(diff) >= 1) { - //console.debug("incorrect eof: dataptr " + data.ptr + " offset " + options.inputOffset + " blobsize " + data.headerInfo.blobSize + " diff: " + diff); - data.eofOffset = options.inputOffset + data.headerInfo.blobSize; - } - } - else { - diff = data.headerInfo.blobSize - data.ptr; - if (Math.abs(diff) >= 1) { - //console.debug("incorrect first band eof: dataptr " + data.ptr + " blobsize " + data.headerInfo.blobSize + " diff: " + diff); - data.eofOffset = data.headerInfo.blobSize; - } - } - - var result = { - width: headerInfo.width, - height: headerInfo.height, - pixelData: data.pixels.resultPixels, - minValue: headerInfo.zMin, - maxValue: headerInfo.zMax, - validPixelCount: headerInfo.numValidPixel, - dimCount: headerInfo.numDims, - dimStats: { - minValues: headerInfo.minValues, - maxValues: headerInfo.maxValues - }, - maskData: data.pixels.resultMask - //noDataValue: noDataValue - }; - - //we should remove this if there's no existing client - //optional noDataValue processing, it's user's responsiblity - if (data.pixels.resultMask && Lerc2Helpers.isValidPixelValue(headerInfo.imageType, noDataValue)) { - var mask = data.pixels.resultMask; - for (i = 0; i < numPixels; i++) { - if (!mask[i]) { - result.pixelData[i] = noDataValue; - } - } - result.noDataValue = noDataValue; - } - data.noDataValue = noDataValue; - if (options.returnFileInfo) { - result.fileInfo = Lerc2Helpers.formatFileInfo(data); - } - return result; - }, - - getBandCount: function(/*byte array*/ input) { - var count = 0; - var i = 0; - var temp = {}; - temp.ptr = 0; - temp.pixels = {}; - while (i < input.byteLength - 58) { - Lerc2Helpers.readHeaderInfo(input, temp); - i += temp.headerInfo.blobSize; - count++; - temp.ptr = i; - } - return count; - } - }; - - return Lerc2Decode; - })(); - - var isPlatformLittleEndian = (function() { - var a = new ArrayBuffer(4); - var b = new Uint8Array(a); - var c = new Uint32Array(a); - c[0] = 1; - return b[0] === 1; - })(); - - var Lerc = { - /************wrapper**********************************************/ - /** - * A wrapper for decoding both LERC1 and LERC2 byte streams capable of handling multiband pixel blocks for various pixel types. - * - * @alias module:Lerc - * @param {ArrayBuffer} input The LERC input byte stream - * @param {object} [options] The decoding options below are optional. - * @param {number} [options.inputOffset] The number of bytes to skip in the input byte stream. A valid Lerc file is expected at that position. - * @param {string} [options.pixelType] (LERC1 only) Default value is F32. Valid pixel types for input are U8/S8/S16/U16/S32/U32/F32. - * @param {number} [options.noDataValue] (LERC1 only). It is recommended to use the returned mask instead of setting this value. - * @returns {{width, height, pixels, pixelType, mask, statistics}} - * @property {number} width Width of decoded image. - * @property {number} height Height of decoded image. - * @property {array} pixels [band1, band2, …] Each band is a typed array of width*height. - * @property {string} pixelType The type of pixels represented in the output. - * @property {mask} mask Typed array with a size of width*height, or null if all pixels are valid. - * @property {array} statistics [statistics_band1, statistics_band2, …] Each element is a statistics object representing min and max values - **/ - decode: function(encodedData, options) { - if (!isPlatformLittleEndian) { - throw "Big endian system is not supported."; - } - options = options || {}; - var inputOffset = options.inputOffset || 0; - var fileIdView = new Uint8Array(encodedData, inputOffset, 10); - var fileIdentifierString = String.fromCharCode.apply(null, fileIdView); - var lerc, majorVersion; - if (fileIdentifierString.trim() === "CntZImage") { - lerc = LercDecode; - majorVersion = 1; - } - else if (fileIdentifierString.substring(0, 5) === "Lerc2") { - lerc = Lerc2Decode; - majorVersion = 2; - } - else { - throw "Unexpected file identifier string: " + fileIdentifierString; - } - - var iPlane = 0, eof = encodedData.byteLength - 10, encodedMaskData, bandMasks = [], bandMask, maskData; - var decodedPixelBlock = { - width: 0, - height: 0, - pixels: [], - pixelType: options.pixelType, - mask: null, - statistics: [] - }; - - while (inputOffset < eof) { - var result = lerc.decode(encodedData, { - inputOffset: inputOffset,//for both lerc1 and lerc2 - encodedMaskData: encodedMaskData,//lerc1 only - maskData: maskData,//lerc2 only - returnMask: iPlane === 0 ? true : false,//lerc1 only - returnEncodedMask: iPlane === 0 ? true : false,//lerc1 only - returnFileInfo: true,//for both lerc1 and lerc2 - pixelType: options.pixelType || null,//lerc1 only - noDataValue: options.noDataValue || null//lerc1 only - }); - - inputOffset = result.fileInfo.eofOffset; - if (iPlane === 0) { - encodedMaskData = result.encodedMaskData;//lerc1 - maskData = result.maskData;//lerc2 - decodedPixelBlock.width = result.width; - decodedPixelBlock.height = result.height; - decodedPixelBlock.dimCount = result.dimCount || 1; - //decodedPixelBlock.dimStats = decodedPixelBlock.dimStats; - decodedPixelBlock.pixelType = result.pixelType || result.fileInfo.pixelType; - decodedPixelBlock.mask = result.maskData; - } - if (majorVersion >1 && result.fileInfo.mask && result.fileInfo.mask.numBytes > 0) { - bandMasks.push(result.maskData); - } - - iPlane++; - decodedPixelBlock.pixels.push(result.pixelData); - decodedPixelBlock.statistics.push({ - minValue: result.minValue, - maxValue: result.maxValue, - noDataValue: result.noDataValue, - dimStats: result.dimStats - }); - } - var i, j, numPixels; - if (majorVersion > 1 && bandMasks.length > 1) { - numPixels = decodedPixelBlock.width * decodedPixelBlock.height; - decodedPixelBlock.bandMasks = bandMasks; - maskData = new Uint8Array(numPixels); - maskData.set(bandMasks[0]); - for (i = 1; i < bandMasks.length; i++) { - bandMask = bandMasks[i]; - for (j = 0; j < numPixels; j++) { - maskData[j] = maskData[j] & bandMask[j]; - } - } - decodedPixelBlock.maskData = maskData; - } - - return decodedPixelBlock; - } - }; - - if (module.exports) {/* jshint ignore:line */ - //commonJS module 1.0/1.1/1.1.1 systems, such as nodeJS - //http://wiki.commonjs.org/wiki/Modules - module.exports = Lerc;/* jshint ignore:line */ - } - else { - //assign to this, most likely window - this.Lerc = Lerc; - } - - })(); - } (LercDecode)); - - var Lerc = LercDecode.exports; - - function createVerticesFromHeightmap(parameters, transferableObjects) { - // LERC encoded buffers must be decoded, then we can process them like normal - if (parameters.encoding === HeightmapEncoding$1.LERC) { - let result; - try { - result = Lerc.decode(parameters.heightmap); - } catch (error) { - throw new RuntimeError.RuntimeError(error); - } - - const lercStatistics = result.statistics[0]; - if (lercStatistics.minValue === Number.MAX_VALUE) { - throw new RuntimeError.RuntimeError("Invalid tile data"); - } - - parameters.heightmap = result.pixels[0]; - parameters.width = result.width; - parameters.height = result.height; - } - - parameters.ellipsoid = Matrix3.Ellipsoid.clone(parameters.ellipsoid); - parameters.rectangle = Matrix2.Rectangle.clone(parameters.rectangle); - - const statistics = HeightmapTessellator$1.computeVertices(parameters); - const vertices = statistics.vertices; - transferableObjects.push(vertices.buffer); - - return { - vertices: vertices.buffer, - numberOfAttributes: statistics.encoding.stride, - minimumHeight: statistics.minimumHeight, - maximumHeight: statistics.maximumHeight, - gridWidth: parameters.width, - gridHeight: parameters.height, - boundingSphere3D: statistics.boundingSphere3D, - orientedBoundingBox: statistics.orientedBoundingBox, - occludeePointInScaledSpace: statistics.occludeePointInScaledSpace, - encoding: statistics.encoding, - westIndicesSouthToNorth: statistics.westIndicesSouthToNorth, - southIndicesEastToWest: statistics.southIndicesEastToWest, - eastIndicesNorthToSouth: statistics.eastIndicesNorthToSouth, - northIndicesWestToEast: statistics.northIndicesWestToEast, - }; - } - var createVerticesFromHeightmap$1 = createTaskProcessorWorker(createVerticesFromHeightmap); - - return createVerticesFromHeightmap$1; - -})); -//# sourceMappingURL=createVerticesFromHeightmap.js.map diff --git a/debug/cesium/Workers/createVerticesFromHeightmap.js.map b/debug/cesium/Workers/createVerticesFromHeightmap.js.map deleted file mode 100644 index 271789a..0000000 --- a/debug/cesium/Workers/createVerticesFromHeightmap.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createVerticesFromHeightmap.js","sources":["../../../Source/Core/HeightmapEncoding.js","../../../Source/Core/HeightmapTessellator.js","../../../node_modules/lerc/LercDecode.js","../../../Source/WorkersES6/createVerticesFromHeightmap.js"],"sourcesContent":["/**\r\n * The encoding that is used for a heightmap\r\n *\r\n * @enum {Number}\r\n */\r\nconst HeightmapEncoding = {\r\n /**\r\n * No encoding\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n NONE: 0,\r\n\r\n /**\r\n * LERC encoding\r\n *\r\n * @type {Number}\r\n * @constant\r\n *\r\n * @see {@link https://github.com/Esri/lerc|The LERC specification}\r\n */\r\n LERC: 1,\r\n};\r\nexport default Object.freeze(HeightmapEncoding);\r\n","import AxisAlignedBoundingBox from \"./AxisAlignedBoundingBox.js\";\r\nimport BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport EllipsoidalOccluder from \"./EllipsoidalOccluder.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport Matrix4 from \"./Matrix4.js\";\r\nimport OrientedBoundingBox from \"./OrientedBoundingBox.js\";\r\nimport Rectangle from \"./Rectangle.js\";\r\nimport TerrainEncoding from \"./TerrainEncoding.js\";\r\nimport Transforms from \"./Transforms.js\";\r\nimport WebMercatorProjection from \"./WebMercatorProjection.js\";\r\n\r\n/**\r\n * Contains functions to create a mesh from a heightmap image.\r\n *\r\n * @namespace HeightmapTessellator\r\n *\r\n * @private\r\n */\r\nconst HeightmapTessellator = {};\r\n\r\n/**\r\n * The default structure of a heightmap, as given to {@link HeightmapTessellator.computeVertices}.\r\n *\r\n * @constant\r\n */\r\nHeightmapTessellator.DEFAULT_STRUCTURE = Object.freeze({\r\n heightScale: 1.0,\r\n heightOffset: 0.0,\r\n elementsPerHeight: 1,\r\n stride: 1,\r\n elementMultiplier: 256.0,\r\n isBigEndian: false,\r\n});\r\n\r\nconst cartesian3Scratch = new Cartesian3();\r\nconst matrix4Scratch = new Matrix4();\r\nconst minimumScratch = new Cartesian3();\r\nconst maximumScratch = new Cartesian3();\r\n\r\n/**\r\n * Fills an array of vertices from a heightmap image.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Int8Array|Uint8Array|Int16Array|Uint16Array|Int32Array|Uint32Array|Float32Array|Float64Array} options.heightmap The heightmap to tessellate.\r\n * @param {Number} options.width The width of the heightmap, in height samples.\r\n * @param {Number} options.height The height of the heightmap, in height samples.\r\n * @param {Number} options.skirtHeight The height of skirts to drape at the edges of the heightmap.\r\n * @param {Rectangle} options.nativeRectangle A rectangle in the native coordinates of the heightmap's projection. For\r\n * a heightmap with a geographic projection, this is degrees. For the web mercator\r\n * projection, this is meters.\r\n * @param {Number} [options.exaggeration=1.0] The scale used to exaggerate the terrain.\r\n * @param {Number} [options.exaggerationRelativeHeight=0.0] The height from which terrain is exaggerated.\r\n * @param {Rectangle} [options.rectangle] The rectangle covered by the heightmap, in geodetic coordinates with north, south, east and\r\n * west properties in radians. Either rectangle or nativeRectangle must be provided. If both\r\n * are provided, they're assumed to be consistent.\r\n * @param {Boolean} [options.isGeographic=true] True if the heightmap uses a {@link GeographicProjection}, or false if it uses\r\n * a {@link WebMercatorProjection}.\r\n * @param {Cartesian3} [options.relativeToCenter=Cartesian3.ZERO] The positions will be computed as Cartesian3.subtract(worldPosition, relativeToCenter).\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid to which the heightmap applies.\r\n * @param {Object} [options.structure] An object describing the structure of the height data.\r\n * @param {Number} [options.structure.heightScale=1.0] The factor by which to multiply height samples in order to obtain\r\n * the height above the heightOffset, in meters. The heightOffset is added to the resulting\r\n * height after multiplying by the scale.\r\n * @param {Number} [options.structure.heightOffset=0.0] The offset to add to the scaled height to obtain the final\r\n * height in meters. The offset is added after the height sample is multiplied by the\r\n * heightScale.\r\n * @param {Number} [options.structure.elementsPerHeight=1] The number of elements in the buffer that make up a single height\r\n * sample. This is usually 1, indicating that each element is a separate height sample. If\r\n * it is greater than 1, that number of elements together form the height sample, which is\r\n * computed according to the structure.elementMultiplier and structure.isBigEndian properties.\r\n * @param {Number} [options.structure.stride=1] The number of elements to skip to get from the first element of\r\n * one height to the first element of the next height.\r\n * @param {Number} [options.structure.elementMultiplier=256.0] The multiplier used to compute the height value when the\r\n * stride property is greater than 1. For example, if the stride is 4 and the strideMultiplier\r\n * is 256, the height is computed as follows:\r\n * `height = buffer[index] + buffer[index + 1] * 256 + buffer[index + 2] * 256 * 256 + buffer[index + 3] * 256 * 256 * 256`\r\n * This is assuming that the isBigEndian property is false. If it is true, the order of the\r\n * elements is reversed.\r\n * @param {Number} [options.structure.lowestEncodedHeight] The lowest value that can be stored in the height buffer. Any heights that are lower\r\n * than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height\r\n * buffer is a `Uint16Array`, this value should be 0 because a `Uint16Array` cannot store negative numbers. If this parameter is\r\n * not specified, no minimum value is enforced.\r\n * @param {Number} [options.structure.highestEncodedHeight] The highest value that can be stored in the height buffer. Any heights that are higher\r\n * than this value after encoding with the `heightScale` and `heightOffset` are clamped to this value. For example, if the height\r\n * buffer is a `Uint16Array`, this value should be `256 * 256 - 1` or 65535 because a `Uint16Array` cannot store numbers larger\r\n * than 65535. If this parameter is not specified, no maximum value is enforced.\r\n * @param {Boolean} [options.structure.isBigEndian=false] Indicates endianness of the elements in the buffer when the\r\n * stride property is greater than 1. If this property is false, the first element is the\r\n * low-order element. If it is true, the first element is the high-order element.\r\n *\r\n * @example\r\n * const width = 5;\r\n * const height = 5;\r\n * const statistics = Cesium.HeightmapTessellator.computeVertices({\r\n * heightmap : [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0],\r\n * width : width,\r\n * height : height,\r\n * skirtHeight : 0.0,\r\n * nativeRectangle : {\r\n * west : 10.0,\r\n * east : 20.0,\r\n * south : 30.0,\r\n * north : 40.0\r\n * }\r\n * });\r\n *\r\n * const encoding = statistics.encoding;\r\n * const position = encoding.decodePosition(statistics.vertices, index);\r\n */\r\nHeightmapTessellator.computeVertices = function (options) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(options) || !defined(options.heightmap)) {\r\n throw new DeveloperError(\"options.heightmap is required.\");\r\n }\r\n if (!defined(options.width) || !defined(options.height)) {\r\n throw new DeveloperError(\"options.width and options.height are required.\");\r\n }\r\n if (!defined(options.nativeRectangle)) {\r\n throw new DeveloperError(\"options.nativeRectangle is required.\");\r\n }\r\n if (!defined(options.skirtHeight)) {\r\n throw new DeveloperError(\"options.skirtHeight is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n // This function tends to be a performance hotspot for terrain rendering,\r\n // so it employs a lot of inlining and unrolling as an optimization.\r\n // In particular, the functionality of Ellipsoid.cartographicToCartesian\r\n // is inlined.\r\n\r\n const cos = Math.cos;\r\n const sin = Math.sin;\r\n const sqrt = Math.sqrt;\r\n const atan = Math.atan;\r\n const exp = Math.exp;\r\n const piOverTwo = CesiumMath.PI_OVER_TWO;\r\n const toRadians = CesiumMath.toRadians;\r\n\r\n const heightmap = options.heightmap;\r\n const width = options.width;\r\n const height = options.height;\r\n const skirtHeight = options.skirtHeight;\r\n const hasSkirts = skirtHeight > 0.0;\r\n\r\n const isGeographic = defaultValue(options.isGeographic, true);\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n\r\n const oneOverGlobeSemimajorAxis = 1.0 / ellipsoid.maximumRadius;\r\n\r\n const nativeRectangle = Rectangle.clone(options.nativeRectangle);\r\n const rectangle = Rectangle.clone(options.rectangle);\r\n\r\n let geographicWest;\r\n let geographicSouth;\r\n let geographicEast;\r\n let geographicNorth;\r\n\r\n if (!defined(rectangle)) {\r\n if (isGeographic) {\r\n geographicWest = toRadians(nativeRectangle.west);\r\n geographicSouth = toRadians(nativeRectangle.south);\r\n geographicEast = toRadians(nativeRectangle.east);\r\n geographicNorth = toRadians(nativeRectangle.north);\r\n } else {\r\n geographicWest = nativeRectangle.west * oneOverGlobeSemimajorAxis;\r\n geographicSouth =\r\n piOverTwo -\r\n 2.0 * atan(exp(-nativeRectangle.south * oneOverGlobeSemimajorAxis));\r\n geographicEast = nativeRectangle.east * oneOverGlobeSemimajorAxis;\r\n geographicNorth =\r\n piOverTwo -\r\n 2.0 * atan(exp(-nativeRectangle.north * oneOverGlobeSemimajorAxis));\r\n }\r\n } else {\r\n geographicWest = rectangle.west;\r\n geographicSouth = rectangle.south;\r\n geographicEast = rectangle.east;\r\n geographicNorth = rectangle.north;\r\n }\r\n\r\n let relativeToCenter = options.relativeToCenter;\r\n const hasRelativeToCenter = defined(relativeToCenter);\r\n relativeToCenter = hasRelativeToCenter ? relativeToCenter : Cartesian3.ZERO;\r\n const includeWebMercatorT = defaultValue(options.includeWebMercatorT, false);\r\n\r\n const exaggeration = defaultValue(options.exaggeration, 1.0);\r\n const exaggerationRelativeHeight = defaultValue(\r\n options.exaggerationRelativeHeight,\r\n 0.0\r\n );\r\n const hasExaggeration = exaggeration !== 1.0;\r\n const includeGeodeticSurfaceNormals = hasExaggeration;\r\n\r\n const structure = defaultValue(\r\n options.structure,\r\n HeightmapTessellator.DEFAULT_STRUCTURE\r\n );\r\n const heightScale = defaultValue(\r\n structure.heightScale,\r\n HeightmapTessellator.DEFAULT_STRUCTURE.heightScale\r\n );\r\n const heightOffset = defaultValue(\r\n structure.heightOffset,\r\n HeightmapTessellator.DEFAULT_STRUCTURE.heightOffset\r\n );\r\n const elementsPerHeight = defaultValue(\r\n structure.elementsPerHeight,\r\n HeightmapTessellator.DEFAULT_STRUCTURE.elementsPerHeight\r\n );\r\n const stride = defaultValue(\r\n structure.stride,\r\n HeightmapTessellator.DEFAULT_STRUCTURE.stride\r\n );\r\n const elementMultiplier = defaultValue(\r\n structure.elementMultiplier,\r\n HeightmapTessellator.DEFAULT_STRUCTURE.elementMultiplier\r\n );\r\n const isBigEndian = defaultValue(\r\n structure.isBigEndian,\r\n HeightmapTessellator.DEFAULT_STRUCTURE.isBigEndian\r\n );\r\n\r\n let rectangleWidth = Rectangle.computeWidth(nativeRectangle);\r\n let rectangleHeight = Rectangle.computeHeight(nativeRectangle);\r\n\r\n const granularityX = rectangleWidth / (width - 1);\r\n const granularityY = rectangleHeight / (height - 1);\r\n\r\n if (!isGeographic) {\r\n rectangleWidth *= oneOverGlobeSemimajorAxis;\r\n rectangleHeight *= oneOverGlobeSemimajorAxis;\r\n }\r\n\r\n const radiiSquared = ellipsoid.radiiSquared;\r\n const radiiSquaredX = radiiSquared.x;\r\n const radiiSquaredY = radiiSquared.y;\r\n const radiiSquaredZ = radiiSquared.z;\r\n\r\n let minimumHeight = 65536.0;\r\n let maximumHeight = -65536.0;\r\n\r\n const fromENU = Transforms.eastNorthUpToFixedFrame(\r\n relativeToCenter,\r\n ellipsoid\r\n );\r\n const toENU = Matrix4.inverseTransformation(fromENU, matrix4Scratch);\r\n\r\n let southMercatorY;\r\n let oneOverMercatorHeight;\r\n if (includeWebMercatorT) {\r\n southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\r\n geographicSouth\r\n );\r\n oneOverMercatorHeight =\r\n 1.0 /\r\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(geographicNorth) -\r\n southMercatorY);\r\n }\r\n\r\n const minimum = minimumScratch;\r\n minimum.x = Number.POSITIVE_INFINITY;\r\n minimum.y = Number.POSITIVE_INFINITY;\r\n minimum.z = Number.POSITIVE_INFINITY;\r\n\r\n const maximum = maximumScratch;\r\n maximum.x = Number.NEGATIVE_INFINITY;\r\n maximum.y = Number.NEGATIVE_INFINITY;\r\n maximum.z = Number.NEGATIVE_INFINITY;\r\n\r\n let hMin = Number.POSITIVE_INFINITY;\r\n\r\n const gridVertexCount = width * height;\r\n const edgeVertexCount = skirtHeight > 0.0 ? width * 2 + height * 2 : 0;\r\n const vertexCount = gridVertexCount + edgeVertexCount;\r\n\r\n const positions = new Array(vertexCount);\r\n const heights = new Array(vertexCount);\r\n const uvs = new Array(vertexCount);\r\n const webMercatorTs = includeWebMercatorT ? new Array(vertexCount) : [];\r\n const geodeticSurfaceNormals = includeGeodeticSurfaceNormals\r\n ? new Array(vertexCount)\r\n : [];\r\n\r\n let startRow = 0;\r\n let endRow = height;\r\n let startCol = 0;\r\n let endCol = width;\r\n\r\n if (hasSkirts) {\r\n --startRow;\r\n ++endRow;\r\n --startCol;\r\n ++endCol;\r\n }\r\n\r\n const skirtOffsetPercentage = 0.00001;\r\n\r\n for (let rowIndex = startRow; rowIndex < endRow; ++rowIndex) {\r\n let row = rowIndex;\r\n if (row < 0) {\r\n row = 0;\r\n }\r\n if (row >= height) {\r\n row = height - 1;\r\n }\r\n\r\n let latitude = nativeRectangle.north - granularityY * row;\r\n\r\n if (!isGeographic) {\r\n latitude =\r\n piOverTwo - 2.0 * atan(exp(-latitude * oneOverGlobeSemimajorAxis));\r\n } else {\r\n latitude = toRadians(latitude);\r\n }\r\n\r\n let v = (latitude - geographicSouth) / (geographicNorth - geographicSouth);\r\n v = CesiumMath.clamp(v, 0.0, 1.0);\r\n\r\n const isNorthEdge = rowIndex === startRow;\r\n const isSouthEdge = rowIndex === endRow - 1;\r\n if (skirtHeight > 0.0) {\r\n if (isNorthEdge) {\r\n latitude += skirtOffsetPercentage * rectangleHeight;\r\n } else if (isSouthEdge) {\r\n latitude -= skirtOffsetPercentage * rectangleHeight;\r\n }\r\n }\r\n\r\n const cosLatitude = cos(latitude);\r\n const nZ = sin(latitude);\r\n const kZ = radiiSquaredZ * nZ;\r\n\r\n let webMercatorT;\r\n if (includeWebMercatorT) {\r\n webMercatorT =\r\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(latitude) -\r\n southMercatorY) *\r\n oneOverMercatorHeight;\r\n }\r\n\r\n for (let colIndex = startCol; colIndex < endCol; ++colIndex) {\r\n let col = colIndex;\r\n if (col < 0) {\r\n col = 0;\r\n }\r\n if (col >= width) {\r\n col = width - 1;\r\n }\r\n\r\n const terrainOffset = row * (width * stride) + col * stride;\r\n\r\n let heightSample;\r\n if (elementsPerHeight === 1) {\r\n heightSample = heightmap[terrainOffset];\r\n } else {\r\n heightSample = 0;\r\n\r\n let elementOffset;\r\n if (isBigEndian) {\r\n for (\r\n elementOffset = 0;\r\n elementOffset < elementsPerHeight;\r\n ++elementOffset\r\n ) {\r\n heightSample =\r\n heightSample * elementMultiplier +\r\n heightmap[terrainOffset + elementOffset];\r\n }\r\n } else {\r\n for (\r\n elementOffset = elementsPerHeight - 1;\r\n elementOffset >= 0;\r\n --elementOffset\r\n ) {\r\n heightSample =\r\n heightSample * elementMultiplier +\r\n heightmap[terrainOffset + elementOffset];\r\n }\r\n }\r\n }\r\n\r\n heightSample = heightSample * heightScale + heightOffset;\r\n\r\n maximumHeight = Math.max(maximumHeight, heightSample);\r\n minimumHeight = Math.min(minimumHeight, heightSample);\r\n\r\n let longitude = nativeRectangle.west + granularityX * col;\r\n\r\n if (!isGeographic) {\r\n longitude = longitude * oneOverGlobeSemimajorAxis;\r\n } else {\r\n longitude = toRadians(longitude);\r\n }\r\n\r\n let u = (longitude - geographicWest) / (geographicEast - geographicWest);\r\n u = CesiumMath.clamp(u, 0.0, 1.0);\r\n\r\n let index = row * width + col;\r\n\r\n if (skirtHeight > 0.0) {\r\n const isWestEdge = colIndex === startCol;\r\n const isEastEdge = colIndex === endCol - 1;\r\n const isEdge = isNorthEdge || isSouthEdge || isWestEdge || isEastEdge;\r\n const isCorner =\r\n (isNorthEdge || isSouthEdge) && (isWestEdge || isEastEdge);\r\n if (isCorner) {\r\n // Don't generate skirts on the corners.\r\n continue;\r\n } else if (isEdge) {\r\n heightSample -= skirtHeight;\r\n\r\n if (isWestEdge) {\r\n // The outer loop iterates north to south but the indices are ordered south to north, hence the index flip below\r\n index = gridVertexCount + (height - row - 1);\r\n longitude -= skirtOffsetPercentage * rectangleWidth;\r\n } else if (isSouthEdge) {\r\n // Add after west indices. South indices are ordered east to west.\r\n index = gridVertexCount + height + (width - col - 1);\r\n } else if (isEastEdge) {\r\n // Add after west and south indices. East indices are ordered north to south. The index is flipped like above.\r\n index = gridVertexCount + height + width + row;\r\n longitude += skirtOffsetPercentage * rectangleWidth;\r\n } else if (isNorthEdge) {\r\n // Add after west, south, and east indices. North indices are ordered west to east.\r\n index = gridVertexCount + height + width + height + col;\r\n }\r\n }\r\n }\r\n\r\n const nX = cosLatitude * cos(longitude);\r\n const nY = cosLatitude * sin(longitude);\r\n\r\n const kX = radiiSquaredX * nX;\r\n const kY = radiiSquaredY * nY;\r\n\r\n const gamma = sqrt(kX * nX + kY * nY + kZ * nZ);\r\n const oneOverGamma = 1.0 / gamma;\r\n\r\n const rSurfaceX = kX * oneOverGamma;\r\n const rSurfaceY = kY * oneOverGamma;\r\n const rSurfaceZ = kZ * oneOverGamma;\r\n\r\n const position = new Cartesian3();\r\n position.x = rSurfaceX + nX * heightSample;\r\n position.y = rSurfaceY + nY * heightSample;\r\n position.z = rSurfaceZ + nZ * heightSample;\r\n\r\n Matrix4.multiplyByPoint(toENU, position, cartesian3Scratch);\r\n Cartesian3.minimumByComponent(cartesian3Scratch, minimum, minimum);\r\n Cartesian3.maximumByComponent(cartesian3Scratch, maximum, maximum);\r\n hMin = Math.min(hMin, heightSample);\r\n\r\n positions[index] = position;\r\n uvs[index] = new Cartesian2(u, v);\r\n heights[index] = heightSample;\r\n\r\n if (includeWebMercatorT) {\r\n webMercatorTs[index] = webMercatorT;\r\n }\r\n\r\n if (includeGeodeticSurfaceNormals) {\r\n geodeticSurfaceNormals[index] = ellipsoid.geodeticSurfaceNormal(\r\n position\r\n );\r\n }\r\n }\r\n }\r\n\r\n const boundingSphere3D = BoundingSphere.fromPoints(positions);\r\n let orientedBoundingBox;\r\n if (defined(rectangle)) {\r\n orientedBoundingBox = OrientedBoundingBox.fromRectangle(\r\n rectangle,\r\n minimumHeight,\r\n maximumHeight,\r\n ellipsoid\r\n );\r\n }\r\n\r\n let occludeePointInScaledSpace;\r\n if (hasRelativeToCenter) {\r\n const occluder = new EllipsoidalOccluder(ellipsoid);\r\n occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\r\n relativeToCenter,\r\n positions,\r\n minimumHeight\r\n );\r\n }\r\n\r\n const aaBox = new AxisAlignedBoundingBox(minimum, maximum, relativeToCenter);\r\n const encoding = new TerrainEncoding(\r\n relativeToCenter,\r\n aaBox,\r\n hMin,\r\n maximumHeight,\r\n fromENU,\r\n false,\r\n includeWebMercatorT,\r\n includeGeodeticSurfaceNormals,\r\n exaggeration,\r\n exaggerationRelativeHeight\r\n );\r\n const vertices = new Float32Array(vertexCount * encoding.stride);\r\n\r\n let bufferIndex = 0;\r\n for (let j = 0; j < vertexCount; ++j) {\r\n bufferIndex = encoding.encode(\r\n vertices,\r\n bufferIndex,\r\n positions[j],\r\n uvs[j],\r\n heights[j],\r\n undefined,\r\n webMercatorTs[j],\r\n geodeticSurfaceNormals[j]\r\n );\r\n }\r\n\r\n return {\r\n vertices: vertices,\r\n maximumHeight: maximumHeight,\r\n minimumHeight: minimumHeight,\r\n encoding: encoding,\r\n boundingSphere3D: boundingSphere3D,\r\n orientedBoundingBox: orientedBoundingBox,\r\n occludeePointInScaledSpace: occludeePointInScaledSpace,\r\n };\r\n};\r\nexport default HeightmapTessellator;\r\n","/* jshint forin: false, bitwise: false */\n/*\nCopyright 2015-2018 Esri\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\nhttp://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nA copy of the license and additional notices are located with the\nsource distribution at:\n\nhttp://github.com/Esri/lerc/\n\nContributors: Johannes Schmid, (LERC v1)\n Chayanika Khatua, (LERC v1)\n Wenxue Ju (LERC v1, v2.x)\n*/\n\n/* Copyright 2015-2018 Esri. Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 @preserve */\n\n/**\n * a module for decoding LERC blobs\n * @module Lerc\n */\n(function() {\n //the original LercDecode for Version 1\n var LercDecode = (function() {\n\n // WARNING: This decoder version can only read old version 1 Lerc blobs. Use with caution.\n\n // Note: currently, this module only has an implementation for decoding LERC data, not encoding. The name of\n // the class was chosen to be future proof.\n\n var CntZImage = {};\n\n CntZImage.defaultNoDataValue = -3.4027999387901484e+38; // smallest Float32 value\n\n /**\n * Decode a LERC byte stream and return an object containing the pixel data and some required and optional\n * information about it, such as the image's width and height.\n *\n * @param {ArrayBuffer} input The LERC input byte stream\n * @param {object} [options] Decoding options, containing any of the following properties:\n * @config {number} [inputOffset = 0]\n * Skip the first inputOffset bytes of the input byte stream. A valid LERC file is expected at that position.\n * @config {Uint8Array} [encodedMask = null]\n * If specified, the decoder will not read mask information from the input and use the specified encoded\n * mask data instead. Mask header/data must not be present in the LERC byte stream in this case.\n * @config {number} [noDataValue = LercCode.defaultNoDataValue]\n * Pixel value to use for masked pixels.\n * @config {ArrayBufferView|Array} [pixelType = Float32Array]\n * The desired type of the pixelData array in the return value. Note that it is the caller's responsibility to\n * provide an appropriate noDataValue if the default pixelType is overridden.\n * @config {boolean} [returnMask = false]\n * If true, the return value will contain a maskData property of type Uint8Array which has one element per\n * pixel, the value of which is 1 or 0 depending on whether that pixel's data is present or masked. If the\n * input LERC data does not contain a mask, maskData will not be returned.\n * @config {boolean} [returnEncodedMask = false]\n * If true, the return value will contain a encodedMaskData property, which can be passed into encode() as\n * encodedMask.\n * @config {boolean} [returnFileInfo = false]\n * If true, the return value will have a fileInfo property that contains metadata obtained from the\n * LERC headers and the decoding process.\n * @config {boolean} [computeUsedBitDepths = false]\n * If true, the fileInfo property in the return value will contain the set of all block bit depths\n * encountered during decoding. Will only have an effect if returnFileInfo option is true.\n * @returns {{width, height, pixelData, minValue, maxValue, noDataValue, maskData, encodedMaskData, fileInfo}}\n */\n CntZImage.decode = function(input, options) {\n options = options || {};\n\n var skipMask = options.encodedMaskData || (options.encodedMaskData === null);\n var parsedData = parse(input, options.inputOffset || 0, skipMask);\n\n var noDataValue = (options.noDataValue !== null) ? options.noDataValue : CntZImage.defaultNoDataValue;\n\n var uncompressedData = uncompressPixelValues(parsedData, options.pixelType || Float32Array,\n options.encodedMaskData, noDataValue, options.returnMask);\n\n var result = {\n width: parsedData.width,\n height: parsedData.height,\n pixelData: uncompressedData.resultPixels,\n minValue: uncompressedData.minValue,\n maxValue: parsedData.pixels.maxValue,\n noDataValue: noDataValue\n };\n\n if (uncompressedData.resultMask) {\n result.maskData = uncompressedData.resultMask;\n }\n\n if (options.returnEncodedMask && parsedData.mask) {\n result.encodedMaskData = parsedData.mask.bitset ? parsedData.mask.bitset : null;\n }\n\n if (options.returnFileInfo) {\n result.fileInfo = formatFileInfo(parsedData);\n if (options.computeUsedBitDepths) {\n result.fileInfo.bitDepths = computeUsedBitDepths(parsedData);\n }\n }\n\n return result;\n };\n\n var uncompressPixelValues = function(data, TypedArrayClass, maskBitset, noDataValue, storeDecodedMask) {\n var blockIdx = 0;\n var numX = data.pixels.numBlocksX;\n var numY = data.pixels.numBlocksY;\n var blockWidth = Math.floor(data.width / numX);\n var blockHeight = Math.floor(data.height / numY);\n var scale = 2 * data.maxZError;\n var minValue = Number.MAX_VALUE, currentValue;\n maskBitset = maskBitset || ((data.mask) ? data.mask.bitset : null);\n\n var resultPixels, resultMask;\n resultPixels = new TypedArrayClass(data.width * data.height);\n if (storeDecodedMask && maskBitset) {\n resultMask = new Uint8Array(data.width * data.height);\n }\n var blockDataBuffer = new Float32Array(blockWidth * blockHeight);\n\n var xx, yy;\n for (var y = 0; y <= numY; y++) {\n var thisBlockHeight = (y !== numY) ? blockHeight : (data.height % numY);\n if (thisBlockHeight === 0) {\n continue;\n }\n for (var x = 0; x <= numX; x++) {\n var thisBlockWidth = (x !== numX) ? blockWidth : (data.width % numX);\n if (thisBlockWidth === 0) {\n continue;\n }\n\n var outPtr = y * data.width * blockHeight + x * blockWidth;\n var outStride = data.width - thisBlockWidth;\n\n var block = data.pixels.blocks[blockIdx];\n\n var blockData, blockPtr, constValue;\n if (block.encoding < 2) {\n // block is either uncompressed or bit-stuffed (encodings 0 and 1)\n if (block.encoding === 0) {\n // block is uncompressed\n blockData = block.rawData;\n } else {\n // block is bit-stuffed\n unstuff(block.stuffedData, block.bitsPerPixel, block.numValidPixels, block.offset, scale, blockDataBuffer, data.pixels.maxValue);\n blockData = blockDataBuffer;\n }\n blockPtr = 0;\n }\n else if (block.encoding === 2) {\n // block is all 0\n constValue = 0;\n }\n else {\n // block has constant value (encoding === 3)\n constValue = block.offset;\n }\n\n var maskByte;\n if (maskBitset) {\n for (yy = 0; yy < thisBlockHeight; yy++) {\n if (outPtr & 7) {\n //\n maskByte = maskBitset[outPtr >> 3];\n maskByte <<= outPtr & 7;\n }\n for (xx = 0; xx < thisBlockWidth; xx++) {\n if (!(outPtr & 7)) {\n // read next byte from mask\n maskByte = maskBitset[outPtr >> 3];\n }\n if (maskByte & 128) {\n // pixel data present\n if (resultMask) {\n resultMask[outPtr] = 1;\n }\n currentValue = (block.encoding < 2) ? blockData[blockPtr++] : constValue;\n minValue = minValue > currentValue ? currentValue : minValue;\n resultPixels[outPtr++] = currentValue;\n } else {\n // pixel data not present\n if (resultMask) {\n resultMask[outPtr] = 0;\n }\n resultPixels[outPtr++] = noDataValue;\n }\n maskByte <<= 1;\n }\n outPtr += outStride;\n }\n } else {\n // mask not present, simply copy block over\n if (block.encoding < 2) {\n // duplicating this code block for performance reasons\n // blockData case:\n for (yy = 0; yy < thisBlockHeight; yy++) {\n for (xx = 0; xx < thisBlockWidth; xx++) {\n currentValue = blockData[blockPtr++];\n minValue = minValue > currentValue ? currentValue : minValue;\n resultPixels[outPtr++] = currentValue;\n }\n outPtr += outStride;\n }\n }\n else {\n // constValue case:\n minValue = minValue > constValue ? constValue : minValue;\n for (yy = 0; yy < thisBlockHeight; yy++) {\n for (xx = 0; xx < thisBlockWidth; xx++) {\n resultPixels[outPtr++] = constValue;\n }\n outPtr += outStride;\n }\n }\n }\n if ((block.encoding === 1) && (blockPtr !== block.numValidPixels)) {\n throw \"Block and Mask do not match\";\n }\n blockIdx++;\n }\n }\n\n return {\n resultPixels: resultPixels,\n resultMask: resultMask,\n minValue: minValue\n };\n };\n\n var formatFileInfo = function(data) {\n return {\n \"fileIdentifierString\": data.fileIdentifierString,\n \"fileVersion\": data.fileVersion,\n \"imageType\": data.imageType,\n \"height\": data.height,\n \"width\": data.width,\n \"maxZError\": data.maxZError,\n \"eofOffset\": data.eofOffset,\n \"mask\": data.mask ? {\n \"numBlocksX\": data.mask.numBlocksX,\n \"numBlocksY\": data.mask.numBlocksY,\n \"numBytes\": data.mask.numBytes,\n \"maxValue\": data.mask.maxValue\n } : null,\n \"pixels\": {\n \"numBlocksX\": data.pixels.numBlocksX,\n \"numBlocksY\": data.pixels.numBlocksY,\n \"numBytes\": data.pixels.numBytes,\n \"maxValue\": data.pixels.maxValue,\n \"noDataValue\": data.noDataValue\n }\n };\n };\n\n var computeUsedBitDepths = function(data) {\n var numBlocks = data.pixels.numBlocksX * data.pixels.numBlocksY;\n var bitDepths = {};\n for (var i = 0; i < numBlocks; i++) {\n var block = data.pixels.blocks[i];\n if (block.encoding === 0) {\n bitDepths.float32 = true;\n } else if (block.encoding === 1) {\n bitDepths[block.bitsPerPixel] = true;\n } else {\n bitDepths[0] = true;\n }\n }\n\n return Object.keys(bitDepths);\n };\n\n var parse = function(input, fp, skipMask) {\n var data = {};\n\n // File header\n var fileIdView = new Uint8Array(input, fp, 10);\n data.fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n if (data.fileIdentifierString.trim() !== \"CntZImage\") {\n throw \"Unexpected file identifier string: \" + data.fileIdentifierString;\n }\n fp += 10;\n var view = new DataView(input, fp, 24);\n data.fileVersion = view.getInt32(0, true);\n data.imageType = view.getInt32(4, true);\n data.height = view.getUint32(8, true);\n data.width = view.getUint32(12, true);\n data.maxZError = view.getFloat64(16, true);\n fp += 24;\n\n // Mask Header\n if (!skipMask) {\n view = new DataView(input, fp, 16);\n data.mask = {};\n data.mask.numBlocksY = view.getUint32(0, true);\n data.mask.numBlocksX = view.getUint32(4, true);\n data.mask.numBytes = view.getUint32(8, true);\n data.mask.maxValue = view.getFloat32(12, true);\n fp += 16;\n\n // Mask Data\n if (data.mask.numBytes > 0) {\n var bitset = new Uint8Array(Math.ceil(data.width * data.height / 8));\n view = new DataView(input, fp, data.mask.numBytes);\n var cnt = view.getInt16(0, true);\n var ip = 2, op = 0;\n do {\n if (cnt > 0) {\n while (cnt--) { bitset[op++] = view.getUint8(ip++); }\n } else {\n var val = view.getUint8(ip++);\n cnt = -cnt;\n while (cnt--) { bitset[op++] = val; }\n }\n cnt = view.getInt16(ip, true);\n ip += 2;\n } while (ip < data.mask.numBytes);\n if ((cnt !== -32768) || (op < bitset.length)) {\n throw \"Unexpected end of mask RLE encoding\";\n }\n data.mask.bitset = bitset;\n fp += data.mask.numBytes;\n }\n else if ((data.mask.numBytes | data.mask.numBlocksY | data.mask.maxValue) === 0) { // Special case, all nodata\n data.mask.bitset = new Uint8Array(Math.ceil(data.width * data.height / 8));\n }\n }\n\n // Pixel Header\n view = new DataView(input, fp, 16);\n data.pixels = {};\n data.pixels.numBlocksY = view.getUint32(0, true);\n data.pixels.numBlocksX = view.getUint32(4, true);\n data.pixels.numBytes = view.getUint32(8, true);\n data.pixels.maxValue = view.getFloat32(12, true);\n fp += 16;\n\n var numBlocksX = data.pixels.numBlocksX;\n var numBlocksY = data.pixels.numBlocksY;\n // the number of blocks specified in the header does not take into account the blocks at the end of\n // each row/column with a special width/height that make the image complete in case the width is not\n // evenly divisible by the number of blocks.\n var actualNumBlocksX = numBlocksX + ((data.width % numBlocksX) > 0 ? 1 : 0);\n var actualNumBlocksY = numBlocksY + ((data.height % numBlocksY) > 0 ? 1 : 0);\n data.pixels.blocks = new Array(actualNumBlocksX * actualNumBlocksY);\n var blockI = 0;\n for (var blockY = 0; blockY < actualNumBlocksY; blockY++) {\n for (var blockX = 0; blockX < actualNumBlocksX; blockX++) {\n\n // Block\n var size = 0;\n var bytesLeft = input.byteLength - fp;\n view = new DataView(input, fp, Math.min(10, bytesLeft));\n var block = {};\n data.pixels.blocks[blockI++] = block;\n var headerByte = view.getUint8(0); size++;\n block.encoding = headerByte & 63;\n if (block.encoding > 3) {\n throw \"Invalid block encoding (\" + block.encoding + \")\";\n }\n if (block.encoding === 2) {\n fp++;\n continue;\n }\n if ((headerByte !== 0) && (headerByte !== 2)) {\n headerByte >>= 6;\n block.offsetType = headerByte;\n if (headerByte === 2) {\n block.offset = view.getInt8(1); size++;\n } else if (headerByte === 1) {\n block.offset = view.getInt16(1, true); size += 2;\n } else if (headerByte === 0) {\n block.offset = view.getFloat32(1, true); size += 4;\n } else {\n throw \"Invalid block offset type\";\n }\n\n if (block.encoding === 1) {\n headerByte = view.getUint8(size); size++;\n block.bitsPerPixel = headerByte & 63;\n headerByte >>= 6;\n block.numValidPixelsType = headerByte;\n if (headerByte === 2) {\n block.numValidPixels = view.getUint8(size); size++;\n } else if (headerByte === 1) {\n block.numValidPixels = view.getUint16(size, true); size += 2;\n } else if (headerByte === 0) {\n block.numValidPixels = view.getUint32(size, true); size += 4;\n } else {\n throw \"Invalid valid pixel count type\";\n }\n }\n }\n fp += size;\n\n if (block.encoding === 3) {\n continue;\n }\n\n var arrayBuf, store8;\n if (block.encoding === 0) {\n var numPixels = (data.pixels.numBytes - 1) / 4;\n if (numPixels !== Math.floor(numPixels)) {\n throw \"uncompressed block has invalid length\";\n }\n arrayBuf = new ArrayBuffer(numPixels * 4);\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, fp, numPixels * 4));\n var rawData = new Float32Array(arrayBuf);\n block.rawData = rawData;\n fp += numPixels * 4;\n } else if (block.encoding === 1) {\n var dataBytes = Math.ceil(block.numValidPixels * block.bitsPerPixel / 8);\n var dataWords = Math.ceil(dataBytes / 4);\n arrayBuf = new ArrayBuffer(dataWords * 4);\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, fp, dataBytes));\n block.stuffedData = new Uint32Array(arrayBuf);\n fp += dataBytes;\n }\n }\n }\n data.eofOffset = fp;\n return data;\n };\n\n var unstuff = function(src, bitsPerPixel, numPixels, offset, scale, dest, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0;\n var n, buffer;\n var nmax = Math.ceil((maxValue - offset) / scale);\n // get rid of trailing bytes that are already part of next block\n var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n } else {\n var missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n //pixel values may exceed max due to quantization\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n return dest;\n };\n\n return CntZImage;\n })();\n\n //version 2. Supports 2.1, 2.2, 2.3\n var Lerc2Decode = (function() {\n \"use strict\";\n // Note: currently, this module only has an implementation for decoding LERC data, not encoding. The name of\n // the class was chosen to be future proof, following LercDecode.\n\n /*****************************************\n * private static class bitsutffer used by Lerc2Decode\n *******************************************/\n var BitStuffer = {\n //methods ending with 2 are for the new byte order used by Lerc2.3 and above.\n //originalUnstuff is used to unpack Huffman code table. code is duplicated to unstuffx for performance reasons.\n unstuff: function(src, dest, bitsPerPixel, numPixels, lutArr, offset, scale, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0;\n var n, buffer, missingBits, nmax;\n\n // get rid of trailing bytes that are already part of next block\n var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n src[src.length - 1] <<= 8 * numInvalidTailBytes;\n if (lutArr) {\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n }\n else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n dest[o] = lutArr[n];//offset + lutArr[n] * scale;\n }\n }\n else {\n nmax = Math.ceil((maxValue - offset) / scale);\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n }\n else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n //pixel values may exceed max due to quantization\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n }\n },\n\n unstuffLUT: function(src, bitsPerPixel, numPixels, offset, scale, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o = 0, missingBits = 0, bitsLeft = 0, n = 0;\n var buffer;\n var dest = [];\n\n // get rid of trailing bytes that are already part of next block\n var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n var nmax = Math.ceil((maxValue - offset) / scale);\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n //dest.push(n);\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n dest.unshift(offset);//1st one\n return dest;\n },\n\n unstuff2: function(src, dest, bitsPerPixel, numPixels, lutArr, offset, scale, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0, bitPos = 0;\n var n, buffer, missingBits;\n if (lutArr) {\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n bitPos = 0;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = ((buffer >>> bitPos) & bitMask);\n bitsLeft -= bitsPerPixel;\n bitPos += bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = (buffer >>> bitPos) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n bitPos = missingBits;\n }\n dest[o] = lutArr[n];\n }\n }\n else {\n var nmax = Math.ceil((maxValue - offset) / scale);\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n bitPos = 0;\n }\n if (bitsLeft >= bitsPerPixel) {\n //no unsigned left shift\n n = ((buffer >>> bitPos) & bitMask);\n bitsLeft -= bitsPerPixel;\n bitPos += bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n bitPos = missingBits;\n }\n //pixel values may exceed max due to quantization\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n }\n return dest;\n },\n\n unstuffLUT2: function(src, bitsPerPixel, numPixels, offset, scale, maxValue) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o = 0, missingBits = 0, bitsLeft = 0, n = 0, bitPos = 0;\n var buffer;\n var dest = [];\n var nmax = Math.ceil((maxValue - offset) / scale);\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n bitPos = 0;\n }\n if (bitsLeft >= bitsPerPixel) {\n //no unsigned left shift\n n = ((buffer >>> bitPos) & bitMask);\n bitsLeft -= bitsPerPixel;\n bitPos += bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n bitPos = missingBits;\n }\n //dest.push(n);\n dest[o] = n < nmax ? offset + n * scale : maxValue;\n }\n dest.unshift(offset);\n return dest;\n },\n\n originalUnstuff: function(src, dest, bitsPerPixel, numPixels) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0;\n var n, buffer, missingBits;\n\n // get rid of trailing bytes that are already part of next block\n var numInvalidTailBytes = src.length * 4 - Math.ceil(bitsPerPixel * numPixels / 8);\n src[src.length - 1] <<= 8 * numInvalidTailBytes;\n\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n }\n if (bitsLeft >= bitsPerPixel) {\n n = (buffer >>> (bitsLeft - bitsPerPixel)) & bitMask;\n bitsLeft -= bitsPerPixel;\n }\n else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = ((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n += (buffer >>> bitsLeft);\n }\n dest[o] = n;\n }\n return dest;\n },\n\n originalUnstuff2: function(src, dest, bitsPerPixel, numPixels) {\n var bitMask = (1 << bitsPerPixel) - 1;\n var i = 0, o;\n var bitsLeft = 0, bitPos = 0;\n var n, buffer, missingBits;\n //micro-optimizations\n for (o = 0; o < numPixels; o++) {\n if (bitsLeft === 0) {\n buffer = src[i++];\n bitsLeft = 32;\n bitPos = 0;\n }\n if (bitsLeft >= bitsPerPixel) {\n //no unsigned left shift\n n = ((buffer >>> bitPos) & bitMask);\n bitsLeft -= bitsPerPixel;\n bitPos += bitsPerPixel;\n } else {\n missingBits = (bitsPerPixel - bitsLeft);\n n = (buffer >>> bitPos) & bitMask;//((buffer & bitMask) << missingBits) & bitMask;\n buffer = src[i++];\n bitsLeft = 32 - missingBits;\n n |= (buffer & ((1 << missingBits) - 1)) << (bitsPerPixel - missingBits);\n bitPos = missingBits;\n }\n dest[o] = n;\n }\n return dest;\n }\n };\n\n /*****************************************\n *private static class used by Lerc2Decode\n ******************************************/\n var Lerc2Helpers = {\n HUFFMAN_LUT_BITS_MAX: 12, //use 2^12 lut, treat it like constant\n computeChecksumFletcher32: function(input) {\n\n var sum1 = 0xffff, sum2 = 0xffff;\n var len = input.length;\n var words = Math.floor(len / 2);\n var i = 0;\n while (words) {\n var tlen = (words >= 359) ? 359 : words;\n words -= tlen;\n do {\n sum1 += (input[i++] << 8);\n sum2 += sum1 += input[i++];\n } while (--tlen);\n\n sum1 = (sum1 & 0xffff) + (sum1 >>> 16);\n sum2 = (sum2 & 0xffff) + (sum2 >>> 16);\n }\n\n // add the straggler byte if it exists\n if (len & 1) {\n sum2 += sum1 += (input[i] << 8);\n }\n // second reduction step to reduce sums to 16 bits\n sum1 = (sum1 & 0xffff) + (sum1 >>> 16);\n sum2 = (sum2 & 0xffff) + (sum2 >>> 16);\n\n return (sum2 << 16 | sum1) >>> 0;\n },\n\n readHeaderInfo: function(input, data) {\n var ptr = data.ptr;\n var fileIdView = new Uint8Array(input, ptr, 6);\n var headerInfo = {};\n headerInfo.fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n if (headerInfo.fileIdentifierString.lastIndexOf(\"Lerc2\", 0) !== 0) {\n throw \"Unexpected file identifier string (expect Lerc2 ): \" + headerInfo.fileIdentifierString;\n }\n ptr += 6;\n var view = new DataView(input, ptr, 8);\n var fileVersion = view.getInt32(0, true);\n headerInfo.fileVersion = fileVersion;\n ptr += 4;\n if (fileVersion >= 3) {\n headerInfo.checksum = view.getUint32(4, true); //nrows\n ptr += 4;\n }\n\n //keys start from here\n view = new DataView(input, ptr, 12);\n headerInfo.height = view.getUint32(0, true); //nrows\n headerInfo.width = view.getUint32(4, true); //ncols\n ptr += 8;\n if (fileVersion >= 4) {\n headerInfo.numDims = view.getUint32(8, true);\n ptr += 4;\n }\n else {\n headerInfo.numDims = 1;\n }\n\n view = new DataView(input, ptr, 40);\n headerInfo.numValidPixel = view.getUint32(0, true);\n headerInfo.microBlockSize = view.getInt32(4, true);\n headerInfo.blobSize = view.getInt32(8, true);\n headerInfo.imageType = view.getInt32(12, true);\n\n headerInfo.maxZError = view.getFloat64(16, true);\n headerInfo.zMin = view.getFloat64(24, true);\n headerInfo.zMax = view.getFloat64(32, true);\n ptr += 40;\n data.headerInfo = headerInfo;\n data.ptr = ptr;\n\n var checksum, keyLength;\n if (fileVersion >= 3) {\n keyLength = fileVersion >= 4 ? 52 : 48;\n checksum = this.computeChecksumFletcher32(new Uint8Array(input, ptr - keyLength, headerInfo.blobSize - 14));\n if (checksum !== headerInfo.checksum) {\n throw \"Checksum failed.\";\n }\n }\n return true;\n },\n\n checkMinMaxRanges: function(input, data) {\n var headerInfo = data.headerInfo;\n var OutPixelTypeArray = this.getDataTypeArray(headerInfo.imageType);\n var rangeBytes = headerInfo.numDims * this.getDataTypeSize(headerInfo.imageType);\n var minValues = this.readSubArray(input, data.ptr, OutPixelTypeArray, rangeBytes);\n var maxValues = this.readSubArray(input, data.ptr + rangeBytes, OutPixelTypeArray, rangeBytes);\n data.ptr += (2 * rangeBytes);\n var i, equal = true;\n for (i = 0; i < headerInfo.numDims; i++) {\n if (minValues[i] !== maxValues[i]) {\n equal = false;\n break;\n }\n }\n headerInfo.minValues = minValues;\n headerInfo.maxValues = maxValues;\n return equal;\n },\n\n readSubArray: function(input, ptr, OutPixelTypeArray, numBytes) {\n var rawData;\n if (OutPixelTypeArray === Uint8Array) {\n rawData = new Uint8Array(input, ptr, numBytes);\n }\n else {\n var arrayBuf = new ArrayBuffer(numBytes);\n var store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, ptr, numBytes));\n rawData = new OutPixelTypeArray(arrayBuf);\n }\n return rawData;\n },\n\n readMask: function(input, data) {\n var ptr = data.ptr;\n var headerInfo = data.headerInfo;\n var numPixels = headerInfo.width * headerInfo.height;\n var numValidPixel = headerInfo.numValidPixel;\n\n var view = new DataView(input, ptr, 4);\n var mask = {};\n mask.numBytes = view.getUint32(0, true);\n ptr += 4;\n\n // Mask Data\n if ((0 === numValidPixel || numPixels === numValidPixel) && 0 !== mask.numBytes) {\n throw (\"invalid mask\");\n }\n var bitset, resultMask;\n if (numValidPixel === 0) {\n bitset = new Uint8Array(Math.ceil(numPixels / 8));\n mask.bitset = bitset;\n resultMask = new Uint8Array(numPixels);\n data.pixels.resultMask = resultMask;\n ptr += mask.numBytes;\n }// ????? else if (data.mask.numBytes > 0 && data.mask.numBytes< data.numValidPixel) {\n else if (mask.numBytes > 0) {\n bitset = new Uint8Array(Math.ceil(numPixels / 8));\n view = new DataView(input, ptr, mask.numBytes);\n var cnt = view.getInt16(0, true);\n var ip = 2, op = 0, val = 0;\n do {\n if (cnt > 0) {\n while (cnt--) { bitset[op++] = view.getUint8(ip++); }\n } else {\n val = view.getUint8(ip++);\n cnt = -cnt;\n while (cnt--) { bitset[op++] = val; }\n }\n cnt = view.getInt16(ip, true);\n ip += 2;\n } while (ip < mask.numBytes);\n if ((cnt !== -32768) || (op < bitset.length)) {\n throw \"Unexpected end of mask RLE encoding\";\n }\n\n resultMask = new Uint8Array(numPixels);\n var mb = 0, k = 0;\n\n for (k = 0; k < numPixels; k++) {\n if (k & 7) {\n mb = bitset[k >> 3];\n mb <<= k & 7;\n }\n else {\n mb = bitset[k >> 3];\n }\n if (mb & 128) {\n resultMask[k] = 1;\n }\n }\n data.pixels.resultMask = resultMask;\n\n mask.bitset = bitset;\n ptr += mask.numBytes;\n }\n data.ptr = ptr;\n data.mask = mask;\n return true;\n },\n\n readDataOneSweep: function(input, data, OutPixelTypeArray) {\n var ptr = data.ptr;\n var headerInfo = data.headerInfo;\n var numDims = headerInfo.numDims;\n var numPixels = headerInfo.width * headerInfo.height;\n var imageType = headerInfo.imageType;\n var numBytes = headerInfo.numValidPixel * Lerc2Helpers.getDataTypeSize(imageType) * numDims;\n //data.pixels.numBytes = numBytes;\n var rawData;\n var mask = data.pixels.resultMask;\n if (OutPixelTypeArray === Uint8Array) {\n rawData = new Uint8Array(input, ptr, numBytes);\n }\n else {\n var arrayBuf = new ArrayBuffer(numBytes);\n var store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, ptr, numBytes));\n rawData = new OutPixelTypeArray(arrayBuf);\n }\n if (rawData.length === numPixels * numDims) {\n data.pixels.resultPixels = rawData;\n }\n else //mask\n {\n data.pixels.resultPixels = new OutPixelTypeArray(numPixels * numDims);\n var z = 0, k = 0, i = 0, nStart = 0;\n if (numDims > 1) {\n for (i=0; i < numDims; i++) {\n nStart = i * numPixels;\n for (k = 0; k < numPixels; k++) {\n if (mask[k]) {\n data.pixels.resultPixels[nStart + k] = rawData[z++];\n }\n }\n }\n }\n else {\n for (k = 0; k < numPixels; k++) {\n if (mask[k]) {\n data.pixels.resultPixels[k] = rawData[z++];\n }\n }\n }\n }\n ptr += numBytes;\n data.ptr = ptr; //return data;\n return true;\n },\n\n readHuffmanTree: function(input, data) {\n var BITS_MAX = this.HUFFMAN_LUT_BITS_MAX; //8 is slow for the large test image\n //var size_max = 1 << BITS_MAX;\n /* ************************\n * reading code table\n *************************/\n var view = new DataView(input, data.ptr, 16);\n data.ptr += 16;\n var version = view.getInt32(0, true);\n if (version < 2) {\n throw \"unsupported Huffman version\";\n }\n var size = view.getInt32(4, true);\n var i0 = view.getInt32(8, true);\n var i1 = view.getInt32(12, true);\n if (i0 >= i1) {\n return false;\n }\n var blockDataBuffer = new Uint32Array(i1 - i0);\n Lerc2Helpers.decodeBits(input, data, blockDataBuffer);\n var codeTable = []; //size\n var i, j, k, len;\n\n for (i = i0; i < i1; i++) {\n j = i - (i < size ? 0 : size);//wrap around\n codeTable[j] = { first: blockDataBuffer[i - i0], second: null };\n }\n\n var dataBytes = input.byteLength - data.ptr;\n var dataWords = Math.ceil(dataBytes / 4);\n var arrayBuf = new ArrayBuffer(dataWords * 4);\n var store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, data.ptr, dataBytes));\n var stuffedData = new Uint32Array(arrayBuf); //must start from x*4\n var bitPos = 0, word, srcPtr = 0;\n word = stuffedData[0];\n for (i = i0; i < i1; i++) {\n j = i - (i < size ? 0 : size);//wrap around\n len = codeTable[j].first;\n if (len > 0) {\n codeTable[j].second = (word << bitPos) >>> (32 - len);\n\n if (32 - bitPos >= len) {\n bitPos += len;\n if (bitPos === 32) {\n bitPos = 0;\n srcPtr++;\n word = stuffedData[srcPtr];\n }\n }\n else {\n bitPos += len - 32;\n srcPtr++;\n word = stuffedData[srcPtr];\n codeTable[j].second |= word >>> (32 - bitPos);\n }\n }\n }\n\n //finished reading code table\n\n /* ************************\n * building lut\n *************************/\n var numBitsLUT = 0, numBitsLUTQick = 0;\n var tree = new TreeNode();\n for (i = 0; i < codeTable.length; i++) {\n if (codeTable[i] !== undefined) {\n numBitsLUT = Math.max(numBitsLUT, codeTable[i].first);\n }\n }\n if (numBitsLUT >= BITS_MAX) {\n numBitsLUTQick = BITS_MAX;\n }\n else {\n numBitsLUTQick = numBitsLUT;\n }\n if (numBitsLUT >= 30) {\n console.log(\"WARning, large NUM LUT BITS IS \" + numBitsLUT);\n }\n var decodeLut = [], entry, code, numEntries, jj, currentBit, node;\n for (i = i0; i < i1; i++) {\n j = i - (i < size ? 0 : size);//wrap around\n len = codeTable[j].first;\n if (len > 0) {\n entry = [len, j];\n if (len <= numBitsLUTQick) {\n code = codeTable[j].second << (numBitsLUTQick - len);\n numEntries = 1 << (numBitsLUTQick - len);\n for (k = 0; k < numEntries; k++) {\n decodeLut[code | k] = entry;\n }\n }\n else {\n //build tree\n code = codeTable[j].second;\n node = tree;\n for (jj = len - 1; jj >= 0; jj--) {\n currentBit = code >>> jj & 1; //no left shift as length could be 30,31\n if (currentBit) {\n if (!node.right) {\n node.right = new TreeNode();\n }\n node = node.right;\n }\n else {\n if (!node.left) {\n node.left = new TreeNode();\n }\n node = node.left;\n }\n if (jj === 0 && !node.val) {\n node.val = entry[1];\n }\n }\n }\n }\n }\n return {\n decodeLut: decodeLut,\n numBitsLUTQick: numBitsLUTQick,\n numBitsLUT: numBitsLUT,\n tree: tree,\n stuffedData: stuffedData,\n srcPtr: srcPtr,\n bitPos: bitPos\n };\n },\n\n readHuffman: function(input, data, OutPixelTypeArray) {\n var headerInfo = data.headerInfo;\n var numDims = headerInfo.numDims;\n var height = data.headerInfo.height;\n var width = data.headerInfo.width;\n var numPixels = width * height;\n //var size_max = 1 << BITS_MAX;\n /* ************************\n * reading huffman structure info\n *************************/\n var huffmanInfo = this.readHuffmanTree(input, data);\n var decodeLut = huffmanInfo.decodeLut;\n var tree = huffmanInfo.tree;\n //stuffedData includes huffman headers\n var stuffedData = huffmanInfo.stuffedData;\n var srcPtr = huffmanInfo.srcPtr;\n var bitPos = huffmanInfo.bitPos;\n var numBitsLUTQick = huffmanInfo.numBitsLUTQick;\n var numBitsLUT = huffmanInfo.numBitsLUT;\n var offset = data.headerInfo.imageType === 0 ? 128 : 0;\n /*************************\n * decode\n ***************************/\n var node, val, delta, mask = data.pixels.resultMask, valTmp, valTmpQuick, currentBit;\n var i, j, k, ii;\n var prevVal = 0;\n if (bitPos > 0) {\n srcPtr++;\n bitPos = 0;\n }\n var word = stuffedData[srcPtr];\n var deltaEncode = data.encodeMode === 1;\n var resultPixelsAllDim = new OutPixelTypeArray(numPixels * numDims);\n var resultPixels = resultPixelsAllDim;\n var iDim;\n for (iDim = 0; iDim < headerInfo.numDims; iDim++) {\n if (numDims > 1) {\n //get the mem block of current dimension\n resultPixels = new OutPixelTypeArray(resultPixelsAllDim.buffer, numPixels * iDim, numPixels);\n prevVal = 0;\n }\n if (data.headerInfo.numValidPixel === width * height) { //all valid\n for (k = 0, i = 0; i < height; i++) {\n for (j = 0; j < width; j++, k++) {\n val = 0;\n valTmp = (word << bitPos) >>> (32 - numBitsLUTQick);\n valTmpQuick = valTmp;// >>> deltaBits;\n if (32 - bitPos < numBitsLUTQick) {\n valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUTQick));\n valTmpQuick = valTmp;// >>> deltaBits;\n }\n if (decodeLut[valTmpQuick]) // if there, move the correct number of bits and done\n {\n val = decodeLut[valTmpQuick][1];\n bitPos += decodeLut[valTmpQuick][0];\n }\n else {\n valTmp = (word << bitPos) >>> (32 - numBitsLUT);\n valTmpQuick = valTmp;// >>> deltaBits;\n if (32 - bitPos < numBitsLUT) {\n valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUT));\n valTmpQuick = valTmp;// >>> deltaBits;\n }\n node = tree;\n for (ii = 0; ii < numBitsLUT; ii++) {\n currentBit = valTmp >>> (numBitsLUT - ii - 1) & 1;\n node = currentBit ? node.right : node.left;\n if (!(node.left || node.right)) {\n val = node.val;\n bitPos = bitPos + ii + 1;\n break;\n }\n }\n }\n\n if (bitPos >= 32) {\n bitPos -= 32;\n srcPtr++;\n word = stuffedData[srcPtr];\n }\n\n delta = val - offset;\n if (deltaEncode) {\n if (j > 0) {\n delta += prevVal; // use overflow\n }\n else if (i > 0) {\n delta += resultPixels[k - width];\n }\n else {\n delta += prevVal;\n }\n delta &= 0xFF; //overflow\n resultPixels[k] = delta;//overflow\n prevVal = delta;\n }\n else {\n resultPixels[k] = delta;\n }\n }\n }\n }\n else { //not all valid, use mask\n for (k = 0, i = 0; i < height; i++) {\n for (j = 0; j < width; j++, k++) {\n if (mask[k]) {\n val = 0;\n valTmp = (word << bitPos) >>> (32 - numBitsLUTQick);\n valTmpQuick = valTmp;// >>> deltaBits;\n if (32 - bitPos < numBitsLUTQick) {\n valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUTQick));\n valTmpQuick = valTmp;// >>> deltaBits;\n }\n if (decodeLut[valTmpQuick]) // if there, move the correct number of bits and done\n {\n val = decodeLut[valTmpQuick][1];\n bitPos += decodeLut[valTmpQuick][0];\n }\n else {\n valTmp = (word << bitPos) >>> (32 - numBitsLUT);\n valTmpQuick = valTmp;// >>> deltaBits;\n if (32 - bitPos < numBitsLUT) {\n valTmp |= ((stuffedData[srcPtr + 1]) >>> (64 - bitPos - numBitsLUT));\n valTmpQuick = valTmp;// >>> deltaBits;\n }\n node = tree;\n for (ii = 0; ii < numBitsLUT; ii++) {\n currentBit = valTmp >>> (numBitsLUT - ii - 1) & 1;\n node = currentBit ? node.right : node.left;\n if (!(node.left || node.right)) {\n val = node.val;\n bitPos = bitPos + ii + 1;\n break;\n }\n }\n }\n\n if (bitPos >= 32) {\n bitPos -= 32;\n srcPtr++;\n word = stuffedData[srcPtr];\n }\n\n delta = val - offset;\n if (deltaEncode) {\n if (j > 0 && mask[k - 1]) {\n delta += prevVal; // use overflow\n }\n else if (i > 0 && mask[k - width]) {\n delta += resultPixels[k - width];\n }\n else {\n delta += prevVal;\n }\n\n delta &= 0xFF; //overflow\n resultPixels[k] = delta;//overflow\n prevVal = delta;\n }\n else {\n resultPixels[k] = delta;\n }\n }\n }\n }\n }\n data.ptr = data.ptr + (srcPtr + 1) * 4 + (bitPos > 0 ? 4 : 0);\n }\n data.pixels.resultPixels = resultPixelsAllDim;\n },\n\n decodeBits: function(input, data, blockDataBuffer, offset, iDim) {\n {\n //bitstuff encoding is 3\n var headerInfo = data.headerInfo;\n var fileVersion = headerInfo.fileVersion;\n //var block = {};\n var blockPtr = 0;\n var view = new DataView(input, data.ptr, 5);//to do\n var headerByte = view.getUint8(0);\n blockPtr++;\n var bits67 = headerByte >> 6;\n var n = (bits67 === 0) ? 4 : 3 - bits67;\n var doLut = (headerByte & 32) > 0 ? true : false;//5th bit\n var numBits = headerByte & 31;\n var numElements = 0;\n if (n === 1) {\n numElements = view.getUint8(blockPtr); blockPtr++;\n } else if (n === 2) {\n numElements = view.getUint16(blockPtr, true); blockPtr += 2;\n } else if (n === 4) {\n numElements = view.getUint32(blockPtr, true); blockPtr += 4;\n } else {\n throw \"Invalid valid pixel count type\";\n }\n //fix: huffman codes are bit stuffed, but not bound by data's max value, so need to use originalUnstuff\n //offset = offset || 0;\n var scale = 2 * headerInfo.maxZError;\n var stuffedData, arrayBuf, store8, dataBytes, dataWords;\n var lutArr, lutData, lutBytes, lutBitsPerElement, bitsPerPixel;\n var zMax = headerInfo.numDims > 1 ? headerInfo.maxValues[iDim] : headerInfo.zMax;\n if (doLut) {\n data.counter.lut++;\n lutBytes = view.getUint8(blockPtr);\n lutBitsPerElement = numBits;\n blockPtr++;\n dataBytes = Math.ceil((lutBytes - 1) * numBits / 8);\n dataWords = Math.ceil(dataBytes / 4);\n arrayBuf = new ArrayBuffer(dataWords * 4);\n store8 = new Uint8Array(arrayBuf);\n\n data.ptr += blockPtr;\n store8.set(new Uint8Array(input, data.ptr, dataBytes));\n\n lutData = new Uint32Array(arrayBuf);\n data.ptr += dataBytes;\n\n bitsPerPixel = 0;\n while ((lutBytes - 1) >>> bitsPerPixel) {\n bitsPerPixel++;\n }\n dataBytes = Math.ceil(numElements * bitsPerPixel / 8);\n dataWords = Math.ceil(dataBytes / 4);\n arrayBuf = new ArrayBuffer(dataWords * 4);\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, data.ptr, dataBytes));\n stuffedData = new Uint32Array(arrayBuf);\n data.ptr += dataBytes;\n if (fileVersion >= 3) {\n lutArr = BitStuffer.unstuffLUT2(lutData, numBits, lutBytes - 1, offset, scale, zMax);\n }\n else {\n lutArr = BitStuffer.unstuffLUT(lutData, numBits, lutBytes - 1, offset, scale, zMax);\n }\n //lutArr.unshift(0);\n if (fileVersion >= 3) {\n //BitStuffer.unstuff2(block, blockDataBuffer, headerInfo.zMax);\n BitStuffer.unstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements, lutArr);\n }\n else {\n BitStuffer.unstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements, lutArr);\n }\n }\n else {\n //console.debug(\"bitstuffer\");\n data.counter.bitstuffer++;\n bitsPerPixel = numBits;\n data.ptr += blockPtr;\n if (bitsPerPixel > 0) {\n dataBytes = Math.ceil(numElements * bitsPerPixel / 8);\n dataWords = Math.ceil(dataBytes / 4);\n arrayBuf = new ArrayBuffer(dataWords * 4);\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, data.ptr, dataBytes));\n stuffedData = new Uint32Array(arrayBuf);\n data.ptr += dataBytes;\n if (fileVersion >= 3) {\n if (offset == null) {\n BitStuffer.originalUnstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements);\n }\n else {\n BitStuffer.unstuff2(stuffedData, blockDataBuffer, bitsPerPixel, numElements, false, offset, scale, zMax);\n }\n }\n else {\n if (offset == null) {\n BitStuffer.originalUnstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements);\n }\n else {\n BitStuffer.unstuff(stuffedData, blockDataBuffer, bitsPerPixel, numElements, false, offset, scale, zMax);\n }\n }\n }\n }\n }\n\n },\n\n readTiles: function(input, data, OutPixelTypeArray) {\n var headerInfo = data.headerInfo;\n var width = headerInfo.width;\n var height = headerInfo.height;\n var microBlockSize = headerInfo.microBlockSize;\n var imageType = headerInfo.imageType;\n var dataTypeSize = Lerc2Helpers.getDataTypeSize(imageType);\n var numBlocksX = Math.ceil(width / microBlockSize);\n var numBlocksY = Math.ceil(height / microBlockSize);\n data.pixels.numBlocksY = numBlocksY;\n data.pixels.numBlocksX = numBlocksX;\n data.pixels.ptr = 0;\n var row = 0, col = 0, blockY = 0, blockX = 0, thisBlockHeight = 0, thisBlockWidth = 0, bytesLeft = 0, headerByte = 0, bits67 = 0, testCode = 0, outPtr = 0, outStride = 0, numBytes = 0, bytesleft = 0, z = 0, blockPtr = 0;\n var view, block, arrayBuf, store8, rawData;\n var blockEncoding;\n var blockDataBuffer = new OutPixelTypeArray(microBlockSize * microBlockSize);\n var lastBlockHeight = (height % microBlockSize) || microBlockSize;\n var lastBlockWidth = (width % microBlockSize) || microBlockSize;\n var offsetType, offset;\n var numDims = headerInfo.numDims, iDim;\n var mask = data.pixels.resultMask;\n var resultPixels = data.pixels.resultPixels;\n for (blockY = 0; blockY < numBlocksY; blockY++) {\n thisBlockHeight = (blockY !== numBlocksY - 1) ? microBlockSize : lastBlockHeight;\n for (blockX = 0; blockX < numBlocksX; blockX++) {\n //console.debug(\"y\" + blockY + \" x\" + blockX);\n thisBlockWidth = (blockX !== numBlocksX - 1) ? microBlockSize : lastBlockWidth;\n\n outPtr = blockY * width * microBlockSize + blockX * microBlockSize;\n outStride = width - thisBlockWidth;\n\n\n for (iDim = 0; iDim < numDims; iDim++) {\n if (numDims > 1) {\n resultPixels = new OutPixelTypeArray(data.pixels.resultPixels.buffer, width * height * iDim * dataTypeSize, width * height);\n }\n bytesLeft = input.byteLength - data.ptr;\n view = new DataView(input, data.ptr, Math.min(10, bytesLeft));\n block = {};\n blockPtr = 0;\n headerByte = view.getUint8(0);\n blockPtr++;\n bits67 = (headerByte >> 6) & 0xFF;\n testCode = (headerByte >> 2) & 15; // use bits 2345 for integrity check\n if (testCode !== (((blockX * microBlockSize) >> 3) & 15)) {\n throw \"integrity issue\";\n //return false;\n }\n\n blockEncoding = headerByte & 3;\n if (blockEncoding > 3) {\n data.ptr += blockPtr;\n throw \"Invalid block encoding (\" + blockEncoding + \")\";\n }\n else if (blockEncoding === 2) { //constant 0\n data.counter.constant++;\n data.ptr += blockPtr;\n continue;\n }\n else if (blockEncoding === 0) { //uncompressed\n data.counter.uncompressed++;\n data.ptr += blockPtr;\n numBytes = thisBlockHeight * thisBlockWidth * dataTypeSize;\n bytesleft = input.byteLength - data.ptr;\n numBytes = numBytes < bytesleft ? numBytes : bytesleft;\n //bit alignment\n arrayBuf = new ArrayBuffer((numBytes % dataTypeSize) === 0 ? numBytes : (numBytes + dataTypeSize - numBytes % dataTypeSize));\n store8 = new Uint8Array(arrayBuf);\n store8.set(new Uint8Array(input, data.ptr, numBytes));\n rawData = new OutPixelTypeArray(arrayBuf);\n z = 0;\n if (mask) {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n if (mask[outPtr]) {\n resultPixels[outPtr] = rawData[z++];\n }\n outPtr++;\n }\n outPtr += outStride;\n }\n }\n else {//all valid\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n resultPixels[outPtr++] = rawData[z++];\n }\n outPtr += outStride;\n }\n }\n data.ptr += z * dataTypeSize;\n }\n else { //1 or 3\n offsetType = Lerc2Helpers.getDataTypeUsed(imageType, bits67);\n offset = Lerc2Helpers.getOnePixel(block, blockPtr, offsetType, view);\n blockPtr += Lerc2Helpers.getDataTypeSize(offsetType);\n if (blockEncoding === 3) //constant offset value\n {\n data.ptr += blockPtr;\n data.counter.constantoffset++;\n //you can delete the following resultMask case in favor of performance because val is constant and users use nodata mask, otherwise nodatavalue post processing handles it too.\n //while the above statement is true, we're not doing it as we want to keep invalid pixel value at 0 rather than arbitrary values\n if (mask) {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n if (mask[outPtr]) {\n resultPixels[outPtr] = offset;\n }\n outPtr++;\n }\n outPtr += outStride;\n }\n }\n else {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n resultPixels[outPtr++] = offset;\n }\n outPtr += outStride;\n }\n }\n }\n else { //bitstuff encoding is 3\n data.ptr += blockPtr;\n //heavy lifting\n Lerc2Helpers.decodeBits(input, data, blockDataBuffer, offset, iDim);\n blockPtr = 0;\n if (mask) {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n if (mask[outPtr]) {\n resultPixels[outPtr] = blockDataBuffer[blockPtr++];\n }\n outPtr++;\n }\n outPtr += outStride;\n }\n }\n else {\n for (row = 0; row < thisBlockHeight; row++) {\n for (col = 0; col < thisBlockWidth; col++) {\n resultPixels[outPtr++] = blockDataBuffer[blockPtr++];\n }\n outPtr += outStride;\n }\n }\n }\n }\n }\n }\n }\n },\n\n /*****************\n * private methods (helper methods)\n *****************/\n\n formatFileInfo: function(data) {\n return {\n \"fileIdentifierString\": data.headerInfo.fileIdentifierString,\n \"fileVersion\": data.headerInfo.fileVersion,\n \"imageType\": data.headerInfo.imageType,\n \"height\": data.headerInfo.height,\n \"width\": data.headerInfo.width,\n \"numValidPixel\": data.headerInfo.numValidPixel,\n \"microBlockSize\": data.headerInfo.microBlockSize,\n \"blobSize\": data.headerInfo.blobSize,\n \"maxZError\": data.headerInfo.maxZError,\n \"pixelType\": Lerc2Helpers.getPixelType(data.headerInfo.imageType),\n \"eofOffset\": data.eofOffset,\n \"mask\": data.mask ? {\n \"numBytes\": data.mask.numBytes\n } : null,\n \"pixels\": {\n \"numBlocksX\": data.pixels.numBlocksX,\n \"numBlocksY\": data.pixels.numBlocksY,\n //\"numBytes\": data.pixels.numBytes,\n \"maxValue\": data.headerInfo.zMax,\n \"minValue\": data.headerInfo.zMin,\n \"noDataValue\": data.noDataValue\n }\n };\n },\n\n constructConstantSurface: function(data) {\n var val = data.headerInfo.zMax;\n var numDims = data.headerInfo.numDims;\n var numPixels = data.headerInfo.height * data.headerInfo.width;\n var numPixelAllDims = numPixels * numDims;\n var i=0, k = 0, nStart=0;\n var mask = data.pixels.resultMask;\n if (mask) {\n if (numDims > 1) {\n for (i=0; i < numDims; i++) {\n nStart = i * numPixels;\n for (k = 0; k < numPixels; k++) {\n if (mask[k]) {\n data.pixels.resultPixels[nStart + k] = val;\n }\n }\n }\n }\n else {\n for (k = 0; k < numPixels; k++) {\n if (mask[k]) {\n data.pixels.resultPixels[k] = val;\n }\n }\n }\n }\n else {\n if (data.pixels.resultPixels.fill) {\n data.pixels.resultPixels.fill(val);\n }\n else {\n for (k = 0; k < numPixelAllDims; k++) {\n data.pixels.resultPixels[k] = val;\n }\n }\n }\n return;\n },\n\n getDataTypeArray: function(t) {\n var tp;\n switch (t) {\n case 0: //char\n tp = Int8Array;\n break;\n case 1: //byte\n tp = Uint8Array;\n break;\n case 2: //short\n tp = Int16Array;\n break;\n case 3: //ushort\n tp = Uint16Array;\n break;\n case 4:\n tp = Int32Array;\n break;\n case 5:\n tp = Uint32Array;\n break;\n case 6:\n tp = Float32Array;\n break;\n case 7:\n tp = Float64Array;\n break;\n default:\n tp = Float32Array;\n }\n return tp;\n },\n\n getPixelType: function(t) {\n var tp;\n switch (t) {\n case 0: //char\n tp = \"S8\";\n break;\n case 1: //byte\n tp = \"U8\";\n break;\n case 2: //short\n tp = \"S16\";\n break;\n case 3: //ushort\n tp = \"U16\";\n break;\n case 4:\n tp = \"S32\";\n break;\n case 5:\n tp = \"U32\";\n break;\n case 6:\n tp = \"F32\";\n break;\n case 7:\n tp = \"F64\"; //not supported\n break;\n default:\n tp = \"F32\";\n }\n return tp;\n },\n\n isValidPixelValue: function(t, val) {\n if (val == null) {\n return false;\n }\n var isValid;\n switch (t) {\n case 0: //char\n isValid = val >= -128 && val <= 127;\n break;\n case 1: //byte (unsigned char)\n isValid = val >= 0 && val <= 255;\n break;\n case 2: //short\n isValid = val >= -32768 && val <= 32767;\n break;\n case 3: //ushort\n isValid = val >= 0 && val <= 65536;\n break;\n case 4: //int 32\n isValid = val >= -2147483648 && val <= 2147483647;\n break;\n case 5: //uinit 32\n isValid = val >= 0 && val <= 4294967296;\n break;\n case 6:\n isValid = val >= -3.4027999387901484e+38 && val <= 3.4027999387901484e+38;\n break;\n case 7:\n isValid = val >= 5e-324 && val <= 1.7976931348623157e+308;\n break;\n default:\n isValid = false;\n }\n return isValid;\n },\n\n getDataTypeSize: function(t) {\n var s = 0;\n switch (t) {\n case 0: //ubyte\n case 1: //byte\n s = 1;\n break;\n case 2: //short\n case 3: //ushort\n s = 2;\n break;\n case 4:\n case 5:\n case 6:\n s = 4;\n break;\n case 7:\n s = 8;\n break;\n default:\n s = t;\n }\n return s;\n },\n\n getDataTypeUsed: function(dt, tc) {\n var t = dt;\n switch (dt) {\n case 2: //short\n case 4: //long\n t = dt - tc;\n break;\n case 3: //ushort\n case 5: //ulong\n t = dt - 2 * tc;\n break;\n case 6: //float\n if (0 === tc) {\n t = dt;\n }\n else if (1 === tc) {\n t = 2;\n }\n else {\n t = 1;//byte\n }\n break;\n case 7: //double\n if (0 === tc) {\n t = dt;\n }\n else {\n t = dt - 2 * tc + 1;\n }\n break;\n default:\n t = dt;\n break;\n }\n return t;\n },\n\n getOnePixel: function(block, blockPtr, offsetType, view) {\n var temp = 0;\n switch (offsetType) {\n case 0: //char\n temp = view.getInt8(blockPtr);\n break;\n case 1: //byte\n temp = view.getUint8(blockPtr);\n break;\n case 2:\n temp = view.getInt16(blockPtr, true);\n break;\n case 3:\n temp = view.getUint16(blockPtr, true);\n break;\n case 4:\n temp = view.getInt32(blockPtr, true);\n break;\n case 5:\n temp = view.getUInt32(blockPtr, true);\n break;\n case 6:\n temp = view.getFloat32(blockPtr, true);\n break;\n case 7:\n //temp = view.getFloat64(blockPtr, true);\n //blockPtr += 8;\n //lerc2 encoding doesnt handle float 64, force to float32???\n temp = view.getFloat64(blockPtr, true);\n break;\n default:\n throw (\"the decoder does not understand this pixel type\");\n }\n return temp;\n }\n };\n\n /***************************************************\n *private class for a tree node. Huffman code is in Lerc2Helpers\n ****************************************************/\n var TreeNode = function(val, left, right) {\n this.val = val;\n this.left = left;\n this.right = right;\n };\n\n var Lerc2Decode = {\n /*\n * ********removed options compared to LERC1. We can bring some of them back if needed.\n * removed pixel type. LERC2 is typed and doesn't require user to give pixel type\n * changed encodedMaskData to maskData. LERC2 's js version make it faster to use maskData directly.\n * removed returnMask. mask is used by LERC2 internally and is cost free. In case of user input mask, it's returned as well and has neglible cost.\n * removed nodatavalue. Because LERC2 pixels are typed, nodatavalue will sacrify a useful value for many types (8bit, 16bit) etc,\n * user has to be knowledgable enough about raster and their data to avoid usability issues. so nodata value is simply removed now.\n * We can add it back later if their's a clear requirement.\n * removed encodedMask. This option was not implemented in LercDecode. It can be done after decoding (less efficient)\n * removed computeUsedBitDepths.\n *\n *\n * response changes compared to LERC1\n * 1. encodedMaskData is not available\n * 2. noDataValue is optional (returns only if user's noDataValue is with in the valid data type range)\n * 3. maskData is always available\n */\n /*****************\n * public properties\n ******************/\n //HUFFMAN_LUT_BITS_MAX: 12, //use 2^12 lut, not configurable\n\n /*****************\n * public methods\n *****************/\n\n /**\n * Decode a LERC2 byte stream and return an object containing the pixel data and optional metadata.\n *\n * @param {ArrayBuffer} input The LERC input byte stream\n * @param {object} [options] options Decoding options\n * @param {number} [options.inputOffset] The number of bytes to skip in the input byte stream. A valid LERC file is expected at that position\n * @param {boolean} [options.returnFileInfo] If true, the return value will have a fileInfo property that contains metadata obtained from the LERC headers and the decoding process\n */\n decode: function(/*byte array*/ input, /*object*/ options) {\n //currently there's a bug in the sparse array, so please do not set to false\n options = options || {};\n var noDataValue = options.noDataValue;\n\n //initialize\n var i = 0, data = {};\n data.ptr = options.inputOffset || 0;\n data.pixels = {};\n\n // File header\n if (!Lerc2Helpers.readHeaderInfo(input, data)) {\n return;\n }\n var headerInfo = data.headerInfo;\n var fileVersion = headerInfo.fileVersion;\n var OutPixelTypeArray = Lerc2Helpers.getDataTypeArray(headerInfo.imageType);\n\n // Mask Header\n Lerc2Helpers.readMask(input, data);\n if (headerInfo.numValidPixel !== headerInfo.width * headerInfo.height && !data.pixels.resultMask) {\n data.pixels.resultMask = options.maskData;\n }\n\n var numPixels = headerInfo.width * headerInfo.height;\n data.pixels.resultPixels = new OutPixelTypeArray(numPixels * headerInfo.numDims);\n\n data.counter = {\n onesweep: 0,\n uncompressed: 0,\n lut: 0,\n bitstuffer: 0,\n constant: 0,\n constantoffset: 0\n };\n if (headerInfo.numValidPixel !== 0) {\n //not tested\n if (headerInfo.zMax === headerInfo.zMin) //constant surface\n {\n Lerc2Helpers.constructConstantSurface(data);\n }\n else if (fileVersion >= 4 && Lerc2Helpers.checkMinMaxRanges(input, data)) {\n Lerc2Helpers.constructConstantSurface(data);\n }\n else {\n var view = new DataView(input, data.ptr, 2);\n var bReadDataOneSweep = view.getUint8(0);\n data.ptr++;\n if (bReadDataOneSweep) {\n //console.debug(\"OneSweep\");\n Lerc2Helpers.readDataOneSweep(input, data, OutPixelTypeArray);\n }\n else {\n //lerc2.1: //bitstuffing + lut\n //lerc2.2: //bitstuffing + lut + huffman\n //lerc2.3: new bitstuffer\n if (fileVersion > 1 && headerInfo.imageType <= 1 && Math.abs(headerInfo.maxZError - 0.5) < 0.00001) {\n //this is 2.x plus 8 bit (unsigned and signed) data, possiblity of Huffman\n var flagHuffman = view.getUint8(1);\n data.ptr++;\n data.encodeMode = flagHuffman;\n if (flagHuffman > 2 || (fileVersion < 4 && flagHuffman > 1)) {\n throw \"Invalid Huffman flag \" + flagHuffman;\n }\n if (flagHuffman) {//1 - delta Huffman, 2 - Huffman\n //console.log(\"Huffman\");\n Lerc2Helpers.readHuffman(input, data, OutPixelTypeArray);\n }\n else {\n //console.log(\"Tiles\");\n Lerc2Helpers.readTiles(input, data, OutPixelTypeArray);\n }\n }\n else { //lerc2.x non-8 bit data\n //console.log(\"Tiles\");\n Lerc2Helpers.readTiles(input, data, OutPixelTypeArray);\n }\n }\n }\n }\n\n data.eofOffset = data.ptr;\n var diff;\n if (options.inputOffset) {\n diff = data.headerInfo.blobSize + options.inputOffset - data.ptr;\n if (Math.abs(diff) >= 1) {\n //console.debug(\"incorrect eof: dataptr \" + data.ptr + \" offset \" + options.inputOffset + \" blobsize \" + data.headerInfo.blobSize + \" diff: \" + diff);\n data.eofOffset = options.inputOffset + data.headerInfo.blobSize;\n }\n }\n else {\n diff = data.headerInfo.blobSize - data.ptr;\n if (Math.abs(diff) >= 1) {\n //console.debug(\"incorrect first band eof: dataptr \" + data.ptr + \" blobsize \" + data.headerInfo.blobSize + \" diff: \" + diff);\n data.eofOffset = data.headerInfo.blobSize;\n }\n }\n\n var result = {\n width: headerInfo.width,\n height: headerInfo.height,\n pixelData: data.pixels.resultPixels,\n minValue: headerInfo.zMin,\n maxValue: headerInfo.zMax,\n validPixelCount: headerInfo.numValidPixel,\n dimCount: headerInfo.numDims,\n dimStats: {\n minValues: headerInfo.minValues,\n maxValues: headerInfo.maxValues\n },\n maskData: data.pixels.resultMask\n //noDataValue: noDataValue\n };\n\n //we should remove this if there's no existing client\n //optional noDataValue processing, it's user's responsiblity\n if (data.pixels.resultMask && Lerc2Helpers.isValidPixelValue(headerInfo.imageType, noDataValue)) {\n var mask = data.pixels.resultMask;\n for (i = 0; i < numPixels; i++) {\n if (!mask[i]) {\n result.pixelData[i] = noDataValue;\n }\n }\n result.noDataValue = noDataValue;\n }\n data.noDataValue = noDataValue;\n if (options.returnFileInfo) {\n result.fileInfo = Lerc2Helpers.formatFileInfo(data);\n }\n return result;\n },\n\n getBandCount: function(/*byte array*/ input) {\n var count = 0;\n var i = 0;\n var temp = {};\n temp.ptr = 0;\n temp.pixels = {};\n while (i < input.byteLength - 58) {\n Lerc2Helpers.readHeaderInfo(input, temp);\n i += temp.headerInfo.blobSize;\n count++;\n temp.ptr = i;\n }\n return count;\n }\n };\n\n return Lerc2Decode;\n })();\n\n var isPlatformLittleEndian = (function() {\n var a = new ArrayBuffer(4);\n var b = new Uint8Array(a);\n var c = new Uint32Array(a);\n c[0] = 1;\n return b[0] === 1;\n })();\n\n var Lerc = {\n /************wrapper**********************************************/\n /**\n * A wrapper for decoding both LERC1 and LERC2 byte streams capable of handling multiband pixel blocks for various pixel types.\n *\n * @alias module:Lerc\n * @param {ArrayBuffer} input The LERC input byte stream\n * @param {object} [options] The decoding options below are optional.\n * @param {number} [options.inputOffset] The number of bytes to skip in the input byte stream. A valid Lerc file is expected at that position.\n * @param {string} [options.pixelType] (LERC1 only) Default value is F32. Valid pixel types for input are U8/S8/S16/U16/S32/U32/F32.\n * @param {number} [options.noDataValue] (LERC1 only). It is recommended to use the returned mask instead of setting this value.\n * @returns {{width, height, pixels, pixelType, mask, statistics}}\n * @property {number} width Width of decoded image.\n * @property {number} height Height of decoded image.\n * @property {array} pixels [band1, band2, …] Each band is a typed array of width*height.\n * @property {string} pixelType The type of pixels represented in the output.\n * @property {mask} mask Typed array with a size of width*height, or null if all pixels are valid.\n * @property {array} statistics [statistics_band1, statistics_band2, …] Each element is a statistics object representing min and max values\n **/\n decode: function(encodedData, options) {\n if (!isPlatformLittleEndian) {\n throw \"Big endian system is not supported.\";\n }\n options = options || {};\n var inputOffset = options.inputOffset || 0;\n var fileIdView = new Uint8Array(encodedData, inputOffset, 10);\n var fileIdentifierString = String.fromCharCode.apply(null, fileIdView);\n var lerc, majorVersion;\n if (fileIdentifierString.trim() === \"CntZImage\") {\n lerc = LercDecode;\n majorVersion = 1;\n }\n else if (fileIdentifierString.substring(0, 5) === \"Lerc2\") {\n lerc = Lerc2Decode;\n majorVersion = 2;\n }\n else {\n throw \"Unexpected file identifier string: \" + fileIdentifierString;\n }\n\n var iPlane = 0, eof = encodedData.byteLength - 10, encodedMaskData, bandMasks = [], bandMask, maskData;\n var decodedPixelBlock = {\n width: 0,\n height: 0,\n pixels: [],\n pixelType: options.pixelType,\n mask: null,\n statistics: []\n };\n\n while (inputOffset < eof) {\n var result = lerc.decode(encodedData, {\n inputOffset: inputOffset,//for both lerc1 and lerc2\n encodedMaskData: encodedMaskData,//lerc1 only\n maskData: maskData,//lerc2 only\n returnMask: iPlane === 0 ? true : false,//lerc1 only\n returnEncodedMask: iPlane === 0 ? true : false,//lerc1 only\n returnFileInfo: true,//for both lerc1 and lerc2\n pixelType: options.pixelType || null,//lerc1 only\n noDataValue: options.noDataValue || null//lerc1 only\n });\n\n inputOffset = result.fileInfo.eofOffset;\n if (iPlane === 0) {\n encodedMaskData = result.encodedMaskData;//lerc1\n maskData = result.maskData;//lerc2\n decodedPixelBlock.width = result.width;\n decodedPixelBlock.height = result.height;\n decodedPixelBlock.dimCount = result.dimCount || 1;\n //decodedPixelBlock.dimStats = decodedPixelBlock.dimStats;\n decodedPixelBlock.pixelType = result.pixelType || result.fileInfo.pixelType;\n decodedPixelBlock.mask = result.maskData;\n }\n if (majorVersion >1 && result.fileInfo.mask && result.fileInfo.mask.numBytes > 0) {\n bandMasks.push(result.maskData);\n }\n\n iPlane++;\n decodedPixelBlock.pixels.push(result.pixelData);\n decodedPixelBlock.statistics.push({\n minValue: result.minValue,\n maxValue: result.maxValue,\n noDataValue: result.noDataValue,\n dimStats: result.dimStats\n });\n }\n var i, j, numPixels;\n if (majorVersion > 1 && bandMasks.length > 1) {\n numPixels = decodedPixelBlock.width * decodedPixelBlock.height;\n decodedPixelBlock.bandMasks = bandMasks;\n maskData = new Uint8Array(numPixels);\n maskData.set(bandMasks[0]);\n for (i = 1; i < bandMasks.length; i++) {\n bandMask = bandMasks[i];\n for (j = 0; j < numPixels; j++) {\n maskData[j] = maskData[j] & bandMask[j];\n }\n }\n decodedPixelBlock.maskData = maskData;\n }\n\n return decodedPixelBlock;\n }\n };\n\n if (typeof define === \"function\" && define.amd) {/* jshint ignore:line */\n //amd loaders such as dojo and requireJS\n //http://wiki.commonjs.org/wiki/Modules/AsynchronousDefinition\n define([], function() { return Lerc; });/* jshint ignore:line */\n }\n else if (typeof module !== \"undefined\" && module.exports) {/* jshint ignore:line */\n //commonJS module 1.0/1.1/1.1.1 systems, such as nodeJS\n //http://wiki.commonjs.org/wiki/Modules\n module.exports = Lerc;/* jshint ignore:line */\n }\n else {\n //assign to this, most likely window\n this.Lerc = Lerc;\n }\n\n})();\n","import Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport HeightmapEncoding from \"../Core/HeightmapEncoding.js\";\r\nimport HeightmapTessellator from \"../Core/HeightmapTessellator.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport RuntimeError from \"../Core/RuntimeError.js\";\r\nimport Lerc from \"lerc\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nfunction createVerticesFromHeightmap(parameters, transferableObjects) {\r\n // LERC encoded buffers must be decoded, then we can process them like normal\r\n if (parameters.encoding === HeightmapEncoding.LERC) {\r\n let result;\r\n try {\r\n result = Lerc.decode(parameters.heightmap);\r\n } catch (error) {\r\n throw new RuntimeError(error);\r\n }\r\n\r\n const lercStatistics = result.statistics[0];\r\n if (lercStatistics.minValue === Number.MAX_VALUE) {\r\n throw new RuntimeError(\"Invalid tile data\");\r\n }\r\n\r\n parameters.heightmap = result.pixels[0];\r\n parameters.width = result.width;\r\n parameters.height = result.height;\r\n }\r\n\r\n parameters.ellipsoid = Ellipsoid.clone(parameters.ellipsoid);\r\n parameters.rectangle = Rectangle.clone(parameters.rectangle);\r\n\r\n const statistics = HeightmapTessellator.computeVertices(parameters);\r\n const vertices = statistics.vertices;\r\n transferableObjects.push(vertices.buffer);\r\n\r\n return {\r\n vertices: vertices.buffer,\r\n numberOfAttributes: statistics.encoding.stride,\r\n minimumHeight: statistics.minimumHeight,\r\n maximumHeight: statistics.maximumHeight,\r\n gridWidth: parameters.width,\r\n gridHeight: parameters.height,\r\n boundingSphere3D: statistics.boundingSphere3D,\r\n orientedBoundingBox: statistics.orientedBoundingBox,\r\n occludeePointInScaledSpace: statistics.occludeePointInScaledSpace,\r\n encoding: statistics.encoding,\r\n westIndicesSouthToNorth: statistics.westIndicesSouthToNorth,\r\n southIndicesEastToWest: statistics.southIndicesEastToWest,\r\n eastIndicesNorthToSouth: statistics.eastIndicesNorthToSouth,\r\n northIndicesWestToEast: statistics.northIndicesWestToEast,\r\n };\r\n}\r\nexport default createTaskProcessorWorker(createVerticesFromHeightmap);\r\n"],"names":["Cartesian3","Matrix4","defined","DeveloperError","CesiumMath","defaultValue","Ellipsoid","Rectangle","Transforms","WebMercatorProjection","Cartesian2","BoundingSphere","OrientedBoundingBox","EllipsoidalOccluder","AxisAlignedBoundingBox","TerrainEncoding","HeightmapEncoding","RuntimeError","HeightmapTessellator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA,MAAM,iBAAiB,GAAG;EAC1B;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,EAAE,CAAC;AACT;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,EAAE,CAAC;EACT,CAAC,CAAC;AACF,4BAAe,MAAM,CAAC,MAAM,CAAC,iBAAiB,CAAC;;ECP/C;EACA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAChC;EACA;EACA;EACA;EACA;EACA;EACA,oBAAoB,CAAC,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;EACvD,EAAE,WAAW,EAAE,GAAG;EAClB,EAAE,YAAY,EAAE,GAAG;EACnB,EAAE,iBAAiB,EAAE,CAAC;EACtB,EAAE,MAAM,EAAE,CAAC;EACX,EAAE,iBAAiB,EAAE,KAAK;EAC1B,EAAE,WAAW,EAAE,KAAK;EACpB,CAAC,CAAC,CAAC;AACH;EACA,MAAM,iBAAiB,GAAG,IAAIA,kBAAU,EAAE,CAAC;EAC3C,MAAM,cAAc,GAAG,IAAIC,eAAO,EAAE,CAAC;EACrC,MAAM,cAAc,GAAG,IAAID,kBAAU,EAAE,CAAC;EACxC,MAAM,cAAc,GAAG,IAAIA,kBAAU,EAAE,CAAC;AACxC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,oBAAoB,CAAC,eAAe,GAAG,UAAU,OAAO,EAAE;EAC1D;EACA,EAAE,IAAI,CAACE,oBAAO,CAAC,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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js b/debug/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js deleted file mode 100644 index 2a2e3fb..0000000 --- a/debug/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js +++ /dev/null @@ -1,1020 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./AxisAlignedBoundingBox-50342d27', './Matrix2-036c77dd', './Matrix3-f22b0303', './defaultValue-0ab18f7d', './TerrainEncoding-c7d764e4', './IndexDatatype-b4e5cf89', './Math-9be8b918', './Check-d10e5f2e', './Transforms-11fb6b0a', './WebMercatorProjection-306f7acc', './createTaskProcessorWorker', './RuntimeError-e5c6a8b9', './AttributeCompression-e9888cb8', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './combine-4598d225'], (function (AxisAlignedBoundingBox, Matrix2, Matrix3, defaultValue, TerrainEncoding, IndexDatatype, Math$1, Check, Transforms, WebMercatorProjection, createTaskProcessorWorker, RuntimeError, AttributeCompression, ComponentDatatype, WebGLConstants, combine) { 'use strict'; - - /** - * Provides terrain or other geometry for the surface of an ellipsoid. The surface geometry is - * organized into a pyramid of tiles according to a {@link TilingScheme}. This type describes an - * interface and is not intended to be instantiated directly. - * - * @alias TerrainProvider - * @constructor - * - * @see EllipsoidTerrainProvider - * @see CesiumTerrainProvider - * @see VRTheWorldTerrainProvider - * @see GoogleEarthEnterpriseTerrainProvider - */ - function TerrainProvider() { - Check.DeveloperError.throwInstantiationError(); - } - - Object.defineProperties(TerrainProvider.prototype, { - /** - * Gets an event that is raised when the terrain provider encounters an asynchronous error.. By subscribing - * to the event, you will be notified of the error and can potentially recover from it. Event listeners - * are passed an instance of {@link TileProviderError}. - * @memberof TerrainProvider.prototype - * @type {Event} - * @readonly - */ - errorEvent: { - get: Check.DeveloperError.throwInstantiationError, - }, - - /** - * Gets the credit to display when this terrain provider is active. Typically this is used to credit - * the source of the terrain. This function should - * not be called before {@link TerrainProvider#ready} returns true. - * @memberof TerrainProvider.prototype - * @type {Credit} - * @readonly - */ - credit: { - get: Check.DeveloperError.throwInstantiationError, - }, - - /** - * Gets the tiling scheme used by the provider. This function should - * not be called before {@link TerrainProvider#ready} returns true. - * @memberof TerrainProvider.prototype - * @type {TilingScheme} - * @readonly - */ - tilingScheme: { - get: Check.DeveloperError.throwInstantiationError, - }, - - /** - * Gets a value indicating whether or not the provider is ready for use. - * @memberof TerrainProvider.prototype - * @type {Boolean} - * @readonly - */ - ready: { - get: Check.DeveloperError.throwInstantiationError, - }, - - /** - * Gets a promise that resolves to true when the provider is ready for use. - * @memberof TerrainProvider.prototype - * @type {Promise.} - * @readonly - */ - readyPromise: { - get: Check.DeveloperError.throwInstantiationError, - }, - - /** - * Gets a value indicating whether or not the provider includes a water mask. The water mask - * indicates which areas of the globe are water rather than land, so they can be rendered - * as a reflective surface with animated waves. This function should not be - * called before {@link TerrainProvider#ready} returns true. - * @memberof TerrainProvider.prototype - * @type {Boolean} - * @readonly - */ - hasWaterMask: { - get: Check.DeveloperError.throwInstantiationError, - }, - - /** - * Gets a value indicating whether or not the requested tiles include vertex normals. - * This function should not be called before {@link TerrainProvider#ready} returns true. - * @memberof TerrainProvider.prototype - * @type {Boolean} - * @readonly - */ - hasVertexNormals: { - get: Check.DeveloperError.throwInstantiationError, - }, - - /** - * Gets an object that can be used to determine availability of terrain from this provider, such as - * at points and in rectangles. This function should not be called before - * {@link TerrainProvider#ready} returns true. This property may be undefined if availability - * information is not available. - * @memberof TerrainProvider.prototype - * @type {TileAvailability} - * @readonly - */ - availability: { - get: Check.DeveloperError.throwInstantiationError, - }, - }); - - const regularGridIndicesCache = []; - - /** - * Gets a list of indices for a triangle mesh representing a regular grid. Calling - * this function multiple times with the same grid width and height returns the - * same list of indices. The total number of vertices must be less than or equal - * to 65536. - * - * @param {Number} width The number of vertices in the regular grid in the horizontal direction. - * @param {Number} height The number of vertices in the regular grid in the vertical direction. - * @returns {Uint16Array|Uint32Array} The list of indices. Uint16Array gets returned for 64KB or less and Uint32Array for 4GB or less. - */ - TerrainProvider.getRegularGridIndices = function (width, height) { - //>>includeStart('debug', pragmas.debug); - if (width * height >= Math$1.CesiumMath.FOUR_GIGABYTES) { - throw new Check.DeveloperError( - "The total number of vertices (width * height) must be less than 4,294,967,296." - ); - } - //>>includeEnd('debug'); - - let byWidth = regularGridIndicesCache[width]; - if (!defaultValue.defined(byWidth)) { - regularGridIndicesCache[width] = byWidth = []; - } - - let indices = byWidth[height]; - if (!defaultValue.defined(indices)) { - if (width * height < Math$1.CesiumMath.SIXTY_FOUR_KILOBYTES) { - indices = byWidth[height] = new Uint16Array( - (width - 1) * (height - 1) * 6 - ); - } else { - indices = byWidth[height] = new Uint32Array( - (width - 1) * (height - 1) * 6 - ); - } - addRegularGridIndices(width, height, indices, 0); - } - - return indices; - }; - - const regularGridAndEdgeIndicesCache = []; - - /** - * @private - */ - TerrainProvider.getRegularGridIndicesAndEdgeIndices = function (width, height) { - //>>includeStart('debug', pragmas.debug); - if (width * height >= Math$1.CesiumMath.FOUR_GIGABYTES) { - throw new Check.DeveloperError( - "The total number of vertices (width * height) must be less than 4,294,967,296." - ); - } - //>>includeEnd('debug'); - - let byWidth = regularGridAndEdgeIndicesCache[width]; - if (!defaultValue.defined(byWidth)) { - regularGridAndEdgeIndicesCache[width] = byWidth = []; - } - - let indicesAndEdges = byWidth[height]; - if (!defaultValue.defined(indicesAndEdges)) { - const indices = TerrainProvider.getRegularGridIndices(width, height); - - const edgeIndices = getEdgeIndices(width, height); - const westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth; - const southIndicesEastToWest = edgeIndices.southIndicesEastToWest; - const eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth; - const northIndicesWestToEast = edgeIndices.northIndicesWestToEast; - - indicesAndEdges = byWidth[height] = { - indices: indices, - westIndicesSouthToNorth: westIndicesSouthToNorth, - southIndicesEastToWest: southIndicesEastToWest, - eastIndicesNorthToSouth: eastIndicesNorthToSouth, - northIndicesWestToEast: northIndicesWestToEast, - }; - } - - return indicesAndEdges; - }; - - const regularGridAndSkirtAndEdgeIndicesCache = []; - - /** - * @private - */ - TerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices = function ( - width, - height - ) { - //>>includeStart('debug', pragmas.debug); - if (width * height >= Math$1.CesiumMath.FOUR_GIGABYTES) { - throw new Check.DeveloperError( - "The total number of vertices (width * height) must be less than 4,294,967,296." - ); - } - //>>includeEnd('debug'); - - let byWidth = regularGridAndSkirtAndEdgeIndicesCache[width]; - if (!defaultValue.defined(byWidth)) { - regularGridAndSkirtAndEdgeIndicesCache[width] = byWidth = []; - } - - let indicesAndEdges = byWidth[height]; - if (!defaultValue.defined(indicesAndEdges)) { - const gridVertexCount = width * height; - const gridIndexCount = (width - 1) * (height - 1) * 6; - const edgeVertexCount = width * 2 + height * 2; - const edgeIndexCount = Math.max(0, edgeVertexCount - 4) * 6; - const vertexCount = gridVertexCount + edgeVertexCount; - const indexCount = gridIndexCount + edgeIndexCount; - - const edgeIndices = getEdgeIndices(width, height); - const westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth; - const southIndicesEastToWest = edgeIndices.southIndicesEastToWest; - const eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth; - const northIndicesWestToEast = edgeIndices.northIndicesWestToEast; - - const indices = IndexDatatype.IndexDatatype.createTypedArray(vertexCount, indexCount); - addRegularGridIndices(width, height, indices, 0); - TerrainProvider.addSkirtIndices( - westIndicesSouthToNorth, - southIndicesEastToWest, - eastIndicesNorthToSouth, - northIndicesWestToEast, - gridVertexCount, - indices, - gridIndexCount - ); - - indicesAndEdges = byWidth[height] = { - indices: indices, - westIndicesSouthToNorth: westIndicesSouthToNorth, - southIndicesEastToWest: southIndicesEastToWest, - eastIndicesNorthToSouth: eastIndicesNorthToSouth, - northIndicesWestToEast: northIndicesWestToEast, - indexCountWithoutSkirts: gridIndexCount, - }; - } - - return indicesAndEdges; - }; - - /** - * @private - */ - TerrainProvider.addSkirtIndices = function ( - westIndicesSouthToNorth, - southIndicesEastToWest, - eastIndicesNorthToSouth, - northIndicesWestToEast, - vertexCount, - indices, - offset - ) { - let vertexIndex = vertexCount; - offset = addSkirtIndices( - westIndicesSouthToNorth, - vertexIndex, - indices, - offset - ); - vertexIndex += westIndicesSouthToNorth.length; - offset = addSkirtIndices( - southIndicesEastToWest, - vertexIndex, - indices, - offset - ); - vertexIndex += southIndicesEastToWest.length; - offset = addSkirtIndices( - eastIndicesNorthToSouth, - vertexIndex, - indices, - offset - ); - vertexIndex += eastIndicesNorthToSouth.length; - addSkirtIndices(northIndicesWestToEast, vertexIndex, indices, offset); - }; - - function getEdgeIndices(width, height) { - const westIndicesSouthToNorth = new Array(height); - const southIndicesEastToWest = new Array(width); - const eastIndicesNorthToSouth = new Array(height); - const northIndicesWestToEast = new Array(width); - - let i; - for (i = 0; i < width; ++i) { - northIndicesWestToEast[i] = i; - southIndicesEastToWest[i] = width * height - 1 - i; - } - - for (i = 0; i < height; ++i) { - eastIndicesNorthToSouth[i] = (i + 1) * width - 1; - westIndicesSouthToNorth[i] = (height - i - 1) * width; - } - - return { - westIndicesSouthToNorth: westIndicesSouthToNorth, - southIndicesEastToWest: southIndicesEastToWest, - eastIndicesNorthToSouth: eastIndicesNorthToSouth, - northIndicesWestToEast: northIndicesWestToEast, - }; - } - - function addRegularGridIndices(width, height, indices, offset) { - let index = 0; - for (let j = 0; j < height - 1; ++j) { - for (let i = 0; i < width - 1; ++i) { - const upperLeft = index; - const lowerLeft = upperLeft + width; - const lowerRight = lowerLeft + 1; - const upperRight = upperLeft + 1; - - indices[offset++] = upperLeft; - indices[offset++] = lowerLeft; - indices[offset++] = upperRight; - indices[offset++] = upperRight; - indices[offset++] = lowerLeft; - indices[offset++] = lowerRight; - - ++index; - } - ++index; - } - } - - function addSkirtIndices(edgeIndices, vertexIndex, indices, offset) { - let previousIndex = edgeIndices[0]; - - const length = edgeIndices.length; - for (let i = 1; i < length; ++i) { - const index = edgeIndices[i]; - - indices[offset++] = previousIndex; - indices[offset++] = index; - indices[offset++] = vertexIndex; - - indices[offset++] = vertexIndex; - indices[offset++] = index; - indices[offset++] = vertexIndex + 1; - - previousIndex = index; - ++vertexIndex; - } - - return offset; - } - - /** - * Specifies the quality of terrain created from heightmaps. A value of 1.0 will - * ensure that adjacent heightmap vertices are separated by no more than - * {@link Globe.maximumScreenSpaceError} screen pixels and will probably go very slowly. - * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the - * screen pixels between adjacent heightmap vertices and thus rendering more quickly. - * @type {Number} - */ - TerrainProvider.heightmapTerrainQuality = 0.25; - - /** - * Determines an appropriate geometric error estimate when the geometry comes from a heightmap. - * - * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached. - * @param {Number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile. - * @param {Number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero. - * @returns {Number} An estimated geometric error. - */ - TerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap = function ( - ellipsoid, - tileImageWidth, - numberOfTilesAtLevelZero - ) { - return ( - (ellipsoid.maximumRadius * - 2 * - Math.PI * - TerrainProvider.heightmapTerrainQuality) / - (tileImageWidth * numberOfTilesAtLevelZero) - ); - }; - - /** - * Requests the geometry for a given tile. This function should not be called before - * {@link TerrainProvider#ready} returns true. The result must include terrain data and - * may optionally include a water mask and an indication of which child tiles are available. - * @function - * - * @param {Number} x The X coordinate of the tile for which to request geometry. - * @param {Number} y The Y coordinate of the tile for which to request geometry. - * @param {Number} level The level of the tile for which to request geometry. - * @param {Request} [request] The request object. Intended for internal use only. - * - * @returns {Promise.|undefined} A promise for the requested geometry. If this method - * returns undefined instead of a promise, it is an indication that too many requests are already - * pending and the request will be retried later. - */ - TerrainProvider.prototype.requestTileGeometry = - Check.DeveloperError.throwInstantiationError; - - /** - * Gets the maximum geometric error allowed in a tile at a given level. This function should not be - * called before {@link TerrainProvider#ready} returns true. - * @function - * - * @param {Number} level The tile level for which to get the maximum geometric error. - * @returns {Number} The maximum geometric error. - */ - TerrainProvider.prototype.getLevelMaximumGeometricError = - Check.DeveloperError.throwInstantiationError; - - /** - * Determines whether data for a tile is available to be loaded. - * @function - * - * @param {Number} x The X coordinate of the tile for which to request geometry. - * @param {Number} y The Y coordinate of the tile for which to request geometry. - * @param {Number} level The level of the tile for which to request geometry. - * @returns {Boolean|undefined} Undefined if not supported by the terrain provider, otherwise true or false. - */ - TerrainProvider.prototype.getTileDataAvailable = - Check.DeveloperError.throwInstantiationError; - - /** - * Makes sure we load availability data for a tile - * @function - * - * @param {Number} x The X coordinate of the tile for which to request geometry. - * @param {Number} y The Y coordinate of the tile for which to request geometry. - * @param {Number} level The level of the tile for which to request geometry. - * @returns {undefined|Promise} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded - */ - TerrainProvider.prototype.loadTileDataAvailability = - Check.DeveloperError.throwInstantiationError; - - /** - * A function that is called when an error occurs. - * @callback TerrainProvider.ErrorEvent - * - * @this TerrainProvider - * @param {TileProviderError} err An object holding details about the error that occurred. - */ - - const maxShort = 32767; - - const cartesian3Scratch = new Matrix3.Cartesian3(); - const scratchMinimum = new Matrix3.Cartesian3(); - const scratchMaximum = new Matrix3.Cartesian3(); - const cartographicScratch = new Matrix3.Cartographic(); - const toPack = new Matrix2.Cartesian2(); - - function createVerticesFromQuantizedTerrainMesh( - parameters, - transferableObjects - ) { - const quantizedVertices = parameters.quantizedVertices; - const quantizedVertexCount = quantizedVertices.length / 3; - const octEncodedNormals = parameters.octEncodedNormals; - const edgeVertexCount = - parameters.westIndices.length + - parameters.eastIndices.length + - parameters.southIndices.length + - parameters.northIndices.length; - const includeWebMercatorT = parameters.includeWebMercatorT; - - const exaggeration = parameters.exaggeration; - const exaggerationRelativeHeight = parameters.exaggerationRelativeHeight; - const hasExaggeration = exaggeration !== 1.0; - const includeGeodeticSurfaceNormals = hasExaggeration; - - const rectangle = Matrix2.Rectangle.clone(parameters.rectangle); - const west = rectangle.west; - const south = rectangle.south; - const east = rectangle.east; - const north = rectangle.north; - - const ellipsoid = Matrix3.Ellipsoid.clone(parameters.ellipsoid); - - const minimumHeight = parameters.minimumHeight; - const maximumHeight = parameters.maximumHeight; - - const center = parameters.relativeToCenter; - const fromENU = Transforms.Transforms.eastNorthUpToFixedFrame(center, ellipsoid); - const toENU = Matrix2.Matrix4.inverseTransformation(fromENU, new Matrix2.Matrix4()); - - let southMercatorY; - let oneOverMercatorHeight; - if (includeWebMercatorT) { - southMercatorY = WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle( - south - ); - oneOverMercatorHeight = - 1.0 / - (WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle(north) - - southMercatorY); - } - - const uBuffer = quantizedVertices.subarray(0, quantizedVertexCount); - const vBuffer = quantizedVertices.subarray( - quantizedVertexCount, - 2 * quantizedVertexCount - ); - const heightBuffer = quantizedVertices.subarray( - quantizedVertexCount * 2, - 3 * quantizedVertexCount - ); - const hasVertexNormals = defaultValue.defined(octEncodedNormals); - - const uvs = new Array(quantizedVertexCount); - const heights = new Array(quantizedVertexCount); - const positions = new Array(quantizedVertexCount); - const webMercatorTs = includeWebMercatorT - ? new Array(quantizedVertexCount) - : []; - const geodeticSurfaceNormals = includeGeodeticSurfaceNormals - ? new Array(quantizedVertexCount) - : []; - - const minimum = scratchMinimum; - minimum.x = Number.POSITIVE_INFINITY; - minimum.y = Number.POSITIVE_INFINITY; - minimum.z = Number.POSITIVE_INFINITY; - - const maximum = scratchMaximum; - maximum.x = Number.NEGATIVE_INFINITY; - maximum.y = Number.NEGATIVE_INFINITY; - maximum.z = Number.NEGATIVE_INFINITY; - - let minLongitude = Number.POSITIVE_INFINITY; - let maxLongitude = Number.NEGATIVE_INFINITY; - let minLatitude = Number.POSITIVE_INFINITY; - let maxLatitude = Number.NEGATIVE_INFINITY; - - for (let i = 0; i < quantizedVertexCount; ++i) { - const rawU = uBuffer[i]; - const rawV = vBuffer[i]; - - const u = rawU / maxShort; - const v = rawV / maxShort; - const height = Math$1.CesiumMath.lerp( - minimumHeight, - maximumHeight, - heightBuffer[i] / maxShort - ); - - cartographicScratch.longitude = Math$1.CesiumMath.lerp(west, east, u); - cartographicScratch.latitude = Math$1.CesiumMath.lerp(south, north, v); - cartographicScratch.height = height; - - minLongitude = Math.min(cartographicScratch.longitude, minLongitude); - maxLongitude = Math.max(cartographicScratch.longitude, maxLongitude); - minLatitude = Math.min(cartographicScratch.latitude, minLatitude); - maxLatitude = Math.max(cartographicScratch.latitude, maxLatitude); - - const position = ellipsoid.cartographicToCartesian(cartographicScratch); - - uvs[i] = new Matrix2.Cartesian2(u, v); - heights[i] = height; - positions[i] = position; - - if (includeWebMercatorT) { - webMercatorTs[i] = - (WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle( - cartographicScratch.latitude - ) - - southMercatorY) * - oneOverMercatorHeight; - } - - if (includeGeodeticSurfaceNormals) { - geodeticSurfaceNormals[i] = ellipsoid.geodeticSurfaceNormal(position); - } - - Matrix2.Matrix4.multiplyByPoint(toENU, position, cartesian3Scratch); - - Matrix3.Cartesian3.minimumByComponent(cartesian3Scratch, minimum, minimum); - Matrix3.Cartesian3.maximumByComponent(cartesian3Scratch, maximum, maximum); - } - - const westIndicesSouthToNorth = copyAndSort(parameters.westIndices, function ( - a, - b - ) { - return uvs[a].y - uvs[b].y; - }); - const eastIndicesNorthToSouth = copyAndSort(parameters.eastIndices, function ( - a, - b - ) { - return uvs[b].y - uvs[a].y; - }); - const southIndicesEastToWest = copyAndSort(parameters.southIndices, function ( - a, - b - ) { - return uvs[b].x - uvs[a].x; - }); - const northIndicesWestToEast = copyAndSort(parameters.northIndices, function ( - a, - b - ) { - return uvs[a].x - uvs[b].x; - }); - - let occludeePointInScaledSpace; - if (minimumHeight < 0.0) { - // Horizon culling point needs to be recomputed since the tile is at least partly under the ellipsoid. - const occluder = new TerrainEncoding.EllipsoidalOccluder(ellipsoid); - occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid( - center, - positions, - minimumHeight - ); - } - - let hMin = minimumHeight; - hMin = Math.min( - hMin, - findMinMaxSkirts( - parameters.westIndices, - parameters.westSkirtHeight, - heights, - uvs, - rectangle, - ellipsoid, - toENU, - minimum, - maximum - ) - ); - hMin = Math.min( - hMin, - findMinMaxSkirts( - parameters.southIndices, - parameters.southSkirtHeight, - heights, - uvs, - rectangle, - ellipsoid, - toENU, - minimum, - maximum - ) - ); - hMin = Math.min( - hMin, - findMinMaxSkirts( - parameters.eastIndices, - parameters.eastSkirtHeight, - heights, - uvs, - rectangle, - ellipsoid, - toENU, - minimum, - maximum - ) - ); - hMin = Math.min( - hMin, - findMinMaxSkirts( - parameters.northIndices, - parameters.northSkirtHeight, - heights, - uvs, - rectangle, - ellipsoid, - toENU, - minimum, - maximum - ) - ); - - const aaBox = new AxisAlignedBoundingBox.AxisAlignedBoundingBox(minimum, maximum, center); - const encoding = new TerrainEncoding.TerrainEncoding( - center, - aaBox, - hMin, - maximumHeight, - fromENU, - hasVertexNormals, - includeWebMercatorT, - includeGeodeticSurfaceNormals, - exaggeration, - exaggerationRelativeHeight - ); - const vertexStride = encoding.stride; - const size = - quantizedVertexCount * vertexStride + edgeVertexCount * vertexStride; - const vertexBuffer = new Float32Array(size); - - let bufferIndex = 0; - for (let j = 0; j < quantizedVertexCount; ++j) { - if (hasVertexNormals) { - const n = j * 2.0; - toPack.x = octEncodedNormals[n]; - toPack.y = octEncodedNormals[n + 1]; - } - - bufferIndex = encoding.encode( - vertexBuffer, - bufferIndex, - positions[j], - uvs[j], - heights[j], - toPack, - webMercatorTs[j], - geodeticSurfaceNormals[j] - ); - } - - const edgeTriangleCount = Math.max(0, (edgeVertexCount - 4) * 2); - const indexBufferLength = parameters.indices.length + edgeTriangleCount * 3; - const indexBuffer = IndexDatatype.IndexDatatype.createTypedArray( - quantizedVertexCount + edgeVertexCount, - indexBufferLength - ); - indexBuffer.set(parameters.indices, 0); - - const percentage = 0.0001; - const lonOffset = (maxLongitude - minLongitude) * percentage; - const latOffset = (maxLatitude - minLatitude) * percentage; - const westLongitudeOffset = -lonOffset; - const westLatitudeOffset = 0.0; - const eastLongitudeOffset = lonOffset; - const eastLatitudeOffset = 0.0; - const northLongitudeOffset = 0.0; - const northLatitudeOffset = latOffset; - const southLongitudeOffset = 0.0; - const southLatitudeOffset = -latOffset; - - // Add skirts. - let vertexBufferIndex = quantizedVertexCount * vertexStride; - addSkirt( - vertexBuffer, - vertexBufferIndex, - westIndicesSouthToNorth, - encoding, - heights, - uvs, - octEncodedNormals, - ellipsoid, - rectangle, - parameters.westSkirtHeight, - southMercatorY, - oneOverMercatorHeight, - westLongitudeOffset, - westLatitudeOffset - ); - vertexBufferIndex += parameters.westIndices.length * vertexStride; - addSkirt( - vertexBuffer, - vertexBufferIndex, - southIndicesEastToWest, - encoding, - heights, - uvs, - octEncodedNormals, - ellipsoid, - rectangle, - parameters.southSkirtHeight, - southMercatorY, - oneOverMercatorHeight, - southLongitudeOffset, - southLatitudeOffset - ); - vertexBufferIndex += parameters.southIndices.length * vertexStride; - addSkirt( - vertexBuffer, - vertexBufferIndex, - eastIndicesNorthToSouth, - encoding, - heights, - uvs, - octEncodedNormals, - ellipsoid, - rectangle, - parameters.eastSkirtHeight, - southMercatorY, - oneOverMercatorHeight, - eastLongitudeOffset, - eastLatitudeOffset - ); - vertexBufferIndex += parameters.eastIndices.length * vertexStride; - addSkirt( - vertexBuffer, - vertexBufferIndex, - northIndicesWestToEast, - encoding, - heights, - uvs, - octEncodedNormals, - ellipsoid, - rectangle, - parameters.northSkirtHeight, - southMercatorY, - oneOverMercatorHeight, - northLongitudeOffset, - northLatitudeOffset - ); - - TerrainProvider.addSkirtIndices( - westIndicesSouthToNorth, - southIndicesEastToWest, - eastIndicesNorthToSouth, - northIndicesWestToEast, - quantizedVertexCount, - indexBuffer, - parameters.indices.length - ); - - transferableObjects.push(vertexBuffer.buffer, indexBuffer.buffer); - - return { - vertices: vertexBuffer.buffer, - indices: indexBuffer.buffer, - westIndicesSouthToNorth: westIndicesSouthToNorth, - southIndicesEastToWest: southIndicesEastToWest, - eastIndicesNorthToSouth: eastIndicesNorthToSouth, - northIndicesWestToEast: northIndicesWestToEast, - vertexStride: vertexStride, - center: center, - minimumHeight: minimumHeight, - maximumHeight: maximumHeight, - occludeePointInScaledSpace: occludeePointInScaledSpace, - encoding: encoding, - indexCountWithoutSkirts: parameters.indices.length, - }; - } - - function findMinMaxSkirts( - edgeIndices, - edgeHeight, - heights, - uvs, - rectangle, - ellipsoid, - toENU, - minimum, - maximum - ) { - let hMin = Number.POSITIVE_INFINITY; - - const north = rectangle.north; - const south = rectangle.south; - let east = rectangle.east; - const west = rectangle.west; - - if (east < west) { - east += Math$1.CesiumMath.TWO_PI; - } - - const length = edgeIndices.length; - for (let i = 0; i < length; ++i) { - const index = edgeIndices[i]; - const h = heights[index]; - const uv = uvs[index]; - - cartographicScratch.longitude = Math$1.CesiumMath.lerp(west, east, uv.x); - cartographicScratch.latitude = Math$1.CesiumMath.lerp(south, north, uv.y); - cartographicScratch.height = h - edgeHeight; - - const position = ellipsoid.cartographicToCartesian( - cartographicScratch, - cartesian3Scratch - ); - Matrix2.Matrix4.multiplyByPoint(toENU, position, position); - - Matrix3.Cartesian3.minimumByComponent(position, minimum, minimum); - Matrix3.Cartesian3.maximumByComponent(position, maximum, maximum); - - hMin = Math.min(hMin, cartographicScratch.height); - } - return hMin; - } - - function addSkirt( - vertexBuffer, - vertexBufferIndex, - edgeVertices, - encoding, - heights, - uvs, - octEncodedNormals, - ellipsoid, - rectangle, - skirtLength, - southMercatorY, - oneOverMercatorHeight, - longitudeOffset, - latitudeOffset - ) { - const hasVertexNormals = defaultValue.defined(octEncodedNormals); - - const north = rectangle.north; - const south = rectangle.south; - let east = rectangle.east; - const west = rectangle.west; - - if (east < west) { - east += Math$1.CesiumMath.TWO_PI; - } - - const length = edgeVertices.length; - for (let i = 0; i < length; ++i) { - const index = edgeVertices[i]; - const h = heights[index]; - const uv = uvs[index]; - - cartographicScratch.longitude = - Math$1.CesiumMath.lerp(west, east, uv.x) + longitudeOffset; - cartographicScratch.latitude = - Math$1.CesiumMath.lerp(south, north, uv.y) + latitudeOffset; - cartographicScratch.height = h - skirtLength; - - const position = ellipsoid.cartographicToCartesian( - cartographicScratch, - cartesian3Scratch - ); - - if (hasVertexNormals) { - const n = index * 2.0; - toPack.x = octEncodedNormals[n]; - toPack.y = octEncodedNormals[n + 1]; - } - - let webMercatorT; - if (encoding.hasWebMercatorT) { - webMercatorT = - (WebMercatorProjection.WebMercatorProjection.geodeticLatitudeToMercatorAngle( - cartographicScratch.latitude - ) - - southMercatorY) * - oneOverMercatorHeight; - } - - let geodeticSurfaceNormal; - if (encoding.hasGeodeticSurfaceNormals) { - geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(position); - } - - vertexBufferIndex = encoding.encode( - vertexBuffer, - vertexBufferIndex, - position, - uv, - cartographicScratch.height, - toPack, - webMercatorT, - geodeticSurfaceNormal - ); - } - } - - function copyAndSort(typedArray, comparator) { - let copy; - if (typeof typedArray.slice === "function") { - copy = typedArray.slice(); - if (typeof copy.sort !== "function") { - // Sliced typed array isn't sortable, so we can't use it. - copy = undefined; - } - } - - if (!defaultValue.defined(copy)) { - copy = Array.prototype.slice.call(typedArray); - } - - copy.sort(comparator); - - return copy; - } - var createVerticesFromQuantizedTerrainMesh$1 = createTaskProcessorWorker( - createVerticesFromQuantizedTerrainMesh - ); - - return createVerticesFromQuantizedTerrainMesh$1; - -})); -//# sourceMappingURL=createVerticesFromQuantizedTerrainMesh.js.map diff --git a/debug/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js.map b/debug/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js.map deleted file mode 100644 index 86edbb3..0000000 --- a/debug/cesium/Workers/createVerticesFromQuantizedTerrainMesh.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createVerticesFromQuantizedTerrainMesh.js","sources":["../../../Source/Core/TerrainProvider.js","../../../Source/WorkersES6/createVerticesFromQuantizedTerrainMesh.js"],"sourcesContent":["import defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\n\r\n/**\r\n * Provides terrain or other geometry for the surface of an ellipsoid. The surface geometry is\r\n * organized into a pyramid of tiles according to a {@link TilingScheme}. This type describes an\r\n * interface and is not intended to be instantiated directly.\r\n *\r\n * @alias TerrainProvider\r\n * @constructor\r\n *\r\n * @see EllipsoidTerrainProvider\r\n * @see CesiumTerrainProvider\r\n * @see VRTheWorldTerrainProvider\r\n * @see GoogleEarthEnterpriseTerrainProvider\r\n */\r\nfunction TerrainProvider() {\r\n DeveloperError.throwInstantiationError();\r\n}\r\n\r\nObject.defineProperties(TerrainProvider.prototype, {\r\n /**\r\n * Gets an event that is raised when the terrain provider encounters an asynchronous error.. By subscribing\r\n * to the event, you will be notified of the error and can potentially recover from it. Event listeners\r\n * are passed an instance of {@link TileProviderError}.\r\n * @memberof TerrainProvider.prototype\r\n * @type {Event}\r\n * @readonly\r\n */\r\n errorEvent: {\r\n get: DeveloperError.throwInstantiationError,\r\n },\r\n\r\n /**\r\n * Gets the credit to display when this terrain provider is active. Typically this is used to credit\r\n * the source of the terrain. This function should\r\n * not be called before {@link TerrainProvider#ready} returns true.\r\n * @memberof TerrainProvider.prototype\r\n * @type {Credit}\r\n * @readonly\r\n */\r\n credit: {\r\n get: DeveloperError.throwInstantiationError,\r\n },\r\n\r\n /**\r\n * Gets the tiling scheme used by the provider. This function should\r\n * not be called before {@link TerrainProvider#ready} returns true.\r\n * @memberof TerrainProvider.prototype\r\n * @type {TilingScheme}\r\n * @readonly\r\n */\r\n tilingScheme: {\r\n get: DeveloperError.throwInstantiationError,\r\n },\r\n\r\n /**\r\n * Gets a value indicating whether or not the provider is ready for use.\r\n * @memberof TerrainProvider.prototype\r\n * @type {Boolean}\r\n * @readonly\r\n */\r\n ready: {\r\n get: DeveloperError.throwInstantiationError,\r\n },\r\n\r\n /**\r\n * Gets a promise that resolves to true when the provider is ready for use.\r\n * @memberof TerrainProvider.prototype\r\n * @type {Promise.}\r\n * @readonly\r\n */\r\n readyPromise: {\r\n get: DeveloperError.throwInstantiationError,\r\n },\r\n\r\n /**\r\n * Gets a value indicating whether or not the provider includes a water mask. The water mask\r\n * indicates which areas of the globe are water rather than land, so they can be rendered\r\n * as a reflective surface with animated waves. This function should not be\r\n * called before {@link TerrainProvider#ready} returns true.\r\n * @memberof TerrainProvider.prototype\r\n * @type {Boolean}\r\n * @readonly\r\n */\r\n hasWaterMask: {\r\n get: DeveloperError.throwInstantiationError,\r\n },\r\n\r\n /**\r\n * Gets a value indicating whether or not the requested tiles include vertex normals.\r\n * This function should not be called before {@link TerrainProvider#ready} returns true.\r\n * @memberof TerrainProvider.prototype\r\n * @type {Boolean}\r\n * @readonly\r\n */\r\n hasVertexNormals: {\r\n get: DeveloperError.throwInstantiationError,\r\n },\r\n\r\n /**\r\n * Gets an object that can be used to determine availability of terrain from this provider, such as\r\n * at points and in rectangles. This function should not be called before\r\n * {@link TerrainProvider#ready} returns true. This property may be undefined if availability\r\n * information is not available.\r\n * @memberof TerrainProvider.prototype\r\n * @type {TileAvailability}\r\n * @readonly\r\n */\r\n availability: {\r\n get: DeveloperError.throwInstantiationError,\r\n },\r\n});\r\n\r\nconst regularGridIndicesCache = [];\r\n\r\n/**\r\n * Gets a list of indices for a triangle mesh representing a regular grid. Calling\r\n * this function multiple times with the same grid width and height returns the\r\n * same list of indices. The total number of vertices must be less than or equal\r\n * to 65536.\r\n *\r\n * @param {Number} width The number of vertices in the regular grid in the horizontal direction.\r\n * @param {Number} height The number of vertices in the regular grid in the vertical direction.\r\n * @returns {Uint16Array|Uint32Array} The list of indices. Uint16Array gets returned for 64KB or less and Uint32Array for 4GB or less.\r\n */\r\nTerrainProvider.getRegularGridIndices = function (width, height) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\r\n throw new DeveloperError(\r\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let byWidth = regularGridIndicesCache[width];\r\n if (!defined(byWidth)) {\r\n regularGridIndicesCache[width] = byWidth = [];\r\n }\r\n\r\n let indices = byWidth[height];\r\n if (!defined(indices)) {\r\n if (width * height < CesiumMath.SIXTY_FOUR_KILOBYTES) {\r\n indices = byWidth[height] = new Uint16Array(\r\n (width - 1) * (height - 1) * 6\r\n );\r\n } else {\r\n indices = byWidth[height] = new Uint32Array(\r\n (width - 1) * (height - 1) * 6\r\n );\r\n }\r\n addRegularGridIndices(width, height, indices, 0);\r\n }\r\n\r\n return indices;\r\n};\r\n\r\nconst regularGridAndEdgeIndicesCache = [];\r\n\r\n/**\r\n * @private\r\n */\r\nTerrainProvider.getRegularGridIndicesAndEdgeIndices = function (width, height) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\r\n throw new DeveloperError(\r\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let byWidth = regularGridAndEdgeIndicesCache[width];\r\n if (!defined(byWidth)) {\r\n regularGridAndEdgeIndicesCache[width] = byWidth = [];\r\n }\r\n\r\n let indicesAndEdges = byWidth[height];\r\n if (!defined(indicesAndEdges)) {\r\n const indices = TerrainProvider.getRegularGridIndices(width, height);\r\n\r\n const edgeIndices = getEdgeIndices(width, height);\r\n const westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth;\r\n const southIndicesEastToWest = edgeIndices.southIndicesEastToWest;\r\n const eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth;\r\n const northIndicesWestToEast = edgeIndices.northIndicesWestToEast;\r\n\r\n indicesAndEdges = byWidth[height] = {\r\n indices: indices,\r\n westIndicesSouthToNorth: westIndicesSouthToNorth,\r\n southIndicesEastToWest: southIndicesEastToWest,\r\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\r\n northIndicesWestToEast: northIndicesWestToEast,\r\n };\r\n }\r\n\r\n return indicesAndEdges;\r\n};\r\n\r\nconst regularGridAndSkirtAndEdgeIndicesCache = [];\r\n\r\n/**\r\n * @private\r\n */\r\nTerrainProvider.getRegularGridAndSkirtIndicesAndEdgeIndices = function (\r\n width,\r\n height\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (width * height >= CesiumMath.FOUR_GIGABYTES) {\r\n throw new DeveloperError(\r\n \"The total number of vertices (width * height) must be less than 4,294,967,296.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let byWidth = regularGridAndSkirtAndEdgeIndicesCache[width];\r\n if (!defined(byWidth)) {\r\n regularGridAndSkirtAndEdgeIndicesCache[width] = byWidth = [];\r\n }\r\n\r\n let indicesAndEdges = byWidth[height];\r\n if (!defined(indicesAndEdges)) {\r\n const gridVertexCount = width * height;\r\n const gridIndexCount = (width - 1) * (height - 1) * 6;\r\n const edgeVertexCount = width * 2 + height * 2;\r\n const edgeIndexCount = Math.max(0, edgeVertexCount - 4) * 6;\r\n const vertexCount = gridVertexCount + edgeVertexCount;\r\n const indexCount = gridIndexCount + edgeIndexCount;\r\n\r\n const edgeIndices = getEdgeIndices(width, height);\r\n const westIndicesSouthToNorth = edgeIndices.westIndicesSouthToNorth;\r\n const southIndicesEastToWest = edgeIndices.southIndicesEastToWest;\r\n const eastIndicesNorthToSouth = edgeIndices.eastIndicesNorthToSouth;\r\n const northIndicesWestToEast = edgeIndices.northIndicesWestToEast;\r\n\r\n const indices = IndexDatatype.createTypedArray(vertexCount, indexCount);\r\n addRegularGridIndices(width, height, indices, 0);\r\n TerrainProvider.addSkirtIndices(\r\n westIndicesSouthToNorth,\r\n southIndicesEastToWest,\r\n eastIndicesNorthToSouth,\r\n northIndicesWestToEast,\r\n gridVertexCount,\r\n indices,\r\n gridIndexCount\r\n );\r\n\r\n indicesAndEdges = byWidth[height] = {\r\n indices: indices,\r\n westIndicesSouthToNorth: westIndicesSouthToNorth,\r\n southIndicesEastToWest: southIndicesEastToWest,\r\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\r\n northIndicesWestToEast: northIndicesWestToEast,\r\n indexCountWithoutSkirts: gridIndexCount,\r\n };\r\n }\r\n\r\n return indicesAndEdges;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nTerrainProvider.addSkirtIndices = function (\r\n westIndicesSouthToNorth,\r\n southIndicesEastToWest,\r\n eastIndicesNorthToSouth,\r\n northIndicesWestToEast,\r\n vertexCount,\r\n indices,\r\n offset\r\n) {\r\n let vertexIndex = vertexCount;\r\n offset = addSkirtIndices(\r\n westIndicesSouthToNorth,\r\n vertexIndex,\r\n indices,\r\n offset\r\n );\r\n vertexIndex += westIndicesSouthToNorth.length;\r\n offset = addSkirtIndices(\r\n southIndicesEastToWest,\r\n vertexIndex,\r\n indices,\r\n offset\r\n );\r\n vertexIndex += southIndicesEastToWest.length;\r\n offset = addSkirtIndices(\r\n eastIndicesNorthToSouth,\r\n vertexIndex,\r\n indices,\r\n offset\r\n );\r\n vertexIndex += eastIndicesNorthToSouth.length;\r\n addSkirtIndices(northIndicesWestToEast, vertexIndex, indices, offset);\r\n};\r\n\r\nfunction getEdgeIndices(width, height) {\r\n const westIndicesSouthToNorth = new Array(height);\r\n const southIndicesEastToWest = new Array(width);\r\n const eastIndicesNorthToSouth = new Array(height);\r\n const northIndicesWestToEast = new Array(width);\r\n\r\n let i;\r\n for (i = 0; i < width; ++i) {\r\n northIndicesWestToEast[i] = i;\r\n southIndicesEastToWest[i] = width * height - 1 - i;\r\n }\r\n\r\n for (i = 0; i < height; ++i) {\r\n eastIndicesNorthToSouth[i] = (i + 1) * width - 1;\r\n westIndicesSouthToNorth[i] = (height - i - 1) * width;\r\n }\r\n\r\n return {\r\n westIndicesSouthToNorth: westIndicesSouthToNorth,\r\n southIndicesEastToWest: southIndicesEastToWest,\r\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\r\n northIndicesWestToEast: northIndicesWestToEast,\r\n };\r\n}\r\n\r\nfunction addRegularGridIndices(width, height, indices, offset) {\r\n let index = 0;\r\n for (let j = 0; j < height - 1; ++j) {\r\n for (let i = 0; i < width - 1; ++i) {\r\n const upperLeft = index;\r\n const lowerLeft = upperLeft + width;\r\n const lowerRight = lowerLeft + 1;\r\n const upperRight = upperLeft + 1;\r\n\r\n indices[offset++] = upperLeft;\r\n indices[offset++] = lowerLeft;\r\n indices[offset++] = upperRight;\r\n indices[offset++] = upperRight;\r\n indices[offset++] = lowerLeft;\r\n indices[offset++] = lowerRight;\r\n\r\n ++index;\r\n }\r\n ++index;\r\n }\r\n}\r\n\r\nfunction addSkirtIndices(edgeIndices, vertexIndex, indices, offset) {\r\n let previousIndex = edgeIndices[0];\r\n\r\n const length = edgeIndices.length;\r\n for (let i = 1; i < length; ++i) {\r\n const index = edgeIndices[i];\r\n\r\n indices[offset++] = previousIndex;\r\n indices[offset++] = index;\r\n indices[offset++] = vertexIndex;\r\n\r\n indices[offset++] = vertexIndex;\r\n indices[offset++] = index;\r\n indices[offset++] = vertexIndex + 1;\r\n\r\n previousIndex = index;\r\n ++vertexIndex;\r\n }\r\n\r\n return offset;\r\n}\r\n\r\n/**\r\n * Specifies the quality of terrain created from heightmaps. A value of 1.0 will\r\n * ensure that adjacent heightmap vertices are separated by no more than\r\n * {@link Globe.maximumScreenSpaceError} screen pixels and will probably go very slowly.\r\n * A value of 0.5 will cut the estimated level zero geometric error in half, allowing twice the\r\n * screen pixels between adjacent heightmap vertices and thus rendering more quickly.\r\n * @type {Number}\r\n */\r\nTerrainProvider.heightmapTerrainQuality = 0.25;\r\n\r\n/**\r\n * Determines an appropriate geometric error estimate when the geometry comes from a heightmap.\r\n *\r\n * @param {Ellipsoid} ellipsoid The ellipsoid to which the terrain is attached.\r\n * @param {Number} tileImageWidth The width, in pixels, of the heightmap associated with a single tile.\r\n * @param {Number} numberOfTilesAtLevelZero The number of tiles in the horizontal direction at tile level zero.\r\n * @returns {Number} An estimated geometric error.\r\n */\r\nTerrainProvider.getEstimatedLevelZeroGeometricErrorForAHeightmap = function (\r\n ellipsoid,\r\n tileImageWidth,\r\n numberOfTilesAtLevelZero\r\n) {\r\n return (\r\n (ellipsoid.maximumRadius *\r\n 2 *\r\n Math.PI *\r\n TerrainProvider.heightmapTerrainQuality) /\r\n (tileImageWidth * numberOfTilesAtLevelZero)\r\n );\r\n};\r\n\r\n/**\r\n * Requests the geometry for a given tile. This function should not be called before\r\n * {@link TerrainProvider#ready} returns true. The result must include terrain data and\r\n * may optionally include a water mask and an indication of which child tiles are available.\r\n * @function\r\n *\r\n * @param {Number} x The X coordinate of the tile for which to request geometry.\r\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\r\n * @param {Number} level The level of the tile for which to request geometry.\r\n * @param {Request} [request] The request object. Intended for internal use only.\r\n *\r\n * @returns {Promise.|undefined} A promise for the requested geometry. If this method\r\n * returns undefined instead of a promise, it is an indication that too many requests are already\r\n * pending and the request will be retried later.\r\n */\r\nTerrainProvider.prototype.requestTileGeometry =\r\n DeveloperError.throwInstantiationError;\r\n\r\n/**\r\n * Gets the maximum geometric error allowed in a tile at a given level. This function should not be\r\n * called before {@link TerrainProvider#ready} returns true.\r\n * @function\r\n *\r\n * @param {Number} level The tile level for which to get the maximum geometric error.\r\n * @returns {Number} The maximum geometric error.\r\n */\r\nTerrainProvider.prototype.getLevelMaximumGeometricError =\r\n DeveloperError.throwInstantiationError;\r\n\r\n/**\r\n * Determines whether data for a tile is available to be loaded.\r\n * @function\r\n *\r\n * @param {Number} x The X coordinate of the tile for which to request geometry.\r\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\r\n * @param {Number} level The level of the tile for which to request geometry.\r\n * @returns {Boolean|undefined} Undefined if not supported by the terrain provider, otherwise true or false.\r\n */\r\nTerrainProvider.prototype.getTileDataAvailable =\r\n DeveloperError.throwInstantiationError;\r\n\r\n/**\r\n * Makes sure we load availability data for a tile\r\n * @function\r\n *\r\n * @param {Number} x The X coordinate of the tile for which to request geometry.\r\n * @param {Number} y The Y coordinate of the tile for which to request geometry.\r\n * @param {Number} level The level of the tile for which to request geometry.\r\n * @returns {undefined|Promise} Undefined if nothing need to be loaded or a Promise that resolves when all required tiles are loaded\r\n */\r\nTerrainProvider.prototype.loadTileDataAvailability =\r\n DeveloperError.throwInstantiationError;\r\nexport default TerrainProvider;\r\n\r\n/**\r\n * A function that is called when an error occurs.\r\n * @callback TerrainProvider.ErrorEvent\r\n *\r\n * @this TerrainProvider\r\n * @param {TileProviderError} err An object holding details about the error that occurred.\r\n */\r\n","import AxisAlignedBoundingBox from \"../Core/AxisAlignedBoundingBox.js\";\r\nimport Cartesian2 from \"../Core/Cartesian2.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Cartographic from \"../Core/Cartographic.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\r\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\r\nimport CesiumMath from \"../Core/Math.js\";\r\nimport Matrix4 from \"../Core/Matrix4.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport TerrainEncoding from \"../Core/TerrainEncoding.js\";\r\nimport TerrainProvider from \"../Core/TerrainProvider.js\";\r\nimport Transforms from \"../Core/Transforms.js\";\r\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst maxShort = 32767;\r\n\r\nconst cartesian3Scratch = new Cartesian3();\r\nconst scratchMinimum = new Cartesian3();\r\nconst scratchMaximum = new Cartesian3();\r\nconst cartographicScratch = new Cartographic();\r\nconst toPack = new Cartesian2();\r\n\r\nfunction createVerticesFromQuantizedTerrainMesh(\r\n parameters,\r\n transferableObjects\r\n) {\r\n const quantizedVertices = parameters.quantizedVertices;\r\n const quantizedVertexCount = quantizedVertices.length / 3;\r\n const octEncodedNormals = parameters.octEncodedNormals;\r\n const edgeVertexCount =\r\n parameters.westIndices.length +\r\n parameters.eastIndices.length +\r\n parameters.southIndices.length +\r\n parameters.northIndices.length;\r\n const includeWebMercatorT = parameters.includeWebMercatorT;\r\n\r\n const exaggeration = parameters.exaggeration;\r\n const exaggerationRelativeHeight = parameters.exaggerationRelativeHeight;\r\n const hasExaggeration = exaggeration !== 1.0;\r\n const includeGeodeticSurfaceNormals = hasExaggeration;\r\n\r\n const rectangle = Rectangle.clone(parameters.rectangle);\r\n const west = rectangle.west;\r\n const south = rectangle.south;\r\n const east = rectangle.east;\r\n const north = rectangle.north;\r\n\r\n const ellipsoid = Ellipsoid.clone(parameters.ellipsoid);\r\n\r\n const minimumHeight = parameters.minimumHeight;\r\n const maximumHeight = parameters.maximumHeight;\r\n\r\n const center = parameters.relativeToCenter;\r\n const fromENU = Transforms.eastNorthUpToFixedFrame(center, ellipsoid);\r\n const toENU = Matrix4.inverseTransformation(fromENU, new Matrix4());\r\n\r\n let southMercatorY;\r\n let oneOverMercatorHeight;\r\n if (includeWebMercatorT) {\r\n southMercatorY = WebMercatorProjection.geodeticLatitudeToMercatorAngle(\r\n south\r\n );\r\n oneOverMercatorHeight =\r\n 1.0 /\r\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(north) -\r\n southMercatorY);\r\n }\r\n\r\n const uBuffer = quantizedVertices.subarray(0, quantizedVertexCount);\r\n const vBuffer = quantizedVertices.subarray(\r\n quantizedVertexCount,\r\n 2 * quantizedVertexCount\r\n );\r\n const heightBuffer = quantizedVertices.subarray(\r\n quantizedVertexCount * 2,\r\n 3 * quantizedVertexCount\r\n );\r\n const hasVertexNormals = defined(octEncodedNormals);\r\n\r\n const uvs = new Array(quantizedVertexCount);\r\n const heights = new Array(quantizedVertexCount);\r\n const positions = new Array(quantizedVertexCount);\r\n const webMercatorTs = includeWebMercatorT\r\n ? new Array(quantizedVertexCount)\r\n : [];\r\n const geodeticSurfaceNormals = includeGeodeticSurfaceNormals\r\n ? new Array(quantizedVertexCount)\r\n : [];\r\n\r\n const minimum = scratchMinimum;\r\n minimum.x = Number.POSITIVE_INFINITY;\r\n minimum.y = Number.POSITIVE_INFINITY;\r\n minimum.z = Number.POSITIVE_INFINITY;\r\n\r\n const maximum = scratchMaximum;\r\n maximum.x = Number.NEGATIVE_INFINITY;\r\n maximum.y = Number.NEGATIVE_INFINITY;\r\n maximum.z = Number.NEGATIVE_INFINITY;\r\n\r\n let minLongitude = Number.POSITIVE_INFINITY;\r\n let maxLongitude = Number.NEGATIVE_INFINITY;\r\n let minLatitude = Number.POSITIVE_INFINITY;\r\n let maxLatitude = Number.NEGATIVE_INFINITY;\r\n\r\n for (let i = 0; i < quantizedVertexCount; ++i) {\r\n const rawU = uBuffer[i];\r\n const rawV = vBuffer[i];\r\n\r\n const u = rawU / maxShort;\r\n const v = rawV / maxShort;\r\n const height = CesiumMath.lerp(\r\n minimumHeight,\r\n maximumHeight,\r\n heightBuffer[i] / maxShort\r\n );\r\n\r\n cartographicScratch.longitude = CesiumMath.lerp(west, east, u);\r\n cartographicScratch.latitude = CesiumMath.lerp(south, north, v);\r\n cartographicScratch.height = height;\r\n\r\n minLongitude = Math.min(cartographicScratch.longitude, minLongitude);\r\n maxLongitude = Math.max(cartographicScratch.longitude, maxLongitude);\r\n minLatitude = Math.min(cartographicScratch.latitude, minLatitude);\r\n maxLatitude = Math.max(cartographicScratch.latitude, maxLatitude);\r\n\r\n const position = ellipsoid.cartographicToCartesian(cartographicScratch);\r\n\r\n uvs[i] = new Cartesian2(u, v);\r\n heights[i] = height;\r\n positions[i] = position;\r\n\r\n if (includeWebMercatorT) {\r\n webMercatorTs[i] =\r\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(\r\n cartographicScratch.latitude\r\n ) -\r\n southMercatorY) *\r\n oneOverMercatorHeight;\r\n }\r\n\r\n if (includeGeodeticSurfaceNormals) {\r\n geodeticSurfaceNormals[i] = ellipsoid.geodeticSurfaceNormal(position);\r\n }\r\n\r\n Matrix4.multiplyByPoint(toENU, position, cartesian3Scratch);\r\n\r\n Cartesian3.minimumByComponent(cartesian3Scratch, minimum, minimum);\r\n Cartesian3.maximumByComponent(cartesian3Scratch, maximum, maximum);\r\n }\r\n\r\n const westIndicesSouthToNorth = copyAndSort(parameters.westIndices, function (\r\n a,\r\n b\r\n ) {\r\n return uvs[a].y - uvs[b].y;\r\n });\r\n const eastIndicesNorthToSouth = copyAndSort(parameters.eastIndices, function (\r\n a,\r\n b\r\n ) {\r\n return uvs[b].y - uvs[a].y;\r\n });\r\n const southIndicesEastToWest = copyAndSort(parameters.southIndices, function (\r\n a,\r\n b\r\n ) {\r\n return uvs[b].x - uvs[a].x;\r\n });\r\n const northIndicesWestToEast = copyAndSort(parameters.northIndices, function (\r\n a,\r\n b\r\n ) {\r\n return uvs[a].x - uvs[b].x;\r\n });\r\n\r\n let occludeePointInScaledSpace;\r\n if (minimumHeight < 0.0) {\r\n // Horizon culling point needs to be recomputed since the tile is at least partly under the ellipsoid.\r\n const occluder = new EllipsoidalOccluder(ellipsoid);\r\n occludeePointInScaledSpace = occluder.computeHorizonCullingPointPossiblyUnderEllipsoid(\r\n center,\r\n positions,\r\n minimumHeight\r\n );\r\n }\r\n\r\n let hMin = minimumHeight;\r\n hMin = Math.min(\r\n hMin,\r\n findMinMaxSkirts(\r\n parameters.westIndices,\r\n parameters.westSkirtHeight,\r\n heights,\r\n uvs,\r\n rectangle,\r\n ellipsoid,\r\n toENU,\r\n minimum,\r\n maximum\r\n )\r\n );\r\n hMin = Math.min(\r\n hMin,\r\n findMinMaxSkirts(\r\n parameters.southIndices,\r\n parameters.southSkirtHeight,\r\n heights,\r\n uvs,\r\n rectangle,\r\n ellipsoid,\r\n toENU,\r\n minimum,\r\n maximum\r\n )\r\n );\r\n hMin = Math.min(\r\n hMin,\r\n findMinMaxSkirts(\r\n parameters.eastIndices,\r\n parameters.eastSkirtHeight,\r\n heights,\r\n uvs,\r\n rectangle,\r\n ellipsoid,\r\n toENU,\r\n minimum,\r\n maximum\r\n )\r\n );\r\n hMin = Math.min(\r\n hMin,\r\n findMinMaxSkirts(\r\n parameters.northIndices,\r\n parameters.northSkirtHeight,\r\n heights,\r\n uvs,\r\n rectangle,\r\n ellipsoid,\r\n toENU,\r\n minimum,\r\n maximum\r\n )\r\n );\r\n\r\n const aaBox = new AxisAlignedBoundingBox(minimum, maximum, center);\r\n const encoding = new TerrainEncoding(\r\n center,\r\n aaBox,\r\n hMin,\r\n maximumHeight,\r\n fromENU,\r\n hasVertexNormals,\r\n includeWebMercatorT,\r\n includeGeodeticSurfaceNormals,\r\n exaggeration,\r\n exaggerationRelativeHeight\r\n );\r\n const vertexStride = encoding.stride;\r\n const size =\r\n quantizedVertexCount * vertexStride + edgeVertexCount * vertexStride;\r\n const vertexBuffer = new Float32Array(size);\r\n\r\n let bufferIndex = 0;\r\n for (let j = 0; j < quantizedVertexCount; ++j) {\r\n if (hasVertexNormals) {\r\n const n = j * 2.0;\r\n toPack.x = octEncodedNormals[n];\r\n toPack.y = octEncodedNormals[n + 1];\r\n }\r\n\r\n bufferIndex = encoding.encode(\r\n vertexBuffer,\r\n bufferIndex,\r\n positions[j],\r\n uvs[j],\r\n heights[j],\r\n toPack,\r\n webMercatorTs[j],\r\n geodeticSurfaceNormals[j]\r\n );\r\n }\r\n\r\n const edgeTriangleCount = Math.max(0, (edgeVertexCount - 4) * 2);\r\n const indexBufferLength = parameters.indices.length + edgeTriangleCount * 3;\r\n const indexBuffer = IndexDatatype.createTypedArray(\r\n quantizedVertexCount + edgeVertexCount,\r\n indexBufferLength\r\n );\r\n indexBuffer.set(parameters.indices, 0);\r\n\r\n const percentage = 0.0001;\r\n const lonOffset = (maxLongitude - minLongitude) * percentage;\r\n const latOffset = (maxLatitude - minLatitude) * percentage;\r\n const westLongitudeOffset = -lonOffset;\r\n const westLatitudeOffset = 0.0;\r\n const eastLongitudeOffset = lonOffset;\r\n const eastLatitudeOffset = 0.0;\r\n const northLongitudeOffset = 0.0;\r\n const northLatitudeOffset = latOffset;\r\n const southLongitudeOffset = 0.0;\r\n const southLatitudeOffset = -latOffset;\r\n\r\n // Add skirts.\r\n let vertexBufferIndex = quantizedVertexCount * vertexStride;\r\n addSkirt(\r\n vertexBuffer,\r\n vertexBufferIndex,\r\n westIndicesSouthToNorth,\r\n encoding,\r\n heights,\r\n uvs,\r\n octEncodedNormals,\r\n ellipsoid,\r\n rectangle,\r\n parameters.westSkirtHeight,\r\n southMercatorY,\r\n oneOverMercatorHeight,\r\n westLongitudeOffset,\r\n westLatitudeOffset\r\n );\r\n vertexBufferIndex += parameters.westIndices.length * vertexStride;\r\n addSkirt(\r\n vertexBuffer,\r\n vertexBufferIndex,\r\n southIndicesEastToWest,\r\n encoding,\r\n heights,\r\n uvs,\r\n octEncodedNormals,\r\n ellipsoid,\r\n rectangle,\r\n parameters.southSkirtHeight,\r\n southMercatorY,\r\n oneOverMercatorHeight,\r\n southLongitudeOffset,\r\n southLatitudeOffset\r\n );\r\n vertexBufferIndex += parameters.southIndices.length * vertexStride;\r\n addSkirt(\r\n vertexBuffer,\r\n vertexBufferIndex,\r\n eastIndicesNorthToSouth,\r\n encoding,\r\n heights,\r\n uvs,\r\n octEncodedNormals,\r\n ellipsoid,\r\n rectangle,\r\n parameters.eastSkirtHeight,\r\n southMercatorY,\r\n oneOverMercatorHeight,\r\n eastLongitudeOffset,\r\n eastLatitudeOffset\r\n );\r\n vertexBufferIndex += parameters.eastIndices.length * vertexStride;\r\n addSkirt(\r\n vertexBuffer,\r\n vertexBufferIndex,\r\n northIndicesWestToEast,\r\n encoding,\r\n heights,\r\n uvs,\r\n octEncodedNormals,\r\n ellipsoid,\r\n rectangle,\r\n parameters.northSkirtHeight,\r\n southMercatorY,\r\n oneOverMercatorHeight,\r\n northLongitudeOffset,\r\n northLatitudeOffset\r\n );\r\n\r\n TerrainProvider.addSkirtIndices(\r\n westIndicesSouthToNorth,\r\n southIndicesEastToWest,\r\n eastIndicesNorthToSouth,\r\n northIndicesWestToEast,\r\n quantizedVertexCount,\r\n indexBuffer,\r\n parameters.indices.length\r\n );\r\n\r\n transferableObjects.push(vertexBuffer.buffer, indexBuffer.buffer);\r\n\r\n return {\r\n vertices: vertexBuffer.buffer,\r\n indices: indexBuffer.buffer,\r\n westIndicesSouthToNorth: westIndicesSouthToNorth,\r\n southIndicesEastToWest: southIndicesEastToWest,\r\n eastIndicesNorthToSouth: eastIndicesNorthToSouth,\r\n northIndicesWestToEast: northIndicesWestToEast,\r\n vertexStride: vertexStride,\r\n center: center,\r\n minimumHeight: minimumHeight,\r\n maximumHeight: maximumHeight,\r\n occludeePointInScaledSpace: occludeePointInScaledSpace,\r\n encoding: encoding,\r\n indexCountWithoutSkirts: parameters.indices.length,\r\n };\r\n}\r\n\r\nfunction findMinMaxSkirts(\r\n edgeIndices,\r\n edgeHeight,\r\n heights,\r\n uvs,\r\n rectangle,\r\n ellipsoid,\r\n toENU,\r\n minimum,\r\n maximum\r\n) {\r\n let hMin = Number.POSITIVE_INFINITY;\r\n\r\n const north = rectangle.north;\r\n const south = rectangle.south;\r\n let east = rectangle.east;\r\n const west = rectangle.west;\r\n\r\n if (east < west) {\r\n east += CesiumMath.TWO_PI;\r\n }\r\n\r\n const length = edgeIndices.length;\r\n for (let i = 0; i < length; ++i) {\r\n const index = edgeIndices[i];\r\n const h = heights[index];\r\n const uv = uvs[index];\r\n\r\n cartographicScratch.longitude = CesiumMath.lerp(west, east, uv.x);\r\n cartographicScratch.latitude = CesiumMath.lerp(south, north, uv.y);\r\n cartographicScratch.height = h - edgeHeight;\r\n\r\n const position = ellipsoid.cartographicToCartesian(\r\n cartographicScratch,\r\n cartesian3Scratch\r\n );\r\n Matrix4.multiplyByPoint(toENU, position, position);\r\n\r\n Cartesian3.minimumByComponent(position, minimum, minimum);\r\n Cartesian3.maximumByComponent(position, maximum, maximum);\r\n\r\n hMin = Math.min(hMin, cartographicScratch.height);\r\n }\r\n return hMin;\r\n}\r\n\r\nfunction addSkirt(\r\n vertexBuffer,\r\n vertexBufferIndex,\r\n edgeVertices,\r\n encoding,\r\n heights,\r\n uvs,\r\n octEncodedNormals,\r\n ellipsoid,\r\n rectangle,\r\n skirtLength,\r\n southMercatorY,\r\n oneOverMercatorHeight,\r\n longitudeOffset,\r\n latitudeOffset\r\n) {\r\n const hasVertexNormals = defined(octEncodedNormals);\r\n\r\n const north = rectangle.north;\r\n const south = rectangle.south;\r\n let east = rectangle.east;\r\n const west = rectangle.west;\r\n\r\n if (east < west) {\r\n east += CesiumMath.TWO_PI;\r\n }\r\n\r\n const length = edgeVertices.length;\r\n for (let i = 0; i < length; ++i) {\r\n const index = edgeVertices[i];\r\n const h = heights[index];\r\n const uv = uvs[index];\r\n\r\n cartographicScratch.longitude =\r\n CesiumMath.lerp(west, east, uv.x) + longitudeOffset;\r\n cartographicScratch.latitude =\r\n CesiumMath.lerp(south, north, uv.y) + latitudeOffset;\r\n cartographicScratch.height = h - skirtLength;\r\n\r\n const position = ellipsoid.cartographicToCartesian(\r\n cartographicScratch,\r\n cartesian3Scratch\r\n );\r\n\r\n if (hasVertexNormals) {\r\n const n = index * 2.0;\r\n toPack.x = octEncodedNormals[n];\r\n toPack.y = octEncodedNormals[n + 1];\r\n }\r\n\r\n let webMercatorT;\r\n if (encoding.hasWebMercatorT) {\r\n webMercatorT =\r\n (WebMercatorProjection.geodeticLatitudeToMercatorAngle(\r\n cartographicScratch.latitude\r\n ) -\r\n southMercatorY) *\r\n oneOverMercatorHeight;\r\n }\r\n\r\n let geodeticSurfaceNormal;\r\n if (encoding.hasGeodeticSurfaceNormals) {\r\n geodeticSurfaceNormal = ellipsoid.geodeticSurfaceNormal(position);\r\n }\r\n\r\n vertexBufferIndex = encoding.encode(\r\n vertexBuffer,\r\n vertexBufferIndex,\r\n position,\r\n uv,\r\n cartographicScratch.height,\r\n toPack,\r\n webMercatorT,\r\n geodeticSurfaceNormal\r\n );\r\n }\r\n}\r\n\r\nfunction copyAndSort(typedArray, comparator) {\r\n let copy;\r\n if (typeof typedArray.slice === \"function\") {\r\n copy = typedArray.slice();\r\n if (typeof copy.sort !== \"function\") {\r\n // Sliced typed array isn't sortable, so we can't use it.\r\n copy = undefined;\r\n }\r\n }\r\n\r\n if (!defined(copy)) {\r\n copy = Array.prototype.slice.call(typedArray);\r\n }\r\n\r\n copy.sort(comparator);\r\n\r\n return copy;\r\n}\r\nexport default createTaskProcessorWorker(\r\n createVerticesFromQuantizedTerrainMesh\r\n);\r\n"],"names":["DeveloperError","CesiumMath","defined","IndexDatatype","Cartesian3","Cartographic","Cartesian2","Rectangle","Ellipsoid","Transforms","Matrix4","WebMercatorProjection","EllipsoidalOccluder","AxisAlignedBoundingBox","TerrainEncoding"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createWallGeometry.js b/debug/cesium/Workers/createWallGeometry.js deleted file mode 100644 index 44382b0..0000000 --- a/debug/cesium/Workers/createWallGeometry.js +++ /dev/null @@ -1,649 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './Transforms-11fb6b0a', './ComponentDatatype-13a5630b', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './IndexDatatype-b4e5cf89', './Math-9be8b918', './VertexFormat-f2d74c96', './WallGeometryLibrary-4f405b12', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './arrayRemoveDuplicates-c3526030', './PolylinePipeline-3c021236', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (defaultValue, Matrix3, Transforms, ComponentDatatype, Check, GeometryAttribute, GeometryAttributes, IndexDatatype, Math, VertexFormat, WallGeometryLibrary, Matrix2, RuntimeError, combine, WebGLConstants, arrayRemoveDuplicates, PolylinePipeline, EllipsoidGeodesic, EllipsoidRhumbLine, IntersectionTests, Plane) { 'use strict'; - - const scratchCartesian3Position1 = new Matrix3.Cartesian3(); - const scratchCartesian3Position2 = new Matrix3.Cartesian3(); - const scratchCartesian3Position4 = new Matrix3.Cartesian3(); - const scratchCartesian3Position5 = new Matrix3.Cartesian3(); - const scratchBitangent = new Matrix3.Cartesian3(); - const scratchTangent = new Matrix3.Cartesian3(); - const scratchNormal = new Matrix3.Cartesian3(); - - /** - * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points, - * which extrude down to the ground. Optionally, they can extrude downwards to a specified height. - * - * @alias WallGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Number[]} [options.maximumHeights] An array parallel to positions that give the maximum height of the - * wall at positions. If undefined, the height of each position in used. - * @param {Number[]} [options.minimumHeights] An array parallel to positions that give the minimum height of the - * wall at positions. If undefined, the height at each position is 0.0. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * - * @exception {DeveloperError} positions length must be greater than or equal to 2. - * @exception {DeveloperError} positions and maximumHeights must have the same length. - * @exception {DeveloperError} positions and minimumHeights must have the same length. - * - * @see WallGeometry#createGeometry - * @see WallGeometry#fromConstantHeight - * - * @demo {@link https://sandcastle.cesium.com/index.html?src=Wall.html|Cesium Sandcastle Wall Demo} - * - * @example - * // create a wall that spans from ground level to 10000 meters - * const wall = new Cesium.WallGeometry({ - * positions : Cesium.Cartesian3.fromDegreesArrayHeights([ - * 19.0, 47.0, 10000.0, - * 19.0, 48.0, 10000.0, - * 20.0, 48.0, 10000.0, - * 20.0, 47.0, 10000.0, - * 19.0, 47.0, 10000.0 - * ]) - * }); - * const geometry = Cesium.WallGeometry.createGeometry(wall); - */ - function WallGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const wallPositions = options.positions; - const maximumHeights = options.maximumHeights; - const minimumHeights = options.minimumHeights; - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(wallPositions)) { - throw new Check.DeveloperError("options.positions is required."); - } - if ( - defaultValue.defined(maximumHeights) && - maximumHeights.length !== wallPositions.length - ) { - throw new Check.DeveloperError( - "options.positions and options.maximumHeights must have the same length." - ); - } - if ( - defaultValue.defined(minimumHeights) && - minimumHeights.length !== wallPositions.length - ) { - throw new Check.DeveloperError( - "options.positions and options.minimumHeights must have the same length." - ); - } - //>>includeEnd('debug'); - - const vertexFormat = defaultValue.defaultValue(options.vertexFormat, VertexFormat.VertexFormat.DEFAULT); - const granularity = defaultValue.defaultValue( - options.granularity, - Math.CesiumMath.RADIANS_PER_DEGREE - ); - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - - this._positions = wallPositions; - this._minimumHeights = minimumHeights; - this._maximumHeights = maximumHeights; - this._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat); - this._granularity = granularity; - this._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid); - this._workerName = "createWallGeometry"; - - let numComponents = 1 + wallPositions.length * Matrix3.Cartesian3.packedLength + 2; - if (defaultValue.defined(minimumHeights)) { - numComponents += minimumHeights.length; - } - if (defaultValue.defined(maximumHeights)) { - numComponents += maximumHeights.length; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = - numComponents + Matrix3.Ellipsoid.packedLength + VertexFormat.VertexFormat.packedLength + 1; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {WallGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - WallGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - const positions = value._positions; - let length = positions.length; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - Matrix3.Cartesian3.pack(positions[i], array, startingIndex); - } - - const minimumHeights = value._minimumHeights; - length = defaultValue.defined(minimumHeights) ? minimumHeights.length : 0; - array[startingIndex++] = length; - - if (defaultValue.defined(minimumHeights)) { - for (i = 0; i < length; ++i) { - array[startingIndex++] = minimumHeights[i]; - } - } - - const maximumHeights = value._maximumHeights; - length = defaultValue.defined(maximumHeights) ? maximumHeights.length : 0; - array[startingIndex++] = length; - - if (defaultValue.defined(maximumHeights)) { - for (i = 0; i < length; ++i) { - array[startingIndex++] = maximumHeights[i]; - } - } - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - VertexFormat.VertexFormat.pack(value._vertexFormat, array, startingIndex); - startingIndex += VertexFormat.VertexFormat.packedLength; - - array[startingIndex] = value._granularity; - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchVertexFormat = new VertexFormat.VertexFormat(); - const scratchOptions = { - positions: undefined, - minimumHeights: undefined, - maximumHeights: undefined, - ellipsoid: scratchEllipsoid, - vertexFormat: scratchVertexFormat, - granularity: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {WallGeometry} [result] The object into which to store the result. - * @returns {WallGeometry} The modified result parameter or a new WallGeometry instance if one was not provided. - */ - WallGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - let length = array[startingIndex++]; - const positions = new Array(length); - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - positions[i] = Matrix3.Cartesian3.unpack(array, startingIndex); - } - - length = array[startingIndex++]; - let minimumHeights; - - if (length > 0) { - minimumHeights = new Array(length); - for (i = 0; i < length; ++i) { - minimumHeights[i] = array[startingIndex++]; - } - } - - length = array[startingIndex++]; - let maximumHeights; - - if (length > 0) { - maximumHeights = new Array(length); - for (i = 0; i < length; ++i) { - maximumHeights[i] = array[startingIndex++]; - } - } - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const vertexFormat = VertexFormat.VertexFormat.unpack( - array, - startingIndex, - scratchVertexFormat - ); - startingIndex += VertexFormat.VertexFormat.packedLength; - - const granularity = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.positions = positions; - scratchOptions.minimumHeights = minimumHeights; - scratchOptions.maximumHeights = maximumHeights; - scratchOptions.granularity = granularity; - return new WallGeometry(scratchOptions); - } - - result._positions = positions; - result._minimumHeights = minimumHeights; - result._maximumHeights = maximumHeights; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._vertexFormat = VertexFormat.VertexFormat.clone(vertexFormat, result._vertexFormat); - result._granularity = granularity; - - return result; - }; - - /** - * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points, - * which extrude down to the ground. Optionally, they can extrude downwards to a specified height. - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall. - * @param {Number} [options.maximumHeight] A constant that defines the maximum height of the - * wall at positions. If undefined, the height of each position in used. - * @param {Number} [options.minimumHeight] A constant that defines the minimum height of the - * wall at positions. If undefined, the height at each position is 0.0. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation - * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed. - * @returns {WallGeometry} - * - * - * @example - * // create a wall that spans from 10000 meters to 20000 meters - * const wall = Cesium.WallGeometry.fromConstantHeights({ - * positions : Cesium.Cartesian3.fromDegreesArray([ - * 19.0, 47.0, - * 19.0, 48.0, - * 20.0, 48.0, - * 20.0, 47.0, - * 19.0, 47.0, - * ]), - * minimumHeight : 20000.0, - * maximumHeight : 10000.0 - * }); - * const geometry = Cesium.WallGeometry.createGeometry(wall); - * - * @see WallGeometry#createGeometry - */ - WallGeometry.fromConstantHeights = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.positions; - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions)) { - throw new Check.DeveloperError("options.positions is required."); - } - //>>includeEnd('debug'); - - let minHeights; - let maxHeights; - - const min = options.minimumHeight; - const max = options.maximumHeight; - - const doMin = defaultValue.defined(min); - const doMax = defaultValue.defined(max); - if (doMin || doMax) { - const length = positions.length; - minHeights = doMin ? new Array(length) : undefined; - maxHeights = doMax ? new Array(length) : undefined; - - for (let i = 0; i < length; ++i) { - if (doMin) { - minHeights[i] = min; - } - - if (doMax) { - maxHeights[i] = max; - } - } - } - - const newOptions = { - positions: positions, - maximumHeights: maxHeights, - minimumHeights: minHeights, - ellipsoid: options.ellipsoid, - vertexFormat: options.vertexFormat, - }; - return new WallGeometry(newOptions); - }; - - /** - * Computes the geometric representation of a wall, including its vertices, indices, and a bounding sphere. - * - * @param {WallGeometry} wallGeometry A description of the wall. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - WallGeometry.createGeometry = function (wallGeometry) { - const wallPositions = wallGeometry._positions; - const minimumHeights = wallGeometry._minimumHeights; - const maximumHeights = wallGeometry._maximumHeights; - const vertexFormat = wallGeometry._vertexFormat; - const granularity = wallGeometry._granularity; - const ellipsoid = wallGeometry._ellipsoid; - - const pos = WallGeometryLibrary.WallGeometryLibrary.computePositions( - ellipsoid, - wallPositions, - maximumHeights, - minimumHeights, - granularity, - true - ); - if (!defaultValue.defined(pos)) { - return; - } - - const bottomPositions = pos.bottomPositions; - const topPositions = pos.topPositions; - const numCorners = pos.numCorners; - - let length = topPositions.length; - let size = length * 2; - - const positions = vertexFormat.position ? new Float64Array(size) : undefined; - const normals = vertexFormat.normal ? new Float32Array(size) : undefined; - const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined; - const bitangents = vertexFormat.bitangent - ? new Float32Array(size) - : undefined; - const textureCoordinates = vertexFormat.st - ? new Float32Array((size / 3) * 2) - : undefined; - - let positionIndex = 0; - let normalIndex = 0; - let bitangentIndex = 0; - let tangentIndex = 0; - let stIndex = 0; - - // add lower and upper points one after the other, lower - // points being even and upper points being odd - let normal = scratchNormal; - let tangent = scratchTangent; - let bitangent = scratchBitangent; - let recomputeNormal = true; - length /= 3; - let i; - let s = 0; - const ds = 1 / (length - numCorners - 1); - for (i = 0; i < length; ++i) { - const i3 = i * 3; - const topPosition = Matrix3.Cartesian3.fromArray( - topPositions, - i3, - scratchCartesian3Position1 - ); - const bottomPosition = Matrix3.Cartesian3.fromArray( - bottomPositions, - i3, - scratchCartesian3Position2 - ); - if (vertexFormat.position) { - // insert the lower point - positions[positionIndex++] = bottomPosition.x; - positions[positionIndex++] = bottomPosition.y; - positions[positionIndex++] = bottomPosition.z; - - // insert the upper point - positions[positionIndex++] = topPosition.x; - positions[positionIndex++] = topPosition.y; - positions[positionIndex++] = topPosition.z; - } - - if (vertexFormat.st) { - textureCoordinates[stIndex++] = s; - textureCoordinates[stIndex++] = 0.0; - - textureCoordinates[stIndex++] = s; - textureCoordinates[stIndex++] = 1.0; - } - - if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) { - let nextTop = Matrix3.Cartesian3.clone( - Matrix3.Cartesian3.ZERO, - scratchCartesian3Position5 - ); - const groundPosition = Matrix3.Cartesian3.subtract( - topPosition, - ellipsoid.geodeticSurfaceNormal( - topPosition, - scratchCartesian3Position2 - ), - scratchCartesian3Position2 - ); - if (i + 1 < length) { - nextTop = Matrix3.Cartesian3.fromArray( - topPositions, - i3 + 3, - scratchCartesian3Position5 - ); - } - - if (recomputeNormal) { - const scalednextPosition = Matrix3.Cartesian3.subtract( - nextTop, - topPosition, - scratchCartesian3Position4 - ); - const scaledGroundPosition = Matrix3.Cartesian3.subtract( - groundPosition, - topPosition, - scratchCartesian3Position1 - ); - normal = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(scaledGroundPosition, scalednextPosition, normal), - normal - ); - recomputeNormal = false; - } - - if ( - Matrix3.Cartesian3.equalsEpsilon(topPosition, nextTop, Math.CesiumMath.EPSILON10) - ) { - recomputeNormal = true; - } else { - s += ds; - if (vertexFormat.tangent) { - tangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.subtract(nextTop, topPosition, tangent), - tangent - ); - } - if (vertexFormat.bitangent) { - bitangent = Matrix3.Cartesian3.normalize( - Matrix3.Cartesian3.cross(normal, tangent, bitangent), - bitangent - ); - } - } - - if (vertexFormat.normal) { - normals[normalIndex++] = normal.x; - normals[normalIndex++] = normal.y; - normals[normalIndex++] = normal.z; - - normals[normalIndex++] = normal.x; - normals[normalIndex++] = normal.y; - normals[normalIndex++] = normal.z; - } - - if (vertexFormat.tangent) { - tangents[tangentIndex++] = tangent.x; - tangents[tangentIndex++] = tangent.y; - tangents[tangentIndex++] = tangent.z; - - tangents[tangentIndex++] = tangent.x; - tangents[tangentIndex++] = tangent.y; - tangents[tangentIndex++] = tangent.z; - } - - if (vertexFormat.bitangent) { - bitangents[bitangentIndex++] = bitangent.x; - bitangents[bitangentIndex++] = bitangent.y; - bitangents[bitangentIndex++] = bitangent.z; - - bitangents[bitangentIndex++] = bitangent.x; - bitangents[bitangentIndex++] = bitangent.y; - bitangents[bitangentIndex++] = bitangent.z; - } - } - } - - const attributes = new GeometryAttributes.GeometryAttributes(); - - if (vertexFormat.position) { - attributes.position = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }); - } - - if (vertexFormat.normal) { - attributes.normal = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: normals, - }); - } - - if (vertexFormat.tangent) { - attributes.tangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: tangents, - }); - } - - if (vertexFormat.bitangent) { - attributes.bitangent = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 3, - values: bitangents, - }); - } - - if (vertexFormat.st) { - attributes.st = new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.FLOAT, - componentsPerAttribute: 2, - values: textureCoordinates, - }); - } - - // prepare the side walls, two triangles for each wall - // - // A (i+1) B (i+3) E - // +--------+-------+ - // | / | /| triangles: A C B - // | / | / | B C D - // | / | / | - // | / | / | - // | / | / | - // | / | / | - // +--------+-------+ - // C (i) D (i+2) F - // - - const numVertices = size / 3; - size -= 6 * (numCorners + 1); - const indices = IndexDatatype.IndexDatatype.createTypedArray(numVertices, size); - - let edgeIndex = 0; - for (i = 0; i < numVertices - 2; i += 2) { - const LL = i; - const LR = i + 2; - const pl = Matrix3.Cartesian3.fromArray( - positions, - LL * 3, - scratchCartesian3Position1 - ); - const pr = Matrix3.Cartesian3.fromArray( - positions, - LR * 3, - scratchCartesian3Position2 - ); - if (Matrix3.Cartesian3.equalsEpsilon(pl, pr, Math.CesiumMath.EPSILON10)) { - continue; - } - const UL = i + 1; - const UR = i + 3; - - indices[edgeIndex++] = UL; - indices[edgeIndex++] = LL; - indices[edgeIndex++] = UR; - indices[edgeIndex++] = UR; - indices[edgeIndex++] = LL; - indices[edgeIndex++] = LR; - } - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.TRIANGLES, - boundingSphere: new Transforms.BoundingSphere.fromVertices(positions), - }); - }; - - function createWallGeometry(wallGeometry, offset) { - if (defaultValue.defined(offset)) { - wallGeometry = WallGeometry.unpack(wallGeometry, offset); - } - wallGeometry._ellipsoid = Matrix3.Ellipsoid.clone(wallGeometry._ellipsoid); - return WallGeometry.createGeometry(wallGeometry); - } - - return createWallGeometry; - -})); -//# sourceMappingURL=createWallGeometry.js.map diff --git a/debug/cesium/Workers/createWallGeometry.js.map b/debug/cesium/Workers/createWallGeometry.js.map deleted file mode 100644 index 34b2958..0000000 --- a/debug/cesium/Workers/createWallGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createWallGeometry.js","sources":["../../../Source/Core/WallGeometry.js","../../../Source/WorkersES6/createWallGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport VertexFormat from \"./VertexFormat.js\";\r\nimport WallGeometryLibrary from \"./WallGeometryLibrary.js\";\r\n\r\nconst scratchCartesian3Position1 = new Cartesian3();\r\nconst scratchCartesian3Position2 = new Cartesian3();\r\nconst scratchCartesian3Position4 = new Cartesian3();\r\nconst scratchCartesian3Position5 = new Cartesian3();\r\nconst scratchBitangent = new Cartesian3();\r\nconst scratchTangent = new Cartesian3();\r\nconst scratchNormal = new Cartesian3();\r\n\r\n/**\r\n * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points,\r\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\r\n *\r\n * @alias WallGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Number[]} [options.maximumHeights] An array parallel to positions that give the maximum height of the\r\n * wall at positions. If undefined, the height of each position in used.\r\n * @param {Number[]} [options.minimumHeights] An array parallel to positions that give the minimum height of the\r\n * wall at positions. If undefined, the height at each position is 0.0.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n *\r\n * @exception {DeveloperError} positions length must be greater than or equal to 2.\r\n * @exception {DeveloperError} positions and maximumHeights must have the same length.\r\n * @exception {DeveloperError} positions and minimumHeights must have the same length.\r\n *\r\n * @see WallGeometry#createGeometry\r\n * @see WallGeometry#fromConstantHeight\r\n *\r\n * @demo {@link https://sandcastle.cesium.com/index.html?src=Wall.html|Cesium Sandcastle Wall Demo}\r\n *\r\n * @example\r\n * // create a wall that spans from ground level to 10000 meters\r\n * const wall = new Cesium.WallGeometry({\r\n * positions : Cesium.Cartesian3.fromDegreesArrayHeights([\r\n * 19.0, 47.0, 10000.0,\r\n * 19.0, 48.0, 10000.0,\r\n * 20.0, 48.0, 10000.0,\r\n * 20.0, 47.0, 10000.0,\r\n * 19.0, 47.0, 10000.0\r\n * ])\r\n * });\r\n * const geometry = Cesium.WallGeometry.createGeometry(wall);\r\n */\r\nfunction WallGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const wallPositions = options.positions;\r\n const maximumHeights = options.maximumHeights;\r\n const minimumHeights = options.minimumHeights;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(wallPositions)) {\r\n throw new DeveloperError(\"options.positions is required.\");\r\n }\r\n if (\r\n defined(maximumHeights) &&\r\n maximumHeights.length !== wallPositions.length\r\n ) {\r\n throw new DeveloperError(\r\n \"options.positions and options.maximumHeights must have the same length.\"\r\n );\r\n }\r\n if (\r\n defined(minimumHeights) &&\r\n minimumHeights.length !== wallPositions.length\r\n ) {\r\n throw new DeveloperError(\r\n \"options.positions and options.minimumHeights must have the same length.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const vertexFormat = defaultValue(options.vertexFormat, VertexFormat.DEFAULT);\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n\r\n this._positions = wallPositions;\r\n this._minimumHeights = minimumHeights;\r\n this._maximumHeights = maximumHeights;\r\n this._vertexFormat = VertexFormat.clone(vertexFormat);\r\n this._granularity = granularity;\r\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\r\n this._workerName = \"createWallGeometry\";\r\n\r\n let numComponents = 1 + wallPositions.length * Cartesian3.packedLength + 2;\r\n if (defined(minimumHeights)) {\r\n numComponents += minimumHeights.length;\r\n }\r\n if (defined(maximumHeights)) {\r\n numComponents += maximumHeights.length;\r\n }\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength =\r\n numComponents + Ellipsoid.packedLength + VertexFormat.packedLength + 1;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {WallGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nWallGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n const positions = value._positions;\r\n let length = positions.length;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n Cartesian3.pack(positions[i], array, startingIndex);\r\n }\r\n\r\n const minimumHeights = value._minimumHeights;\r\n length = defined(minimumHeights) ? minimumHeights.length : 0;\r\n array[startingIndex++] = length;\r\n\r\n if (defined(minimumHeights)) {\r\n for (i = 0; i < length; ++i) {\r\n array[startingIndex++] = minimumHeights[i];\r\n }\r\n }\r\n\r\n const maximumHeights = value._maximumHeights;\r\n length = defined(maximumHeights) ? maximumHeights.length : 0;\r\n array[startingIndex++] = length;\r\n\r\n if (defined(maximumHeights)) {\r\n for (i = 0; i < length; ++i) {\r\n array[startingIndex++] = maximumHeights[i];\r\n }\r\n }\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n VertexFormat.pack(value._vertexFormat, array, startingIndex);\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n array[startingIndex] = value._granularity;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchVertexFormat = new VertexFormat();\r\nconst scratchOptions = {\r\n positions: undefined,\r\n minimumHeights: undefined,\r\n maximumHeights: undefined,\r\n ellipsoid: scratchEllipsoid,\r\n vertexFormat: scratchVertexFormat,\r\n granularity: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {WallGeometry} [result] The object into which to store the result.\r\n * @returns {WallGeometry} The modified result parameter or a new WallGeometry instance if one was not provided.\r\n */\r\nWallGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n let length = array[startingIndex++];\r\n const positions = new Array(length);\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n positions[i] = Cartesian3.unpack(array, startingIndex);\r\n }\r\n\r\n length = array[startingIndex++];\r\n let minimumHeights;\r\n\r\n if (length > 0) {\r\n minimumHeights = new Array(length);\r\n for (i = 0; i < length; ++i) {\r\n minimumHeights[i] = array[startingIndex++];\r\n }\r\n }\r\n\r\n length = array[startingIndex++];\r\n let maximumHeights;\r\n\r\n if (length > 0) {\r\n maximumHeights = new Array(length);\r\n for (i = 0; i < length; ++i) {\r\n maximumHeights[i] = array[startingIndex++];\r\n }\r\n }\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const vertexFormat = VertexFormat.unpack(\r\n array,\r\n startingIndex,\r\n scratchVertexFormat\r\n );\r\n startingIndex += VertexFormat.packedLength;\r\n\r\n const granularity = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.positions = positions;\r\n scratchOptions.minimumHeights = minimumHeights;\r\n scratchOptions.maximumHeights = maximumHeights;\r\n scratchOptions.granularity = granularity;\r\n return new WallGeometry(scratchOptions);\r\n }\r\n\r\n result._positions = positions;\r\n result._minimumHeights = minimumHeights;\r\n result._maximumHeights = maximumHeights;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._vertexFormat = VertexFormat.clone(vertexFormat, result._vertexFormat);\r\n result._granularity = granularity;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * A description of a wall, which is similar to a KML line string. A wall is defined by a series of points,\r\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\r\n * @param {Number} [options.maximumHeight] A constant that defines the maximum height of the\r\n * wall at positions. If undefined, the height of each position in used.\r\n * @param {Number} [options.minimumHeight] A constant that defines the minimum height of the\r\n * wall at positions. If undefined, the height at each position is 0.0.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation\r\n * @param {VertexFormat} [options.vertexFormat=VertexFormat.DEFAULT] The vertex attributes to be computed.\r\n * @returns {WallGeometry}\r\n *\r\n *\r\n * @example\r\n * // create a wall that spans from 10000 meters to 20000 meters\r\n * const wall = Cesium.WallGeometry.fromConstantHeights({\r\n * positions : Cesium.Cartesian3.fromDegreesArray([\r\n * 19.0, 47.0,\r\n * 19.0, 48.0,\r\n * 20.0, 48.0,\r\n * 20.0, 47.0,\r\n * 19.0, 47.0,\r\n * ]),\r\n * minimumHeight : 20000.0,\r\n * maximumHeight : 10000.0\r\n * });\r\n * const geometry = Cesium.WallGeometry.createGeometry(wall);\r\n *\r\n * @see WallGeometry#createGeometry\r\n */\r\nWallGeometry.fromConstantHeights = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.positions;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions)) {\r\n throw new DeveloperError(\"options.positions is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let minHeights;\r\n let maxHeights;\r\n\r\n const min = options.minimumHeight;\r\n const max = options.maximumHeight;\r\n\r\n const doMin = defined(min);\r\n const doMax = defined(max);\r\n if (doMin || doMax) {\r\n const length = positions.length;\r\n minHeights = doMin ? new Array(length) : undefined;\r\n maxHeights = doMax ? new Array(length) : undefined;\r\n\r\n for (let i = 0; i < length; ++i) {\r\n if (doMin) {\r\n minHeights[i] = min;\r\n }\r\n\r\n if (doMax) {\r\n maxHeights[i] = max;\r\n }\r\n }\r\n }\r\n\r\n const newOptions = {\r\n positions: positions,\r\n maximumHeights: maxHeights,\r\n minimumHeights: minHeights,\r\n ellipsoid: options.ellipsoid,\r\n vertexFormat: options.vertexFormat,\r\n };\r\n return new WallGeometry(newOptions);\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a wall, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {WallGeometry} wallGeometry A description of the wall.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nWallGeometry.createGeometry = function (wallGeometry) {\r\n const wallPositions = wallGeometry._positions;\r\n const minimumHeights = wallGeometry._minimumHeights;\r\n const maximumHeights = wallGeometry._maximumHeights;\r\n const vertexFormat = wallGeometry._vertexFormat;\r\n const granularity = wallGeometry._granularity;\r\n const ellipsoid = wallGeometry._ellipsoid;\r\n\r\n const pos = WallGeometryLibrary.computePositions(\r\n ellipsoid,\r\n wallPositions,\r\n maximumHeights,\r\n minimumHeights,\r\n granularity,\r\n true\r\n );\r\n if (!defined(pos)) {\r\n return;\r\n }\r\n\r\n const bottomPositions = pos.bottomPositions;\r\n const topPositions = pos.topPositions;\r\n const numCorners = pos.numCorners;\r\n\r\n let length = topPositions.length;\r\n let size = length * 2;\r\n\r\n const positions = vertexFormat.position ? new Float64Array(size) : undefined;\r\n const normals = vertexFormat.normal ? new Float32Array(size) : undefined;\r\n const tangents = vertexFormat.tangent ? new Float32Array(size) : undefined;\r\n const bitangents = vertexFormat.bitangent\r\n ? new Float32Array(size)\r\n : undefined;\r\n const textureCoordinates = vertexFormat.st\r\n ? new Float32Array((size / 3) * 2)\r\n : undefined;\r\n\r\n let positionIndex = 0;\r\n let normalIndex = 0;\r\n let bitangentIndex = 0;\r\n let tangentIndex = 0;\r\n let stIndex = 0;\r\n\r\n // add lower and upper points one after the other, lower\r\n // points being even and upper points being odd\r\n let normal = scratchNormal;\r\n let tangent = scratchTangent;\r\n let bitangent = scratchBitangent;\r\n let recomputeNormal = true;\r\n length /= 3;\r\n let i;\r\n let s = 0;\r\n const ds = 1 / (length - numCorners - 1);\r\n for (i = 0; i < length; ++i) {\r\n const i3 = i * 3;\r\n const topPosition = Cartesian3.fromArray(\r\n topPositions,\r\n i3,\r\n scratchCartesian3Position1\r\n );\r\n const bottomPosition = Cartesian3.fromArray(\r\n bottomPositions,\r\n i3,\r\n scratchCartesian3Position2\r\n );\r\n if (vertexFormat.position) {\r\n // insert the lower point\r\n positions[positionIndex++] = bottomPosition.x;\r\n positions[positionIndex++] = bottomPosition.y;\r\n positions[positionIndex++] = bottomPosition.z;\r\n\r\n // insert the upper point\r\n positions[positionIndex++] = topPosition.x;\r\n positions[positionIndex++] = topPosition.y;\r\n positions[positionIndex++] = topPosition.z;\r\n }\r\n\r\n if (vertexFormat.st) {\r\n textureCoordinates[stIndex++] = s;\r\n textureCoordinates[stIndex++] = 0.0;\r\n\r\n textureCoordinates[stIndex++] = s;\r\n textureCoordinates[stIndex++] = 1.0;\r\n }\r\n\r\n if (vertexFormat.normal || vertexFormat.tangent || vertexFormat.bitangent) {\r\n let nextTop = Cartesian3.clone(\r\n Cartesian3.ZERO,\r\n scratchCartesian3Position5\r\n );\r\n const groundPosition = Cartesian3.subtract(\r\n topPosition,\r\n ellipsoid.geodeticSurfaceNormal(\r\n topPosition,\r\n scratchCartesian3Position2\r\n ),\r\n scratchCartesian3Position2\r\n );\r\n if (i + 1 < length) {\r\n nextTop = Cartesian3.fromArray(\r\n topPositions,\r\n i3 + 3,\r\n scratchCartesian3Position5\r\n );\r\n }\r\n\r\n if (recomputeNormal) {\r\n const scalednextPosition = Cartesian3.subtract(\r\n nextTop,\r\n topPosition,\r\n scratchCartesian3Position4\r\n );\r\n const scaledGroundPosition = Cartesian3.subtract(\r\n groundPosition,\r\n topPosition,\r\n scratchCartesian3Position1\r\n );\r\n normal = Cartesian3.normalize(\r\n Cartesian3.cross(scaledGroundPosition, scalednextPosition, normal),\r\n normal\r\n );\r\n recomputeNormal = false;\r\n }\r\n\r\n if (\r\n Cartesian3.equalsEpsilon(topPosition, nextTop, CesiumMath.EPSILON10)\r\n ) {\r\n recomputeNormal = true;\r\n } else {\r\n s += ds;\r\n if (vertexFormat.tangent) {\r\n tangent = Cartesian3.normalize(\r\n Cartesian3.subtract(nextTop, topPosition, tangent),\r\n tangent\r\n );\r\n }\r\n if (vertexFormat.bitangent) {\r\n bitangent = Cartesian3.normalize(\r\n Cartesian3.cross(normal, tangent, bitangent),\r\n bitangent\r\n );\r\n }\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n normals[normalIndex++] = normal.x;\r\n normals[normalIndex++] = normal.y;\r\n normals[normalIndex++] = normal.z;\r\n\r\n normals[normalIndex++] = normal.x;\r\n normals[normalIndex++] = normal.y;\r\n normals[normalIndex++] = normal.z;\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n tangents[tangentIndex++] = tangent.x;\r\n tangents[tangentIndex++] = tangent.y;\r\n tangents[tangentIndex++] = tangent.z;\r\n\r\n tangents[tangentIndex++] = tangent.x;\r\n tangents[tangentIndex++] = tangent.y;\r\n tangents[tangentIndex++] = tangent.z;\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n bitangents[bitangentIndex++] = bitangent.x;\r\n bitangents[bitangentIndex++] = bitangent.y;\r\n bitangents[bitangentIndex++] = bitangent.z;\r\n\r\n bitangents[bitangentIndex++] = bitangent.x;\r\n bitangents[bitangentIndex++] = bitangent.y;\r\n bitangents[bitangentIndex++] = bitangent.z;\r\n }\r\n }\r\n }\r\n\r\n const attributes = new GeometryAttributes();\r\n\r\n if (vertexFormat.position) {\r\n attributes.position = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n });\r\n }\r\n\r\n if (vertexFormat.normal) {\r\n attributes.normal = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: normals,\r\n });\r\n }\r\n\r\n if (vertexFormat.tangent) {\r\n attributes.tangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: tangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.bitangent) {\r\n attributes.bitangent = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 3,\r\n values: bitangents,\r\n });\r\n }\r\n\r\n if (vertexFormat.st) {\r\n attributes.st = new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.FLOAT,\r\n componentsPerAttribute: 2,\r\n values: textureCoordinates,\r\n });\r\n }\r\n\r\n // prepare the side walls, two triangles for each wall\r\n //\r\n // A (i+1) B (i+3) E\r\n // +--------+-------+\r\n // | / | /| triangles: A C B\r\n // | / | / | B C D\r\n // | / | / |\r\n // | / | / |\r\n // | / | / |\r\n // | / | / |\r\n // +--------+-------+\r\n // C (i) D (i+2) F\r\n //\r\n\r\n const numVertices = size / 3;\r\n size -= 6 * (numCorners + 1);\r\n const indices = IndexDatatype.createTypedArray(numVertices, size);\r\n\r\n let edgeIndex = 0;\r\n for (i = 0; i < numVertices - 2; i += 2) {\r\n const LL = i;\r\n const LR = i + 2;\r\n const pl = Cartesian3.fromArray(\r\n positions,\r\n LL * 3,\r\n scratchCartesian3Position1\r\n );\r\n const pr = Cartesian3.fromArray(\r\n positions,\r\n LR * 3,\r\n scratchCartesian3Position2\r\n );\r\n if (Cartesian3.equalsEpsilon(pl, pr, CesiumMath.EPSILON10)) {\r\n continue;\r\n }\r\n const UL = i + 1;\r\n const UR = i + 3;\r\n\r\n indices[edgeIndex++] = UL;\r\n indices[edgeIndex++] = LL;\r\n indices[edgeIndex++] = UR;\r\n indices[edgeIndex++] = UR;\r\n indices[edgeIndex++] = LL;\r\n indices[edgeIndex++] = LR;\r\n }\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.TRIANGLES,\r\n boundingSphere: new BoundingSphere.fromVertices(positions),\r\n });\r\n};\r\nexport default WallGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport WallGeometry from \"../Core/WallGeometry.js\";\r\n\r\nfunction createWallGeometry(wallGeometry, offset) {\r\n if (defined(offset)) {\r\n wallGeometry = WallGeometry.unpack(wallGeometry, offset);\r\n }\r\n wallGeometry._ellipsoid = Ellipsoid.clone(wallGeometry._ellipsoid);\r\n return WallGeometry.createGeometry(wallGeometry);\r\n}\r\nexport default createWallGeometry;\r\n"],"names":["Cartesian3","defaultValue","defined","DeveloperError","VertexFormat","CesiumMath","Ellipsoid","WallGeometryLibrary","GeometryAttributes","GeometryAttribute","ComponentDatatype","IndexDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/createWallOutlineGeometry.js b/debug/cesium/Workers/createWallOutlineGeometry.js deleted file mode 100644 index 4f3db22..0000000 --- a/debug/cesium/Workers/createWallOutlineGeometry.js +++ /dev/null @@ -1,458 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Matrix3-f22b0303', './Transforms-11fb6b0a', './ComponentDatatype-13a5630b', './Check-d10e5f2e', './GeometryAttribute-f2746b95', './GeometryAttributes-eb2609b7', './IndexDatatype-b4e5cf89', './Math-9be8b918', './WallGeometryLibrary-4f405b12', './Matrix2-036c77dd', './RuntimeError-e5c6a8b9', './combine-4598d225', './WebGLConstants-f27a5e29', './arrayRemoveDuplicates-c3526030', './PolylinePipeline-3c021236', './EllipsoidGeodesic-38d0ed4a', './EllipsoidRhumbLine-48b4507b', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (defaultValue, Matrix3, Transforms, ComponentDatatype, Check, GeometryAttribute, GeometryAttributes, IndexDatatype, Math, WallGeometryLibrary, Matrix2, RuntimeError, combine, WebGLConstants, arrayRemoveDuplicates, PolylinePipeline, EllipsoidGeodesic, EllipsoidRhumbLine, IntersectionTests, Plane) { 'use strict'; - - const scratchCartesian3Position1 = new Matrix3.Cartesian3(); - const scratchCartesian3Position2 = new Matrix3.Cartesian3(); - - /** - * A description of a wall outline. A wall is defined by a series of points, - * which extrude down to the ground. Optionally, they can extrude downwards to a specified height. - * - * @alias WallOutlineGeometry - * @constructor - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall. - * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer. - * @param {Number[]} [options.maximumHeights] An array parallel to positions that give the maximum height of the - * wall at positions. If undefined, the height of each position in used. - * @param {Number[]} [options.minimumHeights] An array parallel to positions that give the minimum height of the - * wall at positions. If undefined, the height at each position is 0.0. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation - * - * @exception {DeveloperError} positions length must be greater than or equal to 2. - * @exception {DeveloperError} positions and maximumHeights must have the same length. - * @exception {DeveloperError} positions and minimumHeights must have the same length. - * - * @see WallGeometry#createGeometry - * @see WallGeometry#fromConstantHeight - * - * @example - * // create a wall outline that spans from ground level to 10000 meters - * const wall = new Cesium.WallOutlineGeometry({ - * positions : Cesium.Cartesian3.fromDegreesArrayHeights([ - * 19.0, 47.0, 10000.0, - * 19.0, 48.0, 10000.0, - * 20.0, 48.0, 10000.0, - * 20.0, 47.0, 10000.0, - * 19.0, 47.0, 10000.0 - * ]) - * }); - * const geometry = Cesium.WallOutlineGeometry.createGeometry(wall); - */ - function WallOutlineGeometry(options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - - const wallPositions = options.positions; - const maximumHeights = options.maximumHeights; - const minimumHeights = options.minimumHeights; - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(wallPositions)) { - throw new Check.DeveloperError("options.positions is required."); - } - if ( - defaultValue.defined(maximumHeights) && - maximumHeights.length !== wallPositions.length - ) { - throw new Check.DeveloperError( - "options.positions and options.maximumHeights must have the same length." - ); - } - if ( - defaultValue.defined(minimumHeights) && - minimumHeights.length !== wallPositions.length - ) { - throw new Check.DeveloperError( - "options.positions and options.minimumHeights must have the same length." - ); - } - //>>includeEnd('debug'); - - const granularity = defaultValue.defaultValue( - options.granularity, - Math.CesiumMath.RADIANS_PER_DEGREE - ); - const ellipsoid = defaultValue.defaultValue(options.ellipsoid, Matrix3.Ellipsoid.WGS84); - - this._positions = wallPositions; - this._minimumHeights = minimumHeights; - this._maximumHeights = maximumHeights; - this._granularity = granularity; - this._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid); - this._workerName = "createWallOutlineGeometry"; - - let numComponents = 1 + wallPositions.length * Matrix3.Cartesian3.packedLength + 2; - if (defaultValue.defined(minimumHeights)) { - numComponents += minimumHeights.length; - } - if (defaultValue.defined(maximumHeights)) { - numComponents += maximumHeights.length; - } - - /** - * The number of elements used to pack the object into an array. - * @type {Number} - */ - this.packedLength = numComponents + Matrix3.Ellipsoid.packedLength + 1; - } - - /** - * Stores the provided instance into the provided array. - * - * @param {WallOutlineGeometry} value The value to pack. - * @param {Number[]} array The array to pack into. - * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements. - * - * @returns {Number[]} The array that was packed into - */ - WallOutlineGeometry.pack = function (value, array, startingIndex) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(value)) { - throw new Check.DeveloperError("value is required"); - } - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - const positions = value._positions; - let length = positions.length; - array[startingIndex++] = length; - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - Matrix3.Cartesian3.pack(positions[i], array, startingIndex); - } - - const minimumHeights = value._minimumHeights; - length = defaultValue.defined(minimumHeights) ? minimumHeights.length : 0; - array[startingIndex++] = length; - - if (defaultValue.defined(minimumHeights)) { - for (i = 0; i < length; ++i) { - array[startingIndex++] = minimumHeights[i]; - } - } - - const maximumHeights = value._maximumHeights; - length = defaultValue.defined(maximumHeights) ? maximumHeights.length : 0; - array[startingIndex++] = length; - - if (defaultValue.defined(maximumHeights)) { - for (i = 0; i < length; ++i) { - array[startingIndex++] = maximumHeights[i]; - } - } - - Matrix3.Ellipsoid.pack(value._ellipsoid, array, startingIndex); - startingIndex += Matrix3.Ellipsoid.packedLength; - - array[startingIndex] = value._granularity; - - return array; - }; - - const scratchEllipsoid = Matrix3.Ellipsoid.clone(Matrix3.Ellipsoid.UNIT_SPHERE); - const scratchOptions = { - positions: undefined, - minimumHeights: undefined, - maximumHeights: undefined, - ellipsoid: scratchEllipsoid, - granularity: undefined, - }; - - /** - * Retrieves an instance from a packed array. - * - * @param {Number[]} array The packed array. - * @param {Number} [startingIndex=0] The starting index of the element to be unpacked. - * @param {WallOutlineGeometry} [result] The object into which to store the result. - * @returns {WallOutlineGeometry} The modified result parameter or a new WallOutlineGeometry instance if one was not provided. - */ - WallOutlineGeometry.unpack = function (array, startingIndex, result) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(array)) { - throw new Check.DeveloperError("array is required"); - } - //>>includeEnd('debug'); - - startingIndex = defaultValue.defaultValue(startingIndex, 0); - - let i; - - let length = array[startingIndex++]; - const positions = new Array(length); - - for (i = 0; i < length; ++i, startingIndex += Matrix3.Cartesian3.packedLength) { - positions[i] = Matrix3.Cartesian3.unpack(array, startingIndex); - } - - length = array[startingIndex++]; - let minimumHeights; - - if (length > 0) { - minimumHeights = new Array(length); - for (i = 0; i < length; ++i) { - minimumHeights[i] = array[startingIndex++]; - } - } - - length = array[startingIndex++]; - let maximumHeights; - - if (length > 0) { - maximumHeights = new Array(length); - for (i = 0; i < length; ++i) { - maximumHeights[i] = array[startingIndex++]; - } - } - - const ellipsoid = Matrix3.Ellipsoid.unpack(array, startingIndex, scratchEllipsoid); - startingIndex += Matrix3.Ellipsoid.packedLength; - - const granularity = array[startingIndex]; - - if (!defaultValue.defined(result)) { - scratchOptions.positions = positions; - scratchOptions.minimumHeights = minimumHeights; - scratchOptions.maximumHeights = maximumHeights; - scratchOptions.granularity = granularity; - return new WallOutlineGeometry(scratchOptions); - } - - result._positions = positions; - result._minimumHeights = minimumHeights; - result._maximumHeights = maximumHeights; - result._ellipsoid = Matrix3.Ellipsoid.clone(ellipsoid, result._ellipsoid); - result._granularity = granularity; - - return result; - }; - - /** - * A description of a walloutline. A wall is defined by a series of points, - * which extrude down to the ground. Optionally, they can extrude downwards to a specified height. - * - * @param {Object} options Object with the following properties: - * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall. - * @param {Number} [options.maximumHeight] A constant that defines the maximum height of the - * wall at positions. If undefined, the height of each position in used. - * @param {Number} [options.minimumHeight] A constant that defines the minimum height of the - * wall at positions. If undefined, the height at each position is 0.0. - * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation - * @returns {WallOutlineGeometry} - * - * - * @example - * // create a wall that spans from 10000 meters to 20000 meters - * const wall = Cesium.WallOutlineGeometry.fromConstantHeights({ - * positions : Cesium.Cartesian3.fromDegreesArray([ - * 19.0, 47.0, - * 19.0, 48.0, - * 20.0, 48.0, - * 20.0, 47.0, - * 19.0, 47.0, - * ]), - * minimumHeight : 20000.0, - * maximumHeight : 10000.0 - * }); - * const geometry = Cesium.WallOutlineGeometry.createGeometry(wall); - * - * @see WallOutlineGeometry#createGeometry - */ - WallOutlineGeometry.fromConstantHeights = function (options) { - options = defaultValue.defaultValue(options, defaultValue.defaultValue.EMPTY_OBJECT); - const positions = options.positions; - - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(positions)) { - throw new Check.DeveloperError("options.positions is required."); - } - //>>includeEnd('debug'); - - let minHeights; - let maxHeights; - - const min = options.minimumHeight; - const max = options.maximumHeight; - - const doMin = defaultValue.defined(min); - const doMax = defaultValue.defined(max); - if (doMin || doMax) { - const length = positions.length; - minHeights = doMin ? new Array(length) : undefined; - maxHeights = doMax ? new Array(length) : undefined; - - for (let i = 0; i < length; ++i) { - if (doMin) { - minHeights[i] = min; - } - - if (doMax) { - maxHeights[i] = max; - } - } - } - - const newOptions = { - positions: positions, - maximumHeights: maxHeights, - minimumHeights: minHeights, - ellipsoid: options.ellipsoid, - }; - return new WallOutlineGeometry(newOptions); - }; - - /** - * Computes the geometric representation of a wall outline, including its vertices, indices, and a bounding sphere. - * - * @param {WallOutlineGeometry} wallGeometry A description of the wall outline. - * @returns {Geometry|undefined} The computed vertices and indices. - */ - WallOutlineGeometry.createGeometry = function (wallGeometry) { - const wallPositions = wallGeometry._positions; - const minimumHeights = wallGeometry._minimumHeights; - const maximumHeights = wallGeometry._maximumHeights; - const granularity = wallGeometry._granularity; - const ellipsoid = wallGeometry._ellipsoid; - - const pos = WallGeometryLibrary.WallGeometryLibrary.computePositions( - ellipsoid, - wallPositions, - maximumHeights, - minimumHeights, - granularity, - false - ); - if (!defaultValue.defined(pos)) { - return; - } - - const bottomPositions = pos.bottomPositions; - const topPositions = pos.topPositions; - - let length = topPositions.length; - let size = length * 2; - - const positions = new Float64Array(size); - let positionIndex = 0; - - // add lower and upper points one after the other, lower - // points being even and upper points being odd - length /= 3; - let i; - for (i = 0; i < length; ++i) { - const i3 = i * 3; - const topPosition = Matrix3.Cartesian3.fromArray( - topPositions, - i3, - scratchCartesian3Position1 - ); - const bottomPosition = Matrix3.Cartesian3.fromArray( - bottomPositions, - i3, - scratchCartesian3Position2 - ); - - // insert the lower point - positions[positionIndex++] = bottomPosition.x; - positions[positionIndex++] = bottomPosition.y; - positions[positionIndex++] = bottomPosition.z; - - // insert the upper point - positions[positionIndex++] = topPosition.x; - positions[positionIndex++] = topPosition.y; - positions[positionIndex++] = topPosition.z; - } - - const attributes = new GeometryAttributes.GeometryAttributes({ - position: new GeometryAttribute.GeometryAttribute({ - componentDatatype: ComponentDatatype.ComponentDatatype.DOUBLE, - componentsPerAttribute: 3, - values: positions, - }), - }); - - const numVertices = size / 3; - size = 2 * numVertices - 4 + numVertices; - const indices = IndexDatatype.IndexDatatype.createTypedArray(numVertices, size); - - let edgeIndex = 0; - for (i = 0; i < numVertices - 2; i += 2) { - const LL = i; - const LR = i + 2; - const pl = Matrix3.Cartesian3.fromArray( - positions, - LL * 3, - scratchCartesian3Position1 - ); - const pr = Matrix3.Cartesian3.fromArray( - positions, - LR * 3, - scratchCartesian3Position2 - ); - if (Matrix3.Cartesian3.equalsEpsilon(pl, pr, Math.CesiumMath.EPSILON10)) { - continue; - } - const UL = i + 1; - const UR = i + 3; - - indices[edgeIndex++] = UL; - indices[edgeIndex++] = LL; - indices[edgeIndex++] = UL; - indices[edgeIndex++] = UR; - indices[edgeIndex++] = LL; - indices[edgeIndex++] = LR; - } - - indices[edgeIndex++] = numVertices - 2; - indices[edgeIndex++] = numVertices - 1; - - return new GeometryAttribute.Geometry({ - attributes: attributes, - indices: indices, - primitiveType: GeometryAttribute.PrimitiveType.LINES, - boundingSphere: new Transforms.BoundingSphere.fromVertices(positions), - }); - }; - - function createWallOutlineGeometry(wallGeometry, offset) { - if (defaultValue.defined(offset)) { - wallGeometry = WallOutlineGeometry.unpack(wallGeometry, offset); - } - wallGeometry._ellipsoid = Matrix3.Ellipsoid.clone(wallGeometry._ellipsoid); - return WallOutlineGeometry.createGeometry(wallGeometry); - } - - return createWallOutlineGeometry; - -})); -//# sourceMappingURL=createWallOutlineGeometry.js.map diff --git a/debug/cesium/Workers/createWallOutlineGeometry.js.map b/debug/cesium/Workers/createWallOutlineGeometry.js.map deleted file mode 100644 index a9e90e7..0000000 --- a/debug/cesium/Workers/createWallOutlineGeometry.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"createWallOutlineGeometry.js","sources":["../../../Source/Core/WallOutlineGeometry.js","../../../Source/WorkersES6/createWallOutlineGeometry.js"],"sourcesContent":["import BoundingSphere from \"./BoundingSphere.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport ComponentDatatype from \"./ComponentDatatype.js\";\r\nimport defaultValue from \"./defaultValue.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\nimport Ellipsoid from \"./Ellipsoid.js\";\r\nimport Geometry from \"./Geometry.js\";\r\nimport GeometryAttribute from \"./GeometryAttribute.js\";\r\nimport GeometryAttributes from \"./GeometryAttributes.js\";\r\nimport IndexDatatype from \"./IndexDatatype.js\";\r\nimport CesiumMath from \"./Math.js\";\r\nimport PrimitiveType from \"./PrimitiveType.js\";\r\nimport WallGeometryLibrary from \"./WallGeometryLibrary.js\";\r\n\r\nconst scratchCartesian3Position1 = new Cartesian3();\r\nconst scratchCartesian3Position2 = new Cartesian3();\r\n\r\n/**\r\n * A description of a wall outline. A wall is defined by a series of points,\r\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\r\n *\r\n * @alias WallOutlineGeometry\r\n * @constructor\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\r\n * @param {Number} [options.granularity=CesiumMath.RADIANS_PER_DEGREE] The distance, in radians, between each latitude and longitude. Determines the number of positions in the buffer.\r\n * @param {Number[]} [options.maximumHeights] An array parallel to positions that give the maximum height of the\r\n * wall at positions. If undefined, the height of each position in used.\r\n * @param {Number[]} [options.minimumHeights] An array parallel to positions that give the minimum height of the\r\n * wall at positions. If undefined, the height at each position is 0.0.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation\r\n *\r\n * @exception {DeveloperError} positions length must be greater than or equal to 2.\r\n * @exception {DeveloperError} positions and maximumHeights must have the same length.\r\n * @exception {DeveloperError} positions and minimumHeights must have the same length.\r\n *\r\n * @see WallGeometry#createGeometry\r\n * @see WallGeometry#fromConstantHeight\r\n *\r\n * @example\r\n * // create a wall outline that spans from ground level to 10000 meters\r\n * const wall = new Cesium.WallOutlineGeometry({\r\n * positions : Cesium.Cartesian3.fromDegreesArrayHeights([\r\n * 19.0, 47.0, 10000.0,\r\n * 19.0, 48.0, 10000.0,\r\n * 20.0, 48.0, 10000.0,\r\n * 20.0, 47.0, 10000.0,\r\n * 19.0, 47.0, 10000.0\r\n * ])\r\n * });\r\n * const geometry = Cesium.WallOutlineGeometry.createGeometry(wall);\r\n */\r\nfunction WallOutlineGeometry(options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n\r\n const wallPositions = options.positions;\r\n const maximumHeights = options.maximumHeights;\r\n const minimumHeights = options.minimumHeights;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(wallPositions)) {\r\n throw new DeveloperError(\"options.positions is required.\");\r\n }\r\n if (\r\n defined(maximumHeights) &&\r\n maximumHeights.length !== wallPositions.length\r\n ) {\r\n throw new DeveloperError(\r\n \"options.positions and options.maximumHeights must have the same length.\"\r\n );\r\n }\r\n if (\r\n defined(minimumHeights) &&\r\n minimumHeights.length !== wallPositions.length\r\n ) {\r\n throw new DeveloperError(\r\n \"options.positions and options.minimumHeights must have the same length.\"\r\n );\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const granularity = defaultValue(\r\n options.granularity,\r\n CesiumMath.RADIANS_PER_DEGREE\r\n );\r\n const ellipsoid = defaultValue(options.ellipsoid, Ellipsoid.WGS84);\r\n\r\n this._positions = wallPositions;\r\n this._minimumHeights = minimumHeights;\r\n this._maximumHeights = maximumHeights;\r\n this._granularity = granularity;\r\n this._ellipsoid = Ellipsoid.clone(ellipsoid);\r\n this._workerName = \"createWallOutlineGeometry\";\r\n\r\n let numComponents = 1 + wallPositions.length * Cartesian3.packedLength + 2;\r\n if (defined(minimumHeights)) {\r\n numComponents += minimumHeights.length;\r\n }\r\n if (defined(maximumHeights)) {\r\n numComponents += maximumHeights.length;\r\n }\r\n\r\n /**\r\n * The number of elements used to pack the object into an array.\r\n * @type {Number}\r\n */\r\n this.packedLength = numComponents + Ellipsoid.packedLength + 1;\r\n}\r\n\r\n/**\r\n * Stores the provided instance into the provided array.\r\n *\r\n * @param {WallOutlineGeometry} value The value to pack.\r\n * @param {Number[]} array The array to pack into.\r\n * @param {Number} [startingIndex=0] The index into the array at which to start packing the elements.\r\n *\r\n * @returns {Number[]} The array that was packed into\r\n */\r\nWallOutlineGeometry.pack = function (value, array, startingIndex) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(value)) {\r\n throw new DeveloperError(\"value is required\");\r\n }\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n const positions = value._positions;\r\n let length = positions.length;\r\n array[startingIndex++] = length;\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n Cartesian3.pack(positions[i], array, startingIndex);\r\n }\r\n\r\n const minimumHeights = value._minimumHeights;\r\n length = defined(minimumHeights) ? minimumHeights.length : 0;\r\n array[startingIndex++] = length;\r\n\r\n if (defined(minimumHeights)) {\r\n for (i = 0; i < length; ++i) {\r\n array[startingIndex++] = minimumHeights[i];\r\n }\r\n }\r\n\r\n const maximumHeights = value._maximumHeights;\r\n length = defined(maximumHeights) ? maximumHeights.length : 0;\r\n array[startingIndex++] = length;\r\n\r\n if (defined(maximumHeights)) {\r\n for (i = 0; i < length; ++i) {\r\n array[startingIndex++] = maximumHeights[i];\r\n }\r\n }\r\n\r\n Ellipsoid.pack(value._ellipsoid, array, startingIndex);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n array[startingIndex] = value._granularity;\r\n\r\n return array;\r\n};\r\n\r\nconst scratchEllipsoid = Ellipsoid.clone(Ellipsoid.UNIT_SPHERE);\r\nconst scratchOptions = {\r\n positions: undefined,\r\n minimumHeights: undefined,\r\n maximumHeights: undefined,\r\n ellipsoid: scratchEllipsoid,\r\n granularity: undefined,\r\n};\r\n\r\n/**\r\n * Retrieves an instance from a packed array.\r\n *\r\n * @param {Number[]} array The packed array.\r\n * @param {Number} [startingIndex=0] The starting index of the element to be unpacked.\r\n * @param {WallOutlineGeometry} [result] The object into which to store the result.\r\n * @returns {WallOutlineGeometry} The modified result parameter or a new WallOutlineGeometry instance if one was not provided.\r\n */\r\nWallOutlineGeometry.unpack = function (array, startingIndex, result) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(array)) {\r\n throw new DeveloperError(\"array is required\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n startingIndex = defaultValue(startingIndex, 0);\r\n\r\n let i;\r\n\r\n let length = array[startingIndex++];\r\n const positions = new Array(length);\r\n\r\n for (i = 0; i < length; ++i, startingIndex += Cartesian3.packedLength) {\r\n positions[i] = Cartesian3.unpack(array, startingIndex);\r\n }\r\n\r\n length = array[startingIndex++];\r\n let minimumHeights;\r\n\r\n if (length > 0) {\r\n minimumHeights = new Array(length);\r\n for (i = 0; i < length; ++i) {\r\n minimumHeights[i] = array[startingIndex++];\r\n }\r\n }\r\n\r\n length = array[startingIndex++];\r\n let maximumHeights;\r\n\r\n if (length > 0) {\r\n maximumHeights = new Array(length);\r\n for (i = 0; i < length; ++i) {\r\n maximumHeights[i] = array[startingIndex++];\r\n }\r\n }\r\n\r\n const ellipsoid = Ellipsoid.unpack(array, startingIndex, scratchEllipsoid);\r\n startingIndex += Ellipsoid.packedLength;\r\n\r\n const granularity = array[startingIndex];\r\n\r\n if (!defined(result)) {\r\n scratchOptions.positions = positions;\r\n scratchOptions.minimumHeights = minimumHeights;\r\n scratchOptions.maximumHeights = maximumHeights;\r\n scratchOptions.granularity = granularity;\r\n return new WallOutlineGeometry(scratchOptions);\r\n }\r\n\r\n result._positions = positions;\r\n result._minimumHeights = minimumHeights;\r\n result._maximumHeights = maximumHeights;\r\n result._ellipsoid = Ellipsoid.clone(ellipsoid, result._ellipsoid);\r\n result._granularity = granularity;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * A description of a walloutline. A wall is defined by a series of points,\r\n * which extrude down to the ground. Optionally, they can extrude downwards to a specified height.\r\n *\r\n * @param {Object} options Object with the following properties:\r\n * @param {Cartesian3[]} options.positions An array of Cartesian objects, which are the points of the wall.\r\n * @param {Number} [options.maximumHeight] A constant that defines the maximum height of the\r\n * wall at positions. If undefined, the height of each position in used.\r\n * @param {Number} [options.minimumHeight] A constant that defines the minimum height of the\r\n * wall at positions. If undefined, the height at each position is 0.0.\r\n * @param {Ellipsoid} [options.ellipsoid=Ellipsoid.WGS84] The ellipsoid for coordinate manipulation\r\n * @returns {WallOutlineGeometry}\r\n *\r\n *\r\n * @example\r\n * // create a wall that spans from 10000 meters to 20000 meters\r\n * const wall = Cesium.WallOutlineGeometry.fromConstantHeights({\r\n * positions : Cesium.Cartesian3.fromDegreesArray([\r\n * 19.0, 47.0,\r\n * 19.0, 48.0,\r\n * 20.0, 48.0,\r\n * 20.0, 47.0,\r\n * 19.0, 47.0,\r\n * ]),\r\n * minimumHeight : 20000.0,\r\n * maximumHeight : 10000.0\r\n * });\r\n * const geometry = Cesium.WallOutlineGeometry.createGeometry(wall);\r\n *\r\n * @see WallOutlineGeometry#createGeometry\r\n */\r\nWallOutlineGeometry.fromConstantHeights = function (options) {\r\n options = defaultValue(options, defaultValue.EMPTY_OBJECT);\r\n const positions = options.positions;\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(positions)) {\r\n throw new DeveloperError(\"options.positions is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n let minHeights;\r\n let maxHeights;\r\n\r\n const min = options.minimumHeight;\r\n const max = options.maximumHeight;\r\n\r\n const doMin = defined(min);\r\n const doMax = defined(max);\r\n if (doMin || doMax) {\r\n const length = positions.length;\r\n minHeights = doMin ? new Array(length) : undefined;\r\n maxHeights = doMax ? new Array(length) : undefined;\r\n\r\n for (let i = 0; i < length; ++i) {\r\n if (doMin) {\r\n minHeights[i] = min;\r\n }\r\n\r\n if (doMax) {\r\n maxHeights[i] = max;\r\n }\r\n }\r\n }\r\n\r\n const newOptions = {\r\n positions: positions,\r\n maximumHeights: maxHeights,\r\n minimumHeights: minHeights,\r\n ellipsoid: options.ellipsoid,\r\n };\r\n return new WallOutlineGeometry(newOptions);\r\n};\r\n\r\n/**\r\n * Computes the geometric representation of a wall outline, including its vertices, indices, and a bounding sphere.\r\n *\r\n * @param {WallOutlineGeometry} wallGeometry A description of the wall outline.\r\n * @returns {Geometry|undefined} The computed vertices and indices.\r\n */\r\nWallOutlineGeometry.createGeometry = function (wallGeometry) {\r\n const wallPositions = wallGeometry._positions;\r\n const minimumHeights = wallGeometry._minimumHeights;\r\n const maximumHeights = wallGeometry._maximumHeights;\r\n const granularity = wallGeometry._granularity;\r\n const ellipsoid = wallGeometry._ellipsoid;\r\n\r\n const pos = WallGeometryLibrary.computePositions(\r\n ellipsoid,\r\n wallPositions,\r\n maximumHeights,\r\n minimumHeights,\r\n granularity,\r\n false\r\n );\r\n if (!defined(pos)) {\r\n return;\r\n }\r\n\r\n const bottomPositions = pos.bottomPositions;\r\n const topPositions = pos.topPositions;\r\n\r\n let length = topPositions.length;\r\n let size = length * 2;\r\n\r\n const positions = new Float64Array(size);\r\n let positionIndex = 0;\r\n\r\n // add lower and upper points one after the other, lower\r\n // points being even and upper points being odd\r\n length /= 3;\r\n let i;\r\n for (i = 0; i < length; ++i) {\r\n const i3 = i * 3;\r\n const topPosition = Cartesian3.fromArray(\r\n topPositions,\r\n i3,\r\n scratchCartesian3Position1\r\n );\r\n const bottomPosition = Cartesian3.fromArray(\r\n bottomPositions,\r\n i3,\r\n scratchCartesian3Position2\r\n );\r\n\r\n // insert the lower point\r\n positions[positionIndex++] = bottomPosition.x;\r\n positions[positionIndex++] = bottomPosition.y;\r\n positions[positionIndex++] = bottomPosition.z;\r\n\r\n // insert the upper point\r\n positions[positionIndex++] = topPosition.x;\r\n positions[positionIndex++] = topPosition.y;\r\n positions[positionIndex++] = topPosition.z;\r\n }\r\n\r\n const attributes = new GeometryAttributes({\r\n position: new GeometryAttribute({\r\n componentDatatype: ComponentDatatype.DOUBLE,\r\n componentsPerAttribute: 3,\r\n values: positions,\r\n }),\r\n });\r\n\r\n const numVertices = size / 3;\r\n size = 2 * numVertices - 4 + numVertices;\r\n const indices = IndexDatatype.createTypedArray(numVertices, size);\r\n\r\n let edgeIndex = 0;\r\n for (i = 0; i < numVertices - 2; i += 2) {\r\n const LL = i;\r\n const LR = i + 2;\r\n const pl = Cartesian3.fromArray(\r\n positions,\r\n LL * 3,\r\n scratchCartesian3Position1\r\n );\r\n const pr = Cartesian3.fromArray(\r\n positions,\r\n LR * 3,\r\n scratchCartesian3Position2\r\n );\r\n if (Cartesian3.equalsEpsilon(pl, pr, CesiumMath.EPSILON10)) {\r\n continue;\r\n }\r\n const UL = i + 1;\r\n const UR = i + 3;\r\n\r\n indices[edgeIndex++] = UL;\r\n indices[edgeIndex++] = LL;\r\n indices[edgeIndex++] = UL;\r\n indices[edgeIndex++] = UR;\r\n indices[edgeIndex++] = LL;\r\n indices[edgeIndex++] = LR;\r\n }\r\n\r\n indices[edgeIndex++] = numVertices - 2;\r\n indices[edgeIndex++] = numVertices - 1;\r\n\r\n return new Geometry({\r\n attributes: attributes,\r\n indices: indices,\r\n primitiveType: PrimitiveType.LINES,\r\n boundingSphere: new BoundingSphere.fromVertices(positions),\r\n });\r\n};\r\nexport default WallOutlineGeometry;\r\n","import defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport WallOutlineGeometry from \"../Core/WallOutlineGeometry.js\";\r\n\r\nfunction createWallOutlineGeometry(wallGeometry, offset) {\r\n if (defined(offset)) {\r\n wallGeometry = WallOutlineGeometry.unpack(wallGeometry, offset);\r\n }\r\n wallGeometry._ellipsoid = Ellipsoid.clone(wallGeometry._ellipsoid);\r\n return WallOutlineGeometry.createGeometry(wallGeometry);\r\n}\r\nexport default createWallOutlineGeometry;\r\n"],"names":["Cartesian3","defaultValue","defined","DeveloperError","CesiumMath","Ellipsoid","WallGeometryLibrary","GeometryAttributes","GeometryAttribute","ComponentDatatype","IndexDatatype","Geometry","PrimitiveType","BoundingSphere"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/decodeDraco.js b/debug/cesium/Workers/decodeDraco.js deleted file mode 100644 index 6c37953..0000000 --- a/debug/cesium/Workers/decodeDraco.js +++ /dev/null @@ -1,407 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./ComponentDatatype-13a5630b', './defaultValue-0ab18f7d', './IndexDatatype-b4e5cf89', './RuntimeError-e5c6a8b9', './createTaskProcessorWorker', './Check-d10e5f2e', './WebGLConstants-f27a5e29', './Math-9be8b918'], (function (ComponentDatatype, defaultValue, IndexDatatype, RuntimeError, createTaskProcessorWorker, Check, WebGLConstants, Math) { 'use strict'; - - /* global require */ - - let draco; - - function decodeIndexArray(dracoGeometry, dracoDecoder) { - const numPoints = dracoGeometry.num_points(); - const numFaces = dracoGeometry.num_faces(); - const faceIndices = new draco.DracoInt32Array(); - const numIndices = numFaces * 3; - const indexArray = IndexDatatype.IndexDatatype.createTypedArray(numPoints, numIndices); - - let offset = 0; - for (let i = 0; i < numFaces; ++i) { - dracoDecoder.GetFaceFromMesh(dracoGeometry, i, faceIndices); - - indexArray[offset + 0] = faceIndices.GetValue(0); - indexArray[offset + 1] = faceIndices.GetValue(1); - indexArray[offset + 2] = faceIndices.GetValue(2); - offset += 3; - } - - draco.destroy(faceIndices); - - return { - typedArray: indexArray, - numberOfIndices: numIndices, - }; - } - - function decodeQuantizedDracoTypedArray( - dracoGeometry, - dracoDecoder, - dracoAttribute, - quantization, - vertexArrayLength - ) { - let vertexArray; - let attributeData; - if (quantization.quantizationBits <= 8) { - attributeData = new draco.DracoUInt8Array(); - vertexArray = new Uint8Array(vertexArrayLength); - dracoDecoder.GetAttributeUInt8ForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - } else { - attributeData = new draco.DracoUInt16Array(); - vertexArray = new Uint16Array(vertexArrayLength); - dracoDecoder.GetAttributeUInt16ForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - } - - for (let i = 0; i < vertexArrayLength; ++i) { - vertexArray[i] = attributeData.GetValue(i); - } - - draco.destroy(attributeData); - return vertexArray; - } - - function decodeDracoTypedArray( - dracoGeometry, - dracoDecoder, - dracoAttribute, - vertexArrayLength - ) { - let vertexArray; - let attributeData; - - // Some attribute types are casted down to 32 bit since Draco only returns 32 bit values - switch (dracoAttribute.data_type()) { - case 1: - case 11: // DT_INT8 or DT_BOOL - attributeData = new draco.DracoInt8Array(); - vertexArray = new Int8Array(vertexArrayLength); - dracoDecoder.GetAttributeInt8ForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - break; - case 2: // DT_UINT8 - attributeData = new draco.DracoUInt8Array(); - vertexArray = new Uint8Array(vertexArrayLength); - dracoDecoder.GetAttributeUInt8ForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - break; - case 3: // DT_INT16 - attributeData = new draco.DracoInt16Array(); - vertexArray = new Int16Array(vertexArrayLength); - dracoDecoder.GetAttributeInt16ForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - break; - case 4: // DT_UINT16 - attributeData = new draco.DracoUInt16Array(); - vertexArray = new Uint16Array(vertexArrayLength); - dracoDecoder.GetAttributeUInt16ForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - break; - case 5: - case 7: // DT_INT32 or DT_INT64 - attributeData = new draco.DracoInt32Array(); - vertexArray = new Int32Array(vertexArrayLength); - dracoDecoder.GetAttributeInt32ForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - break; - case 6: - case 8: // DT_UINT32 or DT_UINT64 - attributeData = new draco.DracoUInt32Array(); - vertexArray = new Uint32Array(vertexArrayLength); - dracoDecoder.GetAttributeUInt32ForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - break; - case 9: - case 10: // DT_FLOAT32 or DT_FLOAT64 - attributeData = new draco.DracoFloat32Array(); - vertexArray = new Float32Array(vertexArrayLength); - dracoDecoder.GetAttributeFloatForAllPoints( - dracoGeometry, - dracoAttribute, - attributeData - ); - break; - } - - for (let i = 0; i < vertexArrayLength; ++i) { - vertexArray[i] = attributeData.GetValue(i); - } - - draco.destroy(attributeData); - return vertexArray; - } - - function decodeAttribute(dracoGeometry, dracoDecoder, dracoAttribute) { - const numPoints = dracoGeometry.num_points(); - const numComponents = dracoAttribute.num_components(); - - let quantization; - let transform = new draco.AttributeQuantizationTransform(); - if (transform.InitFromAttribute(dracoAttribute)) { - const minValues = new Array(numComponents); - for (let i = 0; i < numComponents; ++i) { - minValues[i] = transform.min_value(i); - } - quantization = { - quantizationBits: transform.quantization_bits(), - minValues: minValues, - range: transform.range(), - octEncoded: false, - }; - } - draco.destroy(transform); - - transform = new draco.AttributeOctahedronTransform(); - if (transform.InitFromAttribute(dracoAttribute)) { - quantization = { - quantizationBits: transform.quantization_bits(), - octEncoded: true, - }; - } - draco.destroy(transform); - - const vertexArrayLength = numPoints * numComponents; - let vertexArray; - if (defaultValue.defined(quantization)) { - vertexArray = decodeQuantizedDracoTypedArray( - dracoGeometry, - dracoDecoder, - dracoAttribute, - quantization, - vertexArrayLength - ); - } else { - vertexArray = decodeDracoTypedArray( - dracoGeometry, - dracoDecoder, - dracoAttribute, - vertexArrayLength - ); - } - - const componentDatatype = ComponentDatatype.ComponentDatatype.fromTypedArray(vertexArray); - - return { - array: vertexArray, - data: { - componentsPerAttribute: numComponents, - componentDatatype: componentDatatype, - byteOffset: dracoAttribute.byte_offset(), - byteStride: - ComponentDatatype.ComponentDatatype.getSizeInBytes(componentDatatype) * numComponents, - normalized: dracoAttribute.normalized(), - quantization: quantization, - }, - }; - } - - function decodePointCloud(parameters) { - const dracoDecoder = new draco.Decoder(); - - if (parameters.dequantizeInShader) { - dracoDecoder.SkipAttributeTransform(draco.POSITION); - dracoDecoder.SkipAttributeTransform(draco.NORMAL); - } - - const buffer = new draco.DecoderBuffer(); - buffer.Init(parameters.buffer, parameters.buffer.length); - - const geometryType = dracoDecoder.GetEncodedGeometryType(buffer); - if (geometryType !== draco.POINT_CLOUD) { - throw new RuntimeError.RuntimeError("Draco geometry type must be POINT_CLOUD."); - } - - const dracoPointCloud = new draco.PointCloud(); - const decodingStatus = dracoDecoder.DecodeBufferToPointCloud( - buffer, - dracoPointCloud - ); - if (!decodingStatus.ok() || dracoPointCloud.ptr === 0) { - throw new RuntimeError.RuntimeError( - `Error decoding draco point cloud: ${decodingStatus.error_msg()}` - ); - } - - draco.destroy(buffer); - - const result = {}; - - const properties = parameters.properties; - for (const propertyName in properties) { - if (properties.hasOwnProperty(propertyName)) { - let dracoAttribute; - if (propertyName === "POSITION" || propertyName === "NORMAL") { - const dracoAttributeId = dracoDecoder.GetAttributeId( - dracoPointCloud, - draco[propertyName] - ); - dracoAttribute = dracoDecoder.GetAttribute( - dracoPointCloud, - dracoAttributeId - ); - } else { - const attributeId = properties[propertyName]; - dracoAttribute = dracoDecoder.GetAttributeByUniqueId( - dracoPointCloud, - attributeId - ); - } - result[propertyName] = decodeAttribute( - dracoPointCloud, - dracoDecoder, - dracoAttribute - ); - } - } - - draco.destroy(dracoPointCloud); - draco.destroy(dracoDecoder); - - return result; - } - - function decodePrimitive(parameters) { - const dracoDecoder = new draco.Decoder(); - - // Skip all parameter types except generic - const attributesToSkip = ["POSITION", "NORMAL", "COLOR", "TEX_COORD"]; - if (parameters.dequantizeInShader) { - for (let i = 0; i < attributesToSkip.length; ++i) { - dracoDecoder.SkipAttributeTransform(draco[attributesToSkip[i]]); - } - } - - const bufferView = parameters.bufferView; - const buffer = new draco.DecoderBuffer(); - buffer.Init(parameters.array, bufferView.byteLength); - - const geometryType = dracoDecoder.GetEncodedGeometryType(buffer); - if (geometryType !== draco.TRIANGULAR_MESH) { - throw new RuntimeError.RuntimeError("Unsupported draco mesh geometry type."); - } - - const dracoGeometry = new draco.Mesh(); - const decodingStatus = dracoDecoder.DecodeBufferToMesh(buffer, dracoGeometry); - if (!decodingStatus.ok() || dracoGeometry.ptr === 0) { - throw new RuntimeError.RuntimeError( - `Error decoding draco mesh geometry: ${decodingStatus.error_msg()}` - ); - } - - draco.destroy(buffer); - - const attributeData = {}; - - const compressedAttributes = parameters.compressedAttributes; - for (const attributeName in compressedAttributes) { - if (compressedAttributes.hasOwnProperty(attributeName)) { - const compressedAttribute = compressedAttributes[attributeName]; - const dracoAttribute = dracoDecoder.GetAttributeByUniqueId( - dracoGeometry, - compressedAttribute - ); - attributeData[attributeName] = decodeAttribute( - dracoGeometry, - dracoDecoder, - dracoAttribute - ); - } - } - - const result = { - indexArray: decodeIndexArray(dracoGeometry, dracoDecoder), - attributeData: attributeData, - }; - - draco.destroy(dracoGeometry); - draco.destroy(dracoDecoder); - - return result; - } - - function decode(parameters) { - if (defaultValue.defined(parameters.bufferView)) { - return decodePrimitive(parameters); - } - return decodePointCloud(parameters); - } - - function initWorker(dracoModule) { - draco = dracoModule; - self.onmessage = createTaskProcessorWorker(decode); - self.postMessage(true); - } - - function decodeDraco(event) { - const data = event.data; - - // Expect the first message to be to load a web assembly module - const wasmConfig = data.webAssemblyConfig; - if (defaultValue.defined(wasmConfig)) { - // Require and compile WebAssembly module, or use fallback if not supported - return require([wasmConfig.modulePath], function (dracoModule) { - if (defaultValue.defined(wasmConfig.wasmBinaryFile)) { - if (!defaultValue.defined(dracoModule)) { - dracoModule = self.DracoDecoderModule; - } - - dracoModule(wasmConfig).then(function (compiledModule) { - initWorker(compiledModule); - }); - } else { - initWorker(dracoModule()); - } - }); - } - } - - return decodeDraco; - -})); -//# sourceMappingURL=decodeDraco.js.map diff --git a/debug/cesium/Workers/decodeDraco.js.map b/debug/cesium/Workers/decodeDraco.js.map deleted file mode 100644 index bacb171..0000000 --- a/debug/cesium/Workers/decodeDraco.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"decodeDraco.js","sources":["../../../Source/WorkersES6/decodeDraco.js"],"sourcesContent":["/* global require */\r\nimport ComponentDatatype from \"../Core/ComponentDatatype.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\r\nimport RuntimeError from \"../Core/RuntimeError.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nlet draco;\r\n\r\nfunction decodeIndexArray(dracoGeometry, dracoDecoder) {\r\n const numPoints = dracoGeometry.num_points();\r\n const numFaces = dracoGeometry.num_faces();\r\n const faceIndices = new draco.DracoInt32Array();\r\n const numIndices = numFaces * 3;\r\n const indexArray = IndexDatatype.createTypedArray(numPoints, numIndices);\r\n\r\n let offset = 0;\r\n for (let i = 0; i < numFaces; ++i) {\r\n dracoDecoder.GetFaceFromMesh(dracoGeometry, i, faceIndices);\r\n\r\n indexArray[offset + 0] = faceIndices.GetValue(0);\r\n indexArray[offset + 1] = faceIndices.GetValue(1);\r\n indexArray[offset + 2] = faceIndices.GetValue(2);\r\n offset += 3;\r\n }\r\n\r\n draco.destroy(faceIndices);\r\n\r\n return {\r\n typedArray: indexArray,\r\n numberOfIndices: numIndices,\r\n };\r\n}\r\n\r\nfunction decodeQuantizedDracoTypedArray(\r\n dracoGeometry,\r\n dracoDecoder,\r\n dracoAttribute,\r\n quantization,\r\n vertexArrayLength\r\n) {\r\n let vertexArray;\r\n let attributeData;\r\n if (quantization.quantizationBits <= 8) {\r\n attributeData = new draco.DracoUInt8Array();\r\n vertexArray = new Uint8Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeUInt8ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n } else {\r\n attributeData = new draco.DracoUInt16Array();\r\n vertexArray = new Uint16Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeUInt16ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n }\r\n\r\n for (let i = 0; i < vertexArrayLength; ++i) {\r\n vertexArray[i] = attributeData.GetValue(i);\r\n }\r\n\r\n draco.destroy(attributeData);\r\n return vertexArray;\r\n}\r\n\r\nfunction decodeDracoTypedArray(\r\n dracoGeometry,\r\n dracoDecoder,\r\n dracoAttribute,\r\n vertexArrayLength\r\n) {\r\n let vertexArray;\r\n let attributeData;\r\n\r\n // Some attribute types are casted down to 32 bit since Draco only returns 32 bit values\r\n switch (dracoAttribute.data_type()) {\r\n case 1:\r\n case 11: // DT_INT8 or DT_BOOL\r\n attributeData = new draco.DracoInt8Array();\r\n vertexArray = new Int8Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeInt8ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n break;\r\n case 2: // DT_UINT8\r\n attributeData = new draco.DracoUInt8Array();\r\n vertexArray = new Uint8Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeUInt8ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n break;\r\n case 3: // DT_INT16\r\n attributeData = new draco.DracoInt16Array();\r\n vertexArray = new Int16Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeInt16ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n break;\r\n case 4: // DT_UINT16\r\n attributeData = new draco.DracoUInt16Array();\r\n vertexArray = new Uint16Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeUInt16ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n break;\r\n case 5:\r\n case 7: // DT_INT32 or DT_INT64\r\n attributeData = new draco.DracoInt32Array();\r\n vertexArray = new Int32Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeInt32ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n break;\r\n case 6:\r\n case 8: // DT_UINT32 or DT_UINT64\r\n attributeData = new draco.DracoUInt32Array();\r\n vertexArray = new Uint32Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeUInt32ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n break;\r\n case 9:\r\n case 10: // DT_FLOAT32 or DT_FLOAT64\r\n attributeData = new draco.DracoFloat32Array();\r\n vertexArray = new Float32Array(vertexArrayLength);\r\n dracoDecoder.GetAttributeFloatForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n attributeData\r\n );\r\n break;\r\n }\r\n\r\n for (let i = 0; i < vertexArrayLength; ++i) {\r\n vertexArray[i] = attributeData.GetValue(i);\r\n }\r\n\r\n draco.destroy(attributeData);\r\n return vertexArray;\r\n}\r\n\r\nfunction decodeAttribute(dracoGeometry, dracoDecoder, dracoAttribute) {\r\n const numPoints = dracoGeometry.num_points();\r\n const numComponents = dracoAttribute.num_components();\r\n\r\n let quantization;\r\n let transform = new draco.AttributeQuantizationTransform();\r\n if (transform.InitFromAttribute(dracoAttribute)) {\r\n const minValues = new Array(numComponents);\r\n for (let i = 0; i < numComponents; ++i) {\r\n minValues[i] = transform.min_value(i);\r\n }\r\n quantization = {\r\n quantizationBits: transform.quantization_bits(),\r\n minValues: minValues,\r\n range: transform.range(),\r\n octEncoded: false,\r\n };\r\n }\r\n draco.destroy(transform);\r\n\r\n transform = new draco.AttributeOctahedronTransform();\r\n if (transform.InitFromAttribute(dracoAttribute)) {\r\n quantization = {\r\n quantizationBits: transform.quantization_bits(),\r\n octEncoded: true,\r\n };\r\n }\r\n draco.destroy(transform);\r\n\r\n const vertexArrayLength = numPoints * numComponents;\r\n let vertexArray;\r\n if (defined(quantization)) {\r\n vertexArray = decodeQuantizedDracoTypedArray(\r\n dracoGeometry,\r\n dracoDecoder,\r\n dracoAttribute,\r\n quantization,\r\n vertexArrayLength\r\n );\r\n } else {\r\n vertexArray = decodeDracoTypedArray(\r\n dracoGeometry,\r\n dracoDecoder,\r\n dracoAttribute,\r\n vertexArrayLength\r\n );\r\n }\r\n\r\n const componentDatatype = ComponentDatatype.fromTypedArray(vertexArray);\r\n\r\n return {\r\n array: vertexArray,\r\n data: {\r\n componentsPerAttribute: numComponents,\r\n componentDatatype: componentDatatype,\r\n byteOffset: dracoAttribute.byte_offset(),\r\n byteStride:\r\n ComponentDatatype.getSizeInBytes(componentDatatype) * numComponents,\r\n normalized: dracoAttribute.normalized(),\r\n quantization: quantization,\r\n },\r\n };\r\n}\r\n\r\nfunction decodePointCloud(parameters) {\r\n const dracoDecoder = new draco.Decoder();\r\n\r\n if (parameters.dequantizeInShader) {\r\n dracoDecoder.SkipAttributeTransform(draco.POSITION);\r\n dracoDecoder.SkipAttributeTransform(draco.NORMAL);\r\n }\r\n\r\n const buffer = new draco.DecoderBuffer();\r\n buffer.Init(parameters.buffer, parameters.buffer.length);\r\n\r\n const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);\r\n if (geometryType !== draco.POINT_CLOUD) {\r\n throw new RuntimeError(\"Draco geometry type must be POINT_CLOUD.\");\r\n }\r\n\r\n const dracoPointCloud = new draco.PointCloud();\r\n const decodingStatus = dracoDecoder.DecodeBufferToPointCloud(\r\n buffer,\r\n dracoPointCloud\r\n );\r\n if (!decodingStatus.ok() || dracoPointCloud.ptr === 0) {\r\n throw new RuntimeError(\r\n `Error decoding draco point cloud: ${decodingStatus.error_msg()}`\r\n );\r\n }\r\n\r\n draco.destroy(buffer);\r\n\r\n const result = {};\r\n\r\n const properties = parameters.properties;\r\n for (const propertyName in properties) {\r\n if (properties.hasOwnProperty(propertyName)) {\r\n let dracoAttribute;\r\n if (propertyName === \"POSITION\" || propertyName === \"NORMAL\") {\r\n const dracoAttributeId = dracoDecoder.GetAttributeId(\r\n dracoPointCloud,\r\n draco[propertyName]\r\n );\r\n dracoAttribute = dracoDecoder.GetAttribute(\r\n dracoPointCloud,\r\n dracoAttributeId\r\n );\r\n } else {\r\n const attributeId = properties[propertyName];\r\n dracoAttribute = dracoDecoder.GetAttributeByUniqueId(\r\n dracoPointCloud,\r\n attributeId\r\n );\r\n }\r\n result[propertyName] = decodeAttribute(\r\n dracoPointCloud,\r\n dracoDecoder,\r\n dracoAttribute\r\n );\r\n }\r\n }\r\n\r\n draco.destroy(dracoPointCloud);\r\n draco.destroy(dracoDecoder);\r\n\r\n return result;\r\n}\r\n\r\nfunction decodePrimitive(parameters) {\r\n const dracoDecoder = new draco.Decoder();\r\n\r\n // Skip all parameter types except generic\r\n const attributesToSkip = [\"POSITION\", \"NORMAL\", \"COLOR\", \"TEX_COORD\"];\r\n if (parameters.dequantizeInShader) {\r\n for (let i = 0; i < attributesToSkip.length; ++i) {\r\n dracoDecoder.SkipAttributeTransform(draco[attributesToSkip[i]]);\r\n }\r\n }\r\n\r\n const bufferView = parameters.bufferView;\r\n const buffer = new draco.DecoderBuffer();\r\n buffer.Init(parameters.array, bufferView.byteLength);\r\n\r\n const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);\r\n if (geometryType !== draco.TRIANGULAR_MESH) {\r\n throw new RuntimeError(\"Unsupported draco mesh geometry type.\");\r\n }\r\n\r\n const dracoGeometry = new draco.Mesh();\r\n const decodingStatus = dracoDecoder.DecodeBufferToMesh(buffer, dracoGeometry);\r\n if (!decodingStatus.ok() || dracoGeometry.ptr === 0) {\r\n throw new RuntimeError(\r\n `Error decoding draco mesh geometry: ${decodingStatus.error_msg()}`\r\n );\r\n }\r\n\r\n draco.destroy(buffer);\r\n\r\n const attributeData = {};\r\n\r\n const compressedAttributes = parameters.compressedAttributes;\r\n for (const attributeName in compressedAttributes) {\r\n if (compressedAttributes.hasOwnProperty(attributeName)) {\r\n const compressedAttribute = compressedAttributes[attributeName];\r\n const dracoAttribute = dracoDecoder.GetAttributeByUniqueId(\r\n dracoGeometry,\r\n compressedAttribute\r\n );\r\n attributeData[attributeName] = decodeAttribute(\r\n dracoGeometry,\r\n dracoDecoder,\r\n dracoAttribute\r\n );\r\n }\r\n }\r\n\r\n const result = {\r\n indexArray: decodeIndexArray(dracoGeometry, dracoDecoder),\r\n attributeData: attributeData,\r\n };\r\n\r\n draco.destroy(dracoGeometry);\r\n draco.destroy(dracoDecoder);\r\n\r\n return result;\r\n}\r\n\r\nfunction decode(parameters) {\r\n if (defined(parameters.bufferView)) {\r\n return decodePrimitive(parameters);\r\n }\r\n return decodePointCloud(parameters);\r\n}\r\n\r\nfunction initWorker(dracoModule) {\r\n draco = dracoModule;\r\n self.onmessage = createTaskProcessorWorker(decode);\r\n self.postMessage(true);\r\n}\r\n\r\nfunction decodeDraco(event) {\r\n const data = event.data;\r\n\r\n // Expect the first message to be to load a web assembly module\r\n const wasmConfig = data.webAssemblyConfig;\r\n if (defined(wasmConfig)) {\r\n // Require and compile WebAssembly module, or use fallback if not supported\r\n return require([wasmConfig.modulePath], function (dracoModule) {\r\n if (defined(wasmConfig.wasmBinaryFile)) {\r\n if (!defined(dracoModule)) {\r\n dracoModule = self.DracoDecoderModule;\r\n }\r\n\r\n dracoModule(wasmConfig).then(function (compiledModule) {\r\n initWorker(compiledModule);\r\n });\r\n } else {\r\n initWorker(dracoModule());\r\n }\r\n });\r\n }\r\n}\r\nexport default decodeDraco;\r\n"],"names":["IndexDatatype","defined","ComponentDatatype","RuntimeError"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/decodeGoogleEarthEnterprisePacket.js b/debug/cesium/Workers/decodeGoogleEarthEnterprisePacket.js deleted file mode 100644 index 2a07f56..0000000 --- a/debug/cesium/Workers/decodeGoogleEarthEnterprisePacket.js +++ /dev/null @@ -1,3713 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./Check-d10e5f2e', './RuntimeError-e5c6a8b9', './defaultValue-0ab18f7d', './createTaskProcessorWorker'], (function (Check, RuntimeError, defaultValue, createTaskProcessorWorker) { 'use strict'; - - const compressedMagic$1 = 0x7468dead; - const compressedMagicSwap$1 = 0xadde6874; - - /** - * Decodes data that is received from the Google Earth Enterprise server. - * - * @param {ArrayBuffer} key The key used during decoding. - * @param {ArrayBuffer} data The data to be decoded. - * - * @private - */ - function decodeGoogleEarthEnterpriseData(key, data) { - if (decodeGoogleEarthEnterpriseData.passThroughDataForTesting) { - return data; - } - - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("key", key); - Check.Check.typeOf.object("data", data); - //>>includeEnd('debug'); - - const keyLength = key.byteLength; - if (keyLength === 0 || keyLength % 4 !== 0) { - throw new RuntimeError.RuntimeError( - "The length of key must be greater than 0 and a multiple of 4." - ); - } - - const dataView = new DataView(data); - const magic = dataView.getUint32(0, true); - if (magic === compressedMagic$1 || magic === compressedMagicSwap$1) { - // Occasionally packets don't come back encoded, so just return - return data; - } - - const keyView = new DataView(key); - - let dp = 0; - const dpend = data.byteLength; - const dpend64 = dpend - (dpend % 8); - const kpend = keyLength; - let kp; - let off = 8; - - // This algorithm is intentionally asymmetric to make it more difficult to - // guess. Security through obscurity. :-( - - // while we have a full uint64 (8 bytes) left to do - // assumes buffer is 64bit aligned (or processor doesn't care) - while (dp < dpend64) { - // rotate the key each time through by using the offets 16,0,8,16,0,8,... - off = (off + 8) % 24; - kp = off; - - // run through one key length xor'ing one uint64 at a time - // then drop out to rotate the key for the next bit - while (dp < dpend64 && kp < kpend) { - dataView.setUint32( - dp, - dataView.getUint32(dp, true) ^ keyView.getUint32(kp, true), - true - ); - dataView.setUint32( - dp + 4, - dataView.getUint32(dp + 4, true) ^ keyView.getUint32(kp + 4, true), - true - ); - dp += 8; - kp += 24; - } - } - - // now the remaining 1 to 7 bytes - if (dp < dpend) { - if (kp >= kpend) { - // rotate the key one last time (if necessary) - off = (off + 8) % 24; - kp = off; - } - - while (dp < dpend) { - dataView.setUint8(dp, dataView.getUint8(dp) ^ keyView.getUint8(kp)); - dp++; - kp++; - } - } - } - - decodeGoogleEarthEnterpriseData.passThroughDataForTesting = false; - - /** - * @private - */ - function isBitSet(bits, mask) { - return (bits & mask) !== 0; - } - - // Bitmask for checking tile properties - const childrenBitmasks = [0x01, 0x02, 0x04, 0x08]; - const anyChildBitmask = 0x0f; - const cacheFlagBitmask = 0x10; // True if there is a child subtree - const imageBitmask = 0x40; - const terrainBitmask = 0x80; - - /** - * Contains information about each tile from a Google Earth Enterprise server - * - * @param {Number} bits Bitmask that contains the type of data and available children for each tile. - * @param {Number} cnodeVersion Version of the request for subtree metadata. - * @param {Number} imageryVersion Version of the request for imagery tile. - * @param {Number} terrainVersion Version of the request for terrain tile. - * @param {Number} imageryProvider Id of imagery provider. - * @param {Number} terrainProvider Id of terrain provider. - * - * @private - */ - function GoogleEarthEnterpriseTileInformation( - bits, - cnodeVersion, - imageryVersion, - terrainVersion, - imageryProvider, - terrainProvider - ) { - this._bits = bits; - this.cnodeVersion = cnodeVersion; - this.imageryVersion = imageryVersion; - this.terrainVersion = terrainVersion; - this.imageryProvider = imageryProvider; - this.terrainProvider = terrainProvider; - this.ancestorHasTerrain = false; // Set it later once we find its parent - this.terrainState = undefined; - } - - /** - * Creates GoogleEarthEnterpriseTileInformation from an object - * - * @param {Object} info Object to be cloned - * @param {GoogleEarthEnterpriseTileInformation} [result] The object onto which to store the result. - * @returns {GoogleEarthEnterpriseTileInformation} The modified result parameter or a new GoogleEarthEnterpriseTileInformation instance if none was provided. - */ - GoogleEarthEnterpriseTileInformation.clone = function (info, result) { - if (!defaultValue.defined(result)) { - result = new GoogleEarthEnterpriseTileInformation( - info._bits, - info.cnodeVersion, - info.imageryVersion, - info.terrainVersion, - info.imageryProvider, - info.terrainProvider - ); - } else { - result._bits = info._bits; - result.cnodeVersion = info.cnodeVersion; - result.imageryVersion = info.imageryVersion; - result.terrainVersion = info.terrainVersion; - result.imageryProvider = info.imageryProvider; - result.terrainProvider = info.terrainProvider; - } - result.ancestorHasTerrain = info.ancestorHasTerrain; - result.terrainState = info.terrainState; - - return result; - }; - - /** - * Sets the parent for the tile - * - * @param {GoogleEarthEnterpriseTileInformation} parent Parent tile - */ - GoogleEarthEnterpriseTileInformation.prototype.setParent = function (parent) { - this.ancestorHasTerrain = parent.ancestorHasTerrain || this.hasTerrain(); - }; - - /** - * Gets whether a subtree is available - * - * @returns {Boolean} true if subtree is available, false otherwise. - */ - GoogleEarthEnterpriseTileInformation.prototype.hasSubtree = function () { - return isBitSet(this._bits, cacheFlagBitmask); - }; - - /** - * Gets whether imagery is available - * - * @returns {Boolean} true if imagery is available, false otherwise. - */ - GoogleEarthEnterpriseTileInformation.prototype.hasImagery = function () { - return isBitSet(this._bits, imageBitmask); - }; - - /** - * Gets whether terrain is available - * - * @returns {Boolean} true if terrain is available, false otherwise. - */ - GoogleEarthEnterpriseTileInformation.prototype.hasTerrain = function () { - return isBitSet(this._bits, terrainBitmask); - }; - - /** - * Gets whether any children are present - * - * @returns {Boolean} true if any children are available, false otherwise. - */ - GoogleEarthEnterpriseTileInformation.prototype.hasChildren = function () { - return isBitSet(this._bits, anyChildBitmask); - }; - - /** - * Gets whether a specified child is available - * - * @param {Number} index Index of child tile - * - * @returns {Boolean} true if child is available, false otherwise - */ - GoogleEarthEnterpriseTileInformation.prototype.hasChild = function (index) { - return isBitSet(this._bits, childrenBitmasks[index]); - }; - - /** - * Gets bitmask containing children - * - * @returns {Number} Children bitmask - */ - GoogleEarthEnterpriseTileInformation.prototype.getChildBitmask = function () { - return this._bits & anyChildBitmask; - }; - - var inflate$3 = {}; - - var inflate$2 = {}; - - // Note: adler32 takes 12% for level 0 and 2% for level 6. - // It isn't worth it to make additional optimizations as in original. - // Small size is preferable. - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - const adler32$1 = (adler, buf, len, pos) => { - let s1 = (adler & 0xffff) |0, - s2 = ((adler >>> 16) & 0xffff) |0, - n = 0; - - while (len !== 0) { - // Set limit ~ twice less than 5552, to keep - // s2 in 31-bits, because we force signed ints. - // in other case %= will fail. - n = len > 2000 ? 2000 : len; - len -= n; - - do { - s1 = (s1 + buf[pos++]) |0; - s2 = (s2 + s1) |0; - } while (--n); - - s1 %= 65521; - s2 %= 65521; - } - - return (s1 | (s2 << 16)) |0; - }; - - - var adler32_1 = adler32$1; - - // Note: we can't get significant speed boost here. - // So write code to minimize size - no pregenerated tables - // and array tools dependencies. - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - // Use ordinary array, since untyped makes no boost here - const makeTable = () => { - let c, table = []; - - for (var n = 0; n < 256; n++) { - c = n; - for (var k = 0; k < 8; k++) { - c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); - } - table[n] = c; - } - - return table; - }; - - // Create table on load. Just 255 signed longs. Not a problem. - const crcTable = new Uint32Array(makeTable()); - - - const crc32$1 = (crc, buf, len, pos) => { - const t = crcTable; - const end = pos + len; - - crc ^= -1; - - for (let i = pos; i < end; i++) { - crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; - } - - return (crc ^ (-1)); // >>> 0; - }; - - - var crc32_1 = crc32$1; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - // See state defs from inflate.js - const BAD$1 = 16209; /* got a data error -- remain here until reset */ - const TYPE$1 = 16191; /* i: waiting for type bits, including last-flag bit */ - - /* - Decode literal, length, and distance codes and write out the resulting - literal and match bytes until either not enough input or output is - available, an end-of-block is encountered, or a data error is encountered. - When large enough input and output buffers are supplied to inflate(), for - example, a 16K input buffer and a 64K output buffer, more than 95% of the - inflate execution time is spent in this routine. - - Entry assumptions: - - state.mode === LEN - strm.avail_in >= 6 - strm.avail_out >= 258 - start >= strm.avail_out - state.bits < 8 - - On return, state.mode is one of: - - LEN -- ran out of enough output space or enough available input - TYPE -- reached end of block code, inflate() to interpret next block - BAD -- error in block data - - Notes: - - - The maximum input bits used by a length/distance pair is 15 bits for the - length code, 5 bits for the length extra, 15 bits for the distance code, - and 13 bits for the distance extra. This totals 48 bits, or six bytes. - Therefore if strm.avail_in >= 6, then there is enough input to avoid - checking for available input while decoding. - - - The maximum bytes that a single length/distance pair can output is 258 - bytes, which is the maximum length that can be coded. inflate_fast() - requires strm.avail_out >= 258 for each loop to avoid checking for - output space. - */ - var inffast = function inflate_fast(strm, start) { - let _in; /* local strm.input */ - let last; /* have enough input while in < last */ - let _out; /* local strm.output */ - let beg; /* inflate()'s initial strm.output */ - let end; /* while out < end, enough space available */ - //#ifdef INFLATE_STRICT - let dmax; /* maximum distance from zlib header */ - //#endif - let wsize; /* window size or zero if not using window */ - let whave; /* valid bytes in the window */ - let wnext; /* window write index */ - // Use `s_window` instead `window`, avoid conflict with instrumentation tools - let s_window; /* allocated sliding window, if wsize != 0 */ - let hold; /* local strm.hold */ - let bits; /* local strm.bits */ - let lcode; /* local strm.lencode */ - let dcode; /* local strm.distcode */ - let lmask; /* mask for first level of length codes */ - let dmask; /* mask for first level of distance codes */ - let here; /* retrieved table entry */ - let op; /* code bits, operation, extra bits, or */ - /* window position, window bytes to copy */ - let len; /* match length, unused bytes */ - let dist; /* match distance */ - let from; /* where to copy match from */ - let from_source; - - - let input, output; // JS specific, because we have no pointers - - /* copy state to local variables */ - const state = strm.state; - //here = state.here; - _in = strm.next_in; - input = strm.input; - last = _in + (strm.avail_in - 5); - _out = strm.next_out; - output = strm.output; - beg = _out - (start - strm.avail_out); - end = _out + (strm.avail_out - 257); - //#ifdef INFLATE_STRICT - dmax = state.dmax; - //#endif - wsize = state.wsize; - whave = state.whave; - wnext = state.wnext; - s_window = state.window; - hold = state.hold; - bits = state.bits; - lcode = state.lencode; - dcode = state.distcode; - lmask = (1 << state.lenbits) - 1; - dmask = (1 << state.distbits) - 1; - - - /* decode literals and length/distances until end-of-block or not enough - input data or output space */ - - top: - do { - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - - here = lcode[hold & lmask]; - - dolen: - for (;;) { // Goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - if (op === 0) { /* literal */ - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - output[_out++] = here & 0xffff/*here.val*/; - } - else if (op & 16) { /* length base */ - len = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (op) { - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - len += hold & ((1 << op) - 1); - hold >>>= op; - bits -= op; - } - //Tracevv((stderr, "inflate: length %u\n", len)); - if (bits < 15) { - hold += input[_in++] << bits; - bits += 8; - hold += input[_in++] << bits; - bits += 8; - } - here = dcode[hold & dmask]; - - dodist: - for (;;) { // goto emulation - op = here >>> 24/*here.bits*/; - hold >>>= op; - bits -= op; - op = (here >>> 16) & 0xff/*here.op*/; - - if (op & 16) { /* distance base */ - dist = here & 0xffff/*here.val*/; - op &= 15; /* number of extra bits */ - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - if (bits < op) { - hold += input[_in++] << bits; - bits += 8; - } - } - dist += hold & ((1 << op) - 1); - //#ifdef INFLATE_STRICT - if (dist > dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD$1; - break top; - } - //#endif - hold >>>= op; - bits -= op; - //Tracevv((stderr, "inflate: distance %u\n", dist)); - op = _out - beg; /* max distance in output */ - if (dist > op) { /* see if copy from window */ - op = dist - op; /* distance back in window */ - if (op > whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD$1; - break top; - } - - // (!) This block is disabled in zlib defaults, - // don't enable it for binary compatibility - //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - // if (len <= op - whave) { - // do { - // output[_out++] = 0; - // } while (--len); - // continue top; - // } - // len -= op - whave; - // do { - // output[_out++] = 0; - // } while (--op > whave); - // if (op === 0) { - // from = _out - dist; - // do { - // output[_out++] = output[from++]; - // } while (--len); - // continue top; - // } - //#endif - } - from = 0; // window index - from_source = s_window; - if (wnext === 0) { /* very common case */ - from += wsize - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - else if (wnext < op) { /* wrap around window */ - from += wsize + wnext - op; - op -= wnext; - if (op < len) { /* some from end of window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = 0; - if (wnext < len) { /* some from start of window */ - op = wnext; - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - } - else { /* contiguous in window */ - from += wnext - op; - if (op < len) { /* some from window */ - len -= op; - do { - output[_out++] = s_window[from++]; - } while (--op); - from = _out - dist; /* rest from output */ - from_source = output; - } - } - while (len > 2) { - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - output[_out++] = from_source[from++]; - len -= 3; - } - if (len) { - output[_out++] = from_source[from++]; - if (len > 1) { - output[_out++] = from_source[from++]; - } - } - } - else { - from = _out - dist; /* copy direct from output */ - do { /* minimum length is three */ - output[_out++] = output[from++]; - output[_out++] = output[from++]; - output[_out++] = output[from++]; - len -= 3; - } while (len > 2); - if (len) { - output[_out++] = output[from++]; - if (len > 1) { - output[_out++] = output[from++]; - } - } - } - } - else if ((op & 64) === 0) { /* 2nd level distance code */ - here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dodist; - } - else { - strm.msg = 'invalid distance code'; - state.mode = BAD$1; - break top; - } - - break; // need to emulate goto via "continue" - } - } - else if ((op & 64) === 0) { /* 2nd level length code */ - here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; - continue dolen; - } - else if (op & 32) { /* end-of-block */ - //Tracevv((stderr, "inflate: end of block\n")); - state.mode = TYPE$1; - break top; - } - else { - strm.msg = 'invalid literal/length code'; - state.mode = BAD$1; - break top; - } - - break; // need to emulate goto via "continue" - } - } while (_in < last && _out < end); - - /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ - len = bits >> 3; - _in -= len; - bits -= len << 3; - hold &= (1 << bits) - 1; - - /* update state and return */ - strm.next_in = _in; - strm.next_out = _out; - strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); - strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); - state.hold = hold; - state.bits = bits; - return; - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - const MAXBITS = 15; - const ENOUGH_LENS$1 = 852; - const ENOUGH_DISTS$1 = 592; - //const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - - const CODES$1 = 0; - const LENS$1 = 1; - const DISTS$1 = 2; - - const lbase = new Uint16Array([ /* Length codes 257..285 base */ - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, - 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 - ]); - - const lext = new Uint8Array([ /* Length codes 257..285 extra */ - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 - ]); - - const dbase = new Uint16Array([ /* Distance codes 0..29 base */ - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, - 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, - 8193, 12289, 16385, 24577, 0, 0 - ]); - - const dext = new Uint8Array([ /* Distance codes 0..29 extra */ - 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, - 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, - 28, 28, 29, 29, 64, 64 - ]); - - const inflate_table$1 = (type, lens, lens_index, codes, table, table_index, work, opts) => - { - const bits = opts.bits; - //here = opts.here; /* table entry for duplication */ - - let len = 0; /* a code's length in bits */ - let sym = 0; /* index of code symbols */ - let min = 0, max = 0; /* minimum and maximum code lengths */ - let root = 0; /* number of index bits for root table */ - let curr = 0; /* number of index bits for current table */ - let drop = 0; /* code bits to drop for sub-table */ - let left = 0; /* number of prefix codes available */ - let used = 0; /* code entries in table used */ - let huff = 0; /* Huffman code */ - let incr; /* for incrementing code, index */ - let fill; /* index for replicating entries */ - let low; /* low bits for current root entry */ - let mask; /* mask for low root bits */ - let next; /* next available space in table */ - let base = null; /* base value table to use */ - // let shoextra; /* extra bits table to use */ - let match; /* use base and extra for symbol >= match */ - const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ - const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ - let extra = null; - - let here_bits, here_op, here_val; - - /* - Process a set of code lengths to create a canonical Huffman code. The - code lengths are lens[0..codes-1]. Each length corresponds to the - symbols 0..codes-1. The Huffman code is generated by first sorting the - symbols by length from short to long, and retaining the symbol order - for codes with equal lengths. Then the code starts with all zero bits - for the first code of the shortest length, and the codes are integer - increments for the same length, and zeros are appended as the length - increases. For the deflate format, these bits are stored backwards - from their more natural integer increment ordering, and so when the - decoding tables are built in the large loop below, the integer codes - are incremented backwards. - - This routine assumes, but does not check, that all of the entries in - lens[] are in the range 0..MAXBITS. The caller must assure this. - 1..MAXBITS is interpreted as that code length. zero means that that - symbol does not occur in this code. - - The codes are sorted by computing a count of codes for each length, - creating from that a table of starting indices for each length in the - sorted table, and then entering the symbols in order in the sorted - table. The sorted table is work[], with that space being provided by - the caller. - - The length counts are used for other purposes as well, i.e. finding - the minimum and maximum length codes, determining if there are any - codes at all, checking for a valid set of lengths, and looking ahead - at length counts to determine sub-table sizes when building the - decoding tables. - */ - - /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ - for (len = 0; len <= MAXBITS; len++) { - count[len] = 0; - } - for (sym = 0; sym < codes; sym++) { - count[lens[lens_index + sym]]++; - } - - /* bound code lengths, force root to be within code lengths */ - root = bits; - for (max = MAXBITS; max >= 1; max--) { - if (count[max] !== 0) { break; } - } - if (root > max) { - root = max; - } - if (max === 0) { /* no symbols to code at all */ - //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ - //table.bits[opts.table_index] = 1; //here.bits = (var char)1; - //table.val[opts.table_index++] = 0; //here.val = (var short)0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - - //table.op[opts.table_index] = 64; - //table.bits[opts.table_index] = 1; - //table.val[opts.table_index++] = 0; - table[table_index++] = (1 << 24) | (64 << 16) | 0; - - opts.bits = 1; - return 0; /* no symbols, but wait for decoding to report error */ - } - for (min = 1; min < max; min++) { - if (count[min] !== 0) { break; } - } - if (root < min) { - root = min; - } - - /* check for an over-subscribed or incomplete set of lengths */ - left = 1; - for (len = 1; len <= MAXBITS; len++) { - left <<= 1; - left -= count[len]; - if (left < 0) { - return -1; - } /* over-subscribed */ - } - if (left > 0 && (type === CODES$1 || max !== 1)) { - return -1; /* incomplete set */ - } - - /* generate offsets into symbol table for each length for sorting */ - offs[1] = 0; - for (len = 1; len < MAXBITS; len++) { - offs[len + 1] = offs[len] + count[len]; - } - - /* sort symbols by length, by symbol order within each length */ - for (sym = 0; sym < codes; sym++) { - if (lens[lens_index + sym] !== 0) { - work[offs[lens[lens_index + sym]]++] = sym; - } - } - - /* - Create and fill in decoding tables. In this loop, the table being - filled is at next and has curr index bits. The code being used is huff - with length len. That code is converted to an index by dropping drop - bits off of the bottom. For codes where len is less than drop + curr, - those top drop + curr - len bits are incremented through all values to - fill the table with replicated entries. - - root is the number of index bits for the root table. When len exceeds - root, sub-tables are created pointed to by the root entry with an index - of the low root bits of huff. This is saved in low to check for when a - new sub-table should be started. drop is zero when the root table is - being filled, and drop is root when sub-tables are being filled. - - When a new sub-table is needed, it is necessary to look ahead in the - code lengths to determine what size sub-table is needed. The length - counts are used for this, and so count[] is decremented as codes are - entered in the tables. - - used keeps track of how many table entries have been allocated from the - provided *table space. It is checked for LENS and DIST tables against - the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in - the initial root table size constants. See the comments in inftrees.h - for more information. - - sym increments through all symbols, and the loop terminates when - all codes of length max, i.e. all codes, have been processed. This - routine permits incomplete codes, so another loop after this one fills - in the rest of the decoding tables with invalid code markers. - */ - - /* set up for code type */ - // poor man optimization - use if-else instead of switch, - // to avoid deopts in old v8 - if (type === CODES$1) { - base = extra = work; /* dummy value--not used */ - match = 20; - - } else if (type === LENS$1) { - base = lbase; - extra = lext; - match = 257; - - } else { /* DISTS */ - base = dbase; - extra = dext; - match = 0; - } - - /* initialize opts for loop */ - huff = 0; /* starting code */ - sym = 0; /* starting code symbol */ - len = min; /* starting code length */ - next = table_index; /* current table to fill in */ - curr = root; /* current table index bits */ - drop = 0; /* current bits to drop from code for index */ - low = -1; /* trigger new sub-table when len > root */ - used = 1 << root; /* use root table entries */ - mask = used - 1; /* mask for comparing low */ - - /* check available table space */ - if ((type === LENS$1 && used > ENOUGH_LENS$1) || - (type === DISTS$1 && used > ENOUGH_DISTS$1)) { - return 1; - } - - /* process all codes and make table entries */ - for (;;) { - /* create table entry */ - here_bits = len - drop; - if (work[sym] + 1 < match) { - here_op = 0; - here_val = work[sym]; - } - else if (work[sym] >= match) { - here_op = extra[work[sym] - match]; - here_val = base[work[sym] - match]; - } - else { - here_op = 32 + 64; /* end of block */ - here_val = 0; - } - - /* replicate for those indices with low len bits equal to huff */ - incr = 1 << (len - drop); - fill = 1 << curr; - min = fill; /* save offset to next table */ - do { - fill -= incr; - table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; - } while (fill !== 0); - - /* backwards increment the len-bit code huff */ - incr = 1 << (len - 1); - while (huff & incr) { - incr >>= 1; - } - if (incr !== 0) { - huff &= incr - 1; - huff += incr; - } else { - huff = 0; - } - - /* go to next symbol, update count, len */ - sym++; - if (--count[len] === 0) { - if (len === max) { break; } - len = lens[lens_index + work[sym]]; - } - - /* create new sub-table if needed */ - if (len > root && (huff & mask) !== low) { - /* if first time, transition to sub-tables */ - if (drop === 0) { - drop = root; - } - - /* increment past last table */ - next += min; /* here min is 1 << curr */ - - /* determine length of next table */ - curr = len - drop; - left = 1 << curr; - while (curr + drop < max) { - left -= count[curr + drop]; - if (left <= 0) { break; } - curr++; - left <<= 1; - } - - /* check for enough space */ - used += 1 << curr; - if ((type === LENS$1 && used > ENOUGH_LENS$1) || - (type === DISTS$1 && used > ENOUGH_DISTS$1)) { - return 1; - } - - /* point entry in root table to sub-table */ - low = huff & mask; - /*table.op[low] = curr; - table.bits[low] = root; - table.val[low] = next - opts.table_index;*/ - table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; - } - } - - /* fill in remaining table entry if code is incomplete (guaranteed to have - at most one remaining entry, since if the code is incomplete, the - maximum code length that was allowed to get this far is one bit) */ - if (huff !== 0) { - //table.op[next + huff] = 64; /* invalid code marker */ - //table.bits[next + huff] = len - drop; - //table.val[next + huff] = 0; - table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; - } - - /* set return parameters */ - //opts.table_index += used; - opts.bits = root; - return 0; - }; - - - var inftrees = inflate_table$1; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var constants = { - - /* Allowed flush values; see deflate() and inflate() below for details */ - Z_NO_FLUSH: 0, - Z_PARTIAL_FLUSH: 1, - Z_SYNC_FLUSH: 2, - Z_FULL_FLUSH: 3, - Z_FINISH: 4, - Z_BLOCK: 5, - Z_TREES: 6, - - /* Return codes for the compression/decompression functions. Negative values - * are errors, positive values are used for special but normal events. - */ - Z_OK: 0, - Z_STREAM_END: 1, - Z_NEED_DICT: 2, - Z_ERRNO: -1, - Z_STREAM_ERROR: -2, - Z_DATA_ERROR: -3, - Z_MEM_ERROR: -4, - Z_BUF_ERROR: -5, - //Z_VERSION_ERROR: -6, - - /* compression levels */ - Z_NO_COMPRESSION: 0, - Z_BEST_SPEED: 1, - Z_BEST_COMPRESSION: 9, - Z_DEFAULT_COMPRESSION: -1, - - - Z_FILTERED: 1, - Z_HUFFMAN_ONLY: 2, - Z_RLE: 3, - Z_FIXED: 4, - Z_DEFAULT_STRATEGY: 0, - - /* Possible values of the data_type field (though see inflate()) */ - Z_BINARY: 0, - Z_TEXT: 1, - //Z_ASCII: 1, // = Z_TEXT (deprecated) - Z_UNKNOWN: 2, - - /* The deflate compression method */ - Z_DEFLATED: 8 - //Z_NULL: null // Use -1 or null inline, depending on var type - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - const adler32 = adler32_1; - const crc32 = crc32_1; - const inflate_fast = inffast; - const inflate_table = inftrees; - - const CODES = 0; - const LENS = 1; - const DISTS = 2; - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - const { - Z_FINISH: Z_FINISH$1, Z_BLOCK, Z_TREES, - Z_OK: Z_OK$1, Z_STREAM_END: Z_STREAM_END$1, Z_NEED_DICT: Z_NEED_DICT$1, Z_STREAM_ERROR: Z_STREAM_ERROR$1, Z_DATA_ERROR: Z_DATA_ERROR$1, Z_MEM_ERROR: Z_MEM_ERROR$1, Z_BUF_ERROR, - Z_DEFLATED - } = constants; - - - /* STATES ====================================================================*/ - /* ===========================================================================*/ - - - const HEAD = 16180; /* i: waiting for magic header */ - const FLAGS = 16181; /* i: waiting for method and flags (gzip) */ - const TIME = 16182; /* i: waiting for modification time (gzip) */ - const OS = 16183; /* i: waiting for extra flags and operating system (gzip) */ - const EXLEN = 16184; /* i: waiting for extra length (gzip) */ - const EXTRA = 16185; /* i: waiting for extra bytes (gzip) */ - const NAME = 16186; /* i: waiting for end of file name (gzip) */ - const COMMENT = 16187; /* i: waiting for end of comment (gzip) */ - const HCRC = 16188; /* i: waiting for header crc (gzip) */ - const DICTID = 16189; /* i: waiting for dictionary check value */ - const DICT = 16190; /* waiting for inflateSetDictionary() call */ - const TYPE = 16191; /* i: waiting for type bits, including last-flag bit */ - const TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */ - const STORED = 16193; /* i: waiting for stored size (length and complement) */ - const COPY_ = 16194; /* i/o: same as COPY below, but only first time in */ - const COPY = 16195; /* i/o: waiting for input or output to copy stored block */ - const TABLE = 16196; /* i: waiting for dynamic block table lengths */ - const LENLENS = 16197; /* i: waiting for code length code lengths */ - const CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */ - const LEN_ = 16199; /* i: same as LEN below, but only first time in */ - const LEN = 16200; /* i: waiting for length/lit/eob code */ - const LENEXT = 16201; /* i: waiting for length extra bits */ - const DIST = 16202; /* i: waiting for distance code */ - const DISTEXT = 16203; /* i: waiting for distance extra bits */ - const MATCH = 16204; /* o: waiting for output space to copy string */ - const LIT = 16205; /* o: waiting for output space to write literal */ - const CHECK = 16206; /* i: waiting for 32-bit check value */ - const LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */ - const DONE = 16208; /* finished check, done -- remain here until reset */ - const BAD = 16209; /* got a data error -- remain here until reset */ - const MEM = 16210; /* got an inflate() memory error -- remain here until reset */ - const SYNC = 16211; /* looking for synchronization bytes to restart inflate() */ - - /* ===========================================================================*/ - - - - const ENOUGH_LENS = 852; - const ENOUGH_DISTS = 592; - //const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); - - const MAX_WBITS = 15; - /* 32K LZ77 window */ - const DEF_WBITS = MAX_WBITS; - - - const zswap32 = (q) => { - - return (((q >>> 24) & 0xff) + - ((q >>> 8) & 0xff00) + - ((q & 0xff00) << 8) + - ((q & 0xff) << 24)); - }; - - - function InflateState() { - this.strm = null; /* pointer back to this zlib stream */ - this.mode = 0; /* current inflate mode */ - this.last = false; /* true if processing last block */ - this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip, - bit 2 true to validate check value */ - this.havedict = false; /* true if dictionary provided */ - this.flags = 0; /* gzip header method and flags (0 if zlib), or - -1 if raw or no header yet */ - this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ - this.check = 0; /* protected copy of check value */ - this.total = 0; /* protected copy of output count */ - // TODO: may be {} - this.head = null; /* where to save gzip header information */ - - /* sliding window */ - this.wbits = 0; /* log base 2 of requested window size */ - this.wsize = 0; /* window size or zero if not using window */ - this.whave = 0; /* valid bytes in the window */ - this.wnext = 0; /* window write index */ - this.window = null; /* allocated sliding window, if needed */ - - /* bit accumulator */ - this.hold = 0; /* input bit accumulator */ - this.bits = 0; /* number of bits in "in" */ - - /* for string and stored block copying */ - this.length = 0; /* literal or length of data to copy */ - this.offset = 0; /* distance back to copy string from */ - - /* for table and code decoding */ - this.extra = 0; /* extra bits needed */ - - /* fixed and dynamic code tables */ - this.lencode = null; /* starting table for length/literal codes */ - this.distcode = null; /* starting table for distance codes */ - this.lenbits = 0; /* index bits for lencode */ - this.distbits = 0; /* index bits for distcode */ - - /* dynamic table building */ - this.ncode = 0; /* number of code length code lengths */ - this.nlen = 0; /* number of length code lengths */ - this.ndist = 0; /* number of distance code lengths */ - this.have = 0; /* number of code lengths in lens[] */ - this.next = null; /* next available space in codes[] */ - - this.lens = new Uint16Array(320); /* temporary storage for code lengths */ - this.work = new Uint16Array(288); /* work area for code table building */ - - /* - because we don't have pointers in js, we use lencode and distcode directly - as buffers so we don't need codes - */ - //this.codes = new Int32Array(ENOUGH); /* space for code tables */ - this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ - this.distdyn = null; /* dynamic table for distance codes (JS specific) */ - this.sane = 0; /* if false, allow invalid distance too far */ - this.back = 0; /* bits back of last unprocessed length/lit */ - this.was = 0; /* initial length of match */ - } - - - const inflateStateCheck = (strm) => { - - if (!strm) { - return 1; - } - const state = strm.state; - if (!state || state.strm !== strm || - state.mode < HEAD || state.mode > SYNC) { - return 1; - } - return 0; - }; - - - const inflateResetKeep = (strm) => { - - if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; } - const state = strm.state; - strm.total_in = strm.total_out = state.total = 0; - strm.msg = ''; /*Z_NULL*/ - if (state.wrap) { /* to support ill-conceived Java test suite */ - strm.adler = state.wrap & 1; - } - state.mode = HEAD; - state.last = 0; - state.havedict = 0; - state.flags = -1; - state.dmax = 32768; - state.head = null/*Z_NULL*/; - state.hold = 0; - state.bits = 0; - //state.lencode = state.distcode = state.next = state.codes; - state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS); - state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS); - - state.sane = 1; - state.back = -1; - //Tracev((stderr, "inflate: reset\n")); - return Z_OK$1; - }; - - - const inflateReset = (strm) => { - - if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; } - const state = strm.state; - state.wsize = 0; - state.whave = 0; - state.wnext = 0; - return inflateResetKeep(strm); - - }; - - - const inflateReset2 = (strm, windowBits) => { - let wrap; - - /* get the state */ - if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; } - const state = strm.state; - - /* extract wrap request from windowBits parameter */ - if (windowBits < 0) { - wrap = 0; - windowBits = -windowBits; - } - else { - wrap = (windowBits >> 4) + 5; - if (windowBits < 48) { - windowBits &= 15; - } - } - - /* set number of window bits, free window if different */ - if (windowBits && (windowBits < 8 || windowBits > 15)) { - return Z_STREAM_ERROR$1; - } - if (state.window !== null && state.wbits !== windowBits) { - state.window = null; - } - - /* update state and reset the rest of it */ - state.wrap = wrap; - state.wbits = windowBits; - return inflateReset(strm); - }; - - - const inflateInit2 = (strm, windowBits) => { - - if (!strm) { return Z_STREAM_ERROR$1; } - //strm.msg = Z_NULL; /* in case we return an error */ - - const state = new InflateState(); - - //if (state === Z_NULL) return Z_MEM_ERROR; - //Tracev((stderr, "inflate: allocated\n")); - strm.state = state; - state.strm = strm; - state.window = null/*Z_NULL*/; - state.mode = HEAD; /* to pass state test in inflateReset2() */ - const ret = inflateReset2(strm, windowBits); - if (ret !== Z_OK$1) { - strm.state = null/*Z_NULL*/; - } - return ret; - }; - - - const inflateInit = (strm) => { - - return inflateInit2(strm, DEF_WBITS); - }; - - - /* - Return state with length and distance decoding tables and index sizes set to - fixed code decoding. Normally this returns fixed tables from inffixed.h. - If BUILDFIXED is defined, then instead this routine builds the tables the - first time it's called, and returns those tables the first time and - thereafter. This reduces the size of the code by about 2K bytes, in - exchange for a little execution time. However, BUILDFIXED should not be - used for threaded applications, since the rewriting of the tables and virgin - may not be thread-safe. - */ - let virgin = true; - - let lenfix, distfix; // We have no pointers in JS, so keep tables separate - - - const fixedtables = (state) => { - - /* build fixed huffman tables if first call (may not be thread safe) */ - if (virgin) { - lenfix = new Int32Array(512); - distfix = new Int32Array(32); - - /* literal/length table */ - let sym = 0; - while (sym < 144) { state.lens[sym++] = 8; } - while (sym < 256) { state.lens[sym++] = 9; } - while (sym < 280) { state.lens[sym++] = 7; } - while (sym < 288) { state.lens[sym++] = 8; } - - inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); - - /* distance table */ - sym = 0; - while (sym < 32) { state.lens[sym++] = 5; } - - inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); - - /* do this just once */ - virgin = false; - } - - state.lencode = lenfix; - state.lenbits = 9; - state.distcode = distfix; - state.distbits = 5; - }; - - - /* - Update the window with the last wsize (normally 32K) bytes written before - returning. If window does not exist yet, create it. This is only called - when a window is already in use, or when output has been written during this - inflate call, but the end of the deflate stream has not been reached yet. - It is also called to create a window for dictionary data when a dictionary - is loaded. - - Providing output buffers larger than 32K to inflate() should provide a speed - advantage, since only the last 32K of output is copied to the sliding window - upon return from inflate(), and since all distances after the first 32K of - output will fall in the output data, making match copies simpler and faster. - The advantage may be dependent on the size of the processor's data caches. - */ - const updatewindow = (strm, src, end, copy) => { - - let dist; - const state = strm.state; - - /* if it hasn't been done already, allocate space for the window */ - if (state.window === null) { - state.wsize = 1 << state.wbits; - state.wnext = 0; - state.whave = 0; - - state.window = new Uint8Array(state.wsize); - } - - /* copy state->wsize or less output bytes into the circular window */ - if (copy >= state.wsize) { - state.window.set(src.subarray(end - state.wsize, end), 0); - state.wnext = 0; - state.whave = state.wsize; - } - else { - dist = state.wsize - state.wnext; - if (dist > copy) { - dist = copy; - } - //zmemcpy(state->window + state->wnext, end - copy, dist); - state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext); - copy -= dist; - if (copy) { - //zmemcpy(state->window, end - copy, copy); - state.window.set(src.subarray(end - copy, end), 0); - state.wnext = copy; - state.whave = state.wsize; - } - else { - state.wnext += dist; - if (state.wnext === state.wsize) { state.wnext = 0; } - if (state.whave < state.wsize) { state.whave += dist; } - } - } - return 0; - }; - - - const inflate$1 = (strm, flush) => { - - let state; - let input, output; // input/output buffers - let next; /* next input INDEX */ - let put; /* next output INDEX */ - let have, left; /* available input and output */ - let hold; /* bit buffer */ - let bits; /* bits in bit buffer */ - let _in, _out; /* save starting available input and output */ - let copy; /* number of stored or match bytes to copy */ - let from; /* where to copy match bytes from */ - let from_source; - let here = 0; /* current decoding table entry */ - let here_bits, here_op, here_val; // paked "here" denormalized (JS specific) - //let last; /* parent table entry */ - let last_bits, last_op, last_val; // paked "last" denormalized (JS specific) - let len; /* length to copy for repeats, bits to drop */ - let ret; /* return code */ - const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */ - let opts; - - let n; // temporary variable for NEED_BITS - - const order = /* permutation of code lengths */ - new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]); - - - if (inflateStateCheck(strm) || !strm.output || - (!strm.input && strm.avail_in !== 0)) { - return Z_STREAM_ERROR$1; - } - - state = strm.state; - if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ - - - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - _in = have; - _out = left; - ret = Z_OK$1; - - inf_leave: // goto emulation - for (;;) { - switch (state.mode) { - case HEAD: - if (state.wrap === 0) { - state.mode = TYPEDO; - break; - } - //=== NEEDBITS(16); - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ - if (state.wbits === 0) { - state.wbits = 15; - } - state.check = 0/*crc32(0L, Z_NULL, 0)*/; - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = FLAGS; - break; - } - if (state.head) { - state.head.done = false; - } - if (!(state.wrap & 1) || /* check if zlib header allowed */ - (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { - strm.msg = 'incorrect header check'; - state.mode = BAD; - break; - } - if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - len = (hold & 0x0f)/*BITS(4)*/ + 8; - if (state.wbits === 0) { - state.wbits = len; - } - if (len > 15 || len > state.wbits) { - strm.msg = 'invalid window size'; - state.mode = BAD; - break; - } - - // !!! pako patch. Force use `options.windowBits` if passed. - // Required to always use max window size by default. - state.dmax = 1 << state.wbits; - //state.dmax = 1 << len; - - state.flags = 0; /* indicate zlib header */ - //Tracev((stderr, "inflate: zlib header ok\n")); - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = hold & 0x200 ? DICTID : TYPE; - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - break; - case FLAGS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.flags = hold; - if ((state.flags & 0xff) !== Z_DEFLATED) { - strm.msg = 'unknown compression method'; - state.mode = BAD; - break; - } - if (state.flags & 0xe000) { - strm.msg = 'unknown header flags set'; - state.mode = BAD; - break; - } - if (state.head) { - state.head.text = ((hold >> 8) & 1); - } - if ((state.flags & 0x0200) && (state.wrap & 4)) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = TIME; - /* falls through */ - case TIME: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.time = hold; - } - if ((state.flags & 0x0200) && (state.wrap & 4)) { - //=== CRC4(state.check, hold) - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - hbuf[2] = (hold >>> 16) & 0xff; - hbuf[3] = (hold >>> 24) & 0xff; - state.check = crc32(state.check, hbuf, 4, 0); - //=== - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = OS; - /* falls through */ - case OS: - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if (state.head) { - state.head.xflags = (hold & 0xff); - state.head.os = (hold >> 8); - } - if ((state.flags & 0x0200) && (state.wrap & 4)) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = EXLEN; - /* falls through */ - case EXLEN: - if (state.flags & 0x0400) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length = hold; - if (state.head) { - state.head.extra_len = hold; - } - if ((state.flags & 0x0200) && (state.wrap & 4)) { - //=== CRC2(state.check, hold); - hbuf[0] = hold & 0xff; - hbuf[1] = (hold >>> 8) & 0xff; - state.check = crc32(state.check, hbuf, 2, 0); - //===// - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - else if (state.head) { - state.head.extra = null/*Z_NULL*/; - } - state.mode = EXTRA; - /* falls through */ - case EXTRA: - if (state.flags & 0x0400) { - copy = state.length; - if (copy > have) { copy = have; } - if (copy) { - if (state.head) { - len = state.head.extra_len - state.length; - if (!state.head.extra) { - // Use untyped array for more convenient processing later - state.head.extra = new Uint8Array(state.head.extra_len); - } - state.head.extra.set( - input.subarray( - next, - // extra field is limited to 65536 bytes - // - no need for additional size check - next + copy - ), - /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ - len - ); - //zmemcpy(state.head.extra + len, next, - // len + copy > state.head.extra_max ? - // state.head.extra_max - len : copy); - } - if ((state.flags & 0x0200) && (state.wrap & 4)) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - state.length -= copy; - } - if (state.length) { break inf_leave; } - } - state.length = 0; - state.mode = NAME; - /* falls through */ - case NAME: - if (state.flags & 0x0800) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - // TODO: 2 or 1 bytes? - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.name_max*/)) { - state.head.name += String.fromCharCode(len); - } - } while (len && copy < have); - - if ((state.flags & 0x0200) && (state.wrap & 4)) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.name = null; - } - state.length = 0; - state.mode = COMMENT; - /* falls through */ - case COMMENT: - if (state.flags & 0x1000) { - if (have === 0) { break inf_leave; } - copy = 0; - do { - len = input[next + copy++]; - /* use constant limit because in js we should not preallocate memory */ - if (state.head && len && - (state.length < 65536 /*state.head.comm_max*/)) { - state.head.comment += String.fromCharCode(len); - } - } while (len && copy < have); - if ((state.flags & 0x0200) && (state.wrap & 4)) { - state.check = crc32(state.check, input, copy, next); - } - have -= copy; - next += copy; - if (len) { break inf_leave; } - } - else if (state.head) { - state.head.comment = null; - } - state.mode = HCRC; - /* falls through */ - case HCRC: - if (state.flags & 0x0200) { - //=== NEEDBITS(16); */ - while (bits < 16) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 4) && hold !== (state.check & 0xffff)) { - strm.msg = 'header crc mismatch'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - } - if (state.head) { - state.head.hcrc = ((state.flags >> 9) & 1); - state.head.done = true; - } - strm.adler = state.check = 0; - state.mode = TYPE; - break; - case DICTID: - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - strm.adler = state.check = zswap32(hold); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = DICT; - /* falls through */ - case DICT: - if (state.havedict === 0) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - return Z_NEED_DICT$1; - } - strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; - state.mode = TYPE; - /* falls through */ - case TYPE: - if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } - /* falls through */ - case TYPEDO: - if (state.last) { - //--- BYTEBITS() ---// - hold >>>= bits & 7; - bits -= bits & 7; - //---// - state.mode = CHECK; - break; - } - //=== NEEDBITS(3); */ - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.last = (hold & 0x01)/*BITS(1)*/; - //--- DROPBITS(1) ---// - hold >>>= 1; - bits -= 1; - //---// - - switch ((hold & 0x03)/*BITS(2)*/) { - case 0: /* stored block */ - //Tracev((stderr, "inflate: stored block%s\n", - // state.last ? " (last)" : "")); - state.mode = STORED; - break; - case 1: /* fixed block */ - fixedtables(state); - //Tracev((stderr, "inflate: fixed codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = LEN_; /* decode codes */ - if (flush === Z_TREES) { - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break inf_leave; - } - break; - case 2: /* dynamic block */ - //Tracev((stderr, "inflate: dynamic codes block%s\n", - // state.last ? " (last)" : "")); - state.mode = TABLE; - break; - case 3: - strm.msg = 'invalid block type'; - state.mode = BAD; - } - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - break; - case STORED: - //--- BYTEBITS() ---// /* go to byte boundary */ - hold >>>= bits & 7; - bits -= bits & 7; - //---// - //=== NEEDBITS(32); */ - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { - strm.msg = 'invalid stored block lengths'; - state.mode = BAD; - break; - } - state.length = hold & 0xffff; - //Tracev((stderr, "inflate: stored length %u\n", - // state.length)); - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - state.mode = COPY_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case COPY_: - state.mode = COPY; - /* falls through */ - case COPY: - copy = state.length; - if (copy) { - if (copy > have) { copy = have; } - if (copy > left) { copy = left; } - if (copy === 0) { break inf_leave; } - //--- zmemcpy(put, next, copy); --- - output.set(input.subarray(next, next + copy), put); - //---// - have -= copy; - next += copy; - left -= copy; - put += copy; - state.length -= copy; - break; - } - //Tracev((stderr, "inflate: stored end\n")); - state.mode = TYPE; - break; - case TABLE: - //=== NEEDBITS(14); */ - while (bits < 14) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; - //--- DROPBITS(5) ---// - hold >>>= 5; - bits -= 5; - //---// - state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; - //--- DROPBITS(4) ---// - hold >>>= 4; - bits -= 4; - //---// - //#ifndef PKZIP_BUG_WORKAROUND - if (state.nlen > 286 || state.ndist > 30) { - strm.msg = 'too many length or distance symbols'; - state.mode = BAD; - break; - } - //#endif - //Tracev((stderr, "inflate: table sizes ok\n")); - state.have = 0; - state.mode = LENLENS; - /* falls through */ - case LENLENS: - while (state.have < state.ncode) { - //=== NEEDBITS(3); - while (bits < 3) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - while (state.have < 19) { - state.lens[order[state.have++]] = 0; - } - // We have separate tables & no pointers. 2 commented lines below not needed. - //state.next = state.codes; - //state.lencode = state.next; - // Switch to use dynamic table - state.lencode = state.lendyn; - state.lenbits = 7; - - opts = { bits: state.lenbits }; - ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); - state.lenbits = opts.bits; - - if (ret) { - strm.msg = 'invalid code lengths set'; - state.mode = BAD; - break; - } - //Tracev((stderr, "inflate: code lengths ok\n")); - state.have = 0; - state.mode = CODELENS; - /* falls through */ - case CODELENS: - while (state.have < state.nlen + state.ndist) { - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_val < 16) { - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.lens[state.have++] = here_val; - } - else { - if (here_val === 16) { - //=== NEEDBITS(here.bits + 2); - n = here_bits + 2; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - if (state.have === 0) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - len = state.lens[state.have - 1]; - copy = 3 + (hold & 0x03);//BITS(2); - //--- DROPBITS(2) ---// - hold >>>= 2; - bits -= 2; - //---// - } - else if (here_val === 17) { - //=== NEEDBITS(here.bits + 3); - n = here_bits + 3; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 3 + (hold & 0x07);//BITS(3); - //--- DROPBITS(3) ---// - hold >>>= 3; - bits -= 3; - //---// - } - else { - //=== NEEDBITS(here.bits + 7); - n = here_bits + 7; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - len = 0; - copy = 11 + (hold & 0x7f);//BITS(7); - //--- DROPBITS(7) ---// - hold >>>= 7; - bits -= 7; - //---// - } - if (state.have + copy > state.nlen + state.ndist) { - strm.msg = 'invalid bit length repeat'; - state.mode = BAD; - break; - } - while (copy--) { - state.lens[state.have++] = len; - } - } - } - - /* handle error breaks in while */ - if (state.mode === BAD) { break; } - - /* check for end-of-block code (better have one) */ - if (state.lens[256] === 0) { - strm.msg = 'invalid code -- missing end-of-block'; - state.mode = BAD; - break; - } - - /* build code tables -- note: do not change the lenbits or distbits - values here (9 and 6) without reading the comments in inftrees.h - concerning the ENOUGH constants, which depend on those values */ - state.lenbits = 9; - - opts = { bits: state.lenbits }; - ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.lenbits = opts.bits; - // state.lencode = state.next; - - if (ret) { - strm.msg = 'invalid literal/lengths set'; - state.mode = BAD; - break; - } - - state.distbits = 6; - //state.distcode.copy(state.codes); - // Switch to use dynamic table - state.distcode = state.distdyn; - opts = { bits: state.distbits }; - ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); - // We have separate tables & no pointers. 2 commented lines below not needed. - // state.next_index = opts.table_index; - state.distbits = opts.bits; - // state.distcode = state.next; - - if (ret) { - strm.msg = 'invalid distances set'; - state.mode = BAD; - break; - } - //Tracev((stderr, 'inflate: codes ok\n')); - state.mode = LEN_; - if (flush === Z_TREES) { break inf_leave; } - /* falls through */ - case LEN_: - state.mode = LEN; - /* falls through */ - case LEN: - if (have >= 6 && left >= 258) { - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - inflate_fast(strm, _out); - //--- LOAD() --- - put = strm.next_out; - output = strm.output; - left = strm.avail_out; - next = strm.next_in; - input = strm.input; - have = strm.avail_in; - hold = state.hold; - bits = state.bits; - //--- - - if (state.mode === TYPE) { - state.back = -1; - } - break; - } - state.back = 0; - for (;;) { - here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if (here_bits <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if (here_op && (here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.lencode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - state.length = here_val; - if (here_op === 0) { - //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? - // "inflate: literal '%c'\n" : - // "inflate: literal 0x%02x\n", here.val)); - state.mode = LIT; - break; - } - if (here_op & 32) { - //Tracevv((stderr, "inflate: end of block\n")); - state.back = -1; - state.mode = TYPE; - break; - } - if (here_op & 64) { - strm.msg = 'invalid literal/length code'; - state.mode = BAD; - break; - } - state.extra = here_op & 15; - state.mode = LENEXT; - /* falls through */ - case LENEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //Tracevv((stderr, "inflate: length %u\n", state.length)); - state.was = state.length; - state.mode = DIST; - /* falls through */ - case DIST: - for (;;) { - here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - if ((here_op & 0xf0) === 0) { - last_bits = here_bits; - last_op = here_op; - last_val = here_val; - for (;;) { - here = state.distcode[last_val + - ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; - here_bits = here >>> 24; - here_op = (here >>> 16) & 0xff; - here_val = here & 0xffff; - - if ((last_bits + here_bits) <= bits) { break; } - //--- PULLBYTE() ---// - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - //---// - } - //--- DROPBITS(last.bits) ---// - hold >>>= last_bits; - bits -= last_bits; - //---// - state.back += last_bits; - } - //--- DROPBITS(here.bits) ---// - hold >>>= here_bits; - bits -= here_bits; - //---// - state.back += here_bits; - if (here_op & 64) { - strm.msg = 'invalid distance code'; - state.mode = BAD; - break; - } - state.offset = here_val; - state.extra = (here_op) & 15; - state.mode = DISTEXT; - /* falls through */ - case DISTEXT: - if (state.extra) { - //=== NEEDBITS(state.extra); - n = state.extra; - while (bits < n) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; - //--- DROPBITS(state.extra) ---// - hold >>>= state.extra; - bits -= state.extra; - //---// - state.back += state.extra; - } - //#ifdef INFLATE_STRICT - if (state.offset > state.dmax) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } - //#endif - //Tracevv((stderr, "inflate: distance %u\n", state.offset)); - state.mode = MATCH; - /* falls through */ - case MATCH: - if (left === 0) { break inf_leave; } - copy = _out - left; - if (state.offset > copy) { /* copy from window */ - copy = state.offset - copy; - if (copy > state.whave) { - if (state.sane) { - strm.msg = 'invalid distance too far back'; - state.mode = BAD; - break; - } - // (!) This block is disabled in zlib defaults, - // don't enable it for binary compatibility - //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR - // Trace((stderr, "inflate.c too far\n")); - // copy -= state.whave; - // if (copy > state.length) { copy = state.length; } - // if (copy > left) { copy = left; } - // left -= copy; - // state.length -= copy; - // do { - // output[put++] = 0; - // } while (--copy); - // if (state.length === 0) { state.mode = LEN; } - // break; - //#endif - } - if (copy > state.wnext) { - copy -= state.wnext; - from = state.wsize - copy; - } - else { - from = state.wnext - copy; - } - if (copy > state.length) { copy = state.length; } - from_source = state.window; - } - else { /* copy from output */ - from_source = output; - from = put - state.offset; - copy = state.length; - } - if (copy > left) { copy = left; } - left -= copy; - state.length -= copy; - do { - output[put++] = from_source[from++]; - } while (--copy); - if (state.length === 0) { state.mode = LEN; } - break; - case LIT: - if (left === 0) { break inf_leave; } - output[put++] = state.length; - left--; - state.mode = LEN; - break; - case CHECK: - if (state.wrap) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - // Use '|' instead of '+' to make sure that result is signed - hold |= input[next++] << bits; - bits += 8; - } - //===// - _out -= left; - strm.total_out += _out; - state.total += _out; - if ((state.wrap & 4) && _out) { - strm.adler = state.check = - /*UPDATE_CHECK(state.check, put - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); - - } - _out = left; - // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too - if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) { - strm.msg = 'incorrect data check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: check matches trailer\n")); - } - state.mode = LENGTH; - /* falls through */ - case LENGTH: - if (state.wrap && state.flags) { - //=== NEEDBITS(32); - while (bits < 32) { - if (have === 0) { break inf_leave; } - have--; - hold += input[next++] << bits; - bits += 8; - } - //===// - if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) { - strm.msg = 'incorrect length check'; - state.mode = BAD; - break; - } - //=== INITBITS(); - hold = 0; - bits = 0; - //===// - //Tracev((stderr, "inflate: length matches trailer\n")); - } - state.mode = DONE; - /* falls through */ - case DONE: - ret = Z_STREAM_END$1; - break inf_leave; - case BAD: - ret = Z_DATA_ERROR$1; - break inf_leave; - case MEM: - return Z_MEM_ERROR$1; - case SYNC: - /* falls through */ - default: - return Z_STREAM_ERROR$1; - } - } - - // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" - - /* - Return from inflate(), updating the total counts and the check value. - If there was no progress during the inflate() call, return a buffer - error. Call updatewindow() to create and/or update the window state. - Note: a memory error from inflate() is non-recoverable. - */ - - //--- RESTORE() --- - strm.next_out = put; - strm.avail_out = left; - strm.next_in = next; - strm.avail_in = have; - state.hold = hold; - state.bits = bits; - //--- - - if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && - (state.mode < CHECK || flush !== Z_FINISH$1))) { - if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) ; - } - _in -= strm.avail_in; - _out -= strm.avail_out; - strm.total_in += _in; - strm.total_out += _out; - state.total += _out; - if ((state.wrap & 4) && _out) { - strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/ - (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); - } - strm.data_type = state.bits + (state.last ? 64 : 0) + - (state.mode === TYPE ? 128 : 0) + - (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); - if (((_in === 0 && _out === 0) || flush === Z_FINISH$1) && ret === Z_OK$1) { - ret = Z_BUF_ERROR; - } - return ret; - }; - - - const inflateEnd = (strm) => { - - if (inflateStateCheck(strm)) { - return Z_STREAM_ERROR$1; - } - - let state = strm.state; - if (state.window) { - state.window = null; - } - strm.state = null; - return Z_OK$1; - }; - - - const inflateGetHeader = (strm, head) => { - - /* check state */ - if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; } - const state = strm.state; - if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR$1; } - - /* save header structure */ - state.head = head; - head.done = false; - return Z_OK$1; - }; - - - const inflateSetDictionary = (strm, dictionary) => { - const dictLength = dictionary.length; - - let state; - let dictid; - let ret; - - /* check state */ - if (inflateStateCheck(strm)) { return Z_STREAM_ERROR$1; } - state = strm.state; - - if (state.wrap !== 0 && state.mode !== DICT) { - return Z_STREAM_ERROR$1; - } - - /* check for correct dictionary identifier */ - if (state.mode === DICT) { - dictid = 1; /* adler32(0, null, 0)*/ - /* dictid = adler32(dictid, dictionary, dictLength); */ - dictid = adler32(dictid, dictionary, dictLength, 0); - if (dictid !== state.check) { - return Z_DATA_ERROR$1; - } - } - /* copy dictionary to window using updatewindow(), which will amend the - existing dictionary if appropriate */ - ret = updatewindow(strm, dictionary, dictLength, dictLength); - if (ret) { - state.mode = MEM; - return Z_MEM_ERROR$1; - } - state.havedict = 1; - // Tracev((stderr, "inflate: dictionary set\n")); - return Z_OK$1; - }; - - - inflate$2.inflateReset = inflateReset; - inflate$2.inflateReset2 = inflateReset2; - inflate$2.inflateResetKeep = inflateResetKeep; - inflate$2.inflateInit = inflateInit; - inflate$2.inflateInit2 = inflateInit2; - inflate$2.inflate = inflate$1; - inflate$2.inflateEnd = inflateEnd; - inflate$2.inflateGetHeader = inflateGetHeader; - inflate$2.inflateSetDictionary = inflateSetDictionary; - inflate$2.inflateInfo = 'pako inflate (from Nodeca project)'; - - var common = {}; - - const _has = (obj, key) => { - return Object.prototype.hasOwnProperty.call(obj, key); - }; - - common.assign = function (obj /*from1, from2, from3, ...*/) { - const sources = Array.prototype.slice.call(arguments, 1); - while (sources.length) { - const source = sources.shift(); - if (!source) { continue; } - - if (typeof source !== 'object') { - throw new TypeError(source + 'must be non-object'); - } - - for (const p in source) { - if (_has(source, p)) { - obj[p] = source[p]; - } - } - } - - return obj; - }; - - - // Join array of chunks to single array. - common.flattenChunks = (chunks) => { - // calculate data length - let len = 0; - - for (let i = 0, l = chunks.length; i < l; i++) { - len += chunks[i].length; - } - - // join chunks - const result = new Uint8Array(len); - - for (let i = 0, pos = 0, l = chunks.length; i < l; i++) { - let chunk = chunks[i]; - result.set(chunk, pos); - pos += chunk.length; - } - - return result; - }; - - var strings$1 = {}; - - // Quick check if we can use fast array to bin string conversion - // - // - apply(Array) can fail on Android 2.2 - // - apply(Uint8Array) can fail on iOS 5.1 Safari - // - let STR_APPLY_UIA_OK = true; - - try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } - - - // Table with utf8 lengths (calculated by first byte of sequence) - // Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, - // because max possible codepoint is 0x10ffff - const _utf8len = new Uint8Array(256); - for (let q = 0; q < 256; q++) { - _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); - } - _utf8len[254] = _utf8len[254] = 1; // Invalid sequence start - - - // convert string to array (typed, when possible) - strings$1.string2buf = (str) => { - if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) { - return new TextEncoder().encode(str); - } - - let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; - - // count binary size - for (m_pos = 0; m_pos < str_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; - } - - // allocate buffer - buf = new Uint8Array(buf_len); - - // convert - for (i = 0, m_pos = 0; i < buf_len; m_pos++) { - c = str.charCodeAt(m_pos); - if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { - c2 = str.charCodeAt(m_pos + 1); - if ((c2 & 0xfc00) === 0xdc00) { - c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); - m_pos++; - } - } - if (c < 0x80) { - /* one byte */ - buf[i++] = c; - } else if (c < 0x800) { - /* two bytes */ - buf[i++] = 0xC0 | (c >>> 6); - buf[i++] = 0x80 | (c & 0x3f); - } else if (c < 0x10000) { - /* three bytes */ - buf[i++] = 0xE0 | (c >>> 12); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } else { - /* four bytes */ - buf[i++] = 0xf0 | (c >>> 18); - buf[i++] = 0x80 | (c >>> 12 & 0x3f); - buf[i++] = 0x80 | (c >>> 6 & 0x3f); - buf[i++] = 0x80 | (c & 0x3f); - } - } - - return buf; - }; - - // Helper - const buf2binstring = (buf, len) => { - // On Chrome, the arguments in a function call that are allowed is `65534`. - // If the length of the buffer is smaller than that, we can use this optimization, - // otherwise we will take a slower path. - if (len < 65534) { - if (buf.subarray && STR_APPLY_UIA_OK) { - return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len)); - } - } - - let result = ''; - for (let i = 0; i < len; i++) { - result += String.fromCharCode(buf[i]); - } - return result; - }; - - - // convert array to string - strings$1.buf2string = (buf, max) => { - const len = max || buf.length; - - if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) { - return new TextDecoder().decode(buf.subarray(0, max)); - } - - let i, out; - - // Reserve max possible length (2 words per char) - // NB: by unknown reasons, Array is significantly faster for - // String.fromCharCode.apply than Uint16Array. - const utf16buf = new Array(len * 2); - - for (out = 0, i = 0; i < len;) { - let c = buf[i++]; - // quick process ascii - if (c < 0x80) { utf16buf[out++] = c; continue; } - - let c_len = _utf8len[c]; - // skip 5 & 6 byte codes - if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } - - // apply mask on first byte - c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; - // join the rest - while (c_len > 1 && i < len) { - c = (c << 6) | (buf[i++] & 0x3f); - c_len--; - } - - // terminated by end of string? - if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } - - if (c < 0x10000) { - utf16buf[out++] = c; - } else { - c -= 0x10000; - utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); - utf16buf[out++] = 0xdc00 | (c & 0x3ff); - } - } - - return buf2binstring(utf16buf, out); - }; - - - // Calculate max possible position in utf8 buffer, - // that will not break sequence. If that's not possible - // - (very small limits) return max size as is. - // - // buf[] - utf8 bytes array - // max - length limit (mandatory); - strings$1.utf8border = (buf, max) => { - - max = max || buf.length; - if (max > buf.length) { max = buf.length; } - - // go back from last position, until start of sequence found - let pos = max - 1; - while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } - - // Very small and broken sequence, - // return max, because we should return something anyway. - if (pos < 0) { return max; } - - // If we came to start of buffer - that means buffer is too small, - // return max too. - if (pos === 0) { return max; } - - return (pos + _utf8len[buf[pos]] > max) ? pos : max; - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - var messages = { - 2: 'need dictionary', /* Z_NEED_DICT 2 */ - 1: 'stream end', /* Z_STREAM_END 1 */ - 0: '', /* Z_OK 0 */ - '-1': 'file error', /* Z_ERRNO (-1) */ - '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ - '-3': 'data error', /* Z_DATA_ERROR (-3) */ - '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ - '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ - '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ - }; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function ZStream$1() { - /* next input byte */ - this.input = null; // JS specific, because we have no pointers - this.next_in = 0; - /* number of bytes available at input */ - this.avail_in = 0; - /* total number of input bytes read so far */ - this.total_in = 0; - /* next output byte should be put there */ - this.output = null; // JS specific, because we have no pointers - this.next_out = 0; - /* remaining free space at output */ - this.avail_out = 0; - /* total number of bytes output so far */ - this.total_out = 0; - /* last error message, NULL if no error */ - this.msg = ''/*Z_NULL*/; - /* not visible by applications */ - this.state = null; - /* best guess about the data type: binary or text */ - this.data_type = 2/*Z_UNKNOWN*/; - /* adler32 value of the uncompressed data */ - this.adler = 0; - } - - var zstream = ZStream$1; - - // (C) 1995-2013 Jean-loup Gailly and Mark Adler - // (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin - // - // This software is provided 'as-is', without any express or implied - // warranty. In no event will the authors be held liable for any damages - // arising from the use of this software. - // - // Permission is granted to anyone to use this software for any purpose, - // including commercial applications, and to alter it and redistribute it - // freely, subject to the following restrictions: - // - // 1. The origin of this software must not be misrepresented; you must not - // claim that you wrote the original software. If you use this software - // in a product, an acknowledgment in the product documentation would be - // appreciated but is not required. - // 2. Altered source versions must be plainly marked as such, and must not be - // misrepresented as being the original software. - // 3. This notice may not be removed or altered from any source distribution. - - function GZheader$1() { - /* true if compressed data believed to be text */ - this.text = 0; - /* modification time */ - this.time = 0; - /* extra flags (not used when writing a gzip file) */ - this.xflags = 0; - /* operating system */ - this.os = 0; - /* pointer to extra field or Z_NULL if none */ - this.extra = null; - /* extra field length (valid if extra != Z_NULL) */ - this.extra_len = 0; // Actually, we don't need it in JS, - // but leave for few code modifications - - // - // Setup limits is not necessary because in js we should not preallocate memory - // for inflate use constant limit in 65536 bytes - // - - /* space at extra (only when reading header) */ - // this.extra_max = 0; - /* pointer to zero-terminated file name or Z_NULL */ - this.name = ''; - /* space at name (only when reading header) */ - // this.name_max = 0; - /* pointer to zero-terminated comment or Z_NULL */ - this.comment = ''; - /* space at comment (only when reading header) */ - // this.comm_max = 0; - /* true if there was or will be a header crc */ - this.hcrc = 0; - /* true when done reading gzip header (not used when writing a gzip file) */ - this.done = false; - } - - var gzheader = GZheader$1; - - const zlib_inflate = inflate$2; - const utils = common; - const strings = strings$1; - const msg = messages; - const ZStream = zstream; - const GZheader = gzheader; - - const toString = Object.prototype.toString; - - /* Public constants ==========================================================*/ - /* ===========================================================================*/ - - const { - Z_NO_FLUSH, Z_FINISH, - Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR - } = constants; - - /* ===========================================================================*/ - - - /** - * class Inflate - * - * Generic JS-style wrapper for zlib calls. If you don't need - * streaming behaviour - use more simple functions: [[inflate]] - * and [[inflateRaw]]. - **/ - - /* internal - * inflate.chunks -> Array - * - * Chunks of output data, if [[Inflate#onData]] not overridden. - **/ - - /** - * Inflate.result -> Uint8Array|String - * - * Uncompressed result, generated by default [[Inflate#onData]] - * and [[Inflate#onEnd]] handlers. Filled after you push last chunk - * (call [[Inflate#push]] with `Z_FINISH` / `true` param). - **/ - - /** - * Inflate.err -> Number - * - * Error code after inflate finished. 0 (Z_OK) on success. - * Should be checked if broken data possible. - **/ - - /** - * Inflate.msg -> String - * - * Error message, if [[Inflate.err]] != 0 - **/ - - - /** - * new Inflate(options) - * - options (Object): zlib inflate options. - * - * Creates new inflator instance with specified params. Throws exception - * on bad params. Supported options: - * - * - `windowBits` - * - `dictionary` - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information on these. - * - * Additional options, for internal needs: - * - * - `chunkSize` - size of generated data chunks (16K by default) - * - `raw` (Boolean) - do raw inflate - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * By default, when no options set, autodetect deflate/gzip data format via - * wrapper header. - * - * ##### Example: - * - * ```javascript - * const pako = require('pako') - * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9]) - * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]); - * - * const inflate = new pako.Inflate({ level: 3}); - * - * inflate.push(chunk1, false); - * inflate.push(chunk2, true); // true -> last chunk - * - * if (inflate.err) { throw new Error(inflate.err); } - * - * console.log(inflate.result); - * ``` - **/ - function Inflate(options) { - this.options = utils.assign({ - chunkSize: 1024 * 64, - windowBits: 15, - to: '' - }, options || {}); - - const opt = this.options; - - // Force window size for `raw` data, if not set directly, - // because we have no header for autodetect. - if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { - opt.windowBits = -opt.windowBits; - if (opt.windowBits === 0) { opt.windowBits = -15; } - } - - // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate - if ((opt.windowBits >= 0) && (opt.windowBits < 16) && - !(options && options.windowBits)) { - opt.windowBits += 32; - } - - // Gzip header has no info about windows size, we can do autodetect only - // for deflate. So, if window size not set, force it to max when gzip possible - if ((opt.windowBits > 15) && (opt.windowBits < 48)) { - // bit 3 (16) -> gzipped data - // bit 4 (32) -> autodetect gzip/deflate - if ((opt.windowBits & 15) === 0) { - opt.windowBits |= 15; - } - } - - this.err = 0; // error code, if happens (0 = Z_OK) - this.msg = ''; // error message - this.ended = false; // used to avoid multiple onEnd() calls - this.chunks = []; // chunks of compressed data - - this.strm = new ZStream(); - this.strm.avail_out = 0; - - let status = zlib_inflate.inflateInit2( - this.strm, - opt.windowBits - ); - - if (status !== Z_OK) { - throw new Error(msg[status]); - } - - this.header = new GZheader(); - - zlib_inflate.inflateGetHeader(this.strm, this.header); - - // Setup dictionary - if (opt.dictionary) { - // Convert data if needed - if (typeof opt.dictionary === 'string') { - opt.dictionary = strings.string2buf(opt.dictionary); - } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { - opt.dictionary = new Uint8Array(opt.dictionary); - } - if (opt.raw) { //In raw mode we need to set the dictionary early - status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary); - if (status !== Z_OK) { - throw new Error(msg[status]); - } - } - } - } - - /** - * Inflate#push(data[, flush_mode]) -> Boolean - * - data (Uint8Array|ArrayBuffer): input data - * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE - * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH, - * `true` means Z_FINISH. - * - * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with - * new output chunks. Returns `true` on success. If end of stream detected, - * [[Inflate#onEnd]] will be called. - * - * `flush_mode` is not needed for normal operation, because end of stream - * detected automatically. You may try to use it for advanced things, but - * this functionality was not tested. - * - * On fail call [[Inflate#onEnd]] with error code and return false. - * - * ##### Example - * - * ```javascript - * push(chunk, false); // push one of data chunks - * ... - * push(chunk, true); // push last chunk - * ``` - **/ - Inflate.prototype.push = function (data, flush_mode) { - const strm = this.strm; - const chunkSize = this.options.chunkSize; - const dictionary = this.options.dictionary; - let status, _flush_mode, last_avail_out; - - if (this.ended) return false; - - if (flush_mode === ~~flush_mode) _flush_mode = flush_mode; - else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH; - - // Convert data if needed - if (toString.call(data) === '[object ArrayBuffer]') { - strm.input = new Uint8Array(data); - } else { - strm.input = data; - } - - strm.next_in = 0; - strm.avail_in = strm.input.length; - - for (;;) { - if (strm.avail_out === 0) { - strm.output = new Uint8Array(chunkSize); - strm.next_out = 0; - strm.avail_out = chunkSize; - } - - status = zlib_inflate.inflate(strm, _flush_mode); - - if (status === Z_NEED_DICT && dictionary) { - status = zlib_inflate.inflateSetDictionary(strm, dictionary); - - if (status === Z_OK) { - status = zlib_inflate.inflate(strm, _flush_mode); - } else if (status === Z_DATA_ERROR) { - // Replace code with more verbose - status = Z_NEED_DICT; - } - } - - // Skip snyc markers if more data follows and not raw mode - while (strm.avail_in > 0 && - status === Z_STREAM_END && - strm.state.wrap > 0 && - data[strm.next_in] !== 0) - { - zlib_inflate.inflateReset(strm); - status = zlib_inflate.inflate(strm, _flush_mode); - } - - switch (status) { - case Z_STREAM_ERROR: - case Z_DATA_ERROR: - case Z_NEED_DICT: - case Z_MEM_ERROR: - this.onEnd(status); - this.ended = true; - return false; - } - - // Remember real `avail_out` value, because we may patch out buffer content - // to align utf8 strings boundaries. - last_avail_out = strm.avail_out; - - if (strm.next_out) { - if (strm.avail_out === 0 || status === Z_STREAM_END) { - - if (this.options.to === 'string') { - - let next_out_utf8 = strings.utf8border(strm.output, strm.next_out); - - let tail = strm.next_out - next_out_utf8; - let utf8str = strings.buf2string(strm.output, next_out_utf8); - - // move tail & realign counters - strm.next_out = tail; - strm.avail_out = chunkSize - tail; - if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0); - - this.onData(utf8str); - - } else { - this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out)); - } - } - } - - // Must repeat iteration if out buffer is full - if (status === Z_OK && last_avail_out === 0) continue; - - // Finalize if end of stream reached. - if (status === Z_STREAM_END) { - status = zlib_inflate.inflateEnd(this.strm); - this.onEnd(status); - this.ended = true; - return true; - } - - if (strm.avail_in === 0) break; - } - - return true; - }; - - - /** - * Inflate#onData(chunk) -> Void - * - chunk (Uint8Array|String): output data. When string output requested, - * each chunk will be string. - * - * By default, stores data blocks in `chunks[]` property and glue - * those in `onEnd`. Override this handler, if you need another behaviour. - **/ - Inflate.prototype.onData = function (chunk) { - this.chunks.push(chunk); - }; - - - /** - * Inflate#onEnd(status) -> Void - * - status (Number): inflate status. 0 (Z_OK) on success, - * other if not. - * - * Called either after you tell inflate that the input stream is - * complete (Z_FINISH). By default - join collected chunks, - * free memory and fill `results` / `err` properties. - **/ - Inflate.prototype.onEnd = function (status) { - // On success - join - if (status === Z_OK) { - if (this.options.to === 'string') { - this.result = this.chunks.join(''); - } else { - this.result = utils.flattenChunks(this.chunks); - } - } - this.chunks = []; - this.err = status; - this.msg = this.strm.msg; - }; - - - /** - * inflate(data[, options]) -> Uint8Array|String - * - data (Uint8Array|ArrayBuffer): input data to decompress. - * - options (Object): zlib inflate options. - * - * Decompress `data` with inflate/ungzip and `options`. Autodetect - * format via wrapper header by default. That's why we don't provide - * separate `ungzip` method. - * - * Supported options are: - * - * - windowBits - * - * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) - * for more information. - * - * Sugar (options): - * - * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify - * negative windowBits implicitly. - * - `to` (String) - if equal to 'string', then result will be converted - * from utf8 to utf16 (javascript) string. When string output requested, - * chunk length can differ from `chunkSize`, depending on content. - * - * - * ##### Example: - * - * ```javascript - * const pako = require('pako'); - * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9])); - * let output; - * - * try { - * output = pako.inflate(input); - * } catch (err) { - * console.log(err); - * } - * ``` - **/ - function inflate(input, options) { - const inflator = new Inflate(options); - - inflator.push(input); - - // That will never happens, if you don't cheat with options :) - if (inflator.err) throw inflator.msg || msg[inflator.err]; - - return inflator.result; - } - - - /** - * inflateRaw(data[, options]) -> Uint8Array|String - * - data (Uint8Array|ArrayBuffer): input data to decompress. - * - options (Object): zlib inflate options. - * - * The same as [[inflate]], but creates raw data, without wrapper - * (header and adler32 crc). - **/ - function inflateRaw(input, options) { - options = options || {}; - options.raw = true; - return inflate(input, options); - } - - - /** - * ungzip(data[, options]) -> Uint8Array|String - * - data (Uint8Array|ArrayBuffer): input data to decompress. - * - options (Object): zlib inflate options. - * - * Just shortcut to [[inflate]], because it autodetects format - * by header.content. Done for convenience. - **/ - - - inflate$3.Inflate = Inflate; - inflate$3.inflate = inflate; - inflate$3.inflateRaw = inflateRaw; - inflate$3.ungzip = inflate; - inflate$3.constants = constants; - - // Datatype sizes - const sizeOfUint16 = Uint16Array.BYTES_PER_ELEMENT; - const sizeOfInt32 = Int32Array.BYTES_PER_ELEMENT; - const sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT; - - const Types = { - METADATA: 0, - TERRAIN: 1, - DBROOT: 2, - }; - - Types.fromString = function (s) { - if (s === "Metadata") { - return Types.METADATA; - } else if (s === "Terrain") { - return Types.TERRAIN; - } else if (s === "DbRoot") { - return Types.DBROOT; - } - }; - - function decodeGoogleEarthEnterprisePacket(parameters, transferableObjects) { - const type = Types.fromString(parameters.type); - let buffer = parameters.buffer; - decodeGoogleEarthEnterpriseData(parameters.key, buffer); - - const uncompressedTerrain = uncompressPacket(buffer); - buffer = uncompressedTerrain.buffer; - const length = uncompressedTerrain.length; - - switch (type) { - case Types.METADATA: - return processMetadata(buffer, length, parameters.quadKey); - case Types.TERRAIN: - return processTerrain(buffer, length, transferableObjects); - case Types.DBROOT: - transferableObjects.push(buffer); - return { - buffer: buffer, - }; - } - } - - const qtMagic = 32301; - - function processMetadata(buffer, totalSize, quadKey) { - const dv = new DataView(buffer); - let offset = 0; - const magic = dv.getUint32(offset, true); - offset += sizeOfUint32; - if (magic !== qtMagic) { - throw new RuntimeError.RuntimeError("Invalid magic"); - } - - const dataTypeId = dv.getUint32(offset, true); - offset += sizeOfUint32; - if (dataTypeId !== 1) { - throw new RuntimeError.RuntimeError("Invalid data type. Must be 1 for QuadTreePacket"); - } - - // Tile format version - const quadVersion = dv.getUint32(offset, true); - offset += sizeOfUint32; - if (quadVersion !== 2) { - throw new RuntimeError.RuntimeError( - "Invalid QuadTreePacket version. Only version 2 is supported." - ); - } - - const numInstances = dv.getInt32(offset, true); - offset += sizeOfInt32; - - const dataInstanceSize = dv.getInt32(offset, true); - offset += sizeOfInt32; - if (dataInstanceSize !== 32) { - throw new RuntimeError.RuntimeError("Invalid instance size."); - } - - const dataBufferOffset = dv.getInt32(offset, true); - offset += sizeOfInt32; - - const dataBufferSize = dv.getInt32(offset, true); - offset += sizeOfInt32; - - const metaBufferSize = dv.getInt32(offset, true); - offset += sizeOfInt32; - - // Offset from beginning of packet (instances + current offset) - if (dataBufferOffset !== numInstances * dataInstanceSize + offset) { - throw new RuntimeError.RuntimeError("Invalid dataBufferOffset"); - } - - // Verify the packets is all there header + instances + dataBuffer + metaBuffer - if (dataBufferOffset + dataBufferSize + metaBufferSize !== totalSize) { - throw new RuntimeError.RuntimeError("Invalid packet offsets"); - } - - // Read all the instances - const instances = []; - for (let i = 0; i < numInstances; ++i) { - const bitfield = dv.getUint8(offset); - ++offset; - - ++offset; // 2 byte align - - const cnodeVersion = dv.getUint16(offset, true); - offset += sizeOfUint16; - - const imageVersion = dv.getUint16(offset, true); - offset += sizeOfUint16; - - const terrainVersion = dv.getUint16(offset, true); - offset += sizeOfUint16; - - // Number of channels stored in the dataBuffer - offset += sizeOfUint16; - - offset += sizeOfUint16; // 4 byte align - - // Channel type offset into dataBuffer - offset += sizeOfInt32; - - // Channel version offset into dataBuffer - offset += sizeOfInt32; - - offset += 8; // Ignore image neighbors for now - - // Data providers - const imageProvider = dv.getUint8(offset++); - const terrainProvider = dv.getUint8(offset++); - offset += sizeOfUint16; // 4 byte align - - instances.push( - new GoogleEarthEnterpriseTileInformation( - bitfield, - cnodeVersion, - imageVersion, - terrainVersion, - imageProvider, - terrainProvider - ) - ); - } - - const tileInfo = []; - let index = 0; - - function populateTiles(parentKey, parent, level) { - let isLeaf = false; - if (level === 4) { - if (parent.hasSubtree()) { - return; // We have a subtree, so just return - } - - isLeaf = true; // No subtree, so set all children to null - } - for (let i = 0; i < 4; ++i) { - const childKey = parentKey + i.toString(); - if (isLeaf) { - // No subtree so set all children to null - tileInfo[childKey] = null; - } else if (level < 4) { - // We are still in the middle of the subtree, so add child - // only if their bits are set, otherwise set child to null. - if (!parent.hasChild(i)) { - tileInfo[childKey] = null; - } else { - if (index === numInstances) { - console.log("Incorrect number of instances"); - return; - } - - const instance = instances[index++]; - tileInfo[childKey] = instance; - populateTiles(childKey, instance, level + 1); - } - } - } - } - - let level = 0; - const root = instances[index++]; - if (quadKey === "") { - // Root tile has data at its root and one less level - ++level; - } else { - tileInfo[quadKey] = root; // This will only contain the child bitmask - } - - populateTiles(quadKey, root, level); - - return tileInfo; - } - - const numMeshesPerPacket = 5; - const numSubMeshesPerMesh = 4; - - // Each terrain packet will have 5 meshes - each containg 4 sub-meshes: - // 1 even level mesh and its 4 odd level children. - // Any remaining bytes after the 20 sub-meshes contains water surface meshes, - // which are ignored. - function processTerrain(buffer, totalSize, transferableObjects) { - const dv = new DataView(buffer); - - // Find the sub-meshes. - const advanceMesh = function (pos) { - for (let sub = 0; sub < numSubMeshesPerMesh; ++sub) { - const size = dv.getUint32(pos, true); - pos += sizeOfUint32; - pos += size; - if (pos > totalSize) { - throw new RuntimeError.RuntimeError("Malformed terrain packet found."); - } - } - return pos; - }; - - let offset = 0; - const terrainMeshes = []; - while (terrainMeshes.length < numMeshesPerPacket) { - const start = offset; - offset = advanceMesh(offset); - const mesh = buffer.slice(start, offset); - transferableObjects.push(mesh); - terrainMeshes.push(mesh); - } - - return terrainMeshes; - } - - const compressedMagic = 0x7468dead; - const compressedMagicSwap = 0xadde6874; - - function uncompressPacket(data) { - // The layout of this decoded data is - // Magic Uint32 - // Size Uint32 - // [GZipped chunk of Size bytes] - - // Pullout magic and verify we have the correct data - const dv = new DataView(data); - let offset = 0; - const magic = dv.getUint32(offset, true); - offset += sizeOfUint32; - if (magic !== compressedMagic && magic !== compressedMagicSwap) { - throw new RuntimeError.RuntimeError("Invalid magic"); - } - - // Get the size of the compressed buffer - the endianness depends on which magic was used - const size = dv.getUint32(offset, magic === compressedMagic); - offset += sizeOfUint32; - - const compressedPacket = new Uint8Array(data, offset); - const uncompressedPacket = inflate$3.inflate(compressedPacket); - - if (uncompressedPacket.length !== size) { - throw new RuntimeError.RuntimeError("Size of packet doesn't match header"); - } - - return uncompressedPacket; - } - var decodeGoogleEarthEnterprisePacket$1 = createTaskProcessorWorker(decodeGoogleEarthEnterprisePacket); - - return decodeGoogleEarthEnterprisePacket$1; - -})); -//# sourceMappingURL=decodeGoogleEarthEnterprisePacket.js.map diff --git a/debug/cesium/Workers/decodeGoogleEarthEnterprisePacket.js.map b/debug/cesium/Workers/decodeGoogleEarthEnterprisePacket.js.map deleted file mode 100644 index 6fe705d..0000000 --- a/debug/cesium/Workers/decodeGoogleEarthEnterprisePacket.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"decodeGoogleEarthEnterprisePacket.js","sources":["../../../Source/Core/decodeGoogleEarthEnterpriseData.js","../../../Source/Core/isBitSet.js","../../../Source/Core/GoogleEarthEnterpriseTileInformation.js","../../../node_modules/pako/lib/zlib/adler32.js","../../../node_modules/pako/lib/zlib/crc32.js","../../../node_modules/pako/lib/zlib/inffast.js","../../../node_modules/pako/lib/zlib/inftrees.js","../../../node_modules/pako/lib/zlib/constants.js","../../../node_modules/pako/lib/zlib/inflate.js","../../../node_modules/pako/lib/utils/common.js","../../../node_modules/pako/lib/utils/strings.js","../../../node_modules/pako/lib/zlib/messages.js","../../../node_modules/pako/lib/zlib/zstream.js","../../../node_modules/pako/lib/zlib/gzheader.js","../../../node_modules/pako/lib/inflate.js","../../../Source/WorkersES6/decodeGoogleEarthEnterprisePacket.js"],"sourcesContent":["import Check from \"./Check.js\";\r\nimport RuntimeError from \"./RuntimeError.js\";\r\n\r\nconst compressedMagic = 0x7468dead;\r\nconst compressedMagicSwap = 0xadde6874;\r\n\r\n/**\r\n * Decodes data that is received from the Google Earth Enterprise server.\r\n *\r\n * @param {ArrayBuffer} key The key used during decoding.\r\n * @param {ArrayBuffer} data The data to be decoded.\r\n *\r\n * @private\r\n */\r\nfunction decodeGoogleEarthEnterpriseData(key, data) {\r\n if (decodeGoogleEarthEnterpriseData.passThroughDataForTesting) {\r\n return data;\r\n }\r\n\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"key\", key);\r\n Check.typeOf.object(\"data\", data);\r\n //>>includeEnd('debug');\r\n\r\n const keyLength = key.byteLength;\r\n if (keyLength === 0 || keyLength % 4 !== 0) {\r\n throw new RuntimeError(\r\n \"The length of key must be greater than 0 and a multiple of 4.\"\r\n );\r\n }\r\n\r\n const dataView = new DataView(data);\r\n const magic = dataView.getUint32(0, true);\r\n if (magic === compressedMagic || magic === compressedMagicSwap) {\r\n // Occasionally packets don't come back encoded, so just return\r\n return data;\r\n }\r\n\r\n const keyView = new DataView(key);\r\n\r\n let dp = 0;\r\n const dpend = data.byteLength;\r\n const dpend64 = dpend - (dpend % 8);\r\n const kpend = keyLength;\r\n let kp;\r\n let off = 8;\r\n\r\n // This algorithm is intentionally asymmetric to make it more difficult to\r\n // guess. Security through obscurity. :-(\r\n\r\n // while we have a full uint64 (8 bytes) left to do\r\n // assumes buffer is 64bit aligned (or processor doesn't care)\r\n while (dp < dpend64) {\r\n // rotate the key each time through by using the offets 16,0,8,16,0,8,...\r\n off = (off + 8) % 24;\r\n kp = off;\r\n\r\n // run through one key length xor'ing one uint64 at a time\r\n // then drop out to rotate the key for the next bit\r\n while (dp < dpend64 && kp < kpend) {\r\n dataView.setUint32(\r\n dp,\r\n dataView.getUint32(dp, true) ^ keyView.getUint32(kp, true),\r\n true\r\n );\r\n dataView.setUint32(\r\n dp + 4,\r\n dataView.getUint32(dp + 4, true) ^ keyView.getUint32(kp + 4, true),\r\n true\r\n );\r\n dp += 8;\r\n kp += 24;\r\n }\r\n }\r\n\r\n // now the remaining 1 to 7 bytes\r\n if (dp < dpend) {\r\n if (kp >= kpend) {\r\n // rotate the key one last time (if necessary)\r\n off = (off + 8) % 24;\r\n kp = off;\r\n }\r\n\r\n while (dp < dpend) {\r\n dataView.setUint8(dp, dataView.getUint8(dp) ^ keyView.getUint8(kp));\r\n dp++;\r\n kp++;\r\n }\r\n }\r\n}\r\n\r\ndecodeGoogleEarthEnterpriseData.passThroughDataForTesting = false;\r\nexport default decodeGoogleEarthEnterpriseData;\r\n","/**\r\n * @private\r\n */\r\nfunction isBitSet(bits, mask) {\r\n return (bits & mask) !== 0;\r\n}\r\nexport default isBitSet;\r\n","import defined from \"./defined.js\";\r\nimport isBitSet from \"./isBitSet.js\";\r\n\r\n// Bitmask for checking tile properties\r\nconst childrenBitmasks = [0x01, 0x02, 0x04, 0x08];\r\nconst anyChildBitmask = 0x0f;\r\nconst cacheFlagBitmask = 0x10; // True if there is a child subtree\r\nconst imageBitmask = 0x40;\r\nconst terrainBitmask = 0x80;\r\n\r\n/**\r\n * Contains information about each tile from a Google Earth Enterprise server\r\n *\r\n * @param {Number} bits Bitmask that contains the type of data and available children for each tile.\r\n * @param {Number} cnodeVersion Version of the request for subtree metadata.\r\n * @param {Number} imageryVersion Version of the request for imagery tile.\r\n * @param {Number} terrainVersion Version of the request for terrain tile.\r\n * @param {Number} imageryProvider Id of imagery provider.\r\n * @param {Number} terrainProvider Id of terrain provider.\r\n *\r\n * @private\r\n */\r\nfunction GoogleEarthEnterpriseTileInformation(\r\n bits,\r\n cnodeVersion,\r\n imageryVersion,\r\n terrainVersion,\r\n imageryProvider,\r\n terrainProvider\r\n) {\r\n this._bits = bits;\r\n this.cnodeVersion = cnodeVersion;\r\n this.imageryVersion = imageryVersion;\r\n this.terrainVersion = terrainVersion;\r\n this.imageryProvider = imageryProvider;\r\n this.terrainProvider = terrainProvider;\r\n this.ancestorHasTerrain = false; // Set it later once we find its parent\r\n this.terrainState = undefined;\r\n}\r\n\r\n/**\r\n * Creates GoogleEarthEnterpriseTileInformation from an object\r\n *\r\n * @param {Object} info Object to be cloned\r\n * @param {GoogleEarthEnterpriseTileInformation} [result] The object onto which to store the result.\r\n * @returns {GoogleEarthEnterpriseTileInformation} The modified result parameter or a new GoogleEarthEnterpriseTileInformation instance if none was provided.\r\n */\r\nGoogleEarthEnterpriseTileInformation.clone = function (info, result) {\r\n if (!defined(result)) {\r\n result = new GoogleEarthEnterpriseTileInformation(\r\n info._bits,\r\n info.cnodeVersion,\r\n info.imageryVersion,\r\n info.terrainVersion,\r\n info.imageryProvider,\r\n info.terrainProvider\r\n );\r\n } else {\r\n result._bits = info._bits;\r\n result.cnodeVersion = info.cnodeVersion;\r\n result.imageryVersion = info.imageryVersion;\r\n result.terrainVersion = info.terrainVersion;\r\n result.imageryProvider = info.imageryProvider;\r\n result.terrainProvider = info.terrainProvider;\r\n }\r\n result.ancestorHasTerrain = info.ancestorHasTerrain;\r\n result.terrainState = info.terrainState;\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Sets the parent for the tile\r\n *\r\n * @param {GoogleEarthEnterpriseTileInformation} parent Parent tile\r\n */\r\nGoogleEarthEnterpriseTileInformation.prototype.setParent = function (parent) {\r\n this.ancestorHasTerrain = parent.ancestorHasTerrain || this.hasTerrain();\r\n};\r\n\r\n/**\r\n * Gets whether a subtree is available\r\n *\r\n * @returns {Boolean} true if subtree is available, false otherwise.\r\n */\r\nGoogleEarthEnterpriseTileInformation.prototype.hasSubtree = function () {\r\n return isBitSet(this._bits, cacheFlagBitmask);\r\n};\r\n\r\n/**\r\n * Gets whether imagery is available\r\n *\r\n * @returns {Boolean} true if imagery is available, false otherwise.\r\n */\r\nGoogleEarthEnterpriseTileInformation.prototype.hasImagery = function () {\r\n return isBitSet(this._bits, imageBitmask);\r\n};\r\n\r\n/**\r\n * Gets whether terrain is available\r\n *\r\n * @returns {Boolean} true if terrain is available, false otherwise.\r\n */\r\nGoogleEarthEnterpriseTileInformation.prototype.hasTerrain = function () {\r\n return isBitSet(this._bits, terrainBitmask);\r\n};\r\n\r\n/**\r\n * Gets whether any children are present\r\n *\r\n * @returns {Boolean} true if any children are available, false otherwise.\r\n */\r\nGoogleEarthEnterpriseTileInformation.prototype.hasChildren = function () {\r\n return isBitSet(this._bits, anyChildBitmask);\r\n};\r\n\r\n/**\r\n * Gets whether a specified child is available\r\n *\r\n * @param {Number} index Index of child tile\r\n *\r\n * @returns {Boolean} true if child is available, false otherwise\r\n */\r\nGoogleEarthEnterpriseTileInformation.prototype.hasChild = function (index) {\r\n return isBitSet(this._bits, childrenBitmasks[index]);\r\n};\r\n\r\n/**\r\n * Gets bitmask containing children\r\n *\r\n * @returns {Number} Children bitmask\r\n */\r\nGoogleEarthEnterpriseTileInformation.prototype.getChildBitmask = function () {\r\n return this._bits & anyChildBitmask;\r\n};\r\nexport default GoogleEarthEnterpriseTileInformation;\r\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = (adler, buf, len, pos) => {\n let s1 = (adler & 0xffff) |0,\n s2 = ((adler >>> 16) & 0xffff) |0,\n n = 0;\n\n while (len !== 0) {\n // Set limit ~ twice less than 5552, to keep\n // s2 in 31-bits, because we force signed ints.\n // in other case %= will fail.\n n = len > 2000 ? 2000 : len;\n len -= n;\n\n do {\n s1 = (s1 + buf[pos++]) |0;\n s2 = (s2 + s1) |0;\n } while (--n);\n\n s1 %= 65521;\n s2 %= 65521;\n }\n\n return (s1 | (s2 << 16)) |0;\n};\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nconst makeTable = () => {\n let c, table = [];\n\n for (var n = 0; n < 256; n++) {\n c = n;\n for (var k = 0; k < 8; k++) {\n c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n }\n table[n] = c;\n }\n\n return table;\n};\n\n// Create table on load. Just 255 signed longs. Not a problem.\nconst crcTable = new Uint32Array(makeTable());\n\n\nconst crc32 = (crc, buf, len, pos) => {\n const t = crcTable;\n const end = pos + len;\n\n crc ^= -1;\n\n for (let i = pos; i < end; i++) {\n crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n }\n\n return (crc ^ (-1)); // >>> 0;\n};\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\n\n/*\n Decode literal, length, and distance codes and write out the resulting\n literal and match bytes until either not enough input or output is\n available, an end-of-block is encountered, or a data error is encountered.\n When large enough input and output buffers are supplied to inflate(), for\n example, a 16K input buffer and a 64K output buffer, more than 95% of the\n inflate execution time is spent in this routine.\n\n Entry assumptions:\n\n state.mode === LEN\n strm.avail_in >= 6\n strm.avail_out >= 258\n start >= strm.avail_out\n state.bits < 8\n\n On return, state.mode is one of:\n\n LEN -- ran out of enough output space or enough available input\n TYPE -- reached end of block code, inflate() to interpret next block\n BAD -- error in block data\n\n Notes:\n\n - The maximum input bits used by a length/distance pair is 15 bits for the\n length code, 5 bits for the length extra, 15 bits for the distance code,\n and 13 bits for the distance extra. This totals 48 bits, or six bytes.\n Therefore if strm.avail_in >= 6, then there is enough input to avoid\n checking for available input while decoding.\n\n - The maximum bytes that a single length/distance pair can output is 258\n bytes, which is the maximum length that can be coded. inflate_fast()\n requires strm.avail_out >= 258 for each loop to avoid checking for\n output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n let _in; /* local strm.input */\n let last; /* have enough input while in < last */\n let _out; /* local strm.output */\n let beg; /* inflate()'s initial strm.output */\n let end; /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n let dmax; /* maximum distance from zlib header */\n//#endif\n let wsize; /* window size or zero if not using window */\n let whave; /* valid bytes in the window */\n let wnext; /* window write index */\n // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n let s_window; /* allocated sliding window, if wsize != 0 */\n let hold; /* local strm.hold */\n let bits; /* local strm.bits */\n let lcode; /* local strm.lencode */\n let dcode; /* local strm.distcode */\n let lmask; /* mask for first level of length codes */\n let dmask; /* mask for first level of distance codes */\n let here; /* retrieved table entry */\n let op; /* code bits, operation, extra bits, or */\n /* window position, window bytes to copy */\n let len; /* match length, unused bytes */\n let dist; /* match distance */\n let from; /* where to copy match from */\n let from_source;\n\n\n let input, output; // JS specific, because we have no pointers\n\n /* copy state to local variables */\n const state = strm.state;\n //here = state.here;\n _in = strm.next_in;\n input = strm.input;\n last = _in + (strm.avail_in - 5);\n _out = strm.next_out;\n output = strm.output;\n beg = _out - (start - strm.avail_out);\n end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n dmax = state.dmax;\n//#endif\n wsize = state.wsize;\n whave = state.whave;\n wnext = state.wnext;\n s_window = state.window;\n hold = state.hold;\n bits = state.bits;\n lcode = state.lencode;\n dcode = state.distcode;\n lmask = (1 << state.lenbits) - 1;\n dmask = (1 << state.distbits) - 1;\n\n\n /* decode literals and length/distances until end-of-block or not enough\n input data or output space */\n\n top:\n do {\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n\n here = lcode[hold & lmask];\n\n dolen:\n for (;;) { // Goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n if (op === 0) { /* literal */\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n output[_out++] = here & 0xffff/*here.val*/;\n }\n else if (op & 16) { /* length base */\n len = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (op) {\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n len += hold & ((1 << op) - 1);\n hold >>>= op;\n bits -= op;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", len));\n if (bits < 15) {\n hold += input[_in++] << bits;\n bits += 8;\n hold += input[_in++] << bits;\n bits += 8;\n }\n here = dcode[hold & dmask];\n\n dodist:\n for (;;) { // goto emulation\n op = here >>> 24/*here.bits*/;\n hold >>>= op;\n bits -= op;\n op = (here >>> 16) & 0xff/*here.op*/;\n\n if (op & 16) { /* distance base */\n dist = here & 0xffff/*here.val*/;\n op &= 15; /* number of extra bits */\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n if (bits < op) {\n hold += input[_in++] << bits;\n bits += 8;\n }\n }\n dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n if (dist > dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n//#endif\n hold >>>= op;\n bits -= op;\n //Tracevv((stderr, \"inflate: distance %u\\n\", dist));\n op = _out - beg; /* max distance in output */\n if (dist > op) { /* see if copy from window */\n op = dist - op; /* distance back in window */\n if (op > whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break top;\n }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// if (len <= op - whave) {\n// do {\n// output[_out++] = 0;\n// } while (--len);\n// continue top;\n// }\n// len -= op - whave;\n// do {\n// output[_out++] = 0;\n// } while (--op > whave);\n// if (op === 0) {\n// from = _out - dist;\n// do {\n// output[_out++] = output[from++];\n// } while (--len);\n// continue top;\n// }\n//#endif\n }\n from = 0; // window index\n from_source = s_window;\n if (wnext === 0) { /* very common case */\n from += wsize - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n else if (wnext < op) { /* wrap around window */\n from += wsize + wnext - op;\n op -= wnext;\n if (op < len) { /* some from end of window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = 0;\n if (wnext < len) { /* some from start of window */\n op = wnext;\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n }\n else { /* contiguous in window */\n from += wnext - op;\n if (op < len) { /* some from window */\n len -= op;\n do {\n output[_out++] = s_window[from++];\n } while (--op);\n from = _out - dist; /* rest from output */\n from_source = output;\n }\n }\n while (len > 2) {\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n output[_out++] = from_source[from++];\n len -= 3;\n }\n if (len) {\n output[_out++] = from_source[from++];\n if (len > 1) {\n output[_out++] = from_source[from++];\n }\n }\n }\n else {\n from = _out - dist; /* copy direct from output */\n do { /* minimum length is three */\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n output[_out++] = output[from++];\n len -= 3;\n } while (len > 2);\n if (len) {\n output[_out++] = output[from++];\n if (len > 1) {\n output[_out++] = output[from++];\n }\n }\n }\n }\n else if ((op & 64) === 0) { /* 2nd level distance code */\n here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dodist;\n }\n else {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n }\n else if ((op & 64) === 0) { /* 2nd level length code */\n here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n continue dolen;\n }\n else if (op & 32) { /* end-of-block */\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.mode = TYPE;\n break top;\n }\n else {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break top;\n }\n\n break; // need to emulate goto via \"continue\"\n }\n } while (_in < last && _out < end);\n\n /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n len = bits >> 3;\n _in -= len;\n bits -= len << 3;\n hold &= (1 << bits) - 1;\n\n /* update state and return */\n strm.next_in = _in;\n strm.next_out = _out;\n strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n state.hold = hold;\n state.bits = bits;\n return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst MAXBITS = 15;\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\nconst lbase = new Uint16Array([ /* Length codes 257..285 base */\n 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n]);\n\nconst lext = new Uint8Array([ /* Length codes 257..285 extra */\n 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n]);\n\nconst dbase = new Uint16Array([ /* Distance codes 0..29 base */\n 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n 8193, 12289, 16385, 24577, 0, 0\n]);\n\nconst dext = new Uint8Array([ /* Distance codes 0..29 extra */\n 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n 28, 28, 29, 29, 64, 64\n]);\n\nconst inflate_table = (type, lens, lens_index, codes, table, table_index, work, opts) =>\n{\n const bits = opts.bits;\n //here = opts.here; /* table entry for duplication */\n\n let len = 0; /* a code's length in bits */\n let sym = 0; /* index of code symbols */\n let min = 0, max = 0; /* minimum and maximum code lengths */\n let root = 0; /* number of index bits for root table */\n let curr = 0; /* number of index bits for current table */\n let drop = 0; /* code bits to drop for sub-table */\n let left = 0; /* number of prefix codes available */\n let used = 0; /* code entries in table used */\n let huff = 0; /* Huffman code */\n let incr; /* for incrementing code, index */\n let fill; /* index for replicating entries */\n let low; /* low bits for current root entry */\n let mask; /* mask for low root bits */\n let next; /* next available space in table */\n let base = null; /* base value table to use */\n// let shoextra; /* extra bits table to use */\n let match; /* use base and extra for symbol >= match */\n const count = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */\n const offs = new Uint16Array(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */\n let extra = null;\n\n let here_bits, here_op, here_val;\n\n /*\n Process a set of code lengths to create a canonical Huffman code. The\n code lengths are lens[0..codes-1]. Each length corresponds to the\n symbols 0..codes-1. The Huffman code is generated by first sorting the\n symbols by length from short to long, and retaining the symbol order\n for codes with equal lengths. Then the code starts with all zero bits\n for the first code of the shortest length, and the codes are integer\n increments for the same length, and zeros are appended as the length\n increases. For the deflate format, these bits are stored backwards\n from their more natural integer increment ordering, and so when the\n decoding tables are built in the large loop below, the integer codes\n are incremented backwards.\n\n This routine assumes, but does not check, that all of the entries in\n lens[] are in the range 0..MAXBITS. The caller must assure this.\n 1..MAXBITS is interpreted as that code length. zero means that that\n symbol does not occur in this code.\n\n The codes are sorted by computing a count of codes for each length,\n creating from that a table of starting indices for each length in the\n sorted table, and then entering the symbols in order in the sorted\n table. The sorted table is work[], with that space being provided by\n the caller.\n\n The length counts are used for other purposes as well, i.e. finding\n the minimum and maximum length codes, determining if there are any\n codes at all, checking for a valid set of lengths, and looking ahead\n at length counts to determine sub-table sizes when building the\n decoding tables.\n */\n\n /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n for (len = 0; len <= MAXBITS; len++) {\n count[len] = 0;\n }\n for (sym = 0; sym < codes; sym++) {\n count[lens[lens_index + sym]]++;\n }\n\n /* bound code lengths, force root to be within code lengths */\n root = bits;\n for (max = MAXBITS; max >= 1; max--) {\n if (count[max] !== 0) { break; }\n }\n if (root > max) {\n root = max;\n }\n if (max === 0) { /* no symbols to code at all */\n //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */\n //table.bits[opts.table_index] = 1; //here.bits = (var char)1;\n //table.val[opts.table_index++] = 0; //here.val = (var short)0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n //table.op[opts.table_index] = 64;\n //table.bits[opts.table_index] = 1;\n //table.val[opts.table_index++] = 0;\n table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n opts.bits = 1;\n return 0; /* no symbols, but wait for decoding to report error */\n }\n for (min = 1; min < max; min++) {\n if (count[min] !== 0) { break; }\n }\n if (root < min) {\n root = min;\n }\n\n /* check for an over-subscribed or incomplete set of lengths */\n left = 1;\n for (len = 1; len <= MAXBITS; len++) {\n left <<= 1;\n left -= count[len];\n if (left < 0) {\n return -1;\n } /* over-subscribed */\n }\n if (left > 0 && (type === CODES || max !== 1)) {\n return -1; /* incomplete set */\n }\n\n /* generate offsets into symbol table for each length for sorting */\n offs[1] = 0;\n for (len = 1; len < MAXBITS; len++) {\n offs[len + 1] = offs[len] + count[len];\n }\n\n /* sort symbols by length, by symbol order within each length */\n for (sym = 0; sym < codes; sym++) {\n if (lens[lens_index + sym] !== 0) {\n work[offs[lens[lens_index + sym]]++] = sym;\n }\n }\n\n /*\n Create and fill in decoding tables. In this loop, the table being\n filled is at next and has curr index bits. The code being used is huff\n with length len. That code is converted to an index by dropping drop\n bits off of the bottom. For codes where len is less than drop + curr,\n those top drop + curr - len bits are incremented through all values to\n fill the table with replicated entries.\n\n root is the number of index bits for the root table. When len exceeds\n root, sub-tables are created pointed to by the root entry with an index\n of the low root bits of huff. This is saved in low to check for when a\n new sub-table should be started. drop is zero when the root table is\n being filled, and drop is root when sub-tables are being filled.\n\n When a new sub-table is needed, it is necessary to look ahead in the\n code lengths to determine what size sub-table is needed. The length\n counts are used for this, and so count[] is decremented as codes are\n entered in the tables.\n\n used keeps track of how many table entries have been allocated from the\n provided *table space. It is checked for LENS and DIST tables against\n the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n the initial root table size constants. See the comments in inftrees.h\n for more information.\n\n sym increments through all symbols, and the loop terminates when\n all codes of length max, i.e. all codes, have been processed. This\n routine permits incomplete codes, so another loop after this one fills\n in the rest of the decoding tables with invalid code markers.\n */\n\n /* set up for code type */\n // poor man optimization - use if-else instead of switch,\n // to avoid deopts in old v8\n if (type === CODES) {\n base = extra = work; /* dummy value--not used */\n match = 20;\n\n } else if (type === LENS) {\n base = lbase;\n extra = lext;\n match = 257;\n\n } else { /* DISTS */\n base = dbase;\n extra = dext;\n match = 0;\n }\n\n /* initialize opts for loop */\n huff = 0; /* starting code */\n sym = 0; /* starting code symbol */\n len = min; /* starting code length */\n next = table_index; /* current table to fill in */\n curr = root; /* current table index bits */\n drop = 0; /* current bits to drop from code for index */\n low = -1; /* trigger new sub-table when len > root */\n used = 1 << root; /* use root table entries */\n mask = used - 1; /* mask for comparing low */\n\n /* check available table space */\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* process all codes and make table entries */\n for (;;) {\n /* create table entry */\n here_bits = len - drop;\n if (work[sym] + 1 < match) {\n here_op = 0;\n here_val = work[sym];\n }\n else if (work[sym] >= match) {\n here_op = extra[work[sym] - match];\n here_val = base[work[sym] - match];\n }\n else {\n here_op = 32 + 64; /* end of block */\n here_val = 0;\n }\n\n /* replicate for those indices with low len bits equal to huff */\n incr = 1 << (len - drop);\n fill = 1 << curr;\n min = fill; /* save offset to next table */\n do {\n fill -= incr;\n table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n } while (fill !== 0);\n\n /* backwards increment the len-bit code huff */\n incr = 1 << (len - 1);\n while (huff & incr) {\n incr >>= 1;\n }\n if (incr !== 0) {\n huff &= incr - 1;\n huff += incr;\n } else {\n huff = 0;\n }\n\n /* go to next symbol, update count, len */\n sym++;\n if (--count[len] === 0) {\n if (len === max) { break; }\n len = lens[lens_index + work[sym]];\n }\n\n /* create new sub-table if needed */\n if (len > root && (huff & mask) !== low) {\n /* if first time, transition to sub-tables */\n if (drop === 0) {\n drop = root;\n }\n\n /* increment past last table */\n next += min; /* here min is 1 << curr */\n\n /* determine length of next table */\n curr = len - drop;\n left = 1 << curr;\n while (curr + drop < max) {\n left -= count[curr + drop];\n if (left <= 0) { break; }\n curr++;\n left <<= 1;\n }\n\n /* check for enough space */\n used += 1 << curr;\n if ((type === LENS && used > ENOUGH_LENS) ||\n (type === DISTS && used > ENOUGH_DISTS)) {\n return 1;\n }\n\n /* point entry in root table to sub-table */\n low = huff & mask;\n /*table.op[low] = curr;\n table.bits[low] = root;\n table.val[low] = next - opts.table_index;*/\n table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n }\n }\n\n /* fill in remaining table entry if code is incomplete (guaranteed to have\n at most one remaining entry, since if the code is incomplete, the\n maximum code length that was allowed to get this far is one bit) */\n if (huff !== 0) {\n //table.op[next + huff] = 64; /* invalid code marker */\n //table.bits[next + huff] = len - drop;\n //table.val[next + huff] = 0;\n table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n }\n\n /* set return parameters */\n //opts.table_index += used;\n opts.bits = root;\n return 0;\n};\n\n\nmodule.exports = inflate_table;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n /* Allowed flush values; see deflate() and inflate() below for details */\n Z_NO_FLUSH: 0,\n Z_PARTIAL_FLUSH: 1,\n Z_SYNC_FLUSH: 2,\n Z_FULL_FLUSH: 3,\n Z_FINISH: 4,\n Z_BLOCK: 5,\n Z_TREES: 6,\n\n /* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n Z_OK: 0,\n Z_STREAM_END: 1,\n Z_NEED_DICT: 2,\n Z_ERRNO: -1,\n Z_STREAM_ERROR: -2,\n Z_DATA_ERROR: -3,\n Z_MEM_ERROR: -4,\n Z_BUF_ERROR: -5,\n //Z_VERSION_ERROR: -6,\n\n /* compression levels */\n Z_NO_COMPRESSION: 0,\n Z_BEST_SPEED: 1,\n Z_BEST_COMPRESSION: 9,\n Z_DEFAULT_COMPRESSION: -1,\n\n\n Z_FILTERED: 1,\n Z_HUFFMAN_ONLY: 2,\n Z_RLE: 3,\n Z_FIXED: 4,\n Z_DEFAULT_STRATEGY: 0,\n\n /* Possible values of the data_type field (though see inflate()) */\n Z_BINARY: 0,\n Z_TEXT: 1,\n //Z_ASCII: 1, // = Z_TEXT (deprecated)\n Z_UNKNOWN: 2,\n\n /* The deflate compression method */\n Z_DEFLATED: 8\n //Z_NULL: null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nconst adler32 = require('./adler32');\nconst crc32 = require('./crc32');\nconst inflate_fast = require('./inffast');\nconst inflate_table = require('./inftrees');\n\nconst CODES = 0;\nconst LENS = 1;\nconst DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_FINISH, Z_BLOCK, Z_TREES,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR, Z_BUF_ERROR,\n Z_DEFLATED\n} = require('./constants');\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nconst HEAD = 16180; /* i: waiting for magic header */\nconst FLAGS = 16181; /* i: waiting for method and flags (gzip) */\nconst TIME = 16182; /* i: waiting for modification time (gzip) */\nconst OS = 16183; /* i: waiting for extra flags and operating system (gzip) */\nconst EXLEN = 16184; /* i: waiting for extra length (gzip) */\nconst EXTRA = 16185; /* i: waiting for extra bytes (gzip) */\nconst NAME = 16186; /* i: waiting for end of file name (gzip) */\nconst COMMENT = 16187; /* i: waiting for end of comment (gzip) */\nconst HCRC = 16188; /* i: waiting for header crc (gzip) */\nconst DICTID = 16189; /* i: waiting for dictionary check value */\nconst DICT = 16190; /* waiting for inflateSetDictionary() call */\nconst TYPE = 16191; /* i: waiting for type bits, including last-flag bit */\nconst TYPEDO = 16192; /* i: same, but skip check to exit inflate on new block */\nconst STORED = 16193; /* i: waiting for stored size (length and complement) */\nconst COPY_ = 16194; /* i/o: same as COPY below, but only first time in */\nconst COPY = 16195; /* i/o: waiting for input or output to copy stored block */\nconst TABLE = 16196; /* i: waiting for dynamic block table lengths */\nconst LENLENS = 16197; /* i: waiting for code length code lengths */\nconst CODELENS = 16198; /* i: waiting for length/lit and distance code lengths */\nconst LEN_ = 16199; /* i: same as LEN below, but only first time in */\nconst LEN = 16200; /* i: waiting for length/lit/eob code */\nconst LENEXT = 16201; /* i: waiting for length extra bits */\nconst DIST = 16202; /* i: waiting for distance code */\nconst DISTEXT = 16203; /* i: waiting for distance extra bits */\nconst MATCH = 16204; /* o: waiting for output space to copy string */\nconst LIT = 16205; /* o: waiting for output space to write literal */\nconst CHECK = 16206; /* i: waiting for 32-bit check value */\nconst LENGTH = 16207; /* i: waiting for 32-bit length (gzip) */\nconst DONE = 16208; /* finished check, done -- remain here until reset */\nconst BAD = 16209; /* got a data error -- remain here until reset */\nconst MEM = 16210; /* got an inflate() memory error -- remain here until reset */\nconst SYNC = 16211; /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nconst ENOUGH_LENS = 852;\nconst ENOUGH_DISTS = 592;\n//const ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nconst MAX_WBITS = 15;\n/* 32K LZ77 window */\nconst DEF_WBITS = MAX_WBITS;\n\n\nconst zswap32 = (q) => {\n\n return (((q >>> 24) & 0xff) +\n ((q >>> 8) & 0xff00) +\n ((q & 0xff00) << 8) +\n ((q & 0xff) << 24));\n};\n\n\nfunction InflateState() {\n this.strm = null; /* pointer back to this zlib stream */\n this.mode = 0; /* current inflate mode */\n this.last = false; /* true if processing last block */\n this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip,\n bit 2 true to validate check value */\n this.havedict = false; /* true if dictionary provided */\n this.flags = 0; /* gzip header method and flags (0 if zlib), or\n -1 if raw or no header yet */\n this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */\n this.check = 0; /* protected copy of check value */\n this.total = 0; /* protected copy of output count */\n // TODO: may be {}\n this.head = null; /* where to save gzip header information */\n\n /* sliding window */\n this.wbits = 0; /* log base 2 of requested window size */\n this.wsize = 0; /* window size or zero if not using window */\n this.whave = 0; /* valid bytes in the window */\n this.wnext = 0; /* window write index */\n this.window = null; /* allocated sliding window, if needed */\n\n /* bit accumulator */\n this.hold = 0; /* input bit accumulator */\n this.bits = 0; /* number of bits in \"in\" */\n\n /* for string and stored block copying */\n this.length = 0; /* literal or length of data to copy */\n this.offset = 0; /* distance back to copy string from */\n\n /* for table and code decoding */\n this.extra = 0; /* extra bits needed */\n\n /* fixed and dynamic code tables */\n this.lencode = null; /* starting table for length/literal codes */\n this.distcode = null; /* starting table for distance codes */\n this.lenbits = 0; /* index bits for lencode */\n this.distbits = 0; /* index bits for distcode */\n\n /* dynamic table building */\n this.ncode = 0; /* number of code length code lengths */\n this.nlen = 0; /* number of length code lengths */\n this.ndist = 0; /* number of distance code lengths */\n this.have = 0; /* number of code lengths in lens[] */\n this.next = null; /* next available space in codes[] */\n\n this.lens = new Uint16Array(320); /* temporary storage for code lengths */\n this.work = new Uint16Array(288); /* work area for code table building */\n\n /*\n because we don't have pointers in js, we use lencode and distcode directly\n as buffers so we don't need codes\n */\n //this.codes = new Int32Array(ENOUGH); /* space for code tables */\n this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */\n this.distdyn = null; /* dynamic table for distance codes (JS specific) */\n this.sane = 0; /* if false, allow invalid distance too far */\n this.back = 0; /* bits back of last unprocessed length/lit */\n this.was = 0; /* initial length of match */\n}\n\n\nconst inflateStateCheck = (strm) => {\n\n if (!strm) {\n return 1;\n }\n const state = strm.state;\n if (!state || state.strm !== strm ||\n state.mode < HEAD || state.mode > SYNC) {\n return 1;\n }\n return 0;\n};\n\n\nconst inflateResetKeep = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n strm.total_in = strm.total_out = state.total = 0;\n strm.msg = ''; /*Z_NULL*/\n if (state.wrap) { /* to support ill-conceived Java test suite */\n strm.adler = state.wrap & 1;\n }\n state.mode = HEAD;\n state.last = 0;\n state.havedict = 0;\n state.flags = -1;\n state.dmax = 32768;\n state.head = null/*Z_NULL*/;\n state.hold = 0;\n state.bits = 0;\n //state.lencode = state.distcode = state.next = state.codes;\n state.lencode = state.lendyn = new Int32Array(ENOUGH_LENS);\n state.distcode = state.distdyn = new Int32Array(ENOUGH_DISTS);\n\n state.sane = 1;\n state.back = -1;\n //Tracev((stderr, \"inflate: reset\\n\"));\n return Z_OK;\n};\n\n\nconst inflateReset = (strm) => {\n\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n state.wsize = 0;\n state.whave = 0;\n state.wnext = 0;\n return inflateResetKeep(strm);\n\n};\n\n\nconst inflateReset2 = (strm, windowBits) => {\n let wrap;\n\n /* get the state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n\n /* extract wrap request from windowBits parameter */\n if (windowBits < 0) {\n wrap = 0;\n windowBits = -windowBits;\n }\n else {\n wrap = (windowBits >> 4) + 5;\n if (windowBits < 48) {\n windowBits &= 15;\n }\n }\n\n /* set number of window bits, free window if different */\n if (windowBits && (windowBits < 8 || windowBits > 15)) {\n return Z_STREAM_ERROR;\n }\n if (state.window !== null && state.wbits !== windowBits) {\n state.window = null;\n }\n\n /* update state and reset the rest of it */\n state.wrap = wrap;\n state.wbits = windowBits;\n return inflateReset(strm);\n};\n\n\nconst inflateInit2 = (strm, windowBits) => {\n\n if (!strm) { return Z_STREAM_ERROR; }\n //strm.msg = Z_NULL; /* in case we return an error */\n\n const state = new InflateState();\n\n //if (state === Z_NULL) return Z_MEM_ERROR;\n //Tracev((stderr, \"inflate: allocated\\n\"));\n strm.state = state;\n state.strm = strm;\n state.window = null/*Z_NULL*/;\n state.mode = HEAD; /* to pass state test in inflateReset2() */\n const ret = inflateReset2(strm, windowBits);\n if (ret !== Z_OK) {\n strm.state = null/*Z_NULL*/;\n }\n return ret;\n};\n\n\nconst inflateInit = (strm) => {\n\n return inflateInit2(strm, DEF_WBITS);\n};\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding. Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter. This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time. However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nlet virgin = true;\n\nlet lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\n\nconst fixedtables = (state) => {\n\n /* build fixed huffman tables if first call (may not be thread safe) */\n if (virgin) {\n lenfix = new Int32Array(512);\n distfix = new Int32Array(32);\n\n /* literal/length table */\n let sym = 0;\n while (sym < 144) { state.lens[sym++] = 8; }\n while (sym < 256) { state.lens[sym++] = 9; }\n while (sym < 280) { state.lens[sym++] = 7; }\n while (sym < 288) { state.lens[sym++] = 8; }\n\n inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 });\n\n /* distance table */\n sym = 0;\n while (sym < 32) { state.lens[sym++] = 5; }\n\n inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 });\n\n /* do this just once */\n virgin = false;\n }\n\n state.lencode = lenfix;\n state.lenbits = 9;\n state.distcode = distfix;\n state.distbits = 5;\n};\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning. If window does not exist yet, create it. This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nconst updatewindow = (strm, src, end, copy) => {\n\n let dist;\n const state = strm.state;\n\n /* if it hasn't been done already, allocate space for the window */\n if (state.window === null) {\n state.wsize = 1 << state.wbits;\n state.wnext = 0;\n state.whave = 0;\n\n state.window = new Uint8Array(state.wsize);\n }\n\n /* copy state->wsize or less output bytes into the circular window */\n if (copy >= state.wsize) {\n state.window.set(src.subarray(end - state.wsize, end), 0);\n state.wnext = 0;\n state.whave = state.wsize;\n }\n else {\n dist = state.wsize - state.wnext;\n if (dist > copy) {\n dist = copy;\n }\n //zmemcpy(state->window + state->wnext, end - copy, dist);\n state.window.set(src.subarray(end - copy, end - copy + dist), state.wnext);\n copy -= dist;\n if (copy) {\n //zmemcpy(state->window, end - copy, copy);\n state.window.set(src.subarray(end - copy, end), 0);\n state.wnext = copy;\n state.whave = state.wsize;\n }\n else {\n state.wnext += dist;\n if (state.wnext === state.wsize) { state.wnext = 0; }\n if (state.whave < state.wsize) { state.whave += dist; }\n }\n }\n return 0;\n};\n\n\nconst inflate = (strm, flush) => {\n\n let state;\n let input, output; // input/output buffers\n let next; /* next input INDEX */\n let put; /* next output INDEX */\n let have, left; /* available input and output */\n let hold; /* bit buffer */\n let bits; /* bits in bit buffer */\n let _in, _out; /* save starting available input and output */\n let copy; /* number of stored or match bytes to copy */\n let from; /* where to copy match bytes from */\n let from_source;\n let here = 0; /* current decoding table entry */\n let here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n //let last; /* parent table entry */\n let last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n let len; /* length to copy for repeats, bits to drop */\n let ret; /* return code */\n const hbuf = new Uint8Array(4); /* buffer for gzip header crc calculation */\n let opts;\n\n let n; // temporary variable for NEED_BITS\n\n const order = /* permutation of code lengths */\n new Uint8Array([ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]);\n\n\n if (inflateStateCheck(strm) || !strm.output ||\n (!strm.input && strm.avail_in !== 0)) {\n return Z_STREAM_ERROR;\n }\n\n state = strm.state;\n if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */\n\n\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n _in = have;\n _out = left;\n ret = Z_OK;\n\n inf_leave: // goto emulation\n for (;;) {\n switch (state.mode) {\n case HEAD:\n if (state.wrap === 0) {\n state.mode = TYPEDO;\n break;\n }\n //=== NEEDBITS(16);\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */\n if (state.wbits === 0) {\n state.wbits = 15;\n }\n state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = FLAGS;\n break;\n }\n if (state.head) {\n state.head.done = false;\n }\n if (!(state.wrap & 1) || /* check if zlib header allowed */\n (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n strm.msg = 'incorrect header check';\n state.mode = BAD;\n break;\n }\n if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n len = (hold & 0x0f)/*BITS(4)*/ + 8;\n if (state.wbits === 0) {\n state.wbits = len;\n }\n if (len > 15 || len > state.wbits) {\n strm.msg = 'invalid window size';\n state.mode = BAD;\n break;\n }\n\n // !!! pako patch. Force use `options.windowBits` if passed.\n // Required to always use max window size by default.\n state.dmax = 1 << state.wbits;\n //state.dmax = 1 << len;\n\n state.flags = 0; /* indicate zlib header */\n //Tracev((stderr, \"inflate: zlib header ok\\n\"));\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = hold & 0x200 ? DICTID : TYPE;\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n break;\n case FLAGS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.flags = hold;\n if ((state.flags & 0xff) !== Z_DEFLATED) {\n strm.msg = 'unknown compression method';\n state.mode = BAD;\n break;\n }\n if (state.flags & 0xe000) {\n strm.msg = 'unknown header flags set';\n state.mode = BAD;\n break;\n }\n if (state.head) {\n state.head.text = ((hold >> 8) & 1);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = TIME;\n /* falls through */\n case TIME:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.time = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC4(state.check, hold)\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n hbuf[2] = (hold >>> 16) & 0xff;\n hbuf[3] = (hold >>> 24) & 0xff;\n state.check = crc32(state.check, hbuf, 4, 0);\n //===\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = OS;\n /* falls through */\n case OS:\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if (state.head) {\n state.head.xflags = (hold & 0xff);\n state.head.os = (hold >> 8);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = EXLEN;\n /* falls through */\n case EXLEN:\n if (state.flags & 0x0400) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length = hold;\n if (state.head) {\n state.head.extra_len = hold;\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n //=== CRC2(state.check, hold);\n hbuf[0] = hold & 0xff;\n hbuf[1] = (hold >>> 8) & 0xff;\n state.check = crc32(state.check, hbuf, 2, 0);\n //===//\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n else if (state.head) {\n state.head.extra = null/*Z_NULL*/;\n }\n state.mode = EXTRA;\n /* falls through */\n case EXTRA:\n if (state.flags & 0x0400) {\n copy = state.length;\n if (copy > have) { copy = have; }\n if (copy) {\n if (state.head) {\n len = state.head.extra_len - state.length;\n if (!state.head.extra) {\n // Use untyped array for more convenient processing later\n state.head.extra = new Uint8Array(state.head.extra_len);\n }\n state.head.extra.set(\n input.subarray(\n next,\n // extra field is limited to 65536 bytes\n // - no need for additional size check\n next + copy\n ),\n /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n len\n );\n //zmemcpy(state.head.extra + len, next,\n // len + copy > state.head.extra_max ?\n // state.head.extra_max - len : copy);\n }\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n state.length -= copy;\n }\n if (state.length) { break inf_leave; }\n }\n state.length = 0;\n state.mode = NAME;\n /* falls through */\n case NAME:\n if (state.flags & 0x0800) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n // TODO: 2 or 1 bytes?\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.name_max*/)) {\n state.head.name += String.fromCharCode(len);\n }\n } while (len && copy < have);\n\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.name = null;\n }\n state.length = 0;\n state.mode = COMMENT;\n /* falls through */\n case COMMENT:\n if (state.flags & 0x1000) {\n if (have === 0) { break inf_leave; }\n copy = 0;\n do {\n len = input[next + copy++];\n /* use constant limit because in js we should not preallocate memory */\n if (state.head && len &&\n (state.length < 65536 /*state.head.comm_max*/)) {\n state.head.comment += String.fromCharCode(len);\n }\n } while (len && copy < have);\n if ((state.flags & 0x0200) && (state.wrap & 4)) {\n state.check = crc32(state.check, input, copy, next);\n }\n have -= copy;\n next += copy;\n if (len) { break inf_leave; }\n }\n else if (state.head) {\n state.head.comment = null;\n }\n state.mode = HCRC;\n /* falls through */\n case HCRC:\n if (state.flags & 0x0200) {\n //=== NEEDBITS(16); */\n while (bits < 16) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.check & 0xffff)) {\n strm.msg = 'header crc mismatch';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n }\n if (state.head) {\n state.head.hcrc = ((state.flags >> 9) & 1);\n state.head.done = true;\n }\n strm.adler = state.check = 0;\n state.mode = TYPE;\n break;\n case DICTID:\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n strm.adler = state.check = zswap32(hold);\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = DICT;\n /* falls through */\n case DICT:\n if (state.havedict === 0) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n return Z_NEED_DICT;\n }\n strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n state.mode = TYPE;\n /* falls through */\n case TYPE:\n if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case TYPEDO:\n if (state.last) {\n //--- BYTEBITS() ---//\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n state.mode = CHECK;\n break;\n }\n //=== NEEDBITS(3); */\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.last = (hold & 0x01)/*BITS(1)*/;\n //--- DROPBITS(1) ---//\n hold >>>= 1;\n bits -= 1;\n //---//\n\n switch ((hold & 0x03)/*BITS(2)*/) {\n case 0: /* stored block */\n //Tracev((stderr, \"inflate: stored block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = STORED;\n break;\n case 1: /* fixed block */\n fixedtables(state);\n //Tracev((stderr, \"inflate: fixed codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = LEN_; /* decode codes */\n if (flush === Z_TREES) {\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break inf_leave;\n }\n break;\n case 2: /* dynamic block */\n //Tracev((stderr, \"inflate: dynamic codes block%s\\n\",\n // state.last ? \" (last)\" : \"\"));\n state.mode = TABLE;\n break;\n case 3:\n strm.msg = 'invalid block type';\n state.mode = BAD;\n }\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n break;\n case STORED:\n //--- BYTEBITS() ---// /* go to byte boundary */\n hold >>>= bits & 7;\n bits -= bits & 7;\n //---//\n //=== NEEDBITS(32); */\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n strm.msg = 'invalid stored block lengths';\n state.mode = BAD;\n break;\n }\n state.length = hold & 0xffff;\n //Tracev((stderr, \"inflate: stored length %u\\n\",\n // state.length));\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n state.mode = COPY_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case COPY_:\n state.mode = COPY;\n /* falls through */\n case COPY:\n copy = state.length;\n if (copy) {\n if (copy > have) { copy = have; }\n if (copy > left) { copy = left; }\n if (copy === 0) { break inf_leave; }\n //--- zmemcpy(put, next, copy); ---\n output.set(input.subarray(next, next + copy), put);\n //---//\n have -= copy;\n next += copy;\n left -= copy;\n put += copy;\n state.length -= copy;\n break;\n }\n //Tracev((stderr, \"inflate: stored end\\n\"));\n state.mode = TYPE;\n break;\n case TABLE:\n //=== NEEDBITS(14); */\n while (bits < 14) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n //--- DROPBITS(5) ---//\n hold >>>= 5;\n bits -= 5;\n //---//\n state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n //--- DROPBITS(4) ---//\n hold >>>= 4;\n bits -= 4;\n //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n if (state.nlen > 286 || state.ndist > 30) {\n strm.msg = 'too many length or distance symbols';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracev((stderr, \"inflate: table sizes ok\\n\"));\n state.have = 0;\n state.mode = LENLENS;\n /* falls through */\n case LENLENS:\n while (state.have < state.ncode) {\n //=== NEEDBITS(3);\n while (bits < 3) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n while (state.have < 19) {\n state.lens[order[state.have++]] = 0;\n }\n // We have separate tables & no pointers. 2 commented lines below not needed.\n //state.next = state.codes;\n //state.lencode = state.next;\n // Switch to use dynamic table\n state.lencode = state.lendyn;\n state.lenbits = 7;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n state.lenbits = opts.bits;\n\n if (ret) {\n strm.msg = 'invalid code lengths set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, \"inflate: code lengths ok\\n\"));\n state.have = 0;\n state.mode = CODELENS;\n /* falls through */\n case CODELENS:\n while (state.have < state.nlen + state.ndist) {\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_val < 16) {\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.lens[state.have++] = here_val;\n }\n else {\n if (here_val === 16) {\n //=== NEEDBITS(here.bits + 2);\n n = here_bits + 2;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n if (state.have === 0) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n len = state.lens[state.have - 1];\n copy = 3 + (hold & 0x03);//BITS(2);\n //--- DROPBITS(2) ---//\n hold >>>= 2;\n bits -= 2;\n //---//\n }\n else if (here_val === 17) {\n //=== NEEDBITS(here.bits + 3);\n n = here_bits + 3;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 3 + (hold & 0x07);//BITS(3);\n //--- DROPBITS(3) ---//\n hold >>>= 3;\n bits -= 3;\n //---//\n }\n else {\n //=== NEEDBITS(here.bits + 7);\n n = here_bits + 7;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n len = 0;\n copy = 11 + (hold & 0x7f);//BITS(7);\n //--- DROPBITS(7) ---//\n hold >>>= 7;\n bits -= 7;\n //---//\n }\n if (state.have + copy > state.nlen + state.ndist) {\n strm.msg = 'invalid bit length repeat';\n state.mode = BAD;\n break;\n }\n while (copy--) {\n state.lens[state.have++] = len;\n }\n }\n }\n\n /* handle error breaks in while */\n if (state.mode === BAD) { break; }\n\n /* check for end-of-block code (better have one) */\n if (state.lens[256] === 0) {\n strm.msg = 'invalid code -- missing end-of-block';\n state.mode = BAD;\n break;\n }\n\n /* build code tables -- note: do not change the lenbits or distbits\n values here (9 and 6) without reading the comments in inftrees.h\n concerning the ENOUGH constants, which depend on those values */\n state.lenbits = 9;\n\n opts = { bits: state.lenbits };\n ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.lenbits = opts.bits;\n // state.lencode = state.next;\n\n if (ret) {\n strm.msg = 'invalid literal/lengths set';\n state.mode = BAD;\n break;\n }\n\n state.distbits = 6;\n //state.distcode.copy(state.codes);\n // Switch to use dynamic table\n state.distcode = state.distdyn;\n opts = { bits: state.distbits };\n ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n // We have separate tables & no pointers. 2 commented lines below not needed.\n // state.next_index = opts.table_index;\n state.distbits = opts.bits;\n // state.distcode = state.next;\n\n if (ret) {\n strm.msg = 'invalid distances set';\n state.mode = BAD;\n break;\n }\n //Tracev((stderr, 'inflate: codes ok\\n'));\n state.mode = LEN_;\n if (flush === Z_TREES) { break inf_leave; }\n /* falls through */\n case LEN_:\n state.mode = LEN;\n /* falls through */\n case LEN:\n if (have >= 6 && left >= 258) {\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n inflate_fast(strm, _out);\n //--- LOAD() ---\n put = strm.next_out;\n output = strm.output;\n left = strm.avail_out;\n next = strm.next_in;\n input = strm.input;\n have = strm.avail_in;\n hold = state.hold;\n bits = state.bits;\n //---\n\n if (state.mode === TYPE) {\n state.back = -1;\n }\n break;\n }\n state.back = 0;\n for (;;) {\n here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if (here_bits <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if (here_op && (here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.lencode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n state.length = here_val;\n if (here_op === 0) {\n //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n // \"inflate: literal '%c'\\n\" :\n // \"inflate: literal 0x%02x\\n\", here.val));\n state.mode = LIT;\n break;\n }\n if (here_op & 32) {\n //Tracevv((stderr, \"inflate: end of block\\n\"));\n state.back = -1;\n state.mode = TYPE;\n break;\n }\n if (here_op & 64) {\n strm.msg = 'invalid literal/length code';\n state.mode = BAD;\n break;\n }\n state.extra = here_op & 15;\n state.mode = LENEXT;\n /* falls through */\n case LENEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n //Tracevv((stderr, \"inflate: length %u\\n\", state.length));\n state.was = state.length;\n state.mode = DIST;\n /* falls through */\n case DIST:\n for (;;) {\n here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n if ((here_op & 0xf0) === 0) {\n last_bits = here_bits;\n last_op = here_op;\n last_val = here_val;\n for (;;) {\n here = state.distcode[last_val +\n ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n here_bits = here >>> 24;\n here_op = (here >>> 16) & 0xff;\n here_val = here & 0xffff;\n\n if ((last_bits + here_bits) <= bits) { break; }\n //--- PULLBYTE() ---//\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n //---//\n }\n //--- DROPBITS(last.bits) ---//\n hold >>>= last_bits;\n bits -= last_bits;\n //---//\n state.back += last_bits;\n }\n //--- DROPBITS(here.bits) ---//\n hold >>>= here_bits;\n bits -= here_bits;\n //---//\n state.back += here_bits;\n if (here_op & 64) {\n strm.msg = 'invalid distance code';\n state.mode = BAD;\n break;\n }\n state.offset = here_val;\n state.extra = (here_op) & 15;\n state.mode = DISTEXT;\n /* falls through */\n case DISTEXT:\n if (state.extra) {\n //=== NEEDBITS(state.extra);\n n = state.extra;\n while (bits < n) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n //--- DROPBITS(state.extra) ---//\n hold >>>= state.extra;\n bits -= state.extra;\n //---//\n state.back += state.extra;\n }\n//#ifdef INFLATE_STRICT\n if (state.offset > state.dmax) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n//#endif\n //Tracevv((stderr, \"inflate: distance %u\\n\", state.offset));\n state.mode = MATCH;\n /* falls through */\n case MATCH:\n if (left === 0) { break inf_leave; }\n copy = _out - left;\n if (state.offset > copy) { /* copy from window */\n copy = state.offset - copy;\n if (copy > state.whave) {\n if (state.sane) {\n strm.msg = 'invalid distance too far back';\n state.mode = BAD;\n break;\n }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n// Trace((stderr, \"inflate.c too far\\n\"));\n// copy -= state.whave;\n// if (copy > state.length) { copy = state.length; }\n// if (copy > left) { copy = left; }\n// left -= copy;\n// state.length -= copy;\n// do {\n// output[put++] = 0;\n// } while (--copy);\n// if (state.length === 0) { state.mode = LEN; }\n// break;\n//#endif\n }\n if (copy > state.wnext) {\n copy -= state.wnext;\n from = state.wsize - copy;\n }\n else {\n from = state.wnext - copy;\n }\n if (copy > state.length) { copy = state.length; }\n from_source = state.window;\n }\n else { /* copy from output */\n from_source = output;\n from = put - state.offset;\n copy = state.length;\n }\n if (copy > left) { copy = left; }\n left -= copy;\n state.length -= copy;\n do {\n output[put++] = from_source[from++];\n } while (--copy);\n if (state.length === 0) { state.mode = LEN; }\n break;\n case LIT:\n if (left === 0) { break inf_leave; }\n output[put++] = state.length;\n left--;\n state.mode = LEN;\n break;\n case CHECK:\n if (state.wrap) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n // Use '|' instead of '+' to make sure that result is signed\n hold |= input[next++] << bits;\n bits += 8;\n }\n //===//\n _out -= left;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check =\n /*UPDATE_CHECK(state.check, put - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n }\n _out = left;\n // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n if ((state.wrap & 4) && (state.flags ? hold : zswap32(hold)) !== state.check) {\n strm.msg = 'incorrect data check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: check matches trailer\\n\"));\n }\n state.mode = LENGTH;\n /* falls through */\n case LENGTH:\n if (state.wrap && state.flags) {\n //=== NEEDBITS(32);\n while (bits < 32) {\n if (have === 0) { break inf_leave; }\n have--;\n hold += input[next++] << bits;\n bits += 8;\n }\n //===//\n if ((state.wrap & 4) && hold !== (state.total & 0xffffffff)) {\n strm.msg = 'incorrect length check';\n state.mode = BAD;\n break;\n }\n //=== INITBITS();\n hold = 0;\n bits = 0;\n //===//\n //Tracev((stderr, \"inflate: length matches trailer\\n\"));\n }\n state.mode = DONE;\n /* falls through */\n case DONE:\n ret = Z_STREAM_END;\n break inf_leave;\n case BAD:\n ret = Z_DATA_ERROR;\n break inf_leave;\n case MEM:\n return Z_MEM_ERROR;\n case SYNC:\n /* falls through */\n default:\n return Z_STREAM_ERROR;\n }\n }\n\n // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n /*\n Return from inflate(), updating the total counts and the check value.\n If there was no progress during the inflate() call, return a buffer\n error. Call updatewindow() to create and/or update the window state.\n Note: a memory error from inflate() is non-recoverable.\n */\n\n //--- RESTORE() ---\n strm.next_out = put;\n strm.avail_out = left;\n strm.next_in = next;\n strm.avail_in = have;\n state.hold = hold;\n state.bits = bits;\n //---\n\n if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n (state.mode < CHECK || flush !== Z_FINISH))) {\n if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n }\n _in -= strm.avail_in;\n _out -= strm.avail_out;\n strm.total_in += _in;\n strm.total_out += _out;\n state.total += _out;\n if ((state.wrap & 4) && _out) {\n strm.adler = state.check = /*UPDATE_CHECK(state.check, strm.next_out - _out, _out);*/\n (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n }\n strm.data_type = state.bits + (state.last ? 64 : 0) +\n (state.mode === TYPE ? 128 : 0) +\n (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n ret = Z_BUF_ERROR;\n }\n return ret;\n};\n\n\nconst inflateEnd = (strm) => {\n\n if (inflateStateCheck(strm)) {\n return Z_STREAM_ERROR;\n }\n\n let state = strm.state;\n if (state.window) {\n state.window = null;\n }\n strm.state = null;\n return Z_OK;\n};\n\n\nconst inflateGetHeader = (strm, head) => {\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n const state = strm.state;\n if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n /* save header structure */\n state.head = head;\n head.done = false;\n return Z_OK;\n};\n\n\nconst inflateSetDictionary = (strm, dictionary) => {\n const dictLength = dictionary.length;\n\n let state;\n let dictid;\n let ret;\n\n /* check state */\n if (inflateStateCheck(strm)) { return Z_STREAM_ERROR; }\n state = strm.state;\n\n if (state.wrap !== 0 && state.mode !== DICT) {\n return Z_STREAM_ERROR;\n }\n\n /* check for correct dictionary identifier */\n if (state.mode === DICT) {\n dictid = 1; /* adler32(0, null, 0)*/\n /* dictid = adler32(dictid, dictionary, dictLength); */\n dictid = adler32(dictid, dictionary, dictLength, 0);\n if (dictid !== state.check) {\n return Z_DATA_ERROR;\n }\n }\n /* copy dictionary to window using updatewindow(), which will amend the\n existing dictionary if appropriate */\n ret = updatewindow(strm, dictionary, dictLength, dictLength);\n if (ret) {\n state.mode = MEM;\n return Z_MEM_ERROR;\n }\n state.havedict = 1;\n // Tracev((stderr, \"inflate: dictionary set\\n\"));\n return Z_OK;\n};\n\n\nmodule.exports.inflateReset = inflateReset;\nmodule.exports.inflateReset2 = inflateReset2;\nmodule.exports.inflateResetKeep = inflateResetKeep;\nmodule.exports.inflateInit = inflateInit;\nmodule.exports.inflateInit2 = inflateInit2;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateEnd = inflateEnd;\nmodule.exports.inflateGetHeader = inflateGetHeader;\nmodule.exports.inflateSetDictionary = inflateSetDictionary;\nmodule.exports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nmodule.exports.inflateCodesUsed = inflateCodesUsed;\nmodule.exports.inflateCopy = inflateCopy;\nmodule.exports.inflateGetDictionary = inflateGetDictionary;\nmodule.exports.inflateMark = inflateMark;\nmodule.exports.inflatePrime = inflatePrime;\nmodule.exports.inflateSync = inflateSync;\nmodule.exports.inflateSyncPoint = inflateSyncPoint;\nmodule.exports.inflateUndermine = inflateUndermine;\nmodule.exports.inflateValidate = inflateValidate;\n*/\n","'use strict';\n\n\nconst _has = (obj, key) => {\n return Object.prototype.hasOwnProperty.call(obj, key);\n};\n\nmodule.exports.assign = function (obj /*from1, from2, from3, ...*/) {\n const sources = Array.prototype.slice.call(arguments, 1);\n while (sources.length) {\n const source = sources.shift();\n if (!source) { continue; }\n\n if (typeof source !== 'object') {\n throw new TypeError(source + 'must be non-object');\n }\n\n for (const p in source) {\n if (_has(source, p)) {\n obj[p] = source[p];\n }\n }\n }\n\n return obj;\n};\n\n\n// Join array of chunks to single array.\nmodule.exports.flattenChunks = (chunks) => {\n // calculate data length\n let len = 0;\n\n for (let i = 0, l = chunks.length; i < l; i++) {\n len += chunks[i].length;\n }\n\n // join chunks\n const result = new Uint8Array(len);\n\n for (let i = 0, pos = 0, l = chunks.length; i < l; i++) {\n let chunk = chunks[i];\n result.set(chunk, pos);\n pos += chunk.length;\n }\n\n return result;\n};\n","// String encode/decode helpers\n'use strict';\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nlet STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nconst _utf8len = new Uint8Array(256);\nfor (let q = 0; q < 256; q++) {\n _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nmodule.exports.string2buf = (str) => {\n if (typeof TextEncoder === 'function' && TextEncoder.prototype.encode) {\n return new TextEncoder().encode(str);\n }\n\n let buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n // count binary size\n for (m_pos = 0; m_pos < str_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n }\n\n // allocate buffer\n buf = new Uint8Array(buf_len);\n\n // convert\n for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n c = str.charCodeAt(m_pos);\n if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n c2 = str.charCodeAt(m_pos + 1);\n if ((c2 & 0xfc00) === 0xdc00) {\n c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n m_pos++;\n }\n }\n if (c < 0x80) {\n /* one byte */\n buf[i++] = c;\n } else if (c < 0x800) {\n /* two bytes */\n buf[i++] = 0xC0 | (c >>> 6);\n buf[i++] = 0x80 | (c & 0x3f);\n } else if (c < 0x10000) {\n /* three bytes */\n buf[i++] = 0xE0 | (c >>> 12);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n } else {\n /* four bytes */\n buf[i++] = 0xf0 | (c >>> 18);\n buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n buf[i++] = 0x80 | (c & 0x3f);\n }\n }\n\n return buf;\n};\n\n// Helper\nconst buf2binstring = (buf, len) => {\n // On Chrome, the arguments in a function call that are allowed is `65534`.\n // If the length of the buffer is smaller than that, we can use this optimization,\n // otherwise we will take a slower path.\n if (len < 65534) {\n if (buf.subarray && STR_APPLY_UIA_OK) {\n return String.fromCharCode.apply(null, buf.length === len ? buf : buf.subarray(0, len));\n }\n }\n\n let result = '';\n for (let i = 0; i < len; i++) {\n result += String.fromCharCode(buf[i]);\n }\n return result;\n};\n\n\n// convert array to string\nmodule.exports.buf2string = (buf, max) => {\n const len = max || buf.length;\n\n if (typeof TextDecoder === 'function' && TextDecoder.prototype.decode) {\n return new TextDecoder().decode(buf.subarray(0, max));\n }\n\n let i, out;\n\n // Reserve max possible length (2 words per char)\n // NB: by unknown reasons, Array is significantly faster for\n // String.fromCharCode.apply than Uint16Array.\n const utf16buf = new Array(len * 2);\n\n for (out = 0, i = 0; i < len;) {\n let c = buf[i++];\n // quick process ascii\n if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n let c_len = _utf8len[c];\n // skip 5 & 6 byte codes\n if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n // apply mask on first byte\n c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n // join the rest\n while (c_len > 1 && i < len) {\n c = (c << 6) | (buf[i++] & 0x3f);\n c_len--;\n }\n\n // terminated by end of string?\n if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n if (c < 0x10000) {\n utf16buf[out++] = c;\n } else {\n c -= 0x10000;\n utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n }\n }\n\n return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max - length limit (mandatory);\nmodule.exports.utf8border = (buf, max) => {\n\n max = max || buf.length;\n if (max > buf.length) { max = buf.length; }\n\n // go back from last position, until start of sequence found\n let pos = max - 1;\n while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n // Very small and broken sequence,\n // return max, because we should return something anyway.\n if (pos < 0) { return max; }\n\n // If we came to start of buffer - that means buffer is too small,\n // return max too.\n if (pos === 0) { return max; }\n\n return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n 2: 'need dictionary', /* Z_NEED_DICT 2 */\n 1: 'stream end', /* Z_STREAM_END 1 */\n 0: '', /* Z_OK 0 */\n '-1': 'file error', /* Z_ERRNO (-1) */\n '-2': 'stream error', /* Z_STREAM_ERROR (-2) */\n '-3': 'data error', /* Z_DATA_ERROR (-3) */\n '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */\n '-5': 'buffer error', /* Z_BUF_ERROR (-5) */\n '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n /* next input byte */\n this.input = null; // JS specific, because we have no pointers\n this.next_in = 0;\n /* number of bytes available at input */\n this.avail_in = 0;\n /* total number of input bytes read so far */\n this.total_in = 0;\n /* next output byte should be put there */\n this.output = null; // JS specific, because we have no pointers\n this.next_out = 0;\n /* remaining free space at output */\n this.avail_out = 0;\n /* total number of bytes output so far */\n this.total_out = 0;\n /* last error message, NULL if no error */\n this.msg = ''/*Z_NULL*/;\n /* not visible by applications */\n this.state = null;\n /* best guess about the data type: binary or text */\n this.data_type = 2/*Z_UNKNOWN*/;\n /* adler32 value of the uncompressed data */\n this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n// claim that you wrote the original software. If you use this software\n// in a product, an acknowledgment in the product documentation would be\n// appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n// misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n /* true if compressed data believed to be text */\n this.text = 0;\n /* modification time */\n this.time = 0;\n /* extra flags (not used when writing a gzip file) */\n this.xflags = 0;\n /* operating system */\n this.os = 0;\n /* pointer to extra field or Z_NULL if none */\n this.extra = null;\n /* extra field length (valid if extra != Z_NULL) */\n this.extra_len = 0; // Actually, we don't need it in JS,\n // but leave for few code modifications\n\n //\n // Setup limits is not necessary because in js we should not preallocate memory\n // for inflate use constant limit in 65536 bytes\n //\n\n /* space at extra (only when reading header) */\n // this.extra_max = 0;\n /* pointer to zero-terminated file name or Z_NULL */\n this.name = '';\n /* space at name (only when reading header) */\n // this.name_max = 0;\n /* pointer to zero-terminated comment or Z_NULL */\n this.comment = '';\n /* space at comment (only when reading header) */\n // this.comm_max = 0;\n /* true if there was or will be a header crc */\n this.hcrc = 0;\n /* true when done reading gzip header (not used when writing a gzip file) */\n this.done = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n\nconst zlib_inflate = require('./zlib/inflate');\nconst utils = require('./utils/common');\nconst strings = require('./utils/strings');\nconst msg = require('./zlib/messages');\nconst ZStream = require('./zlib/zstream');\nconst GZheader = require('./zlib/gzheader');\n\nconst toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nconst {\n Z_NO_FLUSH, Z_FINISH,\n Z_OK, Z_STREAM_END, Z_NEED_DICT, Z_STREAM_ERROR, Z_DATA_ERROR, Z_MEM_ERROR\n} = require('./zlib/constants');\n\n/* ===========================================================================*/\n\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako')\n * const chunk1 = new Uint8Array([1,2,3,4,5,6,7,8,9])\n * const chunk2 = new Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * const inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true); // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n this.options = utils.assign({\n chunkSize: 1024 * 64,\n windowBits: 15,\n to: ''\n }, options || {});\n\n const opt = this.options;\n\n // Force window size for `raw` data, if not set directly,\n // because we have no header for autodetect.\n if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n opt.windowBits = -opt.windowBits;\n if (opt.windowBits === 0) { opt.windowBits = -15; }\n }\n\n // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n !(options && options.windowBits)) {\n opt.windowBits += 32;\n }\n\n // Gzip header has no info about windows size, we can do autodetect only\n // for deflate. So, if window size not set, force it to max when gzip possible\n if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n // bit 3 (16) -> gzipped data\n // bit 4 (32) -> autodetect gzip/deflate\n if ((opt.windowBits & 15) === 0) {\n opt.windowBits |= 15;\n }\n }\n\n this.err = 0; // error code, if happens (0 = Z_OK)\n this.msg = ''; // error message\n this.ended = false; // used to avoid multiple onEnd() calls\n this.chunks = []; // chunks of compressed data\n\n this.strm = new ZStream();\n this.strm.avail_out = 0;\n\n let status = zlib_inflate.inflateInit2(\n this.strm,\n opt.windowBits\n );\n\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n\n this.header = new GZheader();\n\n zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n // Setup dictionary\n if (opt.dictionary) {\n // Convert data if needed\n if (typeof opt.dictionary === 'string') {\n opt.dictionary = strings.string2buf(opt.dictionary);\n } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n opt.dictionary = new Uint8Array(opt.dictionary);\n }\n if (opt.raw) { //In raw mode we need to set the dictionary early\n status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n if (status !== Z_OK) {\n throw new Error(msg[status]);\n }\n }\n }\n}\n\n/**\n * Inflate#push(data[, flush_mode]) -> Boolean\n * - data (Uint8Array|ArrayBuffer): input data\n * - flush_mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE\n * flush modes. See constants. Skipped or `false` means Z_NO_FLUSH,\n * `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. If end of stream detected,\n * [[Inflate#onEnd]] will be called.\n *\n * `flush_mode` is not needed for normal operation, because end of stream\n * detected automatically. You may try to use it for advanced things, but\n * this functionality was not tested.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true); // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, flush_mode) {\n const strm = this.strm;\n const chunkSize = this.options.chunkSize;\n const dictionary = this.options.dictionary;\n let status, _flush_mode, last_avail_out;\n\n if (this.ended) return false;\n\n if (flush_mode === ~~flush_mode) _flush_mode = flush_mode;\n else _flush_mode = flush_mode === true ? Z_FINISH : Z_NO_FLUSH;\n\n // Convert data if needed\n if (toString.call(data) === '[object ArrayBuffer]') {\n strm.input = new Uint8Array(data);\n } else {\n strm.input = data;\n }\n\n strm.next_in = 0;\n strm.avail_in = strm.input.length;\n\n for (;;) {\n if (strm.avail_out === 0) {\n strm.output = new Uint8Array(chunkSize);\n strm.next_out = 0;\n strm.avail_out = chunkSize;\n }\n\n status = zlib_inflate.inflate(strm, _flush_mode);\n\n if (status === Z_NEED_DICT && dictionary) {\n status = zlib_inflate.inflateSetDictionary(strm, dictionary);\n\n if (status === Z_OK) {\n status = zlib_inflate.inflate(strm, _flush_mode);\n } else if (status === Z_DATA_ERROR) {\n // Replace code with more verbose\n status = Z_NEED_DICT;\n }\n }\n\n // Skip snyc markers if more data follows and not raw mode\n while (strm.avail_in > 0 &&\n status === Z_STREAM_END &&\n strm.state.wrap > 0 &&\n data[strm.next_in] !== 0)\n {\n zlib_inflate.inflateReset(strm);\n status = zlib_inflate.inflate(strm, _flush_mode);\n }\n\n switch (status) {\n case Z_STREAM_ERROR:\n case Z_DATA_ERROR:\n case Z_NEED_DICT:\n case Z_MEM_ERROR:\n this.onEnd(status);\n this.ended = true;\n return false;\n }\n\n // Remember real `avail_out` value, because we may patch out buffer content\n // to align utf8 strings boundaries.\n last_avail_out = strm.avail_out;\n\n if (strm.next_out) {\n if (strm.avail_out === 0 || status === Z_STREAM_END) {\n\n if (this.options.to === 'string') {\n\n let next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n let tail = strm.next_out - next_out_utf8;\n let utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n // move tail & realign counters\n strm.next_out = tail;\n strm.avail_out = chunkSize - tail;\n if (tail) strm.output.set(strm.output.subarray(next_out_utf8, next_out_utf8 + tail), 0);\n\n this.onData(utf8str);\n\n } else {\n this.onData(strm.output.length === strm.next_out ? strm.output : strm.output.subarray(0, strm.next_out));\n }\n }\n }\n\n // Must repeat iteration if out buffer is full\n if (status === Z_OK && last_avail_out === 0) continue;\n\n // Finalize if end of stream reached.\n if (status === Z_STREAM_END) {\n status = zlib_inflate.inflateEnd(this.strm);\n this.onEnd(status);\n this.ended = true;\n return true;\n }\n\n if (strm.avail_in === 0) break;\n }\n\n return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|String): output data. When string output requested,\n * each chunk will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n * other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH). By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n // On success - join\n if (status === Z_OK) {\n if (this.options.to === 'string') {\n this.result = this.chunks.join('');\n } else {\n this.result = utils.flattenChunks(this.chunks);\n }\n }\n this.chunks = [];\n this.err = status;\n this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n * negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n * from utf8 to utf16 (javascript) string. When string output requested,\n * chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * const pako = require('pako');\n * const input = pako.deflate(new Uint8Array([1,2,3,4,5,6,7,8,9]));\n * let output;\n *\n * try {\n * output = pako.inflate(input);\n * } catch (err) {\n * console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n const inflator = new Inflate(options);\n\n inflator.push(input);\n\n // That will never happens, if you don't cheat with options :)\n if (inflator.err) throw inflator.msg || msg[inflator.err];\n\n return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n options = options || {};\n options.raw = true;\n return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|String\n * - data (Uint8Array|ArrayBuffer): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nmodule.exports.Inflate = Inflate;\nmodule.exports.inflate = inflate;\nmodule.exports.inflateRaw = inflateRaw;\nmodule.exports.ungzip = inflate;\nmodule.exports.constants = require('./zlib/constants');\n","import decodeGoogleEarthEnterpriseData from \"../Core/decodeGoogleEarthEnterpriseData.js\";\r\nimport GoogleEarthEnterpriseTileInformation from \"../Core/GoogleEarthEnterpriseTileInformation.js\";\r\nimport RuntimeError from \"../Core/RuntimeError.js\";\r\nimport pako from \"pako/lib/inflate.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\n// Datatype sizes\r\nconst sizeOfUint16 = Uint16Array.BYTES_PER_ELEMENT;\r\nconst sizeOfInt32 = Int32Array.BYTES_PER_ELEMENT;\r\nconst sizeOfUint32 = Uint32Array.BYTES_PER_ELEMENT;\r\n\r\nconst Types = {\r\n METADATA: 0,\r\n TERRAIN: 1,\r\n DBROOT: 2,\r\n};\r\n\r\nTypes.fromString = function (s) {\r\n if (s === \"Metadata\") {\r\n return Types.METADATA;\r\n } else if (s === \"Terrain\") {\r\n return Types.TERRAIN;\r\n } else if (s === \"DbRoot\") {\r\n return Types.DBROOT;\r\n }\r\n};\r\n\r\nfunction decodeGoogleEarthEnterprisePacket(parameters, transferableObjects) {\r\n const type = Types.fromString(parameters.type);\r\n let buffer = parameters.buffer;\r\n decodeGoogleEarthEnterpriseData(parameters.key, buffer);\r\n\r\n const uncompressedTerrain = uncompressPacket(buffer);\r\n buffer = uncompressedTerrain.buffer;\r\n const length = uncompressedTerrain.length;\r\n\r\n switch (type) {\r\n case Types.METADATA:\r\n return processMetadata(buffer, length, parameters.quadKey);\r\n case Types.TERRAIN:\r\n return processTerrain(buffer, length, transferableObjects);\r\n case Types.DBROOT:\r\n transferableObjects.push(buffer);\r\n return {\r\n buffer: buffer,\r\n };\r\n }\r\n}\r\n\r\nconst qtMagic = 32301;\r\n\r\nfunction processMetadata(buffer, totalSize, quadKey) {\r\n const dv = new DataView(buffer);\r\n let offset = 0;\r\n const magic = dv.getUint32(offset, true);\r\n offset += sizeOfUint32;\r\n if (magic !== qtMagic) {\r\n throw new RuntimeError(\"Invalid magic\");\r\n }\r\n\r\n const dataTypeId = dv.getUint32(offset, true);\r\n offset += sizeOfUint32;\r\n if (dataTypeId !== 1) {\r\n throw new RuntimeError(\"Invalid data type. Must be 1 for QuadTreePacket\");\r\n }\r\n\r\n // Tile format version\r\n const quadVersion = dv.getUint32(offset, true);\r\n offset += sizeOfUint32;\r\n if (quadVersion !== 2) {\r\n throw new RuntimeError(\r\n \"Invalid QuadTreePacket version. Only version 2 is supported.\"\r\n );\r\n }\r\n\r\n const numInstances = dv.getInt32(offset, true);\r\n offset += sizeOfInt32;\r\n\r\n const dataInstanceSize = dv.getInt32(offset, true);\r\n offset += sizeOfInt32;\r\n if (dataInstanceSize !== 32) {\r\n throw new RuntimeError(\"Invalid instance size.\");\r\n }\r\n\r\n const dataBufferOffset = dv.getInt32(offset, true);\r\n offset += sizeOfInt32;\r\n\r\n const dataBufferSize = dv.getInt32(offset, true);\r\n offset += sizeOfInt32;\r\n\r\n const metaBufferSize = dv.getInt32(offset, true);\r\n offset += sizeOfInt32;\r\n\r\n // Offset from beginning of packet (instances + current offset)\r\n if (dataBufferOffset !== numInstances * dataInstanceSize + offset) {\r\n throw new RuntimeError(\"Invalid dataBufferOffset\");\r\n }\r\n\r\n // Verify the packets is all there header + instances + dataBuffer + metaBuffer\r\n if (dataBufferOffset + dataBufferSize + metaBufferSize !== totalSize) {\r\n throw new RuntimeError(\"Invalid packet offsets\");\r\n }\r\n\r\n // Read all the instances\r\n const instances = [];\r\n for (let i = 0; i < numInstances; ++i) {\r\n const bitfield = dv.getUint8(offset);\r\n ++offset;\r\n\r\n ++offset; // 2 byte align\r\n\r\n const cnodeVersion = dv.getUint16(offset, true);\r\n offset += sizeOfUint16;\r\n\r\n const imageVersion = dv.getUint16(offset, true);\r\n offset += sizeOfUint16;\r\n\r\n const terrainVersion = dv.getUint16(offset, true);\r\n offset += sizeOfUint16;\r\n\r\n // Number of channels stored in the dataBuffer\r\n offset += sizeOfUint16;\r\n\r\n offset += sizeOfUint16; // 4 byte align\r\n\r\n // Channel type offset into dataBuffer\r\n offset += sizeOfInt32;\r\n\r\n // Channel version offset into dataBuffer\r\n offset += sizeOfInt32;\r\n\r\n offset += 8; // Ignore image neighbors for now\r\n\r\n // Data providers\r\n const imageProvider = dv.getUint8(offset++);\r\n const terrainProvider = dv.getUint8(offset++);\r\n offset += sizeOfUint16; // 4 byte align\r\n\r\n instances.push(\r\n new GoogleEarthEnterpriseTileInformation(\r\n bitfield,\r\n cnodeVersion,\r\n imageVersion,\r\n terrainVersion,\r\n imageProvider,\r\n terrainProvider\r\n )\r\n );\r\n }\r\n\r\n const tileInfo = [];\r\n let index = 0;\r\n\r\n function populateTiles(parentKey, parent, level) {\r\n let isLeaf = false;\r\n if (level === 4) {\r\n if (parent.hasSubtree()) {\r\n return; // We have a subtree, so just return\r\n }\r\n\r\n isLeaf = true; // No subtree, so set all children to null\r\n }\r\n for (let i = 0; i < 4; ++i) {\r\n const childKey = parentKey + i.toString();\r\n if (isLeaf) {\r\n // No subtree so set all children to null\r\n tileInfo[childKey] = null;\r\n } else if (level < 4) {\r\n // We are still in the middle of the subtree, so add child\r\n // only if their bits are set, otherwise set child to null.\r\n if (!parent.hasChild(i)) {\r\n tileInfo[childKey] = null;\r\n } else {\r\n if (index === numInstances) {\r\n console.log(\"Incorrect number of instances\");\r\n return;\r\n }\r\n\r\n const instance = instances[index++];\r\n tileInfo[childKey] = instance;\r\n populateTiles(childKey, instance, level + 1);\r\n }\r\n }\r\n }\r\n }\r\n\r\n let level = 0;\r\n const root = instances[index++];\r\n if (quadKey === \"\") {\r\n // Root tile has data at its root and one less level\r\n ++level;\r\n } else {\r\n tileInfo[quadKey] = root; // This will only contain the child bitmask\r\n }\r\n\r\n populateTiles(quadKey, root, level);\r\n\r\n return tileInfo;\r\n}\r\n\r\nconst numMeshesPerPacket = 5;\r\nconst numSubMeshesPerMesh = 4;\r\n\r\n// Each terrain packet will have 5 meshes - each containg 4 sub-meshes:\r\n// 1 even level mesh and its 4 odd level children.\r\n// Any remaining bytes after the 20 sub-meshes contains water surface meshes,\r\n// which are ignored.\r\nfunction processTerrain(buffer, totalSize, transferableObjects) {\r\n const dv = new DataView(buffer);\r\n\r\n // Find the sub-meshes.\r\n const advanceMesh = function (pos) {\r\n for (let sub = 0; sub < numSubMeshesPerMesh; ++sub) {\r\n const size = dv.getUint32(pos, true);\r\n pos += sizeOfUint32;\r\n pos += size;\r\n if (pos > totalSize) {\r\n throw new RuntimeError(\"Malformed terrain packet found.\");\r\n }\r\n }\r\n return pos;\r\n };\r\n\r\n let offset = 0;\r\n const terrainMeshes = [];\r\n while (terrainMeshes.length < numMeshesPerPacket) {\r\n const start = offset;\r\n offset = advanceMesh(offset);\r\n const mesh = buffer.slice(start, offset);\r\n transferableObjects.push(mesh);\r\n terrainMeshes.push(mesh);\r\n }\r\n\r\n return terrainMeshes;\r\n}\r\n\r\nconst compressedMagic = 0x7468dead;\r\nconst compressedMagicSwap = 0xadde6874;\r\n\r\nfunction uncompressPacket(data) {\r\n // The layout of this decoded data is\r\n // Magic Uint32\r\n // Size Uint32\r\n // [GZipped chunk of Size bytes]\r\n\r\n // Pullout magic and verify we have the correct data\r\n const dv = new DataView(data);\r\n let offset = 0;\r\n const magic = dv.getUint32(offset, true);\r\n offset += sizeOfUint32;\r\n if (magic !== compressedMagic && magic !== compressedMagicSwap) {\r\n throw new RuntimeError(\"Invalid magic\");\r\n }\r\n\r\n // Get the size of the compressed buffer - the endianness depends on which magic was used\r\n const size = dv.getUint32(offset, magic === compressedMagic);\r\n offset += sizeOfUint32;\r\n\r\n const compressedPacket = new Uint8Array(data, offset);\r\n const uncompressedPacket = pako.inflate(compressedPacket);\r\n\r\n if (uncompressedPacket.length !== size) {\r\n throw new RuntimeError(\"Size of packet doesn't match header\");\r\n }\r\n\r\n return uncompressedPacket;\r\n}\r\nexport default createTaskProcessorWorker(decodeGoogleEarthEnterprisePacket);\r\n"],"names":["compressedMagic","compressedMagicSwap","Check","RuntimeError","defined","adler32","crc32","BAD","TYPE","ENOUGH_LENS","ENOUGH_DISTS","CODES","LENS","DISTS","inflate_table","require$$0","require$$1","require$$2","require$$3","Z_FINISH","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_STREAM_ERROR","Z_DATA_ERROR","Z_MEM_ERROR","require$$4","inflate","inflate_1","strings","ZStream","GZheader","require$$5","require$$6","pako"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/decodeI3S.js b/debug/cesium/Workers/decodeI3S.js deleted file mode 100644 index 33681e7..0000000 --- a/debug/cesium/Workers/decodeI3S.js +++ /dev/null @@ -1,1066 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./createTaskProcessorWorker', './defaultValue-0ab18f7d', './WebMercatorProjection-306f7acc', './Matrix3-f22b0303', './Math-9be8b918', './Check-d10e5f2e'], (function (createTaskProcessorWorker, defaultValue, WebMercatorProjection, Matrix3, Math$1, Check) { 'use strict'; - - /* global require */ - - let draco; - - function bilinearInterpolate(tx, ty, h00, h10, h01, h11) { - const a = h00 * (1 - tx) + h10 * tx; - const b = h01 * (1 - tx) + h11 * tx; - return a * (1 - ty) + b * ty; - } - - function sampleMap(u, v, width, data) { - const address = u + v * width; - return data[address]; - } - - function sampleGeoid(sampleX, sampleY, geoidData) { - const extent = geoidData.nativeExtent; - let x = - ((sampleX - extent.west) / (extent.east - extent.west)) * - (geoidData.width - 1); - let y = - ((sampleY - extent.south) / (extent.north - extent.south)) * - (geoidData.height - 1); - const xi = Math.floor(x); - let yi = Math.floor(y); - - x -= xi; - y -= yi; - - const xNext = xi < geoidData.width ? xi + 1 : xi; - let yNext = yi < geoidData.height ? yi + 1 : yi; - - yi = geoidData.height - 1 - yi; - yNext = geoidData.height - 1 - yNext; - - const h00 = sampleMap(xi, yi, geoidData.width, geoidData.buffer); - const h10 = sampleMap(xNext, yi, geoidData.width, geoidData.buffer); - const h01 = sampleMap(xi, yNext, geoidData.width, geoidData.buffer); - const h11 = sampleMap(xNext, yNext, geoidData.width, geoidData.buffer); - - let finalHeight = bilinearInterpolate(x, y, h00, h10, h01, h11); - finalHeight = finalHeight * geoidData.scale + geoidData.offset; - return finalHeight; - } - - function sampleGeoidFromList(lon, lat, geoidDataList) { - for (let i = 0; i < geoidDataList.length; i++) { - const localExtent = geoidDataList[i].nativeExtent; - - let localPt = new Matrix3.Cartesian3(); - if (geoidDataList[i].projectionType === "WebMercator") { - const radii = geoidDataList[i].projection._ellipsoid._radii; - const webMercatorProj = new WebMercatorProjection.WebMercatorProjection( - new Matrix3.Ellipsoid(radii.x, radii.y, radii.z) - ); - localPt = webMercatorProj.project(new Matrix3.Cartographic(lon, lat, 0)); - } else { - localPt.x = lon; - localPt.y = lat; - } - - if ( - localPt.x > localExtent.west && - localPt.x < localExtent.east && - localPt.y > localExtent.south && - localPt.y < localExtent.north - ) { - return sampleGeoid(localPt.x, localPt.y, geoidDataList[i]); - } - } - - return 0; - } - - function orthometricToEllipsoidal( - vertexCount, - position, - scale_x, - scale_y, - center, - geoidDataList, - fast - ) { - if (fast) { - // Geometry is already relative to the tile origin which has already been shifted to account for geoid height - // Nothing to do here - return; - } - - // For more precision, sample the geoid height at each vertex and shift by the difference between that value and the height at the center of the tile - const centerHeight = sampleGeoidFromList( - center.longitude, - center.latitude, - geoidDataList - ); - - for (let i = 0; i < vertexCount; ++i) { - const height = sampleGeoidFromList( - center.longitude + Math$1.CesiumMath.toRadians(scale_x * position[i * 3]), - center.latitude + Math$1.CesiumMath.toRadians(scale_y * position[i * 3 + 1]), - geoidDataList - ); - position[i * 3 + 2] += height - centerHeight; - } - } - - function transformToLocal( - vertexCount, - positions, - normals, - cartographicCenter, - cartesianCenter, - parentRotation, - ellipsoidRadiiSquare, - scale_x, - scale_y - ) { - if (vertexCount === 0 || !defaultValue.defined(positions) || positions.length === 0) { - return; - } - - const ellipsoid = new Matrix3.Ellipsoid( - Math.sqrt(ellipsoidRadiiSquare.x), - Math.sqrt(ellipsoidRadiiSquare.y), - Math.sqrt(ellipsoidRadiiSquare.z) - ); - for (let i = 0; i < vertexCount; ++i) { - const indexOffset = i * 3; - const indexOffset1 = indexOffset + 1; - const indexOffset2 = indexOffset + 2; - - const cartographic = new Matrix3.Cartographic(); - cartographic.longitude = - cartographicCenter.longitude + - Math$1.CesiumMath.toRadians(scale_x * positions[indexOffset]); - - cartographic.latitude = - cartographicCenter.latitude + - Math$1.CesiumMath.toRadians(scale_y * positions[indexOffset1]); - cartographic.height = cartographicCenter.height + positions[indexOffset2]; - - const position = {}; - ellipsoid.cartographicToCartesian(cartographic, position); - - position.x -= cartesianCenter.x; - position.y -= cartesianCenter.y; - position.z -= cartesianCenter.z; - - const rotatedPosition = {}; - Matrix3.Matrix3.multiplyByVector(parentRotation, position, rotatedPosition); - - positions[indexOffset] = rotatedPosition.x; - positions[indexOffset1] = rotatedPosition.y; - positions[indexOffset2] = rotatedPosition.z; - - if (defaultValue.defined(normals)) { - const normal = new Matrix3.Cartesian3( - normals[indexOffset], - normals[indexOffset1], - normals[indexOffset2] - ); - - const rotatedNormal = {}; - Matrix3.Matrix3.multiplyByVector(parentRotation, normal, rotatedNormal); - - // TODO: check if normals are Z-UP or Y-UP and flip y and z - normals[indexOffset] = rotatedNormal.x; - normals[indexOffset1] = rotatedNormal.y; - normals[indexOffset2] = rotatedNormal.z; - } - } - } - - function cropUVs(vertexCount, uv0s, uvRegions) { - for (let vertexIndex = 0; vertexIndex < vertexCount; ++vertexIndex) { - const minU = uvRegions[vertexIndex * 4] / 65535.0; - const minV = uvRegions[vertexIndex * 4 + 1] / 65535.0; - const scaleU = - (uvRegions[vertexIndex * 4 + 2] - uvRegions[vertexIndex * 4]) / 65535.0; - const scaleV = - (uvRegions[vertexIndex * 4 + 3] - uvRegions[vertexIndex * 4 + 1]) / - 65535.0; - - uv0s[vertexIndex * 2] *= scaleU; - uv0s[vertexIndex * 2] += minU; - - uv0s[vertexIndex * 2 + 1] *= scaleV; - uv0s[vertexIndex * 2 + 1] += minV; - } - } - - function generateGltfBuffer( - vertexCount, - indices, - positions, - normals, - uv0s, - colors - ) { - if (vertexCount === 0 || !defaultValue.defined(positions) || positions.length === 0) { - return { - buffers: [], - bufferViews: [], - accessors: [], - meshes: [], - nodes: [], - nodesInScene: [], - }; - } - - const buffers = []; - const bufferViews = []; - const accessors = []; - const meshes = []; - const nodes = []; - const nodesInScene = []; - - // If we provide indices, then the vertex count is the length - // of that array, otherwise we assume non-indexed triangle - if (defaultValue.defined(indices)) { - vertexCount = indices.length; - } - - // Allocate array - const indexArray = new Uint32Array(vertexCount); - - if (defaultValue.defined(indices)) { - // Set the indices - for (let vertexIndex = 0; vertexIndex < vertexCount; ++vertexIndex) { - indexArray[vertexIndex] = indices[vertexIndex]; - } - } else { - // Generate indices - for ( - let newVertexIndex = 0; - newVertexIndex < vertexCount; - ++newVertexIndex - ) { - indexArray[newVertexIndex] = newVertexIndex; - } - } - - // Push to the buffers, bufferViews and accessors - const indicesBlob = new Blob([indexArray], { type: "application/binary" }); - const indicesURL = URL.createObjectURL(indicesBlob); - - const endIndex = vertexCount; - - // POSITIONS - const meshPositions = positions.subarray(0, endIndex * 3); - const positionsBlob = new Blob([meshPositions], { - type: "application/binary", - }); - const positionsURL = URL.createObjectURL(positionsBlob); - - let minX = Number.POSITIVE_INFINITY; - let maxX = Number.NEGATIVE_INFINITY; - let minY = Number.POSITIVE_INFINITY; - let maxY = Number.NEGATIVE_INFINITY; - let minZ = Number.POSITIVE_INFINITY; - let maxZ = Number.NEGATIVE_INFINITY; - - for (let i = 0; i < meshPositions.length / 3; i++) { - minX = Math.min(minX, meshPositions[i * 3 + 0]); - maxX = Math.max(maxX, meshPositions[i * 3 + 0]); - minY = Math.min(minY, meshPositions[i * 3 + 1]); - maxY = Math.max(maxY, meshPositions[i * 3 + 1]); - minZ = Math.min(minZ, meshPositions[i * 3 + 2]); - maxZ = Math.max(maxZ, meshPositions[i * 3 + 2]); - } - - // NORMALS - const meshNormals = normals ? normals.subarray(0, endIndex * 3) : undefined; - let normalsURL; - if (defaultValue.defined(meshNormals)) { - const normalsBlob = new Blob([meshNormals], { - type: "application/binary", - }); - normalsURL = URL.createObjectURL(normalsBlob); - } - - // UV0s - const meshUv0s = uv0s ? uv0s.subarray(0, endIndex * 2) : undefined; - let uv0URL; - if (defaultValue.defined(meshUv0s)) { - const uv0Blob = new Blob([meshUv0s], { type: "application/binary" }); - uv0URL = URL.createObjectURL(uv0Blob); - } - - // COLORS - const meshColorsInBytes = defaultValue.defined(colors) - ? colors.subarray(0, endIndex * 4) - : undefined; - let colorsURL; - if (defaultValue.defined(meshColorsInBytes)) { - const colorsBlob = new Blob([meshColorsInBytes], { - type: "application/binary", - }); - colorsURL = URL.createObjectURL(colorsBlob); - } - - const posIndex = 0; - let normalIndex = 0; - let uv0Index = 0; - let colorIndex = 0; - let indicesIndex = 0; - - let currentIndex = posIndex; - - const attributes = {}; - - // POSITIONS - attributes.POSITION = posIndex; - buffers.push({ - uri: positionsURL, - byteLength: meshPositions.byteLength, - }); - bufferViews.push({ - buffer: posIndex, - byteOffset: 0, - byteLength: meshPositions.byteLength, - target: 34962, - }); - accessors.push({ - bufferView: posIndex, - byteOffset: 0, - componentType: 5126, - count: vertexCount, - type: "VEC3", - max: [minX, minY, minZ], - min: [maxX, maxY, maxZ], - }); - - // NORMALS - if (defaultValue.defined(normalsURL)) { - ++currentIndex; - normalIndex = currentIndex; - attributes.NORMAL = normalIndex; - buffers.push({ - uri: normalsURL, - byteLength: meshNormals.byteLength, - }); - bufferViews.push({ - buffer: normalIndex, - byteOffset: 0, - byteLength: meshNormals.byteLength, - target: 34962, - }); - accessors.push({ - bufferView: normalIndex, - byteOffset: 0, - componentType: 5126, - count: vertexCount, - type: "VEC3", - }); - } - - // UV0 - if (defaultValue.defined(uv0URL)) { - ++currentIndex; - uv0Index = currentIndex; - attributes.TEXCOORD_0 = uv0Index; - buffers.push({ - uri: uv0URL, - byteLength: meshUv0s.byteLength, - }); - bufferViews.push({ - buffer: uv0Index, - byteOffset: 0, - byteLength: meshUv0s.byteLength, - target: 34962, - }); - accessors.push({ - bufferView: uv0Index, - byteOffset: 0, - componentType: 5126, - count: vertexCount, - type: "VEC2", - }); - } - - // COLORS - if (defaultValue.defined(colorsURL)) { - ++currentIndex; - colorIndex = currentIndex; - attributes.COLOR_0 = colorIndex; - buffers.push({ - uri: colorsURL, - byteLength: meshColorsInBytes.byteLength, - }); - bufferViews.push({ - buffer: colorIndex, - byteOffset: 0, - byteLength: meshColorsInBytes.byteLength, - target: 34962, - }); - accessors.push({ - bufferView: colorIndex, - byteOffset: 0, - componentType: 5121, - normalized: true, - count: vertexCount, - type: "VEC4", - }); - } - - // INDICES - ++currentIndex; - indicesIndex = currentIndex; - buffers.push({ - uri: indicesURL, - byteLength: indexArray.byteLength, - }); - bufferViews.push({ - buffer: indicesIndex, - byteOffset: 0, - byteLength: indexArray.byteLength, - target: 34963, - }); - accessors.push({ - bufferView: indicesIndex, - byteOffset: 0, - componentType: 5125, - count: vertexCount, - type: "SCALAR", - }); - - // Create a new mesh for this page - meshes.push({ - primitives: [ - { - attributes: attributes, - indices: indicesIndex, - material: 0, - }, - ], - }); - nodesInScene.push(0); - nodes.push({ mesh: 0 }); - - return { - buffers: buffers, - bufferViews: bufferViews, - accessors: accessors, - meshes: meshes, - nodes: nodes, - nodesInScene: nodesInScene, - }; - } - - function decode(data, schema, bufferInfo, featureData) { - const magicNumber = new Uint8Array(data, 0, 5); - if ( - magicNumber[0] === "D".charCodeAt() && - magicNumber[1] === "R".charCodeAt() && - magicNumber[2] === "A".charCodeAt() && - magicNumber[3] === "C".charCodeAt() && - magicNumber[4] === "O".charCodeAt() - ) { - return decodeDracoEncodedGeometry(data); - } - return decodeBinaryGeometry(data, schema, bufferInfo, featureData); - } - - function decodeDracoEncodedGeometry(data) { - // Create the Draco decoder. - const dracoDecoderModule = draco; - const buffer = new dracoDecoderModule.DecoderBuffer(); - - const byteArray = new Uint8Array(data); - buffer.Init(byteArray, byteArray.length); - - // Create a buffer to hold the encoded data. - const dracoDecoder = new dracoDecoderModule.Decoder(); - const geometryType = dracoDecoder.GetEncodedGeometryType(buffer); - const metadataQuerier = new dracoDecoderModule.MetadataQuerier(); - - // Decode the encoded geometry. - // See: https://github.com/google/draco/blob/master/src/draco/javascript/emscripten/draco_web_decoder.idl - let dracoGeometry; - let status; - if (geometryType === dracoDecoderModule.TRIANGULAR_MESH) { - dracoGeometry = new dracoDecoderModule.Mesh(); - status = dracoDecoder.DecodeBufferToMesh(buffer, dracoGeometry); - } - - const decodedGeometry = { - vertexCount: [0], - featureCount: 0, - }; - - // if all is OK - if (defaultValue.defined(status) && status.ok() && dracoGeometry.ptr !== 0) { - const faceCount = dracoGeometry.num_faces(); - const attributesCount = dracoGeometry.num_attributes(); - const vertexCount = dracoGeometry.num_points(); - decodedGeometry.indices = new Uint32Array(faceCount * 3); - const faces = decodedGeometry.indices; - - decodedGeometry.vertexCount[0] = vertexCount; - decodedGeometry.scale_x = 1; - decodedGeometry.scale_y = 1; - - // Decode faces - // @TODO: Replace that code with GetTrianglesUInt32Array for better efficiency - const face = new dracoDecoderModule.DracoInt32Array(3); - for (let faceIndex = 0; faceIndex < faceCount; ++faceIndex) { - dracoDecoder.GetFaceFromMesh(dracoGeometry, faceIndex, face); - faces[faceIndex * 3] = face.GetValue(0); - faces[faceIndex * 3 + 1] = face.GetValue(1); - faces[faceIndex * 3 + 2] = face.GetValue(2); - } - - dracoDecoderModule.destroy(face); - - for (let attrIndex = 0; attrIndex < attributesCount; ++attrIndex) { - const dracoAttribute = dracoDecoder.GetAttribute( - dracoGeometry, - attrIndex - ); - - const attributeData = decodeDracoAttribute( - dracoDecoderModule, - dracoDecoder, - dracoGeometry, - dracoAttribute, - vertexCount - ); - - // initial mapping - const dracoAttributeType = dracoAttribute.attribute_type(); - let attributei3sName = "unknown"; - - if (dracoAttributeType === dracoDecoderModule.POSITION) { - attributei3sName = "positions"; - } else if (dracoAttributeType === dracoDecoderModule.NORMAL) { - attributei3sName = "normals"; - } else if (dracoAttributeType === dracoDecoderModule.COLOR) { - attributei3sName = "colors"; - } else if (dracoAttributeType === dracoDecoderModule.TEX_COORD) { - attributei3sName = "uv0s"; - } - - // get the metadata - const metadata = dracoDecoder.GetAttributeMetadata( - dracoGeometry, - attrIndex - ); - - if (metadata.ptr !== 0) { - const numEntries = metadataQuerier.NumEntries(metadata); - for (let entry = 0; entry < numEntries; ++entry) { - const entryName = metadataQuerier.GetEntryName(metadata, entry); - if (entryName === "i3s-scale_x") { - decodedGeometry.scale_x = metadataQuerier.GetDoubleEntry( - metadata, - "i3s-scale_x" - ); - } else if (entryName === "i3s-scale_y") { - decodedGeometry.scale_y = metadataQuerier.GetDoubleEntry( - metadata, - "i3s-scale_y" - ); - } else if (entryName === "i3s-attribute-type") { - attributei3sName = metadataQuerier.GetStringEntry( - metadata, - "i3s-attribute-type" - ); - } - } - } - - if (defaultValue.defined(decodedGeometry[attributei3sName])) { - console.log("Attribute already exists", attributei3sName); - } - - decodedGeometry[attributei3sName] = attributeData; - - if (attributei3sName === "feature-index") { - decodedGeometry.featureCount++; - } - } - - dracoDecoderModule.destroy(dracoGeometry); - } - - dracoDecoderModule.destroy(metadataQuerier); - dracoDecoderModule.destroy(dracoDecoder); - - return decodedGeometry; - } - - function decodeDracoAttribute( - dracoDecoderModule, - dracoDecoder, - dracoGeometry, - dracoAttribute, - vertexCount - ) { - const bufferSize = dracoAttribute.num_components() * vertexCount; - let dracoAttributeData; - - const handlers = [ - function () {}, // DT_INVALID - 0 - function () { - // DT_INT8 - 1 - dracoAttributeData = new dracoDecoderModule.DracoInt8Array(bufferSize); - const success = dracoDecoder.GetAttributeInt8ForAllPoints( - dracoGeometry, - dracoAttribute, - dracoAttributeData - ); - - if (!success) { - console.error("Bad stream"); - } - const attributeData = new Int8Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - attributeData[i] = dracoAttributeData.GetValue(i); - } - return attributeData; - }, - function () { - // DT_UINT8 - 2 - dracoAttributeData = new dracoDecoderModule.DracoInt8Array(bufferSize); - const success = dracoDecoder.GetAttributeUInt8ForAllPoints( - dracoGeometry, - dracoAttribute, - dracoAttributeData - ); - - if (!success) { - console.error("Bad stream"); - } - const attributeData = new Uint8Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - attributeData[i] = dracoAttributeData.GetValue(i); - } - return attributeData; - }, - function () { - // DT_INT16 - 3 - dracoAttributeData = new dracoDecoderModule.DracoInt16Array(bufferSize); - const success = dracoDecoder.GetAttributeInt16ForAllPoints( - dracoGeometry, - dracoAttribute, - dracoAttributeData - ); - - if (!success) { - console.error("Bad stream"); - } - const attributeData = new Int16Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - attributeData[i] = dracoAttributeData.GetValue(i); - } - return attributeData; - }, - function () { - // DT_UINT16 - 4 - dracoAttributeData = new dracoDecoderModule.DracoInt16Array(bufferSize); - const success = dracoDecoder.GetAttributeUInt16ForAllPoints( - dracoGeometry, - dracoAttribute, - dracoAttributeData - ); - - if (!success) { - console.error("Bad stream"); - } - const attributeData = new Uint16Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - attributeData[i] = dracoAttributeData.GetValue(i); - } - return attributeData; - }, - function () { - // DT_INT32 - 5 - dracoAttributeData = new dracoDecoderModule.DracoInt32Array(bufferSize); - const success = dracoDecoder.GetAttributeInt32ForAllPoints( - dracoGeometry, - dracoAttribute, - dracoAttributeData - ); - - if (!success) { - console.error("Bad stream"); - } - const attributeData = new Int32Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - attributeData[i] = dracoAttributeData.GetValue(i); - } - return attributeData; - }, - function () { - // DT_UINT32 - 6 - dracoAttributeData = new dracoDecoderModule.DracoInt32Array(bufferSize); - const success = dracoDecoder.GetAttributeUInt32ForAllPoints( - dracoGeometry, - dracoAttribute, - dracoAttributeData - ); - - if (!success) { - console.error("Bad stream"); - } - const attributeData = new Uint32Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - attributeData[i] = dracoAttributeData.GetValue(i); - } - return attributeData; - }, - function () { - // DT_INT64 - 7 - }, - function () { - // DT_UINT64 - 8 - }, - function () { - // DT_FLOAT32 - 9 - dracoAttributeData = new dracoDecoderModule.DracoFloat32Array(bufferSize); - const success = dracoDecoder.GetAttributeFloatForAllPoints( - dracoGeometry, - dracoAttribute, - dracoAttributeData - ); - - if (!success) { - console.error("Bad stream"); - } - const attributeData = new Float32Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - attributeData[i] = dracoAttributeData.GetValue(i); - } - return attributeData; - }, - function () { - // DT_FLOAT64 - 10 - }, - function () { - // DT_FLOAT32 - 11 - dracoAttributeData = new dracoDecoderModule.DracoUInt8Array(bufferSize); - const success = dracoDecoder.GetAttributeUInt8ForAllPoints( - dracoGeometry, - dracoAttribute, - dracoAttributeData - ); - - if (!success) { - console.error("Bad stream"); - } - const attributeData = new Uint8Array(bufferSize); - for (let i = 0; i < bufferSize; ++i) { - attributeData[i] = dracoAttributeData.GetValue(i); - } - return attributeData; - }, - ]; - - const attributeData = handlers[dracoAttribute.data_type()](); - - if (defaultValue.defined(dracoAttributeData)) { - dracoDecoderModule.destroy(dracoAttributeData); - } - - return attributeData; - } - - const binaryAttributeDecoders = { - position: function (decodedGeometry, data, offset) { - const count = decodedGeometry.vertexCount * 3; - decodedGeometry.positions = new Float32Array(data, offset, count); - offset += count * 4; - return offset; - }, - normal: function (decodedGeometry, data, offset) { - const count = decodedGeometry.vertexCount * 3; - decodedGeometry.normals = new Float32Array(data, offset, count); - offset += count * 4; - return offset; - }, - uv0: function (decodedGeometry, data, offset) { - const count = decodedGeometry.vertexCount * 2; - decodedGeometry.uv0s = new Float32Array(data, offset, count); - offset += count * 4; - return offset; - }, - color: function (decodedGeometry, data, offset) { - const count = decodedGeometry.vertexCount * 4; - decodedGeometry.colors = new Uint8Array(data, offset, count); - offset += count; - return offset; - }, - featureId: function (decodedGeometry, data, offset) { - // We don't need to use this for anything so just increment the offset - const count = decodedGeometry.featureCount; - offset += count * 8; - return offset; - }, - id: function (decodedGeometry, data, offset) { - // We don't need to use this for anything so just increment the offset - const count = decodedGeometry.featureCount; - offset += count * 8; - return offset; - }, - faceRange: function (decodedGeometry, data, offset) { - const count = decodedGeometry.featureCount * 2; - decodedGeometry.faceRange = new Uint32Array(data, offset, count); - offset += count * 4; - return offset; - }, - uvRegion: function (decodedGeometry, data, offset) { - const count = decodedGeometry.vertexCount * 4; - decodedGeometry["uv-region"] = new Uint16Array(data, offset, count); - offset += count * 2; - return offset; - }, - region: function (decodedGeometry, data, offset) { - const count = decodedGeometry.vertexCount * 4; - decodedGeometry["uv-region"] = new Uint16Array(data, offset, count); - offset += count * 2; - return offset; - }, - }; - - function decodeBinaryGeometry(data, schema, bufferInfo, featureData) { - // From this spec: - // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/defaultGeometrySchema.cmn.md - const decodedGeometry = { - vertexCount: 0, - }; - - const dataView = new DataView(data); - - try { - let offset = 0; - decodedGeometry.vertexCount = dataView.getUint32(offset, 1); - offset += 4; - - decodedGeometry.featureCount = dataView.getUint32(offset, 1); - offset += 4; - - if (defaultValue.defined(bufferInfo)) { - for ( - let attrIndex = 0; - attrIndex < bufferInfo.attributes.length; - attrIndex++ - ) { - if ( - defaultValue.defined(binaryAttributeDecoders[bufferInfo.attributes[attrIndex]]) - ) { - offset = binaryAttributeDecoders[bufferInfo.attributes[attrIndex]]( - decodedGeometry, - data, - offset - ); - } else { - console.error( - "Unknown decoder for", - bufferInfo.attributes[attrIndex] - ); - } - } - } else { - let ordering = schema.ordering; - let featureAttributeOrder = schema.featureAttributeOrder; - - if ( - defaultValue.defined(featureData) && - defaultValue.defined(featureData.geometryData) && - defaultValue.defined(featureData.geometryData[0]) && - defaultValue.defined(featureData.geometryData[0].params) - ) { - ordering = Object.keys( - featureData.geometryData[0].params.vertexAttributes - ); - featureAttributeOrder = Object.keys( - featureData.geometryData[0].params.featureAttributes - ); - } - - // Use default geometry schema - for (let i = 0; i < ordering.length; i++) { - const decoder = binaryAttributeDecoders[ordering[i]]; - if (!defaultValue.defined(decoder)) { - console.log(ordering[i]); - } - offset = decoder(decodedGeometry, data, offset); - } - - for (let j = 0; j < featureAttributeOrder.length; j++) { - const curDecoder = binaryAttributeDecoders[featureAttributeOrder[j]]; - if (!defaultValue.defined(curDecoder)) { - console.log(featureAttributeOrder[j]); - } - offset = curDecoder(decodedGeometry, data, offset); - } - } - } catch (e) { - console.error(e); - } - - decodedGeometry.scale_x = 1; - decodedGeometry.scale_y = 1; - - return decodedGeometry; - } - - function decodeI3S(parameters) { - // Decode the data into geometry - const geometryData = decode( - parameters.binaryData, - parameters.schema, - parameters.bufferInfo, - parameters.featureData - ); - - // Adjust height from orthometric to ellipsoidal - if ( - defaultValue.defined(parameters.geoidDataList) && - parameters.geoidDataList.length > 0 - ) { - orthometricToEllipsoidal( - geometryData.vertexCount, - geometryData.positions, - geometryData.scale_x, - geometryData.scale_y, - parameters.cartographicCenter, - parameters.geoidDataList, - false - ); - } - - // Transform vertices to local - transformToLocal( - geometryData.vertexCount, - geometryData.positions, - geometryData.normals, - parameters.cartographicCenter, - parameters.cartesianCenter, - parameters.parentRotation, - parameters.ellipsoidRadiiSquare, - geometryData.scale_x, - geometryData.scale_y - ); - - // Adjust UVs if there is a UV region - if (defaultValue.defined(geometryData.uv0s) && defaultValue.defined(geometryData["uv-region"])) { - cropUVs( - geometryData.vertexCount, - geometryData.uv0s, - geometryData["uv-region"] - ); - } - - // Create the final buffer - const meshData = generateGltfBuffer( - geometryData.vertexCount, - geometryData.indices, - geometryData.positions, - geometryData.normals, - geometryData.uv0s, - geometryData.colors - ); - - const customAttributes = {}; - if (defaultValue.defined(geometryData["feature-index"])) { - customAttributes.positions = geometryData.positions; - customAttributes.indices = geometryData.indices; - customAttributes.featureIndex = geometryData["feature-index"]; - customAttributes.cartesianCenter = parameters.cartesianCenter; - customAttributes.parentRotation = parameters.parentRotation; - } else if (defaultValue.defined(geometryData["faceRange"])) { - customAttributes.positions = geometryData.positions; - customAttributes.indices = geometryData.indices; - customAttributes.sourceURL = parameters.url; - customAttributes.cartesianCenter = parameters.cartesianCenter; - customAttributes.parentRotation = parameters.parentRotation; - - // Build the feature index array from the faceRange. - customAttributes.featureIndex = new Array(geometryData.positions.length); - for ( - let range = 0; - range < geometryData["faceRange"].length - 1; - range += 2 - ) { - const curIndex = range / 2; - const rangeStart = geometryData["faceRange"][range]; - const rangeEnd = geometryData["faceRange"][range + 1]; - for (let i = rangeStart; i <= rangeEnd; i++) { - customAttributes.featureIndex[i * 3] = curIndex; - customAttributes.featureIndex[i * 3 + 1] = curIndex; - customAttributes.featureIndex[i * 3 + 2] = curIndex; - } - } - } - - meshData._customAttributes = customAttributes; - - const results = { - meshData: meshData, - }; - - return results; - } - - function initWorker(dracoModule) { - draco = dracoModule; - self.onmessage = createTaskProcessorWorker(decodeI3S); - self.postMessage(true); - } - - function decodeI3SStart(event) { - const data = event.data; - - // Expect the first message to be to load a web assembly module - const wasmConfig = data.webAssemblyConfig; - if (defaultValue.defined(wasmConfig)) { - // Require and compile WebAssembly module, or use fallback if not supported - return require([wasmConfig.modulePath], function (dracoModule) { - if (defaultValue.defined(wasmConfig.wasmBinaryFile)) { - if (!defaultValue.defined(dracoModule)) { - dracoModule = self.DracoDecoderModule; - } - - dracoModule(wasmConfig).then(function (compiledModule) { - initWorker(compiledModule); - }); - } else { - initWorker(dracoModule()); - } - }); - } - } - - return decodeI3SStart; - -})); -//# sourceMappingURL=decodeI3S.js.map diff --git a/debug/cesium/Workers/decodeI3S.js.map b/debug/cesium/Workers/decodeI3S.js.map deleted file mode 100644 index f47eab4..0000000 --- a/debug/cesium/Workers/decodeI3S.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"decodeI3S.js","sources":["../../../Source/WorkersES6/decodeI3S.js"],"sourcesContent":["/* global require */\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport WebMercatorProjection from \"../Core/WebMercatorProjection.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport Cartographic from \"../Core/Cartographic.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Matrix3 from \"../Core/Matrix3.js\";\r\nimport CesiumMath from \"../Core/Math.js\";\r\n\r\nlet draco;\r\n\r\nfunction bilinearInterpolate(tx, ty, h00, h10, h01, h11) {\r\n const a = h00 * (1 - tx) + h10 * tx;\r\n const b = h01 * (1 - tx) + h11 * tx;\r\n return a * (1 - ty) + b * ty;\r\n}\r\n\r\nfunction sampleMap(u, v, width, data) {\r\n const address = u + v * width;\r\n return data[address];\r\n}\r\n\r\nfunction sampleGeoid(sampleX, sampleY, geoidData) {\r\n const extent = geoidData.nativeExtent;\r\n let x =\r\n ((sampleX - extent.west) / (extent.east - extent.west)) *\r\n (geoidData.width - 1);\r\n let y =\r\n ((sampleY - extent.south) / (extent.north - extent.south)) *\r\n (geoidData.height - 1);\r\n const xi = Math.floor(x);\r\n let yi = Math.floor(y);\r\n\r\n x -= xi;\r\n y -= yi;\r\n\r\n const xNext = xi < geoidData.width ? xi + 1 : xi;\r\n let yNext = yi < geoidData.height ? yi + 1 : yi;\r\n\r\n yi = geoidData.height - 1 - yi;\r\n yNext = geoidData.height - 1 - yNext;\r\n\r\n const h00 = sampleMap(xi, yi, geoidData.width, geoidData.buffer);\r\n const h10 = sampleMap(xNext, yi, geoidData.width, geoidData.buffer);\r\n const h01 = sampleMap(xi, yNext, geoidData.width, geoidData.buffer);\r\n const h11 = sampleMap(xNext, yNext, geoidData.width, geoidData.buffer);\r\n\r\n let finalHeight = bilinearInterpolate(x, y, h00, h10, h01, h11);\r\n finalHeight = finalHeight * geoidData.scale + geoidData.offset;\r\n return finalHeight;\r\n}\r\n\r\nfunction sampleGeoidFromList(lon, lat, geoidDataList) {\r\n for (let i = 0; i < geoidDataList.length; i++) {\r\n const localExtent = geoidDataList[i].nativeExtent;\r\n\r\n let localPt = new Cartesian3();\r\n if (geoidDataList[i].projectionType === \"WebMercator\") {\r\n const radii = geoidDataList[i].projection._ellipsoid._radii;\r\n const webMercatorProj = new WebMercatorProjection(\r\n new Ellipsoid(radii.x, radii.y, radii.z)\r\n );\r\n localPt = webMercatorProj.project(new Cartographic(lon, lat, 0));\r\n } else {\r\n localPt.x = lon;\r\n localPt.y = lat;\r\n }\r\n\r\n if (\r\n localPt.x > localExtent.west &&\r\n localPt.x < localExtent.east &&\r\n localPt.y > localExtent.south &&\r\n localPt.y < localExtent.north\r\n ) {\r\n return sampleGeoid(localPt.x, localPt.y, geoidDataList[i]);\r\n }\r\n }\r\n\r\n return 0;\r\n}\r\n\r\nfunction orthometricToEllipsoidal(\r\n vertexCount,\r\n position,\r\n scale_x,\r\n scale_y,\r\n center,\r\n geoidDataList,\r\n fast\r\n) {\r\n if (fast) {\r\n // Geometry is already relative to the tile origin which has already been shifted to account for geoid height\r\n // Nothing to do here\r\n return;\r\n }\r\n\r\n // For more precision, sample the geoid height at each vertex and shift by the difference between that value and the height at the center of the tile\r\n const centerHeight = sampleGeoidFromList(\r\n center.longitude,\r\n center.latitude,\r\n geoidDataList\r\n );\r\n\r\n for (let i = 0; i < vertexCount; ++i) {\r\n const height = sampleGeoidFromList(\r\n center.longitude + CesiumMath.toRadians(scale_x * position[i * 3]),\r\n center.latitude + CesiumMath.toRadians(scale_y * position[i * 3 + 1]),\r\n geoidDataList\r\n );\r\n position[i * 3 + 2] += height - centerHeight;\r\n }\r\n}\r\n\r\nfunction transformToLocal(\r\n vertexCount,\r\n positions,\r\n normals,\r\n cartographicCenter,\r\n cartesianCenter,\r\n parentRotation,\r\n ellipsoidRadiiSquare,\r\n scale_x,\r\n scale_y\r\n) {\r\n if (vertexCount === 0 || !defined(positions) || positions.length === 0) {\r\n return;\r\n }\r\n\r\n const ellipsoid = new Ellipsoid(\r\n Math.sqrt(ellipsoidRadiiSquare.x),\r\n Math.sqrt(ellipsoidRadiiSquare.y),\r\n Math.sqrt(ellipsoidRadiiSquare.z)\r\n );\r\n for (let i = 0; i < vertexCount; ++i) {\r\n const indexOffset = i * 3;\r\n const indexOffset1 = indexOffset + 1;\r\n const indexOffset2 = indexOffset + 2;\r\n\r\n const cartographic = new Cartographic();\r\n cartographic.longitude =\r\n cartographicCenter.longitude +\r\n CesiumMath.toRadians(scale_x * positions[indexOffset]);\r\n\r\n cartographic.latitude =\r\n cartographicCenter.latitude +\r\n CesiumMath.toRadians(scale_y * positions[indexOffset1]);\r\n cartographic.height = cartographicCenter.height + positions[indexOffset2];\r\n\r\n const position = {};\r\n ellipsoid.cartographicToCartesian(cartographic, position);\r\n\r\n position.x -= cartesianCenter.x;\r\n position.y -= cartesianCenter.y;\r\n position.z -= cartesianCenter.z;\r\n\r\n const rotatedPosition = {};\r\n Matrix3.multiplyByVector(parentRotation, position, rotatedPosition);\r\n\r\n positions[indexOffset] = rotatedPosition.x;\r\n positions[indexOffset1] = rotatedPosition.y;\r\n positions[indexOffset2] = rotatedPosition.z;\r\n\r\n if (defined(normals)) {\r\n const normal = new Cartesian3(\r\n normals[indexOffset],\r\n normals[indexOffset1],\r\n normals[indexOffset2]\r\n );\r\n\r\n const rotatedNormal = {};\r\n Matrix3.multiplyByVector(parentRotation, normal, rotatedNormal);\r\n\r\n // TODO: check if normals are Z-UP or Y-UP and flip y and z\r\n normals[indexOffset] = rotatedNormal.x;\r\n normals[indexOffset1] = rotatedNormal.y;\r\n normals[indexOffset2] = rotatedNormal.z;\r\n }\r\n }\r\n}\r\n\r\nfunction cropUVs(vertexCount, uv0s, uvRegions) {\r\n for (let vertexIndex = 0; vertexIndex < vertexCount; ++vertexIndex) {\r\n const minU = uvRegions[vertexIndex * 4] / 65535.0;\r\n const minV = uvRegions[vertexIndex * 4 + 1] / 65535.0;\r\n const scaleU =\r\n (uvRegions[vertexIndex * 4 + 2] - uvRegions[vertexIndex * 4]) / 65535.0;\r\n const scaleV =\r\n (uvRegions[vertexIndex * 4 + 3] - uvRegions[vertexIndex * 4 + 1]) /\r\n 65535.0;\r\n\r\n uv0s[vertexIndex * 2] *= scaleU;\r\n uv0s[vertexIndex * 2] += minU;\r\n\r\n uv0s[vertexIndex * 2 + 1] *= scaleV;\r\n uv0s[vertexIndex * 2 + 1] += minV;\r\n }\r\n}\r\n\r\nfunction generateGltfBuffer(\r\n vertexCount,\r\n indices,\r\n positions,\r\n normals,\r\n uv0s,\r\n colors\r\n) {\r\n if (vertexCount === 0 || !defined(positions) || positions.length === 0) {\r\n return {\r\n buffers: [],\r\n bufferViews: [],\r\n accessors: [],\r\n meshes: [],\r\n nodes: [],\r\n nodesInScene: [],\r\n };\r\n }\r\n\r\n const buffers = [];\r\n const bufferViews = [];\r\n const accessors = [];\r\n const meshes = [];\r\n const nodes = [];\r\n const nodesInScene = [];\r\n\r\n // If we provide indices, then the vertex count is the length\r\n // of that array, otherwise we assume non-indexed triangle\r\n if (defined(indices)) {\r\n vertexCount = indices.length;\r\n }\r\n\r\n // Allocate array\r\n const indexArray = new Uint32Array(vertexCount);\r\n\r\n if (defined(indices)) {\r\n // Set the indices\r\n for (let vertexIndex = 0; vertexIndex < vertexCount; ++vertexIndex) {\r\n indexArray[vertexIndex] = indices[vertexIndex];\r\n }\r\n } else {\r\n // Generate indices\r\n for (\r\n let newVertexIndex = 0;\r\n newVertexIndex < vertexCount;\r\n ++newVertexIndex\r\n ) {\r\n indexArray[newVertexIndex] = newVertexIndex;\r\n }\r\n }\r\n\r\n // Push to the buffers, bufferViews and accessors\r\n const indicesBlob = new Blob([indexArray], { type: \"application/binary\" });\r\n const indicesURL = URL.createObjectURL(indicesBlob);\r\n\r\n const endIndex = vertexCount;\r\n\r\n // POSITIONS\r\n const meshPositions = positions.subarray(0, endIndex * 3);\r\n const positionsBlob = new Blob([meshPositions], {\r\n type: \"application/binary\",\r\n });\r\n const positionsURL = URL.createObjectURL(positionsBlob);\r\n\r\n let minX = Number.POSITIVE_INFINITY;\r\n let maxX = Number.NEGATIVE_INFINITY;\r\n let minY = Number.POSITIVE_INFINITY;\r\n let maxY = Number.NEGATIVE_INFINITY;\r\n let minZ = Number.POSITIVE_INFINITY;\r\n let maxZ = Number.NEGATIVE_INFINITY;\r\n\r\n for (let i = 0; i < meshPositions.length / 3; i++) {\r\n minX = Math.min(minX, meshPositions[i * 3 + 0]);\r\n maxX = Math.max(maxX, meshPositions[i * 3 + 0]);\r\n minY = Math.min(minY, meshPositions[i * 3 + 1]);\r\n maxY = Math.max(maxY, meshPositions[i * 3 + 1]);\r\n minZ = Math.min(minZ, meshPositions[i * 3 + 2]);\r\n maxZ = Math.max(maxZ, meshPositions[i * 3 + 2]);\r\n }\r\n\r\n // NORMALS\r\n const meshNormals = normals ? normals.subarray(0, endIndex * 3) : undefined;\r\n let normalsURL;\r\n if (defined(meshNormals)) {\r\n const normalsBlob = new Blob([meshNormals], {\r\n type: \"application/binary\",\r\n });\r\n normalsURL = URL.createObjectURL(normalsBlob);\r\n }\r\n\r\n // UV0s\r\n const meshUv0s = uv0s ? uv0s.subarray(0, endIndex * 2) : undefined;\r\n let uv0URL;\r\n if (defined(meshUv0s)) {\r\n const uv0Blob = new Blob([meshUv0s], { type: \"application/binary\" });\r\n uv0URL = URL.createObjectURL(uv0Blob);\r\n }\r\n\r\n // COLORS\r\n const meshColorsInBytes = defined(colors)\r\n ? colors.subarray(0, endIndex * 4)\r\n : undefined;\r\n let colorsURL;\r\n if (defined(meshColorsInBytes)) {\r\n const colorsBlob = new Blob([meshColorsInBytes], {\r\n type: \"application/binary\",\r\n });\r\n colorsURL = URL.createObjectURL(colorsBlob);\r\n }\r\n\r\n const posIndex = 0;\r\n let normalIndex = 0;\r\n let uv0Index = 0;\r\n let colorIndex = 0;\r\n let indicesIndex = 0;\r\n\r\n let currentIndex = posIndex;\r\n\r\n const attributes = {};\r\n\r\n // POSITIONS\r\n attributes.POSITION = posIndex;\r\n buffers.push({\r\n uri: positionsURL,\r\n byteLength: meshPositions.byteLength,\r\n });\r\n bufferViews.push({\r\n buffer: posIndex,\r\n byteOffset: 0,\r\n byteLength: meshPositions.byteLength,\r\n target: 34962,\r\n });\r\n accessors.push({\r\n bufferView: posIndex,\r\n byteOffset: 0,\r\n componentType: 5126,\r\n count: vertexCount,\r\n type: \"VEC3\",\r\n max: [minX, minY, minZ],\r\n min: [maxX, maxY, maxZ],\r\n });\r\n\r\n // NORMALS\r\n if (defined(normalsURL)) {\r\n ++currentIndex;\r\n normalIndex = currentIndex;\r\n attributes.NORMAL = normalIndex;\r\n buffers.push({\r\n uri: normalsURL,\r\n byteLength: meshNormals.byteLength,\r\n });\r\n bufferViews.push({\r\n buffer: normalIndex,\r\n byteOffset: 0,\r\n byteLength: meshNormals.byteLength,\r\n target: 34962,\r\n });\r\n accessors.push({\r\n bufferView: normalIndex,\r\n byteOffset: 0,\r\n componentType: 5126,\r\n count: vertexCount,\r\n type: \"VEC3\",\r\n });\r\n }\r\n\r\n // UV0\r\n if (defined(uv0URL)) {\r\n ++currentIndex;\r\n uv0Index = currentIndex;\r\n attributes.TEXCOORD_0 = uv0Index;\r\n buffers.push({\r\n uri: uv0URL,\r\n byteLength: meshUv0s.byteLength,\r\n });\r\n bufferViews.push({\r\n buffer: uv0Index,\r\n byteOffset: 0,\r\n byteLength: meshUv0s.byteLength,\r\n target: 34962,\r\n });\r\n accessors.push({\r\n bufferView: uv0Index,\r\n byteOffset: 0,\r\n componentType: 5126,\r\n count: vertexCount,\r\n type: \"VEC2\",\r\n });\r\n }\r\n\r\n // COLORS\r\n if (defined(colorsURL)) {\r\n ++currentIndex;\r\n colorIndex = currentIndex;\r\n attributes.COLOR_0 = colorIndex;\r\n buffers.push({\r\n uri: colorsURL,\r\n byteLength: meshColorsInBytes.byteLength,\r\n });\r\n bufferViews.push({\r\n buffer: colorIndex,\r\n byteOffset: 0,\r\n byteLength: meshColorsInBytes.byteLength,\r\n target: 34962,\r\n });\r\n accessors.push({\r\n bufferView: colorIndex,\r\n byteOffset: 0,\r\n componentType: 5121,\r\n normalized: true,\r\n count: vertexCount,\r\n type: \"VEC4\",\r\n });\r\n }\r\n\r\n // INDICES\r\n ++currentIndex;\r\n indicesIndex = currentIndex;\r\n buffers.push({\r\n uri: indicesURL,\r\n byteLength: indexArray.byteLength,\r\n });\r\n bufferViews.push({\r\n buffer: indicesIndex,\r\n byteOffset: 0,\r\n byteLength: indexArray.byteLength,\r\n target: 34963,\r\n });\r\n accessors.push({\r\n bufferView: indicesIndex,\r\n byteOffset: 0,\r\n componentType: 5125,\r\n count: vertexCount,\r\n type: \"SCALAR\",\r\n });\r\n\r\n // Create a new mesh for this page\r\n meshes.push({\r\n primitives: [\r\n {\r\n attributes: attributes,\r\n indices: indicesIndex,\r\n material: 0,\r\n },\r\n ],\r\n });\r\n nodesInScene.push(0);\r\n nodes.push({ mesh: 0 });\r\n\r\n return {\r\n buffers: buffers,\r\n bufferViews: bufferViews,\r\n accessors: accessors,\r\n meshes: meshes,\r\n nodes: nodes,\r\n nodesInScene: nodesInScene,\r\n };\r\n}\r\n\r\nfunction decode(data, schema, bufferInfo, featureData) {\r\n const magicNumber = new Uint8Array(data, 0, 5);\r\n if (\r\n magicNumber[0] === \"D\".charCodeAt() &&\r\n magicNumber[1] === \"R\".charCodeAt() &&\r\n magicNumber[2] === \"A\".charCodeAt() &&\r\n magicNumber[3] === \"C\".charCodeAt() &&\r\n magicNumber[4] === \"O\".charCodeAt()\r\n ) {\r\n return decodeDracoEncodedGeometry(data, bufferInfo);\r\n }\r\n return decodeBinaryGeometry(data, schema, bufferInfo, featureData);\r\n}\r\n\r\nfunction decodeDracoEncodedGeometry(data) {\r\n // Create the Draco decoder.\r\n const dracoDecoderModule = draco;\r\n const buffer = new dracoDecoderModule.DecoderBuffer();\r\n\r\n const byteArray = new Uint8Array(data);\r\n buffer.Init(byteArray, byteArray.length);\r\n\r\n // Create a buffer to hold the encoded data.\r\n const dracoDecoder = new dracoDecoderModule.Decoder();\r\n const geometryType = dracoDecoder.GetEncodedGeometryType(buffer);\r\n const metadataQuerier = new dracoDecoderModule.MetadataQuerier();\r\n\r\n // Decode the encoded geometry.\r\n // See: https://github.com/google/draco/blob/master/src/draco/javascript/emscripten/draco_web_decoder.idl\r\n let dracoGeometry;\r\n let status;\r\n if (geometryType === dracoDecoderModule.TRIANGULAR_MESH) {\r\n dracoGeometry = new dracoDecoderModule.Mesh();\r\n status = dracoDecoder.DecodeBufferToMesh(buffer, dracoGeometry);\r\n }\r\n\r\n const decodedGeometry = {\r\n vertexCount: [0],\r\n featureCount: 0,\r\n };\r\n\r\n // if all is OK\r\n if (defined(status) && status.ok() && dracoGeometry.ptr !== 0) {\r\n const faceCount = dracoGeometry.num_faces();\r\n const attributesCount = dracoGeometry.num_attributes();\r\n const vertexCount = dracoGeometry.num_points();\r\n decodedGeometry.indices = new Uint32Array(faceCount * 3);\r\n const faces = decodedGeometry.indices;\r\n\r\n decodedGeometry.vertexCount[0] = vertexCount;\r\n decodedGeometry.scale_x = 1;\r\n decodedGeometry.scale_y = 1;\r\n\r\n // Decode faces\r\n // @TODO: Replace that code with GetTrianglesUInt32Array for better efficiency\r\n const face = new dracoDecoderModule.DracoInt32Array(3);\r\n for (let faceIndex = 0; faceIndex < faceCount; ++faceIndex) {\r\n dracoDecoder.GetFaceFromMesh(dracoGeometry, faceIndex, face);\r\n faces[faceIndex * 3] = face.GetValue(0);\r\n faces[faceIndex * 3 + 1] = face.GetValue(1);\r\n faces[faceIndex * 3 + 2] = face.GetValue(2);\r\n }\r\n\r\n dracoDecoderModule.destroy(face);\r\n\r\n for (let attrIndex = 0; attrIndex < attributesCount; ++attrIndex) {\r\n const dracoAttribute = dracoDecoder.GetAttribute(\r\n dracoGeometry,\r\n attrIndex\r\n );\r\n\r\n const attributeData = decodeDracoAttribute(\r\n dracoDecoderModule,\r\n dracoDecoder,\r\n dracoGeometry,\r\n dracoAttribute,\r\n vertexCount\r\n );\r\n\r\n // initial mapping\r\n const dracoAttributeType = dracoAttribute.attribute_type();\r\n let attributei3sName = \"unknown\";\r\n\r\n if (dracoAttributeType === dracoDecoderModule.POSITION) {\r\n attributei3sName = \"positions\";\r\n } else if (dracoAttributeType === dracoDecoderModule.NORMAL) {\r\n attributei3sName = \"normals\";\r\n } else if (dracoAttributeType === dracoDecoderModule.COLOR) {\r\n attributei3sName = \"colors\";\r\n } else if (dracoAttributeType === dracoDecoderModule.TEX_COORD) {\r\n attributei3sName = \"uv0s\";\r\n }\r\n\r\n // get the metadata\r\n const metadata = dracoDecoder.GetAttributeMetadata(\r\n dracoGeometry,\r\n attrIndex\r\n );\r\n\r\n if (metadata.ptr !== 0) {\r\n const numEntries = metadataQuerier.NumEntries(metadata);\r\n for (let entry = 0; entry < numEntries; ++entry) {\r\n const entryName = metadataQuerier.GetEntryName(metadata, entry);\r\n if (entryName === \"i3s-scale_x\") {\r\n decodedGeometry.scale_x = metadataQuerier.GetDoubleEntry(\r\n metadata,\r\n \"i3s-scale_x\"\r\n );\r\n } else if (entryName === \"i3s-scale_y\") {\r\n decodedGeometry.scale_y = metadataQuerier.GetDoubleEntry(\r\n metadata,\r\n \"i3s-scale_y\"\r\n );\r\n } else if (entryName === \"i3s-attribute-type\") {\r\n attributei3sName = metadataQuerier.GetStringEntry(\r\n metadata,\r\n \"i3s-attribute-type\"\r\n );\r\n }\r\n }\r\n }\r\n\r\n if (defined(decodedGeometry[attributei3sName])) {\r\n console.log(\"Attribute already exists\", attributei3sName);\r\n }\r\n\r\n decodedGeometry[attributei3sName] = attributeData;\r\n\r\n if (attributei3sName === \"feature-index\") {\r\n decodedGeometry.featureCount++;\r\n }\r\n }\r\n\r\n dracoDecoderModule.destroy(dracoGeometry);\r\n }\r\n\r\n dracoDecoderModule.destroy(metadataQuerier);\r\n dracoDecoderModule.destroy(dracoDecoder);\r\n\r\n return decodedGeometry;\r\n}\r\n\r\nfunction decodeDracoAttribute(\r\n dracoDecoderModule,\r\n dracoDecoder,\r\n dracoGeometry,\r\n dracoAttribute,\r\n vertexCount\r\n) {\r\n const bufferSize = dracoAttribute.num_components() * vertexCount;\r\n let dracoAttributeData;\r\n\r\n const handlers = [\r\n function () {}, // DT_INVALID - 0\r\n function () {\r\n // DT_INT8 - 1\r\n dracoAttributeData = new dracoDecoderModule.DracoInt8Array(bufferSize);\r\n const success = dracoDecoder.GetAttributeInt8ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n dracoAttributeData\r\n );\r\n\r\n if (!success) {\r\n console.error(\"Bad stream\");\r\n }\r\n const attributeData = new Int8Array(bufferSize);\r\n for (let i = 0; i < bufferSize; ++i) {\r\n attributeData[i] = dracoAttributeData.GetValue(i);\r\n }\r\n return attributeData;\r\n },\r\n function () {\r\n // DT_UINT8 - 2\r\n dracoAttributeData = new dracoDecoderModule.DracoInt8Array(bufferSize);\r\n const success = dracoDecoder.GetAttributeUInt8ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n dracoAttributeData\r\n );\r\n\r\n if (!success) {\r\n console.error(\"Bad stream\");\r\n }\r\n const attributeData = new Uint8Array(bufferSize);\r\n for (let i = 0; i < bufferSize; ++i) {\r\n attributeData[i] = dracoAttributeData.GetValue(i);\r\n }\r\n return attributeData;\r\n },\r\n function () {\r\n // DT_INT16 - 3\r\n dracoAttributeData = new dracoDecoderModule.DracoInt16Array(bufferSize);\r\n const success = dracoDecoder.GetAttributeInt16ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n dracoAttributeData\r\n );\r\n\r\n if (!success) {\r\n console.error(\"Bad stream\");\r\n }\r\n const attributeData = new Int16Array(bufferSize);\r\n for (let i = 0; i < bufferSize; ++i) {\r\n attributeData[i] = dracoAttributeData.GetValue(i);\r\n }\r\n return attributeData;\r\n },\r\n function () {\r\n // DT_UINT16 - 4\r\n dracoAttributeData = new dracoDecoderModule.DracoInt16Array(bufferSize);\r\n const success = dracoDecoder.GetAttributeUInt16ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n dracoAttributeData\r\n );\r\n\r\n if (!success) {\r\n console.error(\"Bad stream\");\r\n }\r\n const attributeData = new Uint16Array(bufferSize);\r\n for (let i = 0; i < bufferSize; ++i) {\r\n attributeData[i] = dracoAttributeData.GetValue(i);\r\n }\r\n return attributeData;\r\n },\r\n function () {\r\n // DT_INT32 - 5\r\n dracoAttributeData = new dracoDecoderModule.DracoInt32Array(bufferSize);\r\n const success = dracoDecoder.GetAttributeInt32ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n dracoAttributeData\r\n );\r\n\r\n if (!success) {\r\n console.error(\"Bad stream\");\r\n }\r\n const attributeData = new Int32Array(bufferSize);\r\n for (let i = 0; i < bufferSize; ++i) {\r\n attributeData[i] = dracoAttributeData.GetValue(i);\r\n }\r\n return attributeData;\r\n },\r\n function () {\r\n // DT_UINT32 - 6\r\n dracoAttributeData = new dracoDecoderModule.DracoInt32Array(bufferSize);\r\n const success = dracoDecoder.GetAttributeUInt32ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n dracoAttributeData\r\n );\r\n\r\n if (!success) {\r\n console.error(\"Bad stream\");\r\n }\r\n const attributeData = new Uint32Array(bufferSize);\r\n for (let i = 0; i < bufferSize; ++i) {\r\n attributeData[i] = dracoAttributeData.GetValue(i);\r\n }\r\n return attributeData;\r\n },\r\n function () {\r\n // DT_INT64 - 7\r\n },\r\n function () {\r\n // DT_UINT64 - 8\r\n },\r\n function () {\r\n // DT_FLOAT32 - 9\r\n dracoAttributeData = new dracoDecoderModule.DracoFloat32Array(bufferSize);\r\n const success = dracoDecoder.GetAttributeFloatForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n dracoAttributeData\r\n );\r\n\r\n if (!success) {\r\n console.error(\"Bad stream\");\r\n }\r\n const attributeData = new Float32Array(bufferSize);\r\n for (let i = 0; i < bufferSize; ++i) {\r\n attributeData[i] = dracoAttributeData.GetValue(i);\r\n }\r\n return attributeData;\r\n },\r\n function () {\r\n // DT_FLOAT64 - 10\r\n },\r\n function () {\r\n // DT_FLOAT32 - 11\r\n dracoAttributeData = new dracoDecoderModule.DracoUInt8Array(bufferSize);\r\n const success = dracoDecoder.GetAttributeUInt8ForAllPoints(\r\n dracoGeometry,\r\n dracoAttribute,\r\n dracoAttributeData\r\n );\r\n\r\n if (!success) {\r\n console.error(\"Bad stream\");\r\n }\r\n const attributeData = new Uint8Array(bufferSize);\r\n for (let i = 0; i < bufferSize; ++i) {\r\n attributeData[i] = dracoAttributeData.GetValue(i);\r\n }\r\n return attributeData;\r\n },\r\n ];\r\n\r\n const attributeData = handlers[dracoAttribute.data_type()]();\r\n\r\n if (defined(dracoAttributeData)) {\r\n dracoDecoderModule.destroy(dracoAttributeData);\r\n }\r\n\r\n return attributeData;\r\n}\r\n\r\nconst binaryAttributeDecoders = {\r\n position: function (decodedGeometry, data, offset) {\r\n const count = decodedGeometry.vertexCount * 3;\r\n decodedGeometry.positions = new Float32Array(data, offset, count);\r\n offset += count * 4;\r\n return offset;\r\n },\r\n normal: function (decodedGeometry, data, offset) {\r\n const count = decodedGeometry.vertexCount * 3;\r\n decodedGeometry.normals = new Float32Array(data, offset, count);\r\n offset += count * 4;\r\n return offset;\r\n },\r\n uv0: function (decodedGeometry, data, offset) {\r\n const count = decodedGeometry.vertexCount * 2;\r\n decodedGeometry.uv0s = new Float32Array(data, offset, count);\r\n offset += count * 4;\r\n return offset;\r\n },\r\n color: function (decodedGeometry, data, offset) {\r\n const count = decodedGeometry.vertexCount * 4;\r\n decodedGeometry.colors = new Uint8Array(data, offset, count);\r\n offset += count;\r\n return offset;\r\n },\r\n featureId: function (decodedGeometry, data, offset) {\r\n // We don't need to use this for anything so just increment the offset\r\n const count = decodedGeometry.featureCount;\r\n offset += count * 8;\r\n return offset;\r\n },\r\n id: function (decodedGeometry, data, offset) {\r\n // We don't need to use this for anything so just increment the offset\r\n const count = decodedGeometry.featureCount;\r\n offset += count * 8;\r\n return offset;\r\n },\r\n faceRange: function (decodedGeometry, data, offset) {\r\n const count = decodedGeometry.featureCount * 2;\r\n decodedGeometry.faceRange = new Uint32Array(data, offset, count);\r\n offset += count * 4;\r\n return offset;\r\n },\r\n uvRegion: function (decodedGeometry, data, offset) {\r\n const count = decodedGeometry.vertexCount * 4;\r\n decodedGeometry[\"uv-region\"] = new Uint16Array(data, offset, count);\r\n offset += count * 2;\r\n return offset;\r\n },\r\n region: function (decodedGeometry, data, offset) {\r\n const count = decodedGeometry.vertexCount * 4;\r\n decodedGeometry[\"uv-region\"] = new Uint16Array(data, offset, count);\r\n offset += count * 2;\r\n return offset;\r\n },\r\n};\r\n\r\nfunction decodeBinaryGeometry(data, schema, bufferInfo, featureData) {\r\n // From this spec:\r\n // https://github.com/Esri/i3s-spec/blob/master/docs/1.7/defaultGeometrySchema.cmn.md\r\n const decodedGeometry = {\r\n vertexCount: 0,\r\n };\r\n\r\n const dataView = new DataView(data);\r\n\r\n try {\r\n let offset = 0;\r\n decodedGeometry.vertexCount = dataView.getUint32(offset, 1);\r\n offset += 4;\r\n\r\n decodedGeometry.featureCount = dataView.getUint32(offset, 1);\r\n offset += 4;\r\n\r\n if (defined(bufferInfo)) {\r\n for (\r\n let attrIndex = 0;\r\n attrIndex < bufferInfo.attributes.length;\r\n attrIndex++\r\n ) {\r\n if (\r\n defined(binaryAttributeDecoders[bufferInfo.attributes[attrIndex]])\r\n ) {\r\n offset = binaryAttributeDecoders[bufferInfo.attributes[attrIndex]](\r\n decodedGeometry,\r\n data,\r\n offset\r\n );\r\n } else {\r\n console.error(\r\n \"Unknown decoder for\",\r\n bufferInfo.attributes[attrIndex]\r\n );\r\n }\r\n }\r\n } else {\r\n let ordering = schema.ordering;\r\n let featureAttributeOrder = schema.featureAttributeOrder;\r\n\r\n if (\r\n defined(featureData) &&\r\n defined(featureData.geometryData) &&\r\n defined(featureData.geometryData[0]) &&\r\n defined(featureData.geometryData[0].params)\r\n ) {\r\n ordering = Object.keys(\r\n featureData.geometryData[0].params.vertexAttributes\r\n );\r\n featureAttributeOrder = Object.keys(\r\n featureData.geometryData[0].params.featureAttributes\r\n );\r\n }\r\n\r\n // Use default geometry schema\r\n for (let i = 0; i < ordering.length; i++) {\r\n const decoder = binaryAttributeDecoders[ordering[i]];\r\n if (!defined(decoder)) {\r\n console.log(ordering[i]);\r\n }\r\n offset = decoder(decodedGeometry, data, offset);\r\n }\r\n\r\n for (let j = 0; j < featureAttributeOrder.length; j++) {\r\n const curDecoder = binaryAttributeDecoders[featureAttributeOrder[j]];\r\n if (!defined(curDecoder)) {\r\n console.log(featureAttributeOrder[j]);\r\n }\r\n offset = curDecoder(decodedGeometry, data, offset);\r\n }\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n\r\n decodedGeometry.scale_x = 1;\r\n decodedGeometry.scale_y = 1;\r\n\r\n return decodedGeometry;\r\n}\r\n\r\nfunction decodeI3S(parameters) {\r\n // Decode the data into geometry\r\n const geometryData = decode(\r\n parameters.binaryData,\r\n parameters.schema,\r\n parameters.bufferInfo,\r\n parameters.featureData\r\n );\r\n\r\n // Adjust height from orthometric to ellipsoidal\r\n if (\r\n defined(parameters.geoidDataList) &&\r\n parameters.geoidDataList.length > 0\r\n ) {\r\n orthometricToEllipsoidal(\r\n geometryData.vertexCount,\r\n geometryData.positions,\r\n geometryData.scale_x,\r\n geometryData.scale_y,\r\n parameters.cartographicCenter,\r\n parameters.geoidDataList,\r\n false\r\n );\r\n }\r\n\r\n // Transform vertices to local\r\n transformToLocal(\r\n geometryData.vertexCount,\r\n geometryData.positions,\r\n geometryData.normals,\r\n parameters.cartographicCenter,\r\n parameters.cartesianCenter,\r\n parameters.parentRotation,\r\n parameters.ellipsoidRadiiSquare,\r\n geometryData.scale_x,\r\n geometryData.scale_y\r\n );\r\n\r\n // Adjust UVs if there is a UV region\r\n if (defined(geometryData.uv0s) && defined(geometryData[\"uv-region\"])) {\r\n cropUVs(\r\n geometryData.vertexCount,\r\n geometryData.uv0s,\r\n geometryData[\"uv-region\"]\r\n );\r\n }\r\n\r\n // Create the final buffer\r\n const meshData = generateGltfBuffer(\r\n geometryData.vertexCount,\r\n geometryData.indices,\r\n geometryData.positions,\r\n geometryData.normals,\r\n geometryData.uv0s,\r\n geometryData.colors\r\n );\r\n\r\n const customAttributes = {};\r\n if (defined(geometryData[\"feature-index\"])) {\r\n customAttributes.positions = geometryData.positions;\r\n customAttributes.indices = geometryData.indices;\r\n customAttributes.featureIndex = geometryData[\"feature-index\"];\r\n customAttributes.cartesianCenter = parameters.cartesianCenter;\r\n customAttributes.parentRotation = parameters.parentRotation;\r\n } else if (defined(geometryData[\"faceRange\"])) {\r\n customAttributes.positions = geometryData.positions;\r\n customAttributes.indices = geometryData.indices;\r\n customAttributes.sourceURL = parameters.url;\r\n customAttributes.cartesianCenter = parameters.cartesianCenter;\r\n customAttributes.parentRotation = parameters.parentRotation;\r\n\r\n // Build the feature index array from the faceRange.\r\n customAttributes.featureIndex = new Array(geometryData.positions.length);\r\n for (\r\n let range = 0;\r\n range < geometryData[\"faceRange\"].length - 1;\r\n range += 2\r\n ) {\r\n const curIndex = range / 2;\r\n const rangeStart = geometryData[\"faceRange\"][range];\r\n const rangeEnd = geometryData[\"faceRange\"][range + 1];\r\n for (let i = rangeStart; i <= rangeEnd; i++) {\r\n customAttributes.featureIndex[i * 3] = curIndex;\r\n customAttributes.featureIndex[i * 3 + 1] = curIndex;\r\n customAttributes.featureIndex[i * 3 + 2] = curIndex;\r\n }\r\n }\r\n }\r\n\r\n meshData._customAttributes = customAttributes;\r\n\r\n const results = {\r\n meshData: meshData,\r\n };\r\n\r\n return results;\r\n}\r\n\r\nfunction initWorker(dracoModule) {\r\n draco = dracoModule;\r\n self.onmessage = createTaskProcessorWorker(decodeI3S);\r\n self.postMessage(true);\r\n}\r\n\r\nfunction decodeI3SStart(event) {\r\n const data = event.data;\r\n\r\n // Expect the first message to be to load a web assembly module\r\n const wasmConfig = data.webAssemblyConfig;\r\n if (defined(wasmConfig)) {\r\n // Require and compile WebAssembly module, or use fallback if not supported\r\n return require([wasmConfig.modulePath], function (dracoModule) {\r\n if (defined(wasmConfig.wasmBinaryFile)) {\r\n if (!defined(dracoModule)) {\r\n dracoModule = self.DracoDecoderModule;\r\n }\r\n\r\n dracoModule(wasmConfig).then(function (compiledModule) {\r\n initWorker(compiledModule);\r\n });\r\n } else {\r\n initWorker(dracoModule());\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default decodeI3SStart;\r\n"],"names":["Cartesian3","WebMercatorProjection","Ellipsoid","Cartographic","CesiumMath","defined","Matrix3"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/Workers/defaultValue-0ab18f7d.js b/debug/cesium/Workers/defaultValue-0ab18f7d.js deleted file mode 100644 index 74ee026..0000000 --- a/debug/cesium/Workers/defaultValue-0ab18f7d.js +++ /dev/null @@ -1,77 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['exports'], (function (exports) { 'use strict'; - - /** - * @function - * - * @param {*} value The object. - * @returns {Boolean} Returns true if the object is defined, returns false otherwise. - * - * @example - * if (Cesium.defined(positions)) { - * doSomething(); - * } else { - * doSomethingElse(); - * } - */ - function defined(value) { - return value !== undefined && value !== null; - } - - /** - * Returns the first parameter if not undefined, otherwise the second parameter. - * Useful for setting a default value for a parameter. - * - * @function - * - * @param {*} a - * @param {*} b - * @returns {*} Returns the first parameter if not undefined, otherwise the second parameter. - * - * @example - * param = Cesium.defaultValue(param, 'default'); - */ - function defaultValue(a, b) { - if (a !== undefined && a !== null) { - return a; - } - return b; - } - - /** - * A frozen empty object that can be used as the default value for options passed as - * an object literal. - * @type {Object} - * @memberof defaultValue - */ - defaultValue.EMPTY_OBJECT = Object.freeze({}); - - exports.defaultValue = defaultValue; - exports.defined = defined; - -})); -//# sourceMappingURL=defaultValue-0ab18f7d.js.map diff --git a/debug/cesium/Workers/defaultValue-0ab18f7d.js.map b/debug/cesium/Workers/defaultValue-0ab18f7d.js.map deleted file mode 100644 index 0bc8624..0000000 --- a/debug/cesium/Workers/defaultValue-0ab18f7d.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"defaultValue-0ab18f7d.js","sources":["../../../Source/Core/defined.js","../../../Source/Core/defaultValue.js"],"sourcesContent":["/**\r\n * @function\r\n *\r\n * @param {*} value The object.\r\n * @returns {Boolean} Returns true if the object is defined, returns false otherwise.\r\n *\r\n * @example\r\n * if (Cesium.defined(positions)) {\r\n * doSomething();\r\n * } else {\r\n * doSomethingElse();\r\n * }\r\n */\r\nfunction defined(value) {\r\n return value !== undefined && value !== null;\r\n}\r\nexport default defined;\r\n","/**\r\n * Returns the first parameter if not undefined, otherwise the second parameter.\r\n * Useful for setting a default value for a parameter.\r\n *\r\n * @function\r\n *\r\n * @param {*} a\r\n * @param {*} b\r\n * @returns {*} Returns the first parameter if not undefined, otherwise the second parameter.\r\n *\r\n * @example\r\n * param = Cesium.defaultValue(param, 'default');\r\n */\r\nfunction defaultValue(a, b) {\r\n if (a !== undefined && a !== null) {\r\n return a;\r\n }\r\n return b;\r\n}\r\n\r\n/**\r\n * A frozen empty object that can be used as the default value for options passed as\r\n * an object literal.\r\n * @type {Object}\r\n * @memberof defaultValue\r\n */\r\ndefaultValue.EMPTY_OBJECT = Object.freeze({});\r\n\r\nexport default defaultValue;\r\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAAA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,OAAO,CAAC,KAAK,EAAE;EACxB,EAAE,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,CAAC;EAC/C;;ECfA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,SAAS,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE;EAC5B,EAAE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;EACrC,IAAI,OAAO,CAAC,CAAC;EACb,GAAG;EACH,EAAE,OAAO,CAAC,CAAC;EACX,CAAC;AACD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,YAAY,CAAC,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;;;;;;;;;"} \ No newline at end of file diff --git a/debug/cesium/Workers/package.js b/debug/cesium/Workers/package.js deleted file mode 100644 index cfe829c..0000000 --- a/debug/cesium/Workers/package.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -module.exports = { type: "commonjs" }; diff --git a/debug/cesium/Workers/package.json b/debug/cesium/Workers/package.json deleted file mode 100644 index 0292b99..0000000 --- a/debug/cesium/Workers/package.json +++ /dev/null @@ -1 +0,0 @@ -{"type":"commonjs"} \ No newline at end of file diff --git a/debug/cesium/Workers/transcodeKTX2.js b/debug/cesium/Workers/transcodeKTX2.js deleted file mode 100644 index d8691f9..0000000 --- a/debug/cesium/Workers/transcodeKTX2.js +++ /dev/null @@ -1,1542 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./defaultValue-0ab18f7d', './Check-d10e5f2e', './WebGLConstants-f27a5e29', './RuntimeError-e5c6a8b9', './createTaskProcessorWorker'], (function (defaultValue, Check, WebGLConstants, RuntimeError, createTaskProcessorWorker) { 'use strict'; - - /** - * The data type of a pixel. - * - * @enum {Number} - * @see PostProcessStage - */ - const PixelDatatype = { - UNSIGNED_BYTE: WebGLConstants.WebGLConstants.UNSIGNED_BYTE, - UNSIGNED_SHORT: WebGLConstants.WebGLConstants.UNSIGNED_SHORT, - UNSIGNED_INT: WebGLConstants.WebGLConstants.UNSIGNED_INT, - FLOAT: WebGLConstants.WebGLConstants.FLOAT, - HALF_FLOAT: WebGLConstants.WebGLConstants.HALF_FLOAT_OES, - UNSIGNED_INT_24_8: WebGLConstants.WebGLConstants.UNSIGNED_INT_24_8, - UNSIGNED_SHORT_4_4_4_4: WebGLConstants.WebGLConstants.UNSIGNED_SHORT_4_4_4_4, - UNSIGNED_SHORT_5_5_5_1: WebGLConstants.WebGLConstants.UNSIGNED_SHORT_5_5_5_1, - UNSIGNED_SHORT_5_6_5: WebGLConstants.WebGLConstants.UNSIGNED_SHORT_5_6_5, - }; - - /** - @private - */ - PixelDatatype.toWebGLConstant = function (pixelDatatype, context) { - switch (pixelDatatype) { - case PixelDatatype.UNSIGNED_BYTE: - return WebGLConstants.WebGLConstants.UNSIGNED_BYTE; - case PixelDatatype.UNSIGNED_SHORT: - return WebGLConstants.WebGLConstants.UNSIGNED_SHORT; - case PixelDatatype.UNSIGNED_INT: - return WebGLConstants.WebGLConstants.UNSIGNED_INT; - case PixelDatatype.FLOAT: - return WebGLConstants.WebGLConstants.FLOAT; - case PixelDatatype.HALF_FLOAT: - return context.webgl2 - ? WebGLConstants.WebGLConstants.HALF_FLOAT - : WebGLConstants.WebGLConstants.HALF_FLOAT_OES; - case PixelDatatype.UNSIGNED_INT_24_8: - return WebGLConstants.WebGLConstants.UNSIGNED_INT_24_8; - case PixelDatatype.UNSIGNED_SHORT_4_4_4_4: - return WebGLConstants.WebGLConstants.UNSIGNED_SHORT_4_4_4_4; - case PixelDatatype.UNSIGNED_SHORT_5_5_5_1: - return WebGLConstants.WebGLConstants.UNSIGNED_SHORT_5_5_5_1; - case PixelDatatype.UNSIGNED_SHORT_5_6_5: - return PixelDatatype.UNSIGNED_SHORT_5_6_5; - } - }; - - /** - @private - */ - PixelDatatype.isPacked = function (pixelDatatype) { - return ( - pixelDatatype === PixelDatatype.UNSIGNED_INT_24_8 || - pixelDatatype === PixelDatatype.UNSIGNED_SHORT_4_4_4_4 || - pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_5_5_1 || - pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_6_5 - ); - }; - - /** - @private - */ - PixelDatatype.sizeInBytes = function (pixelDatatype) { - switch (pixelDatatype) { - case PixelDatatype.UNSIGNED_BYTE: - return 1; - case PixelDatatype.UNSIGNED_SHORT: - case PixelDatatype.UNSIGNED_SHORT_4_4_4_4: - case PixelDatatype.UNSIGNED_SHORT_5_5_5_1: - case PixelDatatype.UNSIGNED_SHORT_5_6_5: - case PixelDatatype.HALF_FLOAT: - return 2; - case PixelDatatype.UNSIGNED_INT: - case PixelDatatype.FLOAT: - case PixelDatatype.UNSIGNED_INT_24_8: - return 4; - } - }; - - /** - @private - */ - PixelDatatype.validate = function (pixelDatatype) { - return ( - pixelDatatype === PixelDatatype.UNSIGNED_BYTE || - pixelDatatype === PixelDatatype.UNSIGNED_SHORT || - pixelDatatype === PixelDatatype.UNSIGNED_INT || - pixelDatatype === PixelDatatype.FLOAT || - pixelDatatype === PixelDatatype.HALF_FLOAT || - pixelDatatype === PixelDatatype.UNSIGNED_INT_24_8 || - pixelDatatype === PixelDatatype.UNSIGNED_SHORT_4_4_4_4 || - pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_5_5_1 || - pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_6_5 - ); - }; - - var PixelDatatype$1 = Object.freeze(PixelDatatype); - - /** - * The format of a pixel, i.e., the number of components it has and what they represent. - * - * @enum {Number} - */ - const PixelFormat = { - /** - * A pixel format containing a depth value. - * - * @type {Number} - * @constant - */ - DEPTH_COMPONENT: WebGLConstants.WebGLConstants.DEPTH_COMPONENT, - - /** - * A pixel format containing a depth and stencil value, most often used with {@link PixelDatatype.UNSIGNED_INT_24_8}. - * - * @type {Number} - * @constant - */ - DEPTH_STENCIL: WebGLConstants.WebGLConstants.DEPTH_STENCIL, - - /** - * A pixel format containing an alpha channel. - * - * @type {Number} - * @constant - */ - ALPHA: WebGLConstants.WebGLConstants.ALPHA, - - /** - * A pixel format containing red, green, and blue channels. - * - * @type {Number} - * @constant - */ - RGB: WebGLConstants.WebGLConstants.RGB, - - /** - * A pixel format containing red, green, blue, and alpha channels. - * - * @type {Number} - * @constant - */ - RGBA: WebGLConstants.WebGLConstants.RGBA, - - /** - * A pixel format containing a luminance (intensity) channel. - * - * @type {Number} - * @constant - */ - LUMINANCE: WebGLConstants.WebGLConstants.LUMINANCE, - - /** - * A pixel format containing luminance (intensity) and alpha channels. - * - * @type {Number} - * @constant - */ - LUMINANCE_ALPHA: WebGLConstants.WebGLConstants.LUMINANCE_ALPHA, - - /** - * A pixel format containing red, green, and blue channels that is DXT1 compressed. - * - * @type {Number} - * @constant - */ - RGB_DXT1: WebGLConstants.WebGLConstants.COMPRESSED_RGB_S3TC_DXT1_EXT, - - /** - * A pixel format containing red, green, blue, and alpha channels that is DXT1 compressed. - * - * @type {Number} - * @constant - */ - RGBA_DXT1: WebGLConstants.WebGLConstants.COMPRESSED_RGBA_S3TC_DXT1_EXT, - - /** - * A pixel format containing red, green, blue, and alpha channels that is DXT3 compressed. - * - * @type {Number} - * @constant - */ - RGBA_DXT3: WebGLConstants.WebGLConstants.COMPRESSED_RGBA_S3TC_DXT3_EXT, - - /** - * A pixel format containing red, green, blue, and alpha channels that is DXT5 compressed. - * - * @type {Number} - * @constant - */ - RGBA_DXT5: WebGLConstants.WebGLConstants.COMPRESSED_RGBA_S3TC_DXT5_EXT, - - /** - * A pixel format containing red, green, and blue channels that is PVR 4bpp compressed. - * - * @type {Number} - * @constant - */ - RGB_PVRTC_4BPPV1: WebGLConstants.WebGLConstants.COMPRESSED_RGB_PVRTC_4BPPV1_IMG, - - /** - * A pixel format containing red, green, and blue channels that is PVR 2bpp compressed. - * - * @type {Number} - * @constant - */ - RGB_PVRTC_2BPPV1: WebGLConstants.WebGLConstants.COMPRESSED_RGB_PVRTC_2BPPV1_IMG, - - /** - * A pixel format containing red, green, blue, and alpha channels that is PVR 4bpp compressed. - * - * @type {Number} - * @constant - */ - RGBA_PVRTC_4BPPV1: WebGLConstants.WebGLConstants.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, - - /** - * A pixel format containing red, green, blue, and alpha channels that is PVR 2bpp compressed. - * - * @type {Number} - * @constant - */ - RGBA_PVRTC_2BPPV1: WebGLConstants.WebGLConstants.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, - - /** - * A pixel format containing red, green, blue, and alpha channels that is ASTC compressed. - * - * @type {Number} - * @constant - */ - RGBA_ASTC: WebGLConstants.WebGLConstants.COMPRESSED_RGBA_ASTC_4x4_WEBGL, - - /** - * A pixel format containing red, green, and blue channels that is ETC1 compressed. - * - * @type {Number} - * @constant - */ - RGB_ETC1: WebGLConstants.WebGLConstants.COMPRESSED_RGB_ETC1_WEBGL, - - /** - * A pixel format containing red, green, and blue channels that is ETC2 compressed. - * - * @type {Number} - * @constant - */ - RGB8_ETC2: WebGLConstants.WebGLConstants.COMPRESSED_RGB8_ETC2, - - /** - * A pixel format containing red, green, blue, and alpha channels that is ETC2 compressed. - * - * @type {Number} - * @constant - */ - RGBA8_ETC2_EAC: WebGLConstants.WebGLConstants.COMPRESSED_RGBA8_ETC2_EAC, - - /** - * A pixel format containing red, green, blue, and alpha channels that is BC7 compressed. - * - * @type {Number} - * @constant - */ - RGBA_BC7: WebGLConstants.WebGLConstants.COMPRESSED_RGBA_BPTC_UNORM, - }; - - /** - * @private - */ - PixelFormat.componentsLength = function (pixelFormat) { - switch (pixelFormat) { - case PixelFormat.RGB: - return 3; - case PixelFormat.RGBA: - return 4; - case PixelFormat.LUMINANCE_ALPHA: - return 2; - case PixelFormat.ALPHA: - case PixelFormat.LUMINANCE: - return 1; - default: - return 1; - } - }; - - /** - * @private - */ - PixelFormat.validate = function (pixelFormat) { - return ( - pixelFormat === PixelFormat.DEPTH_COMPONENT || - pixelFormat === PixelFormat.DEPTH_STENCIL || - pixelFormat === PixelFormat.ALPHA || - pixelFormat === PixelFormat.RGB || - pixelFormat === PixelFormat.RGBA || - pixelFormat === PixelFormat.LUMINANCE || - pixelFormat === PixelFormat.LUMINANCE_ALPHA || - pixelFormat === PixelFormat.RGB_DXT1 || - pixelFormat === PixelFormat.RGBA_DXT1 || - pixelFormat === PixelFormat.RGBA_DXT3 || - pixelFormat === PixelFormat.RGBA_DXT5 || - pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 || - pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 || - pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 || - pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 || - pixelFormat === PixelFormat.RGBA_ASTC || - pixelFormat === PixelFormat.RGB_ETC1 || - pixelFormat === PixelFormat.RGB8_ETC2 || - pixelFormat === PixelFormat.RGBA8_ETC2_EAC || - pixelFormat === PixelFormat.RGBA_BC7 - ); - }; - - /** - * @private - */ - PixelFormat.isColorFormat = function (pixelFormat) { - return ( - pixelFormat === PixelFormat.ALPHA || - pixelFormat === PixelFormat.RGB || - pixelFormat === PixelFormat.RGBA || - pixelFormat === PixelFormat.LUMINANCE || - pixelFormat === PixelFormat.LUMINANCE_ALPHA - ); - }; - - /** - * @private - */ - PixelFormat.isDepthFormat = function (pixelFormat) { - return ( - pixelFormat === PixelFormat.DEPTH_COMPONENT || - pixelFormat === PixelFormat.DEPTH_STENCIL - ); - }; - - /** - * @private - */ - PixelFormat.isCompressedFormat = function (pixelFormat) { - return ( - pixelFormat === PixelFormat.RGB_DXT1 || - pixelFormat === PixelFormat.RGBA_DXT1 || - pixelFormat === PixelFormat.RGBA_DXT3 || - pixelFormat === PixelFormat.RGBA_DXT5 || - pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 || - pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 || - pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 || - pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 || - pixelFormat === PixelFormat.RGBA_ASTC || - pixelFormat === PixelFormat.RGB_ETC1 || - pixelFormat === PixelFormat.RGB8_ETC2 || - pixelFormat === PixelFormat.RGBA8_ETC2_EAC || - pixelFormat === PixelFormat.RGBA_BC7 - ); - }; - - /** - * @private - */ - PixelFormat.isDXTFormat = function (pixelFormat) { - return ( - pixelFormat === PixelFormat.RGB_DXT1 || - pixelFormat === PixelFormat.RGBA_DXT1 || - pixelFormat === PixelFormat.RGBA_DXT3 || - pixelFormat === PixelFormat.RGBA_DXT5 - ); - }; - - /** - * @private - */ - PixelFormat.isPVRTCFormat = function (pixelFormat) { - return ( - pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 || - pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 || - pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 || - pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 - ); - }; - - /** - * @private - */ - PixelFormat.isASTCFormat = function (pixelFormat) { - return pixelFormat === PixelFormat.RGBA_ASTC; - }; - - /** - * @private - */ - PixelFormat.isETC1Format = function (pixelFormat) { - return pixelFormat === PixelFormat.RGB_ETC1; - }; - - /** - * @private - */ - PixelFormat.isETC2Format = function (pixelFormat) { - return ( - pixelFormat === PixelFormat.RGB8_ETC2 || - pixelFormat === PixelFormat.RGBA8_ETC2_EAC - ); - }; - - /** - * @private - */ - PixelFormat.isBC7Format = function (pixelFormat) { - return pixelFormat === PixelFormat.RGBA_BC7; - }; - - /** - * @private - */ - PixelFormat.compressedTextureSizeInBytes = function ( - pixelFormat, - width, - height - ) { - switch (pixelFormat) { - case PixelFormat.RGB_DXT1: - case PixelFormat.RGBA_DXT1: - case PixelFormat.RGB_ETC1: - case PixelFormat.RGB8_ETC2: - return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8; - - case PixelFormat.RGBA_DXT3: - case PixelFormat.RGBA_DXT5: - case PixelFormat.RGBA_ASTC: - case PixelFormat.RGBA8_ETC2_EAC: - return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16; - - case PixelFormat.RGB_PVRTC_4BPPV1: - case PixelFormat.RGBA_PVRTC_4BPPV1: - return Math.floor((Math.max(width, 8) * Math.max(height, 8) * 4 + 7) / 8); - - case PixelFormat.RGB_PVRTC_2BPPV1: - case PixelFormat.RGBA_PVRTC_2BPPV1: - return Math.floor( - (Math.max(width, 16) * Math.max(height, 8) * 2 + 7) / 8 - ); - - case PixelFormat.RGBA_BC7: - return Math.ceil(width / 4) * Math.ceil(height / 4) * 16; - - default: - return 0; - } - }; - - /** - * @private - */ - PixelFormat.textureSizeInBytes = function ( - pixelFormat, - pixelDatatype, - width, - height - ) { - let componentsLength = PixelFormat.componentsLength(pixelFormat); - if (PixelDatatype$1.isPacked(pixelDatatype)) { - componentsLength = 1; - } - return ( - componentsLength * PixelDatatype$1.sizeInBytes(pixelDatatype) * width * height - ); - }; - - /** - * @private - */ - PixelFormat.alignmentInBytes = function (pixelFormat, pixelDatatype, width) { - const mod = - PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, width, 1) % 4; - return mod === 0 ? 4 : mod === 2 ? 2 : 1; - }; - - /** - * @private - */ - PixelFormat.createTypedArray = function ( - pixelFormat, - pixelDatatype, - width, - height - ) { - let constructor; - const sizeInBytes = PixelDatatype$1.sizeInBytes(pixelDatatype); - if (sizeInBytes === Uint8Array.BYTES_PER_ELEMENT) { - constructor = Uint8Array; - } else if (sizeInBytes === Uint16Array.BYTES_PER_ELEMENT) { - constructor = Uint16Array; - } else if ( - sizeInBytes === Float32Array.BYTES_PER_ELEMENT && - pixelDatatype === PixelDatatype$1.FLOAT - ) { - constructor = Float32Array; - } else { - constructor = Uint32Array; - } - - const size = PixelFormat.componentsLength(pixelFormat) * width * height; - return new constructor(size); - }; - - /** - * @private - */ - PixelFormat.flipY = function ( - bufferView, - pixelFormat, - pixelDatatype, - width, - height - ) { - if (height === 1) { - return bufferView; - } - const flipped = PixelFormat.createTypedArray( - pixelFormat, - pixelDatatype, - width, - height - ); - const numberOfComponents = PixelFormat.componentsLength(pixelFormat); - const textureWidth = width * numberOfComponents; - for (let i = 0; i < height; ++i) { - const row = i * width * numberOfComponents; - const flippedRow = (height - i - 1) * width * numberOfComponents; - for (let j = 0; j < textureWidth; ++j) { - flipped[flippedRow + j] = bufferView[row + j]; - } - } - return flipped; - }; - - /** - * @private - */ - PixelFormat.toInternalFormat = function (pixelFormat, pixelDatatype, context) { - // WebGL 1 require internalFormat to be the same as PixelFormat - if (!context.webgl2) { - return pixelFormat; - } - - // Convert pixelFormat to correct internalFormat for WebGL 2 - if (pixelFormat === PixelFormat.DEPTH_STENCIL) { - return WebGLConstants.WebGLConstants.DEPTH24_STENCIL8; - } - - if (pixelFormat === PixelFormat.DEPTH_COMPONENT) { - if (pixelDatatype === PixelDatatype$1.UNSIGNED_SHORT) { - return WebGLConstants.WebGLConstants.DEPTH_COMPONENT16; - } else if (pixelDatatype === PixelDatatype$1.UNSIGNED_INT) { - return WebGLConstants.WebGLConstants.DEPTH_COMPONENT24; - } - } - - if (pixelDatatype === PixelDatatype$1.FLOAT) { - switch (pixelFormat) { - case PixelFormat.RGBA: - return WebGLConstants.WebGLConstants.RGBA32F; - case PixelFormat.RGB: - return WebGLConstants.WebGLConstants.RGB32F; - case PixelFormat.RG: - return WebGLConstants.WebGLConstants.RG32F; - case PixelFormat.R: - return WebGLConstants.WebGLConstants.R32F; - } - } - - if (pixelDatatype === PixelDatatype$1.HALF_FLOAT) { - switch (pixelFormat) { - case PixelFormat.RGBA: - return WebGLConstants.WebGLConstants.RGBA16F; - case PixelFormat.RGB: - return WebGLConstants.WebGLConstants.RGB16F; - case PixelFormat.RG: - return WebGLConstants.WebGLConstants.RG16F; - case PixelFormat.R: - return WebGLConstants.WebGLConstants.R16F; - } - } - - return pixelFormat; - }; - - var PixelFormat$1 = Object.freeze(PixelFormat); - - /** - * Enum containing Vulkan Constant values by name. - * - * These match the constants from the {@link https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-definition|Vulkan 1.2 specification}. - * - * @enum {Number} - * @private - */ - const VulkanConstants = { - VK_FORMAT_UNDEFINED: 0, - VK_FORMAT_R4G4_UNORM_PACK8: 1, - VK_FORMAT_R4G4B4A4_UNORM_PACK16: 2, - VK_FORMAT_B4G4R4A4_UNORM_PACK16: 3, - VK_FORMAT_R5G6B5_UNORM_PACK16: 4, - VK_FORMAT_B5G6R5_UNORM_PACK16: 5, - VK_FORMAT_R5G5B5A1_UNORM_PACK16: 6, - VK_FORMAT_B5G5R5A1_UNORM_PACK16: 7, - VK_FORMAT_A1R5G5B5_UNORM_PACK16: 8, - VK_FORMAT_R8_UNORM: 9, - VK_FORMAT_R8_SNORM: 10, - VK_FORMAT_R8_USCALED: 11, - VK_FORMAT_R8_SSCALED: 12, - VK_FORMAT_R8_UINT: 13, - VK_FORMAT_R8_SINT: 14, - VK_FORMAT_R8_SRGB: 15, - VK_FORMAT_R8G8_UNORM: 16, - VK_FORMAT_R8G8_SNORM: 17, - VK_FORMAT_R8G8_USCALED: 18, - VK_FORMAT_R8G8_SSCALED: 19, - VK_FORMAT_R8G8_UINT: 20, - VK_FORMAT_R8G8_SINT: 21, - VK_FORMAT_R8G8_SRGB: 22, - VK_FORMAT_R8G8B8_UNORM: 23, - VK_FORMAT_R8G8B8_SNORM: 24, - VK_FORMAT_R8G8B8_USCALED: 25, - VK_FORMAT_R8G8B8_SSCALED: 26, - VK_FORMAT_R8G8B8_UINT: 27, - VK_FORMAT_R8G8B8_SINT: 28, - VK_FORMAT_R8G8B8_SRGB: 29, - VK_FORMAT_B8G8R8_UNORM: 30, - VK_FORMAT_B8G8R8_SNORM: 31, - VK_FORMAT_B8G8R8_USCALED: 32, - VK_FORMAT_B8G8R8_SSCALED: 33, - VK_FORMAT_B8G8R8_UINT: 34, - VK_FORMAT_B8G8R8_SINT: 35, - VK_FORMAT_B8G8R8_SRGB: 36, - VK_FORMAT_R8G8B8A8_UNORM: 37, - VK_FORMAT_R8G8B8A8_SNORM: 38, - VK_FORMAT_R8G8B8A8_USCALED: 39, - VK_FORMAT_R8G8B8A8_SSCALED: 40, - VK_FORMAT_R8G8B8A8_UINT: 41, - VK_FORMAT_R8G8B8A8_SINT: 42, - VK_FORMAT_R8G8B8A8_SRGB: 43, - VK_FORMAT_B8G8R8A8_UNORM: 44, - VK_FORMAT_B8G8R8A8_SNORM: 45, - VK_FORMAT_B8G8R8A8_USCALED: 46, - VK_FORMAT_B8G8R8A8_SSCALED: 47, - VK_FORMAT_B8G8R8A8_UINT: 48, - VK_FORMAT_B8G8R8A8_SINT: 49, - VK_FORMAT_B8G8R8A8_SRGB: 50, - VK_FORMAT_A8B8G8R8_UNORM_PACK32: 51, - VK_FORMAT_A8B8G8R8_SNORM_PACK32: 52, - VK_FORMAT_A8B8G8R8_USCALED_PACK32: 53, - VK_FORMAT_A8B8G8R8_SSCALED_PACK32: 54, - VK_FORMAT_A8B8G8R8_UINT_PACK32: 55, - VK_FORMAT_A8B8G8R8_SINT_PACK32: 56, - VK_FORMAT_A8B8G8R8_SRGB_PACK32: 57, - VK_FORMAT_A2R10G10B10_UNORM_PACK32: 58, - VK_FORMAT_A2R10G10B10_SNORM_PACK32: 59, - VK_FORMAT_A2R10G10B10_USCALED_PACK32: 60, - VK_FORMAT_A2R10G10B10_SSCALED_PACK32: 61, - VK_FORMAT_A2R10G10B10_UINT_PACK32: 62, - VK_FORMAT_A2R10G10B10_SINT_PACK32: 63, - VK_FORMAT_A2B10G10R10_UNORM_PACK32: 64, - VK_FORMAT_A2B10G10R10_SNORM_PACK32: 65, - VK_FORMAT_A2B10G10R10_USCALED_PACK32: 66, - VK_FORMAT_A2B10G10R10_SSCALED_PACK32: 67, - VK_FORMAT_A2B10G10R10_UINT_PACK32: 68, - VK_FORMAT_A2B10G10R10_SINT_PACK32: 69, - VK_FORMAT_R16_UNORM: 70, - VK_FORMAT_R16_SNORM: 71, - VK_FORMAT_R16_USCALED: 72, - VK_FORMAT_R16_SSCALED: 73, - VK_FORMAT_R16_UINT: 74, - VK_FORMAT_R16_SINT: 75, - VK_FORMAT_R16_SFLOAT: 76, - VK_FORMAT_R16G16_UNORM: 77, - VK_FORMAT_R16G16_SNORM: 78, - VK_FORMAT_R16G16_USCALED: 79, - VK_FORMAT_R16G16_SSCALED: 80, - VK_FORMAT_R16G16_UINT: 81, - VK_FORMAT_R16G16_SINT: 82, - VK_FORMAT_R16G16_SFLOAT: 83, - VK_FORMAT_R16G16B16_UNORM: 84, - VK_FORMAT_R16G16B16_SNORM: 85, - VK_FORMAT_R16G16B16_USCALED: 86, - VK_FORMAT_R16G16B16_SSCALED: 87, - VK_FORMAT_R16G16B16_UINT: 88, - VK_FORMAT_R16G16B16_SINT: 89, - VK_FORMAT_R16G16B16_SFLOAT: 90, - VK_FORMAT_R16G16B16A16_UNORM: 91, - VK_FORMAT_R16G16B16A16_SNORM: 92, - VK_FORMAT_R16G16B16A16_USCALED: 93, - VK_FORMAT_R16G16B16A16_SSCALED: 94, - VK_FORMAT_R16G16B16A16_UINT: 95, - VK_FORMAT_R16G16B16A16_SINT: 96, - VK_FORMAT_R16G16B16A16_SFLOAT: 97, - VK_FORMAT_R32_UINT: 98, - VK_FORMAT_R32_SINT: 99, - VK_FORMAT_R32_SFLOAT: 100, - VK_FORMAT_R32G32_UINT: 101, - VK_FORMAT_R32G32_SINT: 102, - VK_FORMAT_R32G32_SFLOAT: 103, - VK_FORMAT_R32G32B32_UINT: 104, - VK_FORMAT_R32G32B32_SINT: 105, - VK_FORMAT_R32G32B32_SFLOAT: 106, - VK_FORMAT_R32G32B32A32_UINT: 107, - VK_FORMAT_R32G32B32A32_SINT: 108, - VK_FORMAT_R32G32B32A32_SFLOAT: 109, - VK_FORMAT_R64_UINT: 110, - VK_FORMAT_R64_SINT: 111, - VK_FORMAT_R64_SFLOAT: 112, - VK_FORMAT_R64G64_UINT: 113, - VK_FORMAT_R64G64_SINT: 114, - VK_FORMAT_R64G64_SFLOAT: 115, - VK_FORMAT_R64G64B64_UINT: 116, - VK_FORMAT_R64G64B64_SINT: 117, - VK_FORMAT_R64G64B64_SFLOAT: 118, - VK_FORMAT_R64G64B64A64_UINT: 119, - VK_FORMAT_R64G64B64A64_SINT: 120, - VK_FORMAT_R64G64B64A64_SFLOAT: 121, - VK_FORMAT_B10G11R11_UFLOAT_PACK32: 122, - VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: 123, - VK_FORMAT_D16_UNORM: 124, - VK_FORMAT_X8_D24_UNORM_PACK32: 125, - VK_FORMAT_D32_SFLOAT: 126, - VK_FORMAT_S8_UINT: 127, - VK_FORMAT_D16_UNORM_S8_UINT: 128, - VK_FORMAT_D24_UNORM_S8_UINT: 129, - VK_FORMAT_D32_SFLOAT_S8_UINT: 130, - VK_FORMAT_BC1_RGB_UNORM_BLOCK: 131, - VK_FORMAT_BC1_RGB_SRGB_BLOCK: 132, - VK_FORMAT_BC1_RGBA_UNORM_BLOCK: 133, - VK_FORMAT_BC1_RGBA_SRGB_BLOCK: 134, - VK_FORMAT_BC2_UNORM_BLOCK: 135, - VK_FORMAT_BC2_SRGB_BLOCK: 136, - VK_FORMAT_BC3_UNORM_BLOCK: 137, - VK_FORMAT_BC3_SRGB_BLOCK: 138, - VK_FORMAT_BC4_UNORM_BLOCK: 139, - VK_FORMAT_BC4_SNORM_BLOCK: 140, - VK_FORMAT_BC5_UNORM_BLOCK: 141, - VK_FORMAT_BC5_SNORM_BLOCK: 142, - VK_FORMAT_BC6H_UFLOAT_BLOCK: 143, - VK_FORMAT_BC6H_SFLOAT_BLOCK: 144, - VK_FORMAT_BC7_UNORM_BLOCK: 145, - VK_FORMAT_BC7_SRGB_BLOCK: 146, - VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: 147, - VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: 148, - VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: 149, - VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: 150, - VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: 151, - VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: 152, - VK_FORMAT_EAC_R11_UNORM_BLOCK: 153, - VK_FORMAT_EAC_R11_SNORM_BLOCK: 154, - VK_FORMAT_EAC_R11G11_UNORM_BLOCK: 155, - VK_FORMAT_EAC_R11G11_SNORM_BLOCK: 156, - VK_FORMAT_ASTC_4x4_UNORM_BLOCK: 157, - VK_FORMAT_ASTC_4x4_SRGB_BLOCK: 158, - VK_FORMAT_ASTC_5x4_UNORM_BLOCK: 159, - VK_FORMAT_ASTC_5x4_SRGB_BLOCK: 160, - VK_FORMAT_ASTC_5x5_UNORM_BLOCK: 161, - VK_FORMAT_ASTC_5x5_SRGB_BLOCK: 162, - VK_FORMAT_ASTC_6x5_UNORM_BLOCK: 163, - VK_FORMAT_ASTC_6x5_SRGB_BLOCK: 164, - VK_FORMAT_ASTC_6x6_UNORM_BLOCK: 165, - VK_FORMAT_ASTC_6x6_SRGB_BLOCK: 166, - VK_FORMAT_ASTC_8x5_UNORM_BLOCK: 167, - VK_FORMAT_ASTC_8x5_SRGB_BLOCK: 168, - VK_FORMAT_ASTC_8x6_UNORM_BLOCK: 169, - VK_FORMAT_ASTC_8x6_SRGB_BLOCK: 170, - VK_FORMAT_ASTC_8x8_UNORM_BLOCK: 171, - VK_FORMAT_ASTC_8x8_SRGB_BLOCK: 172, - VK_FORMAT_ASTC_10x5_UNORM_BLOCK: 173, - VK_FORMAT_ASTC_10x5_SRGB_BLOCK: 174, - VK_FORMAT_ASTC_10x6_UNORM_BLOCK: 175, - VK_FORMAT_ASTC_10x6_SRGB_BLOCK: 176, - VK_FORMAT_ASTC_10x8_UNORM_BLOCK: 177, - VK_FORMAT_ASTC_10x8_SRGB_BLOCK: 178, - VK_FORMAT_ASTC_10x10_UNORM_BLOCK: 179, - VK_FORMAT_ASTC_10x10_SRGB_BLOCK: 180, - VK_FORMAT_ASTC_12x10_UNORM_BLOCK: 181, - VK_FORMAT_ASTC_12x10_SRGB_BLOCK: 182, - VK_FORMAT_ASTC_12x12_UNORM_BLOCK: 183, - VK_FORMAT_ASTC_12x12_SRGB_BLOCK: 184, - VK_FORMAT_G8B8G8R8_422_UNORM: 1000156000, - VK_FORMAT_B8G8R8G8_422_UNORM: 1000156001, - VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: 1000156002, - VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: 1000156003, - VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM: 1000156004, - VK_FORMAT_G8_B8R8_2PLANE_422_UNORM: 1000156005, - VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM: 1000156006, - VK_FORMAT_R10X6_UNORM_PACK16: 1000156007, - VK_FORMAT_R10X6G10X6_UNORM_2PACK16: 1000156008, - VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16: 1000156009, - VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16: 1000156010, - VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16: 1000156011, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16: 1000156012, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16: 1000156013, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16: 1000156014, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16: 1000156015, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16: 1000156016, - VK_FORMAT_R12X4_UNORM_PACK16: 1000156017, - VK_FORMAT_R12X4G12X4_UNORM_2PACK16: 1000156018, - VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16: 1000156019, - VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16: 1000156020, - VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16: 1000156021, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16: 1000156022, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16: 1000156023, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16: 1000156024, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16: 1000156025, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16: 1000156026, - VK_FORMAT_G16B16G16R16_422_UNORM: 1000156027, - VK_FORMAT_B16G16R16G16_422_UNORM: 1000156028, - VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM: 1000156029, - VK_FORMAT_G16_B16R16_2PLANE_420_UNORM: 1000156030, - VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM: 1000156031, - VK_FORMAT_G16_B16R16_2PLANE_422_UNORM: 1000156032, - VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM: 1000156033, - VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG: 1000054000, - VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG: 1000054001, - VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG: 1000054002, - VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG: 1000054003, - VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG: 1000054004, - VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG: 1000054005, - VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG: 1000054006, - VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: 1000054007, - VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT: 1000066000, - VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT: 1000066001, - VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT: 1000066002, - VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT: 1000066003, - VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT: 1000066004, - VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT: 1000066005, - VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT: 1000066006, - VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT: 1000066007, - VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT: 1000066008, - VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT: 1000066009, - VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT: 1000066010, - VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT: 1000066011, - VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT: 1000066012, - VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT: 1000066013, - VK_FORMAT_G8B8G8R8_422_UNORM_KHR: 1000156000, - VK_FORMAT_B8G8R8G8_422_UNORM_KHR: 1000156001, - VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR: 1000156002, - VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR: 1000156003, - VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR: 1000156004, - VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR: 1000156005, - VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR: 1000156006, - VK_FORMAT_R10X6_UNORM_PACK16_KHR: 1000156007, - VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR: 1000156008, - VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR: 1000156009, - VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR: 1000156010, - VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR: 1000156011, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR: 1000156012, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR: 1000156013, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR: 1000156014, - VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR: 1000156015, - VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR: 1000156016, - VK_FORMAT_R12X4_UNORM_PACK16_KHR: 1000156017, - VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR: 1000156018, - VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR: 1000156019, - VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR: 1000156020, - VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR: 1000156021, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR: 1000156022, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR: 1000156023, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR: 1000156024, - VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR: 1000156025, - VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR: 1000156026, - VK_FORMAT_G16B16G16R16_422_UNORM_KHR: 1000156027, - VK_FORMAT_B16G16R16G16_422_UNORM_KHR: 1000156028, - VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR: 1000156029, - VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR: 1000156030, - VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR: 1000156031, - VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR: 1000156032, - VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR: 1000156033, - }; - var VulkanConstants$1 = Object.freeze(VulkanConstants); - - /////////////////////////////////////////////////// - // KTX2 Header. - /////////////////////////////////////////////////// - const KHR_SUPERCOMPRESSION_NONE = 0; - // Data Format Descriptor (DFD). - /////////////////////////////////////////////////// - - const KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0; - const KHR_DF_VENDORID_KHRONOS = 0; - const KHR_DF_VERSION = 2; - const KHR_DF_MODEL_UNSPECIFIED = 0; - const KHR_DF_FLAG_ALPHA_STRAIGHT = 0; - const KHR_DF_TRANSFER_SRGB = 2; - const KHR_DF_PRIMARIES_BT709 = 1; - const KHR_DF_SAMPLE_DATATYPE_SIGNED = 0x40; - // VK FORMAT. - /////////////////////////////////////////////////// - - const VK_FORMAT_UNDEFINED = 0; - - /** - * Represents an unpacked KTX 2.0 texture container. Data for individual mip levels are stored in - * the `.levels` array, typically compressed in Basis Universal formats. Additional properties - * provide metadata required to process, transcode, and upload these textures. - */ - - class KTX2Container { - constructor() { - this.vkFormat = VK_FORMAT_UNDEFINED; - this.typeSize = 1; - this.pixelWidth = 0; - this.pixelHeight = 0; - this.pixelDepth = 0; - this.layerCount = 0; - this.faceCount = 1; - this.supercompressionScheme = KHR_SUPERCOMPRESSION_NONE; - this.levels = []; - this.dataFormatDescriptor = [{ - vendorId: KHR_DF_VENDORID_KHRONOS, - descriptorType: KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT, - descriptorBlockSize: 0, - versionNumber: KHR_DF_VERSION, - colorModel: KHR_DF_MODEL_UNSPECIFIED, - colorPrimaries: KHR_DF_PRIMARIES_BT709, - transferFunction: KHR_DF_TRANSFER_SRGB, - flags: KHR_DF_FLAG_ALPHA_STRAIGHT, - texelBlockDimension: [0, 0, 0, 0], - bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0], - samples: [] - }]; - this.keyValue = {}; - this.globalData = null; - } - - } - - class BufferReader { - constructor(data, byteOffset, byteLength, littleEndian) { - this._dataView = void 0; - this._littleEndian = void 0; - this._offset = void 0; - this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength); - this._littleEndian = littleEndian; - this._offset = 0; - } - - _nextUint8() { - const value = this._dataView.getUint8(this._offset); - - this._offset += 1; - return value; - } - - _nextUint16() { - const value = this._dataView.getUint16(this._offset, this._littleEndian); - - this._offset += 2; - return value; - } - - _nextUint32() { - const value = this._dataView.getUint32(this._offset, this._littleEndian); - - this._offset += 4; - return value; - } - - _nextUint64() { - const left = this._dataView.getUint32(this._offset, this._littleEndian); - - const right = this._dataView.getUint32(this._offset + 4, this._littleEndian); // TODO(cleanup): Just test this... - // const value = this._littleEndian ? left + (2 ** 32 * right) : (2 ** 32 * left) + right; - - - const value = left + 2 ** 32 * right; - this._offset += 8; - return value; - } - - _nextInt32() { - const value = this._dataView.getInt32(this._offset, this._littleEndian); - - this._offset += 4; - return value; - } - - _skip(bytes) { - this._offset += bytes; - return this; - } - - _scan(maxByteLength, term = 0x00) { - const byteOffset = this._offset; - let byteLength = 0; - - while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) { - byteLength++; - this._offset++; - } - - if (byteLength < maxByteLength) this._offset++; - return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength); - } - - } - // KTX2 Header. - /////////////////////////////////////////////////// - - const KTX2_ID = [// '´', 'K', 'T', 'X', '2', '0', 'ª', '\r', '\n', '\x1A', '\n' - 0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a]; - /** Decodes an ArrayBuffer to text. */ - - function decodeText(buffer) { - if (typeof TextDecoder !== 'undefined') { - return new TextDecoder().decode(buffer); - } - - return Buffer.from(buffer).toString('utf8'); - } - - /** - * Parses a KTX 2.0 file, returning an unpacked {@link KTX2Container} instance with all associated - * data. The container's mip levels and other binary data are pointers into the original file, not - * copies, so the original file should not be overwritten after reading. - * - * @param data Bytes of KTX 2.0 file, as Uint8Array or Buffer. - */ - - function read(data) { - /////////////////////////////////////////////////// - // KTX 2.0 Identifier. - /////////////////////////////////////////////////// - const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length); - - if (id[0] !== KTX2_ID[0] || // '´' - id[1] !== KTX2_ID[1] || // 'K' - id[2] !== KTX2_ID[2] || // 'T' - id[3] !== KTX2_ID[3] || // 'X' - id[4] !== KTX2_ID[4] || // ' ' - id[5] !== KTX2_ID[5] || // '2' - id[6] !== KTX2_ID[6] || // '0' - id[7] !== KTX2_ID[7] || // 'ª' - id[8] !== KTX2_ID[8] || // '\r' - id[9] !== KTX2_ID[9] || // '\n' - id[10] !== KTX2_ID[10] || // '\x1A' - id[11] !== KTX2_ID[11] // '\n' - ) { - throw new Error('Missing KTX 2.0 identifier.'); - } - - const container = new KTX2Container(); /////////////////////////////////////////////////// - // Header. - /////////////////////////////////////////////////// - - const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT; - const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true); - container.vkFormat = headerReader._nextUint32(); - container.typeSize = headerReader._nextUint32(); - container.pixelWidth = headerReader._nextUint32(); - container.pixelHeight = headerReader._nextUint32(); - container.pixelDepth = headerReader._nextUint32(); - container.layerCount = headerReader._nextUint32(); - container.faceCount = headerReader._nextUint32(); - - const levelCount = headerReader._nextUint32(); - - container.supercompressionScheme = headerReader._nextUint32(); - - const dfdByteOffset = headerReader._nextUint32(); - - const dfdByteLength = headerReader._nextUint32(); - - const kvdByteOffset = headerReader._nextUint32(); - - const kvdByteLength = headerReader._nextUint32(); - - const sgdByteOffset = headerReader._nextUint64(); - - const sgdByteLength = headerReader._nextUint64(); /////////////////////////////////////////////////// - // Level Index. - /////////////////////////////////////////////////// - - - const levelByteLength = levelCount * 3 * 8; - const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true); - - for (let i = 0; i < levelCount; i++) { - container.levels.push({ - levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()), - uncompressedByteLength: levelReader._nextUint64() - }); - } /////////////////////////////////////////////////// - // Data Format Descriptor (DFD). - /////////////////////////////////////////////////// - - - const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true); - const dfd = { - vendorId: dfdReader._skip(4 - /* totalSize */ - )._nextUint16(), - descriptorType: dfdReader._nextUint16(), - versionNumber: dfdReader._nextUint16(), - descriptorBlockSize: dfdReader._nextUint16(), - colorModel: dfdReader._nextUint8(), - colorPrimaries: dfdReader._nextUint8(), - transferFunction: dfdReader._nextUint8(), - flags: dfdReader._nextUint8(), - texelBlockDimension: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()], - bytesPlane: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()], - samples: [] - }; - const sampleStart = 6; - const sampleWords = 4; - const numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords; - - for (let i = 0; i < numSamples; i++) { - const sample = { - bitOffset: dfdReader._nextUint16(), - bitLength: dfdReader._nextUint8(), - channelType: dfdReader._nextUint8(), - samplePosition: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()], - sampleLower: -Infinity, - sampleUpper: Infinity - }; - - if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) { - sample.sampleLower = dfdReader._nextInt32(); - sample.sampleUpper = dfdReader._nextInt32(); - } else { - sample.sampleLower = dfdReader._nextUint32(); - sample.sampleUpper = dfdReader._nextUint32(); - } - - dfd.samples[i] = sample; - } - - container.dataFormatDescriptor.length = 0; - container.dataFormatDescriptor.push(dfd); /////////////////////////////////////////////////// - // Key/Value Data (KVD). - /////////////////////////////////////////////////// - - const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true); - - while (kvdReader._offset < kvdByteLength) { - const keyValueByteLength = kvdReader._nextUint32(); - - const keyData = kvdReader._scan(keyValueByteLength); - - const key = decodeText(keyData); - - const valueData = kvdReader._scan(keyValueByteLength - keyData.byteLength); - - container.keyValue[key] = key.match(/^ktx/i) ? decodeText(valueData) : valueData; // 4-byte alignment. - - if (kvdReader._offset % 4) kvdReader._skip(4 - kvdReader._offset % 4); - } /////////////////////////////////////////////////// - // Supercompression Global Data (SGD). - /////////////////////////////////////////////////// - - - if (sgdByteLength <= 0) return container; - const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true); - - const endpointCount = sgdReader._nextUint16(); - - const selectorCount = sgdReader._nextUint16(); - - const endpointsByteLength = sgdReader._nextUint32(); - - const selectorsByteLength = sgdReader._nextUint32(); - - const tablesByteLength = sgdReader._nextUint32(); - - const extendedByteLength = sgdReader._nextUint32(); - - const imageDescs = []; - - for (let i = 0; i < levelCount; i++) { - imageDescs.push({ - imageFlags: sgdReader._nextUint32(), - rgbSliceByteOffset: sgdReader._nextUint32(), - rgbSliceByteLength: sgdReader._nextUint32(), - alphaSliceByteOffset: sgdReader._nextUint32(), - alphaSliceByteLength: sgdReader._nextUint32() - }); - } - - const endpointsByteOffset = sgdByteOffset + sgdReader._offset; - const selectorsByteOffset = endpointsByteOffset + endpointsByteLength; - const tablesByteOffset = selectorsByteOffset + selectorsByteLength; - const extendedByteOffset = tablesByteOffset + tablesByteLength; - const endpointsData = new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength); - const selectorsData = new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength); - const tablesData = new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength); - const extendedData = new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength); - container.globalData = { - endpointCount, - selectorCount, - imageDescs, - endpointsData, - selectorsData, - tablesData, - extendedData - }; - return container; - } - - /* global require */ - - const faceOrder = [ - "positiveX", - "negativeX", - "positiveY", - "negativeY", - "positiveZ", - "negativeZ", - ]; - - // Flags - const colorModelETC1S = 163; - const colorModelUASTC = 166; - - let transcoderModule; - function transcode(parameters, transferableObjects) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.object("transcoderModule", transcoderModule); - //>>includeEnd('debug'); - - const data = parameters.ktx2Buffer; - const supportedTargetFormats = parameters.supportedTargetFormats; - let header; - try { - header = read(data); - } catch (e) { - throw new RuntimeError.RuntimeError("Invalid KTX2 file."); - } - - if (header.layerCount !== 0) { - throw new RuntimeError.RuntimeError("KTX2 texture arrays are not supported."); - } - - if (header.pixelDepth !== 0) { - throw new RuntimeError.RuntimeError("KTX2 3D textures are unsupported."); - } - - const dfd = header.dataFormatDescriptor[0]; - const result = new Array(header.levelCount); - - if ( - header.vkFormat === 0x0 && - (dfd.colorModel === colorModelETC1S || dfd.colorModel === colorModelUASTC) - ) { - // Compressed, initialize transcoder module - transcodeCompressed( - data, - header, - supportedTargetFormats, - transcoderModule, - transferableObjects, - result - ); - } else { - transferableObjects.push(data.buffer); - parseUncompressed(header, result); - } - - return result; - } - - // Parser for uncompressed - function parseUncompressed(header, result) { - const internalFormat = - header.vkFormat === VulkanConstants$1.VK_FORMAT_R8G8B8_SRGB - ? PixelFormat$1.RGB - : PixelFormat$1.RGBA; - let datatype; - if (header.vkFormat === VulkanConstants$1.VK_FORMAT_R8G8B8A8_UNORM) { - datatype = PixelDatatype$1.UNSIGNED_BYTE; - } else if ( - header.vkFormat === VulkanConstants$1.VK_FORMAT_R16G16B16A16_SFLOAT - ) { - datatype = PixelDatatype$1.HALF_FLOAT; - } else if ( - header.vkFormat === VulkanConstants$1.VK_FORMAT_R32G32B32A32_SFLOAT - ) { - datatype = PixelDatatype$1.FLOAT; - } - - for (let i = 0; i < header.levels.length; ++i) { - const level = {}; - result[i] = level; - const levelBuffer = header.levels[i].levelData; - - const width = header.pixelWidth >> i; - const height = header.pixelHeight >> i; - const faceLength = - width * height * PixelFormat$1.componentsLength(internalFormat); - - for (let j = 0; j < header.faceCount; ++j) { - // multiply levelBuffer.byteOffset by the size in bytes of the pixel data type - const faceByteOffset = - levelBuffer.byteOffset + faceLength * header.typeSize * j; - let faceView; - if (!defaultValue.defined(datatype) || PixelDatatype$1.sizeInBytes(datatype) === 1) { - faceView = new Uint8Array( - levelBuffer.buffer, - faceByteOffset, - faceLength - ); - } else if (PixelDatatype$1.sizeInBytes(datatype) === 2) { - faceView = new Uint16Array( - levelBuffer.buffer, - faceByteOffset, - faceLength - ); - } else { - faceView = new Float32Array( - levelBuffer.buffer, - faceByteOffset, - faceLength - ); - } - - level[faceOrder[j]] = { - internalFormat: internalFormat, - datatype: datatype, - width: width, - height: height, - levelBuffer: faceView, - }; - } - } - } - - function transcodeCompressed( - data, - header, - supportedTargetFormats, - transcoderModule, - transferableObjects, - result - ) { - const ktx2File = new transcoderModule.KTX2File(data); - let width = ktx2File.getWidth(); - let height = ktx2File.getHeight(); - const levels = ktx2File.getLevels(); - const hasAlpha = ktx2File.getHasAlpha(); - - if (!(width > 0) || !(height > 0) || !(levels > 0)) { - ktx2File.close(); - ktx2File.delete(); - throw new RuntimeError.RuntimeError("Invalid KTX2 file"); - } - - let internalFormat, transcoderFormat; - const dfd = header.dataFormatDescriptor[0]; - const BasisFormat = transcoderModule.transcoder_texture_format; - - // Determine target format based on platform support - if (dfd.colorModel === colorModelETC1S) { - if (supportedTargetFormats.etc) { - internalFormat = hasAlpha - ? PixelFormat$1.RGBA8_ETC2_EAC - : PixelFormat$1.RGB8_ETC2; - transcoderFormat = hasAlpha - ? BasisFormat.cTFETC2_RGBA - : BasisFormat.cTFETC1_RGB; - } else if (supportedTargetFormats.etc1 && !hasAlpha) { - internalFormat = PixelFormat$1.RGB_ETC1; - transcoderFormat = BasisFormat.cTFETC1_RGB; - } else if (supportedTargetFormats.s3tc) { - internalFormat = hasAlpha ? PixelFormat$1.RGBA_DXT5 : PixelFormat$1.RGB_DXT1; - transcoderFormat = hasAlpha - ? BasisFormat.cTFBC3_RGBA - : BasisFormat.cTFBC1_RGB; - } else if (supportedTargetFormats.pvrtc) { - internalFormat = hasAlpha - ? PixelFormat$1.RGBA_PVRTC_4BPPV1 - : PixelFormat$1.RGB_PVRTC_4BPPV1; - transcoderFormat = hasAlpha - ? BasisFormat.cTFPVRTC1_4_RGBA - : BasisFormat.cTFPVRTC1_4_RGB; - } else if (supportedTargetFormats.astc) { - internalFormat = PixelFormat$1.RGBA_ASTC; - transcoderFormat = BasisFormat.cTFASTC_4x4_RGBA; - } else if (supportedTargetFormats.bc7) { - internalFormat = PixelFormat$1.RGBA_BC7; - transcoderFormat = BasisFormat.cTFBC7_RGBA; - } else { - throw new RuntimeError.RuntimeError( - "No transcoding format target available for ETC1S compressed ktx2." - ); - } - } else if (dfd.colorModel === colorModelUASTC) { - if (supportedTargetFormats.astc) { - internalFormat = PixelFormat$1.RGBA_ASTC; - transcoderFormat = BasisFormat.cTFASTC_4x4_RGBA; - } else if (supportedTargetFormats.bc7) { - internalFormat = PixelFormat$1.RGBA_BC7; - transcoderFormat = BasisFormat.cTFBC7_RGBA; - } else if (supportedTargetFormats.s3tc) { - internalFormat = hasAlpha ? PixelFormat$1.RGBA_DXT5 : PixelFormat$1.RGB_DXT1; - transcoderFormat = hasAlpha - ? BasisFormat.cTFBC3_RGBA - : BasisFormat.cTFBC1_RGB; - } else if (supportedTargetFormats.etc) { - internalFormat = hasAlpha - ? PixelFormat$1.RGBA8_ETC2_EAC - : PixelFormat$1.RGB8_ETC2; - transcoderFormat = hasAlpha - ? BasisFormat.cTFETC2_RGBA - : BasisFormat.cTFETC1_RGB; - } else if (supportedTargetFormats.etc1 && !hasAlpha) { - internalFormat = PixelFormat$1.RGB_ETC1; - transcoderFormat = BasisFormat.cTFETC1_RGB; - } else if (supportedTargetFormats.pvrtc) { - internalFormat = hasAlpha - ? PixelFormat$1.RGBA_PVRTC_4BPPV1 - : PixelFormat$1.RGB_PVRTC_4BPPV1; - transcoderFormat = hasAlpha - ? BasisFormat.cTFPVRTC1_4_RGBA - : BasisFormat.cTFPVRTC1_4_RGB; - } else { - throw new RuntimeError.RuntimeError( - "No transcoding format target available for UASTC compressed ktx2." - ); - } - } - - if (!ktx2File.startTranscoding()) { - ktx2File.close(); - ktx2File.delete(); - throw new RuntimeError.RuntimeError("startTranscoding() failed"); - } - - for (let i = 0; i < header.levels.length; ++i) { - const level = {}; - result[i] = level; - width = header.pixelWidth >> i; - height = header.pixelHeight >> i; - - // Since supercompressed cubemaps are unsupported, this function - // does not iterate over KTX2 faces and assumes faceCount = 1. - - const dstSize = ktx2File.getImageTranscodedSizeInBytes( - i, // level index - 0, // layer index - 0, // face index - transcoderFormat.value - ); - const dst = new Uint8Array(dstSize); - - const transcoded = ktx2File.transcodeImage( - dst, - i, // level index - 0, // layer index - 0, // face index - transcoderFormat.value, - 0, // get_alpha_for_opaque_formats - -1, // channel0 - -1 // channel1 - ); - - if (!defaultValue.defined(transcoded)) { - throw new RuntimeError.RuntimeError("transcodeImage() failed."); - } - - transferableObjects.push(dst.buffer); - - level[faceOrder[0]] = { - internalFormat: internalFormat, - width: width, - height: height, - levelBuffer: dst, - }; - } - - ktx2File.close(); - ktx2File.delete(); - return result; - } - - function initWorker(compiledModule) { - transcoderModule = compiledModule; - transcoderModule.initializeBasis(); - - self.onmessage = createTaskProcessorWorker(transcode); - self.postMessage(true); - } - - function transcodeKTX2(event) { - const data = event.data; - - // Expect the first message to be to load a web assembly module - const wasmConfig = data.webAssemblyConfig; - if (defaultValue.defined(wasmConfig)) { - // Require and compile WebAssembly module, or use fallback if not supported - return require([wasmConfig.modulePath], function (mscBasisTranscoder) { - if (defaultValue.defined(wasmConfig.wasmBinaryFile)) { - if (!defaultValue.defined(mscBasisTranscoder)) { - mscBasisTranscoder = self.MSC_TRANSCODER; - } - - mscBasisTranscoder(wasmConfig).then(function (compiledModule) { - initWorker(compiledModule); - }); - } else { - return mscBasisTranscoder().then(function (transcoder) { - initWorker(transcoder); - }); - } - }); - } - } - - return transcodeKTX2; - -})); -//# sourceMappingURL=transcodeKTX2.js.map diff --git a/debug/cesium/Workers/transcodeKTX2.js.map b/debug/cesium/Workers/transcodeKTX2.js.map deleted file mode 100644 index 798da5b..0000000 --- a/debug/cesium/Workers/transcodeKTX2.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"transcodeKTX2.js","sources":["../../../Source/Renderer/PixelDatatype.js","../../../Source/Core/PixelFormat.js","../../../Source/Core/VulkanConstants.js","../../../node_modules/ktx-parse/dist/ktx-parse.modern.js","../../../Source/WorkersES6/transcodeKTX2.js"],"sourcesContent":["import WebGLConstants from \"../Core/WebGLConstants.js\";\r\n\r\n/**\r\n * The data type of a pixel.\r\n *\r\n * @enum {Number}\r\n * @see PostProcessStage\r\n */\r\nconst PixelDatatype = {\r\n UNSIGNED_BYTE: WebGLConstants.UNSIGNED_BYTE,\r\n UNSIGNED_SHORT: WebGLConstants.UNSIGNED_SHORT,\r\n UNSIGNED_INT: WebGLConstants.UNSIGNED_INT,\r\n FLOAT: WebGLConstants.FLOAT,\r\n HALF_FLOAT: WebGLConstants.HALF_FLOAT_OES,\r\n UNSIGNED_INT_24_8: WebGLConstants.UNSIGNED_INT_24_8,\r\n UNSIGNED_SHORT_4_4_4_4: WebGLConstants.UNSIGNED_SHORT_4_4_4_4,\r\n UNSIGNED_SHORT_5_5_5_1: WebGLConstants.UNSIGNED_SHORT_5_5_5_1,\r\n UNSIGNED_SHORT_5_6_5: WebGLConstants.UNSIGNED_SHORT_5_6_5,\r\n};\r\n\r\n/**\r\n @private\r\n*/\r\nPixelDatatype.toWebGLConstant = function (pixelDatatype, context) {\r\n switch (pixelDatatype) {\r\n case PixelDatatype.UNSIGNED_BYTE:\r\n return WebGLConstants.UNSIGNED_BYTE;\r\n case PixelDatatype.UNSIGNED_SHORT:\r\n return WebGLConstants.UNSIGNED_SHORT;\r\n case PixelDatatype.UNSIGNED_INT:\r\n return WebGLConstants.UNSIGNED_INT;\r\n case PixelDatatype.FLOAT:\r\n return WebGLConstants.FLOAT;\r\n case PixelDatatype.HALF_FLOAT:\r\n return context.webgl2\r\n ? WebGLConstants.HALF_FLOAT\r\n : WebGLConstants.HALF_FLOAT_OES;\r\n case PixelDatatype.UNSIGNED_INT_24_8:\r\n return WebGLConstants.UNSIGNED_INT_24_8;\r\n case PixelDatatype.UNSIGNED_SHORT_4_4_4_4:\r\n return WebGLConstants.UNSIGNED_SHORT_4_4_4_4;\r\n case PixelDatatype.UNSIGNED_SHORT_5_5_5_1:\r\n return WebGLConstants.UNSIGNED_SHORT_5_5_5_1;\r\n case PixelDatatype.UNSIGNED_SHORT_5_6_5:\r\n return PixelDatatype.UNSIGNED_SHORT_5_6_5;\r\n }\r\n};\r\n\r\n/**\r\n @private\r\n*/\r\nPixelDatatype.isPacked = function (pixelDatatype) {\r\n return (\r\n pixelDatatype === PixelDatatype.UNSIGNED_INT_24_8 ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_4_4_4_4 ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_5_5_1 ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_6_5\r\n );\r\n};\r\n\r\n/**\r\n @private\r\n*/\r\nPixelDatatype.sizeInBytes = function (pixelDatatype) {\r\n switch (pixelDatatype) {\r\n case PixelDatatype.UNSIGNED_BYTE:\r\n return 1;\r\n case PixelDatatype.UNSIGNED_SHORT:\r\n case PixelDatatype.UNSIGNED_SHORT_4_4_4_4:\r\n case PixelDatatype.UNSIGNED_SHORT_5_5_5_1:\r\n case PixelDatatype.UNSIGNED_SHORT_5_6_5:\r\n case PixelDatatype.HALF_FLOAT:\r\n return 2;\r\n case PixelDatatype.UNSIGNED_INT:\r\n case PixelDatatype.FLOAT:\r\n case PixelDatatype.UNSIGNED_INT_24_8:\r\n return 4;\r\n }\r\n};\r\n\r\n/**\r\n @private\r\n*/\r\nPixelDatatype.validate = function (pixelDatatype) {\r\n return (\r\n pixelDatatype === PixelDatatype.UNSIGNED_BYTE ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_INT ||\r\n pixelDatatype === PixelDatatype.FLOAT ||\r\n pixelDatatype === PixelDatatype.HALF_FLOAT ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_INT_24_8 ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_4_4_4_4 ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_5_5_1 ||\r\n pixelDatatype === PixelDatatype.UNSIGNED_SHORT_5_6_5\r\n );\r\n};\r\n\r\nexport default Object.freeze(PixelDatatype);\r\n","import PixelDatatype from \"../Renderer/PixelDatatype.js\";\r\nimport WebGLConstants from \"./WebGLConstants.js\";\r\n\r\n/**\r\n * The format of a pixel, i.e., the number of components it has and what they represent.\r\n *\r\n * @enum {Number}\r\n */\r\nconst PixelFormat = {\r\n /**\r\n * A pixel format containing a depth value.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n DEPTH_COMPONENT: WebGLConstants.DEPTH_COMPONENT,\r\n\r\n /**\r\n * A pixel format containing a depth and stencil value, most often used with {@link PixelDatatype.UNSIGNED_INT_24_8}.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n DEPTH_STENCIL: WebGLConstants.DEPTH_STENCIL,\r\n\r\n /**\r\n * A pixel format containing an alpha channel.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n ALPHA: WebGLConstants.ALPHA,\r\n\r\n /**\r\n * A pixel format containing red, green, and blue channels.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGB: WebGLConstants.RGB,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA: WebGLConstants.RGBA,\r\n\r\n /**\r\n * A pixel format containing a luminance (intensity) channel.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n LUMINANCE: WebGLConstants.LUMINANCE,\r\n\r\n /**\r\n * A pixel format containing luminance (intensity) and alpha channels.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n LUMINANCE_ALPHA: WebGLConstants.LUMINANCE_ALPHA,\r\n\r\n /**\r\n * A pixel format containing red, green, and blue channels that is DXT1 compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGB_DXT1: WebGLConstants.COMPRESSED_RGB_S3TC_DXT1_EXT,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels that is DXT1 compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA_DXT1: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT1_EXT,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels that is DXT3 compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA_DXT3: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT3_EXT,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels that is DXT5 compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA_DXT5: WebGLConstants.COMPRESSED_RGBA_S3TC_DXT5_EXT,\r\n\r\n /**\r\n * A pixel format containing red, green, and blue channels that is PVR 4bpp compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGB_PVRTC_4BPPV1: WebGLConstants.COMPRESSED_RGB_PVRTC_4BPPV1_IMG,\r\n\r\n /**\r\n * A pixel format containing red, green, and blue channels that is PVR 2bpp compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGB_PVRTC_2BPPV1: WebGLConstants.COMPRESSED_RGB_PVRTC_2BPPV1_IMG,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels that is PVR 4bpp compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA_PVRTC_4BPPV1: WebGLConstants.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels that is PVR 2bpp compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA_PVRTC_2BPPV1: WebGLConstants.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels that is ASTC compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA_ASTC: WebGLConstants.COMPRESSED_RGBA_ASTC_4x4_WEBGL,\r\n\r\n /**\r\n * A pixel format containing red, green, and blue channels that is ETC1 compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGB_ETC1: WebGLConstants.COMPRESSED_RGB_ETC1_WEBGL,\r\n\r\n /**\r\n * A pixel format containing red, green, and blue channels that is ETC2 compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGB8_ETC2: WebGLConstants.COMPRESSED_RGB8_ETC2,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels that is ETC2 compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA8_ETC2_EAC: WebGLConstants.COMPRESSED_RGBA8_ETC2_EAC,\r\n\r\n /**\r\n * A pixel format containing red, green, blue, and alpha channels that is BC7 compressed.\r\n *\r\n * @type {Number}\r\n * @constant\r\n */\r\n RGBA_BC7: WebGLConstants.COMPRESSED_RGBA_BPTC_UNORM,\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.componentsLength = function (pixelFormat) {\r\n switch (pixelFormat) {\r\n case PixelFormat.RGB:\r\n return 3;\r\n case PixelFormat.RGBA:\r\n return 4;\r\n case PixelFormat.LUMINANCE_ALPHA:\r\n return 2;\r\n case PixelFormat.ALPHA:\r\n case PixelFormat.LUMINANCE:\r\n return 1;\r\n default:\r\n return 1;\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.validate = function (pixelFormat) {\r\n return (\r\n pixelFormat === PixelFormat.DEPTH_COMPONENT ||\r\n pixelFormat === PixelFormat.DEPTH_STENCIL ||\r\n pixelFormat === PixelFormat.ALPHA ||\r\n pixelFormat === PixelFormat.RGB ||\r\n pixelFormat === PixelFormat.RGBA ||\r\n pixelFormat === PixelFormat.LUMINANCE ||\r\n pixelFormat === PixelFormat.LUMINANCE_ALPHA ||\r\n pixelFormat === PixelFormat.RGB_DXT1 ||\r\n pixelFormat === PixelFormat.RGBA_DXT1 ||\r\n pixelFormat === PixelFormat.RGBA_DXT3 ||\r\n pixelFormat === PixelFormat.RGBA_DXT5 ||\r\n pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\r\n pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\r\n pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\r\n pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 ||\r\n pixelFormat === PixelFormat.RGBA_ASTC ||\r\n pixelFormat === PixelFormat.RGB_ETC1 ||\r\n pixelFormat === PixelFormat.RGB8_ETC2 ||\r\n pixelFormat === PixelFormat.RGBA8_ETC2_EAC ||\r\n pixelFormat === PixelFormat.RGBA_BC7\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isColorFormat = function (pixelFormat) {\r\n return (\r\n pixelFormat === PixelFormat.ALPHA ||\r\n pixelFormat === PixelFormat.RGB ||\r\n pixelFormat === PixelFormat.RGBA ||\r\n pixelFormat === PixelFormat.LUMINANCE ||\r\n pixelFormat === PixelFormat.LUMINANCE_ALPHA\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isDepthFormat = function (pixelFormat) {\r\n return (\r\n pixelFormat === PixelFormat.DEPTH_COMPONENT ||\r\n pixelFormat === PixelFormat.DEPTH_STENCIL\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isCompressedFormat = function (pixelFormat) {\r\n return (\r\n pixelFormat === PixelFormat.RGB_DXT1 ||\r\n pixelFormat === PixelFormat.RGBA_DXT1 ||\r\n pixelFormat === PixelFormat.RGBA_DXT3 ||\r\n pixelFormat === PixelFormat.RGBA_DXT5 ||\r\n pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\r\n pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\r\n pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\r\n pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1 ||\r\n pixelFormat === PixelFormat.RGBA_ASTC ||\r\n pixelFormat === PixelFormat.RGB_ETC1 ||\r\n pixelFormat === PixelFormat.RGB8_ETC2 ||\r\n pixelFormat === PixelFormat.RGBA8_ETC2_EAC ||\r\n pixelFormat === PixelFormat.RGBA_BC7\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isDXTFormat = function (pixelFormat) {\r\n return (\r\n pixelFormat === PixelFormat.RGB_DXT1 ||\r\n pixelFormat === PixelFormat.RGBA_DXT1 ||\r\n pixelFormat === PixelFormat.RGBA_DXT3 ||\r\n pixelFormat === PixelFormat.RGBA_DXT5\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isPVRTCFormat = function (pixelFormat) {\r\n return (\r\n pixelFormat === PixelFormat.RGB_PVRTC_4BPPV1 ||\r\n pixelFormat === PixelFormat.RGB_PVRTC_2BPPV1 ||\r\n pixelFormat === PixelFormat.RGBA_PVRTC_4BPPV1 ||\r\n pixelFormat === PixelFormat.RGBA_PVRTC_2BPPV1\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isASTCFormat = function (pixelFormat) {\r\n return pixelFormat === PixelFormat.RGBA_ASTC;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isETC1Format = function (pixelFormat) {\r\n return pixelFormat === PixelFormat.RGB_ETC1;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isETC2Format = function (pixelFormat) {\r\n return (\r\n pixelFormat === PixelFormat.RGB8_ETC2 ||\r\n pixelFormat === PixelFormat.RGBA8_ETC2_EAC\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.isBC7Format = function (pixelFormat) {\r\n return pixelFormat === PixelFormat.RGBA_BC7;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.compressedTextureSizeInBytes = function (\r\n pixelFormat,\r\n width,\r\n height\r\n) {\r\n switch (pixelFormat) {\r\n case PixelFormat.RGB_DXT1:\r\n case PixelFormat.RGBA_DXT1:\r\n case PixelFormat.RGB_ETC1:\r\n case PixelFormat.RGB8_ETC2:\r\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 8;\r\n\r\n case PixelFormat.RGBA_DXT3:\r\n case PixelFormat.RGBA_DXT5:\r\n case PixelFormat.RGBA_ASTC:\r\n case PixelFormat.RGBA8_ETC2_EAC:\r\n return Math.floor((width + 3) / 4) * Math.floor((height + 3) / 4) * 16;\r\n\r\n case PixelFormat.RGB_PVRTC_4BPPV1:\r\n case PixelFormat.RGBA_PVRTC_4BPPV1:\r\n return Math.floor((Math.max(width, 8) * Math.max(height, 8) * 4 + 7) / 8);\r\n\r\n case PixelFormat.RGB_PVRTC_2BPPV1:\r\n case PixelFormat.RGBA_PVRTC_2BPPV1:\r\n return Math.floor(\r\n (Math.max(width, 16) * Math.max(height, 8) * 2 + 7) / 8\r\n );\r\n\r\n case PixelFormat.RGBA_BC7:\r\n return Math.ceil(width / 4) * Math.ceil(height / 4) * 16;\r\n\r\n default:\r\n return 0;\r\n }\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.textureSizeInBytes = function (\r\n pixelFormat,\r\n pixelDatatype,\r\n width,\r\n height\r\n) {\r\n let componentsLength = PixelFormat.componentsLength(pixelFormat);\r\n if (PixelDatatype.isPacked(pixelDatatype)) {\r\n componentsLength = 1;\r\n }\r\n return (\r\n componentsLength * PixelDatatype.sizeInBytes(pixelDatatype) * width * height\r\n );\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.alignmentInBytes = function (pixelFormat, pixelDatatype, width) {\r\n const mod =\r\n PixelFormat.textureSizeInBytes(pixelFormat, pixelDatatype, width, 1) % 4;\r\n return mod === 0 ? 4 : mod === 2 ? 2 : 1;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.createTypedArray = function (\r\n pixelFormat,\r\n pixelDatatype,\r\n width,\r\n height\r\n) {\r\n let constructor;\r\n const sizeInBytes = PixelDatatype.sizeInBytes(pixelDatatype);\r\n if (sizeInBytes === Uint8Array.BYTES_PER_ELEMENT) {\r\n constructor = Uint8Array;\r\n } else if (sizeInBytes === Uint16Array.BYTES_PER_ELEMENT) {\r\n constructor = Uint16Array;\r\n } else if (\r\n sizeInBytes === Float32Array.BYTES_PER_ELEMENT &&\r\n pixelDatatype === PixelDatatype.FLOAT\r\n ) {\r\n constructor = Float32Array;\r\n } else {\r\n constructor = Uint32Array;\r\n }\r\n\r\n const size = PixelFormat.componentsLength(pixelFormat) * width * height;\r\n return new constructor(size);\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.flipY = function (\r\n bufferView,\r\n pixelFormat,\r\n pixelDatatype,\r\n width,\r\n height\r\n) {\r\n if (height === 1) {\r\n return bufferView;\r\n }\r\n const flipped = PixelFormat.createTypedArray(\r\n pixelFormat,\r\n pixelDatatype,\r\n width,\r\n height\r\n );\r\n const numberOfComponents = PixelFormat.componentsLength(pixelFormat);\r\n const textureWidth = width * numberOfComponents;\r\n for (let i = 0; i < height; ++i) {\r\n const row = i * width * numberOfComponents;\r\n const flippedRow = (height - i - 1) * width * numberOfComponents;\r\n for (let j = 0; j < textureWidth; ++j) {\r\n flipped[flippedRow + j] = bufferView[row + j];\r\n }\r\n }\r\n return flipped;\r\n};\r\n\r\n/**\r\n * @private\r\n */\r\nPixelFormat.toInternalFormat = function (pixelFormat, pixelDatatype, context) {\r\n // WebGL 1 require internalFormat to be the same as PixelFormat\r\n if (!context.webgl2) {\r\n return pixelFormat;\r\n }\r\n\r\n // Convert pixelFormat to correct internalFormat for WebGL 2\r\n if (pixelFormat === PixelFormat.DEPTH_STENCIL) {\r\n return WebGLConstants.DEPTH24_STENCIL8;\r\n }\r\n\r\n if (pixelFormat === PixelFormat.DEPTH_COMPONENT) {\r\n if (pixelDatatype === PixelDatatype.UNSIGNED_SHORT) {\r\n return WebGLConstants.DEPTH_COMPONENT16;\r\n } else if (pixelDatatype === PixelDatatype.UNSIGNED_INT) {\r\n return WebGLConstants.DEPTH_COMPONENT24;\r\n }\r\n }\r\n\r\n if (pixelDatatype === PixelDatatype.FLOAT) {\r\n switch (pixelFormat) {\r\n case PixelFormat.RGBA:\r\n return WebGLConstants.RGBA32F;\r\n case PixelFormat.RGB:\r\n return WebGLConstants.RGB32F;\r\n case PixelFormat.RG:\r\n return WebGLConstants.RG32F;\r\n case PixelFormat.R:\r\n return WebGLConstants.R32F;\r\n }\r\n }\r\n\r\n if (pixelDatatype === PixelDatatype.HALF_FLOAT) {\r\n switch (pixelFormat) {\r\n case PixelFormat.RGBA:\r\n return WebGLConstants.RGBA16F;\r\n case PixelFormat.RGB:\r\n return WebGLConstants.RGB16F;\r\n case PixelFormat.RG:\r\n return WebGLConstants.RG16F;\r\n case PixelFormat.R:\r\n return WebGLConstants.R16F;\r\n }\r\n }\r\n\r\n return pixelFormat;\r\n};\r\n\r\nexport default Object.freeze(PixelFormat);\r\n","/**\r\n * Enum containing Vulkan Constant values by name.\r\n *\r\n * These match the constants from the {@link https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#formats-definition|Vulkan 1.2 specification}.\r\n *\r\n * @enum {Number}\r\n * @private\r\n */\r\nconst VulkanConstants = {\r\n VK_FORMAT_UNDEFINED: 0,\r\n VK_FORMAT_R4G4_UNORM_PACK8: 1,\r\n VK_FORMAT_R4G4B4A4_UNORM_PACK16: 2,\r\n VK_FORMAT_B4G4R4A4_UNORM_PACK16: 3,\r\n VK_FORMAT_R5G6B5_UNORM_PACK16: 4,\r\n VK_FORMAT_B5G6R5_UNORM_PACK16: 5,\r\n VK_FORMAT_R5G5B5A1_UNORM_PACK16: 6,\r\n VK_FORMAT_B5G5R5A1_UNORM_PACK16: 7,\r\n VK_FORMAT_A1R5G5B5_UNORM_PACK16: 8,\r\n VK_FORMAT_R8_UNORM: 9,\r\n VK_FORMAT_R8_SNORM: 10,\r\n VK_FORMAT_R8_USCALED: 11,\r\n VK_FORMAT_R8_SSCALED: 12,\r\n VK_FORMAT_R8_UINT: 13,\r\n VK_FORMAT_R8_SINT: 14,\r\n VK_FORMAT_R8_SRGB: 15,\r\n VK_FORMAT_R8G8_UNORM: 16,\r\n VK_FORMAT_R8G8_SNORM: 17,\r\n VK_FORMAT_R8G8_USCALED: 18,\r\n VK_FORMAT_R8G8_SSCALED: 19,\r\n VK_FORMAT_R8G8_UINT: 20,\r\n VK_FORMAT_R8G8_SINT: 21,\r\n VK_FORMAT_R8G8_SRGB: 22,\r\n VK_FORMAT_R8G8B8_UNORM: 23,\r\n VK_FORMAT_R8G8B8_SNORM: 24,\r\n VK_FORMAT_R8G8B8_USCALED: 25,\r\n VK_FORMAT_R8G8B8_SSCALED: 26,\r\n VK_FORMAT_R8G8B8_UINT: 27,\r\n VK_FORMAT_R8G8B8_SINT: 28,\r\n VK_FORMAT_R8G8B8_SRGB: 29,\r\n VK_FORMAT_B8G8R8_UNORM: 30,\r\n VK_FORMAT_B8G8R8_SNORM: 31,\r\n VK_FORMAT_B8G8R8_USCALED: 32,\r\n VK_FORMAT_B8G8R8_SSCALED: 33,\r\n VK_FORMAT_B8G8R8_UINT: 34,\r\n VK_FORMAT_B8G8R8_SINT: 35,\r\n VK_FORMAT_B8G8R8_SRGB: 36,\r\n VK_FORMAT_R8G8B8A8_UNORM: 37,\r\n VK_FORMAT_R8G8B8A8_SNORM: 38,\r\n VK_FORMAT_R8G8B8A8_USCALED: 39,\r\n VK_FORMAT_R8G8B8A8_SSCALED: 40,\r\n VK_FORMAT_R8G8B8A8_UINT: 41,\r\n VK_FORMAT_R8G8B8A8_SINT: 42,\r\n VK_FORMAT_R8G8B8A8_SRGB: 43,\r\n VK_FORMAT_B8G8R8A8_UNORM: 44,\r\n VK_FORMAT_B8G8R8A8_SNORM: 45,\r\n VK_FORMAT_B8G8R8A8_USCALED: 46,\r\n VK_FORMAT_B8G8R8A8_SSCALED: 47,\r\n VK_FORMAT_B8G8R8A8_UINT: 48,\r\n VK_FORMAT_B8G8R8A8_SINT: 49,\r\n VK_FORMAT_B8G8R8A8_SRGB: 50,\r\n VK_FORMAT_A8B8G8R8_UNORM_PACK32: 51,\r\n VK_FORMAT_A8B8G8R8_SNORM_PACK32: 52,\r\n VK_FORMAT_A8B8G8R8_USCALED_PACK32: 53,\r\n VK_FORMAT_A8B8G8R8_SSCALED_PACK32: 54,\r\n VK_FORMAT_A8B8G8R8_UINT_PACK32: 55,\r\n VK_FORMAT_A8B8G8R8_SINT_PACK32: 56,\r\n VK_FORMAT_A8B8G8R8_SRGB_PACK32: 57,\r\n VK_FORMAT_A2R10G10B10_UNORM_PACK32: 58,\r\n VK_FORMAT_A2R10G10B10_SNORM_PACK32: 59,\r\n VK_FORMAT_A2R10G10B10_USCALED_PACK32: 60,\r\n VK_FORMAT_A2R10G10B10_SSCALED_PACK32: 61,\r\n VK_FORMAT_A2R10G10B10_UINT_PACK32: 62,\r\n VK_FORMAT_A2R10G10B10_SINT_PACK32: 63,\r\n VK_FORMAT_A2B10G10R10_UNORM_PACK32: 64,\r\n VK_FORMAT_A2B10G10R10_SNORM_PACK32: 65,\r\n VK_FORMAT_A2B10G10R10_USCALED_PACK32: 66,\r\n VK_FORMAT_A2B10G10R10_SSCALED_PACK32: 67,\r\n VK_FORMAT_A2B10G10R10_UINT_PACK32: 68,\r\n VK_FORMAT_A2B10G10R10_SINT_PACK32: 69,\r\n VK_FORMAT_R16_UNORM: 70,\r\n VK_FORMAT_R16_SNORM: 71,\r\n VK_FORMAT_R16_USCALED: 72,\r\n VK_FORMAT_R16_SSCALED: 73,\r\n VK_FORMAT_R16_UINT: 74,\r\n VK_FORMAT_R16_SINT: 75,\r\n VK_FORMAT_R16_SFLOAT: 76,\r\n VK_FORMAT_R16G16_UNORM: 77,\r\n VK_FORMAT_R16G16_SNORM: 78,\r\n VK_FORMAT_R16G16_USCALED: 79,\r\n VK_FORMAT_R16G16_SSCALED: 80,\r\n VK_FORMAT_R16G16_UINT: 81,\r\n VK_FORMAT_R16G16_SINT: 82,\r\n VK_FORMAT_R16G16_SFLOAT: 83,\r\n VK_FORMAT_R16G16B16_UNORM: 84,\r\n VK_FORMAT_R16G16B16_SNORM: 85,\r\n VK_FORMAT_R16G16B16_USCALED: 86,\r\n VK_FORMAT_R16G16B16_SSCALED: 87,\r\n VK_FORMAT_R16G16B16_UINT: 88,\r\n VK_FORMAT_R16G16B16_SINT: 89,\r\n VK_FORMAT_R16G16B16_SFLOAT: 90,\r\n VK_FORMAT_R16G16B16A16_UNORM: 91,\r\n VK_FORMAT_R16G16B16A16_SNORM: 92,\r\n VK_FORMAT_R16G16B16A16_USCALED: 93,\r\n VK_FORMAT_R16G16B16A16_SSCALED: 94,\r\n VK_FORMAT_R16G16B16A16_UINT: 95,\r\n VK_FORMAT_R16G16B16A16_SINT: 96,\r\n VK_FORMAT_R16G16B16A16_SFLOAT: 97,\r\n VK_FORMAT_R32_UINT: 98,\r\n VK_FORMAT_R32_SINT: 99,\r\n VK_FORMAT_R32_SFLOAT: 100,\r\n VK_FORMAT_R32G32_UINT: 101,\r\n VK_FORMAT_R32G32_SINT: 102,\r\n VK_FORMAT_R32G32_SFLOAT: 103,\r\n VK_FORMAT_R32G32B32_UINT: 104,\r\n VK_FORMAT_R32G32B32_SINT: 105,\r\n VK_FORMAT_R32G32B32_SFLOAT: 106,\r\n VK_FORMAT_R32G32B32A32_UINT: 107,\r\n VK_FORMAT_R32G32B32A32_SINT: 108,\r\n VK_FORMAT_R32G32B32A32_SFLOAT: 109,\r\n VK_FORMAT_R64_UINT: 110,\r\n VK_FORMAT_R64_SINT: 111,\r\n VK_FORMAT_R64_SFLOAT: 112,\r\n VK_FORMAT_R64G64_UINT: 113,\r\n VK_FORMAT_R64G64_SINT: 114,\r\n VK_FORMAT_R64G64_SFLOAT: 115,\r\n VK_FORMAT_R64G64B64_UINT: 116,\r\n VK_FORMAT_R64G64B64_SINT: 117,\r\n VK_FORMAT_R64G64B64_SFLOAT: 118,\r\n VK_FORMAT_R64G64B64A64_UINT: 119,\r\n VK_FORMAT_R64G64B64A64_SINT: 120,\r\n VK_FORMAT_R64G64B64A64_SFLOAT: 121,\r\n VK_FORMAT_B10G11R11_UFLOAT_PACK32: 122,\r\n VK_FORMAT_E5B9G9R9_UFLOAT_PACK32: 123,\r\n VK_FORMAT_D16_UNORM: 124,\r\n VK_FORMAT_X8_D24_UNORM_PACK32: 125,\r\n VK_FORMAT_D32_SFLOAT: 126,\r\n VK_FORMAT_S8_UINT: 127,\r\n VK_FORMAT_D16_UNORM_S8_UINT: 128,\r\n VK_FORMAT_D24_UNORM_S8_UINT: 129,\r\n VK_FORMAT_D32_SFLOAT_S8_UINT: 130,\r\n VK_FORMAT_BC1_RGB_UNORM_BLOCK: 131,\r\n VK_FORMAT_BC1_RGB_SRGB_BLOCK: 132,\r\n VK_FORMAT_BC1_RGBA_UNORM_BLOCK: 133,\r\n VK_FORMAT_BC1_RGBA_SRGB_BLOCK: 134,\r\n VK_FORMAT_BC2_UNORM_BLOCK: 135,\r\n VK_FORMAT_BC2_SRGB_BLOCK: 136,\r\n VK_FORMAT_BC3_UNORM_BLOCK: 137,\r\n VK_FORMAT_BC3_SRGB_BLOCK: 138,\r\n VK_FORMAT_BC4_UNORM_BLOCK: 139,\r\n VK_FORMAT_BC4_SNORM_BLOCK: 140,\r\n VK_FORMAT_BC5_UNORM_BLOCK: 141,\r\n VK_FORMAT_BC5_SNORM_BLOCK: 142,\r\n VK_FORMAT_BC6H_UFLOAT_BLOCK: 143,\r\n VK_FORMAT_BC6H_SFLOAT_BLOCK: 144,\r\n VK_FORMAT_BC7_UNORM_BLOCK: 145,\r\n VK_FORMAT_BC7_SRGB_BLOCK: 146,\r\n VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK: 147,\r\n VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK: 148,\r\n VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK: 149,\r\n VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK: 150,\r\n VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK: 151,\r\n VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK: 152,\r\n VK_FORMAT_EAC_R11_UNORM_BLOCK: 153,\r\n VK_FORMAT_EAC_R11_SNORM_BLOCK: 154,\r\n VK_FORMAT_EAC_R11G11_UNORM_BLOCK: 155,\r\n VK_FORMAT_EAC_R11G11_SNORM_BLOCK: 156,\r\n VK_FORMAT_ASTC_4x4_UNORM_BLOCK: 157,\r\n VK_FORMAT_ASTC_4x4_SRGB_BLOCK: 158,\r\n VK_FORMAT_ASTC_5x4_UNORM_BLOCK: 159,\r\n VK_FORMAT_ASTC_5x4_SRGB_BLOCK: 160,\r\n VK_FORMAT_ASTC_5x5_UNORM_BLOCK: 161,\r\n VK_FORMAT_ASTC_5x5_SRGB_BLOCK: 162,\r\n VK_FORMAT_ASTC_6x5_UNORM_BLOCK: 163,\r\n VK_FORMAT_ASTC_6x5_SRGB_BLOCK: 164,\r\n VK_FORMAT_ASTC_6x6_UNORM_BLOCK: 165,\r\n VK_FORMAT_ASTC_6x6_SRGB_BLOCK: 166,\r\n VK_FORMAT_ASTC_8x5_UNORM_BLOCK: 167,\r\n VK_FORMAT_ASTC_8x5_SRGB_BLOCK: 168,\r\n VK_FORMAT_ASTC_8x6_UNORM_BLOCK: 169,\r\n VK_FORMAT_ASTC_8x6_SRGB_BLOCK: 170,\r\n VK_FORMAT_ASTC_8x8_UNORM_BLOCK: 171,\r\n VK_FORMAT_ASTC_8x8_SRGB_BLOCK: 172,\r\n VK_FORMAT_ASTC_10x5_UNORM_BLOCK: 173,\r\n VK_FORMAT_ASTC_10x5_SRGB_BLOCK: 174,\r\n VK_FORMAT_ASTC_10x6_UNORM_BLOCK: 175,\r\n VK_FORMAT_ASTC_10x6_SRGB_BLOCK: 176,\r\n VK_FORMAT_ASTC_10x8_UNORM_BLOCK: 177,\r\n VK_FORMAT_ASTC_10x8_SRGB_BLOCK: 178,\r\n VK_FORMAT_ASTC_10x10_UNORM_BLOCK: 179,\r\n VK_FORMAT_ASTC_10x10_SRGB_BLOCK: 180,\r\n VK_FORMAT_ASTC_12x10_UNORM_BLOCK: 181,\r\n VK_FORMAT_ASTC_12x10_SRGB_BLOCK: 182,\r\n VK_FORMAT_ASTC_12x12_UNORM_BLOCK: 183,\r\n VK_FORMAT_ASTC_12x12_SRGB_BLOCK: 184,\r\n VK_FORMAT_G8B8G8R8_422_UNORM: 1000156000,\r\n VK_FORMAT_B8G8R8G8_422_UNORM: 1000156001,\r\n VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM: 1000156002,\r\n VK_FORMAT_G8_B8R8_2PLANE_420_UNORM: 1000156003,\r\n VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM: 1000156004,\r\n VK_FORMAT_G8_B8R8_2PLANE_422_UNORM: 1000156005,\r\n VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM: 1000156006,\r\n VK_FORMAT_R10X6_UNORM_PACK16: 1000156007,\r\n VK_FORMAT_R10X6G10X6_UNORM_2PACK16: 1000156008,\r\n VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16: 1000156009,\r\n VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16: 1000156010,\r\n VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16: 1000156011,\r\n VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16: 1000156012,\r\n VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16: 1000156013,\r\n VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16: 1000156014,\r\n VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16: 1000156015,\r\n VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16: 1000156016,\r\n VK_FORMAT_R12X4_UNORM_PACK16: 1000156017,\r\n VK_FORMAT_R12X4G12X4_UNORM_2PACK16: 1000156018,\r\n VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16: 1000156019,\r\n VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16: 1000156020,\r\n VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16: 1000156021,\r\n VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16: 1000156022,\r\n VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16: 1000156023,\r\n VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16: 1000156024,\r\n VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16: 1000156025,\r\n VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16: 1000156026,\r\n VK_FORMAT_G16B16G16R16_422_UNORM: 1000156027,\r\n VK_FORMAT_B16G16R16G16_422_UNORM: 1000156028,\r\n VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM: 1000156029,\r\n VK_FORMAT_G16_B16R16_2PLANE_420_UNORM: 1000156030,\r\n VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM: 1000156031,\r\n VK_FORMAT_G16_B16R16_2PLANE_422_UNORM: 1000156032,\r\n VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM: 1000156033,\r\n VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG: 1000054000,\r\n VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG: 1000054001,\r\n VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG: 1000054002,\r\n VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG: 1000054003,\r\n VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG: 1000054004,\r\n VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG: 1000054005,\r\n VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG: 1000054006,\r\n VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG: 1000054007,\r\n VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT: 1000066000,\r\n VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT: 1000066001,\r\n VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT: 1000066002,\r\n VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT: 1000066003,\r\n VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT: 1000066004,\r\n VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT: 1000066005,\r\n VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT: 1000066006,\r\n VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT: 1000066007,\r\n VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT: 1000066008,\r\n VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT: 1000066009,\r\n VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT: 1000066010,\r\n VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT: 1000066011,\r\n VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT: 1000066012,\r\n VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT: 1000066013,\r\n VK_FORMAT_G8B8G8R8_422_UNORM_KHR: 1000156000,\r\n VK_FORMAT_B8G8R8G8_422_UNORM_KHR: 1000156001,\r\n VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR: 1000156002,\r\n VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR: 1000156003,\r\n VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR: 1000156004,\r\n VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR: 1000156005,\r\n VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR: 1000156006,\r\n VK_FORMAT_R10X6_UNORM_PACK16_KHR: 1000156007,\r\n VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR: 1000156008,\r\n VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR: 1000156009,\r\n VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR: 1000156010,\r\n VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR: 1000156011,\r\n VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR: 1000156012,\r\n VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR: 1000156013,\r\n VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR: 1000156014,\r\n VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR: 1000156015,\r\n VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR: 1000156016,\r\n VK_FORMAT_R12X4_UNORM_PACK16_KHR: 1000156017,\r\n VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR: 1000156018,\r\n VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR: 1000156019,\r\n VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR: 1000156020,\r\n VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR: 1000156021,\r\n VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR: 1000156022,\r\n VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR: 1000156023,\r\n VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR: 1000156024,\r\n VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR: 1000156025,\r\n VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR: 1000156026,\r\n VK_FORMAT_G16B16G16R16_422_UNORM_KHR: 1000156027,\r\n VK_FORMAT_B16G16R16G16_422_UNORM_KHR: 1000156028,\r\n VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR: 1000156029,\r\n VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR: 1000156030,\r\n VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR: 1000156031,\r\n VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR: 1000156032,\r\n VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR: 1000156033,\r\n};\r\nexport default Object.freeze(VulkanConstants);\r\n","///////////////////////////////////////////////////\n// KTX2 Header.\n///////////////////////////////////////////////////\nconst KHR_SUPERCOMPRESSION_NONE = 0;\nconst KHR_SUPERCOMPRESSION_BASISLZ = 1;\nconst KHR_SUPERCOMPRESSION_ZSTD = 2;\nconst KHR_SUPERCOMPRESSION_ZLIB = 3; ///////////////////////////////////////////////////\n// Data Format Descriptor (DFD).\n///////////////////////////////////////////////////\n\nconst KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0;\nconst KHR_DF_VENDORID_KHRONOS = 0;\nconst KHR_DF_VERSION = 2;\nconst KHR_DF_MODEL_UNSPECIFIED = 0;\nconst KHR_DF_MODEL_RGBSDA = 1; // ...\n\nconst KHR_DF_MODEL_ETC1 = 160;\nconst KHR_DF_MODEL_ETC2 = 161;\nconst KHR_DF_MODEL_ASTC = 162;\nconst KHR_DF_MODEL_ETC1S = 163;\nconst KHR_DF_MODEL_UASTC = 166;\nconst KHR_DF_FLAG_ALPHA_STRAIGHT = 0;\nconst KHR_DF_FLAG_ALPHA_PREMULTIPLIED = 1;\nconst KHR_DF_TRANSFER_UNSPECIFIED = 0;\nconst KHR_DF_TRANSFER_LINEAR = 1;\nconst KHR_DF_TRANSFER_SRGB = 2;\nconst KHR_DF_TRANSFER_ITU = 3;\nconst KHR_DF_TRANSFER_NTSC = 4;\nconst KHR_DF_TRANSFER_SLOG = 5;\nconst KHR_DF_TRANSFER_SLOG2 = 6;\nconst KHR_DF_TRANSFER_BT1886 = 7;\nconst KHR_DF_TRANSFER_HLG_OETF = 8;\nconst KHR_DF_TRANSFER_HLG_EOTF = 9;\nconst KHR_DF_TRANSFER_PQ_EOTF = 10;\nconst KHR_DF_TRANSFER_PQ_OETF = 11;\nconst KHR_DF_TRANSFER_DCIP3 = 12;\nconst KHR_DF_TRANSFER_PAL_OETF = 13;\nconst KHR_DF_TRANSFER_PAL625_EOTF = 14;\nconst KHR_DF_TRANSFER_ST240 = 15;\nconst KHR_DF_TRANSFER_ACESCC = 16;\nconst KHR_DF_TRANSFER_ACESCCT = 17;\nconst KHR_DF_TRANSFER_ADOBERGB = 18;\nconst KHR_DF_PRIMARIES_UNSPECIFIED = 0;\nconst KHR_DF_PRIMARIES_BT709 = 1;\nconst KHR_DF_PRIMARIES_BT601_EBU = 2;\nconst KHR_DF_PRIMARIES_BT601_SMPTE = 3;\nconst KHR_DF_PRIMARIES_BT2020 = 4;\nconst KHR_DF_PRIMARIES_CIEXYZ = 5;\nconst KHR_DF_PRIMARIES_ACES = 6;\nconst KHR_DF_PRIMARIES_ACESCC = 7;\nconst KHR_DF_PRIMARIES_NTSC1953 = 8;\nconst KHR_DF_PRIMARIES_PAL525 = 9;\nconst KHR_DF_PRIMARIES_DISPLAYP3 = 10;\nconst KHR_DF_PRIMARIES_ADOBERGB = 11;\nconst KHR_DF_CHANNEL_RGBSDA_RED = 0;\nconst KHR_DF_CHANNEL_RGBSDA_GREEN = 1;\nconst KHR_DF_CHANNEL_RGBSDA_BLUE = 2;\nconst KHR_DF_CHANNEL_RGBSDA_STENCIL = 13;\nconst KHR_DF_CHANNEL_RGBSDA_DEPTH = 14;\nconst KHR_DF_CHANNEL_RGBSDA_ALPHA = 15;\nconst KHR_DF_SAMPLE_DATATYPE_FLOAT = 0x80;\nconst KHR_DF_SAMPLE_DATATYPE_SIGNED = 0x40;\nconst KHR_DF_SAMPLE_DATATYPE_EXPONENT = 0x20;\nconst KHR_DF_SAMPLE_DATATYPE_LINEAR = 0x10; ///////////////////////////////////////////////////\n// VK FORMAT.\n///////////////////////////////////////////////////\n\nconst VK_FORMAT_UNDEFINED = 0;\nconst VK_FORMAT_R4G4_UNORM_PACK8 = 1;\nconst VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2;\nconst VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3;\nconst VK_FORMAT_R5G6B5_UNORM_PACK16 = 4;\nconst VK_FORMAT_B5G6R5_UNORM_PACK16 = 5;\nconst VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6;\nconst VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7;\nconst VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8;\nconst VK_FORMAT_R8_UNORM = 9;\nconst VK_FORMAT_R8_SNORM = 10;\nconst VK_FORMAT_R8_UINT = 13;\nconst VK_FORMAT_R8_SINT = 14;\nconst VK_FORMAT_R8_SRGB = 15;\nconst VK_FORMAT_R8G8_UNORM = 16;\nconst VK_FORMAT_R8G8_SNORM = 17;\nconst VK_FORMAT_R8G8_UINT = 20;\nconst VK_FORMAT_R8G8_SINT = 21;\nconst VK_FORMAT_R8G8_SRGB = 22;\nconst VK_FORMAT_R8G8B8_UNORM = 23;\nconst VK_FORMAT_R8G8B8_SNORM = 24;\nconst VK_FORMAT_R8G8B8_UINT = 27;\nconst VK_FORMAT_R8G8B8_SINT = 28;\nconst VK_FORMAT_R8G8B8_SRGB = 29;\nconst VK_FORMAT_B8G8R8_UNORM = 30;\nconst VK_FORMAT_B8G8R8_SNORM = 31;\nconst VK_FORMAT_B8G8R8_UINT = 34;\nconst VK_FORMAT_B8G8R8_SINT = 35;\nconst VK_FORMAT_B8G8R8_SRGB = 36;\nconst VK_FORMAT_R8G8B8A8_UNORM = 37;\nconst VK_FORMAT_R8G8B8A8_SNORM = 38;\nconst VK_FORMAT_R8G8B8A8_UINT = 41;\nconst VK_FORMAT_R8G8B8A8_SINT = 42;\nconst VK_FORMAT_R8G8B8A8_SRGB = 43;\nconst VK_FORMAT_B8G8R8A8_UNORM = 44;\nconst VK_FORMAT_B8G8R8A8_SNORM = 45;\nconst VK_FORMAT_B8G8R8A8_UINT = 48;\nconst VK_FORMAT_B8G8R8A8_SINT = 49;\nconst VK_FORMAT_B8G8R8A8_SRGB = 50;\nconst VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58;\nconst VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59;\nconst VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62;\nconst VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63;\nconst VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64;\nconst VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65;\nconst VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68;\nconst VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69;\nconst VK_FORMAT_R16_UNORM = 70;\nconst VK_FORMAT_R16_SNORM = 71;\nconst VK_FORMAT_R16_UINT = 74;\nconst VK_FORMAT_R16_SINT = 75;\nconst VK_FORMAT_R16_SFLOAT = 76;\nconst VK_FORMAT_R16G16_UNORM = 77;\nconst VK_FORMAT_R16G16_SNORM = 78;\nconst VK_FORMAT_R16G16_UINT = 81;\nconst VK_FORMAT_R16G16_SINT = 82;\nconst VK_FORMAT_R16G16_SFLOAT = 83;\nconst VK_FORMAT_R16G16B16_UNORM = 84;\nconst VK_FORMAT_R16G16B16_SNORM = 85;\nconst VK_FORMAT_R16G16B16_UINT = 88;\nconst VK_FORMAT_R16G16B16_SINT = 89;\nconst VK_FORMAT_R16G16B16_SFLOAT = 90;\nconst VK_FORMAT_R16G16B16A16_UNORM = 91;\nconst VK_FORMAT_R16G16B16A16_SNORM = 92;\nconst VK_FORMAT_R16G16B16A16_UINT = 95;\nconst VK_FORMAT_R16G16B16A16_SINT = 96;\nconst VK_FORMAT_R16G16B16A16_SFLOAT = 97;\nconst VK_FORMAT_R32_UINT = 98;\nconst VK_FORMAT_R32_SINT = 99;\nconst VK_FORMAT_R32_SFLOAT = 100;\nconst VK_FORMAT_R32G32_UINT = 101;\nconst VK_FORMAT_R32G32_SINT = 102;\nconst VK_FORMAT_R32G32_SFLOAT = 103;\nconst VK_FORMAT_R32G32B32_UINT = 104;\nconst VK_FORMAT_R32G32B32_SINT = 105;\nconst VK_FORMAT_R32G32B32_SFLOAT = 106;\nconst VK_FORMAT_R32G32B32A32_UINT = 107;\nconst VK_FORMAT_R32G32B32A32_SINT = 108;\nconst VK_FORMAT_R32G32B32A32_SFLOAT = 109;\nconst VK_FORMAT_R64_UINT = 110;\nconst VK_FORMAT_R64_SINT = 111;\nconst VK_FORMAT_R64_SFLOAT = 112;\nconst VK_FORMAT_R64G64_UINT = 113;\nconst VK_FORMAT_R64G64_SINT = 114;\nconst VK_FORMAT_R64G64_SFLOAT = 115;\nconst VK_FORMAT_R64G64B64_UINT = 116;\nconst VK_FORMAT_R64G64B64_SINT = 117;\nconst VK_FORMAT_R64G64B64_SFLOAT = 118;\nconst VK_FORMAT_R64G64B64A64_UINT = 119;\nconst VK_FORMAT_R64G64B64A64_SINT = 120;\nconst VK_FORMAT_R64G64B64A64_SFLOAT = 121;\nconst VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122;\nconst VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123;\nconst VK_FORMAT_D16_UNORM = 124;\nconst VK_FORMAT_X8_D24_UNORM_PACK32 = 125;\nconst VK_FORMAT_D32_SFLOAT = 126;\nconst VK_FORMAT_S8_UINT = 127;\nconst VK_FORMAT_D16_UNORM_S8_UINT = 128;\nconst VK_FORMAT_D24_UNORM_S8_UINT = 129;\nconst VK_FORMAT_D32_SFLOAT_S8_UINT = 130;\nconst VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131;\nconst VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132;\nconst VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133;\nconst VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134;\nconst VK_FORMAT_BC2_UNORM_BLOCK = 135;\nconst VK_FORMAT_BC2_SRGB_BLOCK = 136;\nconst VK_FORMAT_BC3_UNORM_BLOCK = 137;\nconst VK_FORMAT_BC3_SRGB_BLOCK = 138;\nconst VK_FORMAT_BC4_UNORM_BLOCK = 139;\nconst VK_FORMAT_BC4_SNORM_BLOCK = 140;\nconst VK_FORMAT_BC5_UNORM_BLOCK = 141;\nconst VK_FORMAT_BC5_SNORM_BLOCK = 142;\nconst VK_FORMAT_BC6H_UFLOAT_BLOCK = 143;\nconst VK_FORMAT_BC6H_SFLOAT_BLOCK = 144;\nconst VK_FORMAT_BC7_UNORM_BLOCK = 145;\nconst VK_FORMAT_BC7_SRGB_BLOCK = 146;\nconst VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147;\nconst VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148;\nconst VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149;\nconst VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150;\nconst VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151;\nconst VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152;\nconst VK_FORMAT_EAC_R11_UNORM_BLOCK = 153;\nconst VK_FORMAT_EAC_R11_SNORM_BLOCK = 154;\nconst VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155;\nconst VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156;\nconst VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157;\nconst VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158;\nconst VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159;\nconst VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160;\nconst VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161;\nconst VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162;\nconst VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163;\nconst VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164;\nconst VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165;\nconst VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166;\nconst VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167;\nconst VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168;\nconst VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169;\nconst VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170;\nconst VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171;\nconst VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172;\nconst VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173;\nconst VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174;\nconst VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175;\nconst VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176;\nconst VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177;\nconst VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178;\nconst VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179;\nconst VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180;\nconst VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181;\nconst VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182;\nconst VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183;\nconst VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184;\nconst VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007;\nconst VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008;\nconst VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009;\nconst VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010;\nconst VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011;\nconst VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017;\nconst VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018;\nconst VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019;\nconst VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020;\nconst VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021;\nconst VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000;\nconst VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001;\nconst VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002;\nconst VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003;\nconst VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004;\nconst VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005;\nconst VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006;\nconst VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007;\nconst VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000;\nconst VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001;\nconst VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002;\nconst VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003;\nconst VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004;\nconst VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005;\nconst VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006;\nconst VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007;\nconst VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008;\nconst VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009;\nconst VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010;\nconst VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011;\nconst VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012;\nconst VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013;\nconst VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000;\nconst VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001;\n\n/**\r\n * Represents an unpacked KTX 2.0 texture container. Data for individual mip levels are stored in\r\n * the `.levels` array, typically compressed in Basis Universal formats. Additional properties\r\n * provide metadata required to process, transcode, and upload these textures.\r\n */\n\nclass KTX2Container {\n constructor() {\n this.vkFormat = VK_FORMAT_UNDEFINED;\n this.typeSize = 1;\n this.pixelWidth = 0;\n this.pixelHeight = 0;\n this.pixelDepth = 0;\n this.layerCount = 0;\n this.faceCount = 1;\n this.supercompressionScheme = KHR_SUPERCOMPRESSION_NONE;\n this.levels = [];\n this.dataFormatDescriptor = [{\n vendorId: KHR_DF_VENDORID_KHRONOS,\n descriptorType: KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,\n descriptorBlockSize: 0,\n versionNumber: KHR_DF_VERSION,\n colorModel: KHR_DF_MODEL_UNSPECIFIED,\n colorPrimaries: KHR_DF_PRIMARIES_BT709,\n transferFunction: KHR_DF_TRANSFER_SRGB,\n flags: KHR_DF_FLAG_ALPHA_STRAIGHT,\n texelBlockDimension: [0, 0, 0, 0],\n bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0],\n samples: []\n }];\n this.keyValue = {};\n this.globalData = null;\n }\n\n}\n\nclass BufferReader {\n constructor(data, byteOffset, byteLength, littleEndian) {\n this._dataView = void 0;\n this._littleEndian = void 0;\n this._offset = void 0;\n this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength);\n this._littleEndian = littleEndian;\n this._offset = 0;\n }\n\n _nextUint8() {\n const value = this._dataView.getUint8(this._offset);\n\n this._offset += 1;\n return value;\n }\n\n _nextUint16() {\n const value = this._dataView.getUint16(this._offset, this._littleEndian);\n\n this._offset += 2;\n return value;\n }\n\n _nextUint32() {\n const value = this._dataView.getUint32(this._offset, this._littleEndian);\n\n this._offset += 4;\n return value;\n }\n\n _nextUint64() {\n const left = this._dataView.getUint32(this._offset, this._littleEndian);\n\n const right = this._dataView.getUint32(this._offset + 4, this._littleEndian); // TODO(cleanup): Just test this...\n // const value = this._littleEndian ? left + (2 ** 32 * right) : (2 ** 32 * left) + right;\n\n\n const value = left + 2 ** 32 * right;\n this._offset += 8;\n return value;\n }\n\n _nextInt32() {\n const value = this._dataView.getInt32(this._offset, this._littleEndian);\n\n this._offset += 4;\n return value;\n }\n\n _skip(bytes) {\n this._offset += bytes;\n return this;\n }\n\n _scan(maxByteLength, term = 0x00) {\n const byteOffset = this._offset;\n let byteLength = 0;\n\n while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) {\n byteLength++;\n this._offset++;\n }\n\n if (byteLength < maxByteLength) this._offset++;\n return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);\n }\n\n}\n\n///////////////////////////////////////////////////\n// Common.\n///////////////////////////////////////////////////\nconst KTX_WRITER = `KTX-Parse v${\"0.4.5\"}`;\nconst NUL = new Uint8Array([0x00]); ///////////////////////////////////////////////////\n// KTX2 Header.\n///////////////////////////////////////////////////\n\nconst KTX2_ID = [// '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];\nconst HEADER_BYTE_LENGTH = 68; // 13 * 4 + 2 * 8\n\n/** Encodes text to an ArrayBuffer. */\nfunction encodeText(text) {\n if (typeof TextEncoder !== 'undefined') {\n return new TextEncoder().encode(text);\n }\n\n return Buffer.from(text);\n}\n/** Decodes an ArrayBuffer to text. */\n\nfunction decodeText(buffer) {\n if (typeof TextDecoder !== 'undefined') {\n return new TextDecoder().decode(buffer);\n }\n\n return Buffer.from(buffer).toString('utf8');\n}\n/** Concatenates N ArrayBuffers. */\n\nfunction concat(buffers) {\n let totalByteLength = 0;\n\n for (const buffer of buffers) {\n totalByteLength += buffer.byteLength;\n }\n\n const result = new Uint8Array(totalByteLength);\n let byteOffset = 0;\n\n for (const buffer of buffers) {\n result.set(new Uint8Array(buffer), byteOffset);\n byteOffset += buffer.byteLength;\n }\n\n return result;\n}\n\n/**\r\n * Parses a KTX 2.0 file, returning an unpacked {@link KTX2Container} instance with all associated\r\n * data. The container's mip levels and other binary data are pointers into the original file, not\r\n * copies, so the original file should not be overwritten after reading.\r\n *\r\n * @param data Bytes of KTX 2.0 file, as Uint8Array or Buffer.\r\n */\n\nfunction read(data) {\n ///////////////////////////////////////////////////\n // KTX 2.0 Identifier.\n ///////////////////////////////////////////////////\n const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length);\n\n if (id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11] // '\\n'\n ) {\n throw new Error('Missing KTX 2.0 identifier.');\n }\n\n const container = new KTX2Container(); ///////////////////////////////////////////////////\n // Header.\n ///////////////////////////////////////////////////\n\n const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT;\n const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true);\n container.vkFormat = headerReader._nextUint32();\n container.typeSize = headerReader._nextUint32();\n container.pixelWidth = headerReader._nextUint32();\n container.pixelHeight = headerReader._nextUint32();\n container.pixelDepth = headerReader._nextUint32();\n container.layerCount = headerReader._nextUint32();\n container.faceCount = headerReader._nextUint32();\n\n const levelCount = headerReader._nextUint32();\n\n container.supercompressionScheme = headerReader._nextUint32();\n\n const dfdByteOffset = headerReader._nextUint32();\n\n const dfdByteLength = headerReader._nextUint32();\n\n const kvdByteOffset = headerReader._nextUint32();\n\n const kvdByteLength = headerReader._nextUint32();\n\n const sgdByteOffset = headerReader._nextUint64();\n\n const sgdByteLength = headerReader._nextUint64(); ///////////////////////////////////////////////////\n // Level Index.\n ///////////////////////////////////////////////////\n\n\n const levelByteLength = levelCount * 3 * 8;\n const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true);\n\n for (let i = 0; i < levelCount; i++) {\n container.levels.push({\n levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()),\n uncompressedByteLength: levelReader._nextUint64()\n });\n } ///////////////////////////////////////////////////\n // Data Format Descriptor (DFD).\n ///////////////////////////////////////////////////\n\n\n const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true);\n const dfd = {\n vendorId: dfdReader._skip(4\n /* totalSize */\n )._nextUint16(),\n descriptorType: dfdReader._nextUint16(),\n versionNumber: dfdReader._nextUint16(),\n descriptorBlockSize: dfdReader._nextUint16(),\n colorModel: dfdReader._nextUint8(),\n colorPrimaries: dfdReader._nextUint8(),\n transferFunction: dfdReader._nextUint8(),\n flags: dfdReader._nextUint8(),\n texelBlockDimension: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n bytesPlane: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n samples: []\n };\n const sampleStart = 6;\n const sampleWords = 4;\n const numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;\n\n for (let i = 0; i < numSamples; i++) {\n const sample = {\n bitOffset: dfdReader._nextUint16(),\n bitLength: dfdReader._nextUint8(),\n channelType: dfdReader._nextUint8(),\n samplePosition: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n sampleLower: -Infinity,\n sampleUpper: Infinity\n };\n\n if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {\n sample.sampleLower = dfdReader._nextInt32();\n sample.sampleUpper = dfdReader._nextInt32();\n } else {\n sample.sampleLower = dfdReader._nextUint32();\n sample.sampleUpper = dfdReader._nextUint32();\n }\n\n dfd.samples[i] = sample;\n }\n\n container.dataFormatDescriptor.length = 0;\n container.dataFormatDescriptor.push(dfd); ///////////////////////////////////////////////////\n // Key/Value Data (KVD).\n ///////////////////////////////////////////////////\n\n const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);\n\n while (kvdReader._offset < kvdByteLength) {\n const keyValueByteLength = kvdReader._nextUint32();\n\n const keyData = kvdReader._scan(keyValueByteLength);\n\n const key = decodeText(keyData);\n\n const valueData = kvdReader._scan(keyValueByteLength - keyData.byteLength);\n\n container.keyValue[key] = key.match(/^ktx/i) ? decodeText(valueData) : valueData; // 4-byte alignment.\n\n if (kvdReader._offset % 4) kvdReader._skip(4 - kvdReader._offset % 4);\n } ///////////////////////////////////////////////////\n // Supercompression Global Data (SGD).\n ///////////////////////////////////////////////////\n\n\n if (sgdByteLength <= 0) return container;\n const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);\n\n const endpointCount = sgdReader._nextUint16();\n\n const selectorCount = sgdReader._nextUint16();\n\n const endpointsByteLength = sgdReader._nextUint32();\n\n const selectorsByteLength = sgdReader._nextUint32();\n\n const tablesByteLength = sgdReader._nextUint32();\n\n const extendedByteLength = sgdReader._nextUint32();\n\n const imageDescs = [];\n\n for (let i = 0; i < levelCount; i++) {\n imageDescs.push({\n imageFlags: sgdReader._nextUint32(),\n rgbSliceByteOffset: sgdReader._nextUint32(),\n rgbSliceByteLength: sgdReader._nextUint32(),\n alphaSliceByteOffset: sgdReader._nextUint32(),\n alphaSliceByteLength: sgdReader._nextUint32()\n });\n }\n\n const endpointsByteOffset = sgdByteOffset + sgdReader._offset;\n const selectorsByteOffset = endpointsByteOffset + endpointsByteLength;\n const tablesByteOffset = selectorsByteOffset + selectorsByteLength;\n const extendedByteOffset = tablesByteOffset + tablesByteLength;\n const endpointsData = new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength);\n const selectorsData = new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength);\n const tablesData = new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength);\n const extendedData = new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength);\n container.globalData = {\n endpointCount,\n selectorCount,\n imageDescs,\n endpointsData,\n selectorsData,\n tablesData,\n extendedData\n };\n return container;\n}\n\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nconst DEFAULT_OPTIONS = {\n keepWriter: false\n};\n/**\r\n * Serializes a {@link KTX2Container} instance to a KTX 2.0 file. Mip levels and other binary data\r\n * are copied into the resulting Uint8Array, so the original container can safely be edited or\r\n * destroyed after it is serialized.\r\n *\r\n * Options:\r\n * - keepWriter: If true, 'KTXWriter' key/value field is written as provided by the container.\r\n * \t\tOtherwise, a string for the current ktx-parse version is generated. Default: false.\r\n *\r\n * @param container\r\n * @param options\r\n */\n\nfunction write(container, options = {}) {\n options = _extends({}, DEFAULT_OPTIONS, options); ///////////////////////////////////////////////////\n // Supercompression Global Data (SGD).\n ///////////////////////////////////////////////////\n\n let sgdBuffer = new ArrayBuffer(0);\n\n if (container.globalData) {\n const sgdHeaderBuffer = new ArrayBuffer(20 + container.globalData.imageDescs.length * 5 * 4);\n const sgdHeaderView = new DataView(sgdHeaderBuffer);\n sgdHeaderView.setUint16(0, container.globalData.endpointCount, true);\n sgdHeaderView.setUint16(2, container.globalData.selectorCount, true);\n sgdHeaderView.setUint32(4, container.globalData.endpointsData.byteLength, true);\n sgdHeaderView.setUint32(8, container.globalData.selectorsData.byteLength, true);\n sgdHeaderView.setUint32(12, container.globalData.tablesData.byteLength, true);\n sgdHeaderView.setUint32(16, container.globalData.extendedData.byteLength, true);\n\n for (let i = 0; i < container.globalData.imageDescs.length; i++) {\n const imageDesc = container.globalData.imageDescs[i];\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 0, imageDesc.imageFlags, true);\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 4, imageDesc.rgbSliceByteOffset, true);\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 8, imageDesc.rgbSliceByteLength, true);\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 12, imageDesc.alphaSliceByteOffset, true);\n sgdHeaderView.setUint32(20 + i * 5 * 4 + 16, imageDesc.alphaSliceByteLength, true);\n }\n\n sgdBuffer = concat([sgdHeaderBuffer, container.globalData.endpointsData, container.globalData.selectorsData, container.globalData.tablesData, container.globalData.extendedData]);\n } ///////////////////////////////////////////////////\n // Key/Value Data (KVD).\n ///////////////////////////////////////////////////\n\n\n const keyValueData = [];\n let keyValue = container.keyValue;\n\n if (!options.keepWriter) {\n keyValue = _extends({}, container.keyValue, {\n KTXwriter: KTX_WRITER\n });\n }\n\n for (const key in keyValue) {\n const value = keyValue[key];\n const keyData = encodeText(key);\n const valueData = typeof value === 'string' ? encodeText(value) : value;\n const kvByteLength = keyData.byteLength + 1 + valueData.byteLength + 1;\n const kvPadding = kvByteLength % 4 ? 4 - kvByteLength % 4 : 0; // align(4)\n\n keyValueData.push(concat([new Uint32Array([kvByteLength]), keyData, NUL, valueData, NUL, new Uint8Array(kvPadding).fill(0x00) // align(4)\n ]));\n }\n\n const kvdBuffer = concat(keyValueData); ///////////////////////////////////////////////////\n // Data Format Descriptor (DFD).\n ///////////////////////////////////////////////////\n\n if (container.dataFormatDescriptor.length !== 1 || container.dataFormatDescriptor[0].descriptorType !== KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT) {\n throw new Error('Only BASICFORMAT Data Format Descriptor output supported.');\n }\n\n const dfd = container.dataFormatDescriptor[0];\n const dfdBuffer = new ArrayBuffer(28 + dfd.samples.length * 16);\n const dfdView = new DataView(dfdBuffer);\n const descriptorBlockSize = 24 + dfd.samples.length * 16;\n dfdView.setUint32(0, dfdBuffer.byteLength, true);\n dfdView.setUint16(4, dfd.vendorId, true);\n dfdView.setUint16(6, dfd.descriptorType, true);\n dfdView.setUint16(8, dfd.versionNumber, true);\n dfdView.setUint16(10, descriptorBlockSize, true);\n dfdView.setUint8(12, dfd.colorModel);\n dfdView.setUint8(13, dfd.colorPrimaries);\n dfdView.setUint8(14, dfd.transferFunction);\n dfdView.setUint8(15, dfd.flags);\n\n if (!Array.isArray(dfd.texelBlockDimension)) {\n throw new Error('texelBlockDimension is now an array. For dimensionality `d`, set `d - 1`.');\n }\n\n dfdView.setUint8(16, dfd.texelBlockDimension[0]);\n dfdView.setUint8(17, dfd.texelBlockDimension[1]);\n dfdView.setUint8(18, dfd.texelBlockDimension[2]);\n dfdView.setUint8(19, dfd.texelBlockDimension[3]);\n\n for (let i = 0; i < 8; i++) dfdView.setUint8(20 + i, dfd.bytesPlane[i]);\n\n for (let i = 0; i < dfd.samples.length; i++) {\n const sample = dfd.samples[i];\n const sampleByteOffset = 28 + i * 16;\n\n if (sample.channelID) {\n throw new Error('channelID has been renamed to channelType.');\n }\n\n dfdView.setUint16(sampleByteOffset + 0, sample.bitOffset, true);\n dfdView.setUint8(sampleByteOffset + 2, sample.bitLength);\n dfdView.setUint8(sampleByteOffset + 3, sample.channelType);\n dfdView.setUint8(sampleByteOffset + 4, sample.samplePosition[0]);\n dfdView.setUint8(sampleByteOffset + 5, sample.samplePosition[1]);\n dfdView.setUint8(sampleByteOffset + 6, sample.samplePosition[2]);\n dfdView.setUint8(sampleByteOffset + 7, sample.samplePosition[3]);\n\n if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {\n dfdView.setInt32(sampleByteOffset + 8, sample.sampleLower, true);\n dfdView.setInt32(sampleByteOffset + 12, sample.sampleUpper, true);\n } else {\n dfdView.setUint32(sampleByteOffset + 8, sample.sampleLower, true);\n dfdView.setUint32(sampleByteOffset + 12, sample.sampleUpper, true);\n }\n } ///////////////////////////////////////////////////\n // Data alignment.\n ///////////////////////////////////////////////////\n\n\n const dfdByteOffset = KTX2_ID.length + HEADER_BYTE_LENGTH + container.levels.length * 3 * 8;\n const kvdByteOffset = dfdByteOffset + dfdBuffer.byteLength;\n let sgdByteOffset = sgdBuffer.byteLength > 0 ? kvdByteOffset + kvdBuffer.byteLength : 0;\n if (sgdByteOffset % 8) sgdByteOffset += 8 - sgdByteOffset % 8; // align(8)\n ///////////////////////////////////////////////////\n // Level Index.\n ///////////////////////////////////////////////////\n\n const levelData = [];\n const levelIndex = new DataView(new ArrayBuffer(container.levels.length * 3 * 8));\n let levelDataByteOffset = (sgdByteOffset || kvdByteOffset + kvdBuffer.byteLength) + sgdBuffer.byteLength;\n\n for (let i = 0; i < container.levels.length; i++) {\n const level = container.levels[i];\n levelData.push(level.levelData);\n levelIndex.setBigUint64(i * 24 + 0, BigInt(levelDataByteOffset), true);\n levelIndex.setBigUint64(i * 24 + 8, BigInt(level.levelData.byteLength), true);\n levelIndex.setBigUint64(i * 24 + 16, BigInt(level.uncompressedByteLength), true);\n levelDataByteOffset += level.levelData.byteLength;\n } ///////////////////////////////////////////////////\n // Header.\n ///////////////////////////////////////////////////\n\n\n const headerBuffer = new ArrayBuffer(HEADER_BYTE_LENGTH);\n const headerView = new DataView(headerBuffer);\n headerView.setUint32(0, container.vkFormat, true);\n headerView.setUint32(4, container.typeSize, true);\n headerView.setUint32(8, container.pixelWidth, true);\n headerView.setUint32(12, container.pixelHeight, true);\n headerView.setUint32(16, container.pixelDepth, true);\n headerView.setUint32(20, container.layerCount, true);\n headerView.setUint32(24, container.faceCount, true);\n headerView.setUint32(28, container.levels.length, true);\n headerView.setUint32(32, container.supercompressionScheme, true);\n headerView.setUint32(36, dfdByteOffset, true);\n headerView.setUint32(40, dfdBuffer.byteLength, true);\n headerView.setUint32(44, kvdByteOffset, true);\n headerView.setUint32(48, kvdBuffer.byteLength, true);\n headerView.setBigUint64(52, BigInt(sgdBuffer.byteLength > 0 ? sgdByteOffset : 0), true);\n headerView.setBigUint64(60, BigInt(sgdBuffer.byteLength), true); ///////////////////////////////////////////////////\n // Compose.\n ///////////////////////////////////////////////////\n\n return new Uint8Array(concat([new Uint8Array(KTX2_ID).buffer, headerBuffer, levelIndex.buffer, dfdBuffer, kvdBuffer, sgdByteOffset > 0 ? new ArrayBuffer(sgdByteOffset - (kvdByteOffset + kvdBuffer.byteLength)) // align(8)\n : new ArrayBuffer(0), sgdBuffer, ...levelData]));\n}\n\nexport { KHR_DF_CHANNEL_RGBSDA_ALPHA, KHR_DF_CHANNEL_RGBSDA_BLUE, KHR_DF_CHANNEL_RGBSDA_DEPTH, KHR_DF_CHANNEL_RGBSDA_GREEN, KHR_DF_CHANNEL_RGBSDA_RED, KHR_DF_CHANNEL_RGBSDA_STENCIL, KHR_DF_FLAG_ALPHA_PREMULTIPLIED, KHR_DF_FLAG_ALPHA_STRAIGHT, KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT, KHR_DF_MODEL_ASTC, KHR_DF_MODEL_ETC1, KHR_DF_MODEL_ETC1S, KHR_DF_MODEL_ETC2, KHR_DF_MODEL_RGBSDA, KHR_DF_MODEL_UASTC, KHR_DF_MODEL_UNSPECIFIED, KHR_DF_PRIMARIES_ACES, KHR_DF_PRIMARIES_ACESCC, KHR_DF_PRIMARIES_ADOBERGB, KHR_DF_PRIMARIES_BT2020, KHR_DF_PRIMARIES_BT601_EBU, KHR_DF_PRIMARIES_BT601_SMPTE, KHR_DF_PRIMARIES_BT709, KHR_DF_PRIMARIES_CIEXYZ, KHR_DF_PRIMARIES_DISPLAYP3, KHR_DF_PRIMARIES_NTSC1953, KHR_DF_PRIMARIES_PAL525, KHR_DF_PRIMARIES_UNSPECIFIED, KHR_DF_SAMPLE_DATATYPE_EXPONENT, KHR_DF_SAMPLE_DATATYPE_FLOAT, KHR_DF_SAMPLE_DATATYPE_LINEAR, KHR_DF_SAMPLE_DATATYPE_SIGNED, KHR_DF_TRANSFER_ACESCC, KHR_DF_TRANSFER_ACESCCT, KHR_DF_TRANSFER_ADOBERGB, KHR_DF_TRANSFER_BT1886, KHR_DF_TRANSFER_DCIP3, KHR_DF_TRANSFER_HLG_EOTF, KHR_DF_TRANSFER_HLG_OETF, KHR_DF_TRANSFER_ITU, KHR_DF_TRANSFER_LINEAR, KHR_DF_TRANSFER_NTSC, KHR_DF_TRANSFER_PAL625_EOTF, KHR_DF_TRANSFER_PAL_OETF, KHR_DF_TRANSFER_PQ_EOTF, KHR_DF_TRANSFER_PQ_OETF, KHR_DF_TRANSFER_SLOG, KHR_DF_TRANSFER_SLOG2, KHR_DF_TRANSFER_SRGB, KHR_DF_TRANSFER_ST240, KHR_DF_TRANSFER_UNSPECIFIED, KHR_DF_VENDORID_KHRONOS, KHR_DF_VERSION, KHR_SUPERCOMPRESSION_BASISLZ, KHR_SUPERCOMPRESSION_NONE, KHR_SUPERCOMPRESSION_ZLIB, KHR_SUPERCOMPRESSION_ZSTD, KTX2Container, VK_FORMAT_A1R5G5B5_UNORM_PACK16, VK_FORMAT_A2B10G10R10_SINT_PACK32, VK_FORMAT_A2B10G10R10_SNORM_PACK32, VK_FORMAT_A2B10G10R10_UINT_PACK32, VK_FORMAT_A2B10G10R10_UNORM_PACK32, VK_FORMAT_A2R10G10B10_SINT_PACK32, VK_FORMAT_A2R10G10B10_SNORM_PACK32, VK_FORMAT_A2R10G10B10_UINT_PACK32, VK_FORMAT_A2R10G10B10_UNORM_PACK32, VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT, VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT, VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x10_SRGB_BLOCK, VK_FORMAT_ASTC_10x10_UNORM_BLOCK, VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x5_SRGB_BLOCK, VK_FORMAT_ASTC_10x5_UNORM_BLOCK, VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x6_SRGB_BLOCK, VK_FORMAT_ASTC_10x6_UNORM_BLOCK, VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_10x8_SRGB_BLOCK, VK_FORMAT_ASTC_10x8_UNORM_BLOCK, VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_12x10_SRGB_BLOCK, VK_FORMAT_ASTC_12x10_UNORM_BLOCK, VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_12x12_SRGB_BLOCK, VK_FORMAT_ASTC_12x12_UNORM_BLOCK, VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_4x4_SRGB_BLOCK, VK_FORMAT_ASTC_4x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_5x4_SRGB_BLOCK, VK_FORMAT_ASTC_5x4_UNORM_BLOCK, VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_5x5_SRGB_BLOCK, VK_FORMAT_ASTC_5x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_6x5_SRGB_BLOCK, VK_FORMAT_ASTC_6x5_UNORM_BLOCK, VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_6x6_SRGB_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x5_SRGB_BLOCK, VK_FORMAT_ASTC_8x5_UNORM_BLOCK, VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x6_SRGB_BLOCK, VK_FORMAT_ASTC_8x6_UNORM_BLOCK, VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT, VK_FORMAT_ASTC_8x8_SRGB_BLOCK, VK_FORMAT_ASTC_8x8_UNORM_BLOCK, VK_FORMAT_B10G11R11_UFLOAT_PACK32, VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16, VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16, VK_FORMAT_B4G4R4A4_UNORM_PACK16, VK_FORMAT_B5G5R5A1_UNORM_PACK16, VK_FORMAT_B5G6R5_UNORM_PACK16, VK_FORMAT_B8G8R8A8_SINT, VK_FORMAT_B8G8R8A8_SNORM, VK_FORMAT_B8G8R8A8_SRGB, VK_FORMAT_B8G8R8A8_UINT, VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_B8G8R8_SINT, VK_FORMAT_B8G8R8_SNORM, VK_FORMAT_B8G8R8_SRGB, VK_FORMAT_B8G8R8_UINT, VK_FORMAT_B8G8R8_UNORM, VK_FORMAT_BC1_RGBA_SRGB_BLOCK, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, VK_FORMAT_BC1_RGB_SRGB_BLOCK, VK_FORMAT_BC1_RGB_UNORM_BLOCK, VK_FORMAT_BC2_SRGB_BLOCK, VK_FORMAT_BC2_UNORM_BLOCK, VK_FORMAT_BC3_SRGB_BLOCK, VK_FORMAT_BC3_UNORM_BLOCK, VK_FORMAT_BC4_SNORM_BLOCK, VK_FORMAT_BC4_UNORM_BLOCK, VK_FORMAT_BC5_SNORM_BLOCK, VK_FORMAT_BC5_UNORM_BLOCK, VK_FORMAT_BC6H_SFLOAT_BLOCK, VK_FORMAT_BC6H_UFLOAT_BLOCK, VK_FORMAT_BC7_SRGB_BLOCK, VK_FORMAT_BC7_UNORM_BLOCK, VK_FORMAT_D16_UNORM, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, VK_FORMAT_EAC_R11G11_SNORM_BLOCK, VK_FORMAT_EAC_R11G11_UNORM_BLOCK, VK_FORMAT_EAC_R11_SNORM_BLOCK, VK_FORMAT_EAC_R11_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK, VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK, VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK, VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16, VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16, VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG, VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG, VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16, VK_FORMAT_R10X6G10X6_UNORM_2PACK16, VK_FORMAT_R10X6_UNORM_PACK16, VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16, VK_FORMAT_R12X4G12X4_UNORM_2PACK16, VK_FORMAT_R12X4_UNORM_PACK16, VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R16G16B16A16_SINT, VK_FORMAT_R16G16B16A16_SNORM, VK_FORMAT_R16G16B16A16_UINT, VK_FORMAT_R16G16B16A16_UNORM, VK_FORMAT_R16G16B16_SFLOAT, VK_FORMAT_R16G16B16_SINT, VK_FORMAT_R16G16B16_SNORM, VK_FORMAT_R16G16B16_UINT, VK_FORMAT_R16G16B16_UNORM, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R16G16_SINT, VK_FORMAT_R16G16_SNORM, VK_FORMAT_R16G16_UINT, VK_FORMAT_R16G16_UNORM, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R16_SINT, VK_FORMAT_R16_SNORM, VK_FORMAT_R16_UINT, VK_FORMAT_R16_UNORM, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32B32_SINT, VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32_UINT, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R32_SINT, VK_FORMAT_R32_UINT, VK_FORMAT_R4G4B4A4_UNORM_PACK16, VK_FORMAT_R4G4_UNORM_PACK8, VK_FORMAT_R5G5B5A1_UNORM_PACK16, VK_FORMAT_R5G6B5_UNORM_PACK16, VK_FORMAT_R64G64B64A64_SFLOAT, VK_FORMAT_R64G64B64A64_SINT, VK_FORMAT_R64G64B64A64_UINT, VK_FORMAT_R64G64B64_SFLOAT, VK_FORMAT_R64G64B64_SINT, VK_FORMAT_R64G64B64_UINT, VK_FORMAT_R64G64_SFLOAT, VK_FORMAT_R64G64_SINT, VK_FORMAT_R64G64_UINT, VK_FORMAT_R64_SFLOAT, VK_FORMAT_R64_SINT, VK_FORMAT_R64_UINT, VK_FORMAT_R8G8B8A8_SINT, VK_FORMAT_R8G8B8A8_SNORM, VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_R8G8B8A8_UINT, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8_SINT, VK_FORMAT_R8G8B8_SNORM, VK_FORMAT_R8G8B8_SRGB, VK_FORMAT_R8G8B8_UINT, VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_R8G8_SINT, VK_FORMAT_R8G8_SNORM, VK_FORMAT_R8G8_SRGB, VK_FORMAT_R8G8_UINT, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8_SINT, VK_FORMAT_R8_SNORM, VK_FORMAT_R8_SRGB, VK_FORMAT_R8_UINT, VK_FORMAT_R8_UNORM, VK_FORMAT_S8_UINT, VK_FORMAT_UNDEFINED, VK_FORMAT_X8_D24_UNORM_PACK32, read, write };\n//# sourceMappingURL=ktx-parse.modern.js.map\n","/* global require */\r\nimport defined from \"../Core/defined.js\";\r\nimport Check from \"../Core/Check.js\";\r\nimport PixelFormat from \"../Core/PixelFormat.js\";\r\nimport RuntimeError from \"../Core/RuntimeError.js\";\r\nimport VulkanConstants from \"../Core//VulkanConstants.js\";\r\nimport PixelDatatype from \"../Renderer/PixelDatatype.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\nimport { read } from \"ktx-parse\";\r\n\r\nconst faceOrder = [\r\n \"positiveX\",\r\n \"negativeX\",\r\n \"positiveY\",\r\n \"negativeY\",\r\n \"positiveZ\",\r\n \"negativeZ\",\r\n];\r\n\r\n// Flags\r\nconst colorModelETC1S = 163;\r\nconst colorModelUASTC = 166;\r\n\r\nlet transcoderModule;\r\nfunction transcode(parameters, transferableObjects) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.object(\"transcoderModule\", transcoderModule);\r\n //>>includeEnd('debug');\r\n\r\n const data = parameters.ktx2Buffer;\r\n const supportedTargetFormats = parameters.supportedTargetFormats;\r\n let header;\r\n try {\r\n header = read(data);\r\n } catch (e) {\r\n throw new RuntimeError(\"Invalid KTX2 file.\");\r\n }\r\n\r\n if (header.layerCount !== 0) {\r\n throw new RuntimeError(\"KTX2 texture arrays are not supported.\");\r\n }\r\n\r\n if (header.pixelDepth !== 0) {\r\n throw new RuntimeError(\"KTX2 3D textures are unsupported.\");\r\n }\r\n\r\n const dfd = header.dataFormatDescriptor[0];\r\n const result = new Array(header.levelCount);\r\n\r\n if (\r\n header.vkFormat === 0x0 &&\r\n (dfd.colorModel === colorModelETC1S || dfd.colorModel === colorModelUASTC)\r\n ) {\r\n // Compressed, initialize transcoder module\r\n transcodeCompressed(\r\n data,\r\n header,\r\n supportedTargetFormats,\r\n transcoderModule,\r\n transferableObjects,\r\n result\r\n );\r\n } else {\r\n transferableObjects.push(data.buffer);\r\n parseUncompressed(header, result);\r\n }\r\n\r\n return result;\r\n}\r\n\r\n// Parser for uncompressed\r\nfunction parseUncompressed(header, result) {\r\n const internalFormat =\r\n header.vkFormat === VulkanConstants.VK_FORMAT_R8G8B8_SRGB\r\n ? PixelFormat.RGB\r\n : PixelFormat.RGBA;\r\n let datatype;\r\n if (header.vkFormat === VulkanConstants.VK_FORMAT_R8G8B8A8_UNORM) {\r\n datatype = PixelDatatype.UNSIGNED_BYTE;\r\n } else if (\r\n header.vkFormat === VulkanConstants.VK_FORMAT_R16G16B16A16_SFLOAT\r\n ) {\r\n datatype = PixelDatatype.HALF_FLOAT;\r\n } else if (\r\n header.vkFormat === VulkanConstants.VK_FORMAT_R32G32B32A32_SFLOAT\r\n ) {\r\n datatype = PixelDatatype.FLOAT;\r\n }\r\n\r\n for (let i = 0; i < header.levels.length; ++i) {\r\n const level = {};\r\n result[i] = level;\r\n const levelBuffer = header.levels[i].levelData;\r\n\r\n const width = header.pixelWidth >> i;\r\n const height = header.pixelHeight >> i;\r\n const faceLength =\r\n width * height * PixelFormat.componentsLength(internalFormat);\r\n\r\n for (let j = 0; j < header.faceCount; ++j) {\r\n // multiply levelBuffer.byteOffset by the size in bytes of the pixel data type\r\n const faceByteOffset =\r\n levelBuffer.byteOffset + faceLength * header.typeSize * j;\r\n let faceView;\r\n if (!defined(datatype) || PixelDatatype.sizeInBytes(datatype) === 1) {\r\n faceView = new Uint8Array(\r\n levelBuffer.buffer,\r\n faceByteOffset,\r\n faceLength\r\n );\r\n } else if (PixelDatatype.sizeInBytes(datatype) === 2) {\r\n faceView = new Uint16Array(\r\n levelBuffer.buffer,\r\n faceByteOffset,\r\n faceLength\r\n );\r\n } else {\r\n faceView = new Float32Array(\r\n levelBuffer.buffer,\r\n faceByteOffset,\r\n faceLength\r\n );\r\n }\r\n\r\n level[faceOrder[j]] = {\r\n internalFormat: internalFormat,\r\n datatype: datatype,\r\n width: width,\r\n height: height,\r\n levelBuffer: faceView,\r\n };\r\n }\r\n }\r\n}\r\n\r\nfunction transcodeCompressed(\r\n data,\r\n header,\r\n supportedTargetFormats,\r\n transcoderModule,\r\n transferableObjects,\r\n result\r\n) {\r\n const ktx2File = new transcoderModule.KTX2File(data);\r\n let width = ktx2File.getWidth();\r\n let height = ktx2File.getHeight();\r\n const levels = ktx2File.getLevels();\r\n const hasAlpha = ktx2File.getHasAlpha();\r\n\r\n if (!(width > 0) || !(height > 0) || !(levels > 0)) {\r\n ktx2File.close();\r\n ktx2File.delete();\r\n throw new RuntimeError(\"Invalid KTX2 file\");\r\n }\r\n\r\n let internalFormat, transcoderFormat;\r\n const dfd = header.dataFormatDescriptor[0];\r\n const BasisFormat = transcoderModule.transcoder_texture_format;\r\n\r\n // Determine target format based on platform support\r\n if (dfd.colorModel === colorModelETC1S) {\r\n if (supportedTargetFormats.etc) {\r\n internalFormat = hasAlpha\r\n ? PixelFormat.RGBA8_ETC2_EAC\r\n : PixelFormat.RGB8_ETC2;\r\n transcoderFormat = hasAlpha\r\n ? BasisFormat.cTFETC2_RGBA\r\n : BasisFormat.cTFETC1_RGB;\r\n } else if (supportedTargetFormats.etc1 && !hasAlpha) {\r\n internalFormat = PixelFormat.RGB_ETC1;\r\n transcoderFormat = BasisFormat.cTFETC1_RGB;\r\n } else if (supportedTargetFormats.s3tc) {\r\n internalFormat = hasAlpha ? PixelFormat.RGBA_DXT5 : PixelFormat.RGB_DXT1;\r\n transcoderFormat = hasAlpha\r\n ? BasisFormat.cTFBC3_RGBA\r\n : BasisFormat.cTFBC1_RGB;\r\n } else if (supportedTargetFormats.pvrtc) {\r\n internalFormat = hasAlpha\r\n ? PixelFormat.RGBA_PVRTC_4BPPV1\r\n : PixelFormat.RGB_PVRTC_4BPPV1;\r\n transcoderFormat = hasAlpha\r\n ? BasisFormat.cTFPVRTC1_4_RGBA\r\n : BasisFormat.cTFPVRTC1_4_RGB;\r\n } else if (supportedTargetFormats.astc) {\r\n internalFormat = PixelFormat.RGBA_ASTC;\r\n transcoderFormat = BasisFormat.cTFASTC_4x4_RGBA;\r\n } else if (supportedTargetFormats.bc7) {\r\n internalFormat = PixelFormat.RGBA_BC7;\r\n transcoderFormat = BasisFormat.cTFBC7_RGBA;\r\n } else {\r\n throw new RuntimeError(\r\n \"No transcoding format target available for ETC1S compressed ktx2.\"\r\n );\r\n }\r\n } else if (dfd.colorModel === colorModelUASTC) {\r\n if (supportedTargetFormats.astc) {\r\n internalFormat = PixelFormat.RGBA_ASTC;\r\n transcoderFormat = BasisFormat.cTFASTC_4x4_RGBA;\r\n } else if (supportedTargetFormats.bc7) {\r\n internalFormat = PixelFormat.RGBA_BC7;\r\n transcoderFormat = BasisFormat.cTFBC7_RGBA;\r\n } else if (supportedTargetFormats.s3tc) {\r\n internalFormat = hasAlpha ? PixelFormat.RGBA_DXT5 : PixelFormat.RGB_DXT1;\r\n transcoderFormat = hasAlpha\r\n ? BasisFormat.cTFBC3_RGBA\r\n : BasisFormat.cTFBC1_RGB;\r\n } else if (supportedTargetFormats.etc) {\r\n internalFormat = hasAlpha\r\n ? PixelFormat.RGBA8_ETC2_EAC\r\n : PixelFormat.RGB8_ETC2;\r\n transcoderFormat = hasAlpha\r\n ? BasisFormat.cTFETC2_RGBA\r\n : BasisFormat.cTFETC1_RGB;\r\n } else if (supportedTargetFormats.etc1 && !hasAlpha) {\r\n internalFormat = PixelFormat.RGB_ETC1;\r\n transcoderFormat = BasisFormat.cTFETC1_RGB;\r\n } else if (supportedTargetFormats.pvrtc) {\r\n internalFormat = hasAlpha\r\n ? PixelFormat.RGBA_PVRTC_4BPPV1\r\n : PixelFormat.RGB_PVRTC_4BPPV1;\r\n transcoderFormat = hasAlpha\r\n ? BasisFormat.cTFPVRTC1_4_RGBA\r\n : BasisFormat.cTFPVRTC1_4_RGB;\r\n } else {\r\n throw new RuntimeError(\r\n \"No transcoding format target available for UASTC compressed ktx2.\"\r\n );\r\n }\r\n }\r\n\r\n if (!ktx2File.startTranscoding()) {\r\n ktx2File.close();\r\n ktx2File.delete();\r\n throw new RuntimeError(\"startTranscoding() failed\");\r\n }\r\n\r\n for (let i = 0; i < header.levels.length; ++i) {\r\n const level = {};\r\n result[i] = level;\r\n width = header.pixelWidth >> i;\r\n height = header.pixelHeight >> i;\r\n\r\n // Since supercompressed cubemaps are unsupported, this function\r\n // does not iterate over KTX2 faces and assumes faceCount = 1.\r\n\r\n const dstSize = ktx2File.getImageTranscodedSizeInBytes(\r\n i, // level index\r\n 0, // layer index\r\n 0, // face index\r\n transcoderFormat.value\r\n );\r\n const dst = new Uint8Array(dstSize);\r\n\r\n const transcoded = ktx2File.transcodeImage(\r\n dst,\r\n i, // level index\r\n 0, // layer index\r\n 0, // face index\r\n transcoderFormat.value,\r\n 0, // get_alpha_for_opaque_formats\r\n -1, // channel0\r\n -1 // channel1\r\n );\r\n\r\n if (!defined(transcoded)) {\r\n throw new RuntimeError(\"transcodeImage() failed.\");\r\n }\r\n\r\n transferableObjects.push(dst.buffer);\r\n\r\n level[faceOrder[0]] = {\r\n internalFormat: internalFormat,\r\n width: width,\r\n height: height,\r\n levelBuffer: dst,\r\n };\r\n }\r\n\r\n ktx2File.close();\r\n ktx2File.delete();\r\n return result;\r\n}\r\n\r\nfunction initWorker(compiledModule) {\r\n transcoderModule = compiledModule;\r\n transcoderModule.initializeBasis();\r\n\r\n self.onmessage = createTaskProcessorWorker(transcode);\r\n self.postMessage(true);\r\n}\r\n\r\nfunction transcodeKTX2(event) {\r\n const data = event.data;\r\n\r\n // Expect the first message to be to load a web assembly module\r\n const wasmConfig = data.webAssemblyConfig;\r\n if (defined(wasmConfig)) {\r\n // Require and compile WebAssembly module, or use fallback if not supported\r\n return require([wasmConfig.modulePath], function (mscBasisTranscoder) {\r\n if (defined(wasmConfig.wasmBinaryFile)) {\r\n if (!defined(mscBasisTranscoder)) {\r\n mscBasisTranscoder = self.MSC_TRANSCODER;\r\n }\r\n\r\n mscBasisTranscoder(wasmConfig).then(function (compiledModule) {\r\n initWorker(compiledModule);\r\n });\r\n } else {\r\n return mscBasisTranscoder().then(function (transcoder) {\r\n initWorker(transcoder);\r\n });\r\n }\r\n });\r\n }\r\n}\r\nexport default transcodeKTX2;\r\n"],"names":["WebGLConstants","PixelDatatype","Check","RuntimeError","VulkanConstants","PixelFormat","defined"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;EAEA;EACA;EACA;EACA;EACA;EACA;EACA,MAAM,aAAa,GAAG;EACtB,EAAE,aAAa,EAAEA,6BAAc,CAAC,aAAa;EAC7C,EAAE,cAAc,EAAEA,6BAAc,CAAC,cAAc;EAC/C,EAAE,YAAY,EAAEA,6BAAc,CAAC,YAAY;EAC3C,EAAE,KAAK,EAAEA,6BAAc,CAAC,KAAK;EAC7B,EAAE,UAAU,EAAEA,6BAAc,CAAC,cAAc;EAC3C,EAAE,iBAAiB,EAAEA,6BAAc,CAAC,iBAAiB;EACrD,EAAE,sBAAsB,EAAEA,6BAAc,CAAC,sBAAsB;EAC/D,EAAE,sBAAsB,EAAEA,6BAAc,CAAC,sBAAsB;EAC/D,EAAE,oBAAoB,EAAEA,6BAAc,CAAC,oBAAoB;EAC3D,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,aAAa,CAAC,eAAe,GAAG,UAAU,aAAa,EAAE,OAAO,EAAE;EAClE,EAAE,QAAQ,aAAa;EACvB,IAAI,KAAK,aAAa,CAAC,aAAa;EACpC,MAAM,OAAOA,6BAAc,CAAC,aAAa,CAAC;EAC1C,IAAI,KAAK,aAAa,CAAC,cAAc;EACrC,MAAM,OAAOA,6BAAc,CAAC,cAAc,CAAC;EAC3C,IAAI,KAAK,aAAa,CAAC,YAAY;EACnC,MAAM,OAAOA,6BAAc,CAAC,YAAY,CAAC;EACzC,IAAI,KAAK,aAAa,CAAC,KAAK;EAC5B,MAAM,OAAOA,6BAAc,CAAC,KAAK,CAAC;EAClC,IAAI,KAAK,aAAa,CAAC,UAAU;EACjC,MAAM,OAAO,OAAO,CAAC,MAAM;EAC3B,UAAUA,6BAAc,CAAC,UAAU;EACnC,UAAUA,6BAAc,CAAC,cAAc,CAAC;EACxC,IAAI,KAAK,aAAa,CAAC,iBAAiB;EACxC,MAAM,OAAOA,6BAAc,CAAC,iBAAiB,CAAC;EAC9C,IAAI,KAAK,aAAa,CAAC,sBAAsB;EAC7C,MAAM,OAAOA,6BAAc,CAAC,sBAAsB,CAAC;EACnD,IAAI,KAAK,aAAa,CAAC,sBAAsB;EAC7C,MAAM,OAAOA,6BAAc,CAAC,sBAAsB,CAAC;EACnD,IAAI,KAAK,aAAa,CAAC,oBAAoB;EAC3C,MAAM,OAAO,aAAa,CAAC,oBAAoB,CAAC;EAChD,GAAG;EACH,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,aAAa,CAAC,QAAQ,GAAG,UAAU,aAAa,EAAE;EAClD,EAAE;EACF,IAAI,aAAa,KAAK,aAAa,CAAC,iBAAiB;EACrD,IAAI,aAAa,KAAK,aAAa,CAAC,sBAAsB;EAC1D,IAAI,aAAa,KAAK,aAAa,CAAC,sBAAsB;EAC1D,IAAI,aAAa,KAAK,aAAa,CAAC,oBAAoB;EACxD,IAAI;EACJ,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,aAAa,CAAC,WAAW,GAAG,UAAU,aAAa,EAAE;EACrD,EAAE,QAAQ,aAAa;EACvB,IAAI,KAAK,aAAa,CAAC,aAAa;EACpC,MAAM,OAAO,CAAC,CAAC;EACf,IAAI,KAAK,aAAa,CAAC,cAAc,CAAC;EACtC,IAAI,KAAK,aAAa,CAAC,sBAAsB,CAAC;EAC9C,IAAI,KAAK,aAAa,CAAC,sBAAsB,CAAC;EAC9C,IAAI,KAAK,aAAa,CAAC,oBAAoB,CAAC;EAC5C,IAAI,KAAK,aAAa,CAAC,UAAU;EACjC,MAAM,OAAO,CAAC,CAAC;EACf,IAAI,KAAK,aAAa,CAAC,YAAY,CAAC;EACpC,IAAI,KAAK,aAAa,CAAC,KAAK,CAAC;EAC7B,IAAI,KAAK,aAAa,CAAC,iBAAiB;EACxC,MAAM,OAAO,CAAC,CAAC;EACf,GAAG;EACH,CAAC,CAAC;AACF;EACA;EACA;EACA;EACA,aAAa,CAAC,QAAQ,GAAG,UAAU,aAAa,EAAE;EAClD,EAAE;EACF,IAAI,aAAa,KAAK,aAAa,CAAC,aAAa;EACjD,IAAI,aAAa,KAAK,aAAa,CAAC,cAAc;EAClD,IAAI,aAAa,KAAK,aAAa,CAAC,YAAY;EAChD,IAAI,aAAa,KAAK,aAAa,CAAC,KAAK;EACzC,IAAI,aAAa,KAAK,aAAa,CAAC,UAAU;EAC9C,IAAI,aAAa,KAAK,aAAa,CAAC,iBAAiB;EACrD,IAAI,aAAa,KAAK,aAAa,CAAC,sBAAsB;EAC1D,IAAI,aAAa,KAAK,aAAa,CAAC,sBAAsB;EAC1D,IAAI,aAAa,KAAK,aAAa,CAAC,oBAAoB;EACxD,IAAI;EACJ,CAAC,CAAC;AACF;AACA,wBAAe,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;;EC9F3C;EACA;EACA;EACA;EACA;EACA,MAAM,WAAW,GAAG;EACpB;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,eAAe,EAAEA,6BAAc,CAAC,eAAe;AACjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,aAAa,EAAEA,6BAAc,CAAC,aAAa;AAC7C;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,KAAK,EAAEA,6BAAc,CAAC,KAAK;AAC7B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,GAAG,EAAEA,6BAAc,CAAC,GAAG;AACzB;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,IAAI,EAAEA,6BAAc,CAAC,IAAI;AAC3B;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAEA,6BAAc,CAAC,SAAS;AACrC;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,eAAe,EAAEA,6BAAc,CAAC,eAAe;AACjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,QAAQ,EAAEA,6BAAc,CAAC,4BAA4B;AACvD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAEA,6BAAc,CAAC,6BAA6B;AACzD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAEA,6BAAc,CAAC,6BAA6B;AACzD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,SAAS,EAAEA,6BAAc,CAAC,6BAA6B;AACzD;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,gBAAgB,EAAEA,6BAAc,CAAC,+BAA+B;AAClE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,gBAAgB,EAAEA,6BAAc,CAAC,+BAA+B;AAClE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,EAAE,iBAAiB,EAAEA,6BAAc,CAAC,gCAAgC;AACpE;EACA;EACA;EACA;EACA;EACA;EACA;E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"} \ No newline at end of file diff --git a/debug/cesium/Workers/transferTypedArrayTest.js b/debug/cesium/Workers/transferTypedArrayTest.js deleted file mode 100644 index 76ed585..0000000 --- a/debug/cesium/Workers/transferTypedArrayTest.js +++ /dev/null @@ -1,42 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -if (typeof self === "undefined") { - self = {}; -} -self.onmessage = function(event) { - const array = event.data.array; - const postMessage = self.webkitPostMessage || self.postMessage; - try { - postMessage( - { - array - }, - [array.buffer] - ); - } catch (e) { - postMessage({}); - } -}; diff --git a/debug/cesium/Workers/upsampleQuantizedTerrainMesh.js b/debug/cesium/Workers/upsampleQuantizedTerrainMesh.js deleted file mode 100644 index 356d0b6..0000000 --- a/debug/cesium/Workers/upsampleQuantizedTerrainMesh.js +++ /dev/null @@ -1,1049 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -define(['./AttributeCompression-e9888cb8', './Transforms-11fb6b0a', './Matrix2-036c77dd', './Matrix3-f22b0303', './defaultValue-0ab18f7d', './TerrainEncoding-c7d764e4', './IndexDatatype-b4e5cf89', './Check-d10e5f2e', './Math-9be8b918', './OrientedBoundingBox-7e2eebab', './createTaskProcessorWorker', './ComponentDatatype-13a5630b', './WebGLConstants-f27a5e29', './combine-4598d225', './RuntimeError-e5c6a8b9', './EllipsoidTangentPlane-c421b2cb', './AxisAlignedBoundingBox-50342d27', './IntersectionTests-2c7928de', './Plane-c9f1487d'], (function (AttributeCompression, Transforms, Matrix2, Matrix3, defaultValue, TerrainEncoding, IndexDatatype, Check, Math$1, OrientedBoundingBox, createTaskProcessorWorker, ComponentDatatype, WebGLConstants, combine, RuntimeError, EllipsoidTangentPlane, AxisAlignedBoundingBox, IntersectionTests, Plane) { 'use strict'; - - /** - * Contains functions for operating on 2D triangles. - * - * @namespace Intersections2D - */ - const Intersections2D = {}; - - /** - * Splits a 2D triangle at given axis-aligned threshold value and returns the resulting - * polygon on a given side of the threshold. The resulting polygon may have 0, 1, 2, - * 3, or 4 vertices. - * - * @param {Number} threshold The threshold coordinate value at which to clip the triangle. - * @param {Boolean} keepAbove true to keep the portion of the triangle above the threshold, or false - * to keep the portion below. - * @param {Number} u0 The coordinate of the first vertex in the triangle, in counter-clockwise order. - * @param {Number} u1 The coordinate of the second vertex in the triangle, in counter-clockwise order. - * @param {Number} u2 The coordinate of the third vertex in the triangle, in counter-clockwise order. - * @param {Number[]} [result] The array into which to copy the result. If this parameter is not supplied, - * a new array is constructed and returned. - * @returns {Number[]} The polygon that results after the clip, specified as a list of - * vertices. The vertices are specified in counter-clockwise order. - * Each vertex is either an index from the existing list (identified as - * a 0, 1, or 2) or -1 indicating a new vertex not in the original triangle. - * For new vertices, the -1 is followed by three additional numbers: the - * index of each of the two original vertices forming the line segment that - * the new vertex lies on, and the fraction of the distance from the first - * vertex to the second one. - * - * @example - * const result = Cesium.Intersections2D.clipTriangleAtAxisAlignedThreshold(0.5, false, 0.2, 0.6, 0.4); - * // result === [2, 0, -1, 1, 0, 0.25, -1, 1, 2, 0.5] - */ - Intersections2D.clipTriangleAtAxisAlignedThreshold = function ( - threshold, - keepAbove, - u0, - u1, - u2, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(threshold)) { - throw new Check.DeveloperError("threshold is required."); - } - if (!defaultValue.defined(keepAbove)) { - throw new Check.DeveloperError("keepAbove is required."); - } - if (!defaultValue.defined(u0)) { - throw new Check.DeveloperError("u0 is required."); - } - if (!defaultValue.defined(u1)) { - throw new Check.DeveloperError("u1 is required."); - } - if (!defaultValue.defined(u2)) { - throw new Check.DeveloperError("u2 is required."); - } - //>>includeEnd('debug'); - - if (!defaultValue.defined(result)) { - result = []; - } else { - result.length = 0; - } - - let u0Behind; - let u1Behind; - let u2Behind; - if (keepAbove) { - u0Behind = u0 < threshold; - u1Behind = u1 < threshold; - u2Behind = u2 < threshold; - } else { - u0Behind = u0 > threshold; - u1Behind = u1 > threshold; - u2Behind = u2 > threshold; - } - - const numBehind = u0Behind + u1Behind + u2Behind; - - let u01Ratio; - let u02Ratio; - let u12Ratio; - let u10Ratio; - let u20Ratio; - let u21Ratio; - - if (numBehind === 1) { - if (u0Behind) { - u01Ratio = (threshold - u0) / (u1 - u0); - u02Ratio = (threshold - u0) / (u2 - u0); - - result.push(1); - - result.push(2); - - if (u02Ratio !== 1.0) { - result.push(-1); - result.push(0); - result.push(2); - result.push(u02Ratio); - } - - if (u01Ratio !== 1.0) { - result.push(-1); - result.push(0); - result.push(1); - result.push(u01Ratio); - } - } else if (u1Behind) { - u12Ratio = (threshold - u1) / (u2 - u1); - u10Ratio = (threshold - u1) / (u0 - u1); - - result.push(2); - - result.push(0); - - if (u10Ratio !== 1.0) { - result.push(-1); - result.push(1); - result.push(0); - result.push(u10Ratio); - } - - if (u12Ratio !== 1.0) { - result.push(-1); - result.push(1); - result.push(2); - result.push(u12Ratio); - } - } else if (u2Behind) { - u20Ratio = (threshold - u2) / (u0 - u2); - u21Ratio = (threshold - u2) / (u1 - u2); - - result.push(0); - - result.push(1); - - if (u21Ratio !== 1.0) { - result.push(-1); - result.push(2); - result.push(1); - result.push(u21Ratio); - } - - if (u20Ratio !== 1.0) { - result.push(-1); - result.push(2); - result.push(0); - result.push(u20Ratio); - } - } - } else if (numBehind === 2) { - if (!u0Behind && u0 !== threshold) { - u10Ratio = (threshold - u1) / (u0 - u1); - u20Ratio = (threshold - u2) / (u0 - u2); - - result.push(0); - - result.push(-1); - result.push(1); - result.push(0); - result.push(u10Ratio); - - result.push(-1); - result.push(2); - result.push(0); - result.push(u20Ratio); - } else if (!u1Behind && u1 !== threshold) { - u21Ratio = (threshold - u2) / (u1 - u2); - u01Ratio = (threshold - u0) / (u1 - u0); - - result.push(1); - - result.push(-1); - result.push(2); - result.push(1); - result.push(u21Ratio); - - result.push(-1); - result.push(0); - result.push(1); - result.push(u01Ratio); - } else if (!u2Behind && u2 !== threshold) { - u02Ratio = (threshold - u0) / (u2 - u0); - u12Ratio = (threshold - u1) / (u2 - u1); - - result.push(2); - - result.push(-1); - result.push(0); - result.push(2); - result.push(u02Ratio); - - result.push(-1); - result.push(1); - result.push(2); - result.push(u12Ratio); - } - } else if (numBehind !== 3) { - // Completely in front of threshold - result.push(0); - result.push(1); - result.push(2); - } - // else Completely behind threshold - - return result; - }; - - /** - * Compute the barycentric coordinates of a 2D position within a 2D triangle. - * - * @param {Number} x The x coordinate of the position for which to find the barycentric coordinates. - * @param {Number} y The y coordinate of the position for which to find the barycentric coordinates. - * @param {Number} x1 The x coordinate of the triangle's first vertex. - * @param {Number} y1 The y coordinate of the triangle's first vertex. - * @param {Number} x2 The x coordinate of the triangle's second vertex. - * @param {Number} y2 The y coordinate of the triangle's second vertex. - * @param {Number} x3 The x coordinate of the triangle's third vertex. - * @param {Number} y3 The y coordinate of the triangle's third vertex. - * @param {Cartesian3} [result] The instance into to which to copy the result. If this parameter - * is undefined, a new instance is created and returned. - * @returns {Cartesian3} The barycentric coordinates of the position within the triangle. - * - * @example - * const result = Cesium.Intersections2D.computeBarycentricCoordinates(0.0, 0.0, 0.0, 1.0, -1, -0.5, 1, -0.5); - * // result === new Cesium.Cartesian3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0); - */ - Intersections2D.computeBarycentricCoordinates = function ( - x, - y, - x1, - y1, - x2, - y2, - x3, - y3, - result - ) { - //>>includeStart('debug', pragmas.debug); - if (!defaultValue.defined(x)) { - throw new Check.DeveloperError("x is required."); - } - if (!defaultValue.defined(y)) { - throw new Check.DeveloperError("y is required."); - } - if (!defaultValue.defined(x1)) { - throw new Check.DeveloperError("x1 is required."); - } - if (!defaultValue.defined(y1)) { - throw new Check.DeveloperError("y1 is required."); - } - if (!defaultValue.defined(x2)) { - throw new Check.DeveloperError("x2 is required."); - } - if (!defaultValue.defined(y2)) { - throw new Check.DeveloperError("y2 is required."); - } - if (!defaultValue.defined(x3)) { - throw new Check.DeveloperError("x3 is required."); - } - if (!defaultValue.defined(y3)) { - throw new Check.DeveloperError("y3 is required."); - } - //>>includeEnd('debug'); - - const x1mx3 = x1 - x3; - const x3mx2 = x3 - x2; - const y2my3 = y2 - y3; - const y1my3 = y1 - y3; - const inverseDeterminant = 1.0 / (y2my3 * x1mx3 + x3mx2 * y1my3); - const ymy3 = y - y3; - const xmx3 = x - x3; - const l1 = (y2my3 * xmx3 + x3mx2 * ymy3) * inverseDeterminant; - const l2 = (-y1my3 * xmx3 + x1mx3 * ymy3) * inverseDeterminant; - const l3 = 1.0 - l1 - l2; - - if (defaultValue.defined(result)) { - result.x = l1; - result.y = l2; - result.z = l3; - return result; - } - return new Matrix3.Cartesian3(l1, l2, l3); - }; - - /** - * Compute the intersection between 2 line segments - * - * @param {Number} x00 The x coordinate of the first line's first vertex. - * @param {Number} y00 The y coordinate of the first line's first vertex. - * @param {Number} x01 The x coordinate of the first line's second vertex. - * @param {Number} y01 The y coordinate of the first line's second vertex. - * @param {Number} x10 The x coordinate of the second line's first vertex. - * @param {Number} y10 The y coordinate of the second line's first vertex. - * @param {Number} x11 The x coordinate of the second line's second vertex. - * @param {Number} y11 The y coordinate of the second line's second vertex. - * @param {Cartesian2} [result] The instance into to which to copy the result. If this parameter - * is undefined, a new instance is created and returned. - * @returns {Cartesian2} The intersection point, undefined if there is no intersection point or lines are coincident. - * - * @example - * const result = Cesium.Intersections2D.computeLineSegmentLineSegmentIntersection(0.0, 0.0, 0.0, 2.0, -1, 1, 1, 1); - * // result === new Cesium.Cartesian2(0.0, 1.0); - */ - Intersections2D.computeLineSegmentLineSegmentIntersection = function ( - x00, - y00, - x01, - y01, - x10, - y10, - x11, - y11, - result - ) { - //>>includeStart('debug', pragmas.debug); - Check.Check.typeOf.number("x00", x00); - Check.Check.typeOf.number("y00", y00); - Check.Check.typeOf.number("x01", x01); - Check.Check.typeOf.number("y01", y01); - Check.Check.typeOf.number("x10", x10); - Check.Check.typeOf.number("y10", y10); - Check.Check.typeOf.number("x11", x11); - Check.Check.typeOf.number("y11", y11); - //>>includeEnd('debug'); - - const numerator1A = (x11 - x10) * (y00 - y10) - (y11 - y10) * (x00 - x10); - const numerator1B = (x01 - x00) * (y00 - y10) - (y01 - y00) * (x00 - x10); - const denominator1 = (y11 - y10) * (x01 - x00) - (x11 - x10) * (y01 - y00); - - // If denominator = 0, then lines are parallel. If denominator = 0 and both numerators are 0, then coincident - if (denominator1 === 0) { - return; - } - - const ua1 = numerator1A / denominator1; - const ub1 = numerator1B / denominator1; - - if (ua1 >= 0 && ua1 <= 1 && ub1 >= 0 && ub1 <= 1) { - if (!defaultValue.defined(result)) { - result = new Matrix2.Cartesian2(); - } - - result.x = x00 + ua1 * (x01 - x00); - result.y = y00 + ua1 * (y01 - y00); - - return result; - } - }; - var Intersections2D$1 = Intersections2D; - - const maxShort = 32767; - const halfMaxShort = (maxShort / 2) | 0; - - const clipScratch = []; - const clipScratch2 = []; - const verticesScratch = []; - const cartographicScratch = new Matrix3.Cartographic(); - let cartesian3Scratch = new Matrix3.Cartesian3(); - const uScratch = []; - const vScratch = []; - const heightScratch = []; - const indicesScratch = []; - const normalsScratch = []; - const horizonOcclusionPointScratch = new Matrix3.Cartesian3(); - const boundingSphereScratch = new Transforms.BoundingSphere(); - const orientedBoundingBoxScratch = new OrientedBoundingBox.OrientedBoundingBox(); - const decodeTexCoordsScratch = new Matrix2.Cartesian2(); - const octEncodedNormalScratch = new Matrix3.Cartesian3(); - - function upsampleQuantizedTerrainMesh(parameters, transferableObjects) { - const isEastChild = parameters.isEastChild; - const isNorthChild = parameters.isNorthChild; - - const minU = isEastChild ? halfMaxShort : 0; - const maxU = isEastChild ? maxShort : halfMaxShort; - const minV = isNorthChild ? halfMaxShort : 0; - const maxV = isNorthChild ? maxShort : halfMaxShort; - - const uBuffer = uScratch; - const vBuffer = vScratch; - const heightBuffer = heightScratch; - const normalBuffer = normalsScratch; - - uBuffer.length = 0; - vBuffer.length = 0; - heightBuffer.length = 0; - normalBuffer.length = 0; - - const indices = indicesScratch; - indices.length = 0; - - const vertexMap = {}; - - const parentVertices = parameters.vertices; - let parentIndices = parameters.indices; - parentIndices = parentIndices.subarray(0, parameters.indexCountWithoutSkirts); - - const encoding = TerrainEncoding.TerrainEncoding.clone(parameters.encoding); - const hasVertexNormals = encoding.hasVertexNormals; - - let vertexCount = 0; - const quantizedVertexCount = parameters.vertexCountWithoutSkirts; - - const parentMinimumHeight = parameters.minimumHeight; - const parentMaximumHeight = parameters.maximumHeight; - - const parentUBuffer = new Array(quantizedVertexCount); - const parentVBuffer = new Array(quantizedVertexCount); - const parentHeightBuffer = new Array(quantizedVertexCount); - const parentNormalBuffer = hasVertexNormals - ? new Array(quantizedVertexCount * 2) - : undefined; - - const threshold = 20; - let height; - - let i, n; - let u, v; - for (i = 0, n = 0; i < quantizedVertexCount; ++i, n += 2) { - const texCoords = encoding.decodeTextureCoordinates( - parentVertices, - i, - decodeTexCoordsScratch - ); - height = encoding.decodeHeight(parentVertices, i); - - u = Math$1.CesiumMath.clamp((texCoords.x * maxShort) | 0, 0, maxShort); - v = Math$1.CesiumMath.clamp((texCoords.y * maxShort) | 0, 0, maxShort); - parentHeightBuffer[i] = Math$1.CesiumMath.clamp( - (((height - parentMinimumHeight) / - (parentMaximumHeight - parentMinimumHeight)) * - maxShort) | - 0, - 0, - maxShort - ); - - if (u < threshold) { - u = 0; - } - - if (v < threshold) { - v = 0; - } - - if (maxShort - u < threshold) { - u = maxShort; - } - - if (maxShort - v < threshold) { - v = maxShort; - } - - parentUBuffer[i] = u; - parentVBuffer[i] = v; - - if (hasVertexNormals) { - const encodedNormal = encoding.getOctEncodedNormal( - parentVertices, - i, - octEncodedNormalScratch - ); - parentNormalBuffer[n] = encodedNormal.x; - parentNormalBuffer[n + 1] = encodedNormal.y; - } - - if ( - ((isEastChild && u >= halfMaxShort) || - (!isEastChild && u <= halfMaxShort)) && - ((isNorthChild && v >= halfMaxShort) || - (!isNorthChild && v <= halfMaxShort)) - ) { - vertexMap[i] = vertexCount; - uBuffer.push(u); - vBuffer.push(v); - heightBuffer.push(parentHeightBuffer[i]); - if (hasVertexNormals) { - normalBuffer.push(parentNormalBuffer[n]); - normalBuffer.push(parentNormalBuffer[n + 1]); - } - - ++vertexCount; - } - } - - const triangleVertices = []; - triangleVertices.push(new Vertex()); - triangleVertices.push(new Vertex()); - triangleVertices.push(new Vertex()); - - const clippedTriangleVertices = []; - clippedTriangleVertices.push(new Vertex()); - clippedTriangleVertices.push(new Vertex()); - clippedTriangleVertices.push(new Vertex()); - - let clippedIndex; - let clipped2; - - for (i = 0; i < parentIndices.length; i += 3) { - const i0 = parentIndices[i]; - const i1 = parentIndices[i + 1]; - const i2 = parentIndices[i + 2]; - - const u0 = parentUBuffer[i0]; - const u1 = parentUBuffer[i1]; - const u2 = parentUBuffer[i2]; - - triangleVertices[0].initializeIndexed( - parentUBuffer, - parentVBuffer, - parentHeightBuffer, - parentNormalBuffer, - i0 - ); - triangleVertices[1].initializeIndexed( - parentUBuffer, - parentVBuffer, - parentHeightBuffer, - parentNormalBuffer, - i1 - ); - triangleVertices[2].initializeIndexed( - parentUBuffer, - parentVBuffer, - parentHeightBuffer, - parentNormalBuffer, - i2 - ); - - // Clip triangle on the east-west boundary. - const clipped = Intersections2D$1.clipTriangleAtAxisAlignedThreshold( - halfMaxShort, - isEastChild, - u0, - u1, - u2, - clipScratch - ); - - // Get the first clipped triangle, if any. - clippedIndex = 0; - - if (clippedIndex >= clipped.length) { - continue; - } - clippedIndex = clippedTriangleVertices[0].initializeFromClipResult( - clipped, - clippedIndex, - triangleVertices - ); - - if (clippedIndex >= clipped.length) { - continue; - } - clippedIndex = clippedTriangleVertices[1].initializeFromClipResult( - clipped, - clippedIndex, - triangleVertices - ); - - if (clippedIndex >= clipped.length) { - continue; - } - clippedIndex = clippedTriangleVertices[2].initializeFromClipResult( - clipped, - clippedIndex, - triangleVertices - ); - - // Clip the triangle against the North-south boundary. - clipped2 = Intersections2D$1.clipTriangleAtAxisAlignedThreshold( - halfMaxShort, - isNorthChild, - clippedTriangleVertices[0].getV(), - clippedTriangleVertices[1].getV(), - clippedTriangleVertices[2].getV(), - clipScratch2 - ); - addClippedPolygon( - uBuffer, - vBuffer, - heightBuffer, - normalBuffer, - indices, - vertexMap, - clipped2, - clippedTriangleVertices, - hasVertexNormals - ); - - // If there's another vertex in the original clipped result, - // it forms a second triangle. Clip it as well. - if (clippedIndex < clipped.length) { - clippedTriangleVertices[2].clone(clippedTriangleVertices[1]); - clippedTriangleVertices[2].initializeFromClipResult( - clipped, - clippedIndex, - triangleVertices - ); - - clipped2 = Intersections2D$1.clipTriangleAtAxisAlignedThreshold( - halfMaxShort, - isNorthChild, - clippedTriangleVertices[0].getV(), - clippedTriangleVertices[1].getV(), - clippedTriangleVertices[2].getV(), - clipScratch2 - ); - addClippedPolygon( - uBuffer, - vBuffer, - heightBuffer, - normalBuffer, - indices, - vertexMap, - clipped2, - clippedTriangleVertices, - hasVertexNormals - ); - } - } - - const uOffset = isEastChild ? -maxShort : 0; - const vOffset = isNorthChild ? -maxShort : 0; - - const westIndices = []; - const southIndices = []; - const eastIndices = []; - const northIndices = []; - - let minimumHeight = Number.MAX_VALUE; - let maximumHeight = -minimumHeight; - - const cartesianVertices = verticesScratch; - cartesianVertices.length = 0; - - const ellipsoid = Matrix3.Ellipsoid.clone(parameters.ellipsoid); - const rectangle = Matrix2.Rectangle.clone(parameters.childRectangle); - - const north = rectangle.north; - const south = rectangle.south; - let east = rectangle.east; - const west = rectangle.west; - - if (east < west) { - east += Math$1.CesiumMath.TWO_PI; - } - - for (i = 0; i < uBuffer.length; ++i) { - u = Math.round(uBuffer[i]); - if (u <= minU) { - westIndices.push(i); - u = 0; - } else if (u >= maxU) { - eastIndices.push(i); - u = maxShort; - } else { - u = u * 2 + uOffset; - } - - uBuffer[i] = u; - - v = Math.round(vBuffer[i]); - if (v <= minV) { - southIndices.push(i); - v = 0; - } else if (v >= maxV) { - northIndices.push(i); - v = maxShort; - } else { - v = v * 2 + vOffset; - } - - vBuffer[i] = v; - - height = Math$1.CesiumMath.lerp( - parentMinimumHeight, - parentMaximumHeight, - heightBuffer[i] / maxShort - ); - if (height < minimumHeight) { - minimumHeight = height; - } - if (height > maximumHeight) { - maximumHeight = height; - } - - heightBuffer[i] = height; - - cartographicScratch.longitude = Math$1.CesiumMath.lerp(west, east, u / maxShort); - cartographicScratch.latitude = Math$1.CesiumMath.lerp(south, north, v / maxShort); - cartographicScratch.height = height; - - ellipsoid.cartographicToCartesian(cartographicScratch, cartesian3Scratch); - - cartesianVertices.push(cartesian3Scratch.x); - cartesianVertices.push(cartesian3Scratch.y); - cartesianVertices.push(cartesian3Scratch.z); - } - - const boundingSphere = Transforms.BoundingSphere.fromVertices( - cartesianVertices, - Matrix3.Cartesian3.ZERO, - 3, - boundingSphereScratch - ); - const orientedBoundingBox = OrientedBoundingBox.OrientedBoundingBox.fromRectangle( - rectangle, - minimumHeight, - maximumHeight, - ellipsoid, - orientedBoundingBoxScratch - ); - - const occluder = new TerrainEncoding.EllipsoidalOccluder(ellipsoid); - const horizonOcclusionPoint = occluder.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid( - boundingSphere.center, - cartesianVertices, - 3, - boundingSphere.center, - minimumHeight, - horizonOcclusionPointScratch - ); - - const heightRange = maximumHeight - minimumHeight; - - const vertices = new Uint16Array( - uBuffer.length + vBuffer.length + heightBuffer.length - ); - - for (i = 0; i < uBuffer.length; ++i) { - vertices[i] = uBuffer[i]; - } - - let start = uBuffer.length; - - for (i = 0; i < vBuffer.length; ++i) { - vertices[start + i] = vBuffer[i]; - } - - start += vBuffer.length; - - for (i = 0; i < heightBuffer.length; ++i) { - vertices[start + i] = - (maxShort * (heightBuffer[i] - minimumHeight)) / heightRange; - } - - const indicesTypedArray = IndexDatatype.IndexDatatype.createTypedArray( - uBuffer.length, - indices - ); - - let encodedNormals; - if (hasVertexNormals) { - const normalArray = new Uint8Array(normalBuffer); - transferableObjects.push( - vertices.buffer, - indicesTypedArray.buffer, - normalArray.buffer - ); - encodedNormals = normalArray.buffer; - } else { - transferableObjects.push(vertices.buffer, indicesTypedArray.buffer); - } - - return { - vertices: vertices.buffer, - encodedNormals: encodedNormals, - indices: indicesTypedArray.buffer, - minimumHeight: minimumHeight, - maximumHeight: maximumHeight, - westIndices: westIndices, - southIndices: southIndices, - eastIndices: eastIndices, - northIndices: northIndices, - boundingSphere: boundingSphere, - orientedBoundingBox: orientedBoundingBox, - horizonOcclusionPoint: horizonOcclusionPoint, - }; - } - - function Vertex() { - this.vertexBuffer = undefined; - this.index = undefined; - this.first = undefined; - this.second = undefined; - this.ratio = undefined; - } - - Vertex.prototype.clone = function (result) { - if (!defaultValue.defined(result)) { - result = new Vertex(); - } - - result.uBuffer = this.uBuffer; - result.vBuffer = this.vBuffer; - result.heightBuffer = this.heightBuffer; - result.normalBuffer = this.normalBuffer; - result.index = this.index; - result.first = this.first; - result.second = this.second; - result.ratio = this.ratio; - - return result; - }; - - Vertex.prototype.initializeIndexed = function ( - uBuffer, - vBuffer, - heightBuffer, - normalBuffer, - index - ) { - this.uBuffer = uBuffer; - this.vBuffer = vBuffer; - this.heightBuffer = heightBuffer; - this.normalBuffer = normalBuffer; - this.index = index; - this.first = undefined; - this.second = undefined; - this.ratio = undefined; - }; - - Vertex.prototype.initializeFromClipResult = function ( - clipResult, - index, - vertices - ) { - let nextIndex = index + 1; - - if (clipResult[index] !== -1) { - vertices[clipResult[index]].clone(this); - } else { - this.vertexBuffer = undefined; - this.index = undefined; - this.first = vertices[clipResult[nextIndex]]; - ++nextIndex; - this.second = vertices[clipResult[nextIndex]]; - ++nextIndex; - this.ratio = clipResult[nextIndex]; - ++nextIndex; - } - - return nextIndex; - }; - - Vertex.prototype.getKey = function () { - if (this.isIndexed()) { - return this.index; - } - return JSON.stringify({ - first: this.first.getKey(), - second: this.second.getKey(), - ratio: this.ratio, - }); - }; - - Vertex.prototype.isIndexed = function () { - return defaultValue.defined(this.index); - }; - - Vertex.prototype.getH = function () { - if (defaultValue.defined(this.index)) { - return this.heightBuffer[this.index]; - } - return Math$1.CesiumMath.lerp(this.first.getH(), this.second.getH(), this.ratio); - }; - - Vertex.prototype.getU = function () { - if (defaultValue.defined(this.index)) { - return this.uBuffer[this.index]; - } - return Math$1.CesiumMath.lerp(this.first.getU(), this.second.getU(), this.ratio); - }; - - Vertex.prototype.getV = function () { - if (defaultValue.defined(this.index)) { - return this.vBuffer[this.index]; - } - return Math$1.CesiumMath.lerp(this.first.getV(), this.second.getV(), this.ratio); - }; - - let encodedScratch = new Matrix2.Cartesian2(); - // An upsampled triangle may be clipped twice before it is assigned an index - // In this case, we need a buffer to handle the recursion of getNormalX() and getNormalY(). - let depth = -1; - const cartesianScratch1 = [new Matrix3.Cartesian3(), new Matrix3.Cartesian3()]; - const cartesianScratch2 = [new Matrix3.Cartesian3(), new Matrix3.Cartesian3()]; - function lerpOctEncodedNormal(vertex, result) { - ++depth; - - let first = cartesianScratch1[depth]; - let second = cartesianScratch2[depth]; - - first = AttributeCompression.AttributeCompression.octDecode( - vertex.first.getNormalX(), - vertex.first.getNormalY(), - first - ); - second = AttributeCompression.AttributeCompression.octDecode( - vertex.second.getNormalX(), - vertex.second.getNormalY(), - second - ); - cartesian3Scratch = Matrix3.Cartesian3.lerp( - first, - second, - vertex.ratio, - cartesian3Scratch - ); - Matrix3.Cartesian3.normalize(cartesian3Scratch, cartesian3Scratch); - - AttributeCompression.AttributeCompression.octEncode(cartesian3Scratch, result); - - --depth; - - return result; - } - - Vertex.prototype.getNormalX = function () { - if (defaultValue.defined(this.index)) { - return this.normalBuffer[this.index * 2]; - } - - encodedScratch = lerpOctEncodedNormal(this, encodedScratch); - return encodedScratch.x; - }; - - Vertex.prototype.getNormalY = function () { - if (defaultValue.defined(this.index)) { - return this.normalBuffer[this.index * 2 + 1]; - } - - encodedScratch = lerpOctEncodedNormal(this, encodedScratch); - return encodedScratch.y; - }; - - const polygonVertices = []; - polygonVertices.push(new Vertex()); - polygonVertices.push(new Vertex()); - polygonVertices.push(new Vertex()); - polygonVertices.push(new Vertex()); - - function addClippedPolygon( - uBuffer, - vBuffer, - heightBuffer, - normalBuffer, - indices, - vertexMap, - clipped, - triangleVertices, - hasVertexNormals - ) { - if (clipped.length === 0) { - return; - } - - let numVertices = 0; - let clippedIndex = 0; - while (clippedIndex < clipped.length) { - clippedIndex = polygonVertices[numVertices++].initializeFromClipResult( - clipped, - clippedIndex, - triangleVertices - ); - } - - for (let i = 0; i < numVertices; ++i) { - const polygonVertex = polygonVertices[i]; - if (!polygonVertex.isIndexed()) { - const key = polygonVertex.getKey(); - if (defaultValue.defined(vertexMap[key])) { - polygonVertex.newIndex = vertexMap[key]; - } else { - const newIndex = uBuffer.length; - uBuffer.push(polygonVertex.getU()); - vBuffer.push(polygonVertex.getV()); - heightBuffer.push(polygonVertex.getH()); - if (hasVertexNormals) { - normalBuffer.push(polygonVertex.getNormalX()); - normalBuffer.push(polygonVertex.getNormalY()); - } - polygonVertex.newIndex = newIndex; - vertexMap[key] = newIndex; - } - } else { - polygonVertex.newIndex = vertexMap[polygonVertex.index]; - polygonVertex.uBuffer = uBuffer; - polygonVertex.vBuffer = vBuffer; - polygonVertex.heightBuffer = heightBuffer; - if (hasVertexNormals) { - polygonVertex.normalBuffer = normalBuffer; - } - } - } - - if (numVertices === 3) { - // A triangle. - indices.push(polygonVertices[0].newIndex); - indices.push(polygonVertices[1].newIndex); - indices.push(polygonVertices[2].newIndex); - } else if (numVertices === 4) { - // A quad - two triangles. - indices.push(polygonVertices[0].newIndex); - indices.push(polygonVertices[1].newIndex); - indices.push(polygonVertices[2].newIndex); - - indices.push(polygonVertices[0].newIndex); - indices.push(polygonVertices[2].newIndex); - indices.push(polygonVertices[3].newIndex); - } - } - var upsampleQuantizedTerrainMesh$1 = createTaskProcessorWorker(upsampleQuantizedTerrainMesh); - - return upsampleQuantizedTerrainMesh$1; - -})); -//# sourceMappingURL=upsampleQuantizedTerrainMesh.js.map diff --git a/debug/cesium/Workers/upsampleQuantizedTerrainMesh.js.map b/debug/cesium/Workers/upsampleQuantizedTerrainMesh.js.map deleted file mode 100644 index 47b24c0..0000000 --- a/debug/cesium/Workers/upsampleQuantizedTerrainMesh.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"upsampleQuantizedTerrainMesh.js","sources":["../../../Source/Core/Intersections2D.js","../../../Source/WorkersES6/upsampleQuantizedTerrainMesh.js"],"sourcesContent":["import Cartesian2 from \"./Cartesian2.js\";\r\nimport Cartesian3 from \"./Cartesian3.js\";\r\nimport Check from \"./Check.js\";\r\nimport defined from \"./defined.js\";\r\nimport DeveloperError from \"./DeveloperError.js\";\r\n\r\n/**\r\n * Contains functions for operating on 2D triangles.\r\n *\r\n * @namespace Intersections2D\r\n */\r\nconst Intersections2D = {};\r\n\r\n/**\r\n * Splits a 2D triangle at given axis-aligned threshold value and returns the resulting\r\n * polygon on a given side of the threshold. The resulting polygon may have 0, 1, 2,\r\n * 3, or 4 vertices.\r\n *\r\n * @param {Number} threshold The threshold coordinate value at which to clip the triangle.\r\n * @param {Boolean} keepAbove true to keep the portion of the triangle above the threshold, or false\r\n * to keep the portion below.\r\n * @param {Number} u0 The coordinate of the first vertex in the triangle, in counter-clockwise order.\r\n * @param {Number} u1 The coordinate of the second vertex in the triangle, in counter-clockwise order.\r\n * @param {Number} u2 The coordinate of the third vertex in the triangle, in counter-clockwise order.\r\n * @param {Number[]} [result] The array into which to copy the result. If this parameter is not supplied,\r\n * a new array is constructed and returned.\r\n * @returns {Number[]} The polygon that results after the clip, specified as a list of\r\n * vertices. The vertices are specified in counter-clockwise order.\r\n * Each vertex is either an index from the existing list (identified as\r\n * a 0, 1, or 2) or -1 indicating a new vertex not in the original triangle.\r\n * For new vertices, the -1 is followed by three additional numbers: the\r\n * index of each of the two original vertices forming the line segment that\r\n * the new vertex lies on, and the fraction of the distance from the first\r\n * vertex to the second one.\r\n *\r\n * @example\r\n * const result = Cesium.Intersections2D.clipTriangleAtAxisAlignedThreshold(0.5, false, 0.2, 0.6, 0.4);\r\n * // result === [2, 0, -1, 1, 0, 0.25, -1, 1, 2, 0.5]\r\n */\r\nIntersections2D.clipTriangleAtAxisAlignedThreshold = function (\r\n threshold,\r\n keepAbove,\r\n u0,\r\n u1,\r\n u2,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(threshold)) {\r\n throw new DeveloperError(\"threshold is required.\");\r\n }\r\n if (!defined(keepAbove)) {\r\n throw new DeveloperError(\"keepAbove is required.\");\r\n }\r\n if (!defined(u0)) {\r\n throw new DeveloperError(\"u0 is required.\");\r\n }\r\n if (!defined(u1)) {\r\n throw new DeveloperError(\"u1 is required.\");\r\n }\r\n if (!defined(u2)) {\r\n throw new DeveloperError(\"u2 is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n if (!defined(result)) {\r\n result = [];\r\n } else {\r\n result.length = 0;\r\n }\r\n\r\n let u0Behind;\r\n let u1Behind;\r\n let u2Behind;\r\n if (keepAbove) {\r\n u0Behind = u0 < threshold;\r\n u1Behind = u1 < threshold;\r\n u2Behind = u2 < threshold;\r\n } else {\r\n u0Behind = u0 > threshold;\r\n u1Behind = u1 > threshold;\r\n u2Behind = u2 > threshold;\r\n }\r\n\r\n const numBehind = u0Behind + u1Behind + u2Behind;\r\n\r\n let u01Ratio;\r\n let u02Ratio;\r\n let u12Ratio;\r\n let u10Ratio;\r\n let u20Ratio;\r\n let u21Ratio;\r\n\r\n if (numBehind === 1) {\r\n if (u0Behind) {\r\n u01Ratio = (threshold - u0) / (u1 - u0);\r\n u02Ratio = (threshold - u0) / (u2 - u0);\r\n\r\n result.push(1);\r\n\r\n result.push(2);\r\n\r\n if (u02Ratio !== 1.0) {\r\n result.push(-1);\r\n result.push(0);\r\n result.push(2);\r\n result.push(u02Ratio);\r\n }\r\n\r\n if (u01Ratio !== 1.0) {\r\n result.push(-1);\r\n result.push(0);\r\n result.push(1);\r\n result.push(u01Ratio);\r\n }\r\n } else if (u1Behind) {\r\n u12Ratio = (threshold - u1) / (u2 - u1);\r\n u10Ratio = (threshold - u1) / (u0 - u1);\r\n\r\n result.push(2);\r\n\r\n result.push(0);\r\n\r\n if (u10Ratio !== 1.0) {\r\n result.push(-1);\r\n result.push(1);\r\n result.push(0);\r\n result.push(u10Ratio);\r\n }\r\n\r\n if (u12Ratio !== 1.0) {\r\n result.push(-1);\r\n result.push(1);\r\n result.push(2);\r\n result.push(u12Ratio);\r\n }\r\n } else if (u2Behind) {\r\n u20Ratio = (threshold - u2) / (u0 - u2);\r\n u21Ratio = (threshold - u2) / (u1 - u2);\r\n\r\n result.push(0);\r\n\r\n result.push(1);\r\n\r\n if (u21Ratio !== 1.0) {\r\n result.push(-1);\r\n result.push(2);\r\n result.push(1);\r\n result.push(u21Ratio);\r\n }\r\n\r\n if (u20Ratio !== 1.0) {\r\n result.push(-1);\r\n result.push(2);\r\n result.push(0);\r\n result.push(u20Ratio);\r\n }\r\n }\r\n } else if (numBehind === 2) {\r\n if (!u0Behind && u0 !== threshold) {\r\n u10Ratio = (threshold - u1) / (u0 - u1);\r\n u20Ratio = (threshold - u2) / (u0 - u2);\r\n\r\n result.push(0);\r\n\r\n result.push(-1);\r\n result.push(1);\r\n result.push(0);\r\n result.push(u10Ratio);\r\n\r\n result.push(-1);\r\n result.push(2);\r\n result.push(0);\r\n result.push(u20Ratio);\r\n } else if (!u1Behind && u1 !== threshold) {\r\n u21Ratio = (threshold - u2) / (u1 - u2);\r\n u01Ratio = (threshold - u0) / (u1 - u0);\r\n\r\n result.push(1);\r\n\r\n result.push(-1);\r\n result.push(2);\r\n result.push(1);\r\n result.push(u21Ratio);\r\n\r\n result.push(-1);\r\n result.push(0);\r\n result.push(1);\r\n result.push(u01Ratio);\r\n } else if (!u2Behind && u2 !== threshold) {\r\n u02Ratio = (threshold - u0) / (u2 - u0);\r\n u12Ratio = (threshold - u1) / (u2 - u1);\r\n\r\n result.push(2);\r\n\r\n result.push(-1);\r\n result.push(0);\r\n result.push(2);\r\n result.push(u02Ratio);\r\n\r\n result.push(-1);\r\n result.push(1);\r\n result.push(2);\r\n result.push(u12Ratio);\r\n }\r\n } else if (numBehind !== 3) {\r\n // Completely in front of threshold\r\n result.push(0);\r\n result.push(1);\r\n result.push(2);\r\n }\r\n // else Completely behind threshold\r\n\r\n return result;\r\n};\r\n\r\n/**\r\n * Compute the barycentric coordinates of a 2D position within a 2D triangle.\r\n *\r\n * @param {Number} x The x coordinate of the position for which to find the barycentric coordinates.\r\n * @param {Number} y The y coordinate of the position for which to find the barycentric coordinates.\r\n * @param {Number} x1 The x coordinate of the triangle's first vertex.\r\n * @param {Number} y1 The y coordinate of the triangle's first vertex.\r\n * @param {Number} x2 The x coordinate of the triangle's second vertex.\r\n * @param {Number} y2 The y coordinate of the triangle's second vertex.\r\n * @param {Number} x3 The x coordinate of the triangle's third vertex.\r\n * @param {Number} y3 The y coordinate of the triangle's third vertex.\r\n * @param {Cartesian3} [result] The instance into to which to copy the result. If this parameter\r\n * is undefined, a new instance is created and returned.\r\n * @returns {Cartesian3} The barycentric coordinates of the position within the triangle.\r\n *\r\n * @example\r\n * const result = Cesium.Intersections2D.computeBarycentricCoordinates(0.0, 0.0, 0.0, 1.0, -1, -0.5, 1, -0.5);\r\n * // result === new Cesium.Cartesian3(1.0 / 3.0, 1.0 / 3.0, 1.0 / 3.0);\r\n */\r\nIntersections2D.computeBarycentricCoordinates = function (\r\n x,\r\n y,\r\n x1,\r\n y1,\r\n x2,\r\n y2,\r\n x3,\r\n y3,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n if (!defined(x)) {\r\n throw new DeveloperError(\"x is required.\");\r\n }\r\n if (!defined(y)) {\r\n throw new DeveloperError(\"y is required.\");\r\n }\r\n if (!defined(x1)) {\r\n throw new DeveloperError(\"x1 is required.\");\r\n }\r\n if (!defined(y1)) {\r\n throw new DeveloperError(\"y1 is required.\");\r\n }\r\n if (!defined(x2)) {\r\n throw new DeveloperError(\"x2 is required.\");\r\n }\r\n if (!defined(y2)) {\r\n throw new DeveloperError(\"y2 is required.\");\r\n }\r\n if (!defined(x3)) {\r\n throw new DeveloperError(\"x3 is required.\");\r\n }\r\n if (!defined(y3)) {\r\n throw new DeveloperError(\"y3 is required.\");\r\n }\r\n //>>includeEnd('debug');\r\n\r\n const x1mx3 = x1 - x3;\r\n const x3mx2 = x3 - x2;\r\n const y2my3 = y2 - y3;\r\n const y1my3 = y1 - y3;\r\n const inverseDeterminant = 1.0 / (y2my3 * x1mx3 + x3mx2 * y1my3);\r\n const ymy3 = y - y3;\r\n const xmx3 = x - x3;\r\n const l1 = (y2my3 * xmx3 + x3mx2 * ymy3) * inverseDeterminant;\r\n const l2 = (-y1my3 * xmx3 + x1mx3 * ymy3) * inverseDeterminant;\r\n const l3 = 1.0 - l1 - l2;\r\n\r\n if (defined(result)) {\r\n result.x = l1;\r\n result.y = l2;\r\n result.z = l3;\r\n return result;\r\n }\r\n return new Cartesian3(l1, l2, l3);\r\n};\r\n\r\n/**\r\n * Compute the intersection between 2 line segments\r\n *\r\n * @param {Number} x00 The x coordinate of the first line's first vertex.\r\n * @param {Number} y00 The y coordinate of the first line's first vertex.\r\n * @param {Number} x01 The x coordinate of the first line's second vertex.\r\n * @param {Number} y01 The y coordinate of the first line's second vertex.\r\n * @param {Number} x10 The x coordinate of the second line's first vertex.\r\n * @param {Number} y10 The y coordinate of the second line's first vertex.\r\n * @param {Number} x11 The x coordinate of the second line's second vertex.\r\n * @param {Number} y11 The y coordinate of the second line's second vertex.\r\n * @param {Cartesian2} [result] The instance into to which to copy the result. If this parameter\r\n * is undefined, a new instance is created and returned.\r\n * @returns {Cartesian2} The intersection point, undefined if there is no intersection point or lines are coincident.\r\n *\r\n * @example\r\n * const result = Cesium.Intersections2D.computeLineSegmentLineSegmentIntersection(0.0, 0.0, 0.0, 2.0, -1, 1, 1, 1);\r\n * // result === new Cesium.Cartesian2(0.0, 1.0);\r\n */\r\nIntersections2D.computeLineSegmentLineSegmentIntersection = function (\r\n x00,\r\n y00,\r\n x01,\r\n y01,\r\n x10,\r\n y10,\r\n x11,\r\n y11,\r\n result\r\n) {\r\n //>>includeStart('debug', pragmas.debug);\r\n Check.typeOf.number(\"x00\", x00);\r\n Check.typeOf.number(\"y00\", y00);\r\n Check.typeOf.number(\"x01\", x01);\r\n Check.typeOf.number(\"y01\", y01);\r\n Check.typeOf.number(\"x10\", x10);\r\n Check.typeOf.number(\"y10\", y10);\r\n Check.typeOf.number(\"x11\", x11);\r\n Check.typeOf.number(\"y11\", y11);\r\n //>>includeEnd('debug');\r\n\r\n const numerator1A = (x11 - x10) * (y00 - y10) - (y11 - y10) * (x00 - x10);\r\n const numerator1B = (x01 - x00) * (y00 - y10) - (y01 - y00) * (x00 - x10);\r\n const denominator1 = (y11 - y10) * (x01 - x00) - (x11 - x10) * (y01 - y00);\r\n\r\n // If denominator = 0, then lines are parallel. If denominator = 0 and both numerators are 0, then coincident\r\n if (denominator1 === 0) {\r\n return;\r\n }\r\n\r\n const ua1 = numerator1A / denominator1;\r\n const ub1 = numerator1B / denominator1;\r\n\r\n if (ua1 >= 0 && ua1 <= 1 && ub1 >= 0 && ub1 <= 1) {\r\n if (!defined(result)) {\r\n result = new Cartesian2();\r\n }\r\n\r\n result.x = x00 + ua1 * (x01 - x00);\r\n result.y = y00 + ua1 * (y01 - y00);\r\n\r\n return result;\r\n }\r\n};\r\nexport default Intersections2D;\r\n","import AttributeCompression from \"../Core/AttributeCompression.js\";\r\nimport BoundingSphere from \"../Core/BoundingSphere.js\";\r\nimport Cartesian2 from \"../Core/Cartesian2.js\";\r\nimport Cartesian3 from \"../Core/Cartesian3.js\";\r\nimport Cartographic from \"../Core/Cartographic.js\";\r\nimport defined from \"../Core/defined.js\";\r\nimport Ellipsoid from \"../Core/Ellipsoid.js\";\r\nimport EllipsoidalOccluder from \"../Core/EllipsoidalOccluder.js\";\r\nimport IndexDatatype from \"../Core/IndexDatatype.js\";\r\nimport Intersections2D from \"../Core/Intersections2D.js\";\r\nimport CesiumMath from \"../Core/Math.js\";\r\nimport OrientedBoundingBox from \"../Core/OrientedBoundingBox.js\";\r\nimport Rectangle from \"../Core/Rectangle.js\";\r\nimport TerrainEncoding from \"../Core/TerrainEncoding.js\";\r\nimport createTaskProcessorWorker from \"./createTaskProcessorWorker.js\";\r\n\r\nconst maxShort = 32767;\r\nconst halfMaxShort = (maxShort / 2) | 0;\r\n\r\nconst clipScratch = [];\r\nconst clipScratch2 = [];\r\nconst verticesScratch = [];\r\nconst cartographicScratch = new Cartographic();\r\nlet cartesian3Scratch = new Cartesian3();\r\nconst uScratch = [];\r\nconst vScratch = [];\r\nconst heightScratch = [];\r\nconst indicesScratch = [];\r\nconst normalsScratch = [];\r\nconst horizonOcclusionPointScratch = new Cartesian3();\r\nconst boundingSphereScratch = new BoundingSphere();\r\nconst orientedBoundingBoxScratch = new OrientedBoundingBox();\r\nconst decodeTexCoordsScratch = new Cartesian2();\r\nconst octEncodedNormalScratch = new Cartesian3();\r\n\r\nfunction upsampleQuantizedTerrainMesh(parameters, transferableObjects) {\r\n const isEastChild = parameters.isEastChild;\r\n const isNorthChild = parameters.isNorthChild;\r\n\r\n const minU = isEastChild ? halfMaxShort : 0;\r\n const maxU = isEastChild ? maxShort : halfMaxShort;\r\n const minV = isNorthChild ? halfMaxShort : 0;\r\n const maxV = isNorthChild ? maxShort : halfMaxShort;\r\n\r\n const uBuffer = uScratch;\r\n const vBuffer = vScratch;\r\n const heightBuffer = heightScratch;\r\n const normalBuffer = normalsScratch;\r\n\r\n uBuffer.length = 0;\r\n vBuffer.length = 0;\r\n heightBuffer.length = 0;\r\n normalBuffer.length = 0;\r\n\r\n const indices = indicesScratch;\r\n indices.length = 0;\r\n\r\n const vertexMap = {};\r\n\r\n const parentVertices = parameters.vertices;\r\n let parentIndices = parameters.indices;\r\n parentIndices = parentIndices.subarray(0, parameters.indexCountWithoutSkirts);\r\n\r\n const encoding = TerrainEncoding.clone(parameters.encoding);\r\n const hasVertexNormals = encoding.hasVertexNormals;\r\n\r\n let vertexCount = 0;\r\n const quantizedVertexCount = parameters.vertexCountWithoutSkirts;\r\n\r\n const parentMinimumHeight = parameters.minimumHeight;\r\n const parentMaximumHeight = parameters.maximumHeight;\r\n\r\n const parentUBuffer = new Array(quantizedVertexCount);\r\n const parentVBuffer = new Array(quantizedVertexCount);\r\n const parentHeightBuffer = new Array(quantizedVertexCount);\r\n const parentNormalBuffer = hasVertexNormals\r\n ? new Array(quantizedVertexCount * 2)\r\n : undefined;\r\n\r\n const threshold = 20;\r\n let height;\r\n\r\n let i, n;\r\n let u, v;\r\n for (i = 0, n = 0; i < quantizedVertexCount; ++i, n += 2) {\r\n const texCoords = encoding.decodeTextureCoordinates(\r\n parentVertices,\r\n i,\r\n decodeTexCoordsScratch\r\n );\r\n height = encoding.decodeHeight(parentVertices, i);\r\n\r\n u = CesiumMath.clamp((texCoords.x * maxShort) | 0, 0, maxShort);\r\n v = CesiumMath.clamp((texCoords.y * maxShort) | 0, 0, maxShort);\r\n parentHeightBuffer[i] = CesiumMath.clamp(\r\n (((height - parentMinimumHeight) /\r\n (parentMaximumHeight - parentMinimumHeight)) *\r\n maxShort) |\r\n 0,\r\n 0,\r\n maxShort\r\n );\r\n\r\n if (u < threshold) {\r\n u = 0;\r\n }\r\n\r\n if (v < threshold) {\r\n v = 0;\r\n }\r\n\r\n if (maxShort - u < threshold) {\r\n u = maxShort;\r\n }\r\n\r\n if (maxShort - v < threshold) {\r\n v = maxShort;\r\n }\r\n\r\n parentUBuffer[i] = u;\r\n parentVBuffer[i] = v;\r\n\r\n if (hasVertexNormals) {\r\n const encodedNormal = encoding.getOctEncodedNormal(\r\n parentVertices,\r\n i,\r\n octEncodedNormalScratch\r\n );\r\n parentNormalBuffer[n] = encodedNormal.x;\r\n parentNormalBuffer[n + 1] = encodedNormal.y;\r\n }\r\n\r\n if (\r\n ((isEastChild && u >= halfMaxShort) ||\r\n (!isEastChild && u <= halfMaxShort)) &&\r\n ((isNorthChild && v >= halfMaxShort) ||\r\n (!isNorthChild && v <= halfMaxShort))\r\n ) {\r\n vertexMap[i] = vertexCount;\r\n uBuffer.push(u);\r\n vBuffer.push(v);\r\n heightBuffer.push(parentHeightBuffer[i]);\r\n if (hasVertexNormals) {\r\n normalBuffer.push(parentNormalBuffer[n]);\r\n normalBuffer.push(parentNormalBuffer[n + 1]);\r\n }\r\n\r\n ++vertexCount;\r\n }\r\n }\r\n\r\n const triangleVertices = [];\r\n triangleVertices.push(new Vertex());\r\n triangleVertices.push(new Vertex());\r\n triangleVertices.push(new Vertex());\r\n\r\n const clippedTriangleVertices = [];\r\n clippedTriangleVertices.push(new Vertex());\r\n clippedTriangleVertices.push(new Vertex());\r\n clippedTriangleVertices.push(new Vertex());\r\n\r\n let clippedIndex;\r\n let clipped2;\r\n\r\n for (i = 0; i < parentIndices.length; i += 3) {\r\n const i0 = parentIndices[i];\r\n const i1 = parentIndices[i + 1];\r\n const i2 = parentIndices[i + 2];\r\n\r\n const u0 = parentUBuffer[i0];\r\n const u1 = parentUBuffer[i1];\r\n const u2 = parentUBuffer[i2];\r\n\r\n triangleVertices[0].initializeIndexed(\r\n parentUBuffer,\r\n parentVBuffer,\r\n parentHeightBuffer,\r\n parentNormalBuffer,\r\n i0\r\n );\r\n triangleVertices[1].initializeIndexed(\r\n parentUBuffer,\r\n parentVBuffer,\r\n parentHeightBuffer,\r\n parentNormalBuffer,\r\n i1\r\n );\r\n triangleVertices[2].initializeIndexed(\r\n parentUBuffer,\r\n parentVBuffer,\r\n parentHeightBuffer,\r\n parentNormalBuffer,\r\n i2\r\n );\r\n\r\n // Clip triangle on the east-west boundary.\r\n const clipped = Intersections2D.clipTriangleAtAxisAlignedThreshold(\r\n halfMaxShort,\r\n isEastChild,\r\n u0,\r\n u1,\r\n u2,\r\n clipScratch\r\n );\r\n\r\n // Get the first clipped triangle, if any.\r\n clippedIndex = 0;\r\n\r\n if (clippedIndex >= clipped.length) {\r\n continue;\r\n }\r\n clippedIndex = clippedTriangleVertices[0].initializeFromClipResult(\r\n clipped,\r\n clippedIndex,\r\n triangleVertices\r\n );\r\n\r\n if (clippedIndex >= clipped.length) {\r\n continue;\r\n }\r\n clippedIndex = clippedTriangleVertices[1].initializeFromClipResult(\r\n clipped,\r\n clippedIndex,\r\n triangleVertices\r\n );\r\n\r\n if (clippedIndex >= clipped.length) {\r\n continue;\r\n }\r\n clippedIndex = clippedTriangleVertices[2].initializeFromClipResult(\r\n clipped,\r\n clippedIndex,\r\n triangleVertices\r\n );\r\n\r\n // Clip the triangle against the North-south boundary.\r\n clipped2 = Intersections2D.clipTriangleAtAxisAlignedThreshold(\r\n halfMaxShort,\r\n isNorthChild,\r\n clippedTriangleVertices[0].getV(),\r\n clippedTriangleVertices[1].getV(),\r\n clippedTriangleVertices[2].getV(),\r\n clipScratch2\r\n );\r\n addClippedPolygon(\r\n uBuffer,\r\n vBuffer,\r\n heightBuffer,\r\n normalBuffer,\r\n indices,\r\n vertexMap,\r\n clipped2,\r\n clippedTriangleVertices,\r\n hasVertexNormals\r\n );\r\n\r\n // If there's another vertex in the original clipped result,\r\n // it forms a second triangle. Clip it as well.\r\n if (clippedIndex < clipped.length) {\r\n clippedTriangleVertices[2].clone(clippedTriangleVertices[1]);\r\n clippedTriangleVertices[2].initializeFromClipResult(\r\n clipped,\r\n clippedIndex,\r\n triangleVertices\r\n );\r\n\r\n clipped2 = Intersections2D.clipTriangleAtAxisAlignedThreshold(\r\n halfMaxShort,\r\n isNorthChild,\r\n clippedTriangleVertices[0].getV(),\r\n clippedTriangleVertices[1].getV(),\r\n clippedTriangleVertices[2].getV(),\r\n clipScratch2\r\n );\r\n addClippedPolygon(\r\n uBuffer,\r\n vBuffer,\r\n heightBuffer,\r\n normalBuffer,\r\n indices,\r\n vertexMap,\r\n clipped2,\r\n clippedTriangleVertices,\r\n hasVertexNormals\r\n );\r\n }\r\n }\r\n\r\n const uOffset = isEastChild ? -maxShort : 0;\r\n const vOffset = isNorthChild ? -maxShort : 0;\r\n\r\n const westIndices = [];\r\n const southIndices = [];\r\n const eastIndices = [];\r\n const northIndices = [];\r\n\r\n let minimumHeight = Number.MAX_VALUE;\r\n let maximumHeight = -minimumHeight;\r\n\r\n const cartesianVertices = verticesScratch;\r\n cartesianVertices.length = 0;\r\n\r\n const ellipsoid = Ellipsoid.clone(parameters.ellipsoid);\r\n const rectangle = Rectangle.clone(parameters.childRectangle);\r\n\r\n const north = rectangle.north;\r\n const south = rectangle.south;\r\n let east = rectangle.east;\r\n const west = rectangle.west;\r\n\r\n if (east < west) {\r\n east += CesiumMath.TWO_PI;\r\n }\r\n\r\n for (i = 0; i < uBuffer.length; ++i) {\r\n u = Math.round(uBuffer[i]);\r\n if (u <= minU) {\r\n westIndices.push(i);\r\n u = 0;\r\n } else if (u >= maxU) {\r\n eastIndices.push(i);\r\n u = maxShort;\r\n } else {\r\n u = u * 2 + uOffset;\r\n }\r\n\r\n uBuffer[i] = u;\r\n\r\n v = Math.round(vBuffer[i]);\r\n if (v <= minV) {\r\n southIndices.push(i);\r\n v = 0;\r\n } else if (v >= maxV) {\r\n northIndices.push(i);\r\n v = maxShort;\r\n } else {\r\n v = v * 2 + vOffset;\r\n }\r\n\r\n vBuffer[i] = v;\r\n\r\n height = CesiumMath.lerp(\r\n parentMinimumHeight,\r\n parentMaximumHeight,\r\n heightBuffer[i] / maxShort\r\n );\r\n if (height < minimumHeight) {\r\n minimumHeight = height;\r\n }\r\n if (height > maximumHeight) {\r\n maximumHeight = height;\r\n }\r\n\r\n heightBuffer[i] = height;\r\n\r\n cartographicScratch.longitude = CesiumMath.lerp(west, east, u / maxShort);\r\n cartographicScratch.latitude = CesiumMath.lerp(south, north, v / maxShort);\r\n cartographicScratch.height = height;\r\n\r\n ellipsoid.cartographicToCartesian(cartographicScratch, cartesian3Scratch);\r\n\r\n cartesianVertices.push(cartesian3Scratch.x);\r\n cartesianVertices.push(cartesian3Scratch.y);\r\n cartesianVertices.push(cartesian3Scratch.z);\r\n }\r\n\r\n const boundingSphere = BoundingSphere.fromVertices(\r\n cartesianVertices,\r\n Cartesian3.ZERO,\r\n 3,\r\n boundingSphereScratch\r\n );\r\n const orientedBoundingBox = OrientedBoundingBox.fromRectangle(\r\n rectangle,\r\n minimumHeight,\r\n maximumHeight,\r\n ellipsoid,\r\n orientedBoundingBoxScratch\r\n );\r\n\r\n const occluder = new EllipsoidalOccluder(ellipsoid);\r\n const horizonOcclusionPoint = occluder.computeHorizonCullingPointFromVerticesPossiblyUnderEllipsoid(\r\n boundingSphere.center,\r\n cartesianVertices,\r\n 3,\r\n boundingSphere.center,\r\n minimumHeight,\r\n horizonOcclusionPointScratch\r\n );\r\n\r\n const heightRange = maximumHeight - minimumHeight;\r\n\r\n const vertices = new Uint16Array(\r\n uBuffer.length + vBuffer.length + heightBuffer.length\r\n );\r\n\r\n for (i = 0; i < uBuffer.length; ++i) {\r\n vertices[i] = uBuffer[i];\r\n }\r\n\r\n let start = uBuffer.length;\r\n\r\n for (i = 0; i < vBuffer.length; ++i) {\r\n vertices[start + i] = vBuffer[i];\r\n }\r\n\r\n start += vBuffer.length;\r\n\r\n for (i = 0; i < heightBuffer.length; ++i) {\r\n vertices[start + i] =\r\n (maxShort * (heightBuffer[i] - minimumHeight)) / heightRange;\r\n }\r\n\r\n const indicesTypedArray = IndexDatatype.createTypedArray(\r\n uBuffer.length,\r\n indices\r\n );\r\n\r\n let encodedNormals;\r\n if (hasVertexNormals) {\r\n const normalArray = new Uint8Array(normalBuffer);\r\n transferableObjects.push(\r\n vertices.buffer,\r\n indicesTypedArray.buffer,\r\n normalArray.buffer\r\n );\r\n encodedNormals = normalArray.buffer;\r\n } else {\r\n transferableObjects.push(vertices.buffer, indicesTypedArray.buffer);\r\n }\r\n\r\n return {\r\n vertices: vertices.buffer,\r\n encodedNormals: encodedNormals,\r\n indices: indicesTypedArray.buffer,\r\n minimumHeight: minimumHeight,\r\n maximumHeight: maximumHeight,\r\n westIndices: westIndices,\r\n southIndices: southIndices,\r\n eastIndices: eastIndices,\r\n northIndices: northIndices,\r\n boundingSphere: boundingSphere,\r\n orientedBoundingBox: orientedBoundingBox,\r\n horizonOcclusionPoint: horizonOcclusionPoint,\r\n };\r\n}\r\n\r\nfunction Vertex() {\r\n this.vertexBuffer = undefined;\r\n this.index = undefined;\r\n this.first = undefined;\r\n this.second = undefined;\r\n this.ratio = undefined;\r\n}\r\n\r\nVertex.prototype.clone = function (result) {\r\n if (!defined(result)) {\r\n result = new Vertex();\r\n }\r\n\r\n result.uBuffer = this.uBuffer;\r\n result.vBuffer = this.vBuffer;\r\n result.heightBuffer = this.heightBuffer;\r\n result.normalBuffer = this.normalBuffer;\r\n result.index = this.index;\r\n result.first = this.first;\r\n result.second = this.second;\r\n result.ratio = this.ratio;\r\n\r\n return result;\r\n};\r\n\r\nVertex.prototype.initializeIndexed = function (\r\n uBuffer,\r\n vBuffer,\r\n heightBuffer,\r\n normalBuffer,\r\n index\r\n) {\r\n this.uBuffer = uBuffer;\r\n this.vBuffer = vBuffer;\r\n this.heightBuffer = heightBuffer;\r\n this.normalBuffer = normalBuffer;\r\n this.index = index;\r\n this.first = undefined;\r\n this.second = undefined;\r\n this.ratio = undefined;\r\n};\r\n\r\nVertex.prototype.initializeFromClipResult = function (\r\n clipResult,\r\n index,\r\n vertices\r\n) {\r\n let nextIndex = index + 1;\r\n\r\n if (clipResult[index] !== -1) {\r\n vertices[clipResult[index]].clone(this);\r\n } else {\r\n this.vertexBuffer = undefined;\r\n this.index = undefined;\r\n this.first = vertices[clipResult[nextIndex]];\r\n ++nextIndex;\r\n this.second = vertices[clipResult[nextIndex]];\r\n ++nextIndex;\r\n this.ratio = clipResult[nextIndex];\r\n ++nextIndex;\r\n }\r\n\r\n return nextIndex;\r\n};\r\n\r\nVertex.prototype.getKey = function () {\r\n if (this.isIndexed()) {\r\n return this.index;\r\n }\r\n return JSON.stringify({\r\n first: this.first.getKey(),\r\n second: this.second.getKey(),\r\n ratio: this.ratio,\r\n });\r\n};\r\n\r\nVertex.prototype.isIndexed = function () {\r\n return defined(this.index);\r\n};\r\n\r\nVertex.prototype.getH = function () {\r\n if (defined(this.index)) {\r\n return this.heightBuffer[this.index];\r\n }\r\n return CesiumMath.lerp(this.first.getH(), this.second.getH(), this.ratio);\r\n};\r\n\r\nVertex.prototype.getU = function () {\r\n if (defined(this.index)) {\r\n return this.uBuffer[this.index];\r\n }\r\n return CesiumMath.lerp(this.first.getU(), this.second.getU(), this.ratio);\r\n};\r\n\r\nVertex.prototype.getV = function () {\r\n if (defined(this.index)) {\r\n return this.vBuffer[this.index];\r\n }\r\n return CesiumMath.lerp(this.first.getV(), this.second.getV(), this.ratio);\r\n};\r\n\r\nlet encodedScratch = new Cartesian2();\r\n// An upsampled triangle may be clipped twice before it is assigned an index\r\n// In this case, we need a buffer to handle the recursion of getNormalX() and getNormalY().\r\nlet depth = -1;\r\nconst cartesianScratch1 = [new Cartesian3(), new Cartesian3()];\r\nconst cartesianScratch2 = [new Cartesian3(), new Cartesian3()];\r\nfunction lerpOctEncodedNormal(vertex, result) {\r\n ++depth;\r\n\r\n let first = cartesianScratch1[depth];\r\n let second = cartesianScratch2[depth];\r\n\r\n first = AttributeCompression.octDecode(\r\n vertex.first.getNormalX(),\r\n vertex.first.getNormalY(),\r\n first\r\n );\r\n second = AttributeCompression.octDecode(\r\n vertex.second.getNormalX(),\r\n vertex.second.getNormalY(),\r\n second\r\n );\r\n cartesian3Scratch = Cartesian3.lerp(\r\n first,\r\n second,\r\n vertex.ratio,\r\n cartesian3Scratch\r\n );\r\n Cartesian3.normalize(cartesian3Scratch, cartesian3Scratch);\r\n\r\n AttributeCompression.octEncode(cartesian3Scratch, result);\r\n\r\n --depth;\r\n\r\n return result;\r\n}\r\n\r\nVertex.prototype.getNormalX = function () {\r\n if (defined(this.index)) {\r\n return this.normalBuffer[this.index * 2];\r\n }\r\n\r\n encodedScratch = lerpOctEncodedNormal(this, encodedScratch);\r\n return encodedScratch.x;\r\n};\r\n\r\nVertex.prototype.getNormalY = function () {\r\n if (defined(this.index)) {\r\n return this.normalBuffer[this.index * 2 + 1];\r\n }\r\n\r\n encodedScratch = lerpOctEncodedNormal(this, encodedScratch);\r\n return encodedScratch.y;\r\n};\r\n\r\nconst polygonVertices = [];\r\npolygonVertices.push(new Vertex());\r\npolygonVertices.push(new Vertex());\r\npolygonVertices.push(new Vertex());\r\npolygonVertices.push(new Vertex());\r\n\r\nfunction addClippedPolygon(\r\n uBuffer,\r\n vBuffer,\r\n heightBuffer,\r\n normalBuffer,\r\n indices,\r\n vertexMap,\r\n clipped,\r\n triangleVertices,\r\n hasVertexNormals\r\n) {\r\n if (clipped.length === 0) {\r\n return;\r\n }\r\n\r\n let numVertices = 0;\r\n let clippedIndex = 0;\r\n while (clippedIndex < clipped.length) {\r\n clippedIndex = polygonVertices[numVertices++].initializeFromClipResult(\r\n clipped,\r\n clippedIndex,\r\n triangleVertices\r\n );\r\n }\r\n\r\n for (let i = 0; i < numVertices; ++i) {\r\n const polygonVertex = polygonVertices[i];\r\n if (!polygonVertex.isIndexed()) {\r\n const key = polygonVertex.getKey();\r\n if (defined(vertexMap[key])) {\r\n polygonVertex.newIndex = vertexMap[key];\r\n } else {\r\n const newIndex = uBuffer.length;\r\n uBuffer.push(polygonVertex.getU());\r\n vBuffer.push(polygonVertex.getV());\r\n heightBuffer.push(polygonVertex.getH());\r\n if (hasVertexNormals) {\r\n normalBuffer.push(polygonVertex.getNormalX());\r\n normalBuffer.push(polygonVertex.getNormalY());\r\n }\r\n polygonVertex.newIndex = newIndex;\r\n vertexMap[key] = newIndex;\r\n }\r\n } else {\r\n polygonVertex.newIndex = vertexMap[polygonVertex.index];\r\n polygonVertex.uBuffer = uBuffer;\r\n polygonVertex.vBuffer = vBuffer;\r\n polygonVertex.heightBuffer = heightBuffer;\r\n if (hasVertexNormals) {\r\n polygonVertex.normalBuffer = normalBuffer;\r\n }\r\n }\r\n }\r\n\r\n if (numVertices === 3) {\r\n // A triangle.\r\n indices.push(polygonVertices[0].newIndex);\r\n indices.push(polygonVertices[1].newIndex);\r\n indices.push(polygonVertices[2].newIndex);\r\n } else if (numVertices === 4) {\r\n // A quad - two triangles.\r\n indices.push(polygonVertices[0].newIndex);\r\n indices.push(polygonVertices[1].newIndex);\r\n indices.push(polygonVertices[2].newIndex);\r\n\r\n indices.push(polygonVertices[0].newIndex);\r\n indices.push(polygonVertices[2].newIndex);\r\n indices.push(polygonVertices[3].newIndex);\r\n }\r\n}\r\nexport default createTaskProcessorWorker(upsampleQuantizedTerrainMesh);\r\n"],"names":["defined","DeveloperError","Cartesian3","Check","Cartesian2","Cartographic","BoundingSphere","OrientedBoundingBox","TerrainEncoding","CesiumMath","Intersections2D","Ellipsoid","Rectangle","EllipsoidalOccluder","IndexDatatype","AttributeCompression"],"mappings":"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"} \ No newline at end of file diff --git a/debug/cesium/index.js b/debug/cesium/index.js deleted file mode 100644 index 847b387..0000000 --- a/debug/cesium/index.js +++ /dev/null @@ -1,217485 +0,0 @@ -/** - * @license - * Cesium - https://github.com/CesiumGS/cesium - * Version 1.99 - * - * Copyright 2011-2022 Cesium Contributors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * Columbus View (Pat. Pend.) - * - * Portions licensed separately. - * See https://github.com/CesiumGS/cesium/blob/main/LICENSE.md for full licensing details. - */ - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, { - get: (a3, b) => (typeof require !== "undefined" ? require : a3)[b] -}) : x)(function(x) { - if (typeof require !== "undefined") - return require.apply(this, arguments); - throw new Error('Dynamic require of "' + x + '" is not supported'); -}); -var __commonJS = (cb, mod2) => function __require2() { - return mod2 || (0, cb[__getOwnPropNames(cb)[0]])((mod2 = { exports: {} }).exports, mod2), mod2.exports; -}; -var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); - } - return to; -}; -var __toESM = (mod2, isNodeMode, target) => (target = mod2 != null ? __create(__getProtoOf(mod2)) : {}, __copyProps( - isNodeMode || !mod2 || !mod2.__esModule ? __defProp(target, "default", { value: mod2, enumerable: true }) : target, - mod2 -)); - -// node_modules/mersenne-twister/src/mersenne-twister.js -var require_mersenne_twister = __commonJS({ - "node_modules/mersenne-twister/src/mersenne-twister.js"(exports2, module2) { - var MersenneTwister4 = function(seed) { - if (seed == void 0) { - seed = new Date().getTime(); - } - this.N = 624; - this.M = 397; - this.MATRIX_A = 2567483615; - this.UPPER_MASK = 2147483648; - this.LOWER_MASK = 2147483647; - this.mt = new Array(this.N); - this.mti = this.N + 1; - if (seed.constructor == Array) { - this.init_by_array(seed, seed.length); - } else { - this.init_seed(seed); - } - }; - MersenneTwister4.prototype.init_seed = function(s) { - this.mt[0] = s >>> 0; - for (this.mti = 1; this.mti < this.N; this.mti++) { - var s = this.mt[this.mti - 1] ^ this.mt[this.mti - 1] >>> 30; - this.mt[this.mti] = (((s & 4294901760) >>> 16) * 1812433253 << 16) + (s & 65535) * 1812433253 + this.mti; - this.mt[this.mti] >>>= 0; - } - }; - MersenneTwister4.prototype.init_by_array = function(init_key, key_length) { - var i, j, k; - this.init_seed(19650218); - i = 1; - j = 0; - k = this.N > key_length ? this.N : key_length; - for (; k; k--) { - var s = this.mt[i - 1] ^ this.mt[i - 1] >>> 30; - this.mt[i] = (this.mt[i] ^ (((s & 4294901760) >>> 16) * 1664525 << 16) + (s & 65535) * 1664525) + init_key[j] + j; - this.mt[i] >>>= 0; - i++; - j++; - if (i >= this.N) { - this.mt[0] = this.mt[this.N - 1]; - i = 1; - } - if (j >= key_length) - j = 0; - } - for (k = this.N - 1; k; k--) { - var s = this.mt[i - 1] ^ this.mt[i - 1] >>> 30; - this.mt[i] = (this.mt[i] ^ (((s & 4294901760) >>> 16) * 1566083941 << 16) + (s & 65535) * 1566083941) - i; - this.mt[i] >>>= 0; - i++; - if (i >= this.N) { - this.mt[0] = this.mt[this.N - 1]; - i = 1; - } - } - this.mt[0] = 2147483648; - }; - MersenneTwister4.prototype.random_int = function() { - var y; - var mag01 = new Array(0, this.MATRIX_A); - if (this.mti >= this.N) { - var kk; - if (this.mti == this.N + 1) - this.init_seed(5489); - for (kk = 0; kk < this.N - this.M; kk++) { - y = this.mt[kk] & this.UPPER_MASK | this.mt[kk + 1] & this.LOWER_MASK; - this.mt[kk] = this.mt[kk + this.M] ^ y >>> 1 ^ mag01[y & 1]; - } - for (; kk < this.N - 1; kk++) { - y = this.mt[kk] & this.UPPER_MASK | this.mt[kk + 1] & this.LOWER_MASK; - this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ y >>> 1 ^ mag01[y & 1]; - } - y = this.mt[this.N - 1] & this.UPPER_MASK | this.mt[0] & this.LOWER_MASK; - this.mt[this.N - 1] = this.mt[this.M - 1] ^ y >>> 1 ^ mag01[y & 1]; - this.mti = 0; - } - y = this.mt[this.mti++]; - y ^= y >>> 11; - y ^= y << 7 & 2636928640; - y ^= y << 15 & 4022730752; - y ^= y >>> 18; - return y >>> 0; - }; - MersenneTwister4.prototype.random_int31 = function() { - return this.random_int() >>> 1; - }; - MersenneTwister4.prototype.random_incl = function() { - return this.random_int() * (1 / 4294967295); - }; - MersenneTwister4.prototype.random = function() { - return this.random_int() * (1 / 4294967296); - }; - MersenneTwister4.prototype.random_excl = function() { - return (this.random_int() + 0.5) * (1 / 4294967296); - }; - MersenneTwister4.prototype.random_long = function() { - var a3 = this.random_int() >>> 5, b = this.random_int() >>> 6; - return (a3 * 67108864 + b) * (1 / 9007199254740992); - }; - module2.exports = MersenneTwister4; - } -}); - -// node_modules/urijs/src/punycode.js -var require_punycode = __commonJS({ - "node_modules/urijs/src/punycode.js"(exports2, module2) { - /*! https://mths.be/punycode v1.4.0 by @mathias */ - (function(root) { - var freeExports = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2; - var freeModule = typeof module2 == "object" && module2 && !module2.nodeType && module2; - var freeGlobal = typeof global == "object" && global; - if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) { - root = freeGlobal; - } - var punycode, maxInt = 2147483647, base = 36, tMin = 1, tMax = 26, skew = 38, damp = 700, initialBias = 72, initialN = 128, delimiter = "-", regexPunycode = /^xn--/, regexNonASCII = /[^\x20-\x7E]/, regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g, errors = { - "overflow": "Overflow: input needs wider integers to process", - "not-basic": "Illegal input >= 0x80 (not a basic code point)", - "invalid-input": "Invalid input" - }, baseMinusTMin = base - tMin, floor = Math.floor, stringFromCharCode = String.fromCharCode, key; - function error(type) { - throw new RangeError(errors[type]); - } - function map(array, fn) { - var length3 = array.length; - var result = []; - while (length3--) { - result[length3] = fn(array[length3]); - } - return result; - } - function mapDomain(string, fn) { - var parts = string.split("@"); - var result = ""; - if (parts.length > 1) { - result = parts[0] + "@"; - string = parts[1]; - } - string = string.replace(regexSeparators, "."); - var labels = string.split("."); - var encoded = map(labels, fn).join("."); - return result + encoded; - } - function ucs2decode(string) { - var output = [], counter = 0, length3 = string.length, value, extra; - while (counter < length3) { - value = string.charCodeAt(counter++); - if (value >= 55296 && value <= 56319 && counter < length3) { - extra = string.charCodeAt(counter++); - if ((extra & 64512) == 56320) { - output.push(((value & 1023) << 10) + (extra & 1023) + 65536); - } else { - output.push(value); - counter--; - } - } else { - output.push(value); - } - } - return output; - } - function ucs2encode(array) { - return map(array, function(value) { - var output = ""; - if (value > 65535) { - value -= 65536; - output += stringFromCharCode(value >>> 10 & 1023 | 55296); - value = 56320 | value & 1023; - } - output += stringFromCharCode(value); - return output; - }).join(""); - } - function basicToDigit(codePoint) { - if (codePoint - 48 < 10) { - return codePoint - 22; - } - if (codePoint - 65 < 26) { - return codePoint - 65; - } - if (codePoint - 97 < 26) { - return codePoint - 97; - } - return base; - } - function digitToBasic(digit, flag) { - return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5); - } - function adapt(delta, numPoints, firstTime) { - var k = 0; - delta = firstTime ? floor(delta / damp) : delta >> 1; - delta += floor(delta / numPoints); - for (; delta > baseMinusTMin * tMax >> 1; k += base) { - delta = floor(delta / baseMinusTMin); - } - return floor(k + (baseMinusTMin + 1) * delta / (delta + skew)); - } - function decode(input) { - var output = [], inputLength = input.length, out, i = 0, n = initialN, bias = initialBias, basic, j, index, oldi, w, k, digit, t, baseMinusT; - basic = input.lastIndexOf(delimiter); - if (basic < 0) { - basic = 0; - } - for (j = 0; j < basic; ++j) { - if (input.charCodeAt(j) >= 128) { - error("not-basic"); - } - output.push(input.charCodeAt(j)); - } - for (index = basic > 0 ? basic + 1 : 0; index < inputLength; ) { - for (oldi = i, w = 1, k = base; ; k += base) { - if (index >= inputLength) { - error("invalid-input"); - } - digit = basicToDigit(input.charCodeAt(index++)); - if (digit >= base || digit > floor((maxInt - i) / w)) { - error("overflow"); - } - i += digit * w; - t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - if (digit < t) { - break; - } - baseMinusT = base - t; - if (w > floor(maxInt / baseMinusT)) { - error("overflow"); - } - w *= baseMinusT; - } - out = output.length + 1; - bias = adapt(i - oldi, out, oldi == 0); - if (floor(i / out) > maxInt - n) { - error("overflow"); - } - n += floor(i / out); - i %= out; - output.splice(i++, 0, n); - } - return ucs2encode(output); - } - function encode(input) { - var n, delta, handledCPCount, basicLength, bias, j, m, q, k, t, currentValue, output = [], inputLength, handledCPCountPlusOne, baseMinusT, qMinusT; - input = ucs2decode(input); - inputLength = input.length; - n = initialN; - delta = 0; - bias = initialBias; - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < 128) { - output.push(stringFromCharCode(currentValue)); - } - } - handledCPCount = basicLength = output.length; - if (basicLength) { - output.push(delimiter); - } - while (handledCPCount < inputLength) { - for (m = maxInt, j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue >= n && currentValue < m) { - m = currentValue; - } - } - handledCPCountPlusOne = handledCPCount + 1; - if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) { - error("overflow"); - } - delta += (m - n) * handledCPCountPlusOne; - n = m; - for (j = 0; j < inputLength; ++j) { - currentValue = input[j]; - if (currentValue < n && ++delta > maxInt) { - error("overflow"); - } - if (currentValue == n) { - for (q = delta, k = base; ; k += base) { - t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias; - if (q < t) { - break; - } - qMinusT = q - t; - baseMinusT = base - t; - output.push( - stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)) - ); - q = floor(qMinusT / baseMinusT); - } - output.push(stringFromCharCode(digitToBasic(q, 0))); - bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength); - delta = 0; - ++handledCPCount; - } - } - ++delta; - ++n; - } - return output.join(""); - } - function toUnicode(input) { - return mapDomain(input, function(string) { - return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string; - }); - } - function toASCII(input) { - return mapDomain(input, function(string) { - return regexNonASCII.test(string) ? "xn--" + encode(string) : string; - }); - } - punycode = { - "version": "1.3.2", - "ucs2": { - "decode": ucs2decode, - "encode": ucs2encode - }, - "decode": decode, - "encode": encode, - "toASCII": toASCII, - "toUnicode": toUnicode - }; - if (typeof define == "function" && typeof define.amd == "object" && define.amd) { - define("punycode", function() { - return punycode; - }); - } else if (freeExports && freeModule) { - if (module2.exports == freeExports) { - freeModule.exports = punycode; - } else { - for (key in punycode) { - punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]); - } - } - } else { - root.punycode = punycode; - } - })(exports2); - } -}); - -// node_modules/urijs/src/IPv6.js -var require_IPv6 = __commonJS({ - "node_modules/urijs/src/IPv6.js"(exports2, module2) { - /*! - * URI.js - Mutating URLs - * IPv6 Support - * - * Version: 1.19.11 - * - * Author: Rodney Rehm - * Web: http://medialize.github.io/URI.js/ - * - * Licensed under - * MIT License http://www.opensource.org/licenses/mit-license - * - */ - (function(root, factory) { - "use strict"; - if (typeof module2 === "object" && module2.exports) { - module2.exports = factory(); - } else if (typeof define === "function" && define.amd) { - define(factory); - } else { - root.IPv6 = factory(root); - } - })(exports2, function(root) { - "use strict"; - var _IPv6 = root && root.IPv6; - function bestPresentation(address) { - var _address = address.toLowerCase(); - var segments = _address.split(":"); - var length3 = segments.length; - var total = 8; - if (segments[0] === "" && segments[1] === "" && segments[2] === "") { - segments.shift(); - segments.shift(); - } else if (segments[0] === "" && segments[1] === "") { - segments.shift(); - } else if (segments[length3 - 1] === "" && segments[length3 - 2] === "") { - segments.pop(); - } - length3 = segments.length; - if (segments[length3 - 1].indexOf(".") !== -1) { - total = 7; - } - var pos; - for (pos = 0; pos < length3; pos++) { - if (segments[pos] === "") { - break; - } - } - if (pos < total) { - segments.splice(pos, 1, "0000"); - while (segments.length < total) { - segments.splice(pos, 0, "0000"); - } - } - var _segments; - for (var i = 0; i < total; i++) { - _segments = segments[i].split(""); - for (var j = 0; j < 3; j++) { - if (_segments[0] === "0" && _segments.length > 1) { - _segments.splice(0, 1); - } else { - break; - } - } - segments[i] = _segments.join(""); - } - var best = -1; - var _best = 0; - var _current = 0; - var current = -1; - var inzeroes = false; - for (i = 0; i < total; i++) { - if (inzeroes) { - if (segments[i] === "0") { - _current += 1; - } else { - inzeroes = false; - if (_current > _best) { - best = current; - _best = _current; - } - } - } else { - if (segments[i] === "0") { - inzeroes = true; - current = i; - _current = 1; - } - } - } - if (_current > _best) { - best = current; - _best = _current; - } - if (_best > 1) { - segments.splice(best, _best, ""); - } - length3 = segments.length; - var result = ""; - if (segments[0] === "") { - result = ":"; - } - for (i = 0; i < length3; i++) { - result += segments[i]; - if (i === length3 - 1) { - break; - } - result += ":"; - } - if (segments[length3 - 1] === "") { - result += ":"; - } - return result; - } - function noConflict() { - if (root.IPv6 === this) { - root.IPv6 = _IPv6; - } - return this; - } - return { - best: bestPresentation, - noConflict - }; - }); - } -}); - -// node_modules/urijs/src/SecondLevelDomains.js -var require_SecondLevelDomains = __commonJS({ - "node_modules/urijs/src/SecondLevelDomains.js"(exports2, module2) { - /*! - * URI.js - Mutating URLs - * Second Level Domain (SLD) Support - * - * Version: 1.19.11 - * - * Author: Rodney Rehm - * Web: http://medialize.github.io/URI.js/ - * - * Licensed under - * MIT License http://www.opensource.org/licenses/mit-license - * - */ - (function(root, factory) { - "use strict"; - if (typeof module2 === "object" && module2.exports) { - module2.exports = factory(); - } else if (typeof define === "function" && define.amd) { - define(factory); - } else { - root.SecondLevelDomains = factory(root); - } - })(exports2, function(root) { - "use strict"; - var _SecondLevelDomains = root && root.SecondLevelDomains; - var SLD = { - list: { - "ac": " com gov mil net org ", - "ae": " ac co gov mil name net org pro sch ", - "af": " com edu gov net org ", - "al": " com edu gov mil net org ", - "ao": " co ed gv it og pb ", - "ar": " com edu gob gov int mil net org tur ", - "at": " ac co gv or ", - "au": " asn com csiro edu gov id net org ", - "ba": " co com edu gov mil net org rs unbi unmo unsa untz unze ", - "bb": " biz co com edu gov info net org store tv ", - "bh": " biz cc com edu gov info net org ", - "bn": " com edu gov net org ", - "bo": " com edu gob gov int mil net org tv ", - "br": " adm adv agr am arq art ato b bio blog bmd cim cng cnt com coop ecn edu eng esp etc eti far flog fm fnd fot fst g12 ggf gov imb ind inf jor jus lel mat med mil mus net nom not ntr odo org ppg pro psc psi qsl rec slg srv tmp trd tur tv vet vlog wiki zlg ", - "bs": " com edu gov net org ", - "bz": " du et om ov rg ", - "ca": " ab bc mb nb nf nl ns nt nu on pe qc sk yk ", - "ck": " biz co edu gen gov info net org ", - "cn": " ac ah bj com cq edu fj gd gov gs gx gz ha hb he hi hl hn jl js jx ln mil net nm nx org qh sc sd sh sn sx tj tw xj xz yn zj ", - "co": " com edu gov mil net nom org ", - "cr": " ac c co ed fi go or sa ", - "cy": " ac biz com ekloges gov ltd name net org parliament press pro tm ", - "do": " art com edu gob gov mil net org sld web ", - "dz": " art asso com edu gov net org pol ", - "ec": " com edu fin gov info med mil net org pro ", - "eg": " com edu eun gov mil name net org sci ", - "er": " com edu gov ind mil net org rochest w ", - "es": " com edu gob nom org ", - "et": " biz com edu gov info name net org ", - "fj": " ac biz com info mil name net org pro ", - "fk": " ac co gov net nom org ", - "fr": " asso com f gouv nom prd presse tm ", - "gg": " co net org ", - "gh": " com edu gov mil org ", - "gn": " ac com gov net org ", - "gr": " com edu gov mil net org ", - "gt": " com edu gob ind mil net org ", - "gu": " com edu gov net org ", - "hk": " com edu gov idv net org ", - "hu": " 2000 agrar bolt casino city co erotica erotika film forum games hotel info ingatlan jogasz konyvelo lakas media news org priv reklam sex shop sport suli szex tm tozsde utazas video ", - "id": " ac co go mil net or sch web ", - "il": " ac co gov idf k12 muni net org ", - "in": " ac co edu ernet firm gen gov i ind mil net nic org res ", - "iq": " com edu gov i mil net org ", - "ir": " ac co dnssec gov i id net org sch ", - "it": " edu gov ", - "je": " co net org ", - "jo": " com edu gov mil name net org sch ", - "jp": " ac ad co ed go gr lg ne or ", - "ke": " ac co go info me mobi ne or sc ", - "kh": " com edu gov mil net org per ", - "ki": " biz com de edu gov info mob net org tel ", - "km": " asso com coop edu gouv k medecin mil nom notaires pharmaciens presse tm veterinaire ", - "kn": " edu gov net org ", - "kr": " ac busan chungbuk chungnam co daegu daejeon es gangwon go gwangju gyeongbuk gyeonggi gyeongnam hs incheon jeju jeonbuk jeonnam k kg mil ms ne or pe re sc seoul ulsan ", - "kw": " com edu gov net org ", - "ky": " com edu gov net org ", - "kz": " com edu gov mil net org ", - "lb": " com edu gov net org ", - "lk": " assn com edu gov grp hotel int ltd net ngo org sch soc web ", - "lr": " com edu gov net org ", - "lv": " asn com conf edu gov id mil net org ", - "ly": " com edu gov id med net org plc sch ", - "ma": " ac co gov m net org press ", - "mc": " asso tm ", - "me": " ac co edu gov its net org priv ", - "mg": " com edu gov mil nom org prd tm ", - "mk": " com edu gov inf name net org pro ", - "ml": " com edu gov net org presse ", - "mn": " edu gov org ", - "mo": " com edu gov net org ", - "mt": " com edu gov net org ", - "mv": " aero biz com coop edu gov info int mil museum name net org pro ", - "mw": " ac co com coop edu gov int museum net org ", - "mx": " com edu gob net org ", - "my": " com edu gov mil name net org sch ", - "nf": " arts com firm info net other per rec store web ", - "ng": " biz com edu gov mil mobi name net org sch ", - "ni": " ac co com edu gob mil net nom org ", - "np": " com edu gov mil net org ", - "nr": " biz com edu gov info net org ", - "om": " ac biz co com edu gov med mil museum net org pro sch ", - "pe": " com edu gob mil net nom org sld ", - "ph": " com edu gov i mil net ngo org ", - "pk": " biz com edu fam gob gok gon gop gos gov net org web ", - "pl": " art bialystok biz com edu gda gdansk gorzow gov info katowice krakow lodz lublin mil net ngo olsztyn org poznan pwr radom slupsk szczecin torun warszawa waw wroc wroclaw zgora ", - "pr": " ac biz com edu est gov info isla name net org pro prof ", - "ps": " com edu gov net org plo sec ", - "pw": " belau co ed go ne or ", - "ro": " arts com firm info nom nt org rec store tm www ", - "rs": " ac co edu gov in org ", - "sb": " com edu gov net org ", - "sc": " com edu gov net org ", - "sh": " co com edu gov net nom org ", - "sl": " com edu gov net org ", - "st": " co com consulado edu embaixada gov mil net org principe saotome store ", - "sv": " com edu gob org red ", - "sz": " ac co org ", - "tr": " av bbs bel biz com dr edu gen gov info k12 name net org pol tel tsk tv web ", - "tt": " aero biz cat co com coop edu gov info int jobs mil mobi museum name net org pro tel travel ", - "tw": " club com ebiz edu game gov idv mil net org ", - "mu": " ac co com gov net or org ", - "mz": " ac co edu gov org ", - "na": " co com ", - "nz": " ac co cri geek gen govt health iwi maori mil net org parliament school ", - "pa": " abo ac com edu gob ing med net nom org sld ", - "pt": " com edu gov int net nome org publ ", - "py": " com edu gov mil net org ", - "qa": " com edu gov mil net org ", - "re": " asso com nom ", - "ru": " ac adygeya altai amur arkhangelsk astrakhan bashkiria belgorod bir bryansk buryatia cbg chel chelyabinsk chita chukotka chuvashia com dagestan e-burg edu gov grozny int irkutsk ivanovo izhevsk jar joshkar-ola kalmykia kaluga kamchatka karelia kazan kchr kemerovo khabarovsk khakassia khv kirov koenig komi kostroma kranoyarsk kuban kurgan kursk lipetsk magadan mari mari-el marine mil mordovia mosreg msk murmansk nalchik net nnov nov novosibirsk nsk omsk orenburg org oryol penza perm pp pskov ptz rnd ryazan sakhalin samara saratov simbirsk smolensk spb stavropol stv surgut tambov tatarstan tom tomsk tsaritsyn tsk tula tuva tver tyumen udm udmurtia ulan-ude vladikavkaz vladimir vladivostok volgograd vologda voronezh vrn vyatka yakutia yamal yekaterinburg yuzhno-sakhalinsk ", - "rw": " ac co com edu gouv gov int mil net ", - "sa": " com edu gov med net org pub sch ", - "sd": " com edu gov info med net org tv ", - "se": " a ac b bd c d e f g h i k l m n o org p parti pp press r s t tm u w x y z ", - "sg": " com edu gov idn net org per ", - "sn": " art com edu gouv org perso univ ", - "sy": " com edu gov mil net news org ", - "th": " ac co go in mi net or ", - "tj": " ac biz co com edu go gov info int mil name net nic org test web ", - "tn": " agrinet com defense edunet ens fin gov ind info intl mincom nat net org perso rnrt rns rnu tourism ", - "tz": " ac co go ne or ", - "ua": " biz cherkassy chernigov chernovtsy ck cn co com crimea cv dn dnepropetrovsk donetsk dp edu gov if in ivano-frankivsk kh kharkov kherson khmelnitskiy kiev kirovograd km kr ks kv lg lugansk lutsk lviv me mk net nikolaev od odessa org pl poltava pp rovno rv sebastopol sumy te ternopil uzhgorod vinnica vn zaporizhzhe zhitomir zp zt ", - "ug": " ac co go ne or org sc ", - "uk": " ac bl british-library co cym gov govt icnet jet lea ltd me mil mod national-library-scotland nel net nhs nic nls org orgn parliament plc police sch scot soc ", - "us": " dni fed isa kids nsn ", - "uy": " com edu gub mil net org ", - "ve": " co com edu gob info mil net org web ", - "vi": " co com k12 net org ", - "vn": " ac biz com edu gov health info int name net org pro ", - "ye": " co com gov ltd me net org plc ", - "yu": " ac co edu gov org ", - "za": " ac agric alt bourse city co cybernet db edu gov grondar iaccess imt inca landesign law mil net ngo nis nom olivetti org pix school tm web ", - "zm": " ac co com edu gov net org sch ", - "com": "ar br cn de eu gb gr hu jpn kr no qc ru sa se uk us uy za ", - "net": "gb jp se uk ", - "org": "ae", - "de": "com " - }, - has: function(domain) { - var tldOffset = domain.lastIndexOf("."); - if (tldOffset <= 0 || tldOffset >= domain.length - 1) { - return false; - } - var sldOffset = domain.lastIndexOf(".", tldOffset - 1); - if (sldOffset <= 0 || sldOffset >= tldOffset - 1) { - return false; - } - var sldList = SLD.list[domain.slice(tldOffset + 1)]; - if (!sldList) { - return false; - } - return sldList.indexOf(" " + domain.slice(sldOffset + 1, tldOffset) + " ") >= 0; - }, - is: function(domain) { - var tldOffset = domain.lastIndexOf("."); - if (tldOffset <= 0 || tldOffset >= domain.length - 1) { - return false; - } - var sldOffset = domain.lastIndexOf(".", tldOffset - 1); - if (sldOffset >= 0) { - return false; - } - var sldList = SLD.list[domain.slice(tldOffset + 1)]; - if (!sldList) { - return false; - } - return sldList.indexOf(" " + domain.slice(0, tldOffset) + " ") >= 0; - }, - get: function(domain) { - var tldOffset = domain.lastIndexOf("."); - if (tldOffset <= 0 || tldOffset >= domain.length - 1) { - return null; - } - var sldOffset = domain.lastIndexOf(".", tldOffset - 1); - if (sldOffset <= 0 || sldOffset >= tldOffset - 1) { - return null; - } - var sldList = SLD.list[domain.slice(tldOffset + 1)]; - if (!sldList) { - return null; - } - if (sldList.indexOf(" " + domain.slice(sldOffset + 1, tldOffset) + " ") < 0) { - return null; - } - return domain.slice(sldOffset + 1); - }, - noConflict: function() { - if (root.SecondLevelDomains === this) { - root.SecondLevelDomains = _SecondLevelDomains; - } - return this; - } - }; - return SLD; - }); - } -}); - -// node_modules/urijs/src/URI.js -var require_URI = __commonJS({ - "node_modules/urijs/src/URI.js"(exports2, module2) { - /*! - * URI.js - Mutating URLs - * - * Version: 1.19.11 - * - * Author: Rodney Rehm - * Web: http://medialize.github.io/URI.js/ - * - * Licensed under - * MIT License http://www.opensource.org/licenses/mit-license - * - */ - (function(root, factory) { - "use strict"; - if (typeof module2 === "object" && module2.exports) { - module2.exports = factory(require_punycode(), require_IPv6(), require_SecondLevelDomains()); - } else if (typeof define === "function" && define.amd) { - define(["./punycode", "./IPv6", "./SecondLevelDomains"], factory); - } else { - root.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains, root); - } - })(exports2, function(punycode, IPv6, SLD, root) { - "use strict"; - var _URI = root && root.URI; - function URI(url2, base) { - var _urlSupplied = arguments.length >= 1; - var _baseSupplied = arguments.length >= 2; - if (!(this instanceof URI)) { - if (_urlSupplied) { - if (_baseSupplied) { - return new URI(url2, base); - } - return new URI(url2); - } - return new URI(); - } - if (url2 === void 0) { - if (_urlSupplied) { - throw new TypeError("undefined is not a valid argument for URI"); - } - if (typeof location !== "undefined") { - url2 = location.href + ""; - } else { - url2 = ""; - } - } - if (url2 === null) { - if (_urlSupplied) { - throw new TypeError("null is not a valid argument for URI"); - } - } - this.href(url2); - if (base !== void 0) { - return this.absoluteTo(base); - } - return this; - } - function isInteger(value) { - return /^[0-9]+$/.test(value); - } - URI.version = "1.19.11"; - var p = URI.prototype; - var hasOwn = Object.prototype.hasOwnProperty; - function escapeRegEx(string) { - return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, "\\$1"); - } - function getType(value) { - if (value === void 0) { - return "Undefined"; - } - return String(Object.prototype.toString.call(value)).slice(8, -1); - } - function isArray(obj) { - return getType(obj) === "Array"; - } - function filterArrayValues(data, value) { - var lookup = {}; - var i, length3; - if (getType(value) === "RegExp") { - lookup = null; - } else if (isArray(value)) { - for (i = 0, length3 = value.length; i < length3; i++) { - lookup[value[i]] = true; - } - } else { - lookup[value] = true; - } - for (i = 0, length3 = data.length; i < length3; i++) { - var _match = lookup && lookup[data[i]] !== void 0 || !lookup && value.test(data[i]); - if (_match) { - data.splice(i, 1); - length3--; - i--; - } - } - return data; - } - function arrayContains(list, value) { - var i, length3; - if (isArray(value)) { - for (i = 0, length3 = value.length; i < length3; i++) { - if (!arrayContains(list, value[i])) { - return false; - } - } - return true; - } - var _type = getType(value); - for (i = 0, length3 = list.length; i < length3; i++) { - if (_type === "RegExp") { - if (typeof list[i] === "string" && list[i].match(value)) { - return true; - } - } else if (list[i] === value) { - return true; - } - } - return false; - } - function arraysEqual(one, two) { - if (!isArray(one) || !isArray(two)) { - return false; - } - if (one.length !== two.length) { - return false; - } - one.sort(); - two.sort(); - for (var i = 0, l = one.length; i < l; i++) { - if (one[i] !== two[i]) { - return false; - } - } - return true; - } - function trimSlashes(text) { - var trim_expression = /^\/+|\/+$/g; - return text.replace(trim_expression, ""); - } - URI._parts = function() { - return { - protocol: null, - username: null, - password: null, - hostname: null, - urn: null, - port: null, - path: null, - query: null, - fragment: null, - preventInvalidHostname: URI.preventInvalidHostname, - duplicateQueryParameters: URI.duplicateQueryParameters, - escapeQuerySpace: URI.escapeQuerySpace - }; - }; - URI.preventInvalidHostname = false; - URI.duplicateQueryParameters = false; - URI.escapeQuerySpace = true; - URI.protocol_expression = /^[a-z][a-z0-9.+-]*$/i; - URI.idn_expression = /[^a-z0-9\._-]/i; - URI.punycode_expression = /(xn--)/i; - URI.ip4_expression = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; - URI.ip6_expression = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; - URI.find_uri_expression = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig; - URI.findUri = { - start: /\b(?:([a-z][a-z0-9.+-]*:\/\/)|www\.)/gi, - end: /[\s\r\n]|$/, - trim: /[`!()\[\]{};:'".,<>?«»“”„‘’]+$/, - parens: /(\([^\)]*\)|\[[^\]]*\]|\{[^}]*\}|<[^>]*>)/g - }; - URI.leading_whitespace_expression = /^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/; - URI.ascii_tab_whitespace = /[\u0009\u000A\u000D]+/g; - URI.defaultPorts = { - http: "80", - https: "443", - ftp: "21", - gopher: "70", - ws: "80", - wss: "443" - }; - URI.hostProtocols = [ - "http", - "https" - ]; - URI.invalid_hostname_characters = /[^a-zA-Z0-9\.\-:_]/; - URI.domAttributes = { - "a": "href", - "blockquote": "cite", - "link": "href", - "base": "href", - "script": "src", - "form": "action", - "img": "src", - "area": "href", - "iframe": "src", - "embed": "src", - "source": "src", - "track": "src", - "input": "src", - "audio": "src", - "video": "src" - }; - URI.getDomAttribute = function(node) { - if (!node || !node.nodeName) { - return void 0; - } - var nodeName = node.nodeName.toLowerCase(); - if (nodeName === "input" && node.type !== "image") { - return void 0; - } - return URI.domAttributes[nodeName]; - }; - function escapeForDumbFirefox36(value) { - return escape(value); - } - function strictEncodeURIComponent(string) { - return encodeURIComponent(string).replace(/[!'()*]/g, escapeForDumbFirefox36).replace(/\*/g, "%2A"); - } - URI.encode = strictEncodeURIComponent; - URI.decode = decodeURIComponent; - URI.iso8859 = function() { - URI.encode = escape; - URI.decode = unescape; - }; - URI.unicode = function() { - URI.encode = strictEncodeURIComponent; - URI.decode = decodeURIComponent; - }; - URI.characters = { - pathname: { - encode: { - expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig, - map: { - "%24": "$", - "%26": "&", - "%2B": "+", - "%2C": ",", - "%3B": ";", - "%3D": "=", - "%3A": ":", - "%40": "@" - } - }, - decode: { - expression: /[\/\?#]/g, - map: { - "/": "%2F", - "?": "%3F", - "#": "%23" - } - } - }, - reserved: { - encode: { - expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig, - map: { - "%3A": ":", - "%2F": "/", - "%3F": "?", - "%23": "#", - "%5B": "[", - "%5D": "]", - "%40": "@", - "%21": "!", - "%24": "$", - "%26": "&", - "%27": "'", - "%28": "(", - "%29": ")", - "%2A": "*", - "%2B": "+", - "%2C": ",", - "%3B": ";", - "%3D": "=" - } - } - }, - urnpath: { - encode: { - expression: /%(21|24|27|28|29|2A|2B|2C|3B|3D|40)/ig, - map: { - "%21": "!", - "%24": "$", - "%27": "'", - "%28": "(", - "%29": ")", - "%2A": "*", - "%2B": "+", - "%2C": ",", - "%3B": ";", - "%3D": "=", - "%40": "@" - } - }, - decode: { - expression: /[\/\?#:]/g, - map: { - "/": "%2F", - "?": "%3F", - "#": "%23", - ":": "%3A" - } - } - } - }; - URI.encodeQuery = function(string, escapeQuerySpace) { - var escaped = URI.encode(string + ""); - if (escapeQuerySpace === void 0) { - escapeQuerySpace = URI.escapeQuerySpace; - } - return escapeQuerySpace ? escaped.replace(/%20/g, "+") : escaped; - }; - URI.decodeQuery = function(string, escapeQuerySpace) { - string += ""; - if (escapeQuerySpace === void 0) { - escapeQuerySpace = URI.escapeQuerySpace; - } - try { - return URI.decode(escapeQuerySpace ? string.replace(/\+/g, "%20") : string); - } catch (e) { - return string; - } - }; - var _parts = { "encode": "encode", "decode": "decode" }; - var _part; - var generateAccessor = function(_group, _part2) { - return function(string) { - try { - return URI[_part2](string + "").replace(URI.characters[_group][_part2].expression, function(c) { - return URI.characters[_group][_part2].map[c]; - }); - } catch (e) { - return string; - } - }; - }; - for (_part in _parts) { - URI[_part + "PathSegment"] = generateAccessor("pathname", _parts[_part]); - URI[_part + "UrnPathSegment"] = generateAccessor("urnpath", _parts[_part]); - } - var generateSegmentedPathFunction = function(_sep, _codingFuncName, _innerCodingFuncName) { - return function(string) { - var actualCodingFunc; - if (!_innerCodingFuncName) { - actualCodingFunc = URI[_codingFuncName]; - } else { - actualCodingFunc = function(string2) { - return URI[_codingFuncName](URI[_innerCodingFuncName](string2)); - }; - } - var segments = (string + "").split(_sep); - for (var i = 0, length3 = segments.length; i < length3; i++) { - segments[i] = actualCodingFunc(segments[i]); - } - return segments.join(_sep); - }; - }; - URI.decodePath = generateSegmentedPathFunction("/", "decodePathSegment"); - URI.decodeUrnPath = generateSegmentedPathFunction(":", "decodeUrnPathSegment"); - URI.recodePath = generateSegmentedPathFunction("/", "encodePathSegment", "decode"); - URI.recodeUrnPath = generateSegmentedPathFunction(":", "encodeUrnPathSegment", "decode"); - URI.encodeReserved = generateAccessor("reserved", "encode"); - URI.parse = function(string, parts) { - var pos; - if (!parts) { - parts = { - preventInvalidHostname: URI.preventInvalidHostname - }; - } - string = string.replace(URI.leading_whitespace_expression, ""); - string = string.replace(URI.ascii_tab_whitespace, ""); - pos = string.indexOf("#"); - if (pos > -1) { - parts.fragment = string.substring(pos + 1) || null; - string = string.substring(0, pos); - } - pos = string.indexOf("?"); - if (pos > -1) { - parts.query = string.substring(pos + 1) || null; - string = string.substring(0, pos); - } - string = string.replace(/^(https?|ftp|wss?)?:+[/\\]*/i, "$1://"); - string = string.replace(/^[/\\]{2,}/i, "//"); - if (string.substring(0, 2) === "//") { - parts.protocol = null; - string = string.substring(2); - string = URI.parseAuthority(string, parts); - } else { - pos = string.indexOf(":"); - if (pos > -1) { - parts.protocol = string.substring(0, pos) || null; - if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) { - parts.protocol = void 0; - } else if (string.substring(pos + 1, pos + 3).replace(/\\/g, "/") === "//") { - string = string.substring(pos + 3); - string = URI.parseAuthority(string, parts); - } else { - string = string.substring(pos + 1); - parts.urn = true; - } - } - } - parts.path = string; - return parts; - }; - URI.parseHost = function(string, parts) { - if (!string) { - string = ""; - } - string = string.replace(/\\/g, "/"); - var pos = string.indexOf("/"); - var bracketPos; - var t; - if (pos === -1) { - pos = string.length; - } - if (string.charAt(0) === "[") { - bracketPos = string.indexOf("]"); - parts.hostname = string.substring(1, bracketPos) || null; - parts.port = string.substring(bracketPos + 2, pos) || null; - if (parts.port === "/") { - parts.port = null; - } - } else { - var firstColon = string.indexOf(":"); - var firstSlash = string.indexOf("/"); - var nextColon = string.indexOf(":", firstColon + 1); - if (nextColon !== -1 && (firstSlash === -1 || nextColon < firstSlash)) { - parts.hostname = string.substring(0, pos) || null; - parts.port = null; - } else { - t = string.substring(0, pos).split(":"); - parts.hostname = t[0] || null; - parts.port = t[1] || null; - } - } - if (parts.hostname && string.substring(pos).charAt(0) !== "/") { - pos++; - string = "/" + string; - } - if (parts.preventInvalidHostname) { - URI.ensureValidHostname(parts.hostname, parts.protocol); - } - if (parts.port) { - URI.ensureValidPort(parts.port); - } - return string.substring(pos) || "/"; - }; - URI.parseAuthority = function(string, parts) { - string = URI.parseUserinfo(string, parts); - return URI.parseHost(string, parts); - }; - URI.parseUserinfo = function(string, parts) { - var _string = string; - var firstBackSlash = string.indexOf("\\"); - if (firstBackSlash !== -1) { - string = string.replace(/\\/g, "/"); - } - var firstSlash = string.indexOf("/"); - var pos = string.lastIndexOf("@", firstSlash > -1 ? firstSlash : string.length - 1); - var t; - if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) { - t = string.substring(0, pos).split(":"); - parts.username = t[0] ? URI.decode(t[0]) : null; - t.shift(); - parts.password = t[0] ? URI.decode(t.join(":")) : null; - string = _string.substring(pos + 1); - } else { - parts.username = null; - parts.password = null; - } - return string; - }; - URI.parseQuery = function(string, escapeQuerySpace) { - if (!string) { - return {}; - } - string = string.replace(/&+/g, "&").replace(/^\?*&*|&+$/g, ""); - if (!string) { - return {}; - } - var items = {}; - var splits = string.split("&"); - var length3 = splits.length; - var v7, name, value; - for (var i = 0; i < length3; i++) { - v7 = splits[i].split("="); - name = URI.decodeQuery(v7.shift(), escapeQuerySpace); - value = v7.length ? URI.decodeQuery(v7.join("="), escapeQuerySpace) : null; - if (name === "__proto__") { - continue; - } else if (hasOwn.call(items, name)) { - if (typeof items[name] === "string" || items[name] === null) { - items[name] = [items[name]]; - } - items[name].push(value); - } else { - items[name] = value; - } - } - return items; - }; - URI.build = function(parts) { - var t = ""; - var requireAbsolutePath = false; - if (parts.protocol) { - t += parts.protocol + ":"; - } - if (!parts.urn && (t || parts.hostname)) { - t += "//"; - requireAbsolutePath = true; - } - t += URI.buildAuthority(parts) || ""; - if (typeof parts.path === "string") { - if (parts.path.charAt(0) !== "/" && requireAbsolutePath) { - t += "/"; - } - t += parts.path; - } - if (typeof parts.query === "string" && parts.query) { - t += "?" + parts.query; - } - if (typeof parts.fragment === "string" && parts.fragment) { - t += "#" + parts.fragment; - } - return t; - }; - URI.buildHost = function(parts) { - var t = ""; - if (!parts.hostname) { - return ""; - } else if (URI.ip6_expression.test(parts.hostname)) { - t += "[" + parts.hostname + "]"; - } else { - t += parts.hostname; - } - if (parts.port) { - t += ":" + parts.port; - } - return t; - }; - URI.buildAuthority = function(parts) { - return URI.buildUserinfo(parts) + URI.buildHost(parts); - }; - URI.buildUserinfo = function(parts) { - var t = ""; - if (parts.username) { - t += URI.encode(parts.username); - } - if (parts.password) { - t += ":" + URI.encode(parts.password); - } - if (t) { - t += "@"; - } - return t; - }; - URI.buildQuery = function(data, duplicateQueryParameters, escapeQuerySpace) { - var t = ""; - var unique, key, i, length3; - for (key in data) { - if (key === "__proto__") { - continue; - } else if (hasOwn.call(data, key)) { - if (isArray(data[key])) { - unique = {}; - for (i = 0, length3 = data[key].length; i < length3; i++) { - if (data[key][i] !== void 0 && unique[data[key][i] + ""] === void 0) { - t += "&" + URI.buildQueryParameter(key, data[key][i], escapeQuerySpace); - if (duplicateQueryParameters !== true) { - unique[data[key][i] + ""] = true; - } - } - } - } else if (data[key] !== void 0) { - t += "&" + URI.buildQueryParameter(key, data[key], escapeQuerySpace); - } - } - } - return t.substring(1); - }; - URI.buildQueryParameter = function(name, value, escapeQuerySpace) { - return URI.encodeQuery(name, escapeQuerySpace) + (value !== null ? "=" + URI.encodeQuery(value, escapeQuerySpace) : ""); - }; - URI.addQuery = function(data, name, value) { - if (typeof name === "object") { - for (var key in name) { - if (hasOwn.call(name, key)) { - URI.addQuery(data, key, name[key]); - } - } - } else if (typeof name === "string") { - if (data[name] === void 0) { - data[name] = value; - return; - } else if (typeof data[name] === "string") { - data[name] = [data[name]]; - } - if (!isArray(value)) { - value = [value]; - } - data[name] = (data[name] || []).concat(value); - } else { - throw new TypeError("URI.addQuery() accepts an object, string as the name parameter"); - } - }; - URI.setQuery = function(data, name, value) { - if (typeof name === "object") { - for (var key in name) { - if (hasOwn.call(name, key)) { - URI.setQuery(data, key, name[key]); - } - } - } else if (typeof name === "string") { - data[name] = value === void 0 ? null : value; - } else { - throw new TypeError("URI.setQuery() accepts an object, string as the name parameter"); - } - }; - URI.removeQuery = function(data, name, value) { - var i, length3, key; - if (isArray(name)) { - for (i = 0, length3 = name.length; i < length3; i++) { - data[name[i]] = void 0; - } - } else if (getType(name) === "RegExp") { - for (key in data) { - if (name.test(key)) { - data[key] = void 0; - } - } - } else if (typeof name === "object") { - for (key in name) { - if (hasOwn.call(name, key)) { - URI.removeQuery(data, key, name[key]); - } - } - } else if (typeof name === "string") { - if (value !== void 0) { - if (getType(value) === "RegExp") { - if (!isArray(data[name]) && value.test(data[name])) { - data[name] = void 0; - } else { - data[name] = filterArrayValues(data[name], value); - } - } else if (data[name] === String(value) && (!isArray(value) || value.length === 1)) { - data[name] = void 0; - } else if (isArray(data[name])) { - data[name] = filterArrayValues(data[name], value); - } - } else { - data[name] = void 0; - } - } else { - throw new TypeError("URI.removeQuery() accepts an object, string, RegExp as the first parameter"); - } - }; - URI.hasQuery = function(data, name, value, withinArray) { - switch (getType(name)) { - case "String": - break; - case "RegExp": - for (var key in data) { - if (hasOwn.call(data, key)) { - if (name.test(key) && (value === void 0 || URI.hasQuery(data, key, value))) { - return true; - } - } - } - return false; - case "Object": - for (var _key in name) { - if (hasOwn.call(name, _key)) { - if (!URI.hasQuery(data, _key, name[_key])) { - return false; - } - } - } - return true; - default: - throw new TypeError("URI.hasQuery() accepts a string, regular expression or object as the name parameter"); - } - switch (getType(value)) { - case "Undefined": - return name in data; - case "Boolean": - var _booly = Boolean(isArray(data[name]) ? data[name].length : data[name]); - return value === _booly; - case "Function": - return !!value(data[name], name, data); - case "Array": - if (!isArray(data[name])) { - return false; - } - var op = withinArray ? arrayContains : arraysEqual; - return op(data[name], value); - case "RegExp": - if (!isArray(data[name])) { - return Boolean(data[name] && data[name].match(value)); - } - if (!withinArray) { - return false; - } - return arrayContains(data[name], value); - case "Number": - value = String(value); - case "String": - if (!isArray(data[name])) { - return data[name] === value; - } - if (!withinArray) { - return false; - } - return arrayContains(data[name], value); - default: - throw new TypeError("URI.hasQuery() accepts undefined, boolean, string, number, RegExp, Function as the value parameter"); - } - }; - URI.joinPaths = function() { - var input = []; - var segments = []; - var nonEmptySegments = 0; - for (var i = 0; i < arguments.length; i++) { - var url2 = new URI(arguments[i]); - input.push(url2); - var _segments = url2.segment(); - for (var s = 0; s < _segments.length; s++) { - if (typeof _segments[s] === "string") { - segments.push(_segments[s]); - } - if (_segments[s]) { - nonEmptySegments++; - } - } - } - if (!segments.length || !nonEmptySegments) { - return new URI(""); - } - var uri = new URI("").segment(segments); - if (input[0].path() === "" || input[0].path().slice(0, 1) === "/") { - uri.path("/" + uri.path()); - } - return uri.normalize(); - }; - URI.commonPath = function(one, two) { - var length3 = Math.min(one.length, two.length); - var pos; - for (pos = 0; pos < length3; pos++) { - if (one.charAt(pos) !== two.charAt(pos)) { - pos--; - break; - } - } - if (pos < 1) { - return one.charAt(0) === two.charAt(0) && one.charAt(0) === "/" ? "/" : ""; - } - if (one.charAt(pos) !== "/" || two.charAt(pos) !== "/") { - pos = one.substring(0, pos).lastIndexOf("/"); - } - return one.substring(0, pos + 1); - }; - URI.withinString = function(string, callback, options) { - options || (options = {}); - var _start = options.start || URI.findUri.start; - var _end = options.end || URI.findUri.end; - var _trim = options.trim || URI.findUri.trim; - var _parens = options.parens || URI.findUri.parens; - var _attributeOpen = /[a-z0-9-]=["']?$/i; - _start.lastIndex = 0; - while (true) { - var match = _start.exec(string); - if (!match) { - break; - } - var start = match.index; - if (options.ignoreHtml) { - var attributeOpen = string.slice(Math.max(start - 3, 0), start); - if (attributeOpen && _attributeOpen.test(attributeOpen)) { - continue; - } - } - var end = start + string.slice(start).search(_end); - var slice = string.slice(start, end); - var parensEnd = -1; - while (true) { - var parensMatch = _parens.exec(slice); - if (!parensMatch) { - break; - } - var parensMatchEnd = parensMatch.index + parensMatch[0].length; - parensEnd = Math.max(parensEnd, parensMatchEnd); - } - if (parensEnd > -1) { - slice = slice.slice(0, parensEnd) + slice.slice(parensEnd).replace(_trim, ""); - } else { - slice = slice.replace(_trim, ""); - } - if (slice.length <= match[0].length) { - continue; - } - if (options.ignore && options.ignore.test(slice)) { - continue; - } - end = start + slice.length; - var result = callback(slice, start, end, string); - if (result === void 0) { - _start.lastIndex = end; - continue; - } - result = String(result); - string = string.slice(0, start) + result + string.slice(end); - _start.lastIndex = start + result.length; - } - _start.lastIndex = 0; - return string; - }; - URI.ensureValidHostname = function(v7, protocol) { - var hasHostname = !!v7; - var hasProtocol = !!protocol; - var rejectEmptyHostname = false; - if (hasProtocol) { - rejectEmptyHostname = arrayContains(URI.hostProtocols, protocol); - } - if (rejectEmptyHostname && !hasHostname) { - throw new TypeError("Hostname cannot be empty, if protocol is " + protocol); - } else if (v7 && v7.match(URI.invalid_hostname_characters)) { - if (!punycode) { - throw new TypeError('Hostname "' + v7 + '" contains characters other than [A-Z0-9.-:_] and Punycode.js is not available'); - } - if (punycode.toASCII(v7).match(URI.invalid_hostname_characters)) { - throw new TypeError('Hostname "' + v7 + '" contains characters other than [A-Z0-9.-:_]'); - } - } - }; - URI.ensureValidPort = function(v7) { - if (!v7) { - return; - } - var port = Number(v7); - if (isInteger(port) && port > 0 && port < 65536) { - return; - } - throw new TypeError('Port "' + v7 + '" is not a valid port'); - }; - URI.noConflict = function(removeAll2) { - if (removeAll2) { - var unconflicted = { - URI: this.noConflict() - }; - if (root.URITemplate && typeof root.URITemplate.noConflict === "function") { - unconflicted.URITemplate = root.URITemplate.noConflict(); - } - if (root.IPv6 && typeof root.IPv6.noConflict === "function") { - unconflicted.IPv6 = root.IPv6.noConflict(); - } - if (root.SecondLevelDomains && typeof root.SecondLevelDomains.noConflict === "function") { - unconflicted.SecondLevelDomains = root.SecondLevelDomains.noConflict(); - } - return unconflicted; - } else if (root.URI === this) { - root.URI = _URI; - } - return this; - }; - p.build = function(deferBuild) { - if (deferBuild === true) { - this._deferred_build = true; - } else if (deferBuild === void 0 || this._deferred_build) { - this._string = URI.build(this._parts); - this._deferred_build = false; - } - return this; - }; - p.clone = function() { - return new URI(this); - }; - p.valueOf = p.toString = function() { - return this.build(false)._string; - }; - function generateSimpleAccessor(_part2) { - return function(v7, build) { - if (v7 === void 0) { - return this._parts[_part2] || ""; - } else { - this._parts[_part2] = v7 || null; - this.build(!build); - return this; - } - }; - } - function generatePrefixAccessor(_part2, _key) { - return function(v7, build) { - if (v7 === void 0) { - return this._parts[_part2] || ""; - } else { - if (v7 !== null) { - v7 = v7 + ""; - if (v7.charAt(0) === _key) { - v7 = v7.substring(1); - } - } - this._parts[_part2] = v7; - this.build(!build); - return this; - } - }; - } - p.protocol = generateSimpleAccessor("protocol"); - p.username = generateSimpleAccessor("username"); - p.password = generateSimpleAccessor("password"); - p.hostname = generateSimpleAccessor("hostname"); - p.port = generateSimpleAccessor("port"); - p.query = generatePrefixAccessor("query", "?"); - p.fragment = generatePrefixAccessor("fragment", "#"); - p.search = function(v7, build) { - var t = this.query(v7, build); - return typeof t === "string" && t.length ? "?" + t : t; - }; - p.hash = function(v7, build) { - var t = this.fragment(v7, build); - return typeof t === "string" && t.length ? "#" + t : t; - }; - p.pathname = function(v7, build) { - if (v7 === void 0 || v7 === true) { - var res = this._parts.path || (this._parts.hostname ? "/" : ""); - return v7 ? (this._parts.urn ? URI.decodeUrnPath : URI.decodePath)(res) : res; - } else { - if (this._parts.urn) { - this._parts.path = v7 ? URI.recodeUrnPath(v7) : ""; - } else { - this._parts.path = v7 ? URI.recodePath(v7) : "/"; - } - this.build(!build); - return this; - } - }; - p.path = p.pathname; - p.href = function(href, build) { - var key; - if (href === void 0) { - return this.toString(); - } - this._string = ""; - this._parts = URI._parts(); - var _URI2 = href instanceof URI; - var _object = typeof href === "object" && (href.hostname || href.path || href.pathname); - if (href.nodeName) { - var attribute = URI.getDomAttribute(href); - href = href[attribute] || ""; - _object = false; - } - if (!_URI2 && _object && href.pathname !== void 0) { - href = href.toString(); - } - if (typeof href === "string" || href instanceof String) { - this._parts = URI.parse(String(href), this._parts); - } else if (_URI2 || _object) { - var src = _URI2 ? href._parts : href; - for (key in src) { - if (key === "query") { - continue; - } - if (hasOwn.call(this._parts, key)) { - this._parts[key] = src[key]; - } - } - if (src.query) { - this.query(src.query, false); - } - } else { - throw new TypeError("invalid input"); - } - this.build(!build); - return this; - }; - p.is = function(what) { - var ip = false; - var ip4 = false; - var ip6 = false; - var name = false; - var sld = false; - var idn = false; - var punycode2 = false; - var relative = !this._parts.urn; - if (this._parts.hostname) { - relative = false; - ip4 = URI.ip4_expression.test(this._parts.hostname); - ip6 = URI.ip6_expression.test(this._parts.hostname); - ip = ip4 || ip6; - name = !ip; - sld = name && SLD && SLD.has(this._parts.hostname); - idn = name && URI.idn_expression.test(this._parts.hostname); - punycode2 = name && URI.punycode_expression.test(this._parts.hostname); - } - switch (what.toLowerCase()) { - case "relative": - return relative; - case "absolute": - return !relative; - case "domain": - case "name": - return name; - case "sld": - return sld; - case "ip": - return ip; - case "ip4": - case "ipv4": - case "inet4": - return ip4; - case "ip6": - case "ipv6": - case "inet6": - return ip6; - case "idn": - return idn; - case "url": - return !this._parts.urn; - case "urn": - return !!this._parts.urn; - case "punycode": - return punycode2; - } - return null; - }; - var _protocol = p.protocol; - var _port = p.port; - var _hostname = p.hostname; - p.protocol = function(v7, build) { - if (v7) { - v7 = v7.replace(/:(\/\/)?$/, ""); - if (!v7.match(URI.protocol_expression)) { - throw new TypeError('Protocol "' + v7 + `" contains characters other than [A-Z0-9.+-] or doesn't start with [A-Z]`); - } - } - return _protocol.call(this, v7, build); - }; - p.scheme = p.protocol; - p.port = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 !== void 0) { - if (v7 === 0) { - v7 = null; - } - if (v7) { - v7 += ""; - if (v7.charAt(0) === ":") { - v7 = v7.substring(1); - } - URI.ensureValidPort(v7); - } - } - return _port.call(this, v7, build); - }; - p.hostname = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 !== void 0) { - var x = { preventInvalidHostname: this._parts.preventInvalidHostname }; - var res = URI.parseHost(v7, x); - if (res !== "/") { - throw new TypeError('Hostname "' + v7 + '" contains characters other than [A-Z0-9.-]'); - } - v7 = x.hostname; - if (this._parts.preventInvalidHostname) { - URI.ensureValidHostname(v7, this._parts.protocol); - } - } - return _hostname.call(this, v7, build); - }; - p.origin = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 === void 0) { - var protocol = this.protocol(); - var authority = this.authority(); - if (!authority) { - return ""; - } - return (protocol ? protocol + "://" : "") + this.authority(); - } else { - var origin = URI(v7); - this.protocol(origin.protocol()).authority(origin.authority()).build(!build); - return this; - } - }; - p.host = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 === void 0) { - return this._parts.hostname ? URI.buildHost(this._parts) : ""; - } else { - var res = URI.parseHost(v7, this._parts); - if (res !== "/") { - throw new TypeError('Hostname "' + v7 + '" contains characters other than [A-Z0-9.-]'); - } - this.build(!build); - return this; - } - }; - p.authority = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 === void 0) { - return this._parts.hostname ? URI.buildAuthority(this._parts) : ""; - } else { - var res = URI.parseAuthority(v7, this._parts); - if (res !== "/") { - throw new TypeError('Hostname "' + v7 + '" contains characters other than [A-Z0-9.-]'); - } - this.build(!build); - return this; - } - }; - p.userinfo = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 === void 0) { - var t = URI.buildUserinfo(this._parts); - return t ? t.substring(0, t.length - 1) : t; - } else { - if (v7[v7.length - 1] !== "@") { - v7 += "@"; - } - URI.parseUserinfo(v7, this._parts); - this.build(!build); - return this; - } - }; - p.resource = function(v7, build) { - var parts; - if (v7 === void 0) { - return this.path() + this.search() + this.hash(); - } - parts = URI.parse(v7); - this._parts.path = parts.path; - this._parts.query = parts.query; - this._parts.fragment = parts.fragment; - this.build(!build); - return this; - }; - p.subdomain = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 === void 0) { - if (!this._parts.hostname || this.is("IP")) { - return ""; - } - var end = this._parts.hostname.length - this.domain().length - 1; - return this._parts.hostname.substring(0, end) || ""; - } else { - var e = this._parts.hostname.length - this.domain().length; - var sub = this._parts.hostname.substring(0, e); - var replace = new RegExp("^" + escapeRegEx(sub)); - if (v7 && v7.charAt(v7.length - 1) !== ".") { - v7 += "."; - } - if (v7.indexOf(":") !== -1) { - throw new TypeError("Domains cannot contain colons"); - } - if (v7) { - URI.ensureValidHostname(v7, this._parts.protocol); - } - this._parts.hostname = this._parts.hostname.replace(replace, v7); - this.build(!build); - return this; - } - }; - p.domain = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (typeof v7 === "boolean") { - build = v7; - v7 = void 0; - } - if (v7 === void 0) { - if (!this._parts.hostname || this.is("IP")) { - return ""; - } - var t = this._parts.hostname.match(/\./g); - if (t && t.length < 2) { - return this._parts.hostname; - } - var end = this._parts.hostname.length - this.tld(build).length - 1; - end = this._parts.hostname.lastIndexOf(".", end - 1) + 1; - return this._parts.hostname.substring(end) || ""; - } else { - if (!v7) { - throw new TypeError("cannot set domain empty"); - } - if (v7.indexOf(":") !== -1) { - throw new TypeError("Domains cannot contain colons"); - } - URI.ensureValidHostname(v7, this._parts.protocol); - if (!this._parts.hostname || this.is("IP")) { - this._parts.hostname = v7; - } else { - var replace = new RegExp(escapeRegEx(this.domain()) + "$"); - this._parts.hostname = this._parts.hostname.replace(replace, v7); - } - this.build(!build); - return this; - } - }; - p.tld = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (typeof v7 === "boolean") { - build = v7; - v7 = void 0; - } - if (v7 === void 0) { - if (!this._parts.hostname || this.is("IP")) { - return ""; - } - var pos = this._parts.hostname.lastIndexOf("."); - var tld = this._parts.hostname.substring(pos + 1); - if (build !== true && SLD && SLD.list[tld.toLowerCase()]) { - return SLD.get(this._parts.hostname) || tld; - } - return tld; - } else { - var replace; - if (!v7) { - throw new TypeError("cannot set TLD empty"); - } else if (v7.match(/[^a-zA-Z0-9-]/)) { - if (SLD && SLD.is(v7)) { - replace = new RegExp(escapeRegEx(this.tld()) + "$"); - this._parts.hostname = this._parts.hostname.replace(replace, v7); - } else { - throw new TypeError('TLD "' + v7 + '" contains characters other than [A-Z0-9]'); - } - } else if (!this._parts.hostname || this.is("IP")) { - throw new ReferenceError("cannot set TLD on non-domain host"); - } else { - replace = new RegExp(escapeRegEx(this.tld()) + "$"); - this._parts.hostname = this._parts.hostname.replace(replace, v7); - } - this.build(!build); - return this; - } - }; - p.directory = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 === void 0 || v7 === true) { - if (!this._parts.path && !this._parts.hostname) { - return ""; - } - if (this._parts.path === "/") { - return "/"; - } - var end = this._parts.path.length - this.filename().length - 1; - var res = this._parts.path.substring(0, end) || (this._parts.hostname ? "/" : ""); - return v7 ? URI.decodePath(res) : res; - } else { - var e = this._parts.path.length - this.filename().length; - var directory = this._parts.path.substring(0, e); - var replace = new RegExp("^" + escapeRegEx(directory)); - if (!this.is("relative")) { - if (!v7) { - v7 = "/"; - } - if (v7.charAt(0) !== "/") { - v7 = "/" + v7; - } - } - if (v7 && v7.charAt(v7.length - 1) !== "/") { - v7 += "/"; - } - v7 = URI.recodePath(v7); - this._parts.path = this._parts.path.replace(replace, v7); - this.build(!build); - return this; - } - }; - p.filename = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (typeof v7 !== "string") { - if (!this._parts.path || this._parts.path === "/") { - return ""; - } - var pos = this._parts.path.lastIndexOf("/"); - var res = this._parts.path.substring(pos + 1); - return v7 ? URI.decodePathSegment(res) : res; - } else { - var mutatedDirectory = false; - if (v7.charAt(0) === "/") { - v7 = v7.substring(1); - } - if (v7.match(/\.?\//)) { - mutatedDirectory = true; - } - var replace = new RegExp(escapeRegEx(this.filename()) + "$"); - v7 = URI.recodePath(v7); - this._parts.path = this._parts.path.replace(replace, v7); - if (mutatedDirectory) { - this.normalizePath(build); - } else { - this.build(!build); - } - return this; - } - }; - p.suffix = function(v7, build) { - if (this._parts.urn) { - return v7 === void 0 ? "" : this; - } - if (v7 === void 0 || v7 === true) { - if (!this._parts.path || this._parts.path === "/") { - return ""; - } - var filename = this.filename(); - var pos = filename.lastIndexOf("."); - var s, res; - if (pos === -1) { - return ""; - } - s = filename.substring(pos + 1); - res = /^[a-z0-9%]+$/i.test(s) ? s : ""; - return v7 ? URI.decodePathSegment(res) : res; - } else { - if (v7.charAt(0) === ".") { - v7 = v7.substring(1); - } - var suffix = this.suffix(); - var replace; - if (!suffix) { - if (!v7) { - return this; - } - this._parts.path += "." + URI.recodePath(v7); - } else if (!v7) { - replace = new RegExp(escapeRegEx("." + suffix) + "$"); - } else { - replace = new RegExp(escapeRegEx(suffix) + "$"); - } - if (replace) { - v7 = URI.recodePath(v7); - this._parts.path = this._parts.path.replace(replace, v7); - } - this.build(!build); - return this; - } - }; - p.segment = function(segment, v7, build) { - var separator = this._parts.urn ? ":" : "/"; - var path = this.path(); - var absolute = path.substring(0, 1) === "/"; - var segments = path.split(separator); - if (segment !== void 0 && typeof segment !== "number") { - build = v7; - v7 = segment; - segment = void 0; - } - if (segment !== void 0 && typeof segment !== "number") { - throw new Error('Bad segment "' + segment + '", must be 0-based integer'); - } - if (absolute) { - segments.shift(); - } - if (segment < 0) { - segment = Math.max(segments.length + segment, 0); - } - if (v7 === void 0) { - return segment === void 0 ? segments : segments[segment]; - } else if (segment === null || segments[segment] === void 0) { - if (isArray(v7)) { - segments = []; - for (var i = 0, l = v7.length; i < l; i++) { - if (!v7[i].length && (!segments.length || !segments[segments.length - 1].length)) { - continue; - } - if (segments.length && !segments[segments.length - 1].length) { - segments.pop(); - } - segments.push(trimSlashes(v7[i])); - } - } else if (v7 || typeof v7 === "string") { - v7 = trimSlashes(v7); - if (segments[segments.length - 1] === "") { - segments[segments.length - 1] = v7; - } else { - segments.push(v7); - } - } - } else { - if (v7) { - segments[segment] = trimSlashes(v7); - } else { - segments.splice(segment, 1); - } - } - if (absolute) { - segments.unshift(""); - } - return this.path(segments.join(separator), build); - }; - p.segmentCoded = function(segment, v7, build) { - var segments, i, l; - if (typeof segment !== "number") { - build = v7; - v7 = segment; - segment = void 0; - } - if (v7 === void 0) { - segments = this.segment(segment, v7, build); - if (!isArray(segments)) { - segments = segments !== void 0 ? URI.decode(segments) : void 0; - } else { - for (i = 0, l = segments.length; i < l; i++) { - segments[i] = URI.decode(segments[i]); - } - } - return segments; - } - if (!isArray(v7)) { - v7 = typeof v7 === "string" || v7 instanceof String ? URI.encode(v7) : v7; - } else { - for (i = 0, l = v7.length; i < l; i++) { - v7[i] = URI.encode(v7[i]); - } - } - return this.segment(segment, v7, build); - }; - var q = p.query; - p.query = function(v7, build) { - if (v7 === true) { - return URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - } else if (typeof v7 === "function") { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - var result = v7.call(this, data); - this._parts.query = URI.buildQuery(result || data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - this.build(!build); - return this; - } else if (v7 !== void 0 && typeof v7 !== "string") { - this._parts.query = URI.buildQuery(v7, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - this.build(!build); - return this; - } else { - return q.call(this, v7, build); - } - }; - p.setQuery = function(name, value, build) { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - if (typeof name === "string" || name instanceof String) { - data[name] = value !== void 0 ? value : null; - } else if (typeof name === "object") { - for (var key in name) { - if (hasOwn.call(name, key)) { - data[key] = name[key]; - } - } - } else { - throw new TypeError("URI.addQuery() accepts an object, string as the name parameter"); - } - this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - if (typeof name !== "string") { - build = value; - } - this.build(!build); - return this; - }; - p.addQuery = function(name, value, build) { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - URI.addQuery(data, name, value === void 0 ? null : value); - this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - if (typeof name !== "string") { - build = value; - } - this.build(!build); - return this; - }; - p.removeQuery = function(name, value, build) { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - URI.removeQuery(data, name, value); - this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters, this._parts.escapeQuerySpace); - if (typeof name !== "string") { - build = value; - } - this.build(!build); - return this; - }; - p.hasQuery = function(name, value, withinArray) { - var data = URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace); - return URI.hasQuery(data, name, value, withinArray); - }; - p.setSearch = p.setQuery; - p.addSearch = p.addQuery; - p.removeSearch = p.removeQuery; - p.hasSearch = p.hasQuery; - p.normalize = function() { - if (this._parts.urn) { - return this.normalizeProtocol(false).normalizePath(false).normalizeQuery(false).normalizeFragment(false).build(); - } - return this.normalizeProtocol(false).normalizeHostname(false).normalizePort(false).normalizePath(false).normalizeQuery(false).normalizeFragment(false).build(); - }; - p.normalizeProtocol = function(build) { - if (typeof this._parts.protocol === "string") { - this._parts.protocol = this._parts.protocol.toLowerCase(); - this.build(!build); - } - return this; - }; - p.normalizeHostname = function(build) { - if (this._parts.hostname) { - if (this.is("IDN") && punycode) { - this._parts.hostname = punycode.toASCII(this._parts.hostname); - } else if (this.is("IPv6") && IPv6) { - this._parts.hostname = IPv6.best(this._parts.hostname); - } - this._parts.hostname = this._parts.hostname.toLowerCase(); - this.build(!build); - } - return this; - }; - p.normalizePort = function(build) { - if (typeof this._parts.protocol === "string" && this._parts.port === URI.defaultPorts[this._parts.protocol]) { - this._parts.port = null; - this.build(!build); - } - return this; - }; - p.normalizePath = function(build) { - var _path = this._parts.path; - if (!_path) { - return this; - } - if (this._parts.urn) { - this._parts.path = URI.recodeUrnPath(this._parts.path); - this.build(!build); - return this; - } - if (this._parts.path === "/") { - return this; - } - _path = URI.recodePath(_path); - var _was_relative; - var _leadingParents = ""; - var _parent, _pos; - if (_path.charAt(0) !== "/") { - _was_relative = true; - _path = "/" + _path; - } - if (_path.slice(-3) === "/.." || _path.slice(-2) === "/.") { - _path += "/"; - } - _path = _path.replace(/(\/(\.\/)+)|(\/\.$)/g, "/").replace(/\/{2,}/g, "/"); - if (_was_relative) { - _leadingParents = _path.substring(1).match(/^(\.\.\/)+/) || ""; - if (_leadingParents) { - _leadingParents = _leadingParents[0]; - } - } - while (true) { - _parent = _path.search(/\/\.\.(\/|$)/); - if (_parent === -1) { - break; - } else if (_parent === 0) { - _path = _path.substring(3); - continue; - } - _pos = _path.substring(0, _parent).lastIndexOf("/"); - if (_pos === -1) { - _pos = _parent; - } - _path = _path.substring(0, _pos) + _path.substring(_parent + 3); - } - if (_was_relative && this.is("relative")) { - _path = _leadingParents + _path.substring(1); - } - this._parts.path = _path; - this.build(!build); - return this; - }; - p.normalizePathname = p.normalizePath; - p.normalizeQuery = function(build) { - if (typeof this._parts.query === "string") { - if (!this._parts.query.length) { - this._parts.query = null; - } else { - this.query(URI.parseQuery(this._parts.query, this._parts.escapeQuerySpace)); - } - this.build(!build); - } - return this; - }; - p.normalizeFragment = function(build) { - if (!this._parts.fragment) { - this._parts.fragment = null; - this.build(!build); - } - return this; - }; - p.normalizeSearch = p.normalizeQuery; - p.normalizeHash = p.normalizeFragment; - p.iso8859 = function() { - var e = URI.encode; - var d = URI.decode; - URI.encode = escape; - URI.decode = decodeURIComponent; - try { - this.normalize(); - } finally { - URI.encode = e; - URI.decode = d; - } - return this; - }; - p.unicode = function() { - var e = URI.encode; - var d = URI.decode; - URI.encode = strictEncodeURIComponent; - URI.decode = unescape; - try { - this.normalize(); - } finally { - URI.encode = e; - URI.decode = d; - } - return this; - }; - p.readable = function() { - var uri = this.clone(); - uri.username("").password("").normalize(); - var t = ""; - if (uri._parts.protocol) { - t += uri._parts.protocol + "://"; - } - if (uri._parts.hostname) { - if (uri.is("punycode") && punycode) { - t += punycode.toUnicode(uri._parts.hostname); - if (uri._parts.port) { - t += ":" + uri._parts.port; - } - } else { - t += uri.host(); - } - } - if (uri._parts.hostname && uri._parts.path && uri._parts.path.charAt(0) !== "/") { - t += "/"; - } - t += uri.path(true); - if (uri._parts.query) { - var q3 = ""; - for (var i = 0, qp = uri._parts.query.split("&"), l = qp.length; i < l; i++) { - var kv = (qp[i] || "").split("="); - q3 += "&" + URI.decodeQuery(kv[0], this._parts.escapeQuerySpace).replace(/&/g, "%26"); - if (kv[1] !== void 0) { - q3 += "=" + URI.decodeQuery(kv[1], this._parts.escapeQuerySpace).replace(/&/g, "%26"); - } - } - t += "?" + q3.substring(1); - } - t += URI.decodeQuery(uri.hash(), true); - return t; - }; - p.absoluteTo = function(base) { - var resolved = this.clone(); - var properties = ["protocol", "username", "password", "hostname", "port"]; - var basedir, i, p2; - if (this._parts.urn) { - throw new Error("URNs do not have any generally defined hierarchical components"); - } - if (!(base instanceof URI)) { - base = new URI(base); - } - if (resolved._parts.protocol) { - return resolved; - } else { - resolved._parts.protocol = base._parts.protocol; - } - if (this._parts.hostname) { - return resolved; - } - for (i = 0; p2 = properties[i]; i++) { - resolved._parts[p2] = base._parts[p2]; - } - if (!resolved._parts.path) { - resolved._parts.path = base._parts.path; - if (!resolved._parts.query) { - resolved._parts.query = base._parts.query; - } - } else { - if (resolved._parts.path.substring(-2) === "..") { - resolved._parts.path += "/"; - } - if (resolved.path().charAt(0) !== "/") { - basedir = base.directory(); - basedir = basedir ? basedir : base.path().indexOf("/") === 0 ? "/" : ""; - resolved._parts.path = (basedir ? basedir + "/" : "") + resolved._parts.path; - resolved.normalizePath(); - } - } - resolved.build(); - return resolved; - }; - p.relativeTo = function(base) { - var relative = this.clone().normalize(); - var relativeParts, baseParts, common, relativePath, basePath; - if (relative._parts.urn) { - throw new Error("URNs do not have any generally defined hierarchical components"); - } - base = new URI(base).normalize(); - relativeParts = relative._parts; - baseParts = base._parts; - relativePath = relative.path(); - basePath = base.path(); - if (relativePath.charAt(0) !== "/") { - throw new Error("URI is already relative"); - } - if (basePath.charAt(0) !== "/") { - throw new Error("Cannot calculate a URI relative to another relative URI"); - } - if (relativeParts.protocol === baseParts.protocol) { - relativeParts.protocol = null; - } - if (relativeParts.username !== baseParts.username || relativeParts.password !== baseParts.password) { - return relative.build(); - } - if (relativeParts.protocol !== null || relativeParts.username !== null || relativeParts.password !== null) { - return relative.build(); - } - if (relativeParts.hostname === baseParts.hostname && relativeParts.port === baseParts.port) { - relativeParts.hostname = null; - relativeParts.port = null; - } else { - return relative.build(); - } - if (relativePath === basePath) { - relativeParts.path = ""; - return relative.build(); - } - common = URI.commonPath(relativePath, basePath); - if (!common) { - return relative.build(); - } - var parents = baseParts.path.substring(common.length).replace(/[^\/]*$/, "").replace(/.*?\//g, "../"); - relativeParts.path = parents + relativeParts.path.substring(common.length) || "./"; - return relative.build(); - }; - p.equals = function(uri) { - var one = this.clone(); - var two = new URI(uri); - var one_map = {}; - var two_map = {}; - var checked = {}; - var one_query, two_query, key; - one.normalize(); - two.normalize(); - if (one.toString() === two.toString()) { - return true; - } - one_query = one.query(); - two_query = two.query(); - one.query(""); - two.query(""); - if (one.toString() !== two.toString()) { - return false; - } - if (one_query.length !== two_query.length) { - return false; - } - one_map = URI.parseQuery(one_query, this._parts.escapeQuerySpace); - two_map = URI.parseQuery(two_query, this._parts.escapeQuerySpace); - for (key in one_map) { - if (hasOwn.call(one_map, key)) { - if (!isArray(one_map[key])) { - if (one_map[key] !== two_map[key]) { - return false; - } - } else if (!arraysEqual(one_map[key], two_map[key])) { - return false; - } - checked[key] = true; - } - } - for (key in two_map) { - if (hasOwn.call(two_map, key)) { - if (!checked[key]) { - return false; - } - } - } - return true; - }; - p.preventInvalidHostname = function(v7) { - this._parts.preventInvalidHostname = !!v7; - return this; - }; - p.duplicateQueryParameters = function(v7) { - this._parts.duplicateQueryParameters = !!v7; - return this; - }; - p.escapeQuerySpace = function(v7) { - this._parts.escapeQuerySpace = !!v7; - return this; - }; - return URI; - }); - } -}); - -// node_modules/dompurify/dist/purify.js -var require_purify = __commonJS({ - "node_modules/dompurify/dist/purify.js"(exports2, module2) { - /*! @license DOMPurify 2.4.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.5/LICENSE */ - (function(global2, factory) { - typeof exports2 === "object" && typeof module2 !== "undefined" ? module2.exports = factory() : typeof define === "function" && define.amd ? define(factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, global2.DOMPurify = factory()); - })(exports2, function() { - "use strict"; - function _typeof(obj) { - "@babel/helpers - typeof"; - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) { - return typeof obj2; - } : function(obj2) { - return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2; - }, _typeof(obj); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf2(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() { - })); - return true; - } catch (e) { - return false; - } - } - function _construct(Parent, args, Class) { - if (_isNativeReflectConstruct()) { - _construct = Reflect.construct; - } else { - _construct = function _construct2(Parent2, args2, Class2) { - var a3 = [null]; - a3.push.apply(a3, args2); - var Constructor = Function.bind.apply(Parent2, a3); - var instance = new Constructor(); - if (Class2) - _setPrototypeOf(instance, Class2.prototype); - return instance; - }; - } - return _construct.apply(null, arguments); - } - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); - } - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) - return _arrayLikeToArray(arr); - } - function _iterableToArray(iter) { - if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) - return Array.from(iter); - } - function _unsupportedIterableToArray(o, minLen) { - if (!o) - return; - if (typeof o === "string") - return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) - n = o.constructor.name; - if (n === "Map" || n === "Set") - return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) - return _arrayLikeToArray(o, minLen); - } - function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) - len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) - arr2[i] = arr[i]; - return arr2; - } - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); - } - var hasOwnProperty = Object.hasOwnProperty, setPrototypeOf = Object.setPrototypeOf, isFrozen = Object.isFrozen, getPrototypeOf = Object.getPrototypeOf, getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - var freeze = Object.freeze, seal = Object.seal, create = Object.create; - var _ref = typeof Reflect !== "undefined" && Reflect, apply = _ref.apply, construct = _ref.construct; - if (!apply) { - apply = function apply2(fun, thisValue, args) { - return fun.apply(thisValue, args); - }; - } - if (!freeze) { - freeze = function freeze2(x) { - return x; - }; - } - if (!seal) { - seal = function seal2(x) { - return x; - }; - } - if (!construct) { - construct = function construct2(Func, args) { - return _construct(Func, _toConsumableArray(args)); - }; - } - var arrayForEach = unapply(Array.prototype.forEach); - var arrayPop = unapply(Array.prototype.pop); - var arrayPush = unapply(Array.prototype.push); - var stringToLowerCase = unapply(String.prototype.toLowerCase); - var stringToString = unapply(String.prototype.toString); - var stringMatch = unapply(String.prototype.match); - var stringReplace = unapply(String.prototype.replace); - var stringIndexOf = unapply(String.prototype.indexOf); - var stringTrim = unapply(String.prototype.trim); - var regExpTest = unapply(RegExp.prototype.test); - var typeErrorCreate = unconstruct(TypeError); - function unapply(func) { - return function(thisArg) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - return apply(func, thisArg, args); - }; - } - function unconstruct(func) { - return function() { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - return construct(func, args); - }; - } - function addToSet(set2, array, transformCaseFunc) { - transformCaseFunc = transformCaseFunc ? transformCaseFunc : stringToLowerCase; - if (setPrototypeOf) { - setPrototypeOf(set2, null); - } - var l = array.length; - while (l--) { - var element = array[l]; - if (typeof element === "string") { - var lcElement = transformCaseFunc(element); - if (lcElement !== element) { - if (!isFrozen(array)) { - array[l] = lcElement; - } - element = lcElement; - } - } - set2[element] = true; - } - return set2; - } - function clone2(object2) { - var newObject = create(null); - var property; - for (property in object2) { - if (apply(hasOwnProperty, object2, [property]) === true) { - newObject[property] = object2[property]; - } - } - return newObject; - } - function lookupGetter(object2, prop) { - while (object2 !== null) { - var desc = getOwnPropertyDescriptor(object2, prop); - if (desc) { - if (desc.get) { - return unapply(desc.get); - } - if (typeof desc.value === "function") { - return unapply(desc.value); - } - } - object2 = getPrototypeOf(object2); - } - function fallbackValue(element) { - console.warn("fallback value for", element); - return null; - } - return fallbackValue; - } - var html$1 = freeze(["a", "abbr", "acronym", "address", "area", "article", "aside", "audio", "b", "bdi", "bdo", "big", "blink", "blockquote", "body", "br", "button", "canvas", "caption", "center", "cite", "code", "col", "colgroup", "content", "data", "datalist", "dd", "decorator", "del", "details", "dfn", "dialog", "dir", "div", "dl", "dt", "element", "em", "fieldset", "figcaption", "figure", "font", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "head", "header", "hgroup", "hr", "html", "i", "img", "input", "ins", "kbd", "label", "legend", "li", "main", "map", "mark", "marquee", "menu", "menuitem", "meter", "nav", "nobr", "ol", "optgroup", "option", "output", "p", "picture", "pre", "progress", "q", "rp", "rt", "ruby", "s", "samp", "section", "select", "shadow", "small", "source", "spacer", "span", "strike", "strong", "style", "sub", "summary", "sup", "table", "tbody", "td", "template", "textarea", "tfoot", "th", "thead", "time", "tr", "track", "tt", "u", "ul", "var", "video", "wbr"]); - var svg$1 = freeze(["svg", "a", "altglyph", "altglyphdef", "altglyphitem", "animatecolor", "animatemotion", "animatetransform", "circle", "clippath", "defs", "desc", "ellipse", "filter", "font", "g", "glyph", "glyphref", "hkern", "image", "line", "lineargradient", "marker", "mask", "metadata", "mpath", "path", "pattern", "polygon", "polyline", "radialgradient", "rect", "stop", "style", "switch", "symbol", "text", "textpath", "title", "tref", "tspan", "view", "vkern"]); - var svgFilters = freeze(["feBlend", "feColorMatrix", "feComponentTransfer", "feComposite", "feConvolveMatrix", "feDiffuseLighting", "feDisplacementMap", "feDistantLight", "feFlood", "feFuncA", "feFuncB", "feFuncG", "feFuncR", "feGaussianBlur", "feImage", "feMerge", "feMergeNode", "feMorphology", "feOffset", "fePointLight", "feSpecularLighting", "feSpotLight", "feTile", "feTurbulence"]); - var svgDisallowed = freeze(["animate", "color-profile", "cursor", "discard", "fedropshadow", "font-face", "font-face-format", "font-face-name", "font-face-src", "font-face-uri", "foreignobject", "hatch", "hatchpath", "mesh", "meshgradient", "meshpatch", "meshrow", "missing-glyph", "script", "set", "solidcolor", "unknown", "use"]); - var mathMl$1 = freeze(["math", "menclose", "merror", "mfenced", "mfrac", "mglyph", "mi", "mlabeledtr", "mmultiscripts", "mn", "mo", "mover", "mpadded", "mphantom", "mroot", "mrow", "ms", "mspace", "msqrt", "mstyle", "msub", "msup", "msubsup", "mtable", "mtd", "mtext", "mtr", "munder", "munderover"]); - var mathMlDisallowed = freeze(["maction", "maligngroup", "malignmark", "mlongdiv", "mscarries", "mscarry", "msgroup", "mstack", "msline", "msrow", "semantics", "annotation", "annotation-xml", "mprescripts", "none"]); - var text = freeze(["#text"]); - var html = freeze(["accept", "action", "align", "alt", "autocapitalize", "autocomplete", "autopictureinpicture", "autoplay", "background", "bgcolor", "border", "capture", "cellpadding", "cellspacing", "checked", "cite", "class", "clear", "color", "cols", "colspan", "controls", "controlslist", "coords", "crossorigin", "datetime", "decoding", "default", "dir", "disabled", "disablepictureinpicture", "disableremoteplayback", "download", "draggable", "enctype", "enterkeyhint", "face", "for", "headers", "height", "hidden", "high", "href", "hreflang", "id", "inputmode", "integrity", "ismap", "kind", "label", "lang", "list", "loading", "loop", "low", "max", "maxlength", "media", "method", "min", "minlength", "multiple", "muted", "name", "nonce", "noshade", "novalidate", "nowrap", "open", "optimum", "pattern", "placeholder", "playsinline", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "rev", "reversed", "role", "rows", "rowspan", "spellcheck", "scope", "selected", "shape", "size", "sizes", "span", "srclang", "start", "src", "srcset", "step", "style", "summary", "tabindex", "title", "translate", "type", "usemap", "valign", "value", "width", "xmlns", "slot"]); - var svg = freeze(["accent-height", "accumulate", "additive", "alignment-baseline", "ascent", "attributename", "attributetype", "azimuth", "basefrequency", "baseline-shift", "begin", "bias", "by", "class", "clip", "clippathunits", "clip-path", "clip-rule", "color", "color-interpolation", "color-interpolation-filters", "color-profile", "color-rendering", "cx", "cy", "d", "dx", "dy", "diffuseconstant", "direction", "display", "divisor", "dur", "edgemode", "elevation", "end", "fill", "fill-opacity", "fill-rule", "filter", "filterunits", "flood-color", "flood-opacity", "font-family", "font-size", "font-size-adjust", "font-stretch", "font-style", "font-variant", "font-weight", "fx", "fy", "g1", "g2", "glyph-name", "glyphref", "gradientunits", "gradienttransform", "height", "href", "id", "image-rendering", "in", "in2", "k", "k1", "k2", "k3", "k4", "kerning", "keypoints", "keysplines", "keytimes", "lang", "lengthadjust", "letter-spacing", "kernelmatrix", "kernelunitlength", "lighting-color", "local", "marker-end", "marker-mid", "marker-start", "markerheight", "markerunits", "markerwidth", "maskcontentunits", "maskunits", "max", "mask", "media", "method", "mode", "min", "name", "numoctaves", "offset", "operator", "opacity", "order", "orient", "orientation", "origin", "overflow", "paint-order", "path", "pathlength", "patterncontentunits", "patterntransform", "patternunits", "points", "preservealpha", "preserveaspectratio", "primitiveunits", "r", "rx", "ry", "radius", "refx", "refy", "repeatcount", "repeatdur", "restart", "result", "rotate", "scale", "seed", "shape-rendering", "specularconstant", "specularexponent", "spreadmethod", "startoffset", "stddeviation", "stitchtiles", "stop-color", "stop-opacity", "stroke-dasharray", "stroke-dashoffset", "stroke-linecap", "stroke-linejoin", "stroke-miterlimit", "stroke-opacity", "stroke", "stroke-width", "style", "surfacescale", "systemlanguage", "tabindex", "targetx", "targety", "transform", "transform-origin", "text-anchor", "text-decoration", "text-rendering", "textlength", "type", "u1", "u2", "unicode", "values", "viewbox", "visibility", "version", "vert-adv-y", "vert-origin-x", "vert-origin-y", "width", "word-spacing", "wrap", "writing-mode", "xchannelselector", "ychannelselector", "x", "x1", "x2", "xmlns", "y", "y1", "y2", "z", "zoomandpan"]); - var mathMl = freeze(["accent", "accentunder", "align", "bevelled", "close", "columnsalign", "columnlines", "columnspan", "denomalign", "depth", "dir", "display", "displaystyle", "encoding", "fence", "frame", "height", "href", "id", "largeop", "length", "linethickness", "lspace", "lquote", "mathbackground", "mathcolor", "mathsize", "mathvariant", "maxsize", "minsize", "movablelimits", "notation", "numalign", "open", "rowalign", "rowlines", "rowspacing", "rowspan", "rspace", "rquote", "scriptlevel", "scriptminsize", "scriptsizemultiplier", "selection", "separator", "separators", "stretchy", "subscriptshift", "supscriptshift", "symmetric", "voffset", "width", "xmlns"]); - var xml = freeze(["xlink:href", "xml:id", "xlink:title", "xml:space", "xmlns:xlink"]); - var MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); - var ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm); - var TMPLIT_EXPR = seal(/\${[\w\W]*}/gm); - var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); - var ARIA_ATTR = seal(/^aria-[\-\w]+$/); - var IS_ALLOWED_URI = seal( - /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i - ); - var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i); - var ATTR_WHITESPACE = seal( - /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g - ); - var DOCTYPE_NAME = seal(/^html$/i); - var getGlobal = function getGlobal2() { - return typeof window === "undefined" ? null : window; - }; - var _createTrustedTypesPolicy = function _createTrustedTypesPolicy2(trustedTypes, document2) { - if (_typeof(trustedTypes) !== "object" || typeof trustedTypes.createPolicy !== "function") { - return null; - } - var suffix = null; - var ATTR_NAME = "data-tt-policy-suffix"; - if (document2.currentScript && document2.currentScript.hasAttribute(ATTR_NAME)) { - suffix = document2.currentScript.getAttribute(ATTR_NAME); - } - var policyName = "dompurify" + (suffix ? "#" + suffix : ""); - try { - return trustedTypes.createPolicy(policyName, { - createHTML: function createHTML(html2) { - return html2; - }, - createScriptURL: function createScriptURL(scriptUrl) { - return scriptUrl; - } - }); - } catch (_) { - console.warn("TrustedTypes policy " + policyName + " could not be created."); - return null; - } - }; - function createDOMPurify() { - var window2 = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : getGlobal(); - var DOMPurify2 = function DOMPurify3(root) { - return createDOMPurify(root); - }; - DOMPurify2.version = "2.4.5"; - DOMPurify2.removed = []; - if (!window2 || !window2.document || window2.document.nodeType !== 9) { - DOMPurify2.isSupported = false; - return DOMPurify2; - } - var originalDocument = window2.document; - var document2 = window2.document; - var DocumentFragment2 = window2.DocumentFragment, HTMLTemplateElement = window2.HTMLTemplateElement, Node6 = window2.Node, Element2 = window2.Element, NodeFilter = window2.NodeFilter, _window$NamedNodeMap = window2.NamedNodeMap, NamedNodeMap = _window$NamedNodeMap === void 0 ? window2.NamedNodeMap || window2.MozNamedAttrMap : _window$NamedNodeMap, HTMLFormElement = window2.HTMLFormElement, DOMParser2 = window2.DOMParser, trustedTypes = window2.trustedTypes; - var ElementPrototype = Element2.prototype; - var cloneNode = lookupGetter(ElementPrototype, "cloneNode"); - var getNextSibling = lookupGetter(ElementPrototype, "nextSibling"); - var getChildNodes = lookupGetter(ElementPrototype, "childNodes"); - var getParentNode = lookupGetter(ElementPrototype, "parentNode"); - if (typeof HTMLTemplateElement === "function") { - var template = document2.createElement("template"); - if (template.content && template.content.ownerDocument) { - document2 = template.content.ownerDocument; - } - } - var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument); - var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML("") : ""; - var _document = document2, implementation2 = _document.implementation, createNodeIterator = _document.createNodeIterator, createDocumentFragment = _document.createDocumentFragment, getElementsByTagName = _document.getElementsByTagName; - var importNode = originalDocument.importNode; - var documentMode = {}; - try { - documentMode = clone2(document2).documentMode ? document2.documentMode : {}; - } catch (_) { - } - var hooks = {}; - DOMPurify2.isSupported = typeof getParentNode === "function" && implementation2 && typeof implementation2.createHTMLDocument !== "undefined" && documentMode !== 9; - var MUSTACHE_EXPR$1 = MUSTACHE_EXPR, ERB_EXPR$1 = ERB_EXPR, TMPLIT_EXPR$1 = TMPLIT_EXPR, DATA_ATTR$1 = DATA_ATTR, ARIA_ATTR$1 = ARIA_ATTR, IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA, ATTR_WHITESPACE$1 = ATTR_WHITESPACE; - var IS_ALLOWED_URI$1 = IS_ALLOWED_URI; - var ALLOWED_TAGS = null; - var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text))); - var ALLOWED_ATTR = null; - var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml))); - var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, { - tagNameCheck: { - writable: true, - configurable: false, - enumerable: true, - value: null - }, - attributeNameCheck: { - writable: true, - configurable: false, - enumerable: true, - value: null - }, - allowCustomizedBuiltInElements: { - writable: true, - configurable: false, - enumerable: true, - value: false - } - })); - var FORBID_TAGS = null; - var FORBID_ATTR = null; - var ALLOW_ARIA_ATTR = true; - var ALLOW_DATA_ATTR = true; - var ALLOW_UNKNOWN_PROTOCOLS = false; - var ALLOW_SELF_CLOSE_IN_ATTR = true; - var SAFE_FOR_TEMPLATES = false; - var WHOLE_DOCUMENT = false; - var SET_CONFIG = false; - var FORCE_BODY = false; - var RETURN_DOM = false; - var RETURN_DOM_FRAGMENT = false; - var RETURN_TRUSTED_TYPE = false; - var SANITIZE_DOM = true; - var SANITIZE_NAMED_PROPS = false; - var SANITIZE_NAMED_PROPS_PREFIX = "user-content-"; - var KEEP_CONTENT = true; - var IN_PLACE = false; - var USE_PROFILES = {}; - var FORBID_CONTENTS = null; - var DEFAULT_FORBID_CONTENTS = addToSet({}, ["annotation-xml", "audio", "colgroup", "desc", "foreignobject", "head", "iframe", "math", "mi", "mn", "mo", "ms", "mtext", "noembed", "noframes", "noscript", "plaintext", "script", "style", "svg", "template", "thead", "title", "video", "xmp"]); - var DATA_URI_TAGS = null; - var DEFAULT_DATA_URI_TAGS = addToSet({}, ["audio", "video", "img", "source", "image", "track"]); - var URI_SAFE_ATTRIBUTES = null; - var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ["alt", "class", "for", "id", "label", "name", "pattern", "placeholder", "role", "summary", "title", "value", "style", "xmlns"]); - var MATHML_NAMESPACE = "http://www.w3.org/1998/Math/MathML"; - var SVG_NAMESPACE = "http://www.w3.org/2000/svg"; - var HTML_NAMESPACE = "http://www.w3.org/1999/xhtml"; - var NAMESPACE = HTML_NAMESPACE; - var IS_EMPTY_INPUT = false; - var ALLOWED_NAMESPACES = null; - var DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString); - var PARSER_MEDIA_TYPE; - var SUPPORTED_PARSER_MEDIA_TYPES = ["application/xhtml+xml", "text/html"]; - var DEFAULT_PARSER_MEDIA_TYPE = "text/html"; - var transformCaseFunc; - var CONFIG = null; - var formElement = document2.createElement("form"); - var isRegexOrFunction = function isRegexOrFunction2(testValue) { - return testValue instanceof RegExp || testValue instanceof Function; - }; - var _parseConfig = function _parseConfig2(cfg) { - if (CONFIG && CONFIG === cfg) { - return; - } - if (!cfg || _typeof(cfg) !== "object") { - cfg = {}; - } - cfg = clone2(cfg); - PARSER_MEDIA_TYPE = SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE; - transformCaseFunc = PARSER_MEDIA_TYPE === "application/xhtml+xml" ? stringToString : stringToLowerCase; - ALLOWED_TAGS = "ALLOWED_TAGS" in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS; - ALLOWED_ATTR = "ALLOWED_ATTR" in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR; - ALLOWED_NAMESPACES = "ALLOWED_NAMESPACES" in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES; - URI_SAFE_ATTRIBUTES = "ADD_URI_SAFE_ATTR" in cfg ? addToSet( - clone2(DEFAULT_URI_SAFE_ATTRIBUTES), - cfg.ADD_URI_SAFE_ATTR, - transformCaseFunc - ) : DEFAULT_URI_SAFE_ATTRIBUTES; - DATA_URI_TAGS = "ADD_DATA_URI_TAGS" in cfg ? addToSet( - clone2(DEFAULT_DATA_URI_TAGS), - cfg.ADD_DATA_URI_TAGS, - transformCaseFunc - ) : DEFAULT_DATA_URI_TAGS; - FORBID_CONTENTS = "FORBID_CONTENTS" in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS; - FORBID_TAGS = "FORBID_TAGS" in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {}; - FORBID_ATTR = "FORBID_ATTR" in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {}; - USE_PROFILES = "USE_PROFILES" in cfg ? cfg.USE_PROFILES : false; - ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; - ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; - ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; - ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; - SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; - WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; - RETURN_DOM = cfg.RETURN_DOM || false; - RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; - RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; - FORCE_BODY = cfg.FORCE_BODY || false; - SANITIZE_DOM = cfg.SANITIZE_DOM !== false; - SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; - KEEP_CONTENT = cfg.KEEP_CONTENT !== false; - IN_PLACE = cfg.IN_PLACE || false; - IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1; - NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE; - CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {}; - if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) { - CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck; - } - if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) { - CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck; - } - if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === "boolean") { - CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements; - } - if (SAFE_FOR_TEMPLATES) { - ALLOW_DATA_ATTR = false; - } - if (RETURN_DOM_FRAGMENT) { - RETURN_DOM = true; - } - if (USE_PROFILES) { - ALLOWED_TAGS = addToSet({}, _toConsumableArray(text)); - ALLOWED_ATTR = []; - if (USE_PROFILES.html === true) { - addToSet(ALLOWED_TAGS, html$1); - addToSet(ALLOWED_ATTR, html); - } - if (USE_PROFILES.svg === true) { - addToSet(ALLOWED_TAGS, svg$1); - addToSet(ALLOWED_ATTR, svg); - addToSet(ALLOWED_ATTR, xml); - } - if (USE_PROFILES.svgFilters === true) { - addToSet(ALLOWED_TAGS, svgFilters); - addToSet(ALLOWED_ATTR, svg); - addToSet(ALLOWED_ATTR, xml); - } - if (USE_PROFILES.mathMl === true) { - addToSet(ALLOWED_TAGS, mathMl$1); - addToSet(ALLOWED_ATTR, mathMl); - addToSet(ALLOWED_ATTR, xml); - } - } - if (cfg.ADD_TAGS) { - if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) { - ALLOWED_TAGS = clone2(ALLOWED_TAGS); - } - addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc); - } - if (cfg.ADD_ATTR) { - if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) { - ALLOWED_ATTR = clone2(ALLOWED_ATTR); - } - addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc); - } - if (cfg.ADD_URI_SAFE_ATTR) { - addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc); - } - if (cfg.FORBID_CONTENTS) { - if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) { - FORBID_CONTENTS = clone2(FORBID_CONTENTS); - } - addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc); - } - if (KEEP_CONTENT) { - ALLOWED_TAGS["#text"] = true; - } - if (WHOLE_DOCUMENT) { - addToSet(ALLOWED_TAGS, ["html", "head", "body"]); - } - if (ALLOWED_TAGS.table) { - addToSet(ALLOWED_TAGS, ["tbody"]); - delete FORBID_TAGS.tbody; - } - if (freeze) { - freeze(cfg); - } - CONFIG = cfg; - }; - var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ["mi", "mo", "mn", "ms", "mtext"]); - var HTML_INTEGRATION_POINTS = addToSet({}, ["foreignobject", "desc", "title", "annotation-xml"]); - var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ["title", "style", "font", "a", "script"]); - var ALL_SVG_TAGS = addToSet({}, svg$1); - addToSet(ALL_SVG_TAGS, svgFilters); - addToSet(ALL_SVG_TAGS, svgDisallowed); - var ALL_MATHML_TAGS = addToSet({}, mathMl$1); - addToSet(ALL_MATHML_TAGS, mathMlDisallowed); - var _checkValidNamespace = function _checkValidNamespace2(element) { - var parent = getParentNode(element); - if (!parent || !parent.tagName) { - parent = { - namespaceURI: NAMESPACE, - tagName: "template" - }; - } - var tagName = stringToLowerCase(element.tagName); - var parentTagName = stringToLowerCase(parent.tagName); - if (!ALLOWED_NAMESPACES[element.namespaceURI]) { - return false; - } - if (element.namespaceURI === SVG_NAMESPACE) { - if (parent.namespaceURI === HTML_NAMESPACE) { - return tagName === "svg"; - } - if (parent.namespaceURI === MATHML_NAMESPACE) { - return tagName === "svg" && (parentTagName === "annotation-xml" || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]); - } - return Boolean(ALL_SVG_TAGS[tagName]); - } - if (element.namespaceURI === MATHML_NAMESPACE) { - if (parent.namespaceURI === HTML_NAMESPACE) { - return tagName === "math"; - } - if (parent.namespaceURI === SVG_NAMESPACE) { - return tagName === "math" && HTML_INTEGRATION_POINTS[parentTagName]; - } - return Boolean(ALL_MATHML_TAGS[tagName]); - } - if (element.namespaceURI === HTML_NAMESPACE) { - if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) { - return false; - } - if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) { - return false; - } - return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]); - } - if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && ALLOWED_NAMESPACES[element.namespaceURI]) { - return true; - } - return false; - }; - var _forceRemove = function _forceRemove2(node) { - arrayPush(DOMPurify2.removed, { - element: node - }); - try { - node.parentNode.removeChild(node); - } catch (_) { - try { - node.outerHTML = emptyHTML; - } catch (_2) { - node.remove(); - } - } - }; - var _removeAttribute = function _removeAttribute2(name, node) { - try { - arrayPush(DOMPurify2.removed, { - attribute: node.getAttributeNode(name), - from: node - }); - } catch (_) { - arrayPush(DOMPurify2.removed, { - attribute: null, - from: node - }); - } - node.removeAttribute(name); - if (name === "is" && !ALLOWED_ATTR[name]) { - if (RETURN_DOM || RETURN_DOM_FRAGMENT) { - try { - _forceRemove(node); - } catch (_) { - } - } else { - try { - node.setAttribute(name, ""); - } catch (_) { - } - } - } - }; - var _initDocument = function _initDocument2(dirty) { - var doc; - var leadingWhitespace; - if (FORCE_BODY) { - dirty = "" + dirty; - } else { - var matches = stringMatch(dirty, /^[\r\n\t ]+/); - leadingWhitespace = matches && matches[0]; - } - if (PARSER_MEDIA_TYPE === "application/xhtml+xml" && NAMESPACE === HTML_NAMESPACE) { - dirty = '' + dirty + ""; - } - var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty; - if (NAMESPACE === HTML_NAMESPACE) { - try { - doc = new DOMParser2().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE); - } catch (_) { - } - } - if (!doc || !doc.documentElement) { - doc = implementation2.createDocument(NAMESPACE, "template", null); - try { - doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload; - } catch (_) { - } - } - var body = doc.body || doc.documentElement; - if (dirty && leadingWhitespace) { - body.insertBefore(document2.createTextNode(leadingWhitespace), body.childNodes[0] || null); - } - if (NAMESPACE === HTML_NAMESPACE) { - return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? "html" : "body")[0]; - } - return WHOLE_DOCUMENT ? doc.documentElement : body; - }; - var _createIterator = function _createIterator2(root) { - return createNodeIterator.call( - root.ownerDocument || root, - root, - NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, - null, - false - ); - }; - var _isClobbered = function _isClobbered2(elm) { - return elm instanceof HTMLFormElement && (typeof elm.nodeName !== "string" || typeof elm.textContent !== "string" || typeof elm.removeChild !== "function" || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== "function" || typeof elm.setAttribute !== "function" || typeof elm.namespaceURI !== "string" || typeof elm.insertBefore !== "function" || typeof elm.hasChildNodes !== "function"); - }; - var _isNode = function _isNode2(object2) { - return _typeof(Node6) === "object" ? object2 instanceof Node6 : object2 && _typeof(object2) === "object" && typeof object2.nodeType === "number" && typeof object2.nodeName === "string"; - }; - var _executeHook = function _executeHook2(entryPoint, currentNode, data) { - if (!hooks[entryPoint]) { - return; - } - arrayForEach(hooks[entryPoint], function(hook) { - hook.call(DOMPurify2, currentNode, data, CONFIG); - }); - }; - var _sanitizeElements = function _sanitizeElements2(currentNode) { - var content; - _executeHook("beforeSanitizeElements", currentNode, null); - if (_isClobbered(currentNode)) { - _forceRemove(currentNode); - return true; - } - if (regExpTest(/[\u0080-\uFFFF]/, currentNode.nodeName)) { - _forceRemove(currentNode); - return true; - } - var tagName = transformCaseFunc(currentNode.nodeName); - _executeHook("uponSanitizeElement", currentNode, { - tagName, - allowedTags: ALLOWED_TAGS - }); - if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) { - _forceRemove(currentNode); - return true; - } - if (tagName === "select" && regExpTest(/

)u>S+Ol1VA9+UH*3fcfCXJ+5tp##P_%$iX`_9 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 J*6C*Me*liy%M1Vj diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/2/3.jpg deleted file mode 100644 index 732c32f954742a50ed13b6e2411fcd5ee6826c53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14940 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 F{a+$VI>G<| diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/3/0.jpg deleted file mode 100644 index 576ec70e73593bd2838014bb941e5a0af455f10f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9531 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 z 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 diff --git a/debug/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg b/debug/cesium/Assets/Textures/NaturalEarthII/2/3/2.jpg deleted file mode 100644 index 300aa5803058740c23a2f7feacdffc885fbc0d59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11678 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